[INFO] cloning repository https://github.com/kamioftea/advent-of-code-2020 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/kamioftea/advent-of-code-2020" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkamioftea%2Fadvent-of-code-2020", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkamioftea%2Fadvent-of-code-2020'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 7592646436f26bcea7531952b6f8db8af7633f13 [INFO] testing kamioftea/advent-of-code-2020 against master#a77da2d454e6caa227a85b16410b95f93495e7e0 for pr-91031 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkamioftea%2Fadvent-of-code-2020" "/workspace/builds/worker-6/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/kamioftea/advent-of-code-2020 on toolchain a77da2d454e6caa227a85b16410b95f93495e7e0 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/kamioftea/advent-of-code-2020 [INFO] finished tweaking git repo https://github.com/kamioftea/advent-of-code-2020 [INFO] tweaked toml for git repo https://github.com/kamioftea/advent-of-code-2020 written to /workspace/builds/worker-6/source/Cargo.toml [INFO] crate git repo https://github.com/kamioftea/advent-of-code-2020 already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/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:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] cee9cc01c2f4b2cc9d4c4fedbdd98c79d12281e86a71e181f5240a05fb42d865 [INFO] running `Command { std: "docker" "start" "-a" "cee9cc01c2f4b2cc9d4c4fedbdd98c79d12281e86a71e181f5240a05fb42d865", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "cee9cc01c2f4b2cc9d4c4fedbdd98c79d12281e86a71e181f5240a05fb42d865", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cee9cc01c2f4b2cc9d4c4fedbdd98c79d12281e86a71e181f5240a05fb42d865", kill_on_drop: false }` [INFO] [stdout] cee9cc01c2f4b2cc9d4c4fedbdd98c79d12281e86a71e181f5240a05fb42d865 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/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" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] be911174be33ef0a79751dcd534b6f32af6d7983511970cc6262c40d73ef8060 [INFO] running `Command { std: "docker" "start" "-a" "be911174be33ef0a79751dcd534b6f32af6d7983511970cc6262c40d73ef8060", kill_on_drop: false }` [INFO] [stderr] Compiling typenum v1.12.0 [INFO] [stderr] Compiling memchr v2.3.4 [INFO] [stderr] Compiling version_check v0.9.2 [INFO] [stderr] Compiling lazy_static v1.4.0 [INFO] [stderr] Compiling rand_core v0.5.1 [INFO] [stderr] Compiling regex-syntax v0.6.21 [INFO] [stderr] Compiling text_io v0.1.8 [INFO] [stderr] Compiling either v1.6.1 [INFO] [stderr] Compiling thread_local v1.0.1 [INFO] [stderr] Compiling rand_xoshiro v0.4.0 [INFO] [stderr] Compiling im v15.0.0 [INFO] [stderr] Compiling aho-corasick v0.7.15 [INFO] [stderr] Compiling bitmaps v2.1.0 [INFO] [stderr] Compiling regex v1.4.2 [INFO] [stderr] Compiling sized-chunks v0.6.2 [INFO] [stderr] Compiling advent-of-code-2020 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/day_11.rs:33:13 [INFO] [stdout] | [INFO] [stdout] 33 | format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_fmt_panics)]` on by default [INFO] [stdout] = note: this usage of assert!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: the assert!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stdout] help: remove the `format!(..)` macro call [INFO] [stdout] | [INFO] [stdout] 33 - format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stdout] 33 + "x = {} is out of bounds for Grid with row size {}", x, self.row_length [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/day_12.rs:129:25 [INFO] [stdout] | [INFO] [stdout] 129 | _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of panic!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: the panic!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stdout] help: remove the `format!(..)` macro call [INFO] [stdout] | [INFO] [stdout] 129 - _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stdout] 129 + _ => panic!("Invalid instruction {}", magnitude) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 2 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 13.31s [INFO] running `Command { std: "docker" "inspect" "be911174be33ef0a79751dcd534b6f32af6d7983511970cc6262c40d73ef8060", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "be911174be33ef0a79751dcd534b6f32af6d7983511970cc6262c40d73ef8060", kill_on_drop: false }` [INFO] [stdout] be911174be33ef0a79751dcd534b6f32af6d7983511970cc6262c40d73ef8060 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/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" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 18eab5890a837bb3b85cfbf0d9b8fe3c081992294b88162985f19fa5cf775159 [INFO] running `Command { std: "docker" "start" "-a" "18eab5890a837bb3b85cfbf0d9b8fe3c081992294b88162985f19fa5cf775159", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Compiling advent-of-code-2020 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/day_11.rs:33:13 [INFO] [stdout] | [INFO] [stdout] 33 | format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_fmt_panics)]` on by default [INFO] [stdout] = note: this usage of assert!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: the assert!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stdout] help: remove the `format!(..)` macro call [INFO] [stdout] | [INFO] [stdout] 33 - format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stdout] 33 + "x = {} is out of bounds for Grid with row size {}", x, self.row_length [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: panic message is not a string literal [INFO] [stdout] --> src/day_12.rs:129:25 [INFO] [stdout] | [INFO] [stdout] 129 | _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this usage of panic!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: the panic!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stdout] help: remove the `format!(..)` macro call [INFO] [stdout] | [INFO] [stdout] 129 - _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stdout] 129 + _ => panic!("Invalid instruction {}", magnitude) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 2 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 5.57s [INFO] running `Command { std: "docker" "inspect" "18eab5890a837bb3b85cfbf0d9b8fe3c081992294b88162985f19fa5cf775159", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "18eab5890a837bb3b85cfbf0d9b8fe3c081992294b88162985f19fa5cf775159", kill_on_drop: false }` [INFO] [stdout] 18eab5890a837bb3b85cfbf0d9b8fe3c081992294b88162985f19fa5cf775159 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6/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" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 909c20d629004b32a94f041fe56263a4095a3bfab577143a7e87a807f466cfb0 [INFO] running `Command { std: "docker" "start" "-a" "909c20d629004b32a94f041fe56263a4095a3bfab577143a7e87a807f466cfb0", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] warning: panic message is not a string literal [INFO] [stderr] --> src/day_11.rs:33:13 [INFO] [stderr] | [INFO] [stderr] 33 | format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(non_fmt_panics)]` on by default [INFO] [stderr] = note: this usage of assert!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stderr] = note: for more information, see [INFO] [stderr] = note: the assert!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stderr] help: remove the `format!(..)` macro call [INFO] [stderr] | [INFO] [stderr] 33 - format!("x = {} is out of bounds for Grid with row size {}", x, self.row_length) [INFO] [stderr] 33 + "x = {} is out of bounds for Grid with row size {}", x, self.row_length [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: panic message is not a string literal [INFO] [stderr] --> src/day_12.rs:129:25 [INFO] [stderr] | [INFO] [stderr] 129 | _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this usage of panic!() is deprecated; it will be a hard error in Rust 2021 [INFO] [stderr] = note: for more information, see [INFO] [stderr] = note: the panic!() macro supports formatting, so there's no need for the format!() macro here [INFO] [stderr] help: remove the `format!(..)` macro call [INFO] [stderr] | [INFO] [stderr] 129 - _ => panic!(format!("Invalid instruction {}", magnitude)) [INFO] [stderr] 129 + _ => panic!("Invalid instruction {}", magnitude) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `advent-of-code-2020` (bin "advent-of-code-2020" test) generated 2 warnings [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 0.21s [INFO] [stderr] Running unittests (/opt/rustwide/target/debug/deps/advent_of_code_2020-29907bb25b1dda5d) [INFO] [stdout] [INFO] [stdout] running 66 tests [INFO] [stdout] test day_10::tests::can_calculate_combinations ... ok [INFO] [stdout] test day_10::tests::can_calculate_jolts ... ok [INFO] [stdout] test day_10::tests::can_parse ... ok [INFO] [stdout] test day_11::tests::can_look_up_visible_seat ... ok [INFO] [stdout] test day_11::tests::can_lookup_surrounds ... ok [INFO] [stdout] test day_11::tests::can_count_stable_adjacent_occupation ... ok [INFO] [stdout] test day_11::tests::can_iterate_part_2 ... ok [INFO] [stdout] test day_11::tests::can_iterate_cell ... ok [INFO] [stdout] test day_11::tests::can_lookup_visible_seats ... ok [INFO] [stdout] test day_11::tests::can_iterate_grid ... ok [INFO] [stdout] test day_11::tests::can_count_stable_visible_occupation ... ok [INFO] [stdout] test day_11::tests::can_parse ... ok [INFO] [stdout] test day_11::tests::can_size_grid ... ok [INFO] [stdout] test day_12::tests::can_calc_distance ... ok [INFO] [stdout] test day_12::tests::can_navigate ... ok [INFO] [stdout] test day_12::tests::can_parse ... ok [INFO] [stdout] test day_12::tests::can_navigate_with_waypoint ... ok [INFO] [stdout] test day_13::tests::can_find_best_departure ... ok [INFO] [stdout] test day_12::tests::can_process_example ... ok [INFO] [stdout] test day_13::tests::can_find_next_departure ... ok [INFO] [stdout] test day_13::tests::can_find_sequential_departure ... ok [INFO] [stdout] test day_13::tests::can_parse ... ok [INFO] [stdout] test day_14::tests::can_explode_addresses ... ok [INFO] [stdout] test day_14::tests::can_run_program_v2 ... ok [INFO] [stdout] test day_15::tests::can_parse ... ok [INFO] [stdout] test day_14::tests::can_run_program_v1 ... ok [INFO] [stdout] test day_14::tests::can_parse ... ok [INFO] [stdout] test day_16::tests::can_map_ticket ... ok [INFO] [stdout] test day_16::tests::can_parse ... ok [INFO] [stdout] test day_16::tests::can_calculate_error_rate ... ok [INFO] [stdout] test day_17::tests::can_count_adjacent ... ok [INFO] [stdout] test day_16::tests::can_validate_positions ... ok [INFO] [stdout] test day_17::tests::can_parse ... ok [INFO] [stdout] test day_17::tests::can_toggle_cell ... ok [INFO] [stdout] test day_1::tests::can_find_sum ... ok [INFO] [stdout] test day_1::tests::can_find_triple_sum ... ok [INFO] [stdout] test day_1::tests::can_parse_file ... ok [INFO] [stdout] test day_2::tests::can_validate_official_toboggan ... ok [INFO] [stdout] test day_2::tests::can_parse_line ... ok [INFO] [stdout] test day_2::tests::can_validate_sled_rental ... ok [INFO] [stdout] test day_3::tests::can_count_trees ... ok [INFO] [stdout] test day_3::tests::can_parse_file ... ok [INFO] [stdout] test day_4::tests::can_parse_passports ... ok [INFO] [stdout] test day_5::tests::can_extract_column ... ok [INFO] [stdout] test day_5::tests::can_extract_row ... ok [INFO] [stdout] test day_5::tests::can_parse_seat_code ... ok [INFO] [stdout] test day_5::tests::can_find_seat ... ok [INFO] [stdout] test day_6::tests::can_parse_and_count_intersect_groups ... ok [INFO] [stdout] test day_6::tests::can_parse_and_count_union_groups ... ok [INFO] [stdout] test day_6::tests::can_parse_intersect_group ... ok [INFO] [stdout] test day_6::tests::can_parse_union_group ... ok [INFO] [stdout] test day_7::tests::can_build_direct_containers ... ok [INFO] [stdout] test day_7::tests::can_find_possible_containers ... ok [INFO] [stdout] test day_8::tests::can_find_finite_program ... ok [INFO] [stdout] test day_8::tests::can_run_finite_program ... ok [INFO] [stdout] test day_8::tests::can_run_infinite_program ... ok [INFO] [stdout] test day_9::tests::can_find_first_invalid ... ok [INFO] [stdout] test day_7::tests::can_parse_rule ... ok [INFO] [stdout] test day_8::tests::can_parse ... ok [INFO] [stdout] test day_7::tests::can_count_bag_contents ... ok [INFO] [stdout] test day_9::tests::can_find_weakness ... ok [INFO] [stdout] test day_7::tests::can_parse_rules ... ok [INFO] [stdout] test day_17::tests::can_iterate ... ok [INFO] [stdout] test day_4::tests::can_validate_passport_fields ... ok [INFO] [stdout] test day_17::tests::can_expand_to_4d ... ok [INFO] [stdout] test day_15::tests::can_play_memory_game ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 66 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 49.72s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "909c20d629004b32a94f041fe56263a4095a3bfab577143a7e87a807f466cfb0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "909c20d629004b32a94f041fe56263a4095a3bfab577143a7e87a807f466cfb0", kill_on_drop: false }` [INFO] [stdout] 909c20d629004b32a94f041fe56263a4095a3bfab577143a7e87a807f466cfb0