From 5b4a8db4d9ae791a4d2a1f205806ef95c3efc853 Mon Sep 17 00:00:00 2001 From: Adrian Gierakowski Date: Mon, 10 May 2021 14:30:05 +0100 Subject: [PATCH] build-support/docker: customisable layering strategy Allow customisation of the algorithm used to convert nix references graph (created from docker image contents) to docker layers. A collection of building blocks (python functions) is provided, which use can assembled into a processing pipeline by specifying a list of operations (and their initial arguments) via a nix list. Nix references graph if first converted into a python igraph.Graph object (with each vertex representing a nix path), which is then fed into the user defined pipeline. Each stage in the pipeline represents a function call, with initial arguments specified by the user in nix, and the last argument being the result of the previous stage in the pipeline (or the initial Graph object). Each step of the pipeline is expected to produce a data structure consisting of arbitrarily nested lists/dicts with Graph objects (representing docker layers) at it's leafs. The result of the last stage in the pipeline is recursively flattened (with each dict converted into list of values), until a flat list of Graphs remains. This is then output as a json array of arrays (each Graph converted into an array of paths). This functionality is made available via new `layeringPipeline` argument to the `streamLayeredImage`/`buildLayeredImage` functions. The default value of the argument has been chosen to to preserve current layering behaviour. Co-authored-by: Sandro --- pkgs/build-support/docker/default.nix | 93 +- pkgs/build-support/docker/make-layers.nix | 47 + .../popularity-contest-layering-pipeline.nix | 34 + .../fl/flattenReferencesGraph/dev-shell.nix | 54 + .../fl/flattenReferencesGraph/helpers.nix | 36 + .../fl/flattenReferencesGraph/package.nix | 32 + .../fl/flattenReferencesGraph/src/.flake8 | 4 + .../fl/flattenReferencesGraph/src/.gitignore | 1 + .../src/flatten_references_graph/__init__.py | 0 .../src/flatten_references_graph/__main__.py | 48 + .../flatten_references_graph/__main___test.py | 52 + .../fake-references-graph.json | 31 + ...-references-graph-main-input-no-paths.json | 23 + .../flatten-references-graph-main-input.json | 36 + .../real-references-graph.json | 4402 +++++++++++++++++ .../flatten_references_graph.py | 45 + .../flatten_references_graph_test.py | 121 + .../src/flatten_references_graph/lib.py | 329 ++ .../src/flatten_references_graph/lib_test.py | 199 + .../src/flatten_references_graph/pipe.py | 80 + .../src/flatten_references_graph/pipe_test.py | 153 + .../popularity_contest.py | 398 ++ .../popularity_contest_test.py | 335 ++ .../flatten_references_graph/split_paths.py | 227 + .../split_paths_test.py | 184 + .../flatten_references_graph/subcomponent.py | 67 + .../subcomponent_test.py | 219 + .../flatten_references_graph/test_helpers.py | 37 + .../fl/flattenReferencesGraph/src/setup.py | 17 + pkgs/top-level/all-packages.nix | 2 + 30 files changed, 7243 insertions(+), 63 deletions(-) create mode 100644 pkgs/build-support/docker/make-layers.nix create mode 100644 pkgs/build-support/docker/popularity-contest-layering-pipeline.nix create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/helpers.nix create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/package.nix create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__init__.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/real-references-graph.json create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py create mode 100644 pkgs/by-name/fl/flattenReferencesGraph/src/setup.py diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index c19df2937539..3234c64c1df4 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -919,10 +919,19 @@ rec { , includeStorePaths ? true , includeNixDB ? false , passthru ? {} - , + , # Pipeline used to produce docker layers. If not set, popularity contest + # algorithm is used. If set, maxLayers is ignored as the author of the + # pipeline can use one of the available functions (like "limit_layers") + # to control the amount of layers. + # See: pkgs/build-support/flatten-references-graph/src/flatten_references_graph/pipe.py + # for available functions, and it's test for how to use them. + # WARNING!! this interface is highly experimental and subject to change. + layeringPipeline ? null + , # Enables debug logging for the layering pipeline. + debug ? false }: assert - (lib.assertMsg (maxLayers > 1) + (lib.assertMsg (layeringPipeline == null && maxLayers > 1) "the maxLayers argument of dockerTools.buildLayeredImage function must be greather than 1 (current value: ${toString maxLayers})"); assert (lib.assertMsg (enableFakechroot -> !stdenv.hostPlatform.isDarwin) '' @@ -999,18 +1008,23 @@ rec { ''; }; - closureRoots = lib.optionals includeStorePaths /* normally true */ ( - [ baseJson customisationLayer ] - ); - overallClosure = writeText "closure" (lib.concatStringsSep " " closureRoots); - - # These derivations are only created as implementation details of docker-tools, - # so they'll be excluded from the created images. - unnecessaryDrvs = [ baseJson overallClosure customisationLayer ]; + layersJsonFile = buildPackages.dockerMakeLayers { + inherit debug; + closureRoots = optionals includeStorePaths [ baseJson customisationLayer ]; + excludePaths = [ baseJson customisationLayer ]; + pipeline = + if layeringPipeline != null + then layeringPipeline + else import + ./popularity-contest-layering-pipeline.nix + { inherit lib jq runCommand; } + { inherit fromImage maxLayers; } + ; + }; conf = runCommand "${baseName}-conf.json" { - inherit fromImage maxLayers created mtime uid gid uname gname; + inherit fromImage created mtime uid gid uname gname layersJsonFile; imageName = lib.toLower name; preferLocalBuild = true; passthru.imageTag = @@ -1018,7 +1032,6 @@ rec { then tag else lib.head (lib.strings.splitString "-" (baseNameOf (builtins.unsafeDiscardStringContext conf.outPath))); - paths = buildPackages.referencesByPopularity overallClosure; nativeBuildInputs = [ jq ]; } '' ${if (tag == null) then '' @@ -1038,54 +1051,7 @@ rec { mtime="$(date -Iseconds -d "$mtime")" fi - paths() { - cat $paths ${lib.concatMapStringsSep " " - (path: "| (grep -v ${path} || true)") - unnecessaryDrvs} - } - - # Compute the number of layers that are already used by a potential - # 'fromImage' as well as the customization layer. Ensure that there is - # still at least one layer available to store the image contents. - usedLayers=0 - - # subtract number of base image layers - if [[ -n "$fromImage" ]]; then - (( usedLayers += $(tar -xOf "$fromImage" manifest.json | jq '.[0].Layers | length') )) - fi - - # one layer will be taken up by the customisation layer - (( usedLayers += 1 )) - - if ! (( $usedLayers < $maxLayers )); then - echo >&2 "Error: usedLayers $usedLayers layers to store 'fromImage' and" \ - "'extraCommands', but only maxLayers=$maxLayers were" \ - "allowed. At least 1 layer is required to store contents." - exit 1 - fi - availableLayers=$(( maxLayers - usedLayers )) - - # Create $maxLayers worth of Docker Layers, one layer per store path - # unless there are more paths than $maxLayers. In that case, create - # $maxLayers-1 for the most popular layers, and smush the remainaing - # store paths in to one final layer. - # - # The following code is fiddly w.r.t. ensuring every layer is - # created, and that no paths are missed. If you change the - # following lines, double-check that your code behaves properly - # when the number of layers equals: - # maxLayers-1, maxLayers, and maxLayers+1, 0 - paths | - jq -sR ' - rtrimstr("\n") | split("\n") - | (.[:$maxLayers-1] | map([.])) + [ .[$maxLayers-1:] ] - | map(select(length > 0)) - ' \ - --argjson maxLayers "$availableLayers" > store_layers.json - - # The index on $store_layers is necessary because the --slurpfile - # automatically reads the file as an array. - cat ${baseJson} | jq ' + jq ' . + { "store_dir": $store_dir, "from_image": $from_image, @@ -1101,7 +1067,7 @@ rec { } ' --arg store_dir "${storeDir}" \ --argjson from_image ${if fromImage == null then "null" else "'\"${fromImage}\"'"} \ - --slurpfile store_layers store_layers.json \ + --slurpfile store_layers "$layersJsonFile" \ --arg customisation_layer ${customisationLayer} \ --arg repo_tag "$imageName:$imageTag" \ --arg created "$created" \ @@ -1109,8 +1075,9 @@ rec { --arg uid "$uid" \ --arg gid "$gid" \ --arg uname "$uname" \ - --arg gname "$gname" | - tee $out + --arg gname "$gname" \ + ${baseJson} \ + | tee $out ''; result = runCommand "stream-${baseName}" diff --git a/pkgs/build-support/docker/make-layers.nix b/pkgs/build-support/docker/make-layers.nix new file mode 100644 index 000000000000..dbb54d738744 --- /dev/null +++ b/pkgs/build-support/docker/make-layers.nix @@ -0,0 +1,47 @@ +{ + coreutils, + flattenReferencesGraph, + lib, + jq, + stdenvNoCC, +}: +{ + closureRoots, + excludePaths ? [ ], + # This could be a path to (or a derivation producing a path to) + # a json file containing the pipeline + pipeline ? [ ], + debug ? false, +}: +if closureRoots == [ ] then + builtins.toFile "docker-layers-empty" "[]" +else + stdenvNoCC.mkDerivation { + name = "docker-layers"; + __structuredAttrs = true; + # graph, exclude_paths and pipeline are expected by the + # flatten_references_graph executable. + exportReferencesGraph.graph = closureRoots; + exclude_paths = excludePaths; + inherit pipeline; + # builder cannot refer to derivation outputs + PATH = "${coreutils}/bin:${flattenReferencesGraph}/bin:${jq}/bin"; + builder = builtins.toFile "docker-make-layers-builder" '' + . .attrs.sh + + flatten_references_graph_arg=.attrs.json + + echo "pipeline: $pipeline" + + if jq -e '.pipeline | type == "string"' .attrs.json; then + jq '. + { "pipeline": $pipeline[0] }' \ + --slurpfile pipeline "$pipeline" \ + .attrs.json > flatten_references_graph_arg.json + + flatten_references_graph_arg=flatten_references_graph_arg.json + fi + + ${lib.optionalString debug "export DEBUG=True"} + flatten_references_graph "$flatten_references_graph_arg" > ''${outputs[out]} + ''; + } diff --git a/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix b/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix new file mode 100644 index 000000000000..f4d77d78129c --- /dev/null +++ b/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix @@ -0,0 +1,34 @@ +{ + lib, + runCommand, + jq, +}: +{ + maxLayers, + fromImage ? null, +}: +runCommand "popularity-contest-layering-pipeline.json" { inherit maxLayers; } '' + # Compute the number of layers that are already used by a potential + # 'fromImage' as well as the customization layer. Ensure that there is + # still at least one layer available to store the image contents. + # one layer will be taken up by the customisation layer + usedLayers=1 + + ${lib.optionalString (fromImage != null) '' + # subtract number of base image layers + baseImageLayersCount=$(tar -xOf "${fromImage}" manifest.json | ${lib.getExe jq} '.[0].Layers | length') + + (( usedLayers += baseImageLayersCount )) + ''} + + if ! (( $usedLayers < $maxLayers )); then + echo >&2 "Error: usedLayers $usedLayers layers to store 'fromImage' and" \ + "'extraCommands', but only maxLayers=$maxLayers were" \ + "allowed. At least 1 layer is required to store contents." + exit 1 + fi + availableLayers=$(( maxLayers - usedLayers )) + + # Produce pipeline which uses popularity_contest algo. + echo '[["popularity_contest"],["limit_layers",'$availableLayers']]' > $out +'' diff --git a/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix b/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix new file mode 100644 index 000000000000..fd04d00424a3 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix @@ -0,0 +1,54 @@ +# Start this shell with: +# nix-shell path/to/root/of/nixpkgs -A flattenReferencesGraph.dev-shell +{ + mkShell, + callPackage, + python3Packages, +}: +let + helpers = callPackage (import ./helpers.nix) { }; +in +mkShell { + inputsFrom = [ (callPackage (import ./package.nix) { }) ]; + buildInputs = [ + helpers.format + helpers.lint + helpers.unittest + # This is needed to plot graphs when DEBUG_PLOT is set to True. + python3Packages.pycairo + # This can be used on linux to display the graphs. + # On other platforms the image viewer needs to be set with + # DEBUG_PLOT_IMAGE_VIEWER env var. + # pkgs.gwenview + ]; + shellHook = '' + echo ' + ********************************************************************** + ********************************************************************** + + Commands useful for development (should be executed from scr dir): + + + format + * formats all files in place using autopep8 + + lint + * lints all files using flake8 + + unittest + * runs all unit tests + + following env vars can be set to enable extra output in tests: + - DEBUG=True - enable debug logging + - DEBUG_PLOT=True - plot graphs processed by split_paths.py and + subcomponent.py + - DEBUG_PLOT_IMAGE_VIEWER=$PATH_OF_IMAGE_VIEWER_APP - app used to + display plots (default: gwenview) + - DEBUG_PLOT_SAVE_BASE_NAME=$SOME_NAME - if set, plots will be saved + to files instead of displayed with image viewer + + ********************************************************************** + ********************************************************************** + ' + ''; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix b/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix new file mode 100644 index 000000000000..45e292b5af52 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix @@ -0,0 +1,36 @@ +{ + bash, + writers, + python3Packages, +}: +let + writeCheckedBashBin = + name: + let + interpreter = "${bash}/bin/bash"; + in + writers.makeScriptWriter { + inherit interpreter; + check = "${interpreter} -n $1"; + } "/bin/${name}"; + + # Helpers used during build/development. + lint = writeCheckedBashBin "lint" '' + ${python3Packages.flake8}/bin/flake8 --show-source ''${@} + ''; + + unittest = writeCheckedBashBin "unittest" '' + if [ "$#" -eq 0 ]; then + set -- discover -p '*_test.py' + fi + + ${python3Packages.python}/bin/python -m unittest "''${@}" + ''; + + format = writeCheckedBashBin "format" '' + ${python3Packages.autopep8}/bin/autopep8 -r -i . "''${@}" + ''; +in +{ + inherit format lint unittest; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/package.nix b/pkgs/by-name/fl/flattenReferencesGraph/package.nix new file mode 100644 index 000000000000..c3c7edb17609 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/package.nix @@ -0,0 +1,32 @@ +{ + callPackage, + nix-gitignore, + python3Packages, +}: +let + helpers = callPackage ./helpers.nix { }; + pythonPackages = python3Packages; + +in +pythonPackages.buildPythonApplication { + version = "0.1.0"; + pname = "flatten-references-graph"; + + # Note: this uses only ./src/.gitignore + src = nix-gitignore.gitignoreSource [ ] ./src; + + propagatedBuildInputs = with pythonPackages; [ + igraph + toolz + ]; + + doCheck = true; + + checkPhase = '' + ${helpers.unittest}/bin/unittest + ''; + + passthru = { + dev-shell = callPackage ./dev-shell.nix { }; + }; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 b/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 new file mode 100644 index 000000000000..43ab3f7273e3 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length = 80 +[pep8] +aggressive = 1 diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore b/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore new file mode 100644 index 000000000000..bee8a64b79a9 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__init__.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py new file mode 100644 index 000000000000..5db025f72010 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py @@ -0,0 +1,48 @@ +import json as json +import sys as sys + +from .lib import debug, load_json +from .flatten_references_graph import flatten_references_graph + + +def main_impl(file_path): + debug(f"loading json from {file_path}") + + data = load_json(file_path) + + # These are required + references_graph = data["graph"] + pipeline = data["pipeline"] + + # This is optional + exclude_paths = data.get("exclude_paths") + + debug("references_graph", references_graph) + debug("pipeline", pipeline) + debug("exclude_paths", exclude_paths) + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=exclude_paths + ) + + debug("result", result) + + return json.dumps( + result, + # For reproducibility. + sort_keys=True, + indent=2, + # Avoid tailing whitespaces. + separators=(",", ": ") + ) + + +def main(): + file_path = sys.argv[1] + print(main_impl(file_path)) + + +if __name__ == "__main__": + main() diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py new file mode 100644 index 000000000000..d04e44bd4af2 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py @@ -0,0 +1,52 @@ +import unittest +import inspect as inspect + +from .__main__ import main_impl +from .lib import path_relative_to_file + +if __name__ == "__main__": + unittest.main() + + +class TestMain(unittest.TestCase): + + def test_main_impl(self): + + file_path = path_relative_to_file( + __file__, + "__test_fixtures/flatten-references-graph-main-input.json" + ) + + result = main_impl(file_path) + + self.assertEqual( + result, + inspect.cleandoc( + """ + [ + [ + "B" + ], + [ + "C" + ], + [ + "A" + ] + ] + """ + ) + ) + + def test_main_impl2(self): + file_path = path_relative_to_file( + __file__, + "__test_fixtures/flatten-references-graph-main-input-no-paths.json" + ) + + result = main_impl(file_path) + + self.assertEqual( + result, + inspect.cleandoc("[]") + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json new file mode 100644 index 000000000000..56ab24c946c1 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json @@ -0,0 +1,31 @@ +[ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "B", + "C" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + } +] diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json new file mode 100644 index 000000000000..330fb0fbdf0d --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json @@ -0,0 +1,23 @@ +{ + "graph": [ + { + "closureSize": 168, + "narHash": "sha256:0dl4kfhb493yz8a5wgh0d2z3kr61z65gp85vx33rqwa1m1lnymy8", + "narSize": 168, + "path": "/nix/store/1kaw7p40kknss1qq8gark3azvfp26q8x-no-store-paths-base.json", + "references": [] + } + ], + "pipeline": [ + [ + "popularity_contest" + ], + [ + "limit_layers", + 99 + ] + ], + "exclude_paths": [ + "/nix/store/1kaw7p40kknss1qq8gark3azvfp26q8x-no-store-paths-base.json" + ] +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json new file mode 100644 index 000000000000..da7d503be45e --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json @@ -0,0 +1,36 @@ +{ + "graph": [ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "B", + "C" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + } + ], + "pipeline": [ + ["split_paths", ["B"]] + ] +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/real-references-graph.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/real-references-graph.json new file mode 100644 index 000000000000..23b212cf302f --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/real-references-graph.json @@ -0,0 +1,4402 @@ +[ + { + "closureSize": 163547080, + "narHash": "sha256:0dys103agl0xzk1hrqmf2yzyrcnlya355ynz2s5qi18x66i4d6hw", + "narSize": 72392, + "path": "/nix/store/01fp87dr6h6s8rhjifd6vnbnwm1cjd6q-libgudev-234", + "references": [ + "/nix/store/01fp87dr6h6s8rhjifd6vnbnwm1cjd6q-libgudev-234", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2" + ] + }, + { + "closureSize": 34597056, + "narHash": "sha256:1ai9lmhkaa9igqszang3pw9iyxslq1w49j0qsnq770y9p3ygfp9y", + "narSize": 1136488, + "path": "/nix/store/0309yzbkwk8wq3jaxpb9l3i5sih5khxc-libselinux-3.0", + "references": [ + "/nix/store/0309yzbkwk8wq3jaxpb9l3i5sih5khxc-libselinux-3.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/8w2r3lp9zkqd5rgqxxx8vi9k8kf7ckw4-pcre-8.44" + ] + }, + { + "closureSize": 46572608, + "narHash": "sha256:1l1869bj2i8clngzb89l5ngvw4hrf703099qa44404zd563rmaal", + "narSize": 7623656, + "path": "/nix/store/03ldal0ldcq759v0rfl1vjq7rs1q1fn7-libvpx-1.9.0", + "references": [ + "/nix/store/03ldal0ldcq759v0rfl1vjq7rs1q1fn7-libvpx-1.9.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 34722032, + "narHash": "sha256:0gn2aaxajdby8zzalxsl59qlhhh179525b926ynzp4r753gr769a", + "narSize": 1784008, + "path": "/nix/store/07k1d2r9mpji8h421v83bfj23cg82r4d-brotli-1.0.9-lib", + "references": [ + "/nix/store/07k1d2r9mpji8h421v83bfj23cg82r4d-brotli-1.0.9-lib", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 110896432, + "narHash": "sha256:0ki1v8bkx416sjxql59awjwfcq5cknasazqaj7f7ipdbgym6h8cz", + "narSize": 288328, + "path": "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "references": [ + "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 61520088, + "narHash": "sha256:0plf7rryzxrzhs8wn0q2agk23a133l6hb3rh1g4mdgwl8smrw7fg", + "narSize": 3002720, + "path": "/nix/store/0h2yrxxs74gwbd4gcgb7gpbaxyy9mw5b-gdk-pixbuf-2.42.2", + "references": [ + "/nix/store/0h2yrxxs74gwbd4gcgb7gpbaxyy9mw5b-gdk-pixbuf-2.42.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 33008080, + "narHash": "sha256:1dm5231kj2m7nhxrdn6sa611hd6r6q6jqxlk8f36wzh6iqdc0z0i", + "narSize": 70056, + "path": "/nix/store/0kpjzw5z9k3sd1r9dxya6f0gm2ridxpr-libpciaccess-0.16", + "references": [ + "/nix/store/0kpjzw5z9k3sd1r9dxya6f0gm2ridxpr-libpciaccess-0.16", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 205296, + "narHash": "sha256:0b6ki7vdz6k69q7sb3j1sas2f9gxrsyx473gzfc8rf2srd7yzai3", + "narSize": 205296, + "path": "/nix/store/0sgd2psd7c9i2q2zyvg47dcflxv4fqjh-nss-cacert-3.60", + "references": [ + "/nix/store/0sgd2psd7c9i2q2zyvg47dcflxv4fqjh-nss-cacert-3.60" + ] + }, + { + "closureSize": 39890320, + "narHash": "sha256:1wk49xfpbh4xz3drs1d2cjmfjicxklj78na7vaxc6lwc3d02ka40", + "narSize": 2617976, + "path": "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2", + "references": [ + "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 32962560, + "narHash": "sha256:1rswg41r07qb6zlbgkfcajksi8mpg7n9dx09ns6rg4w6xjffw5zm", + "narSize": 24536, + "path": "/nix/store/0xi063sxmclj2jmvgbwfdshqsrx91ibx-libXau-1.0.9", + "references": [ + "/nix/store/0xi063sxmclj2jmvgbwfdshqsrx91ibx-libXau-1.0.9", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 40837672, + "narHash": "sha256:0yj1f5ycqqpys4py4c0xgix3s1n772m37gjjnfnz641k59prbx4n", + "narSize": 1888720, + "path": "/nix/store/108sm1fjlf3vnf6v5l6bakpf6mqmnjll-fftw-double-3.3.9", + "references": [ + "/nix/store/108sm1fjlf3vnf6v5l6bakpf6mqmnjll-fftw-double-3.3.9", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 110715056, + "narHash": "sha256:08j2lb7al3gz80wn3f04asvbn90zfr3ssyidmfb112p1aczi2pq7", + "narSize": 38712, + "path": "/nix/store/17jq0l2j8knyss9xna8c45ighmra6wk1-python3.8-cycler-0.10.0", + "references": [ + "/nix/store/17jq0l2j8knyss9xna8c45ighmra6wk1-python3.8-cycler-0.10.0", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 56056408, + "narHash": "sha256:0ynhmaizym66gfm6wcyzcmxg5cwrvgxs3hr9adjwdqyj0979fqgs", + "narSize": 1239744, + "path": "/nix/store/18hldl9cbc2wdpsbbz3vkld2chp13rkf-libsoup-2.72.0", + "references": [ + "/nix/store/07k1d2r9mpji8h421v83bfj23cg82r4d-brotli-1.0.9-lib", + "/nix/store/18hldl9cbc2wdpsbbz3vkld2chp13rkf-libsoup-2.72.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/cya2xqjjf8m8x4dqrm6zmcx603d6rx7b-libpsl-0.21.0", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1" + ] + }, + { + "closureSize": 123338400, + "narHash": "sha256:17n3qqss18casfldj7ipyyb9bwgq6s4nnm2fs6i9aglz1szdcwr6", + "narSize": 210448, + "path": "/nix/store/1b1mfikvj1sapi5nxpq0g1byd8ylq2wv-python3.8-webtest-2.0.32", + "references": [ + "/nix/store/1b1mfikvj1sapi5nxpq0g1byd8ylq2wv-python3.8-webtest-2.0.32", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rchvxp4s7py0njn5n9lwmssysm2a7db9-python3.8-waitress-1.4.4", + "/nix/store/rka0aj2f2wnv0dkli7f00qldxlk1zn21-python3.8-beautifulsoup4-4.9.3", + "/nix/store/zhd8cax3zchqbaazr42s9ib75dfz933a-python3.8-WebOb-1.8.6" + ] + }, + { + "closureSize": 33382328, + "narHash": "sha256:102djpk728h1nskzsbg7y90z8rhy0vpw0750ynrfnrhzhrczx6x4", + "narSize": 444304, + "path": "/nix/store/1ccb3cc6mfz6jik6p76mxdy9qv1m5x53-libapparmor-2.13.6", + "references": [ + "/nix/store/1ccb3cc6mfz6jik6p76mxdy9qv1m5x53-libapparmor-2.13.6", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 269168168, + "narHash": "sha256:1bd72ff5iwlms0w0slkpbzdxr26m2bcpp3n2b5ksrc08v66d3bgj", + "narSize": 71056, + "path": "/nix/store/1d07jhijhbfss5g43xlwvaxp4jagix0v-qtsvg-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/pnw3b0pijf83b12dw7fkpx4xb54879wn-qtsvg-5.15.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 112454624, + "narHash": "sha256:0kmm6gz2ysnkpfpqwwzxql4qwg2brg98mfwf3yl7z6jvr3rwfyhj", + "narSize": 728, + "path": "/nix/store/1ifl392ydwq95kpyd09i46qxp1x6wn5a-python3.8-cffi-1.14.4-dev", + "references": [ + "/nix/store/gzs9439n7wkjmw9hx53mfmi90fzlny95-python3.8-cffi-1.14.4", + "/nix/store/ksld7jvgi3yg9w55mh7hlar0cymkil2m-libffi-3.3-dev", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/s93qggnlaa8cn4x38c4cv5qy761s1g5l-python3.8-pycparser-2.20" + ] + }, + { + "closureSize": 37210776, + "narHash": "sha256:0s5pamysca375ffhzkcw0q2n7kq29k7ic7lgd94325a7fxl5yyx6", + "narSize": 35408, + "path": "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "references": [ + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33447864, + "narHash": "sha256:1bjzpgmy4gmnz1l40nxa4rdfl3sb512pa6nmmjalad02xjksqw3v", + "narSize": 176176, + "path": "/nix/store/1w1qqn7spci406680kh1jl4z7xfbrmw6-lame-3.100", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/wkzbd8lcrwima4pv52vv6qfday4ik0dp-lame-3.100-lib" + ] + }, + { + "closureSize": 41719432, + "narHash": "sha256:1dg5fajwi21iwq4x79v9pi09ns8zbbjnnv6pcxxraiavw60ci3jv", + "narSize": 1828592, + "path": "/nix/store/20rw4z35dprcri6qcxsxbn24lb1ncxya-epoxy-1.5.4", + "references": [ + "/nix/store/20rw4z35dprcri6qcxsxbn24lb1ncxya-epoxy-1.5.4", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2" + ] + }, + { + "closureSize": 37686664, + "narHash": "sha256:01y8r1maqdmx0da50dynfys1nck1jlphfvxrcg6r9g976c4nvc1s", + "narSize": 800, + "path": "/nix/store/21586x62x26h2nmn6n6df25yybrpnl8k-with-env-from-dir", + "references": [ + "/nix/store/wmiyjdsaydyv024al5ddqd3liljrfvk7-gnugrep-3.6", + "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 39464736, + "narHash": "sha256:17n13dw5wc1m7fgab0q60zchh1wxylq9j04hacn1wmldf0ai4s46", + "narSize": 2349904, + "path": "/nix/store/228y86wbkl3rnmlsrm5n7lzmy11n3fn3-python3.8-cryptography-3.3.2", + "references": [ + "/nix/store/228y86wbkl3rnmlsrm5n7lzmy11n3fn3-python3.8-cryptography-3.3.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 37229840, + "narHash": "sha256:02d8bjncad2zxnvhc7j1y8lb7syvvd8hw370k2b0j8m7p74lw2xl", + "narSize": 19064, + "path": "/nix/store/261hxvhxklrqhiag25l6wq753vgcn4xy-libXdamage-1.1.5", + "references": [ + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/261hxvhxklrqhiag25l6wq753vgcn4xy-libXdamage-1.1.5", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 134815824, + "narHash": "sha256:1gqsi99qg2xmsidmyi358kfr7pa7491rx04gdimd6w8h3kjmnyzl", + "narSize": 62292520, + "path": "/nix/store/2bjd64hgdyzpmp6z40pm4bmvbl7p8i7y-lapack-3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/y4as55nixd131fn5mcp16fy2bnglbq22-openblas-0.3.13", + "/nix/store/zr5y2gv34lyflyfi33hlk28ppk31apr6-gfortran-9.3.0-lib" + ] + }, + { + "closureSize": 225338072, + "narHash": "sha256:1d4vyg8zmj020wwp2mckafl5cxg999mp7hawl4rgjkyavr5wsysc", + "narSize": 125120, + "path": "/nix/store/2ckcmgrnp0ambyfkbidrsj18y9xjc0b4-python3.8-PyAudio-0.2.11", + "references": [ + "/nix/store/2ckcmgrnp0ambyfkbidrsj18y9xjc0b4-python3.8-PyAudio-0.2.11", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yzr03qiw8h4r3fnhmagb9nw6g8yy1a61-portaudio-190600-20161030" + ] + }, + { + "closureSize": 32981200, + "narHash": "sha256:04chgdcn3g8010fix55ipxh5wp8lcbg1i4xwxxhxrblvikfilfy6", + "narSize": 43176, + "path": "/nix/store/2g3j7cm5yjjlrn3fl7s8s9kiaxj0qi4r-keyutils-1.6.3-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 60841784, + "narHash": "sha256:05v56hxzsvivna36y6lahv1s53yjw6ib68kl1rwndp5fq5rxgmfh", + "narSize": 21599024, + "path": "/nix/store/2gal91snqlbj57flsj2n9pbl243ccyws-x265-3.4", + "references": [ + "/nix/store/2gal91snqlbj57flsj2n9pbl243ccyws-x265-3.4", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/dvhrdm83n5hkxqw109jc4f7rvbvzgp8c-numactl-2.0.14", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 757824, + "narHash": "sha256:1y4h3k19vjqhzkjg6h37n2k1gcpaandh3wnqlh4rwsbm88p4qdv0", + "narSize": 757824, + "path": "/nix/store/2pb33zdcvkm638m6yfny15d6x1vl1bha-dejavu-fonts-minimal-2.37", + "references": [] + }, + { + "closureSize": 111644000, + "narHash": "sha256:1xcjalxxr4p38h7kkdhmbdi1cwcqj8w6205dwsya1j5xg51m2yyh", + "narSize": 1035896, + "path": "/nix/store/2qf95q6xm34ihk7z2rq1251pfjyr3grq-python3.8-coverage-5.3", + "references": [ + "/nix/store/2qf95q6xm34ihk7z2rq1251pfjyr3grq-python3.8-coverage-5.3", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 1109703664, + "narHash": "sha256:0jb8z0206j3klw0qw58bz4ajzfl6nj2m7gbz58vg3sdzqfwrj6rf", + "narSize": 136392, + "path": "/nix/store/2y63mp9ln1xychnm1bhgl5r0j0islpj8-ankisyncd-2.2.0", + "references": [ + "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "/nix/store/17jq0l2j8knyss9xna8c45ighmra6wk1-python3.8-cycler-0.10.0", + "/nix/store/1b1mfikvj1sapi5nxpq0g1byd8ylq2wv-python3.8-webtest-2.0.32", + "/nix/store/228y86wbkl3rnmlsrm5n7lzmy11n3fn3-python3.8-cryptography-3.3.2", + "/nix/store/2ckcmgrnp0ambyfkbidrsj18y9xjc0b4-python3.8-PyAudio-0.2.11", + "/nix/store/2qf95q6xm34ihk7z2rq1251pfjyr3grq-python3.8-coverage-5.3", + "/nix/store/2y63mp9ln1xychnm1bhgl5r0j0islpj8-ankisyncd-2.2.0", + "/nix/store/3diqalwg0320zky06n03vw2bsphiv70w-python3.8-PyQt5_sip-12.8.1", + "/nix/store/3sgkd6knn8aidjiqydivi9fjbnq0idbb-python3.8-python-dateutil-2.8.1", + "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "/nix/store/484glwwy4fzk3x7n8bypyq6a2fniq4y0-python3.8-olefile-0.46", + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/6mvgkzscpx4la1fvbqx23qiyymyw9hg6-python3.8-pytest-6.1.2", + "/nix/store/7sjbn9v0yg6fmrxgl4avscym2g16dyfr-python3.8-py-1.9.0", + "/nix/store/7v8v5zl1cyqbm690j6dw6s3qqsbznabj-python3.8-pbr-5.5.1", + "/nix/store/7vy74s2407p0d0aqbz4hyrgzjccxglk9-python3.8-pluggy-0.13.1", + "/nix/store/8dvrhfnj1212zsjfk16ldgjgyxnp23j8-python3.8-soupsieve-2.0.1", + "/nix/store/8gv49ax9kda52zc0024s7789sillwzl7-python3.8-tkinter-3.8.7", + "/nix/store/8l8x1gp4wqql2ng0y1jvfbnk0zlaz6am-python3.8-dbus-python-1.2.16", + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/9gxx4hsg4yr7naxnxaz93fawvb7dmbv1-python3.8-decorator-4.4.2", + "/nix/store/9p9xvizv67gz468cky5ff4i6m1kgn0sc-python3.8-pysocks-1.7.1", + "/nix/store/9wk4ch16cv9fwd5wgmnqqfgyxbwqsnyp-python3.8-iniconfig-1.1.1", + "/nix/store/a60s3c4hfxy2gffk0w9iqg6ba4z5rf5v-anki-2.1.15", + "/nix/store/b1xivmpplslqihf8yfpwan14kccjcg6a-python3.8-numpy-1.19.4", + "/nix/store/bzcyz6j9qvzzx79yzi88nch62sd10gvg-python3.8-PyQt5-5.15.2", + "/nix/store/d0frnz360sw2wx3mh4952frxjs2lxsnc-python3.8-chardet-3.0.4", + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/faddfk1p27sr3rbz3fh5v2n3kmymj9jj-python3.8-Send2Trash-1.5.0", + "/nix/store/fxdx4xwrq5r8k2izmifiql3j275k48nf-python3.8-Markdown-3.3.3", + "/nix/store/g5krpqmicwzh4apank8z2wyhv9j5kd4h-python3.8-jsonschema-3.2.0", + "/nix/store/gzs9439n7wkjmw9hx53mfmi90fzlny95-python3.8-cffi-1.14.4", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/hvr673qq6f3fx6525ifsp7w5j1h06maw-python3.8-mock-4.0.2", + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/kgacy6jpywq43jwky1m06pc2qzx4pq5p-python3.8-pyrsistent-0.17.3", + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/kpcwm33vm9hlii90v5k5i8c96494ads7-python3.8-Pillow-8.0.1", + "/nix/store/kx3iwa71vl8pprwgypbk796w5cl0r9i9-python3.8-wcwidth-0.2.5", + "/nix/store/ll5b5ga5ngf8w9gpkfw369mrm6h3j6an-python3.8-setuptools_scm-4.1.2", + "/nix/store/lsjp64bsppqyljj6h12qw18di7yywmi3-python3.8-matplotlib-3.3.3", + "/nix/store/nm6g5z088nspz11r3bv6jyz0digflnji-python3.8-urllib3-1.26.2", + "/nix/store/pb0dl4yyls39qpjam0f7nc1i4hvm1ngj-python3.8-pyOpenSSL-20.0.0", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/r1s8c9sqrsnqsppc0qklfcjy4vzfi6hr-python3.8-toml-0.10.2", + "/nix/store/rchvxp4s7py0njn5n9lwmssysm2a7db9-python3.8-waitress-1.4.4", + "/nix/store/rka0aj2f2wnv0dkli7f00qldxlk1zn21-python3.8-beautifulsoup4-4.9.3", + "/nix/store/s93qggnlaa8cn4x38c4cv5qy761s1g5l-python3.8-pycparser-2.20", + "/nix/store/sg4wiqzr2lv1crghjw5427n1mqvab0f8-python3.8-atomicwrites-1.4.0", + "/nix/store/vk4na3xr11ibq5lcxzpkvwpgm3dyahx7-python3.8-kiwisolver-1.3.1", + "/nix/store/vzlcj8gi8z2d5h8zq237kzrifsrfz0l5-python3.8-requests-2.25.0", + "/nix/store/wp184cbvgxqpx4xnq9pn28pqbglhps9v-python3.8-pyasn1-0.4.8", + "/nix/store/wq452vap3zpf11x9iv2j26fbyqbdwrlv-python3.8-tornado-6.1", + "/nix/store/wwjhb23kqnp8dxz6b4ki6vyrr1frri9j-python3.8-SQLAlchemy-1.3.20", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/z658b5ap553d0n2j7xzxbfi5n3lkw19k-python3.8-nose-1.3.7", + "/nix/store/z7iic0pjvfzp5m45rmhvn1afk6b4bvrs-python3.8-pytz-2020.5", + "/nix/store/zhd8cax3zchqbaazr42s9ib75dfz933a-python3.8-WebOb-1.8.6", + "/nix/store/zpzqzd6a087nnvrh68qbmznkyrcc89z4-python3.8-PyQtWebEngine-5.15.2" + ] + }, + { + "closureSize": 236814440, + "narHash": "sha256:1danraq6v3nw8gbn08v7pzq92cdmfd8jh5mmd6ra597v68z6yzgm", + "narSize": 6328, + "path": "/nix/store/32399xbgpdm4pk3gwhr30s8l1zfjn5j7-python3.8-dbus-python-1.2.16-dev", + "references": [ + "/nix/store/32399xbgpdm4pk3gwhr30s8l1zfjn5j7-python3.8-dbus-python-1.2.16-dev", + "/nix/store/8l8x1gp4wqql2ng0y1jvfbnk0zlaz6am-python3.8-dbus-python-1.2.16", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33350880, + "narHash": "sha256:0qw2day3xxqarlhqm998cl795m1pkzqgz8yrwnbn39pqm3aplkdv", + "narSize": 412856, + "path": "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "references": [ + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 33787504, + "narHash": "sha256:1vnygdvhrivj7hvrz287xnlnpm5qb17szxf4b1bzvg5mcsnz3jgf", + "narSize": 100216, + "path": "/nix/store/371qb1hvmbva65kffvcl1n47m78amcd6-libassuan-2.5.4", + "references": [ + "/nix/store/371qb1hvmbva65kffvcl1n47m78amcd6-libassuan-2.5.4", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41" + ] + }, + { + "closureSize": 19411440, + "narHash": "sha256:0m9wmpj6pk9h53gka2iwkr2a55lgqiax7p60i6pcmk3dkq1qb939", + "narSize": 19411440, + "path": "/nix/store/37kmaafb14l44ag5wsbs8pm9sd0xgskp-iso-codes-4.5.0", + "references": [ + "/nix/store/37kmaafb14l44ag5wsbs8pm9sd0xgskp-iso-codes-4.5.0" + ] + }, + { + "closureSize": 33298056, + "narHash": "sha256:10jynlx0fxjsgad64r33whq6prya7r6z8vrdfd27pa258ihql4z1", + "narSize": 360032, + "path": "/nix/store/3bdc12nrmlpzi2zp8bprgzihznkq8kdr-cdparanoia-III-10.2", + "references": [ + "/nix/store/3bdc12nrmlpzi2zp8bprgzihznkq8kdr-cdparanoia-III-10.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 110804576, + "narHash": "sha256:08rwd3b3c16w9v400rxls4kv459qax98ldw8irrmqs4wwdzifs5x", + "narSize": 196472, + "path": "/nix/store/3diqalwg0320zky06n03vw2bsphiv70w-python3.8-PyQt5_sip-12.8.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 1345240, + "narHash": "sha256:1x4hrq6x2vf54vdqprj0qdzq07kzsd8m4d9d9rdm3l3lypm2wkaf", + "narSize": 1345240, + "path": "/nix/store/3dwc6z983ar11ihdqm942qvwvbkaqx9a-xorgproto-2020.1", + "references": [ + "/nix/store/3dwc6z983ar11ihdqm942qvwvbkaqx9a-xorgproto-2020.1" + ] + }, + { + "closureSize": 34531920, + "narHash": "sha256:10yzq0kbl7m311i6zvrf17jyfqhrfnpqbrhi20f48i7x7inc1hbc", + "narSize": 1593896, + "path": "/nix/store/3nqv8f3qkxl3346a2394462bm01mhhad-libsamplerate-0.1.9", + "references": [ + "/nix/store/3nqv8f3qkxl3346a2394462bm01mhhad-libsamplerate-0.1.9", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 33112024, + "narHash": "sha256:06hfwkmrbs0946vxc5rvhf35nrp8lgrvci89bc0i70yx78zvlhjf", + "narSize": 128160, + "path": "/nix/store/3s8xnm5kvwy78ycy9qbaij1rywfgsp0j-tremor-unstable-2018-03-16", + "references": [ + "/nix/store/3s8xnm5kvwy78ycy9qbaij1rywfgsp0j-tremor-unstable-2018-03-16", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4" + ] + }, + { + "closureSize": 111447496, + "narHash": "sha256:0jr6r1wjd3l1lqxp0zgxrrhqa67rr86j9m5fcqy4i0cn8rfj75k0", + "narSize": 647560, + "path": "/nix/store/3sgkd6knn8aidjiqydivi9fjbnq0idbb-python3.8-python-dateutil-2.8.1", + "references": [ + "/nix/store/3sgkd6knn8aidjiqydivi9fjbnq0idbb-python3.8-python-dateutil-2.8.1", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/ll5b5ga5ngf8w9gpkfw369mrm6h3j6an-python3.8-setuptools_scm-4.1.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 111396664, + "narHash": "sha256:0q9cf9pvlba364cg36fhgw7fgj08r3r09krs0nlzc3x228m4p0h6", + "narSize": 197072, + "path": "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "references": [ + "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 32938024, + "narHash": "sha256:086vqbhz684wmk55inpw4digiq6g0r2z8zh29i883lnrkpfzry2i", + "narSize": 31080936, + "path": "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0" + ] + }, + { + "closureSize": 34739840, + "narHash": "sha256:1vf3j5ybqbn2l4mbnr4plkqb2n92xlr2ni956pzf4xrqf3slzc6f", + "narSize": 1801816, + "path": "/nix/store/3wwjh8qx02v24rlr64iapf850i3xddd6-pcre2-10.36", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3wwjh8qx02v24rlr64iapf850i3xddd6-pcre2-10.36" + ] + }, + { + "closureSize": 35026952, + "narHash": "sha256:14cwzmndvyc697m4lzhhisx0zw9mxsc4gjrr074dbqpanwzj446q", + "narSize": 1339664, + "path": "/nix/store/3x0h90zzvhdv527gmi07ixxib8isyh4k-libgcrypt-1.9.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3x0h90zzvhdv527gmi07ixxib8isyh4k-libgcrypt-1.9.1", + "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41" + ] + }, + { + "closureSize": 194295024, + "narHash": "sha256:1mqwa7rs3bz36n88p8d8h5f5kxn8zkbsp9m8wpfswny8q3g3vl45", + "narSize": 2018912, + "path": "/nix/store/3xcgzy0nkq71fh2npf45p38sz0d06x77-SDL2-2.0.14", + "references": [ + "/nix/store/3dwc6z983ar11ihdqm942qvwvbkaqx9a-xorgproto-2020.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3xcgzy0nkq71fh2npf45p38sz0d06x77-SDL2-2.0.14", + "/nix/store/4i9y386mgyz1qmpvvkcqznva9j8vq8j3-libXScrnSaver-1.2.3", + "/nix/store/84sp26mxbmblpyii4i4fq2vjagcvgmk1-libXinerama-1.1.4", + "/nix/store/92119q9izv7vgws8krgi9znpgjsxbl6q-wayland-protocols-1.20", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "/nix/store/gwwx0g8bvykqlgjbcp4bqwgb1fs65jh5-audiofile-0.3.6", + "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2", + "/nix/store/zrhaj983glc61smgwvg8ix9lzjki0sfg-libXxf86vm-1.1.4" + ] + }, + { + "closureSize": 33027168, + "narHash": "sha256:0wkkw6h07r6jc7a3k5mcfdfwh19nkwz803llgza85d43sjilkb7a", + "narSize": 89144, + "path": "/nix/store/3y5s6iyzqg2rwy8qz79i5f6cfmwqiaav-attr-2.4.48", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3y5s6iyzqg2rwy8qz79i5f6cfmwqiaav-attr-2.4.48" + ] + }, + { + "closureSize": 33695304, + "narHash": "sha256:1k2jxr2li5nzcv6z384mcfjbqbxs135nydh9rz3n17rlddpwbmzb", + "narSize": 757280, + "path": "/nix/store/3zyrvp30fbhvh3yw6ajczs0h897n2ffi-xvidcore-1.3.5", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 110789104, + "narHash": "sha256:09aylpa75ls79prn5vgk4d5v0xbqg1bv7s810wzxzmrl2sqq390q", + "narSize": 181000, + "path": "/nix/store/484glwwy4fzk3x7n8bypyq6a2fniq4y0-python3.8-olefile-0.46", + "references": [ + "/nix/store/484glwwy4fzk3x7n8bypyq6a2fniq4y0-python3.8-olefile-0.46", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 1634416, + "narHash": "sha256:1lwrc8pclff0d6fwh0p7c7fc6zydi0imppd6kyw6l8syzm5akg6x", + "narSize": 1634416, + "path": "/nix/store/48gydzv98ns14ylw7gmkx38r4gnds82m-libunistring-0.9.10", + "references": [ + "/nix/store/48gydzv98ns14ylw7gmkx38r4gnds82m-libunistring-0.9.10" + ] + }, + { + "closureSize": 40797640, + "narHash": "sha256:0i9fhaxjzy86yxy13s92v4pp9kgnw2f2ahfipf0jvn4b12zvixgv", + "narSize": 1848688, + "path": "/nix/store/48y786pcj1slmhqvys0l96pl124f8wg6-fftw-single-3.3.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/48y786pcj1slmhqvys0l96pl124f8wg6-fftw-single-3.3.9", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 37306216, + "narHash": "sha256:1f3cv8xh5yiips0qbk583pyw2cb1gx3c3mjvc69ygm475mhvb238", + "narSize": 33872, + "path": "/nix/store/4i9y386mgyz1qmpvvkcqznva9j8vq8j3-libXScrnSaver-1.2.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/4i9y386mgyz1qmpvvkcqznva9j8vq8j3-libXScrnSaver-1.2.3", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 52231016, + "narHash": "sha256:0nwnggf2cpklgr6j9dpa7377lr9y6r6ly7hqq9df61l6k9xlrbw8", + "narSize": 3871816, + "path": "/nix/store/4k3daqxxyngfg1l8i75nynrnzj60zqnn-shadow-4.8.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/4k3daqxxyngfg1l8i75nynrnzj60zqnn-shadow-4.8.1", + "/nix/store/fr2k1vwmyd5ngmb3y0v090nh21nn6gqp-glibc-2.32-35-bin", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 283646400, + "narHash": "sha256:09s872b7haaq5h0h6d5f8dqh7ilpz256phka72l438457qs0n4h2", + "narSize": 22208, + "path": "/nix/store/4mzg1bx49gzf610ffhs920ylrnji6p7j-qtwebchannel-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 34414392, + "narHash": "sha256:0lhy079636d9v1xz8hn50nli3474fqcqsmhbaj12jpc3d7caiahz", + "narSize": 19072, + "path": "/nix/store/53m4njmz3wsjfd4ihyz18la1dpcr8a56-xcb-util-keysyms-0.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/53m4njmz3wsjfd4ihyz18la1dpcr8a56-xcb-util-keysyms-0.4.0", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14" + ] + }, + { + "closureSize": 49576760, + "narHash": "sha256:07wgmrpjzcb50c74gzx5y06a2baxfjr60y9dd69nwdjh9576b69y", + "narSize": 13163848, + "path": "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "references": [ + "/nix/store/0309yzbkwk8wq3jaxpb9l3i5sih5khxc-libselinux-3.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/8w2r3lp9zkqd5rgqxxx8vi9k8kf7ckw4-pcre-8.44", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1" + ] + }, + { + "closureSize": 40131936, + "narHash": "sha256:1wn33j7a9g5ajgjqbw0h31qxxfl91zdj462mzagiqid862pakjjh", + "narSize": 1182984, + "path": "/nix/store/5ibrpsigb821h0j6d0a5lfbalax7w4c9-zimg-3.0.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5ibrpsigb821h0j6d0a5lfbalax7w4c9-zimg-3.0.1", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 49426136, + "narHash": "sha256:0x7aip7rf5796p90x7giw03zcppb4ymsgcqa0p0f21gvy88p0fd2", + "narSize": 20344, + "path": "/nix/store/5sprfqk0cj0v08cgnh7fw85ylr5m94zg-libXft-2.3.3-dev", + "references": [ + "/nix/store/5sprfqk0cj0v08cgnh7fw85ylr5m94zg-libXft-2.3.3-dev", + "/nix/store/iwb5mhvdpddga1l6y3bmmaqvyawl9w3g-libXrender-0.9.10-dev", + "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "/nix/store/xqkq24q60n45qnhp59cgvw84ywdimbww-fontconfig-2.13.92-dev" + ] + }, + { + "closureSize": 110991440, + "narHash": "sha256:1yk4fh55221w818ykci5wjmnq44ml1clvvvpwzjniswj4v34l9fx", + "narSize": 25416, + "path": "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "references": [ + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33142264, + "narHash": "sha256:1dkhlwkg5bkrc46dd2kfxzk9z3gdlbmfnpzjvzikblarcc2jmaih", + "narSize": 204240, + "path": "/nix/store/65yyr8xgzb182ml0r6cm1jpjjgc6nz3d-nghttp2-1.41.0-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/65yyr8xgzb182ml0r6cm1jpjjgc6nz3d-nghttp2-1.41.0-lib" + ] + }, + { + "closureSize": 36680840, + "narHash": "sha256:0siajjl65g6sfcy7wp7ck0k73kp0a8pd4krvys2mhxzxr3ym3xgz", + "narSize": 2363408, + "path": "/nix/store/68w8lqk6wymf1rz21jjxg2c2xcd6h74w-libkrb5-1.18", + "references": [ + "/nix/store/2g3j7cm5yjjlrn3fl7s8s9kiaxj0qi4r-keyutils-1.6.3-lib", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/68w8lqk6wymf1rz21jjxg2c2xcd6h74w-libkrb5-1.18", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 32995784, + "narHash": "sha256:0592rqwjg43bi8fwx2r2a3qs7vd76hxd1fkrckxngk3dsya0621m", + "narSize": 57760, + "path": "/nix/store/68zkd0ibxjydjzdwk1bvy9by5dp5yqhq-libtool-2.4.6-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/68zkd0ibxjydjzdwk1bvy9by5dp5yqhq-libtool-2.4.6-lib" + ] + }, + { + "closureSize": 118787352, + "narHash": "sha256:05hvxwalla23rni5vy748q44wwc9w7ybl1mhhfxamz1jprhd5nzk", + "narSize": 1774168, + "path": "/nix/store/6mvgkzscpx4la1fvbqx23qiyymyw9hg6-python3.8-pytest-6.1.2", + "references": [ + "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/6mvgkzscpx4la1fvbqx23qiyymyw9hg6-python3.8-pytest-6.1.2", + "/nix/store/7sjbn9v0yg6fmrxgl4avscym2g16dyfr-python3.8-py-1.9.0", + "/nix/store/7vy74s2407p0d0aqbz4hyrgzjccxglk9-python3.8-pluggy-0.13.1", + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/9wk4ch16cv9fwd5wgmnqqfgyxbwqsnyp-python3.8-iniconfig-1.1.1", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/kx3iwa71vl8pprwgypbk796w5cl0r9i9-python3.8-wcwidth-0.2.5", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/r1s8c9sqrsnqsppc0qklfcjy4vzfi6hr-python3.8-toml-0.10.2", + "/nix/store/sg4wiqzr2lv1crghjw5427n1mqvab0f8-python3.8-atomicwrites-1.4.0", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 592, + "narHash": "sha256:087bvqxgdh0xdggqydi8ssxj22r128r4xd13ryyx5glg1mj0plgd", + "narSize": 592, + "path": "/nix/store/6nc41m1ql6c35ckz6z97fdzniad3d5ya-hook", + "references": [] + }, + { + "closureSize": 75729248, + "narHash": "sha256:0kf3925prjdrddi0i1d2yx2wj2dfwqih5qld5hk2fnlz0hkh8ghk", + "narSize": 35444064, + "path": "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 35035400, + "narHash": "sha256:0j762m9q37nd75jfdsljpm5xissndyx4savm7bx6bkl36yynl1ax", + "narSize": 262408, + "path": "/nix/store/6vlwm4rhjsxv3xcs99apc019nqvjgxs1-libpng-apng-1.6.37-dev", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6vlwm4rhjsxv3xcs99apc019nqvjgxs1-libpng-apng-1.6.37-dev", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/w02nq97ggwq3x2lpjsy1zpspxhnmv474-zlib-1.2.11-dev", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 63770904, + "narHash": "sha256:1gm0jkyagq8w12p80apsqis66gsi8n0xvd8xgrhdkhgig78jqck9", + "narSize": 248896, + "path": "/nix/store/6y5i7lfnn4mjm52f721rdqjbnfrvrjsx-libass-0.15.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6y5i7lfnn4mjm52f721rdqjbnfrvrjsx-libass-0.15.0", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/rl9v918p5fjc4xa4s87b97ys3i371pah-fribidi-1.0.10", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2" + ] + }, + { + "closureSize": 35291896, + "narHash": "sha256:188a8fg1jq20nf04lqwyycf6nx9d3cnk22hf57wsvmkx3g641gfd", + "narSize": 1527496, + "path": "/nix/store/74xfkypvxf8kvffqhbrk7yhkq0v26j3z-pciutils-3.7.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/74xfkypvxf8kvffqhbrk7yhkq0v26j3z-pciutils-3.7.0", + "/nix/store/aasd1r6bpinfnkcjkgicbzsksrq88rmy-kmod-27" + ] + }, + { + "closureSize": 164222072, + "narHash": "sha256:175f0dhkmnd79indy19xfvqxnpzj7z91668yj4nwqn0yal9bq6zn", + "narSize": 674992, + "path": "/nix/store/75r8z0iz7c4zw7z30zbrw45mg8m068j5-libwacom-1.8", + "references": [ + "/nix/store/01fp87dr6h6s8rhjifd6vnbnwm1cjd6q-libgudev-234", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/75r8z0iz7c4zw7z30zbrw45mg8m068j5-libwacom-1.8" + ] + }, + { + "closureSize": 33097040, + "narHash": "sha256:1agb9h42ydzrjl9hwdh6fsdrbz6vv3cvsg79m0ph7z0w7zacdn8i", + "narSize": 8184, + "path": "/nix/store/76bjidga1is8s904093lbgszaih8ix2x-bzip2-1.0.6.0.1-dev", + "references": [ + "/nix/store/76bjidga1is8s904093lbgszaih8ix2x-bzip2-1.0.6.0.1-dev", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/pp9shwhcdxxbhgp96fcaj0g8x5g54zrl-bzip2-1.0.6.0.1-bin" + ] + }, + { + "closureSize": 126427072, + "narHash": "sha256:0kqqy00jaf4rh0li5fpql2kqk8a2j7dd0bf5y2nna4v9p2hl0ap2", + "narSize": 8163624, + "path": "/nix/store/78mpzh9qpyzslb672vxh0h0xgdq45xcx-gst-plugins-base-1.18.2", + "references": [ + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/37kmaafb14l44ag5wsbs8pm9sd0xgskp-iso-codes-4.5.0", + "/nix/store/3bdc12nrmlpzi2zp8bprgzihznkq8kdr-cdparanoia-III-10.2", + "/nix/store/3s8xnm5kvwy78ycy9qbaij1rywfgsp0j-tremor-unstable-2018-03-16", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/78mpzh9qpyzslb672vxh0h0xgdq45xcx-gst-plugins-base-1.18.2", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/8sy3src4f6cv2x25cvq89vq0id695x9g-libvisual-0.4.0", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/brr6ifl6n9yhanjg41kw32d4vmz5cql5-gstreamer-1.18.2", + "/nix/store/bvgb05s530rvyba8af1iqcjdaqs4900l-libXv-1.0.11", + "/nix/store/c6c5241f20dashmbgd24i8x6ajzz79j5-libtheora-1.1.1", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/p3fqiakiicp5zjcgn5lqyvifvnjg2gcq-libvorbis-1.3.7", + "/nix/store/q7j3dhx8x0dyyk8dj0736ij02vimh0ic-pango-1.47.0", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/swkfvfgdsilq4zxli07n4fppqd3n5c1f-orc-0.4.32", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33089672, + "narHash": "sha256:04l9gg4pmvydaw41vfzsjf1mai4j29xldz7kmd7qy12cisksaam3", + "narSize": 151648, + "path": "/nix/store/7aaqbj124w211lxh91951dknf28py03z-libseccomp-2.5.1-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7aaqbj124w211lxh91951dknf28py03z-libseccomp-2.5.1-lib" + ] + }, + { + "closureSize": 33062360, + "narHash": "sha256:0z5lm72cp33a24kl2ciadfml2nkxhjnndgnzcd6b6nwcyglja0bn", + "narSize": 124336, + "path": "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 33186208, + "narHash": "sha256:015h5f9ayg9563qw5z6ax6br6ksw3x7zbhdz79dv2ckkzj9s5rvy", + "narSize": 248184, + "path": "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10" + ] + }, + { + "closureSize": 154777856, + "narHash": "sha256:0z8lda96i46hfy23kaj0431mskxkwizsvc01qc15ch2qrdfxwqsn", + "narSize": 616704, + "path": "/nix/store/7sbg0wy12cb3l4br5xwxig8vly45j0hy-libjack2-1.9.17", + "references": [ + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7sbg0wy12cb3l4br5xwxig8vly45j0hy-libjack2-1.9.17", + "/nix/store/93av0c8s2341ya64w4zmf2gycp8lw3x6-celt-0.11.3", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 111190856, + "narHash": "sha256:08ybry9pkwb9vslhpk25iz2md5mpv3d3493s158k2r1c2frpaljp", + "narSize": 582752, + "path": "/nix/store/7sjbn9v0yg6fmrxgl4avscym2g16dyfr-python3.8-py-1.9.0", + "references": [ + "/nix/store/7sjbn9v0yg6fmrxgl4avscym2g16dyfr-python3.8-py-1.9.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 111158448, + "narHash": "sha256:0xh0ggq98xc6snpfzhw7rkhknjk20chxzakw6ljf9n5d72jg37fg", + "narSize": 550344, + "path": "/nix/store/7v8v5zl1cyqbm690j6dw6s3qqsbznabj-python3.8-pbr-5.5.1", + "references": [ + "/nix/store/7v8v5zl1cyqbm690j6dw6s3qqsbznabj-python3.8-pbr-5.5.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 111242608, + "narHash": "sha256:0dizz2f3xjfai17zbs26bwiwsapmxksqzhqxc2qr87vwbsqf93m6", + "narSize": 96440, + "path": "/nix/store/7vy74s2407p0d0aqbz4hyrgzjccxglk9-python3.8-pluggy-0.13.1", + "references": [ + "/nix/store/7vy74s2407p0d0aqbz4hyrgzjccxglk9-python3.8-pluggy-0.13.1", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 38387176, + "narHash": "sha256:1vzqpj56fnwkskdw7zhjsm31s8z48307fv4rmdxhr3c9x6zpszwd", + "narSize": 2414856, + "path": "/nix/store/7ygdnlvfgavckb23b8vjhhg3c29c3mai-iptables-1.8.7", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7ygdnlvfgavckb23b8vjhhg3c29c3mai-iptables-1.8.7", + "/nix/store/99jddzy7pria0f7dqmgccjypya976zfa-libpcap-1.9.1", + "/nix/store/bwfsr5xvfg6wwklglllpi50skz8g9i55-libnftnl-1.1.9", + "/nix/store/llv7ilkkj1jcj1jih42cmqx608c2j31b-libmnl-1.0.4", + "/nix/store/vp7dnvr1fcpmyjpnnjj73v49wylzjih5-libnetfilter_conntrack-1.0.8", + "/nix/store/vyi2wrvrwinbm3mn18hmi34cl0xsmbj3-libnfnetlink-1.0.1", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 174787840, + "narHash": "sha256:0zirkd78wippw8724m5cdcicq3y2arv1734cnch8w1c9szd94vcj", + "narSize": 4353576, + "path": "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/igf6zngsy7xhnmpnyyl3wf5c5c3sfn04-gnutls-3.6.15", + "/nix/store/prk78j8ml73cz18vdw4fqnd0zj9vl8yf-avahi-0.8" + ] + }, + { + "closureSize": 37295256, + "narHash": "sha256:19pllf889xx644x8k32fn12a41nsq9fa6n2jbrvafgd630dcfyj0", + "narSize": 22912, + "path": "/nix/store/84sp26mxbmblpyii4i4fq2vjagcvgmk1-libXinerama-1.1.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/84sp26mxbmblpyii4i4fq2vjagcvgmk1-libXinerama-1.1.4", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 38007256, + "narHash": "sha256:0xpw0i359zsfqq3pjihnyqnc6rzq8fxlal8awhjcd73zrhkvqpvm", + "narSize": 768088, + "path": "/nix/store/86gb5b8ql34zil7cxya016wrssjsskdc-libssh-0.8.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/86gb5b8ql34zil7cxya016wrssjsskdc-libssh-0.8.9", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 39631264, + "narHash": "sha256:1yzkdpgg6zx9n7qm3gs3qjndwax277bypir3y21r7gfcj8fzxclg", + "narSize": 636472, + "path": "/nix/store/894hgr9xfh3mrd8zy0xh4hx0sijdalfk-flac-1.3.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/894hgr9xfh3mrd8zy0xh4hx0sijdalfk-flac-1.3.3", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 41425760, + "narHash": "sha256:007skw67rn4dn04ncpll5mpix33m0y5krl5q9czkpmwhjbb3lkmj", + "narSize": 908992, + "path": "/nix/store/8bn10f2km1mhmkjhmq58lgqcas7cfflb-libarchive-3.5.1-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/8bn10f2km1mhmkjhmq58lgqcas7cfflb-libarchive-3.5.1-lib", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/mh3fm4hg8pli4h02j1mnzjk81v0hi8pi-zstd-1.4.8", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5" + ] + }, + { + "closureSize": 110822392, + "narHash": "sha256:1g0zx6gdk6pq04chqichy53y1vyjw2qsvm5ff566lg7xw2g7j96c", + "narSize": 214288, + "path": "/nix/store/8dvrhfnj1212zsjfk16ldgjgyxnp23j8-python3.8-soupsieve-2.0.1", + "references": [ + "/nix/store/8dvrhfnj1212zsjfk16ldgjgyxnp23j8-python3.8-soupsieve-2.0.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 130483400, + "narHash": "sha256:13c7pdv41g0mdj1ir6q208qqp8ymbnc2w5b623gcds03jy9jppf2", + "narSize": 81336, + "path": "/nix/store/8gv49ax9kda52zc0024s7789sillwzl7-python3.8-tkinter-3.8.7", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rz93hi8v04jia6xq4d6r0gh80rhay34c-tk-8.6.9", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 168958584, + "narHash": "sha256:1219n1n5qkgsibxlcjzp3h5fzb01k3rp8i8w9hsqf6qycim1fs35", + "narSize": 625200, + "path": "/nix/store/8l8x1gp4wqql2ng0y1jvfbnk0zlaz6am-python3.8-dbus-python-1.2.16", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/8l8x1gp4wqql2ng0y1jvfbnk0zlaz6am-python3.8-dbus-python-1.2.16", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib" + ] + }, + { + "closureSize": 33510344, + "narHash": "sha256:1p3d7nixhsalk4phzygnxf0zma8g2rv5k68ycm7gmabrlvpqgs9s", + "narSize": 572320, + "path": "/nix/store/8sy3src4f6cv2x25cvq89vq0id695x9g-libvisual-0.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/8sy3src4f6cv2x25cvq89vq0id695x9g-libvisual-0.4.0" + ] + }, + { + "closureSize": 33460568, + "narHash": "sha256:1mb1vvs8c037wz0gy2fm9jqlldfyblikw236hpx8091vhgxwrz9q", + "narSize": 522544, + "path": "/nix/store/8w2r3lp9zkqd5rgqxxx8vi9k8kf7ckw4-pcre-8.44", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/8w2r3lp9zkqd5rgqxxx8vi9k8kf7ckw4-pcre-8.44" + ] + }, + { + "closureSize": 427272, + "narHash": "sha256:1kn3a9xp251i8h8pwybf0sng7kjk2ibm9g6fkya1c2bdlwrg2556", + "narSize": 427272, + "path": "/nix/store/92119q9izv7vgws8krgi9znpgjsxbl6q-wayland-protocols-1.20", + "references": [ + "/nix/store/92119q9izv7vgws8krgi9znpgjsxbl6q-wayland-protocols-1.20" + ] + }, + { + "closureSize": 110966024, + "narHash": "sha256:04nxhdqsvly4cqzs000adfydigk8gldbdfvxmd6v0n70kfqgrh2r", + "narSize": 289680, + "path": "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "references": [ + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33175816, + "narHash": "sha256:1ysrqh0nygqd822amk6gsi5512icfmj0p69bj1b7zvapzlz68hdd", + "narSize": 191952, + "path": "/nix/store/93av0c8s2341ya64w4zmf2gycp8lw3x6-celt-0.11.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/93av0c8s2341ya64w4zmf2gycp8lw3x6-celt-0.11.3", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4" + ] + }, + { + "closureSize": 114176440, + "narHash": "sha256:0a6jb6n8ychkb3grcrjkzl2bh733s131zbrixk8xrhinnf76i53v", + "narSize": 3568336, + "path": "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "references": [ + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 35377584, + "narHash": "sha256:1d7hwy66cc9ymaspdrf5yadg142nrdiw2zmfwggh5rb3sblr6i96", + "narSize": 1103328, + "path": "/nix/store/99jddzy7pria0f7dqmgccjypya976zfa-libpcap-1.9.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/99jddzy7pria0f7dqmgccjypya976zfa-libpcap-1.9.1", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 40874368, + "narHash": "sha256:0kiycs7ig4sv8x2ckh2dsqbbcy5wcaky9rwi5ndmwhwjbfzwm87i", + "narSize": 76728, + "path": "/nix/store/9amvfnlxw93w8h6m2mj4ji89fv0nmaq7-speexdsp-1.2.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/48y786pcj1slmhqvys0l96pl124f8wg6-fftw-single-3.3.9", + "/nix/store/9amvfnlxw93w8h6m2mj4ji89fv0nmaq7-speexdsp-1.2.0" + ] + }, + { + "closureSize": 33352528, + "narHash": "sha256:1ymnx33nyd9xls8qcd6v2k4zbymaq9xlw5lj8ga1m6fcnw6yrwjw", + "narSize": 414504, + "path": "/nix/store/9bg5y53g9rylvr46psmk7lc9dpp5dv4n-giflib-5.2.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 33032472, + "narHash": "sha256:1gm01minn5irnadsp5v9m0pw2pj9bg803l95rcd342z9dhagl37i", + "narSize": 94448, + "path": "/nix/store/9d69g8hzi9kmxbnfyh336x5sf1hinm73-libtasn1-4.16.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/9d69g8hzi9kmxbnfyh336x5sf1hinm73-libtasn1-4.16.0" + ] + }, + { + "closureSize": 33115448, + "narHash": "sha256:1wy6xn2r60j57j6jlw51sswj8xpi0j9wrcqlc5lab8sgx179vvfv", + "narSize": 177424, + "path": "/nix/store/9f4bd1dgzpywdic1hqjlx38dz7w6dfrl-popt-1.16", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/9f4bd1dgzpywdic1hqjlx38dz7w6dfrl-popt-1.16" + ] + }, + { + "closureSize": 110648408, + "narHash": "sha256:0k2vmqkydnsrg61sknaf2xkmxb8fza5w332dp3d6yjanx6s87aq8", + "narSize": 40304, + "path": "/nix/store/9gxx4hsg4yr7naxnxaz93fawvb7dmbv1-python3.8-decorator-4.4.2", + "references": [ + "/nix/store/9gxx4hsg4yr7naxnxaz93fawvb7dmbv1-python3.8-decorator-4.4.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 110688224, + "narHash": "sha256:0qqwbnsl4p7zn49x9cqcgf74n97s3wf7rgzhbv7b66xppnjncnw3", + "narSize": 80120, + "path": "/nix/store/9p9xvizv67gz468cky5ff4i6m1kgn0sc-python3.8-pysocks-1.7.1", + "references": [ + "/nix/store/9p9xvizv67gz468cky5ff4i6m1kgn0sc-python3.8-pysocks-1.7.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 110628336, + "narHash": "sha256:1v2lbkalsx86cblg80ngadrb49wb23ylki7y6n1xzjyf9x5m9crm", + "narSize": 20232, + "path": "/nix/store/9wk4ch16cv9fwd5wgmnqqfgyxbwqsnyp-python3.8-iniconfig-1.1.1", + "references": [ + "/nix/store/9wk4ch16cv9fwd5wgmnqqfgyxbwqsnyp-python3.8-iniconfig-1.1.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33058880, + "narHash": "sha256:0v6ny4l78pi1a2ym95089rpjar74459cm6l4810bgkqskgn2n0dz", + "narSize": 120856, + "path": "/nix/store/a1w9vjligp1rvinxllz9ad9qg9jjclsz-speex-1.2.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/a1w9vjligp1rvinxllz9ad9qg9jjclsz-speex-1.2.0" + ] + }, + { + "closureSize": 344168, + "narHash": "sha256:0pjnlwgic5c8lgi67kc8fh6i5y101v5nkxfp66izymy8dwin8vry", + "narSize": 344168, + "path": "/nix/store/a2vqfqyyhpys06zah2j99s7jvv50mccn-alsa-topology-conf-1.2.4", + "references": [] + }, + { + "closureSize": 1103112032, + "narHash": "sha256:0522d80di33n5019aczbjz5ilfvsqsrbqkd6s6mwa9zyvdggigcd", + "narSize": 6201336, + "path": "/nix/store/a60s3c4hfxy2gffk0w9iqg6ba4z5rf5v-anki-2.1.15", + "references": [ + "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "/nix/store/17jq0l2j8knyss9xna8c45ighmra6wk1-python3.8-cycler-0.10.0", + "/nix/store/1d07jhijhbfss5g43xlwvaxp4jagix0v-qtsvg-5.15.2-bin", + "/nix/store/1w1qqn7spci406680kh1jl4z7xfbrmw6-lame-3.100", + "/nix/store/228y86wbkl3rnmlsrm5n7lzmy11n3fn3-python3.8-cryptography-3.3.2", + "/nix/store/2ckcmgrnp0ambyfkbidrsj18y9xjc0b4-python3.8-PyAudio-0.2.11", + "/nix/store/3diqalwg0320zky06n03vw2bsphiv70w-python3.8-PyQt5_sip-12.8.1", + "/nix/store/3sgkd6knn8aidjiqydivi9fjbnq0idbb-python3.8-python-dateutil-2.8.1", + "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "/nix/store/484glwwy4fzk3x7n8bypyq6a2fniq4y0-python3.8-olefile-0.46", + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/6vlwm4rhjsxv3xcs99apc019nqvjgxs1-libpng-apng-1.6.37-dev", + "/nix/store/7v8v5zl1cyqbm690j6dw6s3qqsbznabj-python3.8-pbr-5.5.1", + "/nix/store/8dvrhfnj1212zsjfk16ldgjgyxnp23j8-python3.8-soupsieve-2.0.1", + "/nix/store/8gv49ax9kda52zc0024s7789sillwzl7-python3.8-tkinter-3.8.7", + "/nix/store/8l8x1gp4wqql2ng0y1jvfbnk0zlaz6am-python3.8-dbus-python-1.2.16", + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/9gxx4hsg4yr7naxnxaz93fawvb7dmbv1-python3.8-decorator-4.4.2", + "/nix/store/9p9xvizv67gz468cky5ff4i6m1kgn0sc-python3.8-pysocks-1.7.1", + "/nix/store/a60s3c4hfxy2gffk0w9iqg6ba4z5rf5v-anki-2.1.15", + "/nix/store/ajxacsa24y4aghz34s3ggr60n50j7xhy-python3.8-PyQtWebEngine-5.15.2-dev", + "/nix/store/b1xivmpplslqihf8yfpwan14kccjcg6a-python3.8-numpy-1.19.4", + "/nix/store/bzcyz6j9qvzzx79yzi88nch62sd10gvg-python3.8-PyQt5-5.15.2", + "/nix/store/c3rg0ngc5cahgwl9iil0dgw298w1gmca-fontconfig-2.13.92-bin", + "/nix/store/d0frnz360sw2wx3mh4952frxjs2lxsnc-python3.8-chardet-3.0.4", + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/dw4fywkrqi7wrlasnlk4z76bq4b9q3ra-qtbase-5.15.2-bin", + "/nix/store/faddfk1p27sr3rbz3fh5v2n3kmymj9jj-python3.8-Send2Trash-1.5.0", + "/nix/store/fxdx4xwrq5r8k2izmifiql3j275k48nf-python3.8-Markdown-3.3.3", + "/nix/store/g5krpqmicwzh4apank8z2wyhv9j5kd4h-python3.8-jsonschema-3.2.0", + "/nix/store/gb31j9cfqjjjv8zy9y3airgxkvx091xh-mpv-0.33.0", + "/nix/store/gzs9439n7wkjmw9hx53mfmi90fzlny95-python3.8-cffi-1.14.4", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/hj10dwvk5zjm8bpln9v4a8rvln5yjx4m-qtwayland-5.15.2-bin", + "/nix/store/hvr673qq6f3fx6525ifsp7w5j1h06maw-python3.8-mock-4.0.2", + "/nix/store/jnm3k23z1lm22jvgmp0jdyp1b5ciqch4-qtwebengine-5.15.2-bin", + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/kgacy6jpywq43jwky1m06pc2qzx4pq5p-python3.8-pyrsistent-0.17.3", + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/kpcwm33vm9hlii90v5k5i8c96494ads7-python3.8-Pillow-8.0.1", + "/nix/store/kvkfrx9ahk1kp3kr8djbmq8yz1g4mjzs-qtdeclarative-5.15.2-bin", + "/nix/store/ll5b5ga5ngf8w9gpkfw369mrm6h3j6an-python3.8-setuptools_scm-4.1.2", + "/nix/store/lsjp64bsppqyljj6h12qw18di7yywmi3-python3.8-matplotlib-3.3.3", + "/nix/store/m1y15bsxwa58mphgnzb4xh7zl3n9xbiw-qtquickcontrols-5.15.2", + "/nix/store/nm6g5z088nspz11r3bv6jyz0digflnji-python3.8-urllib3-1.26.2", + "/nix/store/pb0dl4yyls39qpjam0f7nc1i4hvm1ngj-python3.8-pyOpenSSL-20.0.0", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/pp9shwhcdxxbhgp96fcaj0g8x5g54zrl-bzip2-1.0.6.0.1-bin", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rka0aj2f2wnv0dkli7f00qldxlk1zn21-python3.8-beautifulsoup4-4.9.3", + "/nix/store/rz93hi8v04jia6xq4d6r0gh80rhay34c-tk-8.6.9", + "/nix/store/s93qggnlaa8cn4x38c4cv5qy761s1g5l-python3.8-pycparser-2.20", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "/nix/store/vk4na3xr11ibq5lcxzpkvwpgm3dyahx7-python3.8-kiwisolver-1.3.1", + "/nix/store/vzlcj8gi8z2d5h8zq237kzrifsrfz0l5-python3.8-requests-2.25.0", + "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "/nix/store/wp184cbvgxqpx4xnq9pn28pqbglhps9v-python3.8-pyasn1-0.4.8", + "/nix/store/wq452vap3zpf11x9iv2j26fbyqbdwrlv-python3.8-tornado-6.1", + "/nix/store/wwjhb23kqnp8dxz6b4ki6vyrr1frri9j-python3.8-SQLAlchemy-1.3.20", + "/nix/store/ymja0zmf6mp79dzgsd5lrmrnwijzhk7y-anki-manual-2.1.15", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/z7iic0pjvfzp5m45rmhvn1afk6b4bvrs-python3.8-pytz-2020.5", + "/nix/store/zpzqzd6a087nnvrh68qbmznkyrcc89z4-python3.8-PyQtWebEngine-5.15.2" + ] + }, + { + "closureSize": 87000944, + "narHash": "sha256:0r86fk6xcak0w7s4vs9m04cml3zfnk7bshiba8qkx6m9rsy4hgsw", + "narSize": 10603200, + "path": "/nix/store/a9mqxbyy9zgghhki5kngqq5md7ww5kqd-systemd-minimal-247.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7aaqbj124w211lxh91951dknf28py03z-libseccomp-2.5.1-lib", + "/nix/store/a9mqxbyy9zgghhki5kngqq5md7ww5kqd-systemd-minimal-247.2", + "/nix/store/aasd1r6bpinfnkcjkgicbzsksrq88rmy-kmod-27", + "/nix/store/bg2fiv99cnym26jfrkp097wvxv4cwj5l-kexec-tools-2.0.20", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "/nix/store/gcry1ybzkgx68jhlab0qvp6ivc0vmzpk-libcap-2.47-lib", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "/nix/store/jhyzjn76gbavvmcph4k52djas8sjli89-audit-2.8.5", + "/nix/store/jq007w2r23g9hfhv9hi9dg55jd8dlywx-bash-interactive-4.4-p23", + "/nix/store/kijqqjh8sd8si9rdsjsf3pylp9rrd0vq-util-linux-2.36.1-bin", + "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0", + "/nix/store/q79zfzv398c20vf5i546z8pjsap0hv11-kbd-2.0.4", + "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 33764400, + "narHash": "sha256:0rrbyaspnm9gqxhr0bmr5rr49g5a64q43p90719fxznrxvs9rvh1", + "narSize": 336624, + "path": "/nix/store/aasd1r6bpinfnkcjkgicbzsksrq88rmy-kmod-27", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/aasd1r6bpinfnkcjkgicbzsksrq88rmy-kmod-27", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5" + ] + }, + { + "closureSize": 36480472, + "narHash": "sha256:1xxdpcx3h1agvhd45q6i21iy18cwdgnjvmaaq4x7ga8hgvfa8953", + "narSize": 2085152, + "path": "/nix/store/af3ssamyq8v2lsf76471gyiymzwv1jvp-libxcb-1.14-dev", + "references": [ + "/nix/store/af3ssamyq8v2lsf76471gyiymzwv1jvp-libxcb-1.14-dev", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14" + ] + }, + { + "closureSize": 64689368, + "narHash": "sha256:1zja9f0wy7xglkf0gpd6h0p1kqpb3zy0vs37p1r94lslc4gndqyv", + "narSize": 1932424, + "path": "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "references": [ + "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/fl05b99rvw2iq6ihmlic3xp4awkrlr9k-pixman-0.38.4", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 712670176, + "narHash": "sha256:080fx1ywyy1c9mn6j1swk6z50vwfwvcxi4dwvla88x5sya6xw043", + "narSize": 1208, + "path": "/nix/store/ajxacsa24y4aghz34s3ggr60n50j7xhy-python3.8-PyQtWebEngine-5.15.2-dev", + "references": [ + "/nix/store/1d07jhijhbfss5g43xlwvaxp4jagix0v-qtsvg-5.15.2-bin", + "/nix/store/4mzg1bx49gzf610ffhs920ylrnji6p7j-qtwebchannel-5.15.2-bin", + "/nix/store/clcsp717ls7ryx0q2sipkjz75japn2q8-qtlocation-5.15.2-bin", + "/nix/store/dw4fywkrqi7wrlasnlk4z76bq4b9q3ra-qtbase-5.15.2-bin", + "/nix/store/jnm3k23z1lm22jvgmp0jdyp1b5ciqch4-qtwebengine-5.15.2-bin", + "/nix/store/kvkfrx9ahk1kp3kr8djbmq8yz1g4mjzs-qtdeclarative-5.15.2-bin", + "/nix/store/m1y15bsxwa58mphgnzb4xh7zl3n9xbiw-qtquickcontrols-5.15.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/ssd1xj2mkvia5xlk03zx6xfx11z34b8w-python3.8-PyQt5-5.15.2-dev", + "/nix/store/vjdnrdsdld9clrn85wjb9wzp3zsf5wzz-qtmultimedia-5.15.2-bin", + "/nix/store/zpzqzd6a087nnvrh68qbmznkyrcc89z4-python3.8-PyQtWebEngine-5.15.2" + ] + }, + { + "closureSize": 36222432, + "narHash": "sha256:0g5xj6d2l950m42x5ss5xs0c215fw17k15y45q3gygncq9jm9ihc", + "narSize": 1095264, + "path": "/nix/store/aqj7dczh37q4n5fz0l28f1af3d40hhlv-gnupg-2.2.27", + "references": [ + "/nix/store/371qb1hvmbva65kffvcl1n47m78amcd6-libassuan-2.5.4", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3x0h90zzvhdv527gmi07ixxib8isyh4k-libgcrypt-1.9.1", + "/nix/store/aqj7dczh37q4n5fz0l28f1af3d40hhlv-gnupg-2.2.27", + "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41" + ] + }, + { + "closureSize": 301841264, + "narHash": "sha256:1ylg7w6m3c8gaq708qz1hypc8wflgv56y57kl9gpym6qc9xpfjrn", + "narSize": 25732992, + "path": "/nix/store/b1xivmpplslqihf8yfpwan14kccjcg6a-python3.8-numpy-1.19.4", + "references": [ + "/nix/store/2bjd64hgdyzpmp6z40pm4bmvbl7p8i7y-lapack-3", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/b1xivmpplslqihf8yfpwan14kccjcg6a-python3.8-numpy-1.19.4", + "/nix/store/l5g63si4h5bl8s85ajmkd8dh0gw4sdw2-blas-3", + "/nix/store/qwh59ryj3g06cv5w1z8i8d172jj2csgk-lapack-3-dev", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zzc5m9p3zgl0bkvrf1r2lp7hbci26z6l-blas-3-dev" + ] + }, + { + "closureSize": 34380840, + "narHash": "sha256:08pvr48scs092k8y6h2g5pfah44rkz7gmr1bhh1rp5fl3j666iyx", + "narSize": 106584, + "path": "/nix/store/b86dkr6h6rvfmk311889hpsgkv9a45c5-libossp-uuid-1.6.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/b86dkr6h6rvfmk311889hpsgkv9a45c5-libossp-uuid-1.6.2", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 33137504, + "narHash": "sha256:1jil9zc5l39x8ilqk1idibwww9hd7x4ba8rmc02zmxs9kk4bcqp2", + "narSize": 199480, + "path": "/nix/store/bacw91ggd83xiqmc4zrv1x8g69xml7y1-libimagequant-2.14.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bacw91ggd83xiqmc4zrv1x8g69xml7y1-libimagequant-2.14.0" + ] + }, + { + "closureSize": 33652184, + "narHash": "sha256:02zz93yc8gwf8xrv34q2p75w4kngfdf0cvrijhxyl3kd1l25fa2i", + "narSize": 181360, + "path": "/nix/store/bbhnapql62x52lf70pzlp15bx7z9xkfw-libdvdnav-6.1.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bbhnapql62x52lf70pzlp15bx7z9xkfw-libdvdnav-6.1.0", + "/nix/store/hzqfldgnicg6i1vw9achgqwm0jr60rd7-libdvdread-6.1.1" + ] + }, + { + "closureSize": 33296280, + "narHash": "sha256:1qr9cvaw2shgrz4c31z1c24vfanljk0ldsknjjysc8sr2rhy0pc8", + "narSize": 233920, + "path": "/nix/store/bg2fiv99cnym26jfrkp097wvxv4cwj5l-kexec-tools-2.0.20", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11" + ] + }, + { + "closureSize": 47420824, + "narHash": "sha256:0l8268r0208wb8xiilsmv516q69y5h74ibc517ajgx8v97zx0jxi", + "narSize": 6439896, + "path": "/nix/store/bhyhm0a21d16wan8wl6702n5zm7vqagd-elfutils-0.182", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6nc41m1ql6c35ckz6z97fdzniad3d5ya-hook", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/bhyhm0a21d16wan8wl6702n5zm7vqagd-elfutils-0.182", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 33056280, + "narHash": "sha256:0jdsxh9c12j0g0flqz0qp15jj6r14z4bahgzshlyzh1m73xd2i17", + "narSize": 118256, + "path": "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10" + ] + }, + { + "closureSize": 33687288, + "narHash": "sha256:11iyl0a121abxn8r002hfg37vjnaa6p9hrg4gc24i0pgb6w6h3pb", + "narSize": 749264, + "path": "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41" + ] + }, + { + "closureSize": 33008680, + "narHash": "sha256:0m8411743xv4xf9ksxlk8jmq56wrr1x3rv9s7cbqqx3xx9dl8b7j", + "narSize": 70656, + "path": "/nix/store/br9q6v8ql9vqqkljpv3lbnf6icr9gg1q-libdaemon-0.14", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/br9q6v8ql9vqqkljpv3lbnf6icr9gg1q-libdaemon-0.14" + ] + }, + { + "closureSize": 37533312, + "narHash": "sha256:0nghd896jyfl36shdiyil50i8hjqxcdfz726hjgp4g2v68ypdcgi", + "narSize": 294144, + "path": "/nix/store/brjn114l5yxkmz6w1h5qmb71akb09nzr-libssh2-1.9.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/brjn114l5yxkmz6w1h5qmb71akb09nzr-libssh2-1.9.0", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 69231712, + "narHash": "sha256:0kvddqsdnyq23iy77437qvjimypqhfgi2nns7ghbq7cr8npryb45", + "narSize": 4996728, + "path": "/nix/store/brr6ifl6n9yhanjg41kw32d4vmz5cql5-gstreamer-1.18.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/bhyhm0a21d16wan8wl6702n5zm7vqagd-elfutils-0.182", + "/nix/store/brr6ifl6n9yhanjg41kw32d4vmz5cql5-gstreamer-1.18.2", + "/nix/store/f5lbz2zk67lx3qdncpbn7x60fi612fqp-libunwind-1.4.0", + "/nix/store/gcry1ybzkgx68jhlab0qvp6ivc0vmzpk-libcap-2.47-lib" + ] + }, + { + "closureSize": 37305216, + "narHash": "sha256:07jf4w43znp74x5ri2bcpyiznp2khdha3ccp1rxi0lg966yi3k2k", + "narSize": 32872, + "path": "/nix/store/bvgb05s530rvyba8af1iqcjdaqs4900l-libXv-1.0.11", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bvgb05s530rvyba8af1iqcjdaqs4900l-libXv-1.0.11", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33280432, + "narHash": "sha256:03d5y663fgch0gmcmf3vvnhw6wlhpqaw6ig711ngh2wqx0gqqlmd", + "narSize": 298736, + "path": "/nix/store/bwfsr5xvfg6wwklglllpi50skz8g9i55-libnftnl-1.1.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bwfsr5xvfg6wwklglllpi50skz8g9i55-libnftnl-1.1.9", + "/nix/store/llv7ilkkj1jcj1jih42cmqx608c2j31b-libmnl-1.0.4" + ] + }, + { + "closureSize": 380482816, + "narHash": "sha256:0jr3z8fyx38hq1199rdr80b0v0ldk7m4q8ykdh837z7vqhcm3scr", + "narSize": 28884720, + "path": "/nix/store/bzcyz6j9qvzzx79yzi88nch62sd10gvg-python3.8-PyQt5-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bzcyz6j9qvzzx79yzi88nch62sd10gvg-python3.8-PyQt5-5.15.2", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/pnw3b0pijf83b12dw7fkpx4xb54879wn-qtsvg-5.15.2", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 174201672, + "narHash": "sha256:14h7f8ywjm0ykn2g8gp1pabdpffq2xpw2q2h6rnc0qfrhb2zqs54", + "narSize": 596720, + "path": "/nix/store/bzlydmzc47dim3xrx3n7qkpjbrwdl74z-at-spi2-core-2.38.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/bzlydmzc47dim3xrx3n7qkpjbrwdl74z-at-spi2-core-2.38.0", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/kbmx94jgcbhcz9l8h59hsxlcqrmqzv41-libXtst-1.2.3", + "/nix/store/pv997v33kgzga3185wjzzf70k8bi087z-dconf-0.38.0-lib", + "/nix/store/x4b6qz5hjc3rqyaphyfr5hyq48q4s62i-gsettings-desktop-schemas-3.38.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 38637656, + "narHash": "sha256:0xpb9561wbalxbjwhhfb6hrrlmzrc9z7bns0k1kn04rvyvs3r9k3", + "narSize": 197864, + "path": "/nix/store/c3rg0ngc5cahgwl9iil0dgw298w1gmca-fontconfig-2.13.92-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 33717968, + "narHash": "sha256:1924022afd2ix4kv961wc857jk92bjxm28jbaxpvrrnbppp0wq6m", + "narSize": 734104, + "path": "/nix/store/c6c5241f20dashmbgd24i8x6ajzz79j5-libtheora-1.1.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/c6c5241f20dashmbgd24i8x6ajzz79j5-libtheora-1.1.1", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4" + ] + }, + { + "closureSize": 33137040, + "narHash": "sha256:0wrd30qzq388f40vvmk87cidrzpxb0r65g0n0jck1177qbf85lfm", + "narSize": 109872, + "path": "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3y5s6iyzqg2rwy8qz79i5f6cfmwqiaav-attr-2.4.48", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53" + ] + }, + { + "closureSize": 34395320, + "narHash": "sha256:0hab0npp83388h004fmbzr1ycamn5i75vmrdvgyax7hligxvcrki", + "narSize": 1399848, + "path": "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "references": [ + "/nix/store/0xi063sxmclj2jmvgbwfdshqsrx91ibx-libXau-1.0.9", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/rkbvh8g0dlgb4hszxm6hvvy1q4875nzw-libXdmcp-1.1.3" + ] + }, + { + "closureSize": 66395080, + "narHash": "sha256:1x7mar5gcscmajpv7nhcpjh9qgvjjg2fxh6rpk99lpdp546fgyn7", + "narSize": 1705712, + "path": "/nix/store/chrv2sdgfpckw4jskrydn04kaimq0xnk-gobject-introspection-1.66.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/chrv2sdgfpckw4jskrydn04kaimq0xnk-gobject-introspection-1.66.1", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3" + ] + }, + { + "closureSize": 35992672, + "narHash": "sha256:1nsl959b88lmgyvi37pl3jm7n66b4zf37cv4f1qadlvxss6k9fk4", + "narSize": 2855632, + "path": "/nix/store/cisss0pcfh72kmnsv4qa6h41wcwb9mkv-gnutar-1.32", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "/nix/store/cisss0pcfh72kmnsv4qa6h41wcwb9mkv-gnutar-1.32" + ] + }, + { + "closureSize": 294061840, + "narHash": "sha256:036k82y2px9i592mmshyv894v6m637mwlxkv3lxv13x328j19zw8", + "narSize": 7359792, + "path": "/nix/store/clcsp717ls7ryx0q2sipkjz75japn2q8-qtlocation-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 46294056, + "narHash": "sha256:017pnf3jg89j85jlikdnfg2pqn1ia8qf8hhkhiymfi9ncql29wb6", + "narSize": 5882480, + "path": "/nix/store/crwbg79kvw1swkiq5k1wf76abcrysbzp-postgresql-11.10-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/b86dkr6h6rvfmk311889hpsgkv9a45c5-libossp-uuid-1.6.2", + "/nix/store/crwbg79kvw1swkiq5k1wf76abcrysbzp-postgresql-11.10-lib", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 37272344, + "narHash": "sha256:0l2bd3fw31x67mwsmc2yz75lmsgwgbydyc6n8lj51x1x498b090d", + "narSize": 96976, + "path": "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33814824, + "narHash": "sha256:0slkk29y7i7b8l9i9ic9asv6fbfl1msa37k1w1i0jl5sghbgxxdd", + "narSize": 876800, + "path": "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12" + ] + }, + { + "closureSize": 39224888, + "narHash": "sha256:0nap42fwnwi6r7jyipgpsz20xb3y61ivcnds4zwy2zzapkldmnyn", + "narSize": 275936, + "path": "/nix/store/cxmpl19ncrqc7h22vjrgk4nqsjwsz53s-graphite2-1.3.14", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cxmpl19ncrqc7h22vjrgk4nqsjwsz53s-graphite2-1.3.14", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 33272816, + "narHash": "sha256:0pb9liljvkqcgg3bvflhh2pd047mcj8akf40rnv842i996phv6vh", + "narSize": 114560, + "path": "/nix/store/cya2xqjjf8m8x4dqrm6zmcx603d6rx7b-libpsl-0.21.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/48gydzv98ns14ylw7gmkx38r4gnds82m-libunistring-0.9.10", + "/nix/store/cya2xqjjf8m8x4dqrm6zmcx603d6rx7b-libpsl-0.21.0", + "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0", + "/nix/store/szphjhh0j68yhddyw2zh8ykr00mhd1r2-publicsuffix-list-2019-05-24" + ] + }, + { + "closureSize": 111427600, + "narHash": "sha256:02ncgw31dsbzfdfb2y3m0flx2x7q2ip14d0kv3vkhd56wfjf7m6a", + "narSize": 819496, + "path": "/nix/store/d0frnz360sw2wx3mh4952frxjs2lxsnc-python3.8-chardet-3.0.4", + "references": [ + "/nix/store/d0frnz360sw2wx3mh4952frxjs2lxsnc-python3.8-chardet-3.0.4", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 36493672, + "narHash": "sha256:1h64gj8bzs1xfhcacyykals3r829qpdr4z04gj4yidy29ss33sp4", + "narSize": 3555648, + "path": "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2" + ] + }, + { + "closureSize": 1110543832, + "narHash": "sha256:1xzvpcwlihjfhznprclh320is59bxpnawkk40jsmhlpbzd2lmrm0", + "narSize": 384, + "path": "/nix/store/d42mjlakai854fhns781453xpkhfscpj-startup-script", + "references": [ + "/nix/store/21586x62x26h2nmn6n6df25yybrpnl8k-with-env-from-dir", + "/nix/store/2y63mp9ln1xychnm1bhgl5r0j0islpj8-ankisyncd-2.2.0", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 48793104, + "narHash": "sha256:10231wisbzr17qhj6n5cvm6hqwgbh1lyj90i51dsbvifik5w4fix", + "narSize": 1675208, + "path": "/nix/store/d52zn1yxh8rw1c5ii0c96x2pq13idgj5-rubberband-1.9.0", + "references": [ + "/nix/store/108sm1fjlf3vnf6v5l6bakpf6mqmnjll-fftw-double-3.3.9", + "/nix/store/3nqv8f3qkxl3346a2394462bm01mhhad-libsamplerate-0.1.9", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/d52zn1yxh8rw1c5ii0c96x2pq13idgj5-rubberband-1.9.0", + "/nix/store/h6r2cfzi3g0mmb9nbrrgw0cn9xzs5fg4-libsndfile-1.0.30", + "/nix/store/kl0zjgqcic5zrckfzc2cl4nfa9wspy5n-vamp-plugin-sdk-2.10", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 110886312, + "narHash": "sha256:0nrxd8p5ykc40h29xkix3q4hkcjhml69mycbmf5z5whdj1ps1fj8", + "narSize": 278208, + "path": "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "references": [ + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33231832, + "narHash": "sha256:0h4zlcphawjbr12iwam68s6rfkb59dchmks3qzazzl0sh3svsicf", + "narSize": 293808, + "path": "/nix/store/dvhrdm83n5hkxqw109jc4f7rvbvzgp8c-numactl-2.0.14", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/dvhrdm83n5hkxqw109jc4f7rvbvzgp8c-numactl-2.0.14" + ] + }, + { + "closureSize": 365527304, + "narHash": "sha256:01n90hlmh3hy211svd6p56xrjwszqh8mrzx6ajalchnxxcv4ic59", + "narSize": 3756656, + "path": "/nix/store/dw4fywkrqi7wrlasnlk4z76bq4b9q3ra-qtbase-5.15.2-bin", + "references": [ + "/nix/store/0h2yrxxs74gwbd4gcgb7gpbaxyy9mw5b-gdk-pixbuf-2.42.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/53m4njmz3wsjfd4ihyz18la1dpcr8a56-xcb-util-keysyms-0.4.0", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/crwbg79kvw1swkiq5k1wf76abcrysbzp-postgresql-11.10-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gml5rk2pg9nvhv6b5i424ymq8gy241m4-libSM-1.2.3", + "/nix/store/h63xqnjsbgb968fd7i1k5wmfp9pjj3l9-gtk+3-3.24.24", + "/nix/store/idykkl10nm1g18hnz1i1g2g4z3llss85-xcb-util-renderutil-0.3.9", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/k128dz0cbaikxm1m2jb4ln0lmfglqbch-xcb-util-image-0.4.0", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/krjr5x7766w5jy376y57v5qdmfx64d17-libinput-1.16.4", + "/nix/store/l1pr6yfslc9cbfg5x3p3px7m0l8nlpci-xcb-util-wm-0.4.1", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/magdkhr097vywxkzwsd9xv9jjmxp4gr0-xcb-util-0.4.0", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/pv997v33kgzga3185wjzzf70k8bi087z-dconf-0.38.0-lib", + "/nix/store/q7j3dhx8x0dyyk8dj0736ij02vimh0ic-pango-1.47.0", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rfrh53sl94l663cpmm333n9ci8ypfzpk-mesa-20.3.4", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/x4ad37j6q7x31s6x9lbacq06qslq6rvc-atk-2.36.0", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 32994736, + "narHash": "sha256:13dx24v46y67p18hnql7gp1m2617xvs8417rdzh0izdhgn61nvcf", + "narSize": 56712, + "path": "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3" + ] + }, + { + "closureSize": 33656824, + "narHash": "sha256:0249gvayc57nywj120q867nwhhlp1csgg5nsw49hybz77nyzl5gc", + "narSize": 229048, + "path": "/nix/store/f5lbz2zk67lx3qdncpbn7x60fi612fqp-libunwind-1.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/f5lbz2zk67lx3qdncpbn7x60fi612fqp-libunwind-1.4.0", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5" + ] + }, + { + "closureSize": 110646592, + "narHash": "sha256:055s5z29n1447jqkkqrhvgfsqv1nsls8rhl1jwcdwyvsdapm1832", + "narSize": 38488, + "path": "/nix/store/faddfk1p27sr3rbz3fh5v2n3kmymj9jj-python3.8-Send2Trash-1.5.0", + "references": [ + "/nix/store/faddfk1p27sr3rbz3fh5v2n3kmymj9jj-python3.8-Send2Trash-1.5.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 1111861208, + "narHash": "sha256:0xjhpd8h6wi7frxiv4ym9b8nid967k5klj33mgnnvqfccmczri7c", + "narSize": 296, + "path": "/nix/store/fcgyfgjhss9adn9f2jzdq5nclldi5v2l-closure", + "references": [ + "/nix/store/0sgd2psd7c9i2q2zyvg47dcflxv4fqjh-nss-cacert-3.60", + "/nix/store/gg5ngl1rbb7kifwkkmq1ir9spjdpqxhr-ankisyncd-base.json", + "/nix/store/kbz9qzjqkv2x5y4gkxcqgjfj8d0y0adh-busybox-1.32.1" + ] + }, + { + "closureSize": 43780912, + "narHash": "sha256:1aj1rrqm63cqm98w5xyjnbsgrp7xascqpbv383w9qgg94wp3as64", + "narSize": 305464, + "path": "/nix/store/fcws45k1920zhg1nq4d1n22h5mjpj7jq-libva-2.10.0", + "references": [ + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/fcws45k1920zhg1nq4d1n22h5mjpj7jq-libva-2.10.0", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 148651808, + "narHash": "sha256:0rjgdy3bh02lsh3azylv4d34ag1dpzsnvr33m3zvdj1d0wkn01if", + "narSize": 27820104, + "path": "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "references": [ + "/nix/store/1ccb3cc6mfz6jik6p76mxdy9qv1m5x53-libapparmor-2.13.6", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3wwjh8qx02v24rlr64iapf850i3xddd6-pcre2-10.36", + "/nix/store/3x0h90zzvhdv527gmi07ixxib8isyh4k-libgcrypt-1.9.1", + "/nix/store/7aaqbj124w211lxh91951dknf28py03z-libseccomp-2.5.1-lib", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7ygdnlvfgavckb23b8vjhhg3c29c3mai-iptables-1.8.7", + "/nix/store/aasd1r6bpinfnkcjkgicbzsksrq88rmy-kmod-27", + "/nix/store/aqj7dczh37q4n5fz0l28f1af3d40hhlv-gnupg-2.2.27", + "/nix/store/bg2fiv99cnym26jfrkp097wvxv4cwj5l-kexec-tools-2.0.20", + "/nix/store/bm3vrp3ipqrri5flj1zlcm6v4j8lipzq-libgpg-error-1.41", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "/nix/store/cisss0pcfh72kmnsv4qa6h41wcwb9mkv-gnutar-1.32", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/gcry1ybzkgx68jhlab0qvp6ivc0vmzpk-libcap-2.47-lib", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/h7h9nn6n9i4dldllv78mabbdxwzimbzn-curl-7.74.0", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "/nix/store/jhyzjn76gbavvmcph4k52djas8sjli89-audit-2.8.5", + "/nix/store/jq007w2r23g9hfhv9hi9dg55jd8dlywx-bash-interactive-4.4-p23", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kijqqjh8sd8si9rdsjsf3pylp9rrd0vq-util-linux-2.36.1-bin", + "/nix/store/n4i5ffd419g5viscf9sfaw1dkz6ndavn-cryptsetup-2.3.4", + "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0", + "/nix/store/q79zfzv398c20vf5i546z8pjsap0hv11-kbd-2.0.4", + "/nix/store/rk94cdqrkjhwvz6gqp16vxjhifyivs75-libmicrohttpd-0.9.71", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5", + "/nix/store/y5hjcwzr8sajlh07p7xd8a76g0dnznrd-lz4-1.9.3", + "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 33223240, + "narHash": "sha256:1f0hszdkcrxk1314yqg297d1lasj4006dg5vl2f2jx3dd41nn75k", + "narSize": 285216, + "path": "/nix/store/ffmnk291q9vsznvzarbqfingj5zwd42p-libevdev-1.10.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/ffmnk291q9vsznvzarbqfingj5zwd42p-libevdev-1.10.0" + ] + }, + { + "closureSize": 33733184, + "narHash": "sha256:0624xq1xqvj4g3j1pvfgbp1qr17v9syxcadkfzm9gq5l7kcnqscx", + "narSize": 795160, + "path": "/nix/store/fl05b99rvw2iq6ihmlic3xp4awkrlr9k-pixman-0.38.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fl05b99rvw2iq6ihmlic3xp4awkrlr9k-pixman-0.38.4" + ] + }, + { + "closureSize": 33025136, + "narHash": "sha256:0yc620hnvi9lwd22l67li55vyaq7yh94wzikxgf0c3jawp1hhhjv", + "narSize": 87112, + "path": "/nix/store/fl494vxxdf3jvjs6vyvg746wkh5i6rlf-libdatrie-2019-12-20", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fl494vxxdf3jvjs6vyvg746wkh5i6rlf-libdatrie-2019-12-20" + ] + }, + { + "closureSize": 33002936, + "narHash": "sha256:0jk77hpfqa0b52k47gfmpa6pj2g3ad7c3pvx6xmy5gmvwrm3cn7q", + "narSize": 64912, + "path": "/nix/store/fmja90xx7prh354fnjshf5zif5qzhbpw-mtdev-1.1.6", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fmja90xx7prh354fnjshf5zif5qzhbpw-mtdev-1.1.6" + ] + }, + { + "closureSize": 33285664, + "narHash": "sha256:1h49i3b4b86arivlm6gl9dgdsx0ha0rk2k120jangplnq0a3x4ad", + "narSize": 347640, + "path": "/nix/store/fpbip6kbkykirpln4amhs30lnn8cfx5c-nspr-4.29", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fpbip6kbkykirpln4amhs30lnn8cfx5c-nspr-4.29" + ] + }, + { + "closureSize": 35619192, + "narHash": "sha256:06xf7pfa7s749l24642bxq4yls27l6gpd0wr18n5r1s7lay6m4s9", + "narSize": 2681168, + "path": "/nix/store/fr2k1vwmyd5ngmb3y0v090nh21nn6gqp-glibc-2.32-35-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fr2k1vwmyd5ngmb3y0v090nh21nn6gqp-glibc-2.32-35-bin" + ] + }, + { + "closureSize": 114711960, + "narHash": "sha256:1hpfkw8bpbvjrc9jp85qc2gal74ra22lzmsj60qrz2x2r49ylvrl", + "narSize": 535520, + "path": "/nix/store/fxdx4xwrq5r8k2izmifiql3j275k48nf-python3.8-Markdown-3.3.3", + "references": [ + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/fxdx4xwrq5r8k2izmifiql3j275k48nf-python3.8-Markdown-3.3.3", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 4480, + "narHash": "sha256:14gwa47rs3lma0v2rk78q7bww19nx2g78c6yafr307smcf9vxzvz", + "narSize": 4480, + "path": "/nix/store/g5k8ispmd3kw51qimffxssri7wihpskg-dns-root-data-2019-01-11", + "references": [] + }, + { + "closureSize": 112242696, + "narHash": "sha256:1zmynd5ivphbqp4zh2xrbycx0qaa9h7ig2s711fwcry1gnvpw9s0", + "narSize": 425688, + "path": "/nix/store/g5krpqmicwzh4apank8z2wyhv9j5kd4h-python3.8-jsonschema-3.2.0", + "references": [ + "/nix/store/0aqqf6v5ng1adl8x5kmwdz2mpfcy96nm-python3.8-attrs-20.3.0", + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/936kbb93kci7kqarq61vj72dazdqby6p-python3.8-more-itertools-8.6.0", + "/nix/store/g5krpqmicwzh4apank8z2wyhv9j5kd4h-python3.8-jsonschema-3.2.0", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/kgacy6jpywq43jwky1m06pc2qzx4pq5p-python3.8-pyrsistent-0.17.3", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 268724552, + "narHash": "sha256:1vkgxzg2adfvqvzlfj5chcgxmvg4vyim22hgwksrbf9xz88zlbxp", + "narSize": 35148480, + "path": "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "references": [ + "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3wwjh8qx02v24rlr64iapf850i3xddd6-pcre2-10.36", + "/nix/store/53m4njmz3wsjfd4ihyz18la1dpcr8a56-xcb-util-keysyms-0.4.0", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/68w8lqk6wymf1rz21jjxg2c2xcd6h74w-libkrb5-1.18", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "/nix/store/gml5rk2pg9nvhv6b5i424ymq8gy241m4-libSM-1.2.3", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/idykkl10nm1g18hnz1i1g2g4z3llss85-xcb-util-renderutil-0.3.9", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/k128dz0cbaikxm1m2jb4ln0lmfglqbch-xcb-util-image-0.4.0", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/krjr5x7766w5jy376y57v5qdmfx64d17-libinput-1.16.4", + "/nix/store/l1pr6yfslc9cbfg5x3p3px7m0l8nlpci-xcb-util-wm-0.4.1", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/magdkhr097vywxkzwsd9xv9jjmxp4gr0-xcb-util-0.4.0", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 387206400, + "narHash": "sha256:02xillm2rmdlcbqqvq6ryl0595ppgayappzb3217nyi5c60ji2y9", + "narSize": 5948336, + "path": "/nix/store/gb31j9cfqjjjv8zy9y3airgxkvx091xh-mpv-0.33.0", + "references": [ + "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3xcgzy0nkq71fh2npf45p38sz0d06x77-SDL2-2.0.14", + "/nix/store/4i9y386mgyz1qmpvvkcqznva9j8vq8j3-libXScrnSaver-1.2.3", + "/nix/store/5ibrpsigb821h0j6d0a5lfbalax7w4c9-zimg-3.0.1", + "/nix/store/6y5i7lfnn4mjm52f721rdqjbnfrvrjsx-libass-0.15.0", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/84sp26mxbmblpyii4i4fq2vjagcvgmk1-libXinerama-1.1.4", + "/nix/store/8bn10f2km1mhmkjhmq58lgqcas7cfflb-libarchive-3.5.1-lib", + "/nix/store/bbhnapql62x52lf70pzlp15bx7z9xkfw-libdvdnav-6.1.0", + "/nix/store/bvgb05s530rvyba8af1iqcjdaqs4900l-libXv-1.0.11", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/d52zn1yxh8rw1c5ii0c96x2pq13idgj5-rubberband-1.9.0", + "/nix/store/fcws45k1920zhg1nq4d1n22h5mjpj7jq-libva-2.10.0", + "/nix/store/gb31j9cfqjjjv8zy9y3airgxkvx091xh-mpv-0.33.0", + "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "/nix/store/hnhn3053a8q17i6553ia56cclinpn0aq-libbluray-1.2.1", + "/nix/store/hzqfldgnicg6i1vw9achgqwm0jr60rd7-libdvdread-6.1.1", + "/nix/store/lmqli1r60fa4wqh4axz99amzqdq5dxmx-ffmpeg-4.3.1", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/mazsq1nbw96xdqbn50hbk5lxa3720p8b-openal-soft-1.19.1", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/my6w5ws92cwc4l3x7nkp0g15m53jd6mp-libcaca-0.99.beta19", + "/nix/store/nqb1yf6f5bnzrxgjx1n4jm8hnfcrydj8-lua-5.2.4", + "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rfrh53sl94l663cpmm333n9ci8ypfzpk-mesa-20.3.4", + "/nix/store/s7m36l083y4chbrgr8xnrf538p6p3713-libplacebo-3.104.0", + "/nix/store/snj32s33kpxssz7ph86ywwadn3bycj09-shaderc-2020.2-lib", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/vnki2k812rh4ngmqwawikjpj659cwpdc-vulkan-loader-1.2.162.0", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/ws5aqgg2qx1pbl26sqkqppvp6xyzpi38-uchardet-0.0.7", + "/nix/store/x7l1x7sh94l2x9bha9az19vn0zv5pja3-libvdpau-1.4", + "/nix/store/y1hybm8h1kln0hg06c42m4g1wsblc0ig-freefont-ttf-20120503", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 33008736, + "narHash": "sha256:12da2xv13pkghgm1iy7priq2pkk0p8q1sjvi7pxl28jy90rbf6q3", + "narSize": 70712, + "path": "/nix/store/gcry1ybzkgx68jhlab0qvp6ivc0vmzpk-libcap-2.47-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 1110749472, + "narHash": "sha256:107898w5dmkfln544i367pa2jrjskkm0g3cbmgwxp982qaj6grh0", + "narSize": 344, + "path": "/nix/store/gg5ngl1rbb7kifwkkmq1ir9spjdpqxhr-ankisyncd-base.json", + "references": [ + "/nix/store/0sgd2psd7c9i2q2zyvg47dcflxv4fqjh-nss-cacert-3.60", + "/nix/store/d42mjlakai854fhns781453xpkhfscpj-startup-script" + ] + }, + { + "closureSize": 37336672, + "narHash": "sha256:01sgikr9gmg89d0zk2ll96a82a7paw69ywnbz6ny21hp9bqpx9z8", + "narSize": 70600, + "path": "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "references": [ + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 34737736, + "narHash": "sha256:0pmp4y6yy9llhmnp8sm86z64sxga67icrfs2ci76443nvlrzwkbk", + "narSize": 46648, + "path": "/nix/store/gml5rk2pg9nvhv6b5i424ymq8gy241m4-libSM-1.2.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "/nix/store/gml5rk2pg9nvhv6b5i424ymq8gy241m4-libSM-1.2.3", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1" + ] + }, + { + "closureSize": 37230664, + "narHash": "sha256:01n2lzi3xkmip1d3hy7xsk3jklyfaj9fnh859dc2mcs28d2zrsix", + "narSize": 55296, + "path": "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 341972824, + "narHash": "sha256:013v27bb41w6ma4ppk93y73z7x0w05b7y6v0dw7jzny06izvhhvg", + "narSize": 1711936, + "path": "/nix/store/gsxyc0mqkq8hgf76hfha46kb00g8hbg1-qtmultimedia-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/78mpzh9qpyzslb672vxh0h0xgdq45xcx-gst-plugins-base-1.18.2", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/brr6ifl6n9yhanjg41kw32d4vmz5cql5-gstreamer-1.18.2", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/gsxyc0mqkq8hgf76hfha46kb00g8hbg1-qtmultimedia-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 39294224, + "narHash": "sha256:1a4y0ggaj8va4pjz2xk9vgf871xkghcqcvj743rbna30xfkd2bzw", + "narSize": 345272, + "path": "/nix/store/gwwx0g8bvykqlgjbcp4bqwgb1fs65jh5-audiofile-0.3.6", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/gwwx0g8bvykqlgjbcp4bqwgb1fs65jh5-audiofile-0.3.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 33635656, + "narHash": "sha256:1anp8cmni3bj01c1sqyyk8rls70kbib31rn7f14cjplm0g3xlkqx", + "narSize": 697632, + "path": "/nix/store/gwzahz3x49kjx9i6b2mlwg8d0dmfr68b-gdbm-1.19", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/gwzahz3x49kjx9i6b2mlwg8d0dmfr68b-gdbm-1.19" + ] + }, + { + "closureSize": 33864048, + "narHash": "sha256:1v0hii87gm27dyj0imlzh61wqysav3df8pfp7vwqc1la5wbg149l", + "narSize": 869312, + "path": "/nix/store/gzs9439n7wkjmw9hx53mfmi90fzlny95-python3.8-cffi-1.14.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/gzs9439n7wkjmw9hx53mfmi90fzlny95-python3.8-cffi-1.14.4" + ] + }, + { + "closureSize": 316711560, + "narHash": "sha256:1m9s6pnc8zbyqa5zpgg1inzl70hkjms0d46d3sgzx8v0qy4hk9lw", + "narSize": 37871344, + "path": "/nix/store/h63xqnjsbgb968fd7i1k5wmfp9pjj3l9-gtk+3-3.24.24", + "references": [ + "/nix/store/0h2yrxxs74gwbd4gcgb7gpbaxyy9mw5b-gdk-pixbuf-2.42.2", + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/20rw4z35dprcri6qcxsxbn24lb1ncxya-epoxy-1.5.4", + "/nix/store/261hxvhxklrqhiag25l6wq753vgcn4xy-libXdamage-1.1.5", + "/nix/store/37kmaafb14l44ag5wsbs8pm9sd0xgskp-iso-codes-4.5.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/84sp26mxbmblpyii4i4fq2vjagcvgmk1-libXinerama-1.1.4", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "/nix/store/h63xqnjsbgb968fd7i1k5wmfp9pjj3l9-gtk+3-3.24.24", + "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "/nix/store/hc39jdjdyrxyhlf2gcs7d9pvfqgppvv8-libXcomposite-0.4.5", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/q7j3dhx8x0dyyk8dj0736ij02vimh0ic-pango-1.47.0", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rl9v918p5fjc4xa4s87b97ys3i371pah-fribidi-1.0.10", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "/nix/store/wnrx0xjcpd25lrflbrp0xmqlz2qwzijl-tracker-3.0.1", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/x4ad37j6q7x31s6x9lbacq06qslq6rvc-atk-2.36.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/zfw5fadlj0604bg31jf9by0nbg41lbyg-at-spi2-atk-2.38.0" + ] + }, + { + "closureSize": 41721368, + "narHash": "sha256:0v10jhncgy3yia03igv56lag9mnl2h9hkd966d4gdq503h6hbg5l", + "narSize": 577416, + "path": "/nix/store/h6r2cfzi3g0mmb9nbrrgw0cn9xzs5fg4-libsndfile-1.0.30", + "references": [ + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/894hgr9xfh3mrd8zy0xh4hx0sijdalfk-flac-1.3.3", + "/nix/store/h6r2cfzi3g0mmb9nbrrgw0cn9xzs5fg4-libsndfile-1.0.30", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4", + "/nix/store/p3fqiakiicp5zjcgn5lqyvifvnjg2gcq-libvorbis-1.3.7" + ] + }, + { + "closureSize": 33019088, + "narHash": "sha256:110rhf1mzg9y0fcww47sbm5q2swwss51j50lxqzycdj0krbwn94j", + "narSize": 81064, + "path": "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1" + ] + }, + { + "closureSize": 42216056, + "narHash": "sha256:01kiknmi4dxbz6aa9lgx2d1p0lmcvpryg9mbvslcrzc9q4mk756r", + "narSize": 735688, + "path": "/nix/store/h7h9nn6n9i4dldllv78mabbdxwzimbzn-curl-7.74.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/65yyr8xgzb182ml0r6cm1jpjjgc6nz3d-nghttp2-1.41.0-lib", + "/nix/store/68w8lqk6wymf1rz21jjxg2c2xcd6h74w-libkrb5-1.18", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/brjn114l5yxkmz6w1h5qmb71akb09nzr-libssh2-1.9.0", + "/nix/store/h7h9nn6n9i4dldllv78mabbdxwzimbzn-curl-7.74.0", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 110676344, + "narHash": "sha256:1vg19lpz7bddwa4y5bznhzyi5b2brbvr6ymlgjxrqladwfvd8wzx", + "narSize": 68240, + "path": "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "references": [ + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 37392592, + "narHash": "sha256:08pp68s7x801mcx2m9m7bmp645x9kj25f5sk2xxnlcdzkcdq372v", + "narSize": 64952, + "path": "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 153510504, + "narHash": "sha256:03j7zhc3y038yva516d7rhf78yhss6v1ks67vyhlmgf3y0ibjd4c", + "narSize": 456448, + "path": "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/bi480nrzmbavqb69wsvkz7qf1jdf087r-libICE-1.0.10", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/gml5rk2pg9nvhv6b5i424ymq8gy241m4-libSM-1.2.3", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 44940872, + "narHash": "sha256:1lnh3r09czbknhybk6klpd2kj61mg04rq125rg1pz9rzmwza3bzx", + "narSize": 2499520, + "path": "/nix/store/hadpxl3kq01iw68dkjqyxr8ppydzgz8x-openjpeg-2.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/hadpxl3kq01iw68dkjqyxr8ppydzgz8x-openjpeg-2.4.0", + "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 115593896, + "narHash": "sha256:0ap0fmqdgk9kqfs2xmq7hhqwi3hp5w0bdmx20w095g506fn3xgs0", + "narSize": 808, + "path": "/nix/store/hawpyqx7vnxi2pcm1y9cwddnimrg96nk-python3.8-cryptography-3.3.2-dev", + "references": [ + "/nix/store/1ifl392ydwq95kpyd09i46qxp1x6wn5a-python3.8-cffi-1.14.4-dev", + "/nix/store/228y86wbkl3rnmlsrm5n7lzmy11n3fn3-python3.8-cryptography-3.3.2", + "/nix/store/3vbpc6i8j8265i6m7xiv6rs1sdzmfh77-python3.8-packaging-20.7", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 37201584, + "narHash": "sha256:1z0qvkm3v6kgwig9psf4jnj4yn6issa13qa1f1j8fxgvdh0b1msj", + "narSize": 26216, + "path": "/nix/store/hc39jdjdyrxyhlf2gcs7d9pvfqgppvv8-libXcomposite-0.4.5", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hc39jdjdyrxyhlf2gcs7d9pvfqgppvv8-libXcomposite-0.4.5", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 32983864, + "narHash": "sha256:1xcwn0nsdrx3k5lmg1lr3q50dfp8d7q474n4j0a3g2hmxqzgljy1", + "narSize": 45840, + "path": "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4" + ] + }, + { + "closureSize": 288889008, + "narHash": "sha256:0zcrfnqscw10fpgvdqy18p9izwiwkn7gy86qzk7dchna81pjzf9a", + "narSize": 1868160, + "path": "/nix/store/hj10dwvk5zjm8bpln9v4a8rvln5yjx4m-qtwayland-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/hc39jdjdyrxyhlf2gcs7d9pvfqgppvv8-libXcomposite-0.4.5", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/ms5x4bagb3rg6yp3rgyy9yhn03xz7n92-qtwayland-5.15.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 40644856, + "narHash": "sha256:04w9dsjhzrr0pp2jf8z1hmmbpzvq3wa04zp8a13c4siq62fg7bnp", + "narSize": 475472, + "path": "/nix/store/hnhn3053a8q17i6553ia56cclinpn0aq-libbluray-1.2.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/hnhn3053a8q17i6553ia56cclinpn0aq-libbluray-1.2.1", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 50550040, + "narHash": "sha256:1101wpiicss3ckknbj5lzc0i06xqd7kzgi3cd2krc0fbrnmbigis", + "narSize": 973280, + "path": "/nix/store/hp3xpsfzs534s2wjy0f4hbrsjxb92yb2-json-glib-1.4.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/hp3xpsfzs534s2wjy0f4hbrsjxb92yb2-json-glib-1.4.4" + ] + }, + { + "closureSize": 33136328, + "narHash": "sha256:088hz4m787vmbg6r1n047gqbqxv184q5jv473bnnbfjsgc9s9v38", + "narSize": 198304, + "path": "/nix/store/hpi4k9jwf1w7drz7xkhz9vdai1aqjk0h-libdvdcss-1.4.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hpi4k9jwf1w7drz7xkhz9vdai1aqjk0h-libdvdcss-1.4.2" + ] + }, + { + "closureSize": 111422520, + "narHash": "sha256:1s8v0nsvd4s75wp5bw4cnxd8gayswa0gcskgh4c48gqa5vr4pmyi", + "narSize": 195832, + "path": "/nix/store/hvr673qq6f3fx6525ifsp7w5j1h06maw-python3.8-mock-4.0.2", + "references": [ + "/nix/store/7v8v5zl1cyqbm690j6dw6s3qqsbznabj-python3.8-pbr-5.5.1", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/hvr673qq6f3fx6525ifsp7w5j1h06maw-python3.8-mock-4.0.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 33470824, + "narHash": "sha256:0f9z883p3znjcnkbq5dxlnasryn8lhaavla71s7v8acicapa7m3b", + "narSize": 334496, + "path": "/nix/store/hzqfldgnicg6i1vw9achgqwm0jr60rd7-libdvdread-6.1.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hpi4k9jwf1w7drz7xkhz9vdai1aqjk0h-libdvdcss-1.4.2", + "/nix/store/hzqfldgnicg6i1vw9achgqwm0jr60rd7-libdvdread-6.1.1" + ] + }, + { + "closureSize": 33169736, + "narHash": "sha256:0v0a4bxb71q90j21dlcd0qa24ikxw53jxxz1kj7qqa514vpcppnn", + "narSize": 231712, + "path": "/nix/store/i5ix7fg6w25rvw3gljw6w6hx36bwvp6c-json-c-0.15", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 36904232, + "narHash": "sha256:0qgpsc5kqjrhc3v95ap4471994g8gvdfp5xv9q5qiqy6l3lxap0a", + "narSize": 410560, + "path": "/nix/store/i89g9gblcmvjj7wk92i8ki26xg6n6s6d-readline-7.0p5", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2" + ] + }, + { + "closureSize": 42194184, + "narHash": "sha256:1b1gy1s2m9lljn2dnig0kaqs5mzdgyiiyj8rjdmv6i7927mj17fb", + "narSize": 999704, + "path": "/nix/store/ibw5mk7l3iqkhy0pwhvz4q9whm4dcra8-unbound-1.13.0-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12", + "/nix/store/ibw5mk7l3iqkhy0pwhvz4q9whm4dcra8-unbound-1.13.0-lib", + "/nix/store/ra3v95vxpy1ygph7af50dmikz1la6zp6-nettle-3.6", + "/nix/store/sqv0ykiri2mw4lbgir2p3bbbwk2hxmp5-gmp-6.2.1" + ] + }, + { + "closureSize": 34424624, + "narHash": "sha256:1gg6j1gzvn9xk0dzri4n2hmsh6w7zzdh054bdj98hlrn34w6mrh8", + "narSize": 29304, + "path": "/nix/store/idykkl10nm1g18hnz1i1g2g4z3llss85-xcb-util-renderutil-0.3.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/idykkl10nm1g18hnz1i1g2g4z3llss85-xcb-util-renderutil-0.3.9" + ] + }, + { + "closureSize": 42484600, + "narHash": "sha256:0a2a2qpqy5jsz35691h29qfnbj6ididxmxqlw7j41q79dpq9dd2j", + "narSize": 3535648, + "path": "/nix/store/ifykl65b31ji60x2x5vahvhxrc0b14m9-db-4.8.30", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/ifykl65b31ji60x2x5vahvhxrc0b14m9-db-4.8.30", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 50100600, + "narHash": "sha256:0hn8dn7d411hqgmy51mkidrpsnj1knr3a86l3170fm8jxdjx0dhb", + "narSize": 2753816, + "path": "/nix/store/igf6zngsy7xhnmpnyyl3wf5c5c3sfn04-gnutls-3.6.15", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/48gydzv98ns14ylw7gmkx38r4gnds82m-libunistring-0.9.10", + "/nix/store/9d69g8hzi9kmxbnfyh336x5sf1hinm73-libtasn1-4.16.0", + "/nix/store/g5k8ispmd3kw51qimffxssri7wihpskg-dns-root-data-2019-01-11", + "/nix/store/ibw5mk7l3iqkhy0pwhvz4q9whm4dcra8-unbound-1.13.0-lib", + "/nix/store/igf6zngsy7xhnmpnyyl3wf5c5c3sfn04-gnutls-3.6.15", + "/nix/store/nfbbnh63jnjyz8dxvbz8w5ycppa3mzp0-p11-kit-0.23.22", + "/nix/store/ra3v95vxpy1ygph7af50dmikz1la6zp6-nettle-3.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/sqv0ykiri2mw4lbgir2p3bbbwk2hxmp5-gmp-6.2.1" + ] + }, + { + "closureSize": 40934496, + "narHash": "sha256:04g18j75fi8xvkmq9zn2wxpadmc3pqlpwhwlxiihhbiiymgmyi7i", + "narSize": 15128, + "path": "/nix/store/iwb5mhvdpddga1l6y3bmmaqvyawl9w3g-libXrender-0.9.10-dev", + "references": [ + "/nix/store/3dwc6z983ar11ihdqm942qvwvbkaqx9a-xorgproto-2020.1", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/iwb5mhvdpddga1l6y3bmmaqvyawl9w3g-libXrender-0.9.10-dev", + "/nix/store/jhdcj3yxxdvv4fag74x9inqsrvnzf044-libX11-1.7.0-dev" + ] + }, + { + "closureSize": 34791952, + "narHash": "sha256:0xzq2557wlzdc44jkiwgnjla6w82mqknh3kn3wi3rn8lyq81ig0w", + "narSize": 1729592, + "path": "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10" + ] + }, + { + "closureSize": 34572832, + "narHash": "sha256:1bnil70bw4izxylwgps1plbhjgmii4kcn3ikbzbzl0kzfna74rn2", + "narSize": 1634808, + "path": "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1" + ] + }, + { + "closureSize": 40864072, + "narHash": "sha256:01sc41dyyc9077ldz3ym519vcgn44cq8564kd9yjcpjk7mgq8gd9", + "narSize": 258312, + "path": "/nix/store/jhdcj3yxxdvv4fag74x9inqsrvnzf044-libX11-1.7.0-dev", + "references": [ + "/nix/store/3dwc6z983ar11ihdqm942qvwvbkaqx9a-xorgproto-2020.1", + "/nix/store/af3ssamyq8v2lsf76471gyiymzwv1jvp-libxcb-1.14-dev", + "/nix/store/jhdcj3yxxdvv4fag74x9inqsrvnzf044-libX11-1.7.0-dev", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 34594064, + "narHash": "sha256:0gk62gy2bgs4wai0as74l2sddwvyzq854vj83gixg81rycn7ljas", + "narSize": 319808, + "path": "/nix/store/jhyzjn76gbavvmcph4k52djas8sjli89-audit-2.8.5", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/jhyzjn76gbavvmcph4k52djas8sjli89-audit-2.8.5", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 473795392, + "narHash": "sha256:0k9k7cs1kdzy85lsqpdii7w87syjj11r19cgw9rhczn8lyyxpr3r", + "narSize": 1093624, + "path": "/nix/store/jnm3k23z1lm22jvgmp0jdyp1b5ciqch4-qtwebengine-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rjmgp8xp6pzcnzsk26jfmxm38frsw0ry-qtwebengine-5.15.2", + "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 43914832, + "narHash": "sha256:1l0n3akz909sdp170zfl7k1s8p67fq2zygmr2350glafwn4bf2d7", + "narSize": 5674368, + "path": "/nix/store/jq007w2r23g9hfhv9hi9dg55jd8dlywx-bash-interactive-4.4-p23", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2", + "/nix/store/i89g9gblcmvjj7wk92i8ki26xg6n6s6d-readline-7.0p5", + "/nix/store/jq007w2r23g9hfhv9hi9dg55jd8dlywx-bash-interactive-4.4-p23", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 39890840, + "narHash": "sha256:1mndax2f6qj1wgin5npdnrpa6j3pvs41dvmc7xan3l1l9501q9dv", + "narSize": 520, + "path": "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "references": [ + "/nix/store/0vbk3b7fzdjikrl6l36bfrmfwc2pw1p1-libglvnd-1.3.2" + ] + }, + { + "closureSize": 34456800, + "narHash": "sha256:0z5kp5szqr9lmyzjfmwsslhklxlfkpan20xs8qb9w2p0kcdiz37j", + "narSize": 28336, + "path": "/nix/store/k128dz0cbaikxm1m2jb4ln0lmfglqbch-xcb-util-image-0.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/k128dz0cbaikxm1m2jb4ln0lmfglqbch-xcb-util-image-0.4.0", + "/nix/store/magdkhr097vywxkzwsd9xv9jjmxp4gr0-xcb-util-0.4.0" + ] + }, + { + "closureSize": 111103288, + "narHash": "sha256:0s0jhcpwklffwdxbxa4vxx76k5ny8127qz9yxbih38qxfyshl9ks", + "narSize": 495184, + "path": "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "references": [ + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 37475832, + "narHash": "sha256:0il7v7i7xjqr41c6ln53j71a8hcdix8ajiili3qcd6c3rmf7s23j", + "narSize": 121152, + "path": "/nix/store/kbmx94jgcbhcz9l8h59hsxlcqrmqzv41-libXtst-1.2.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/kbmx94jgcbhcz9l8h59hsxlcqrmqzv41-libXtst-1.2.3", + "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 34049464, + "narHash": "sha256:1v4xyzgnwjzlamy6qlgn6cpav2jrnwnkpqadjvb0yljkd02mcbvs", + "narSize": 1111440, + "path": "/nix/store/kbz9qzjqkv2x5y4gkxcqgjfj8d0y0adh-busybox-1.32.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/kbz9qzjqkv2x5y4gkxcqgjfj8d0y0adh-busybox-1.32.1" + ] + }, + { + "closureSize": 37114832, + "narHash": "sha256:1kg7r77yj292bj12v68plmh6rkry7jlq54pcs40sl6w093dxjh9d", + "narSize": 4176808, + "path": "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i" + ] + }, + { + "closureSize": 111058856, + "narHash": "sha256:1ghvqkgly2wk4rrprzi7p2x1pzyprbkfn8gmd3g1ybd6qyrs1qq0", + "narSize": 382512, + "path": "/nix/store/kgacy6jpywq43jwky1m06pc2qzx4pq5p-python3.8-pyrsistent-0.17.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/kgacy6jpywq43jwky1m06pc2qzx4pq5p-python3.8-pyrsistent-0.17.3", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 60285968, + "narHash": "sha256:1v6yp9xfm0bbcriz3wqfjky1q61zfsc3w2pbfzy09xia2cng3vdg", + "narSize": 534376, + "path": "/nix/store/ki58ax3z54adhi897g2vssc6vxxll15x-tk-8.6.9-dev", + "references": [ + "/nix/store/5sprfqk0cj0v08cgnh7fw85ylr5m94zg-libXft-2.3.3-dev", + "/nix/store/ki58ax3z54adhi897g2vssc6vxxll15x-tk-8.6.9-dev", + "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rz93hi8v04jia6xq4d6r0gh80rhay34c-tk-8.6.9", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9" + ] + }, + { + "closureSize": 87413456, + "narHash": "sha256:0m8gm4bcggp0j8h4qjn8rczsjzq2pvyg2g7q7qzvzr4gkm5532q9", + "narSize": 412512, + "path": "/nix/store/kiiwwr1qk4dn09dyj5q55b11s44kfvd0-lvm2-2.03.11-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/a9mqxbyy9zgghhki5kngqq5md7ww5kqd-systemd-minimal-247.2", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "/nix/store/kiiwwr1qk4dn09dyj5q55b11s44kfvd0-lvm2-2.03.11-lib" + ] + }, + { + "closureSize": 60181288, + "narHash": "sha256:11nkyr2k9zyg6gv2kyh72cy5i6a8nl34rdgryw9wrqwndkg33gr9", + "narSize": 6191128, + "path": "/nix/store/kijqqjh8sd8si9rdsjsf3pylp9rrd0vq-util-linux-2.36.1-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/4k3daqxxyngfg1l8i75nynrnzj60zqnn-shadow-4.8.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "/nix/store/kijqqjh8sd8si9rdsjsf3pylp9rrd0vq-util-linux-2.36.1-bin", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 111131352, + "narHash": "sha256:0d79d925wblmqh5vxr72l03qh7zxm63l1ar7a7ah4wzhl5n7faf5", + "narSize": 523248, + "path": "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "references": [ + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 38439792, + "narHash": "sha256:18fzdn2y6774vjj6ghbj2icifanpnhz5wwsf2asxpz8rasvq5xzf", + "narSize": 357928, + "path": "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "references": [ + "/nix/store/2pb33zdcvkm638m6yfny15d6x1vl1bha-dejavu-fonts-minimal-2.37", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/yrxi75y6gdwbv3i6f4kjbq1yfh8pf9zv-fontconfig-2.13.92" + ] + }, + { + "closureSize": 43635280, + "narHash": "sha256:00d03fk77r94dr9pv8miwdmmvqzr37w9752sgfnqmfiab97vzhi1", + "narSize": 1913912, + "path": "/nix/store/kl0zjgqcic5zrckfzc2cl4nfa9wspy5n-vamp-plugin-sdk-2.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/h6r2cfzi3g0mmb9nbrrgw0cn9xzs5fg4-libsndfile-1.0.30", + "/nix/store/kl0zjgqcic5zrckfzc2cl4nfa9wspy5n-vamp-plugin-sdk-2.10", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 129975840, + "narHash": "sha256:07zrr9341rz55smbr6ihs2f92qszcbjdhfqkkzrgcnw8mficxbay", + "narSize": 2516888, + "path": "/nix/store/kpcwm33vm9hlii90v5k5i8c96494ads7-python3.8-Pillow-8.0.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/484glwwy4fzk3x7n8bypyq6a2fniq4y0-python3.8-olefile-0.46", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/bacw91ggd83xiqmc4zrv1x8g69xml7y1-libimagequant-2.14.0", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/hadpxl3kq01iw68dkjqyxr8ppydzgz8x-openjpeg-2.4.0", + "/nix/store/kpcwm33vm9hlii90v5k5i8c96494ads7-python3.8-Pillow-8.0.1", + "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/ykf83k0gq3vv2rc540dagr2lk4kwany0-libwebp-1.1.0" + ] + }, + { + "closureSize": 165078184, + "narHash": "sha256:1gxjxjkbxsyq6cn6asqs0k92cmvmhc64qzlrpabvqvfmk8xr84mr", + "narSize": 505984, + "path": "/nix/store/krjr5x7766w5jy376y57v5qdmfx64d17-libinput-1.16.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/75r8z0iz7c4zw7z30zbrw45mg8m068j5-libwacom-1.8", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/ffmnk291q9vsznvzarbqfingj5zwd42p-libevdev-1.10.0", + "/nix/store/fmja90xx7prh354fnjshf5zif5qzhbpw-mtdev-1.1.6", + "/nix/store/krjr5x7766w5jy376y57v5qdmfx64d17-libinput-1.16.4" + ] + }, + { + "closureSize": 33015032, + "narHash": "sha256:0yj2ly9cvdpvnz8vwi87lc1yvlh5rifa1zacyqdkp0i6408m8bxk", + "narSize": 20296, + "path": "/nix/store/ksld7jvgi3yg9w55mh7hlar0cymkil2m-libffi-3.3-dev", + "references": [ + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/ksld7jvgi3yg9w55mh7hlar0cymkil2m-libffi-3.3-dev" + ] + }, + { + "closureSize": 286197632, + "narHash": "sha256:1ciyp55pa2hi0a8nhgjj94y1jdjqdwm1xmp5d9yvszap3x78lbf0", + "narSize": 2737160, + "path": "/nix/store/kvkfrx9ahk1kp3kr8djbmq8yz1g4mjzs-qtdeclarative-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 114641144, + "narHash": "sha256:0yqcji160m5ixcv16c6lhsb13xbqc6rl1y1dv0f6cdk80hs2yaz2", + "narSize": 464704, + "path": "/nix/store/kx3iwa71vl8pprwgypbk796w5cl0r9i9-python3.8-wcwidth-0.2.5", + "references": [ + "/nix/store/984w8wq75h2csr9g7zj6ay27bhlsrs5p-python3.8-setuptools-50.3.1", + "/nix/store/kx3iwa71vl8pprwgypbk796w5cl0r9i9-python3.8-wcwidth-0.2.5", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 34506792, + "narHash": "sha256:1pzw5nqikq1kqgd17g605g1a8d32l2fmk40h98dbbymq5dylhx7j", + "narSize": 111472, + "path": "/nix/store/l1pr6yfslc9cbfg5x3p3px7m0l8nlpci-xcb-util-wm-0.4.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/l1pr6yfslc9cbfg5x3p3px7m0l8nlpci-xcb-util-wm-0.4.1" + ] + }, + { + "closureSize": 205048, + "narHash": "sha256:1wb46s2w6cwvb9pambqzqkqgshhnxpjx22kqsiy8fiblv0yzsrgq", + "narSize": 205048, + "path": "/nix/store/l4sa5xb8zn1hz7f44jwll6dxw16acq64-alsa-ucm-conf-1.2.4", + "references": [] + }, + { + "closureSize": 134815808, + "narHash": "sha256:0ajqvbkfwdlyzbw6dmhkhnj0p2vg8c0hg6r8nj70l3rzjwybg4p1", + "narSize": 62292504, + "path": "/nix/store/l5g63si4h5bl8s85ajmkd8dh0gw4sdw2-blas-3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/y4as55nixd131fn5mcp16fy2bnglbq22-openblas-0.3.13", + "/nix/store/zr5y2gv34lyflyfi33hlk28ppk31apr6-gfortran-9.3.0-lib" + ] + }, + { + "closureSize": 110731696, + "narHash": "sha256:1gzb1hham474wcxjqkf0jq3z50a55k3kjrdm60r6b9rxarqgzk1z", + "narSize": 123592, + "path": "/nix/store/ll5b5ga5ngf8w9gpkfw369mrm6h3j6an-python3.8-setuptools_scm-4.1.2", + "references": [ + "/nix/store/ll5b5ga5ngf8w9gpkfw369mrm6h3j6an-python3.8-setuptools_scm-4.1.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 32981696, + "narHash": "sha256:1sd8cjmp841mwckyhm6dffrv9wr773wr7vczb8znwp228sq0q6xc", + "narSize": 43672, + "path": "/nix/store/llv7ilkkj1jcj1jih42cmqx608c2j31b-libmnl-1.0.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/llv7ilkkj1jcj1jih42cmqx608c2j31b-libmnl-1.0.4" + ] + }, + { + "closureSize": 264665496, + "narHash": "sha256:0lzlryf3f96rw4sxi67is0w6ljyprbxr5f8a5h2vaymzwfpndwh9", + "narSize": 25566128, + "path": "/nix/store/lmqli1r60fa4wqh4axz99amzqdq5dxmx-ffmpeg-4.3.1", + "references": [ + "/nix/store/03ldal0ldcq759v0rfl1vjq7rs1q1fn7-libvpx-1.9.0", + "/nix/store/2gal91snqlbj57flsj2n9pbl243ccyws-x265-3.4", + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3xcgzy0nkq71fh2npf45p38sz0d06x77-SDL2-2.0.14", + "/nix/store/3zyrvp30fbhvh3yw6ajczs0h897n2ffi-xvidcore-1.3.5", + "/nix/store/6y5i7lfnn4mjm52f721rdqjbnfrvrjsx-libass-0.15.0", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/86gb5b8ql34zil7cxya016wrssjsskdc-libssh-0.8.9", + "/nix/store/a1w9vjligp1rvinxllz9ad9qg9jjclsz-speex-1.2.0", + "/nix/store/c6c5241f20dashmbgd24i8x6ajzz79j5-libtheora-1.1.1", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/fcws45k1920zhg1nq4d1n22h5mjpj7jq-libva-2.10.0", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/igf6zngsy7xhnmpnyyl3wf5c5c3sfn04-gnutls-3.6.15", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/lmqli1r60fa4wqh4axz99amzqdq5dxmx-ffmpeg-4.3.1", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/p3fqiakiicp5zjcgn5lqyvifvnjg2gcq-libvorbis-1.3.7", + "/nix/store/qmz2l19bafjis0isdad4jx408a2jfb3g-x264-20191217-2245-lib", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/sazaawpsfvkwwgj98dqhf86w6ysglk8x-dav1d-0.8.1", + "/nix/store/swa0hk1q8j924q9kg1aydnhz5m82px59-soxr-0.1.3", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/wkzbd8lcrwima4pv52vv6qfday4ik0dp-lame-3.100-lib", + "/nix/store/x7l1x7sh94l2x9bha9az19vn0zv5pja3-libvdpau-1.4", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 373022648, + "narHash": "sha256:1mbmd42vlyyj12n2sfnirvjrd3jqjlfhgk4cgh2ifrpy20h3c1i9", + "narSize": 23082136, + "path": "/nix/store/lsjp64bsppqyljj6h12qw18di7yywmi3-python3.8-matplotlib-3.3.3", + "references": [ + "/nix/store/17jq0l2j8knyss9xna8c45ighmra6wk1-python3.8-cycler-0.10.0", + "/nix/store/3sgkd6knn8aidjiqydivi9fjbnq0idbb-python3.8-python-dateutil-2.8.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6vlwm4rhjsxv3xcs99apc019nqvjgxs1-libpng-apng-1.6.37-dev", + "/nix/store/8gv49ax9kda52zc0024s7789sillwzl7-python3.8-tkinter-3.8.7", + "/nix/store/b1xivmpplslqihf8yfpwan14kccjcg6a-python3.8-numpy-1.19.4", + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/hvr673qq6f3fx6525ifsp7w5j1h06maw-python3.8-mock-4.0.2", + "/nix/store/jhdcj3yxxdvv4fag74x9inqsrvnzf044-libX11-1.7.0-dev", + "/nix/store/ki58ax3z54adhi897g2vssc6vxxll15x-tk-8.6.9-dev", + "/nix/store/kiv33zi6zhv6qn0m7bpdxqfwc4widr3w-python3.8-pyparsing-2.4.7", + "/nix/store/kpcwm33vm9hlii90v5k5i8c96494ads7-python3.8-Pillow-8.0.1", + "/nix/store/lsjp64bsppqyljj6h12qw18di7yywmi3-python3.8-matplotlib-3.3.3", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "/nix/store/vk4na3xr11ibq5lcxzpkvwpgm3dyahx7-python3.8-kiwisolver-1.3.1", + "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "/nix/store/wq452vap3zpf11x9iv2j26fbyqbdwrlv-python3.8-tornado-6.1", + "/nix/store/z7iic0pjvfzp5m45rmhvn1afk6b4bvrs-python3.8-pytz-2020.5" + ] + }, + { + "closureSize": 117141640, + "narHash": "sha256:01n2a6yirfkrvrj0gisk9njd65pgblvr9bib96kd84l27wnhcddm", + "narSize": 880, + "path": "/nix/store/m1kvmqljg6dbfb93l8a8nz3nx3ghqld1-python3.8-pyOpenSSL-20.0.0-dev", + "references": [ + "/nix/store/h8zqyvmj973md4qsgr3ig2slfinbbwhp-python3.8-six-1.15.0", + "/nix/store/hawpyqx7vnxi2pcm1y9cwddnimrg96nk-python3.8-cryptography-3.3.2-dev", + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/pb0dl4yyls39qpjam0f7nc1i4hvm1ngj-python3.8-pyOpenSSL-20.0.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/wp184cbvgxqpx4xnq9pn28pqbglhps9v-python3.8-pyasn1-0.4.8" + ] + }, + { + "closureSize": 288559824, + "narHash": "sha256:1cf9yvf742gf1acm59q50rins4gja24caqfnqaixglbwmhh03ybp", + "narSize": 5099352, + "path": "/nix/store/m1y15bsxwa58mphgnzb4xh7zl3n9xbiw-qtquickcontrols-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 33481912, + "narHash": "sha256:06q79drmfjh66wsj54d1a6xlbqc0idg32n11w93v3zgs47qs86rw", + "narSize": 473832, + "path": "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "references": [ + "/nix/store/0kpjzw5z9k3sd1r9dxya6f0gm2ridxpr-libpciaccess-0.16", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104" + ] + }, + { + "closureSize": 34428464, + "narHash": "sha256:09fz3vp6768y975ql2lz6lrxwaadhf5q3cwhq99y8ivymylkn9w6", + "narSize": 33144, + "path": "/nix/store/magdkhr097vywxkzwsd9xv9jjmxp4gr0-xcb-util-0.4.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/magdkhr097vywxkzwsd9xv9jjmxp4gr0-xcb-util-0.4.0" + ] + }, + { + "closureSize": 179427712, + "narHash": "sha256:0ahcbn4d61dxzwxayzqlvj7c1jg4xl5a8x13g6l18cd464msskzl", + "narSize": 1533824, + "path": "/nix/store/mazsq1nbw96xdqbn50hbk5lxa3720p8b-openal-soft-1.19.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/mazsq1nbw96xdqbn50hbk5lxa3720p8b-openal-soft-1.19.1", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 42860112, + "narHash": "sha256:1c88vg4il3wfk23br0z6pcxiflj33r9ri00chj1yr3qs356685h5", + "narSize": 127680, + "path": "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33716200, + "narHash": "sha256:1mrbj6hzdkai3406axsawxd4vx04zcr2c0y1f2r6zaixrgb3gkix", + "narSize": 778176, + "path": "/nix/store/mh3fm4hg8pli4h02j1mnzjk81v0hi8pi-zstd-1.4.8", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 45346264, + "narHash": "sha256:1yi22rp943jwms3s3652jkhv8dgl5zyazfjvcdbprbmgfq38yp30", + "narSize": 512160, + "path": "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/rbm97r1qirzb88k07m59zzfjmmw0kw8i-xkeyboard-config-2.31", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33715184, + "narHash": "sha256:0108irmsfg35halh3590116jjrh9y5m74s5kvw63k7lk5yl53lzk", + "narSize": 690048, + "path": "/nix/store/mrgn3gby3xww5lfk3rq86ax66mjxjj8f-libthai-0.1.28", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fl494vxxdf3jvjs6vyvg746wkh5i6rlf-libdatrie-2019-12-20", + "/nix/store/mrgn3gby3xww5lfk3rq86ax66mjxjj8f-libthai-0.1.28" + ] + }, + { + "closureSize": 286994632, + "narHash": "sha256:13ywm7gvi2xyp8dv4cp1j1pdbzg6jx40yxv25nwhz06ykfzijbbl", + "narSize": 2687672, + "path": "/nix/store/ms5x4bagb3rg6yp3rgyy9yhn03xz7n92-qtwayland-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/ms5x4bagb3rg6yp3rgyy9yhn03xz7n92-qtwayland-5.15.2", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 47779248, + "narHash": "sha256:03yzysxyh672gf6f52jwmaycs12g2185yz3x42fa7824crppw8p6", + "narSize": 912968, + "path": "/nix/store/my6w5ws92cwc4l3x7nkp0g15m53jd6mp-libcaca-0.99.beta19", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2", + "/nix/store/my6w5ws92cwc4l3x7nkp0g15m53jd6mp-libcaca-0.99.beta19", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 94492496, + "narHash": "sha256:09lbn7ng9px2f84md9sfkgm54j0x9r1v04q61bysm5cbm1fhyac3", + "narSize": 2493096, + "path": "/nix/store/n4i5ffd419g5viscf9sfaw1dkz6ndavn-cryptsetup-2.3.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/9f4bd1dgzpywdic1hqjlx38dz7w6dfrl-popt-1.16", + "/nix/store/i5ix7fg6w25rvw3gljw6w6hx36bwvp6c-json-c-0.15", + "/nix/store/j7faglvazh1rzdhhmcbks47620q19w3c-util-linux-2.36.1", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kiiwwr1qk4dn09dyj5q55b11s44kfvd0-lvm2-2.03.11-lib", + "/nix/store/n4i5ffd419g5viscf9sfaw1dkz6ndavn-cryptsetup-2.3.4" + ] + }, + { + "closureSize": 38086144, + "narHash": "sha256:18ycqx5izrzaaakriir1a4cwsxcq6cn6ghijrccing2n0y5vdrpl", + "narSize": 3660728, + "path": "/nix/store/nfbbnh63jnjyz8dxvbz8w5ycppa3mzp0-p11-kit-0.23.22", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/9d69g8hzi9kmxbnfyh336x5sf1hinm73-libtasn1-4.16.0", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/nfbbnh63jnjyz8dxvbz8w5ycppa3mzp0-p11-kit-0.23.22", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 118243160, + "narHash": "sha256:0lwjx4mwvhsdnn590lnwqk3s84lg82vbn2570vb0n2p01w2fx6rb", + "narSize": 743192, + "path": "/nix/store/nm6g5z088nspz11r3bv6jyz0digflnji-python3.8-urllib3-1.26.2", + "references": [ + "/nix/store/9p9xvizv67gz468cky5ff4i6m1kgn0sc-python3.8-pysocks-1.7.1", + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/hawpyqx7vnxi2pcm1y9cwddnimrg96nk-python3.8-cryptography-3.3.2-dev", + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/m1kvmqljg6dbfb93l8a8nz3nx3ghqld1-python3.8-pyOpenSSL-20.0.0-dev", + "/nix/store/nm6g5z088nspz11r3bv6jyz0digflnji-python3.8-urllib3-1.26.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 38373776, + "narHash": "sha256:0d6jpkvi0ra59yf6nyg90hrz5x1c6z1xhv3q27xxagrfvs9ichva", + "narSize": 1488248, + "path": "/nix/store/nqb1yf6f5bnzrxgjx1n4jm8hnfcrydj8-lua-5.2.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/nqb1yf6f5bnzrxgjx1n4jm8hnfcrydj8-lua-5.2.4", + "/nix/store/sqxrzy43wdaw21ss41vx6ggr4hpbjl07-readline-6.3p08" + ] + }, + { + "closureSize": 41743024, + "narHash": "sha256:14p6bfv6wr7bnjibnlz0cg7v0ypvgmm6fi5q84maswxkb7bx4jx9", + "narSize": 626920, + "path": "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5" + ] + }, + { + "closureSize": 34083696, + "narHash": "sha256:0dmiha9lxwh02khbqz2g8wha0c6l3cj2z21kwjpkdw59hfr2n1q0", + "narSize": 1099832, + "path": "/nix/store/p3fqiakiicp5zjcgn5lqyvifvnjg2gcq-libvorbis-1.3.7", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/hf9mbpaf6y6brm2xskmcddzqmpd7qjg6-libogg-1.3.4", + "/nix/store/p3fqiakiicp5zjcgn5lqyvifvnjg2gcq-libvorbis-1.3.7" + ] + }, + { + "closureSize": 1857088, + "narHash": "sha256:0gi5p4bgf7q2kyr3kvrrrlz4blgyjac2hi5045z16xjhfqkhj7my", + "narSize": 222672, + "path": "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0", + "references": [ + "/nix/store/48gydzv98ns14ylw7gmkx38r4gnds82m-libunistring-0.9.10", + "/nix/store/p4ndfjdkdpmj5gd7ifk0rjdmyihnfnm8-libidn2-2.3.0" + ] + }, + { + "closureSize": 33164168, + "narHash": "sha256:1k1chs83lm942xqmqi9x4dyzr4m7bkk3dzk9d9qr8zbbgf5zqiwa", + "narSize": 101808, + "path": "/nix/store/p9192nyxgbkf35kmpvq2zmi8jw1h7mh9-minizip-1.2.11", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/p9192nyxgbkf35kmpvq2zmi8jw1h7mh9-minizip-1.2.11" + ] + }, + { + "closureSize": 398264, + "narHash": "sha256:1yz19nx8pplfyfzz547dd5vg2467bdxfsq03hmrl0mi9n4wfcznf", + "narSize": 398264, + "path": "/nix/store/pb0dl4yyls39qpjam0f7nc1i4hvm1ngj-python3.8-pyOpenSSL-20.0.0", + "references": [ + "/nix/store/pb0dl4yyls39qpjam0f7nc1i4hvm1ngj-python3.8-pyOpenSSL-20.0.0" + ] + }, + { + "closureSize": 33376408, + "narHash": "sha256:1x781gc64riymv4akaia2kzf6zg90nw08pywr2hipp9gk8fkh643", + "narSize": 438384, + "path": "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11" + ] + }, + { + "closureSize": 111146168, + "narHash": "sha256:11678mzwb1p2zk74gr8ihqkmv4r10q9vw8g5cnyadjf57i2fx111", + "narSize": 154728, + "path": "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "references": [ + "/nix/store/637xigv42cvi9vn6482i8n1f1qxv315f-python3.8-zipp-3.4.0", + "/nix/store/pnvcb5h9abd0jq0iz4d9ibj8qc73f1bl-python3.8-importlib-metadata-1.7.0", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 269097112, + "narHash": "sha256:1pzm4hc5f097a0pwyakxbj8aln5qqy8ggdyd1kda92lq6gzzaih4", + "narSize": 372560, + "path": "/nix/store/pnw3b0pijf83b12dw7fkpx4xb54879wn-qtsvg-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/pnw3b0pijf83b12dw7fkpx4xb54879wn-qtsvg-5.15.2", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 33088856, + "narHash": "sha256:0lv2fjhj2vjisq5p5wp7lfbds467xqkqjyj6kjssbkbjzwp8ycnl", + "narSize": 69768, + "path": "/nix/store/pp9shwhcdxxbhgp96fcaj0g8x5g54zrl-bzip2-1.0.6.0.1-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1" + ] + }, + { + "closureSize": 33089264, + "narHash": "sha256:02dkhd4cwjqn4pmknk06z4kjrkymg0h6v84h8k8w439vv75nx6y7", + "narSize": 151240, + "path": "/nix/store/prdifiyrxwgf6sp4rwmrqvfdnvf72gw2-gzip-1.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/prdifiyrxwgf6sp4rwmrqvfdnvf72gw2-gzip-1.10" + ] + }, + { + "closureSize": 170434264, + "narHash": "sha256:08ckjwpl9y593m9fp4sfr6bmniz33qp4f92dx9ccfyrqsn4s719v", + "narSize": 1782040, + "path": "/nix/store/prk78j8ml73cz18vdw4fqnd0zj9vl8yf-avahi-0.8", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/br9q6v8ql9vqqkljpv3lbnf6icr9gg1q-libdaemon-0.14", + "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/prk78j8ml73cz18vdw4fqnd0zj9vl8yf-avahi-0.8", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 49865432, + "narHash": "sha256:1flykm8mjarh2pj80y28wxg3n0w7dqy4l49jfkwhn3m12svwn6zn", + "narSize": 288672, + "path": "/nix/store/pv997v33kgzga3185wjzzf70k8bi087z-dconf-0.38.0-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4" + ] + }, + { + "closureSize": 50651448, + "narHash": "sha256:0ndkz405rypfi3vai4sazcclpdlziasldvhn7lizh9fc1d6k8pg0", + "narSize": 2621264, + "path": "/nix/store/q79zfzv398c20vf5i546z8pjsap0hv11-kbd-2.0.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/pp9shwhcdxxbhgp96fcaj0g8x5g54zrl-bzip2-1.0.6.0.1-bin", + "/nix/store/prdifiyrxwgf6sp4rwmrqvfdnvf72gw2-gzip-1.10", + "/nix/store/q79zfzv398c20vf5i546z8pjsap0hv11-kbd-2.0.4", + "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 74910744, + "narHash": "sha256:00rbccinzn2i8ans1yyv7sgwawdwjalyqvzpyaiir86drx2nppww", + "narSize": 748720, + "path": "/nix/store/q7j3dhx8x0dyyk8dj0736ij02vimh0ic-pango-1.47.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/ajis1g3fsmlfhq8hs7vr3m734xz09d2c-cairo-1.16.0", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "/nix/store/mrgn3gby3xww5lfk3rq86ax66mjxjj8f-libthai-0.1.28", + "/nix/store/q7j3dhx8x0dyyk8dj0736ij02vimh0ic-pango-1.47.0", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rl9v918p5fjc4xa4s87b97ys3i371pah-fribidi-1.0.10", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 35347776, + "narHash": "sha256:1dh283yja0b17qhjlw11cd6a741fbgrzx4y4zc4pd2kv3ss01hdm", + "narSize": 2409752, + "path": "/nix/store/qmz2l19bafjis0isdad4jx408a2jfb3g-x264-20191217-2245-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 136113024, + "narHash": "sha256:0awzvvc2hw6hhqnnkhqsp68l8a23wsll3vr2yzksyc4w1va1664k", + "narSize": 1297200, + "path": "/nix/store/qwh59ryj3g06cv5w1z8i8d172jj2csgk-lapack-3-dev", + "references": [ + "/nix/store/2bjd64hgdyzpmp6z40pm4bmvbl7p8i7y-lapack-3", + "/nix/store/qwh59ryj3g06cv5w1z8i8d172jj2csgk-lapack-3-dev" + ] + }, + { + "closureSize": 35392528, + "narHash": "sha256:0awa3bsnwhn5gp535scdk22xzs6mgvvh3gvkhg8m3ydy3f6nxzpf", + "narSize": 1989160, + "path": "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 283624192, + "narHash": "sha256:0wdsdaa42dzgl88mxnclg9bqvb0cim17ysvs2423ds5qc6vzjk51", + "narSize": 163720, + "path": "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 110608104, + "narHash": "sha256:0mkzjch1hjpirj70163chffa115v2xkmp5i2b3j7k9yrknprfpsj", + "narSize": 65120344, + "path": "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/gwzahz3x49kjx9i6b2mlwg8d0dmfr68b-gdbm-1.19", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/sqxrzy43wdaw21ss41vx6ggr4hpbjl07-readline-6.3p08", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 110709400, + "narHash": "sha256:06m08q87yqa0qhkih8s8ycrjwn4kprlhr1xhzmhsq7h19nn7zv55", + "narSize": 101296, + "path": "/nix/store/r1s8c9sqrsnqsppc0qklfcjy4vzfi6hr-python3.8-toml-0.10.2", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/r1s8c9sqrsnqsppc0qklfcjy4vzfi6hr-python3.8-toml-0.10.2" + ] + }, + { + "closureSize": 34491088, + "narHash": "sha256:1dnjqy3hwxnxrkba9am7n1hab3mwzxsijwgy3nqjyziyx5z5430h", + "narSize": 1553064, + "path": "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 40317680, + "narHash": "sha256:182vb2vv4z74imlhrj07l4lmng05hz9n35cq4c85nafmdh93fhd8", + "narSize": 616824, + "path": "/nix/store/ra3v95vxpy1ygph7af50dmikz1la6zp6-nettle-3.6", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/ra3v95vxpy1ygph7af50dmikz1la6zp6-nettle-3.6", + "/nix/store/sqv0ykiri2mw4lbgir2p3bbbwk2hxmp5-gmp-6.2.1" + ] + }, + { + "closureSize": 5804808, + "narHash": "sha256:017wafg0vm9vpdgvb10icq5nim33znll8cwl52l3k13n2zwzdbdv", + "narSize": 5804808, + "path": "/nix/store/rbm97r1qirzb88k07m59zzfjmmw0kw8i-xkeyboard-config-2.31", + "references": [ + "/nix/store/rbm97r1qirzb88k07m59zzfjmmw0kw8i-xkeyboard-config-2.31" + ] + }, + { + "closureSize": 38948952, + "narHash": "sha256:17zwv2qr3jx80g4kipq1wm144paysanjb9mnyi452capcblkm8fh", + "narSize": 6010928, + "path": "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 110902456, + "narHash": "sha256:11bq9clf07zk8slf7yffdms019cbiyxvzyk4jbnxz1kynas7w2cm", + "narSize": 294352, + "path": "/nix/store/rchvxp4s7py0njn5n9lwmssysm2a7db9-python3.8-waitress-1.4.4", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rchvxp4s7py0njn5n9lwmssysm2a7db9-python3.8-waitress-1.4.4", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 36906008, + "narHash": "sha256:1zppq7amh08998nhn078wzsm1c83pmi9fvb2xzbzrbr4a95cp0fb", + "narSize": 418784, + "path": "/nix/store/rfrh53sl94l663cpmm333n9ci8ypfzpk-mesa-20.3.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/m5xv2wdfnx7qjw9gd6wk3pm7h7ry3if8-libdrm-2.4.104", + "/nix/store/rfrh53sl94l663cpmm333n9ci8ypfzpk-mesa-20.3.4", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0" + ] + }, + { + "closureSize": 33322304, + "narHash": "sha256:1vnb7vzx08vksg5vqn2mxw47rip4s9frs1645n3mspfmsc7950bi", + "narSize": 259944, + "path": "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37" + ] + }, + { + "closureSize": 472701768, + "narHash": "sha256:027vgych94xzm6jlmbyadwlgikm992n3is03aw5dacqf4gkgkf27", + "narSize": 165732152, + "path": "/nix/store/rjmgp8xp6pzcnzsk26jfmxm38frsw0ry-qtwebengine-5.15.2", + "references": [ + "/nix/store/03ldal0ldcq759v0rfl1vjq7rs1q1fn7-libvpx-1.9.0", + "/nix/store/1lrx5wimpqikfwx4wiam0kkdh5kfsahm-libXfixes-5.0.3", + "/nix/store/261hxvhxklrqhiag25l6wq753vgcn4xy-libXdamage-1.1.5", + "/nix/store/3466r1b7j9wsc2bihcb1b1cpvfayp4ky-libopus-1.3.1", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/4i9y386mgyz1qmpvvkcqznva9j8vq8j3-libXScrnSaver-1.2.3", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/74xfkypvxf8kvffqhbrk7yhkq0v26j3z-pciutils-3.7.0", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/cx25va43fqg50gk15kmnq7svskdmm4lz-libevent-2.1.12", + "/nix/store/fdbsckqrhfmwy73mck958pcw5z51wa3b-systemd-247.2", + "/nix/store/fpbip6kbkykirpln4amhs30lnn8cfx5c-nspr-4.29", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/giiqqhqk1zyynflm6h38kpqhq42vmqrh-libXcursor-1.2.0", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/h92361l0na9q61lb11j1swhp1gf80kfl-libXrandr-1.5.2", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/hc39jdjdyrxyhlf2gcs7d9pvfqgppvv8-libXcomposite-0.4.5", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kbmx94jgcbhcz9l8h59hsxlcqrmqzv41-libXtst-1.2.3", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mikg6rqi67b9k1xrh5wckd4g1wl0bqbq-libxkbcommon-1.0.3", + "/nix/store/p9192nyxgbkf35kmpvq2zmi8jw1h7mh9-minizip-1.2.11", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/rjmgp8xp6pzcnzsk26jfmxm38frsw0ry-qtwebengine-5.15.2", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/wmgaiawzwdrcvk9v8yp0ivnxh3lwas4w-snappy-1.1.8", + "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "/nix/store/xlbljc9a23cwbnkmxmxzr4hbbhc83pg9-nss-3.60", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/ykf83k0gq3vv2rc540dagr2lk4kwany0-libwebp-1.1.0", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 50268480, + "narHash": "sha256:0ngq0mr01518ilvrdaf6l20k9d2fxpmqr3x339nw2nzh2y77srzd", + "narSize": 167880, + "path": "/nix/store/rk94cdqrkjhwvz6gqp16vxjhifyivs75-libmicrohttpd-0.9.71", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/igf6zngsy7xhnmpnyyl3wf5c5c3sfn04-gnutls-3.6.15", + "/nix/store/rk94cdqrkjhwvz6gqp16vxjhifyivs75-libmicrohttpd-0.9.71" + ] + }, + { + "closureSize": 111768112, + "narHash": "sha256:1jqi4qnr9zin3s73lr8cw964l3mcyq1hlaf1rgypra5c75qxnvcr", + "narSize": 945720, + "path": "/nix/store/rka0aj2f2wnv0dkli7f00qldxlk1zn21-python3.8-beautifulsoup4-4.9.3", + "references": [ + "/nix/store/8dvrhfnj1212zsjfk16ldgjgyxnp23j8-python3.8-soupsieve-2.0.1", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rka0aj2f2wnv0dkli7f00qldxlk1zn21-python3.8-beautifulsoup4-4.9.3" + ] + }, + { + "closureSize": 32970936, + "narHash": "sha256:04ayz8kr2bqnm9w6d4f7jzig0fiib5w9c7xg71rk1w56aym16byl", + "narSize": 32912, + "path": "/nix/store/rkbvh8g0dlgb4hszxm6hvvy1q4875nzw-libXdmcp-1.1.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rkbvh8g0dlgb4hszxm6hvvy1q4875nzw-libXdmcp-1.1.3" + ] + }, + { + "closureSize": 33178088, + "narHash": "sha256:115zdc4gxxw64ni65ypkn2qhxc7axfz667rvvyz7kkm0rjdkdipf", + "narSize": 240064, + "path": "/nix/store/rl9v918p5fjc4xa4s87b97ys3i371pah-fribidi-1.0.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rl9v918p5fjc4xa4s87b97ys3i371pah-fribidi-1.0.10" + ] + }, + { + "closureSize": 60234680, + "narHash": "sha256:00x6yg35rd9vbn6hlzh6si89ax8vf1lfwz3byq85wb98p0vnx1rr", + "narSize": 2040888, + "path": "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/cxmpl19ncrqc7h22vjrgk4nqsjwsz53s-graphite2-1.3.14", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2" + ] + }, + { + "closureSize": 54521800, + "narHash": "sha256:0l36kz9a8zcbkghiqs71d0g4xmp20c0w8kdcrhnfijz6ps2hy16h", + "narSize": 3172424, + "path": "/nix/store/rz93hi8v04jia6xq4d6r0gh80rhay34c-tk-8.6.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/mbb456ws7wclvr7zyzcw6c63rsb2b0lr-libXft-2.3.3", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rz93hi8v04jia6xq4d6r0gh80rhay34c-tk-8.6.9", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 66409976, + "narHash": "sha256:12ysczp2n925yyqbflv2pjxr40c6gymr30sw8a24d589wh6jz4kv", + "narSize": 8365088, + "path": "/nix/store/s7m36l083y4chbrgr8xnrf538p6p3713-libplacebo-3.104.0", + "references": [ + "/nix/store/20rw4z35dprcri6qcxsxbn24lb1ncxya-epoxy-1.5.4", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/pc6zxvz9ywfrlsri31nwmmbyg5zjrkwr-lcms2-2.11", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/s7m36l083y4chbrgr8xnrf538p6p3713-libplacebo-3.104.0", + "/nix/store/snj32s33kpxssz7ph86ywwadn3bycj09-shaderc-2020.2-lib", + "/nix/store/vnki2k812rh4ngmqwawikjpj659cwpdc-vulkan-loader-1.2.162.0" + ] + }, + { + "closureSize": 111564288, + "narHash": "sha256:1a3zz5621fdhhygyigdnjycdhs5f60qam3rb4ai08xmhvlwg91bl", + "narSize": 956184, + "path": "/nix/store/s93qggnlaa8cn4x38c4cv5qy761s1g5l-python3.8-pycparser-2.20", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/s93qggnlaa8cn4x38c4cv5qy761s1g5l-python3.8-pycparser-2.20" + ] + }, + { + "closureSize": 41427288, + "narHash": "sha256:1d48vvq8q555z3y6gha8zqzdffx4la83x6zjd7lalfl0339grkf1", + "narSize": 7153032, + "path": "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/sa0jz000iz1r2g61y4qlydjlq2l9nvnc-tcl-8.6.9", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 34302104, + "narHash": "sha256:0dwc4qaj63kd9b63qxdfqjb4pr624995639v45s267pnzkyg0kfi", + "narSize": 1364080, + "path": "/nix/store/sazaawpsfvkwwgj98dqhf86w6ysglk8x-dav1d-0.8.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/sazaawpsfvkwwgj98dqhf86w6ysglk8x-dav1d-0.8.1" + ] + }, + { + "closureSize": 110632712, + "narHash": "sha256:0zd8xxv3fn8d4dy22d0j47g504m0vf3q4ckngwgivzcy3bnwlay2", + "narSize": 24608, + "path": "/nix/store/sg4wiqzr2lv1crghjw5427n1mqvab0f8-python3.8-atomicwrites-1.4.0", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/sg4wiqzr2lv1crghjw5427n1mqvab0f8-python3.8-atomicwrites-1.4.0" + ] + }, + { + "closureSize": 48350272, + "narHash": "sha256:0qbp18j7azw48c4z9k4qzvc1bii9v1vmp069c7sbrr1l69rrvmmw", + "narSize": 9401320, + "path": "/nix/store/snj32s33kpxssz7ph86ywwadn3bycj09-shaderc-2020.2-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 286702048, + "narHash": "sha256:0p26pjsbnwgp52g9j9xr8znakg1asr861mi1w7r8ksd5cbwc37s7", + "narSize": 3241576, + "path": "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 39700856, + "narHash": "sha256:092kvldp8ax9a00dnaqvwgqsqr0423pfz76hak8cxc08wp5a0zgk", + "narSize": 751904, + "path": "/nix/store/sqv0ykiri2mw4lbgir2p3bbbwk2hxmp5-gmp-6.2.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/sqv0ykiri2mw4lbgir2p3bbbwk2hxmp5-gmp-6.2.1" + ] + }, + { + "closureSize": 36885528, + "narHash": "sha256:0q1pn7c6kngv32ahcxc2708yrygarav686122ypv95xd91c0wgaj", + "narSize": 391856, + "path": "/nix/store/sqxrzy43wdaw21ss41vx6ggr4hpbjl07-readline-6.3p08", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/d3nz4c5xf1bqz8rwr8m4gbsrny9ffidk-ncurses-6.2" + ] + }, + { + "closureSize": 479531216, + "narHash": "sha256:05xw1fm10gxqq44anzgka931q2nm79k4pp1jn04hg847ifl4brq4", + "narSize": 944, + "path": "/nix/store/ssd1xj2mkvia5xlk03zx6xfx11z34b8w-python3.8-PyQt5-5.15.2-dev", + "references": [ + "/nix/store/1d07jhijhbfss5g43xlwvaxp4jagix0v-qtsvg-5.15.2-bin", + "/nix/store/32399xbgpdm4pk3gwhr30s8l1zfjn5j7-python3.8-dbus-python-1.2.16-dev", + "/nix/store/3diqalwg0320zky06n03vw2bsphiv70w-python3.8-PyQt5_sip-12.8.1", + "/nix/store/bzcyz6j9qvzzx79yzi88nch62sd10gvg-python3.8-PyQt5-5.15.2", + "/nix/store/dw4fywkrqi7wrlasnlk4z76bq4b9q3ra-qtbase-5.15.2-bin", + "/nix/store/kvkfrx9ahk1kp3kr8djbmq8yz1g4mjzs-qtdeclarative-5.15.2-bin", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7" + ] + }, + { + "closureSize": 39268992, + "narHash": "sha256:032pkidih9bkqc739i3vq1aci5nd26i9ws1qmskikib8jr9y9n73", + "narSize": 320040, + "path": "/nix/store/swa0hk1q8j924q9kg1aydnhz5m82px59-soxr-0.1.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/swa0hk1q8j924q9kg1aydnhz5m82px59-soxr-0.1.3" + ] + }, + { + "closureSize": 33641424, + "narHash": "sha256:1l4qjl9af2cdf2z6fgjh2lsjlg6dgm34brc11b8dfq30f8bnira7", + "narSize": 703400, + "path": "/nix/store/swkfvfgdsilq4zxli07n4fppqd3n5c1f-orc-0.4.32", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/swkfvfgdsilq4zxli07n4fppqd3n5c1f-orc-0.4.32" + ] + }, + { + "closureSize": 220232, + "narHash": "sha256:092153w2jr7nx28p9wc9k6b5azi9c39ghnqfnfiwfzv1j8jm3znq", + "narSize": 220232, + "path": "/nix/store/szphjhh0j68yhddyw2zh8ykr00mhd1r2-publicsuffix-list-2019-05-24", + "references": [] + }, + { + "closureSize": 35097248, + "narHash": "sha256:0sdqnka7c79bjg230y699cax1vi6vdckwqql913wziifqs7bw0x9", + "narSize": 1610008, + "path": "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/a2vqfqyyhpys06zah2j99s7jvv50mccn-alsa-topology-conf-1.2.4", + "/nix/store/l4sa5xb8zn1hz7f44jwll6dxw16acq64-alsa-ucm-conf-1.2.4", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4" + ] + }, + { + "closureSize": 343123888, + "narHash": "sha256:1ckaxmayn19whr4jcv8f3zchnfa378lxhib4026yw8zmgn3s8i0d", + "narSize": 1151064, + "path": "/nix/store/vjdnrdsdld9clrn85wjb9wzp3zsf5wzz-qtmultimedia-5.15.2-bin", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/78mpzh9qpyzslb672vxh0h0xgdq45xcx-gst-plugins-base-1.18.2", + "/nix/store/brr6ifl6n9yhanjg41kw32d4vmz5cql5-gstreamer-1.18.2", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gsxyc0mqkq8hgf76hfha46kb00g8hbg1-qtmultimedia-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 116863320, + "narHash": "sha256:1vnz8z6cbcznpr5404gdqgawgqzx2aq0hrymzlsv0jy2klszjhis", + "narSize": 244288, + "path": "/nix/store/vk4na3xr11ibq5lcxzpkvwpgm3dyahx7-python3.8-kiwisolver-1.3.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 33412848, + "narHash": "sha256:1xbazw2z8imz8z6grkdm6as2v2gnbxi0dasqr7qq5dllc7jkmr2n", + "narSize": 474824, + "path": "/nix/store/vnki2k812rh4ngmqwawikjpj659cwpdc-vulkan-loader-1.2.162.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 33234024, + "narHash": "sha256:1gr0qdfr1h25mcci3awqcad7dd95vkcixzj7d217gbnxrndslnj9", + "narSize": 195208, + "path": "/nix/store/vp7dnvr1fcpmyjpnnjj73v49wylzjih5-libnetfilter_conntrack-1.0.8", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/llv7ilkkj1jcj1jih42cmqx608c2j31b-libmnl-1.0.4", + "/nix/store/vp7dnvr1fcpmyjpnnjj73v49wylzjih5-libnetfilter_conntrack-1.0.8", + "/nix/store/vyi2wrvrwinbm3mn18hmi34cl0xsmbj3-libnfnetlink-1.0.1" + ] + }, + { + "closureSize": 32995144, + "narHash": "sha256:1hm877xr0jp7i1g41m34dx5h730mr8cpr3zpn1dpahd2hhkb22n0", + "narSize": 57120, + "path": "/nix/store/vyi2wrvrwinbm3mn18hmi34cl0xsmbj3-libnfnetlink-1.0.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/vyi2wrvrwinbm3mn18hmi34cl0xsmbj3-libnfnetlink-1.0.1" + ] + }, + { + "closureSize": 119408232, + "narHash": "sha256:04cgkirvkxbn89ihfqrmsys3lgs51p51cznr38vwy8p74wf0a5nz", + "narSize": 345576, + "path": "/nix/store/vzlcj8gi8z2d5h8zq237kzrifsrfz0l5-python3.8-requests-2.25.0", + "references": [ + "/nix/store/d0frnz360sw2wx3mh4952frxjs2lxsnc-python3.8-chardet-3.0.4", + "/nix/store/dq275br6vd64cpyvcx9d7y7r1i7f0kkk-python3.8-certifi-2020.12.5", + "/nix/store/k8nvkdmn2g397bgyppnjp9pl9z3bkyhz-python3.8-idna-2.10", + "/nix/store/nm6g5z088nspz11r3bv6jyz0digflnji-python3.8-urllib3-1.26.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/vzlcj8gi8z2d5h8zq237kzrifsrfz0l5-python3.8-requests-2.25.0" + ] + }, + { + "closureSize": 33176816, + "narHash": "sha256:0szb2cx8v12asza2mz2l9cmq8vqzimdhaj93j7gj3w0xsdkzmbdm", + "narSize": 114456, + "path": "/nix/store/w02nq97ggwq3x2lpjsy1zpspxhnmv474-zlib-1.2.11-dev", + "references": [ + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/w02nq97ggwq3x2lpjsy1zpspxhnmv474-zlib-1.2.11-dev" + ] + }, + { + "closureSize": 43350104, + "narHash": "sha256:01dix23qi29aagkpb72d1644j0nvc7sxx689aqymkx2j7bnf8gs2", + "narSize": 1134048, + "path": "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/68w8lqk6wymf1rz21jjxg2c2xcd6h74w-libkrb5-1.18", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/h7h9nn6n9i4dldllv78mabbdxwzimbzn-curl-7.74.0", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8" + ] + }, + { + "closureSize": 37998696, + "narHash": "sha256:00fvkf5rzmqcgp5rbszcqm1w4lqx4ywbl05x9mgy39pkasxmnlfc", + "narSize": 815120, + "path": "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "references": [ + "/nix/store/6vlwm4rhjsxv3xcs99apc019nqvjgxs1-libpng-apng-1.6.37-dev", + "/nix/store/76bjidga1is8s904093lbgszaih8ix2x-bzip2-1.0.6.0.1-dev", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/h7cj9naw05s7n4cnswdbp0kzsxi2si25-bzip2-1.0.6.0.1", + "/nix/store/qypsmhnbhkp6phql7vq5zam225sgy41k-freetype-2.10.4", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/w02nq97ggwq3x2lpjsy1zpspxhnmv474-zlib-1.2.11-dev", + "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 33271688, + "narHash": "sha256:1w2h5k5mkarqm7rdx48y72b04nm0bb28067hgqjijgbwzli7g57y", + "narSize": 333664, + "path": "/nix/store/wkzbd8lcrwima4pv52vv6qfday4ik0dp-lame-3.100-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/wkzbd8lcrwima4pv52vv6qfday4ik0dp-lame-3.100-lib" + ] + }, + { + "closureSize": 39001440, + "narHash": "sha256:1w38s6dj5spv4z1phwjmqm6naf1w0rrl367nglzy2bkb89v8alyn", + "narSize": 52488, + "path": "/nix/store/wmgaiawzwdrcvk9v8yp0ivnxh3lwas4w-snappy-1.1.8", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 34299552, + "narHash": "sha256:0hsjwii92p722300s10m3nn1mwzmwv6b7fblzxgnz9783316j0bw", + "narSize": 838984, + "path": "/nix/store/wmiyjdsaydyv024al5ddqd3liljrfvk7-gnugrep-3.6", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/8w2r3lp9zkqd5rgqxxx8vi9k8kf7ckw4-pcre-8.44", + "/nix/store/wmiyjdsaydyv024al5ddqd3liljrfvk7-gnugrep-3.6" + ] + }, + { + "closureSize": 37354680, + "narHash": "sha256:1185315k3i7d0byq7px4va51iyz71ccwkglrh9ri4b755xx1k9a5", + "narSize": 82336, + "path": "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/wnk2fsq8clj4g637wybpx7ic0nbnksb5-libXi-1.7.10", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 120418008, + "narHash": "sha256:02h0jam0srgb3ca91k3kslai6lkvnj7kmrbygklmsnr8zx4a6rsb", + "narSize": 3490104, + "path": "/nix/store/wnrx0xjcpd25lrflbrp0xmqlz2qwzijl-tracker-3.0.1", + "references": [ + "/nix/store/18hldl9cbc2wdpsbbz3vkld2chp13rkf-libsoup-2.72.0", + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/chrv2sdgfpckw4jskrydn04kaimq0xnk-gobject-introspection-1.66.1", + "/nix/store/hp3xpsfzs534s2wjy0f4hbrsjxb92yb2-json-glib-1.4.4", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/pv997v33kgzga3185wjzzf70k8bi087z-dconf-0.38.0-lib", + "/nix/store/wnrx0xjcpd25lrflbrp0xmqlz2qwzijl-tracker-3.0.1", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 111261520, + "narHash": "sha256:1s87cjqqvhbvb8f3df4gcfs58wpchaqlfswdz9l24g696x58f714", + "narSize": 653416, + "path": "/nix/store/wp184cbvgxqpx4xnq9pn28pqbglhps9v-python3.8-pyasn1-0.4.8", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/wp184cbvgxqpx4xnq9pn28pqbglhps9v-python3.8-pyasn1-0.4.8" + ] + }, + { + "closureSize": 113560544, + "narHash": "sha256:1yg0zf4mnivlvxh67d1vs2nr0f7py13k56hxv4vw2dy60l953mp0", + "narSize": 2952440, + "path": "/nix/store/wq452vap3zpf11x9iv2j26fbyqbdwrlv-python3.8-tornado-6.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/wq452vap3zpf11x9iv2j26fbyqbdwrlv-python3.8-tornado-6.1" + ] + }, + { + "closureSize": 35943336, + "narHash": "sha256:1izlvv1xh9inbc2w9wja4xrfd9z0cgxqpr624b32i3bqibnnk7ll", + "narSize": 846488, + "path": "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7jxw8jwb7qs8gki67r91d5wxq99z2k23-expat-2.2.10", + "/nix/store/dy75jv9363ssbggrhxpc2agdq4an312x-libffi-3.3", + "/nix/store/j25qy17h4776sk9l50akagiwm7fdgga8-libxml2-2.9.10", + "/nix/store/wq99jkh87ra6mwk9qb0wbf2dnkm0m04p-wayland-1.19.0" + ] + }, + { + "closureSize": 39560168, + "narHash": "sha256:0aj8zbnbgz9x1ylxfalkdh47mxlga1ffx6gwpqbyszslwp92hpy2", + "narSize": 611216, + "path": "/nix/store/ws5aqgg2qx1pbl26sqkqppvp6xyzpi38-uchardet-0.0.7", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib" + ] + }, + { + "closureSize": 119711336, + "narHash": "sha256:00nzr4m8ly7h85pvf0wcr6kk21mr8akaiv0kq7mrqrin0qb5z9vg", + "narSize": 9103232, + "path": "/nix/store/wwjhb23kqnp8dxz6b4ki6vyrr1frri9j-python3.8-SQLAlchemy-1.3.20", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/wwjhb23kqnp8dxz6b4ki6vyrr1frri9j-python3.8-SQLAlchemy-1.3.20" + ] + }, + { + "closureSize": 50895320, + "narHash": "sha256:0xpscanan82v68mdvw6rxkasnh7b1x66xhy0npp5qf6s4fwp277x", + "narSize": 1318560, + "path": "/nix/store/x4ad37j6q7x31s6x9lbacq06qslq6rvc-atk-2.36.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/x4ad37j6q7x31s6x9lbacq06qslq6rvc-atk-2.36.0" + ] + }, + { + "closureSize": 4682432, + "narHash": "sha256:1zixzfh57mbcbliizbs7w54hzlp35k4dqi3qjma0ps8i3m8dr4hv", + "narSize": 4682432, + "path": "/nix/store/x4b6qz5hjc3rqyaphyfr5hyq48q4s62i-gsettings-desktop-schemas-3.38.0", + "references": [ + "/nix/store/x4b6qz5hjc3rqyaphyfr5hyq48q4s62i-gsettings-desktop-schemas-3.38.0" + ] + }, + { + "closureSize": 37369056, + "narHash": "sha256:03wvnjpn1g5klssz055akkv82y9h9387wlpf13q3aa2ygdg9gmby", + "narSize": 96712, + "path": "/nix/store/x7l1x7sh94l2x9bha9az19vn0zv5pja3-libvdpau-1.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/x7l1x7sh94l2x9bha9az19vn0zv5pja3-libvdpau-1.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 49838064, + "narHash": "sha256:08s791aavb9xidk2h589v0rc8d47w5vc5vcgmfqx2k5pwrczznfk", + "narSize": 3877504, + "path": "/nix/store/xlbljc9a23cwbnkmxmxzr4hbbhc83pg9-nss-3.60", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/fpbip6kbkykirpln4amhs30lnn8cfx5c-nspr-4.29", + "/nix/store/nfbbnh63jnjyz8dxvbz8w5ycppa3mzp0-p11-kit-0.23.22", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/xlbljc9a23cwbnkmxmxzr4hbbhc83pg9-nss-3.60", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1" + ] + }, + { + "closureSize": 41281640, + "narHash": "sha256:12z7cjr7kkq0kk0favq1y7b7gsh48p4ajlp3l22l7s9p38cawqy4", + "narSize": 37816, + "path": "/nix/store/xqkq24q60n45qnhp59cgvw84ywdimbww-fontconfig-2.13.92-dev", + "references": [ + "/nix/store/c3rg0ngc5cahgwl9iil0dgw298w1gmca-fontconfig-2.13.92-bin", + "/nix/store/kjmlqdv7q0ppyq3vcm5gyi9zfib17d9n-fontconfig-2.13.92-lib", + "/nix/store/wga4rgg95bq5s440sd7gf1a85x32qda2-freetype-2.10.4-dev", + "/nix/store/xqkq24q60n45qnhp59cgvw84ywdimbww-fontconfig-2.13.92-dev", + "/nix/store/yrxi75y6gdwbv3i6f4kjbq1yfh8pf9zv-fontconfig-2.13.92" + ] + }, + { + "closureSize": 33427776, + "narHash": "sha256:0jw1lzhqw9c9rswjnp34qy4mb54y10h5qp33sy6cmx7anv34k84p", + "narSize": 489752, + "path": "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/y0jcc9h0hwafh8spislbbswjs9pz4cns-xz-5.2.5" + ] + }, + { + "closureSize": 10800520, + "narHash": "sha256:0h0x2hhr7kvjiycf7fv800xxwa6hcpiz54bqx06wsqc7z61iklvd", + "narSize": 10800520, + "path": "/nix/store/y1hybm8h1kln0hg06c42m4g1wsblc0ig-freefont-ttf-20120503", + "references": [] + }, + { + "closureSize": 72523304, + "narHash": "sha256:01w600i4wxkvi4addv88zrgxvg3k1nzxcmj7byh6snmkb4mjl6iv", + "narSize": 30608592, + "path": "/nix/store/y4as55nixd131fn5mcp16fy2bnglbq22-openblas-0.3.13", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/zr5y2gv34lyflyfi33hlk28ppk31apr6-gfortran-9.3.0-lib" + ] + }, + { + "closureSize": 33154200, + "narHash": "sha256:0xzn98g16mvksn87wpk4yymhw2msav1ngj0rpjf53cxhn5bxs34g", + "narSize": 216176, + "path": "/nix/store/y5hjcwzr8sajlh07p7xd8a76g0dnznrd-lz4-1.9.3", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35" + ] + }, + { + "closureSize": 34453872, + "narHash": "sha256:0b6g3ql05qqwh7vw658whpvl9a2jlr81d70b6nbg3260y6ds8z1b", + "narSize": 1391512, + "path": "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/ygkw3ch402h4jsmlaikcncw2pq5abvax-sqlite-3.34.1" + ] + }, + { + "closureSize": 283460472, + "narHash": "sha256:00wwi54nzndanmyjnxrxv62vzm6bqlhwff0p1az1k3382p9d25bl", + "narSize": 14735920, + "path": "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/6p91gi4v7k7cr26n5al928z39wrzbz77-icu4c-67.1", + "/nix/store/7bgshg2z70fpcc7adxfag1lgf45yamxh-zlib-1.2.11", + "/nix/store/7z0r6bwm32gxqcaipyc21pnwcni751c1-cups-2.3.3-lib", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/gra7av8n5gwrxfk8r3niw6rcwk10sa3q-libXrender-0.9.10", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/kchm26396krqwdn2dkx6l0hb79lwlhr1-openssl-1.1.1i", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rr3ys7j8mjka14kj6ggl493svdshqm6g-harfbuzz-2.7.2", + "/nix/store/w59dy371qzj9lsfy1hi4z5hz19x4jf6h-mariadb-connector-c-3.1.8", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 43638120, + "narHash": "sha256:037pidw6l6ys0shzfvyssngyp6l5yy9f9w8b84knn8z1xvq1smjn", + "narSize": 1220648, + "path": "/nix/store/ykf83k0gq3vv2rc540dagr2lk4kwany0-libwebp-1.1.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/9bg5y53g9rylvr46psmk7lc9dpp5dv4n-giflib-5.2.1", + "/nix/store/p0k31xiihh7k87s1c0x8kpgj1ir06r7z-libtiff-4.1.0", + "/nix/store/r952r5qkh8g7nmp6z9lnk60jpg2q1qh8-libjpeg-turbo-2.0.6", + "/nix/store/rjdhc3b4rf306c5nr25lyp8bxvmpad3n-libpng-apng-1.6.37", + "/nix/store/ykf83k0gq3vv2rc540dagr2lk4kwany0-libwebp-1.1.0" + ] + }, + { + "closureSize": 3790080, + "narHash": "sha256:1nkdfcp6lf8s777kjj3didwbvvpsj5pvpadhv4lpp2flc0hsfir7", + "narSize": 3790080, + "path": "/nix/store/ymja0zmf6mp79dzgsd5lrmrnwijzhk7y-anki-manual-2.1.15", + "references": [] + }, + { + "closureSize": 34988104, + "narHash": "sha256:03mc236kcqfmzml0pzpg3azjbc2zr1nmgvdhyvbznks1vzkafyns", + "narSize": 1851064, + "path": "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/3y5s6iyzqg2rwy8qz79i5f6cfmwqiaav-attr-2.4.48", + "/nix/store/camix5721pydww6zwwd4wg77krk61gf1-acl-2.2.53", + "/nix/store/ypsd29c5hgj1x7xz5ddffanxw5d8fh7b-coreutils-8.32" + ] + }, + { + "closureSize": 37175368, + "narHash": "sha256:1cp9lq0b7bjanyjzzzxwyib011i1kcyxrr1nmjmakari0jsq2sjn", + "narSize": 2780048, + "path": "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cgjnqiby59x6kz9c33g73007ry8bs8qa-libxcb-1.14", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0" + ] + }, + { + "closureSize": 2441152, + "narHash": "sha256:07xn4xfa9zzpmpg17hpn5dbqg8xsgr37ma1j38v1jbdd4a67gc2x", + "narSize": 1683328, + "path": "/nix/store/yrxi75y6gdwbv3i6f4kjbq1yfh8pf9zv-fontconfig-2.13.92", + "references": [ + "/nix/store/2pb33zdcvkm638m6yfny15d6x1vl1bha-dejavu-fonts-minimal-2.37" + ] + }, + { + "closureSize": 34274256, + "narHash": "sha256:06rhz69vjhbhixr6kc6jwxcj3d1b1gfwgjakrz3h767mnw0c7gb8", + "narSize": 1336232, + "path": "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23" + ] + }, + { + "closureSize": 157363424, + "narHash": "sha256:0i014mdwm2cs6qkb8vp46asg82dg0wy9l64hwsma98mv84d710wc", + "narSize": 426344, + "path": "/nix/store/yzr03qiw8h4r3fnhmagb9nw6g8yy1a61-portaudio-190600-20161030", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/7sbg0wy12cb3l4br5xwxig8vly45j0hy-libjack2-1.9.17", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/v8l1i15nc924d39pj7x1crj7527nh57z-alsa-lib-1.2.4", + "/nix/store/yzr03qiw8h4r3fnhmagb9nw6g8yy1a61-portaudio-190600-20161030" + ] + }, + { + "closureSize": 112576800, + "narHash": "sha256:0by7q38l57v9s4c98mqp8flir1nsb3dvbb1p3dpljnxava0c53mx", + "narSize": 932800, + "path": "/nix/store/z658b5ap553d0n2j7xzxbfi5n3lkw19k-python3.8-nose-1.3.7", + "references": [ + "/nix/store/2qf95q6xm34ihk7z2rq1251pfjyr3grq-python3.8-coverage-5.3", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/z658b5ap553d0n2j7xzxbfi5n3lkw19k-python3.8-nose-1.3.7" + ] + }, + { + "closureSize": 111784088, + "narHash": "sha256:18gbir8z832rxgjxbi04qgmqis77cjmq8liy457lpmx6z2jaij0m", + "narSize": 1175984, + "path": "/nix/store/z7iic0pjvfzp5m45rmhvn1afk6b4bvrs-python3.8-pytz-2020.5", + "references": [ + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/z7iic0pjvfzp5m45rmhvn1afk6b4bvrs-python3.8-pytz-2020.5" + ] + }, + { + "closureSize": 175734664, + "narHash": "sha256:14wx7s3pips2kyq1rs84yl2pbl548irxsvwg9ndcz4hcm92cy1i9", + "narSize": 2036976, + "path": "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/68zkd0ibxjydjzdwk1bvy9by5dp5yqhq-libtool-2.4.6-lib", + "/nix/store/9amvfnlxw93w8h6m2mj4ji89fv0nmaq7-speexdsp-1.2.0", + "/nix/store/gcry1ybzkgx68jhlab0qvp6ivc0vmzpk-libcap-2.47-lib", + "/nix/store/h6r2cfzi3g0mmb9nbrrgw0cn9xzs5fg4-libsndfile-1.0.30", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/pv997v33kgzga3185wjzzf70k8bi087z-dconf-0.38.0-lib", + "/nix/store/swa0hk1q8j924q9kg1aydnhz5m82px59-soxr-0.1.3", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zb481lbcn38i1wkzpqx6napjzcllc1ya-libpulseaudio-14.2" + ] + }, + { + "closureSize": 175807600, + "narHash": "sha256:0m7w774j8d8yg4jr07pahxgccm8n7fwy10jnbg8qgbk8rh5xr05p", + "narSize": 287368, + "path": "/nix/store/zfw5fadlj0604bg31jf9by0nbg41lbyg-at-spi2-atk-2.38.0", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/5i172qh374nls3canh28ydniqkgliv11-glib-2.66.4", + "/nix/store/bzlydmzc47dim3xrx3n7qkpjbrwdl74z-at-spi2-core-2.38.0", + "/nix/store/ha3r52724cqfyqv99mlgiy0kh5qrl2x0-dbus-1.12.20-lib", + "/nix/store/x4ad37j6q7x31s6x9lbacq06qslq6rvc-atk-2.36.0", + "/nix/store/zfw5fadlj0604bg31jf9by0nbg41lbyg-at-spi2-atk-2.38.0" + ] + }, + { + "closureSize": 121673592, + "narHash": "sha256:1fd6ydsqb17kshcjf80gs1kn34f4200rw1ydiid1v4dd16mfkl24", + "narSize": 917544, + "path": "/nix/store/zhd8cax3zchqbaazr42s9ib75dfz933a-python3.8-WebOb-1.8.6", + "references": [ + "/nix/store/6mvgkzscpx4la1fvbqx23qiyymyw9hg6-python3.8-pytest-6.1.2", + "/nix/store/qyv5ffskmq8fv9yf5mb6fr5yracavid4-python3-3.8.7", + "/nix/store/z658b5ap553d0n2j7xzxbfi5n3lkw19k-python3.8-nose-1.3.7", + "/nix/store/zhd8cax3zchqbaazr42s9ib75dfz933a-python3.8-WebOb-1.8.6" + ] + }, + { + "closureSize": 45678032, + "narHash": "sha256:0j68y4ad6m1xngbgmz5kkwap2j9z3n9swjwq1ncxf6icw0gigs23", + "narSize": 1857200, + "path": "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/ifykl65b31ji60x2x5vahvhxrc0b14m9-db-4.8.30", + "/nix/store/yyy7wr7r9jwjjqkr1yn643g3wzv010zd-bash-4.4-p23", + "/nix/store/zlklns4px174scf96hvmc2byb9z6087d-linux-pam-1.5.1" + ] + }, + { + "closureSize": 473595592, + "narHash": "sha256:023wnd9ij4as0hw8gxp6f97x7pkm4jk69vzvbxzlk2rqp378xyx1", + "narSize": 893824, + "path": "/nix/store/zpzqzd6a087nnvrh68qbmznkyrcc89z4-python3.8-PyQtWebEngine-5.15.2", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/g7d3s0avrfqm8k7y1drf918ggizx1y1c-qtbase-5.15.2", + "/nix/store/jsf76r23d3s8sgj3irnnx3701c9mfcs0-libGL-1.3.2", + "/nix/store/qyrqnffrqm8wrn79fy67kizix66k6wbd-qtwebchannel-5.15.2", + "/nix/store/rc6m08xxxv6zmph83938ncmfi4ga3a5i-gcc-10.2.0-lib", + "/nix/store/rjmgp8xp6pzcnzsk26jfmxm38frsw0ry-qtwebengine-5.15.2", + "/nix/store/snpl2f73wrffalpn3z9jabyhaw3pfaxn-qtlocation-5.15.2", + "/nix/store/yk618x65v4652d2mq2ssh5jxy6xc6zrf-qtdeclarative-5.15.2" + ] + }, + { + "closureSize": 41914712, + "narHash": "sha256:0id7q11d72xw9dmqhrkallx99vhsbx3xlk8mbiqfmdhkikaibykc", + "narSize": 8976688, + "path": "/nix/store/zr5y2gv34lyflyfi33hlk28ppk31apr6-gfortran-9.3.0-lib", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/zr5y2gv34lyflyfi33hlk28ppk31apr6-gfortran-9.3.0-lib" + ] + }, + { + "closureSize": 37314704, + "narHash": "sha256:0m0s5sa4rsrgd717i1mpvqgm63chgrm3zcfjwl8491gipazb68a6", + "narSize": 42360, + "path": "/nix/store/zrhaj983glc61smgwvg8ix9lzjki0sfg-libXxf86vm-1.1.4", + "references": [ + "/nix/store/3wa1xwnfv8ada1za1r8m4vmsiz1jifqq-glibc-2.32-35", + "/nix/store/cw7ffh2px1sarw3b9w9h6ykjkaq4rz8a-libXext-1.3.4", + "/nix/store/yq0m2kngxbjkh8y1kizshl4ym4ydnw7m-libX11-1.7.0", + "/nix/store/zrhaj983glc61smgwvg8ix9lzjki0sfg-libXxf86vm-1.1.4" + ] + }, + { + "closureSize": 134848472, + "narHash": "sha256:0nynd5ywd8sm9fz9j7gpcdd8c5415javp8jwjxjr845jzbyqi6an", + "narSize": 32664, + "path": "/nix/store/zzc5m9p3zgl0bkvrf1r2lp7hbci26z6l-blas-3-dev", + "references": [ + "/nix/store/l5g63si4h5bl8s85ajmkd8dh0gw4sdw2-blas-3", + "/nix/store/zzc5m9p3zgl0bkvrf1r2lp7hbci26z6l-blas-3-dev" + ] + } +] diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py new file mode 100644 index 000000000000..ac789022a32b --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py @@ -0,0 +1,45 @@ +from toolz import curried as tlz + +from .lib import ( + flatten, + over, + references_graph_to_igraph +) + +from .pipe import pipe + +MAX_LAYERS = 127 + + +def create_list_of_lists_of_strings(deeply_nested_lists_or_dicts_of_graphs): + list_of_graphs = flatten(deeply_nested_lists_or_dicts_of_graphs) + + return list( + filter( + # remove empty layers + lambda xs: len(xs) > 0, + tlz.map( + lambda g: g.vs["name"], + list_of_graphs + ) + ) + ) + + +def flatten_references_graph(references_graph, pipeline, exclude_paths=None): + if exclude_paths is not None: + exclude_paths = frozenset(exclude_paths) + references_graph = tlz.compose( + tlz.map(over( + "references", + lambda xs: frozenset(xs).difference(exclude_paths) + )), + tlz.remove(lambda node: node["path"] in exclude_paths) + )(references_graph) + + igraph_graph = references_graph_to_igraph(references_graph) + + return create_list_of_lists_of_strings(pipe( + pipeline, + igraph_graph + )) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py new file mode 100644 index 000000000000..c39c663d038e --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py @@ -0,0 +1,121 @@ +import unittest +from .flatten_references_graph import flatten_references_graph +# from .lib import path_relative_to_file, load_json + +if __name__ == "__main__": + unittest.main() + +references_graph = [ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "C", + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C", + "D" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + }, + { + "closureSize": 7, + "narHash": "sha256:d", + "narSize": 8, + "path": "D", + "references": [ + "D" + ] + } +] + + +class Test(unittest.TestCase): + + def test_flatten_references_graph(self): + pipeline = [ + ["split_paths", ["B"]], + ] + + result = flatten_references_graph(references_graph, pipeline) + + self.assertEqual( + result, + [ + # B and it's exclusive deps + ["B", "D"], + # Common deps + ["C"], + # Rest (without common deps) + ["A"] + ] + ) + + pipeline = [ + ["split_paths", ["B"]], + ["over", "main", ["subcomponent_in", ["B"]]], + ] + + result = flatten_references_graph(references_graph, pipeline) + + self.assertEqual( + result, + [ + ["B"], + ["D"], + ["C"], + ["A"] + ] + ) + + def test_flatten_references_graph_exclude_paths(self): + pipeline = [ + ["split_paths", ["B"]], + ] + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=["A"] + ) + + self.assertEqual( + result, + [ + # A was excluded so there is no "rest" or "common" layer + ["B", "C", "D"] + ] + ) + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=["D"] + ) + + self.assertEqual( + result, + [ + # D removed from this layer + ["B"], + ["C"], + ["A"] + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py new file mode 100644 index 000000000000..bca665379ce0 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py @@ -0,0 +1,329 @@ +from collections.abc import Iterable +from pathlib import Path +from toolz import curried as tlz +from toolz import curry +import igraph as igraph +import itertools as itertools +import json as json +import os as os +import re as re +import sys + +DEBUG = os.environ.get("DEBUG", False) == "True" +DEBUG_PLOT = os.environ.get("DEBUG_PLOT", False) == "True" +# If this is set, the plots will be saved to files instead of being displayed +# with default image viewer. +DEBUG_PLOT_SAVE_BASE_NAME = os.environ.get("DEBUG_PLOT_SAVE_BASE_NAME") + +c = igraph.configuration.init() +# App used to open the plots when DEBUG_PLOT_SAVE_BASE_NAME is not set. +c["apps.image_viewer"] = os.environ.get("DEBUG_PLOT_IMAGE_VIEWER", "gwenview") + + +def debug(*args, **kwargs): + if DEBUG: + print(*args, file=sys.stderr, **kwargs) + + +def debug_plot(graph, name, **kwargs): + if not DEBUG_PLOT: + return + + vertex_label = [ + # remove /nix/store/HASH- prefix from labels + re.split("^/nix/store/[a-z0-9]{32}-", name)[-1] + for name in graph.vs["name"] + ] + + save_as = ( + None if DEBUG_PLOT_SAVE_BASE_NAME is None + else DEBUG_PLOT_SAVE_BASE_NAME + name + ".png" + ) + + igraph.plot( + graph, + save_as, + vertex_label=vertex_label, + **(tlz.merge( + { + # "bbox": (3840, 2160), + "bbox": (800, 600), + "margin": 100, + "vertex_label_dist": -5, + "edge_color": "orange", + "vertex_size": 20, + "vertex_label_size": 30, + "edge_arrow_size": 2 + }, + kwargs + )), + ) + + +def debug_plot_with_highligth(g, vs, layout): + debug_plot( + g, + layout=layout, + # layout=Layout(new_coords), + vertex_color=[ + "green" if v.index in vs else "red" + for v in g.vs + ] + ) + + +@curry +def pick_keys(keys, d): + return { + key: d[key] for key in keys if key in d + } + + +def unnest_iterable(xs): + return itertools.chain.from_iterable(xs) + + +def load_json(file_path): + with open(file_path) as f: + return json.load(f) + + +@curry +def sorted_by(key, xs): + return sorted(xs, key=lambda x: x[key]) + + +@curry +def find_vertex_by_name_or_none(graph, name): + try: + # NOTE: find by name is constant time. + return graph.vs.find(name) + # This will be thrown if vertex with given name is not found. + except ValueError: + return None + + +def subcomponent_multi(graph, vertices, mode="out"): + """Return concatenated subcomponents generated by the given list of + vertices. + """ + return tlz.mapcat( + lambda vertex: graph.subcomponent(vertex, mode=mode), + vertices + ) + + +@curry +def egdes_for_reference_graph_node(path_to_size_dict, reference_graph_node): + source = reference_graph_node["path"] + return map( + lambda x: {"source": source, "target": x}, + sorted( + filter( + # references might contain source + lambda x: x != source, + reference_graph_node["references"] + ), + key=lambda x: 1 * path_to_size_dict[x] + ) + ) + + +reference_graph_node_keys_to_keep = [ + "closureSize", + "narSize" +] + +pick_reference_graph_node_keys = pick_keys(reference_graph_node_keys_to_keep) + + +def vertex_from_reference_graph_node(reference_graph_node): + return tlz.merge( + {"name": reference_graph_node["path"]}, + pick_reference_graph_node_keys(reference_graph_node) + ) + + +def references_graph_to_igraph(references_graph): + """ + Converts result of exportReferencesGraph into an igraph directed graph. + Uses paths as igraph node names, and sets closureSize and narSize as + properties of igraph nodes. + """ + debug('references_graph', references_graph) + references_graph = sorted(references_graph, key=lambda x: 1 * x["narSize"]) + + # Short circuit since DictList throws an error if first argument (vertices) + # contains no elements. + # The error is: KeyError: 'name' + # here: https://github.com/igraph/python-igraph/blob/da7484807f5152a2c18c55dd4154653de2c7f5f7/src/igraph/__init__.py#L3091 # noqa: E501 + # This looks like a bug. + if len(references_graph) == 0: + return empty_directed_graph() + + path_to_size_dict = { + node["path"]: node["narSize"] for node in references_graph + } + + debug('path_to_size_dict', path_to_size_dict) + + return igraph.Graph.DictList( + map(vertex_from_reference_graph_node, references_graph), + unnest_iterable(map( + egdes_for_reference_graph_node(path_to_size_dict), + references_graph + )), + directed=True + ) + + +@curry +def graph_vertex_index_to_name(graph, index): + return graph.vs[index]["name"] + + +def igraph_to_reference_graph(igraph_instance): + return [ + tlz.merge( + { + "path": v["name"], + "references": list(map( + graph_vertex_index_to_name(igraph_instance), + igraph_instance.successors(v.index) + )) + }, + pick_reference_graph_node_keys(v.attributes()) + ) + for v in igraph_instance.vs + ] + + +def load_closure_graph(file_path): + return references_graph_to_igraph(load_json(file_path)) + + +def path_relative_to_file(file_path_from, file_path): + dir_path = Path(file_path_from).parent + return dir_path / file_path + + +def is_None(x): + return x is None + + +def not_None(x): + return x is not None + + +def print_layers(layers): + debug("\n::::LAYERS:::::") + for index, layer in enumerate(layers): + debug("") + debug("layer index:", index) + debug("[") + for v in layer.vs["name"]: + debug(" ", v) + debug("]") + + +def print_vs(graph): + for v in graph.vs: + debug(v) + + +def directed_graph(edges, vertices=None, vertex_attrs=[]): + graph = igraph.Graph.TupleList(edges, directed=True) + + # Add detached vertices (without edges) if any. + if vertices is not None: + graph = graph + vertices + + # Add vertex attributes if any. + for (name, attrs_dict) in vertex_attrs: + vertex = graph.vs.find(name) + + for (k, v) in attrs_dict.items(): + vertex[k] = v + + return graph + + +def empty_directed_graph(): + return directed_graph([]) + + +def graph_is_empty(graph): + return len(graph.vs) == 0 + + +def pick_attrs(attrs, x): + return {attr: getattr(x, attr) for attr in attrs} + + +def merge_graphs(graphs): + return tlz.reduce(lambda acc, g: acc + g, graphs, empty_directed_graph()) + + +# Functions below can be used in user defined pipeline (see pipe.py). +# All functions need to be curried, and the user needs to be able to +# provide values for all arguments apart from the last one from nix code. +@curry +def over(prop_name, func, dictionary): + value = dictionary[prop_name] + return tlz.assoc(dictionary, prop_name, func(value)) + + +# One argument functions also need to be curried to simplify processing of the +# pipeline. +@curry +def flatten(xs): + xs = xs.values() if isinstance(xs, dict) else xs + for x in xs: + if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): + yield from flatten(x) + else: + yield x + + +@curry +def split_every(count, graph): + vs = graph.vs + return [ + graph.induced_subgraph(vs[x:x + count]) + for x in range(0, len(vs), count) + ] + + +@curry +def limit_layers(max_count, graphs): + assert max_count > 0, "max count needs to > 0" + + graphs_iterator = iter(graphs) + + return tlz.concat([ + tlz.take(max_count - 1, graphs_iterator), + # Merges all graphs remaining in the iterator, after initial + # max_count - 1 have been taken. + (lambda: (yield merge_graphs(graphs_iterator)))() + ]) + + +@curry +def remove_paths(paths, graph): + # Allow passing a single path. + if isinstance(paths, str): + paths = [paths] + + indices_to_remove = tlz.compose( + list, + tlz.map(lambda v: v.index), + tlz.remove(is_None), + tlz.map(find_vertex_by_name_or_none(graph)) + )(paths) + + return graph - indices_to_remove if len(indices_to_remove) > 0 else graph + + +@curry +def reverse(iterator): + return reversed(list(iterator)) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py new file mode 100644 index 000000000000..49099e7f0b5b --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py @@ -0,0 +1,199 @@ +import unittest + +from toolz import curried as tlz + +from . import test_helpers as th + +from .lib import ( + directed_graph, + igraph_to_reference_graph, + limit_layers, + pick_keys, + references_graph_to_igraph, + reference_graph_node_keys_to_keep +) + +if __name__ == "__main__": + unittest.main() + + +references_graph = [ + { + "closureSize": 3, + "narHash": "sha256:d", + "narSize": 0, + "path": "D", + "references": [ + "D" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "B" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:e", + "narSize": 5, + "path": "E", + "references": [ + "E" + ] + }, + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 10, + "path": "A", + "references": [ + # most of the time references contain self path, but not always. + "C", + "B", + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C", + "E", + "D" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:f", + "narSize": 2, + "path": "F", + "references": [ + "F" + ] + } +] + + +class TestLib(unittest.TestCase, th.CustomAssertions): + + def test_references_graph_to_igraph(self): + + graph = references_graph_to_igraph(references_graph) + + pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) + + self.assertGraphEqual( + graph, + directed_graph( + [ + ("A", "B"), + ("A", "C"), + ("C", "E"), + ("C", "D"), + ], + ["F"], + # Add "narSize" and "closureSize" attributes to each node. + map( + lambda node: (node["path"], pick_preserved_keys(node)), + references_graph + ) + ) + ) + + def test_references_graph_to_igraph_one_node(self): + + references_graph = [ + { + 'closureSize': 168, + 'narHash': 'sha256:0dl4', + 'narSize': 168, + 'path': 'A', + 'references': [] + } + ] + + graph = references_graph_to_igraph(references_graph) + + pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) + + self.assertGraphEqual( + graph, + directed_graph( + [], + ["A"], + # Add "narSize" and "closureSize" attributes to each node. + map( + lambda node: (node["path"], pick_preserved_keys(node)), + references_graph + ) + ) + ) + + def test_references_graph_to_igraph_zero_nodes(self): + + references_graph = [] + + graph = references_graph_to_igraph(references_graph) + + self.assertGraphEqual( + graph, + directed_graph( + [], + [], + [] + ) + ) + + def test_igraph_to_reference_graph(self): + + graph = references_graph_to_igraph(references_graph) + + nodes_by_path = { + node["path"]: node for node in references_graph + } + + result = igraph_to_reference_graph(graph) + + self.assertEqual( + len(result), + len(references_graph) + ) + + pick_preserved_keys = pick_keys([ + "path", + *reference_graph_node_keys_to_keep + ]) + + for node in result: + original_node = nodes_by_path[node["path"]] + + self.assertDictEqual( + pick_preserved_keys(original_node), + pick_preserved_keys(node) + ) + + revove_self_ref = tlz.remove(lambda a: a == node["path"]) + + self.assertListEqual( + sorted(node["references"]), + sorted(revove_self_ref(original_node["references"])) + ) + + def test_limit_layers_nothing_to_do(self): + graph = references_graph_to_igraph(references_graph) + + layers = [graph] + result = limit_layers(1, layers) + result_list = list(result) + + self.assertEqual( + len(result_list), + 1 + ) + + self.assertGraphEqual(graph, result_list[0]) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py new file mode 100644 index 000000000000..f4d31397756c --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py @@ -0,0 +1,80 @@ +from toolz import curried as tlz +from toolz import curry + +from . import lib as lib +from . import subcomponent as subcomponent +from .popularity_contest import popularity_contest +from .split_paths import split_paths + +from .lib import ( + # references_graph_to_igraph + debug, + pick_attrs +) + +funcs = tlz.merge( + pick_attrs( + [ + "flatten", + "over", + "split_every", + "limit_layers", + "remove_paths", + "reverse" + ], + lib + ), + pick_attrs( + [ + "subcomponent_in", + "subcomponent_out", + ], + subcomponent + ), + { + "split_paths": split_paths, + "popularity_contest": popularity_contest, + "map": tlz.map + } +) + + +@curry +def nth_or_none(index, xs): + try: + return xs[index] + except IndexError: + return None + + +def preapply_func(func_call_data): + [func_name, *args] = func_call_data + debug("func_name", func_name) + debug("args", args) + debug('func_name in ["over"]', func_name in ["over"]) + + # TODO: these could be handled in more generic way by defining, for each + # function, which of the args are expected to be functions which need + # pre-applying. + if func_name == "over": + [first_arg, second_arg] = args + args = [first_arg, preapply_func(second_arg)] + + elif func_name == "map": + args = [preapply_func(args[0])] + + return funcs[func_name](*args) + + +@curry +def pipe(pipeline, data): + debug("pipeline", pipeline) + partial_funcs = list(tlz.map(preapply_func, pipeline)) + debug('partial_funcs', partial_funcs) + return tlz.pipe( + data, + *partial_funcs + ) + + +funcs["pipe"] = pipe diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py new file mode 100644 index 000000000000..ab03fa2db66d --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py @@ -0,0 +1,153 @@ +import unittest +from .pipe import pipe + +from . import test_helpers as th + +from .lib import ( + directed_graph, +) + + +if __name__ == "__main__": + unittest.main() + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "C"), + ("B", "D"), + ("B", "E"), + ("E", "F"), + ("B", "G"), + ("Root2", "B"), + ("Root3", "C"), + ] + + return directed_graph(edges) + + +class CustomAssertions: + def runAndAssertResult(self, graph, pipeline, expected_graph_args): + result = list(pipe(pipeline, graph)) + + for (index, expected_graph_arg) in enumerate(expected_graph_args): + + self.assertGraphEqual( + directed_graph(*expected_graph_arg), + result[index] + ) + + +if __name__ == "__main__": + unittest.main() + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_1(self): + pipeline = [ + ["split_paths", ["B"]], + [ + "over", + "main", + [ + "pipe", + [ + ["subcomponent_in", ["B"]], + [ + "over", + "rest", + ["popularity_contest"] + ] + ] + ] + ], + ["flatten"], + ["map", ["remove_paths", "Root3"]], + ["limit_layers", 5], + ] + + expected_graph_args = [ + # "B"" separated from the rest by "split_paths" and + # "subcomponent_in' stages. + ([], ["B"]), + # Deps of "B", split into individual layers by "popularity_contest", + # with "F" being most popular + ([], ["F"]), + ([], ["D"]), + ([], ["E"]), + # "rest" output of "split_paths" stage with "G" merged into it by + # "limit_layers" stage. + ( + [ + ("Root1", "A"), + ("A", "C") + ], + ["Root2", "G"] + ) + ] + + self.runAndAssertResult( + make_test_graph(), + pipeline, + expected_graph_args + ) + + def test_2(self): + graph = directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ], + ["Root2"] + ) + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ], + [ + # Ordered from most to least popular + ([], ["B"]), + ([], ["A"]), + ([], ["Root1"]), + ([], ["Root2"]) + ] + ) + + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ["limit_layers", 3], + ], + [ + # Most popular first + ([], ["B"]), + ([], ["A"]), + # Least popular combined + ([], ["Root1", "Root2"]), + ] + ) + + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ["reverse"], + ["limit_layers", 3], + ], + [ + # Least popular first + ([], ["Root2"]), + ([], ["Root1"]), + # Most popular first + ([], ["A", "B"]) + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py new file mode 100644 index 000000000000..7ab7b3acb6b0 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py @@ -0,0 +1,398 @@ +# Using a simple algorithm, convert the references to a path in to a +# sorted list of dependent paths based on how often they're referenced +# and how deep in the tree they live. Equally-"popular" paths are then +# sorted by name. +# +# The existing writeReferencesToFile prints the paths in a simple +# ascii-based sorting of the paths. +# +# Sorting the paths by graph improves the chances that the difference +# between two builds appear near the end of the list, instead of near +# the beginning. This makes a difference for Nix builds which export a +# closure for another program to consume, if that program implements its +# own level of binary diffing. +# +# For an example, Docker Images. If each store path is a separate layer +# then Docker Images can be very efficiently transfered between systems, +# and we get very good cache reuse between images built with the same +# version of Nixpkgs. However, since Docker only reliably supports a +# small number of layers (42) it is important to pick the individual +# layers carefully. By storing very popular store paths in the first 40 +# layers, we improve the chances that the next Docker image will share +# many of those layers.* +# +# Given the dependency tree: +# +# A - B - C - D -\ +# \ \ \ \ +# \ \ \ \ +# \ \ - E ---- F +# \- G +# +# Nodes which have multiple references are duplicated: +# +# A - B - C - D - F +# \ \ \ +# \ \ \- E - F +# \ \ +# \ \- E - F +# \ +# \- G +# +# Each leaf node is now replaced by a counter defaulted to 1: +# +# A - B - C - D - (F:1) +# \ \ \ +# \ \ \- E - (F:1) +# \ \ +# \ \- E - (F:1) +# \ +# \- (G:1) +# +# Then each leaf counter is merged with its parent node, replacing the +# parent node with a counter of 1, and each existing counter being +# incremented by 1. That is to say `- D - (F:1)` becomes `- (D:1, F:2)`: +# +# A - B - C - (D:1, F:2) +# \ \ \ +# \ \ \- (E:1, F:2) +# \ \ +# \ \- (E:1, F:2) +# \ +# \- (G:1) +# +# Then each leaf counter is merged with its parent node again, merging +# any counters, then incrementing each: +# +# A - B - (C:1, D:2, E:2, F:5) +# \ \ +# \ \- (E:1, F:2) +# \ +# \- (G:1) +# +# And again: +# +# A - (B:1, C:2, D:3, E:4, F:8) +# \ +# \- (G:1) +# +# And again: +# +# (A:1, B:2, C:3, D:4, E:5, F:9, G:2) +# +# and then paths have the following "popularity": +# +# A 1 +# B 2 +# C 3 +# D 4 +# E 5 +# F 9 +# G 2 +# +# and the popularity contest would result in the paths being printed as: +# +# F +# E +# D +# C +# B +# G +# A +# +# * Note: People who have used a Dockerfile before assume Docker's +# Layers are inherently ordered. However, this is not true -- Docker +# layers are content-addressable and are not explicitly layered until +# they are composed in to an Image. + +import igraph as igraph + +from collections import defaultdict +from operator import eq +from toolz import curried as tlz +from toolz import curry + +from .lib import ( + debug, + directed_graph, + igraph_to_reference_graph, + over, + pick_keys, + reference_graph_node_keys_to_keep +) + +eq = curry(eq) + +pick_keys_to_keep = pick_keys(reference_graph_node_keys_to_keep) + + +# Find paths in the original dataset which are never referenced by +# any other paths +def find_roots(closures): + debug('closures', closures) + roots = [] + + for closure in closures: + path = closure['path'] + if not any_refer_to(path, closures): + roots.append(path) + + return roots + + +def any_refer_to(path, closures): + for closure in closures: + if path != closure['path']: + if path in closure['references']: + return True + return False + + +def all_paths(closures): + paths = [] + for closure in closures: + paths.append(closure['path']) + paths.extend(closure['references']) + paths.sort() + return list(set(paths)) + + +# Convert: +# +# [ +# { path: /nix/store/foo, references: [ /nix/store/foo, /nix/store/bar, /nix/store/baz ] }, # noqa: E501 +# { path: /nix/store/bar, references: [ /nix/store/bar, /nix/store/baz ] }, +# { path: /nix/store/baz, references: [ /nix/store/baz, /nix/store/tux ] }, +# { path: /nix/store/tux, references: [ /nix/store/tux ] } +# ] +# +# To: +# { +# /nix/store/foo: [ /nix/store/bar, /nix/store/baz ], +# /nix/store/bar: [ /nix/store/baz ], +# /nix/store/baz: [ /nix/store/tux ] }, +# /nix/store/tux: [ ] +# } +# +# Note that it drops self-references to avoid loops. + + +def make_lookup(closures): + return { + # remove self reference + node["path"]: over("references", tlz.remove(eq(node["path"])), node) + for node in closures + } + + +# Convert: +# +# /nix/store/foo with +# { +# /nix/store/foo: [ /nix/store/bar, /nix/store/baz ], +# /nix/store/bar: [ /nix/store/baz ], +# /nix/store/baz: [ /nix/store/tux ] }, +# /nix/store/tux: [ ] +# } +# +# To: +# +# { +# /nix/store/bar: { +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# }, +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } + + +def make_graph_segment_from_root(subgraphs_cache, root, lookup): + children = {} + for ref in lookup[root]: + # make_graph_segment_from_root is a pure function, and will + # always return the same result based on a given input. Thus, + # cache computation. + # + # Python's assignment will use a pointer, preventing memory + # bloat for large graphs. + if ref not in subgraphs_cache: + debug("Subgraph Cache miss on {}".format(ref)) + subgraphs_cache[ref] = make_graph_segment_from_root( + subgraphs_cache, ref, lookup + ) + else: + debug("Subgraph Cache hit on {}".format(ref)) + children[ref] = subgraphs_cache[ref] + return children + + +# Convert a graph segment in to a popularity-counted dictionary: +# +# From: +# { +# /nix/store/foo: { +# /nix/store/bar: { +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } +# } +# +# to: +# [ +# /nix/store/foo: 1 +# /nix/store/bar: 2 +# /nix/store/baz: 4 +# /nix/store/tux: 6 +# ] + +def graph_popularity_contest(popularity_cache, full_graph): + popularity = defaultdict(int) + for path, subgraph in full_graph.items(): + popularity[path] += 1 + # graph_popularity_contest is a pure function, and will + # always return the same result based on a given input. Thus, + # cache computation. + # + # Python's assignment will use a pointer, preventing memory + # bloat for large graphs. + if path not in popularity_cache: + debug("Popularity Cache miss on", path) + popularity_cache[path] = graph_popularity_contest( + popularity_cache, subgraph + ) + else: + debug("Popularity Cache hit on", path) + + subcontest = popularity_cache[path] + for subpath, subpopularity in subcontest.items(): + debug("Calculating popularity for", subpath) + popularity[subpath] += subpopularity + 1 + + return popularity + +# Emit a list of packages by popularity, most first: +# +# From: +# [ +# /nix/store/foo: 1 +# /nix/store/bar: 1 +# /nix/store/baz: 2 +# /nix/store/tux: 2 +# ] +# +# To: +# [ /nix/store/baz /nix/store/tux /nix/store/bar /nix/store/foo ] + + +def order_by_popularity(paths): + paths_by_popularity = defaultdict(list) + popularities = [] + for path, popularity in paths.items(): + popularities.append(popularity) + paths_by_popularity[popularity].append(path) + + popularities = sorted(set(popularities)) + + flat_ordered = [] + for popularity in popularities: + paths = paths_by_popularity[popularity] + paths.sort(key=package_name) + + flat_ordered.extend(reversed(paths)) + return list(reversed(flat_ordered)) + + +def package_name(path): + parts = path.split('-') + start = parts.pop(0) + # don't throw away any data, so the order is always the same. + # even in cases where only the hash at the start has changed. + parts.append(start) + return '-'.join(parts) + + +@curry +def popularity_contest(graph): + # Data comes in as an igraph directed graph or in the format produced + # by nix's exportReferencesGraph: + # [ + # { path: /nix/store/foo, references: [ /nix/store/foo, /nix/store/bar, /nix/store/baz ] }, # noqa: E501 + # { path: /nix/store/bar, references: [ /nix/store/bar, /nix/store/baz ] }, # noqa: E501 + # { path: /nix/store/baz, references: [ /nix/store/baz, /nix/store/tux ] }, # noqa: E501 + # { path: /nix/store/tux, references: [ /nix/store/tux ] } + # ] + # + # We want to get out a list of paths ordered by how universally, + # important they are, ie: tux is referenced by every path, transitively + # so it should be #1 + # + # [ + # /nix/store/tux, + # /nix/store/baz, + # /nix/store/bar, + # /nix/store/foo, + # ] + # + # NOTE: the output is actually a list of igraph graphs with a single vertex + # with v["name"] == path, and some properties (defined in + # reference_graph_node_keys_to_keep) from the nodes of the input graph + # copied as vertex attributes. + debug('graph', graph) + + if isinstance(graph, igraph.Graph): + graph = igraph_to_reference_graph(graph) + + debug("Finding roots") + roots = find_roots(graph) + + debug("Making lookup") + lookup = make_lookup(graph) + + full_graph = {} + subgraphs_cache = {} + for root in roots: + debug("Making full graph for", root) + full_graph[root] = make_graph_segment_from_root( + subgraphs_cache, + root, + tlz.valmap( + tlz.get("references"), + lookup + ) + ) + + debug("Running contest") + contest = graph_popularity_contest({}, full_graph) + + debug("Ordering by popularity") + ordered = order_by_popularity(contest) + + debug("Checking for missing paths") + missing = [] + + for path in all_paths(graph): + if path not in ordered: + missing.append(path) + + ordered.extend(missing) + + return map( + # Turn each path into a graph with 1 vertex. + lambda path: directed_graph( + # No edges + [], + # One vertex, with name=path + [path], + # Setting desired attributes on the vertex. + [(path, pick_keys_to_keep(lookup[path]))] + ), + ordered + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py new file mode 100644 index 000000000000..5ed58eee4196 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py @@ -0,0 +1,335 @@ +import unittest +from toolz import curry +from toolz import curried as tlz + +from . import test_helpers as th + +from .popularity_contest import ( + all_paths, + any_refer_to, + find_roots, + graph_popularity_contest, + make_graph_segment_from_root, + make_lookup, + popularity_contest, + order_by_popularity +) + +from .lib import ( + directed_graph, + igraph_to_reference_graph, + over +) + + +if __name__ == "__main__": + unittest.main() + + +class CustomAssertions: + @curry + def assertResultKeys(self, keys, result): + self.assertListEqual( + list(result.keys()), + keys + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_graph(self): + def test_empty(graph): + self.assertListEqual( + list(popularity_contest(graph)), + [] + ) + + # popularity_contest works with igraph graph or refurence_graph in + # form a list of dicts (as returned by nix's exportReferencesGraph) + test_empty(directed_graph([])) + test_empty([]) + + def test_popularity_contest(self): + # Making sure vertex attrs are preserved. + vertex_props_dict = { + "Root1": {"narSize": 1, "closureSize": 2}, + "B": {"narSize": 3, "closureSize": 4}, + "X": {"narSize": 5, "closureSize": 6}, + } + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "D"), + ("D", "E"), + ("B", "D"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C") + ] + detached_vertices = ["X"] + vertex_props = vertex_props_dict.items() + + def test(graph): + result = list(popularity_contest(graph)) + + expected_paths = [ + 'E', + 'D', + 'F', + 'B', + 'A', + 'C', + 'Root1', + 'Root2', + 'Root3', + 'X' + ] + + self.assertEqual( + len(result), + len(expected_paths) + ) + + for (index, path) in enumerate(expected_paths): + path_props = vertex_props_dict.get(path) or {} + + self.assertGraphEqual( + result[index], + directed_graph([], [path], [(path, path_props)]) + ) + + graph = directed_graph(edges, detached_vertices, vertex_props) + + test(graph) + test(igraph_to_reference_graph(graph)) + + +class TestFindRoots(unittest.TestCase): + def test_find_roots(self): + self.assertCountEqual( + find_roots([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ]), + ["/nix/store/foo", "/nix/store/hello"] + ) + + +class TestAnyReferTo(unittest.TestCase): + def test_has_references(self): + self.assertTrue( + any_refer_to( + "/nix/store/bar", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/bar" + ] + }, + ] + ), + ) + + def test_no_references(self): + self.assertFalse( + any_refer_to( + "/nix/store/foo", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + ] + ), + ) + + +class TestAllPaths(unittest.TestCase): + def test_returns_all_paths(self): + self.assertCountEqual( + all_paths([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ]), + ["/nix/store/foo", "/nix/store/bar", + "/nix/store/hello", "/nix/store/tux", ] + ) + + def test_no_references(self): + self.assertFalse( + any_refer_to( + "/nix/store/foo", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + ] + ), + ) + + +class TestMakeLookup(unittest.TestCase): + def test_returns_lookp(self): + self.assertDictEqual( + # "references" in the result are iterators so we need + # to convert them to a list before asserting. + tlz.valmap(over("references", list), make_lookup([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar", + "/nix/store/hello" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ])), + { + "/nix/store/foo": { + "path": "/nix/store/foo", + "references": [ + "/nix/store/bar", + "/nix/store/hello" + ] + }, + "/nix/store/bar": { + "path": "/nix/store/bar", + "references": [ + "/nix/store/tux" + ] + }, + "/nix/store/hello": { + "path": "/nix/store/hello", + "references": [ + ] + } + } + ) + + +class TestMakeGraphSegmentFromRoot(unittest.TestCase): + def test_returns_graph(self): + self.assertDictEqual( + make_graph_segment_from_root({}, "/nix/store/foo", { + "/nix/store/foo": ["/nix/store/bar"], + "/nix/store/bar": ["/nix/store/tux"], + "/nix/store/tux": [], + "/nix/store/hello": [], + }), + { + "/nix/store/bar": { + "/nix/store/tux": {} + } + } + ) + + def test_returns_graph_tiny(self): + self.assertDictEqual( + make_graph_segment_from_root({}, "/nix/store/tux", { + "/nix/store/foo": ["/nix/store/bar"], + "/nix/store/bar": ["/nix/store/tux"], + "/nix/store/tux": [], + }), + {} + ) + + +class TestGraphPopularityContest(unittest.TestCase): + def test_counts_popularity(self): + self.assertDictEqual( + graph_popularity_contest({}, { + "/nix/store/foo": { + "/nix/store/bar": { + "/nix/store/baz": { + "/nix/store/tux": {} + } + }, + "/nix/store/baz": { + "/nix/store/tux": {} + } + } + }), + { + "/nix/store/foo": 1, + "/nix/store/bar": 2, + "/nix/store/baz": 4, + "/nix/store/tux": 6, + } + ) + + +class TestOrderByPopularity(unittest.TestCase): + def test_returns_in_order(self): + self.assertEqual( + order_by_popularity({ + "/nix/store/foo": 1, + "/nix/store/bar": 1, + "/nix/store/baz": 2, + "/nix/store/tux": 2, + }), + [ + "/nix/store/baz", + "/nix/store/tux", + "/nix/store/bar", + "/nix/store/foo" + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py new file mode 100644 index 000000000000..31595c950c9a --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py @@ -0,0 +1,227 @@ +from toolz import curried as tlz +from toolz import curry + +from .lib import ( + debug, + debug_plot, + DEBUG_PLOT, + find_vertex_by_name_or_none, + graph_is_empty, + is_None, + subcomponent_multi, + unnest_iterable +) + + +@curry +def coerce_to_singly_rooted_graph(fake_root_name, graph): + """Add single root to the graph connected to all existing roots. + + If graph has only one root, return the graph unchanged and the name + of the root vertex. + + Otherwise return a modified graph (copy) and a name of the added root + vertex. + """ + roots = graph.vs.select(lambda v: len(graph.predecessors(v)) == 0) + root_names = roots["name"] + + if len(root_names) == 1: + return graph, root_names[0] + else: + edges = [(fake_root_name, v) for v in root_names] + graph_with_root = graph + fake_root_name + edges + return graph_with_root, fake_root_name + + +@curry +def remove_vertex(vertex_name, graph): + """Remove vertex with given name, returning copy of input graph if vertex + with given name is found in the graph + """ + vertex = find_vertex_by_name_or_none(graph)(vertex_name) + + return graph - vertex_name if vertex else graph + + +def get_children_of(graph, vertex_names): + return unnest_iterable(map( + graph.successors, + tlz.remove( + is_None, + map( + find_vertex_by_name_or_none(graph), + vertex_names + ) + ) + )) + + +def as_list(x): + return x if isinstance(x, list) else [x] + + +@curry +def split_path_spec_to_indices(graph, split_path_spec): + debug("split_path_spec", split_path_spec) + if isinstance(split_path_spec, dict): + if "children_of" in split_path_spec: + children_of = split_path_spec["children_of"] + + return get_children_of(graph, as_list(children_of)) + else: + raise Exception( + "Unexpected split path spec: dict with invalid keys." + "Valid: [\"children_of\"]" + ) + else: + vertex = find_vertex_by_name_or_none(graph)(split_path_spec) + return [] if is_None(vertex) else [vertex.index] + + +call_count = 0 + + +@curry +def split_paths(split_paths, graph_in): + debug("____") + debug("split_paths:", split_paths) + debug("graph_in:", graph_in) + + if DEBUG_PLOT: + global call_count + graph_name_prefix = f"split_paths_{call_count}_" + call_count += 1 + + # Convert list of split_paths into list of vertex indices. Ignores + # split_paths which don"t match any vertices in the graph. + # All edges pointing at the indices will be deleted from the graph. + split_path_indices = list(unnest_iterable(map( + split_path_spec_to_indices(graph_in), + split_paths + ))) + + debug("split_path_indices:", split_path_indices) + + # Short circuit if there is nothing to do (split_paths didn"t match any + # vertices in the graph). + if len(split_path_indices) == 0: + if DEBUG_PLOT: + layout = graph_in.layout('tree') + debug_plot(graph_in, f"{graph_name_prefix}input", layout=layout) + debug_plot(graph_in, f"{graph_name_prefix}result", layout=layout) + + return {"rest": graph_in} + + # If graph has multiple roots, add a single one connecting all existing + # roots to make it easy to split the graph into 2 sets of vertices after + # deleting edges pointing at split_path_indices. + fake_root_name = "__root__" + graph, root_name = coerce_to_singly_rooted_graph(fake_root_name, graph_in) + + debug("root_name", root_name) + + if ( + find_vertex_by_name_or_none(graph)(root_name).index + in split_path_indices + ): + if DEBUG_PLOT: + layout = graph_in.layout('tree') + debug_plot(graph_in, f"{graph_name_prefix}input", layout=layout) + debug_plot( + graph_in, + f"{graph_name_prefix}result", + layout=layout, + vertex_color="green" + ) + + return {"main": graph_in} + + # Copy graph if coerce_to_singly_rooted_graph has not already created + # a copy, since we are going to mutate the graph and don"t want to + # mutate a function argument. + graph = graph if graph is not graph_in else graph.copy() + + if DEBUG_PLOT: + layout = graph.layout('tree') + debug_plot(graph, f"{graph_name_prefix}input", layout=layout) + + # Get incidences of all vertices which can be reached split_path_indices + # (including split_path_indices). This is a set of all split_paths and their + # dependencies. + split_off_vertex_indices = frozenset( + subcomponent_multi(graph, split_path_indices)) + debug("split_off_vertex_indices", split_off_vertex_indices) + + # Delete edges which point at any of the vertices in split_path_indices. + graph.delete_edges(_target_in=split_path_indices) + + if DEBUG_PLOT: + debug_plot(graph, f"{graph_name_prefix}deleted_edges", layout=layout) + + # Get incidences of all vertices which can be reached from the root. Since + # edges pointing at split_path_indices have been deleted, none of the + # split_path_indices will be included. Dependencies of rest_with_common will + # only be included if they can be reached from any vertex which is itself + # not in split_off_vertex_indices. + rest_with_common = frozenset(graph.subcomponent(root_name, mode="out")) + debug("rest_with_common", rest_with_common) + + # Get a set of all dependencies common to split_path_indicesĀ and the rest + # of the graph. + common = split_off_vertex_indices.intersection(rest_with_common) + debug("common", common) + + # Get a set of vertices which cannot be reached from split_path_indices. + rest_without_common = rest_with_common.difference(common) + debug("rest_without_common", rest_without_common) + + # Get a set of split_path_indices and their dependencies which cannot be + # reached from the rest of the graph. + split_off_without_common = split_off_vertex_indices.difference(common) + debug("split_off_without_common", split_off_without_common) + + if DEBUG_PLOT: + def choose_color(index): + if (index in split_off_without_common): + return "green" + elif (index in rest_without_common): + return "red" + else: + return "purple" + + vertex_color = [choose_color(v.index) for v in graph.vs] + + debug_plot( + graph, + f"{graph_name_prefix}result", + layout=layout, + vertex_color=vertex_color + ) + + # Return subgraphs based on calculated sets of vertices. + + result_keys = ["main", "common", "rest"] + result_values = [ + # Split paths and their deps (unreachable from rest of the graph). + graph.induced_subgraph(split_off_without_common), + # Dependencies of split paths which can be reached from the rest of the + # graph. + graph.induced_subgraph(common), + # Rest of the graph (without dependencies common with split paths). + graph.induced_subgraph(rest_without_common), + ] + + debug('result_values', result_values[0].vs["name"]) + + return tlz.valfilter( + tlz.complement(graph_is_empty), + dict(zip( + result_keys, + ( + result_values if root_name != fake_root_name + # If root was added, remove it + else tlz.map(remove_vertex(fake_root_name), result_values) + ) + )) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py new file mode 100644 index 000000000000..a3c129f7b382 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py @@ -0,0 +1,184 @@ +import unittest +from toolz import curry + +from . import test_helpers as th + +from .split_paths import ( + split_paths +) + +from .lib import ( + directed_graph, + pick_keys +) + + +if __name__ == "__main__": + unittest.main() + + +# Making sure vertex attrs are preserved. +vertex_props_dict = { + "Root1": {"a": 1, "b": 1}, + "B": {"b": 2}, + "X": {"x": 3} +} + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "D"), + ("D", "E"), + ("B", "D"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C") + ] + + detached_vertices = ["X"] + + vertex_props = vertex_props_dict.items() + + return directed_graph(edges, detached_vertices, vertex_props) + + +class CustomAssertions: + @curry + def assertResultKeys(self, keys, result): + self.assertListEqual( + list(result.keys()), + keys + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_paths(self): + input_graph = make_test_graph() + + result = self.assertResultKeys( + ["rest"], + split_paths([], input_graph) + ) + + self.assertGraphEqual( + result["rest"], + input_graph + ) + + def test_empty_graph(self): + empty_graph = directed_graph([]) + + def test_empty(paths): + result = self.assertResultKeys( + ["rest"], + split_paths(paths, empty_graph) + ) + + self.assertGraphEqual( + result["rest"], + empty_graph + ) + + test_empty([]) + test_empty(["B"]) + + def test_split_paths_single(self): + result = self.assertResultKeys( + ["main", "common", "rest"], + split_paths(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "F") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("Root3", "C") + ], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["common"], + directed_graph([("D", "E")]) + ) + + def test_split_paths_multi(self): + result = self.assertResultKeys( + ["main", "common", "rest"], + split_paths(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "F"), + ("Root3", "C") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root1", "A")], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["common"], + directed_graph([("D", "E")]) + ) + + def test_split_no_common(self): + result = self.assertResultKeys( + ["main", "rest"], + split_paths(["D"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph([("D", "E")]) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C"), + ], + ["X"], + pick_keys(["Root1", "B", "X"], vertex_props_dict).items() + ) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py new file mode 100644 index 000000000000..8c32127cb93d --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py @@ -0,0 +1,67 @@ +from toolz import curry +from toolz import curried as tlz +from operator import attrgetter + +from .lib import ( + debug, + debug_plot, + DEBUG_PLOT, + find_vertex_by_name_or_none, + is_None, + subcomponent_multi +) + + +call_counts = { + "in": 0, + "out": 0 +} + + +@curry +def subcomponent(mode, paths, graph): + if DEBUG_PLOT: + global call_counts + graph_name_prefix = f"subcomponent_{mode}_{call_counts[mode]}_" + call_counts[mode] += 1 + + layout = graph.layout('tree') + debug_plot(graph, f"{graph_name_prefix}input", layout=layout) + + path_indices = tlz.compose( + tlz.map(attrgetter('index')), + tlz.remove(is_None), + tlz.map(find_vertex_by_name_or_none(graph)) + )(paths) + + debug("path_indices", path_indices) + + main_indices = list(subcomponent_multi(graph, path_indices, mode)) + + debug('main_indices', main_indices) + + if DEBUG_PLOT: + def choose_color(index): + if (index in main_indices): + return "green" + else: + return "red" + + vertex_color = [choose_color(v.index) for v in graph.vs] + + debug_plot( + graph, + f"{graph_name_prefix}result", + layout=layout, + vertex_color=vertex_color + ) + + return { + "main": graph.induced_subgraph(main_indices), + "rest": graph - main_indices + } + + +subcomponent_in = subcomponent("in") + +subcomponent_out = subcomponent("out") diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py new file mode 100644 index 000000000000..1a6138af0ba1 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py @@ -0,0 +1,219 @@ +import unittest + +from . import test_helpers as th + +from .subcomponent import ( + subcomponent_out, + subcomponent_in +) + +from .lib import ( + pick_keys, + directed_graph, + empty_directed_graph +) + + +if __name__ == "__main__": + unittest.main() + + +# Making sure vertex attrs are preserved. +vertex_props_dict = { + "Root1": {"a": 1, "b": 1}, + "B": {"b": 2}, + "X": {"x": 3} +} + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "C"), + ("B", "D"), + ("B", "E"), + ("Root2", "B"), + ("Root3", "C"), + ] + + detached_vertices = ["X"] + + vertex_props = vertex_props_dict.items() + + return directed_graph(edges, detached_vertices, vertex_props) + + +class CustomAssertions: + def assertResultKeys(self, result): + self.assertListEqual( + list(result.keys()), + ["main", "rest"] + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_paths(self): + def test(func): + input_graph = make_test_graph() + + result = self.assertResultKeys( + func([], input_graph) + ) + + self.assertGraphEqual( + result["main"], + empty_directed_graph() + ) + + self.assertGraphEqual( + result["rest"], + input_graph + ) + + test(subcomponent_out) + test(subcomponent_in) + + def test_empty_graph(self): + def test(func): + empty_graph = empty_directed_graph() + + def test_empty(paths): + result = self.assertResultKeys( + func(paths, empty_graph) + ) + + self.assertGraphEqual( + result["main"], + empty_graph + ) + + self.assertGraphEqual( + result["rest"], + empty_graph + ) + + test_empty([]) + test_empty(["B"]) + + test(subcomponent_out) + test(subcomponent_in) + + def test_subcomponent_out(self): + result = self.assertResultKeys( + subcomponent_out(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "D"), + ("B", "E") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("A", "C"), + ("Root3", "C") + ], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_out_multi(self): + result = self.assertResultKeys( + subcomponent_out(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "D"), + ("B", "E"), + ("Root3", "C") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root1", "A")], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_in(self): + result = self.assertResultKeys( + subcomponent_in(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("Root2", "B") + ], + None, + pick_keys(["Root1", "B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root3", "C")], + ["D", "E", "X"], + pick_keys(["X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_in_multi(self): + result = self.assertResultKeys( + subcomponent_in(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("Root2", "B"), + ], + ["Root3"], + pick_keys(["Root1", "B"], vertex_props_dict).items() + + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [], + ["C", "D", "E", "X"], + pick_keys(["X"], vertex_props_dict).items() + ) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py new file mode 100644 index 000000000000..8bbe48a4c4e1 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py @@ -0,0 +1,37 @@ +from toolz import curried as tlz + +from .lib import ( + not_None, + graph_vertex_index_to_name +) + + +def edges_as_set(graph): + return frozenset( + ( + graph_vertex_index_to_name(graph, e.source), + graph_vertex_index_to_name(graph, e.target) + ) for e in graph.es + ) + + +class CustomAssertions: + def assertGraphEqual(self, g1, g2): + self.assertSetEqual( + frozenset(g1.vs["name"]), + frozenset(g2.vs["name"]) + ) + + self.assertSetEqual( + edges_as_set(g1), + edges_as_set(g2) + ) + + for name in g1.vs["name"]: + def get_vertex_attrs(g): + return tlz.valfilter(not_None, g.vs.find(name).attributes()) + + self.assertDictEqual( + get_vertex_attrs(g1), + get_vertex_attrs(g2), + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py b/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py new file mode 100644 index 000000000000..6e862d64c4f7 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py @@ -0,0 +1,17 @@ +from setuptools import setup + +setup( + name="flatten_references_graph", + version="0.1.0", + author="Adrian Gierakowski", + packages=["flatten_references_graph"], + install_requires=[ + "igraph", + "toolz" + ], + entry_points={ + "console_scripts": [ + "flatten_references_graph=flatten_references_graph.__main__:main" + ] + } +) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 38019396a035..28bd717a47fb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -816,6 +816,8 @@ with pkgs; referencesByPopularity = callPackage ../build-support/references-by-popularity { }; + dockerMakeLayers = callPackage ../build-support/docker/make-layers.nix { }; + removeReferencesTo = callPackage ../build-support/remove-references-to { inherit (darwin) signingUtils; };