@aztec/noir-protocol-circuits-types 0.24.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.
Files changed (77) hide show
  1. package/README.md +1 -0
  2. package/dest/index.d.ts +69 -0
  3. package/dest/index.d.ts.map +1 -0
  4. package/dest/index.js +268 -0
  5. package/dest/scripts/generate_ts_from_abi.d.ts +2 -0
  6. package/dest/scripts/generate_ts_from_abi.d.ts.map +1 -0
  7. package/dest/scripts/generate_ts_from_abi.js +180 -0
  8. package/dest/target/private_kernel_init.json +1 -0
  9. package/dest/target/private_kernel_init_simulated.json +1 -0
  10. package/dest/target/private_kernel_inner.json +1 -0
  11. package/dest/target/private_kernel_inner_simulated.json +1 -0
  12. package/dest/target/private_kernel_tail.json +1 -0
  13. package/dest/target/private_kernel_tail_simulated.json +1 -0
  14. package/dest/target/public_kernel_app_logic.json +1 -0
  15. package/dest/target/public_kernel_app_logic_simulated.json +1 -0
  16. package/dest/target/public_kernel_setup.json +1 -0
  17. package/dest/target/public_kernel_setup_simulated.json +1 -0
  18. package/dest/target/rollup_base.json +1 -0
  19. package/dest/target/rollup_base_simulated.json +1 -0
  20. package/dest/target/rollup_merge.json +1 -0
  21. package/dest/target/rollup_root.json +1 -0
  22. package/dest/type_conversion.d.ts +574 -0
  23. package/dest/type_conversion.d.ts.map +1 -0
  24. package/dest/type_conversion.js +1115 -0
  25. package/dest/types/private_kernel_init_types.d.ts +232 -0
  26. package/dest/types/private_kernel_init_types.d.ts.map +1 -0
  27. package/dest/types/private_kernel_init_types.js +3 -0
  28. package/dest/types/private_kernel_inner_types.d.ts +233 -0
  29. package/dest/types/private_kernel_inner_types.d.ts.map +1 -0
  30. package/dest/types/private_kernel_inner_types.js +3 -0
  31. package/dest/types/private_kernel_tail_types.d.ts +182 -0
  32. package/dest/types/private_kernel_tail_types.d.ts.map +1 -0
  33. package/dest/types/private_kernel_tail_types.js +3 -0
  34. package/dest/types/public_kernel_app_logic_types.d.ts +212 -0
  35. package/dest/types/public_kernel_app_logic_types.d.ts.map +1 -0
  36. package/dest/types/public_kernel_app_logic_types.js +3 -0
  37. package/dest/types/public_kernel_setup_types.d.ts +212 -0
  38. package/dest/types/public_kernel_setup_types.d.ts.map +1 -0
  39. package/dest/types/public_kernel_setup_types.js +3 -0
  40. package/dest/types/rollup_base_types.d.ts +220 -0
  41. package/dest/types/rollup_base_types.d.ts.map +1 -0
  42. package/dest/types/rollup_base_types.js +3 -0
  43. package/dest/types/rollup_merge_types.d.ts +71 -0
  44. package/dest/types/rollup_merge_types.d.ts.map +1 -0
  45. package/dest/types/rollup_merge_types.js +3 -0
  46. package/dest/types/rollup_root_types.d.ts +92 -0
  47. package/dest/types/rollup_root_types.d.ts.map +1 -0
  48. package/dest/types/rollup_root_types.js +3 -0
  49. package/package.json +60 -0
  50. package/src/fixtures/nested-call-private-kernel-init.hex +1 -0
  51. package/src/fixtures/nested-call-private-kernel-inner.hex +1 -0
  52. package/src/fixtures/nested-call-private-kernel-ordering.hex +1 -0
  53. package/src/index.ts +438 -0
  54. package/src/scripts/generate_ts_from_abi.ts +233 -0
  55. package/src/target/private_kernel_init.json +1 -0
  56. package/src/target/private_kernel_init_simulated.json +1 -0
  57. package/src/target/private_kernel_inner.json +1 -0
  58. package/src/target/private_kernel_inner_simulated.json +1 -0
  59. package/src/target/private_kernel_tail.json +1 -0
  60. package/src/target/private_kernel_tail_simulated.json +1 -0
  61. package/src/target/public_kernel_app_logic.json +1 -0
  62. package/src/target/public_kernel_app_logic_simulated.json +1 -0
  63. package/src/target/public_kernel_setup.json +1 -0
  64. package/src/target/public_kernel_setup_simulated.json +1 -0
  65. package/src/target/rollup_base.json +1 -0
  66. package/src/target/rollup_base_simulated.json +1 -0
  67. package/src/target/rollup_merge.json +1 -0
  68. package/src/target/rollup_root.json +1 -0
  69. package/src/type_conversion.ts +1673 -0
  70. package/src/types/private_kernel_init_types.ts +272 -0
  71. package/src/types/private_kernel_inner_types.ts +273 -0
  72. package/src/types/private_kernel_tail_types.ts +214 -0
  73. package/src/types/public_kernel_app_logic_types.ts +250 -0
  74. package/src/types/public_kernel_setup_types.ts +250 -0
  75. package/src/types/rollup_base_types.ts +259 -0
  76. package/src/types/rollup_merge_types.ts +85 -0
  77. package/src/types/rollup_root_types.ts +109 -0
@@ -0,0 +1 @@
1
+ {"noir_version":"0.23.0+5f5843e35052b9d3599b8ab4f7633db0a225e82f","hash":11527263710271785048,"abi":{"parameters":[{"name":"input","type":{"kind":"struct","path":"private_kernel_lib::private_kernel_init::PrivateKernelInitCircuitPrivateInputs","fields":[{"name":"tx_request","type":{"kind":"struct","path":"private_kernel_lib::types::transaction::request::TxRequest","fields":[{"name":"origin","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"args_hash","type":{"kind":"field"}},{"name":"tx_context","type":{"kind":"struct","path":"private_kernel_lib::types::transaction::context::TxContext","fields":[{"name":"is_fee_payment_tx","type":{"kind":"boolean"}},{"name":"is_rebate_payment_tx","type":{"kind":"boolean"}},{"name":"is_contract_deployment_tx","type":{"kind":"boolean"}},{"name":"contract_deployment_data","type":{"kind":"struct","path":"private_kernel_lib::types::contrakt::deployment_data::ContractDeploymentData","fields":[{"name":"public_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_point::GrumpkinPoint","fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}]}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"contract_class_id","type":{"kind":"struct","path":"private_kernel_lib::types::contract_class::ContractClassId","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"contract_address_salt","type":{"kind":"field"}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}},{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}}]}},{"name":"function_data","type":{"kind":"struct","path":"private_kernel_lib::types::abis::function_data::FunctionData","fields":[{"name":"selector","type":{"kind":"struct","path":"private_kernel_lib::types::abis::function_selector::FunctionSelector","fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"is_internal","type":{"kind":"boolean"}},{"name":"is_private","type":{"kind":"boolean"}},{"name":"is_constructor","type":{"kind":"boolean"}}]}}]}},{"name":"private_call","type":{"kind":"struct","path":"private_kernel_lib::types::abis::private_kernel::private_call_data::PrivateCallData","fields":[{"name":"call_stack_item","type":{"kind":"struct","path":"private_kernel_lib::types::abis::private_call_stack_item::PrivateCallStackItem","fields":[{"name":"contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"function_data","type":{"kind":"struct","path":"private_kernel_lib::types::abis::function_data::FunctionData","fields":[{"name":"selector","type":{"kind":"struct","path":"private_kernel_lib::types::abis::function_selector::FunctionSelector","fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"is_internal","type":{"kind":"boolean"}},{"name":"is_private","type":{"kind":"boolean"}},{"name":"is_constructor","type":{"kind":"boolean"}}]}},{"name":"public_inputs","type":{"kind":"struct","path":"private_kernel_lib::types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs","fields":[{"name":"call_context","type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_context::CallContext","fields":[{"name":"msg_sender","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"storage_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"function_selector","type":{"kind":"struct","path":"private_kernel_lib::types::abis::function_selector::FunctionSelector","fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"is_contract_deployment","type":{"kind":"boolean"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"args_hash","type":{"kind":"field"}},{"name":"return_values","type":{"kind":"array","length":4,"type":{"kind":"field"}}},{"name":"max_non_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"read_requests","type":{"kind":"array","length":32,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffect","fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"nullifier_key_validation_requests","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest","fields":[{"name":"public_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_point::GrumpkinPoint","fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}]}},{"name":"secret_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_private_key::GrumpkinPrivateKey","fields":[{"name":"high","type":{"kind":"field"}},{"name":"low","type":{"kind":"field"}}]}}]}}},{"name":"new_commitments","type":{"kind":"array","length":16,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffect","fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash","fields":[{"name":"value","type":{"kind":"field"}},{"name":"note_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"private_call_stack_hashes","type":{"kind":"array","length":4,"type":{"kind":"field"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":4,"type":{"kind":"field"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"encrypted_logs_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"unencrypted_logs_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"encrypted_log_preimages_length","type":{"kind":"field"}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"kind":"struct","path":"private_kernel_lib::types::header::Header","fields":[{"name":"last_archive","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"body_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"state","type":{"kind":"struct","path":"private_kernel_lib::types::state_reference::StateReference","fields":[{"name":"l1_to_l2_message_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"partial","type":{"kind":"struct","path":"private_kernel_lib::types::partial_state_reference::PartialStateReference","fields":[{"name":"note_hash_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"nullifier_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"contract_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"public_data_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}}]}}]}},{"name":"global_variables","type":{"kind":"struct","path":"private_kernel_lib::types::abis::global_variables::GlobalVariables","fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"field"}},{"name":"coinbase","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"fee_recipient","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}}]}},{"name":"contract_deployment_data","type":{"kind":"struct","path":"private_kernel_lib::types::contrakt::deployment_data::ContractDeploymentData","fields":[{"name":"public_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_point::GrumpkinPoint","fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}]}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"contract_class_id","type":{"kind":"struct","path":"private_kernel_lib::types::contract_class::ContractClassId","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"contract_address_salt","type":{"kind":"field"}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}},{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}}]}}]}},{"name":"private_call_stack","type":{"kind":"array","length":4,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallRequest","fields":[{"name":"hash","type":{"kind":"field"}},{"name":"caller_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"caller_context","type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallerContext","fields":[{"name":"msg_sender","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"storage_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","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}}]}}},{"name":"public_call_stack","type":{"kind":"array","length":4,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallRequest","fields":[{"name":"hash","type":{"kind":"field"}},{"name":"caller_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"caller_context","type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallerContext","fields":[{"name":"msg_sender","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"storage_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","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}}]}}},{"name":"proof","type":{"kind":"struct","path":"private_kernel_lib::types::mocked::Proof","fields":[]}},{"name":"vk","type":{"kind":"struct","path":"private_kernel_lib::types::mocked::VerificationKey","fields":[]}},{"name":"salted_initialization_hash","type":{"kind":"struct","path":"private_kernel_lib::types::address::SaltedInitializationHash","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"public_keys_hash","type":{"kind":"struct","path":"private_kernel_lib::types::address::PublicKeysHash","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"contract_class_artifact_hash","type":{"kind":"field"}},{"name":"contract_class_public_bytecode_commitment","type":{"kind":"field"}},{"name":"function_leaf_membership_witness","type":{"kind":"struct","path":"private_kernel_lib::types::abis::membership_witness::FunctionLeafMembershipWitness","fields":[{"name":"leaf_index","type":{"kind":"field"}},{"name":"sibling_path","type":{"kind":"array","length":5,"type":{"kind":"field"}}}]}},{"name":"read_request_membership_witnesses","type":{"kind":"array","length":32,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::membership_witness::ReadRequestMembershipWitness","fields":[{"name":"leaf_index","type":{"kind":"field"}},{"name":"sibling_path","type":{"kind":"array","length":32,"type":{"kind":"field"}}},{"name":"is_transient","type":{"kind":"boolean"}},{"name":"hint_to_commitment","type":{"kind":"field"}}]}}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"acir_hash","type":{"kind":"field"}}]}}]},"visibility":"private"}],"param_witnesses":{"input":[{"start":0,"end":1409}]},"return_type":{"abi_type":{"kind":"struct","path":"private_kernel_lib::types::abis::kernel_circuit_public_inputs::PrivateKernelInnerCircuitPublicInputs","fields":[{"name":"aggregation_object","type":{"kind":"struct","path":"private_kernel_lib::types::mocked::AggregationObject","fields":[]}},{"name":"max_non_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end","type":{"kind":"struct","path":"private_kernel_lib::types::abis::combined_accumulated_data::CombinedAccumulatedData","fields":[{"name":"read_requests","type":{"kind":"array","length":128,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffect","fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"nullifier_key_validation_requests","type":{"kind":"array","length":4,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::nullifier_key_validation_request::NullifierKeyValidationRequestContext","fields":[{"name":"public_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_point::GrumpkinPoint","fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}]}},{"name":"secret_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_private_key::GrumpkinPrivateKey","fields":[{"name":"high","type":{"kind":"field"}},{"name":"low","type":{"kind":"field"}}]}},{"name":"contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}}},{"name":"new_commitments","type":{"kind":"array","length":64,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffect","fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"new_nullifiers","type":{"kind":"array","length":64,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash","fields":[{"name":"value","type":{"kind":"field"}},{"name":"note_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}]}}},{"name":"private_call_stack","type":{"kind":"array","length":8,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallRequest","fields":[{"name":"hash","type":{"kind":"field"}},{"name":"caller_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"caller_context","type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallerContext","fields":[{"name":"msg_sender","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"storage_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","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}}]}}},{"name":"public_call_stack","type":{"kind":"array","length":8,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallRequest","fields":[{"name":"hash","type":{"kind":"field"}},{"name":"caller_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"caller_context","type":{"kind":"struct","path":"private_kernel_lib::types::abis::call_request::CallerContext","fields":[{"name":"msg_sender","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"storage_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","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}}]}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"encrypted_logs_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"unencrypted_logs_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"encrypted_log_preimages_length","type":{"kind":"field"}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"new_contracts","type":{"kind":"array","length":1,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::new_contract_data::NewContractData","fields":[{"name":"contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"contract_class_id","type":{"kind":"struct","path":"private_kernel_lib::types::contract_class::ContractClassId","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}}},{"name":"public_data_update_requests","type":{"kind":"array","length":16,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::public_data_update_request::PublicDataUpdateRequest","fields":[{"name":"leaf_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}]}}},{"name":"public_data_reads","type":{"kind":"array","length":16,"type":{"kind":"struct","path":"private_kernel_lib::types::abis::public_data_read::PublicDataRead","fields":[{"name":"leaf_slot","type":{"kind":"field"}},{"name":"value","type":{"kind":"field"}}]}}}]}},{"name":"constants","type":{"kind":"struct","path":"private_kernel_lib::types::abis::combined_constant_data::CombinedConstantData","fields":[{"name":"historical_header","type":{"kind":"struct","path":"private_kernel_lib::types::header::Header","fields":[{"name":"last_archive","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"body_hash","type":{"kind":"array","length":2,"type":{"kind":"field"}}},{"name":"state","type":{"kind":"struct","path":"private_kernel_lib::types::state_reference::StateReference","fields":[{"name":"l1_to_l2_message_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"partial","type":{"kind":"struct","path":"private_kernel_lib::types::partial_state_reference::PartialStateReference","fields":[{"name":"note_hash_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"nullifier_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"contract_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}},{"name":"public_data_tree","type":{"kind":"struct","path":"private_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot","fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}]}}]}}]}},{"name":"global_variables","type":{"kind":"struct","path":"private_kernel_lib::types::abis::global_variables::GlobalVariables","fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"field"}},{"name":"coinbase","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"fee_recipient","type":{"kind":"struct","path":"private_kernel_lib::types::address::AztecAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}}]}},{"name":"tx_context","type":{"kind":"struct","path":"private_kernel_lib::types::transaction::context::TxContext","fields":[{"name":"is_fee_payment_tx","type":{"kind":"boolean"}},{"name":"is_rebate_payment_tx","type":{"kind":"boolean"}},{"name":"is_contract_deployment_tx","type":{"kind":"boolean"}},{"name":"contract_deployment_data","type":{"kind":"struct","path":"private_kernel_lib::types::contrakt::deployment_data::ContractDeploymentData","fields":[{"name":"public_key","type":{"kind":"struct","path":"private_kernel_lib::types::grumpkin_point::GrumpkinPoint","fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}]}},{"name":"initialization_hash","type":{"kind":"field"}},{"name":"contract_class_id","type":{"kind":"struct","path":"private_kernel_lib::types::contract_class::ContractClassId","fields":[{"name":"inner","type":{"kind":"field"}}]}},{"name":"contract_address_salt","type":{"kind":"field"}},{"name":"portal_contract_address","type":{"kind":"struct","path":"private_kernel_lib::types::address::EthAddress","fields":[{"name":"inner","type":{"kind":"field"}}]}}]}},{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}}]}}]}},{"name":"is_private","type":{"kind":"boolean"}}]},"visibility":"public"},"return_witnesses":[2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008]},"bytecode":"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X+z9+t6/1PsNvX+59xt7/0rvN/X+1d5v7v1rvX+991t6/0bv3+z9W71/u/fv9P7d3r/X+/d7/0HvP+z91t5/1PuPe/9J7z/t/We9/7z3X/T+y95/1fuve7+t99/0/tvef9f773v/Q+9/7P1Pvf+597/0/tfe/9b733u/vfd/9P7P3v/VW121vwK9r9j7Sr2v3Psqva/a+2q9r977Gr3fpfc1e79r72v1vnbv6/S+bu9363293tfvfYPeN+x9o9437n2T3jftfbPeN+99i9637H2r3u/e+9a9b9P7PXrftvd79r5d7/fqffve7937Dr3v2PtOvd+n951736X3XXufem+99966t+lte7vevvfRO/R+39536/1+ve/e+/1736P3PXvfq/e9e9+n9wf0vm/vD+x9v94f1Pv+vT+49wN6f0jvB/b+0N4P6v1hvR/c+8N7P6T3R/R+aO+P7P2w3g/v/Yjej+z9qN4f1fvRvT+692N6P7Z37J16596ld+3dej+u9+N7P6H3E3s/qffH9H5y74/t/ZTeT+39tN4f1/vpvT++9zN6f0LvZ/b+xN7P6v1JvZ/d+5N7P6f3p/R+bu/n9f7Uq77jHwM3OP+z4dP65+f3/vTeL+j9wt4v6v0ZvT+z94t7f1bvz+79kt6f0/tze7+09+f1/vzeL+v9Bb2/8PxrP+/8a7+8f/6i3l/c+xW9v6T3l/Z+Ze8v6/2q3q/u/eW9v6L3V/b+qt5f3ftren9t76/r/fW9v6H3N/Z+Te9v6v3Nvb+l97f2/rbe3977O3p/Z+/v6v3dvb+n9/f2/r7e39/7B3r/YO8f6v3DvX+k94/2/rHeP977tb1/ovdP9v6p3j/d+2d6/2zvn+v9ut4/3/sXev9i79f3/qXeb+j9y73f2PtXer+p96/2fnPvX+v9673f0vs3ev9m79/q/du9f6f37/b+vd6/3/sPev9h77f2/qPef9z7T3r/ae8/6/3nvf+i91/2/qvef937bb3/pvff9v673n/f+x96/2Pvf+r9z73/pfe/9v633v/e++29/6P3f/b+r97qav3vW+8r9r5S7yv3vkrvq/a+Wu+r975G73fpfc3e79r7Wr2v3fs6va/b+916X6/39XvfoPcNr/aOd+HHzu/CjfrnG/e+Se+b9r5Z75v3vkXvW/a+Ve93733r3rfp/R69b9v7PXvfrvd79b597/fufYfed+x9p97v0/vOve/S+669T7233ntv3dv0tr1db9/76B16v2/vu/V+v9537/3+ve/R+56979X73r3v0/sDet+39wf2vl/vD+p9/94f3PsBvT+k9wN7f2jvB/X+sN4P7v3hvR/S+yN6P7T3R/Z+WO+H935E70f2flTvj+r96N4f3fsxvR/bO/ZOvXPv0rv2br0f1/vxvZ/Q+4m9n9T7Y3o/uffH9n5K76f2flrvj+v99N4f3/sZvT+h9zN7f2LvZ/X+pN7P7v3JvZ/T+1N6P7f383p/au9P6/383p/e+wW9X9j7Rb0/o/dn9n5x78/q/dm9X9L7c3p/bu+X9v683p/f+2W9v6D3F/Z+ee8v6v3FvV/R+0t6f2nvV/b+st6v6v3q3l/e+yt6f2Xvr+r91b2/pvfX9v663l/f+xt6f2Pv1/T+pt7f3Ptben9r72/r/e29v6P3d/b+rt7f3ft7en9v7+/r/f29f6D3D/b+od4/3PtHev9o7x/r/eO9X9v7J3r/ZO+f6v3TvX+m98/2/rner+v9871/ofcv9n5971/q/Ybev9z7jb1/pfebev/q1d6xC5f/5vHN/fOv9f713m/p/Ru9f7P3b/X+7d6/0/t3e/9e79/v/Qe9/7D3W3v/Ue8/7v0nvf+095/1/vPef9H7L3v/Ve+/7v223n/T+297/13vv+/9D73/sfc/9f7n3v/S+197/1vvf+/99t7/0fs/e/9Xb3X1rrv3FXtfqfeVe1/l6uMsV+2fr9b76r2v0ftdel+z97v2vlbva/e+Tu/r9n633tfrff3eN+h9w9436n3j3jfpfdPeN+t989636H3L3rfq/e69b937Nr3fo/dte79n79v1fq/et+/93r3v0PuOve/U+31637n3XXrftfep99Z77617m972PMsVz7O4/tlfeHb0z+HCs/ftn+929Xf88fudf979/Ndc6fzXvH//fI/e9zw/v/X5+b3653v3vk/vD+h9394f2Pt+vT+o9/17f3DvB/T+kN4P7P2hvR/U+8N6P7j3h/d+SO+P6P3Q3h/Z+2G9H977Eb0f2ftRvT+q96N7f3Tvx/R+7AUtsX9OvXPv0rv2br0f1/vxvZ/Q+4m9n9T7Y3o/uffH9n5K76f2flrvj+v99N4f3/sZvT+h9zN7f2LvZ/X+pN7P7v3JvZ/T+1N6P7f3887f26eef37ahe/4+f3zp5//3AvOP194/vmi88/POP/8zPPPF59/ftb552eff77k/PNzzj8/9/zzpeefn3f++fnnny87//yC888vPP98+fnnF51/fvH55yvOP7/k/PNLzz9fef75Zeefrzr/fPX555f3n7d6/Tv++Pzov+vWatEdmONlv13ui/uOX+uyO/DSuuy7vuL5z13+8/K/B1c6f77ShedXPn++8oXn1zp/vvznrc/Pr33+fO0Lf/11zp+vc+H5dc+fr3vh+fXOn6934de//vnz9S/89Tc4f77Bhec3PH++4YXnNz1/vumFX/9m5883u/DX3/z8+eYXnt/i/PkWF57f8vz5lhd+/dueP9/2wvPbnT/f7sLz258/3/7C8zucP9/hwvM7nT/f6cLzO58/3/nC87ueP9/1wvPt/Hm78FyfP+sLz+35s73w3J8/+wvPw/lzuPD8bufPd7vw/O7nz3e/8Pwe58/3uPD8XufP97rw/D7nz/e58Py+58/3vfD8fufP97vw/P7nz/e/8PwB588PuPD8gefPD7zw/EHnzw+68PzB588PvvD8IefPD7nw/KHnzw+98Pxh588Pu/D8EefPj7jw/FHnz4+68PzR58+PvvD8MefPj7nwPJ4/xwvP8/lzvvD8CefPT7jw/Ennz0+68PzJ589PvvD8KefPT7nw/Gnnz0+78Pzp589Pv/D8GefPz7jw/Jnnz8+88PxZ58/PuvD82efPz77w/Dnnz8+58Py558/PvfD8Uy//Z/qF588/f37+hecvOH9+wYXnLzp/ftGF5y8+f37xhecvOX9+yYXnLz1/fumF5y87f37ZhecvP39++YXnrzh/fsWF5688f37lheevPn9+9YXnX3n+/JUXnn/N+fPXXHj+9efPX3/h+WvOn19z4fm3nD9/y4Xn337+/O0Xnn/X+fN3XXj+vefP33vh+WvPn1974fnrzp9fd+H568+fX3/h+RvOn99w4fkbz5/feOH5m86f33Th+ZvPn9984fmfnT//2YXnf37+/OcXnr/t/PltF57/zfnz31x4/o/nz/944fk/nT//04Xn/37+/O8Xnr/9/PntF55f4fx7ost/Xv78iufPV7zw/Grnz1e78Pzq589Xv/D8WufP17rw/Nrnz9e+8Pz658/Xv/D8BufPN7jw/J7nz5f/vPz3G/n8OV94/sLz5xdeeP4N58/fcOH5L5w//8KF5287f37bhefXu+o7Pl/+8/Ln9vzZXnj+8PPnh194/uzz52dfeP6q8+dXXXj+4+fPP37h+VvPn9964fll/11LXfLz8ud3PH++44XnDzx/fuCF5089f37qhecvO39+2YXn33P+/D0Xnr/l/PktF56//fz57Reev/v5YLj85+XP733+fO8Lz+v5c73w/DMu3FKXP3/N+fNrLjx//fnz6y88/9vz57+98PwG13jH58t/Xv7cnz/7C88fef78yAvPn3P+/JxLnl/z/Of+u857fdmzy2/wK1zy7PyH/+8757Jnl59DV7rk2VUv/+UueXb+6tVVLnl2+b121UuenaWpq13y7F3Oz65+ybNrnp9d45Jn73p+9i6XPLvW+dk1L3l27fOzd73k2XXOz651ybPrnp9d+5Jn73Z+dp1Lnl3v/Oy6lzy7/vnZu13y7HJecL1Lnt3w/Oz6lzy70fnZDS55duPzsxte8uwm52c3uuTZTc/PbnzJs5udn93kkmc3Pz+76SXPbnF+drNLnt3y/Ozmlzy71fnZLS559u7nZ7e85Nmtz89udX522d/v25yfXfbn7nn+49P/kzLbZf+5Rb3H6l/3sv87Sv3XuO3517rtJTO85/IZ9sv+U5q6HWCGy37d91qu1/233tuD9L73er2X/SdIdQeQ3jsu13v8t947gfS+z3K96b/13hmk9y7r9V72n2vVXUF6T8v15sv+07vaAHov+2fcfv61XnvJP+P0+hkuQwbKgL5zu17vZWhDOdB37s+/1s9c8u/L4/zsZy95Fs7Pfu6SZ+97fva6S/5+3W39/JdhDfV+q3/d8/x3P/9av3jJXO9/fvb6S57d4/zsly55drmON1zy7F7nZ798ybN7n5+98ZJn9zk/+5VLnn3A+dmbLnl23/OzX73k2Qeen735kmf3Oz/7tUuefdD52a9f8uz+52dvueTZB5+f/cYlzx5wfvablzz7kPOz37rk2QPPz377kmcfen72O5c8e9D52e9e8uzDzs9+75JnDz4/+/1Lnn34+dkfXPLsIednf3jJs484P3vrJe/jQ8/Pbq1WvY/1v/fxI1f/uud/fjxsud52GQ5UDwfovew7f8T517rhVf7X34dHnp/d6JJnjzo/u/Elzz7q/Owmlzx79PnZTS//bzC9P3q1drtdhkvVY1b/uue/h49dr/e/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","debug_symbols":"7P3djixLrqWHvsu+bhy4mdH++lUOzkXjSAIECC1B3XcNvbsi917hEbPLw82zypbFRydRNxOFQAY5Vjo56Gkf7X/82//xf/7//8t//9//z//63/7tP/+Pf9v+P6nlUv/tP/9//8e//bf/67/815//77/99//yf//3f/vPMcf/9G//63/9Xx7/6vX/+U//9r/97//H//pv/zmEx7//4bMiYfvrwyKxvH06/z//v//017e0Jd/SV3xL3ZZ8S1jyLXHJt6Ql3yJLviUv+Zay5FuWPPt1ybNflzz7bcmz35Y8+23Js9+WPPttybPfljz7bcmz35Y8+23Js9+WPPt9ybPflzz7fcmz35c8+33Js9+XPPt9ybPflzz7fcmz31c8+2XblnxLWPItccm3pCXfIku+JS/5lrLkW+qSb2lLvmXJsx+WPPthybMfljz7YcmzH5Y8+2HJsx+WPPthybMfljz7YcmzH5c8+3HJsx+XPPtxybMflzz7ccmzH5c8+3HJsx+XPPtxybOfljz7acmzn5Y8+2nJs5+WPPtpybOfljz7acmzn5Y8+2nJsy9Lnn1Z8uzLkmdfljz7suTZlyXPvix59mXJsy9Lnn1Z8uznJc9+XvLs5yXPfl7y7Oclz35e8uznJc9+XvLs5yXPfl7y7Jclz35Z8uyXJc9+WfLslyXPflny7Jclz/6Sc31lybm+suRcX1lyrq8sOddXlpzrK0vO9ZUl5/rKknN9Zcm5vrLkXF9Zcq6vLDnXV5ac6ytLzvWVJef6ypJzfWXJub6y5FxfWXKuryw511eWnOsrS871lSXn+sqSc31lybm+suRcX1lyrq8sOddXlpzrK0vO9ZUl5/rKknN9dcm5vrrkXF9dcq6vLjnXVzdZ8i15ybeUJd9Sl3xLW/ItS579Jef66pJzfXXJub665FxfXXKury4511eXnOurS8711SXn+uqSc311ybm+uuRcX11yrq8uOddXl5zrq0vO9dUl5/rqknN9dcm5vrrkXF9dcq6vLjnXV5ec66tLzvXVJef66pJzfXXJub665FxfXXKury4511eXnOurS8711SXn+uqSc311ybm+uuRcX11yrq8uOddXl5zrq0vO9dUl5/rqknN9dcm5vrrkXF9dcq6vLjnXV5ec66tLzvXVJef66pJzfXXJub665FxfXXKury4511eXnOurS8711SXn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/kvffzXYtt3o+6+G8dP77yh+ev8dxU/vv6P46f13FD+9/47ip/ffUfz0/juKn95/z+PvE/ZHlV6f8de4/RH//i1xybekJd8iS74lL/mWsuRb6pJvaUu+pa/4lglbca58y5JnPyx59sOSZz8sefbDkmc/LHn2w5JnPyx59sOSZz8uefbjkmc/Lnn245JnPy559uOSZz8uefbjkmc/Lnn245JnPy159tOSZz8tefbTkmc/LXn205JnPy159tOSZz8tefbTkmdfljz7suTZlyXPvix59mXJsy9Lnn1Z8uzLkmdfljz7suTZz0ue/bzk2c9Lnv285NnPS579vOTZz0ue/bzk2c9Lnv285NkvS579suTZL0ue/bLk2S9Lnv2y5NkvS579suTZL0ue/bLk2a9Lnv265NmvS579uuTZr0ue/brk2a9Lnv265NmvS579uuTZb0ue/bbk2W9Lnv225NlvS579tuTZb0ue/bbk2W9Lnv225NnvS579vuTZ70ue/b7k2e9Lnv2+5NnvS579vuTZ70ue/b7g2a/bti35lrDkW+KSb0lLvkWWfEte8i1lybfUJd/SlnzLkmc/LHn2w5JnPyx59sOSZz8sefbDkmc/LHn2w5JnPyx59sOSZz8uefbjkmc/Lnn245JnPy559uOSZz8uefbjkmc/Lnn245JnPy159tOSZz8tefbTkmc/LXn205JnPy159tOSZz8tefbTkmdfljz7suTZlyXPvix59mXJsy9Lnn1Z8uzLkmdfljz7suTZz0ue/bzk2c9Lnv285NnPS579vOTZz0ue/bzk2c9Lnv285NkvS579suTZL0ue/bLk2S9Lnv2y5NkvS579suTZL0ue/bLk2a9Lnv265NmvS579uuTZr0ue/brk2a9Lnv265NmvS579uuTZb0ue/bbk2W9Lnv225NlvS579tuTZb0ue/bbk2W9Lnv225NnvS579vuTZ70ue/b7k2e9Lnv2+5NnvS579vuTZ70ue/SXn+sKSc31hybm+sORcX1hyri9ssuRb8pJvKUu+pS75lrbkW5Y8+0vO9YUl5/rCknN9Ycm5vrDkXF9Ycq4vLDnXF5ac6wtLzvWFJef6wpJzfWHJub6w5FxfWHKuLyw51xeWnOsLS871hSXn+sKSc31hybm+sORcX1hyri8sOdcXlpzrC0vO9YUl5/rCknN9Ycm5vrDkXF9Ycq4vLDnXF5ac6wtLzvWFJef6wpJzfWHJub6w5FxfWHKuLyw51xeWnOsLS871hSXn+sKSc31hybm+sORcX1hyri8sOdcXlpzrC0vO9YUl5/rCknN9Ycm5vrDkXF9Ycq4vLDnXF5ac6wtLzvWFJef6wpJzfWHJub6w5FxfWHKuLyw51xeWnOsLS871hSXn+sKSc31hybm+sORcX1hyri8sOdcXlpzrC0vO9YUl5/rCknN9Ycm5vrDkXF9Ycq4vLDnXF5ac6wtLzvWFJef6wpJzfWHJub6w5FxfWHKuLyw51xeWnOsLS871hSXn+uKSc31xybm+uORcX1xyri9usuRb8pJvKUu+5V9/9tsmz29psf3xLb/79B5TA8bUeTFNOGE4P6YAjCkCY0rAmAQYUwbGVIAxAet4ANbxAKzjEVjHI7COR2Adj8A6HoF1PALreATW8Qis4xFYxyOwjidgHU+L63jIUv76dMglvT69/fbTewZRfQZJfQaiPoOsPoOiPoOqPoOmPoOuPQPZ1GegvieL+p4s6nvyBKbh2xmo78mivieL+p4s6nuyqO/JWX1Pzup7clbfk7P6njyBNfp2BqCevMcE6rJ7TKC+uccE6oR7TKDe9oypgLrVHhOo/+wxgTrKHhOoR+wxgar+HhOwjhdgHS/AOl6AdbwA63gF1vEKrOMVWMcrsI5XYB2vwDpegXW8Aut4BdbxCqzjjVfHZQLhEdJ++j5uYRRTKjk9g0o1xbfPy8Hne3/lsIX2SkL60adr2f76dG9bOf/w4++0zw8//uD5CqSFow+H/Mzy8c/+irq/pAwu5Swpo0t5Tcoqu5RtO5QyuZSXpHyk9vxw/HmteCCluJSzpMwu5Swpi0s5S8rqUs6SsrmUs6TsLuU1M9T7S8pyJGXwaWealD7tTJPSp51pUvq0M01KcSlnSenTzjQpfdqZJqVPO9Ok9GlnmpQ+7cySMvq0M01Kn3amSenTzjQpfdqZJqW4lLOk9GlnmpQ+7UyT0qedaVL6tDNNSp92ZkmZfNqZJqVPO9Ok9GlnmpQ+7UyTUlzKWVL6tDNNSp92pknp0840KX3amSalTzuzpBSfdqZJ6dPONCl92pkmpU8706QUl3KWlD7tTJPSp51pUvq0M01Kn3amSenTziwps08706T0aWealD7tTJPSp51pUopLOUtKn3amSenTzjQpfdqZJqVPO9Ok9GlnlpTFp51pUvq0M01Kn3amSenTzjQpxaWcJaVPO9Ok9GlnmpQ+7UyT0qedaVL6tDNLyurTzjQpfdqZJqVPO9Ok9GlnmpTiUs6S0qedaVL6tDNNSp92pknp0840KX3amSVl82lnmpQ+7UyT0qedaVL6tDNNSnEpZ0np0840KX3amSalTzvTpPRpZ5qUPu3MkrL7tDNNSp92pknp0840KX3amSaluJSzpPRpZ5qUPu1Mk9KnnWlS+rQzTUqfdiZJmTefdqZJ6dPONCl92pkmpU8706QUl3KWlD7tTJPSp51pUvq0M01Kn3amSenTziwpg08706T0aWealD7tTJPSp51pUopLOUtKn3amSenTzjQpfdqZJqVPO9Ok9GlnlpTRp51pUvq0M01Kn3amSenTzjQpxaWcJaVPO9Ok9GlnmpQ+7UyT0qedaVL6tDNLyuTTzjQpfdqZJqVPO9Ok9GlnmpTiUs6S0qedaVL6tDNNSp92pknp0840KX3amSWl+LQzTUqfdqZJ6dPONCl92pkmpbiUs6T0aWealD7tTJPSp51pUvq0M01Kn3ZmSZl92pkmpU8706T0aWealD7t/F7Kn8wOpBSX8pKUj9/FXcrYDqX0aWealD7tXH3A20vKfiilTzsXfyvTq1ZKOpTSp51pUvq0M0vK4tPONCl92rkqZX1JKYdS+rQzTUqfdqZJKS7lLCl92pkmpU8706T0aWealD7tTJPSp51ZUlafdqZJ6dPONCl92pkmpU8706QUl3KWlD7tTJPSp51pUvq0M01Kn3amSenTziwpm08706T0aWealD7tTJPSp51pUopLOUtKn3amSenTzjQpfdqZJqVPO9Ok9GlnlpTdp51pUvq0M01Kn3amSenTzjQpxaWcJaVPO9Ok9GlnmpQ+7UyT0qedaVL6tDNJyrL5tDNNSp92pknp0840KX3amSaluJSzpPRpZ5qUPu1Mk9KnnWlS+rQzTUqfdmZJGXzamSalTzvTpPRpZ5qUPu1Mk1JcyllS+rQzTUqfdqZJ6dPONCl92pkmpU87s6SMPu1Mk9KnnWlS+rQzTUqfdqZJKS7lLCl92pkmpU8706T0aWealD7tTJPSp51ZUiafdqZJ6dPONCl92pkmpU8706QUl3KWlD7tTJPSp51pUvq0M01Kn3amSenTziwpxaedaVL6tDNN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nWlS+rQzTUqfdqZJ6dPONCnFpZwlpU8706T0aWealD7tTJPSp51pUvq0M0nKuPm0M01Kn3amSenTzjQpfdqZJqW4lLOk9GlnmpQ+7UyT0qedaVL6tDNNSp92ZkkZfNqZJqVPO9Ok9GlnmpQ+7UyTUlzKWVL6tDNNSp92pknp0840KX3amSalTzuzpIw+7UyT0qedaVL6tDNNSp92pkkpLuUsKX3amSalTzvTpPRpZ5qUPu1Mk9KnnVlSJp92pknp0840KX3amSalTzvTpBSXcpaUPu1Mk9KnnWlS+rQzTUqfdqZJ6dPOLCnFp51pUvq0M01Kn3amSenTzjQpxaWcJaVPO9Ok9GlnmpQ+7UyT0qedaVL6tDNLyuzTzjQpfdqZJqVPO9Ok9GlnmpTiUs6S0qedaVL6tDNNSp92pknp0840KX3amSVl8WlnmpQ+7UyT0qedaVL6tDNNSnEpZ0np0840KX3amSalTzvTpPRpZ5qUPu3MkrL6tDNNSp92pknp0840KX3amSaluJSzpPRpZ5qUPu1Mk9KnnWlS+rQzTUqfdmZJ2XzamSalTzvTpPRpZ5qUPu1Mk1JcyllS+rQzTUqfdqZJ6dPONCl92pkmpU87s6TsPu1Mk9KnnWlS+rQzTUqfdqZJKS7lLCl92pkmpU8706T0aWealD7tTJPSp51JUqbNp51pUvq0M01Kn3amSenTzjQpxaX8tZQ/mR1I6dPONSkfv4u7lLEdSunTzjQpfdq5+oC3l5T9UEqfdi7+VqZXrZR0KKVPO7OkDD7tTJPSp51pUvq0c1XK+pJSDqX0aWealOJSzpLSp51pUvq0M01Kn3amSenTzjQpfdqZJWX0aWealD7tTJPSp51pUvq0M01KcSlnSenTzjQpfdqZJqVPO9Ok9GlnmpQ+7cySMvm0M01Kn3amSenTzjQpfdqZJqW4lLOk9GlnmpQ+7UyT0qedaVL6tDNNSp92ZkkpPu1Mk9KnnWlS+rQzTUqfdqZJKS7lLCl92pkmpU8706T0aWealD7tTJPSp51ZUmafdqZJ6dPONCl92pkmpU8706QUl3KWlD7tTJPSp51pUvq0M01Kn3amSenTziwpi08706T0aWealD7tTJPSp51pUopLOUtKn3amSenTzjQpfdqZJqVPO9Ok9GlnlpTVp51pUvq0M01Kn3amSenTzjQpxaWcJaVPO9Ok9GlnmpQ+7UyT0qedaVL6tDNLyubTzjQpfdqZJqVPO9Ok9GlnmpTiUs6S0qedaVL6tDNNSp92pknp0840KX3amSVl92lnmpQ+7UyT0qedaVL6tDNNSnEpZ0np0840KX3amSalTzvTpPRpZ5qUPu1MklI2n3amSenTzjQpfdqZJqVPO9OkFJdylpQ+7UyT0qedaVL6tDNNSp92pknp084sKYNPO9Ok9GlnmpQ+7UyT0qedaVKKSzlLSp92pknp0840KX3amSalTzvTpPRpZ5aU0aedaVL6tDNNSp92pknp0840KcWlnCWlTzvTpPRpZ5qUPu1Mk9KnnWlS+rQzS8rk0840KX3amSalTzvTpPRpZ5qU4lLOktKnnWlS+rQzTUqfdqZJ6dPONCl92pklpfi0M01Kn3amSenTzjQpfdqZJqW4lLOk9GlnmpQ+7UyT0qedaVL6tDNNSp92ZkmZfdr5vZQ5HUrp085VKdNISp92pknp085VKeNLynYopbiUl6QMvY2k9GlnmpQ+7UyT0qedWVLe7Nb6HPpTypzi+4f3hO/l/i4kfC+PdiHhezmpCwmLtYTv5UouJHwv73Ah4Xt1+AsJ3+ut44WE7/VucJzwzW7MvpCwNad1s9unLyRszWnd7CbnCwlbc1o3uxX5QsLWnNbNbhi+kLA1p3Wz23ovJGzNad3s5tsLCVtzWje7RfZCwtac1s1uZL2QsDWndbPbTS8kbM1p3eym0AsJW3NaN7t180LC1pzWzW6wvJCwNad1s9sgLyRszWnd7GbFCwkbc1r5ZrcUXkjYmNPKN7vx70LCxpxW3sRawsacVr7ZTXQXEjbmtPLNbnW7kLA1p3WzG9IuJGzNad3strELCVtzWje7uetCwtac1s1uwbqQsDWndbMbpS4kbM1p3ex2pgsJW3NaN7vp6ELC1pzWzW4NupCwNad1sxt4LiRszWnd7DabCwlbc1o3uxnmQsLWnNbNblm5kLA1p3WzG0suJGzNad3s9o8LCVtzWje7SeNCwtac1s1upbiQsDWndbMbHi4kbM1p3ey2hAsJW3NaN7t54ELC1pzWzbb4X0jYmtO62Ub894RlsAQ2PL7x+aNDevvwdvSTW9/DiG9JHv5g2fLzwyLx/cO77Pf1e2jZ7+s60bLf1/uiZReX/Ruy33cOQMt+32kELft9ZyK07PedzNCy33c+JMt+4/s10LL7lPoV2X1K/YrsPqV+RXZx2b8hu0+pX5Hdp9SvyO5T6ldk9yn1K7L7lPoN2W98NxFadp9SvyK7T6lfkd2n1K/ILi77N2T3KfUrsvuU+hXZfUr9iuw+pX5Fdp9SvyH7je91Q8vuU+pXZPcp9Suy+5T6FdnFZf+G7D6lfkV2n1K/IrtPqV+R3afUr8juU+o3ZL/xnZho2X1K/YrsPqV+RXafUr8iu7js/yj7ro4Pk2fqWJ758v5khVrXPrKWZ74vym555vui7JZnvq/JXm58Oy9adssz3xdltzzzfVF2yzPfF2UXl/0bslseJr8ou0+pX5Hdp9SvyO5T6ldk9yn1G7Lf+GZztOw+pX5Fdp9SvyK7T6lfkV1c9m/I7lPqV2T3KfUrsvuU+hXZfUr9iuw+pX5D9uhT6ldk9yn1K7L7lPoV2X1K/Yrs4rJ/Q3afUr8iu0+pX5Hdp9SvyO5T6ldk9yn1G7Inn1K/IrtPqV+R3afUr8juU+pXZBeX/Ruy+5T6Fdl9Sv2K7D6lfkV2n1IPZN/V8WHyRB0xPPPFbd9vELd8qI7h0eyCOoYnqAvqGB50Lqgjrs6JOobHhgvqGHb3F9QxbMIvqGPYK19Qx7BXHquT3SufqeNe+Uwd98pn6rhXPlNHXJ0Tddwrn6njXvlMHffKZ+q4Vz5Tx73yiTrFvfKZOu6Vz9Rxr3ymjnvlM3XE1TlRx73ymTrulc/Uca98po575TN13CufqFPdK5+p4175TB33ymfquFc+U0dcnRN13CufqeNe+Uwd98pn6rhXPlPHvfKJOs298pk67pXP1HGvfKaOe+UzdcTVOVHHvfKZOu6Vz9Rxr3ymjnvlM3XcK5+o090rn6njXvlMHffKZ+q4Vz5TR1ydE3XcK5+p4175TB33ymfquFc+U8e98md1quXbzi+o4175TB33ymfquFc+U0dcnRN13CufqeNe+Uwd98pn6rhXPlPHvfKJOpbvXL6gjnvlM3XcK5+p4175TB1xdU7Uca98po575TN13CufqGP5GsmYwq5OiofqWO7oY3UsV+WWdnVaOVTHclUeq2O5Ko/VsfwGY6yO5TcYQ3XM3HS2J2zFwuwJ36zv1ronXPthwjdrpeOE71XhSnhe1dFLOkz4Zld1XEj4Zm/Dhr/Sd7sUYZywtSp9t6sLxgnfbIYZJ3yvseS9SsdDp3WzOwPGCd/sGoALCd9reLiQ8L1eaV5I+F5O60LCYsxL32xL/oWE7+W0LiR8L6d1IeH7Oq0PCd/MaUnaEy6HCd9sifyFhG/mtMYJ38xpjRO+mdMaJyzWErbmtG62Nv1Cwtac1s2Wm19I2Nrflm62gvxCwvd9p/Uh4fu+0/qQ8H3faX1IWKwlbM1p3Wzp9oWErTmtm63GvpCwNad1swXWFxK25rRutmb6QsLWnNbNlkFfSNia07rZyuYLCVtzWjdbrHwhYWtO62brjy8kbM1p3WxJ8YWErTmtm60SvpCwNad1s4W/FxK25rRutpb3QsLGnFa72fLcCwlb3tM02nnRtns17dnqWN4IMlbH8kaQsTqWN4KM1bG8EeQVSSzpUB3LG0GG6pjeaTpWx/IGtLE6ljegjdWx7JXH6oirc6KOZa88VseyVx6rY9krj9Vxr3ymjmmv/Nqel+VInWjaKw/VMe2Vh+qY9spDdUx75aE64uqcqGPaKw/VMe2Vh+qY9spDdUx75aE67pVP1DGzafqfU8e98pk67pXP1HGvfKaOuDon6rhXPlPHvfKZOu6Vz9Rxr3ymjnvlE3VudsHBbHXcK5+p4175TB33ymfqiKtzoo575TN13CufqeNe+Uwd98pn6rhXPlHnZpeQzL3fsd3sxpLZ6lj2ymN1LHvlsTri6pyo47d9n6lj2Sv3bVen50N1LHvlsTqWvfJYHcteeajOza6Rma2OZa88VseyVx6rY9krj9URV+dEHcteeayOZa88nCRudgPPbHUse+WxOpa98lCdm10ENFsdf698po6/Vz5Tx98rn6kjrs6JOv5e+Uwd98pn6rhXPlPHvfKZOu6VT9S52VVOs9Vxr3ymjnvlM3XcK5+pI67OiTrulc/Uca98po575TN13CufqeNe+USdm13GNVsd98pn6rhXPlPHvfKZOuLqnKjjXvlMHffKZ+q4Vz5Tx73ymTrulT+r07fVfic+ppc9pl7LQJ1Qujw/Xt5iSa8MEjyDGvePV0lHGQg9gxAHGWT1GRT1GVTtGSy/F2l+BkF9BvR+MM4A3w+GGajvB0F9Pwjq+0HQ3w8aPIO2PS/vDS22oww6PYO8wyGtbAcZRHpPHmdA78ktxVcG4S2Df+Y3LtL799xs6b1+brZiKlu6h5ibLd1vzM2W7k3mZov3MVOzxXuemdkmvD+amq0pL5VMealkykstv7Piu9ma8lLJlJdKprxUupGXyuWZbG5ylOuNnNQoV7mRjxrmeiMXNcz1Rh5qmOuNHNQwV9Ga654B3hONeqHgfc4wA7x3GWag/m9UgncZowwy3jsMM8A7gmEG+D4/zADfvYcZ4HvyMAP1PTmr78lZfU/O6ntyVt+Ti/qeXNT35KK+Jxf1PXn5Xub5GajvyUV9Ty7qe3JR35OL+p5c1ffkqr4nV/U9uarvycv3v87PQH1Prup7clXfk6v6nlzV9+Smvic39R2tqe9oyzftxdT2kKKE/EcGe1TLK6SIvKIqchxVQ0bViVEt36R2LaqAjCoio0rfjaofRyXIqJa7amn7IZWYt3gcVUFG1XlR9W1bXq9qeXXy2tpxVAEZVURGlZBRCTKqjIxqeb3KEvao2v9UGf7x87Xs+5hq+XOD1p5C1Z9C059CV5/C+o1G81MI+lOI+lNI+lMQ/Slk/Sno785Bf3cO+rtz0N+do/7uHPV356i/O0f93Xn9bqH5KejvzlF/d476u3PU352j/u6c9HfnpL87J/3dOenvzuu31cxPQX93Tvq7c9LfnZP+7pz0d2fR351Ff3cW/d1Z9Hfn9btQ5qegvzuL/u4s+ruz6O/Oor87Z/3dOevvzll/d876u/P6rSjzU9DfnbP+7pz1d+esvztn/d256O/ORX93Lvq7c9HfndfvR5mfgv7uXPR356K/Oxf93bno785Vf3eu+rtz1d+dq/7uvH5TyvwU9Hfnqr87V/3duervzlV/d276u3PT352b/u7c9Hfnpr87N/3duenvzk1/d276u3PT3527/u7c9Xfnrr87d/3def2Oo/kp6O/OXX937vq7c9ffnbv67hw29d05bOq7c9jUd+ewqe/OYVPfncOmvjsH/bvCgv5dYUH/rrCgf1dY0L8rLOjfFRb07woL+neFBf27woL+XWFB/66woH9XWNC/Kyzo3xUW9O8KC/p3hQX9u8KC/l1hQf+usKB/V1jQvyss6N8VFvTvCgv6d4UF/bvCgv5dYUH/rrCgf1dY0L8rLOjfFRb07woL+neFBf27woL+XWFB/66woH9XWNC/Kyzo3xUW9O8KC/p3hQX9u8KC/l1hQf+usKB/V1jQvyss6N8VFvTvCgv6d4UF/bvCgv5dYUH/rrCgf1dY0L8rLOjfFRb07woL+neFBf27woL+XWFB/66woH9XWNC/Kyzo3xUW9O8KC/p3hQX9u8KC/l1hQf+usKB/V1jQvyss6N8VFvTvCgv6d4UF/bvCgv5dYUH/rrCgf1dY0L8rLOjfFRb07woL+neFBf27woL+XWFB/66woH9XWNC/Kyzo3xUW9O8KC/p3hQX9u8KC/l1hQf+usKB/V1jQvyss6N8VFvXvCov6d4VF/bvCov5dYXFT352j/l1hUf+usKh/V1jUvyss6t8VFvXvCov6d4VF/bvCov5dYVH/rrCof1dY1L8rLOrfFRb17wqL+neFRf27wqL+XWFR/66wqH9XWNS/Kyzq3xUW9e8Ki/p3hUX9u8Ki/l1hUf+usKh/V1jUvyss6t8VFvXvCov6d4VF/bvCov5dYVH/rrCof1dY1L8rLOrfFRb17wqL+neFRf27wqL+XWFR/66wqH9XWNS/Kyzq3xUW9e8Ki/p3hUX9u8Ki/l1hUf+usKh/V1jUvyss6t8VFvXvCov6d4VF/bvCov5dYVH/rrCof1dY1L8rLOrfFRb17wqL+neFRf27wqL+XWFR/66wqH9XWNS/Kyzq3xUW9e8Ki/p3hUX9u8Ki/l1hUf+usKh/V1jUvyss6t8VFvXvCov6d4VF/bvCov5dYVH/rrCof1dY1L8rLOrfFRb17wqL+neFRf27wqL+XWFR/66wqH9XWNS/Kyzq3xUW9e8Ki/p3hSX9u8KS/l1hSf+usKR/V1ja1HfnpH9XWNK/Kyzp3xWW9O8KS/p3hSX9u8KS/l1hSf+usKR/V1jSvyss6d8VlvTvCkv6d4Ul/bvCkv5dYUn/rrCkf1dY0r8rLOnfFZb07wpL+neFJf27wpL+XWFJ/66wpH9XWNK/Kyzp3xWW9O8KS/p3hSX9u8KS/l1hSf+usKR/V1jSvyss6d8VlvTvCkv6d4Ul/bvCkv5dYUn/rrCkf1dY0r8rLOnfFZb07wpL+neFJf27wpL+XWFJ/66wpH9XWNK/Kyzp3xWW9O8KS/p3hSX9u8KS/l1hSf+usKR/V1jSvyss6d8VlvTvCkv6d4Ul/bvCkv5dYUn/rrCkf1dY0r8rLOnfFZb07wpL+neFJf27wpL+XWFJ/66wpH9XWNK/Kyzp3xWW9O8KS/p3hSX9u8KS/l1hSf+usKR/V1jSvyss6d8VlvTvCkv6d4Ul/bvCkv5dYUn/rrCkf1dY0r8rLOnfFZb07wpL+neFJf27wpL+XWGif1eY6N8VJvp3hYn+XWGyqe/Oon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4WJ/l1hon9XmOjfFSb6d4Vl/bvCsv5dYVn/rrCsf1dY3tR356x/V1jWvyss698VlvXvCsv6d4Vl/bvCsv5dYVn/rrCsf1dY1r8rLOvfFZb17wrL+neFZf27wrL+XWFZ/66wrH9XWNa/Kyzr3xWW9e8Ky/p3hWX9u8Ky/l1hWf+usKx/V1jWvyss698VlvXvCsv6d4Vl/bvCsv5dYVn/rrCsf1dY1r8rLOvfFZb17wrL+neFZf27wrL+XWFZ/66wrH9XWNa/Kyzr3xWW9e8Ky/p3hWX9u8Ky/l1hWf+usKx/V1jWvyss698VlvXvCsv6d4Vl/bvCsv5dYVn/rrCsf1dY1r8rLOvfFZb17wrL+neFZf27wrL+XWFZ/66wrH9XWNa/Kyzr3xWW9e8Ky/p3hWX9u8Ky/l1hWf+usKx/V1jWvyss698VlvXvCsv6d4Vl/bvCsv5dYVn/rrCsf1dY1r8rLOvfFZb17wrL+neFZf27wrL+XWFZ/66wrH9XWNa/Kyzr3xWW9e8Ky/p3hWX9u8Ky/l1hRf+usKJ/V1jRvyus6N8VVjb13bno3xVW9O8KK/p3hRX9u8KK/l1hRf+usKJ/V1jRvyus6N8VVvTvCiv6d4UV/bvCiv5dYUX/rrCif1dY0b8rrOjfFVb07wor+neFFf27wor+XWFF/66won9XWNG/K6zo3xVW9O8KK/p3hRX9u8KK/l1hRf+usKJ/V1jRvyus6N8VVvTvCiv6d4UV/bvCiv5dYUX/rrCif1dY0b8rrOjfFVb07wor+neFFf27wor+XWFF/66won9XWNG/K6zo3xVW9O8KK/p3hRX9u8KK/l1hRf+usKJ/V1jRvyus6N8VVvTvCiv6d4UV/bvCiv5dYUX/rrCif1dY0b8rrOC3VLXt+fHaQjpMgd4XLqRAr0g9yzOFXvthCvSKdCEFekW6kAK9Il1IgT4vjFPA70e6kAK9L1xIAd4X2rY9Q2lbiu8p/OrDe77w4WJ6vnKjfEPY+vNnh7Qd5gs3CdPzhTuK6fnC7cf0fOFeZXq+cGMzO1/6Hqrp+cIt0/R87+SvQmhlz7fVw3zv5K+u5CvG8r2Xvxrney9/Nc73Vv4qbm3/2aEd5nsrf3Uh31v5q2G+lb5JbHq+t/JXF/K9lb+K6ZWvHOd7K391IV8xlu+t/NWFfO/Vj0rdf3Y5et9e6buzpud7q3ol256v/Py4g3xvVa8u5HurenUh31vNgzns9TnHcpjvrebBHOIo3+XzYAvllW+pg3xzyc8f3l6/oOkVf2fHX+QZfynbQfzrt1dNjj8ojz+qib+Wo/iT8vhFefxZefxFefxVefzw/juMX0//PYw/6em/x/Hr6b/H8Svvv0l5/12/k2py/Mr7b1LefxO8/z4M8l+ffpTKo/jh/XcYP7z/juIXeP8dxg/vv8P44f13GD+8/w7jh/ffYfzw/juMH95/h/Er77+ivP+K8v6blfffrLz/ZuX9Nyvvv+v3Sk2OX3n/zcr7b1bef7Py/puV99+ivP8W5f23KO+/RXn/Xb85anL8yvtvofdfeRKHj0f1KH56/x3FT++/o/jp/XcQf6X331H89P47ip/ef0fx0/vvKH56/x3Fj+pfe1SorvSMir6BajaLQV9X9bt802v3Qvr5+oN8b8UGXsj3VqzNhXzFWL63Ym0u5Hsr1uZCvvfavdDzK99D1uZeu60u5Hsv1nWY7712W13I9167F8b53mv3wjjfe+1eeMs3Hvaje+22upDvvXYvdNnzPdxNV++12yq2Osr3Xv5qnO+9/NU431v5q/R6n5Pq0e6Udq/dVhfyvdf7q3G+93p/Nc73Xu+vxvmKsXzv9f4qp1e+/TDfe72/Gud7K391Id9b+asL+d7LXw3zvdeutgv53stfveXbDvtRuJe/Gud7L3+1xx1ST4f5yq3ylTLK917+apzvvfzVON9b+avhrsUWbuWvLuR7K381zjfeyl9dyPdW/upCvvD+O75ztkX6nbOtb3sK/dDVR/qdsxdSoN85eyEF+p2zF1Kg3zk7TiHR75y9kAL+LvJxCvi7yMcpwEfpKyngu/M4Bf3dOenvzkl/d076u3PS351Ff3cW/d1Z9Hdn0d+d1+/Bm5+C/u4s+ruz6O/Oor87i/7unPV356y/O2f93Tnr787rt+TNT0F/d86KunP/E/n8xw/3tuOhW3yL5MPfXnaWRSS+f3jXRlHbX66NIj+xXBtFRmW1NkWRA1qujSJrtVwbRZ5tuTaKzOBybcS1+aiNIvu6XBv3xZ+1cV/8WRv3xZ+1cV/8UZvqvvizNu6LP2vjvvizNu6LP2sjrs1HbdwXf9bGffFnbdwXf9bGffFnbdwXf9SGvl/6q9q4L/6sjfviz9q4L/6sjbg2H7VxX/xZG/fFn7VxX/xZG/fFn7VxX/xRG/pe8K9q4774szbuiz9r4774szbi2nzUxn3xZ23cF3/Wxn3xZ23cF3/Wxn3xJ206fZ/7iTZ7Cnrt654CvSP2/ac//tkPU6A3rgsp0OtEz7KncLhOt9PXB19JgT5V9JJfKbTDFER/CviKNE4BX5HGKdAd74UU6Mb0Qgr4vjBMgb729EoKdJt3IQX6y8QLKejvzvgVsZ890sEPz2FfSZ9jOcwX38p/kW+R53/eUl4XsqVXsvimPzNZvD2YmSzeSPxzydZylKzeUfT3yeI35E5NFm9jZiaLNzwzk8Vbo5nJiqVkb+qgjpO9qYM6TvamDuo4WUsOCr+beGay+C3GU5O15KDwm5F/k2yNz+sCawpHyd7JQQ2TFUvJ3slBDZO9k4MaJnsnBzVM9k4OapjsnRzUKFn8pumpyd7JQQ2TteSg8HuupyYrlpK15KDwW7anJmvJQeH3YE9N1pKDwm+qnpqsJQeF3yU9NVlLDgq/7XlqspYcFH4f89RkLTko/MbkqclaclD4ncZTk72Vg5InlFlLPEr2Vg5qlOytHNQoWbGU7K0c1CjZWzmoUbK3clCjZG/loEbJ3spBDZLFb78d48/4JbUXUljdE0Pv+1KMuNU6SCGU/kzh8c969HuU4RnU2J4fr5KOMij0DF7c2ocMqvoMmvoMuvYMlu/vm59BUp8BvR+MM8D3g2EG6vtBV98Puvp+0HX3g7xty/edzc8gqM9Ad0/+yUB3T/7JQHdP/smA3pPba/lii+0oA3pPbnnbM/jHnQw/GdB78jgDek9uKb4yeP9D2j/1G0fv31OzDfRePzdbui+Ymy3dQ8zNlu435mYrprLF+5ip2eI9z9Rs8f5oaramvFQw5aWiKS8VTXmpaMpLRVNeavmy0+9ma8pLRVNeKpryUtGUl4qmvFQy5aWSKS+VTHmpZMpLLd95+t1sTXmpZMpLJVNeKpnyUsmUlxJTXkpMeSkx5aXElJdavv30u9ma8lJiykvJjbxU3i/Pyk2Ocr2RkxrmeiMfNco138hFDXO9kYca5nojBzXM9Ub+aZirGMr1Rt5pmOuNnNMwV0O+KRvyTdmQbyqGfFMx5JuKId9UDPmm5ftOv5mrId9UDPmmYsg3FUO+qRjyTdWQb6qGfFM15JuqId+0fMvpN3M15JuqId9UDfmmasg3VUO+qRnyTc2Qb2qGfFMz5Jvwm3Bn5mrIN+G3687M1ZBvwm/snZmrId/UDfmmbsg34bc7z8zVkG/Cb4yemata37RngHdDozPc+N3S4wzwzmWYAd6PDDII+N3S4wzw3mGYAd4RDDPA9/lhBvjuPcxA+27pwN8tPcxAe08O/N3SwwzU92T+DuhhBup7Mn9X8zAD9T2Zv1N5mIH6nszffTzMQH1P5u8oHmagvifzdwkPM1Dfk/k7f4cZqO/J/N28wwzU92T+Dt1hBup7Mn/X7TAD9T2Zv5N2mIH6nszfHTvMQH1P5u94HWagvifzd7EOM1Dfk/k7U4cZqO/J/N2mwwzU92T+DtJhBup7Mn9X6DAD9T2Zv9NzmIH6nszfvjnMQH1P5m/KHGagvifzt1oOM1Dfk/kbKIcZqO/J/G2RwwzU92T+ZsdhBup7Mn8L4zAD9T2ZvzFxmIH6nszfbjjMQH1P5m8iHGagvifztwYOM1Dfk/kb/oYZqO/J/G18wwzU92T+5rxhBup7Mn/L3TAD9T2Zv5FumIH6nszfHjfMQH1P5m96G2agvifzt7INM1Dfk/kb1IYZqO/J/G1nwwzU92T+ZrJhBup7Mn+L2DAD9T2Zv/FrmIH6nqx+j1dQv8crqN/jFdTv8Yrq93hF9Xu8ovo9XlH9Hq+4ae/JUf0er6h+j1dUv8crqt/jFdXv8Yrq93hF9Xu8ovo9XlH9Hq+ofo9XVL/HK6rf4xXV7/GK6vd4RfV7vKL6PV5R/R6vqH6PV1S/xyuq3+MV1e/xiur3eEX1e7yi+j1eUf0er6h+j1dUv8crqt/jFdXv8Yrq93hF9Xu8ovo9XlH9Hq+ofo9XVL/HK6rf4xXV7/GK6vd4RfV7vKL6PV5R/R6vqH6PV1S/xyuq3+MV1e/xiur3eEX1e7yi+j1eUf0er6h+j1dUv8crqt/jFdXv8Yrq93hF9Xu8ovo9XlH9Hq+ofo9XVL/HK6rf4xXV7/GK6vd4RfV7vKL6PV5R/R6vqH6PV1S/xyuq3+MV1e/xiur3eEX1e7yi+j1eUf0er6h+j1dUv8crqt/jFdXv8Yrq93hF9Xu8ovo9XlH9Hq+ofo9XVL/HK6rfghXVb8GK6zcwtbyH9MgmDTKoUre/Pv74Z/jj03sOQs+hp2cOj3CPc8g3yKHcIId6gxzaDXLo6nNI6/cx/TKHHPKeQ5TjHMINcog3yIHep6/kQO8PV3Kg94crOdD7Q86v2tpGnx563LTRe8nkfAO+70zOF9+jJueL72eT88X3vsn5irF86bPv7HzxPmhyvnjPNDlfY/4qGPNX0Zi/isb8VTTmr6Ixf7V+79WX8zXmr6IxfxWN+atozF9FY/4qGfNXyZi/Ssb8VTLmr9bvMPtyvsb8VTLmr5Ixf5WM+atkzF+JMX8lxvyVGPNXYsxfrd9H9+V8jfkrMeav5Fb+Kpfnz85NjrK9lbsaZnsrbzXKNt/KWQ2zvZWvGmZ7K1c1zPZWnmqYrZjK9lZ+apjtrdzUMFtTXiqb8lLZlJcqprxUMeWliikvVUx5qfVbIL+arSkvVUx5qWLKSxVTXqqY8lLVlJeqprxUNeWlqikvtX5751ezNeWlqikvVU15qWrKS1W8l+rPn15LbX98+plDwzukCzngfc+FHPBu5kIOeI9yIQe5QQ54P3EhB7xLuJADvvdfyAHf0S/kcIM+3W/Qp/sN+nS/QZ/G7769ksMN+jR+9+2VHG7Qp/G7b6/kcIM+jd99O85B+LtvL+Sgv08Lf/fthRz092nZ9Pdp2fT3aeHvIL6Qg/4+LfwdxBdyuEGf5u8KvpDDDfo0fqdv2S+eqTXVwadLK8+/L5X+P20hP4g8tWfg9RVHKS9x6Abgd+L09PzhdZsgjtz0N+cfxNkzpvuQX2VcQ9wzDrkMf3m214dfn922g8/G0MNTkriVw18euh36G6Ws4flk1VwnSEl3ZWt+K/8nKXd16H7vn1en9uMqRXeHJxk/c8BvOr6SA90dXslBsTvcc1Bs4vYc5AY5KHZPew6Ke+2eg+KO+MwBv7k0SXnmkMrIxYSUn44wpPL62Y8GvydML8TTE6ZX7ekJ00v89ITp/WB6wvSZd3rC9G45PWF6a52eMH3W/GXCLewJ9/ye8D9+uL8+u/28unl+thz94F2QUF4/Nu4y4hejKpHxZq6wygcZ94Rv5grHCd/MFY4TFmsJ38wzjBO+l2d4vCJ5/vCHHTpM+F6eYZwwfjnn9ITv1ZYuJHyvtnQh4eWjbN2PsjySlz5IIYb9r6ahHCZQtSfQtCfQlSewfk/g7ASC9gSi9gSS9gREewJZewLaO3HR3omL9k5ctHfiqr0TV+2duGrvxFV7J16/sW12Ato7cdXeiav2Tly1d+KqvRM37Z24ae/ETXsnbto78foNZrMT0N6Jm/ZO3LR34qa9Ezftnbhr78Rdeyfu2jtx196J1+8om52A9k7ctXfirr0Td+2duCvvxHlT3onzprwT5015J86b8k78eIy1J0DvxGlPQGaeuN9kP7+61betKK8NC3mj9/gvSkN3D3+XNPvSkhDK9oc0BykOFg3ljW5h/rZfsPRSMRz/gtHN0d8kTah7FDG2wS9Y3D+cYvxXfxkD3c0RFE97hhL+5cc/0O0n63f8f1Z8l5Fugv/+KhpjP5aGbq//JmkeP+354RTqsTTi0nySxuxIkF7StGNpjI4EKe0jgWzxWBqrI8Hrt0a2dCyNVp+/J6DVjT8TiFo9wp4AvZOX577KWNphAvR+O0yA3hWHCdAL9DABehkdJbB+uVspr/dVVcIggVD63ubLWyzplUGEZ1DjvtmnSjrKINEzCHGQgajPIKvPoKjPoGvPYP1uqekZ0PvBOAN8PxhmoL4fiPp+IOr7gajvB+vXU03PoKnPQH1Pzup7clbfkzO9J7dt/xNEe/v731sG9J7c8rZn8HYM5C0Dek8eZ0DvyS3FVwbhLYN/6jeO3r/nZkvv9XOzpfuCudnSPcTUbAvdb8zNlu5N5maL9zFTs8V7nqnZiqlsTXmpYspLFVNeqpjyUsWUl6qmvFQ15aWqKS9VTXmp9QvyvpqtKS9VTXmpaspLVVNeqpryUs2Ul2qmvFQz5aWaKS+1fsXhV7M15aWaKS/VTHmpZspLNVNeqpvyUt2Ul+qmvFQ35aXWL6n8+7J9/AnvGUiTo1xv5KSGud7IRw1zvZGLGuZ6Iw81zPVGDmqQa9lu5J+Gud7IPQ1zvZF3GuZ6I+c0zFUM5WrHN5XNjm8qmx3fVDY7vqlshnxTMOSbgiHfFAz5pmDIN63f6PjFXA35pmDINwVDvikY8k3BkG+KhnxTNOSboiHfFA35pvWbOb+YqyHfFA35pmjIN0VDvika8k3JkG/Cb8Kdmash34TfrjszVzGUqyHfhN/tOzNXQ74pGfJN+O3OE3PF74Gemash34TfLf0x1z0DvBsanOEu+N3S4wzwzmWYAd6PDDPAu4xhBnjvMMwA7whGGeB3S48zwHfvYQbad0sX/m7pYQbqezJ/t/QwA/U9mb8DepiB+p7M39U8yoC/f3mYgfqezN+TPMxAfU/m7zMeZqC+J/P3Dg8zUN+T+fuBhxmo78n8Pb7DDNT3ZP6+3WEG6nsyfy/uMAP1PZm/v3aYgfqezN8zO8xAfU/m74MdZqC+J/P3tg4zUN+T+ftVhxmo78n8PajDDNT3ZP6+0mEG6nsyf6/oMAP1PZm//3OYgfqezN/TOcxAfU/m79QcZqC+J/P3Xw4z0N6TK39X5TAD7T258vdKDjPQ3pPrpr0nV/5mx2EG2nty5W9hHGagvSdX/sbEUQb8PYjDDNT3ZP7OwmEG6nsyf7/gMAP1PZm/C3CYgfqezN/bN8xAfU/m79gbZqC+J/P34Q0zUN+T+bvrhhmo78n8PXPDDNT3ZP5OuGEG6nsyf3/bMAP1PZm/a22YgfqezN+LNsxAfU/m7zAbZqC+J/P3jQ0zUN+T+bvBhhmo78n8PV7DDNT3ZPV7vKr6PV5V/R6vqn6PV1W/x6uq3+NV1e/xqur3eFX1e7yq+j1eVf0er6p+j1dVv8erqt/jVdXv8arq93hV9Xu8qvo9XlX9Hq+qfo9XVb/Hq6rf41XV7/Gq6vd4VfV7vKr6PV5V/R6vqn6PV1W/x6uq3+NV1e/xqur3eFX1e7yq+j1eVf0er6p+j1dVv8erqt/jVdXv8arq93hV9Xu8qvo9XlX9Hq+qfo9XVb/Hq6rf41XV7/Gq6vd4VfV7vKr6PV5V/R6vqn6PV1W/x6uq3+NV1e/xqur3eDX1e7ya+j1eTf0er6Z+j1fbtPfkpn6PV1O/x6up3+PV1O/xaur3eDX1e7ya+j1eTf0er6Z+j1dTv8erqd/j1dTv8Wrq93g19Xu8mvo9Xk39Hq+mfo9XU7/Hq6nf49XU7/Fq6vd4NfV7vJr6PV5N/R6vpn6PV1O/x6up3+PV1O/xaur3eDX1e7ya+i1YTf0WrLZ+A1MOe0ih5DzIoErd/vr4459/5rvnEOg59PTMIW/xOId4gxzSDXKQG+SQb5BDuUEOFZ7D6+M1RznOod0gh64/h0zv01dyoPeHKznQ+8P/297Z7TyOM0f4lkh28+9yvgA5CJCDIAkC5CD3Hk8yojw79LRnhy9dpdbZ7kJrVLUtPkVJb+kdD+h8yPlcW5v8ccbN6CxZ7ReeO4v9wjNqsV94nq31W+DZt9gv+n52tV/0ve9qv/A5aLFfdebXWb4qzvJVcZavirN8VZzlq+osX1Vn+ao6y1fVWb7a38D1Yb/O8lV1lq+qs3xVneWr6ixfNWf5qjnLV81ZvmrO8tX+NrUP+3WWr5qzfNWc5avmLF81Z/mqO8tX3Vm+6s7yVXeWr/Y3432l31yOz85NZ24vla5Mt5fKVqbbSyUr0+2lcpXp9lKpynDbw6Uylen2UonKdHupPGW6vVSaMt2qK7eeslQPnrJUD56yVA+eslQPrrJUdJWloqssFV1lqegqS+1vovyoW1dZKrrKUtFVloquslR0laWSqyyVXGWp5CpLJVdZan+D6EfduspSCT5L9ePTa6nth6OHB/iE9IYH+Nzzhgf4NGN7EPiM8oYH+OTxhgf4PPGGB/iU8IYHePa/4QGe6G94uACn5QKclgtwWi7Aafju23c8XIDT8N2373i4AKfhu2/f8XABTsN3377j4QKcxu++fcPDBTiN3337hocLcDpfgNP4HcRveLgAp/E7iN/wcAFO43cFv+HhApyG7/QtvR8eqlTj6NLKcX+p9L+0kE+USzuE1/NeVCljOPAFwL83nMfFxOPosGA46Mni7/5yfhrOcIyeQ37LcY1pOI65mD+ecB58HhvC5NgU+/GyqJRCmf540OPQF46yxuPMqrkuGKXev8qfRzmmg573/v50ap+vUujp8BeOhwf0dPiOB/R0+I4H4nR4eIBvGX7HA3HWGh6I09PwQMza4YGYiMMD+toqWg4PUqwUEyUfiTBKOTdbD8APw+gL8WrD8N2lyw2jL/HLDaPzYLlh9D3vcsPotFxuGB2tyw2j7zV/03AbLzmXnp8N/3xwP48N3y7dHMeW2QePgTw0j0PTOUb07S7JGC+WCqu+GOMwfLFUaBqGb1xdbvhiqdA2rN4MXyszaDq0RJU2NXytzPCG4WvR/Q3D18KSZfhbcPFmePtWVnMZhh8/McNCiuOuaSxTA8puILMbKOwGKruBxm6gkxvYX9C32kBkN5DYDbCTeH/Z3WoD7CSO7CSO7CSO7CSO7CRO7CRO7CRO7CRO7CTeX5W22gA7iRM7iRM7iRM7iRM7iYWdxMJOYmEnsbCTeH9x2WoD7CQWdhILO4mFncTCTmJlJ7Gyk1jZSazsJN5fTbbaADuJlZ3Eyk5iZSexspM4s5M4s5M4o5NYhgFd+cT9A4Dj4PrUijIaFh6jQWf8B0ejTkczSktiLOGH0Uws/rpo6DFF9AjzZT8wOacY5z8w9HD0RaOJdTyhmlIzfmBpHCwp/fGPET3NIUxchkONf376o8dPrN/4Xyc+xogegr9+FU2pT0dT0OP1F43m8WnHwRLrfDTowf2Do3G7JZBzNG0+GqdbApGxJdCQ5qNR978aDTIfDWvOHwZY0/gwwJoRDgMVneTl6KtMZfqHdRWdt6YBdCqaBtAXaNMA+jJqGti+4UujJz0+/s9mGIilD8yXJy1yOujgDmoazT5VZeJgf/3a7zqIyXAQ6R0kegdC76DQO6j0DtB5YDuA54HloNPzoNPzoNPzoNPzYH891XIHGdxBC+PSa3u67/HkAJ3JLYfh4On295MDdCbbDtCZ3CSdDuKTg7/1i0Pn90q3MaCzfq1b9Fyw1i16hljrFj1vrHWrrtzC55ilbuEzz1K38PloqVtPWSoGV1kquspS0VWWiq6yVHSVpfa30n3UrassFV1lqegqS0VXWSpeKEvlcpjNTSde04WSlOn1QjnK9HqhFGV6vVCGMr2qI68Xyk+m1wulJ9PrhbKT6fVCycn06ig3iaPcJI5ykzjKTeIoN+3vfvygV9rcNBzApyHrGoLAZxzTAXxyMR3A5xHLgcKnDNMBfHYwHcAnAtMBPOdNB/D0Nh2wPx8clZ7JSs9kpWey0jM50zM50zM50zM50zN5fwvjcgf0TM70TM70TM70TM70TC70TC70TC70TC70TN5fg7bcAT2TCz2TCz2TCz2TCz2TKz2TKz2TKz2TKz2T9zffLXdAz+RKz+RKz2T4/kHbAT2T4fsHbQf0TIbvH7Qd0DO50TO50TMZvgPSdkDPZPgOSNsBPZPhOyBtB/RMhu+AtB3QMxm+A9J2QM9k/A5I0wE9k/E7IE0H7ExO+F2NpgN2Jif8TkXTATuTE34boOmAnWhpe7Nb6KUfkkL/4dN1qNrfwBbSUBWDvlAVIVUlSFUCqUohVWVIVQVSVYVUtT1Vh3K+viu0PFfVEVXt74R6S1WEVLV9vYrjr7+/tTwlI18UaYeJkuP5Ejnt0w+Xpw/X9MPhw3F257i4c1zdOW7uHHdvjvd39nzccXTnOLlzLO4cqzvH7jKXuMtc4i5zibvMJe4yl0JlrqFq/90xkVNVjnNVCVKVQKpSSFUZUlWBVFUhVTVIVR1R1QeacN5RtX/PG8KpqmaDsUZ7Z9rfbfN7+ose+svsHbZpf7PNYv1Krj/T6K9lpr+Q66/k+hu5/s6tf3+XzWL94Pw19fPwd66fh79z/Tz8nesn528h528h528h528h528l528F529Nxx6+SpzpB+evqR+cv6Z+cP6a+sH5a+oH56+pH5y/pn5w/pr6wflr6W/g/DX1k/O3kfO3kfN3fzfNYv3k/G3k/G3k/G3k/G3k/O3k/O3k/O3k/O3k/N3fQ7NYPzl/Ozl/Ozl/Ozl/Ozd/JXDzVwI3fyVw81cCN38lcPNXAjd/JXDzVwI3fyVw81cCOX8jOX8jOX8jOX8jOX/3NzAt1k/O30jO30jO30jO30jO30TO30TO30TO30TO3w80iq3VT87fRM7fRM7fRM7fRM5fIeevoPNXj7bSWtJMPzp/Lf3o/LX0o/PX0o/OX0s/On8t/ej8tfSj89fSj85fQ7+i89fSD8WvoQqKSkPV7rUunOkphhasPrBYuh6HlyctT992BXdQUzsOryozBw3dQUyGg87uYHuT0HoHkd6B0jvI9A7QeWA7gOeB6YCeB5meB4WeB4WeB9t7cNY7EHoH6Ey23l4nBZ3JLY9tWpv16UlBZ7LtAJ3JTdLp4Pma/t/6xaHze61bdNYvdVvRc8Fat+gZYq1b9Lyx1i16NlnrVl25hc88S93C56Olbl1lqeoqS1VXWaq5ylLNVZZqrrJUc5WltvdDfdatqyzVXGWp5ipLNVdZqrnKUt1VluquslS/UJYy3j0l/UJJyvSqjrxeKEWZXi+UoUyvF0pQptcL5SfT64XSk+FVw4Wyk+n1QsnJ9OonN2nwk5s0qCOvfnKTBj+5SYOf3KTBT27S4Cg3RUe5KTrKTdFRboqOctP2Xr1PenWUmyJtbhoO4NOQcY1eI3zGMR3AJxfLQYLPI6YD+JRhOoDPDqYD+ERgOoDnvOkAnt6mA3gmmw7omZzomZzomSz0TBZ6Jgs9k4Weyds7/dY7oGey0DNZ6Jks9EwWeiYrPZOVnslKz2SlZ7LSM1npmQzfP2k7oGcyfP+k7YCeyfD9k7YDeiZneiZneibDd4DaDuiZDN8BajugZzJ8B6jtgJ7J8B2gtgN6JsN3gNoO6JlM3wGq+B2gpgN6JuN3gJoO6JmM39VpOcDv3zQd0DMZvyfTdEDPZPw+S9MBPZPxeydNB/RMxu+HNB3QMxm/x9F0QM9k/L5F0wE9k/F7EU0H9EzG7y80HdAzGb9n0HRAz2T8PkDTAT2T8Xv7TAf0TMbv2DMd0DMZvw/PdEDPZPzuOtMBO5Mzfs+c6YCdyRm/E850wM7kHNiZnPFb2UwH7EzO+A1qpgN2Jmf8tjPLAX6HmemAnsn4fWOmA3om43eDmQ7omUzfgpXpW7Dy/gam0MfLs8P/feKTg6Fq+wr5uAZ+qip5rkogVSmkqgypqkCqqpCqGqSqjqhqf+vPW6oipCrItV0g13aBXNsFcm0XyLVdINd2gVzbBXJtV8i1XSHXdoVc2xVybVfItV0h1/b9rSmxnqrSX/bZQ1WFVNUgVXVEVfsbMJKe129SjXNVAqlq+zkoqQ9V0n9cGX4+vkgr3w8vOfZxtPbZh0cZLxmI33pnnw8fjqs7x82d4+7N8f6Wh487ju4cJ3eOxZ1jdec4u3PsLnMVd5mruMtcxV3mqu4yV3WXufZ3Czx0D8e5BctxCfFwXFNe4bi5c9y9Od7fdfBxx9Gd4+TOsbhzrO4cZ3eOizvH7jJXc5e5mrvM1d1lru4uc3V3mWt/t4Y+/a1EDdFw/J4JxTZR9LDw+ALHseefe+wv11isv5DrrzT6a5npb+T6O7X+sr9SY7H+SK4/kesHh7Cpn4e/c/08/J3r5+HvXD83f0vg5m8J5PyN5PyN5PyN5PyN5PzdX5vxe/rPeoQqcaYfnL+mfnD+mvrB+WvqB+evqR+cv5b+BM5fUz84f0394Pw19YPz19RPzt9Ezt9Ezt9Ezt9Ezt9Ezl8h56+Q81fI+Svk/N1fyLNYPzl/hZy/Qs5fIeevkPNXyfmr5PxVcv4qOX/3lyYt1k/OXyXnr5LzV8n5q+T8zeT8zeT8zeT8zeT8zeT8zeT8zeT8zeT8zeT8zeT8LeT8LeT8LeT8LeT83V/6tVg/OX8LOX8LOX8LOX8LOX8rOX8rOX8rOX8rOX8rOX8rOX8rOX8rOX8rOX8rOX8bOX8bOX8bOX8bOX/315gt1k/O30bO30bO30bO30bO307O307O307OX/QSLFM/OX/R+69M/eT8Re+/MvWT8xe9/8rQX9H7r0z93Pyt6P1Xpn5u/tbAzd+K3n9l6kfnrx4lr7WkmX50/lr60flr6Ufnr6Efvf/K1I/OX0s/On8t/ej8tfSj89fSj85fSz85f7H6o4YqKCodqnZ3DfWzIb/nkueaZLemHg5NJZW5JgXUlAE1FUBNFVBTA9TU8TTt7sJ5S1ME1JQANQGu4wK4jgvgOi6A67gAruMCuI4L4DqugOu4Aq7jCriOK+A6roDruAKu4wq4jivgOq6A67gCruMZcB3PgOt4BlzHM+A6ngHX8d39Fb3oqSnXHzRNjm5xXNUL5+vvvr1J4mcdehyb6/mqxS6TQ0tp3w8t7bwsV/M5lXJPZTKV6nEq4xx63OueTqW5/K3UMZU2nUq/zFR6OU4L0V9PRfJxqNRTQjmnsrttBGMq7bCnT4KfpxJd/lbymEqaTiVdZ10JYyr5eSrDquBYHZoUUNN2ANfjo3utavwkJB0/CUmzW9WlIas3XrRcS2dWXwO1+kiifvaKu1oTtXqhVq/U6jO1+kKtHpq1pnoW1s7Vs7B2qr6xsHaunpq1jZq1jZq1u6s0FqunZm2jZm2jZm2jZm2jZm2HZq31x38dmrWmemjWmuqhWWuqh2atqR6ataZ6aNaa6qFZa6qHZq2pHpq1hvoWmFnbAjNrW2BmbQvMrG2BmbUtMLO2BWbWtsDM2haYWdsCNWsjNWsjNWsjNWsjNWt312EsVk/N2kjN2kjN2kjN2kjN2kTN2kTN2kTN2kTN2u01L2vVU7M2UbM2UbM2UbM2UbNWqFkr1KwVatYKNWu3V/GsVU/NWqFmrVCzVqhZK9SsVWrWKjVrlZq1Ss3a7XVJa9VTs1apWavUrFVq1io1azM1azM1azM1azM1a7dXWq1VT83aTM3aTM3aTM3aTM3aQs3aQs3aQs3aQs3a/Y1ES9VTs7ZQsxa7N8pUT81a7N4oSz12b5Spnpq12L1Rpnpq1mL3RpnqqVmL3RtlqqdmLXZvlKmemrXYvVGmemrWYvdGmeqpWYvdG2Wqp2Ytdm+UqZ6atdi9UaZ6atZS90Y16t6oRt0b1ah7oxp1b1Sj7o1q1L1Rjbo3qlH3RjXq3qhO3RvVqXujOnVvVKfujeqBmbWdujeqU/dGdereqE7dG9Wpe6M6dW9Up+6N6tS9UZ26N6pT90Z16t6oTt0b1al7ozp1b1Sn7o3q1L1Rnbo3qlP3RnXq3qhO3RvVqXujOnVvVKfujerUvVGdujeqU/dGdereqE7dG9Wpe6M6dW9Up+6N6tS9UZ26N6pT90Z16t6oTt0b1al7ozp4b5T2Q31JM/XYrLXUY7PWUo/NWks9Nmst9distdRjs9ZSj81aQz14b5SlHpu1lnpq1oL3RlnqqVmL1Lw0NAEx6NC0valHWjw0aW7GtxxL1+9HP/6xTr7n7V09v6e/pnboryoz/Qlbf0yGfiHXr+T6M7n+Rq6/c+uv2Ou/rR98/Tf1k6//lXz9r+TrfyVf/7c3yazWX6H1t5AP/S21mX5s/rYchv4SZvqx+Wvqb9j8bZJO/c93Q/7Ob61hs3qtV2yur/WKnQHWelVHXrGzxVqv2DlkrVfwzLLUK3i+WeoVPAut9Nod5abuKDd1R7mpO8pN21uNPunVUW7qjnJTd5SbuqPc1N3kphSCm9z08HqZ3JTLYTU3nTm9TGoynV4mM5lO1Y3Ty+Ql0+ll0pLp9DJZyXR6maRkOr1MTrKcxsukJNOpm4wU3WSk6CYjbe8U+5xTNxkpuslIkTQjDf3gyce6PhDB84ylP4GnFFM/ePYw9YMnClM/eE4w9Su5fnCmm/rBSW3qp35296GfnL+JnL9Czl8h56+Q81fI+bu9+Wy1fnL+Cjl/hZy/Qs5fIeevkvNXyfmr5PxVcv5ub0NbrZ+cv0rOXyXnr5LzV8n5m8n5m8n5m8n5m8n5u70hbbV+cv5mcv5mcv5mcv5mcv6Cd/fZ+sn5C97dZ+sn5y94d5+tn5y/hZy/hZy/4N2Jtn5y/oJ3J9r6yfkL3p1o6yfnL3h3oq2fnL/g3Ym2fnL+oncnmvrJ+YvenWjqJ+cvesehqZ+cv+hdhKZ+cv6i9+iZ+sn5tbsXrXU92nxbL+UH/UNT2q2pl2OmIaa5JgHUpICaMqCmAqipAmpqgJo6nKa4vf8paBqaaptrioCaEqAmAdSkgJoyoKYCqKkCamqAmnZfJ3n850NTlPk6vr2h5h1NEVBTAtS0fR3v8dQkc00FUNPu9SnlkZ9SffHdNUBNHU/T9m6KdzRFQE0JUJMAalJATRlQUwHUtH0db8fLobuo/qDp56OLtMNBybGPo7XPLkpGGaVOj49LPxw+/DZnfrsvv9t7Hz7tNzrzm5z5FWd+1Znf7MxvcebXWb4SZ/lKnOUrdZav1Fm+Umf5anvPSDyvrcrTW6dfPGfzlgVFtlD0MFAmL9l+qM/U6gu1+kqivpaZ+katvjOr314vslZ9pFafqNVDA9dUz8LauXoW1s7Vs7B2rp6atZmatZmatYWatYWatYWatQWatTXJ94OrxJl6aNaa6qFZa6qHZq2pHpq1pnpo1prqoVlrqa/QrDXVQ7PWVA/NWlM9NWu314WsVU/N2krN2krN2krN2krN2kbN2kbN2kbN2kbN2u3VIGvVU7O2UbO2UbO2UbO2UbO2U7O2U7O2U7O2U7N2d5XNYvXUrO3UrO3UrO3UrO3MrE2BmbUpMLM2BWbWpsDM2hSYWZsCM2tTYGZtCsysTYGZtSlQszZSszZSszZSszZSszZSszZSszZSszZSszZSszZSszZRszZRszZRszZhs1aPv0CuJc3UY7PWUo/NWks9Nmst9distdRjs9ZSj81aQ71gs9ZSj81aSz02ay31QLQamoAYNDTtfilFiIemFnI0vuWSR3VnKcGsCQnj5T0xxrOw+dsfhf10sKRyyJZUTyHhHE2/R/NiNLvrj5hGE+/RvBpNukfzajRyj+bVaPQezavR5Hs0r0ZT7tG8Gk29R/NqNHcafjmaOw2/Gk2+0/DL0dxp+OVo7jT8cjR3Gn45Gr1H82o0dxp+OZo7Db8czZ2GX47mTsMvR3On4VejKXcafjmaOw2/HM2dhl+O5k7DL0ejbkfTj2fNREJ7Gs3sg3s7Pzj9+oP7KSI8SZ4eG7WMg7WfH9zy+QX5zeQkX5DfnQHCF5TD8RhLzNqmX5Df/QnGGRTOL6hPvyC/uySIM6gc/mJ5mt3zF+R3r8bxBVW/O0awJa6EaUiofvet40Vrf/mCxmj87lvN0fjdt5qj0Xs0r0aDnXc1HUcXLWXv1Y6KnTQ/OhrsjPfJ0TTsdPXR0WDnmo+OBjvXfHQ02Lnmo6PRezSvRoN9Jfyjo8G+Bv3R0dxp+OVo7jT8cjR3Gn41mn6n4ZejudPwy9HcafjlaO40/HI0eo/m1Wj8pmGAWz4aj9Hp/KGD7jeRU3w9fncFCF/PeKhKe5l+PX53JhRfj9/dEcTiVsbXUydfjwS/OzTj3qgEvzs0czR+d2jmaPzu0MzR/HHO1Rp1rGdNjNE8dkNjBX5w6AezQ1PdrOmhZEwph7mmBqip42n68/cwfIGmCKgpAWoSQE0KqCnv1tSO51PlwYq5pgKoqQJqaoCaOp6mFAA1RUBNCVCTAGpSQE2A63gCXMcT4DqeANfxBLiOC+A6LoDruACu4wK4jgvgOi6A67gAruMCuI4L4DougOu4Aq7jCriOK+A6roDruAKu4wq4jivgOq6b13GN8bgTqlHyXFMD1NTxNOUAqCnu1qRhaCrze0A5AWqS7d/deAwq1vm16FwANVVATbvXpxSP+5wq5l+Qq4xbwCq1zB10dgclIDsoD2B8P7qkp+emvnUe/c7Bw2105Ta5ciuu3Opl3MpZN/fAufz64Hh2B7bz2Zn4NJh8D2Y+mHIPZj6Yeg9mPhjofPbJwUDHvg8Opl4nTS4ezHWC5+LBXCejLh7MdeLs4sHoPZj5YO7k+2Iwd/J9MZg7+b4YzJ18XwzmTr7zwbQ7+b4YzJ18XwzmTr4vBnMn3xeD0Xsw88HcyffFYFwk3+HWRZw93PYrgXWofvzj3O2VaGm7vdCCVmU8PFeLTt3uXqXeeC6iV0BNDU6ThgCoKQJqUkfrl4YrBbI+WgNLqFO3V0pZttsrpSzb7ZWuBNpur3R5z3Qbr3TNznZ7pf2C7fZK+wXb7ZUumdlu1ZVbV1kqXoi3JbXhVqc5OV6It7bbdCHeljZ+yfXp9aTPbi/E2zfcXoi3b7i9EG/fcHsh3r7h9kK8fcPtRXd8cepWrkQgk7dyJQLZbq9EINvtlQhku70SgWy3VyKQ7fZCV89tt3ohAr2+szv55Dpaz0uL9dcHxyglfz/6ITT16SQvRLcPT/JC5PzwJC9E5Q9PUu9JLpqki2eJtkzyQknlw5O80DMEH57khe6XfHiSF7oS9tlJ5nuPs2qS9x5n1STvPc6qSd57nFWT1HuSiyZ573FWTdLFHme4dbEPGW5d7BUOtwu6PnMZPc1Fg+H2W6f88dHS1XBby/H3fbWdjeL1SX5Clt/G+5Jb0ql84Zav3PIzt/zCLb9yy2/Q8kMd8vOz/J8P/Z0XwMdhL5bzY9M5lH4P5aehLKh7/MRQhnzohGDLx2aUKR+aUT0eW6Wuc/nQjLLlQzOqBxnyy0x+g155bPnY6dg6dRv2qWtOH/vUNeXvjiKp9iFf6p9ubHtAlm+m4x655Sdu+cItX7nlZ275BVr+Z/Zwvd5D+XkojXIoQz50QrDk54DNKFM+NKOsnWEO0Iyy5UMzygr3OUCvPKb8iJ2OrVM3Yp+65vSxT11T/vYoMu5mP5zIH25sc2zI8q10nGOnlp8Ct/zILT9xyxdu+Qot/yN7uJzyPZSfh1IohzLkQycEU75gM8qUD80oc2co0Iyy5UMzygz3Ar3y2PKx07F16ir2qWtNX7FPXVP+7igSSxjyQ/vTja0WZPlmOtbKLb9xy+/U8nPglh+55Sdu+cItX7nlQ1PXls9N3cxN3cxN3cxN3cJN3cJN3cJN3cJN3e1/erhYPjd1Czd1Czd1Czd1Czd1KzZ1v+iOmZ4vUdZ+tsa3fM4FG+efmwt2TviqO6zjzczxcW1uOhfsAPJlv5dwzqVP56Iufy/lWHYfcuJ0LtiR6XNzwc5iX38elTBfd7FDnnUvsmKHPEt+40wDQz40tM2nIBo0W2350Ag0b2Q36JXHlN85NzhDPvapa04f+9Q15W9PI+FYTNIjURvyzYc4tv+d52/JN69NbP+LzMXyO7P8EgK3/MgtP3HLF275yi0/c8uHpq4tn5q6JVBTtwRu6kZu6kZu6kZu6kZs6n7NxVONx8fq9NZM2f4X8hxTwc4IXzSVcX9Tn9rmn6eCHT0+NRXsRPNVZ1AZU6nTqWAHJePKYonYQcmSn7BRbcqHRrV1T6Nsbx9YLB8aftZl6ZKgVx5TvmBvEqxTV7BPXXP62KeuKX93FgkyPjr0bsi3bskUacjyzR3m9j+JXytfA7f8yC0/ccsXbvnKLT9zyy/c8qGpa8vnpq5yUzdzUzdzUzdzUzdzU3d7n8Ji+dzUzdzUzdzUzdzUzdzULdzULdzULdzULdzU3d6nsFg+N3ULN3ULN3ULN3ULN3UrNnW/5lGJrMexuZ4SukwOLcNcaU8KzqcqKjb3CQaInTw+P8B+/IVYDXU6QOzsA/ALrGOAbTpA9TjAfpDhcYf91wOUfBwq9ZxEeRogdv77/ADbIVefWiSeB4idQAF+gXkMME0HiJ2Bv2oNDGOA+XmAYyrY0dp6cKliR2tLfuMMNkM+dKwwH5nc3mKxWD40Us2n3hr0ymPK75ybuiEf+9Q1p4996pryN2eR2M83nIZUDPnmE5+7Wyx+T755QWt3i8Va+XV3i8Vq+ZFbfuKWL9zylVt+5pZfuOVDU9eWT03dGripG7mpG7mpG7mpG7mpu7tu4jflf6ZuokZsmH9qKtgZ4TN1EzViR49PTQU70XymhKNG7KBkXFmsCTsomfKxUW3Kh0a1dU+jJmim2vKh4Wddlq4JeuUx5Qv2JsE6dQX71DWnj33qmvK3Z5E0XhzTqxjyrVsyVTqyfHOHqYFbfuSWn7jlC7d85ZafoeV/1Wu/DnuxnB+bzqGUeyg/D6VSDmXIh04IpvyMzShTPjSjzJ1hhmaULR+aUWa4z9Arjym/YKdj69Qt2KeuOX3sU/el/Me//Nc//v1f/vFP//rP//H4Hx7/+p///W///4//878=","file_map":{"0":{"source":"use crate::cmp::{Ord};\n\n// TODO: Once we fully move to the new SSA pass this module can be removed and replaced\n// by the methods in the `slice` module\nimpl<T, N> [T; N] {\n #[builtin(array_len)]\n pub fn len(self) -> Field {}\n\n pub fn sort(self) -> Self where T: Ord {\n self.sort_via(|a, b| a <= b)\n }\n\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n let sorted_index = self.get_sorting_index(ordering);\n let mut result = self;\n // Ensure the indexes are correct\n for i in 0..N {\n let pos = find_index(sorted_index, i);\n assert(sorted_index[pos] == i);\n }\n // Sort the array using the indexes\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) -> [Field; 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\n // Converts an array into a slice.\n pub fn as_slice(self) -> [T] {\n let mut slice = [];\n for elem in self {\n slice = slice.push_back(elem);\n }\n slice\n }\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\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<N>(a: [Field;N], find: Field) -> Field {\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}","path":"std/array.nr"},"2":{"source":"// docs:start:eq-trait\ntrait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\nimpl Eq for Field { fn eq(self, other: Field) -> bool { self == other } }\n\nimpl Eq for u1 { fn eq(self, other: u1) -> bool { self == other } }\nimpl Eq for u8 { fn eq(self, other: u8) -> bool { self == other } }\nimpl Eq for u32 { fn eq(self, other: u32) -> bool { self == other } }\nimpl Eq for u64 { fn eq(self, other: u64) -> bool { self == other } }\n\nimpl Eq for i8 { fn eq(self, other: i8) -> bool { self == other } }\nimpl Eq for i32 { fn eq(self, other: i32) -> bool { self == other } }\nimpl Eq for i64 { fn eq(self, other: i64) -> bool { self == other } }\n\nimpl Eq for () { fn eq(_self: Self, _other: ()) -> bool { true } }\nimpl Eq for bool { fn eq(self, other: bool) -> bool { self == other } }\n\nimpl<T, N> Eq for [T; N] where T: Eq {\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<N> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B) where A: Eq, B: Eq {\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C) where A: Eq, B: Eq, C: Eq {\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D) where A: Eq, B: Eq, C: Eq, D: Eq {\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E) where A: Eq, B: Eq, C: Eq, D: Eq, E: Eq {\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3) & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\nstruct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n// docs:start:ord-trait\ntrait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else {\n if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n\nimpl<T, N> Ord for [T; N] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B) where A: Ord, B: Ord {\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C) where A: Ord, B: Ord, C: Ord {\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D) where A: Ord, B: Ord, C: Ord, D: Ord {\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E) where A: Ord, B: Ord, C: Ord, D: Ord, E: Ord {\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n","path":"std/cmp.nr"},"3":{"source":"struct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n // TODO: change this to return a u64 as Noir now\n // uses u64 for indexing\n len: Field,\n empty_value: T,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new(initial_value: T) -> Self {\n BoundedVec { storage: [initial_value; MaxLen], len: 0, empty_value: initial_value }\n }\n\n pub fn get(mut self: Self, index: Field) -> T {\n assert(index as u64 < self.len as u64);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: Field) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len as u64 < MaxLen as u64, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> Field {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> Field {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len as u64 <= MaxLen as u64, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_bounded_vec<Len>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len as u64 <= MaxLen as u64, \"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 as Field)] = vec.get_unchecked(i as Field);\n }\n }\n self.len = new_len;\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len as u64 > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = self.empty_value;\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if (!exceeded_len) {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}","path":"std/collections/bounded_vec.nr"},"19":{"source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n \n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n \n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n \n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> Field {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n","path":"std/field.nr"},"27":{"source":"mod poseidon;\nmod mimc;\n\n#[foreign(sha256)]\n// docs:start:sha256\npub fn sha256<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\nstruct PedersenPoint {\n x : Field,\n y : Field,\n}\n\npub fn pedersen_commitment<N>(input: [Field; N]) -> PedersenPoint\n// docs:end:pedersen_commitment\n{\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[foreign(pedersen_commitment)]\npub fn __pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\npub fn pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> PedersenPoint {\n let values = __pedersen_commitment_with_separator(input, separator);\n PedersenPoint { x: values[0], y: values[1] }\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<N>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\npub fn pedersen_hash_with_separator<N>(input: [Field; N], separator: u32) -> Field {}\n\npub fn hash_to_field<N>(input: [Field; N]) -> Field {\n let mut inputs_as_bytes = [];\n\n for i in 0..N {\n let input_bytes = input[i].to_le_bytes(32);\n for i in 0..32 {\n inputs_as_bytes = inputs_as_bytes.push_back(input_bytes[i]);\n }\n }\n\n let hashed_input = blake2s(inputs_as_bytes);\n crate::field::bytes32_to_field(hashed_input)\n}\n\n#[foreign(keccak256)]\n// docs:start:keccak256\npub fn keccak256<N>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<N>(_input: [u8; N], _state_length: u32) -> [u8; N] {}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n","path":"std/hash.nr"},"40":{"source":"use crate::ops::{Add, Sub, Mul, Div, Rem, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\n\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 {\n lo: lo as Field,\n hi: hi as Field,\n }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo,hi)\n }\n\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 {\n lo,\n hi,\n }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0;16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0;16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1; \n if N <= 18 {\n for i in 0..N-2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N-1 { \n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 {\n lo: lo as Field,\n hi: hi as Field,\n }\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else {\n if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n }\n \n } as Field\n }\n\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if self < b {\n (U128::from_u64s_le(0, 0), self)\n } else {\n //TODO check if this can overflow?\n let (q,r) = self.unconstrained_div(b * U128::from_u64s_le(2,0));\n let q_mul_2 = q * U128::from_u64s_le(2,0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::from_u64s_le(1,0), r - b)\n }\n\n } \n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f-lo) / pow64;\n U128 {\n lo,\n hi,\n }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo+self.hi*pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64))as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: U128) -> U128 { \n assert(other < U128::from_u64s_le(128,0), \"attempt to shift left with overflow\");\n let exp_bits = other.lo.to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: U128) -> U128 { \n assert(other < U128::from_u64s_le(128,0), \"attempt to shift right with overflow\");\n let exp_bits = other.lo.to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n","path":"std/uint128.nr"},"49":{"source":"use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::{ContractClassFunctionLeafPreimage, FunctionLeafPreimage};\nuse crate::contract_class::ContractClassId;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint256::U256;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT, ARGS_HASH_CHUNK_LENGTH, CONTRACT_TREE_HEIGHT, FUNCTION_TREE_HEIGHT,\n NOTE_HASH_TREE_HEIGHT, NUM_FIELDS_PER_SHA256, GENERATOR_INDEX__SILOED_COMMITMENT,\n GENERATOR_INDEX__OUTER_NULLIFIER, GENERATOR_INDEX__VK, GENERATOR_INDEX__CONSTRUCTOR,\n GENERATOR_INDEX__PARTIAL_ADDRESS, GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__COMMITMENT_NONCE, GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__FUNCTION_ARGS\n};\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\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 + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < (args.len() as u32) {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < (args.len() as u32) {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\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<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\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\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n contract_class_id: ContractClassId,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, contract_class_id };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn read_request_root_from_siblings(\n read_request: Field,\n leaf_index: Field,\n sibling_path: [Field; NOTE_HASH_TREE_HEIGHT]\n) -> Field {\n root_from_sibling_path(read_request, leaf_index, sibling_path)\n}\n\npub fn silo_commitment(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_COMMITMENT\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n portal_contract_address: EthAddress,\n chain_id: Field,\n content: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new(0);\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, portal_contract_address.to_field(), chain_id, content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\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//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\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 // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_integer(previous_log_hash[0]),\n U128::from_integer(previous_log_hash[1]),\n U128::from_integer(current_log_hash[0]),\n U128::from_integer(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_commitment_nonce(first_nullifier: Field, commitment_index: Field) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index\n ],\n GENERATOR_INDEX__COMMITMENT_NONCE\n )\n}\n\npub fn compute_unique_siloed_commitment(nonce: Field, siloed_commitment: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_commitment\n ],\n GENERATOR_INDEX__UNIQUE_COMMITMENT\n )\n}\n\npub fn compute_unique_siloed_commitments<N>(\n first_nullifier: Field,\n siloed_commitments: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_commitments = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_commitment = siloed_commitments[i];\n if siloed_commitment.value != 0 {\n let nonce = compute_commitment_nonce(first_nullifier, i);\n unique_siloed_commitments[i] = SideEffect {\n value: compute_unique_siloed_commitment(nonce, siloed_commitment.value),\n counter: siloed_commitment.counter\n };\n }\n }\n unique_siloed_commitments\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/hash.nr"},"65":{"source":"use dep::std::{cmp::Eq, grumpkin_scalar::GrumpkinScalar, grumpkin_scalar_mul::grumpkin_fixed_base};\nuse crate::grumpkin_point::GrumpkinPoint;\n\nglobal GRUMPKIN_PRIVATE_KEY_SERIALIZED_LEN: Field = 2;\n\nstruct GrumpkinPrivateKey {\n high: Field,\n low: Field,\n}\n\nimpl Eq for GrumpkinPrivateKey {\n fn eq(self, key: GrumpkinPrivateKey) -> bool {\n (key.high == self.high) & (key.low == self.low)\n }\n}\n\nimpl GrumpkinPrivateKey {\n pub fn new(high: Field, low: Field) -> Self {\n GrumpkinPrivateKey { high, low }\n }\n\n pub fn zero() -> Self {\n Self { high: 0, low: 0 }\n }\n\n pub fn is_zero(self) -> bool {\n (self.high == 0) & (self.low == 0)\n }\n\n pub fn serialize(self) -> [Field; GRUMPKIN_PRIVATE_KEY_SERIALIZED_LEN] {\n [self.high, self.low]\n }\n\n pub fn derive_public_key(self) -> GrumpkinPoint {\n let public_key = grumpkin_fixed_base(GrumpkinScalar { high: self.high, low: self.low });\n GrumpkinPoint { x: public_key[0], y: public_key[1] }\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/grumpkin_private_key.nr"},"66":{"source":"use crate::{\n constants::{GENERATOR_INDEX__CONTRACT_ADDRESS, GENERATOR_INDEX__PARTIAL_ADDRESS, GENERATOR_INDEX__CONSTRUCTOR},\n hash::pedersen_hash, contract_class::ContractClassId, utils, grumpkin_point::GrumpkinPoint\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, ToField, Serialize, Deserialize};\nuse crate::type_serialization::{ETH_ADDRESS_SERIALIZED_LEN, AZTEC_ADDRESS_SERIALIZED_LEN};\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 Serialize<AZTEC_ADDRESS_SERIALIZED_LEN> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_SERIALIZED_LEN] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_SERIALIZED_LEN> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_SERIALIZED_LEN]) -> Self {\n AztecAddress::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute_from_public_key(\n pub_key: GrumpkinPoint,\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n portal_contract_address: EthAddress\n ) -> AztecAddress {\n AztecAddress::compute(\n PublicKeysHash::compute(pub_key),\n PartialAddress::compute(\n contract_class_id,\n salt,\n initialization_hash,\n portal_contract_address\n )\n )\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS\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\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_SERIALIZED_LEN> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_SERIALIZED_LEN] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_SERIALIZED_LEN> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_SERIALIZED_LEN]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\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 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 portal_contract_address: EthAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, portal_contract_address)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n pedersen_hash(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\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, portal_contract_address: EthAddress) -> Self {\n SaltedInitializationHash::from_field(\n pedersen_hash(\n [\n salt,\n initialization_hash,\n portal_contract_address.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 assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n// Public keys hash. Used in the computation of an address.\nstruct PublicKeysHash {\n inner: Field\n}\n\nimpl ToField for PublicKeysHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<1> for PublicKeysHash {\n fn serialize(self: Self) -> [Field; 1] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<1> for PublicKeysHash {\n fn deserialize(fields: [Field; 1]) -> Self {\n PublicKeysHash::from_field(fields[0])\n }\n}\n\nimpl PublicKeysHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(public_key: GrumpkinPoint) -> Self {\n PublicKeysHash::from_field(\n pedersen_hash(\n [\n public_key.x,\n public_key.y\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 assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\npub fn compute_initialization_hash(selector: Field, args_hash: Field) -> Field {\n pedersen_hash(\n [\n selector,\n args_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/address.nr"},"69":{"source":"use crate::constants::GENERATOR_INDEX__TX_REQUEST;\nuse crate::address::AztecAddress;\nuse crate::transaction::context::TxContext;\nuse crate::abis::function_data::FunctionData;\nuse crate::traits::Hash;\n\nstruct TxRequest {\n origin : AztecAddress,\n args_hash : Field,\n tx_context : TxContext,\n function_data : FunctionData\n}\n\nimpl Hash for TxRequest {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.origin.to_field(),\n self.function_data.hash(),\n self.args_hash,\n self.tx_context.hash(),\n ], GENERATOR_INDEX__TX_REQUEST)\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/transaction/request.nr"},"70":{"source":"use crate::constants::GENERATOR_INDEX__TX_CONTEXT;\nuse crate::contrakt::deployment_data::ContractDeploymentData;\nuse crate::traits::Hash;\n\nstruct TxContext {\n is_fee_payment_tx : bool,\n is_rebate_payment_tx : bool,\n is_contract_deployment_tx : bool,\n\n contract_deployment_data : ContractDeploymentData,\n\n chain_id : Field,\n version : Field,\n}\n\nimpl Hash for TxContext {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.is_fee_payment_tx as Field,\n self.is_rebate_payment_tx as Field,\n self.is_contract_deployment_tx as Field,\n self.contract_deployment_data.hash(),\n self.chain_id,\n self.version,\n ], GENERATOR_INDEX__TX_CONTEXT)\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/transaction/context.nr"},"72":{"source":"use crate::{\n address::EthAddress, contract_class::ContractClassId,\n constants::{CONTRACT_DEPLOYMENT_DATA_LENGTH, GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA},\n grumpkin_point::GrumpkinPoint, hash::pedersen_hash, traits::{Deserialize, Hash, Serialize}\n};\n\n// docs:start:contract-deployment-data\nstruct ContractDeploymentData {\n public_key : GrumpkinPoint,\n initialization_hash : Field,\n contract_class_id : ContractClassId,\n contract_address_salt : Field,\n portal_contract_address : EthAddress,\n}\n// docs:end:contract-deployment-data\n\nimpl Eq for ContractDeploymentData {\n fn eq(self, other: Self) -> bool {\n self.public_key.eq(other.public_key) &\n self.initialization_hash.eq(other.initialization_hash) &\n self.contract_class_id.eq(other.contract_class_id) &\n self.contract_address_salt.eq(other.contract_address_salt) &\n self.portal_contract_address.eq(other.portal_contract_address)\n }\n}\n\nimpl Hash for ContractDeploymentData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA)\n }\n}\n\nimpl Serialize<CONTRACT_DEPLOYMENT_DATA_LENGTH> for ContractDeploymentData {\n fn serialize(self) -> [Field; CONTRACT_DEPLOYMENT_DATA_LENGTH] {\n [\n self.public_key.x,\n self.public_key.y,\n self.initialization_hash,\n self.contract_class_id.to_field(),\n self.contract_address_salt,\n self.portal_contract_address.to_field(),\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_DEPLOYMENT_DATA_LENGTH> for ContractDeploymentData {\n fn deserialize(serialized: [Field; CONTRACT_DEPLOYMENT_DATA_LENGTH]) -> Self {\n Self {\n public_key: GrumpkinPoint {\n x: serialized[0],\n y: serialized[1],\n },\n initialization_hash: serialized[2],\n contract_class_id: ContractClassId::from_field(serialized[3]),\n contract_address_salt: serialized[4],\n portal_contract_address: EthAddress::from_field(serialized[5]),\n }\n }\n}\n\nimpl ContractDeploymentData {\n fn assert_is_zero(self) {\n self.public_key.assert_is_zero();\n assert(self.initialization_hash == 0);\n self.contract_class_id.assert_is_zero();\n assert(self.contract_address_salt == 0);\n self.portal_contract_address.assert_is_zero();\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let data: ContractDeploymentData = dep::std::unsafe::zeroed();\n let serialized = data.serialize();\n let deserialized = ContractDeploymentData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/contrakt/deployment_data.nr"},"75":{"source":"use crate::traits::{Serialize, Deserialize};\nuse dep::std::cmp::Eq;\n\nglobal GRUMPKIN_POINT_SERIALIZED_LEN: Field = 2;\n\nstruct GrumpkinPoint {\n x: Field,\n y: Field,\n}\n\nimpl Serialize<GRUMPKIN_POINT_SERIALIZED_LEN> for GrumpkinPoint {\n fn serialize(self) -> [Field; GRUMPKIN_POINT_SERIALIZED_LEN] {\n [self.x, self.y]\n }\n}\n\nimpl Deserialize<GRUMPKIN_POINT_SERIALIZED_LEN> for GrumpkinPoint {\n fn deserialize(serialized: [Field; GRUMPKIN_POINT_SERIALIZED_LEN]) -> Self {\n Self {\n x: serialized[0],\n y: serialized[1],\n }\n }\n}\n\nimpl Eq for GrumpkinPoint {\n fn eq(self, point: GrumpkinPoint) -> bool {\n (point.x == self.x) & (point.y == self.y)\n }\n}\n\nimpl GrumpkinPoint {\n pub fn new(x: Field, y: Field) -> Self {\n Self { x, y }\n }\n\n pub fn zero() -> Self {\n Self { x: 0, y: 0 }\n }\n\n pub fn is_zero(self) -> bool {\n (self.x == 0) & (self.y == 0)\n }\n\n // TODO(David): Would be quite careful here as (0,0) is not a point\n // on the curve. A boolean flag may be the better approach here,\n // would also cost less constraints. It seems like we don't need to \n // group arithmetic either. \n fn assert_is_zero(self) {\n assert(self.x == 0);\n assert(self.y == 0);\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/grumpkin_point.nr"},"76":{"source":"use dep::std::cmp::Eq;\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 u16 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/traits.nr"},"79":{"source":"use dep::std::array;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, is_empty};\n\npub fn array_to_bounded_vec<T, N>(array: [T; N]) -> BoundedVec<T, N> where T: Empty + Eq {\n let mut len = 0;\n for elem in array {\n if !is_empty(elem) {\n len += 1;\n }\n }\n\n BoundedVec { storage: array, len, empty_value: T::empty() }\n}\n\n// Routine which validates that all zero values of an array form a contiguous region at the end, i.e.,\n// of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is\n// valid.\npub fn validate_array<T, N>(array: [T; N]) where T: Empty + Eq {\n let array_length = array.len();\n\n let mut first_zero_pos = array_length;\n let mut last_non_zero_pos = 0;\n\n for i in 0..array_length {\n let is_empty = is_empty(array[i]);\n if !is_empty {\n last_non_zero_pos = i;\n } else if is_empty & (first_zero_pos == array_length) {\n first_zero_pos = i;\n }\n }\n assert((last_non_zero_pos as u64) <= (first_zero_pos as u64), \"invalid array\");\n}\n\n// Helper method to determine the number of non-zero/empty elements in a validated array (ie, validate_array(array) \n// should be true).\npub fn array_length<T, N>(array: [T; N]) -> Field where T: Empty + Eq {\n let mut length = 0;\n let mut end = false;\n for elem in array {\n end |= is_empty(elem);\n if !end {\n length += 1;\n }\n }\n length\n}\n\npub fn array_eq<T, N, S>(array: [T; N], expected: [T; S]) -> bool where T: Empty + Eq {\n let mut eq = array_length(array) == S;\n\n for i in 0..S {\n eq &= array[i].eq(expected[i]);\n }\n\n eq\n}\n\n#[test]\nfn smoke_validate_array() {\n let valid_array = [];\n validate_array(valid_array);\n\n let valid_array = [0];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3, 0];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3, 0, 0];\n validate_array(valid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid() {\n let invalid_array = [0, 1];\n validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case2() {\n let invalid_array = [0, 0, 0, 0, 1];\n validate_array(invalid_array);\n}\n\n#[test]\nfn test_empty_array_length() {\n assert_eq(array_length([]), 0);\n assert_eq(array_length([0]), 0);\n assert_eq(array_length([0, 0, 0]), 0);\n}\n\n#[test]\nfn test_array_length() {\n assert_eq(array_length([123]), 1);\n assert_eq(array_length([123, 456]), 2);\n assert_eq(array_length([123, 456, 0]), 2);\n assert_eq(array_length([123, 0, 456]), 1);\n assert_eq(array_length([0, 123, 0, 456]), 0);\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/utils/arrays.nr"},"81":{"source":"// This is a quick struct made to pack 32 bytes into 4 u64s\n// and then pack those into two u128s.\n//\n// Creating a u256 was made for convenience.\n//\n// This is needed because in the cpp code, we have accumulate_sha256\n// which returns 2 field elements, one for the high and low limb.\nstruct U256 {\n // This is in big-endian order, typically because\n // sha256 is usually in big endian order.\n // Note: this means that inner[0] has the most significant 64 bits.\n inner : [u64; 4]\n}\n\nimpl U256 {\n pub fn from_bytes32(bytes: [u8; 32]) -> U256 {\n // We use addition rather than a bitwise OR as the bitshifts ensure that none of the bytes overlap each other.\n let high_0 = ((bytes[0] as u64) << 56)\n + ((bytes[1] as u64) << 48)\n + ((bytes[2] as u64) << 40)\n + ((bytes[3] as u64) << 32)\n + ((bytes[4] as u64) << 24)\n + ((bytes[5] as u64) << 16)\n + ((bytes[6] as u64) << 8)\n + (bytes[7] as u64);\n\n let high_1 = ((bytes[8] as u64) << 56)\n + ((bytes[9] as u64) << 48)\n + ((bytes[10] as u64) << 40)\n + ((bytes[11] as u64) << 32)\n + ((bytes[12] as u64) << 24)\n + ((bytes[13] as u64) << 16)\n + ((bytes[14] as u64) << 8)\n + (bytes[15] as u64);\n\n let low_0 = ((bytes[16] as u64) << 56)\n + ((bytes[17] as u64) << 48)\n + ((bytes[18] as u64) << 40)\n + ((bytes[19] as u64) << 32)\n + ((bytes[20] as u64) << 24)\n + ((bytes[21] as u64) << 16)\n + ((bytes[22] as u64) << 8)\n + (bytes[23] as u64);\n\n let low_1 = ((bytes[24] as u64) << 56)\n + ((bytes[25] as u64) << 48)\n + ((bytes[26] as u64) << 40)\n + ((bytes[27] as u64) << 32)\n + ((bytes[28] as u64) << 24)\n + ((bytes[29] as u64) << 16)\n + ((bytes[30] as u64) << 8)\n + (bytes[31] as u64);\n\n U256 { inner: [high_0, high_1, low_0, low_1] }\n }\n\n // We cannot represent u128 in the type system\n // so we cannot return a u128 type.\n // \n // This as conversion assumes that Field can store 128 bits of information\n // or else the conversion is lossy.\n //\n // TODO: Add a test for this.\n pub fn to_u128_limbs(self) -> [Field; 2] {\n let two_pow_64 = 2.pow_32(64);\n\n let high = (self.inner[0] as Field) * two_pow_64 + self.inner[1] as Field;\n let low = (self.inner[2] as Field) * two_pow_64 + self.inner[3] as Field;\n\n [high, low]\n }\n}\n\n#[test]\nfn smoke_u256_from_bytes32_all_zeroes() {\n let input = [0; 32];\n let result = U256::from_bytes32(input);\n assert(result.inner[0] == 0);\n assert(result.inner[1] == 0);\n assert(result.inner[2] == 0);\n assert(result.inner[3] == 0);\n}\n\n#[test]\nfn smoke_u256_from_bytes32_one_zero_zero_zero() {\n // We want to output [1,0,0,0]\n let input = [\n 0, 0, 0, 0, 0, 0, 0, 1,\n 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0\n ];\n let result = U256::from_bytes32(input);\n\n assert(result.inner[0] == 1);\n assert(result.inner[1] == 0);\n assert(result.inner[2] == 0);\n assert(result.inner[3] == 0);\n}\n\n#[test]\nfn smoke_u256_from_bytes32_test() {\n /*\n input: [ 0xAA, 0xBB, 0xCC, 0xDD, \n 0xEE, 0xFF, 0x00, 0x11, \n 0x22, 0x33, 0x44, 0x55, \n 0x66, 0x77, 0x88, 0x99, \n 0x11, 0x22, 0x33, 0x44, \n 0x55, 0x66, 0x77, 0x88, \n 0x99, 0xAA, 0xBB, 0xCC, \n 0xDD, 0xEE, 0xFF, 0x00\n ]\n output: inner[0]: 0xAABBCCDDEEFF0011\n inner[1]: 0x2233445566778899\n inner[2]: 0x1122334455667788\n inner[3]: 0x99AABBCCDDEEFF00\n */\n let input : [u8;32] = [\n 0xAA, 0xBB, 0xCC, 0xDD,\n 0xEE, 0xFF, 0x00, 0x11,\n 0x22, 0x33, 0x44, 0x55,\n 0x66, 0x77, 0x88, 0x99,\n 0x11, 0x22, 0x33, 0x44,\n 0x55, 0x66, 0x77, 0x88,\n 0x99, 0xAA, 0xBB, 0xCC,\n 0xDD, 0xEE, 0xFF, 0x00\n ];\n let result = U256::from_bytes32(input);\n\n assert(result.inner[0] == 0xAABBCCDDEEFF0011);\n assert(result.inner[1] == 0x2233445566778899);\n assert(result.inner[2] == 0x1122334455667788);\n assert(result.inner[3] == 0x99AABBCCDDEEFF00);\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/utils/uint256.nr"},"85":{"source":"use crate::constants::{GENERATOR_INDEX__SIDE_EFFECT};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash, Serialize, Deserialize};\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\nstruct SideEffect{\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<2> for SideEffect {\n fn serialize(self) -> [Field; 2] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<2> for SideEffect {\n fn deserialize(values: [Field; 2]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nstruct SideEffectLinkedToNoteHash{\n value: Field,\n note_hash: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffectLinkedToNoteHash {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffectLinkedToNoteHash {\n fn eq(self, side_effect: SideEffectLinkedToNoteHash) -> bool {\n (self.value == side_effect.value)\n & (self.note_hash == side_effect.note_hash) \n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffectLinkedToNoteHash {\n fn empty() -> Self {\n SideEffectLinkedToNoteHash {\n value: 0,\n note_hash: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffectLinkedToNoteHash {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<3> for SideEffectLinkedToNoteHash {\n fn serialize(self) -> [Field; 3] {\n [self.value, self.note_hash, self.counter as Field]\n }\n}\n\nimpl Deserialize<3> for SideEffectLinkedToNoteHash {\n fn deserialize(values: [Field; 3]) -> Self {\n Self {\n value: values[0],\n note_hash: values[1],\n counter: values[2] as u32,\n }\n }\n}\n\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr"},"93":{"source":"use dep::std::cmp::Eq;\nuse crate::{\n address::AztecAddress, traits::{Empty, Serialize, Deserialize}, grumpkin_point::GrumpkinPoint,\n grumpkin_private_key::GrumpkinPrivateKey\n};\n\nglobal NULLIFIER_KEY_VALIDATION_REQUEST_SERIALIZED_LEN = 4;\nglobal NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_SERIALIZED_LEN = 5;\n\nstruct NullifierKeyValidationRequest {\n public_key: GrumpkinPoint,\n secret_key: GrumpkinPrivateKey,\n}\n\nimpl Eq for NullifierKeyValidationRequest {\n fn eq(self, request: NullifierKeyValidationRequest) -> bool {\n (request.public_key.eq(self.public_key))\n & (request.secret_key.eq(self.secret_key))\n }\n}\n\nimpl Empty for NullifierKeyValidationRequest {\n fn empty() -> Self {\n NullifierKeyValidationRequest {\n public_key: GrumpkinPoint::zero(),\n secret_key: GrumpkinPrivateKey::zero(),\n }\n }\n}\n\nimpl Serialize<NULLIFIER_KEY_VALIDATION_REQUEST_SERIALIZED_LEN> for NullifierKeyValidationRequest {\n fn serialize(self) -> [Field; NULLIFIER_KEY_VALIDATION_REQUEST_SERIALIZED_LEN] {\n [\n self.public_key.x,\n self.public_key.y,\n self.secret_key.high,\n self.secret_key.low,\n ]\n }\n}\n\nimpl Deserialize<NULLIFIER_KEY_VALIDATION_REQUEST_SERIALIZED_LEN> for NullifierKeyValidationRequest {\n fn deserialize(fields: [Field; NULLIFIER_KEY_VALIDATION_REQUEST_SERIALIZED_LEN]) -> Self {\n Self {\n public_key: GrumpkinPoint::new(fields[0], fields[1]),\n secret_key: GrumpkinPrivateKey::new(fields[2], fields[3]),\n }\n }\n}\n\nimpl NullifierKeyValidationRequest {\n pub fn to_context(self, contract_address: AztecAddress) -> NullifierKeyValidationRequestContext {\n NullifierKeyValidationRequestContext { public_key: self.public_key, secret_key: self.secret_key, contract_address }\n }\n}\n\nstruct NullifierKeyValidationRequestContext {\n public_key: GrumpkinPoint,\n secret_key: GrumpkinPrivateKey,\n contract_address: AztecAddress,\n}\n\nimpl Eq for NullifierKeyValidationRequestContext {\n fn eq(self, request: NullifierKeyValidationRequestContext) -> bool {\n (request.public_key.eq(self.public_key))\n & (request.secret_key.eq(self.secret_key))\n & (request.contract_address.eq(self.contract_address))\n }\n}\n\nimpl Empty for NullifierKeyValidationRequestContext {\n fn empty() -> Self {\n NullifierKeyValidationRequestContext {\n public_key: GrumpkinPoint::zero(),\n secret_key: GrumpkinPrivateKey::zero(),\n contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl Serialize<NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_SERIALIZED_LEN> for NullifierKeyValidationRequestContext {\n fn serialize(self) -> [Field; NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_SERIALIZED_LEN] {\n [\n self.public_key.x,\n self.public_key.y,\n self.secret_key.high,\n self.secret_key.low,\n self.contract_address.to_field(),\n ]\n }\n}\n\nimpl Deserialize<NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_SERIALIZED_LEN> for NullifierKeyValidationRequestContext {\n fn deserialize(fields: [Field; NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_SERIALIZED_LEN]) -> Self {\n Self {\n public_key: GrumpkinPoint::new(fields[0], fields[1]),\n secret_key: GrumpkinPrivateKey::new(fields[2], fields[3]),\n contract_address: AztecAddress::from_field(fields[4]),\n }\n }\n}\n\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/nullifier_key_validation_request.nr"},"96":{"source":"use crate::{\n abis::function_selector::FunctionSelector,\n constants::{GENERATOR_INDEX__FUNCTION_DATA, FUNCTION_DATA_LENGTH}, hash::pedersen_hash,\n traits::{Serialize, Hash, Deserialize}\n};\n\nstruct FunctionData {\n // First four bytes of the abi encoding \n // of a function. \n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n is_constructor : bool,\n}\n\nimpl Eq for FunctionData {\n fn eq(self, other: Self) -> bool {\n self.selector.eq(other.selector) &\n self.is_internal == other.is_internal &\n self.is_private == other.is_private &\n self.is_constructor == other.is_constructor\n }\n}\n\nimpl Serialize<FUNCTION_DATA_LENGTH> for FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn serialize(self) -> [Field; FUNCTION_DATA_LENGTH] {\n [\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.is_constructor as Field,\n ]\n }\n}\n\nimpl Deserialize<FUNCTION_DATA_LENGTH> for FunctionData {\n fn deserialize(serialized: [Field; FUNCTION_DATA_LENGTH]) -> Self {\n Self {\n selector: FunctionSelector::from_field(serialized[0]),\n is_internal: serialized[1] as bool,\n is_private: serialized[2] as bool,\n is_constructor: serialized[3] as bool,\n }\n }\n}\n\nimpl Hash for FunctionData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let data: FunctionData = dep::std::unsafe::zeroed();\n let serialized = data.serialize();\n let deserialized = FunctionData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let data: FunctionData = dep::std::unsafe::zeroed();\n let hash = data.hash();\n\n // Value from function_data.test.ts \"computes empty item hash\" test\n assert_eq(hash, 0x200569267c0f73ac89aaa414239398db9445dd4ad3a8cf37015cd55b8d4c5e8d);\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr"},"100":{"source":"use crate::address::AztecAddress;\nuse dep::std::cmp::Eq;\nuse crate::traits::Empty;\n\nstruct CallerContext {\n msg_sender: AztecAddress,\n storage_contract_address: AztecAddress,\n}\n\nimpl Eq for CallerContext {\n fn eq(self, caller_context: CallerContext) -> bool {\n caller_context.msg_sender.eq(self.msg_sender)\n & caller_context.storage_contract_address.eq(self.storage_contract_address)\n }\n}\n\nimpl Empty for CallerContext {\n fn empty() -> Self {\n CallerContext {\n msg_sender: AztecAddress::zero(),\n storage_contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl CallerContext {\n pub fn is_empty(self) -> bool {\n self.msg_sender.is_zero() & self.storage_contract_address.is_zero()\n }\n}\n\nstruct CallRequest {\n hash: Field,\n caller_contract_address: AztecAddress,\n caller_context: CallerContext,\n start_side_effect_counter: u32,\n end_side_effect_counter: u32,\n}\n\nimpl Eq for CallRequest {\n fn eq(self, call_request: CallRequest) -> bool {\n (call_request.hash == self.hash)\n & (call_request.caller_contract_address.eq(self.caller_contract_address))\n & (call_request.caller_context.eq(self.caller_context))\n & (call_request.start_side_effect_counter == self.start_side_effect_counter)\n & (call_request.end_side_effect_counter == self.end_side_effect_counter)\n }\n}\n\nimpl Empty for CallRequest {\n fn empty() -> Self {\n CallRequest {\n hash: 0,\n caller_contract_address: AztecAddress::zero(),\n caller_context: CallerContext::empty(),\n start_side_effect_counter: 0,\n end_side_effect_counter: 0,\n }\n }\n}\n\nimpl CallRequest {\n pub fn is_empty(self) -> bool {\n self.hash == 0\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/call_request.nr"},"103":{"source":"use crate::abis::function_selector::FunctionSelector;\nuse crate::constants::GENERATOR_INDEX__FUNCTION_LEAF;\nuse crate::traits::Hash;\n\nstruct FunctionLeafPreimage {\n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n vk_hash : Field,\n acir_hash : Field\n}\n\nimpl Hash for FunctionLeafPreimage {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.vk_hash,\n self.acir_hash\n ], GENERATOR_INDEX__FUNCTION_LEAF)\n }\n}\n\nstruct ContractClassFunctionLeafPreimage {\n selector : FunctionSelector,\n vk_hash : Field,\n}\n\nimpl Hash for ContractClassFunctionLeafPreimage {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.selector.to_field(),\n self.vk_hash,\n ], GENERATOR_INDEX__FUNCTION_LEAF)\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/function_leaf_preimage.nr"},"105":{"source":"use crate::abis::{\n combined_accumulated_data::{\n CombinedAccumulatedData, FinalAccumulatedData, AccumulatedNonRevertibleData,\n CombinedAccumulatedDataBuilder\n},\n combined_constant_data::CombinedConstantData\n};\nuse crate::mocked::AggregationObject;\n\nstruct PrivateKernelInnerCircuitPublicInputs {\n aggregation_object: AggregationObject,\n max_non_revertible_side_effect_counter: u32,\n end: CombinedAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PrivateKernelTailCircuitPublicInputs {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: FinalAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PublicKernelCircuitPublicInputs {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: CombinedAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PrivateKernelCircuitPublicInputsBuilder {\n aggregation_object: AggregationObject,\n max_non_revertible_side_effect_counter: u32,\n end: CombinedAccumulatedDataBuilder,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nimpl PrivateKernelCircuitPublicInputsBuilder {\n pub fn to_inner(self) -> PrivateKernelInnerCircuitPublicInputs {\n PrivateKernelInnerCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n max_non_revertible_side_effect_counter: self.max_non_revertible_side_effect_counter,\n end: self.end.finish(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n\n pub fn to_tail(\n self,\n end_non_revertible: AccumulatedNonRevertibleData\n ) -> PrivateKernelTailCircuitPublicInputs {\n PrivateKernelTailCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n end_non_revertible,\n end: self.end.to_final(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n}\n\nstruct PublicKernelCircuitPublicInputsBuilder {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: CombinedAccumulatedDataBuilder,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nimpl PublicKernelCircuitPublicInputsBuilder {\n pub fn to_inner(self) -> PublicKernelCircuitPublicInputs {\n PublicKernelCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n end_non_revertible: self.end_non_revertible,\n end: self.end.finish(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n}\n\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/kernel_circuit_public_inputs.nr"},"107":{"source":"use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_field(value: Field) -> Self {\n Self { inner: value as u32 }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr"},"110":{"source":"use crate::abis::{\n function_data::FunctionData, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{GENERATOR_INDEX__CONTRACT_LEAF};\nuse crate::traits::Hash;\n\nstruct ContractClassId {\n inner: Field\n}\n\nimpl Eq for ContractClassId {\n fn eq(self, other: ContractClassId) -> bool {\n other.inner == self.inner\n }\n}\n\nimpl ContractClassId {\n pub fn compute(\n artifact_hash: Field,\n private_functions_root: Field,\n public_bytecode_commitment: Field\n ) -> Self {\n let hash = dep::std::hash::pedersen_hash_with_separator(\n [\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n ],\n GENERATOR_INDEX__CONTRACT_LEAF\n ); // TODO(@spalladino): Update generator index\n\n ContractClassId::from_field(hash)\n }\n\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_field(value: Field) -> Self {\n Self { inner: value }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self { inner: fields[0] }\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/contract_class.nr"},"114":{"source":"use dep::std;\nuse dep::types::{\n abis::{\n call_request::CallRequest, combined_accumulated_data::CombinedAccumulatedData,\n function_data::FunctionData, kernel_circuit_public_inputs::PrivateKernelCircuitPublicInputsBuilder,\n membership_witness::ReadRequestMembershipWitness, new_contract_data::NewContractData,\n nullifier_key_validation_request::NullifierKeyValidationRequestContext,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_kernel::private_call_data::PrivateCallData,\n kernel_data::{PrivateKernelInnerData, PrivateKernelTailData},\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::{AztecAddress, EthAddress, PartialAddress, compute_initialization_hash},\n contract_class::ContractClassId, contrakt::deployment_data::ContractDeploymentData,\n constants::{\n MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL\n},\n grumpkin_private_key::GrumpkinPrivateKey,\n hash::{\n compute_constructor_hash, compute_l2_to_l1_hash, compute_logs_hash,\n compute_new_contract_address_hash, contract_tree_root_from_siblings,\n function_tree_root_from_siblings, pedersen_hash, private_functions_root_from_siblings,\n read_request_root_from_siblings, silo_commitment, silo_nullifier,\n stdlib_recursion_verification_key_compress_native_vk\n},\n utils::{arrays::{array_length, array_to_bounded_vec, validate_array}},\n traits::{is_empty, is_empty_array}\n};\n\npub fn validate_arrays(app_public_inputs: PrivateCircuitPublicInputs) {\n // Each of the following arrays is expected to be zero-padded.\n // In addition, some of the following arrays (new_commitments, etc...) are passed\n // to extend_from_array_to_array() routines which rely on the passed arrays to be well-formed.\n\n validate_array(app_public_inputs.return_values);\n validate_array(app_public_inputs.read_requests);\n validate_array(app_public_inputs.nullifier_key_validation_requests);\n validate_array(app_public_inputs.new_commitments);\n validate_array(app_public_inputs.new_nullifiers);\n validate_array(app_public_inputs.private_call_stack_hashes);\n validate_array(app_public_inputs.public_call_stack_hashes);\n validate_array(app_public_inputs.new_l2_to_l1_msgs);\n // encrypted_logs_hash and unencrypted_logs_hash have their own integrity checks.\n}\n\n// Validate all read requests against the historical note hash tree root.\n// Use their membership witnesses to do so. If the historical root is not yet\n// initialized, initialize it using the first read request here (if present).\n//\n// More info here:\n// - https://discourse.aztec.network/t/to-read-or-not-to-read/178\n// - https://discourse.aztec.network/t/spending-notes-which-havent-yet-been-inserted/180\npub fn validate_read_requests(\n historical_note_hash_tree_root: Field,\n read_requests: [SideEffect; MAX_READ_REQUESTS_PER_CALL],\n read_request_membership_witnesses: [ReadRequestMembershipWitness; MAX_READ_REQUESTS_PER_CALL]\n) {\n // membership witnesses must resolve to the same note hash tree root\n // for every request in all kernel iterations\n for rr_idx in 0..MAX_READ_REQUESTS_PER_CALL {\n let read_request = read_requests[rr_idx].value;\n let witness = read_request_membership_witnesses[rr_idx];\n\n // A pending commitment is the one that is not yet added to note hash tree\n // A \"transient read\" is when we try to \"read\" a pending commitment within a transaction\n // between function calls, as opposed to reading the outputs of a previous transaction\n // which is a \"pending read\".\n // A transient read is when we try to \"read\" a pending commitment\n // We determine if it is a transient read depending on the leaf index from the membership witness\n // Note that the Merkle membership proof would be null and void in case of an transient read\n // but we use the leaf index as a placeholder to detect a 'pending note read'.\n\n if (read_request != 0) & (witness.is_transient == false) {\n let root_for_read_request = read_request_root_from_siblings(read_request, witness.leaf_index, witness.sibling_path);\n assert(root_for_read_request == historical_note_hash_tree_root, \"note hash tree root mismatch\");\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1354): do we need to enforce\n // that a non-transient read_request was derived from the proper/current contract address?\n }\n }\n}\n\npub fn initialize_end_values(\n previous_kernel: PrivateKernelInnerData,\n public_inputs: &mut PrivateKernelCircuitPublicInputsBuilder\n) {\n public_inputs.constants = previous_kernel.public_inputs.constants;\n\n // Ensure the arrays are the same as previously, before we start pushing more data onto them in other\n // functions within this circuit:\n let start = previous_kernel.public_inputs.end;\n\n public_inputs.end.read_requests = array_to_bounded_vec(start.read_requests);\n public_inputs.end.nullifier_key_validation_requests = array_to_bounded_vec(start.nullifier_key_validation_requests);\n\n public_inputs.end.new_commitments = array_to_bounded_vec(start.new_commitments);\n public_inputs.end.new_nullifiers = array_to_bounded_vec(start.new_nullifiers);\n\n public_inputs.end.private_call_stack = array_to_bounded_vec(start.private_call_stack);\n public_inputs.end.public_call_stack = array_to_bounded_vec(start.public_call_stack);\n public_inputs.end.new_l2_to_l1_msgs = array_to_bounded_vec(start.new_l2_to_l1_msgs);\n\n public_inputs.end.encrypted_logs_hash = start.encrypted_logs_hash;\n public_inputs.end.unencrypted_logs_hash = start.unencrypted_logs_hash;\n\n public_inputs.end.encrypted_log_preimages_length = start.encrypted_log_preimages_length;\n public_inputs.end.unencrypted_log_preimages_length = start.unencrypted_log_preimages_length;\n\n public_inputs.end.new_contracts = array_to_bounded_vec(start.new_contracts);\n}\n\nfn perform_static_call_checks(private_call: PrivateCallData) {\n let public_inputs = private_call.call_stack_item.public_inputs;\n let is_static_call = public_inputs.call_context.is_static_call;\n if is_static_call {\n // No state changes are allowed for static calls:\n assert(\n is_empty_array(public_inputs.new_commitments), \"new_commitments must be empty for static calls\"\n );\n assert(\n is_empty_array(public_inputs.new_nullifiers), \"new_nullifiers must be empty for static calls\"\n );\n }\n}\n\nfn is_valid_caller(request: CallRequest, private_call: PrivateCallData) -> bool {\n let call_context = private_call.call_stack_item.public_inputs.call_context;\n let valid_caller_context = request.caller_context.msg_sender.eq(call_context.msg_sender)\n & request.caller_context.storage_contract_address.eq(call_context.storage_contract_address);\n request.caller_contract_address.eq(private_call.call_stack_item.contract_address)\n & (request.caller_context.is_empty() | valid_caller_context)\n}\n\nfn validate_call_requests<N>(\n call_requests: BoundedVec<CallRequest, N>,\n hashes: [Field; N],\n private_call: PrivateCallData\n) {\n assert_eq(\n array_length(hashes), call_requests.len(), \"call requests length does not match the expected length\"\n );\n for i in 0..N {\n let hash = hashes[i];\n if hash != 0 {\n let request = call_requests.get_unchecked(i);\n assert_eq(request.hash, hash, \"call stack hash does not match call request hash\");\n assert(is_valid_caller(request, private_call), \"invalid caller\");\n }\n }\n}\n\npub fn update_end_values(\n private_call: PrivateCallData,\n public_inputs: &mut PrivateKernelCircuitPublicInputsBuilder\n) {\n // If this call is a static call, certain operations are disallowed, such as creating new state.\n perform_static_call_checks(private_call);\n\n let private_call_public_inputs = private_call.call_stack_item.public_inputs;\n\n let read_requests = private_call_public_inputs.read_requests;\n let read_request_membership_witnesses = private_call.read_request_membership_witnesses;\n\n let nullifier_key_validation_requests = private_call_public_inputs.nullifier_key_validation_requests;\n\n let new_commitments = private_call_public_inputs.new_commitments;\n let new_nullifiers = private_call_public_inputs.new_nullifiers;\n\n let storage_contract_address = private_call_public_inputs.call_context.storage_contract_address;\n\n // Transient read requests and witnesses are accumulated in public_inputs.end\n // We silo the read requests (domain separation per contract address)\n let mut siloed_read_requests: BoundedVec<SideEffect, MAX_READ_REQUESTS_PER_CALL> = BoundedVec::new(SideEffect::empty());\n for i in 0..MAX_READ_REQUESTS_PER_CALL {\n let read_request = read_requests[i].value;\n let witness = read_request_membership_witnesses[i];\n if witness.is_transient & (read_request != 0) { // only forward transient to public inputs\n siloed_read_requests.push(\n SideEffect { counter: read_requests[i].counter, value: silo_commitment(storage_contract_address, read_request) }\n )\n }\n }\n public_inputs.end.read_requests.extend_from_bounded_vec(siloed_read_requests);\n\n // Nullifier key validation requests.\n for i in 0..MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL {\n let request = nullifier_key_validation_requests[i];\n if !is_empty(request) {\n public_inputs.end.nullifier_key_validation_requests.push(request.to_context(storage_contract_address));\n }\n }\n\n // Enhance commitments and nullifiers with domain separation whereby domain is the contract.\n //\n // nullifiers\n let mut siloed_new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL> = BoundedVec::new(SideEffectLinkedToNoteHash::empty());\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL {\n let new_nullifier = new_nullifiers[i];\n if new_nullifier.value != 0 {\n let siloed_note_hash = if new_nullifier.note_hash == 0 {\n 0\n } else {\n silo_commitment(storage_contract_address, new_nullifier.note_hash)\n };\n siloed_new_nullifiers.push(\n SideEffectLinkedToNoteHash {\n value: silo_nullifier(storage_contract_address, new_nullifier.value),\n counter: new_nullifier.counter,\n note_hash: siloed_note_hash\n }\n );\n }\n }\n public_inputs.end.new_nullifiers.extend_from_bounded_vec(siloed_new_nullifiers);\n\n // commitments\n let mut siloed_new_commitments: BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL> = BoundedVec::new(SideEffect::empty());\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL {\n let new_commitment = new_commitments[i].value;\n if new_commitment != 0 {\n siloed_new_commitments.push(\n SideEffect { value: silo_commitment(storage_contract_address, new_commitment), counter: new_commitments[i].counter }\n );\n }\n }\n public_inputs.end.new_commitments.extend_from_bounded_vec(siloed_new_commitments);\n\n // Call stacks\n // Private call stack.\n let private_call_stack = array_to_bounded_vec(private_call.private_call_stack);\n validate_call_requests(\n private_call_stack,\n private_call_public_inputs.private_call_stack_hashes,\n private_call\n );\n public_inputs.end.private_call_stack.extend_from_bounded_vec(private_call_stack);\n // Public call stack.\n let public_call_stack = array_to_bounded_vec(private_call.public_call_stack);\n validate_call_requests(\n public_call_stack,\n private_call_public_inputs.public_call_stack_hashes,\n private_call\n );\n public_inputs.end.public_call_stack.extend_from_bounded_vec(public_call_stack);\n\n // new l2 to l1 messages\n let portal_contract_address = private_call.portal_contract_address;\n let new_l2_to_l1_msgs = private_call_public_inputs.new_l2_to_l1_msgs;\n let mut new_l2_to_l1_msgs_to_insert : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL> = BoundedVec::new(0);\n for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL {\n let msg_is_zero = new_l2_to_l1_msgs[i] == 0;\n if msg_is_zero == false {\n let new_l2_to_l1_msgs = compute_l2_to_l1_hash(\n storage_contract_address,\n private_call_public_inputs.version,\n portal_contract_address,\n private_call_public_inputs.chain_id,\n new_l2_to_l1_msgs[i]\n );\n new_l2_to_l1_msgs_to_insert.push(new_l2_to_l1_msgs)\n }\n }\n public_inputs.end.new_l2_to_l1_msgs.extend_from_bounded_vec(new_l2_to_l1_msgs_to_insert);\n\n // logs hashes\n // See the following thread if not clear:\n // https://discourse.aztec.network/t/proposal-forcing-the-sequencer-to-actually-submit-data-to-l1/426\n let previous_encrypted_logs_hash = public_inputs.end.encrypted_logs_hash;\n let current_encrypted_logs_hash = private_call_public_inputs.encrypted_logs_hash;\n public_inputs.end.encrypted_logs_hash = compute_logs_hash(previous_encrypted_logs_hash,current_encrypted_logs_hash);\n let previous_unencrypted_logs_hash = public_inputs.end.unencrypted_logs_hash;\n let current_unencrypted_logs_hash = private_call_public_inputs.unencrypted_logs_hash;\n public_inputs.end.unencrypted_logs_hash = compute_logs_hash(previous_unencrypted_logs_hash,current_unencrypted_logs_hash);\n\n // Add log preimages lengths from current iteration to accumulated lengths\n public_inputs.end.encrypted_log_preimages_length = public_inputs.end.encrypted_log_preimages_length +\n private_call_public_inputs.encrypted_log_preimages_length;\n public_inputs.end.unencrypted_log_preimages_length = public_inputs.end.unencrypted_log_preimages_length + private_call_public_inputs.unencrypted_log_preimages_length;\n}\n\npub fn contract_logic(\n private_call: PrivateCallData,\n public_inputs: &mut PrivateKernelCircuitPublicInputsBuilder,\n contract_dep_data: ContractDeploymentData,\n function_data: FunctionData\n) {\n let private_call_public_inputs = private_call.call_stack_item.public_inputs;\n let portal_contract_address = private_call.portal_contract_address;\n let contract_address = private_call.call_stack_item.contract_address;\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3062): Why is this using a hash function from the stdlib::recursion namespace\n let private_call_vk_hash = stdlib_recursion_verification_key_compress_native_vk(private_call.vk);\n\n let is_contract_deployment = public_inputs.constants.tx_context.is_contract_deployment_tx;\n\n // input storage contract address must be 0 if its a constructor call and non-zero otherwise\n if is_contract_deployment {\n let computed_initialization_hash = compute_initialization_hash(\n function_data.selector.to_field(),\n private_call_public_inputs.args_hash\n );\n\n assert(\n computed_initialization_hash == contract_dep_data.initialization_hash, \"initialization hash does not match computed one\"\n );\n\n let new_contract_address = AztecAddress::compute_from_public_key(\n contract_dep_data.public_key,\n contract_dep_data.contract_class_id,\n contract_dep_data.contract_address_salt,\n contract_dep_data.initialization_hash,\n contract_dep_data.portal_contract_address\n );\n\n let new_contract_data = NewContractData {\n contract_address: new_contract_address,\n portal_contract_address,\n contract_class_id: contract_dep_data.contract_class_id\n };\n public_inputs.end.new_contracts.push(new_contract_data);\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3062) VKs are mocked out for now\n // assert(contract_dep_data.constructor_vk_hash == private_call_vk_hash, \"constructor_vk_hash doesn't match private_call_vk_hash\");\n\n assert(\n contract_address.eq(new_contract_address), \"contract address supplied does not match derived address\"\n );\n\n let new_contract_address_nullifier = compute_new_contract_address_hash(new_contract_address);\n\n public_inputs.end.new_nullifiers.push(\n SideEffectLinkedToNoteHash { value: new_contract_address_nullifier, note_hash: 0, counter: 1 }\n );\n } else {\n // non-contract deployments must specify contract address being interacted with\n assert(!contract_address.is_zero(), \"contract address cannot be zero\");\n // std::println(f\"contract_address={contract_address}\");\n // std::println(f\"private_call_vk_hash={private_call_vk_hash}\");\n\n // Recompute the contract class id\n let computed_private_functions_root = private_functions_root_from_siblings(\n private_call.call_stack_item.function_data.selector,\n private_call_vk_hash,\n private_call.function_leaf_membership_witness.leaf_index,\n private_call.function_leaf_membership_witness.sibling_path\n );\n // std::println(f\"computed_private_functions_root={computed_private_functions_root}\");\n\n let computed_contract_class_id = ContractClassId::compute(\n private_call.contract_class_artifact_hash,\n computed_private_functions_root,\n private_call.contract_class_public_bytecode_commitment\n );\n // std::println(f\"computed_contract_class_id={computed_contract_class_id}\");\n\n // Recompute contract address using the preimage which includes the class_id\n let computed_partial_address = PartialAddress::compute_from_salted_initialization_hash(\n computed_contract_class_id,\n private_call.salted_initialization_hash\n );\n // std::println(f\"computed_partial_address={computed_partial_address}\");\n\n let computed_address = AztecAddress::compute(private_call.public_keys_hash, computed_partial_address);\n // std::println(f\"computed_address={computed_address}\");\n\n assert(\n computed_address.eq(contract_address), \"computed contract address does not match expected one\"\n );\n }\n}\n\npub fn validate_previous_kernel_values(end: CombinedAccumulatedData) {\n assert(end.new_nullifiers[0].value != 0, \"The 0th nullifier in the accumulated nullifier array is zero\");\n}\n\npub fn validate_call_against_request(private_call: PrivateCallData, request: CallRequest) {\n let call_stack_item = private_call.call_stack_item;\n assert(\n request.hash == call_stack_item.hash(), \"calculated private_call_hash does not match provided private_call_hash at the top of the call stack\"\n );\n\n let call_context = call_stack_item.public_inputs.call_context;\n\n // Ensures that if the function is internal, only the contract itself can call it.\n if call_stack_item.function_data.is_internal {\n assert(\n call_context.msg_sender.eq(call_context.storage_contract_address), \"call is internal but msg_sender is not self\"\n );\n }\n\n if call_context.is_delegate_call {\n let caller_context = request.caller_context;\n assert(!caller_context.is_empty(), \"caller context cannot be empty for delegate calls\");\n assert(\n call_context.msg_sender.eq(caller_context.msg_sender), \"call stack msg_sender does not match expected msg_sender for delegate calls\"\n );\n assert(\n call_context.storage_contract_address.eq(caller_context.storage_contract_address), \"call stack storage address does not match expected contract address for delegate calls\"\n );\n assert(\n !call_stack_item.contract_address.eq(call_context.storage_contract_address), \"curent contract address must not match storage contract address for delegate calls\"\n );\n } else {\n let caller_contract_address = request.caller_contract_address;\n assert(\n call_context.msg_sender.eq(caller_contract_address), \"call stack msg_sender does not match caller contract address\"\n );\n assert(\n call_context.storage_contract_address.eq(call_stack_item.contract_address), \"call stack storage address does not match expected contract address\"\n );\n }\n}\n\nfn field_to_grumpkin_private_key(val: Field) -> GrumpkinPrivateKey {\n let bytes = val.to_be_bytes(32);\n let mut v = 1;\n let mut high = 0;\n let mut low = 0;\n\n for i in 0..16 {\n high = high + (bytes[15 - i] as Field) * v;\n low = low + (bytes[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n GrumpkinPrivateKey { high, low }\n}\n\npub fn compute_siloed_nullifier_secret_key(secret_key: GrumpkinPrivateKey, contract_address: AztecAddress) -> GrumpkinPrivateKey {\n // TODO: Temporary hack. Should replace it with a secure way to derive the secret key.\n // Match the way keys are derived in circuits.js/src/keys/index.ts\n let hash = pedersen_hash(\n [secret_key.high, secret_key.low, contract_address.to_field()],\n 0\n );\n field_to_grumpkin_private_key(hash)\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/private-kernel-lib/src/common.nr"},"115":{"source":"use crate::common;\nuse dep::std::unsafe;\nuse dep::types::{\n abis::{\n combined_constant_data::CombinedConstantData, private_kernel::private_call_data::PrivateCallData,\n kernel_circuit_public_inputs::{\n PrivateKernelInnerCircuitPublicInputs, PrivateKernelTailCircuitPublicInputs,\n PrivateKernelCircuitPublicInputsBuilder\n},\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::{AztecAddress, PublicKeysHash, compute_initialization_hash},\n mocked::{Proof, verify_previous_kernel_state}, transaction::request::TxRequest,\n traits::is_empty_array\n};\n\n// Initialization struct for private inputs to the private kernel\nstruct PrivateKernelInitCircuitPrivateInputs {\n tx_request: TxRequest,\n private_call: PrivateCallData,\n}\n\nimpl PrivateKernelInitCircuitPrivateInputs {\n fn initialize_end_values(self, public_inputs: &mut PrivateKernelCircuitPublicInputsBuilder) {\n public_inputs.constants = CombinedConstantData {\n historical_header: self.private_call.call_stack_item.public_inputs.historical_header,\n tx_context: self.tx_request.tx_context,\n };\n public_inputs.max_non_revertible_side_effect_counter = self.private_call.call_stack_item.public_inputs.max_non_revertible_side_effect_counter;\n }\n\n // Confirm that the TxRequest (user's intent) \n // matches the private call being executed\n fn validate_this_private_call_against_tx_request(self) {\n let tx_request = self.tx_request;\n // Call stack item for the initial call\n let call_stack_item = self.private_call.call_stack_item;\n\n // Checks to ensure that the user's intent matches the initial private call\n //\n // We use the word correct to denote whether it matches the user intent.\n //\n // Ensure we are calling the correct initial contract\n let origin_address_matches = tx_request.origin.eq(call_stack_item.contract_address);\n assert(origin_address_matches, \"origin address does not match call stack items contract address\");\n //\n // Ensure we are calling the correct initial function in the contract\n let entry_point_function_matches = tx_request.function_data.hash() == call_stack_item.function_data.hash();\n assert(\n entry_point_function_matches, \"tx_request function_data must match call_stack_item function_data\"\n );\n //\n // Ensure we are passing the correct arguments to the function.\n let args_match = tx_request.args_hash == call_stack_item.public_inputs.args_hash;\n assert(args_match, \"noir function args passed to tx_request must match args in the call_stack_item\");\n }\n\n fn validate_inputs(self) {\n let call_stack_item = self.private_call.call_stack_item;\n\n let function_data = call_stack_item.function_data;\n assert(function_data.is_private, \"Private kernel circuit can only execute a private function\");\n assert(function_data.is_internal == false, \"Cannot call an internal function directly\");\n\n let call_context = call_stack_item.public_inputs.call_context;\n assert(call_context.is_delegate_call == false, \"Users cannot make a delegatecall\");\n assert(call_context.is_static_call == false, \"Users cannot make a static call\");\n // The below also prevents delegatecall/staticcall in the base case\n assert(\n call_context.storage_contract_address.eq(call_stack_item.contract_address), \"Storage contract address must be that of the called contract\"\n );\n }\n\n fn update_end_values(self, public_inputs: &mut PrivateKernelCircuitPublicInputsBuilder) {\n // Since it's the first iteration, we need to push the the tx hash nullifier into the `new_nullifiers` array\n public_inputs.end.new_nullifiers.push(SideEffectLinkedToNoteHash { value: self.tx_request.hash(), note_hash: 0, counter: 0 });\n // Note that we do not need to nullify the transaction request nonce anymore.\n // Should an account want to additionally use nonces for replay protection or handling cancellations,\n // they will be able to do so in the account contract logic:\n // https://github.com/AztecProtocol/aztec-packages/issues/660\n }\n\n pub fn native_private_kernel_circuit_initial(self) -> PrivateKernelInnerCircuitPublicInputs {\n let mut public_inputs: PrivateKernelCircuitPublicInputsBuilder = unsafe::zeroed();\n public_inputs.is_private = true;\n\n self.initialize_end_values(&mut public_inputs);\n\n self.validate_inputs();\n\n common::validate_arrays(self.private_call.call_stack_item.public_inputs);\n\n self.validate_this_private_call_against_tx_request();\n\n common::validate_read_requests(\n public_inputs.constants.historical_header.state.partial.note_hash_tree.root,\n self.private_call.call_stack_item.public_inputs.read_requests,\n self.private_call.read_request_membership_witnesses\n );\n\n // TODO(dbanks12): feels like update_end_values should happen after contract logic\n self.update_end_values(&mut public_inputs);\n common::update_end_values(self.private_call, &mut public_inputs);\n\n common::contract_logic(\n self.private_call,\n &mut public_inputs,\n self.tx_request.tx_context.contract_deployment_data,\n self.tx_request.function_data\n );\n\n // TODO(David): What previous kernel proof are we talking about, since this is private-kernel-init\n let (is_previous_state_valid, updated_aggregation_object) = verify_previous_kernel_state(public_inputs.aggregation_object, self.private_call.proof);\n assert(is_previous_state_valid);\n\n public_inputs.aggregation_object = updated_aggregation_object;\n\n public_inputs.to_inner()\n }\n}\n\nmod tests {\n use crate::private_kernel_init::PrivateKernelInitCircuitPrivateInputs;\n use dep::types::constants::{MAX_READ_REQUESTS_PER_CALL};\n use dep::types::{\n abis::{\n kernel_circuit_public_inputs::PrivateKernelInnerCircuitPublicInputs,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_kernel::private_call_data::PrivateCallData,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n },\n grumpkin_point::GrumpkinPoint, grumpkin_private_key::GrumpkinPrivateKey,\n address::{AztecAddress, compute_initialization_hash},\n hash::{compute_constructor_hash, compute_logs_hash, stdlib_recursion_verification_key_compress_native_vk},\n tests::private_call_data_builder::PrivateCallDataBuilder, transaction::request::TxRequest,\n utils::arrays::array_length\n };\n\n struct PrivateKernelInitInputsBuilder {\n tx_request: TxRequest,\n private_call: PrivateCallDataBuilder,\n }\n\n impl PrivateKernelInitInputsBuilder {\n pub fn new() -> Self {\n PrivateKernelInitInputsBuilder::new_with_config(false)\n }\n\n pub fn new_constructor() -> Self {\n PrivateKernelInitInputsBuilder::new_with_config(true)\n }\n\n fn new_with_config(is_constructor: bool) -> Self {\n let private_call = PrivateCallDataBuilder::new(is_constructor);\n let tx_request = private_call.build_tx_request();\n\n PrivateKernelInitInputsBuilder { tx_request, private_call }\n }\n\n pub fn execute(self) -> PrivateKernelInnerCircuitPublicInputs {\n let kernel = PrivateKernelInitCircuitPrivateInputs { tx_request: self.tx_request, private_call: self.private_call.finish() };\n\n kernel.native_private_kernel_circuit_initial()\n }\n\n pub fn failed(self) {\n let _ = self.execute();\n }\n }\n\n pub fn validate_deployed_contract_address(\n tx_request: TxRequest,\n private_call: PrivateCallDataBuilder,\n public_inputs: PrivateKernelInnerCircuitPublicInputs\n ) {\n assert_eq(public_inputs.end.new_contracts.len(), 1);\n let cdd = tx_request.tx_context.contract_deployment_data;\n\n let computed_initialization_hash = compute_initialization_hash(\n tx_request.function_data.selector.to_field(),\n tx_request.args_hash\n );\n assert(\n computed_initialization_hash == cdd.initialization_hash, \"initialization hash does not match computed one\"\n );\n let contract_address = AztecAddress::compute_from_public_key(\n cdd.public_key,\n cdd.contract_class_id,\n cdd.contract_address_salt,\n cdd.initialization_hash,\n cdd.portal_contract_address\n );\n assert(public_inputs.end.new_contracts[0].contract_address.eq(contract_address));\n }\n\n pub fn validate_no_new_deployed_contract(public_inputs: PrivateKernelInnerCircuitPublicInputs) {\n for new_contract in public_inputs.end.new_contracts {\n assert(new_contract.is_empty());\n }\n }\n\n #[test]\n fn deposit() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n // Logs for the private call.\n let encrypted_logs_hash = [16, 69];\n let encrypted_log_preimages_length = 100;\n let unencrypted_logs_hash = [26, 47];\n let unencrypted_log_preimages_length = 50;\n builder.private_call.set_encrypted_logs(encrypted_logs_hash, encrypted_log_preimages_length);\n builder.private_call.set_unencrypted_logs(unencrypted_logs_hash, unencrypted_log_preimages_length);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n\n // Check the first nullifier is hash of the signed tx request\n let tx_hash = builder.tx_request.hash();\n assert_eq(public_inputs.end.new_nullifiers[0].value, tx_hash);\n\n // Log preimages length should increase by `(un)encrypted_log_preimages_length` from private input\n assert_eq(public_inputs.end.encrypted_log_preimages_length, encrypted_log_preimages_length);\n assert_eq(public_inputs.end.unencrypted_log_preimages_length, unencrypted_log_preimages_length);\n\n // Logs hashes should be a sha256 hash of a 0 value (the previous log hash) and the `(un)encrypted_logs_hash` from private input\n let expected_encrypted_logs_hash = compute_logs_hash([0, 0], encrypted_logs_hash);\n assert_eq(public_inputs.end.encrypted_logs_hash, expected_encrypted_logs_hash);\n\n let expected_unencrypted_logs_hash = compute_logs_hash([0, 0], unencrypted_logs_hash);\n assert_eq(public_inputs.end.unencrypted_logs_hash, expected_unencrypted_logs_hash);\n }\n\n #[test]\n fn basic_contract_deployment() {\n let builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n let public_inputs = builder.execute();\n\n validate_deployed_contract_address(builder.tx_request, builder.private_call, public_inputs);\n\n // Since there are no logs, log preimages length should be 0 and both logs hashes should be a sha256 hash of 2 zero\n // values\n assert_eq(public_inputs.end.encrypted_log_preimages_length, 0);\n assert_eq(public_inputs.end.unencrypted_log_preimages_length, 0);\n\n let expected_logs_hash = compute_logs_hash([0, 0], [0, 0]);\n assert_eq(public_inputs.end.encrypted_logs_hash, expected_logs_hash);\n assert_eq(public_inputs.end.unencrypted_logs_hash, expected_logs_hash);\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_return_values() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.return_values.extend_from_array([0, 9123]);\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_read_requests() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.read_requests.extend_from_array(\n [\n SideEffect { value: 0, counter: 0 },\n SideEffect { value: 9123, counter: 1 }\n ]\n );\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_commitments() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.new_commitments.extend_from_array(\n [\n SideEffect { value: 0, counter: 0 },\n SideEffect { value: 9123, counter: 1 }\n ]\n );\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_nullifiers() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.new_nullifiers.extend_from_array(\n [\n SideEffectLinkedToNoteHash { value: 0, note_hash: 0, counter: 0 },\n SideEffectLinkedToNoteHash { value: 9123, note_hash: 0, counter: 1 }\n ]\n );\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_private_call_stack() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.private_call_stack_hashes.extend_from_array([0, 9123]);\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_public_call_stack() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.public_call_stack_hashes.extend_from_array([0, 9123]);\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid array\")]\n fn input_validation_malformed_arrays_new_l2_to_l1_msgs() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.public_inputs.new_l2_to_l1_msgs.extend_from_array([0, 9123]);\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"contract address supplied does not match derived address\")]\n fn contract_deployment_incorrect_contract_address_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n let random_address = AztecAddress::from_field(27);\n builder.private_call.public_inputs.call_context.storage_contract_address = random_address;\n builder.tx_request.origin = random_address;\n builder.private_call.contract_address = random_address;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"origin address does not match call stack items contract address\")]\n fn contract_deployment_contract_address_mismatch_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n let random_address = AztecAddress::from_field(27);\n builder.private_call.public_inputs.call_context.storage_contract_address = random_address;\n builder.private_call.contract_address = random_address;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"tx_request function_data must match call_stack_item function_data\")]\n fn contract_deployment_function_data_mismatch_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.tx_request.function_data.selector.inner = 27;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"noir function args passed to tx_request must match args in the call_stack_item\")]\n fn contract_deployment_args_hash_mismatch_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n // Modify the args hash in tx request.\n builder.tx_request.args_hash = 29;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Private kernel circuit can only execute a private function\")]\n fn private_function_is_private_false_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n // Set is_private in function data to false.\n builder.private_call.function_data.is_private = false;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Cannot call an internal function directly\")]\n fn private_function_is_internal_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n builder.private_call.function_data.is_internal = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Users cannot make a static call\")]\n fn private_function_static_call_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n // Set is_static_call to true.\n builder.private_call.public_inputs.call_context.is_static_call = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Users cannot make a delegatecall\")]\n fn private_function_delegate_call_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n // Set is_delegate_call to true.\n builder.private_call.public_inputs.call_context.is_delegate_call = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Storage contract address must be that of the called contract\")]\n fn private_function_incorrect_storage_contract_address_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n // Set the storage_contract_address to a random scalar.\n builder.private_call.public_inputs.call_context.storage_contract_address = AztecAddress::from_field(356);\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"computed contract address does not match expected one\")]\n fn private_function_incorrect_function_leaf_index_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n // Set the leaf index of the function leaf to a wrong value (the correct value + 1).\n let leaf_index = builder.private_call.function_leaf_membership_witness.leaf_index;\n builder.private_call.function_leaf_membership_witness.leaf_index = leaf_index + 1;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"computed contract address does not match expected one\")]\n fn private_function_incorrect_function_leaf_sibling_path_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n // Set the first value of the sibling path to a wrong value (the correct value + 1).\n let sibling_path_0 = builder.private_call.function_leaf_membership_witness.sibling_path[0];\n builder.private_call.function_leaf_membership_witness.sibling_path[0] = sibling_path_0 + 1;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"computed contract address does not match expected one\")]\n fn private_function_incorrect_contract_class_preimage_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n builder.private_call.contract_class_artifact_hash = builder.private_call.contract_class_artifact_hash + 1;\n builder.failed();\n }\n\n #[test(should_fail_with=\"computed contract address does not match expected one\")]\n fn private_function_incorrect_partial_address_preimage_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n builder.private_call.salted_initialization_hash.inner = builder.private_call.salted_initialization_hash.inner + 1;\n builder.failed();\n }\n\n #[test(should_fail_with=\"computed contract address does not match expected one\")]\n fn private_function_incorrect_address_preimage_fails() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n builder.private_call.public_keys_hash.inner = builder.private_call.public_keys_hash.inner + 1;\n builder.failed();\n }\n\n #[test(should_fail_with=\"note hash tree root mismatch\")]\n fn native_read_request_bad_request() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(2);\n\n // tweak read_request so it gives wrong root when paired with its sibling path\n let read_request = builder.private_call.public_inputs.read_requests.pop();\n builder.private_call.public_inputs.read_requests.push(SideEffect { value: read_request.value + 1, counter: read_request.counter });\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"note hash tree root mismatch\")]\n fn native_read_request_bad_leaf_index() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(2);\n\n // tweak leaf index so it gives wrong root when paired with its request and sibling path\n let mut read_request_membership_witness = builder.private_call.read_request_membership_witnesses.pop();\n read_request_membership_witness.leaf_index += 1;\n builder.private_call.read_request_membership_witnesses.push(read_request_membership_witness);\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"note hash tree root mismatch\")]\n fn native_read_request_bad_sibling_path() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(2);\n\n // tweak sibling path so it gives wrong root when paired with its request\n let mut read_request_membership_witness = builder.private_call.read_request_membership_witnesses.pop();\n read_request_membership_witness.sibling_path[1] += 1;\n builder.private_call.read_request_membership_witnesses.push(read_request_membership_witness);\n\n builder.failed();\n }\n\n #[test]\n fn native_no_read_requests_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 0);\n }\n\n #[test]\n fn native_one_read_requests_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(1);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 0);\n }\n\n #[test]\n fn native_two_read_requests_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(2);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 0);\n }\n\n #[test]\n fn native_max_read_requests_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_read_requests(MAX_READ_REQUESTS_PER_CALL);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 0);\n }\n\n #[test]\n fn native_one_transient_read_requests_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_transient_read_requests(1);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 1);\n }\n\n #[test]\n fn native_max_read_requests_one_transient_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_transient_read_requests(1);\n builder.private_call.append_read_requests(MAX_READ_REQUESTS_PER_CALL - 1);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), 1);\n }\n\n #[test]\n fn native_max_read_requests_all_transient_works() {\n let mut builder = PrivateKernelInitInputsBuilder::new();\n\n builder.private_call.append_transient_read_requests(MAX_READ_REQUESTS_PER_CALL);\n\n let public_inputs = builder.execute();\n\n validate_no_new_deployed_contract(public_inputs);\n // Check the first nullifier is hash of the signed tx request\n assert_eq(public_inputs.end.new_nullifiers[0].value, builder.tx_request.hash());\n\n // non-transient read requests are NOT forwarded\n assert_eq(array_length(public_inputs.end.read_requests), MAX_READ_REQUESTS_PER_CALL);\n }\n\n #[test]\n fn propagate_nullifier_key_validation_requests() {\n let mut builder = PrivateKernelInitInputsBuilder::new_constructor();\n\n let request = NullifierKeyValidationRequest { public_key: GrumpkinPoint { x: 1, y: 2 }, secret_key: GrumpkinPrivateKey { high: 3, low: 4 } };\n builder.private_call.public_inputs.nullifier_key_validation_requests.push(request);\n\n let public_inputs = builder.execute();\n\n assert_eq(array_length(public_inputs.end.nullifier_key_validation_requests), 1);\n\n let request_context = public_inputs.end.nullifier_key_validation_requests[0];\n assert_eq(request_context.public_key, request.public_key);\n assert_eq(request_context.secret_key, request.secret_key);\n assert_eq(\n request_context.contract_address, builder.private_call.public_inputs.call_context.storage_contract_address\n );\n }\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/private-kernel-lib/src/private_kernel_init.nr"},"117":{"source":"use dep::private_kernel_lib::PrivateKernelInitCircuitPrivateInputs;\nuse dep::types::PrivateKernelInnerCircuitPublicInputs;\n\nunconstrained fn main(input: PrivateKernelInitCircuitPrivateInputs) -> distinct pub PrivateKernelInnerCircuitPublicInputs {\n input.native_private_kernel_circuit_initial()\n}\n","path":"/usr/src/noir-projects/noir-protocol-circuits/src/crates/private-kernel-init-simulated/src/main.nr"}}}