@aztec/protocol-contracts 0.23.0 → 0.26.1

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.
@@ -0,0 +1 @@
1
+ { "noir_version": "0.24.0+edaef211ea08832b1aaabcfc8b3f2419c3a2184c", "name": "GasToken", "functions": [{ "name": "mint_public", "function_type": "Open", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "authwit::aztec::context::inputs::public_context_inputs::PublicContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "public_global_variables", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] }, "visibility": "private" }, { "name": "to", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "amount", "type": { "kind": "field" }, "visibility": "private" }], "param_witnesses": { "amount": [{ "start": 40, "end": 41 }], "inputs": [{ "start": 0, "end": 39 }], "to": [{ "start": 39, "end": 40 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "contract_storage_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "contract_storage_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "current_value", "type": { "kind": "field" } }] } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "prover_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] }, "visibility": "public" }, "return_witnesses": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234] }, "bytecode": "H4sIAAAAAAAA/+2dd3wc1bXHZyRZkr1aS5Z7H5tqXHa1WhfZFl5jeu8dbMkFbGwLLBmb3iFAQhJSSCEJIZQkQEJIIYX03kNJQgrpgcA/L5/Pe+/zPu/9weedu3sP+unujLwrzZXvyGc+n6O5c2b2nu/9zZk7s3dmR294nud7pamW7FCvfOL1BT3PDm9qi7GurE1OPyGcNQnhrE0IZ11COMckhLM+IZwNCeFsTAjn2IRwjouRU7HVeAOnuHlTFnSNm7EpYZqmE6Dp+IRp2pwATVu8ZPRRExLC2ZoQzokJ4ZyUEM7JCeGckhDOqQnhnJYQzukJ4ZyREM6ZCeGclRDO2QnhnJMQzrkJ4QwSwjkvIZzzE8J5UEI4D04I5yEJ4Tw0IZyHJYTz8Bg5FwAnl4/Q84V6vkjPF+v5Ej3PMIOet+m21unlHFk7WZ5sqV4X6HXLyJaTrSDrIFtJtopsNVkn2ZFka3Q715IdRbaO7GiyY8iOJTuO7HiyE8hOJDuJ7GSyU8hOJTuN7HSyM8jOJDuL7GyycwyWc8nOIzuf7AKyC8kuIruY7BKyS8nWk20g6yLrJttItolsM9kWssvILifbSraN7Aqy7WQ7yHaS9ZBdSXYV2S6yXrI+st2GZleT7SHbS3aNwXkt2XVk15PdQHYj2U1kN5PdQnYr2W1kt5PdQXYn2V1kbyO7m+wesnvJ3k72DrL7yN5J9i6yd5PdT/YesveSvY/s/WQPkH2A7IOahff1h8g+TPYg2UfIPkr2MbKHyD5O9jDZJ8geIXuU7DGyx8k+SfYpsk+TPUH2JNlTZJ8h+yzZ02SfI3uG7PNkXyD7ItmXyJ4l+zLZV8i+SvY1sufIvk72DbJvkn2L7Ntk3yH7Ltn3yL5P9gOyH5L9iOzHhuY/Ifsp2c/Ifq7X8TjhL8h+qcu/0vPn9fwFPX/R+MxLZL82fL8h+63he5nsd7r8ez3/g57/Uc9f0fM/6fmf9fwvev5XPf+bnv9dz/+h5//U81f1/DU9/5eev67nb5B9tbVUbvT6p8CLqa/Jb+5W98RYdOx31KQ0qdXreB5of51e5jlrOEYvjzH89Xq53vA36OUGo/6xenms4W/Vy62Gf5JenmT4p+jlKYZ/ml6eZvhn6OUZ4E95MEat/cpXq10++Dh/a8A3RvtqwVfP1YGvQfvGgI/3ez34xmpfA/jGaV8j+FLaNxZ8Tdo3TvtU/Wmvv60FXc4OZ8pnu1W94+OuV99zbI6fd5Oqt8US74T4ebeoelst8KocmajrmgB5M0n7WsE3Wfsmgm+K9k0C31Ttmwy+ado3BXzTtW8q+GZo3zTwzdS+6eCbpX0zwDdb+2aCb472zQLfXO2bDb5A++aAb572zQXffO0LwHeQ9s0D38HaNx98h2jfQeDj554OBt9h2ncI+A7XvkPBx/33YeDj68bDuZ8l+7cHn9H+GvAdwX0++BZyfw++RdzXg28x9/PgWwKx2ZeB/od9We7zwdemfW/1b17pOlVNgRfX8dSeU/Uuj7teqlnV2xF/vcX7piu9fq0DiLMctFqlyzE+Q9aGsX1tHIf9dVA+1eufVkGZz0/Mrc5NK0K2w/Iy4zNpWL8ipN1BzO3uAJYAljmeOhbWAYeFXF1mJ1dzWcnV0vdLz9inauJrpNGWq2cAR/y5ulRytfKp6lzd5vVPmHd8fTzacnU9cMSfq8uXyTVAxVPVubrX658w7/i70WjL1R3AYSFXu6RfrXiqOlfv9PonzDv+XjzacvU64Ig/Vzss5Wq75KpXui/gGftUTTw2M9py9W7giD9XN3bJNUDFU9W5+rDXP2He8fjgaMvVB4DDQq5utpSrOcnV0j1Pz9inapqu56MtVx/VZTUm9ys95joTfM9r3yzwvaB9s8H3ovbNgXbFn/ub8pL7FU9V5/53vP4J85jvk4y23H8WOCzk6jLJ1YqnqnOVn//AfaqmeXo+2nL1+8BhIVdXSK5WPFWdq/y8EO5TNfH94tGWqy/qsrou+L2+LjgEfH/QvkPB90ftOwx8r2jf4eD7k/HMkvL9WfuOAN9ftG8h+P6qfYvA9zftWwy+v2vfEvD9Q/sy4Pun9mXB96r2tYHvNe3Lge9f2tcOvte1Lw++N7RvqfapZ1X43j2frxuBIfDifSaE28uTbywHUM6G8BTi48mmvfLnXBtB1yC+WO3FZxC8ytueA572+HmyKYhRCU878OTj5yk+37Q0/nqL+7jN0DQFsdqgXbGfB3Uft9QbqCkvc7w0+PD4XRbCaOOc6kMsrpuXlwMj+7A/4f6Qjx/VXzf6/bysecGL91yN8QrAwfHqYJtNrf3bNmm2JljPfUATfB77W5dyRTFyjiwdecZcpYx5g9HS8V3ULG/whMW2cM0Yur84pzpGIPZyI3a7ERv7EJ4G6+PxOneFBWZV78r4683i9TJfu3McPG+tBg3iahPG5mt3jsP+OigvhB2wur/4Vr/D3OoY6gjZDsvLjM+kYX1HSLsDz853Fq57pcGo+tsAzgW2vrdFfYdoB//KEN3wOw+vPwJ8fF5YCr42ow68psW+18b1s+8NvH4OvPLrV+ReDozZEEYL13E5PDdz3bycB0b24XfMNkuarTB4VoRocaDGtvG9yocYfH3GxxDHq4NtptT2b7sO+gsL33ty6ljA6wU1DXZOxPNH/PspV/we1l4FD+47C99T2yzlYxZz7c0Y61V1ZEL2F7ch6jt+xoJ2mPdcNy8jo/AKr/AKr/AKr/AKr/AKr/AKr/AKr/AKr/AKr/AKr/Dum1fx5A1WfNYq7wij+QwSjrMX4uMp3k/g5xHxHsxLfn/c+J/JyRXv+bD+/P+RFhltroNtXvX72V7WZXy2BZ8xCtuXtu6vRu1Ljhf2jJCtZ+J8b+AzegEs50dt7NxGO/s3l1XvkVPvhGo39mne2J/Fd00ZPpWn02v7223j3lu19wKxL+FynPfW0sCDseK/Z5wbcM+4xhvYf+B5piP22KX71dxX8/3qDiN2HWzzX37/vsHn8wteeX+B23DdvLwIPrvSqLvZaG/gjcyzAR3AzeV6o21LgZu3+V/ozx+sKZUt3UvOVfvsMvbT8V8DlO7ht1XBkwEeG+cxS9c6A96TEPc9/JUh+wuvn3g9Ptdm4VnCQZ+xQkbhFV7hFV7hFV7hFV7hFV7hFV7hFV7hFV7hFV7hFV7h3Tev4gl77wJvl3OEcbDnHgrx8RTvJyzWdeF9qXvgvorte3B8z2ex0Wb83eZPa/rZ7tPlJq/8WYeofWnr3lbUvsT3Ypnv/rB1T9eHWFx3NkSL0RW7dA8//v3bfw+/zdinOWN/4r1rPIYehDw1n2fA38mPxHNDUfuG4+GxhM+fcBl/m2xDa8XI/R+/V4PvWXM8vHf9mNa22bPVV1v7vwJFmfF9HW0h7eT1T0C/95Qu47MbnFdq/XMh63nyjeUAyqydam9n/O0t7tsjdV28bztDYq8B1phit2FsXxvHYX8dlL9W85Ysb22nJtaZudWxsTpkOyy3G59Jw/rVIe0OYm53J7AEsMzxVM48Dfn1HJzzbfRD2G7UZxHow+vxusfCs4tlfWLBK3+WUW3D+73BC39OqA62+R70SVHPioY912brfZdRz9RxPLwWzgCj2Ubzmc4D/Zmsl/R+xnNWXM9kvQQ55HsD3zeE9S+G+pmrwdimI4T9ZeO8aeGZqYreBxN2/c+8+MwXb/MK9FPN+tnIaq7/99d3ubDrf/xcVNuxX4j7fIj5iCx4TcLbvGbko3mNZr63GD/7BnwWNVGT+V6sJq9cOzvvEyv1NZ1GO/h4Wg3t4G3+bRwz8V8jla41bbw7TdWB1znZkHby+v+GY+x/4FqS9xE+n1xfW76ep8GuNVm7Rmhj4MXbl6/VddUbdWPso4A1pthtGJuvNTkO++ugPIb/WTFspya83lGTOjbWhGyH5Q7jM2lYvyak3UHM7S4AC9bN8VTO/B/kVz08326jb8Z2oz6LQR9ej9/jc8b2UecTF965h/14c205WyFmNnzuuOCVj9eFXYvwNvxZvBaZpJmbtc7mtuY4JH8uzueB8fcXeA2Iv7+wNSYz3uufAljGcUJbsVuM2C0jGLvViN06grFFc9HcJc1d+t8HeG6pSQBjbQIY6xLAOCYBjPUJYGxIAGNjAhjHJoBxXAIYUwlgbALG/Xn9YUGfXBz6pPUc7xcjt63x26j7xfhuDvaNB579eR3n6j5s1nOX92EL8Iyy6+FY9uEEPXd5H7ba1TGW/n5iAhgnJYBxcgIYpySAcWoCGKclgHF6AhhnJIBxZgIYZyWAcXYCGOckgHFuAhiDBDDOSwDj/AQwHpQAxoMTwHhIAhgPTQDjYQlgPDwBjEkY811il3HI4xSWftOTx7GOSnjC3jcbI0+bpXYWn73jZ7TjftdcPmR/cRvCnhFv9PbfO1aFV3iRMex3qPgbhowjjGHvSLb1ztxq+uew3z0W4uPJ4v7J2d0XVZ+b8Pct8f9v+NJ7UKv536rLgMfG/4a3087SOWR5iK4cKw3rsc9YbqGNvjfwf7wHsIyMwiu8wiu8wiu8wiu8wiu8wiu8wiu8wiu8wiu8wiu8wrtvXhzjx3cH8nYZRxjZh++vsTAeXvU9mGUhOubsMuaGyqh4VsTOU7pXsqwKnhXAYyOn7LSzdK+kI0RXjpWG9XbfZ1nZ/z0UXuEVXuEVXuEVXuEVXuEVXuEVXuEVXuEVXuEtCK/wCm9FvDjGz6wp2C7jCCP7lgOPhfHwqu+VrAjRMWeXMTdURsVj4b3hecyXSnjwfxXYyClL7SzeK1nlleuK/4OQ1+Oxbet/1aw09OVlZBRe4cX/XZQxWFOwXcYRRvZ1AM9KCzzV9qMrQ3S0/P9yckNlVDw2/g8M5kslPPg/22zklJ12lvr6zhBdOVYa1uOxbeF/ARaPm9WGvrzcaTd2UYcj96HDkSEsR46wDshYKW97wnhFX9FX9BV9o3hFX9FX9BV9o3hFX9FX9BV9o3hFX9FX9BV9o3hFX9FX9B0eL947YNYUbJdxhJF9q4DHxv9ar/b+xuoQHXN2GXNDZVQ8a2Lnac9ivlTCg//L3EZO2Wln6d5DwSvXlWOlYT32RQULbfS9gf8bPYDlAvhHK29nwnglH+zySj4Ir+SD8EbxSj4Ir+SD8EbxSj4Ir+SD8EbxSj4Ir+SD8EbxSj4Ir+SD8EbxSj4Ir+SD8EbxSj4Ir+SD8EbxupAP+IwLs6Zgu4wjjOw7EnjWWOCp9jmcNSE65uwy5obKqHjWxs+Tx3yphGct8BTi52mz1M7is0JHeeW6cqw0rMe+6CgLbfQhLtfNy8govMJ7FPBkDNYUbJdxhJF9BeCxcDxX3devDdExZ5cxN1RGxbPOEs/aKnjWAY+NnLLUzmJff7RXrivHSsN6PLaPttBGH+Jy3byMjEnixWOIWVOwXcYRRvYdBTwW8q3qvmhdiI65BDC2J4BxXAIYUwlgbALGjAVGxTPe4OHljF19cnHok9Zzl/u98cBjax+2GDwtIVq4ug+b9dzlfdgCPLb2YavB0xqihav7cIKeu7wPW+3qGEt/PzEBjJMSwDg5AYxTEsA4NQGM0xLAOD0BjDMSwDgzAYyzEsA4OwGMcxLAODcBjEECGOclgHF+AhhxbGh/jhfsz++5+/P7mWgummeHN4nmorloLpqL5qK5aD6M2K5rnoTvEMI4uhk7HWVEHj8+niy2HWPZuD9VbdvDnusRxngYOxPAaPuZMtExFsbcUBkVz7GWeI6ugudY4Dkmfp42S+0sPk96nFeuK8dKw3rMgeMstNGHuFw3LyNjknjxGGLWFGyXcYSRfccAj63jqprjHI+r4y3xHFsFz/HAY2N/WWpn8Tg/wSvXlWOlYT0eNydYaKMPcbluXkbGJPHicc6sKdgu4wgj+44DHlvHVTXHOR5XJ1riOb4KnhOBx8b+stTO4nF+kleuK8dKw3o8bk6y0EYf4nLdvIyMSeLF45xZU7BdxhFG9p0APBbyrervFieG6NieAMbOBDCKjqJjwSFG0VF0LDjEmAQdhVEYC8IojMIojMIojN6BcW0m14/Vj5niGOXJ8fPkcVyrEp6TgcfG2JeldhbHTE/xynXlWGlYjzlwioU2+hCX6+ZlZBRe4T0FeDIGawq2yzjCyL6TgMfC8Vx1X39yiI45u4y5oTIqnlNj58lnMV8q4TkVeGzklJ12lvr607xyXTlWGtbjsX2ahTb6EJfr5mVkrJS3M2G8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8oq/oK/qKvlG8om/1vPiMN7OmYLuMI4zsOwV4TrXAU+1z6KeG6Jizy5gbKqPiOT1+njzmSyU8pwOPjZyy1M7is/JneOW6cqw0rMe+6AwLbfQhLtfNy8hYKW9nwnhF3+p5sY9i1hRsl3GEkX2nAY+F47nqvv70EB1zdhlzQ2VUPGfGz5PHfKmE50zgsZFTltpZ7OvP8sp15VhpWI990VkW2uhDXK6bl5FReIX3LODJGKwp2C7jCCP7zgAeC8dz1X39mSE65uwy5obKqHjOjp0nl8V8qYTnbOCxkVN22lnq68/xynXlWGlYj8f2ORba6ENcrpuXkbFS3s6E8Yq+oq/oK/pG8Yq+oq/oK/pG8Yq+oq/oK/pG8Yq+oq/oK/pG8Yq+oq/oe2Dpi2P8zJqC7TKOMLLvLOCxMB5e9b2Ss0N0zNllzA2VUfGcGztPexbzpRKec4HHRk7ZaWfpXsl5XrmuHCsN67EvOs9CG32Iy3XzMjKOVt7OhPFKPtjllXwQXskH4Y3ilXwQXskH4Y3ilXwQXskH4Y3ilXwQXskH4Y3ilXwQXskH4Y3ilXwQXskH4Y3ilXwQXskH4Y3idSEf8BkXZk3BdhlHGNl3DvCca4Gn2udwzg3RMWeXMTdURsVzfvw8ecyXSnjOBx4bOWWpncVnhS7wynXlWGlYj33RBRba6ENcrpuXkVF4hfcC4MkYrCnYLuMII/vOAx4Lx3PVff35ITrm7DLmhsqoeC6MnyeP+VIJz4XAYyOnLLWz2Ndf5JXryrHSsB6P7YsstNGHuFw3LyOj8ArvRcCTMVhTsF3GEUb2XQA8Fo7nqvv6C0N0zNllzA2VUfFcHD9PHvOlEp6LgcdGTllqZ7Gvv8Qr15VjpWE9HtuXWGijD3G5bl5GRuEV3kuAJ2OwpmC7jCOM7LsIeCwcz1X39ReH6JhLAGN7Ahg7E8BoWcfcUBkVz6WWeC6ugudS4LHRf1hqZ/G8vt4r15VjpWE95sB6C230IS7XzcvImCRePIaYNQXbZRxhZN8lwGPruKrmOMfjaoMlnkur4NkAPDb2l6V2Fo/zLq9cV46VhvV43HRZaKMPcbluXkbGJPHicc6sKdgu4wgj+9YDz4b4eao+zjcAT7clng1V8HQDj439ZamdxeN8o1euK8dKw3o8bjZaaKMPcbluXkbGJPHicb5Bz1OwXcYRRvZ1AY+FfKv6u0V3iI7tCWDsTACj6Cg6FhxiFB1Fx4JDjEnQURiFsSCMVTGuSwCj7GthLDjKmLHAqHjGGzy8nBmB2C1G7JYRjN1qxG4dwdiiuWgumovmorloPtzYorloLpqL5qK5aD7c2PvSvAbKR+j5m97A79BvVsG0ZR+TYuL7pQ26bo7P8epgm56m0rzZ0Kkapn0x+t7A5w7eBC3w+z6XfViPn9s0fLY20+GBFrXAsAniyjEj/VR2eFMiNN8Sf+yqn5faAjybLWhhqZ1ZVe9luq7h9J0mr6rjctAnY+iUhvWXgXaXW9DOh7hcNy8jY6W8CxzgtRQ7p/qVsdB+jtFp6KHib7XU9qi+busIxI7q60YidlRfNxKxRXPRXDQ/cDXHsvqexf0835dUdWzT5TF6mbdfB5/jbZ40vp/J/pRjKDu8STQXzUVzBzRPw/qaEeDxDB5vEJ45jvGMxPelanimOcYzwTGeVsd4xjrGU+sYz1zHeKY7xjPRMZ5xjvHUOcYTOMYzwzGebsd4JjnGs8gxnpRjPGMc41nsGM88x3hmOsYz2TGeJsd46h3jme8YzyzHeJY4xjPFMZ60YzzjHeNpcIxnoWM8Cxzjme0Yz0bHeKY6xtPsGE+LYzyNjvH4DvCkvPJn1VKwfgv4aozPqv788db+9Vdofw18Zrsu14bUfQX4+F7w9pDPok5XQFsKupwd3lTUCWMFsMzxmoBjuyM8jY7xtDjG0+wYz1THeDY6xjPbMZ4FjvEsdIynwTGe8Y7xpB3jmeIYzxLHeGY5xjPfMZ56x3iaHOOZ7BjPTMd45jnGs9gxnjGO8aQc41nkGM8kx3i6HeOZ4RhP4BhPnWM84xzjmegYz3THeOY6xlPrGM9Yx3haHeOZ4BjPNMd4tjjGM8cxnpoQHgu/Oy/y8P0BrpuXtzgSm3UpxBe7+Hv7HZbatFPXVa/rZn6OVwfbvKAHsng8nf1qMu/l4HHD29WEaMbvh9kKy4UK21fJ+2E4Nr8fZpvBi+37HbSvEbaN+/0w+HucN0ELzC8u+7AeP7dz+Gyh74fhWLXAsDOEC3nw+dru4XNVpNk2IzaW8VjdGsJeC9vuDPk86rAxxIfbbgMuW/nSbbR9sHypg+23gI/Xv2HkuK2+Mup3cCPRT0f9Dm4kYkf9Dm4kYovm0Zpb+D9Oxff9YJ+gJt9YDqCMzy1ts6CFpXYOuP6I+30/PaCP2eemYf0O0K7Hgna+N7CvD2AZGSvlXeAAr818uDL+et96jxDreqWhL7brKkuaRvWhV41A7Kg+dCRiR/WhIxFbNBfNRfMDW/Nduhzj9UUWY6jvQHz+2AVx+3TZjzGuqqtX18XvPWKOPuDhbQ7RidDsSf7ZiC3HvGgumovm+0NzLKvx732NO24NYe+1wI6/v+DJN5YDKPcCjw0tLbWzeA2w2yvXl2OlYT2Os+620Ea8LuC6eXk38PBUAzw2cqCS/R31niwXeKY5xjPBMZ5Wx3jGOsZT6xhPj2M8cx3jme4Yz0THeMY5xlPnGE/gGM8Mx3gmOcazyDGelGM8YxzjWewYzzzHeGY6xjPZMZ4mx3jqHeOZ7xjPLMd4ljjGM8UxnrRjPOMd42lwjGehYzzdjvHMdoxnqmM8zY7xtDjG0+gYj+8AT9R7oHh9D/h4zBrfIXW1Ll8FvpqQGDz2tht8PF7Adaj++JnW8rpRJ1vj9BgrgGWO1wQcVzvC0+gYT4tjPM2O8Ux1jGe2YzzdjvEsdIynwTGe8Y7xpB3jmeIYzxLHeGY5xjPfMZ56x3iaHOOZ7BjPTMd45jnGs9gxnjGO8aQc41nkGM8kx3hmOMYTOMZT5xjPOMd4JjrGM90xnrmO8fQ4xlPrGM9Yx3haHeOZ4BjPNMd45jjGUxPC022JJ+r3FN0jEDvq9xQjETvq9xQjEVs0F81F8wNbcwvnl3zKG/gbLzX5xnIA5d3AY+PdIZbamcX71nH/jnsP6NNt6JSG9fg7tT0WtPO9gb8nC2AZGYVXePdA7L2xx85lU0ZsNQ3Wr+y1rIWddpaO/2ugHbuN9qRhPe7vayy00Ye4XDcvI6PwCq/wCq/wCq/wCq/wCq/wCq/wCq/wCq/wCq/wCq/w7ptXxb429til8XOMrSbfWA6gfK1lLey0szR+fh20Y6/RnjSsx/19nYU2+hCX6+ZlZBRe4RVe4RVe4RVe4RVe4RVe4RVe4RVe4RVe4RVe4RXeffOq2NfHH7v4uxaMrSbfWA6gfL1lLSy1szh+fgO041qjPWlYj/v7Bgtt9CEu183LyCi8wnsDxL4x9til+2cYW02DHf83WtbCTjtLx/9N0I7rjfakYT3u75sstNGHuFw3L99kN3ZRh5v3ocPNISw3j7AON4O/Ut7ehPGKvqKv6Cv6RvGKvqKv6Cv6RvGKvqKv6Cv6RvGKvqKv6Cv6RvGKvqKv6Ds8XhX7lthjtxfH5TG2mnxjOYDyLZa1sNPO0nj0rdCOG432pGE95uetFtroQ1yum5eRcbTy3pQwXskHu7ySD8Ir+SC8UbySD8Ir+SC8UbySD8Ir+SC8UbySD8Ir+SC8UbySD8Ir+SC8UbySD8Ir+SC8UbySD8Ir+SC8Ubwu5IOKfVv8sYu/68bYavKN5QDKt1nWwlI7i8+P3A7tuMVoTxrWY37ebqGNPsTlunkZGYVXeG+H2HfEHzuXMmKrabDj/w7LWlhqZ/H4vxPacZvRnjSsx/19p4U2+hCX6+ZlZEwSbwp8NeDj9bXgu0uX68D3Nl0eA767dbkefPfocgP47oX2s+/tujwWfO/Q5SXgu0+Xu8H3Tl3uAd+7dHk3+N6ty3vAd78u7wXfe3T5GvC9V5evBd/7dPk68L1fl68H3wO6fAP4PqDLN4Lvg7p8M/g+pMu3gO/Dunwr+B7U5dvA9xFdvh18H9XlXvB9TJfHge8hKPP847rcBL6HdTkNvk/o8njwPaLLzeB7VJdbwPeYLk8A3+O63Aq+T+ryRPB9Spcnge/TujwZfE/o8hTwPanLU8H3lC5PA99ndHk6+D6ryzPA97QuzwTf53R5Fvie0eXZ4Pu8Ls8B3xd0eS74vqjLAfi+pMvzwPesLs8H35d1GfOA+4E7wMf9APYb3A/cBT7uB94GPu4H7gYf9wP3gI/7gXvBx/3A28HH+fkO8HF+3gc+zs93go/z813g4/x8N/g4P+8HH+fne8DH+fle8HF+vg98nJ/vBx/n5wPg4/z8APg4Pz8IPs7PD4GP8/PD4OP8fBB8nJ8fAR/n50fBx/n5MfBxfj4EPs7Pj4OP8/Nh8AW6/AnwcX4+Aj7Oz0fBd5AuPwa+g3X5cfAdosufBN+huvwp8B2my58G3+G6/AT4Fujyk+A7QpefAt9CXf4M+Bbp8mfBt1iXnwYfn9c+B76MLj8Dvqwufx58bbr8BfDldPmL4GvX5S+BL6/Lz4JvqS5zv6COvyaIzVxNEKct5PPsU8f0Ml0OvHivbTgW183Ly4CR27105BlzlTLmDUbFs8KCZimIy9Ng3xlWAM9yCzyW2llM1Q5oxzKjPWlYvwDa2GGhjT7E5bp5uQNi29jfPsSo13UvNLSog22u0yeuZoMPNeTPq7xdGtIOWxrmvYEa5kNir7asIdfNfeHqEYi90ojdbsRWxzTml5oGO6ZXAvMqC8yq3s74682qNh2p6+Jc5jjt0KY1oEFcbcLYvjaOw/46KN/PF4CwnZr4fMnc6hhaHbIdllcYn0nD+tUh7Q5ibncnsASwzPHU9f5drf0cFo6D4r5fbXDwcjv4O0N0Ww268fql4OPrmQ7wtRl1pGA9XjNk429raH/Dy1lgZN9KYMyGMC6Nn7F4XZM1GLMh2rJvFfAwb8GLV7NVwKPqXWjog+fhBmMb/mwdbPMonAtTIduqvG/0+9vF34/f9OLtS+tB47jqxe/uHuiDUwBlZmj0+r/fx8kzzuv//t7b17Or67LNZ27u2uQDWp2BiXM/pBk14MNybYjP8wYOU+DwJg9T4PBmjSELDo/w9uprky25UA+uu87gbASWOGPjEA9Pg6VOA/DYSGWVOjzMo1PnvF1b+zZjfowxOIeSO2pd7SDbRdU11ivXJ9ZEYKgFRvAava5OC6DEVzujUUPxMafEU321GgNTfZ0a41JjWqr7U2NWaoxKjUmpMSg15qTGmNSYkhpDUmNGaoxIjQmpMSA15hN4pTEdNYajxmzUGI0ak1FjMGrM5XDg/A6wqzEV1ceqMRM1RqLGRNS5WZ1D1PlMXTupc7267lfnGPV9RH0nVf21Oheqfl71zep8r87z6lpsjdZ6LdlRZOvIjiY7huxYsuPIjic7gexEspPITiY7hexUstPITic7g+xMsrPIziY7h+xcsvPIzie7gOxCsovILia7hOxSsvVkG8i6vNJ9io1km8g2k20hu4zscrKtZNvIriDbTraDbKdXuo9xJdlVZLu80hhtn1e6l3G1V7p/oe5XqPsT6n6Euv+g7jeo+wvqfoJ6/uFmr3TPQN0jUPcE1D0ANa6rxnHVuK0ap1Xjsmoc9l6vNM6qxlXVOKoaN1XjpGpcVI2DqnFPNc6pxjXVOKYat1TjlGpcUo1DqnFHNc6oxhXVOKIaN3zIK40LqnFANe6nxvnUuJ4ax1PjdmqcTo3LqXE4Ne6mxtnUuJoaR1PjZmqcTI2LqXEwNe6lxrnUuJYax1LjVmqc6itkXyX7GtlzZF8n+wbZN8m+RfZtr5Rr3yX7Htn3yX5A9kOyH5H9mOwnZD8l+xnZz8l+QfZLsl+RPU/2AtmLZC+R/ZrsN2S/JXuZ7Hdkvyf7A9kfyV4h+xPZn8n+QvZXsr+R/Z3sH2T/JHuV7DWyf5G9TvaG1z+WjB3Gf+qFeXq5q69v844r+4K+nmDH7u19W6/cfk2wZ2vf5UHP1Zt3bdneswc//KjuongQeO2uXV3XBFt3btq8N+jZ3Rf0bAm6e3bv3NSLH/qu/tCs8ohdmzZFB3uxZhikvx1i0Ff153h4/YTB2/b6UAT5j6F8aGLt0Bq0U5/NeDx+Y9f27cUP9fZu3tW3fkfX3vXdW/vW9269djN+7An9Mf66c1bpXBj0bu/pC7LBTvpLFfXs2bxpSYDremnf9PYFvX1du/qCLbt6dgRtS7De59NDaPvL6SG14fX00CQ7eLydtl/bOoS2P9JaeSO8/wcjH0axpW8DAA==", "debug_symbols": "5Z3dbmXLdZ3f5VwLwZo1f0uvEuRCSRzAgGEblhAgEPzuWcduslsQJWrs7lX+GrpSq7Gr1uCZrLHJj/U1//jLP/3L//rdH/7xX/7597/89o+/XP9txfXLb//7H3/5/b/+7p9//Zvf/+F3//aHX357/eaXf/jn/33/77//5pf/84//9A+//Hb19e//4zf/scLkFUte4fKKkFekvKLkFS2vGHnFVlekPPOUZ57yzFOeecozT3nmKc885ZmnPPOUZ17yzEueeQnz+M2fvS5ivrwyYr+/dupt83xy8/mezTP8yysz4v21Fv22+35y974e3d0e3X09urs/uns8uns+uns9uns/uvujZ7UfPavzXWfV3b680vODEht7cvP15Ob+5Obx5Ob55Ob15Ob95Obz5Ob7wc33kyd0P3lC95MndD95QveTJ3Q/eUL3kyd0P3lC95MndD94Qv26ntzcntx8Pbm5P7l5PLl5Prl5Pbl5P7n5PLn5kyfUnjyh9uQJtSdPqKmAyy3kFd/3bWO9UZKcfH/t/bF82bye3Py7zpLl/vJKG/v2P73w0i85BpJjn8pR+21X6+vrZGzPlyjr4kTxU1G64j1KfRglOFGSE6U4UZoTZThRNiaKX5woxomyOFE4beuctnVO2zqnbZ3Tts5pW+e0bXDaNjhtG5y2DU7bBqdtg9O2wWnb4LRtcNo2OG2bnLZNTtsmp22T07bJadvktG1y2jY5bZuctk1O2xanbYvTtsVp2+K0bXHatjhtW5y2LU7bFqdti9O2zWnb5rRtc9q2OW3bnLZtTts2p22b07bNadvmtO1w2nY4bTucth1O2w6nbYfTtsNp2+G07XDadjhtuzltuzltuzltuzltuzltuzltuzltuzltuzltuzFtGxembePCtG1cmLaNC9O2cWHaNi5M28aFadu4MG0bF6Zt4+K0rXHa1jhta5y2NU7bGqdtjdO2xmlb47StcdrWOG27OG27OG27OG3LccmC45IFxyULjksWHJcsOC5ZcFyy4LhkwXHJguOSBcclC45LFhyXLDguWXBcsuC4ZMFxyYLjkgXHJQuOSxYclyw4LllwXLLguGTBccmC45IFxyULjksWHJcsOC5ZcFyy4LhkwXHJguOSBcclC45LFhyXLDguWXBcsuC4ZMFxyYLjksU5VWnM3l/r66MoGxPlmJSz7q/ov7z2/mN/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Pv3Qpx/69EOffujTD336qU8/9emnPv3Up5/69FOffurTT336qU8/9emXPv3Sp1/69EuffunTL336pU+/9OmXPv3Sp9/69FuffuvTb336rU+/9em3Pv3Wp9/69Fuf/ujTH336o09/9OmPPv3Rpz/69Eef/ujTH336W5/+1qe/9elvffpbn/7Wp7/16W99+lufvs76TGd9prM+01mf6azv/qpXX5L6ktKXtL5k9CX69HXWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s661s663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrS531pc76Umd9qbO+1Flf6qwvddaXOutLnfWlzvpSZ32ps77UWV/qrC911pc660ud9aXO+lJnfamzvtRZX+qsL3XWlzrrS531pc76Umd9qbO+1Flf6qwvddaXOutLnfWlzvpSZ32ps77UWV/qrC911pc660ud9aXO+lJnfamzvtRZX+qsL3XWlzrrS531pc76Umd9qbO+1Flf6qwvddaXOutLnfWlzvpSZ32ps77UWV/qrC911pc660ud9aXO+lJnfamzvtRZX+qsL3XWlzrrS531pc76Umd9qbO+1Flf6qwvddaXOutLnfWlzvpSZ32ps77UWV/qrC911pc660ud9aXO+lJnfamzvtRZX+qsL3XWlzrrS531pc76Umd9qbO+0llf6ayvdNZXOusrnfWVzvpKZ32ls77SWV/prK901lc66yud9ZXO+kpnfaWzvtJZX+msr3TWVzrrK531lc76Smd9pbO+0llf6ayvdNZXOusrnfWVzvpKZ32ls77SWV/prK901lc66yud9ZXO+kpnfaWzvtJZX+msr3TWVzrrK531lc76Smd9pbO+0llf6ayvdNZXOusrnfWVzvpKZ32ls77SWV/prK901lc66yud9ZXO+kpnfaWzvtJZX+msr3TWVzrrK531lc76Smd9pbO+0llf6ayvdNZXOusrnfWVzvpKZ32ls77SWV/prK901lc66yud9ZXO+kpnfaWzvtJZX+msr3TWVzrrK531lc76Smd9pbO+0llf6ayvdNZXOutrnfW1zvpaZ32ts77WWV/rrK911tc662ud9bXO+lpnfa2zvtZZX+usr3XW1zrra531tc76Wmd9rbO+1llf66yvddbXOutrnfW1zvpaZ32ts77WWV/rrK911tc662ud9bXO+lpnfa2zvtZZX+usr3XW1zrra531tc76Wmd9rbO+1llf66yvddbXOutrnfW1zvpaZ32ts77WWV/rrK911tc662ud9bXO+lpnfa2zvtZZX+usr3XW1zrra531tc76Wmd9rbO+1llf66yvddbXOutrnfW1zvpaZ32ts77WWV/rrK911tc662ud9bXO+lpnfa2zvtZZX+usr3XW1zrra531tc76Wmd9rbO+1llf66yvddbXOutrnfW1zvpaZ32ts77RWd/orG901jc66xud9Y3O+kZnfaOzvtFZ3+isb3TWNzrrG531jc76Rmd9o7O+0Vnf6KxvdNY3OusbnfWNzvpGZ32js77RWd/orG901jc66xud9Y3O+kZnfaOzvtFZ3+isb3TWNzrrG531jc76Rmd9o7O+0Vnf6KxvdNY3OusbnfWNzvpGZ32js77RWd/orG901jc66xud9Y3O+kZnfaOzvtFZ3+isb3TWNzrrG531jc76Rmd9o7O+0Vnf6KxvdNY3OusbnfWNzvpGZ32js77RWd/orG901jc66xud9Y3O+kZhfb/5s9fdPyb48sobgnx97dfd95O7KwTxhd3t0d3Xo7v7o7vHo7vno7vXo7v3o7s/elbn0bO6v+usZtWXV+b0+2vt2h+89v5hxJfXruvrvh7vSQyTZGGSOCZJYJIkJklhkjQmyWCSbEiSfVE6dl+Ujt3XQx37tr0/u308u30+u309u30/u/08u/1+dHu7nt3ent3+2VNrz55a+75Tu9++ki5b39l+lpgkhUnSmCSDSbIpSdaFSWKYJAuTxDFJMB27MB27MB27MB27MB27MB3rmI51TMc6pmMd07GO6VjHdKxjOtYxHeuYjnVMxwamYwPTsYHp2MB0bGA6NjAdG5iODUzHBqZjA9OxienYxHRsYjo2MR2bmI5NTMcmpmMT07GJ6djEdGxhOrYwHVuYji1M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" }, { "name": "claim_public", "function_type": "Open", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "authwit::aztec::context::inputs::public_context_inputs::PublicContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "public_global_variables", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] }, "visibility": "private" }, { "name": "to", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "amount", "type": { "kind": "field" }, "visibility": "private" }, { "name": "canceller", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "secret", "type": { "kind": "field" }, "visibility": "private" }], "param_witnesses": { "amount": [{ "start": 40, "end": 41 }], "canceller": [{ "start": 41, "end": 42 }], "inputs": [{ "start": 0, "end": 39 }], "secret": [{ "start": 42, "end": 43 }], "to": [{ "start": 39, "end": 40 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "contract_storage_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "contract_storage_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "current_value", "type": { "kind": "field" } }] } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "prover_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] }, "visibility": "public" }, "return_witnesses": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236] }, "bytecode": "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", "debug_symbols": "7b3d7iRNjt53L3O8MJIR/ArdiuGDtS0DAgRJkAQDhrD37hqrq7rHnfNmsqoj6mEyj/bdQVUmyawgmWz+nv//+Nt//M//x7/+9//wn//Tf/vbv/sff9v+l8btb//uf/0ff/tv/+Vf/9Pf/5f/9t//9b/+97/9u+1f/vbv/9P/+fi///Yvf/u//sN//Pd/+3fNtn/73/7l//tGD3+Dw9+Q8Dc0/A0Lf8PD3xjRb8gW/gaFvxF+5hJ+5hJ+5hJ+5hJ+5hJ+5hJ+5hJ+5hp+5hp+5hp+5hp+5hp4Hv/y2+eY/ccnmcfrs67Pi9vEi9v2ycWF+49PCvPrs8T2vDpNvXqbevU+9eo89eoy9eo69eo29eo+9epj5tV96ln1qWfVPzqrvdOPT3bZSWLeZ16cZ15cZl5cZ17cZl7cZ158TLz42GZenGZefOYJHTNP6Jh5QsfMEzpmntAx84SOmSd0TDyhfdtmXpxmXrzNvHifeXGeeXGZeXGdeXGbeXGfefGZJ5RmnlCaeUJp5gmlmSeUZp5Qig64OkUHXL199KP56ylJbzTz4jNHAb3J1Kvr1Kvb1Kv71KvPHAX0vk29Ok29ept69T716lPPap96VvvMVqbPbGX6zFamz2xleGYrwzNbGZ7ZyvDMVoZ55sVnvmzwzBPKM08ozzyhPPOEyswTKjNPqMw8oTLzhMrMEyozT6jMPKEy84TKzBMqM0+ozjyhOvOE6swTqjNPqM48oTrzhOrME6ozT6jOPKEa3c3ptoW/8dlroz6nJOLy+uzDlx8XbzMv/tFZIhk/PklOv4Y+8NEfdjCIHbLKDh3Pq5JtP58MDX+aojimjFWmmPLLFN0z5bNVkD9rCuGY0nBM6TimMI4pgmOK4phiOKY4jik42XbgZNuBk20HTrYdONl24GTbgZNtB062HTjZduBk2wGTbXmDyba8wWRb3mCyLW8w2ZY3mGzLG0y25Q0m2/IGk215g8m2vOFkW8LJtoSTbQkn2xJOtiWcbEs42ZZwsi3hZFvCybaEk20bTrZtONm24WTbhpNtG062bTjZtuFk24aTbRtOtm042bbjZNuOk207TrbtONm242TbjpNtO0627TjZtuNk246TbRkn2zJOtmWcbMs42ZZxsi3jZFvGybaMk20ZJ9syTrYVnGwrONlWcLKt4GRbwcm2gpNtBSfbCk62FZxsKzjZVnGyreJkW8XJtoqTbRUn2ypOtlWcbKs42VZxsq3iZFvDybaGk20NJ9saTrY1nGxrONnWcLKt4WRbw8m2OCwZ47BkjMOSMQ5LxjgsGeOwZIzDkjEOS8Y4LBnjsGSMw5IxDkvGOCwZ47BkjMOSMQ5LxjgsGeOwZIzDkjEOS8Y4LJngsGSCw5IJDksmOCyZbDDZVnBYMsFhyQSHJRMclkxwWDLBYckEhyUTHJZMcFgywWHJBIclExyWTHBYMsFhyQSHJRMclkzWoUpO9Ppsb3umCI4pq362jVl/fPbxn7ZnyoAxZRmUc8IUwjGl4ZiyrEkgH+354cd///yjBW2jpzGMZIwse0j+zC1NmP7hIcU+/cNwzWq4QRpORLa9fiyt857pntf0kdb0dbiNvySFH/859kzpOKYwjimCY4rimLLsZWts9vzs6H3PFMcxZcCYsg63OTaFcExpOKZ0HFMYxxTBMUVxTMHJtutwmyGv3mn4tmPKMrCkbe3V9W1tb3KyDCw5YUrHMYVxTBEcUxTHFMMxxXFMGTCmLANLTpiCk20NJ9saTrY1nGxrONnWcLKt4WRbw8m2hpNtHSfbOk62dZxs6zjZ1nGyreNkW8fJto6TbR0n2zpOth042XbgZNuBk20HTrYdONl24GTbgZNtB062HTjZdsBkW91gsq1uMNlWN5hsqxtMttUNJtvqBpNtdYPJtrrBZFvdYLKtbjjZlnCyLeFkW8LJtoSTbQkn2xJOtiWcbEs42ZZwsi3hZNuGk20bTrZtONm24WTbhpNtG062bTjZtuFk24aTbRtOtu042bbjZNuOk207TrbtONm242TbjpNtO0627TjZtuNkW8bJtoyTbRkn2zJOtmWcbMs42ZZxsi3jZFvGybaMk20FJ9sKTrYVnGwrONlWcLKt4GRbwcm2gpNtBSfbCk62VZxsi8OSKQ5LpjgsmeKwZIrDkikOS6Y4LJnisGSKw5IpDkumOCyZ4rBkisOSKQ5LpjgsmeKwZIrDkikOS6Y4LJnisGSKw5IpDkumOCyZ4rBkisOSKQ5LpjgsmeKwZIrDkikOS6Y4LJnisGSKw5IpDkumOCyZ4rBkisOSKQ5LpjgsmeGwZIbDkhkOS2YLUSWzlylj7JliMKasg3KayNOUJrpnCuGY0nBM6TimMI4pyyQxjxXlbd3fezljzLLc0vmVW3j7RxnvPdMPZb9tHcjz500faU1fBwr9edMpr+kNwPQfpjCOKYJjiuKYgpDSf5iCkKJ/mIKQcv+nKTh/Dclw/hqS4fw1JFtH/xybwjimCI4pimOK4ZgC87fnrMP87TljnGzLONmWcbIt42Rbxsm2jJNtGSfbMk62ZZxsyzjZVnCyreBkW8HJtoKTbQUn2wpOthWcbCs42VZwsq3gZFvFybaKk20VJ9sqTrZVnGyrONlWcbKt4mRbxcm26zgX6s/PNlLZM6XhmNJxTGEcUwTHFMUxxXBMcRxTBowp6ziXfzBlb7/LCceUhmNKxzGFcUwRHFPWZdvBT1Ma7fUr64iOQ1PWER3HphCOKQ3HlI5jyrK80nR7mWJ7y5rriI5jUxTHFMMxxXFMGSim+Dqi49gUwjGl4ZjScUxZl20PVuN93V8HOjZFcUwxHFMcx5QBYwoOiOQ4IJLjgEiOAyI5DojkhJNtCSfbEk62JZxsSzjZtuFk24aTbRtOtm042bbhZNuGk20bTrZtONm24WTbhpNtO0627TjZtuNk246TbTtOtu042bbjZNuOk207TopjnBTHOCmOcVIc46S4CN3wP78RgRB+fIPC32jhb/TwNzj8jY9ycLeXEEG3X/R/HjPsH5fXuZe3uZf3uZcfUy//2a738eU/SoPM9ITeH//pO5dvcy/f516e515e5l5e517eolkqsl784xvhGmDhGmDhGmDhGmDhGhBZr/3xDQl/Q8PfCD9zCz9zCz9zDz9zDz9zDz9zDz9zDz9zDz9zDz9zDz9zDz9zDz/zEX7mI/zMR/iZj/AzH+FnPsLPfISf+Qg/8xF+5iP6zMe2hb9B4W+08Dd6+Bsc/oaEv6Hhb1j4Gx7+RviZU/iZU/iZU/iZU/iZU/iZU/iZU/iZU/iZU/iZU/iZt/Azb+Fn3sLPvIWfeQs/8xZ+5i38zFv4mbfwM2/hZ97Dz7yHn3kPP/MefuY9/Mx7+Jn38DPv4Wfew8+8h585h585h585h585h585h585h585h585h585h595eEY7wjPaEZ7RjvCMdoRntCM8ox0SfuYSfuYSfuYSfuYSfuYafuYafuYafuYafuYafuYafuYafubhOdwIz+FGeA43wnO4EZ7DjfAcboTncCM8hxvhOdwIz+FGeA43wnO4EZ7DjfAcboTncCM8hxvhOdwIz+FGeA43wnO4EZ7DjfAcboTncCM8hxvhOdwIz+FGeA43wnO4EZ7DjfAcboTncCM8hxvhORxt4UHc4ysU/0qLf6XHv8Lxr0j8Kxr/isW/4vGvxJ8+xZ8+xZ8+xZ8+xZ8+xZ8+xZ8+xZ8+xZ8+xZ8+xZ9+iz/9Fn/6Lf70W/zpt/jTb/Gn3+JPv8Wffos//RZ/+j3+9Hv86ff40+/xp9/jT7/Hn36PP/0ef/o9/vR7/Olz/Olz/Olz/Olz/Olz/Olz/Olz/Olz/Olz/Olz/OlL/OlL/OlL/OlL/OlL/OlL/OlL/OlL/OlL/OlL/Olr/Olr/Olr/Olr/Olr/Olr/Olr/Olr/Olr/Olr/Olb/Olb/Olb/Olb/Olb/Olb/Olb/Olb/Olb/Olb/Ol7/Ol7/Ol7/Ol7/Ol7/Ol7/Ol7/Ol7/Ol7/Ol7/OmP+NMf8ac/4k9/xJ/+iD/9EX/6I/70R/zpj/jTj8/6KD7ro/isj+KzPorP+h5db/wrEv+Kxr9i8a94/Cvxpx+f9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNZH8VkfxWd9FJ/1UXzWR/FZH8VnfRSf9VF81kfxWR/FZ30Un/VRfNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfS0+62vxWV+Lz/pafNbX4rO+Fp/1tfisr8VnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbX47O+Hp/19fisr8dnfT0+6+vxWV+Pz/p6fNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWx/FZH8dnfRyf9XF81sfxWR/HZ30cn/VxfNbH8Vkfx2d9HJ/1cXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81ifxWZ/EZ30Sn/VJfNYn8VmfxGd9Ep/1SXzWJ/FZn8RnfRKf9Ul81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNan8Vmfxmd9Gp/1aXzWp/FZn8ZnfRqf9Wl81qfxWZ/GZ30an/VpfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzWZ/FZn8VnfRaf9Vl81mfxWZ/FZ30Wn/VZfNZn8VmfxWd9Fp/1WXzW5/FZn8dnfR6f9Xl81ufxWZ/HZ30en/V5fNbn8Vmfx2d9Hp/1eXzW5/FZn8dnfR6f9Xl81ufxWZ/HZ30en/V5fNbn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dP4tbP4tfP4t5p/u+btqPH9XjefvqvH8XTWev6vG83fVeP6uGs/fVeP5u2o8f1eN5++q8fxdNZ6/q8bzd9V4/q4az99V4/m7ajx/V43n76rx/F01nr+rxvN31Xj+rhrP31Xj+btqPH9XjefvqvH8XTWev6vG83fVeP6uGs/fVeP5u2o8f1eN5++q8fxdNZ6/q8bzd9V4/q4az99V4/m7ajx/V43n76rx/F01nr+rxvN31Xj+rhrP31Xj+btqPH9XjefvqvH8XTWev6vG83fVeP6uGs/fVeP5u2o8f1eN5++q8fxdNZ6/q8bzd9V4/q4az99V4/m7ajx/V43n76rx/F01nr+rxvN31Xj+rhrP31Xj+btqPH9XjefvqvH8XTWev6vG83fVeP6uGs/fVeP5u2o8f1eN5++q8fxdNZ6/q8bzd9V4/q4az99V4/m7ajx/V03m76rJ/F01mb+rJvN31WTj+beQ+bfQ+bew+bfw+beYf7rn76rJ/F01mb+rJvN31WT+rprM31WT+btqMn9XTebvqsn8XTWZv6sm83fVZP6umszfVZP5u2oyf1dN5u+qyfxdNZm/qybzd9Vk/q6azN9Vk/m7ajJ/V03m76rJ/F01mb+rJvN31WT+rprM31WT+btqMn9XTebvqsn8XTWZv6sm83fVZP6umszfVZP5u2oyf1dN5u+qyfxdNZm/qybzd9Vk/q6azN9Vk/m7ajJ/V03m76rJ/F01mb+rJvN31WT+rprM31WT+btqMn9XTebvqsn8XTWZv6sm83fVZP6umszfVZP5u2oyf1dN5u+qyfxdNZm/qybzd9Vk/q6azN9Vk/m7ajJ/V03m76rJ/F01mb+rJvN31WT+rprM31WT+btqMn9XTebvqsn8XTWZv6sm83fVZP6umszfVZP5u2oyf1dN5u+qyfxdNZ2/q6bzd9V0/q6azt9V043n30Lm30Ln38Lm38Ln32L+6Z6/q6bzd9V0/q6azt9V0/m7ajp/V03n76rp/F01nb+rpvN31XT+rprO31XT+btqOn9XTefvqun8XTWdv6um83fVdP6ums7fVdP5u2o6f1dN5++q6fxdNZ2/q6bzd9V0/q6azt9V0/m7ajp/V03n76rp/F01nb+rpvN31XT+rprO31XT+btqOn9XTT/fVePNfnyW+/iHW/z+2eHP69JGv9izd13qQ58f5v4PH37aPvLa/vl23Rdtp8S2t8S298S2c2LbJbHtmth2S2x74roqieuqJq6rmriuauK6qonr6ue7w1+0PXFd1cR1VRPXVU1cVzVxXbXEddUS11VLXFctcV39fGv/i7YnrquWuK5a4rpqieuqJa6rnriueuK66onrqieuq5/zMl+0PXFd9cR11RPXVU9cVz1xXR2J6+pIXFfHxLr6vEWff4vPq5Ty8xaua5+AJLZdE9tuiW33xLaPtLbb5zTgF22nxLa3xLb3xLbnrau25a2rtuWtq7blrau25a2rtiWuq5S4rlLiukqJ6yolrqufs85ftD1xXaXEdZUS11VKXFcpcV1tietqS1xXW+K62hLX1c9VBr5oe+K62hLX1Za4rrbEdbUlrqs9cV3tietqT1xXe+K6+rm+xxdtT1xX+8S6+ryFzb/Fx1VK6HkLkW3tExh5bf9cQ+WLtlNi21ti23ti2zmx7ZLYdk1suyW2PXFd5cR1VRLXVUlcVyVxXZXEdfVzLaAv2p64rkriuiqJ66okrquSuK5q4rqqieuqJq6rmriufq4F9EXbE9dVTVxXNXFd1cR1VRPXVUtcVy1xXbXEddUS19XPtYC+aHviumqJ66olrquWuK5a4rrqE+vq8xY0/xafZ0sdz1v8Peo7t5D5t/j4DKg/RQZ09N1bjOm3+FwF4/gWNP8Wbf4tPm5PvD1PtzfbvQXPv4XMv4XOv4XNv4XPv8WYfQv/XD3g+BY0/xZt/i36/Fvw/FvI/Fvo/FvY/Fv4/FvMP900/3TT/NNN8083zT/dNP900/zTTfNPN80/3TT/dNP8093mn+42/3S3+ae7zT/dn1N+Ls8/s+fSd28h82+h829h82/h828xpt/ic57r+BY0/xZt/i36/FvMP919/unu8093n3+6+/zT3eefbp5/unn+6eb5p5vnn26ef7p5/unm+aeb559unn+6ef7plvmnW+afbpl/umX+6Zb5p/vzhW43f97Cxu4tdP4tbP4tfP4txvRbfL4TfHwLmn+LNv8Wff4teP4t5p9unX+6df7p1vmnW+efbpt/um3+6bb5p9vmn26bf7pt/um2+afb5p9um3+6bf7p9vmn2+efbp9/un3+6fb5p9vnn+7P/yrW2J7rcGOT3VvY/Fv4/FuM6bf4fFft+BY0/xZt/i36/Fvw/FvI/FvMP91j/uke80/3mH66x7bNvwXNv0Wbf4s+/xY8/xYy/xY6/xY2/xY+/xbzTzfNP900/3TT/NNN8083zT/dNP900/zTTfNPN80/3TT/dLf5p7vNP91t/ulu80/357tqoz/Rp6GH6rP/9LNPcwTLHF1pDtF4XpgatdenafjLIEMzyNEMGmAGfb6796cNIjSDGppBHc2gpVmamvrLIB27BgmaQYpmkKEZ5GgGrc3UbWxPg/q27RnEG5pBhGZQQzOooxm0NlP39tOgvm+QoBmkaAYZmEGyNg91Hi+DhHYNIjSD1p4y9pdBPHTXIEEzSNEMWnvKdHudMt1816C1/ZAMPjIo2A/9+Nr+Bqra83Ym48APbvL6CzlN+fVp7q970Kf3UOvy9MPkpyOmr3u0BffoH9/jMfF43uPRfezdgz/3w/vzw1trv97j9w+LPxfSjX/mSpe99ZX2DI+Pn4VHbfedlOx1gKh13vvB7i/DXtJTLeOplfHUy3g6qnhqWxlPqYynrYynvYynXMbTMj2Sre2RTF+ftf7XnpK95Bof/+m/+vq03RLb7oltH3lt9y2x7ZTY9pbY9p7Ydk5suyS2PXFd9cR11RPXVU9cV0fiujoS19WRuK6OxHV1JK6rI3FdHYnr6khcV0fiujrS1lXetrR19WF72rr6sD1tXX3YnrauPmxPW1cftqetqw/b09bVh+1p6+rD9rR19WF74rpKiesqJa6rlLiuUuK6SonrKiWuq5S4rlLiukqJ6yolrqstcV1tietqS1xXW+K62hLX1Za4rrbEdbUlrqstcV1tietqT1xXe+K62hPX1Z64rvbEdbUnrqs9cV3tietqT1xXe+K6yonrKieuq5y4rnLiusqJ6yonrqucuK5y4rrKiesqJ66rkriuSuK6KonrqiSuq5K4rkriuiqJ66okrquSuK5K4rqqieuqJq6rmriuauK6uliX68/anriuauK6qonrqiauq5q4rlriumqJ66olrquWuK4u1nL6s7Ynrqt59ZYetieuq3n1lh62J66refWWHrYnrqt59ZYetieuq3n1lh62J66refWWHrYnrqt59ZYetieuq3n1lh62J66refWWHrYnrqt59ZYetieuq3n1lh62J66refWWHrbnrauUWG+JEustUWK9JUqst0Rb3rpKifWWKLHeEiXWW6LEekuUWG+JEustUWK9JUqst0SJ9ZYosd4SJdZbosR6S5RYb4kS6y1RYr0lSqy3RIn1liix3hIl1luixHpLlFhviRLrLVFivSVKrLdEifWWKLHeEiXWW6LEekuUWG+JEustUWK9JUqst0SJ9ZYosd4SJdZbosR6S5RYb4kS6y1RYr0lSqy3RIn1liix3hIl1luixHpLlFhviRLrLVFivSVKrLdEifWWKLHeEiXWW6LEekuUWG+JEustUWK9JUqst0SJ9ZYosd4SJdZbosR6S5RYb4kS6y1RYr0lSqy3RIn1liix3hIl1luixHpLlFhviRLrLVFivSVKrLdEifWWKLHeEiXWW6LEekuUWG+JEustUWK9JUqst0SJ9ZYosd4SJdZbosR6S5RYb4kS6y1RYr0lSqy3RIn1liix3hIl1luixHpLlFhviRLrLVFivaWWWG+pJdZbaon1llpivaW25a2rLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y21xHpLLbHeUkust9QS6y31xHpLPbHeUk+st9QT6y31LW9d7Yn1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpivaWeWG+pJ9Zb6on1lnpi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t8/7dn59lm3/HrzgHrLgHrrgHrbgHp+/n8vrs/+/Se3rHmP+PT7f6T5xD1pwj7bgHn3BPXjBPWTBPXTBPRac8893jE/cY8y/x+d7wCfuQQvu0RbcY0E9/3yf9sQ9FtRzXlDPecE55wXnnBecc1lwzmXBOZcF51wWnHNZcM5lwTmXBedcFpxzWXDOZcE51wXnXBecc11wznXBOdcF51wXnPPPd+vUn3iTjr5/D1twD19wjzH/Hp/vqJ24x+fnfDzvYST792gL7tEX3IMX3EMW3EMX3MMW3MMX3GPMv4cvOOef78OduEdbcI++4B684B6y4B4L6rkvqOe+oJ77gno+FpzzseCcjwXnfCw452PBOR8LzvlYcM7HgnM+FpzzMf+c27YtuActuEdbcI++4B684B6y4B664B624B6+4B4LzjktOOe04JzTgnNOC845LTjntOCc04JzTgvOOS045/t7ZNuPb20H12d+QtnMP+UgXX9evs29fJ97eZ57eZl7eZ17eZt7eZ97+TH18vurYX/u8h+dWtmen5Rt//Jt7uX73Mvz3MvL3Mvr3Mvb3Mv73MuPqZfnbe7l555anntqee6p5bmnlueeWp57annuqeXPaq09q5XQtnv5MfXyss29PM29fJt7+T738jz38jL38jr38jb38nNPrcw9tTr31OrcU6tzT63OPbU699Tq3FOrc0+tzj21OvfU6txTa3NPrc09tTb31NrcU2tzT63NPbU299Ta3FNrc0+tzT21PvfU+txT63NPrc89tT731PrcU+tzp7A+dwo75k5hx9x/Oxlz/+1kzP23k8FzLz/3307G3H87GXP/7WTMncKOqVNY37a5l6e5l29zL9/nXp7nXl7mXl7nXt7mXt7nXn7uqaW5p5bmnlqae2pp7qmluaeWpvaYTjr38jb38j738lPfDL1tcy9Pcy/f5l6+z708z7383FPb5p7aNvfUtrmnts09tX3uqe1zT22fe2r73FPb557aPvfU9rmnts89tX3uqe1zTy3PPbU899Ty3FPLc08tzz21PPfU8txTy3NP7dztIp+7XeRzt4t87naRz90u8v39nD5+zid/Egq0bT+/p29+z978nr/5vfHe9/Y3IJo+aYy+8S/f+xnP/dWGE9+zN7/nb35vvPe9/fWBE9/bjQtJe/0lR9Gf39T284v27hd3I6Pt+ce+VX3f0vHe9/b/ifbE9+jN77Xg9x7/3//9r//1P/zr//4f//1/e3zj8f/+9//nv/zP//y3/xc=" }, { "name": "balance_of_public", "function_type": "Unconstrained", "is_internal": false, "abi": { "parameters": [{ "name": "owner", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }], "param_witnesses": { "owner": [{ "start": 0, "end": 1 }] }, "return_type": { "abi_type": { "kind": "field" }, "visibility": "public" }, "return_witnesses": [1] }, "bytecode": "H4sIAAAAAAAA/81XTY/aMBC1k0ACAZZr1VbyL1g5qKe2B7bnntpDjyhbQoUEREqMuu2PXzVZZtSH19oPxZEYKcxk7My8eTbjRAohpDhJCDYK+5akdTfJPMbS0sL5g+wE/MpXvg96MWyDROe8sKTNFfANzYmbawjjkvw8bw4+CdgHvrFrvWjzhxZmuwYF9gDwRP7xZD3VqRPg/F743bcx8BNaPE1hfAjcxT1wJyEvx+Z7xPhSvMEF4O1zPyT+4y5mTYwR8JpY/GJdY7I97kctKH8rEeQbQ94J2VL47bkp1CoBxwTw8Jz3pK/Eac8JBz8j/+uTPdXbOB/ikReAJxXuc2VkcYZnDY59hXGuLQDfjOzQEXsKPl67meNZ5GkKtSzJ1t3kgSfMpeCe800Ax+xC8MQOPH31Ul4fjs338YXkZl6Wwm8fv+qppjnFGlJsxs/5IpjzyRpjfyv2fwn3Bc8LHJzdi/O+85pzYvOMYH0xxU4tvFjfF6gvgbldzi4XJs6dUGzsbcKyJYzjc/Pu2DLbISBXCBjmDlyBeLy++DziTUHb64/9HNcmEf97tc93WXxHVh7jttgjcS5PnXv4ntzDu182Bj5rU1b5r+Jbka8lQIssmKjtz8tWAvChHTp8gtJzmRH4eOkH4AssWvCTDbf/o8/0JWndTR56YWgVjILkuOa9I/2Z9PcT56relUZpdWh+892u/F2srxWO1Wp/rI2qTV4ZtanKvcquMe5H0m9I31RV/kdtD+viTpVHo8qNui2Ph3WND92Qfkv6Z5NamVLldV1UZrXP71a3W7Oqt38L8Q9D5LpgCREAAA==", "debug_symbols": "5drdasJAEAXgd8m1lJmd2Z1dX6X0Im0tCKKiUijiuzfBuLFEtBUbTshdFmbdb2Q5+d0Xi9VbuZuvlttiui/oKRTT532xXZfLerzdlZtdMXUiOilmy/f6MNBhUnzMF7NqYNVxpzqxb4pTiLnWpwulzGzUFDM70VzOKR5eJhXI0EARDZTQQExwIoYTOTiRwIkUTuThRHCBzXCJzXCRzXCZ7eAy28FltoPLbPeAzGZSyasQXTedPLd+NFhsKkPyuTa4hq3DZPthssMw2TZMdhwm+xdnJLvFrgIrszWer9EtFnNNrbK0yUbh6BEC8zCYx4F5BMyjYB4P5glgHgPzRDAPWD4rWD4rWD4rWD4rWD4rWD4rWD4rWD4rWD4rWD4rWD77/83n4xrcwxquhzWkhzUeknc+5jUiXd8f7CXfQ3p17Q5J1og8nCjAiQxOFOFECU0UCE7EvYtYW5H8EF04lwiFplpEWn89sVNsmWGpfSTtqOnUjaZTGU2nOppO/Wg6DeCdes6d1o+9206PfBs2P4LzY8z8s82T+Qmdf7oWFyXp8I2Gzb99MWHxFl/y2yCWs9dB7C9VV7v59JZJvPNdketfRNdFl+Mt5D+WtHvPbHbPpHjPpHTHpEj3TOI/TqpGn+VmXr4uZvUnodVw97U+Hh6+AQ==" }, { "name": "check_balance", "function_type": "Open", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "authwit::aztec::context::inputs::public_context_inputs::PublicContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "public_global_variables", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] }, "visibility": "private" }, { "name": "fee_limit", "type": { "kind": "field" }, "visibility": "private" }], "param_witnesses": { "fee_limit": [{ "start": 39, "end": 40 }], "inputs": [{ "start": 0, "end": 39 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "contract_storage_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "contract_storage_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "current_value", "type": { "kind": "field" } }] } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "prover_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] }, "visibility": "public" }, "return_witnesses": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233] }, "bytecode": "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", "debug_symbols": "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X336q09/9emvPv3Vp7/69HXWZzrrM531mc76TGd996tefcnRl5S+pPUloy/Rp6+zPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/prM901mc66zOd9ZnO+kxnfaazPtNZn+msz3TWZzrrM531mc76TGd9prM+01mf6azPdNZnOusznfWZzvpMZ32msz7TWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9bnO+lxnfa6zPtdZn+usz3XW5zrrc531uc76XGd9rrM+11mf66zPddbnOutznfW5zvpcZ32usz7XWZ/rrM911uc663Od9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+isL3TWFzrrC531hc76Qmd9obO+0Flf6KwvdNYXOusLnfWFzvpCZ32hs77QWV/orC901hc66wud9YXO+kJnfaGzvtBZX+qsL3XWlzrrS531pc76Umd9qbO+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" }, { "name": "pay_fee", "function_type": "Open", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "authwit::aztec::context::inputs::public_context_inputs::PublicContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "public_global_variables", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] }, "visibility": "private" }, { "name": "fee_limit", "type": { "kind": "field" }, "visibility": "private" }], "param_witnesses": { "fee_limit": [{ "start": 39, "end": 40 }], "inputs": [{ "start": 0, "end": 39 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "contract_storage_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "contract_storage_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::storage_read::StorageRead", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "current_value", "type": { "kind": "field" } }] } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "type": { "kind": "field" } }] } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "prover_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] }, "visibility": "public" }, "return_witnesses": [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233] }, "bytecode": "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", "debug_symbols": "5Z3djiTJlZzfZa4JIY77+XHnqwi6oKQVsMCCu1gSAgSC765obGdWEZM93RZdcfgV5mp7G+HhlvQ4FtlW9k397Zd/+/f/9ae//uu///kvv/zxb78c/23M/csf//vffvnLf/zpz1/+5i9//dN//vWXPx5/+OVf/vy/z//79z/88n/+9d/+5Zc/jjr+/j/+8GWFH/IKk1cMecWUV7i8In58xR9+dd2c9vXKGft57crHzfPOm9edN1933nzfePM47ry53XnzcefN55039ztvfueExp0TGndOaNw5oXHnhOadE5p3TmjeOaF554TmnROaPzWhFvvrlbbs/c1fXFrpj2sr43mx7fWQkhwpxZGyOFI2RkodHCnGkTI4UiZHinOkcNy2OG5bHLctjtsWx20Xx20Xx20Xx20Xx20Xx20Xx20Xx20Xx20Xx20Xx203x203x203x203x203x203x203x203x203x203xm3ngXHbeWDcdh4Yt50Hxm3ngXHbeWDcdh4Yt50Hxm3ngXHbeXDc1jhuaxy3NY7bGsdtjeO2xnFb47itcdzWOG5rHLcdHLcdHLcdHLcdHLcdHLcdHLcdHLcdHLcdHLcdHLedHLedHLedHLedHLedHLedHLedHLedHLedHLedHLd1jts6x22d47bOcVvnuK1z3NY5busct3WO2zrHbYPjtsFx2+C4bXDcNjhuGxy3DY7bBsdtg+O2wXHb5Lhtctw2OW6bHLdNjttyWLLJYckmhyWbHJZscliyyWHJJoclmxyWbHJYsslhySaHJZsclmxyWLLJYckmhyWbHJZscliyyWHJJoclmxyWbHJYsslhySaHJZsclmxyWLLJYckmhyWbHJZscliyyWHJJoclmxyWbHJYsslhySaHJXMOS+Yclsw5LJlzWDI/MG7rHJbMOSyZ96FKy+x57RyvpBhHStdjO9zz67XnH+uVlOBISY6U4khZHCltXxJs7fG4+Pyzv936sK9i+rCcHxFjbYe0Ht4ywu0fDkm7+qvw8VmFT6RwM6vj+bCM6a+k++eVHp9XuuCjX1eo/xV5n4e8wuQVQ14x5RU/9YSePz56XHr+zOTtP5db+bh93Hv7vPf2de/t172337fe/ueAAj+/eH299PzjenF7u/f2497bz3tv7/fePu69faoupfTdv66Q3wEuvwNCfgeE/A4I+R0Q8jtAKSB/XRHyCvnMQz7zkM885DNP+cxTPvOUzzzlM0/5zFM+85TPPOUzT/nMUz7zks+85DMv+cxLPvOSz7zkMy/5zEs+85LPvOQzX/KZL/nMl3zmSz7zJZ/5ks98yWe+5DNf8pkv+cy3fOZbPvMtn/mWz3zLZ77lM9/ymW/5zLd85ls98zgOeYXJK4a8YsorXF4R8oqUV5S8Yskr5DM3+cxNPnOTz9zkMzf5zE0+c5PP3OQzN/nMTT7zIZ/5kM98yGc+5DMf8pkP+cyHfOZDPnM5ow05ow05ow05ow05ow05o40pn/mUz3zKZz7lM5/ymcu/3TXk3+4a8m93Dfm3u4b8211D/u2u4fKZyzlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyDlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyjlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTlcyTncknO4JedwS87hlpzDLTmHW3IOt+Qcbsk53JJzuCXncEvO4Zacwy05h1tyDrfkHG7JOdySc7gl53BLzuGWnMMtOYdbcg635BxuyTncknO4JedwS87hlpzDLTmHW3IOt+Qcbsk53JJzuCXncEvO4Zacwy05h1tyDrfkHG7JOdySc7gl53BLzuGWnMMtOYdbcg635BxuyTncknO4JedwS87hlpzDLTmHW3IOt+Qcbsk53JJzuCXncEvO4Zacwy05h1tyDrfkHG7JOdySc7gl53BLzuGWnMMtOYdbcg635BxuyTncknO4JedwS87hlpzDLTmHW3IOt+Qcbsk53JJzuCXncEvO4Zacwy05h1tyDrfkHG7JOdySc7gl53BLzuGWnMMtOYdbcg635BxuyTncknO4JedwS87hlpzDbTmH23IOt+Ucbss53JZzuC3ncFvO4bacw205h9tyDrflHG7LOdyWc7gt53BbzuG2nMNtOYfbcg635RxuyznclnO4LedwW87htpzDbTmH23IOt+Ucbss53JZzuC3ncFvO4bacw205h9tyDrflHG7LOdyWc7gt53BbzuG2nMNtOYfbcg635RxuyznclnO4LedwW87htpzDbTmH23IOt+Ucbss53JZzuC3ncFvO4bacw205h9tyDrflHG7LOdyWc7gt53BbzuG2nMNtOYfbcg635RxuyznclnO4LedwW87htpzDbTmH23IOt+Ucbss53JZzuC3ncFvO4bacw205h9tyDrflHG7LOdyWc7gt53BbzuG2nMNtOYfbcg635RxuyznclnO4LedwW87htpzDbTmH23IOt+Ucbss5nB1yEHcuMX3J0JdMfYnrS0JfkvqS0pcsfYl++qafvumnb/rpm376pp++6adv+umbfvqmn77ppz/00x/66Q/99Id++kM//aGf/tBPf+inP/TTH/rpT/30p376Uz/9qZ/+1E9/6qc/9dOf+ulP/fSnfvqun77rp+/66bt++q6fvuun7/rpu376rp++66cf+umHfvqhn37opx/6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ZfazZfazZfarZfarZfarZfarZfarZfarZfarZfarZfarZfarZfZXy+yvltlfLbO/WmZ/tcz+apn91TL7q2X2V8vsr5bZ3y2zv1tmf7fM/m6Z/d0y+7tl9nfL7O+W2d8ts787Zj+Oo2UXa9lltOwyW3bxll2iZZds2aVadlktu7TMvrXMvrXMvrXMvrXMvrXMvrXMvrXMvrXMvrXMvrXM/miZ/dEy+6Nl9kfL7I+W2R8ts9/S64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+09PqipdcXLb2+aOn1RUuvL1p6fdHS64uWXl+29PqypdeXLb2+bOn15eEtu0TLLtmyS7Xsslp2aZn9ll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6sqXXly29vmzp9WVLry9ben3Z0uvLll5ftvT6qqXXVy29vmrp9VVLr68Ob9klWnbJll2qZZfVskvL7Lf0+qql11ctvb5q6fVVS6+vWnp91dLrq5ZeX7X0+qql11ctvb5q6fVVS6+vWnp91dLrq5ZeX7X0+qql11ctvb5q6fVVS6+vWnp91dLrq5ZeX7X0+qql11ctvb5q6fVVS6+vWnp91dLrq5Ze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0uvzll6ft/T6vKXX5y29Pm/p9XlLr89ben3e0uvzll6ft/T6vKXX5y29Pm/p9XlLr89ben3e0uvzll6ft/T6vKXX5y29Pm/p9XlLr89ben3e0uvzll6ft/T6vKXX5y29Pm/p9XlLr89ben3e0uvzll6ft/T6vKXX5y29vmjp9UVLry9aen3R0uuLw1t2iZZdsmWXatlltezSMvstvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVFS68vWnp90dLri5ZeX7T0+qKl1xctvb5o6fVlS68vW3p92dLry5ZeXx7esku07JItu1TLLqtll5bZb+n1ZUuvL1t6fdnS68uWXl+29PqypdeXLb2+bOn1ZUuvL1t6fdnS68uWXl+29PqypdeXLb2+bOn1ZUuvL1t6fdnS68uWXl+29PqypdeXLb2+bOn1ZUuvL1t6ffmNXp/l8dxlHd/Z5ct/xezr1V/+szbPq30+d1ktu+yP3qVe7PKNXt9H72IfscvK5y47X+0yWnaZH7BLjP3YJeZ6tYt/yC7ruYu/3CU+Ypd8+yx7vNolP2CX89+Nj13OL3ivdqmWXT5i9s+7PHeJl+eyO3aJo2WXb8z+fu4yjvqe88967GJzx/Nqi1dXz7DHvWeMeKVp9Gs6vqfppa88Fn3vHM6n9euV5wv9ee3bzf3Om8edN887b1533nzdefN9481fl/4+6uZ2583HnTe/c0LzzgnNOyc075zQvHNC884JzTsntO6c0LpzQuvOCa07J7TunNC6c0LrzgmtOye07pzQunNC150Tuu6c0CVM6GPJ1Je4viT0JakvKX3J0pdseck+9CWmL9FPf+unv3/KS88w4xEEnn98e4Qrn/ePm++fN9+/br7/uvn++9b713HcfH+7+f7j5vvPm+/vN9//1vkNXz+l3+KReNqy57UrX1268pkSrdzPi22vp5YAaUmQlgJpWSAtu0vLPupx7Z7zlZZ9gLQYSMsAaZkgLQ7SEiAtCdJSIC1tvrvjeGp591Ov91o2RkscXf4yjvH4iej5x/FSywRpcZCWAGlJkJYCaVkgLZujxQ6QFgNpAfmugXzXQL5rIN81kO8ayHcN5LsG8t0B8t0B8t0B8t0B8t0B8t0B8t0B8t0B8t0B8t0B8t0J8t0J8t0J8t0J8t0J8t0J8t0J8t0J8t0J8t0J8l0H+a6DfNdBvusg33WQ7zrIdx3kuw7yXQf5roN8N0C+GyDfDZDvBsh3A+S7AfLdAPlugHw3QL4bIN9NkO8myHcT5LsJ8t0E+W6CfDdBvpsg302Q7ybIdwvkuwXy3QL5boF8t0C+WyDfLZDvFsh3C+S7BfLdBfLdBfLdBfLdBfLdBfLdBfLdBfLdBfLdBfLdBfLdDfLdDfLdDfLdDfLdDfLdDfLdDfLdDfLdDfLdzfHdPDi+mwfHdxPEqyWIV/vGr3X5J2nh+G6CeLUE8WoJ4tUSxKsliFdLEK+WIF4tQbxagni1BPFqCeLVEsSrJYhXSxCvliBeLUG8WoJ4tQTxagni1RLEqyWIV0sQr5YgXi1BvFqCeLUE8WoJ4tUSxKsliFdLEK+WIF4tQbxagni1BPFqCeLVEsSrJYhXSxCvlo0sVNVTy94vtSyOlj7mZ8Tjd9Odf8yXWgZIywRpcZCWAGlp+2912tqP39Tw5c9vv/FyHPZUUyg1bR4z/ekxfvg/nNMr7VbHU/u59uW57s+rvY8rukG7fWLt4xNrnwDtDy0B0pIgLQXSQvD2hxaCV3/VUgTvfWhp81L3fGrxeqllgLRMkBYHaQmQlgRpKZCWBdKyOVr62KIf0ALy3QXy3QXy3QXy3QXy3QXy3QXy3QXy3QXy3Q3y3Q3y3Q3y3Q3y3Q3y3Q3y3Q3y3Q3y3Q3y3c3x3To4vlsHx3fr4PhuHRzf/cnf0frBWji+WwfHd+vg+G4dHN+tA+S7fQyNzce1wzJeapkgLQ7SEiAtCdJSIC0LpGVztPQxND+gxf4pWvZLLQOkZYK0OEhLn+9uf2gZ9vI93cfQ/ICWzdHSx4r8gBYDaRkgLROkpc1fRh5PLZUvtQRIS4K0FEhL2/e673Zzq48V+b6WPlbkB7Rw+vblnL59OadvX32/2+gHtHD69tX3u41+QEuBtIB810G+GyDfBXFOBeKcCsQ5FYhzKhDnVAHy3QD5boB8N0C+myDfTZDvJsh3E+S7CfLdBPlugnw3Qb6bIN9NkO8WyHcL5LsF8roCeV2BvK5AXlcgr3vNtox88H/zPf535HOZXVs2ri2b15b5tWVxadnrhrjFePwYxCLfFuZ4rhsX1738HyXHo2WUuV7K9GvL4tqyvLasxGXn//d///Sf//qn//lv//KXc8X5//71//3Hf/3x7/8f" }, { "name": "compute_note_hash_and_nullifier", "function_type": "Unconstrained", "is_internal": false, "abi": { "parameters": [{ "name": "contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] }, "visibility": "private" }, { "name": "nonce", "type": { "kind": "field" }, "visibility": "private" }, { "name": "storage_slot", "type": { "kind": "field" }, "visibility": "private" }, { "name": "note_type_id", "type": { "kind": "field" }, "visibility": "private" }, { "name": "serialized_note", "type": { "kind": "array", "length": 20, "type": { "kind": "field" } }, "visibility": "private" }], "param_witnesses": { "contract_address": [{ "start": 0, "end": 1 }], "nonce": [{ "start": 1, "end": 2 }], "note_type_id": [{ "start": 3, "end": 4 }], "serialized_note": [{ "start": 4, "end": 24 }], "storage_slot": [{ "start": 2, "end": 3 }] }, "return_type": { "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } }, "visibility": "public" }, "return_witnesses": [24, 25, 26, 27] }, "bytecode": "H4sIAAAAAAAA/+2YS1KEQAyG09C8wefooLPhCFCycOldvP8VLIl25AedlelFqiZVXfQDOl9CV0g4EZGjb0mXltFvkfW3cB3/J5PiXmNMTmeEMzHCmSpyMtuB4p5TH8Gv2oyZAcbcAGNhgLE0wFgZYKwNMDYGGFsDjJ0BxisDjNcGGG8MMN4aYLwzwHhvgPFggPHBAOOjAcajIqMDRh/6/dKelva8tNPSXsJ8SasMWgzz9M45uyjvaSucmyQy8OtcKtwwJ/wJzMk/htSvNuTqNowz71to7xtqhR787/X9/1qCnxTZY/nk68zKWczD3qInA19Voa/4b2VC3S60CnRSeEfSP9IqFfTlTAt3S+u5rM4843fPdLCe/2H3oGx3ASwDjEVfFuxg4fyo91tuZqv12eaGtrGJxe3GA/TryL6KZOfI+zZhrw/S/U614J9y56cO1hu4p43gOwd6ZW8ZI+OF98KLDPWOtYH1CuaSnS2YS+D9+/ihapAoxGTHBThe44DJwZSDekFroKrBMH4JXMxzsczBlos9Lqa4WOFigJNtTmbxA3QuwfuRT4hpJ8qiGQAA", "debug_symbols": "q1bKyU9OLMnMzytWsqqu1VEqSyzKTEzKSYVySyoLIMxaAA==" }, { "name": "constructor", "function_type": "Secret", "is_internal": false, "abi": { "parameters": [{ "name": "inputs", "type": { "kind": "struct", "path": "authwit::aztec::context::inputs::private_context_inputs::PrivateContextInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "historical_header", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "private_global_variables", "type": { "kind": "struct", "path": "authwit::aztec::context::globals::private_global_variables::PrivateGlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] }, "visibility": "private" }], "param_witnesses": { "inputs": [{ "start": 0, "end": 41 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "min_revertible_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "note_hash_read_requests", "type": { "kind": "array", "length": 32, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_read_requests", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::abis::read_request::ReadRequest", "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": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }] } } }, { "name": "new_note_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "struct", "path": "authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message", "fields": [{ "name": "recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "content", "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": "authwit::aztec::protocol_types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "content_commitment", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::content_commitment::ContentCommitment", "fields": [{ "name": "tx_tree_height", "type": { "kind": "field" } }, { "name": "txs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "in_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "out_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }] } }, { "name": "state", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::contrakt::contract_deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "authwit::aztec::protocol_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": "authwit::aztec::protocol_types::contract_class_id::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "authwit::aztec::protocol_types::address::eth_address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] }, "visibility": "public" }, "return_witnesses": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262] }, "bytecode": "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", "debug_symbols": "1dLBCsMgDAbgd8nZQ+LUbr7K2CHbHAhiS5XBEN99lnXtoX2BnpIfPsJ/SIHQPzj7PiawBYjAXgukgeMUU+Yxg0UBLj7brAJePjiwsmv7xmk0Zqaa0Cz6TDuYEOWMCSUtmPTeaXX5Yy271SpVbwJIHrL16XitW3rz6Pke3PQvLebP8FvrFw==" }], "events": [], "file_map": { "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 len: u64,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: u64) -> T {\n assert(index as u64 < self.len);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: u64) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen as u64, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> u64 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u64 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len 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] = vec.get_unchecked(i);\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] = crate::unsafe::zeroed();\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n", "path": "std/collections/bounded_vec.nr" }, "20": { "source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\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" }, "30": { "source": "mod poseidon;\nmod mimc;\nmod poseidon2;\nmod pedersen;\n\nuse crate::default::Default;\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: [Field; N], _state_length: u32) -> [Field; N] {}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\ntrait Hash{\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: [Field]);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\n// TODO: add implementations for the remainder of primitive types.\nimpl Hash for Field{\n fn hash<H>(self, state: &mut H) where H: Hasher{\n let input: [Field] = [self];\n H::write(state, input);\n }\n}\n", "path": "std/hash.nr" }, "32": { "source": "// Regular merkle tree means a append-only merkle tree (Explain why this is the only way to have privacy and alternatives if you don't want it)\n// Currently we assume that it is a binary tree, so depth k implies a width of 2^k\n// XXX: In the future we can add an arity parameter\n// Returns the merkle root of the tree from the provided leaf, its hashpath, using a pedersen hash function.\npub fn compute_merkle_root<N>(leaf: Field, index: Field, hash_path: [Field; N]) -> Field {\n let n = hash_path.len();\n let index_bits = index.to_le_bits(n as u32);\n let mut current = leaf;\n for i in 0..n {\n let path_bit = index_bits[i] as bool;\n let (hash_left, hash_right) = if path_bit {\n (hash_path[i], current)\n } else {\n (current, hash_path[i])\n };\n current = crate::hash::pedersen_hash([hash_left, hash_right]);\n }\n current\n}\n", "path": "std/merkle.nr" }, "34": { "source": "struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<N, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n", "path": "std/option.nr" }, "43": { "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 { lo: lo as Field, hi: hi as Field }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo, hi)\n }\n\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 { lo, hi }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1;\n if N <= 18 {\n for i in 0..N - 2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N - 1 {\n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n } as Field\n }\n\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if self < b {\n (U128::from_u64s_le(0, 0), self)\n } else {\n //TODO check if this can overflow?\n let (q,r) = self.unconstrained_div(b * U128::from_u64s_le(2, 0));\n let q_mul_2 = q * U128::from_u64s_le(2, 0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::from_u64s_le(1, 0), r - b)\n }\n }\n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f - lo) / pow64;\n U128 { lo, hi }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo + self.hi * pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo * b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo + self.hi) * (b.lo + b.hi) - low + carry\n } else {\n self.lo * b.hi + self.hi * b.lo + carry\n };\n let hi = high as u64 as Field;\n U128 { lo, hi }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with underflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl 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" }, "59": { "source": "use crate::context::{PrivateContext, PublicContext, Context};\nuse dep::protocol_types::{hash::pedersen_hash, traits::{ToField}};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T> Storage<T> for Map<K, T> {}\n\nimpl<K, V> Map<K, V> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = pedersen_hash([self.storage_slot, key.to_field()], 0);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr" }, "62": { "source": "use crate::context::{Context};\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T> Storage<T> for PublicMutable<T> {}\n\nimpl<T> PublicMutable<T> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n\n // docs:start:public_mutable_struct_read\n pub fn read<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n assert(self.context.private.is_none(), \"PublicMutable reads only supported in public functions\");\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write<T_SERIALIZED_LEN>(self, value: T) where T: Serialize<T_SERIALIZED_LEN> {\n assert(self.context.private.is_none(), \"PublicMutable writes only supported in public functions\");\n let fields = T::serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_mutable_struct_write\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr" }, "67": { "source": "use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{L1_TO_L2_MESSAGE_LENGTH, GENERATOR_INDEX__NULLIFIER, GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET},\n hash::{pedersen_hash, sha256_to_field}\n};\n\n// TODO(#4833) remove `deadline` and `fee` from the message\n// currently hardcoded to max_value and 0 respectively.\nstruct L1ToL2Message {\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret: Field,\n secret_hash: Field,\n deadline: u32,\n fee: u64,\n tree_index: Field\n}\n\nimpl L1ToL2Message {\n pub fn new(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret: Field\n ) -> L1ToL2Message {\n let secret_hash = pedersen_hash([secret], GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET);\n Self {\n sender,\n chain_id,\n recipient,\n version,\n content,\n secret,\n secret_hash,\n deadline: 4294967295,\n fee: 0,\n tree_index: 0\n }\n }\n\n pub fn deserialize(\n fields: [Field; L1_TO_L2_MESSAGE_LENGTH],\n secret: Field,\n tree_index: Field\n ) -> L1ToL2Message {\n L1ToL2Message {\n sender: EthAddress::from_field(fields[0]),\n chain_id: fields[1],\n recipient: AztecAddress::from_field(fields[2]),\n version: fields[3],\n content: fields[4],\n secret,\n secret_hash: fields[5],\n deadline: fields[6] as u32,\n fee: fields[7] as u64,\n tree_index\n }\n }\n\n fn hash(self: Self) -> Field {\n let mut hash_bytes: [u8; 256] = [0; 256];\n let sender_bytes = self.sender.to_field().to_be_bytes(32);\n let chain_id_bytes = self.chain_id.to_be_bytes(32);\n let recipient_bytes = self.recipient.to_field().to_be_bytes(32);\n let version_bytes = self.version.to_be_bytes(32);\n let content_bytes = self.content.to_be_bytes(32);\n let secret_hash_bytes = self.secret_hash.to_be_bytes(32);\n let deadline_bytes = (self.deadline as Field).to_be_bytes(32);\n let fee_bytes = (self.fee as Field).to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = deadline_bytes[i];\n hash_bytes[i + 224] = fee_bytes[i];\n }\n\n let message_hash = sha256_to_field(hash_bytes);\n message_hash\n }\n\n // The nullifier of a l1 to l2 message is the hash of the message salted with the secret and tree index\n // docs:start:l1_to_l2_message_compute_nullifier\n pub fn compute_nullifier(self: Self) -> Field {\n let message_hash = self.hash();\n pedersen_hash(\n [message_hash, self.secret, self.tree_index],\n GENERATOR_INDEX__NULLIFIER\n )\n }\n // docs:end:l1_to_l2_message_compute_nullifier\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/messaging/l1_to_l2_message.nr" }, "76": { "source": "use crate::{\n context::{inputs::PublicContextInputs, interface::ContextInterface},\n messaging::process_l1_to_l2_message, oracle::{arguments, public_call::call_public_function_internal}\n};\nuse dep::protocol_types::{\n abis::{\n global_variables::GlobalVariables, function_selector::FunctionSelector,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n hash::hash_args, header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader\n};\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_note_hashes: BoundedVec<SideEffect, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hash: BoundedVec<Field, NUM_FIELDS_PER_SHA256>,\n unencrypted_logs_preimages_length: Field,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n prover_address: AztecAddress,\n}\n\nimpl ContextInterface for PublicContext {\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.public_global_variables.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect { value: note_hash, counter: self.side_effect_counter };\n self.new_note_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.side_effect_counter\n };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n let empty_storage_read = StorageRead::empty();\n let empty_storage_update = StorageUpdateRequest::empty();\n PublicContext {\n inputs,\n side_effect_counter: inputs.call_context.start_side_effect_counter,\n args_hash,\n return_values: BoundedVec::new(),\n contract_storage_update_requests: BoundedVec::new(),\n contract_storage_reads: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n unencrypted_logs_hash: BoundedVec::new(),\n unencrypted_logs_preimages_length: 0,\n historical_header: inputs.historical_header,\n prover_address: AztecAddress::zero() // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n }\n }\n\n pub fn is_deployment(self) -> bool {\n // TODO(#4738): Implement this\n false\n }\n\n pub fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n pub fn timestamp(self) -> Field {\n self.inputs.public_global_variables.timestamp\n }\n\n pub fn coinbase(self) -> EthAddress {\n self.inputs.public_global_variables.coinbase\n }\n\n pub fn fee_recipient(self) -> AztecAddress {\n self.inputs.public_global_variables.fee_recipient\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_log_preimages_length = 0;\n\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n return_values: self.return_values.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n unencrypted_logs_hash,\n unencrypted_log_preimages_length,\n historical_header: self.inputs.historical_header,\n prover_address: self.prover_address\n };\n pub_circuit_pub_inputs\n }\n\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n let message = L2ToL1Message { recipient, content };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n this,\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<ARGS_COUNT>(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n call_public_function_internal(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n _self: Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n call_public_function_internal(contract_address, function_selector, 0, false, true)\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/public_context.nr" }, "81": { "source": "use crate::{\n context::{inputs::PrivateContextInputs, interface::ContextInterface},\n key::nullifier_key::validate_nullifier_key_against_address, messaging::process_l1_to_l2_message,\n oracle::{\n arguments, call_private_function::call_private_function_internal,\n enqueue_public_function_call::enqueue_public_function_call_internal, context::get_portal_address,\n header::get_header_at, nullifier_key::{get_nullifier_key_pair, NullifierKeyPair},\n debug_log::debug_log\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_data::FunctionData, function_selector::FunctionSelector,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_call_stack_item::PrivateCallStackItem,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem,\n public_circuit_public_inputs::PublicCircuitPublicInputs, read_request::ReadRequest,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n grumpkin_private_key::GrumpkinPrivateKey, hash::hash_args, header::Header,\n messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::is_empty\n};\n\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n// use dep::std::collections::vec::Vec;\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n\n args_hash : Field,\n return_values : BoundedVec<Field, RETURN_VALUES_LENGTH>,\n\n note_hash_read_requests: BoundedVec<SideEffect, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_note_hashes: BoundedVec<SideEffect, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<SideEffectLinkedToNoteHash, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n new_l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec<Field>,\n // unencrypted_logs_preimages: Vec<Field>,\n\n nullifier_key: Option<NullifierKeyPair>,\n}\n\nimpl ContextInterface for PrivateContext {\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn this_portal_address(self) -> EthAddress {\n self.inputs.call_context.portal_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.private_global_variables.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.private_global_variables.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_header(self) -> Header {\n self.historical_header\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n let side_effect = SideEffect { value: note_hash, counter: self.side_effect_counter };\n self.new_note_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field) {\n let side_effect = SideEffectLinkedToNoteHash { value: nullifier, note_hash: nullified_commitment, counter: self.side_effect_counter };\n self.new_nullifiers.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n let side_effect_counter = inputs.call_context.start_side_effect_counter;\n let mut min_revertible_side_effect_counter = 0;\n if is_empty(inputs.call_context.msg_sender) {\n min_revertible_side_effect_counter = side_effect_counter;\n }\n PrivateContext {\n inputs,\n side_effect_counter,\n min_revertible_side_effect_counter,\n args_hash,\n return_values: BoundedVec::new(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_stack_hashes: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n // encrypted_logs_preimages: Vec::new(),\n // unencrypted_logs_preimages: Vec::new(),\n nullifier_key: Option::none()\n }\n }\n\n pub fn is_deployment(self) -> bool {\n // TODO(#4738): Implement this\n false\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n let encrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let unencrypted_logs_hash = [0; NUM_FIELDS_PER_SHA256];\n let encrypted_log_preimages_length = 0;\n let unencrypted_log_preimages_length = 0;\n\n let priv_circuit_pub_inputs = PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n return_values: self.return_values.storage,\n // TODO(fees): start this from 0 and test the following:\n // - in the private circuit init that it gets set correctly\n // - in the private circuit inner that it remains 0\n // I've had to initialize the counter here so that it would work for contract deployments\n // the above checks should be doable after we figure out fee payments for contract deployments\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n end_side_effect_counter: self.side_effect_counter,\n encrypted_logs_hash,\n unencrypted_logs_hash,\n encrypted_log_preimages_length,\n unencrypted_log_preimages_length,\n historical_header: self.historical_header,\n contract_deployment_data: self.inputs.contract_deployment_data,\n chain_id: self.inputs.private_global_variables.chain_id,\n version: self.inputs.private_global_variables.version\n };\n priv_circuit_pub_inputs\n }\n\n pub fn capture_min_revertible_side_effect_counter(&mut self) {\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = SideEffect { value: note_hash, counter: self.side_effect_counter };\n self.note_hash_read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.side_effect_counter };\n self.nullifier_read_requests.push(request);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_nullifier_secret_key(&mut self, account: AztecAddress) -> GrumpkinPrivateKey {\n let key_pair = if self.nullifier_key.is_none() {\n let key_pair = get_nullifier_key_pair(account);\n validate_nullifier_key_against_address(account, key_pair.public_key);\n let request = NullifierKeyValidationRequest { public_key: key_pair.public_key, secret_key: key_pair.secret_key };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(key_pair);\n key_pair\n } else {\n let key_pair = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(\n key_pair.account == account, \"Cannot query nullifier key for more than one account per call\"\n );\n key_pair\n };\n key_pair.secret_key\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn accumulate_encrypted_logs<N>(&mut self, log: [Field; N]) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn accumulate_unencrypted_logs<T>(&mut self, log: T) {\n let _void1 = self.inputs;\n let _void2 = log;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165)\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> [Field; RETURN_VALUES_LENGTH] {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> [Field; RETURN_VALUES_LENGTH] {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.end_side_effect_counter + 1;\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.private_call_stack_hashes.push(item.hash());\n\n item.public_inputs.return_values\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n return_values: [0; RETURN_VALUES_LENGTH],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [SideEffect::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n unencrypted_logs_hash: [0; NUM_FIELDS_PER_SHA256],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero()\n },\n is_execution_request: true\n };\n reader.finish();\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.start_side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n self.side_effect_counter = self.side_effect_counter + 1;\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n assert(item.public_inputs.call_context.is_contract_deployment == false);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.public_call_stack_hashes.push(item.hash());\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr" }, "85": { "source": "mod l1_to_l2_message;\n\nuse crate::oracle::get_l1_to_l2_membership_witness::get_l1_to_l2_membership_witness;\n\nuse dep::std::merkle::compute_merkle_root;\nuse crate::messaging::l1_to_l2_message::L1ToL2Message;\nuse dep::protocol_types::{constants::L1_TO_L2_MSG_TREE_HEIGHT, address::{AztecAddress, EthAddress}, utils::arr_copy_slice};\n\npub fn process_l1_to_l2_message(\n l1_to_l2_root: Field,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n chain_id: Field,\n version: Field,\n content: Field,\n secret: Field\n) -> Field {\n let msg = L1ToL2Message::new(\n portal_contract_address,\n chain_id,\n storage_contract_address,\n version,\n content,\n secret\n );\n let entry_key = msg.hash();\n\n let returned_message = get_l1_to_l2_membership_witness(entry_key);\n let leaf_index = returned_message[0];\n let sibling_path = arr_copy_slice(returned_message, [0; L1_TO_L2_MSG_TREE_HEIGHT], 1);\n\n // Check that the message is in the tree\n // This is implicitly checking that the values of the message are correct\n let root = compute_merkle_root(entry_key, leaf_index, sibling_path);\n assert(root == l1_to_l2_root, \"Message not in state\");\n\n msg.compute_nullifier()\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/messaging.nr" }, "86": { "source": "use dep::protocol_types::{hash::hash_args, traits::Hash};\n\nstruct Hasher {\n fields: [Field],\n}\n\nimpl Hash for Hasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl Hasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/hasher.nr" }, "100": { "source": "use dep::protocol_types::constants::L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH;\n\n// Checks if a msg is within the l1ToL2Msg tree\n#[oracle(getL1ToL2MembershipWitness)]\nfn get_l1_to_l2_membership_witness_oracle(_entry_key: Field) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {}\n\nunconstrained pub fn get_l1_to_l2_membership_witness(entry_key: Field) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {\n get_l1_to_l2_membership_witness_oracle(entry_key)\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr" }, "106": { "source": "use dep::protocol_types::traits::{Deserialize, Serialize};\n\n#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<N>(storage_slot: Field) -> [Field; N] {\n storage_read_oracle_wrapper(storage_slot)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr" }, "109": { "source": "mod globals;\nmod inputs;\n\nmod private_context;\nmod public_context;\nmod interface;\nmod avm;\n\nuse private_context::PrivateContext;\nuse interface::ContextInterface;\nuse public_context::PublicContext;\nuse avm::AVMContext;\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context { private: Option::some(context), public: Option::none() }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context { public: Option::some(context), private: Option::none() }\n }\n\n pub fn none() -> Context {\n Context { public: Option::none(), private: Option::none() }\n }\n}\n", "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context.nr" }, "144": { "source": "use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS},\n contract_class_id::ContractClassId, hash::pedersen_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n 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\n#[test]\nfn compute_address() {\n let point = GrumpkinPoint { x: 1, y: 2 };\n let contract_address_salt = 3;\n let contract_class_id = ContractClassId::from_field(4);\n let initialization_hash = 5;\n let portal_contract_address = EthAddress::from_field(6);\n\n let address = AztecAddress::compute_from_public_key(\n point,\n contract_class_id,\n contract_address_salt,\n initialization_hash,\n portal_contract_address\n );\n\n assert(address.to_field() == 0x2fd71a4f0742364f194dd16d0ae32d2f47845ddc7f5d328f37d4148b565c4123);\n}\n\n#[test]\nfn compute_address_from_partial_and_pubkey() {\n let point = GrumpkinPoint { x: 1, y: 2 };\n let partial_address = PartialAddress::from_field(3);\n\n let address = AztecAddress::compute(PublicKeysHash::compute(point), partial_address);\n assert(address.to_field() == 0x0447f893197175723deb223696e2e96dbba1e707ee8507766373558877e74197);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr" }, "147": { "source": "use crate::{\n constants::{CONTRACT_STORAGE_READ_LENGTH, GENERATOR_INDEX__PUBLIC_DATA_READ}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Empty, Serialize}\n};\n\nstruct StorageRead {\n storage_slot: Field,\n current_value: Field,\n}\n\nimpl Eq for StorageRead {\n fn eq(self, other: Self) -> bool {\n (self.storage_slot == other.storage_slot) & (self.current_value == other.current_value)\n }\n}\n\nimpl Empty for StorageRead { \n fn empty() -> Self {\n Self {\n storage_slot: 0,\n current_value: 0,\n }\n }\n}\n\nimpl Hash for StorageRead {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n}\n\nimpl Serialize<CONTRACT_STORAGE_READ_LENGTH> for StorageRead {\n fn serialize(self) -> [Field; CONTRACT_STORAGE_READ_LENGTH] {\n [self.storage_slot, self.current_value]\n }\n}\n\nimpl Deserialize<CONTRACT_STORAGE_READ_LENGTH> for StorageRead {\n fn deserialize(serialized: [Field; CONTRACT_STORAGE_READ_LENGTH]) -> Self {\n Self {\n storage_slot: serialized[0],\n current_value: serialized[1],\n }\n }\n}\n\nimpl StorageRead {\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contrakt/storage_read.nr" }, "150": { "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 u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\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\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr" }, "197": { "source": "use crate::traits::{Serialize, Deserialize};\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\nglobal U32_SERIALIZED_LEN: Field = 1;\nglobal U8_SERIALIZED_LEN: Field = 1;\nglobal FIELD_SERIALIZED_LEN: Field = 1;\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<1> for U128 {\n fn serialize(self) -> [Field; 1] {\n [self.to_integer()]\n }\n\n}\n\nimpl Deserialize<1> for U128 {\n fn deserialize(fields: [Field; 1]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr" }, "198": { "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::FunctionLeafPreimage;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::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 NUM_FIELDS_PER_SHA256, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__CONSTRUCTOR, GENERATOR_INDEX__PARTIAL_ADDRESS,\n GENERATOR_INDEX__CONTRACT_ADDRESS, GENERATOR_INDEX__NOTE_HASH_NONCE,\n GENERATOR_INDEX__UNIQUE_NOTE_HASH, GENERATOR_INDEX__FUNCTION_ARGS\n};\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\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() {\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() {\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 silo_note_hash(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\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 chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\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_note_hash_nonce(first_nullifier: Field, commitment_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_siloed_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn compute_unique_siloed_note_hashes<N>(\n first_nullifier: Field,\n siloed_note_hashes: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_note_hashes = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_note_hash = siloed_note_hashes[i];\n if siloed_note_hash.value != 0 {\n let nonce = compute_note_hash_nonce(first_nullifier, i);\n unique_siloed_note_hashes[i] = SideEffect {\n value: compute_unique_siloed_note_hash(nonce, siloed_note_hash.value),\n counter: siloed_note_hash.counter\n };\n }\n }\n unique_siloed_note_hashes\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\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n assert(result == 0x142a6d57007171f6eaa33d55976d9dbe739c889c8e920f115f7808dea184c718);\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = [0; 800];\n for i in 0..800 {\n input[i] = i as Field;\n }\n let hash = hash_args(input);\n assert(hash == 0x371960dd84ed3445ab099ac4c1af5ba90e0c713b593e0ca52ee532087c7f097);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0x2266ac2f9f0c19c015239ef5ea85862fc6fac00db73779b220a4d49c4856c2e1);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x0f24729168d4450a5681beafa5e3a899ac28bd17bf5a4877dab37bcd834e1634);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr" }, "201": { "source": "global ARGS_LENGTH: u64 = 16;\nglobal RETURN_VALUES_LENGTH: u64 = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_NOTE_HASHES_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as note hashes and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_NOTE_HASHES_PER_TX ≥ MAX_NEW_NOTE_HASHES_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_NOTE_HASHES_PER_CALL: u64 = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: u64 = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: u64 = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: u64 = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: u64 = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: u64 = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: u64 = 16;\nglobal MAX_NOTE_HASH_READ_REQUESTS_PER_CALL: u64 = 32;\nglobal MAX_NULLIFIER_READ_REQUESTS_PER_CALL: u64 = 2; // Change it to a larger value when there's a seperate reset circuit.\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL: u64 = 1;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_NOTE_HASHES_PER_TX: u64 = 64;\nglobal MAX_NON_REVERTIBLE_NOTE_HASHES_PER_TX: u64 = 8;\nglobal MAX_REVERTIBLE_NOTE_HASHES_PER_TX: u64 = 56;\n\nglobal MAX_NEW_NULLIFIERS_PER_TX: u64 = 64;\nglobal MAX_NON_REVERTIBLE_NULLIFIERS_PER_TX: u64 = 8;\nglobal MAX_REVERTIBLE_NULLIFIERS_PER_TX: u64 = 56;\n\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: u64 = 8;\n\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: u64 = 8;\nglobal MAX_NON_REVERTIBLE_PUBLIC_CALL_STACK_LENGTH_PER_TX: u64 = 3;\nglobal MAX_REVERTIBLE_PUBLIC_CALL_STACK_LENGTH_PER_TX: u64 = 5;\n\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: u64 = 32;\nglobal MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: u64 = 16;\nglobal MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: u64 = 16;\n\nglobal MAX_PUBLIC_DATA_READS_PER_TX: u64 = 32;\nglobal MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX: u64 = 16;\nglobal MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX: u64 = 16;\n\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: u64 = 2;\nglobal MAX_NEW_CONTRACTS_PER_TX: u64 = 1;\nglobal MAX_NOTE_HASH_READ_REQUESTS_PER_TX: u64 = 128;\nglobal MAX_NULLIFIER_READ_REQUESTS_PER_TX: u64 = 8; // Change it to a larger value when there's a seperate reset circuit.\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX: u64 = 4;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: u64 = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: u64 = 1;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: u64 = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: u64 = 3;\nglobal FUNCTION_TREE_HEIGHT: u64 = 5;\nglobal CONTRACT_TREE_HEIGHT: u64 = 16;\nglobal NOTE_HASH_TREE_HEIGHT: u64 = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: u64 = 40;\nglobal NULLIFIER_TREE_HEIGHT: u64 = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: u64 = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: u64 = 8;\nglobal ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: u64 = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: u64 = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: u64 = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: u64 = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: u64 = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: u64 = 5;\nglobal ARCHIVE_HEIGHT: u64 = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: u64 = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: u64 = 35;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: u64 = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: u64 = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: u64 = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u64 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u64 = 32;\n// The following is used in immutable state variables to compute an initialization slot whose value is used to\n// determine whether a given variable has been initialized (by asserting that the value in the slot is 0).\n// The initialization slot is computed by adding the constant bellow to the variable's storage slot. This constant has\n// to be large enough so that it's ensured that it doesn't collide with storage slots of other variables.\nglobal INITIALIZATION_SLOT_SEPARATOR: Field = 1000_000_000;\nglobal INITIAL_L2_BLOCK_NUM: Field = 1;\n// 126976 = 31 * 4096;\nglobal BLOB_SIZE_IN_BYTES: Field = 126976;\n\n// CONTRACT CLASS CONSTANTS\nglobal MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS: u64 = 8000;\n// Bytecode size for private functions is per function, not for the entire contract.\n// Note that private functions bytecode includes a mix of acir and brillig.\nglobal MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS: u64 = 500;\n// Same for unconstrained functions: the size is per function.\nglobal MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS: u64 = 500;\n// Since we are not yet emitting selectors we'll use this magic value to identify events emitted by the ClassRegisterer.\n// This is just a stopgap until we implement proper selectors.\n// sha224sum 'struct ContractClassRegistered {contract_class_id: ContractClassId, version: Field, artifact_hash: Field, private_functions_root: Field, packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS] }'\nglobal REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8;\n// sha224sum 'struct ClassPrivateFunctionBroadcasted'\nglobal REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd;\n// sha224sum 'struct ClassUnconstrainedFunctionBroadcasted'\nglobal REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99;\n\n// CONTRACT INSTANCE CONSTANTS\n// sha224sum 'struct ContractInstanceDeployed'\nglobal DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631;\nglobal DEPLOYER_CONTRACT_ADDRESS = 0x0747a20ed0c86035e44ea5606f30de459f40b55c5e82012640aa554546af9044;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue below is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: u64 = 17;\nglobal MAX_NOTE_FIELDS_LENGTH: u64 = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: u64 = 23;\nglobal MAX_NOTES_PER_PAGE: u64 = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: u64 = 212;\n\n// LENGTH OF STRUCTS SERIALIZED TO FIELDS\nglobal AZTEC_ADDRESS_LENGTH = 1;\nglobal CALL_CONTEXT_LENGTH: u64 = 8;\nglobal CONTENT_COMMITMENT_LENGTH: u64 = 7;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: u64 = 6;\nglobal CONTRACT_INSTANCE_LENGTH: u64 = 6;\nglobal CONTRACT_STORAGE_READ_LENGTH: u64 = 2;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: u64 = 2;\nglobal ETH_ADDRESS_LENGTH = 1;\nglobal FUNCTION_DATA_LENGTH: u64 = 4;\nglobal FUNCTION_LEAF_PREIMAGE_LENGTH: u64 = 5;\nglobal GLOBAL_VARIABLES_LENGTH: u64 = 6;\nglobal HEADER_LENGTH: u64 = 25; // 2 for last_archive, 7 for content commitment, 10 for state reference, 6 for global vars\nglobal L1_TO_L2_MESSAGE_LENGTH: u64 = 8;\nglobal L2_TO_L1_MESSAGE_LENGTH: u64 = 2;\nglobal NEW_CONTRACT_DATA_LENGTH: u64 = 3;\nglobal NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4;\nglobal NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5;\nglobal PARTIAL_STATE_REFERENCE_LENGTH: u64 = 8;\nglobal PRIVATE_CALL_STACK_ITEM_LENGTH: u64 = 223;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we should change this\n// constant as well PRIVATE_CALL_STACK_ITEM_LENGTH\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 218;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: u64 = 194;\nglobal STATE_REFERENCE_LENGTH: u64 = 10; // 2 for snap + 8 for partial\nglobal TX_CONTEXT_DATA_LENGTH: u64 = 11;\nglobal TX_REQUEST_LENGTH: u64 = 17;\n\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: u64 = 674;\nglobal NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__NOTE_HASH = 1;\nglobal GENERATOR_INDEX__NOTE_HASH_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_NOTE_HASH = 3;\nglobal GENERATOR_INDEX__SILOED_NOTE_HASH = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\nglobal GENERATOR_INDEX__FEE_PAYLOAD = 30;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\nglobal GENERATOR_INDEX__AUTHWIT_INNER = 45;\nglobal GENERATOR_INDEX__AUTHWIT_OUTER = 46;\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr" }, "208": { "source": "// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: u64) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils.nr" }, "270": { "source": "mod lib;\n\ncontract GasToken {\n use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}};\n use dep::aztec::{hash::{compute_secret_hash}, state_vars::{PublicMutable, Map}};\n\n use crate::lib::{calculate_fee, get_bridge_gas_msg_hash};\n\n struct Storage {\n balances: Map<AztecAddress, PublicMutable<U128>>,\n }\n\n #[aztec(private)]\n fn constructor() {}\n\n #[aztec(public)]\n fn claim_public(to: AztecAddress, amount: Field, canceller: EthAddress, secret: Field) {\n let content_hash = get_bridge_gas_msg_hash(to, amount, canceller);\n\n // Consume message and emit nullifier\n context.consume_l1_to_l2_message(content_hash, secret, context.this_portal_address());\n\n let new_balance = storage.balances.at(to).read() + U128::from_integer(amount);\n storage.balances.at(to).write(new_balance);\n }\n\n // TODO(@just-mitch): remove this function before mainnet deployment\n // convenience function for testing\n // the true canonical gas token contract will not have this function\n #[aztec(public)]\n fn mint_public(to: AztecAddress, amount: Field) {\n let amount = U128::from_integer(amount);\n let new_balance = storage.balances.at(to).read().add(amount);\n\n storage.balances.at(to).write(new_balance);\n }\n\n #[aztec(public)]\n fn check_balance(fee_limit: Field) {\n let fee_limit = U128::from_integer(fee_limit);\n assert(storage.balances.at(context.msg_sender()).read() >= fee_limit, \"Balance too low\");\n }\n\n #[aztec(public)]\n fn pay_fee(fee_limit: Field) -> Field {\n let fee_limit_u128 = U128::from_integer(fee_limit);\n let fee = calculate_fee(context);\n assert(fee <= fee_limit_u128, \"Fee too high\");\n\n let sender_new_balance = storage.balances.at(context.msg_sender()).read() - fee;\n storage.balances.at(context.msg_sender()).write(sender_new_balance);\n\n let recipient_new_balance = storage.balances.at(context.fee_recipient()).read() + fee;\n storage.balances.at(context.fee_recipient()).write(recipient_new_balance);\n\n let rebate = fee_limit_u128 - fee;\n rebate.to_field()\n }\n\n // utility function for testing\n unconstrained fn balance_of_public(owner: AztecAddress) -> pub Field {\n storage.balances.at(owner).read().to_field()\n }\n}\n", "path": "/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr" }, "271": { "source": "use dep::aztec::prelude::{AztecAddress, EthAddress};\nuse dep::aztec::context::PublicContext;\nuse dep::aztec::protocol_types::hash::sha256_to_field;\n\npub fn calculate_fee(_context: PublicContext) -> U128 {\n U128::from_integer(1)\n}\n\npub fn get_bridge_gas_msg_hash(owner: AztecAddress, amount: Field, canceller: EthAddress) -> Field {\n let mut hash_bytes: [u8; 100] = [0; 100];\n let recipient_bytes = owner.to_field().to_be_bytes(32);\n let amount_bytes = amount.to_be_bytes(32);\n let canceller_bytes = canceller.to_field().to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i + 4] = recipient_bytes[i];\n hash_bytes[i + 36] = amount_bytes[i];\n hash_bytes[i + 68] = canceller_bytes[i];\n }\n\n // Function selector: 0xefc2aae6 keccak256('mint_public(bytes32,uint256,address)')\n hash_bytes[0] = 0xef;\n hash_bytes[1] = 0xc2;\n hash_bytes[2] = 0xaa;\n hash_bytes[3] = 0xe6;\n\n let content_hash = sha256_to_field(hash_bytes);\n content_hash\n}\n", "path": "/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/lib.nr" } } }