[INFO] cloning repository https://github.com/WiktorLidwin/RustDemo [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/WiktorLidwin/RustDemo" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FWiktorLidwin%2FRustDemo", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FWiktorLidwin%2FRustDemo'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f23eeb8cec6885e71591a11c79cb8533a904d842 [INFO] checking WiktorLidwin/RustDemo against master#9fa580b1175018b0a276b0bc68f9827a106f7260 for pr-82565 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FWiktorLidwin%2FRustDemo" "/workspace/builds/worker-0/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/WiktorLidwin/RustDemo on toolchain 9fa580b1175018b0a276b0bc68f9827a106f7260 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+9fa580b1175018b0a276b0bc68f9827a106f7260" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/WiktorLidwin/RustDemo [INFO] finished tweaking git repo https://github.com/WiktorLidwin/RustDemo [INFO] tweaked toml for git repo https://github.com/WiktorLidwin/RustDemo written to /workspace/builds/worker-0/source/Cargo.toml [INFO] crate git repo https://github.com/WiktorLidwin/RustDemo already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+9fa580b1175018b0a276b0bc68f9827a106f7260" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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:f2f6bcd4b43ebee4e173f653a26493129bdb64017c85f916b780ca7fbdbaa79d" "/opt/rustwide/cargo-home/bin/cargo" "+9fa580b1175018b0a276b0bc68f9827a106f7260" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 6f25feabbc50b56e0140ca4c9703ee67f73b9302c088c89d499779d1d6e20e81 [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" "6f25feabbc50b56e0140ca4c9703ee67f73b9302c088c89d499779d1d6e20e81", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "6f25feabbc50b56e0140ca4c9703ee67f73b9302c088c89d499779d1d6e20e81", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6f25feabbc50b56e0140ca4c9703ee67f73b9302c088c89d499779d1d6e20e81", kill_on_drop: false }` [INFO] [stdout] 6f25feabbc50b56e0140ca4c9703ee67f73b9302c088c89d499779d1d6e20e81 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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:f2f6bcd4b43ebee4e173f653a26493129bdb64017c85f916b780ca7fbdbaa79d" "/opt/rustwide/cargo-home/bin/cargo" "+9fa580b1175018b0a276b0bc68f9827a106f7260" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 14e96dc50cc0e3267c14ddd2a71b7865ffa330f0bea9bb8fd105d40e818e5107 [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" "14e96dc50cc0e3267c14ddd2a71b7865ffa330f0bea9bb8fd105d40e818e5107", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.81 [INFO] [stderr] Compiling proc-macro2 v1.0.24 [INFO] [stderr] Checking tinyvec_macros v0.1.0 [INFO] [stderr] Compiling unicode-xid v0.2.1 [INFO] [stderr] Compiling syn v1.0.50 [INFO] [stderr] Compiling serde_derive v1.0.117 [INFO] [stderr] Compiling serde v1.0.117 [INFO] [stderr] Checking log v0.4.11 [INFO] [stderr] Compiling phf_shared v0.7.24 [INFO] [stderr] Checking base64 v0.9.3 [INFO] [stderr] Checking tinyvec v1.1.0 [INFO] [stderr] Compiling phf v0.7.24 [INFO] [stderr] Checking log v0.3.9 [INFO] [stderr] Checking mime v0.2.6 [INFO] [stderr] Checking unicode-normalization v0.1.16 [INFO] [stderr] Checking time v0.1.44 [INFO] [stderr] Checking num_cpus v1.13.0 [INFO] [stderr] Compiling quote v1.0.7 [INFO] [stderr] Compiling rand_os v0.1.3 [INFO] [stderr] Compiling rand v0.6.5 [INFO] [stderr] Checking idna v0.1.5 [INFO] [stderr] Compiling phf_generator v0.7.24 [INFO] [stderr] Compiling phf_codegen v0.7.24 [INFO] [stderr] Compiling mime_guess v1.8.8 [INFO] [stderr] Checking url v1.7.2 [INFO] [stderr] Checking hyper v0.10.16 [INFO] [stderr] Checking iron v0.6.1 [INFO] [stderr] Checking bincode v1.3.1 [INFO] [stderr] Checking server v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `ErrorKind`, `Read` [INFO] [stdout] --> src/TicTacToeStructs.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | use std::io::{ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::net::TcpListener` [INFO] [stdout] --> src/TicTacToeStructs.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | use std::net::TcpListener; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/TicTacToeStructs.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread` [INFO] [stdout] --> src/TicTacToeStructs.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | use std::thread; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::TicTacToeStructs::TicTacToeStructs::Room` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use crate::TicTacToeStructs::TicTacToeStructs::Room; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ErrorKind`, `Read` [INFO] [stdout] --> src/TicTacToeStructs.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | use std::io::{ErrorKind, Read, Write}; [INFO] [stdout] | ^^^^^^^^^ ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::net::TcpListener` [INFO] [stdout] --> src/TicTacToeStructs.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | use std::net::TcpListener; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::mpsc` [INFO] [stdout] --> src/TicTacToeStructs.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | use std::sync::mpsc; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::thread` [INFO] [stdout] --> src/TicTacToeStructs.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | use std::thread; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::TicTacToeStructs::TicTacToeStructs::Room` [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use crate::TicTacToeStructs::TicTacToeStructs::Room; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `currentPlayerTurn` [INFO] [stdout] --> src/main.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 92 | let currentPlayerTurn = Rooms.findRoom(msg.getMessage().getData()).unwrap().getPlayersTurn(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_currentPlayerTurn` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `index` is never read [INFO] [stdout] --> src/TicTacToeStructs.rs:121:17 [INFO] [stdout] | [INFO] [stdout] 121 | let mut index = 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: unused variable: `currentPlayerTurn` [INFO] [stdout] --> src/main.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 92 | let currentPlayerTurn = Rooms.findRoom(msg.getMessage().getData()).unwrap().getPlayersTurn(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_currentPlayerTurn` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `index` is never read [INFO] [stdout] --> src/TicTacToeStructs.rs:121:17 [INFO] [stdout] | [INFO] [stdout] 121 | let mut index = 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: variable does not need to be mutable [INFO] [stdout] --> src/TicTacToeStructs.rs:200:17 [INFO] [stdout] | [INFO] [stdout] 200 | let mut temp = self.rooms.iter().find(|&x| x.id == id); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/TicTacToeStructs.rs:200:17 [INFO] [stdout] | [INFO] [stdout] 200 | let mut temp = self.rooms.iter().find(|&x| x.id == id); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `LOCAL` [INFO] [stdout] --> src/main.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | const LOCAL: &str = "127.0.0.1:6000"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module `TicTacToeStructs` should have a snake case name [INFO] [stdout] --> src/main.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | mod TicTacToeStructs; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `tic_tac_toe_structs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `PORT` should have a snake case name [INFO] [stdout] --> src/main.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | let PORT: &str = &*std::env::var("PORT").unwrap().to_owned(); [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `port` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `IP` should have a snake case name [INFO] [stdout] --> src/main.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | let IP = Ipv4Addr::UNSPECIFIED.to_string(); [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `localIp` should have a snake case name [INFO] [stdout] --> src/main.rs:35:9 [INFO] [stdout] | [INFO] [stdout] 35 | let localIp = IP+":" +PORT; [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `local_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `TCPlocalIp` should have a snake case name [INFO] [stdout] --> src/main.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | let TCPlocalIp = "0.0.0.0:4040"; [INFO] [stdout] | ^^^^^^^^^^ help: convert the identifier to snake case: `tcplocal_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `Rooms` should have a snake case name [INFO] [stdout] --> src/main.rs:47:13 [INFO] [stdout] | [INFO] [stdout] 47 | let mut Rooms = Rooms::new(); [INFO] [stdout] | ^^^^^ help: convert the identifier to snake case: `rooms` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `numOfPlayers` should have a snake case name [INFO] [stdout] --> src/main.rs:91:25 [INFO] [stdout] | [INFO] [stdout] 91 | let numOfPlayers = Rooms.findRoom(msg.getMessage().getData()).unwrap().getNumberOfPlayers(); [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to snake case: `num_of_players` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `currentPlayerTurn` should have a snake case name [INFO] [stdout] --> src/main.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 92 | let currentPlayerTurn = Rooms.findRoom(msg.getMessage().getData()).unwrap().getPlayersTurn(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `current_player_turn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused comparison that must be used [INFO] [stdout] --> src/TicTacToeStructs.rs:261:17 [INFO] [stdout] | [INFO] [stdout] 261 | self.winner == self.checkBoardWinner(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `LOCAL` [INFO] [stdout] --> src/main.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | const LOCAL: &str = "127.0.0.1:6000"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 18 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module `TicTacToeStructs` should have a snake case name [INFO] [stdout] --> src/main.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | mod TicTacToeStructs; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `tic_tac_toe_structs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `PORT` should have a snake case name [INFO] [stdout] --> src/main.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | let PORT: &str = &*std::env::var("PORT").unwrap().to_owned(); [INFO] [stdout] | ^^^^ help: convert the identifier to snake case: `port` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `IP` should have a snake case name [INFO] [stdout] --> src/main.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | let IP = Ipv4Addr::UNSPECIFIED.to_string(); [INFO] [stdout] | ^^ help: convert the identifier to snake case: `ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `localIp` should have a snake case name [INFO] [stdout] --> src/main.rs:35:9 [INFO] [stdout] | [INFO] [stdout] 35 | let localIp = IP+":" +PORT; [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `local_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `TCPlocalIp` should have a snake case name [INFO] [stdout] --> src/main.rs:36:9 [INFO] [stdout] | [INFO] [stdout] 36 | let TCPlocalIp = "0.0.0.0:4040"; [INFO] [stdout] | ^^^^^^^^^^ help: convert the identifier to snake case: `tcplocal_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `Rooms` should have a snake case name [INFO] [stdout] --> src/main.rs:47:13 [INFO] [stdout] | [INFO] [stdout] 47 | let mut Rooms = Rooms::new(); [INFO] [stdout] | ^^^^^ help: convert the identifier to snake case: `rooms` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `numOfPlayers` should have a snake case name [INFO] [stdout] --> src/main.rs:91:25 [INFO] [stdout] | [INFO] [stdout] 91 | let numOfPlayers = Rooms.findRoom(msg.getMessage().getData()).unwrap().getNumberOfPlayers(); [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to snake case: `num_of_players` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `currentPlayerTurn` should have a snake case name [INFO] [stdout] --> src/main.rs:92:25 [INFO] [stdout] | [INFO] [stdout] 92 | let currentPlayerTurn = Rooms.findRoom(msg.getMessage().getData()).unwrap().getPlayersTurn(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `current_player_turn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused comparison that must be used [INFO] [stdout] --> src/TicTacToeStructs.rs:261:17 [INFO] [stdout] | [INFO] [stdout] 261 | self.winner == self.checkBoardWinner(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 18 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 39.83s [INFO] running `Command { std: "docker" "inspect" "14e96dc50cc0e3267c14ddd2a71b7865ffa330f0bea9bb8fd105d40e818e5107", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "14e96dc50cc0e3267c14ddd2a71b7865ffa330f0bea9bb8fd105d40e818e5107", kill_on_drop: false }` [INFO] [stdout] 14e96dc50cc0e3267c14ddd2a71b7865ffa330f0bea9bb8fd105d40e818e5107