[INFO] cloning repository https://github.com/wvupike2006/auto-connect-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/wvupike2006/auto-connect-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwvupike2006%2Fauto-connect-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwvupike2006%2Fauto-connect-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 9f19ecbf62038196e764fc9bc6fe4124682fb52e [INFO] checking wvupike2006/auto-connect-rs against try#a8425075041d4b9af9bf32e2a267dfb9db2cfffb for pr-100043-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwvupike2006%2Fauto-connect-rs" "/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/wvupike2006/auto-connect-rs on toolchain a8425075041d4b9af9bf32e2a267dfb9db2cfffb [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a8425075041d4b9af9bf32e2a267dfb9db2cfffb" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/wvupike2006/auto-connect-rs [INFO] finished tweaking git repo https://github.com/wvupike2006/auto-connect-rs [INFO] tweaked toml for git repo https://github.com/wvupike2006/auto-connect-rs written to /workspace/builds/worker-5/source/Cargo.toml [INFO] crate git repo https://github.com/wvupike2006/auto-connect-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a8425075041d4b9af9bf32e2a267dfb9db2cfffb" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [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" "ghcr.io/rust-lang/crates-build-env/linux@sha256:824c28ce115f6b999260af6986f3384c158e782489540e41c0b698ca1d9fd927" "/opt/rustwide/cargo-home/bin/cargo" "+a8425075041d4b9af9bf32e2a267dfb9db2cfffb" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 3a585a0f24bfb9318817fc64819711e7cf045c6ae0b9c35919f08c751ca7042a [INFO] running `Command { std: "docker" "start" "-a" "3a585a0f24bfb9318817fc64819711e7cf045c6ae0b9c35919f08c751ca7042a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3a585a0f24bfb9318817fc64819711e7cf045c6ae0b9c35919f08c751ca7042a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3a585a0f24bfb9318817fc64819711e7cf045c6ae0b9c35919f08c751ca7042a", kill_on_drop: false }` [INFO] [stdout] 3a585a0f24bfb9318817fc64819711e7cf045c6ae0b9c35919f08c751ca7042a [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" "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:824c28ce115f6b999260af6986f3384c158e782489540e41c0b698ca1d9fd927" "/opt/rustwide/cargo-home/bin/cargo" "+a8425075041d4b9af9bf32e2a267dfb9db2cfffb" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f9c2418b146378ca33a476f3778ee66f9810ee5d51b5f525c8aa3618b5198f9f [INFO] running `Command { std: "docker" "start" "-a" "f9c2418b146378ca33a476f3778ee66f9810ee5d51b5f525c8aa3618b5198f9f", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.95 [INFO] [stderr] Compiling autocfg v1.0.1 [INFO] [stderr] Checking cfg-if v1.0.0 [INFO] [stderr] Compiling pkg-config v0.3.19 [INFO] [stderr] Compiling crossbeam-utils v0.8.5 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Checking byteorder v1.4.3 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Compiling proc-macro2 v0.4.30 [INFO] [stderr] Compiling crossbeam-epoch v0.9.5 [INFO] [stderr] Compiling unicode-xid v0.1.0 [INFO] [stderr] Compiling rayon-core v1.9.1 [INFO] [stderr] Checking scopeguard v1.1.0 [INFO] [stderr] Compiling syn v0.15.44 [INFO] [stderr] Compiling getrandom v0.1.16 [INFO] [stderr] Compiling num-derive v0.2.5 [INFO] [stderr] Checking ppv-lite86 v0.2.10 [INFO] [stderr] Checking adler32 v1.2.0 [INFO] [stderr] Compiling crc32fast v1.2.1 [INFO] [stderr] Checking lzw v0.10.0 [INFO] [stderr] Compiling nix v0.10.0 [INFO] [stderr] Checking either v1.6.1 [INFO] [stderr] Checking cfg-if v0.1.10 [INFO] [stderr] Compiling input-sys v1.15.0 [INFO] [stderr] Checking void v1.0.2 [INFO] [stderr] Compiling log v0.4.14 [INFO] [stderr] Checking color_quant v1.1.0 [INFO] [stderr] Checking ioctl-sys v0.5.2 [INFO] [stderr] Compiling nix v0.17.0 [INFO] [stderr] Checking enum_derive v0.1.7 [INFO] [stderr] Checking scoped_threadpool v0.1.9 [INFO] [stderr] Checking custom_derive v0.1.7 [INFO] [stderr] Checking once_cell v1.7.2 [INFO] [stderr] Checking termcolor v1.1.2 [INFO] [stderr] Checking inflate v0.4.5 [INFO] [stderr] Checking deflate v0.7.20 [INFO] [stderr] Checking gif v0.10.3 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Compiling memoffset v0.6.4 [INFO] [stderr] Compiling num-integer v0.1.44 [INFO] [stderr] Compiling rayon v1.5.1 [INFO] [stderr] Compiling num-iter v0.1.42 [INFO] [stderr] Compiling num-rational v0.2.4 [INFO] [stderr] Checking crossbeam-channel v0.5.1 [INFO] [stderr] Compiling libudev-sys v0.1.4 [INFO] [stderr] Compiling x11 v2.18.2 [INFO] [stderr] Compiling autopilot v0.4.0 [INFO] [stderr] Checking png v0.15.3 [INFO] [stderr] Compiling quote v0.6.13 [INFO] [stderr] Checking crossbeam-deque v0.8.0 [INFO] [stderr] Checking num_cpus v1.13.0 [INFO] [stderr] Checking iovec v0.1.4 [INFO] [stderr] Checking getrandom v0.2.3 [INFO] [stderr] Checking uinput-sys v0.1.7 [INFO] [stderr] Checking time v0.1.43 [INFO] [stderr] Checking udev v0.4.0 [INFO] [stderr] Checking bytes v0.4.12 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking rand_core v0.6.2 [INFO] [stderr] Checking input v0.5.0 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking rand_chacha v0.3.0 [INFO] [stderr] Checking chrono v0.4.19 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking rand v0.8.3 [INFO] [stderr] Checking simplelog v0.10.0 [INFO] [stderr] Checking jpeg-decoder v0.1.22 [INFO] [stderr] Checking uinput v0.1.3 [INFO] [stderr] Checking tiff v0.3.1 [INFO] [stderr] Checking image v0.22.5 [INFO] [stderr] Checking inputbot v0.5.0 [INFO] [stderr] Checking auto-connect-rs v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused `#[macro_use]` import [INFO] [stdout] --> src/main.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | #[macro_use] extern crate log; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `#[macro_use]` import [INFO] [stdout] --> src/main.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | #[macro_use] extern crate log; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Rect` [INFO] [stdout] --> src/stroke_play.rs:3:34 [INFO] [stdout] | [INFO] [stdout] 3 | use autopilot::geometry::{Point, Rect}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Rect` [INFO] [stdout] --> src/stroke_play.rs:3:34 [INFO] [stdout] | [INFO] [stdout] 3 | use autopilot::geometry::{Point, Rect}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `capture_screen_portion` [INFO] [stdout] --> src/stroke_play.rs:7:49 [INFO] [stdout] | [INFO] [stdout] 7 | use autopilot::bitmap::{Bitmap, capture_screen, capture_screen_portion}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `capture_screen_portion` [INFO] [stdout] --> src/stroke_play.rs:7:49 [INFO] [stdout] | [INFO] [stdout] 7 | use autopilot::bitmap::{Bitmap, capture_screen, capture_screen_portion}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::distributions::Open01` [INFO] [stdout] --> src/stroke_play.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use rand::distributions::Open01; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Flag`, `KeyCode` [INFO] [stdout] --> src/stroke_play.rs:10:22 [INFO] [stdout] | [INFO] [stdout] 10 | use autopilot::key::{KeyCode, Flag}; [INFO] [stdout] | ^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `rand::distributions::Open01` [INFO] [stdout] --> src/stroke_play.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use rand::distributions::Open01; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Flag`, `KeyCode` [INFO] [stdout] --> src/stroke_play.rs:10:22 [INFO] [stdout] | [INFO] [stdout] 10 | use autopilot::key::{KeyCode, Flag}; [INFO] [stdout] | ^^^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::hash_map::Keys` [INFO] [stdout] --> src/stroke_play.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::collections::hash_map::Keys; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::hash_map::Keys` [INFO] [stdout] --> src/stroke_play.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use std::collections::hash_map::Keys; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread::sleep` [INFO] [stdout] --> src/menu.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::thread::sleep; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread::sleep` [INFO] [stdout] --> src/menu.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::thread::sleep; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Bitmap`, `capture_screen_portion`, `capture_screen` [INFO] [stdout] --> src/main.rs:11:25 [INFO] [stdout] | [INFO] [stdout] 11 | use autopilot::bitmap::{capture_screen, capture_screen_portion, Bitmap}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Bitmap`, `capture_screen_portion`, `capture_screen` [INFO] [stdout] --> src/main.rs:11:25 [INFO] [stdout] | [INFO] [stdout] 11 | use autopilot::bitmap::{capture_screen, capture_screen_portion, Bitmap}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `get_color`, `is_point_visible`, `is_rect_visible` [INFO] [stdout] --> src/main.rs:12:25 [INFO] [stdout] | [INFO] [stdout] 12 | use autopilot::screen::{get_color, is_point_visible, is_rect_visible}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Point`, `Rect`, `Size` [INFO] [stdout] --> src/main.rs:13:27 [INFO] [stdout] | [INFO] [stdout] 13 | use autopilot::geometry::{Point, Rect, Size}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `get_color`, `is_point_visible`, `is_rect_visible` [INFO] [stdout] --> src/main.rs:12:25 [INFO] [stdout] | [INFO] [stdout] 12 | use autopilot::screen::{get_color, is_point_visible, is_rect_visible}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Button`, `ScrollDirection`, `click`, `move_to` [INFO] [stdout] --> src/main.rs:14:24 [INFO] [stdout] | [INFO] [stdout] 14 | use autopilot::mouse::{move_to, click, Button, ScrollDirection}; [INFO] [stdout] | ^^^^^^^ ^^^^^ ^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Point`, `Rect`, `Size` [INFO] [stdout] --> src/main.rs:13:27 [INFO] [stdout] | [INFO] [stdout] 13 | use autopilot::geometry::{Point, Rect, Size}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::Path` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::path::Path; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Button`, `ScrollDirection`, `click`, `move_to` [INFO] [stdout] --> src/main.rs:14:24 [INFO] [stdout] | [INFO] [stdout] 14 | use autopilot::mouse::{move_to, click, Button, ScrollDirection}; [INFO] [stdout] | ^^^^^^^ ^^^^^ ^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Rng`, `thread_rng` [INFO] [stdout] --> src/main.rs:16:12 [INFO] [stdout] | [INFO] [stdout] 16 | use rand::{thread_rng, Rng}; [INFO] [stdout] | ^^^^^^^^^^ ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::Path` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::path::Path; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread::sleep` [INFO] [stdout] --> src/main.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use std::thread::sleep; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Rng`, `thread_rng` [INFO] [stdout] --> src/main.rs:16:12 [INFO] [stdout] | [INFO] [stdout] 16 | use rand::{thread_rng, Rng}; [INFO] [stdout] | ^^^^^^^^^^ ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PauseMenu`, `ShuntShotMenu`, `find_and_click` [INFO] [stdout] --> src/main.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | use stroke_play::{ShuntShotMenu, PauseMenu, find_and_click,}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `menu::StrokePlayMenu` [INFO] [stdout] --> src/main.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use menu::StrokePlayMenu; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread::sleep` [INFO] [stdout] --> src/main.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use std::thread::sleep; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PauseMenu`, `ShuntShotMenu`, `find_and_click` [INFO] [stdout] --> src/main.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | use stroke_play::{ShuntShotMenu, PauseMenu, find_and_click,}; [INFO] [stdout] | ^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `menu::StrokePlayMenu` [INFO] [stdout] --> src/main.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use menu::StrokePlayMenu; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `GameDecisions`, `aim_at_pin`, `button_click`, `dist_four_to_five_hundreds`, `dist_one_to_two_hundred`, `find_or_manual_click`, `is_pixel_white`, `is_visible`, `make_screen_active`, `sleep_secs`, `state_ready_shoot` [INFO] [stdout] --> src/main.rs:21:26 [INFO] [stdout] | [INFO] [stdout] 21 | ...::{sleep_secs, aim_at_pin, find_or_manual_click, make_screen_active, button_click, RandomPlayGameLoop, state_ready_shoot, is_visible, GameDecisions, is_pixel_white, dist_one_to_two_hundred, dist_four_to_five_hundred... [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `GamesMenu`, `MainMenu`, `PracticeMenu` [INFO] [stdout] --> src/main.rs:23:19 [INFO] [stdout] | [INFO] [stdout] 23 | use crate::menu::{MainMenu, PracticeMenu, GamesMenu}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Pixel`, `Rgba` [INFO] [stdout] --> src/main.rs:24:13 [INFO] [stdout] | [INFO] [stdout] 24 | use image::{Rgba, Pixel}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `GameDecisions`, `aim_at_pin`, `button_click`, `dist_four_to_five_hundreds`, `dist_one_to_two_hundred`, `find_or_manual_click`, `is_pixel_white`, `is_visible`, `make_screen_active`, `sleep_secs`, `state_ready_shoot` [INFO] [stdout] --> src/main.rs:21:26 [INFO] [stdout] | [INFO] [stdout] 21 | ...::{sleep_secs, aim_at_pin, find_or_manual_click, make_screen_active, button_click, RandomPlayGameLoop, state_ready_shoot, is_visible, GameDecisions, is_pixel_white, dist_one_to_two_hundred, dist_four_to_five_hundred... [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `GamesMenu`, `MainMenu`, `PracticeMenu` [INFO] [stdout] --> src/main.rs:23:19 [INFO] [stdout] | [INFO] [stdout] 23 | use crate::menu::{MainMenu, PracticeMenu, GamesMenu}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Pixel`, `Rgba` [INFO] [stdout] --> src/main.rs:24:13 [INFO] [stdout] | [INFO] [stdout] 24 | use image::{Rgba, Pixel}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `bmp_image` [INFO] [stdout] --> src/stroke_play.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | let bmp_image = bmp.image.save(&bmp_path) [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bmp_image` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `px` [INFO] [stdout] --> src/stroke_play.rs:120:9 [INFO] [stdout] | [INFO] [stdout] 120 | for px in 0..60 { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_px` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `start_x` is never read [INFO] [stdout] --> src/stroke_play.rs:128:9 [INFO] [stdout] | [INFO] [stdout] 128 | start_x += 1.0; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `set_aim_marker_setting` is never read [INFO] [stdout] --> src/stroke_play.rs:616:13 [INFO] [stdout] | [INFO] [stdout] 616 | set_aim_marker_setting = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `shot_count` is never read [INFO] [stdout] --> src/stroke_play.rs:695:9 [INFO] [stdout] | [INFO] [stdout] 695 | shot_count = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `bmp_image` [INFO] [stdout] --> src/stroke_play.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | let bmp_image = bmp.image.save(&bmp_path) [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bmp_image` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `px` [INFO] [stdout] --> src/stroke_play.rs:120:9 [INFO] [stdout] | [INFO] [stdout] 120 | for px in 0..60 { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_px` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `start_x` is never read [INFO] [stdout] --> src/stroke_play.rs:128:9 [INFO] [stdout] | [INFO] [stdout] 128 | start_x += 1.0; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_assignments)]` on by default [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `set_aim_marker_setting` is never read [INFO] [stdout] --> src/stroke_play.rs:616:13 [INFO] [stdout] | [INFO] [stdout] 616 | set_aim_marker_setting = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `shot_count` is never read [INFO] [stdout] --> src/stroke_play.rs:695:9 [INFO] [stdout] | [INFO] [stdout] 695 | shot_count = 0; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `out_bounds_pickup` is never read [INFO] [stdout] --> src/stroke_play.rs:226:5 [INFO] [stdout] | [INFO] [stdout] 221 | pub struct GameDecisions [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 226 | out_bounds_pickup: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/stroke_play.rs:298:5 [INFO] [stdout] | [INFO] [stdout] 297 | pub struct PauseMenu { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 298 | menu: Point, [INFO] [stdout] | ^^^^ [INFO] [stdout] 299 | open_shunt_shot: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 300 | mulligan: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 301 | score_card: Point, [INFO] [stdout] 302 | pick_up: Point, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 303 | in_round_practice: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 307 | main_menu: Point, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 308 | restart: Point, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `defaults` is never read [INFO] [stdout] --> src/stroke_play.rs:404:5 [INFO] [stdout] | [INFO] [stdout] 392 | pub struct ShuntShotMenu [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 404 | defaults: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `stroke_menu_controller`, `practice_menu_controller` and `games_controller` are never read [INFO] [stdout] --> src/stroke_play.rs:497:5 [INFO] [stdout] | [INFO] [stdout] 495 | pub struct RandomPlayGameLoop { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 496 | main_menu_controller: MainMenu, [INFO] [stdout] 497 | stroke_menu_controller: StrokePlayMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 500 | practice_menu_controller: PracticeMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 501 | games_controller: GamesMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `practice`, `games`, `events`, `online_play`, `resume` and `settings` are never read [INFO] [stdout] --> src/menu.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct MainMenu [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 13 | practice: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 14 | games: Point, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 15 | events: Point, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 16 | online_play: Point, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 17 | resume: Point, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 18 | settings: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `out_bounds_pickup` is never read [INFO] [stdout] --> src/stroke_play.rs:226:5 [INFO] [stdout] | [INFO] [stdout] 221 | pub struct GameDecisions [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 226 | out_bounds_pickup: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/stroke_play.rs:298:5 [INFO] [stdout] | [INFO] [stdout] 297 | pub struct PauseMenu { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 298 | menu: Point, [INFO] [stdout] | ^^^^ [INFO] [stdout] 299 | open_shunt_shot: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 300 | mulligan: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 301 | score_card: Point, [INFO] [stdout] 302 | pick_up: Point, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 303 | in_round_practice: Point, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 307 | main_menu: Point, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 308 | restart: Point, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `defaults` is never read [INFO] [stdout] --> src/stroke_play.rs:404:5 [INFO] [stdout] | [INFO] [stdout] 392 | pub struct ShuntShotMenu [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 404 | defaults: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `stroke_menu_controller`, `practice_menu_controller` and `games_controller` are never read [INFO] [stdout] --> src/stroke_play.rs:497:5 [INFO] [stdout] | [INFO] [stdout] 495 | pub struct RandomPlayGameLoop { [INFO] [stdout] | ------------------ fields in this struct [INFO] [stdout] 496 | main_menu_controller: MainMenu, [INFO] [stdout] 497 | stroke_menu_controller: StrokePlayMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 500 | practice_menu_controller: PracticeMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 501 | games_controller: GamesMenu, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `practice`, `games`, `events`, `online_play`, `resume` and `settings` are never read [INFO] [stdout] --> src/menu.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct MainMenu [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 13 | practice: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 14 | games: Point, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 15 | events: Point, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 16 | online_play: Point, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 17 | resume: Point, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 18 | settings: Point, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:51:5 [INFO] [stdout] | [INFO] [stdout] 51 | move_to(*point); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | move_to(Point::new(896.0, 24.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:102:5 [INFO] [stdout] | [INFO] [stdout] 102 | move_to(Point::new(10.0, 10.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:135:5 [INFO] [stdout] | [INFO] [stdout] 135 | move_to(pt); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:205:5 [INFO] [stdout] | [INFO] [stdout] 205 | move_to(found_pt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:463:13 [INFO] [stdout] | [INFO] [stdout] 463 | move_to(self.speed_simulation_increment); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:471:9 [INFO] [stdout] | [INFO] [stdout] 471 | move_to(self.shot_direction_increment); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:473:9 [INFO] [stdout] | [INFO] [stdout] 473 | move_to(Point::new(100.0, 500.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/menu.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 54 | move_to(self.clear_all); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:51:5 [INFO] [stdout] | [INFO] [stdout] 51 | move_to(*point); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | move_to(Point::new(896.0, 24.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:102:5 [INFO] [stdout] | [INFO] [stdout] 102 | move_to(Point::new(10.0, 10.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:135:5 [INFO] [stdout] | [INFO] [stdout] 135 | move_to(pt); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:205:5 [INFO] [stdout] | [INFO] [stdout] 205 | move_to(found_pt); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:463:13 [INFO] [stdout] | [INFO] [stdout] 463 | move_to(self.speed_simulation_increment); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:471:9 [INFO] [stdout] | [INFO] [stdout] 471 | move_to(self.shot_direction_increment); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/stroke_play.rs:473:9 [INFO] [stdout] | [INFO] [stdout] 473 | move_to(Point::new(100.0, 500.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/menu.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 54 | move_to(self.clear_all); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 39 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 39 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 7.44s [INFO] running `Command { std: "docker" "inspect" "f9c2418b146378ca33a476f3778ee66f9810ee5d51b5f525c8aa3618b5198f9f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f9c2418b146378ca33a476f3778ee66f9810ee5d51b5f525c8aa3618b5198f9f", kill_on_drop: false }` [INFO] [stdout] f9c2418b146378ca33a476f3778ee66f9810ee5d51b5f525c8aa3618b5198f9f