···7979 else if final.isAarch64 then "arm64"8080 else if final.isx86_32 then "x86"8181 else if final.isx86_64 then "ia64"8282+ else if final.isMips then "mips"8283 else final.parsed.cpu.name;83848485 qemuArch =
···407407 "192.168.0.0/16"408408 "100.64.0.0/10"409409 "169.254.0.0/16"410410+ "::1/128"411411+ "fe80::/64"412412+ "fc00::/7"410413 ];411414 description = ''412415 List of IP address CIDR ranges that the URL preview spider is denied
-102
nixos/modules/services/networking/jormungandr.nix
···11-{ config, lib, pkgs, ... }:22-33-let44- cfg = config.services.jormungandr;55-66- inherit (lib) mkEnableOption mkIf mkOption;77- inherit (lib) optionalString types;88-99- dataDir = "/var/lib/jormungandr";1010-1111- # Default settings so far, as the service matures we will1212- # move these out as separate settings1313- configSettings = {1414- storage = dataDir;1515- p2p = {1616- public_address = "/ip4/127.0.0.1/tcp/8299";1717- topics_of_interest = {1818- messages = "high";1919- blocks = "high";2020- };2121- };2222- rest = {2323- listen = "127.0.0.1:8607";2424- };2525- };2626-2727- configFile = if cfg.configFile == null then2828- pkgs.writeText "jormungandr.yaml" (builtins.toJSON configSettings)2929- else cfg.configFile;3030-3131-in {3232-3333- options = {3434-3535- services.jormungandr = {3636- enable = mkEnableOption "jormungandr service";3737-3838- configFile = mkOption {3939- type = types.nullOr types.path;4040- default = null;4141- example = "/var/lib/jormungandr/node.yaml";4242- description = ''4343- The path of the jormungandr blockchain configuration file in YAML format.4444- If no file is specified, a file is generated using the other options.4545- '';4646- };4747-4848- secretFile = mkOption {4949- type = types.nullOr types.path;5050- default = null;5151- example = "/etc/secret/jormungandr.yaml";5252- description = ''5353- The path of the jormungandr blockchain secret node configuration file in5454- YAML format. Do not store this in nix store!5555- '';5656- };5757-5858- genesisBlockHash = mkOption {5959- type = types.nullOr types.str;6060- default = null;6161- example = "d70495af81ae8600aca3e642b2427327cb6001ec4d7a0037e96a00dabed163f9";6262- description = ''6363- Set the genesis block hash (the hash of the block0) so we can retrieve6464- the genesis block (and the blockchain configuration) from the existing6565- storage or from the network.6666- '';6767- };6868-6969- genesisBlockFile = mkOption {7070- type = types.nullOr types.path;7171- default = null;7272- example = "/var/lib/jormungandr/block-0.bin";7373- description = ''7474- The path of the genesis block file if we are hosting it locally.7575- '';7676- };7777-7878- };7979- };8080-8181- config = mkIf cfg.enable {8282-8383- systemd.services.jormungandr = {8484- description = "jormungandr server";8585- wantedBy = [ "multi-user.target" ];8686- after = [ "network-online.target" ];8787- environment = {8888- RUST_BACKTRACE = "full";8989- };9090- serviceConfig = {9191- DynamicUser = true;9292- StateDirectory = baseNameOf dataDir;9393- ExecStart = ''9494- ${pkgs.jormungandr}/bin/jormungandr --config ${configFile} \9595- ${optionalString (cfg.secretFile != null) " --secret ${cfg.secretFile}"} \9696- ${optionalString (cfg.genesisBlockHash != null) " --genesis-block-hash ${cfg.genesisBlockHash}"} \9797- ${optionalString (cfg.genesisBlockFile != null) " --genesis-block ${cfg.genesisBlockFile}"}9898- '';9999- };100100- };101101- };102102-}
···11-import ./make-test.nix ({ pkgs, ... }: {11+import ./make-test-python.nix ({ pkgs, ... }: {22 name = "boot-stage1";3344 machine = { config, pkgs, lib, ... }: {···150150 };151151152152 testScript = ''153153- $machine->waitForUnit("multi-user.target");154154- $machine->succeed('test -s /run/canary2.pid');155155- $machine->fail('pgrep -a canary1');156156- $machine->fail('kill -0 $(< /run/canary2.pid)');157157- $machine->succeed('pgrep -a -f \'^@canary3$\''');158158- $machine->succeed('pgrep -a -f \'^kcanary$\''');153153+ machine.wait_for_unit("multi-user.target")154154+ machine.succeed("test -s /run/canary2.pid")155155+ machine.fail("pgrep -a canary1")156156+ machine.fail("kill -0 $(< /run/canary2.pid)")157157+ machine.succeed('pgrep -a -f "^@canary3$"')158158+ machine.succeed('pgrep -a -f "^kcanary$"')159159 '';160160161161 meta.maintainers = with pkgs.stdenv.lib.maintainers; [ aszlig ];
+56-46
nixos/tests/borgbackup.nix
···11-import ./make-test.nix ({ pkgs, ... }:11+import ./make-test-python.nix ({ pkgs, ... }:2233let44 passphrase = "supersecret";···106106 };107107108108 testScript = ''109109- startAll;109109+ start_all()110110111111- $client->fail('test -d "${remoteRepo}"');111111+ client.fail('test -d "${remoteRepo}"')112112113113- $client->succeed("cp ${privateKey} /root/id_ed25519");114114- $client->succeed("chmod 0600 /root/id_ed25519");115115- $client->succeed("cp ${privateKeyAppendOnly} /root/id_ed25519.appendOnly");116116- $client->succeed("chmod 0600 /root/id_ed25519.appendOnly");113113+ client.succeed(114114+ "cp ${privateKey} /root/id_ed25519"115115+ )116116+ client.succeed("chmod 0600 /root/id_ed25519")117117+ client.succeed(118118+ "cp ${privateKeyAppendOnly} /root/id_ed25519.appendOnly"119119+ )120120+ client.succeed("chmod 0600 /root/id_ed25519.appendOnly")117121118118- $client->succeed("mkdir -p ${dataDir}");119119- $client->succeed("touch ${dataDir}/${excludeFile}");120120- $client->succeed("echo '${keepFileData}' > ${dataDir}/${keepFile}");122122+ client.succeed("mkdir -p ${dataDir}")123123+ client.succeed("touch ${dataDir}/${excludeFile}")124124+ client.succeed("echo '${keepFileData}' > ${dataDir}/${keepFile}")121125122122- subtest "local", sub {123123- my $borg = "BORG_PASSPHRASE='${passphrase}' borg";124124- $client->systemctl("start --wait borgbackup-job-local");125125- $client->fail("systemctl is-failed borgbackup-job-local");126126- # Make sure exactly one archive has been created127127- $client->succeed("c=\$($borg list '${localRepo}' | wc -l) && [[ \$c == '1' ]]");128128- # Make sure excludeFile has been excluded129129- $client->fail("$borg list '${localRepo}::${archiveName}' | grep -qF '${excludeFile}'");130130- # Make sure keepFile has the correct content131131- $client->succeed("$borg extract '${localRepo}::${archiveName}'");132132- $client->succeed('c=$(cat ${dataDir}/${keepFile}) && [[ "$c" == "${keepFileData}" ]]');133133- # Make sure the same is true when using `borg mount`134134- $client->succeed("mkdir -p /mnt/borg && $borg mount '${localRepo}::${archiveName}' /mnt/borg");135135- $client->succeed('c=$(cat /mnt/borg/${dataDir}/${keepFile}) && [[ "$c" == "${keepFileData}" ]]');136136- };126126+ with subtest("local"):127127+ borg = "BORG_PASSPHRASE='${passphrase}' borg"128128+ client.systemctl("start --wait borgbackup-job-local")129129+ client.fail("systemctl is-failed borgbackup-job-local")130130+ # Make sure exactly one archive has been created131131+ assert int(client.succeed("{} list '${localRepo}' | wc -l".format(borg))) > 0132132+ # Make sure excludeFile has been excluded133133+ client.fail(134134+ "{} list '${localRepo}::${archiveName}' | grep -qF '${excludeFile}'".format(borg)135135+ )136136+ # Make sure keepFile has the correct content137137+ client.succeed("{} extract '${localRepo}::${archiveName}'".format(borg))138138+ assert "${keepFileData}" in client.succeed("cat ${dataDir}/${keepFile}")139139+ # Make sure the same is true when using `borg mount`140140+ client.succeed(141141+ "mkdir -p /mnt/borg && {} mount '${localRepo}::${archiveName}' /mnt/borg".format(142142+ borg143143+ )144144+ )145145+ assert "${keepFileData}" in client.succeed(146146+ "cat /mnt/borg/${dataDir}/${keepFile}"147147+ )137148138138- subtest "remote", sub {139139- my $borg = "BORG_RSH='ssh -oStrictHostKeyChecking=no -i /root/id_ed25519' borg";140140- $server->waitForUnit("sshd.service");141141- $client->waitForUnit("network.target");142142- $client->systemctl("start --wait borgbackup-job-remote");143143- $client->fail("systemctl is-failed borgbackup-job-remote");149149+ with subtest("remote"):150150+ borg = "BORG_RSH='ssh -oStrictHostKeyChecking=no -i /root/id_ed25519' borg"151151+ server.wait_for_unit("sshd.service")152152+ client.wait_for_unit("network.target")153153+ client.systemctl("start --wait borgbackup-job-remote")154154+ client.fail("systemctl is-failed borgbackup-job-remote")144155145145- # Make sure we can't access repos other than the specified one146146- $client->fail("$borg list borg\@server:wrong");156156+ # Make sure we can't access repos other than the specified one157157+ client.fail("{} list borg\@server:wrong".format(borg))147158148148- #TODO: Make sure that data is actually deleted149149- };159159+ # TODO: Make sure that data is actually deleted150160151151- subtest "remoteAppendOnly", sub {152152- my $borg = "BORG_RSH='ssh -oStrictHostKeyChecking=no -i /root/id_ed25519.appendOnly' borg";153153- $server->waitForUnit("sshd.service");154154- $client->waitForUnit("network.target");155155- $client->systemctl("start --wait borgbackup-job-remoteAppendOnly");156156- $client->fail("systemctl is-failed borgbackup-job-remoteAppendOnly");161161+ with subtest("remoteAppendOnly"):162162+ borg = (163163+ "BORG_RSH='ssh -oStrictHostKeyChecking=no -i /root/id_ed25519.appendOnly' borg"164164+ )165165+ server.wait_for_unit("sshd.service")166166+ client.wait_for_unit("network.target")167167+ client.systemctl("start --wait borgbackup-job-remoteAppendOnly")168168+ client.fail("systemctl is-failed borgbackup-job-remoteAppendOnly")157169158158- # Make sure we can't access repos other than the specified one159159- $client->fail("$borg list borg\@server:wrong");170170+ # Make sure we can't access repos other than the specified one171171+ client.fail("{} list borg\@server:wrong".format(borg))160172161161- #TODO: Make sure that data is not actually deleted162162- };163163-173173+ # TODO: Make sure that data is not actually deleted164174 '';165175})
···11-import ./make-test.nix ({ pkgs, ... }: {22- name = "jormungandr";33- meta = with pkgs.stdenv.lib.maintainers; {44- maintainers = [ mmahut ];55- };66-77- nodes = {88- # Testing the Byzantine Fault Tolerant protocol99- bft = { ... }: {1010- environment.systemPackages = [ pkgs.jormungandr ];1111- services.jormungandr.enable = true;1212- services.jormungandr.genesisBlockFile = "/var/lib/jormungandr/block-0.bin";1313- services.jormungandr.secretFile = "/etc/secrets/jormungandr.yaml";1414- };1515-1616- # Testing the Ouroboros Genesis Praos protocol1717- genesis = { ... }: {1818- environment.systemPackages = [ pkgs.jormungandr ];1919- services.jormungandr.enable = true;2020- services.jormungandr.genesisBlockFile = "/var/lib/jormungandr/block-0.bin";2121- services.jormungandr.secretFile = "/etc/secrets/jormungandr.yaml";2222- };2323- };2424-2525- testScript = ''2626- startAll;2727-2828- ## Testing BFT2929- # Let's wait for the StateDirectory3030- $bft->waitForFile("/var/lib/jormungandr/");3131-3232- # First, we generate the genesis file for our new blockchain3333- $bft->succeed("jcli genesis init > /root/genesis.yaml");3434-3535- # We need to generate our secret key3636- $bft->succeed("jcli key generate --type=Ed25519 > /root/key.prv");3737-3838- # We include the secret key into our services.jormungandr.secretFile3939- $bft->succeed("mkdir -p /etc/secrets");4040- $bft->succeed("echo -e \"bft:\\n signing_key:\" \$(cat /root/key.prv) > /etc/secrets/jormungandr.yaml");4141-4242- # After that, we generate our public key from it4343- $bft->succeed("cat /root/key.prv | jcli key to-public > /root/key.pub");4444-4545- # We add our public key as a consensus leader in the genesis configration file4646- $bft->succeed("sed -ie \"s/ed25519_pk1vvwp2s0n5jl5f4xcjurp2e92sj2awehkrydrlas4vgqr7xzt33jsadha32/\$(cat /root/key.pub)/\" /root/genesis.yaml");4747-4848- # Now we can generate the genesis block from it4949- $bft->succeed("jcli genesis encode --input /root/genesis.yaml --output /var/lib/jormungandr/block-0.bin");5050-5151- # We should have everything to start the service now5252- $bft->succeed("systemctl restart jormungandr");5353- $bft->waitForUnit("jormungandr.service");5454-5555- # Now we can test if we are able to reach the REST API5656- $bft->waitUntilSucceeds("curl -L http://localhost:8607/api/v0/node/stats | grep uptime");5757-5858- ## Testing Genesis5959- # Let's wait for the StateDirectory6060- $genesis->waitForFile("/var/lib/jormungandr/");6161-6262- # Bootstraping the configuration6363- $genesis->succeed("jormungandr-bootstrap -g -p 8607 -s 1");6464-6565- # Moving generated files in place6666- $genesis->succeed("mkdir -p /etc/secrets");6767- $genesis->succeed("mv pool-secret1.yaml /etc/secrets/jormungandr.yaml");6868- $genesis->succeed("mv block-0.bin /var/lib/jormungandr/");6969-7070- # We should have everything to start the service now7171- $genesis->succeed("systemctl restart jormungandr");7272- $genesis->waitForUnit("jormungandr.service");7373-7474- # Now we can create and delegate an account7575- $genesis->succeed("./create-account-and-delegate.sh | tee -a /tmp/delegate.log");7676- '';7777-})
+29-27
nixos/tests/knot.nix
···11-import ./make-test.nix ({ pkgs, lib, ...} :11+import ./make-test-python.nix ({ pkgs, lib, ...} :22let33 common = {44 networking.firewall.enable = false;···3030 };3131in {3232 name = "knot";3333+ meta = with pkgs.stdenv.lib.maintainers; {3434+ maintainers = [ hexa ];3535+ };3636+33373438 nodes = {3539 master = { lib, ... }: {···165161 slave4 = (lib.head nodes.slave.config.networking.interfaces.eth1.ipv4.addresses).address;166162 slave6 = (lib.head nodes.slave.config.networking.interfaces.eth1.ipv6.addresses).address;167163 in ''168168- startAll;164164+ import re169165170170- $client->waitForUnit("network.target");171171- $master->waitForUnit("knot.service");172172- $slave->waitForUnit("knot.service");166166+ start_all()173167174174- sub assertResponse {175175- my ($knot, $query_type, $query, $expected) = @_;176176- my $out = $client->succeed("khost -t $query_type $query $knot");177177- $client->log("$knot replies with: $out");178178- chomp $out;179179- die "DNS query for $query ($query_type) against $knot gave '$out' instead of '$expected'"180180- if ($out !~ $expected);181181- }168168+ client.wait_for_unit("network.target")169169+ master.wait_for_unit("knot.service")170170+ slave.wait_for_unit("knot.service")182171183183- foreach ("${master4}", "${master6}", "${slave4}", "${slave6}") {184184- subtest $_, sub {185185- assertResponse($_, "SOA", "example.com", qr/start of authority.*?noc\.example\.com/);186186- assertResponse($_, "A", "example.com", qr/has no [^ ]+ record/);187187- assertResponse($_, "AAAA", "example.com", qr/has no [^ ]+ record/);188172189189- assertResponse($_, "A", "www.example.com", qr/address 192.0.2.1$/);190190- assertResponse($_, "AAAA", "www.example.com", qr/address 2001:db8::1$/);173173+ def test(host, query_type, query, pattern):174174+ out = client.succeed(f"khost -t {query_type} {query} {host}").strip()175175+ client.log(f"{host} replied with: {out}")176176+ assert re.search(pattern, out), f'Did not match "{pattern}"'191177192192- assertResponse($_, "NS", "sub.example.com", qr/nameserver is ns\d\.example\.com.$/);193193- assertResponse($_, "A", "sub.example.com", qr/address 192.0.2.2$/);194194- assertResponse($_, "AAAA", "sub.example.com", qr/address 2001:db8::2$/);195178196196- assertResponse($_, "RRSIG", "www.example.com", qr/RR set signature is/);197197- assertResponse($_, "DNSKEY", "example.com", qr/DNSSEC key is/);198198- };199199- }179179+ for host in ("${master4}", "${master6}", "${slave4}", "${slave6}"):180180+ with subtest(f"Interrogate {host}"):181181+ test(host, "SOA", "example.com", r"start of authority.*noc\.example\.com\.")182182+ test(host, "A", "example.com", r"has no [^ ]+ record")183183+ test(host, "AAAA", "example.com", r"has no [^ ]+ record")184184+185185+ test(host, "A", "www.example.com", r"address 192.0.2.1$")186186+ test(host, "AAAA", "www.example.com", r"address 2001:db8::1$")187187+188188+ test(host, "NS", "sub.example.com", r"nameserver is ns\d\.example\.com.$")189189+ test(host, "A", "sub.example.com", r"address 192.0.2.2$")190190+ test(host, "AAAA", "sub.example.com", r"address 2001:db8::2$")191191+192192+ test(host, "RRSIG", "www.example.com", r"RR set signature is")193193+ test(host, "DNSKEY", "example.com", r"DNSSEC key is")200194 '';201195})
···7788 # Please keep the version x.y.0.z and do not update to x.y.76.z because the99 # source of the latter disappears much faster.1010- version = "8.51.0.72";1010+ version = "8.54.0.85";11111212 rpath = stdenv.lib.makeLibraryPath [1313 alsaLib···6060 if stdenv.hostPlatform.system == "x86_64-linux" then6161 fetchurl {6262 url = "https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb";6363- sha256 = "1rv3jxirlfy0gvphw8cxmwmghbak5m5wj0y3bgamcvma48mzdfk3";6363+ sha256 = "09k260g9qy4n8vy6wr2jb5mm27cvqyapmv8vj4ff2j72f3ad31vm";6464 }6565 else6666 throw "Skype for linux is not supported on ${stdenv.hostPlatform.system}";
···11+diff --git a/src/sage/all.py b/src/sage/all.py22+index c87c9372e9..862fca4fcc 10064433+--- a/src/sage/all.py44++++ b/src/sage/all.py55+@@ -306,6 +306,7 @@ warnings.filters.remove(('ignore', None, DeprecationWarning, None, 0))66+ # Ignore all deprecations from IPython etc.77+ warnings.filterwarnings('ignore', category=DeprecationWarning,88+ module='.*(IPython|ipykernel|jupyter_client|jupyter_core|nbformat|notebook|ipywidgets|storemagic)')99++warnings.filterwarnings('ignore', category=DeprecationWarning, message=r".*The import 'werkzeug.ImmutableDict' is deprecated")1010+ # Ignore collections.abc warnings, there are a lot of them but they are1111+ # harmless.1212+ warnings.filterwarnings('ignore', category=DeprecationWarning,
···11+diff --git a/sagenb/__init__.py b/sagenb/__init__.py22+index 4db0d2cb..2fc5f01e 10064433+--- a/sagenb/__init__.py44++++ b/sagenb/__init__.py55+@@ -1,3 +1,8 @@66+ # -*- coding: utf-8 -*77+ # init88++import warnings99+ from . import storage1010++1111++# deprecation in attrs, needs to be fixed in twisted1212++warnings.filterwarnings('ignore', category=DeprecationWarning,1313++ message=r'The usage of `cmp` is deprecated and will be removed.*')
+19-6
pkgs/applications/science/math/sage/sage-env.nix
···1818, ecl1919, maxima-ecl2020, singular2121+, fflas-ffpack2222+, givaro2323+, gd2424+, libpng2525+, linbox2626+, m4ri2127, giac2228, palp2329, rWrapper···107101 name = "sage-env";108102 destination = "/${name}";109103 text = ''110110- export PKG_CONFIG_PATH='${lib.concatStringsSep ":" (map (pkg: "${pkg}/lib/pkgconfig") [111111- # This is only needed in the src/sage/misc/cython.py test and I'm not112112- # sure if there's really a usecase for it outside of the tests. However113113- # since singular and openblas are runtime dependencies anyways, it doesn't114114- # really hurt to include.104104+ export PKG_CONFIG_PATH='${lib.makeSearchPathOutput "dev" "lib/pkgconfig" [105105+ # This should only be needed during build. However, since the doctests106106+ # also test the cython build (for example in src/sage/misc/cython.py),107107+ # it is also needed for the testsuite to pass. We could fix the108108+ # testsuite instead, but since all the packages are also runtime109109+ # dependencies it doesn't really hurt to include them here.115110 singular116111 openblasCompat117117- ])112112+ fflas-ffpack givaro113113+ gd114114+ libpng zlib115115+ gsl116116+ linbox117117+ m4ri118118+ ]118119 }'119120 export SAGE_ROOT='${sagelib.src}'120121 export SAGE_LOCAL='@sage-local@'
+11
pkgs/applications/science/math/sage/sage-src.nix
···107107108108 # ignore a deprecation warning for usage of `cmp` in the attrs library in the doctests109109 ./patches/ignore-cmp-deprecation.patch110110+111111+ # Werkzeug has deprecated ImmutableDict, but it is still used in legacy112112+ # sagenb. That's no big issue since sagenb will be removed soon anyways.113113+ ./patches/ignore-werkzeug-immutable-dict-deprecation.patch114114+115115+ # threejs r109 (#28560)116116+ (fetchpatch {117117+ name = "threejs-r109.patch";118118+ url = "https://git.sagemath.org/sage.git/patch?id=fcc11d6effa39f375bc5f4ea5831fb7a2f2767da";119119+ sha256 = "0hnmc8ld3bblks0hcjvjjaydkgwdr1cs3dbl2ys4gfq964pjgqwc";120120+ })110121 ];111122112123 patches = nixPatches ++ bugfixPatches ++ packageUpgradePatches;
+5
pkgs/applications/science/math/sage/sagenb.nix
···2626 sha256 = "0bxvhr03qh2nsjdfc4pyfiqrn9jhp3vf7irsc9gqx0185jlblbxs";2727 };28282929+ patches = [3030+ # cmp deprecation in attrs needs to be handled in twisted3131+ ./patches/sagenb-cmp-deprecation.patch3232+ ];3333+2934 propagatedBuildInputs = [3035 twisted3136 flask
···1818 # The websites youtube-dl deals with are a very moving target. That means that1919 # downloads break constantly. Because of that, updates should always be backported2020 # to the latest stable release.2121- version = "2019.10.29";2121+ version = "2019.11.05";22222323 src = fetchurl {2424 url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";2525- sha256 = "1lq6ycjbx07831s24yx42q6m6svas4mf02vbszw0965dbbzs7vp4";2525+ sha256 = "129461i4103slqj3nq69djnlmgjj3lfgmazn41avc5g967w29b85";2626 };27272828 nativeBuildInputs = [ makeWrapper ];
+3-3
pkgs/tools/text/coloursum/default.nix
···2233rustPlatform.buildRustPackage rec {44 pname = "coloursum";55- version = "0.1.0";55+ version = "0.2.0";6677 src = fetchFromGitHub {88 owner = "ticky";99 repo = "coloursum";1010 rev = "v${version}";1111- sha256 = "18ikwi0ihn0vadazrkh85jfz8a2f0dkfb3zns5jzh7p7mb0ylrr2";1111+ sha256 = "1piz0l7qdcvjzfykm6rzqc8s1daxp3cj3923v9cmm41bc2v0p5q0";1212 };13131414- cargoSha256 = "0f73vqa82w4ccr0cc95mxga3r8jgd92jnksshxzaffbpx4s334p3";1414+ cargoSha256 = "091flc5ymx0y43ld6bdmig5cy479b90bkmwv3yaysi5kpr28skvh";15151616 meta = with stdenv.lib; {1717 description = "Colourise your checksum output";