[INFO] fetching crate japi 0.3.2... [INFO] checking japi-0.3.2 against try#a7a572ce3edd6d476191fbfe92c9c1986e009b34 for pr-87190-3 [INFO] extracting crate japi 0.3.2 into /workspace/builds/worker-39/source [INFO] validating manifest of crates.io crate japi 0.3.2 on toolchain a7a572ce3edd6d476191fbfe92c9c1986e009b34 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a7a572ce3edd6d476191fbfe92c9c1986e009b34" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking crates.io crate japi 0.3.2 [INFO] finished tweaking crates.io crate japi 0.3.2 [INFO] tweaked toml for crates.io crate japi 0.3.2 written to /workspace/builds/worker-39/source/Cargo.toml [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a7a572ce3edd6d476191fbfe92c9c1986e009b34" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a7a572ce3edd6d476191fbfe92c9c1986e009b34" "fetch" "--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-39/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-39/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:34b6a614d2c27851fe6cbf88fbd1137609cefab8b10d0615aaeb6fd47975d74e" "/opt/rustwide/cargo-home/bin/cargo" "+a7a572ce3edd6d476191fbfe92c9c1986e009b34" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 9440090eafc7ce8a894c6de757f2989c805c146a0102982fab5d4f89e790fc9c [INFO] running `Command { std: "docker" "start" "-a" "9440090eafc7ce8a894c6de757f2989c805c146a0102982fab5d4f89e790fc9c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "9440090eafc7ce8a894c6de757f2989c805c146a0102982fab5d4f89e790fc9c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9440090eafc7ce8a894c6de757f2989c805c146a0102982fab5d4f89e790fc9c", kill_on_drop: false }` [INFO] [stdout] 9440090eafc7ce8a894c6de757f2989c805c146a0102982fab5d4f89e790fc9c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-39/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-39/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:34b6a614d2c27851fe6cbf88fbd1137609cefab8b10d0615aaeb6fd47975d74e" "/opt/rustwide/cargo-home/bin/cargo" "+a7a572ce3edd6d476191fbfe92c9c1986e009b34" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 60c8aaf405dc0370db40aee8715ba11717d8ce1dff36b18e4acee37a72310c0c [INFO] running `Command { std: "docker" "start" "-a" "60c8aaf405dc0370db40aee8715ba11717d8ce1dff36b18e4acee37a72310c0c", kill_on_drop: false }` [INFO] [stderr] Copying to /tmp/fixit [INFO] [stderr] Running `cargo fix --edition` [INFO] [stderr] Compiling unicode-xid v0.2.2 [INFO] [stderr] Compiling ryu v1.0.5 [INFO] [stderr] Compiling serde v1.0.128 [INFO] [stderr] Compiling syn v1.0.75 [INFO] [stderr] Compiling serde_derive v1.0.128 [INFO] [stderr] Compiling serde_json v1.0.66 [INFO] [stderr] Checking itoa v0.4.8 [INFO] [stderr] Compiling proc-macro2 v1.0.28 [INFO] [stderr] Compiling quote v1.0.9 [INFO] [stderr] Checking japi v0.3.2 (/tmp/fixit) [INFO] [stderr] Migrating src/lib.rs from 2018 edition to 2021 [INFO] [stderr] Fixed src/optional.rs (1 fix) [INFO] [stderr] Fixed src/object/resource.rs (2 fixes) [INFO] [stderr] Fixed src/object/conversion_error.rs (1 fix) [INFO] [stderr] Fixed src/object/identifier.rs (3 fixes) [INFO] [stderr] Fixed src/links.rs (1 fix) [INFO] [stdout] error: cannot find derive macro `Deserialize` in this scope [INFO] [stdout] --> src/optional_vec.rs:151:25 [INFO] [stdout] | [INFO] [stdout] 151 | #[derive(Serialize, Deserialize, PartialEq, Eq, Debug)] [INFO] [stdout] | ^^^^^^^^^^^ help: a derive macro with a similar name exists: `Serialize` [INFO] [stdout] | [INFO] [stdout] ::: /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_derive-1.0.128/src/lib.rs:89:1 [INFO] [stdout] | [INFO] [stdout] 89 | pub fn derive_serialize(input: TokenStream) -> TokenStream { [INFO] [stdout] | ---------------------------------------------------------- similarly named derive macro `Serialize` defined here [INFO] [stdout] | [INFO] [stdout] = note: consider importing one of these items: [INFO] [stdout] crate::jsonapi::Deserialize [INFO] [stdout] serde_derive::Deserialize [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: cannot find derive macro `Deserialize` in this scope [INFO] [stdout] --> src/optional.rs:169:25 [INFO] [stdout] | [INFO] [stdout] 169 | #[derive(Serialize, Deserialize, PartialEq, Eq, Debug)] [INFO] [stdout] | ^^^^^^^^^^^ help: a derive macro with a similar name exists: `Serialize` [INFO] [stdout] | [INFO] [stdout] ::: /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_derive-1.0.128/src/lib.rs:89:1 [INFO] [stdout] | [INFO] [stdout] 89 | pub fn derive_serialize(input: TokenStream) -> TokenStream { [INFO] [stdout] | ---------------------------------------------------------- similarly named derive macro `Serialize` defined here [INFO] [stdout] | [INFO] [stdout] = note: consider importing one of these items: [INFO] [stdout] crate::jsonapi::Deserialize [INFO] [stdout] serde_derive::Deserialize [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> src/object/generic.rs:137:10 [INFO] [stdout] | [INFO] [stdout] 137 | }; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Fixed src/object/resource.rs (1 fix) [INFO] [stderr] Fixed src/object/identifier.rs (1 fix) [INFO] [stderr] Fixed src/optional_vec.rs (1 fix) [INFO] [stderr] Fixed src/optional.rs (1 fix) [INFO] [stderr] Migrating tests/article.rs from 2018 edition to 2021 [INFO] [stdout] error[E0277]: the trait bound `optional_vec::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional_vec.rs:162:19 [INFO] [stdout] | [INFO] [stdout] 162 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional_vec::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional_vec::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional_vec.rs:171:19 [INFO] [stdout] | [INFO] [stdout] 171 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional_vec::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional_vec::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional_vec.rs:180:19 [INFO] [stdout] | [INFO] [stdout] 180 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional_vec::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional_vec::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional_vec.rs:189:19 [INFO] [stdout] | [INFO] [stdout] 189 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional_vec::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional_vec::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional_vec.rs:196:30 [INFO] [stdout] | [INFO] [stdout] 196 | let _ : TestStruct = serde_json::from_str("{\"inner\":\"oops i'm a string\"}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional_vec::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for reference `&generic::GenericObject` in the current scope [INFO] [stdout] --> src/object/resource.rs:199:24 [INFO] [stdout] | [INFO] [stdout] 199 | let ro = (&go).try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `&generic::GenericObject` [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for struct `generic::GenericObject` in the current scope [INFO] [stdout] --> src/object/resource.rs:208:21 [INFO] [stdout] | [INFO] [stdout] 208 | let ro = go.try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `generic::GenericObject` [INFO] [stdout] | [INFO] [stdout] ::: src/object/generic.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct GenericObject { [INFO] [stdout] | ------------------------ method `try_into` not found for this [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for reference `&generic::GenericObject` in the current scope [INFO] [stdout] --> src/object/identifier.rs:117:24 [INFO] [stdout] | [INFO] [stdout] 117 | let id = (&go).try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `&generic::GenericObject` [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for struct `generic::GenericObject` in the current scope [INFO] [stdout] --> src/object/identifier.rs:124:21 [INFO] [stdout] | [INFO] [stdout] 124 | let id = go.try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `generic::GenericObject` [INFO] [stdout] | [INFO] [stdout] ::: src/object/generic.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct GenericObject { [INFO] [stdout] | ------------------------ method `try_into` not found for this [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for reference `&resource::ResourceObject` in the current scope [INFO] [stdout] --> src/object/identifier.rs:150:24 [INFO] [stdout] | [INFO] [stdout] 150 | let id = (&ro).try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `&resource::ResourceObject` [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `try_into` found for struct `resource::ResourceObject` in the current scope [INFO] [stdout] --> src/object/identifier.rs:157:21 [INFO] [stdout] | [INFO] [stdout] 157 | let id = ro.try_into().unwrap(); [INFO] [stdout] | ^^^^^^^^ method not found in `resource::ResourceObject` [INFO] [stdout] | [INFO] [stdout] ::: src/object/resource.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct ResourceObject { [INFO] [stdout] | ----------------------------------------------------------------------- method `try_into` not found for this [INFO] [stdout] | [INFO] [stdout] = help: items from traits can only be used if the trait is in scope [INFO] [stdout] = note: the following trait is implemented but not in scope; perhaps add a `use` for it: [INFO] [stdout] `use std::convert::TryInto;` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional.rs:180:19 [INFO] [stdout] | [INFO] [stdout] 180 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `optional::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional.rs:189:19 [INFO] [stdout] | [INFO] [stdout] 189 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `japi` due to 18 previous errors; 1 warning emitted [INFO] [stdout] error[E0277]: the trait bound `optional::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional.rs:198:19 [INFO] [stdout] | [INFO] [stdout] 198 | let ts2 = serde_json::from_str(&s).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] error[E0277]: the trait bound `optional::test::TestStruct: document::_::_serde::Deserialize<'_>` is not satisfied [INFO] [stdout] --> src/optional.rs:205:30 [INFO] [stdout] | [INFO] [stdout] 205 | let _ : TestStruct = serde_json::from_str("{\"inner\":\"oops i'm a string\"}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ the trait `document::_::_serde::Deserialize<'_>` is not implemented for `optional::test::TestStruct` [INFO] [stdout] | [INFO] [stdout] note: required by a bound in `serde_json::from_str` [INFO] [stdout] --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.66/src/de.rs:2587:8 [INFO] [stdout] | [INFO] [stdout] 2587 | T: de::Deserialize<'a>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ required by this bound in `serde_json::from_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: aborting due to 17 previous errors; 1 warning emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0277, E0599. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0277`. [INFO] [stdout] [INFO] [stderr] Fixed tests/article.rs (3 fixes) [INFO] [stderr] error: build failed [INFO] [stderr] error: failed to migrate to next edition [INFO] [stderr] [INFO] [stderr] Caused by: [INFO] [stderr] process didn't exit successfully: `cargo fix --edition --allow-no-vcs --allow-dirty --frozen --all --all-targets --message-format=json` (exit status: 101) [INFO] running `Command { std: "docker" "inspect" "60c8aaf405dc0370db40aee8715ba11717d8ce1dff36b18e4acee37a72310c0c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "60c8aaf405dc0370db40aee8715ba11717d8ce1dff36b18e4acee37a72310c0c", kill_on_drop: false }` [INFO] [stdout] 60c8aaf405dc0370db40aee8715ba11717d8ce1dff36b18e4acee37a72310c0c