[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 35046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 25063126
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 748332016
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 187237250
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5152621115
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022821297
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19013313
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13106674119
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1035880242
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 43688981376
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 50092476
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 68076222
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 36621023
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 48564536
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 483917721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 100512972
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14306
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1857835
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76015358
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22500481
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 19239724631
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1029691241
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 631790794
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29002895820
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 67821979
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13512344159
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 691558091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6642548
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1228952
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80570922
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19662850
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 18930776391
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1033974129
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 603373808
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 28873158201
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 51803216
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13372723935
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 851609799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6990029
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1688209
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 77476322
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19832494
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2708551484
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1035415422
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 24764624
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2525041532
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024596701
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 44418394039
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 70670488
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 37182774
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 72194320
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 58321513
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 574621415
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6462193
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/flatpak.feature",
    "id": "installing-and-running-flatpak-apps-in-tails",
    "keyword": "Feature",
    "name": "Installing and running Flatpak apps in Tails",
    "description": "  As a Tails user\n  I may want to install and run software not shipped in Tails or Debian\n  And keep them up-to-date",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-have-the-debian-plugin",
        "keyword": "Scenario",
        "name": "GNOME Software does not have the Debian plugin",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1366379
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 48661
            }
          },
          {
            "keyword": "Then ",
            "name": "Debian package gnome-software-plugin-deb is not installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 38713961
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 616601728
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16982
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-start-until-tor-is-ready",
        "keyword": "Scenario",
        "name": "GNOME Software does not start until Tor is ready",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 5961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1698988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2248543
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network with the Flatpak feature from a USB drive with a persistent partition enabled and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 182680874354
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is not running",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 49820025
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start GNOME Software",
            "line": 15,
            "match": {
              "location": "features/step_definitions/flatpak.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 44722967
            }
          },
          {
            "keyword": "Then ",
            "name": "I see an error about GNOME Software requiring Tor to be ready",
            "line": 16,
            "match": {
              "location": "features/step_definitions/flatpak.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 589834766
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1153228635
            }
          },
          {
            "keyword": "And ",
            "name": "process \"gnome-software\" is not running",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 36415479
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39763854
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11935383107
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is running within 10 seconds",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:869"
            },
            "result": {
              "status": "passed",
              "duration": 70784919
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 622100533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 571717226
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30775747
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;installing,-starting-and-uninstalling-a-flatpak",
        "keyword": "Scenario",
        "name": "Installing, starting and uninstalling a Flatpak",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1215357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5321638
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 138211177739
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 26,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1932764123
            }
          },
          {
            "keyword": "And ",
            "name": "I install Signal Desktop using GNOME Software",
            "line": 27,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 7962914936
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is installed after at most 600 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 48324704489
            }
          },
          {
            "keyword": "When ",
            "name": "I start the org.signal.Signal Flatpak",
            "line": 29,
            "match": {
              "location": "features/step_definitions/flatpak.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 63251378
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is running",
            "line": 30,
            "match": {
              "location": "features/step_definitions/flatpak.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 1267678862
            }
          },
          {
            "keyword": "Given ",
            "name": "I kill the org.signal.Signal Flatpak",
            "line": 31,
            "match": {
              "location": "features/step_definitions/flatpak.rb:77"
            },
            "result": {
              "status": "passed",
              "duration": 3396002848
            }
          },
          {
            "keyword": "And ",
            "name": "I go to the main screen of GNOME Software",
            "line": 32,
            "match": {
              "location": "features/step_definitions/flatpak.rb:45"
            },
            "result": {
              "status": "passed",
              "duration": 88012373
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall Signal Desktop using GNOME Software",
            "line": 33,
            "match": {
              "location": "features/step_definitions/flatpak.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 6412189003
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is uninstalled after at most 60 seconds",
            "line": 34,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 62830805
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 7823586984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1154810732
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44234169
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;changing-locale-after-installing-a-flatpak",
        "keyword": "Scenario",
        "name": "Changing locale after installing a Flatpak",
        "description": "",
        "line": 37,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 36
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10700
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4279012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3504750
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 38,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10348413825
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 39,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1907595788
            }
          },
          {
            "keyword": "And ",
            "name": "I install Thunderbird using GNOME Software",
            "line": 40,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 8620974837
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.mozilla.thunderbird Flatpak is installed after at most 600 seconds",
            "line": 41,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 43778762705
            }
          },
          {
            "keyword": "And ",
            "name": "the \"de\" locale is not present in the org.mozilla.thunderbird.Locale Flatpak extension",
            "line": 42,
            "match": {
              "location": "features/step_definitions/flatpak.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 360868237
            }
          },
          {
            "keyword": "Given ",
            "name": "I set Tails to boot with options \"flatpak\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 50344
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 6087118536
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33437209197
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 15020182965
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 21494834847
            }
          },
          {
            "keyword": "Given ",
            "name": "it has been 3 days since GNOME Software checked for updates",
            "line": 48,
            "match": {
              "location": "features/step_definitions/flatpak.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 106233910
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME Software thinks it is after 06:00 but before 23:00",
            "line": 49,
            "match": {
              "location": "features/step_definitions/flatpak.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 27552
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29369794
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12178540830
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"de\" locale is present in the org.mozilla.thunderbird.Locale Flatpak extension after at most 600 seconds",
            "line": 52,
            "match": {
              "location": "features/step_definitions/flatpak.rb:93"
            },
            "result": {
              "status": "passed",
              "duration": 63623595887
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 6764802386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 544830883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44505280
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3195572
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 79731556701
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 85546045
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 86255130
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 5898274119
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 944006148
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6872634
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15108
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3724590
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 34049232397
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 62623748
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 157715706
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 14949946838
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 28287279833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1038219847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23955
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18656
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2982555
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2982615
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6458242468
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34406208
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 12666665346
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 49990097
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 313090006
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 690258633
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 169718
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 29936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4224132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4072629
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6559666233
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 140242831
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2033886207
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11499179310
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 946929674
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 39941303
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 187707914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 720961643
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 79158
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11753
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2004199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1617217
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6408703939
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 170686285
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2708996
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27108821
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1758989072
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 13436875431
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 899354326
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 39524697
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 354690188
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 221339266
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842708183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 50604320
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22763
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2783955
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2030269
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6486756615
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 196631554
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 14693746
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 41881891020
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 854811567
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 214341087
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 512577140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20489270
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1389233
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1476174
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6188422459
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 2059420059
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 4098166
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 41668060200
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "passed",
              "duration": 323833489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 230694323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 899626969
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5952277
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1735727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1757459
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82330597
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:176"
            },
            "result": {
              "status": "passed",
              "duration": 15398883
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 629774763
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29004671100
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 42565331
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 280726096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 577559146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5803098
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2478945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2081304
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6237406629
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1070382114
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23567204
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 17038887861
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 39040304
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 214842776
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 537054861
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 907993
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2626250
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5198490
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6124241079
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 134707615
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3547071657
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2908277
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 47251806
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25649528
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1809648725
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4630991430
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1193066208
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 15384861135
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 14929877590
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 301736549
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1095827102
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6888006640
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 317942736
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 45270770
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 211508105
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 957049113
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35490162
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11050
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2625240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2840835
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6289495758
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 160462794
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3400131161
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 13789409
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24666015
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1611902118
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4138061663
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1262129775
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 11340345913
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 15478731238
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 344283723
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 142195999
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1093270214
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6980513148
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 328908012
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 37783132
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 271288708
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 222592925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 524409385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 90595958
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14086
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2263332
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1560471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6237229598
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1069501441
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32765749
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8170918440
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 544005
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 311185312
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 218098
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 4232417
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 237139146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 742566703
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 586917
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2043752
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6215327158
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2728882
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37160900
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1790362674
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11479840710
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 2090739578
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4844780
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 36857444
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 391278742
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 612053744
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 59609258
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2746053
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6205549324
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2639224
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25901742
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1934329768
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9781779877
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 938305651
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 10414072
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 54924025
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 417358516
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 794726476
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38249772
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2341069
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6261217596
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2497530
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28180474
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1972800615
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 28566796121
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 896382977
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4361769
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 42068167
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 414058740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1247326409
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47312832
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2468726
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6198924146
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3240928
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29481850
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1879950474
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12030261226
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1060670976
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 298092986
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 6759803
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 34336329
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 287361805
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 340174798
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 521287910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45482957
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9257
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2171653
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6171442729
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2647570
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36127440
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1877473962
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 963884791
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 18390034894
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1003452491
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 9580856
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1088345905
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 247257402
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 317864109
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 680110231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30197426
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2217117
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6376861764
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2993957
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25783971
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1743969796
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1197314422
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 29525746173
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 62897151
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1188"
            },
            "result": {
              "status": "passed",
              "duration": 316901521
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1141147388
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1103552089
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5757964953
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 4569216
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 33801951
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 63,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 360324405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 477653061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45252798
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15358
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2461934
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6251285282
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2541931
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46744591
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1736358632
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 65
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:801"
            },
            "result": {
              "status": "passed",
              "duration": 4148926244
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:939"
            },
            "result": {
              "status": "passed",
              "duration": 400389606
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 135383269
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 946241538
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42596802
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2599581
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6272145799
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3555293
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 53066138
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1994781741
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 71,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5827162613
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1590025154
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10190515505
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 9742490902
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 51731499
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:430"
            },
            "result": {
              "status": "passed",
              "duration": 145430197
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 736568099
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 77203
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 34671054
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 81,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 383159335
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842120102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32133728
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 23224
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3305278
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6394119175
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3253631
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37912273
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1930483833
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 83,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 84,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5685020845
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1641823978
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10576945813
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1195171317
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10031710743
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 22631148270
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 678690051
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 41146417
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2211276
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6257697589
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2917713
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25289159
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2332449114
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 91,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 959493140
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 21298486959
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 65741550
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1034025221
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1100158260
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 8099791064
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 310554349
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 99,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 335382438
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 875170865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36234152
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2076214
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6324006650
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3790753
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31633255
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1865172949
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:823"
            },
            "result": {
              "status": "passed",
              "duration": 1084642969
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5890428184
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6100858947
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1079371282
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 256025701
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 107,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 376754665
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 692408339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46177054
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2200746
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6287298944
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4602368
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 48047284
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1951312000
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 109,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 110,
            "match": {
              "location": "features/step_definitions/tor.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 14262805
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 111,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5956521259
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 72340454
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 2377439403
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1247164847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45412317
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13555
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2668490
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6250477948
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3007672
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 51736497
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1867329883
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 115,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 7280526
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 117,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5857654430
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1289"
            },
            "result": {
              "status": "passed",
              "duration": 1226093989
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 898519502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46628487
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2941679
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6451247815
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 349501632
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 2183867087
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3022985118
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 197575797
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1405 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7888051939
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 600899870
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20608
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2396051
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6231431239
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 315026964
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1400 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2910920080
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1439169188
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2642609306
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 390385940
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1400 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5624606275
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 601882723
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20558
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9569
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2056067
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6286660242
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 316599129
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 5235451137
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1404 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2786142937
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2665520662
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3237723551
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 649710992
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1404 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5449121214
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 154979442
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 545858770
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2920380791
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 470834659
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1404 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5463199685
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 961505194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 322142
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2177452
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6641444930
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 315830581
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 28970201428
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1406 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2509847240
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1050832442
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2920342279
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 502596065
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1406 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5541231296
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 3624782563
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 368471687
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2595177080
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 433997685
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1406 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5857618774
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 904201294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 382113
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2149993
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6232175108
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 279901046
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 13118750240
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 1426008739
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2264545847
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 6884716
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1404 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20729085828
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3481205337
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20328
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8516
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2221638
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 220503760564
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 308100557
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 10120880538
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4514043
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1402 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 21080268781
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3667648239
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28231486
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13284
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1480942
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6278730857
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 29224127
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2757356991
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2215154850
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8681003438
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 19302516
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 705836746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1226689
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9668
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2097233
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6177030266
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 25886440
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8774500388
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 8856965
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2183418816
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:179"
            },
            "result": {
              "status": "passed",
              "duration": 50761071
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 127800472
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 14823377
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 754934783
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 411808
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9979
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2653471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6264886040
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 26582238
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2861497479
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2186228258
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 96373450244
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 16029683374
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2617721397
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 46728303
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 770569802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 114155501
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15108
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2389819
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6259477460
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 32344746
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2210364117
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 100700731358
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 15742317061
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2522987967
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 41731809
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 899696775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 129452611
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2420406
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7934771650
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 55132449
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 28308649
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2829201231
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2199321555
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired\nLast ignored exception was: Dogtail::Failure: The Dogtail init script raised: SearchError: descendant of [application | tails-installer]: child with name='Information' roleName='alert'\nSTDOUT:\n\nSTDERR:\n\n\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:339:in `initialize'\n./features/support/helpers/dogtail.rb:268:in `new'\n./features/support/helpers/dogtail.rb:268:in `call_tree_api_method'\n./features/support/helpers/dogtail.rb:276:in `child'\n./features/step_definitions/usb.rb:271:in `block (2 levels) in <top (required)>'\n./features/support/helpers/misc_helpers.rb:78:in `block (2 levels) in try_for'\n<internal:kernel>:187:in `loop'\n./features/support/helpers/misc_helpers.rb:66:in `block in try_for'\n./features/support/helpers/misc_helpers.rb:65:in `try_for'\n./features/step_definitions/usb.rb:269:in `block in <top (required)>' (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/usb.rb:269:in `/^I (install|reinstall|upgrade) Tails( with Persistent Storage)? (?:to|on) USB drive \"([^\"]+)\" by cloning$/'\nfeatures/usb_install.feature:50:in `And I install Tails with Persistent Storage to USB drive \"install\" by cloning'",
              "duration": 911962707732
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:619"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage' (at time 00:57:51)",
              "",
              "Boot log: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/00:57:51_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/00:57:51_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.png",
              "",
              "Video: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/00:57:51_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.mkv",
              "",
              "Systemd journal: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/00:57:51_Installing_Tails_with_Tails_Installer_to_a_used_USB_drive,_cloning_the_Persistent_Storage.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 4928620278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 127822111
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2338693
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7644789548
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 34303048
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2198506470
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 111687163066
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 17598295462
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2530020478
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 42300929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 472358411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 111099090
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13725
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2470639
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7661685737
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6463239797
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 698748096
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2199389805
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 95769692504
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 15757377875
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2621014340
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 56076425
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 993437900
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 113183926
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16412
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2344705
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8071818248
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 239334249
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 17478272
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 57218710919
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 228461567
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1859228679
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 34442854
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 471787932
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5325064
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1435227
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6180778380
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 22222366888
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 34039530
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2180646181
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 28660183597
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1360390486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 116607357
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11662
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2611621
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 93239491
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 56277413061
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 208570327
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1460"
            },
            "result": {
              "status": "passed",
              "duration": 123257361
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1468"
            },
            "result": {
              "status": "passed",
              "duration": 148820530
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1477"
            },
            "result": {
              "status": "passed",
              "duration": 80737963
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1505"
            },
            "result": {
              "status": "passed",
              "duration": 49606226
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1522"
            },
            "result": {
              "status": "passed",
              "duration": 65499639
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1539"
            },
            "result": {
              "status": "passed",
              "duration": 68818481
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 512349336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6093926
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-am-warned-i-can-not-use-additional-software-when-i-start-tails-from-a-dvd-and-install-a-package",
        "keyword": "Scenario",
        "name": "I am warned I can not use Additional Software when I start Tails from a DVD and install a package",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 13
          },
          {
            "name": "@fragile",
            "line": 13
          },
          {
            "name": "@doc",
            "line": 13
          }
        ],
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 8
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 9
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 10
          },
          {
            "value": "#18852",
            "line": 12
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2396760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1762488
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 74954674173
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 16,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 35384031857
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 17,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3527456378
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified I can not use Additional Software for \"popularity-contest\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 3096310914
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software documentation from the notification",
            "line": 19,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 8698806859
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 747521809
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1306942141
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2639854
            }
          }
        ]
      },
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9008
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2263563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1447539
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:264"
            },
            "result": {
              "status": "passed",
              "duration": 44031039114
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 35248969624
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3429837953
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 2985684181
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 14008087287
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 569802680
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3941065013
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32826528476
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 18555190979
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7240382621
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10119370214
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1373339560
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 462383494
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been installed",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 122559203
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 675283912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 629720372
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 39394584
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1564398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5803725
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 94127299
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 62649192987
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 34504595720
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3387892097
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 2115240565
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 33775222
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 683583211
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 752002597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19803129
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1599063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1874497
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 70655486
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 93047328529
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3147653693
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2476165495
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 340264872
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11597905327
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 20866695749
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 7198127321
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2451908767
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 577695547
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3120124550
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2278526858
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 559302677
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9395950588
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3011415408
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 705377954
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3131151621
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1461267812
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 474803967
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 229630887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 559194708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 34539419
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17353
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2135033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2080211
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73603077
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 72919637840
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4788813
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 4987100571
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 3993526313
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 504534156
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2528116715
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 31488312499
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10540459175
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4543916
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1703"
            },
            "result": {
              "status": "passed",
              "duration": 46770880
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7634700233
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10134942019
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 33498514
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 28387750
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34588157
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11927508376
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 70170207
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1281083942
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 2421754945
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 17418758119
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32486007540
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10803043902
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4581355
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7486425531
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10160843102
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 29459850
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28940331
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 15541269898
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 54830341
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 44033173
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 295693550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 738516893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13340353
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1361369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1601387
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 98966136
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 31528458439
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10938648381
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 40643410
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7079368252
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 8345084318
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 5384913954
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 308230845
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 233365252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 809127378
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40403563
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17673
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2772592
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 86128541
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19218406
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1019790747
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12927967632
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 41993070155
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1820453183
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 253969473
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 37480491
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 41965876
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 145252982
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 157880064
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3532225920
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 14195808
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1595695
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 81593352
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 46551447434
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 176489426
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 22840651910
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6277918675
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 539320712
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3928797270
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 441166716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5688730
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12193
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1719908
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 88831467
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 57380519004
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 153717281
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 6504563836
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 946660076
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 142357021
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 175899145
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1502785918
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6133142863
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2706417611
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots? (tails/tails#10330)",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 11133979684
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 398289339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5578977
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1679473
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8078533810
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9969685707
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 656995941
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2185568707
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 90371292824
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 17834556972
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 107442367
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 124018285
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1699882857
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17934
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7895
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2349452
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82264062
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 59626655470
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 1025843139
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 157680163
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1846055696
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1128"
            },
            "result": {
              "status": "passed",
              "duration": 854557510
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1446981204
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 595635416
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 58607497
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1872312
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7990870549
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 51442684
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 276517964
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1476"
            },
            "result": {
              "status": "passed",
              "duration": 46566598
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 175220098
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 249064757
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23968809
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 13152830941
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 289098352
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 3890163830
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5434465290
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60455058790
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5307720
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7307183881
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 181009721
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 30679064
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1618"
            },
            "result": {
              "status": "passed",
              "duration": 75337995
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 149947502
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36789743
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10215298637
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 300887474
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 3493370542
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2514988072
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 58358545415
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5425119
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7385530399
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 284094987
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 43829343
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1618"
            },
            "result": {
              "status": "passed",
              "duration": 85176619
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 170528214
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31610493
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10213408178
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1420"
            },
            "result": {
              "status": "passed",
              "duration": 69584915
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 3114578617
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 282413553
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 961562309
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9027849
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1464922
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7900892307
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 301505894
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1476"
            },
            "result": {
              "status": "passed",
              "duration": 43091007
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 30680908
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 22783
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35313170
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10070924306
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 1903226539
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 839523771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19948
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2521734
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 37074515603
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 116457057
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 3869761038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 238039582
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15169
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8396
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2397862
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6206644431
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 323561754
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 14275228281
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2884829069
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 241636060
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 3870459340
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1409 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 756836837
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3441693881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20338
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2113924
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6324022379
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 286548754
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 5231779015
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2564895969
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 61754872
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2990375794
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 198143200
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 4110837583
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1403 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 737827755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3499490185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 491128
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2079378
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6230153592
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 297313915
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 28253308737
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 970710695
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 41969527
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2664543703
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 150377071
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 3276944335
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1410 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 738262405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3376383712
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 488591
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13685
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2091140
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8018680797
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 294590214
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11729737069
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3018112443
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 287264550
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 9169557988
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1407 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 716077793
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 90298637216
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 277494423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16581
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11451
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2536221
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79803051
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 30073129028
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cdn-fastly.deb.debian.org,deb.tails.net,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 37847629
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 34389619
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 34304049
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 108432293
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 6825172
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 780537069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8063371
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1625572
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 34333139232
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5195253217
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 637765156
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8339144070
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 7769603
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2511145454
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 174499729
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2183303043
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 275979189
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3124376769
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 119771891
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3126957773
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2964536244
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 11738245187
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 109838630
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2680803262
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2997530741
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 912920409
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 107598864
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11892
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 107861
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 49324359
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 74226330
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38452
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 36589
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30875845
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3547878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 707550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4708
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9267
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75671
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21961407
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51670666
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41588
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 68779
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 41466
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28483703
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 161079
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 116036
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 61413
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 82594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 715334
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4598
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9017
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 72766
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23794436
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8859316
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71818349
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 40125
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 73436
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20958887
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6082446
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23194
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5387951
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15009
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45123573
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 152445
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 962374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4799
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 81763
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22054070
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8619378
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71527065
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 43753
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 76112
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17074850
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45250409
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 131875
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46982360
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 125194
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47077257
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 117900
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 961223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6943
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12122
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 96109
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 38346932
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19270346
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 1903771
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2134532
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 37540
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46505491
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 170029
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 830088
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4507
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79519
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29690263
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19128433
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 1827579
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1873696
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 58219
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26707499
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30236
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 848564
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7183
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75060
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22668445
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8677176
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19370672
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 101199
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2123842
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18345212
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5381889
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30707
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5316297
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12594
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48733947
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 205513
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1248640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7184
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 69097
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22748394
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 10240643
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19793724
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 71825
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2070072
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17467875
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46608443
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 155961
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 65151353
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 153546
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48611748
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 158976
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1036392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7304
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 77605
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 39327271
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52738648
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38151
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5459644
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 33644
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29899684
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 196346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 4173585
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22402
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 109253
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 44397027
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51704608
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39794
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4750692
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 66314
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 122179
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28185216
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 153276
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 64481
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 58440
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 72405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 854315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4548
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8998
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 70981
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 28492088
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51458109
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 43902
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4552363
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 64020
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17505394
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5335432
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22031
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5202313
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13394
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44873146
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 169637
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1092408
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6643
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 93173
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 28895600
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51450556
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 49953
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4629427
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 78707
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15988055
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45455333
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 124282
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46445939
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 121266
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44873937
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 114133
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1158541
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5691
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9487
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 86001
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24780265
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51181934
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45463
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 38873
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28450541
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 150000
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 77405
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 63880
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 59020
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 3484019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8256
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10951
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79559
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24578328
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51255783
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 36508
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 68277
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 24976
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51502583
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 176490
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71904
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 46767
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 59921
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 745010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4780
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10300
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 72045
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26273891
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13550808
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 83398010
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 40936
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 60874
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19875616
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5858478
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23995
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5559622
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 16681
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26344954
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 129361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1043838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6673
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9638
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 76823
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24409723
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13583559
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71867621
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39905
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 82183
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17487863
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25566751
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 131807
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25836856
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 113502
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25342452
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 101460
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 958959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5070
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 94646
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 30812156
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 54289471
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22304547
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 35155
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2969058
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48556207
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 169017
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 872357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6493
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9758
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 66816
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 38123476
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 54046087
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22338219
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 58299
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3040773
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29335181
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20177
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 862079
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5511
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 52438
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37240438
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 53348416
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22099995
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 57988
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3013030
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20374106
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6832735
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14428
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6870045
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 11903
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49435335
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 114373
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 934885
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6622
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 50695
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 43539549
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 53391235
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17469468
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 74090
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1886599
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18136281
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48961363
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 109985
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47255781
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 151785
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47457696
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 141405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 2337080
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7515
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 187770
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 33446251
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13442345
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51194187
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2415155
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 121067
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1974954
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46821220
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 239337
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 883468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5009
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10009
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 99816
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23966998
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13633431
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 50867888
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2413592
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 98323
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1993719
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27157289
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 29886
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1033517
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4800
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75389
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24553842
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13678136
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71827556
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 55564
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4549697
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 68988
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17919176
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5448624
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22312
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5293504
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12733
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25456567
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 178272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1119358
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6282
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8706
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 119353
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23825504
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13228006
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71250239
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 47199
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4512919
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 99766
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17877840
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25398047
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 159027
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26024506
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 120073
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25503123
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 116366
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 4356186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9428
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80050
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23649916
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 38572
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29666239
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 173944
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 704143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4839
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 77615
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24220901
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 62367
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 82715
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29302780
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 160780
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 77295
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63027
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 736464
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4859
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79468
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24432657
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 64921
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18289077
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7056904
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 115976
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6935407
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 80651
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6726778
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 69620
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 835108
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5180
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 71915
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23562763
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 71494
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16629020
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7414341
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23976
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6936169
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13024
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7073294
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 119082
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 829057
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4689
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8426
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 85279
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23373130
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 38021
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28395449
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 200724
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 867979
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6702
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9268
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 69730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24083955
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 64780
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28542813
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 184263
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 74300
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 752664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4979
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9387
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75430
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 25139375
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 61514
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 41307
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28542713
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 145583
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65522
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 57828
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 736654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7154
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9628
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79288
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24176208
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 34725
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28094889
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 161130
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 770749
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5760
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 70482
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23784979
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 61535
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17917473
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7490402
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 97892
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6963019
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 69560
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6839368
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 62826
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 2009188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6662
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8015
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 232674
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23481682
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 225281
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15722638
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7099092
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22691
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7318793
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14497
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6892006
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 115295
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1185180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6382
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 114193
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23363001
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 125714
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 43272
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30060924
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 166510
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 72544
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 66544
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 895911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6683
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 92623
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23718565
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 99056
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32238838
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 189764
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1759472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27892
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 49973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 229458
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 41001143
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 82022
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49457448
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 193922
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 80741
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1084845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6361
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 108754
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25663041
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 90639
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20521831
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 102882
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1873815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16551
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19606
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 310359
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 51906846
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 50816
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11139240
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 94566
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1945530
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16250
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 23883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 211496
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37085659
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 367244
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20513765
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 50835
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1152419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7914
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/celluloid.feature",
    "id": "using-celluloid",
    "keyword": "Feature",
    "name": "Using Celluloid",
    "description": "  As a Tails user\n  I want to watch local videos in Celluloid\n  And Flatpak portals should make it possible to open files in any location despite Flatpak's confinement",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2345346
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 118460826
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6505668822
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7848050373
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 42394461
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 38095573
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7400255273
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/video.mp4\" in Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1982"
            },
            "result": {
              "status": "passed",
              "duration": 5362225831
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/celluloid.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 5646585321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1173550876
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 533065
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9076
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2680469
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 126696799
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 24,
        "type": "scenario",
        "comments": [
          {
            "value": "# The next scenario is similar to the previous one, except it opens the file in another way.",
            "line": 19
          },
          {
            "value": "# Since we're dealing with desktop portals, it's not entirely obvious that",
            "line": 20
          },
          {
            "value": "# clicking on \"Open\" from within Celluloid follows the same code path as",
            "line": 21
          },
          {
            "value": "# double-clicking on a file in Files. Now we have two tests follow those",
            "line": 22
          },
          {
            "value": "# two paths.",
            "line": 23
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8064231234
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 26,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7945804141
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 41359641
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Celluloid\" via GNOME Activities Overview",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8088137978
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" in Celluloid",
            "line": 29,
            "match": {
              "location": "features/step_definitions/celluloid.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 9202998593
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 30,
            "match": {
              "location": "features/step_definitions/celluloid.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 3301846570
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1773909287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 592936
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2397142
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6193271638
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2583180
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 46210729
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9303531282
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7739362571
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 36286636
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 90200135
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 699008313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 56502057
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9788
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2319797
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6175125766
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3265132
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 49696323
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9002289117
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7857001548
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 38887939
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:974"
            },
            "result": {
              "status": "passed",
              "duration": 152758078
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 405729456
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 109105008
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 866174576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51970574
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2442175
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6305166145
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9340917377
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 11605401385
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 789363768
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 641784721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19708
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3218484
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9494301171
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9483885461
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9075171228
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 518817935
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 704410491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20327
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2240318
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1653935
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6455989074
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 9836554682
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 221708554
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 681712461
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 267405725
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 694047520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 52959
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 28613
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2096251
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6286664112
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4207229475
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 914111245
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 3939413966
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 779434757
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24666
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7854
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2280343
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6161724547
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 72842535
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4268165818
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 902025522
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4306032880
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 950674489
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23474
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2519029
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7549650478
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 55046551
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 49246330
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3952102004
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 878226881
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4274023934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 911824822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22462
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2219000
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6250326965
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000135517
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 44117133
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1304"
            },
            "result": {
              "status": "passed",
              "duration": 120772281
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 910564069
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1304"
            },
            "result": {
              "status": "passed",
              "duration": 123489189
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 41920194
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 639910403
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28544
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3121182
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6306499135
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 193227042
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 231112991
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 944213768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23063
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2702671
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7534603181
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35525327
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8608356652
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7767945603
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9072082991
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1673664213
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7600555056
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1274"
            },
            "result": {
              "status": "passed",
              "duration": 295342997
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7870139055
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1286"
            },
            "result": {
              "status": "passed",
              "duration": 2252657027
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7641514204
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 13657998058
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9668248443
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1698491706
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9981057064
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1777088051
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7512642083
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1274"
            },
            "result": {
              "status": "passed",
              "duration": 2004798258
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8179162572
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1940"
            },
            "result": {
              "status": "passed",
              "duration": 3713251834
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 6093828210
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8283806333
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 2756790770
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9737708006
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1682625239
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8523577120
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 3095397281
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7674317264
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 2265577248
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 771357953
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22131
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2903947
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78781511
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 22021
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 662436661
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 22347830152
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1140000942
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 873790851
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38413894
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1599464
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 74056188
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 33563
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 608168573
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 20344849567
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1904021308
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 699139892
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5559429
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10590
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1552956
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76426524
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 32500
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 600953779
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 21622703255
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1083919552
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 769832411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5929621
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1743763
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 81033778
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7778401830
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1224653125
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 642433589
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 16439566105
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 807476045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21711
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7414
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2174767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72807684
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7786117102
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1294424106
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 622591268
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 16339392194
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 868221480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20256
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11362
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2246420
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 71571298
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7431449327
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1346148225
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 705321452
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 16482742590
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 990901781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21100
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9087
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2505012
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8456501166
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 216761855
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 238970030
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 580158965
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 35526513844
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7958104329
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6391497430
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 105971962
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4084609
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 652543640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31273181
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1493486
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8416657342
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 205313264
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 245124221
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 587927074
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 34312358398
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8034468535
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7078543833
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 106464901
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6200566
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 664092770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19833874
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1455986
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76159184
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 30527
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18399048
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1018347233
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13065011513
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63285498806
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 211513286
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 38362233
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6917221116
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7540156370
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 114169570
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1209630261
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1183171629
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4245238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 627709769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 118814494
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1641994
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85596575
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 26780
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18031722
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1018802217
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12972067857
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 49587096888
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 208940202
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 49527774
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 27257413
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 163442075
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5079184
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 523992010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 143508103
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14317
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1591809
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72449778
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 29966
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 35893712
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1025162162
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13067076622
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 39547218622
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 189495783
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 51798438
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 25109356
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 172545976
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4545769
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 519537451
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 115201212
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1767888
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 81182007
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 27721
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19041678
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1018199064
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12691691085
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 56784078262
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 191612960
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 60029031
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 26112266
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 140072093
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4463646
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 645992177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 117148091
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17922
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1912867
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83547299
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 28354
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 658931153
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 23491196261
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 12118431240
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 929561903
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5762358
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13665
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1433524
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6390052461
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1370922048
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 867947505
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25497
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2246121
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6153842574
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 929235715
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 590961393
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25246
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2306863
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7006843621
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26138025552
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 41583113
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 16888426496
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 740209589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24375
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3026455
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6290318258
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24996356779
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 61072423
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 16971236217
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 886169519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23133
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8295
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2465879
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6231518221
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24845946769
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 36325269
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 13951607500
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 731482579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22522
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2175107
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6259368771
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25736119625
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 44226377
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 16998111172
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 717605292
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22001
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8035
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2406719
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6212784977
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24450279733
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 33092288
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 13983852466
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 567264920
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22923
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2195976
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6299673531
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6703312898
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24532383071
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 82233923
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 111651987
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28584239
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10166516466
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5275856816
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5143149248
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 20891866942
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 66272118
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8402759507
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4744937125
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5164057817
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3638037075
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 292712846
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 732356769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23314
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2279493
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6405905871
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6771272065
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24074689786
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 91334625
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 84893220
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30678193
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10944349737
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4530485313
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5133273650
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51079039103
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 57903377
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7885112494
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4630284195
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5195976947
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3422687607
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 299502402
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 576310025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20829
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2447266
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6255032336
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6810847562
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10304877948
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 89305952
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 55901684
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 40427098
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12277930183
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4690301410
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5149905068
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50902748586
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 64800082
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7519116829
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 3579032699
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5147666852
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3189809110
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 285312032
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 890247849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20519
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2519059
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 17931926198
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6799012810
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 23913196002
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 66531243
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 54009875
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23975792
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11343055202
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4742640674
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5158561036
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50748310587
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 74712435
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7729198511
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5087968827
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161321716
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3468215151
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 280821877
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 639951936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21148
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2233285
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6331294557
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6820722439
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26064221601
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 103522791
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 56867294
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35461434
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11479388402
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4379764867
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161672527
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50309024047
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 58476234
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7673162549
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4489175188
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5194728495
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3579860842
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 313392588
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 700348320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21691
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12333
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2257793
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6294422074
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6673097954
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24509181009
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 70404673
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 91999521
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35753229
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12204372096
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4415788827
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5173399059
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50721217019
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 117563353
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8014183187
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4691989046
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5178376123
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3325984983
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 321083247
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 860549519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25978
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13305
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2252912
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6415933634
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6889759712
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25220179043
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 54964902
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 57223526
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 40509641
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10971159398
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4538558531
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5167919485
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51415665767
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 46310069
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7749092798
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4694602952
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5191580713
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3313189599
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 283717113
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 722744860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28363
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2527394
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6287966592
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6819503369
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25187761345
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 65213645
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 80129218
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28145341
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10465780058
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5122296230
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5120407837
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50814621194
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 65201002
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8899103792
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4838610373
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5194563311
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3587341084
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 311620264
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891108451
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22913
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9930
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2499192
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6277001324
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6794707157
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25569543356
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 97616248
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 74344929
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34327534
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10893814366
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4206123912
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5238079784
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50542785569
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 80477978
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7815644588
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5079143867
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5197112925
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3213413103
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 284435055
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 825363521
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22153
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2126032
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6284647457
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6729842087
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25099481796
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 86842902
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 60294791
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30214430
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11960231412
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4490486045
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5181798448
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51592077303
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 63700995
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8231114369
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4773980388
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5181755858
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3373643131
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 274969185
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842296983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25106
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2253995
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6244273780
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6810473463
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26434301135
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 69323862
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 63131112
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32551902
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12056866428
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4392877874
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5158868471
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51138884941
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 56954760
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7530168152
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4432231417
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5164650933
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3479130765
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 344629226
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 806994134
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20969
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12233
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2606812
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6347575226
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6747514303
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25828592015
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 79455094
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 94182001
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 22895272
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11930405199
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4900791830
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5166807771
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50378368392
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 79642924
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8020624831
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4825935271
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5155736378
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3487085739
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 276580506
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1076022833
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20989
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2341237
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 58,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6478236631
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6938835641
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24347930860
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 68137917
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 48875059
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24980344
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12295038230
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5102016762
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5149971404
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50281876638
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 61610751
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8125042481
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4892378014
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5188762808
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3408028558
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 281188239
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 522634988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21651
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11351
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2860826
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8180314241
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4509059996
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 2077364359
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3909145724
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 35600592880
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 185632389
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 661510342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6605981
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 68,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2715804
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 69,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7883615403
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4566342781
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2435693993
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 83749059
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4440108666
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 81524410
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4050750869
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 36123493433
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 260138098
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 923647791
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6160124330
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1928"
            },
            "result": {
              "status": "passed",
              "duration": 41388503
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 589477457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26147357
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1606615
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8510239465
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 85,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 84
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 289930940
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 28556336577
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1610"
            },
            "result": {
              "status": "passed",
              "duration": 161454343
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5433925538
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 90,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 33233168083
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 321309885
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 223026794
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11783605675
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 408442299
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 100896906
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4513694144
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 2073190443
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2233534396
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 105207546
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2583981029
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 102,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 31689418984
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 589897739
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 189338832
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12161071516
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 107,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 106
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 258407400
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 915198729
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891268463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10918937
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 35517
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1903141
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6549088086
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4692211
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 8016827961
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11061226614
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24313340
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8450778239
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 44018995
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 44569412
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 163985973
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 51821360
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 51710663
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 96803471
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 590947104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38467340
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2369069
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6408728110
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3152020
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10634062743
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32287594
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12051606172
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 64534070
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 47174842
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 227726623
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 73167995
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 47949106
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 84796506
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1024321128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32516662
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2344964
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6297148588
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 6405527
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25754337
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 72643077
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11502431955
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 40418281
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 74131382
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1572662141
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 540061129
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 39494928
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8295
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2347178
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6265969842
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3146660
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29338172
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 87952602
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10665647486
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50875975
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 73228118
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1612606235
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 833536671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57202867
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2205955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6303665665
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2975961
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43639297
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 99761198
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 135567065
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11002333236
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 52667641
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 215791940
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 79896576
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1437473452
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 735364175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47139388
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2450692
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 109856882
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1660598
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 607996199
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 28986945121
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 81188058
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 101080734
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 755229791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35013129
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14667
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1586500
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76002165
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 44345209184
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 8233325085
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 738803898
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 708230860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6206165
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/needed_package_updates.feature",
    "id": "packages-are-up-to-date",
    "keyword": "Feature",
    "name": "Packages are up-to-date",
    "description": "  On Tails branches that use frozen APT sources,\n  packages we install from frozen distributions (e.g. the Linux kernel\n  installed from testing/sid),\n  and packages forked from Debian that we install from our custom APT repository,\n  can become outdated.\n  As a Tails developer, I want to ensure we don't miss important updates.",
    "line": 3,
    "tags": [
      {
        "name": "@source",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "# This fails too loudly so let's run it on fewer branches (tails/tails#21316)",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "packages-are-up-to-date;all-packages-are-up-to-date",
        "keyword": "Scenario",
        "name": "All packages are up-to-date",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 114173
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 43331
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 13,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 4467244773
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 141795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4978
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10119
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2326380
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6497864203
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 34 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 34000141758
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 336959402
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32624965
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 8941529475
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 316924722
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6852669245
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 34160910
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 631603794
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20207
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2372315
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6311290038
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:570"
            },
            "result": {
              "status": "passed",
              "duration": 7841866719
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10519349251
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 72641349
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 63280226
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000152629
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 43181696
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1028372327
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26909
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2173916
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10440742223
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8698997349
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 610151328
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 175612190
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 745454411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22542
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8296
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2351498
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 77028007173
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 35198831539
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3500552183
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 749680565
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 742505812
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20389
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2194563
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8210379394
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 12597752647
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 170884043
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 80015319
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5373245935
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 789923911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24606
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11381
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2439640
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8415015382
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 332421352
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 104240777
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 17562481837
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 45171768
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5216373640
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 59555515421
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 142443502
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 31358221
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 783635321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32085987
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13075
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1469361
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7804564713
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:395"
            },
            "result": {
              "status": "passed",
              "duration": 4294586245
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 145543996
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:373"
            },
            "result": {
              "status": "passed",
              "duration": 4282212524
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:465"
            },
            "result": {
              "status": "passed",
              "duration": 189548865
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 2308241405
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:435"
            },
            "result": {
              "status": "passed",
              "duration": 616914465
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 8146355968
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 49158062
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1012064128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22933
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2210764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8317766821
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 328461511
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 9094433405
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1673905984
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2425669778
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8409175541
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5160081194
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 59776353204
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7400868997
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 632817849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5422073
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13425
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1593423
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7892107201
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 62983009
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 63550619
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 53074958
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2441159551
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 48053181
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 39900545
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2382417241
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 49958247
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 42817075
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 601494301
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23524
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10318
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2180918
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 20524174669
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 62817130
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 58490940
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2509840919
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1747"
            },
            "result": {
              "status": "passed",
              "duration": 2342823158
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1732"
            },
            "result": {
              "status": "passed",
              "duration": 37189057
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 636167816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23104
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2373767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7683323506
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41910844
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11718218958
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6790654391
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 883422904
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5179238671
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved? (tails/tails#10330)",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 11191494236
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 243522105
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19137
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2565075
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7569798626
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35677719
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8126848325
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:974"
            },
            "result": {
              "status": "passed",
              "duration": 145007498
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5248271147
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63433069498
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3111133
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26553981
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12073247639
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 305462239
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 74811745
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 89057665
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 562305172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 60399372
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2451072
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8345057004
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:330"
            },
            "result": {
              "status": "passed",
              "duration": 1058909333
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 12375767841
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 13933841173
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1212582829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23463
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2241400
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21640378761
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 20276288600
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 13815265874
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1634"
            },
            "result": {
              "status": "passed",
              "duration": 37821911532
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 268226108
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 276683362
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 4500978198
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 21857524470
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 114023036
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4527188529
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32551633919
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 312102380
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 225836281
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 13088258579
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 57775207
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 135881017
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6196412145
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 133884713
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 943755518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5561894
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 149430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1525806
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8261245740
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 29331205916
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5461506213
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 62530029524
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 21493169569
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 821538194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6132509
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10980
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1410281
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8303059470
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 13602951493
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 68717586
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4588561197
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8304734714
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1201"
            },
            "result": {
              "status": "passed",
              "duration": 2575148573
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 227548690
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 455473683
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25588
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8837
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2158627
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8258095888
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1092"
            },
            "result": {
              "status": "passed",
              "duration": 51671121
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5216136688
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 64070779040
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1147"
            },
            "result": {
              "status": "passed",
              "duration": 179599028
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 916560790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43498155
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1862564
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8528265598
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1774"
            },
            "result": {
              "status": "passed",
              "duration": 39352692
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1168637147
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 153,
            "match": {
              "location": "features/step_definitions/usb.rb:1780"
            },
            "result": {
              "status": "passed",
              "duration": 12898557751
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 154,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7443107729
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7363804689
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 156,
            "match": {
              "location": "features/step_definitions/usb.rb:1803"
            },
            "result": {
              "status": "passed",
              "duration": 1223929232
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:805"
            },
            "result": {
              "status": "passed",
              "duration": 7509288355
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 6756171149
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 713663175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23494
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 160,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9007
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2314406
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 161,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 135767848325
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 28876895152
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 163,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7721836481
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 494175809
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:858"
            },
            "result": {
              "status": "passed",
              "duration": 9279265533
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 722764411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23845
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9017
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3138114
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7367985123
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:733"
            },
            "result": {
              "status": "passed",
              "duration": 23950312175
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 170,
            "match": {
              "location": "features/step_definitions/usb.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 470431584
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 861075421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22031
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 172,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8646
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2308847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 173,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8579747601
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 9343451625
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 14440158419
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 45746029
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 9004355852
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 680446716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24235
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2281487
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8141443092
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 9671001774
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1215589746
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 2514604054
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1211069535
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 123631700
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 58016478
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 1266234634
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 3544164209
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 968875391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22151
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 191,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 190
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2525069
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 192,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8146939204
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1863"
            },
            "result": {
              "status": "passed",
              "duration": 55516184
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1171003300
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 11154782504
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1091101666
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 197,
            "match": {
              "location": "features/step_definitions/usb.rb:1795"
            },
            "result": {
              "status": "passed",
              "duration": 25952228
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7375747752
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7385695528
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 205,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 200
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 201
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 202
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 203
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 204
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 148380128
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 69839851
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1201627987
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1040823424
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 209,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 996045501
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 874524330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19988
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 212,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 211
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2521183
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 213,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7756864507
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 214,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 9292216358
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 215,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1306156622
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1171331668
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1898"
            },
            "result": {
              "status": "passed",
              "duration": 2374021935
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7541921520
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7165338030
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1078681100
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 221,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 842158629
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 664614283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23885
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2642668
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8482466097
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 17320393473
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 471943651
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34020448
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4686939125
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12109896865
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 787257394
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5361331
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 940092767
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 5903587456
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33121206403
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11460458873
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3032555
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6355283448
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5775952
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33036542
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4365846699
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1348475912
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1620303701
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1188036432
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5660245925
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4376714
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 989878296
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 345311274
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 955989004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44842493
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18393
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3126712
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7995349581
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 16587287602
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 385081646
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25398484
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1656254357
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10614654523
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 942709253
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6198512
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 809807317
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4663040993
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32338789684
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10348964146
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2722723
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6115947243
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5686599
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34587077
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4351656943
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1327152628
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1771440916
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:779"
            },
            "result": {
              "status": "passed",
              "duration": 1206770167
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5508932026
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1512533453
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 4627542
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 819715448
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 368305285
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 796254737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53205094
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/pidgin.feature",
    "id": "chatting-anonymously-using-pidgin",
    "keyword": "Feature",
    "name": "Chatting anonymously using Pidgin",
    "description": "  As a Tails user\n  when I chat using Pidgin\n  I should be able to persist my Pidgin configuration\n  And all Internet traffic should flow only through Tor",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "#19040",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "chatting-anonymously-using-pidgin;make-sure-pidgin's-d-bus-interface-is-blocked",
        "keyword": "Scenario",
        "name": "Make sure Pidgin's D-Bus interface is blocked",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17753
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1846413
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6448426178
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 10140352424
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 12,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1116561599
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin's D-Bus interface is not available",
            "line": 13,
            "match": {
              "location": "features/step_definitions/pidgin.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 671205280
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 755934096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25636
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;chatting-with-some-friend-over-xmpp",
        "keyword": "Scenario",
        "name": "Chatting with some friend over XMPP",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2187781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1427893
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10381228213
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 10088737615
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 19,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 888009498
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 20,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 10202161639
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 21,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 436568969
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 22,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17844136020
            }
          },
          {
            "keyword": "Given ",
            "name": "my XMPP friend goes online",
            "line": 23,
            "match": {
              "location": "features/step_definitions/pidgin.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 15515792794
            }
          },
          {
            "keyword": "When ",
            "name": "I start a conversation with my friend",
            "line": 24,
            "match": {
              "location": "features/step_definitions/pidgin.rb:170"
            },
            "result": {
              "status": "passed",
              "duration": 15987809222
            }
          },
          {
            "keyword": "And ",
            "name": "I say something to my friend",
            "line": 25,
            "match": {
              "location": "features/step_definitions/pidgin.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 16544996447
            }
          },
          {
            "keyword": "Then ",
            "name": "I receive a response from my friend",
            "line": 26,
            "match": {
              "location": "features/step_definitions/pidgin.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 15754837357
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 258526950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 984294699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1391355
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;using-a-persistent-pidgin-configuration",
        "keyword": "Scenario",
        "name": "Using a persistent Pidgin configuration",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 28
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2361225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1550902
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21397608272
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 60917014
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9145892325
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1082598486
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8425271897
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 10122665012
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 36,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 974917929
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 37,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 10687150475
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 38,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 380306717
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 39,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17772970354
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin",
            "line": 40,
            "match": {
              "location": "features/step_definitions/pidgin.rb:240"
            },
            "result": {
              "status": "passed",
              "duration": 15545928727
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of the configured Pidgin accounts",
            "line": 41,
            "match": {
              "location": "features/step_definitions/pidgin.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 8979869
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5183499441
            }
          },
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78816601
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 69414088010
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin has the expected persistent accounts configured",
            "line": 45,
            "match": {
              "location": "features/step_definitions/pidgin.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 7927618
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9782554391
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 47,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 19016794715
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 306972696
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1045066629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24350822
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16111
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 95368
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 40264
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:27"
            },
            "result": {
              "status": "passed",
              "duration": 40664411
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 118181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7143
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2494995
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78334997
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18528189
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1019440228
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12660781914
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2550078446
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61008494643
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 49069284
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2543601740
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6796987818
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1044112808
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2547930955
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 37951
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3759930411
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2554733655
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 33052
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 168377363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 183194051
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16942
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1911445
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6408366000
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 98862199
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 59414131
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 110348256
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 111885363
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 844756066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22513
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10270
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2299019
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9899330399
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception",
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 116575041
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 646241575
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21481
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8806
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2420906
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9345189489
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 4754674968
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 515996946
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18074
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3169271
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6231016730
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 40071930
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 872342576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25227
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2781739
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8385073840
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 56173144
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 689415528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22561
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2317253
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21463304539
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 20190944989
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 5120301
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1770"
            },
            "result": {
              "status": "passed",
              "duration": 50218562
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7715234757
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9673370250
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2044733935
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 867912905
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24124
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2520181
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6559024936
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 8152135
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7670330259
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1982"
            },
            "result": {
              "status": "passed",
              "duration": 5594703106
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2746129621
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1018302461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22782
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11332
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2240910
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10373814563
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2418767108
            }
          },
          {
            "keyword": "And ",
            "name": "I request a shutdown using the system menu",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 3730582693
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 6960716409
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 296361308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20268
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2171951
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9477465774
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2400120075
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 3593927948
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 37126725619
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3454836421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23244
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;the-logout-button-is-not-visible",
        "keyword": "Scenario",
        "name": "The logout button is not visible",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2552061
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9816355230
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2388751996
            }
          },
          {
            "keyword": "Then ",
            "name": "the logout button is not visible",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 3876949526
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 558359973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24877
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10049
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2563972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1473809
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9340016680
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 40913655
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 242245267
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5990333930
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 112797180
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 9138907
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 252614560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 737519737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 71854
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2244977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1588954
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9247322458
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 192734355
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 203990591
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5435122339
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1569577117
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 224346661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 791844130
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 803629
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2255287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6356597
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 75318569572
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 34997418
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 88180821042
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1760741203
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 957869129
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2274327005
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1500940497
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1063798210
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10109760323
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 331661451
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1587058719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 654493513
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7757649
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2690169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1872675
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9307548052
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 40265255
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51281533169
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1825626866
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 969545053
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 8007326505
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 207257566
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 167898250
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 15892184390
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5502149601
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1213672502
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5017868675
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:263"
            },
            "result": {
              "status": "passed",
              "duration": 347706093
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1485779842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 908488654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9319163
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3034269
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6499029912
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8777264653
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1247"
            },
            "result": {
              "status": "passed",
              "duration": 1206923914
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 196331106
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 727758292
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 1119993624
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 1915897636
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 785795118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21961
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8696
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2659059
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6267912791
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;time-syncing-works-even-if-the-user-waits-a-lot-before-connecting",
        "keyword": "Scenario",
        "name": "Time syncing works even if the user waits a lot before connecting",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 34
          },
          {
            "name": "@not_release_blocker",
            "line": 34
          },
          {
            "name": "@skip_by_default",
            "line": 34
          }
        ],
        "comments": [
          {
            "value": "# # this is not great, but it's the current status",
            "line": 17
          },
          {
            "value": "# Scenario: switching to a network with no Internet doesn't yield any error message",
            "line": 18
          },
          {
            "value": "#     Given the network is plugged",
            "line": 19
          },
          {
            "value": "#     And Tor is ready",
            "line": 20
          },
          {
            "value": "#     And I close \"Tor Connection\"",
            "line": 21
          },
          {
            "value": "#     When the network is unplugged",
            "line": 22
          },
          {
            "value": "#     And the Tor network and default bridges are blocked",
            "line": 23
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 24
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 25
          },
          {
            "value": "# Scenario: Close Tor Connection and open again",
            "line": 27
          },
          {
            "value": "#     Given Tor is ready",
            "line": 28
          },
          {
            "value": "#     When I close \"Tor Connection\"",
            "line": 29
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 30
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 31
          },
          {
            "value": "# regression test for #18868",
            "line": 33
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43283156
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 720 seconds",
            "line": 37,
            "output": [
              "Slept for 720 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 720000158795
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 7956154919
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 40501403
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 611356463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20529
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8616
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2975098
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6237324247
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41941398
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1866013270
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:556"
            },
            "result": {
              "status": "passed",
              "duration": 3776931487
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1203539637
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:899"
            },
            "result": {
              "status": "passed",
              "duration": 80019272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 953396251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23564
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7905
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2910739
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6208581413
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 933633554
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33997685
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1125078951
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 728817010
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1345495007
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1091158040
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 26265418926
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:474"
            },
            "result": {
              "status": "passed",
              "duration": 10276524553
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 68962141
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 4827289978
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:471"
            },
            "result": {
              "status": "passed",
              "duration": 4433572122
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 121001241
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 891238409
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 34973304
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1133515194
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4631899232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 485628987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 712278
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2601091
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10000267881
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 38227140
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 145953499
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:145"
            },
            "result": {
              "status": "passed",
              "duration": 40302992
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 65561016
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 859300201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24685
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2614957
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9263514427
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3374513
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6128164376
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 3789535742
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 360494166
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 169403480
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1032282916
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47884681
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2933210
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9363904415
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3569227
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 123753898
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 134590017
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 107399129
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 906662586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30021347
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3095203
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9410634842
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3158642
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 106917482
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 114980416
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 102040836
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 904811375
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43846792
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2926027
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9212036174
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3540542
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 94576969
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4063169644
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 105682818
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 662261904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40966901
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2617290
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2176529
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9380186470
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 1209748593
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 51547
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 80162144
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 216573950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 755321902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 73658
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2659459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1838068
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9228141741
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 5312547942
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 41316
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 76180439
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 243235329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 803486183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 590932
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 59,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10940
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3072891
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 60,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6270573026
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 4995686
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 40517842
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9971276595
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 4221603
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 834121137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20137
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2721434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1601957
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9182225757
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 42438324
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:385"
            },
            "result": {
              "status": "passed",
              "duration": 92217358
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 10008284416
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 224451303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 944901402
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 69490
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2679347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1854768
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9202467350
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 38458557
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:392"
            },
            "result": {
              "status": "passed",
              "duration": 1194214062
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 7523794
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 238341663
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 981255876
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 74008
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2702472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1590041
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9372970820
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 31177685
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:399"
            },
            "result": {
              "status": "passed",
              "duration": 31350001195
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 7241175
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 250365630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1041910054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 84778
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3625821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6809540
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9246632756
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 39800615
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8150274480
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 6739305178
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 232583456
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 61358271
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 354039707
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1144716953
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 277659
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3962901
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9310829852
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1331"
            },
            "result": {
              "status": "passed",
              "duration": 1018566900
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1888742
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7488167673
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1400"
            },
            "result": {
              "status": "passed",
              "duration": 3714142601
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:377"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/browser.rb:384:in `/^the (Tor|Unsafe) Browser shows the \"([^\"]+)\" error$/'\nfeatures/torified_browsing.feature:13:in `Then the Tor Browser shows the \"Unable to connect\" error'",
              "duration": 60000361942
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1404"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'The Tor Browser cannot access the LAN' (at time 03:40:31)",
              "",
              "Boot log: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/03:40:31_The_Tor_Browser_cannot_access_the_LAN.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/03:40:31_The_Tor_Browser_cannot_access_the_LAN.png",
              "",
              "Video: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/03:40:31_The_Tor_Browser_cannot_access_the_LAN.mkv",
              "",
              "Systemd journal: https://jenkins.tails.net/job/test_Tails_ISO_devel/4680/artifact/build-artifacts/03:40:31_The_Tor_Browser_cannot_access_the_LAN.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 5056143685
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53615157
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3582352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3446608
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9257602434
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 83070785
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14282210691
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7393506636
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 4307195047
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:641"
            },
            "result": {
              "status": "passed",
              "duration": 2978137403
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 219762179
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 685295358
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 84718
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2586264
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1912877
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9134305902
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7320200743
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 11201202689
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 453084878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 257622575
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 820138882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 191597
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2613705
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1864125
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9271978604
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7154857011
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:401"
            },
            "result": {
              "status": "passed",
              "duration": 74313635198
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 606435107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1090528004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2889510
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2855134
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1785010
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9139717029
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7165583074
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:420"
            },
            "result": {
              "status": "passed",
              "duration": 6829901008
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 242899400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 788950411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 76914
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13094
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2675290
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9286186530
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 48314615
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 40290729
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 34208225
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 48805342
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 41243065
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 36640511
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 56483050
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1420"
            },
            "result": {
              "status": "passed",
              "duration": 59627445
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7130830745
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6819000538
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 282486897
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 40373063
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4244645565
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 277725326
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3761415166
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 274135319
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3718479764
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 276573177
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3565590540
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 277080093
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 856491066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22741
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11371
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2575243
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9466689866
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7131503276
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:307"
            },
            "result": {
              "status": "passed",
              "duration": 459106469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 624620785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20117
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2821162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5578065
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9182226059
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7113370607
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 7177163388
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 347798409
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:673"
            },
            "result": {
              "status": "passed",
              "duration": 56199453
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:667"
            },
            "result": {
              "status": "passed",
              "duration": 3149634984
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 635216569
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:673"
            },
            "result": {
              "status": "passed",
              "duration": 58730955
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 289017421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 988924030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 288488
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2538666
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9311269656
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 6790098002
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 7066872035
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 291255787
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:483"
            },
            "result": {
              "status": "passed",
              "duration": 1297746744
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 910061403
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20509
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2652629
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9327573937
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7214885283
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6589790105
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:395"
            },
            "result": {
              "status": "passed",
              "duration": 122819503
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6370660400
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:389"
            },
            "result": {
              "status": "passed",
              "duration": 152152933
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 874145961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20367
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8415
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2698694
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8274218385
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 22113207
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9178102628
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 39321457
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7218841028
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 13590552538
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9071378003
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 9376508170
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 46499144
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 7197526347
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 577075506
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:641"
            },
            "result": {
              "status": "passed",
              "duration": 8926846869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 598775642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20358
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2897574
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6215056952
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 48923165
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 17566518363
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 10035814491
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6741073307
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 491813217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23082
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2853564
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6171129515
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 62180705
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 15912841208
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9959973325
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6864458257
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 695217716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19287
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7915
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3602590
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6194691285
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 43641463
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 15668983128
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 10014447499
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6853915097
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 925756042
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20859
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3399732
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6183714025
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 41737726
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 15784051130
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 10169586697
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6733591963
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 768549848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19656
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2861657
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6109700745
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 65711996
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14799344267
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 10288756258
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6843916244
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 584217721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20348
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9378
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2733208
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7508009104
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7443235935
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 247688325
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 228710846
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1406520625
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 12718774930
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:624"
            },
            "result": {
              "status": "passed",
              "duration": 8208340497
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 5748500709
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32136812482
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12433103614
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6773369453
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8078944379
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7454828160
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 458538735
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1039713533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6096962
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1561212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1584976
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9268616455
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5415204685
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 151591628
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 235042281
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 790095486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 196095
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 33231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 12489907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7251735
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9274143093
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 114259095
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@git.tails.net:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 55992176857
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 128008499
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 258719597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 892816851
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 83055
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2769667
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1660026
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9282292219
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 247536551
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 67837
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 36348
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 222945984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 932892850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67646
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2805252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1662481
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9497841356
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 168595842
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 41749
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 21681
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 246928846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 756893671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 70101
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2683416
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1868093
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9359054885
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;transparent-proxying-through-tor",
        "keyword": "Scenario",
        "name": "Transparent proxying through Tor",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9460665769
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 8.8.8.8 on port 53",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 380116163
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified TCP connection succeeds",
            "line": 20,
            "match": {
              "location": "features/step_definitions/tor.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 53861
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 280423139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 615531155
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 81031
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6619807
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7218636535
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 22462066
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10198224700
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8083121003
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 40904672
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 724574390
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 13714729774
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 980256695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19486
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2920767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6497077982
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 24810174
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11113229376
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8015946790
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 34265539
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1986"
            },
            "result": {
              "status": "passed",
              "duration": 1129465053
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 10529508233
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1137652835
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22282
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2711347
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6348489669
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:587"
            },
            "result": {
              "status": "passed",
              "duration": 7837130248
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11418027205
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39927390
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7513418458
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 74092853
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 797056893
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 651360021
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22944
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2964840
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9267114644
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1331"
            },
            "result": {
              "status": "passed",
              "duration": 1024130472
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6225261594
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1400"
            },
            "result": {
              "status": "passed",
              "duration": 3590494749
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 147471512
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 885153804
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 499602
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2893779
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9225168751
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6546125804
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:325"
            },
            "result": {
              "status": "passed",
              "duration": 136563076
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 310686718
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 369187728
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3966668788
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 4039861831
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:307"
            },
            "result": {
              "status": "passed",
              "duration": 399746353
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 728641932
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22242
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2835148
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9172004722
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6285949825
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 3922499447
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 414950461
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 46748372
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 875920824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20358
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2640324
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9195836937
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6198063970
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 121372731
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 597682039
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:317"
            },
            "result": {
              "status": "passed",
              "duration": 69840467
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 963543962
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21391
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2782821
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9209115218
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6244997547
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000195141
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 48222820
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1087539425
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 892314223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 65321
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3111493
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9546447102
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 115319040
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6032463451
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 3475764289
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:377"
            },
            "result": {
              "status": "passed",
              "duration": 123935539
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 853673103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20909
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9237
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2752594
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1811959
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9147488810
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3454893
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 18394117
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 5085335
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6557594898
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 120000136404
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 329108354
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 228217813
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 895379765
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37708450
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14226
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2774263
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9290028857
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:154"
            },
            "result": {
              "status": "passed",
              "duration": 23617330
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000148759
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 71765971
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3335331412
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1201824278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22081
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8544
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2786046
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6441227730
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 9549090834
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1159163342
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 4549665541
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1805459668
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 277004455
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1210300837
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 74719901
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 598023061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 425012
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3602369
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6230588033
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17481797698
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1310754152
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5419390143
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1817075147
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 310597468
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1211186649
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 82682278
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 768835875
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 440189
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2963829
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6222999834
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8113930042
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 6054409259
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1881123314
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 249151408
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1206956687
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 78265170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 886886518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 592955
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9047
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3660899
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6213090000
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24339738730
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 8219965995
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1716800248
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 103840603
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1305840492
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 67013957
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 701952161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10082956
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14165
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2611030
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6265373806
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 16949139577
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1488041162
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 9121023104
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1690090006
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 106522530
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1390088442
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 79610019
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 599149785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 429201
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3986245
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6318911892
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17316978259
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1226918660
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 7387589257
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1670842715
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 110971428
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1212598881
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 112067623
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 752292352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 373627
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2786597
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6182304007
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 23917659384
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 18033674020
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1821687420
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 249131507
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1186166853
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 84648153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 678811025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9611534
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11011
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3286851
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6185131670
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24192818702
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16158838877
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1681686318
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 121517308
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1235926960
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 93262380
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 543411155
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28199634
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13094
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3039708
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6389733026
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7920293988
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16117614439
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1866306074
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 253656779
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1246756209
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 85131824
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 811604224
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 597114
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9097
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2628562
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3960186
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 81398432
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 23082
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 621410775
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29920910426
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 101031187
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6075911402
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8282659232
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24484105
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4175229396
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 31231417691
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 782796924
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 6257349173
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 362657943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842609500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15650319
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2104565
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80459643
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 24877
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 718382266
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29220878014
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 143783853
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 5795038114
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8170394550
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27205811
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4660497783
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4247796742
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 116076756
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 440290319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 55425725
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2685409
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6240694330
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1837"
            },
            "result": {
              "status": "passed",
              "duration": 74927799
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 787548043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21541
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2810091
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6201459312
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1832"
            },
            "result": {
              "status": "passed",
              "duration": 617742305
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 827223902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25437
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2896412
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6189714867
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8366317016
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2032645674
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 869598446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22372
            }
          }
        ]
      }
    ]
  }
]