[INFO] cloning repository https://github.com/simontoft/r8080 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/simontoft/r8080" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsimontoft%2Fr8080", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsimontoft%2Fr8080'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 034243373cc6d04ca80c68cdb797f1f7540a7865 [INFO] checking simontoft/r8080 against try#353a0a223066e9f46a1d935f2271a26c3c5002bb for pr-75180 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsimontoft%2Fr8080" "/workspace/builds/worker-5/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/simontoft/r8080 on toolchain 353a0a223066e9f46a1d935f2271a26c3c5002bb [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+353a0a223066e9f46a1d935f2271a26c3c5002bb" "read-manifest" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/simontoft/r8080 [INFO] finished tweaking git repo https://github.com/simontoft/r8080 [INFO] tweaked toml for git repo https://github.com/simontoft/r8080 written to /workspace/builds/worker-5/source/Cargo.toml [INFO] crate git repo https://github.com/simontoft/r8080 already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+353a0a223066e9f46a1d935f2271a26c3c5002bb" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5/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" "rustops/crates-build-env@sha256:a636fd89d022f18117e1dc8fb37a0a009933cdbbe082814857f0e2024962d47c" "/opt/rustwide/cargo-home/bin/cargo" "+353a0a223066e9f46a1d935f2271a26c3c5002bb" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] e723a566fc2910fa884d5899a54bc6876954b05f43b56ac113ea1dc9e723b024 [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "e723a566fc2910fa884d5899a54bc6876954b05f43b56ac113ea1dc9e723b024", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e723a566fc2910fa884d5899a54bc6876954b05f43b56ac113ea1dc9e723b024", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e723a566fc2910fa884d5899a54bc6876954b05f43b56ac113ea1dc9e723b024", kill_on_drop: false }` [INFO] [stdout] e723a566fc2910fa884d5899a54bc6876954b05f43b56ac113ea1dc9e723b024 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5/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" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:a636fd89d022f18117e1dc8fb37a0a009933cdbbe082814857f0e2024962d47c" "/opt/rustwide/cargo-home/bin/cargo" "+353a0a223066e9f46a1d935f2271a26c3c5002bb" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 3618dcc064cd5f1ac17a9b0511a1da6b1b63f60bc2896e38f3facf47352a1d9f [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "3618dcc064cd5f1ac17a9b0511a1da6b1b63f60bc2896e38f3facf47352a1d9f", kill_on_drop: false }` [INFO] [stderr] Compiling pkg-config v0.3.9 [INFO] [stderr] Checking libc v0.2.32 [INFO] [stderr] Checking lazy_static v0.2.9 [INFO] [stderr] Checking text_io v0.1.7 [INFO] [stderr] Checking byteorder v1.1.0 [INFO] [stderr] Compiling minifb v0.10.3 [INFO] [stderr] Compiling x11-dl v2.14.0 [INFO] [stderr] Checking time v0.1.38 [INFO] [stderr] Checking r8080 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused `#[macro_use]` import [INFO] [stdout] --> src/main.rs:5:1 [INFO] [stdout] | [INFO] [stdout] 5 | #[macro_use] extern crate text_io; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression [INFO] [stdout] --> src/cpu.rs:411:22 [INFO] [stdout] | [INFO] [stdout] 411 | for x in (0..WIDTH) { [INFO] [stdout] | ^^^^^^^^^^ help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:427:26 [INFO] [stdout] | [INFO] [stdout] 427 | self.inp1 |= (1 << 5); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:432:26 [INFO] [stdout] | [INFO] [stdout] 432 | self.inp1 |= (1 << 6); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:437:26 [INFO] [stdout] | [INFO] [stdout] 437 | self.inp1 |= (1 << 0); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:442:26 [INFO] [stdout] | [INFO] [stdout] 442 | self.inp1 |= (1 << 2); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:447:26 [INFO] [stdout] | [INFO] [stdout] 447 | self.inp1 |= (1 << 4); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `util::*` [INFO] [stdout] --> src/instructions.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use util::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `#[macro_use]` import [INFO] [stdout] --> src/main.rs:5:1 [INFO] [stdout] | [INFO] [stdout] 5 | #[macro_use] extern crate text_io; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression [INFO] [stdout] --> src/cpu.rs:411:22 [INFO] [stdout] | [INFO] [stdout] 411 | for x in (0..WIDTH) { [INFO] [stdout] | ^^^^^^^^^^ help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:427:26 [INFO] [stdout] | [INFO] [stdout] 427 | self.inp1 |= (1 << 5); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:432:26 [INFO] [stdout] | [INFO] [stdout] 432 | self.inp1 |= (1 << 6); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:437:26 [INFO] [stdout] | [INFO] [stdout] 437 | self.inp1 |= (1 << 0); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:442:26 [INFO] [stdout] | [INFO] [stdout] 442 | self.inp1 |= (1 << 2); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around assigned value [INFO] [stdout] --> src/cpu.rs:447:26 [INFO] [stdout] | [INFO] [stdout] 447 | self.inp1 |= (1 << 4); [INFO] [stdout] | ^^^^^^^^ help: remove these parentheses [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `util::*` [INFO] [stdout] --> src/instructions.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use util::*; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/opcode.rs:274:13 [INFO] [stdout] | [INFO] [stdout] 274 | _ => unreachable!(), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/cpu.rs:395:14 [INFO] [stdout] | [INFO] [stdout] 395 | for (i, byte) in self.get_vram().iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> src/instructions.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn nop(state: &mut Cpu) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `lhs` [INFO] [stdout] --> src/instructions.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | let lhs = state.a as u16; [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `lhs` [INFO] [stdout] --> src/instructions.rs:696:9 [INFO] [stdout] | [INFO] [stdout] 696 | let lhs = state.a as u16; [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unreachable pattern [INFO] [stdout] --> src/opcode.rs:274:13 [INFO] [stdout] | [INFO] [stdout] 274 | _ => unreachable!(), [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unreachable_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `i` [INFO] [stdout] --> src/cpu.rs:395:14 [INFO] [stdout] | [INFO] [stdout] 395 | for (i, byte) in self.get_vram().iter().enumerate() { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_i` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> src/instructions.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn nop(state: &mut Cpu) { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `lhs` [INFO] [stdout] --> src/instructions.rs:667:9 [INFO] [stdout] | [INFO] [stdout] 667 | let lhs = state.a as u16; [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `lhs` [INFO] [stdout] --> src/instructions.rs:696:9 [INFO] [stdout] | [INFO] [stdout] 696 | let lhs = state.a as u16; [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_lhs` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_BC` [INFO] [stdout] --> src/cpu.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | const REG_BC: u8 = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_DE` [INFO] [stdout] --> src/cpu.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | const REG_DE: u8 = 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_AF` [INFO] [stdout] --> src/cpu.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | const REG_AF: u8 = 3; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_A` [INFO] [stdout] --> src/cpu.rs:17:1 [INFO] [stdout] | [INFO] [stdout] 17 | const REG_A: u8 = 7; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_M` [INFO] [stdout] --> src/cpu.rs:18:1 [INFO] [stdout] | [INFO] [stdout] 18 | const REG_M: u8 = 6; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `move_pc` [INFO] [stdout] --> src/cpu.rs:322:12 [INFO] [stdout] | [INFO] [stdout] 322 | pub fn move_pc(&mut self, address: u16) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_BC` [INFO] [stdout] --> src/instructions.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | const REG_BC: u8 = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_AF` [INFO] [stdout] --> src/instructions.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | const REG_AF: u8 = 3; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `test_rom` [INFO] [stdout] --> src/main.rs:24:4 [INFO] [stdout] | [INFO] [stdout] 24 | fn test_rom() { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `baloon_bomber` [INFO] [stdout] --> src/main.rs:46:4 [INFO] [stdout] | [INFO] [stdout] 46 | fn baloon_bomber() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `lunar_rescue` [INFO] [stdout] --> src/main.rs:62:4 [INFO] [stdout] | [INFO] [stdout] 62 | fn lunar_rescue() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 24 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_BC` [INFO] [stdout] --> src/cpu.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | const REG_BC: u8 = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_DE` [INFO] [stdout] --> src/cpu.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | const REG_DE: u8 = 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_AF` [INFO] [stdout] --> src/cpu.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | const REG_AF: u8 = 3; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_A` [INFO] [stdout] --> src/cpu.rs:17:1 [INFO] [stdout] | [INFO] [stdout] 17 | const REG_A: u8 = 7; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_M` [INFO] [stdout] --> src/cpu.rs:18:1 [INFO] [stdout] | [INFO] [stdout] 18 | const REG_M: u8 = 6; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `move_pc` [INFO] [stdout] --> src/cpu.rs:322:12 [INFO] [stdout] | [INFO] [stdout] 322 | pub fn move_pc(&mut self, address: u16) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_BC` [INFO] [stdout] --> src/instructions.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | const REG_BC: u8 = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `REG_AF` [INFO] [stdout] --> src/instructions.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | const REG_AF: u8 = 3; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `test_rom` [INFO] [stdout] --> src/main.rs:24:4 [INFO] [stdout] | [INFO] [stdout] 24 | fn test_rom() { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `baloon_bomber` [INFO] [stdout] --> src/main.rs:46:4 [INFO] [stdout] | [INFO] [stdout] 46 | fn baloon_bomber() { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `lunar_rescue` [INFO] [stdout] --> src/main.rs:62:4 [INFO] [stdout] | [INFO] [stdout] 62 | fn lunar_rescue() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 24 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 7.53s [INFO] running `Command { std: "docker" "inspect" "3618dcc064cd5f1ac17a9b0511a1da6b1b63f60bc2896e38f3facf47352a1d9f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3618dcc064cd5f1ac17a9b0511a1da6b1b63f60bc2896e38f3facf47352a1d9f", kill_on_drop: false }` [INFO] [stdout] 3618dcc064cd5f1ac17a9b0511a1da6b1b63f60bc2896e38f3facf47352a1d9f