[INFO] cloning repository https://github.com/VegeBun-csj/Bellman-practice [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/VegeBun-csj/Bellman-practice" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FVegeBun-csj%2FBellman-practice", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FVegeBun-csj%2FBellman-practice'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 8328bdee187bcc605ddf5f283590f2a64c1a1c2d [INFO] checking VegeBun-csj/Bellman-practice/8328bdee187bcc605ddf5f283590f2a64c1a1c2d against master#ab869e094a907cc5d19b4080f22eccaf347f1f95 for pr-129604 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FVegeBun-csj%2FBellman-practice" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'... [INFO] [stderr] done. [INFO] [stderr] Updating files: 50% (1967/3901) Updating files: 51% (1990/3901) Updating files: 52% (2029/3901) Updating files: 53% (2068/3901) Updating files: 54% (2107/3901) Updating files: 55% (2146/3901) Updating files: 56% (2185/3901) Updating files: 57% (2224/3901) Updating files: 58% (2263/3901) Updating files: 59% (2302/3901) Updating files: 60% (2341/3901) Updating files: 61% (2380/3901) Updating files: 62% (2419/3901) Updating files: 63% (2458/3901) Updating files: 64% (2497/3901) Updating files: 65% (2536/3901) Updating files: 66% (2575/3901) Updating files: 67% (2614/3901) Updating files: 68% (2653/3901) Updating files: 69% (2692/3901) Updating files: 70% (2731/3901) Updating files: 71% (2770/3901) Updating files: 72% (2809/3901) Updating files: 72% (2836/3901) Updating files: 73% (2848/3901) Updating files: 74% (2887/3901) Updating files: 75% (2926/3901) Updating files: 76% (2965/3901) Updating files: 77% (3004/3901) Updating files: 78% (3043/3901) Updating files: 79% (3082/3901) Updating files: 80% (3121/3901) Updating files: 81% (3160/3901) Updating files: 82% (3199/3901) Updating files: 83% (3238/3901) Updating files: 84% (3277/3901) Updating files: 85% (3316/3901) Updating files: 86% (3355/3901) Updating files: 87% (3394/3901) Updating files: 88% (3433/3901) Updating files: 89% (3472/3901) Updating files: 90% (3511/3901) Updating files: 91% (3550/3901) Updating files: 92% (3589/3901) Updating files: 93% (3628/3901) Updating files: 94% (3667/3901) Updating files: 95% (3706/3901) Updating files: 96% (3745/3901) Updating files: 97% (3784/3901) Updating files: 98% (3823/3901) Updating files: 98% (3843/3901) Updating files: 99% (3862/3901) Updating files: 100% (3901/3901) Updating files: 100% (3901/3901), done. [INFO] validating manifest of git repo https://github.com/VegeBun-csj/Bellman-practice on toolchain ab869e094a907cc5d19b4080f22eccaf347f1f95 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ab869e094a907cc5d19b4080f22eccaf347f1f95" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/VegeBun-csj/Bellman-practice [INFO] finished tweaking git repo https://github.com/VegeBun-csj/Bellman-practice [INFO] tweaked toml for git repo https://github.com/VegeBun-csj/Bellman-practice written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/VegeBun-csj/Bellman-practice already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ab869e094a907cc5d19b4080f22eccaf347f1f95" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded wyz v0.5.0 [INFO] [stderr] Downloaded bls12_381 v0.7.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:923055f121b5182466d55868a8b05e67af8ba4a3a3f6bad814e953ca3cd3ac2a" "/opt/rustwide/cargo-home/bin/cargo" "+ab869e094a907cc5d19b4080f22eccaf347f1f95" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] dc01c170f67f9855914a6286262778691c72f66aaca6f605418a8356b7497b90 [INFO] running `Command { std: "docker" "start" "-a" "dc01c170f67f9855914a6286262778691c72f66aaca6f605418a8356b7497b90", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "dc01c170f67f9855914a6286262778691c72f66aaca6f605418a8356b7497b90", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dc01c170f67f9855914a6286262778691c72f66aaca6f605418a8356b7497b90", kill_on_drop: false }` [INFO] [stdout] dc01c170f67f9855914a6286262778691c72f66aaca6f605418a8356b7497b90 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:923055f121b5182466d55868a8b05e67af8ba4a3a3f6bad814e953ca3cd3ac2a" "/opt/rustwide/cargo-home/bin/cargo" "+ab869e094a907cc5d19b4080f22eccaf347f1f95" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5a01a9aaa6cbeab45a6e17d8b1b117538e2ed3784ff07f65f79663970481ba4c [INFO] running `Command { std: "docker" "start" "-a" "5a01a9aaa6cbeab45a6e17d8b1b117538e2ed3784ff07f65f79663970481ba4c", kill_on_drop: false }` [INFO] [stderr] Checking cfg-if v1.0.0 [INFO] [stderr] Compiling libc v0.2.131 [INFO] [stderr] Compiling autocfg v1.1.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.11 [INFO] [stderr] Compiling radium v0.7.0 [INFO] [stderr] Compiling proc-macro2 v1.0.43 [INFO] [stderr] Checking tap v1.0.1 [INFO] [stderr] Checking once_cell v1.13.0 [INFO] [stderr] Checking funty v2.0.0 [INFO] [stderr] Compiling quote v1.0.21 [INFO] [stderr] Compiling unicode-ident v1.0.3 [INFO] [stderr] Checking subtle v2.4.1 [INFO] [stderr] Checking scopeguard v1.1.0 [INFO] [stderr] Compiling rayon-core v1.9.3 [INFO] [stderr] Compiling syn v1.0.99 [INFO] [stderr] Checking byteorder v1.4.3 [INFO] [stderr] Compiling serde_derive v1.0.144 [INFO] [stderr] Compiling log v0.4.17 [INFO] [stderr] Checking wyz v0.5.0 [INFO] [stderr] Compiling serde v1.0.144 [INFO] [stderr] Checking either v1.7.0 [INFO] [stderr] Compiling serde_json v1.0.83 [INFO] [stderr] Checking constant_time_eq v0.1.5 [INFO] [stderr] Checking arrayvec v0.7.2 [INFO] [stderr] Checking arrayref v0.3.6 [INFO] [stderr] Checking ppv-lite86 v0.2.16 [INFO] [stderr] Compiling memoffset v0.6.5 [INFO] [stderr] Compiling crossbeam-epoch v0.9.10 [INFO] [stderr] Compiling rayon v1.5.3 [INFO] [stderr] Checking ryu v1.0.11 [INFO] [stderr] Checking blake2s_simd v1.0.0 [INFO] [stderr] Checking itoa v1.0.3 [INFO] [stderr] Checking crossbeam-channel v0.5.6 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Checking bit-vec v0.4.4 [INFO] [stderr] Checking bitvec v1.0.1 [INFO] [stderr] Checking crossbeam-deque v0.8.2 [INFO] [stderr] Checking getrandom v0.2.7 [INFO] [stderr] Checking num_cpus v1.13.1 [INFO] [stderr] Checking rand_core v0.6.3 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking ff v0.12.0 [INFO] [stderr] Checking group v0.12.0 [INFO] [stderr] Checking pairing v0.22.0 [INFO] [stderr] Checking bls12_381 v0.7.0 [INFO] [stderr] Checking bellman v0.13.1 [INFO] [stderr] Checking bellman-practice v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `PreparedVerifyingKey` and `VerifyingKey` [INFO] [stdout] --> src/main.rs:11:110 [INFO] [stdout] | [INFO] [stdout] 11 | ..._parameters, prepare_verifying_key, verify_proof, PreparedVerifyingKey, VerifyingKey}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `MillerLoopResult` and `MultiMillerLoop` [INFO] [stdout] --> src/main.rs:12:15 [INFO] [stdout] | [INFO] [stdout] 12 | use pairing::{MillerLoopResult, MultiMillerLoop}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ff::PrimeField` [INFO] [stdout] --> src/snark/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use ff::PrimeField; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Wnaf` [INFO] [stdout] --> src/snark/mod.rs:6:52 [INFO] [stdout] | [INFO] [stdout] 6 | use group::{prime::PrimeCurveAffine, Curve, Group, Wnaf, WnafGroup}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs` [INFO] [stdout] --> src/snark/mod.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fs; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/snark/mod.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Neg` [INFO] [stdout] --> src/snark/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::ops::Neg; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Choice`, `ConditionallySelectable`, `ConstantTimeEq`, and `CtOption` [INFO] [stdout] --> src/snark/mod.rs:12:14 [INFO] [stdout] | [INFO] [stdout] 12 | use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PreparedVerifyingKey` [INFO] [stdout] --> src/snark/mod.rs:15:46 [INFO] [stdout] | [INFO] [stdout] 15 | prepare_verifying_key, verify_proof, PreparedVerifyingKey, Proof, VerifyingKey, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `G2Prepared` and `Gt` [INFO] [stdout] --> src/snark/mod.rs:17:48 [INFO] [stdout] | [INFO] [stdout] 17 | use bls12_381::{Bls12, G1Affine, G2Affine, G2Prepared, Gt, Scalar}; [INFO] [stdout] | ^^^^^^^^^^ ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PreparedVerifyingKey` and `VerifyingKey` [INFO] [stdout] --> src/main.rs:11:110 [INFO] [stdout] | [INFO] [stdout] 11 | ..._parameters, prepare_verifying_key, verify_proof, PreparedVerifyingKey, VerifyingKey}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `MillerLoopResult` and `MultiMillerLoop` [INFO] [stdout] --> src/main.rs:12:15 [INFO] [stdout] | [INFO] [stdout] 12 | use pairing::{MillerLoopResult, MultiMillerLoop}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ff::PrimeField` [INFO] [stdout] --> src/snark/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use ff::PrimeField; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Wnaf` [INFO] [stdout] --> src/snark/mod.rs:6:52 [INFO] [stdout] | [INFO] [stdout] 6 | use group::{prime::PrimeCurveAffine, Curve, Group, Wnaf, WnafGroup}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs` [INFO] [stdout] --> src/snark/mod.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use std::fs; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/snark/mod.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Neg` [INFO] [stdout] --> src/snark/mod.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use std::ops::Neg; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Choice`, `ConditionallySelectable`, `ConstantTimeEq`, and `CtOption` [INFO] [stdout] --> src/snark/mod.rs:12:14 [INFO] [stdout] | [INFO] [stdout] 12 | use subtle::{Choice, ConditionallySelectable, ConstantTimeEq, CtOption}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PreparedVerifyingKey` [INFO] [stdout] --> src/snark/mod.rs:15:46 [INFO] [stdout] | [INFO] [stdout] 15 | prepare_verifying_key, verify_proof, PreparedVerifyingKey, Proof, VerifyingKey, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `G2Prepared` and `Gt` [INFO] [stdout] --> src/snark/mod.rs:17:48 [INFO] [stdout] | [INFO] [stdout] 17 | use bls12_381::{Bls12, G1Affine, G2Affine, G2Prepared, Gt, Scalar}; [INFO] [stdout] | ^^^^^^^^^^ ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `prime::PrimeCurveAffine` [INFO] [stdout] --> src/snark/mod.rs:6:13 [INFO] [stdout] | [INFO] [stdout] 6 | use group::{prime::PrimeCurveAffine, Curve, Group, Wnaf, WnafGroup}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vk_json` [INFO] [stdout] --> src/snark/mod.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let vk_json = r#" [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vk_json` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `proof_json` [INFO] [stdout] --> src/snark/mod.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | let proof_json = r#"{ [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proof_json` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `alpha1_array` [INFO] [stdout] --> src/snark/mod.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | let alpha1_array = [ [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_alpha1_array` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `prime::PrimeCurveAffine` [INFO] [stdout] --> src/snark/mod.rs:6:13 [INFO] [stdout] | [INFO] [stdout] 6 | use group::{prime::PrimeCurveAffine, Curve, Group, Wnaf, WnafGroup}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `circuit` [INFO] [stdout] --> src/snark/mod.rs:386:35 [INFO] [stdout] | [INFO] [stdout] 386 | pub fn random_parameters(circuit: C, mut rng: &mut R) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_circuit` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `vk_json` [INFO] [stdout] --> src/snark/mod.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let vk_json = r#" [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vk_json` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `proof_json` [INFO] [stdout] --> src/snark/mod.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | let proof_json = r#"{ [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proof_json` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `alpha1_array` [INFO] [stdout] --> src/snark/mod.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | let alpha1_array = [ [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_alpha1_array` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `circuit` [INFO] [stdout] --> src/snark/mod.rs:386:35 [INFO] [stdout] | [INFO] [stdout] 386 | pub fn random_parameters(circuit: C, mut rng: &mut R) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_circuit` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 15 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 15 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 12.45s [INFO] running `Command { std: "docker" "inspect" "5a01a9aaa6cbeab45a6e17d8b1b117538e2ed3784ff07f65f79663970481ba4c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5a01a9aaa6cbeab45a6e17d8b1b117538e2ed3784ff07f65f79663970481ba4c", kill_on_drop: false }` [INFO] [stdout] 5a01a9aaa6cbeab45a6e17d8b1b117538e2ed3784ff07f65f79663970481ba4c