[pve-devel] [PATCH proxmox-rrd-migration-tool v4 2/3] add first tests

Lukas Wagner l.wagner at proxmox.com
Mon Jul 28 16:52:16 CEST 2025


Nice, it's always great to see some tests.
Only tiny nits inline, so still:

Reviewed-by: Lukas Wagner <l.wagner at proxmox.com>

On Sat Jul 26, 2025 at 3:05 AM CEST, Aaron Lauterer wrote:
> they are not pretty, but we now can test the following:
>
> * resulting RRD file matches the expected rrdinfo output
>   By running the resulting binary within 'faketime'
>   -> had to filter out some lines that change with each iteration
> * .old files are ignored
> * processed files are renamed to have the .old appendix
> * that a follow up run won't find anything to migrate
> * that an RRD file for a VM that was created during the migration will
>   be migrated in a second run
>
> We also set RUST_TEST_THREADS to 1 in .cargo/config.toml as they
> currently all operate on the same tmp directory.
>
> Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
> ---
>  .cargo/config.toml                            |   3 +
>  .gitignore                                    |   1 +
>  Cargo.toml                                    |   2 +
>  tests/migration.rs                            | 185 +++++++
>  tests/resources/compare/pve-node-9.0_testnode | 501 ++++++++++++++++++
>  .../compare/pve-storage-9.0_testnode_iso      |  93 ++++
>  tests/resources/compare/pve-vm-9.0_100        | 453 ++++++++++++++++
>  tests/resources/compare/second_empty_run      |   8 +
>  .../resources/compare/second_run_with_missed  |   7 +
>  tests/resources/resourcelists/.members        |  10 +
>  tests/resources/resourcelists/.vmlist         |   7 +
>  .../resources/source/pve2-node/othernode.old  | Bin 0 -> 81008 bytes
>  tests/resources/source/pve2-node/testnode     | Bin 0 -> 81008 bytes
>  .../source/pve2-storage/testnode/foo.old      | Bin 0 -> 14688 bytes
>  .../source/pve2-storage/testnode/iso          | Bin 0 -> 14688 bytes
>  tests/resources/source/pve2-vm/100            | Bin 0 -> 67744 bytes
>  tests/resources/source/pve2-vm/400            | Bin 0 -> 67744 bytes
>  tests/resources/source/pve2-vm/500.old        | Bin 0 -> 67744 bytes
>  tests/utils.rs                                | 117 ++++
>  19 files changed, 1387 insertions(+)
>  create mode 100644 tests/migration.rs
>  create mode 100644 tests/resources/compare/pve-node-9.0_testnode
>  create mode 100644 tests/resources/compare/pve-storage-9.0_testnode_iso
>  create mode 100644 tests/resources/compare/pve-vm-9.0_100
>  create mode 100644 tests/resources/compare/second_empty_run
>  create mode 100644 tests/resources/compare/second_run_with_missed
>  create mode 100644 tests/resources/resourcelists/.members
>  create mode 100644 tests/resources/resourcelists/.vmlist
>  create mode 100644 tests/resources/source/pve2-node/othernode.old
>  create mode 100644 tests/resources/source/pve2-node/testnode
>  create mode 100644 tests/resources/source/pve2-storage/testnode/foo.old
>  create mode 100644 tests/resources/source/pve2-storage/testnode/iso
>  create mode 100644 tests/resources/source/pve2-vm/100
>  create mode 100644 tests/resources/source/pve2-vm/400
>  create mode 100644 tests/resources/source/pve2-vm/500.old
>  create mode 100644 tests/utils.rs
>
> diff --git a/.cargo/config.toml b/.cargo/config.toml
> index 3b5b6e4..cf8bc1e 100644
> --- a/.cargo/config.toml
> +++ b/.cargo/config.toml
> @@ -3,3 +3,6 @@
>  directory = "/usr/share/cargo/registry"
>  [source.crates-io]
>  replace-with = "debian-packages"
> +[env]
> +# as they currently use the same tmp_tests dir to perform the tests
> +RUST_TEST_THREADS = "1"
> diff --git a/.gitignore b/.gitignore
> index 06ac1a1..d8d3016 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -7,3 +7,4 @@
>  target/
>  /Cargo.lock
>  /proxmox-rrd-migration-tool-[0-9]*/
> +/tmp_tests
> diff --git a/Cargo.toml b/Cargo.toml
> index d3523f3..a24b79c 100644
> --- a/Cargo.toml
> +++ b/Cargo.toml
> @@ -18,3 +18,5 @@ crossbeam-channel = "0.5"
>  [build-dependencies]
>  bindgen = "0.66.1"
>  pkg-config = "0.3"
> +[dev-dependencies]
> +pretty_assertions = "1.4"
> diff --git a/tests/migration.rs b/tests/migration.rs
> new file mode 100644
> index 0000000..ea425d5
> --- /dev/null
> +++ b/tests/migration.rs
> @@ -0,0 +1,185 @@
> +use anyhow::Error;
> +use pretty_assertions::assert_eq;
> +use std::{
> +    fs,
> +    path::{Path, PathBuf},
> +    process::Command,
> +};
> +
> +mod utils;
> +
> +use utils::{TMPDIR, TMPDIR_RESOURCELISTS, TMPDIR_SOURCE_BASEDIR, TMPDIR_TARGET};
> +
> +const TARGET_SUBDIR_NODE: &str = "pve-node-9.0";
> +const TARGET_SUBDIR_GUEST: &str = "pve-vm-9.0";
> +const TARGET_SUBDIR_STORAGE: &str = "pve-storage-9.0";
> +
> +#[test]
> +fn migration() {
> +    utils::test_prepare();
> +
> +    let target_dir_guests: PathBuf = [TMPDIR_TARGET, TARGET_SUBDIR_GUEST].iter().collect();
> +    let target_dir_nodes: PathBuf = [TMPDIR_TARGET, TARGET_SUBDIR_NODE].iter().collect();
> +    let target_dir_storage: PathBuf = [TMPDIR_TARGET, TARGET_SUBDIR_STORAGE].iter().collect();

Same thing here as mentioned in the first patch.

> +
> +    // first test, compare resulting rrd files
> +    Command::new("faketime")
> +        .arg("2025-08-01 00:00:00")
> +        .arg(utils::migration_tool_path())
> +        .arg("--migrate")
> +        .arg("--source")
> +        .arg(TMPDIR_SOURCE_BASEDIR)
> +        .arg("--target")
> +        .arg(TMPDIR_TARGET)
> +        .arg("--resources")
> +        .arg(TMPDIR_RESOURCELISTS)
> +        .output()
> +        .expect("failed to execute proxmox-rrd-migration-tool");
> +
> +    // assert target files as we expect them
> +    assert!(Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_NODE}/testnode").as_str()).exists());
> +    assert!(Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_GUEST}/100").as_str()).exists());
> +    assert!(!Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_GUEST}/400").as_str()).exists());
> +    assert!(!Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_GUEST}/400.old").as_str()).exists());
> +    assert!(!Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_GUEST}/500.old").as_str()).exists());
> +    assert!(
> +        Path::new(format!("{TMPDIR_TARGET}/{TARGET_SUBDIR_STORAGE}/testnode/iso").as_str())
> +            .exists()
> +    );
> +    assert!(Path::new(format!("{TMPDIR_SOURCE_BASEDIR}/pve2-vm/100.old").as_str()).exists());
> +    assert!(Path::new(format!("{TMPDIR_SOURCE_BASEDIR}/pve2-vm/400.old").as_str()).exists());

You can use & instead of .as_str here, makes it a  bit shorter and
easier to read :)

> +
> +    // compare
> +    utils::compare_results("node", &target_dir_nodes, &TARGET_SUBDIR_NODE);
> +
> +    utils::compare_results("guest", &target_dir_guests, &TARGET_SUBDIR_GUEST);
> +
> +    // storage has another layer of directories per node over which we need to iterate
> +    fs::read_dir(&target_dir_storage)
> +        .expect("could not read target storage dir")
> +        .filter(|f| f.is_ok())
> +        .map(|f| f.unwrap().path())
> +        .filter(|f| f.is_dir())

you can use filter_map here

> +        .try_for_each(|node| {
> +            let mut source_storage_subdir = target_dir_storage.clone();
> +            source_storage_subdir.push(node.file_name().unwrap());
> +
> +            let mut target_storage_subdir = target_dir_storage.clone();
> +            target_storage_subdir.push(node.file_name().unwrap());
> +
> +            utils::compare_results(
> +                "storage",
> +                &source_storage_subdir,
> +                format!(
> +                    "{TARGET_SUBDIR_STORAGE}_{}",
> +                    node.file_name().unwrap().to_string_lossy()
> +                )
> +                .as_str(),
> +            );
> +            Ok::<(), Error>(())
> +        })
> +        .expect("Error running storage test");
> +}
> +#[test]
> +fn migration_second_empty_run() {
> +    utils::test_prepare();
> +
> +    // run initial migration
> +    Command::new("faketime")
> +        .arg("2025-08-01 00:00:00")
> +        .arg(utils::migration_tool_path())
> +        .arg("--migrate")
> +        .arg("--source")
> +        .arg(TMPDIR_SOURCE_BASEDIR)
> +        .arg("--target")
> +        .arg(TMPDIR_TARGET)
> +        .arg("--resources")
> +        .arg(TMPDIR_RESOURCELISTS)
> +        .output()
> +        .expect("failed to execute proxmox-rrd-migration-tool");
> +
> +    // check if output skips all currently existing files
> +    let output = Command::new("faketime")
> +        .arg("2025-08-01 00:00:00")
> +        .arg(utils::migration_tool_path())
> +        .arg("--threads")
> +        .arg("2")
> +        .arg("--migrate")
> +        .arg("--source")
> +        .arg(TMPDIR_SOURCE_BASEDIR)
> +        .arg("--target")
> +        .arg(TMPDIR_TARGET)
> +        .arg("--resources")
> +        .arg(TMPDIR_RESOURCELISTS)
> +        .output()
> +        .expect("failed to execute proxmox-rrd-migration-tool");
> +    let expected_path: PathBuf = [TMPDIR, "resources", "compare", "second_empty_run"]
> +        .iter()
> +        .collect();
> +
> +    let expected =
> +        fs::read_to_string(expected_path).expect("could not read compare file for skip all");
> +
> +    assert_eq!(
> +        expected,
> +        String::from_utf8(output.stdout).expect("could not parse output")
> +    );
> +}
> +
> +#[test]
> +fn migration_second_run_with_missed_files() {
> +    utils::test_prepare();
> +
> +    // run initial migration
> +    Command::new("faketime")
> +        .arg("2025-08-01 00:00:00")
> +        .arg(utils::migration_tool_path())
> +        .arg("--migrate")
> +        .arg("--source")
> +        .arg(TMPDIR_SOURCE_BASEDIR)
> +        .arg("--target")
> +        .arg(TMPDIR_TARGET)
> +        .arg("--resources")
> +        .arg(TMPDIR_RESOURCELISTS)
> +        .output()
> +        .expect("failed to execute proxmox-rrd-migration-tool");
> +
> +    let src_vm = format!("{TMPDIR_SOURCE_BASEDIR}/pve2-vm/100.old");
> +    let target_vm = format!("{TMPDIR_SOURCE_BASEDIR}/pve2-vm/101");
> +
> +    Command::new("cp")
> +        .args([src_vm, target_vm])
> +        .output()
> +        .expect("copy 101 rrd file");
> +
> +    // check if output skips all currently existing files
> +    let output = Command::new("faketime")
> +        .arg("2025-08-01 00:00:00")
> +        .arg(utils::migration_tool_path())
> +        .arg("--threads")
> +        .arg("2")
> +        .arg("--migrate")
> +        .arg("--source")
> +        .arg(TMPDIR_SOURCE_BASEDIR)
> +        .arg("--target")
> +        .arg(TMPDIR_TARGET)
> +        .arg("--resources")
> +        .arg(TMPDIR_RESOURCELISTS)
> +        .output()
> +        .expect("failed to execute proxmox-rrd-migration-tool");
> +
> +    let expected_path: PathBuf = [TMPDIR, "resources", "compare", "second_run_with_missed"]
> +        .iter()
> +        .collect();
> +
> +    let expected = fs::read_to_string(expected_path.as_path())
> +        .expect("could not read compare file for skip all");
> +
> +    // drop last line from output as it contains timing information which can change between tests
> +    let output = utils::drop_last_line(output.stdout);
> +
> +    println!("OUTPUT:\n{}", output);
> +    println!("EXPECTED:\n{}", expected);
> +
> +    assert_eq!(expected, output);
> +}
> diff --git a/tests/resources/compare/pve-node-9.0_testnode b/tests/resources/compare/pve-node-9.0_testnode
> new file mode 100644
> index 0000000..ebd09a4
> --- /dev/null
> +++ b/tests/resources/compare/pve-node-9.0_testnode
> @@ -0,0 +1,501 @@
> +filename = "tmp_tests/target/pve-node-9.0/testnode"
> +rrd_version = "0003"
> +step = 60
> +last_update = 1753999190
> +header_size = 17736
> +ds[loadavg].index = 0
> +ds[loadavg].type = "GAUGE"
> +ds[loadavg].minimal_heartbeat = 120
> +ds[loadavg].min = 0.0000000000e+00
> +ds[loadavg].max = NaN
> +ds[loadavg].last_ds = "U"
> +ds[loadavg].value = NaN
> +ds[loadavg].unknown_sec = 50
> +ds[maxcpu].index = 1
> +ds[maxcpu].type = "GAUGE"
> +ds[maxcpu].minimal_heartbeat = 120
> +ds[maxcpu].min = 0.0000000000e+00
> +ds[maxcpu].max = NaN
> +ds[maxcpu].last_ds = "U"
> +ds[maxcpu].value = NaN
> +ds[maxcpu].unknown_sec = 50
> +ds[cpu].index = 2
> +ds[cpu].type = "GAUGE"
> +ds[cpu].minimal_heartbeat = 120
> +ds[cpu].min = 0.0000000000e+00
> +ds[cpu].max = NaN
> +ds[cpu].last_ds = "U"
> +ds[cpu].value = NaN
> +ds[cpu].unknown_sec = 50
> +ds[iowait].index = 3
> +ds[iowait].type = "GAUGE"
> +ds[iowait].minimal_heartbeat = 120
> +ds[iowait].min = 0.0000000000e+00
> +ds[iowait].max = NaN
> +ds[iowait].last_ds = "U"
> +ds[iowait].value = NaN
> +ds[iowait].unknown_sec = 50
> +ds[memtotal].index = 4
> +ds[memtotal].type = "GAUGE"
> +ds[memtotal].minimal_heartbeat = 120
> +ds[memtotal].min = 0.0000000000e+00
> +ds[memtotal].max = NaN
> +ds[memtotal].last_ds = "U"
> +ds[memtotal].value = NaN
> +ds[memtotal].unknown_sec = 50
> +ds[memused].index = 5
> +ds[memused].type = "GAUGE"
> +ds[memused].minimal_heartbeat = 120
> +ds[memused].min = 0.0000000000e+00
> +ds[memused].max = NaN
> +ds[memused].last_ds = "U"
> +ds[memused].value = NaN
> +ds[memused].unknown_sec = 50
> +ds[swaptotal].index = 6
> +ds[swaptotal].type = "GAUGE"
> +ds[swaptotal].minimal_heartbeat = 120
> +ds[swaptotal].min = 0.0000000000e+00
> +ds[swaptotal].max = NaN
> +ds[swaptotal].last_ds = "U"
> +ds[swaptotal].value = NaN
> +ds[swaptotal].unknown_sec = 50
> +ds[swapused].index = 7
> +ds[swapused].type = "GAUGE"
> +ds[swapused].minimal_heartbeat = 120
> +ds[swapused].min = 0.0000000000e+00
> +ds[swapused].max = NaN
> +ds[swapused].last_ds = "U"
> +ds[swapused].value = NaN
> +ds[swapused].unknown_sec = 50
> +ds[roottotal].index = 8
> +ds[roottotal].type = "GAUGE"
> +ds[roottotal].minimal_heartbeat = 120
> +ds[roottotal].min = 0.0000000000e+00
> +ds[roottotal].max = NaN
> +ds[roottotal].last_ds = "U"
> +ds[roottotal].value = NaN
> +ds[roottotal].unknown_sec = 50
> +ds[rootused].index = 9
> +ds[rootused].type = "GAUGE"
> +ds[rootused].minimal_heartbeat = 120
> +ds[rootused].min = 0.0000000000e+00
> +ds[rootused].max = NaN
> +ds[rootused].last_ds = "U"
> +ds[rootused].value = NaN
> +ds[rootused].unknown_sec = 50
> +ds[netin].index = 10
> +ds[netin].type = "DERIVE"
> +ds[netin].minimal_heartbeat = 120
> +ds[netin].min = 0.0000000000e+00
> +ds[netin].max = NaN
> +ds[netin].last_ds = "U"
> +ds[netin].value = NaN
> +ds[netin].unknown_sec = 50
> +ds[netout].index = 11
> +ds[netout].type = "DERIVE"
> +ds[netout].minimal_heartbeat = 120
> +ds[netout].min = 0.0000000000e+00
> +ds[netout].max = NaN
> +ds[netout].last_ds = "U"
> +ds[netout].value = NaN
> +ds[netout].unknown_sec = 50
> +ds[memfree].index = 12
> +ds[memfree].type = "GAUGE"
> +ds[memfree].minimal_heartbeat = 120
> +ds[memfree].min = 0.0000000000e+00
> +ds[memfree].max = NaN
> +ds[memfree].last_ds = "U"
> +ds[memfree].value = NaN
> +ds[memfree].unknown_sec = 50
> +ds[arcsize].index = 13
> +ds[arcsize].type = "GAUGE"
> +ds[arcsize].minimal_heartbeat = 120
> +ds[arcsize].min = 0.0000000000e+00
> +ds[arcsize].max = NaN
> +ds[arcsize].last_ds = "U"
> +ds[arcsize].value = NaN
> +ds[arcsize].unknown_sec = 50
> +ds[pressurecpusome].index = 14
> +ds[pressurecpusome].type = "GAUGE"
> +ds[pressurecpusome].minimal_heartbeat = 120
> +ds[pressurecpusome].min = 0.0000000000e+00
> +ds[pressurecpusome].max = NaN
> +ds[pressurecpusome].last_ds = "U"
> +ds[pressurecpusome].value = NaN
> +ds[pressurecpusome].unknown_sec = 50
> +ds[pressureiosome].index = 15
> +ds[pressureiosome].type = "GAUGE"
> +ds[pressureiosome].minimal_heartbeat = 120
> +ds[pressureiosome].min = 0.0000000000e+00
> +ds[pressureiosome].max = NaN
> +ds[pressureiosome].last_ds = "U"
> +ds[pressureiosome].value = NaN
> +ds[pressureiosome].unknown_sec = 50
> +ds[pressureiofull].index = 16
> +ds[pressureiofull].type = "GAUGE"
> +ds[pressureiofull].minimal_heartbeat = 120
> +ds[pressureiofull].min = 0.0000000000e+00
> +ds[pressureiofull].max = NaN
> +ds[pressureiofull].last_ds = "U"
> +ds[pressureiofull].value = NaN
> +ds[pressureiofull].unknown_sec = 50
> +ds[pressurememorysome].index = 17
> +ds[pressurememorysome].type = "GAUGE"
> +ds[pressurememorysome].minimal_heartbeat = 120
> +ds[pressurememorysome].min = 0.0000000000e+00
> +ds[pressurememorysome].max = NaN
> +ds[pressurememorysome].last_ds = "U"
> +ds[pressurememorysome].value = NaN
> +ds[pressurememorysome].unknown_sec = 50
> +ds[pressurememoryfull].index = 18
> +ds[pressurememoryfull].type = "GAUGE"
> +ds[pressurememoryfull].minimal_heartbeat = 120
> +ds[pressurememoryfull].min = 0.0000000000e+00
> +ds[pressurememoryfull].max = NaN
> +ds[pressurememoryfull].last_ds = "U"
> +ds[pressurememoryfull].value = NaN
> +ds[pressurememoryfull].unknown_sec = 50
> +rra[0].cf = "AVERAGE"
> +rra[0].rows = 1440
> +rra[0].cur_row = 1184
> +rra[0].pdp_per_row = 1
> +rra[0].xff = 5.0000000000e-01
> +rra[0].cdp_prep[0].value = NaN
> +rra[0].cdp_prep[0].unknown_datapoints = 0
> +rra[0].cdp_prep[1].value = NaN
> +rra[0].cdp_prep[1].unknown_datapoints = 0
> +rra[0].cdp_prep[2].value = NaN
> +rra[0].cdp_prep[2].unknown_datapoints = 0
> +rra[0].cdp_prep[3].value = NaN
> +rra[0].cdp_prep[3].unknown_datapoints = 0
> +rra[0].cdp_prep[4].value = NaN
> +rra[0].cdp_prep[4].unknown_datapoints = 0
> +rra[0].cdp_prep[5].value = NaN
> +rra[0].cdp_prep[5].unknown_datapoints = 0
> +rra[0].cdp_prep[6].value = NaN
> +rra[0].cdp_prep[6].unknown_datapoints = 0
> +rra[0].cdp_prep[7].value = NaN
> +rra[0].cdp_prep[7].unknown_datapoints = 0
> +rra[0].cdp_prep[8].value = NaN
> +rra[0].cdp_prep[8].unknown_datapoints = 0
> +rra[0].cdp_prep[9].value = NaN
> +rra[0].cdp_prep[9].unknown_datapoints = 0
> +rra[0].cdp_prep[10].value = NaN
> +rra[0].cdp_prep[10].unknown_datapoints = 0
> +rra[0].cdp_prep[11].value = NaN
> +rra[0].cdp_prep[11].unknown_datapoints = 0
> +rra[0].cdp_prep[12].value = NaN
> +rra[0].cdp_prep[12].unknown_datapoints = 0
> +rra[0].cdp_prep[13].value = NaN
> +rra[0].cdp_prep[13].unknown_datapoints = 0
> +rra[0].cdp_prep[14].value = NaN
> +rra[0].cdp_prep[14].unknown_datapoints = 0
> +rra[0].cdp_prep[15].value = NaN
> +rra[0].cdp_prep[15].unknown_datapoints = 0
> +rra[0].cdp_prep[16].value = NaN
> +rra[0].cdp_prep[16].unknown_datapoints = 0
> +rra[0].cdp_prep[17].value = NaN
> +rra[0].cdp_prep[17].unknown_datapoints = 0
> +rra[0].cdp_prep[18].value = NaN
> +rra[0].cdp_prep[18].unknown_datapoints = 0
> +rra[1].cf = "AVERAGE"
> +rra[1].rows = 1440
> +rra[1].cur_row = 1388
> +rra[1].pdp_per_row = 30
> +rra[1].xff = 5.0000000000e-01
> +rra[1].cdp_prep[0].value = 0.0000000000e+00
> +rra[1].cdp_prep[0].unknown_datapoints = 29
> +rra[1].cdp_prep[1].value = 0.0000000000e+00
> +rra[1].cdp_prep[1].unknown_datapoints = 29
> +rra[1].cdp_prep[2].value = 0.0000000000e+00
> +rra[1].cdp_prep[2].unknown_datapoints = 29
> +rra[1].cdp_prep[3].value = 0.0000000000e+00
> +rra[1].cdp_prep[3].unknown_datapoints = 29
> +rra[1].cdp_prep[4].value = 0.0000000000e+00
> +rra[1].cdp_prep[4].unknown_datapoints = 29
> +rra[1].cdp_prep[5].value = 0.0000000000e+00
> +rra[1].cdp_prep[5].unknown_datapoints = 29
> +rra[1].cdp_prep[6].value = 0.0000000000e+00
> +rra[1].cdp_prep[6].unknown_datapoints = 29
> +rra[1].cdp_prep[7].value = 0.0000000000e+00
> +rra[1].cdp_prep[7].unknown_datapoints = 29
> +rra[1].cdp_prep[8].value = 0.0000000000e+00
> +rra[1].cdp_prep[8].unknown_datapoints = 29
> +rra[1].cdp_prep[9].value = 0.0000000000e+00
> +rra[1].cdp_prep[9].unknown_datapoints = 29
> +rra[1].cdp_prep[10].value = 0.0000000000e+00
> +rra[1].cdp_prep[10].unknown_datapoints = 29
> +rra[1].cdp_prep[11].value = 0.0000000000e+00
> +rra[1].cdp_prep[11].unknown_datapoints = 29
> +rra[1].cdp_prep[12].value = 0.0000000000e+00
> +rra[1].cdp_prep[12].unknown_datapoints = 29
> +rra[1].cdp_prep[13].value = 0.0000000000e+00
> +rra[1].cdp_prep[13].unknown_datapoints = 29
> +rra[1].cdp_prep[14].value = 0.0000000000e+00
> +rra[1].cdp_prep[14].unknown_datapoints = 29
> +rra[1].cdp_prep[15].value = 0.0000000000e+00
> +rra[1].cdp_prep[15].unknown_datapoints = 29
> +rra[1].cdp_prep[16].value = 0.0000000000e+00
> +rra[1].cdp_prep[16].unknown_datapoints = 29
> +rra[1].cdp_prep[17].value = 0.0000000000e+00
> +rra[1].cdp_prep[17].unknown_datapoints = 29
> +rra[1].cdp_prep[18].value = 0.0000000000e+00
> +rra[1].cdp_prep[18].unknown_datapoints = 29
> +rra[2].cf = "AVERAGE"
> +rra[2].rows = 1440
> +rra[2].cur_row = 130
> +rra[2].pdp_per_row = 360
> +rra[2].xff = 5.0000000000e-01
> +rra[2].cdp_prep[0].value = 0.0000000000e+00
> +rra[2].cdp_prep[0].unknown_datapoints = 239
> +rra[2].cdp_prep[1].value = 0.0000000000e+00
> +rra[2].cdp_prep[1].unknown_datapoints = 239
> +rra[2].cdp_prep[2].value = 0.0000000000e+00
> +rra[2].cdp_prep[2].unknown_datapoints = 239
> +rra[2].cdp_prep[3].value = 0.0000000000e+00
> +rra[2].cdp_prep[3].unknown_datapoints = 239
> +rra[2].cdp_prep[4].value = 0.0000000000e+00
> +rra[2].cdp_prep[4].unknown_datapoints = 239
> +rra[2].cdp_prep[5].value = 0.0000000000e+00
> +rra[2].cdp_prep[5].unknown_datapoints = 239
> +rra[2].cdp_prep[6].value = 0.0000000000e+00
> +rra[2].cdp_prep[6].unknown_datapoints = 239
> +rra[2].cdp_prep[7].value = 0.0000000000e+00
> +rra[2].cdp_prep[7].unknown_datapoints = 239
> +rra[2].cdp_prep[8].value = 0.0000000000e+00
> +rra[2].cdp_prep[8].unknown_datapoints = 239
> +rra[2].cdp_prep[9].value = 0.0000000000e+00
> +rra[2].cdp_prep[9].unknown_datapoints = 239
> +rra[2].cdp_prep[10].value = 0.0000000000e+00
> +rra[2].cdp_prep[10].unknown_datapoints = 239
> +rra[2].cdp_prep[11].value = 0.0000000000e+00
> +rra[2].cdp_prep[11].unknown_datapoints = 239
> +rra[2].cdp_prep[12].value = 0.0000000000e+00
> +rra[2].cdp_prep[12].unknown_datapoints = 239
> +rra[2].cdp_prep[13].value = 0.0000000000e+00
> +rra[2].cdp_prep[13].unknown_datapoints = 239
> +rra[2].cdp_prep[14].value = 0.0000000000e+00
> +rra[2].cdp_prep[14].unknown_datapoints = 239
> +rra[2].cdp_prep[15].value = 0.0000000000e+00
> +rra[2].cdp_prep[15].unknown_datapoints = 239
> +rra[2].cdp_prep[16].value = 0.0000000000e+00
> +rra[2].cdp_prep[16].unknown_datapoints = 239
> +rra[2].cdp_prep[17].value = 0.0000000000e+00
> +rra[2].cdp_prep[17].unknown_datapoints = 239
> +rra[2].cdp_prep[18].value = 0.0000000000e+00
> +rra[2].cdp_prep[18].unknown_datapoints = 239
> +rra[3].cf = "AVERAGE"
> +rra[3].rows = 570
> +rra[3].cur_row = 264
> +rra[3].pdp_per_row = 10080
> +rra[3].xff = 5.0000000000e-01
> +rra[3].cdp_prep[0].value = 0.0000000000e+00
> +rra[3].cdp_prep[0].unknown_datapoints = 1319
> +rra[3].cdp_prep[1].value = 0.0000000000e+00
> +rra[3].cdp_prep[1].unknown_datapoints = 1319
> +rra[3].cdp_prep[2].value = 0.0000000000e+00
> +rra[3].cdp_prep[2].unknown_datapoints = 1319
> +rra[3].cdp_prep[3].value = 0.0000000000e+00
> +rra[3].cdp_prep[3].unknown_datapoints = 1319
> +rra[3].cdp_prep[4].value = 0.0000000000e+00
> +rra[3].cdp_prep[4].unknown_datapoints = 1319
> +rra[3].cdp_prep[5].value = 0.0000000000e+00
> +rra[3].cdp_prep[5].unknown_datapoints = 1319
> +rra[3].cdp_prep[6].value = 0.0000000000e+00
> +rra[3].cdp_prep[6].unknown_datapoints = 1319
> +rra[3].cdp_prep[7].value = 0.0000000000e+00
> +rra[3].cdp_prep[7].unknown_datapoints = 1319
> +rra[3].cdp_prep[8].value = 0.0000000000e+00
> +rra[3].cdp_prep[8].unknown_datapoints = 1319
> +rra[3].cdp_prep[9].value = 0.0000000000e+00
> +rra[3].cdp_prep[9].unknown_datapoints = 1319
> +rra[3].cdp_prep[10].value = 0.0000000000e+00
> +rra[3].cdp_prep[10].unknown_datapoints = 1319
> +rra[3].cdp_prep[11].value = 0.0000000000e+00
> +rra[3].cdp_prep[11].unknown_datapoints = 1319
> +rra[3].cdp_prep[12].value = 0.0000000000e+00
> +rra[3].cdp_prep[12].unknown_datapoints = 1319
> +rra[3].cdp_prep[13].value = 0.0000000000e+00
> +rra[3].cdp_prep[13].unknown_datapoints = 1319
> +rra[3].cdp_prep[14].value = 0.0000000000e+00
> +rra[3].cdp_prep[14].unknown_datapoints = 1319
> +rra[3].cdp_prep[15].value = 0.0000000000e+00
> +rra[3].cdp_prep[15].unknown_datapoints = 1319
> +rra[3].cdp_prep[16].value = 0.0000000000e+00
> +rra[3].cdp_prep[16].unknown_datapoints = 1319
> +rra[3].cdp_prep[17].value = 0.0000000000e+00
> +rra[3].cdp_prep[17].unknown_datapoints = 1319
> +rra[3].cdp_prep[18].value = 0.0000000000e+00
> +rra[3].cdp_prep[18].unknown_datapoints = 1319
> +rra[4].cf = "MAX"
> +rra[4].rows = 1440
> +rra[4].cur_row = 747
> +rra[4].pdp_per_row = 1
> +rra[4].xff = 5.0000000000e-01
> +rra[4].cdp_prep[0].value = NaN
> +rra[4].cdp_prep[0].unknown_datapoints = 0
> +rra[4].cdp_prep[1].value = NaN
> +rra[4].cdp_prep[1].unknown_datapoints = 0
> +rra[4].cdp_prep[2].value = NaN
> +rra[4].cdp_prep[2].unknown_datapoints = 0
> +rra[4].cdp_prep[3].value = NaN
> +rra[4].cdp_prep[3].unknown_datapoints = 0
> +rra[4].cdp_prep[4].value = NaN
> +rra[4].cdp_prep[4].unknown_datapoints = 0
> +rra[4].cdp_prep[5].value = NaN
> +rra[4].cdp_prep[5].unknown_datapoints = 0
> +rra[4].cdp_prep[6].value = NaN
> +rra[4].cdp_prep[6].unknown_datapoints = 0
> +rra[4].cdp_prep[7].value = NaN
> +rra[4].cdp_prep[7].unknown_datapoints = 0
> +rra[4].cdp_prep[8].value = NaN
> +rra[4].cdp_prep[8].unknown_datapoints = 0
> +rra[4].cdp_prep[9].value = NaN
> +rra[4].cdp_prep[9].unknown_datapoints = 0
> +rra[4].cdp_prep[10].value = NaN
> +rra[4].cdp_prep[10].unknown_datapoints = 0
> +rra[4].cdp_prep[11].value = NaN
> +rra[4].cdp_prep[11].unknown_datapoints = 0
> +rra[4].cdp_prep[12].value = NaN
> +rra[4].cdp_prep[12].unknown_datapoints = 0
> +rra[4].cdp_prep[13].value = NaN
> +rra[4].cdp_prep[13].unknown_datapoints = 0
> +rra[4].cdp_prep[14].value = NaN
> +rra[4].cdp_prep[14].unknown_datapoints = 0
> +rra[4].cdp_prep[15].value = NaN
> +rra[4].cdp_prep[15].unknown_datapoints = 0
> +rra[4].cdp_prep[16].value = NaN
> +rra[4].cdp_prep[16].unknown_datapoints = 0
> +rra[4].cdp_prep[17].value = NaN
> +rra[4].cdp_prep[17].unknown_datapoints = 0
> +rra[4].cdp_prep[18].value = NaN
> +rra[4].cdp_prep[18].unknown_datapoints = 0
> +rra[5].cf = "MAX"
> +rra[5].rows = 1440
> +rra[5].cur_row = 574
> +rra[5].pdp_per_row = 30
> +rra[5].xff = 5.0000000000e-01
> +rra[5].cdp_prep[0].value = -inf
> +rra[5].cdp_prep[0].unknown_datapoints = 29
> +rra[5].cdp_prep[1].value = -inf
> +rra[5].cdp_prep[1].unknown_datapoints = 29
> +rra[5].cdp_prep[2].value = -inf
> +rra[5].cdp_prep[2].unknown_datapoints = 29
> +rra[5].cdp_prep[3].value = -inf
> +rra[5].cdp_prep[3].unknown_datapoints = 29
> +rra[5].cdp_prep[4].value = -inf
> +rra[5].cdp_prep[4].unknown_datapoints = 29
> +rra[5].cdp_prep[5].value = -inf
> +rra[5].cdp_prep[5].unknown_datapoints = 29
> +rra[5].cdp_prep[6].value = -inf
> +rra[5].cdp_prep[6].unknown_datapoints = 29
> +rra[5].cdp_prep[7].value = -inf
> +rra[5].cdp_prep[7].unknown_datapoints = 29
> +rra[5].cdp_prep[8].value = -inf
> +rra[5].cdp_prep[8].unknown_datapoints = 29
> +rra[5].cdp_prep[9].value = -inf
> +rra[5].cdp_prep[9].unknown_datapoints = 29
> +rra[5].cdp_prep[10].value = -inf
> +rra[5].cdp_prep[10].unknown_datapoints = 29
> +rra[5].cdp_prep[11].value = -inf
> +rra[5].cdp_prep[11].unknown_datapoints = 29
> +rra[5].cdp_prep[12].value = -inf
> +rra[5].cdp_prep[12].unknown_datapoints = 29
> +rra[5].cdp_prep[13].value = -inf
> +rra[5].cdp_prep[13].unknown_datapoints = 29
> +rra[5].cdp_prep[14].value = -inf
> +rra[5].cdp_prep[14].unknown_datapoints = 29
> +rra[5].cdp_prep[15].value = -inf
> +rra[5].cdp_prep[15].unknown_datapoints = 29
> +rra[5].cdp_prep[16].value = -inf
> +rra[5].cdp_prep[16].unknown_datapoints = 29
> +rra[5].cdp_prep[17].value = -inf
> +rra[5].cdp_prep[17].unknown_datapoints = 29
> +rra[5].cdp_prep[18].value = -inf
> +rra[5].cdp_prep[18].unknown_datapoints = 29
> +rra[6].cf = "MAX"
> +rra[6].rows = 1440
> +rra[6].cur_row = 432
> +rra[6].pdp_per_row = 360
> +rra[6].xff = 5.0000000000e-01
> +rra[6].cdp_prep[0].value = -inf
> +rra[6].cdp_prep[0].unknown_datapoints = 239
> +rra[6].cdp_prep[1].value = -inf
> +rra[6].cdp_prep[1].unknown_datapoints = 239
> +rra[6].cdp_prep[2].value = -inf
> +rra[6].cdp_prep[2].unknown_datapoints = 239
> +rra[6].cdp_prep[3].value = -inf
> +rra[6].cdp_prep[3].unknown_datapoints = 239
> +rra[6].cdp_prep[4].value = -inf
> +rra[6].cdp_prep[4].unknown_datapoints = 239
> +rra[6].cdp_prep[5].value = -inf
> +rra[6].cdp_prep[5].unknown_datapoints = 239
> +rra[6].cdp_prep[6].value = -inf
> +rra[6].cdp_prep[6].unknown_datapoints = 239
> +rra[6].cdp_prep[7].value = -inf
> +rra[6].cdp_prep[7].unknown_datapoints = 239
> +rra[6].cdp_prep[8].value = -inf
> +rra[6].cdp_prep[8].unknown_datapoints = 239
> +rra[6].cdp_prep[9].value = -inf
> +rra[6].cdp_prep[9].unknown_datapoints = 239
> +rra[6].cdp_prep[10].value = -inf
> +rra[6].cdp_prep[10].unknown_datapoints = 239
> +rra[6].cdp_prep[11].value = -inf
> +rra[6].cdp_prep[11].unknown_datapoints = 239
> +rra[6].cdp_prep[12].value = -inf
> +rra[6].cdp_prep[12].unknown_datapoints = 239
> +rra[6].cdp_prep[13].value = -inf
> +rra[6].cdp_prep[13].unknown_datapoints = 239
> +rra[6].cdp_prep[14].value = -inf
> +rra[6].cdp_prep[14].unknown_datapoints = 239
> +rra[6].cdp_prep[15].value = -inf
> +rra[6].cdp_prep[15].unknown_datapoints = 239
> +rra[6].cdp_prep[16].value = -inf
> +rra[6].cdp_prep[16].unknown_datapoints = 239
> +rra[6].cdp_prep[17].value = -inf
> +rra[6].cdp_prep[17].unknown_datapoints = 239
> +rra[6].cdp_prep[18].value = -inf
> +rra[6].cdp_prep[18].unknown_datapoints = 239
> +rra[7].cf = "MAX"
> +rra[7].rows = 570
> +rra[7].cur_row = 400
> +rra[7].pdp_per_row = 10080
> +rra[7].xff = 5.0000000000e-01
> +rra[7].cdp_prep[0].value = -inf
> +rra[7].cdp_prep[0].unknown_datapoints = 1319
> +rra[7].cdp_prep[1].value = -inf
> +rra[7].cdp_prep[1].unknown_datapoints = 1319
> +rra[7].cdp_prep[2].value = -inf
> +rra[7].cdp_prep[2].unknown_datapoints = 1319
> +rra[7].cdp_prep[3].value = -inf
> +rra[7].cdp_prep[3].unknown_datapoints = 1319
> +rra[7].cdp_prep[4].value = -inf
> +rra[7].cdp_prep[4].unknown_datapoints = 1319
> +rra[7].cdp_prep[5].value = -inf
> +rra[7].cdp_prep[5].unknown_datapoints = 1319
> +rra[7].cdp_prep[6].value = -inf
> +rra[7].cdp_prep[6].unknown_datapoints = 1319
> +rra[7].cdp_prep[7].value = -inf
> +rra[7].cdp_prep[7].unknown_datapoints = 1319
> +rra[7].cdp_prep[8].value = -inf
> +rra[7].cdp_prep[8].unknown_datapoints = 1319
> +rra[7].cdp_prep[9].value = -inf
> +rra[7].cdp_prep[9].unknown_datapoints = 1319
> +rra[7].cdp_prep[10].value = -inf
> +rra[7].cdp_prep[10].unknown_datapoints = 1319
> +rra[7].cdp_prep[11].value = -inf
> +rra[7].cdp_prep[11].unknown_datapoints = 1319
> +rra[7].cdp_prep[12].value = -inf
> +rra[7].cdp_prep[12].unknown_datapoints = 1319
> +rra[7].cdp_prep[13].value = -inf
> +rra[7].cdp_prep[13].unknown_datapoints = 1319
> +rra[7].cdp_prep[14].value = -inf
> +rra[7].cdp_prep[14].unknown_datapoints = 1319
> +rra[7].cdp_prep[15].value = -inf
> +rra[7].cdp_prep[15].unknown_datapoints = 1319
> +rra[7].cdp_prep[16].value = -inf
> +rra[7].cdp_prep[16].unknown_datapoints = 1319
> +rra[7].cdp_prep[17].value = -inf
> +rra[7].cdp_prep[17].unknown_datapoints = 1319
> +rra[7].cdp_prep[18].value = -inf
> +rra[7].cdp_prep[18].unknown_datapoints = 1319
> diff --git a/tests/resources/compare/pve-storage-9.0_testnode_iso b/tests/resources/compare/pve-storage-9.0_testnode_iso
> new file mode 100644
> index 0000000..31d9bd8
> --- /dev/null
> +++ b/tests/resources/compare/pve-storage-9.0_testnode_iso
> @@ -0,0 +1,93 @@
> +filename = "tmp_tests/target/pve-storage-9.0/testnode/iso"
> +rrd_version = "0003"
> +step = 60
> +last_update = 1753999190
> +header_size = 2912
> +ds[total].index = 0
> +ds[total].type = "GAUGE"
> +ds[total].minimal_heartbeat = 120
> +ds[total].min = 0.0000000000e+00
> +ds[total].max = NaN
> +ds[total].last_ds = "U"
> +ds[total].value = NaN
> +ds[total].unknown_sec = 50
> +ds[used].index = 1
> +ds[used].type = "GAUGE"
> +ds[used].minimal_heartbeat = 120
> +ds[used].min = 0.0000000000e+00
> +ds[used].max = NaN
> +ds[used].last_ds = "U"
> +ds[used].value = NaN
> +ds[used].unknown_sec = 50
> +rra[0].cf = "AVERAGE"
> +rra[0].rows = 1440
> +rra[0].cur_row = 304
> +rra[0].pdp_per_row = 1
> +rra[0].xff = 5.0000000000e-01
> +rra[0].cdp_prep[0].value = NaN
> +rra[0].cdp_prep[0].unknown_datapoints = 0
> +rra[0].cdp_prep[1].value = NaN
> +rra[0].cdp_prep[1].unknown_datapoints = 0
> +rra[1].cf = "AVERAGE"
> +rra[1].rows = 1440
> +rra[1].cur_row = 1136
> +rra[1].pdp_per_row = 30
> +rra[1].xff = 5.0000000000e-01
> +rra[1].cdp_prep[0].value = 0.0000000000e+00
> +rra[1].cdp_prep[0].unknown_datapoints = 29
> +rra[1].cdp_prep[1].value = 0.0000000000e+00
> +rra[1].cdp_prep[1].unknown_datapoints = 29
> +rra[2].cf = "AVERAGE"
> +rra[2].rows = 1440
> +rra[2].cur_row = 438
> +rra[2].pdp_per_row = 360
> +rra[2].xff = 5.0000000000e-01
> +rra[2].cdp_prep[0].value = 0.0000000000e+00
> +rra[2].cdp_prep[0].unknown_datapoints = 239
> +rra[2].cdp_prep[1].value = 0.0000000000e+00
> +rra[2].cdp_prep[1].unknown_datapoints = 239
> +rra[3].cf = "AVERAGE"
> +rra[3].rows = 570
> +rra[3].cur_row = 430
> +rra[3].pdp_per_row = 10080
> +rra[3].xff = 5.0000000000e-01
> +rra[3].cdp_prep[0].value = 0.0000000000e+00
> +rra[3].cdp_prep[0].unknown_datapoints = 1319
> +rra[3].cdp_prep[1].value = 0.0000000000e+00
> +rra[3].cdp_prep[1].unknown_datapoints = 1319
> +rra[4].cf = "MAX"
> +rra[4].rows = 1440
> +rra[4].cur_row = 945
> +rra[4].pdp_per_row = 1
> +rra[4].xff = 5.0000000000e-01
> +rra[4].cdp_prep[0].value = NaN
> +rra[4].cdp_prep[0].unknown_datapoints = 0
> +rra[4].cdp_prep[1].value = NaN
> +rra[4].cdp_prep[1].unknown_datapoints = 0
> +rra[5].cf = "MAX"
> +rra[5].rows = 1440
> +rra[5].cur_row = 356
> +rra[5].pdp_per_row = 30
> +rra[5].xff = 5.0000000000e-01
> +rra[5].cdp_prep[0].value = -inf
> +rra[5].cdp_prep[0].unknown_datapoints = 29
> +rra[5].cdp_prep[1].value = -inf
> +rra[5].cdp_prep[1].unknown_datapoints = 29
> +rra[6].cf = "MAX"
> +rra[6].rows = 1440
> +rra[6].cur_row = 1349
> +rra[6].pdp_per_row = 360
> +rra[6].xff = 5.0000000000e-01
> +rra[6].cdp_prep[0].value = -inf
> +rra[6].cdp_prep[0].unknown_datapoints = 239
> +rra[6].cdp_prep[1].value = -inf
> +rra[6].cdp_prep[1].unknown_datapoints = 239
> +rra[7].cf = "MAX"
> +rra[7].rows = 570
> +rra[7].cur_row = 421
> +rra[7].pdp_per_row = 10080
> +rra[7].xff = 5.0000000000e-01
> +rra[7].cdp_prep[0].value = -inf
> +rra[7].cdp_prep[0].unknown_datapoints = 1319
> +rra[7].cdp_prep[1].value = -inf
> +rra[7].cdp_prep[1].unknown_datapoints = 1319
> diff --git a/tests/resources/compare/pve-vm-9.0_100 b/tests/resources/compare/pve-vm-9.0_100
> new file mode 100644
> index 0000000..9658dc4
> --- /dev/null
> +++ b/tests/resources/compare/pve-vm-9.0_100
> @@ -0,0 +1,453 @@
> +filename = "tmp_tests/target/pve-vm-9.0/100"
> +rrd_version = "0003"
> +step = 60
> +last_update = 1753999190
> +header_size = 15992
> +ds[maxcpu].index = 0
> +ds[maxcpu].type = "GAUGE"
> +ds[maxcpu].minimal_heartbeat = 120
> +ds[maxcpu].min = 0.0000000000e+00
> +ds[maxcpu].max = NaN
> +ds[maxcpu].last_ds = "U"
> +ds[maxcpu].value = NaN
> +ds[maxcpu].unknown_sec = 50
> +ds[cpu].index = 1
> +ds[cpu].type = "GAUGE"
> +ds[cpu].minimal_heartbeat = 120
> +ds[cpu].min = 0.0000000000e+00
> +ds[cpu].max = NaN
> +ds[cpu].last_ds = "U"
> +ds[cpu].value = NaN
> +ds[cpu].unknown_sec = 50
> +ds[maxmem].index = 2
> +ds[maxmem].type = "GAUGE"
> +ds[maxmem].minimal_heartbeat = 120
> +ds[maxmem].min = 0.0000000000e+00
> +ds[maxmem].max = NaN
> +ds[maxmem].last_ds = "U"
> +ds[maxmem].value = NaN
> +ds[maxmem].unknown_sec = 50
> +ds[mem].index = 3
> +ds[mem].type = "GAUGE"
> +ds[mem].minimal_heartbeat = 120
> +ds[mem].min = 0.0000000000e+00
> +ds[mem].max = NaN
> +ds[mem].last_ds = "U"
> +ds[mem].value = NaN
> +ds[mem].unknown_sec = 50
> +ds[maxdisk].index = 4
> +ds[maxdisk].type = "GAUGE"
> +ds[maxdisk].minimal_heartbeat = 120
> +ds[maxdisk].min = 0.0000000000e+00
> +ds[maxdisk].max = NaN
> +ds[maxdisk].last_ds = "U"
> +ds[maxdisk].value = NaN
> +ds[maxdisk].unknown_sec = 50
> +ds[disk].index = 5
> +ds[disk].type = "GAUGE"
> +ds[disk].minimal_heartbeat = 120
> +ds[disk].min = 0.0000000000e+00
> +ds[disk].max = NaN
> +ds[disk].last_ds = "U"
> +ds[disk].value = NaN
> +ds[disk].unknown_sec = 50
> +ds[netin].index = 6
> +ds[netin].type = "DERIVE"
> +ds[netin].minimal_heartbeat = 120
> +ds[netin].min = 0.0000000000e+00
> +ds[netin].max = NaN
> +ds[netin].last_ds = "U"
> +ds[netin].value = NaN
> +ds[netin].unknown_sec = 50
> +ds[netout].index = 7
> +ds[netout].type = "DERIVE"
> +ds[netout].minimal_heartbeat = 120
> +ds[netout].min = 0.0000000000e+00
> +ds[netout].max = NaN
> +ds[netout].last_ds = "U"
> +ds[netout].value = NaN
> +ds[netout].unknown_sec = 50
> +ds[diskread].index = 8
> +ds[diskread].type = "DERIVE"
> +ds[diskread].minimal_heartbeat = 120
> +ds[diskread].min = 0.0000000000e+00
> +ds[diskread].max = NaN
> +ds[diskread].last_ds = "U"
> +ds[diskread].value = NaN
> +ds[diskread].unknown_sec = 50
> +ds[diskwrite].index = 9
> +ds[diskwrite].type = "DERIVE"
> +ds[diskwrite].minimal_heartbeat = 120
> +ds[diskwrite].min = 0.0000000000e+00
> +ds[diskwrite].max = NaN
> +ds[diskwrite].last_ds = "U"
> +ds[diskwrite].value = NaN
> +ds[diskwrite].unknown_sec = 50
> +ds[memhost].index = 10
> +ds[memhost].type = "GAUGE"
> +ds[memhost].minimal_heartbeat = 120
> +ds[memhost].min = 0.0000000000e+00
> +ds[memhost].max = NaN
> +ds[memhost].last_ds = "U"
> +ds[memhost].value = NaN
> +ds[memhost].unknown_sec = 50
> +ds[pressurecpusome].index = 11
> +ds[pressurecpusome].type = "GAUGE"
> +ds[pressurecpusome].minimal_heartbeat = 120
> +ds[pressurecpusome].min = 0.0000000000e+00
> +ds[pressurecpusome].max = NaN
> +ds[pressurecpusome].last_ds = "U"
> +ds[pressurecpusome].value = NaN
> +ds[pressurecpusome].unknown_sec = 50
> +ds[pressurecpufull].index = 12
> +ds[pressurecpufull].type = "GAUGE"
> +ds[pressurecpufull].minimal_heartbeat = 120
> +ds[pressurecpufull].min = 0.0000000000e+00
> +ds[pressurecpufull].max = NaN
> +ds[pressurecpufull].last_ds = "U"
> +ds[pressurecpufull].value = NaN
> +ds[pressurecpufull].unknown_sec = 50
> +ds[pressureiosome].index = 13
> +ds[pressureiosome].type = "GAUGE"
> +ds[pressureiosome].minimal_heartbeat = 120
> +ds[pressureiosome].min = 0.0000000000e+00
> +ds[pressureiosome].max = NaN
> +ds[pressureiosome].last_ds = "U"
> +ds[pressureiosome].value = NaN
> +ds[pressureiosome].unknown_sec = 50
> +ds[pressureiofull].index = 14
> +ds[pressureiofull].type = "GAUGE"
> +ds[pressureiofull].minimal_heartbeat = 120
> +ds[pressureiofull].min = 0.0000000000e+00
> +ds[pressureiofull].max = NaN
> +ds[pressureiofull].last_ds = "U"
> +ds[pressureiofull].value = NaN
> +ds[pressureiofull].unknown_sec = 50
> +ds[pressurememorysome].index = 15
> +ds[pressurememorysome].type = "GAUGE"
> +ds[pressurememorysome].minimal_heartbeat = 120
> +ds[pressurememorysome].min = 0.0000000000e+00
> +ds[pressurememorysome].max = NaN
> +ds[pressurememorysome].last_ds = "U"
> +ds[pressurememorysome].value = NaN
> +ds[pressurememorysome].unknown_sec = 50
> +ds[pressurememoryfull].index = 16
> +ds[pressurememoryfull].type = "GAUGE"
> +ds[pressurememoryfull].minimal_heartbeat = 120
> +ds[pressurememoryfull].min = 0.0000000000e+00
> +ds[pressurememoryfull].max = NaN
> +ds[pressurememoryfull].last_ds = "U"
> +ds[pressurememoryfull].value = NaN
> +ds[pressurememoryfull].unknown_sec = 50
> +rra[0].cf = "AVERAGE"
> +rra[0].rows = 1440
> +rra[0].cur_row = 1099
> +rra[0].pdp_per_row = 1
> +rra[0].xff = 5.0000000000e-01
> +rra[0].cdp_prep[0].value = NaN
> +rra[0].cdp_prep[0].unknown_datapoints = 0
> +rra[0].cdp_prep[1].value = NaN
> +rra[0].cdp_prep[1].unknown_datapoints = 0
> +rra[0].cdp_prep[2].value = NaN
> +rra[0].cdp_prep[2].unknown_datapoints = 0
> +rra[0].cdp_prep[3].value = NaN
> +rra[0].cdp_prep[3].unknown_datapoints = 0
> +rra[0].cdp_prep[4].value = NaN
> +rra[0].cdp_prep[4].unknown_datapoints = 0
> +rra[0].cdp_prep[5].value = NaN
> +rra[0].cdp_prep[5].unknown_datapoints = 0
> +rra[0].cdp_prep[6].value = NaN
> +rra[0].cdp_prep[6].unknown_datapoints = 0
> +rra[0].cdp_prep[7].value = NaN
> +rra[0].cdp_prep[7].unknown_datapoints = 0
> +rra[0].cdp_prep[8].value = NaN
> +rra[0].cdp_prep[8].unknown_datapoints = 0
> +rra[0].cdp_prep[9].value = NaN
> +rra[0].cdp_prep[9].unknown_datapoints = 0
> +rra[0].cdp_prep[10].value = NaN
> +rra[0].cdp_prep[10].unknown_datapoints = 0
> +rra[0].cdp_prep[11].value = NaN
> +rra[0].cdp_prep[11].unknown_datapoints = 0
> +rra[0].cdp_prep[12].value = NaN
> +rra[0].cdp_prep[12].unknown_datapoints = 0
> +rra[0].cdp_prep[13].value = NaN
> +rra[0].cdp_prep[13].unknown_datapoints = 0
> +rra[0].cdp_prep[14].value = NaN
> +rra[0].cdp_prep[14].unknown_datapoints = 0
> +rra[0].cdp_prep[15].value = NaN
> +rra[0].cdp_prep[15].unknown_datapoints = 0
> +rra[0].cdp_prep[16].value = NaN
> +rra[0].cdp_prep[16].unknown_datapoints = 0
> +rra[1].cf = "AVERAGE"
> +rra[1].rows = 1440
> +rra[1].cur_row = 551
> +rra[1].pdp_per_row = 30
> +rra[1].xff = 5.0000000000e-01
> +rra[1].cdp_prep[0].value = 0.0000000000e+00
> +rra[1].cdp_prep[0].unknown_datapoints = 29
> +rra[1].cdp_prep[1].value = 0.0000000000e+00
> +rra[1].cdp_prep[1].unknown_datapoints = 29
> +rra[1].cdp_prep[2].value = 0.0000000000e+00
> +rra[1].cdp_prep[2].unknown_datapoints = 29
> +rra[1].cdp_prep[3].value = 0.0000000000e+00
> +rra[1].cdp_prep[3].unknown_datapoints = 29
> +rra[1].cdp_prep[4].value = 0.0000000000e+00
> +rra[1].cdp_prep[4].unknown_datapoints = 29
> +rra[1].cdp_prep[5].value = 0.0000000000e+00
> +rra[1].cdp_prep[5].unknown_datapoints = 29
> +rra[1].cdp_prep[6].value = 0.0000000000e+00
> +rra[1].cdp_prep[6].unknown_datapoints = 29
> +rra[1].cdp_prep[7].value = 0.0000000000e+00
> +rra[1].cdp_prep[7].unknown_datapoints = 29
> +rra[1].cdp_prep[8].value = 0.0000000000e+00
> +rra[1].cdp_prep[8].unknown_datapoints = 29
> +rra[1].cdp_prep[9].value = 0.0000000000e+00
> +rra[1].cdp_prep[9].unknown_datapoints = 29
> +rra[1].cdp_prep[10].value = 0.0000000000e+00
> +rra[1].cdp_prep[10].unknown_datapoints = 29
> +rra[1].cdp_prep[11].value = 0.0000000000e+00
> +rra[1].cdp_prep[11].unknown_datapoints = 29
> +rra[1].cdp_prep[12].value = 0.0000000000e+00
> +rra[1].cdp_prep[12].unknown_datapoints = 29
> +rra[1].cdp_prep[13].value = 0.0000000000e+00
> +rra[1].cdp_prep[13].unknown_datapoints = 29
> +rra[1].cdp_prep[14].value = 0.0000000000e+00
> +rra[1].cdp_prep[14].unknown_datapoints = 29
> +rra[1].cdp_prep[15].value = 0.0000000000e+00
> +rra[1].cdp_prep[15].unknown_datapoints = 29
> +rra[1].cdp_prep[16].value = 0.0000000000e+00
> +rra[1].cdp_prep[16].unknown_datapoints = 29
> +rra[2].cf = "AVERAGE"
> +rra[2].rows = 1440
> +rra[2].cur_row = 1387
> +rra[2].pdp_per_row = 360
> +rra[2].xff = 5.0000000000e-01
> +rra[2].cdp_prep[0].value = 0.0000000000e+00
> +rra[2].cdp_prep[0].unknown_datapoints = 239
> +rra[2].cdp_prep[1].value = 0.0000000000e+00
> +rra[2].cdp_prep[1].unknown_datapoints = 239
> +rra[2].cdp_prep[2].value = 0.0000000000e+00
> +rra[2].cdp_prep[2].unknown_datapoints = 239
> +rra[2].cdp_prep[3].value = 0.0000000000e+00
> +rra[2].cdp_prep[3].unknown_datapoints = 239
> +rra[2].cdp_prep[4].value = 0.0000000000e+00
> +rra[2].cdp_prep[4].unknown_datapoints = 239
> +rra[2].cdp_prep[5].value = 0.0000000000e+00
> +rra[2].cdp_prep[5].unknown_datapoints = 239
> +rra[2].cdp_prep[6].value = 0.0000000000e+00
> +rra[2].cdp_prep[6].unknown_datapoints = 239
> +rra[2].cdp_prep[7].value = 0.0000000000e+00
> +rra[2].cdp_prep[7].unknown_datapoints = 239
> +rra[2].cdp_prep[8].value = 0.0000000000e+00
> +rra[2].cdp_prep[8].unknown_datapoints = 239
> +rra[2].cdp_prep[9].value = 0.0000000000e+00
> +rra[2].cdp_prep[9].unknown_datapoints = 239
> +rra[2].cdp_prep[10].value = 0.0000000000e+00
> +rra[2].cdp_prep[10].unknown_datapoints = 239
> +rra[2].cdp_prep[11].value = 0.0000000000e+00
> +rra[2].cdp_prep[11].unknown_datapoints = 239
> +rra[2].cdp_prep[12].value = 0.0000000000e+00
> +rra[2].cdp_prep[12].unknown_datapoints = 239
> +rra[2].cdp_prep[13].value = 0.0000000000e+00
> +rra[2].cdp_prep[13].unknown_datapoints = 239
> +rra[2].cdp_prep[14].value = 0.0000000000e+00
> +rra[2].cdp_prep[14].unknown_datapoints = 239
> +rra[2].cdp_prep[15].value = 0.0000000000e+00
> +rra[2].cdp_prep[15].unknown_datapoints = 239
> +rra[2].cdp_prep[16].value = 0.0000000000e+00
> +rra[2].cdp_prep[16].unknown_datapoints = 239
> +rra[3].cf = "AVERAGE"
> +rra[3].rows = 570
> +rra[3].cur_row = 100
> +rra[3].pdp_per_row = 10080
> +rra[3].xff = 5.0000000000e-01
> +rra[3].cdp_prep[0].value = 0.0000000000e+00
> +rra[3].cdp_prep[0].unknown_datapoints = 1319
> +rra[3].cdp_prep[1].value = 0.0000000000e+00
> +rra[3].cdp_prep[1].unknown_datapoints = 1319
> +rra[3].cdp_prep[2].value = 0.0000000000e+00
> +rra[3].cdp_prep[2].unknown_datapoints = 1319
> +rra[3].cdp_prep[3].value = 0.0000000000e+00
> +rra[3].cdp_prep[3].unknown_datapoints = 1319
> +rra[3].cdp_prep[4].value = 0.0000000000e+00
> +rra[3].cdp_prep[4].unknown_datapoints = 1319
> +rra[3].cdp_prep[5].value = 0.0000000000e+00
> +rra[3].cdp_prep[5].unknown_datapoints = 1319
> +rra[3].cdp_prep[6].value = 0.0000000000e+00
> +rra[3].cdp_prep[6].unknown_datapoints = 1319
> +rra[3].cdp_prep[7].value = 0.0000000000e+00
> +rra[3].cdp_prep[7].unknown_datapoints = 1319
> +rra[3].cdp_prep[8].value = 0.0000000000e+00
> +rra[3].cdp_prep[8].unknown_datapoints = 1319
> +rra[3].cdp_prep[9].value = 0.0000000000e+00
> +rra[3].cdp_prep[9].unknown_datapoints = 1319
> +rra[3].cdp_prep[10].value = 0.0000000000e+00
> +rra[3].cdp_prep[10].unknown_datapoints = 1319
> +rra[3].cdp_prep[11].value = 0.0000000000e+00
> +rra[3].cdp_prep[11].unknown_datapoints = 1319
> +rra[3].cdp_prep[12].value = 0.0000000000e+00
> +rra[3].cdp_prep[12].unknown_datapoints = 1319
> +rra[3].cdp_prep[13].value = 0.0000000000e+00
> +rra[3].cdp_prep[13].unknown_datapoints = 1319
> +rra[3].cdp_prep[14].value = 0.0000000000e+00
> +rra[3].cdp_prep[14].unknown_datapoints = 1319
> +rra[3].cdp_prep[15].value = 0.0000000000e+00
> +rra[3].cdp_prep[15].unknown_datapoints = 1319
> +rra[3].cdp_prep[16].value = 0.0000000000e+00
> +rra[3].cdp_prep[16].unknown_datapoints = 1319
> +rra[4].cf = "MAX"
> +rra[4].rows = 1440
> +rra[4].cur_row = 216
> +rra[4].pdp_per_row = 1
> +rra[4].xff = 5.0000000000e-01
> +rra[4].cdp_prep[0].value = NaN
> +rra[4].cdp_prep[0].unknown_datapoints = 0
> +rra[4].cdp_prep[1].value = NaN
> +rra[4].cdp_prep[1].unknown_datapoints = 0
> +rra[4].cdp_prep[2].value = NaN
> +rra[4].cdp_prep[2].unknown_datapoints = 0
> +rra[4].cdp_prep[3].value = NaN
> +rra[4].cdp_prep[3].unknown_datapoints = 0
> +rra[4].cdp_prep[4].value = NaN
> +rra[4].cdp_prep[4].unknown_datapoints = 0
> +rra[4].cdp_prep[5].value = NaN
> +rra[4].cdp_prep[5].unknown_datapoints = 0
> +rra[4].cdp_prep[6].value = NaN
> +rra[4].cdp_prep[6].unknown_datapoints = 0
> +rra[4].cdp_prep[7].value = NaN
> +rra[4].cdp_prep[7].unknown_datapoints = 0
> +rra[4].cdp_prep[8].value = NaN
> +rra[4].cdp_prep[8].unknown_datapoints = 0
> +rra[4].cdp_prep[9].value = NaN
> +rra[4].cdp_prep[9].unknown_datapoints = 0
> +rra[4].cdp_prep[10].value = NaN
> +rra[4].cdp_prep[10].unknown_datapoints = 0
> +rra[4].cdp_prep[11].value = NaN
> +rra[4].cdp_prep[11].unknown_datapoints = 0
> +rra[4].cdp_prep[12].value = NaN
> +rra[4].cdp_prep[12].unknown_datapoints = 0
> +rra[4].cdp_prep[13].value = NaN
> +rra[4].cdp_prep[13].unknown_datapoints = 0
> +rra[4].cdp_prep[14].value = NaN
> +rra[4].cdp_prep[14].unknown_datapoints = 0
> +rra[4].cdp_prep[15].value = NaN
> +rra[4].cdp_prep[15].unknown_datapoints = 0
> +rra[4].cdp_prep[16].value = NaN
> +rra[4].cdp_prep[16].unknown_datapoints = 0
> +rra[5].cf = "MAX"
> +rra[5].rows = 1440
> +rra[5].cur_row = 327
> +rra[5].pdp_per_row = 30
> +rra[5].xff = 5.0000000000e-01
> +rra[5].cdp_prep[0].value = -inf
> +rra[5].cdp_prep[0].unknown_datapoints = 29
> +rra[5].cdp_prep[1].value = -inf
> +rra[5].cdp_prep[1].unknown_datapoints = 29
> +rra[5].cdp_prep[2].value = -inf
> +rra[5].cdp_prep[2].unknown_datapoints = 29
> +rra[5].cdp_prep[3].value = -inf
> +rra[5].cdp_prep[3].unknown_datapoints = 29
> +rra[5].cdp_prep[4].value = -inf
> +rra[5].cdp_prep[4].unknown_datapoints = 29
> +rra[5].cdp_prep[5].value = -inf
> +rra[5].cdp_prep[5].unknown_datapoints = 29
> +rra[5].cdp_prep[6].value = -inf
> +rra[5].cdp_prep[6].unknown_datapoints = 29
> +rra[5].cdp_prep[7].value = -inf
> +rra[5].cdp_prep[7].unknown_datapoints = 29
> +rra[5].cdp_prep[8].value = -inf
> +rra[5].cdp_prep[8].unknown_datapoints = 29
> +rra[5].cdp_prep[9].value = -inf
> +rra[5].cdp_prep[9].unknown_datapoints = 29
> +rra[5].cdp_prep[10].value = -inf
> +rra[5].cdp_prep[10].unknown_datapoints = 29
> +rra[5].cdp_prep[11].value = -inf
> +rra[5].cdp_prep[11].unknown_datapoints = 29
> +rra[5].cdp_prep[12].value = -inf
> +rra[5].cdp_prep[12].unknown_datapoints = 29
> +rra[5].cdp_prep[13].value = -inf
> +rra[5].cdp_prep[13].unknown_datapoints = 29
> +rra[5].cdp_prep[14].value = -inf
> +rra[5].cdp_prep[14].unknown_datapoints = 29
> +rra[5].cdp_prep[15].value = -inf
> +rra[5].cdp_prep[15].unknown_datapoints = 29
> +rra[5].cdp_prep[16].value = -inf
> +rra[5].cdp_prep[16].unknown_datapoints = 29
> +rra[6].cf = "MAX"
> +rra[6].rows = 1440
> +rra[6].cur_row = 993
> +rra[6].pdp_per_row = 360
> +rra[6].xff = 5.0000000000e-01
> +rra[6].cdp_prep[0].value = -inf
> +rra[6].cdp_prep[0].unknown_datapoints = 239
> +rra[6].cdp_prep[1].value = -inf
> +rra[6].cdp_prep[1].unknown_datapoints = 239
> +rra[6].cdp_prep[2].value = -inf
> +rra[6].cdp_prep[2].unknown_datapoints = 239
> +rra[6].cdp_prep[3].value = -inf
> +rra[6].cdp_prep[3].unknown_datapoints = 239
> +rra[6].cdp_prep[4].value = -inf
> +rra[6].cdp_prep[4].unknown_datapoints = 239
> +rra[6].cdp_prep[5].value = -inf
> +rra[6].cdp_prep[5].unknown_datapoints = 239
> +rra[6].cdp_prep[6].value = -inf
> +rra[6].cdp_prep[6].unknown_datapoints = 239
> +rra[6].cdp_prep[7].value = -inf
> +rra[6].cdp_prep[7].unknown_datapoints = 239
> +rra[6].cdp_prep[8].value = -inf
> +rra[6].cdp_prep[8].unknown_datapoints = 239
> +rra[6].cdp_prep[9].value = -inf
> +rra[6].cdp_prep[9].unknown_datapoints = 239
> +rra[6].cdp_prep[10].value = -inf
> +rra[6].cdp_prep[10].unknown_datapoints = 239
> +rra[6].cdp_prep[11].value = -inf
> +rra[6].cdp_prep[11].unknown_datapoints = 239
> +rra[6].cdp_prep[12].value = -inf
> +rra[6].cdp_prep[12].unknown_datapoints = 239
> +rra[6].cdp_prep[13].value = -inf
> +rra[6].cdp_prep[13].unknown_datapoints = 239
> +rra[6].cdp_prep[14].value = -inf
> +rra[6].cdp_prep[14].unknown_datapoints = 239
> +rra[6].cdp_prep[15].value = -inf
> +rra[6].cdp_prep[15].unknown_datapoints = 239
> +rra[6].cdp_prep[16].value = -inf
> +rra[6].cdp_prep[16].unknown_datapoints = 239
> +rra[7].cf = "MAX"
> +rra[7].rows = 570
> +rra[7].cur_row = 165
> +rra[7].pdp_per_row = 10080
> +rra[7].xff = 5.0000000000e-01
> +rra[7].cdp_prep[0].value = -inf
> +rra[7].cdp_prep[0].unknown_datapoints = 1319
> +rra[7].cdp_prep[1].value = -inf
> +rra[7].cdp_prep[1].unknown_datapoints = 1319
> +rra[7].cdp_prep[2].value = -inf
> +rra[7].cdp_prep[2].unknown_datapoints = 1319
> +rra[7].cdp_prep[3].value = -inf
> +rra[7].cdp_prep[3].unknown_datapoints = 1319
> +rra[7].cdp_prep[4].value = -inf
> +rra[7].cdp_prep[4].unknown_datapoints = 1319
> +rra[7].cdp_prep[5].value = -inf
> +rra[7].cdp_prep[5].unknown_datapoints = 1319
> +rra[7].cdp_prep[6].value = -inf
> +rra[7].cdp_prep[6].unknown_datapoints = 1319
> +rra[7].cdp_prep[7].value = -inf
> +rra[7].cdp_prep[7].unknown_datapoints = 1319
> +rra[7].cdp_prep[8].value = -inf
> +rra[7].cdp_prep[8].unknown_datapoints = 1319
> +rra[7].cdp_prep[9].value = -inf
> +rra[7].cdp_prep[9].unknown_datapoints = 1319
> +rra[7].cdp_prep[10].value = -inf
> +rra[7].cdp_prep[10].unknown_datapoints = 1319
> +rra[7].cdp_prep[11].value = -inf
> +rra[7].cdp_prep[11].unknown_datapoints = 1319
> +rra[7].cdp_prep[12].value = -inf
> +rra[7].cdp_prep[12].unknown_datapoints = 1319
> +rra[7].cdp_prep[13].value = -inf
> +rra[7].cdp_prep[13].unknown_datapoints = 1319
> +rra[7].cdp_prep[14].value = -inf
> +rra[7].cdp_prep[14].unknown_datapoints = 1319
> +rra[7].cdp_prep[15].value = -inf
> +rra[7].cdp_prep[15].unknown_datapoints = 1319
> +rra[7].cdp_prep[16].value = -inf
> +rra[7].cdp_prep[16].unknown_datapoints = 1319
> diff --git a/tests/resources/compare/second_empty_run b/tests/resources/compare/second_empty_run
> new file mode 100644
> index 0000000..dc1e7f4
> --- /dev/null
> +++ b/tests/resources/compare/second_empty_run
> @@ -0,0 +1,8 @@
> +Migrating RRD data for nodes…
> +Migrated all nodes
> +Migrating RRD data for storages…
> +Migrated all storages
> +Migrating RRD data for guests…
> +Using 2 thread(s)
> +Migrated 0 guests
> +It took 0.00s
> diff --git a/tests/resources/compare/second_run_with_missed b/tests/resources/compare/second_run_with_missed
> new file mode 100644
> index 0000000..e1c7f71
> --- /dev/null
> +++ b/tests/resources/compare/second_run_with_missed
> @@ -0,0 +1,7 @@
> +Migrating RRD data for nodes…
> +Migrated all nodes
> +Migrating RRD data for storages…
> +Migrated all storages
> +Migrating RRD data for guests…
> +Using 2 thread(s)
> +Migrated 1 guests
> diff --git a/tests/resources/resourcelists/.members b/tests/resources/resourcelists/.members
> new file mode 100644
> index 0000000..2823203
> --- /dev/null
> +++ b/tests/resources/resourcelists/.members
> @@ -0,0 +1,10 @@
> +{
> +"nodename": "testnode",
> +"version": 5,
> +"cluster": { "name": "rrd-test", "version": 3, "nodes": 3, "quorate": 1 },
> +"nodelist": {
> +  "testnode": { "id": 1, "online": 1, "ip": "10.9.9.47"},
> +  "othernode": { "id": 2, "online": 1, "ip": "10.9.9.48"},
> +  "thirdnode": { "id": 3, "online": 1, "ip": "10.9.9.49"}
> +  }
> +}
> diff --git a/tests/resources/resourcelists/.vmlist b/tests/resources/resourcelists/.vmlist
> new file mode 100644
> index 0000000..d367140
> --- /dev/null
> +++ b/tests/resources/resourcelists/.vmlist
> @@ -0,0 +1,7 @@
> +{
> +"version": 7,
> +"ids": {
> +"100": { "node": "testnode", "type": "qemu", "version": 61 },
> +"101": { "node": "testnode", "type": "qemu", "version": 61 },
> +
> +}
> diff --git a/tests/resources/source/pve2-node/othernode.old b/tests/resources/source/pve2-node/othernode.old
> new file mode 100644
> index 0000000000000000000000000000000000000000..9da2327e267563690d2b69a05b976c1870e91836
> GIT binary patch
> literal 81008
> zcmeF4cOX~a|M-ofP)1awl#EKUXL8T$N<$?j8d8Le3fUs0ffgkiMzRuRkL(>OWF!&F
> zj1WmF$?sgn(dYX9-rtY+_^w`mbn_aI`@GNdJkRqy&-1+J?%cVaN>o%-g6ii>gg>W9
> zNr*>_>F3`JKaUFIU-*lUN6mEgb!`lPp>CvTY*hZ`9V#ljfBE~zpF^WlzWtwg^O&xk
> zp1Jj}U;HP|OFAhO;h#9Kv6-!|vDH6+y~hlWS(#bs9-VyVf8u)Kd95uC^e3P8AJMa=
> zt*-gMUhqG0y~KI{^@9J2^IDjhS^ZaBFLB=git9BsurfCN#j2>N)+_Jatobhv>#z1#
> z at VsW$|I&Z|iStr4m3LA|-k6GN!%rPh|Duc6*e`$ni9i16yi0yz|8wU}{4YB1Gn&aK
> z{^zb&NAT}C?>5Sw$>53q|J`==N9X;!?COus`*+#ZAD#E_va3Hj at 84xtPVFv66UGGp
> zBeq6Pdh*}@|NrCQ|Nr?Pe=08d$KOHUZ~*B4)BB(38Zl7`Q3-KTNm*GLF)>N;{{Z7U
> zy2tu;!N{NX&!THYMa3nh#igWW#6;!9q~#<hrVhWHS<^{Oqi1gTpFW?MgrumPjEty^
> zsHp5OCm{b(_r>!RPJa8}dq+%MTv8UEO-@?kKT_p5 at bOCqmp^?z(Q(>8bo{5!CoLl@
> zB`Pf{Dhajv2bcIvNGAMG>r+fhQchY at N={Tt?vL6p=lYg2fBt-ulHy|060&kKQh#uH
> zR8;<$5akcQ^ao!Mmz02~larPD13y#x^y$-AvV-6caR14Vr$5hT^l~UY8%q0Aj&aWT
> z at jrQb(${4FGG6M)&b?K^u|NIPxLo5$(ux1 at jjs!G58E5-|7ARQ!k}7N?5CZM%Qb%d
> zLvcu7(9qCWT;Qtkm+^i*!MI%G$6r7F_x~E_j357fLSsXNwo<m<UwXZ&4ESHhI~G($
> z=jzxAeq7o3b&enZ{p-z0hcCtC3Er7^J032vR`~h%zt0Og*s_0ggcb~%oe at 8wHRA`z
> z#eCYl9}<lBUs>?c&Sb6Cx6WzD2~IP)D;?LwW91=b9s)-aFsA0<<K<iZr_K8wYOiT8
> zsE;i=SoMy_ajYNrvfEn!Z0~<xfAAOM{deqG`gH56c`26D=E3%iX!BLT-}m;~xFn4C
> z<7vtDkNjx;`t at 7w1^uRdy)(693pI1}a9dm3-S1&PhU41B)n#_m=D~~3+4!^n?tsU$
> z?{>&a;WE=6m%XDtS+#%s0Pa-L$@|o^P%iRk?>YbU6PT`Ym0w8fy~<1nZ40(I9cL&5
> z8CKp4XC#_Vn<qN7iT6wyEl}dj6h30j^n=qEJZ&D;*bDXFXGy!wN`@9so2R~fIn at RE
> z1niq`<iQHrRIGKT*}cGm%4zps+hGf?_lEjdLSL6gS~1aoL2q4f#GkR3U;3}D?QOyD
> zVbhOOJyaKM=*m;Tqaq_|_CERV-+!YbSLu8dE}ypkuCuijUn|nXB_t%O9v0}~a6HzS
> zXLo<vypDT0Te*Ms-^K8lJGjCzs9ks3{kJ}_O#jL9ufQvBaK*=*H()t0Z}2i<;c4>*
> z{oGS;ZEXi{POwK8b!GkO{u_M6Pize})qmUmJ34>a!OZP(e_8+S9&BsgrS#vo|AsGB
> z4KqLcf2aQ*p$$;gF8}NLuSdyT_4$8c|DEHfVCHAu@|X4BYL2C!_jHs^^k42;>x at Fz
> zr{L_|A0ywt`>&Jt#{CQJzF}-7Z;$Pb>i;pWRZ~%>%lmPDH2xOjb4{LiJ55`@!Z^Ww
> zmS<zI9o_S{UWkpv9>t}J-$)mlHcv3dt#+yKK8$rJ(mt?iBNiE{`cA8LrqXn;_nk^b
> z>d*Oa4so0*c=sA8rJgo#ol?9`?oC<z at ZrM@Y-w^6<Ir^F`;YA5uj1J$E2gg&Sv~FR
> z4IkOBzM)8;xZcC<q561 at IVIo$|Lke=v>$ZmybPm^=}kBV9 at 8r#BG at Y^=cd^|1pPkg
> zt6uvI0;QiBD=kO{-g{2E#Zh9X&Evk2DeR)31_B^2L_7}sXrJlNr+??K2n|kOfAGiS
> z@$)3k^m)JYSAV)asQxGAuM7ysb$B))u6jDJLytv#za3)wHGf4lK7LMzNc?8}_p-oL
> zFX*cCNXoS5tF(K2tOR+}C-PT?uP9k*Hw~uEJNEME;Fl)D$@!~E{cl>=JO2BzBb>LY
> z#J`^YymdTpHGZ6yME~HAh<PhB%s)-{l&q|*SCn#5{)*u2{2BjFmr3NUh~E-NS~$>o
> zba765zDo2i!PhL5@%$CN{IQ?`j%Q%HvW at 4h#*gPII&IH*nWxQD%#Wr at -Ocvv{CA at N
> zO;<|Pf1SQcmoV0(PrJW`4zI4QR(&!t|DCgQ=iYGZ3)AMs>8_Xi=4&`9e>HjhoYwXJ
> z(tqLl!1AV{>G$7TH*db&{q29w{1 at h*^+#deX<C|tKZ1U0u1yJ={}P-((|@7<Ztk5l
> z|NRCBsBQ0frrm$FJ at Yj3vbIph^H;=Zx8rg at Amp6R3*4P!l_kSY8P8w++5T%Qy1hD^
> zmE(8+olax?_|0G1f1$gdyL;sSPX8tR760 at 9yZv{B2!Oferk&4;p-O$Rf0hvVC4U9S
> z-#?e%K;!Qs<+vR6%U#%XdDo at slE190n#f=EQ*A%0+Lt$N-s~K0!8t716ZtFH1#^hJ
> z({$w<|NZz8jz=usk?W?-gX^CQ7gE;!kI7%b^`4W%Fz+;7{lWQul2IqhU%~#oH%ADr
> z+fFmz1bNR-m!td at FE4Mig_^^(^G%7TRBbi5T`A-FD;PfS4skP>HqSF}Fv5BjD`h-?
> zHRHz^Kqde4$oKOo_w&g4^Eh6&{IBn?`1$#opU2RZ9ELoKRN%*-vLIc*k#}2jEJl6s
> zQn{o1*t~OWyn%6|Wr9CBPK5djw)$C5L*x-W+~F%C4Rk_9Xj#Mpo_Pv41iPpw_~Y~A
> z2d&3?bGPadaq$=*a`4_uWIi!p(wW4E_R~P$Moocn&fuopd~o&P>Mw;?XHD>>PrF|D
> z8k>ZrUo^|AtU-KOFVNKHL*~QxKX3XMet^k)K-9}I#XSTG%(r!SQ_)ZGJFG%S%!T8z
> zs#b5#1)hix=fNNDOd&tCuR-NWe4-sUuI>Zu(Hq~SZAk;a<`ZSXc>UR=y0J0+{F>*2
> zTKoB$T+c-4f4qKZyzWP4xR29j=Frdihb$=JGPv&<5{JcQRMl3lLG26M&FD$Nl=_ij
> z%Ks5BFNJ(4_K9mH*&wcU!ImtohhS_vS3f+#?_&>0(`-(`z6%}paXm9uFEif0yrEO@
> zVgI%Nn5Q>pH$0Hf{WkH`+>_a$dPK1y=4t{MD^u9|b%JlQHDmwx=s3)DrLsv%2;#$e
> zdHL5Yvi#7l^2#8eP#3XItV5W~XcnkqmKtH9PyVqUtBLd at oZh-V`+Gdb%5svP`SCC9
> zyYFHqnGf}!89#{+)#B7vLr+OMrMk#yWd at i-Bjh&!B`x^TT(aQ#w(bCt?<v^j$mng1
> z!AO2+Z|sT1Q}P2YPvS#6ixh~MMS<5Vq3%)yi1~RH9n%DVt6ZU>cyubZ`|LR`I!7cw
> zF|YqnH6?$YIpjlJ0->J}^K}fzIoT-COljvBRRE%&t=K=FZ<7U&7kJ7(X->qn1D&1?
> zq#*g>^#vU&BlF>D=`hHL{mho&^S}a|t{pTKIIXD5d0qgHS#Ryr2}J$tnLi7Y(?Ak-
> zua9vwwFmK`eHKSd!H0IfmL2lp=d%dDD4g$9ma$S)7rjlSmahOdGmA6ZaU?%`5RWgN
> zNiybnVBI~|`N;mEpD_-af=~Dds-OBN>I?RLxWI2fy_oW8#eUC2mM;Nuo>QtbC-kpW
> zD4?-ACk0Df*@tOAL-ND+)fX)#>j#eiq3>Znh!}?m`N!vfgx0f1YXQ?(y)457ze2_M
> zjR%y!_kF|jULnLM^pNz7%!l^U^#<}``%n?`SJTNKbFAQ|z<$9S?^^rAzqug)DaOy1
> zyI4L6yOo>oc>6oDAJ|Vl+@`2cA?)h;BtC3bplHrQX@>O<DXX7>)n$r~=d_W2E^cd6
> zeY`0NJ5TK`)(h)$pjhMMi^KW~viz`JS7c1$6Mp#s69Z*@Uh7Ge6R$+_n_A56;nhjP
> z%JWB<hc^GhPiTHl=0hG+;v_yapT`3Z%oI4!?=8zO0WZ34yv|h^o$x<ud~fIEU`bfh
> z`prQ{z9Rd9{b#vR6PXX&x1e?spUBUBiLVFSq20XcE&zn}M>wPLSAqtkTGO74ZKhP*
> zh!I76DCcUoDfqA%g9|6|iM(B at WC4Ixo@b-#Gr{Xw1|O5}Bl&MD30SG9Bw!9(D+~AN
> zA^i~ii;ZOY3A at Rj#3#mIZQgt$El`)^m;p at pM(MfIqxPM<JyI)rPb~J@$#nJJ(@1{!
> zy9bVSWIpV7{nW635#tzPpU^ymEZGYI;pZat(!sC!23a6SZE*fOB?-&qlPlR`f#iqw
> z$tpgD{S)%C{_MX?Am6eM+#Pw`@Iyb*c_1Xk;KAkD$bb5l)--RlNW at f|dR}f}K0Mhz
> z2UOC?^22^B_4%iM2!1`(%u)s>3gH&!>c0U_Lrm#3t;qj8GSn8Wut~zyfciDF^+-QZ
> z%@IQBWIoZp<Mu=FeV~0ZM$DiP<9q#;N&wvi^w3EEGu*_?yBQO)Dm&q4&i4=>w(qw+
> zuug?&&&e;y&l|UYf=_&wrbIJVw^(^N7g!oy>2bu6{qTNlq$@0n#cb5w9rAY|KD2)=
> zr>Xg_ev|Y=48Q7J1AsV>%ic_|07jqr(cdTf*Zw_mj~h#4u`9dwU#fLLeCTFuSWc7W
> zhx$))pTu9s at FHYWLl+=M#jo>H!DY1#W>5AFPVoJQ<*A;r$6^Dzwio)IAU^Ex2lS at k
> z6LFE<Bt9`7zP0ZJgnwAWoi<iyvfuOD1pjWBV(q!I2beNAS&Oel_6aX{sK=cwKcR-h
> zllX-HalZC$%s=FIrvkN0*G<_ at qxk1s^GcS*JP)wTb3fH&S{P2)C)7h}?G*CEc7Lii
> zi4WbwF(cc~vG~nNAO##^*&~-&jQGvPXSCU`!1yru&@%di$p1q*`+S|q^27d>xpopC
> z+7oZ{-Oqp+7X&us07Ckl5*h%14_~t2_ at VM^2U-#_#oG*$TGdEDu)ou!dXV|>M_?7?
> z6XQE!pRRDgRq*@*;$fh*<WVl5A6P%K=nk at fb!$P*yWA<5c5lt1o9Txp^aFnnVyDpm
> z_<9T>9T9(qL%;Uz#K*CE0lkJ?5WdU*<Pg)(I(I1l{0mg&h0<}@p))!`6%0sz`172v
> zQ|Je_%b?It{SbT;H~`GJJ`4)s#3j`?4~(g2lKlF2ok|9eCSfaSUAFjJ|KfkV&tD_!
> z2kOma at W*<T3oqmodMDOzyy3jaKp_XLIYI<jD86E4_WOK?D-kn)YKLvVhUACiRO>8Q
> zM^5Nr@(VU6{@~|&7a!z5f^zq3bOJqM9W^QigpJJ~k$zHG!g%is#baT%CDjSEsDDBK
> zQ2%V=J`;2XD8I^uNqi#QWUucU>tCkx9s+Av?yNbN2K at MiEYK_2MR&D44&&DJrSi{5
> z@<Tgczr=fL`5hsj=&$Rc{6v3Pz3fN-jee92?p$p2O_E1^R_Exmuk91C9*}rSxEI+!
> z{C$l;ESV4G$}#vU|8~eH{Ii6?z}Wop;`ekwL?;}ENdL3-qDC at G<FF*Jn}_)Qko-^&
> z at e)yFKGd7~`bm63 at 6}8_0NO1p>#J1IEYZ#2<$&VD@%3ZhJI-!2X2|{tIa?yhd`RhE
> zH;GT&A9C5C2js(nMMO3SjIWoE>%TAFKilPO0>;Iq^_b-)k{{a7E2l6rANq%NQj_=&
> zaN>Jv&j29iN&S);V5^J=oI;}b4bM0EcGM^ybGS9jJ#h=tKQwFA^8sW&Y?rcyllZVc
> zQF_JmPhcmEf1dQ^fU$`NK=vueaO}$3(O8T_cGs5DIK+qJsRZ>D_6gtjW17S#)-fr@
> zZ^2$T4;URt0U~_c?#T|L{6_eZ;{57Yu~?2l^mVJNh)?)MFKe>=Q2%1IllX-G1LeBL
> z>J2w8Ndeo({68HS*Z-Rj at -)g82^hb%cwy2y)V>hU#%M?86aD(r&-?>npK$v1u&Zte
> zz-c`D<*zva28YkZa?$*><}>$KHuqS}`hDNbQzJ-zf>Ys0<`eTH;yw&QK7tSZth<hX
> z7q|rPdx(FU3{=!t!5IM3&$)-Q+ZEMfF#ZGey7_d-Kfv}4RG)%R%xeZ9ANGR;g8u?e
> zP<QTl3!psf3sO^nmj2qN?U!f(aeiWaQKGi7+AAD~o$j+ZprnfI6WZa3^#!v0kU!k^
> zQ+_qbC)(*&VHY6gzl)EigQ{)B2uTIT at Q{CW#`=<gjySBb>C(}ePDnrS^Wyna<bUA%
> zIbJ{8m*B(j=b(aC7a*dxh{6;=jAx0b5ML~<W|`&8M9gAF?GBk1#D{t<-aUnXBlPbw
> ziBI&e)Hz+?I1GfA=cj<N>2<{TecrMlTqfLI);tF5;)wRNQ%3rMe(}ub8)W?u<B9zw
> zKH*1e4s?w9e}yy2z`tN=tc4MZ4{4ng*H_MefJqO_gsaX+d?=@z>}@iiuou%we1Yse
> z9~Mb;jm78h#FK$=e8Bs=j}ZTOqy42g<p<cM4^<Z==OX>U_6 at U}!aorCCF4o_l~C~k
> z at oxb!f6sGH0mS*;-I4x%D4tX`JaO1|`=u>4%aQz$b1!ZR`C<F&7*68D at m|AcwCjg|
> zSd#*T#^%4M|FY?R)~Y{~h<ytERAdp3`Y%-Txh275{Sf2({z-gdexZ=^7R-h7?7J6J
> zf#cW!gZ$gzM(>y$nfutQMt<WptC9S$|D<o2f=}pY*Caj>pS*?fA(2+v5Re4;u2s~>
> zYa;&;Y7n-7^FSPym$kGwkp}Uh{yE+~Aj=QCQ}YJMho5T`_D|$zdP)WW5l6hdk^|1d
> zy9jH#5TB#3{~p*IgT0O_JVRZF_)yOegTl#t=mzvfe#%eOzYy{N!t72!<liE`rhuhm
> z1tZA+_-o$Wy5d|MHeMG6xnubUcyx&hCG%mw*t%#EpOD{}t?P%~d`|{niRs+|6o1Zh
> z<hYVED;{%Q at 3z2}8_5s#T%kFI{$cyB8m}iJ<R|i<^L+*Y(Y&ScX{0)}@%tJl-H$jX
> zKkS!N-v0;t-PnC{@cPE;gU0K6#_MsGe!j)HS)B$DpA-Jm at soVs*3<FWq`I>)KD3{A
> z(RpP3!1u at Mq2N(sa{bYG-Ovv{vQJv0;gT<r at tDW_1nI_6)PJFV;tK1h=8yjL&qSRC
> zkw4sHH;+R2|Mh}T!7{>O^P>56QQ(MsuS*j4kx|6_L^RSr5ob<Srv}AVANn!AjLA>L
> zZwG_vD1={@WXJ=*)*H%#&J!or+`gKC>A%0td1=!8o$$kLFUayk`&r%fQ+^^pPjG9M
> z=Td~>K)`dd2=F|e2XCcC_J8~>zIr1=9A at yulKC7p8XqBt-5{FGhy7|@+$26>KV>v2
> z03KBRgkph610UTfA7uYCc2<QB9*xEXJa}jlBoH5tgN#+T$b4uNF3ywqMA%s&ln99S
> zmN1I}R9jfOj_0EM3C;ekuB+`HV*BD2TkJ|k{w=?{ZSJ1(wPSI at n5q5z2cB2Rt3{8n
> zduo>1IPM_tJrhr$r)Vi^-Z{uR3 at pE`3p~w^;^#*xCs!!mNy2hBl-;4vLVS3iR*wBE
> zGM`2Lx+N{-Lu=t<hJ30-sWZ>*s3=)XD_C532SDA^)1q__KTpix<zx4c6fcj(*!DB1
> zUynleIdYn*Q>}r_SM2m|Z)?`W%@1tzC-^V+Z at P7;Ed{KpbroKSMFU*+q8UdVnqM#D
> zy|djWBNjWCeE}1oAp3;VwGs6WGGC|5V!#v1Uyu;YIv4VZ_T<!m0 at 6&j8}1a30jb75
> z&-1?^zA(4lo5EwUSVF=9;fP~Me(1OEUuh!qr6eTsA3?rU|NRw&{<EMrqm4`fN%8`A
> zqEgYoBr$Ym=u<TQ?%W)-{lc>t?8PU(R@!%n at 1nY>R^k(x&r at _<UlsCq+1#ij<manM
> zDh26}0WoV4W{v^<3o|TV(jog)iN8|2z%dR}@@0-svq1dk1qp#q=9BG{kGko8^BX;!
> zSO#Q;{Qh&N+Z}|e!3 at U%lbzuSpiZ~TVmKf1>%5cSv!^9sTIvJOmoy>!af)k=nps7b
> zABM at juCMiQ=+D4n$lo=ilZw*(9q2`Li%JC)0j8vI`=U<d-}L=c4qjW7fblw+`yTf}
> z@^8HTab1lYnGdJC>lK>x at E%cX&Q*|K!}v<s^22+OV=vXeYfmBA;59cV^cxNM(OqN#
> zr6VwkCOjUy^8NAR=oG}4iV at hkIe^R;TDz5_yipH_Y3ELH$d6hV at K~DbGvHdac5B1>
> zR3K2a!i8#5e*W{@z6T6%;<0XT&I6)vk$!4I%$3(<llgL&TSNn){OPa0yX=R2t%b++
> zng>4vp^wYcHk74;=j?|K?pGuGG1)N(ud9g1%<OnO<a!VvhT9>ly2$+05lXT!)IZEN
> z&?G}Xy#IMm(M%4CE0fP+)n!kCE5ov{#Z*W?dTnN0iS~&Yrx&Mqcp}ozz<r~047bSq
> zr#;L#J><(gGuEqs{Qe>Fpx1uf6sR}tM>i_KOb-0x6$-MSED<}Mv!aRE1;r at ClY3GB
> zh3ks_tx9CRjjioQC&+(voSUBD%i)~sifCt1i1v(Kmk;u)+dk3XM112JpBF5<8;?CN
> zwu~PTLwuOFv#Z}k=EM0=m;>ZL*!YI48uGuYw}jCR4S>ZThQ!rG(}8f^C$%I|G`{$m
> z9r^g?TRg_HI_ErFCDM;$rQmWGcQXImX{NAN*uI4Sse=3yI(GTkmNvi**Y(|YWB`%t
> z$sbeNk^ZmQJBuZ%Bw;QulpdP6BR-Fk!AnD1GT&ky13f*o&#YT^nw^l}TRc0?+^7#Y
> zn`Bs3UC#kq?3tO&WIs*#=S>^eG+maD#Wsw at x~1nMK8%Y`-JC*xk9$uv9yaLV*Xw!s
> zX2bE9Qu-n8{6HdTzwFQQ&NvYqcg at mtGWs&X at 9CsjrlA^(B at f21gfSug%Uo{pYQIjF
> zAKL%hcToN%FfL()e78d(D((h}04ALm&s&fP;P{}}IS=KB_cL;vRCdQ==Z|vercBB|
> zd~SdKC^(eNXX`8V<N4tq><Rf}xcBKVvP=Z49{Y!^<4y#&#Vt=<XpsM>KK|azjz1QA
> z#Pc{{UkTFBXk!M~f<!Vub;;R9?NEN`U-Jn0*T?PPKPsC5n38oEH!MyBlKy*2b?njn
> z(YoQrs>4b#SPEmoxvUPvhw^vZJ|XiPzAu$ffP69Q)RPR5zxu)O{PLj$0K at aQiL(;H
> zkzKPdytG38K}y at EQ_?dATYtoClVlm<M;r0kuuL(2!Fj~1+pv9MK0}fT at +*@{7k(Cx
> z2S;XM%&A=oVD7DKrx%aW{Ek<wC-$a$3?`@)db%?M at q^>@P2y&g#}|=W*M`x0JzR)u
> zwk)9^syePb=T#NJIHfX;`A{Oz&3 at M!nThHjSks!Hce%!3W?kDa^4vgt7^Lnm;v at 5!
> z)vq&(K|VY>%z=E3w;Qb*XcIv59QsmhULs)NgpOJp#V2NAl4mv<#bE4#uC&y%kbU;w
> zH)0VHAoDAXX{GMg>EY0h7{~O(TmR*Ic><_}$2G7W)_R|1mHC9$M_6kM?yp)JgYCMp
> z<k+rzNd8gEIp1~5$b9G*j$eX&sJ~rvq5L!!F{$Qt at jyH2uEfob1VGm}f0Nob)PED_
> zFY=-tj=@ZV5?z8E5Fe%$Xe_14{CRz)Yx^NT%U(*1&<~NX>R((1)_gZSQhY2Cyf}Gb
> z^d%RPKevs`uuU=+d$qgA@&X6a&oU*0n7-{~K9R<@fqWwVVTOE7Nw&TRx8uQQn5XHc
> zNd$b$UnQ`-MD-yjqc1NHz8!;oyl{Jq{xZZrk~_cT${sSG4HnF})&AfU`e7pi=w}Jw
> z#qRLj+20eugNHT2$x+BZWR!?0Co0BbYrp7x=$?uAf`J?!pG?SnB2DXAqld$^$rcvK
> zKY31 at dgt8)@YM-AQ2Io`NR^@|cLe!|GfVwimYs;f4*5|TWECR)pEp##D`QXQ+uTTd
> z>I3U#Er(A(CFCdKlTMHbxcs|jmO=f<d+pwTWC!w}E1B1+`>Vuar>tsce`rPgb)DX~
> z#HU!F^4~pgw7*&pAGpAuO~}8 at Sf$WDD}HR<+IM~;n6ss5Thx8T*T|w5SzHPI!+ at TD
> zwJqW+Y}Ib0onrk6PJ<ZBARo4~BhkLAVKq+l(FD*A9p0gj31H at 4h31nu>R&3+xt>)Q
> zW3bBd<@b#aBmKj1_DjQMvVKZLe78P at d{|feo)z+`1=`km9Z3M%-^y#$dJ{lMZ3NqV
> z38eo!!q2?);riq8wmc=SONf7{%R(xAiu at 9^OFL)C_gNesP3T8wXCtj%Dr{F1Ur&xj
> ziC{3nY3X5ZWIxNZm|OyUVll1S&u1Kd>^n9#e{b1a;l(w@`cBNoHzq3}AFk(f&4Ya2
> zBz6i{cp^xK4tf?tBIv9;d~r)C($DslTjLv_#9(C-<zeP4ko>PRZXM+`B<sgedHJ$6
> zkPrQTCZQh-{C-S#O9Gg)f~9c7=LA5-JMzi;HS(YQl!l=A+Gs40H^umAC~9Ah=#4L*
> znUnckvxh#JK|ah2R1oqL``QRW|8ogW0J at -mQ|#bb#3X>?tIgS+j2s-X*s=$_#!L1f
> zKAa{bRJf7(Ay-^tm>{3neuoY6clUH|^_5EjiZIU<%aaIXKGrSnJA?H9&YMSbh&L9C
> z9u*DScm(N(d-jl~+Z5~Lu>WE*Rb%m01v}(Rb4xlmM8^Zqedm{sK>M^*uG3$*0{PF>
> zC>o|Y`(v;JdDpelA0xhk5Z7Kd8?yYL={Xs$R>JYU?UNg!pZ>~ihrCWEfTb`#1nmi+
> z=vC4g$7hItYTk2fv0 at B%WD&nkK^o!*a$K6BcY at 5{;uOcX8uG8)iO=VNd<Gam81Tje
> zYm4WBruhlr>4!Lm5qD(&QoDqyWEaL_I^Pe7N?t_#%1t>7xE;uR_3QQ7_K?3 at k}a0d
> zPhsQA2u^7C+BL8+2l at w&c##!SeaJr#n>dT!pBIab<~%znJE=Yj=9M>e9w+mm;a}^h
> z7 at NO;Ble-#+|J!&;~x*&)`@0Np#5*ZuzZUY2l77>OX3IHVq>u3P4){%C*_Cz>@+PL
> ztjK)09%X9rOb at 4S%D6 at 7=d^lePQ!*0;PT?J#_;Zk;L(kAUoTIT-?+4jonE9j0n4#+
> z&=q}&?9(}})op<RnQyNt`Qb~c9uDh`I~PE{8(iPnt4%#te^~6B4=x?|sNQ)7*+1W<
> zQvTtxIP8E;Q;#$o%Krd{7h3tt$$Z$ZEuxT5_%}j7b74YWqWKN57J4w8ydx8w%4ptq
> zp$^S2&YzGzsbL+D8G3y at 66k~4H&KVN{XQ$1Ur^olDDtTu4$C#<IU#>Up|wANQU!>0
> z67E$w;3<c(x9(DuKR=lk#3Nvoh<TKYt5PQ+{lGlfUI$e&e*;a{%K~`6793|h7eYQ!
> zUvY5H8(<F;b_=@Ff!1eX7)c=hwTw;dAJ!yceRYDRqK1f{K0 at iTzfb1Fypshh<iq%f
> zeG%m6owg6=&8DGnd}Y<99P0z2BUM?uWl{U44=hdg7fi;IzR#JvxEk@<%FmZbJ|^>F
> z-s+49<nz7uyH4l_riJI^$<Ltp!TZMOGH59?i)b}=`Jwo^XwQ(2<hNMt`Qf+9^^?}e
> z;kw7FuyQgV`nT=jkM(dE_RJyb4 at 0lGm|YHk0YY={9eC|f0PgNC5idB7^4rdzMrX=v
> zCt@!HjwlQTq4rgOxTN#S6!l9vGBKuG;C at e09)>dsKJO-aoi7U*D9w)=R}S5(0=Koz
> z<aoVMe6Bj!&pWdr7Sj)*W)`SG{L!UK+lDI1@@qiBCE@*iH82n*>c{H8IGF^gc7u!+
> zaDucb4eV1IvM<&{_Q~GlbRVmX!)EFUh^v1`{KD$C%eSYf at 6};UX5oN*=toV6`i<0~
> z+YffQ*MY0h-&MP3f$)}a4NXrp|CQjaWhpF<$9Cjr_Vv4(P1K)!r<`ltH%0v?%r|>*
> zLq4%yJyzcpdt;mD&DS96Ne{F5*-Y at o=GGdj{Yd_U2~QbyV11Xs+{n1y4M=`y*G2QD
> zs85?$eqQ=JtUn1~lj2P1XEVLd&QL8Hit?-4wNma+!1#WSL_UJZ|BvsVIKJ;8d~+;*
> z7~f}b>}!+$8Q+f&zBRUw-uV7^<NMYr)%JZ<nG`=itEp-7IT4HTDJLs9??w3^xNKIR
> zKaBQY89xP#dkwY?=;1J48(@U_fm1X)j;@DwAtzv9w8<(Om>$@sAao0jFE)JNI=$z{
> zV)u?d;#7N%_;E9}LKA1plk(3JY<*IiAM|jzoPUtWPjW2M$P+J#1N=8F6Ni^ZgPq&X
> z7QJ4K`15u|J<Y&kF_r#SRtaa+f4_uoFP4-b^PkLBA6?r&mVYyz1NpwNeVMJ30KZ_t
> z*Yi7~LDKnJ`7I$Ren<&ph#Z9Dmx}d^3vp4XeXryVJ~GoM^I=|<t>^t%e&Y<0e<rG}
> zbcbVscI-^8KI&+2&A?qx`xT0>;t!6xM}39+`{3L&`FA2dtQQJ7d78{$d9rfjaE~6I
> z5PSs?`nf!N$<yU9zikZ50!Md61FCEHW9c{$Umla{6W55vV&3d-te%Vbu$Ax`;bgwP
> z+r22?t}*>QCi2hOC3lnsq~ic4n(^i}TQu-w+Ip(#CK`X!HF5)ryJIl1B at Ek6H6i^&
> zKeMFo1({FyWr??XI9wLjCG-<EtCHINUOcGqd|P*pDH>e-&f`&a1I4%Yc7s$N{xH7v
> zYE_e+l%F|SDY&3 at fXs*U%J*gMdN^Enzf0twm6HcX&UD0q7TL=!wWp%NNf+wtbq1)u
> z at l<}#o^vzfF{TfmdD6p3e&yxVCo2TW`IDxGhO at b?dN@(;M(|gIUa6O1?|?bnel^M^
> z8 at y+laXT^r)z7F_?Ud+hO~F!kD at eT*LVTFNI`=k~%rEU>-YEw2^DtbFoDcczhCEr0
> z3JjEPp{m!k5#NC1V|DrkpHO|#xxR$sO==G@#+d_dVV_X{g6khS8YyHxTzC7r1 at bd*
> z+1ao`ek;sYeG8pMk*D&uaNwh&{OIT7`@j4?{?-Sff!}uU+YWx)!S8<X+YkKReqfg>
> zwzoVHtzUnOebqY{m4vZ48uTl?G at 6*d2)x at rbGM^7DSm$V$dTjXJbm2uM%t?zvta#0
> z>IbTo{%n**aC>Qfts-D5`uxhxCNzJ^R8gBp`#l!3z3}0>(WLuFVE(Q27_}6MpJ6Yx
> zgTkPX?>e>DaUqN!;5_-!7imU{XB<Zs+m$@<$kMAzl>x<{`>TwaJ}isD9_`5PZDB<D
> z4IAA-&-B%@B>uCx>Wp+W`uOJVwR8-SU(s-1X2a|bAV_s+tFuTFP-1d_tJ8|&L;cI|
> zU&_6W#8^E_&nR6*d{}2vw>6*44_zqr(2q(VUnbmA#RU0^Up~n)Hz$JD`j&4S+ at gU(
> zqt9@}XOw?iU%2^Y_rCksW2r<N8)n4s-SAnwbBN4`_dy&P9M;2OJ~E$}AMwEnFavJ}
> zxX<+2SQ*CW at iQ8+RRJh|etz-t84FsNpFGp<5IX7pyHJ11SJ6Y{`PV{_>9^&R9)7DZ
> zK$MW*R@!v2KYt>4W58S=Ar=j|7~<^;hSB^;JTTeIojVr0dRk-0;@2qtbd>6sur(*g
> z&zUkYhZuYH at SF8KABp+J1~@-e)JOm^gP)Vi1){;46HAg_WTX5;OH1RqRa!~d)-Maf
> z-$)^Tt18RJPgB%a#M at kI<AU)smg)I|h at U+Ug_I;6p`u(9o_%k{o)4gG4d+F-Cun_h
> zt$yD7d2DgmZHt&!Qa2GF>|V0@;5%}BtA3G-D+1R4(5by2Aoy>h(&kX_Zv<zAYh9HO
> zCV}*X72Ee^(tscRSQgZlCVE@$OTbj*ntHe=t&exRpBzc|C-dR_dRZD=|1}o5GvW&Q
> zy}FAygPzW&4CWsD%;sGPB#d%js;oizpCmEu{tT9QY&cHvWbO+jzrPUkoE@%Y{+c{0
> zaeByC6*DpV0Qo!Mvh1c$ufgWXq$5_%55Y#8P${olXnxwvU3FgWMhs@;W#n_Y9P#x7
> zgf2 at Dkog_2&*~Pu(!<S+=Qa}Sr*ahktuzklKon-(W^p8f>d>ACZM#tZ_C#Ibdb+w8
> zOmx#y&7OM1KbLs%b($JE|08~3ZEhi4UxWGWyTtkw<y^_!g#HX*eAg_8lO+*^t^cOW
> zd;r=1*QJkUP%ntZn&<?B68O>l^a$T;^PN+yA1PA&^}S&Jzn({b6S00V7v7IM6Rw{M
> zzzJahZ6dgHPcF%I7V<xJDQ5%PAH-nSx#L(W6cJyBUZi#N6!q<}zDQLN=KnV**$5N)
> zZQ^d1fb0ZtcoC;o99$of%l5eOjt1FJ+1lC_HuK}Lnul9+ngHVOpEdXE+HGY0^eZ-I
> zttivO8KZ7{5c%QZ;kxTI9<AUuu^(z(1{i-Hz_@*m at 4r93Z$5l~EdMjUPyLVYp?}Bs
> zb06P_eSH7)@qN!Xioz8PK9qm<WGR&&iB87WMlBk)zr2AMUvh~3ROa6(R2A@(B>Cq)
> z-*&J%O&{-aKl%BvKLt1AZBH{-j|X9K8}v(HedATOHm38F@?&Yen&tdEQZSK#S(P2n
> zl_&V8WN-33jwX*U(Tf_){8RJ^|5-)wiMxU5jN?JnhwWLJ`=fzK%zdr*X*A%+70Uvx
> zWFggpoe#0MODxL2x+8vdxfRocbZL_OP&~!E$@(}f1Mx6|{7Usxd;P=Xz+=aTw^>bh
> z0p)(o*3$!s|KWvOTPoi}%wlPeSmkEK7b(qsI4eqq#OE*JeER*NKK>?rp^pjVOT)6v
> z{LWa=+ag at 5n|T);2<YvRT#WMDwtE;tYB!}~+9A|~J*yC3;d0Bi?MCGB<>9;n<DhhX
> zJnPISaTmyseyO?g&5d`!2qvWIVIF0R=AP3GZ;*c|v0+HO1fnsw`6mr+u56spe{q(c
> z=lUgN{k)KBug5a<@m~JKqFZ+;xb1^%kq^5 at fH=*is%;Naz at kSdj0;bp{_C}-W6K<;
> zNbI`G$KuW1TPOIBv~C3*sv+}Lj6_n8Liyv%eD2mIQ}7cJi(kYTbOISAUtweCIM7qD
> z%w)#(K7s>ZvS5+A44uu4FidKL=5CsI$Ufh#mF`RWNY;O2k(Npf<m)Fq*x3&GgGUaQ
> z$Rxi57R&X7xMd%JJM%PY;uU}H^9}ixr_v62nBK)|chNga#UcKaX4N at u4rKk`2;E12
> z4)V*ARqpjcK5H8j!|}3yaO$(C%JtT0z$WxCL-r`De-M#%UeL%Kfi;C`@@btye4oOA
> zrL(8tZ+>%P>rBX>yN<)?1LP;ex>Akx?*Q-m=Fj at h4}R32FB+K8Pv!o|t8dTW!$RqO
> zB3`US{Kw8`7o3kI%fGrsiJltrXU#SC7=Zj6k at jb1)%Jt5+LsSC0;7S8=;QhA`6&LG
> z6Z>=)O;8jTcHQ;Nydq?uQ8}vz-B`)-30xPxX_%^yr*&l0e1`lpo9&tJx7PsabbV39
> zfe0YAuaah`0J5Kql}~5Z)<t6bu+X|&I*7kwN7>r%^<??q#JyaT5B)<y#2e;e$WPsC
> z_AOSa0^ES>FLG?L;D)G7;~p+#|6Vt+kArI;V6R?PF96pyChQZIw at GfMCd;4i7RYup
> zK_7oI^sI#%?w_4~ZEvZXJ}c#3&gx#P at N^I$#Js8I3l$hMPiQ~8I`R*Hv5CRb7jr75
> z1t9&?DX;nHe3Z;5>X7^I>Eq(osSPV2KZn||_pw+TXsWoqC0)4<Z1`9ftYD1d2d;vp
> z!6pf@*p0pC%S!7J-%@<@#kwFe{~Ww8SMRPqvHl*n8uAt3y10)xE#;`v%B6`VWkCL`
> zw7c6})V^Q1?rsR7i^AlW*v5-}L43F`h5zCtGCzNH at 5O`&eSA((;|n3kKP1;?YT;W7
> zvIV!Ub_tCGXXMnSH;beA{9N_D3*I4-*fRl>LWx<({|wX~4Sf_w=HF<4eKIdxACLAh
> z3?ulXjEYwmF3tp<#0Cm%F<^PnR?jl?j}!Kv+`6)2MR_DPM`WwJcn#ubd#1#7B$D|s
> zZ>tgn_q(zUaZn}nbMo!IoLvPe;MAkeuD#1+0H=hz$^$*5A6>bX+o=j8vAN|cn1lo3
> zdwAW+Pt7Cq{dUjW at +Cwc7wMgGY7OL{DLi_j=3Fw68mxGBM=J)z$ifYPq*43Q$-dNa
> zo)e3uR_C`y-9&urI<W3#44J<#{gK*@VCWy<LcBQSALiG-c<b5+Fkcg^TBiC8IJ;Ny
> zZC{7R7ptnLhA(3hFxEAAwcWvE6ZYS1rXK4ZPmcdD!)=^eeD(1i`As%bknf#Qb1?f2
> zD~0RI%4_ at GmQva~mU)VVp!*9-uYRwuy7Lh8 at u#nz(Q|Hs&t>ac`E3O`{;}@Mi~bJR
> zM;>MAsk1}=1+MSX1xJM`mxUVd_~K8%+^E}~?wM$PwmiL7!H+%}dod*Iyvu6)1fSCB
> z{r!9_S$;Uo_Uv)c$06205Bi61-exg;y(=h>7R|l&uB`+3e6Q(d3PpSdy2AsGcm`I#
> zsTyP_BmJv5#WfsyK#rfeGh$8IH|yj3I!Y2YLcWc(X#i8r5GcN at KblEb4Vu#QY%U%|
> z`maxAtUsKVfo&^UajoGF;`>vs^eMe3^P%5VTn_ohe6QDThJ4mD>(*K;&7c^)yz14c
> zng`bJ*{PrFkNDTcWj4Am&cOC;KYggX67jh}=79=+vi=?Y4!yR5e7KrvMet)7Mv8lP
> z(o%RM)p>d<^MKI_t8*<&kbZcMU%U9KJ{^0z|1}41G2-Vh6E>~aBJ)}MO3OcN(#K&l
> z)~Z1MoAb628XB~e)?9 at hErYq>#pw>?<9sX={xd~_^PT}iK6YY-)BbNB+a}uAM`A^G
> z(@JuDD7iVw^*WT_4&Fy~=Pd=l|Hf>9I#-nPBw59y+2R8 at rW+I9`;2dbe{XxIjR)lg
> zcG$k~n6Iey1YaP=lhy7NIlc{8#Zh-kK_5 at 0z4YJ+oPSBo(3g;OT|il|C~=G8y%*p>
> zZ8~5HN9#LHJRO@?mnLEfrnyHM7!0u2bxT}``1vNw>MLngf~5HH#cq+chq&}{!2}xa
> zeK0=*>!htI{mUq!y`NeAKXFl3G$!Z2bwGSu$1ktmdZ%D(w>@#X`J?`1j1PPk*ne3}
> z)(>kB-}0A?`gr>zTb%)B92eis^CT#knZmzrUS8^w@#miXeR;gfX57c}dKaN*_#*Dl
> zI;GmKb`z6eeOOaAq)WUXOX%l7)A8W!Yvl1=pkY8xPR|(M(!F*~&20+KuCw#N4$CIc
> z8KIP6aW at 9M2(~{ztLXg%|MYsr1pjA&*zWD7oX1qh*1yL18anfz?w=xls6QH&SP%KI
> z3^bZPh=Siby`aYGS}k}32l(oaSg>;RZrZaD#P6e~t~Q^08*^efR6e^M$-gt$KY3+3
> z*+0{zSG*NbH^z6pZxLPw`5WrBo?z!X;d3**uz1rrkS;Tnr+ at y#g#4j}pm^8FZ7iJ6
> zVP$?Sl0SBl_JR&MvVU8#VNUyTQDa<>F_}p)gn~Ew$g23B?FIsH{aRHW=4qS*YCbPU
> z at v|0JMn;?8ZS0%h2LHN4WAoE7{ZKJd58el4zNNF5?=Yt^PJj6LaQ;0CULmW!ZtdG*
> zV6TyKr*&Br*cE(msS^!~pYI%gn*Qo$5LP3dSw{15EI%;DPg$be=-W=_pS$<Oq-}vQ
> zuCa2*fi%dcTEzFt<MRhFxJzgLFnbc9r<SZ{|AOKNS=SJS%+zpfS^xcI>(q`;*v|&J
> z)B2_h$^OUrdHGI<?Z$W}Zf;%%`O*5Lwre(i10pKo9jy-Wps4Zi<D+g!{ui6)2ho=W
> zW4l*&tyP+9Fu|u5>1JzICiAbbwe37!YlQnKcIH2a{Ir!D<{WIf5B8~RSp~-31z}3g
> z{Sr$NKRVbZ at 0oZAX1!oT=(cr;@6z!0)8n;dzSPZ7+1H9jc+!!lF|Qy$;Ue?82G<Di
> z)jj%{^vnnly<qTum;vH at b<NVwSrCGW1OYehD#U*g<o>B}iuy*Sg&_80q9MNXnnYh6
> z<SQj?p$qYe1X?S1l!04!K|`Lz4C)lbSNBf0Zx0B;60fLy985v{zQF7mpQhL!qc-(}
> zS<f0n9Okj+HbcIuh2>5+=?HLHMNr^H_+6kO`MfO670r(he~rEG$Qh2kJG)6w_DB8F
> z5Bp5kIZQjn{hQ!4 at 4U#O!}v~{8zt``pK%`J2j${w(3ZY<R)>BHSQc_({Vi)`KlFid
> zJ>Nb?V0T72**LBs`+t7PbX(KrbtM1nD%H=Br*Rms<j$DI9!bHUh$~v at 6g~%`9 at 4j0
> znq>iVZB37rCy at Nnv%lV4ULA(HB?fz*U43}Mei(upv0XLf_Pxb%>Dtm^1N`3SezsMR
> zFH)^t7~t>}n8Nv~_^V`a;i#_SGfOnTd*PhmE3XoQB?Z4-P~(d959^$x7HlH(?|T?l
> zEsQe24>2ZRTnPE$n+_bgzvCr{r{sxs9ghWCuzV~|6~)irBZOQ1)k844pwpK9L5S~n
> zg{mj$D>*)4p;J3vbI1VKUnc9N2>JXl at zXn84R#wmJguS6OVNmd6)xUr{uT2sC*o#g
> zF!tRSGu={({M#cLkwZ(SsDHK+bPwGiZh#*fsy|BTha;APi)vPa0ea3=FBRf|zD7QG
> zaTE=J;|P4o0`t0s$z|HX*ai2O%T`sP_O;ji7$Gyo{j)F1t%66m4e)5E at I@HpZ$AIt
> zrhVlzU<wN!1FyvZiw(P<4;Uc%FR9Ki5a0>I5+8Pj%BLg!EUaUcr)?zbhdSc3r at 4p$
> zUg+4M_Ut|d-<{j`{9PgoC3?8c+{k+kB^%xotJ#S7YTK>ws*889oEF80%g-SGmHP=d
> z1*^&J%OU7J(!^?jQ{u~d-b49Ittoy7WCSR^Co{C2FRuPwzcFSPe_wnvhW}q&521Wf
> z at 7BmY<o{o+yu@#+5QIr{+tIG!HJtEoDIFN!>u7TP+zRfVX?m_t)UAf>4utucfstyF
> zHSJ(V4}aotL at dy|eOsKL55*@1iF?%8)$U*{aJKMZ5AvUD+^dQoEg{E;QQe|S^Iz-Z
> zebyo6HUSjeoV%!hMrQ?xh1=%zvqyu2j0#KILXdx!YR<Mii-loT3vN)|KY{o&0+QE!
> zDImvh*9rr4&UEPGFZxn)NBt=HLVeo}SHG46Hh81=q53$m|3mSH$~!22d$K2bm%!Cv
> zOe}BrF-j at wzqD7SoOLdd<DYFF7LjT_`gonIa40>@--4A(SNJp*0h4_zs+CjY!T$HR
> zuF$PR{{IP6qqBNQC`QFU at 1fvz#7`~LP`@oe_CKq*X5YEl1)n2VZsqO|`9<Dyl)OC~
> zfsCE*AO`n8aS%9baP2b6Z*VxbxNxN3#l$;k#dKF9{xiSb7cAAt{Kt>^yw9}i<42U2
> zU-}C9e)N1t42#}^vNW at P5r<UZ&C?)yY6jAOMy`qd4fZhXg7Mn-J*G(i=0l58?N5{W
> zFs?h=(*)ONl?-H-!uA#SpuD!1`~XhQVY|F{a{^%1GBm#Cht{VSs)iIi+H?=QX5xCE
> zi87Yo7>gg?$*M}ZOmYACUCXw9wKw{N|9rp=`BF37cJ1|Iq=>?a{2c9c at V~u(|Gqv#
> z1ApK6pd~EFp|u~?Z`5;rh&H2rh<$r9t1luD<xl9YT07NIll`Y{xpUSPxV{!*;5eiJ
> z``5y__j at EmUjgcZ8%`s462M6Dh!o?b`gV_E(W8R0$(W{-?e3>7%7lL&Tfe(-;<nMw
> zwdC~?amA0`Z(x4 at fIT>u4((r8%<q6?SUbo_^0$!lhy|wck$gR(C_a2QcYcC=&RwjH
> zca^9uzG;Hbs1_4*s*lWf6Rv%34A&Q&8{X1%!u-$Xt8zsfN4voedk~){5Ccj}d`f7F
> zQGEU+L5JT|Eec~f{PGg@(k&DG^LbJSHQUMlKk0*uY(LEZ!}aB+FOcu=A)P(6e+V!d
> zbMhQ`9S5qLv>i?FqV?a@>lz2CgCAfVBD#mt8#hewpZRQzWxhrB|KI(ky~JUDd$d?y
> ziO4_Sp4-o`hw=^__4U+X at q7m4inwQPyMyWzD5Zw?li~f>2an&sz2wsF3I3gZ={HV)
> zBJ*|9A8k1sq>s~doh%lG{4kxm7&h=3oZILexOEdXg=5~R4f{=$|GA at 7nR=}=727kS
> z(pmNL$ONBmQ_bBAQ|vEsS=0sYA^`JC7ObmWp?;)~Shp%E at la0gSu;=-UIX%89pTqo
> z#tw*HK*Y}#S5vZ7_Z4B%#f>&I@(xV!XH=)Jjk`$J|MzR(VwP{v$1N|%`1`(~;LG?e
> zW>DEJqEs(fy+>r|6&S<*js5F4pU}YH=fD1|^_xO$ByNo6M at wSVdN(eN#zxyO2IXR7
> z at ktPoKeSEFth=5 at _CK($j7J*Qk71qOkBIuETaUO{lR-bIP5PcyCz1?KUQ9hQ+a9gI
> z6!?ERqza$EFr$HLSMsF$ujd at NVdh*xj^DDEoOON#?~m{kV$LA$Ul>~XGMmY=4Qzdv
> zRruQLIS7~U)LeY{JJFBeOBNId$}D2v44=Q=7vfWshw5i;QFa7o*OKEO)nNYyHn at KR
> z_39bJEs*~$P_+Mg>3c9Bd25*&V>%dr-uyU!{Q2(V&t- at 2kLhRpIp{yWhyI24KaM>w
> zeEd1z<Im?Ff3EhAZ~pJKumA4Xmo{UO?z;IM6ZYflv41I*q&K!eruj<A1(ZKoCd+re
> zlzt5<e+BOgt0 at jN#*b))Eu7;`!ON@)vQ9m&1{n`_2D8tP1f#ItNc>3i1V2ykqrc-@
> zFKn=}{5e$v;`gQ)@8W$gO5*2A(z~+-7~>x#7K?3y{L(_vc~L_}VASZX9hZA3u%G*s
> z$2_EQg8#gLl};$g3%fRy+LA+y__kXT_<VPh>sRRlq&r!z8RM+Om-|&9U*96sE at a>h
> zkYK7fQyvip7V+0yE85jG!9Q+M9#~xJg{?o;DAwhG^79>QZBjdFBuMgqORLED at HWOf
> z5>L@>hJ5;@mRk&uLc!ojwcVSwp`f?=jDFqyHxqneYSVe~mR?xQb{-HEf%w)^#}k<h
> z$$T44$sInv#&~Gv8Q*7DDY#+pb-n(jVL*PXw(0e}P%waLDGhyTNBj#Bk#U39u!57}
> zt2a065bux8Uu>hQb^Z9s@!>j$*}J+tjq%)VV&S at wulp(XQpdqYuqY$;>!q-GprTqh
> z|6ViVd%bO at mbLfBgnH8z-bEq)jz{!tdEI1wjAfgk-dV_BCcI at B@_mw1e3xs#0MUkb
> z&Fru!;MZ->>LQNTcOtHexJE_$VuD7h+VsXK|DRz$*s^^tx&Fsdb&=geTVveF?cQ46
> z>lFMntjqMjKMYpdKgbTtdI;9qcsXpJbbq}@5{IDw>~L&l1XjeTV1Q{GggdrE|9{b>
> z<b-b#**~|2+BVGlbO3*<_wf62)3tb={q0NV0-J!?W0i;2sySe0n}F#t7F55w+u8GV
> z_tS@%%O$#PfmgJ#oqLi`6Z~y#0YOI}lH(uKInsL%c531GeDmDp;QHtG;CGZ!`C71t
> z-+$oBXcBO!vR<0J2CdJUbwAIV|2`el$kTOwzh04OUoV2M#yFrU*-hpzkzw at b*WQPh
> zwG^z1GE=~<-3_GGwiJRbE8-YuTHXOSz2~TTx}f^K at I?Okc~Xhk$(SmzX^|{e{$}|(
> zf`3xI{>qXe^7!)Ep{DC$>R#OI#6pi-feQF1T_a`dZLdJEnZvdX<?+C;sCBy^Ey~ZV
> zJ-~W#`^6CKH0DMnTe%vO|NO<C;Md#=w6Q56%b$g>+O at ELFHY5M>@(-O0v>yiCT-`t
> zIM7uRe)f9g9iWrtz);4A<`=3%Ze~s%q1Z*cB5ghnF-)W8$|-_xvzuwp-DtA?^mxB_
> zDAL at E>&@m at Hmp;?Ip}FE#jp+_(k{L|v+E)F9vH#Zl!oSCJO_iRM(7`6!H&t)d`rjX
> zM`QZmVFkXpVdVUO8|xAwe1|5!u%LU*cGh*cNx-=sYRc`Pb;Z{_T8?V)-+lb}Bl$Aa
> zd(JIAkLE80I&39PL-(;yZr97#S|7(u-==RS^#4)tdHxe2vi+ny6 at FFpNfQqrIqGJe
> zxemX3%y^A(%>cL=BBEd}lmz at 7RLW*|p!Q8Y!EBc>Cj>M0Z84~kJAyrvdp*<)`8S>z
> z=x4f<{m&y^<sI%rhWLDqrAOwR$8g$(4L$qlX(>iNE9$(j6oWy|E!W=d>74MNn at k?e
> z&NuVHthUd*e%Is>_V{7#@;b=pUBRHa;3;{1yg8V!d`GS+zPVPeF|}I>H!Kg;)RY+n
> z<twq(jK)PkWyv|K;vtm(ydxXX_Mt8a%jJ7~VvWBE#^*b0KEco2+H|dhgKYm%++teE
> zPDgQ1+Y at 48{YrR8sDIh#yKUgswi=7%ckzF_{mfr0KKwET)z_s~=xLo$3&DI^ygFw0
> zSP^;yg#0!~zls*|kmsi<`LwTj(v5JD9l}>@u2Jx<4#xK{wRC_lQr#C%rWE|`^8b<j
> z{&)YpcR{<u8(ri-J*(^28$b2KQul}}^T(TGZRy?uFQNWR^@IkmOOfLT_C?iFW%Mw9
> zI6B8t^Z|@dxEN<svZyKZ_R~b^tpD;`|6>O5AJ0!7wWWU4cR}&9-C_A#KE6KKE2ixm
> zF0MfF=SIBG*>n%t|H#!ZzAkyj7 at s98bEVK1)~6Y~K2xdN2I|eLIH_*H`dF^8V-B>)
> zzft*Zb2PpR*T=JR!#H=M{P~?&F`apA<n=qY43nKpO$~90^TBUz;rexcqplqf>nqUn
> z{>Z5Aybkatf>Yp3EXt2jo&_<k-yMt%oHgwj`D}n4+;TaFnE%$f#)OnRlKb!a00!1Q
> zL;CoIoiuVggDH5D3CrA!Kq^X5Z5Df~H6z8zd*l9vc4&TG7$>;T at +{ncFUGBQsqjAR
> zok~S2!C$8ouakR|?BBvi_N#9w(#N$QbmzPbqu_#mpY&C)eFoe&GKF3A)4&Ys*U1am
> zdMEsIo7ElOr5)bbnMCTqdb{ITu#?RG%kmh$*}BH;u>pC05y7>ngum1h|DJaBYv~p^
> z6w{pM9DdXR?g+S5?}fXq99bk2tvP_kcg|yZsqyten9$>ay9ouyiSz0Ze7}|u+b&14
> z|8Ey4;aI)O5<k#oUD|v?2w(ZxX-nOV_rM@}nf;Q3slWTzAM~%WkN+3vpZ>33-`3Mr
> zt6{a>ME~ve(fxQl^(rPGnfjzF$O4lH0^EFSF+9TjJMWj1WdGTm=Bs+c#vCt|lpRcX
> zE`j at Ks3a>^y#p$<F3e78uln7;{-A$_ChcWzI^Q;-|JB20&lI0~VTmscy}q0^$5a_-
> zCkjCQOVJ&`J~@hz@*77D9agMcWsZ+5bjjVZKoXCC!=}vorUvXaqHb*doCItuom?-<
> zBmQVvAXA{G7xwb=A#o0Kb1Y at f=y!sDq?e(^k(ZpGF`CW2+H;9Ho;gU(-N`A5YdGF_
> z>YV=y9Ew!*9qo_!-M)X&zU6P$N+0Gy{mVYOE$4cJH`c%@clO0BJ*>HL<%8u=|Fo+(
> z3-28z$A at xrzTF#PHOCX@^I9aq`}1Z}-+M6}_ZmbxUe3J{5(N&eyi}WT4)O2dhb3;N
> zT*Wq9NvP#2=wj at 1x>E>#^X=7Cw`*3D>?h4>VB{8`Ilf&>bcuF>BwkwX^s1!mHQ==a
> zCKZ+;KxO6wSN|@=kN?_WRb$|TwK#FPD=*Z;+;=$n6aK-{ihhxvF*!efB~W^0_Y8BK
> z+38e@$sAdnXGLy+xWXuqV%VbCX7v at gAM$#0?B44M`@in9{9wroPwdp%x4Ob2y4bl6
> z>G}MSub^;sw6vZaKh$V&s`=8H;{_+5mOIas$Axo!wp~xH0ERAiIH~fJfJu6 at XC)iT
> zUs-#O@<d+n!HlA|(HT<oF!llE<pe*VyR0%ghHU?%E9 at hKY0dGKC13VuEtkhLPip2?
> zTy6svoF2Zj;C)W@`A3e_7oqqkcEv2g>?=1hwNDp!&-Bp4c(UgU5d6ZCSqm)m$@vXY
> z!I`ytN6hfe=h_S(*vaE-+Oq5UV12BWn)i&gjTwOUwX|jG#qJ6HjQI83QmVRvQQc~8
> z2+q{SRxQ6IK<GdE38$!kH(7pXC+W(?u>Y<NJ?$10B#)mjf6vkv`vs_QFQRYe9s1k*
> zujN+f{L)GBd7Mmlx6!w2*lCL`jNERz7~h<XvxI#fxSn0n at LGsupEbUFM~WEDabceu
> zPQ{7x_^k at 6j}O=Nfot1G#51Ko1L-H1R++lCOz20e+v!uV`&H~z7suO6uz#tYlD|ao
> zH)rYY$zUey$C|y0=>&~AuI=t}OFaSV=k)%wD|t%5pwKyrn$t~CM&sL0x4LzLFFq%+
> zRr2i>Oj0E!vviv&@xBYeKU5Up>OM&3D-|=8RwkO^eWR(&hVcHC#*ht^*zN#uH*Hw%
> zN~s07z27qF#6cu~{ah^*&+;pni?a6a{^YUxmNEXO?adxlJY at UH3)vR8B*6@?=j}{o
> zijl{gze`a}sRKdcRjXBp$}Ir5il5Gz8dP7j;rVVycK0yM$(!1H`GR8 at XH&N`A%8pN
> z0LG$69^Xx8xhXJ3o8gywzsWyHk;f}Nme+k5EC;3mEJ>+~S3$vElXiJpl%M1f?UD#v
> z5{q>|sNokdG at sB<^~?GlgRjZ*m$X+0bRRIoZ8p1X#k}P32hNR8?hH^<93J}$QRO}O
> z+wF7AegBScNB<)|c-Ph*5UxS%ryPsi>e*FdFxJbATi^NEVM0%tONsnpGkfl-ouA0#
> z*C~F6ZC=+7;g8go9WBX}!-Y2)#3;NN0drQL(Jc<4qg*_)Vw3!&{pSVP&fc;76o<{a
> z6wnc<avY27$IcS`v~@N)3*V9Fcl?11g&f!q;h)6>dDv6saLGp_4Hx(2gO}&-s&N>E
> zf!<9^qv(#H{ZG`)67My``kAP6*RYElO))+3bC(Ie74}N%#C!7mw?zFE!@X)<T)DAw
> zX=%0`9_MP)Of6jvs?LAd at gzP0@Xd_SdwmD>uha57-`<%MiY>h$K+Cn{hkqdWUltG9
> zh~<&jFKz{-IA0pk#iN|DR`o_X{H?OEqQ$X1z|%bQrF`xG{P=3$({<+_wW9jT at JjD<
> zrQ3tBK{b{YAaTsUjpgV2HmKQlJSWEw$6CNGiBCFs5c6QYaEly%WA;1o%u}Oaz(z-e
> zDe}|r=U4uIe&tyG!|&%;5*}O@{C<Ar at 8?(k7|VbB`}_Ho6VI3Y{rpPkAAUc-^7r#A
> zC;Ny0>gQJyPiN;*qyj%=k_GAdjlA2MV=?N3m&zU8$JW=z#&`IfO3MU)^7<Nlu2Zm8
> z_K)XZtHS-Y#-1k}kp?>9gJ-lXVgV0)PMTmBnxC5L1zmL>Nx>ep9_!8Bis~~V2k)KY
> z`O)xcL05Dp at u9vN=-a3%+VJ_&n{x93e2gx9R068smOkxz;cILXmVVJJtFi|1;o}aP
> z+I-0J6VEN(^e_AXllNoKuV;#T2ojiY>+YsP`!jS{g^rjD$75Bk-kb|O5g+>b4|k at J
> zAMWcus62 at epF?Q8adjVn`*FWX+mZ$t;eKjoL(%*wb!6w>s^D1c>w?_F_LH7p138Ne
> zT*>l7eP}C9;={)l)44i!0 at z;Z>59of25x_1GZWpvQ^I9%-xJo~#${C1R<1$q3){`;
> zNdcJ;^&`WS|D%1E!uEw?pSV_%4dUR&E?HU+0epD<Gv0bs|KG<Rkfzz3f_)b{?BjZ7
> z?EcU(`+ at Dt8#)D_c>eOoJiRfyA)YTlJim4B$!t(PqSz2~H37iK*&MOniuPAD*_yHc
> zdvqLTx>DIBB?R%|wqNC6v&izp)8>^yK4IU)^B3TA3Jb4}W`QbZsSy_XWB{M12)CR=
> z`VmfVU7!6u9%E%WNzeTFm-gLvaf;_7K>cUNPvS$hIQ_r&zC5nxsQEu3QD~uLmn~#T
> zmR9F{QnpeQvXxNTLiU}q at 3OCvCHvC8NV+K@N}<wXDM=zCTZrGxxphxZpX<9k&+Ga9
> zUeE94{=w^YZ}<I~J7;FjoS8W at FVpL=`6E+1U8D6CyTHUHzP at Qg-}-j{6;8IFzdTgs
> z1g9V8+lJg0(+~K*+pFM%oSpA*R$0LDvkqRjD9#yvsKooj*cjiO((`g8aa^~)snT*z
> zKh81#_)spsxhLQQTrlzn#>>~6qoX0<{P+4(Qz`11-grJ=_>T4tqq}(_#OdhDl+tic
> zKd{$tQnDBy9;-wEALM8e;^X|{qTz}H%v;Kmq{Y*jY(P8LuaqNdsw+!F$+;4h-;u=}
> zALR4)SvmM1=cbJSA3j$`e4J1HAX#0&@p?5(Qt86lx1$RzIQ@<MTJ2Ms9!7RJo1atH
> z;_?r6W}2TIe6$Y=75vBf5o2Lcf?JIi0?tpLG%u6lbG&VNePjQd9Y*R)!bwP{65^D?
> z>4)`o?ICCW1<W@&^&aL^fPSYT{V<-T`_MP71mt?m at 5fY?*$3W#K6S{n+)Y6LyZ2Ah
> z-c_0JgM0{05%VA9r6?EhQT~yB=rc8Qd1`Y3^)YDmW2t at f;`Y;^y+&*clTdOfHg5T`
> zUtE4bPd9D2E5=8;N~?ko%S!usstI{Z8(j|9Poes3{yXQ-)}b$L?+gkhn``Vgcvq$W
> zD$u{oGF6NZ>#BFH3O?}hp0jE_0k16#-~NH_K=av&(?4r&gJNBmP;x)6yy3UOod19y
> zoR=oX2Rzk~D)<0<r*v6E0p^LnOO8vV8AS)4$C~l at +pu<p^(7>fJhL3^H{&~(AJCt+
> zQ=f_PVSVEtSHXwz at +oCO+0+i?CiiVTwJC8qdUh4xe+?ChLbrl2GFV7GaHR*w2RijP
> z$iatYJaMxMKF&8!>J?A1eb<HTXf{VK>>{WCSpN?5hYSfO%WNLp96g!y2l2N)71NJ$
> z6H^5r_g^R7IGDl%`n&uZoi*md<kfZf`ZlmTKkoAA0P=k0Ed4QSIQ{UwOUt2t6!EIQ
> zK<_@(0R4i`olrhOJpJZ1x=GQ_ou3><H?s|<A(ei|h#J>$+x$xiCDHAS6RqcR`awR`
> zd&-f2q*uK{e{sIdJQyHUe&>mlKbLRNli_Zcw%6tMb6-+=-oUvb#P(TnrgcMhf40*9
> zDIFqbz6|JX at 2?g7L44>hRKImSRRPUH1J_)-@|$XuVm`M&2~(VUq%I64!>Gfa*;VGJ
> z!|yxWMb7*nT;EFhVe at f7K2^@v5<s4#vUfh9U?#vqbN<)bVBq-{=HonE+%;v at InIAr
> z-=Cx9^d|xQ8<p~p_{it0{S}3+?PEqiaF3<)rox~T!sSQz(^I9Jw*tsQhmFhPs`Rf0
> z`5(7ZKK|;%RrrJ3uS3&PiqG*H6HT?j`;5E%OP1dmKRWQv)1&~hbHw;<kC$=!!OSdF
> zlQTaN_#e8l3cfk?-y8I#h~lpJT{DtyA2t9+(enGzM}C+nq`>^a(us?<l-%X`pzqF;
> z<=~@Vw73dB?uUg-UQ at IW-I`yeK4_?S at cOPZ{{0 at WPrgK~=!(Y{rd&SZ=YA{RD3*U@
> zgL at Txv_Gr%ykYhs_H85`wr&3`jWyi=S)bQQtwpO#WP5`z>Ctmpe*h+*z=x#Aa_EP3
> zzc;K3KA4A at Qy0Bv{@cn9;dGMPXycIE96#^&TBk-k!9P4PsZE^;-2MZdCHq#2=?DFa
> zHm!mW@}!%0<}1a0p~C<PMd~GqiWI&NFC#i<()~ToFG5JaWA%ECd&Kzz`mPu$r~fc~
> ziFO8j+}}|?SHp&Dwxf(f-*4-d39+<JsbzVy<6Qn77IYkSrg=DVdY9hpU=*uAWc-2e
> z(*QaA$MZ%13i{FiJPmg3=h9CU{q)ICV(IA-M^=1O<@Ik`TNLi!>=Q^Pt#$EBt;gvH
> zIwjxb at CVlAbC)Xk(_sUswf_f&@oxH&`)*Lio+|Xao>`gr*&~#6s_A8YWWhh!pWU1H
> zi1`nEoBmnC_IEE`pdb0(@wu7+^Nh;e%p|lMc+Vv++`m$9c=+q_rXj at h-eO|6htm)H
> zRKBvD{xGnd7MG;>3he+N<_+tA82Oq`#=)@{!l^$yKXU$rtNH6*>=H!$7bQLluF3Ta
> z>_c{nobwCNKV(Z4d~`P(Wfw91ngw&N7NC3HK#>A};blZ8Cyr3sbw7|aAGJ^6NR|0+
> zAm^4XcZ>Oh^e+c|)K^QOAN4`MjZ}XxCxp at CTe0J@B1Lq>S6_8`-SZ{Eq?m?ycYVj@
> zAHJX7AwY}|Uy`_0&~FF$Fwg9cp<5|CKW_aMMbSHHJcaYW?&J&Q*OCHBsL#Pk?GJPQ
> z10RA6<@9#~zByP{!AHJ7QZ1$+x9aLSku=ZnZ9Si5+&`>2rg(lw-6*o}_^J(xv$^~u
> zoiEOd=?9b#=2h_FK3l|gw_+LxX05xCgn~N?CW-HlB|%4Gyw(MircKA)QOo4?gZ$*I
> z^cUlUeK7A`1s~=_4fGyeO7WcZq1QFq6#9H9)ljEEAG{zw7NB_ZnYD!M?Kvi9wGo#e
> z*xzeEEf(L80R9-Rg!xMNZB4kp33GtA#2VCN`&URoE#~Lyp5XqKscqqwDcd7RGn1|#
> ztrWO^0lr(`cVc|-|ECPEz{mdfa6HOrdnB2{F}TsJkU%;Y_s1B1zU#iMd~5WZ2=b=r
> z#M44`mVadS2XJb7d==w^Ty5V8{rQo8#7F(ru&gOy{G{285E|vv%Rlcer@#Ljd(|2f
> z!pZRAUwW7+bN-<GSbh}a1AAV~sDcmuf^$u_Cb0O-k2*mW`y=<SR!{VNYA`W`9BQ)R
> zYtv^OAM|K-zk1^J1-p8?yn;VC-wMx1Rsl-veEP6?uylRBx&QM~GPkdq at pa-?*uOZf
> z%Ki&_X|}qP7$4;7(}6rGe_8 at Q&IvRe_=D|_!}ab-?SC5;iu^<Q at tRSZqZutBl9H}d
> zj`ZR51D!@)2a54Q{&yPZPPTyGr`rnf--6>jVv4qaay0GgN4oTN2Lok&F8?2IzISq*
> z6+<pt-fDQ>k;@OPFPVE%F8>`=pHD`+v$Z$i!+tPw)MOn2j!9>{pO;gZHwOMseagrO
> z`umt23=1f_M%vz4nA^sR at 9#jr-nSGnK8TB!{WB?l`T#!q|6ak;^Sjfa6sm;BUwdvJ
> zR{3Zr^cG^tbk}ITVe2 at 5Kz=Of6EQx}<v9 at egY+!{d_2EjidGlEy)tRh<_^tF{_60e
> zJ?D at 1m=yI3kD|#Hy%STPe&+b#uR64oBR{~7_HTech at S%Z5YKq7Qq*36d8^%9p2(#k
> zw-;VN)|AVqZGvC&0|f~Q5R_ILUYw48BhxS7?^|Oz^VyL<&noaA0zQ}>gOrBt1+=4U
> z#}`nxy>#XBGe_AnR6RU~e2Vci*!z_8ANkYHL(Cso_l$xn_ at G~HPFuDS&@0?k>mgNv
> z!P(~ZIDa1b*Z92H at +#@6Z1k~U7^ffX&%`3QKZ$&(`U0_h at UlXF(tv*WyMs1MRM`IB
> zJ}-g7=GZl;1?NwI(&5Rwcg2!L=~G|Y8SwcvfO#$QvKSxMC3|!Q{po;@c1?eM9RcT&
> zFMfHOIt at BxKW8EDUlF;uc7sW7H;JS2N!@J+IDddHZ|68MKJX{J2;>v~?~C&<V0&q~
> z&%Tv_=if_pUsBiA;K8ln_S161tqJ>Phm!?ax8A>;&-DxFH2r-*j1Ts$|LCVu`B4RY
> z^xM|#Or|KOM&RF~KCgSDNTobAqI+Ua^>ykJNdlMaPc;3;<rDavs2U{3$NkH>Lcb6n
> zPg at aD$rSy#5{EE)y};tZp3U6<slThozNRxG$uI4|J6`QLKK%X*${}KWus^vY03YP5
> zGvd#I{bl#kWD3i0`IT)L9rh?jJ+Y9-&rezP)Z3F9N$$t~yw~(A=MUJ)fPpb$e8A08
> ztDwI=;KQy`_zCJ7 at tpBqDV(;vr}=sITF#&1f~7- at M@5jY+U{Oi`#C=FzgZnQ{rBMg
> zE(sO<M||A3O#38LjB{*C52Moj0{73IV_n}Cy$d6DX>FeOSj6QM?3-EJPh$FEeb*E~
> ze+F2eNr>M73}>ANS1HWh&euK at MqwPJ_O1?Ge|^pG407HK^EI5-Km3xx`44=!tS#R@
> zbT|a~C?7aK1^GT|ycV<nRt=-5Bb<&FUgz at JZTae=E@|P!?AL|b-*dSC1N3QpF_gQ%
> z<Q~nI;x`2RP*{MC9^n+NLf at h=>iH!XJUGt(T_!K?TB}BoP2Nw8I=XTCVSPueF%sj$
> z`|$-?93T2r{?urBi-No@`l=U3M|tJU=vHO^$f)L8FI84X5+&1R<zct~fqq at PK4N^Z
> ztNJMw_-a5u?!PLB;@J7Fpkp}2=s<60E}yUWo?afA5k at +FucJC4mD3M)e(wZ3x%jFo
> z75qVbjMsdijfJidCpb1Of{waXt6{+=9v?7K_NjHUB!bLaS(-H_h2z7|ols+f7$59^
> zfd=3sF5+XnT=U~qig||Q#4w8bcG8p6Z(h`TQh-%Bxo6+{*D(if-vDR5$29r)!I at J2
> z<9r-Ezx*^$X8P4VAdKqbK;~=Q|NrdqQM<Tv6!|nityJscKhU4ywn&T*`W1CHgX1&5
> zQz?<6fAVrn811=q987}e@^f?exTw>I!^oEzCH)>$*?)omp<m^ke?e|_Rnn#Q2kA$<
> zY*3a$p<e^|pApotn*7+j at oc+$YdBHe{iv+xByJyoKc{uJi|L1bA+vp&lzt7s*FnWC
> zxJsEF+7m`wumc#kpU3jg_j#8bL86ZTK38`Mmrp#urO7$}g4(*2!F(dLpNNlsgVy|H
> zW*;2=LMiH7VTb~Szk`<%-TJadV5j+!<ls0-ZRZkBKk#SUAvyU?ct7n8;N!P70Uzam
> z#*^C=<CG8QhS8nqp2u<g7GLHZ*_{wc)_$@YJf#trAF%T`4_*@U2iA97W)*zIHEfc?
> z<g>x)a9SKU<#FTITz*=GZ_hp45&E0W3{ihoi_;JM?@;Tw7$59I{)P(t#z4O*kiC9!
> zGKKKoN9zOOREIebT>b~@MXI*xA5Q$wJTd53%<)0LX6GIg<AdEUw5x&-X(QjT4 at t~E
> zoPHlkeIa at hrO54P*3#=cT*5<$X7TpU`k(pwf}E5c-5|zCy*pC{AK6~u5=T*P^YX&z
> z>b?E9c)a5MAB^7&ocHllB(dGNe`QLQ^CK+Z#%71b`0&2hwkr6jzp8E1DbAVir5jES
> z>~I6-@)>66H2ciQaB_5z`u!=={;`$kJ8g?oVtkOFkzO$03gt%&_>X>b at z|>jKLqwi
> zo4%VM!p-g5k6x3$HB*luhIRMuoUn!SAMEg2O*!#B;Qz))52W!i#Ap6y?PRHa(+Q^@
> z-P#R3XT;@G_nOJFp)g-b|6b^z#wi>h^haaH4l(^8x9W2NAL+;WSs4FW at -v){fpgxf
> z%b^t0<6b#je$o_t*Ntfm@>87PY at 5sRfqt6{JH_~5mwg*m at CWh1ZHqXnai21`xpx=^
> z;|BQ`MT*Zy{e85s-iymkBT38j2Uky3i4TJwl at _cL<HPUTyb|a~`_KgNaUbxF3!~sy
> z7|vT%Y5x@|q9gvqhvl|s--nU=sf9y+edP8TK9p$qiSdCw!wpk8KJtqMHV`7g>x{L@
> ztMLE%`EKa)-1Tjfu9Eie*JLJ3`;#;I0Xc8rST4qg=eBmaFXg`u(2sJT(@kFhe%>4J
> zmCoW!_wMoh*QCWCipL#{Aor&&d96Nx+aJ&`^~rMl2i#xElBD=eEAUr6&=k;r)3HdU
> zEm-|V0}6D&%ZO^U^lIDdT{wB))4THuC%(Qw)_0S(V)_C9uvrCuGr&jxq?__Lio5R2
> zR~d9s4^*(ml)(dj?Iq<yRDC7n$@cPl&-QWt1HOi)9Q{Q%XW>05{fLi#t@|7;mLEK4
> z at qop#cHH3pVb<6y_NQTfM`kULQ}a%8`r-M*uF9z&fcGV~i45Nh^RuYGqo!*Kz|Vt=
> zlxhm_AH4YbZs<ZLyKcKq-sS8+o0!b$hxIZ$C at 238`&xsAQhb)51vzk6sozq-Jc)K~
> zB?0+lUXRC5);eEv`PC85FB2_|f9~V!3;gM6n=j at +*#CCZ0UzZa^J^GC|F%R+fS)nb
> z{!L8*f)5Ijjv6xlpZcNy_>t{hqUyM;#C;v-573#su|$jy<}EbwHme^n>;m|Z9~pV$
> zy0w4_!s~q-2{6AMUY!30PaS*L4GJTR%I0_2?!@Uwy@~xQ#s~gCe;zMgUyRQ~`0D$y
> zpZbh`HRB8>N9OgoeEytxenP5IBxzh0uB0 at H<D(zq_*0AzcH#WIn=s!KR&fmAqdsi#
> zEMao<{`5_1+F>zBDChsm?|l+g(xXUyd;2k`7i^KmAK-g!pM4YK1OHurSJ033Go9c7
> z85vSSu>j)G{u`qFW at Y_G_52RVkKFt(&~4nUN_`H9KdT?Ws4eEltH*CE<HIvEJwBH`
> z<NSg3UFa1orXQ9?mLC}o^rL)Ye&HnqQs&f4rtElHtSFP85hdehcs&d!D%}q)U9Zje
> zcaXn1CmM<GUx3`|Hu=QrA4Xz-zs}vyeth8ZM4BJ>4y3s-$L99{jz3G)a{GuVhz~UQ
> z&@bMa>lf^UmS>xY@!@yPdhk&yKWc!F at qqTLZ&DjPKXweHko<)sF!vua->2tf`9+Y{
> zwtBa6s^m8Tr`xr0Vtn*}tg7JS{+PKniRB+nECMO4Kb+9G|K{hlASuB#jFj(gG~c at w
> z=RfeL?v+Jid|2PQcT1%7V|*C(WO!J(bYJNmOi_I^ayWl}hs?<uJ at YCtv`cFHcF{DM
> ze1e|d@!2QF2f1D52lJs6;Dz|;zqudFrda>;L at S7<Vfdk#(?3hEh4;=KkwoF*nWM9$
> z^AXto1^jt8T~2>6)VqdnrT7>h#&e6+h;UXnlN%Ah;?T{ea{l*h+iTv?C*d$Z>qDbf
> zR^0vopIvtriRlOXKgIDi$4CABu``w8K67GK5Z%QRc-;StjBwDNU<~=ePIqJc2Xpy>
> zpYL+0ra1lpdUtWdD=9wa7hq22Nwwxt6vd~@iolBc4IY2fT_56~)IEw6td3vZ$CA?z
> zYO{I!4lzFbuEjb9Qv61Mk9?fis+E9tqEpOE3WwkCeJ%L>rWG5u?sRA_AsZ&wo^<&M
> z*Dv6+Q?{J=8$35*R7LzB=SO4RUeRhz0qYOjpH~ym-yPpjlj8d0{(duT^36Gc67nL{
> zrSrU{oIhYEO%BA1=?8vq(W-(E{Vw|)@l_FUzxmKcSqSKY5gNX~Y-l^vrF}*W`CfPC
> zI%5f^AAa|Muskt7{4Sj&$S<H8p?qT9N!w3#1&s5>|EMEK>Hc$nn!leT2mbQsuN?ey
> zau8~Q4v-F&^3RAG+V<Cc7J8S2j8DHGUFav<UqFAa+uj%7F9!RjYz_0*@cX_ne+}Y#
> zlWvX}D|80?c41OoVLv_~fZK=21t~9dhsTnUO12#~cVPXu+5Q6Rf291K7$1&tnvM-!
> z(Jv`j4E6!`-;4V?b{EiId@{_Y?;$*VdIZNGTgTGXXX#C{<@5XD!}K^lkQdTeMcm&B
> zephmxI<72lS0C^(zP)i$3x?mWeFnucwe#n>{r~i9$JpK^oG7f0UE9g!ANF5gwZ39}
> zpg*_>`X?iQ&_7uZ=ijH!kEQ2R=$~BlOxf*I7(d at FCH2ZaLwx4dr^}Dl2XK7&y54v_
> zF+S{HZ=aV-_ZP%R`ya2 at Kw$Mzn}S#!&B{O?-)M0>?S{&vXtMmGa?a5z`KdqoZ{Sz-
> zK2Rq1-!QKF;(MUTfB2Js@~8bB_%HL{(0{1(PgtA-{GUJVU)A?t*hl2n4^-XXaesv8
> zvHiDlf0Wjb@%63DFIUg+1O0OI%Yeu7`{?J&%P&{YZ&v1K|EKv)Sa(@|7W12x`P0h$
> z@}Kf|a`KOI^LIct%RgfL1oKnX^LN$rFO~VJ>iHc|N4fb6z?J2vFh5c~|MI8!dG+`_
> zo<rrux6v+O{2%GZ_%`!PAiq!<->x2C{olrK(Z8*XZ)1G5GJXrsb;tPUpW>6%<742*
> z%8efaj4b|%@v-Xh$v?$Us>go-M{axx_`>32Xn!z%f^v%SrONo#pW*}6;}6IOdFN}8
> ze-__>&)NC9dVB!0Q$suP^F{Um>m;L)t7O*7MP at Ohhv5Dq!TxyQXI{vaGoKXr)=?AY
> zU%<Mym<IDZFm2&A;vtLsPjv~Q>R8_Rh1Wm$>`!a`Ztyj-U-$0YixQ3xd|29Ika&Lq
> zT;E18zXSP$^X2h(3|4<gu|D?W+)z4~<&SuNUtvn%7pp-xh~4|a)7?C+W%L974UJ~v
> z`}OdCy#$!Af%qPPkNegmpGVC88}1LFaLfji&FxRSb at x>_=0JT#mP+55Y5zd~35lw>
> ze*);mUPG8~g7`Bl=<hWCp|pO?B#`1h{P`@;@1N;xyrI)T35kYD&^hiLA8^t(%IVJl
> z?=Ogj`Spmu3-EEhf5+P~zns1(q!@1s@#gWdz+ppOzJ^FhsbHUz-gH at 2{yYeiGhZI?
> z8=nV!eEypI0{%aAtN%0s^{X5COus{RZT at b~fAa-rA1_UpkVOMqY+9zm&M!=UfUUJs
> zH;DNU$LYWW74$!c`5kz?Zv0D^)s3z8PNrkAyuFmy_s((Zcynmqi^SR1u4Bg;_EqUW
> z5p5^tKkn~375K$~k9rm6+e*OwtK2|Bt)O~!YnA+IZQCt_zmL91et6dPU%!>h56F2d
> zzfdtgydPex0{;`>Lw>}eZ+1%o^Hfo}5{kF8%2x9F?acYfr)GD(Ldwh*jO{$lMn*sA
> z*RAJ4Vtk;#zZ>WmuJ32Shx)x+HCwh3 at EjcA97`4FUWxSS#n0D=^Xj#jG3zR+b99hu
> z*L|FRkc%))WwCz(`nAHj0{;u(qu-Ei*^2omP3y$cE$jlGBE{$9`7}+jX~SJz1Bqeo
> z$ITOObNT_l&oWcF_)c9a<o`S1qu$2(Y71B&vN$EO;{F<sKiIViF2CL*m;@f_`k<RW
> zpN|Z5rdjEV at j<TIor!Qox!L&(@F7_1n7>C?z_g?O`+S- at 6f3N`d=^|w8yng*hN!B0
> zC)7~6B;!B$4?d4}i1E?>+XFt at g)o?31O9W*Jd<TC{@h&+`nbUD0%t?+-#%%+sd49$
> zFcPPADn4lo=MU(O+w$vTe6T+zHW#GpD*!&$vnM6BVf9@$JCp at T^Tdpv%l-ecA at RL_
> zY9*5IZ!fNxJA|(<kQWd+MjW4k_ZtPDlj3gye5iZADCAoTXx4O_C<}1;rR|<n1<IBe
> z*0-^C%G|;?0p#K8(KW-h>}33bZ7D%HUrax&%h0}n4}RQMoc|8`uqe*^4MjU08F8&5
> zf5h`s?`LjIoOKHNBi&b0>*mAP7x at 2tRh}3h*7ZX_m`{ZCbq9R-&+A^1I@=%T+>_>!
> z41+m-X?AC=yNW?%<uA>=VHUPB`hm|a-+vS1qx}Ck#qm#p0I68Mr11We=pLbTB4dyu
> zh3CS{h?;!Xy0pnMfMf(TH&T7b=?6WHTl_|h4}8$^sK7S>`XQ|_p_XSFs~>PX7)J4Q
> zbflci=b7*+I*}3K#B*Y_RqnTiGWtOdpSG<fUSFWo*RlfN3h>iUdM3Hu>@Q%RwrErV
> zy_vb;en6Lwl#vhgYj#r{l3JKTy6$VBy}ee93?JmPcJ>Ex{2AVFuXVx|_uWimz=z$+
> zX4(3=i0^oEgPY)v0o=EGGW@!x(d~8~OeP-`>^y8sZpiRK4%K#_7x$ls-=*YrQp*2+
> zfDd+4TYc>kmUjtm`IBzL^6-LIGW<dHi^67SrjS{~wcFRsS|`H?{zrw*7t;@R$#$5p
> z6n_WU2Z%o>hSYS&{ZX=_!yp0gF{}*a_0N*PvdhQY-XviPD;yu?kCfqq{2V<2vrMIY
> z<o^PHUS5Rx?C|;dp at 0wD`GN<!S_1gdE3H>i0dGfaeaiiZ`X+%LihoMT-Ra{u9b7a_
> zh7bDny-ZGh6zGNWS-{69+5&!$Z8aXg?$u1dI+`C(Ql$5^s+ at m&Znt?{OI<?tmG*YL
> zG?U9G=uugcocbBS|8}PW-v;n8zNfsowSecmJ_i#i=D{ZD^Z4hD?K9{1-x5Q*EUmx9
> zzaGa2^3ERi5%VA3_sglkNB*FHsMWkF)887WlPK^HJft=h{tjM7^k?#}V%H^)h`sqK
> z&!>spKfym6E+ at Z_eBU`l${#m4e*qu!<_=pX;C|p{-j3C=?rUyL89d-OvkH_rY%d}v
> z<)59Cm+qGFAK<qId5hN<@Tc2I*SGV06_%e;xzKOAfX@}mwb(t>8=>uG`17Bv`jniX
> zO=g*;dfL9;K=9Y0{|xjP?28u9uYu1)Rr^Zmp9k?7_`A<H2QL%A>IaQ$X)CN<a^lyv
> zVa;UtOI#DJJNT!NjGvFc_^T~J`n?bz{$D(xx!C at IUX(u6W%@ft(#668<h|oalR3;j
> ztiR>*H+~C@`x~GA8=q!k at HbBX`~Nl{hO+zDe1B2dUpqUf=T#!HdC|hZ>jJcIY(5m&
> z#n at W)#Qp>9 at 9&1`xk>j&m=6wrr=FzRL%@Be^Yc$sp9RP`e(rbAB|-ILiNoxGLQRi7
> zGJLR;*{|P<_b+f~2Ws?l!}#`TZzBr}IDTbxns-PT^HF7B6Wb#K*l&1o{KTVMO-CIF
> zB};OL-|)yfD#M3AN*i}sOh4?uM!h>o>2IcO0du-))O+r91oC%IEgSSd^4C5yf&6Qq
> z{#m^=w!jW9JpOhqJ4 at -Q3fwRFw!c+_wg+YM339HIW+#r%fIp?{l*Rnp&fYNJ9P0li
> zuR{h1- at z@6cg>^Mu{}%)&yPGCVd&q-MM8=fKmU?#JXeMfYFT^SGjV(a&M)=%!+dQx
> zKdLSPd^~^YoNCI>*WOCdnSUlUI8fyNVQhiTy!tUor1#=cdKPz%%kV)zlLHdP=OfUs
> zsR!Rm<5x-$AA`ShziQi+<*!Sx<x?eZEMRRyrTjIbiAmPulhcxjan6s+t>b-V_;7wP
> z^HLG}hw%QXnkCZwlp5e;Ui?X>7CW~`{LH7%?BD|VE{?x*tX0R=J}IP2k%7NQOKyL_
> zpDgHiLyQl6xz_;jk-m8_zZj0~8PnGEVE*T?Z#9H0Jl;`WznAnv$#q1NJLFWW;Z7M6
> zHvfp(PlzuK)RJ>Q8eqLr3Z(cg0UzQG$JX`h&+bp at 9<L>ML3AMdBacri)X-ei$oU${
> zdpKt3&b|RM{s2zNuXHi}=qI0s`Qxzu!{46}u>VhBsKYV=j}@vLf76y&-#EP~h3~`5
> zh|bC_GcP=Mht!ogb*!((&ZmriShld=^~LrR>}u%L*HZfRfPS$1i$*qIjdc}g7j#zt
> zYd;xZ|JqN+hJV7p!+NRqtN8w2N5?U-<n%4FDRx)J$Lsw32y!kre*y1j?UG346Z02v
> zs`lJ)*oM{br3U{N#s4ew7uDnQ=s)~d at qhgMUy09y{g)fx2ECQV=P~|_dR#R=|F6bZ
> zG5&_}XRxDk<Ewv)e^!rA!q?@-KY{<U_-fVoC)N>TeDz<Ak0Je)@k5Ni{de)P%J|j4
> z8Xp6BX7MY$Z}UHlZ~T|>6W|kzZ&Z(;{Ih!V_j|~Jzjn8JebJxlf53kIsXphwtS<t6
> z`-l3;|80E;JeSqapr4ENA$Xp|`p?SxlRwpORId*K9J%!mAOx&F1oaE+AF9`fRIeYX
> ztpBf`-v|FkZv6np<+1(&^DS6EUp>G7R}cT+>LFqGJ9vI`<N=|^>w~9B&YkRd&;8S7
> z{xifM`l~yN=lg&>HaK^D8tcC_0_Jx^{!t_Rx}JddwAOdYVttZo`ttnOvZy9g2dwcU
> z<6m`aRHqI1|6$*rxPFfTJ4Z-mLiR8HacmlU-v;m@{{P)<+gM>1Y>@R<Wz(bY&m>s)
> z<@0lYwDR~IsC9w_zOV7j|KL0s{cujX7M&rU{{rWZD7_<6d^^C0{*d+B at AqK+H@bfR
> zKvP+Pks_5+V?;X!&h(F4w~sh2IYcHIu=;%F|ATxF)@UuBuL18bQQ0rW9}4(*ufrlr
> zf#om4LPDkI$JGil{8Lxo*K}Whlo(rOIp{3eAfq4l at pAV#F+T7uRr3I+AMHfZ$yx&5
> z3UZ9PLa}|0_g=ofaX#wdW#i(=0O!I1L&Dhn7e+tu$1+GkJih~ew~NYNDSj%<ABVir
> zyUyPUtFJiftRWaEUu-_sm7lNgw$r(EB;_0_J>MW|d<f?c at Y!%|KQTV|MYV!9Nb$D<
> zf8cz*dDCnY0q-#<%y>x$LwkuY6M6p2X7g-|@Y**>>;X%Oap4IWe}I0Ejo-!Rci_Ly
> zLzo|m>zo)QV1533E48TtmbL7S)DZCY5nQd1@!z^;?6;}Wfke|r;a9y!tbVfceA>_~
> zQ;ZLGFTrNYG*(|!!%wil>$4?qy0dfLu;jNC>-0aL<^1tU8<kM&O%RckWi^J5Ff#hl
> z5A+->&W}KR;Pww!DSvbTAC`Ag*RT#OuBW3 at B<<sC%JZ|I_B_+5`7M$>t&^BKr4^Td
> z;B&}v9dY~to?A3x at -!Bg><IXv&v{LDxMO}w{hanEdJ)T8EVX6)QFDsAaOKDy(yRLc
> zx2V_tGWvo4HmP;R=WC!}`IeoO{`(hL{J|jAd8&YYcCR=3NXhc`PBlLA^Gm-q{WSgh
> zg_7S(Zp=4~2$bQ2|9}7288Q7pudQ<jDSjf%Zv{JLXk}r@>T|ND7EtWo*wTi}Pvi at q
> zqwdb}B>0ZW!H at YoJ_Gxs|2;YP-$8yNm$sMUCjdU2x6b(8au at Lah}N$Ul%-F at TFdzJ
> zDxmutRfuosMjUG7?i4MfALMV!W;y*if!uj at bf+`>mI3%6KSw&$Tg2}7mAb!|%6~5J
> zkFhFh;NsL?XG#C&HMgbvas7pL>^5bEI6e&Yk4dZGPY&Q?{<Qpqh9H4+quaSq%IfRR
> zDaz<KwosgJs(O|rEa);N`1cGM{lMphZ_Z+T)ZZtYrZW2T0U!J8y7efL_8q<(McaVD
> z>gsa(T at FPUZoYnoT#D8;c^A7vh7a_AxgsZi4tz6>{W68&=K?;~t-iag!Sc(R=OZfW
> zi+Fut->A{<r!3Es^q7<NM?16pBhz1?KfP~bx$&6=%JZc7g at BLuzj|-XXLWU_!h$L5
> z2mOrS9}Em}Y<lHKB)QkIq=jP?*DnRIlg=x|_#n6YH~(;F^#2BYuov#9$8;31KTNma
> zpVIq-d$@ci#QyZ$8y7{=w!i4(){yfb^ecb)axp%}=k0b&@moNC0r8DSc4zxza#C$U
> zTA#-GbH$>^#^Hq_B&bsxow!xpeuBEMP+TO&2fb*#TUUy2Rgu4#RnVICzg-#rj6%8E
> z at CfHlGWpRQ^CrINOD5U=O4Z8xGq-Pmb7|mdvHZaMpHHW;{DN0qu+PA+aOE0itUuVi
> zxrNgHKTbTpI at Y?)vPj<$a{2Y>p`mro%H#*_yP=%^>KMP(Tkpo~|K+EG1r$@%YGKm@
> z>x+H|KibW@$7YxD^?m78=T(d2fn>Lm%H5 at 3IRDX(#oZRuk9K=5k>*Ew1Am~N@%BVt
> zGq%1d{fp_$S3k~u&}bp!&+(vj*C+joBQM^0-}86^_v925df at y)_}#Be{l)eZ_+vf@
> z=1aogDI|<HK|5WycjhJm`ZU)xf4)g*G1k at eSwlk^{`j3K_J{H$WV`Jy^&@@n%kV)7
> zTgL4d(+{vs96Nckx at Y?!6R7{uFvv;s!TwjHjN*q0tUY-$uW#`f{H=$lZxZnuaB^n$
> ziD1NUjr4<^xoK at 7w$ET6_Sp6DWcMTTpO|1BO8su>`-HwJuV0Ut<MVHie`1~En^az3
> zRGy)lqivo=u6H}WR$G_tFFrV55BNXOc!YSq9?-A9v#lr7tIaP=@P4=QkXRo9?8H#h
> zjJ-lwY5AkY=i15mA6>pqV`KZ<P at kswqTHCphZ#QbXXhSmas4pZrGD$RrTp&<_+US;
> zn}3`u9PN|x+S;>^a09Qmp5^ti^JWeRU3lmadH&_g1a;+8$bU9}5cs-&dowXU$WPk1
> z=d+pom;{=z{tR;pGFbiF!P8q=9}f2d9{=xsYKB?Xu{dJ#Br7Q90;_Lf`0yNs*7e2y
> z3FzI79(hvye3);D_4(v%7VFRXE_N5ie&T))d41sT2P=|d@*k1A8m;f`HP|JiAK(|y
> z^c2$%?@LZUoz3*OWn)w9kMwZM+L_G$<oW)fYOKEmuW#w$;HzS<okn(zKk((XcdQH_
> z_><=)r at jdGUk6FjY*ruDd5Eb6l$W~R>f|Hf9D_L)I{$Y0M85uw!~8i8g>}T9PkK?t
> zCdj|MxA%6x at +yO<YCQh#xHk>g*RK%ji(nmtBUZ`XztU!Ym)>u3zh!Iz)#e=|=I_D$
> zluJnZ4gvdJF5S~jhM#!jXteL7dnCwx<c6tb$%xP9-@*Ui?lchFPuLd*nb}T~+UEpg
> zi@~4(?Qa;d{#5<fH59O)Y3^KW8UCve8%NZwpHJo~-x`rIDqV&T_Q5z`O-w)NS2G8f
> zNz8sKIGEr$`&Y|%UXb74(pW*$S$a>UP)mm2-R0n8-9<@6&Em-97Z;`ah4T&Jd!vio
> z#Q3l;Xt)WJ82?s7{U$hwsypmwp#QLboW1scy!`uN`<WRnW&Cl=4)@nJ&LBNX4a=`S
> zliFwG5BOKA6AQ%qFUZMv^D`5f{cqmU1nbXNHNU<a?_V$VnX^M+`Q-pEKegYy9%}#N
> zIl1pp=T^*3W`8Q>$K_OknE&XXCwscE^({MShIGvD?lBwdGv9?283;8%@SwxBjDD3+
> ztMC_19*|2{nr<#z#m+AbAJ2C^o{RC}+b*5zIx+clb~VHLcD-?@=d$z5C4)`^G)MYz
> z&VbkNT at 7xt`Q(&DlDgK+-DdY1nS25tiq?dS at qzw>y5{2;ev at lv*gtB5_4ujipSO13
> ztRb}idPrrk1NR>`{JwhPeZ&J&)_>M*ZL7sHeAuUk*2)y)ga78#wDnkq-wW`;8YG#&
> z8qM;v#h#4>>?a%3L|?|Aqt?UM9l0D&JoL9dj&zmQAL9CgoOjlhgAc!JNU**X|JzYB
> zi{-O6Ik^7NWBoG+2pt60zp)<IubTVYy&I8#n?!hfJh-*SOGZDe+tk+M<=cn&v at wi+
> zdp&dPzuHYX#}nflz1n*i2yDDSKO-6arQgC+G8eocDbw<QEjq>GKWu%0&eM*CV*a4q
> zjy>nd<mY!^bL^kCtz^kkjL&SGyy at _Ny#6|Lh5;d3-2SJXeHhgD>J#!T!_D5m)*a;k
> zFkD}-lW#756Y~e;QztT9%AXp3{qTP1(a$P-kpFuYgtZbbLjM1J=dLpT+YD6G|DpSo
> zY-!x+>*IE;KAho$e0DXyCdSvyvYu*I>dE|v4?Fs!e`TXwdnfi^(z`s%TgrbgE}zfy
> zEXE8ynnUdTO3KdfXYm1=CAB|;cI%7n5B$F8zcw=e&`DvSCDvCoZXUE5;~UpAN30T9
> zf4{|?e!Ca1*Pc0;OS)`zKKIRAg8XTX`0)RMrESFYqh9yWoQZLtS-V$SV*eRQ*a%NH
> zUq&db_ivXUmLHjIL4iJa8PT$Y$+a&hrI7)fzG at lYeu(rl{s5gl4YrEuhx5>f-kvj<
> ze&y{G at c#9vhBrL$eo9l-wSE5W^fR*mgY#%*IDVuhKfkCR at b9PTew*0bu^)S4W}HlZ
> zz at FIdJt98e!MSPCeaQ?aKlMMc`0c3S`ws}vXQ<bU*8l$V-G4g&55w-*IhprYX*V}+
> z;f at aRWI^YXQ?~3mhx}*pE8O4Z#c#pRTr0 at o@oh*q8tl8X3GWY<%sHtg{3$+DJw6G~
> zksH6Nj89^G1>+}`@yW{gN%i_SHzgC@^(LvJ`ZsnCl~Z4e=kBWYtCjVomG!GvpncJJ
> z<t|jZ&PH^9AEmG|^M_UIuh{)f;6sxpg4jO5b6NcrJ|F8(s at GpFNB_JjzaJFunwH$C
> z#$&R}TvK^bW)Sk<WxEMM``)L~PVxB{?2o!`;XG!467#!2|MM9!#XomL{MJh4cj|6d
> zr*>ljx6fM-mzZ{c_JCLqc)lbw82Ug|-~)aB at g-vV;kliAUz^AFcXjQq=zlieudoy6
> zugz<*#qqCwV}kML^P^O5{(k=dD<7o&$-7hO?=zyU>+QE&e>I={tgUi>+t%x-UnLzO
> zz6buz!t~YR{2hL8-!ZBG_T;xAp1=GY=1mk}PS;C?ev|*|7h~+7^#}XF`F`Q|i+wbv
> z*w=l0i+tUBzVK1Ioyh+b<UjZi9V|ME^Y6g#i=$1X@$GNTdSRX2@*wxo0>sg$ZprD!
> z@>K0(czv&1`q)9a9qy2R13!I at FJ=29!-wyUHn9=M4`JVWvBt=g)t?0HWcaPMojlom
> zSeG}-f7kcFS>Kn~UQUO{A7W0t>y&vsfn>k4GBwIc#PyX_#LwSHZWr&5 at cDCPb5GQ(
> zdyT*MvVdy9d!8ewv-<Nvz8V$%o%s5W>~ijgc4#6wcrvH<=lx867(T?WQXU73>j%Jp
> z*uO%M;(L4a#`=G~(p_^{|0n~~AC$FsI?|T1p9$v+^?SyG5crVfj_?0CrZ5cYXZZ^}
> zKYlY6pTFR_%6HAA^7){y3C77<EHvGV at qwDxoBIfo#N$?B^Z5PQ2HKfTu3d>HoqT(@
> q+qlC=h7bGri3f7}8^H4=+Zsyo^_5M~P9=vs*bDHx!rwGD5dIJU7PkWc
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-node/testnode b/tests/resources/source/pve2-node/testnode
> new file mode 100644
> index 0000000000000000000000000000000000000000..9da2327e267563690d2b69a05b976c1870e91836
> GIT binary patch
> literal 81008
> zcmeF4cOX~a|M-ofP)1awl#EKUXL8T$N<$?j8d8Le3fUs0ffgkiMzRuRkL(>OWF!&F
> zj1WmF$?sgn(dYX9-rtY+_^w`mbn_aI`@GNdJkRqy&-1+J?%cVaN>o%-g6ii>gg>W9
> zNr*>_>F3`JKaUFIU-*lUN6mEgb!`lPp>CvTY*hZ`9V#ljfBE~zpF^WlzWtwg^O&xk
> zp1Jj}U;HP|OFAhO;h#9Kv6-!|vDH6+y~hlWS(#bs9-VyVf8u)Kd95uC^e3P8AJMa=
> zt*-gMUhqG0y~KI{^@9J2^IDjhS^ZaBFLB=git9BsurfCN#j2>N)+_Jatobhv>#z1#
> z at VsW$|I&Z|iStr4m3LA|-k6GN!%rPh|Duc6*e`$ni9i16yi0yz|8wU}{4YB1Gn&aK
> z{^zb&NAT}C?>5Sw$>53q|J`==N9X;!?COus`*+#ZAD#E_va3Hj at 84xtPVFv66UGGp
> zBeq6Pdh*}@|NrCQ|Nr?Pe=08d$KOHUZ~*B4)BB(38Zl7`Q3-KTNm*GLF)>N;{{Z7U
> zy2tu;!N{NX&!THYMa3nh#igWW#6;!9q~#<hrVhWHS<^{Oqi1gTpFW?MgrumPjEty^
> zsHp5OCm{b(_r>!RPJa8}dq+%MTv8UEO-@?kKT_p5 at bOCqmp^?z(Q(>8bo{5!CoLl@
> zB`Pf{Dhajv2bcIvNGAMG>r+fhQchY at N={Tt?vL6p=lYg2fBt-ulHy|060&kKQh#uH
> zR8;<$5akcQ^ao!Mmz02~larPD13y#x^y$-AvV-6caR14Vr$5hT^l~UY8%q0Aj&aWT
> z at jrQb(${4FGG6M)&b?K^u|NIPxLo5$(ux1 at jjs!G58E5-|7ARQ!k}7N?5CZM%Qb%d
> zLvcu7(9qCWT;Qtkm+^i*!MI%G$6r7F_x~E_j357fLSsXNwo<m<UwXZ&4ESHhI~G($
> z=jzxAeq7o3b&enZ{p-z0hcCtC3Er7^J032vR`~h%zt0Og*s_0ggcb~%oe at 8wHRA`z
> z#eCYl9}<lBUs>?c&Sb6Cx6WzD2~IP)D;?LwW91=b9s)-aFsA0<<K<iZr_K8wYOiT8
> zsE;i=SoMy_ajYNrvfEn!Z0~<xfAAOM{deqG`gH56c`26D=E3%iX!BLT-}m;~xFn4C
> z<7vtDkNjx;`t at 7w1^uRdy)(693pI1}a9dm3-S1&PhU41B)n#_m=D~~3+4!^n?tsU$
> z?{>&a;WE=6m%XDtS+#%s0Pa-L$@|o^P%iRk?>YbU6PT`Ym0w8fy~<1nZ40(I9cL&5
> z8CKp4XC#_Vn<qN7iT6wyEl}dj6h30j^n=qEJZ&D;*bDXFXGy!wN`@9so2R~fIn at RE
> z1niq`<iQHrRIGKT*}cGm%4zps+hGf?_lEjdLSL6gS~1aoL2q4f#GkR3U;3}D?QOyD
> zVbhOOJyaKM=*m;Tqaq_|_CERV-+!YbSLu8dE}ypkuCuijUn|nXB_t%O9v0}~a6HzS
> zXLo<vypDT0Te*Ms-^K8lJGjCzs9ks3{kJ}_O#jL9ufQvBaK*=*H()t0Z}2i<;c4>*
> z{oGS;ZEXi{POwK8b!GkO{u_M6Pize})qmUmJ34>a!OZP(e_8+S9&BsgrS#vo|AsGB
> z4KqLcf2aQ*p$$;gF8}NLuSdyT_4$8c|DEHfVCHAu@|X4BYL2C!_jHs^^k42;>x at Fz
> zr{L_|A0ywt`>&Jt#{CQJzF}-7Z;$Pb>i;pWRZ~%>%lmPDH2xOjb4{LiJ55`@!Z^Ww
> zmS<zI9o_S{UWkpv9>t}J-$)mlHcv3dt#+yKK8$rJ(mt?iBNiE{`cA8LrqXn;_nk^b
> z>d*Oa4so0*c=sA8rJgo#ol?9`?oC<z at ZrM@Y-w^6<Ir^F`;YA5uj1J$E2gg&Sv~FR
> z4IkOBzM)8;xZcC<q561 at IVIo$|Lke=v>$ZmybPm^=}kBV9 at 8r#BG at Y^=cd^|1pPkg
> zt6uvI0;QiBD=kO{-g{2E#Zh9X&Evk2DeR)31_B^2L_7}sXrJlNr+??K2n|kOfAGiS
> z@$)3k^m)JYSAV)asQxGAuM7ysb$B))u6jDJLytv#za3)wHGf4lK7LMzNc?8}_p-oL
> zFX*cCNXoS5tF(K2tOR+}C-PT?uP9k*Hw~uEJNEME;Fl)D$@!~E{cl>=JO2BzBb>LY
> z#J`^YymdTpHGZ6yME~HAh<PhB%s)-{l&q|*SCn#5{)*u2{2BjFmr3NUh~E-NS~$>o
> zba765zDo2i!PhL5@%$CN{IQ?`j%Q%HvW at 4h#*gPII&IH*nWxQD%#Wr at -Ocvv{CA at N
> zO;<|Pf1SQcmoV0(PrJW`4zI4QR(&!t|DCgQ=iYGZ3)AMs>8_Xi=4&`9e>HjhoYwXJ
> z(tqLl!1AV{>G$7TH*db&{q29w{1 at h*^+#deX<C|tKZ1U0u1yJ={}P-((|@7<Ztk5l
> z|NRCBsBQ0frrm$FJ at Yj3vbIph^H;=Zx8rg at Amp6R3*4P!l_kSY8P8w++5T%Qy1hD^
> zmE(8+olax?_|0G1f1$gdyL;sSPX8tR760 at 9yZv{B2!Oferk&4;p-O$Rf0hvVC4U9S
> z-#?e%K;!Qs<+vR6%U#%XdDo at slE190n#f=EQ*A%0+Lt$N-s~K0!8t716ZtFH1#^hJ
> z({$w<|NZz8jz=usk?W?-gX^CQ7gE;!kI7%b^`4W%Fz+;7{lWQul2IqhU%~#oH%ADr
> z+fFmz1bNR-m!td at FE4Mig_^^(^G%7TRBbi5T`A-FD;PfS4skP>HqSF}Fv5BjD`h-?
> zHRHz^Kqde4$oKOo_w&g4^Eh6&{IBn?`1$#opU2RZ9ELoKRN%*-vLIc*k#}2jEJl6s
> zQn{o1*t~OWyn%6|Wr9CBPK5djw)$C5L*x-W+~F%C4Rk_9Xj#Mpo_Pv41iPpw_~Y~A
> z2d&3?bGPadaq$=*a`4_uWIi!p(wW4E_R~P$Moocn&fuopd~o&P>Mw;?XHD>>PrF|D
> z8k>ZrUo^|AtU-KOFVNKHL*~QxKX3XMet^k)K-9}I#XSTG%(r!SQ_)ZGJFG%S%!T8z
> zs#b5#1)hix=fNNDOd&tCuR-NWe4-sUuI>Zu(Hq~SZAk;a<`ZSXc>UR=y0J0+{F>*2
> zTKoB$T+c-4f4qKZyzWP4xR29j=Frdihb$=JGPv&<5{JcQRMl3lLG26M&FD$Nl=_ij
> z%Ks5BFNJ(4_K9mH*&wcU!ImtohhS_vS3f+#?_&>0(`-(`z6%}paXm9uFEif0yrEO@
> zVgI%Nn5Q>pH$0Hf{WkH`+>_a$dPK1y=4t{MD^u9|b%JlQHDmwx=s3)DrLsv%2;#$e
> zdHL5Yvi#7l^2#8eP#3XItV5W~XcnkqmKtH9PyVqUtBLd at oZh-V`+Gdb%5svP`SCC9
> zyYFHqnGf}!89#{+)#B7vLr+OMrMk#yWd at i-Bjh&!B`x^TT(aQ#w(bCt?<v^j$mng1
> z!AO2+Z|sT1Q}P2YPvS#6ixh~MMS<5Vq3%)yi1~RH9n%DVt6ZU>cyubZ`|LR`I!7cw
> zF|YqnH6?$YIpjlJ0->J}^K}fzIoT-COljvBRRE%&t=K=FZ<7U&7kJ7(X->qn1D&1?
> zq#*g>^#vU&BlF>D=`hHL{mho&^S}a|t{pTKIIXD5d0qgHS#Ryr2}J$tnLi7Y(?Ak-
> zua9vwwFmK`eHKSd!H0IfmL2lp=d%dDD4g$9ma$S)7rjlSmahOdGmA6ZaU?%`5RWgN
> zNiybnVBI~|`N;mEpD_-af=~Dds-OBN>I?RLxWI2fy_oW8#eUC2mM;Nuo>QtbC-kpW
> zD4?-ACk0Df*@tOAL-ND+)fX)#>j#eiq3>Znh!}?m`N!vfgx0f1YXQ?(y)457ze2_M
> zjR%y!_kF|jULnLM^pNz7%!l^U^#<}``%n?`SJTNKbFAQ|z<$9S?^^rAzqug)DaOy1
> zyI4L6yOo>oc>6oDAJ|Vl+@`2cA?)h;BtC3bplHrQX@>O<DXX7>)n$r~=d_W2E^cd6
> zeY`0NJ5TK`)(h)$pjhMMi^KW~viz`JS7c1$6Mp#s69Z*@Uh7Ge6R$+_n_A56;nhjP
> z%JWB<hc^GhPiTHl=0hG+;v_yapT`3Z%oI4!?=8zO0WZ34yv|h^o$x<ud~fIEU`bfh
> z`prQ{z9Rd9{b#vR6PXX&x1e?spUBUBiLVFSq20XcE&zn}M>wPLSAqtkTGO74ZKhP*
> zh!I76DCcUoDfqA%g9|6|iM(B at WC4Ixo@b-#Gr{Xw1|O5}Bl&MD30SG9Bw!9(D+~AN
> zA^i~ii;ZOY3A at Rj#3#mIZQgt$El`)^m;p at pM(MfIqxPM<JyI)rPb~J@$#nJJ(@1{!
> zy9bVSWIpV7{nW635#tzPpU^ymEZGYI;pZat(!sC!23a6SZE*fOB?-&qlPlR`f#iqw
> z$tpgD{S)%C{_MX?Am6eM+#Pw`@Iyb*c_1Xk;KAkD$bb5l)--RlNW at f|dR}f}K0Mhz
> z2UOC?^22^B_4%iM2!1`(%u)s>3gH&!>c0U_Lrm#3t;qj8GSn8Wut~zyfciDF^+-QZ
> z%@IQBWIoZp<Mu=FeV~0ZM$DiP<9q#;N&wvi^w3EEGu*_?yBQO)Dm&q4&i4=>w(qw+
> zuug?&&&e;y&l|UYf=_&wrbIJVw^(^N7g!oy>2bu6{qTNlq$@0n#cb5w9rAY|KD2)=
> zr>Xg_ev|Y=48Q7J1AsV>%ic_|07jqr(cdTf*Zw_mj~h#4u`9dwU#fLLeCTFuSWc7W
> zhx$))pTu9s at FHYWLl+=M#jo>H!DY1#W>5AFPVoJQ<*A;r$6^Dzwio)IAU^Ex2lS at k
> z6LFE<Bt9`7zP0ZJgnwAWoi<iyvfuOD1pjWBV(q!I2beNAS&Oel_6aX{sK=cwKcR-h
> zllX-HalZC$%s=FIrvkN0*G<_ at qxk1s^GcS*JP)wTb3fH&S{P2)C)7h}?G*CEc7Lii
> zi4WbwF(cc~vG~nNAO##^*&~-&jQGvPXSCU`!1yru&@%di$p1q*`+S|q^27d>xpopC
> z+7oZ{-Oqp+7X&us07Ckl5*h%14_~t2_ at VM^2U-#_#oG*$TGdEDu)ou!dXV|>M_?7?
> z6XQE!pRRDgRq*@*;$fh*<WVl5A6P%K=nk at fb!$P*yWA<5c5lt1o9Txp^aFnnVyDpm
> z_<9T>9T9(qL%;Uz#K*CE0lkJ?5WdU*<Pg)(I(I1l{0mg&h0<}@p))!`6%0sz`172v
> zQ|Je_%b?It{SbT;H~`GJJ`4)s#3j`?4~(g2lKlF2ok|9eCSfaSUAFjJ|KfkV&tD_!
> z2kOma at W*<T3oqmodMDOzyy3jaKp_XLIYI<jD86E4_WOK?D-kn)YKLvVhUACiRO>8Q
> zM^5Nr@(VU6{@~|&7a!z5f^zq3bOJqM9W^QigpJJ~k$zHG!g%is#baT%CDjSEsDDBK
> zQ2%V=J`;2XD8I^uNqi#QWUucU>tCkx9s+Av?yNbN2K at MiEYK_2MR&D44&&DJrSi{5
> z@<Tgczr=fL`5hsj=&$Rc{6v3Pz3fN-jee92?p$p2O_E1^R_Exmuk91C9*}rSxEI+!
> z{C$l;ESV4G$}#vU|8~eH{Ii6?z}Wop;`ekwL?;}ENdL3-qDC at G<FF*Jn}_)Qko-^&
> z at e)yFKGd7~`bm63 at 6}8_0NO1p>#J1IEYZ#2<$&VD@%3ZhJI-!2X2|{tIa?yhd`RhE
> zH;GT&A9C5C2js(nMMO3SjIWoE>%TAFKilPO0>;Iq^_b-)k{{a7E2l6rANq%NQj_=&
> zaN>Jv&j29iN&S);V5^J=oI;}b4bM0EcGM^ybGS9jJ#h=tKQwFA^8sW&Y?rcyllZVc
> zQF_JmPhcmEf1dQ^fU$`NK=vueaO}$3(O8T_cGs5DIK+qJsRZ>D_6gtjW17S#)-fr@
> zZ^2$T4;URt0U~_c?#T|L{6_eZ;{57Yu~?2l^mVJNh)?)MFKe>=Q2%1IllX-G1LeBL
> z>J2w8Ndeo({68HS*Z-Rj at -)g82^hb%cwy2y)V>hU#%M?86aD(r&-?>npK$v1u&Zte
> zz-c`D<*zva28YkZa?$*><}>$KHuqS}`hDNbQzJ-zf>Ys0<`eTH;yw&QK7tSZth<hX
> z7q|rPdx(FU3{=!t!5IM3&$)-Q+ZEMfF#ZGey7_d-Kfv}4RG)%R%xeZ9ANGR;g8u?e
> zP<QTl3!psf3sO^nmj2qN?U!f(aeiWaQKGi7+AAD~o$j+ZprnfI6WZa3^#!v0kU!k^
> zQ+_qbC)(*&VHY6gzl)EigQ{)B2uTIT at Q{CW#`=<gjySBb>C(}ePDnrS^Wyna<bUA%
> zIbJ{8m*B(j=b(aC7a*dxh{6;=jAx0b5ML~<W|`&8M9gAF?GBk1#D{t<-aUnXBlPbw
> ziBI&e)Hz+?I1GfA=cj<N>2<{TecrMlTqfLI);tF5;)wRNQ%3rMe(}ub8)W?u<B9zw
> zKH*1e4s?w9e}yy2z`tN=tc4MZ4{4ng*H_MefJqO_gsaX+d?=@z>}@iiuou%we1Yse
> z9~Mb;jm78h#FK$=e8Bs=j}ZTOqy42g<p<cM4^<Z==OX>U_6 at U}!aorCCF4o_l~C~k
> z at oxb!f6sGH0mS*;-I4x%D4tX`JaO1|`=u>4%aQz$b1!ZR`C<F&7*68D at m|AcwCjg|
> zSd#*T#^%4M|FY?R)~Y{~h<ytERAdp3`Y%-Txh275{Sf2({z-gdexZ=^7R-h7?7J6J
> zf#cW!gZ$gzM(>y$nfutQMt<WptC9S$|D<o2f=}pY*Caj>pS*?fA(2+v5Re4;u2s~>
> zYa;&;Y7n-7^FSPym$kGwkp}Uh{yE+~Aj=QCQ}YJMho5T`_D|$zdP)WW5l6hdk^|1d
> zy9jH#5TB#3{~p*IgT0O_JVRZF_)yOegTl#t=mzvfe#%eOzYy{N!t72!<liE`rhuhm
> z1tZA+_-o$Wy5d|MHeMG6xnubUcyx&hCG%mw*t%#EpOD{}t?P%~d`|{niRs+|6o1Zh
> z<hYVED;{%Q at 3z2}8_5s#T%kFI{$cyB8m}iJ<R|i<^L+*Y(Y&ScX{0)}@%tJl-H$jX
> zKkS!N-v0;t-PnC{@cPE;gU0K6#_MsGe!j)HS)B$DpA-Jm at soVs*3<FWq`I>)KD3{A
> z(RpP3!1u at Mq2N(sa{bYG-Ovv{vQJv0;gT<r at tDW_1nI_6)PJFV;tK1h=8yjL&qSRC
> zkw4sHH;+R2|Mh}T!7{>O^P>56QQ(MsuS*j4kx|6_L^RSr5ob<Srv}AVANn!AjLA>L
> zZwG_vD1={@WXJ=*)*H%#&J!or+`gKC>A%0td1=!8o$$kLFUayk`&r%fQ+^^pPjG9M
> z=Td~>K)`dd2=F|e2XCcC_J8~>zIr1=9A at yulKC7p8XqBt-5{FGhy7|@+$26>KV>v2
> z03KBRgkph610UTfA7uYCc2<QB9*xEXJa}jlBoH5tgN#+T$b4uNF3ywqMA%s&ln99S
> zmN1I}R9jfOj_0EM3C;ekuB+`HV*BD2TkJ|k{w=?{ZSJ1(wPSI at n5q5z2cB2Rt3{8n
> zduo>1IPM_tJrhr$r)Vi^-Z{uR3 at pE`3p~w^;^#*xCs!!mNy2hBl-;4vLVS3iR*wBE
> zGM`2Lx+N{-Lu=t<hJ30-sWZ>*s3=)XD_C532SDA^)1q__KTpix<zx4c6fcj(*!DB1
> zUynleIdYn*Q>}r_SM2m|Z)?`W%@1tzC-^V+Z at P7;Ed{KpbroKSMFU*+q8UdVnqM#D
> zy|djWBNjWCeE}1oAp3;VwGs6WGGC|5V!#v1Uyu;YIv4VZ_T<!m0 at 6&j8}1a30jb75
> z&-1?^zA(4lo5EwUSVF=9;fP~Me(1OEUuh!qr6eTsA3?rU|NRw&{<EMrqm4`fN%8`A
> zqEgYoBr$Ym=u<TQ?%W)-{lc>t?8PU(R@!%n at 1nY>R^k(x&r at _<UlsCq+1#ij<manM
> zDh26}0WoV4W{v^<3o|TV(jog)iN8|2z%dR}@@0-svq1dk1qp#q=9BG{kGko8^BX;!
> zSO#Q;{Qh&N+Z}|e!3 at U%lbzuSpiZ~TVmKf1>%5cSv!^9sTIvJOmoy>!af)k=nps7b
> zABM at juCMiQ=+D4n$lo=ilZw*(9q2`Li%JC)0j8vI`=U<d-}L=c4qjW7fblw+`yTf}
> z@^8HTab1lYnGdJC>lK>x at E%cX&Q*|K!}v<s^22+OV=vXeYfmBA;59cV^cxNM(OqN#
> zr6VwkCOjUy^8NAR=oG}4iV at hkIe^R;TDz5_yipH_Y3ELH$d6hV at K~DbGvHdac5B1>
> zR3K2a!i8#5e*W{@z6T6%;<0XT&I6)vk$!4I%$3(<llgL&TSNn){OPa0yX=R2t%b++
> zng>4vp^wYcHk74;=j?|K?pGuGG1)N(ud9g1%<OnO<a!VvhT9>ly2$+05lXT!)IZEN
> z&?G}Xy#IMm(M%4CE0fP+)n!kCE5ov{#Z*W?dTnN0iS~&Yrx&Mqcp}ozz<r~047bSq
> zr#;L#J><(gGuEqs{Qe>Fpx1uf6sR}tM>i_KOb-0x6$-MSED<}Mv!aRE1;r at ClY3GB
> zh3ks_tx9CRjjioQC&+(voSUBD%i)~sifCt1i1v(Kmk;u)+dk3XM112JpBF5<8;?CN
> zwu~PTLwuOFv#Z}k=EM0=m;>ZL*!YI48uGuYw}jCR4S>ZThQ!rG(}8f^C$%I|G`{$m
> z9r^g?TRg_HI_ErFCDM;$rQmWGcQXImX{NAN*uI4Sse=3yI(GTkmNvi**Y(|YWB`%t
> z$sbeNk^ZmQJBuZ%Bw;QulpdP6BR-Fk!AnD1GT&ky13f*o&#YT^nw^l}TRc0?+^7#Y
> zn`Bs3UC#kq?3tO&WIs*#=S>^eG+maD#Wsw at x~1nMK8%Y`-JC*xk9$uv9yaLV*Xw!s
> zX2bE9Qu-n8{6HdTzwFQQ&NvYqcg at mtGWs&X at 9CsjrlA^(B at f21gfSug%Uo{pYQIjF
> zAKL%hcToN%FfL()e78d(D((h}04ALm&s&fP;P{}}IS=KB_cL;vRCdQ==Z|vercBB|
> zd~SdKC^(eNXX`8V<N4tq><Rf}xcBKVvP=Z49{Y!^<4y#&#Vt=<XpsM>KK|azjz1QA
> z#Pc{{UkTFBXk!M~f<!Vub;;R9?NEN`U-Jn0*T?PPKPsC5n38oEH!MyBlKy*2b?njn
> z(YoQrs>4b#SPEmoxvUPvhw^vZJ|XiPzAu$ffP69Q)RPR5zxu)O{PLj$0K at aQiL(;H
> zkzKPdytG38K}y at EQ_?dATYtoClVlm<M;r0kuuL(2!Fj~1+pv9MK0}fT at +*@{7k(Cx
> z2S;XM%&A=oVD7DKrx%aW{Ek<wC-$a$3?`@)db%?M at q^>@P2y&g#}|=W*M`x0JzR)u
> zwk)9^syePb=T#NJIHfX;`A{Oz&3 at M!nThHjSks!Hce%!3W?kDa^4vgt7^Lnm;v at 5!
> z)vq&(K|VY>%z=E3w;Qb*XcIv59QsmhULs)NgpOJp#V2NAl4mv<#bE4#uC&y%kbU;w
> zH)0VHAoDAXX{GMg>EY0h7{~O(TmR*Ic><_}$2G7W)_R|1mHC9$M_6kM?yp)JgYCMp
> z<k+rzNd8gEIp1~5$b9G*j$eX&sJ~rvq5L!!F{$Qt at jyH2uEfob1VGm}f0Nob)PED_
> zFY=-tj=@ZV5?z8E5Fe%$Xe_14{CRz)Yx^NT%U(*1&<~NX>R((1)_gZSQhY2Cyf}Gb
> z^d%RPKevs`uuU=+d$qgA@&X6a&oU*0n7-{~K9R<@fqWwVVTOE7Nw&TRx8uQQn5XHc
> zNd$b$UnQ`-MD-yjqc1NHz8!;oyl{Jq{xZZrk~_cT${sSG4HnF})&AfU`e7pi=w}Jw
> z#qRLj+20eugNHT2$x+BZWR!?0Co0BbYrp7x=$?uAf`J?!pG?SnB2DXAqld$^$rcvK
> zKY31 at dgt8)@YM-AQ2Io`NR^@|cLe!|GfVwimYs;f4*5|TWECR)pEp##D`QXQ+uTTd
> z>I3U#Er(A(CFCdKlTMHbxcs|jmO=f<d+pwTWC!w}E1B1+`>Vuar>tsce`rPgb)DX~
> z#HU!F^4~pgw7*&pAGpAuO~}8 at Sf$WDD}HR<+IM~;n6ss5Thx8T*T|w5SzHPI!+ at TD
> zwJqW+Y}Ib0onrk6PJ<ZBARo4~BhkLAVKq+l(FD*A9p0gj31H at 4h31nu>R&3+xt>)Q
> zW3bBd<@b#aBmKj1_DjQMvVKZLe78P at d{|feo)z+`1=`km9Z3M%-^y#$dJ{lMZ3NqV
> z38eo!!q2?);riq8wmc=SONf7{%R(xAiu at 9^OFL)C_gNesP3T8wXCtj%Dr{F1Ur&xj
> ziC{3nY3X5ZWIxNZm|OyUVll1S&u1Kd>^n9#e{b1a;l(w@`cBNoHzq3}AFk(f&4Ya2
> zBz6i{cp^xK4tf?tBIv9;d~r)C($DslTjLv_#9(C-<zeP4ko>PRZXM+`B<sgedHJ$6
> zkPrQTCZQh-{C-S#O9Gg)f~9c7=LA5-JMzi;HS(YQl!l=A+Gs40H^umAC~9Ah=#4L*
> znUnckvxh#JK|ah2R1oqL``QRW|8ogW0J at -mQ|#bb#3X>?tIgS+j2s-X*s=$_#!L1f
> zKAa{bRJf7(Ay-^tm>{3neuoY6clUH|^_5EjiZIU<%aaIXKGrSnJA?H9&YMSbh&L9C
> z9u*DScm(N(d-jl~+Z5~Lu>WE*Rb%m01v}(Rb4xlmM8^Zqedm{sK>M^*uG3$*0{PF>
> zC>o|Y`(v;JdDpelA0xhk5Z7Kd8?yYL={Xs$R>JYU?UNg!pZ>~ihrCWEfTb`#1nmi+
> z=vC4g$7hItYTk2fv0 at B%WD&nkK^o!*a$K6BcY at 5{;uOcX8uG8)iO=VNd<Gam81Tje
> zYm4WBruhlr>4!Lm5qD(&QoDqyWEaL_I^Pe7N?t_#%1t>7xE;uR_3QQ7_K?3 at k}a0d
> zPhsQA2u^7C+BL8+2l at w&c##!SeaJr#n>dT!pBIab<~%znJE=Yj=9M>e9w+mm;a}^h
> z7 at NO;Ble-#+|J!&;~x*&)`@0Np#5*ZuzZUY2l77>OX3IHVq>u3P4){%C*_Cz>@+PL
> ztjK)09%X9rOb at 4S%D6 at 7=d^lePQ!*0;PT?J#_;Zk;L(kAUoTIT-?+4jonE9j0n4#+
> z&=q}&?9(}})op<RnQyNt`Qb~c9uDh`I~PE{8(iPnt4%#te^~6B4=x?|sNQ)7*+1W<
> zQvTtxIP8E;Q;#$o%Krd{7h3tt$$Z$ZEuxT5_%}j7b74YWqWKN57J4w8ydx8w%4ptq
> zp$^S2&YzGzsbL+D8G3y at 66k~4H&KVN{XQ$1Ur^olDDtTu4$C#<IU#>Up|wANQU!>0
> z67E$w;3<c(x9(DuKR=lk#3Nvoh<TKYt5PQ+{lGlfUI$e&e*;a{%K~`6793|h7eYQ!
> zUvY5H8(<F;b_=@Ff!1eX7)c=hwTw;dAJ!yceRYDRqK1f{K0 at iTzfb1Fypshh<iq%f
> zeG%m6owg6=&8DGnd}Y<99P0z2BUM?uWl{U44=hdg7fi;IzR#JvxEk@<%FmZbJ|^>F
> z-s+49<nz7uyH4l_riJI^$<Ltp!TZMOGH59?i)b}=`Jwo^XwQ(2<hNMt`Qf+9^^?}e
> z;kw7FuyQgV`nT=jkM(dE_RJyb4 at 0lGm|YHk0YY={9eC|f0PgNC5idB7^4rdzMrX=v
> zCt@!HjwlQTq4rgOxTN#S6!l9vGBKuG;C at e09)>dsKJO-aoi7U*D9w)=R}S5(0=Koz
> z<aoVMe6Bj!&pWdr7Sj)*W)`SG{L!UK+lDI1@@qiBCE@*iH82n*>c{H8IGF^gc7u!+
> zaDucb4eV1IvM<&{_Q~GlbRVmX!)EFUh^v1`{KD$C%eSYf at 6};UX5oN*=toV6`i<0~
> z+YffQ*MY0h-&MP3f$)}a4NXrp|CQjaWhpF<$9Cjr_Vv4(P1K)!r<`ltH%0v?%r|>*
> zLq4%yJyzcpdt;mD&DS96Ne{F5*-Y at o=GGdj{Yd_U2~QbyV11Xs+{n1y4M=`y*G2QD
> zs85?$eqQ=JtUn1~lj2P1XEVLd&QL8Hit?-4wNma+!1#WSL_UJZ|BvsVIKJ;8d~+;*
> z7~f}b>}!+$8Q+f&zBRUw-uV7^<NMYr)%JZ<nG`=itEp-7IT4HTDJLs9??w3^xNKIR
> zKaBQY89xP#dkwY?=;1J48(@U_fm1X)j;@DwAtzv9w8<(Om>$@sAao0jFE)JNI=$z{
> zV)u?d;#7N%_;E9}LKA1plk(3JY<*IiAM|jzoPUtWPjW2M$P+J#1N=8F6Ni^ZgPq&X
> z7QJ4K`15u|J<Y&kF_r#SRtaa+f4_uoFP4-b^PkLBA6?r&mVYyz1NpwNeVMJ30KZ_t
> z*Yi7~LDKnJ`7I$Ren<&ph#Z9Dmx}d^3vp4XeXryVJ~GoM^I=|<t>^t%e&Y<0e<rG}
> zbcbVscI-^8KI&+2&A?qx`xT0>;t!6xM}39+`{3L&`FA2dtQQJ7d78{$d9rfjaE~6I
> z5PSs?`nf!N$<yU9zikZ50!Md61FCEHW9c{$Umla{6W55vV&3d-te%Vbu$Ax`;bgwP
> z+r22?t}*>QCi2hOC3lnsq~ic4n(^i}TQu-w+Ip(#CK`X!HF5)ryJIl1B at Ek6H6i^&
> zKeMFo1({FyWr??XI9wLjCG-<EtCHINUOcGqd|P*pDH>e-&f`&a1I4%Yc7s$N{xH7v
> zYE_e+l%F|SDY&3 at fXs*U%J*gMdN^Enzf0twm6HcX&UD0q7TL=!wWp%NNf+wtbq1)u
> z at l<}#o^vzfF{TfmdD6p3e&yxVCo2TW`IDxGhO at b?dN@(;M(|gIUa6O1?|?bnel^M^
> z8 at y+laXT^r)z7F_?Ud+hO~F!kD at eT*LVTFNI`=k~%rEU>-YEw2^DtbFoDcczhCEr0
> z3JjEPp{m!k5#NC1V|DrkpHO|#xxR$sO==G@#+d_dVV_X{g6khS8YyHxTzC7r1 at bd*
> z+1ao`ek;sYeG8pMk*D&uaNwh&{OIT7`@j4?{?-Sff!}uU+YWx)!S8<X+YkKReqfg>
> zwzoVHtzUnOebqY{m4vZ48uTl?G at 6*d2)x at rbGM^7DSm$V$dTjXJbm2uM%t?zvta#0
> z>IbTo{%n**aC>Qfts-D5`uxhxCNzJ^R8gBp`#l!3z3}0>(WLuFVE(Q27_}6MpJ6Yx
> zgTkPX?>e>DaUqN!;5_-!7imU{XB<Zs+m$@<$kMAzl>x<{`>TwaJ}isD9_`5PZDB<D
> z4IAA-&-B%@B>uCx>Wp+W`uOJVwR8-SU(s-1X2a|bAV_s+tFuTFP-1d_tJ8|&L;cI|
> zU&_6W#8^E_&nR6*d{}2vw>6*44_zqr(2q(VUnbmA#RU0^Up~n)Hz$JD`j&4S+ at gU(
> zqt9@}XOw?iU%2^Y_rCksW2r<N8)n4s-SAnwbBN4`_dy&P9M;2OJ~E$}AMwEnFavJ}
> zxX<+2SQ*CW at iQ8+RRJh|etz-t84FsNpFGp<5IX7pyHJ11SJ6Y{`PV{_>9^&R9)7DZ
> zK$MW*R@!v2KYt>4W58S=Ar=j|7~<^;hSB^;JTTeIojVr0dRk-0;@2qtbd>6sur(*g
> z&zUkYhZuYH at SF8KABp+J1~@-e)JOm^gP)Vi1){;46HAg_WTX5;OH1RqRa!~d)-Maf
> z-$)^Tt18RJPgB%a#M at kI<AU)smg)I|h at U+Ug_I;6p`u(9o_%k{o)4gG4d+F-Cun_h
> zt$yD7d2DgmZHt&!Qa2GF>|V0@;5%}BtA3G-D+1R4(5by2Aoy>h(&kX_Zv<zAYh9HO
> zCV}*X72Ee^(tscRSQgZlCVE@$OTbj*ntHe=t&exRpBzc|C-dR_dRZD=|1}o5GvW&Q
> zy}FAygPzW&4CWsD%;sGPB#d%js;oizpCmEu{tT9QY&cHvWbO+jzrPUkoE@%Y{+c{0
> zaeByC6*DpV0Qo!Mvh1c$ufgWXq$5_%55Y#8P${olXnxwvU3FgWMhs@;W#n_Y9P#x7
> zgf2 at Dkog_2&*~Pu(!<S+=Qa}Sr*ahktuzklKon-(W^p8f>d>ACZM#tZ_C#Ibdb+w8
> zOmx#y&7OM1KbLs%b($JE|08~3ZEhi4UxWGWyTtkw<y^_!g#HX*eAg_8lO+*^t^cOW
> zd;r=1*QJkUP%ntZn&<?B68O>l^a$T;^PN+yA1PA&^}S&Jzn({b6S00V7v7IM6Rw{M
> zzzJahZ6dgHPcF%I7V<xJDQ5%PAH-nSx#L(W6cJyBUZi#N6!q<}zDQLN=KnV**$5N)
> zZQ^d1fb0ZtcoC;o99$of%l5eOjt1FJ+1lC_HuK}Lnul9+ngHVOpEdXE+HGY0^eZ-I
> zttivO8KZ7{5c%QZ;kxTI9<AUuu^(z(1{i-Hz_@*m at 4r93Z$5l~EdMjUPyLVYp?}Bs
> zb06P_eSH7)@qN!Xioz8PK9qm<WGR&&iB87WMlBk)zr2AMUvh~3ROa6(R2A@(B>Cq)
> z-*&J%O&{-aKl%BvKLt1AZBH{-j|X9K8}v(HedATOHm38F@?&Yen&tdEQZSK#S(P2n
> zl_&V8WN-33jwX*U(Tf_){8RJ^|5-)wiMxU5jN?JnhwWLJ`=fzK%zdr*X*A%+70Uvx
> zWFggpoe#0MODxL2x+8vdxfRocbZL_OP&~!E$@(}f1Mx6|{7Usxd;P=Xz+=aTw^>bh
> z0p)(o*3$!s|KWvOTPoi}%wlPeSmkEK7b(qsI4eqq#OE*JeER*NKK>?rp^pjVOT)6v
> z{LWa=+ag at 5n|T);2<YvRT#WMDwtE;tYB!}~+9A|~J*yC3;d0Bi?MCGB<>9;n<DhhX
> zJnPISaTmyseyO?g&5d`!2qvWIVIF0R=AP3GZ;*c|v0+HO1fnsw`6mr+u56spe{q(c
> z=lUgN{k)KBug5a<@m~JKqFZ+;xb1^%kq^5 at fH=*is%;Naz at kSdj0;bp{_C}-W6K<;
> zNbI`G$KuW1TPOIBv~C3*sv+}Lj6_n8Liyv%eD2mIQ}7cJi(kYTbOISAUtweCIM7qD
> z%w)#(K7s>ZvS5+A44uu4FidKL=5CsI$Ufh#mF`RWNY;O2k(Npf<m)Fq*x3&GgGUaQ
> z$Rxi57R&X7xMd%JJM%PY;uU}H^9}ixr_v62nBK)|chNga#UcKaX4N at u4rKk`2;E12
> z4)V*ARqpjcK5H8j!|}3yaO$(C%JtT0z$WxCL-r`De-M#%UeL%Kfi;C`@@btye4oOA
> zrL(8tZ+>%P>rBX>yN<)?1LP;ex>Akx?*Q-m=Fj at h4}R32FB+K8Pv!o|t8dTW!$RqO
> zB3`US{Kw8`7o3kI%fGrsiJltrXU#SC7=Zj6k at jb1)%Jt5+LsSC0;7S8=;QhA`6&LG
> z6Z>=)O;8jTcHQ;Nydq?uQ8}vz-B`)-30xPxX_%^yr*&l0e1`lpo9&tJx7PsabbV39
> zfe0YAuaah`0J5Kql}~5Z)<t6bu+X|&I*7kwN7>r%^<??q#JyaT5B)<y#2e;e$WPsC
> z_AOSa0^ES>FLG?L;D)G7;~p+#|6Vt+kArI;V6R?PF96pyChQZIw at GfMCd;4i7RYup
> zK_7oI^sI#%?w_4~ZEvZXJ}c#3&gx#P at N^I$#Js8I3l$hMPiQ~8I`R*Hv5CRb7jr75
> z1t9&?DX;nHe3Z;5>X7^I>Eq(osSPV2KZn||_pw+TXsWoqC0)4<Z1`9ftYD1d2d;vp
> z!6pf@*p0pC%S!7J-%@<@#kwFe{~Ww8SMRPqvHl*n8uAt3y10)xE#;`v%B6`VWkCL`
> zw7c6})V^Q1?rsR7i^AlW*v5-}L43F`h5zCtGCzNH at 5O`&eSA((;|n3kKP1;?YT;W7
> zvIV!Ub_tCGXXMnSH;beA{9N_D3*I4-*fRl>LWx<({|wX~4Sf_w=HF<4eKIdxACLAh
> z3?ulXjEYwmF3tp<#0Cm%F<^PnR?jl?j}!Kv+`6)2MR_DPM`WwJcn#ubd#1#7B$D|s
> zZ>tgn_q(zUaZn}nbMo!IoLvPe;MAkeuD#1+0H=hz$^$*5A6>bX+o=j8vAN|cn1lo3
> zdwAW+Pt7Cq{dUjW at +Cwc7wMgGY7OL{DLi_j=3Fw68mxGBM=J)z$ifYPq*43Q$-dNa
> zo)e3uR_C`y-9&urI<W3#44J<#{gK*@VCWy<LcBQSALiG-c<b5+Fkcg^TBiC8IJ;Ny
> zZC{7R7ptnLhA(3hFxEAAwcWvE6ZYS1rXK4ZPmcdD!)=^eeD(1i`As%bknf#Qb1?f2
> zD~0RI%4_ at GmQva~mU)VVp!*9-uYRwuy7Lh8 at u#nz(Q|Hs&t>ac`E3O`{;}@Mi~bJR
> zM;>MAsk1}=1+MSX1xJM`mxUVd_~K8%+^E}~?wM$PwmiL7!H+%}dod*Iyvu6)1fSCB
> z{r!9_S$;Uo_Uv)c$06205Bi61-exg;y(=h>7R|l&uB`+3e6Q(d3PpSdy2AsGcm`I#
> zsTyP_BmJv5#WfsyK#rfeGh$8IH|yj3I!Y2YLcWc(X#i8r5GcN at KblEb4Vu#QY%U%|
> z`maxAtUsKVfo&^UajoGF;`>vs^eMe3^P%5VTn_ohe6QDThJ4mD>(*K;&7c^)yz14c
> zng`bJ*{PrFkNDTcWj4Am&cOC;KYggX67jh}=79=+vi=?Y4!yR5e7KrvMet)7Mv8lP
> z(o%RM)p>d<^MKI_t8*<&kbZcMU%U9KJ{^0z|1}41G2-Vh6E>~aBJ)}MO3OcN(#K&l
> z)~Z1MoAb628XB~e)?9 at hErYq>#pw>?<9sX={xd~_^PT}iK6YY-)BbNB+a}uAM`A^G
> z(@JuDD7iVw^*WT_4&Fy~=Pd=l|Hf>9I#-nPBw59y+2R8 at rW+I9`;2dbe{XxIjR)lg
> zcG$k~n6Iey1YaP=lhy7NIlc{8#Zh-kK_5 at 0z4YJ+oPSBo(3g;OT|il|C~=G8y%*p>
> zZ8~5HN9#LHJRO@?mnLEfrnyHM7!0u2bxT}``1vNw>MLngf~5HH#cq+chq&}{!2}xa
> zeK0=*>!htI{mUq!y`NeAKXFl3G$!Z2bwGSu$1ktmdZ%D(w>@#X`J?`1j1PPk*ne3}
> z)(>kB-}0A?`gr>zTb%)B92eis^CT#knZmzrUS8^w@#miXeR;gfX57c}dKaN*_#*Dl
> zI;GmKb`z6eeOOaAq)WUXOX%l7)A8W!Yvl1=pkY8xPR|(M(!F*~&20+KuCw#N4$CIc
> z8KIP6aW at 9M2(~{ztLXg%|MYsr1pjA&*zWD7oX1qh*1yL18anfz?w=xls6QH&SP%KI
> z3^bZPh=Siby`aYGS}k}32l(oaSg>;RZrZaD#P6e~t~Q^08*^efR6e^M$-gt$KY3+3
> z*+0{zSG*NbH^z6pZxLPw`5WrBo?z!X;d3**uz1rrkS;Tnr+ at y#g#4j}pm^8FZ7iJ6
> zVP$?Sl0SBl_JR&MvVU8#VNUyTQDa<>F_}p)gn~Ew$g23B?FIsH{aRHW=4qS*YCbPU
> z at v|0JMn;?8ZS0%h2LHN4WAoE7{ZKJd58el4zNNF5?=Yt^PJj6LaQ;0CULmW!ZtdG*
> zV6TyKr*&Br*cE(msS^!~pYI%gn*Qo$5LP3dSw{15EI%;DPg$be=-W=_pS$<Oq-}vQ
> zuCa2*fi%dcTEzFt<MRhFxJzgLFnbc9r<SZ{|AOKNS=SJS%+zpfS^xcI>(q`;*v|&J
> z)B2_h$^OUrdHGI<?Z$W}Zf;%%`O*5Lwre(i10pKo9jy-Wps4Zi<D+g!{ui6)2ho=W
> zW4l*&tyP+9Fu|u5>1JzICiAbbwe37!YlQnKcIH2a{Ir!D<{WIf5B8~RSp~-31z}3g
> z{Sr$NKRVbZ at 0oZAX1!oT=(cr;@6z!0)8n;dzSPZ7+1H9jc+!!lF|Qy$;Ue?82G<Di
> z)jj%{^vnnly<qTum;vH at b<NVwSrCGW1OYehD#U*g<o>B}iuy*Sg&_80q9MNXnnYh6
> z<SQj?p$qYe1X?S1l!04!K|`Lz4C)lbSNBf0Zx0B;60fLy985v{zQF7mpQhL!qc-(}
> zS<f0n9Okj+HbcIuh2>5+=?HLHMNr^H_+6kO`MfO670r(he~rEG$Qh2kJG)6w_DB8F
> z5Bp5kIZQjn{hQ!4 at 4U#O!}v~{8zt``pK%`J2j${w(3ZY<R)>BHSQc_({Vi)`KlFid
> zJ>Nb?V0T72**LBs`+t7PbX(KrbtM1nD%H=Br*Rms<j$DI9!bHUh$~v at 6g~%`9 at 4j0
> znq>iVZB37rCy at Nnv%lV4ULA(HB?fz*U43}Mei(upv0XLf_Pxb%>Dtm^1N`3SezsMR
> zFH)^t7~t>}n8Nv~_^V`a;i#_SGfOnTd*PhmE3XoQB?Z4-P~(d959^$x7HlH(?|T?l
> zEsQe24>2ZRTnPE$n+_bgzvCr{r{sxs9ghWCuzV~|6~)irBZOQ1)k844pwpK9L5S~n
> zg{mj$D>*)4p;J3vbI1VKUnc9N2>JXl at zXn84R#wmJguS6OVNmd6)xUr{uT2sC*o#g
> zF!tRSGu={({M#cLkwZ(SsDHK+bPwGiZh#*fsy|BTha;APi)vPa0ea3=FBRf|zD7QG
> zaTE=J;|P4o0`t0s$z|HX*ai2O%T`sP_O;ji7$Gyo{j)F1t%66m4e)5E at I@HpZ$AIt
> zrhVlzU<wN!1FyvZiw(P<4;Uc%FR9Ki5a0>I5+8Pj%BLg!EUaUcr)?zbhdSc3r at 4p$
> zUg+4M_Ut|d-<{j`{9PgoC3?8c+{k+kB^%xotJ#S7YTK>ws*889oEF80%g-SGmHP=d
> z1*^&J%OU7J(!^?jQ{u~d-b49Ittoy7WCSR^Co{C2FRuPwzcFSPe_wnvhW}q&521Wf
> z at 7BmY<o{o+yu@#+5QIr{+tIG!HJtEoDIFN!>u7TP+zRfVX?m_t)UAf>4utucfstyF
> zHSJ(V4}aotL at dy|eOsKL55*@1iF?%8)$U*{aJKMZ5AvUD+^dQoEg{E;QQe|S^Iz-Z
> zebyo6HUSjeoV%!hMrQ?xh1=%zvqyu2j0#KILXdx!YR<Mii-loT3vN)|KY{o&0+QE!
> zDImvh*9rr4&UEPGFZxn)NBt=HLVeo}SHG46Hh81=q53$m|3mSH$~!22d$K2bm%!Cv
> zOe}BrF-j at wzqD7SoOLdd<DYFF7LjT_`gonIa40>@--4A(SNJp*0h4_zs+CjY!T$HR
> zuF$PR{{IP6qqBNQC`QFU at 1fvz#7`~LP`@oe_CKq*X5YEl1)n2VZsqO|`9<Dyl)OC~
> zfsCE*AO`n8aS%9baP2b6Z*VxbxNxN3#l$;k#dKF9{xiSb7cAAt{Kt>^yw9}i<42U2
> zU-}C9e)N1t42#}^vNW at P5r<UZ&C?)yY6jAOMy`qd4fZhXg7Mn-J*G(i=0l58?N5{W
> zFs?h=(*)ONl?-H-!uA#SpuD!1`~XhQVY|F{a{^%1GBm#Cht{VSs)iIi+H?=QX5xCE
> zi87Yo7>gg?$*M}ZOmYACUCXw9wKw{N|9rp=`BF37cJ1|Iq=>?a{2c9c at V~u(|Gqv#
> z1ApK6pd~EFp|u~?Z`5;rh&H2rh<$r9t1luD<xl9YT07NIll`Y{xpUSPxV{!*;5eiJ
> z``5y__j at EmUjgcZ8%`s462M6Dh!o?b`gV_E(W8R0$(W{-?e3>7%7lL&Tfe(-;<nMw
> zwdC~?amA0`Z(x4 at fIT>u4((r8%<q6?SUbo_^0$!lhy|wck$gR(C_a2QcYcC=&RwjH
> zca^9uzG;Hbs1_4*s*lWf6Rv%34A&Q&8{X1%!u-$Xt8zsfN4voedk~){5Ccj}d`f7F
> zQGEU+L5JT|Eec~f{PGg@(k&DG^LbJSHQUMlKk0*uY(LEZ!}aB+FOcu=A)P(6e+V!d
> zbMhQ`9S5qLv>i?FqV?a@>lz2CgCAfVBD#mt8#hewpZRQzWxhrB|KI(ky~JUDd$d?y
> ziO4_Sp4-o`hw=^__4U+X at q7m4inwQPyMyWzD5Zw?li~f>2an&sz2wsF3I3gZ={HV)
> zBJ*|9A8k1sq>s~doh%lG{4kxm7&h=3oZILexOEdXg=5~R4f{=$|GA at 7nR=}=727kS
> z(pmNL$ONBmQ_bBAQ|vEsS=0sYA^`JC7ObmWp?;)~Shp%E at la0gSu;=-UIX%89pTqo
> z#tw*HK*Y}#S5vZ7_Z4B%#f>&I@(xV!XH=)Jjk`$J|MzR(VwP{v$1N|%`1`(~;LG?e
> zW>DEJqEs(fy+>r|6&S<*js5F4pU}YH=fD1|^_xO$ByNo6M at wSVdN(eN#zxyO2IXR7
> z at ktPoKeSEFth=5 at _CK($j7J*Qk71qOkBIuETaUO{lR-bIP5PcyCz1?KUQ9hQ+a9gI
> z6!?ERqza$EFr$HLSMsF$ujd at NVdh*xj^DDEoOON#?~m{kV$LA$Ul>~XGMmY=4Qzdv
> zRruQLIS7~U)LeY{JJFBeOBNId$}D2v44=Q=7vfWshw5i;QFa7o*OKEO)nNYyHn at KR
> z_39bJEs*~$P_+Mg>3c9Bd25*&V>%dr-uyU!{Q2(V&t- at 2kLhRpIp{yWhyI24KaM>w
> zeEd1z<Im?Ff3EhAZ~pJKumA4Xmo{UO?z;IM6ZYflv41I*q&K!eruj<A1(ZKoCd+re
> zlzt5<e+BOgt0 at jN#*b))Eu7;`!ON@)vQ9m&1{n`_2D8tP1f#ItNc>3i1V2ykqrc-@
> zFKn=}{5e$v;`gQ)@8W$gO5*2A(z~+-7~>x#7K?3y{L(_vc~L_}VASZX9hZA3u%G*s
> z$2_EQg8#gLl};$g3%fRy+LA+y__kXT_<VPh>sRRlq&r!z8RM+Om-|&9U*96sE at a>h
> zkYK7fQyvip7V+0yE85jG!9Q+M9#~xJg{?o;DAwhG^79>QZBjdFBuMgqORLED at HWOf
> z5>L@>hJ5;@mRk&uLc!ojwcVSwp`f?=jDFqyHxqneYSVe~mR?xQb{-HEf%w)^#}k<h
> z$$T44$sInv#&~Gv8Q*7DDY#+pb-n(jVL*PXw(0e}P%waLDGhyTNBj#Bk#U39u!57}
> zt2a065bux8Uu>hQb^Z9s@!>j$*}J+tjq%)VV&S at wulp(XQpdqYuqY$;>!q-GprTqh
> z|6ViVd%bO at mbLfBgnH8z-bEq)jz{!tdEI1wjAfgk-dV_BCcI at B@_mw1e3xs#0MUkb
> z&Fru!;MZ->>LQNTcOtHexJE_$VuD7h+VsXK|DRz$*s^^tx&Fsdb&=geTVveF?cQ46
> z>lFMntjqMjKMYpdKgbTtdI;9qcsXpJbbq}@5{IDw>~L&l1XjeTV1Q{GggdrE|9{b>
> z<b-b#**~|2+BVGlbO3*<_wf62)3tb={q0NV0-J!?W0i;2sySe0n}F#t7F55w+u8GV
> z_tS@%%O$#PfmgJ#oqLi`6Z~y#0YOI}lH(uKInsL%c531GeDmDp;QHtG;CGZ!`C71t
> z-+$oBXcBO!vR<0J2CdJUbwAIV|2`el$kTOwzh04OUoV2M#yFrU*-hpzkzw at b*WQPh
> zwG^z1GE=~<-3_GGwiJRbE8-YuTHXOSz2~TTx}f^K at I?Okc~Xhk$(SmzX^|{e{$}|(
> zf`3xI{>qXe^7!)Ep{DC$>R#OI#6pi-feQF1T_a`dZLdJEnZvdX<?+C;sCBy^Ey~ZV
> zJ-~W#`^6CKH0DMnTe%vO|NO<C;Md#=w6Q56%b$g>+O at ELFHY5M>@(-O0v>yiCT-`t
> zIM7uRe)f9g9iWrtz);4A<`=3%Ze~s%q1Z*cB5ghnF-)W8$|-_xvzuwp-DtA?^mxB_
> zDAL at E>&@m at Hmp;?Ip}FE#jp+_(k{L|v+E)F9vH#Zl!oSCJO_iRM(7`6!H&t)d`rjX
> zM`QZmVFkXpVdVUO8|xAwe1|5!u%LU*cGh*cNx-=sYRc`Pb;Z{_T8?V)-+lb}Bl$Aa
> zd(JIAkLE80I&39PL-(;yZr97#S|7(u-==RS^#4)tdHxe2vi+ny6 at FFpNfQqrIqGJe
> zxemX3%y^A(%>cL=BBEd}lmz at 7RLW*|p!Q8Y!EBc>Cj>M0Z84~kJAyrvdp*<)`8S>z
> z=x4f<{m&y^<sI%rhWLDqrAOwR$8g$(4L$qlX(>iNE9$(j6oWy|E!W=d>74MNn at k?e
> z&NuVHthUd*e%Is>_V{7#@;b=pUBRHa;3;{1yg8V!d`GS+zPVPeF|}I>H!Kg;)RY+n
> z<twq(jK)PkWyv|K;vtm(ydxXX_Mt8a%jJ7~VvWBE#^*b0KEco2+H|dhgKYm%++teE
> zPDgQ1+Y at 48{YrR8sDIh#yKUgswi=7%ckzF_{mfr0KKwET)z_s~=xLo$3&DI^ygFw0
> zSP^;yg#0!~zls*|kmsi<`LwTj(v5JD9l}>@u2Jx<4#xK{wRC_lQr#C%rWE|`^8b<j
> z{&)YpcR{<u8(ri-J*(^28$b2KQul}}^T(TGZRy?uFQNWR^@IkmOOfLT_C?iFW%Mw9
> zI6B8t^Z|@dxEN<svZyKZ_R~b^tpD;`|6>O5AJ0!7wWWU4cR}&9-C_A#KE6KKE2ixm
> zF0MfF=SIBG*>n%t|H#!ZzAkyj7 at s98bEVK1)~6Y~K2xdN2I|eLIH_*H`dF^8V-B>)
> zzft*Zb2PpR*T=JR!#H=M{P~?&F`apA<n=qY43nKpO$~90^TBUz;rexcqplqf>nqUn
> z{>Z5Aybkatf>Yp3EXt2jo&_<k-yMt%oHgwj`D}n4+;TaFnE%$f#)OnRlKb!a00!1Q
> zL;CoIoiuVggDH5D3CrA!Kq^X5Z5Df~H6z8zd*l9vc4&TG7$>;T at +{ncFUGBQsqjAR
> zok~S2!C$8ouakR|?BBvi_N#9w(#N$QbmzPbqu_#mpY&C)eFoe&GKF3A)4&Ys*U1am
> zdMEsIo7ElOr5)bbnMCTqdb{ITu#?RG%kmh$*}BH;u>pC05y7>ngum1h|DJaBYv~p^
> z6w{pM9DdXR?g+S5?}fXq99bk2tvP_kcg|yZsqyten9$>ay9ouyiSz0Ze7}|u+b&14
> z|8Ey4;aI)O5<k#oUD|v?2w(ZxX-nOV_rM@}nf;Q3slWTzAM~%WkN+3vpZ>33-`3Mr
> zt6{a>ME~ve(fxQl^(rPGnfjzF$O4lH0^EFSF+9TjJMWj1WdGTm=Bs+c#vCt|lpRcX
> zE`j at Ks3a>^y#p$<F3e78uln7;{-A$_ChcWzI^Q;-|JB20&lI0~VTmscy}q0^$5a_-
> zCkjCQOVJ&`J~@hz@*77D9agMcWsZ+5bjjVZKoXCC!=}vorUvXaqHb*doCItuom?-<
> zBmQVvAXA{G7xwb=A#o0Kb1Y at f=y!sDq?e(^k(ZpGF`CW2+H;9Ho;gU(-N`A5YdGF_
> z>YV=y9Ew!*9qo_!-M)X&zU6P$N+0Gy{mVYOE$4cJH`c%@clO0BJ*>HL<%8u=|Fo+(
> z3-28z$A at xrzTF#PHOCX@^I9aq`}1Z}-+M6}_ZmbxUe3J{5(N&eyi}WT4)O2dhb3;N
> zT*Wq9NvP#2=wj at 1x>E>#^X=7Cw`*3D>?h4>VB{8`Ilf&>bcuF>BwkwX^s1!mHQ==a
> zCKZ+;KxO6wSN|@=kN?_WRb$|TwK#FPD=*Z;+;=$n6aK-{ihhxvF*!efB~W^0_Y8BK
> z+38e@$sAdnXGLy+xWXuqV%VbCX7v at gAM$#0?B44M`@in9{9wroPwdp%x4Ob2y4bl6
> z>G}MSub^;sw6vZaKh$V&s`=8H;{_+5mOIas$Axo!wp~xH0ERAiIH~fJfJu6 at XC)iT
> zUs-#O@<d+n!HlA|(HT<oF!llE<pe*VyR0%ghHU?%E9 at hKY0dGKC13VuEtkhLPip2?
> zTy6svoF2Zj;C)W@`A3e_7oqqkcEv2g>?=1hwNDp!&-Bp4c(UgU5d6ZCSqm)m$@vXY
> z!I`ytN6hfe=h_S(*vaE-+Oq5UV12BWn)i&gjTwOUwX|jG#qJ6HjQI83QmVRvQQc~8
> z2+q{SRxQ6IK<GdE38$!kH(7pXC+W(?u>Y<NJ?$10B#)mjf6vkv`vs_QFQRYe9s1k*
> zujN+f{L)GBd7Mmlx6!w2*lCL`jNERz7~h<XvxI#fxSn0n at LGsupEbUFM~WEDabceu
> zPQ{7x_^k at 6j}O=Nfot1G#51Ko1L-H1R++lCOz20e+v!uV`&H~z7suO6uz#tYlD|ao
> zH)rYY$zUey$C|y0=>&~AuI=t}OFaSV=k)%wD|t%5pwKyrn$t~CM&sL0x4LzLFFq%+
> zRr2i>Oj0E!vviv&@xBYeKU5Up>OM&3D-|=8RwkO^eWR(&hVcHC#*ht^*zN#uH*Hw%
> zN~s07z27qF#6cu~{ah^*&+;pni?a6a{^YUxmNEXO?adxlJY at UH3)vR8B*6@?=j}{o
> zijl{gze`a}sRKdcRjXBp$}Ir5il5Gz8dP7j;rVVycK0yM$(!1H`GR8 at XH&N`A%8pN
> z0LG$69^Xx8xhXJ3o8gywzsWyHk;f}Nme+k5EC;3mEJ>+~S3$vElXiJpl%M1f?UD#v
> z5{q>|sNokdG at sB<^~?GlgRjZ*m$X+0bRRIoZ8p1X#k}P32hNR8?hH^<93J}$QRO}O
> z+wF7AegBScNB<)|c-Ph*5UxS%ryPsi>e*FdFxJbATi^NEVM0%tONsnpGkfl-ouA0#
> z*C~F6ZC=+7;g8go9WBX}!-Y2)#3;NN0drQL(Jc<4qg*_)Vw3!&{pSVP&fc;76o<{a
> z6wnc<avY27$IcS`v~@N)3*V9Fcl?11g&f!q;h)6>dDv6saLGp_4Hx(2gO}&-s&N>E
> zf!<9^qv(#H{ZG`)67My``kAP6*RYElO))+3bC(Ie74}N%#C!7mw?zFE!@X)<T)DAw
> zX=%0`9_MP)Of6jvs?LAd at gzP0@Xd_SdwmD>uha57-`<%MiY>h$K+Cn{hkqdWUltG9
> zh~<&jFKz{-IA0pk#iN|DR`o_X{H?OEqQ$X1z|%bQrF`xG{P=3$({<+_wW9jT at JjD<
> zrQ3tBK{b{YAaTsUjpgV2HmKQlJSWEw$6CNGiBCFs5c6QYaEly%WA;1o%u}Oaz(z-e
> zDe}|r=U4uIe&tyG!|&%;5*}O@{C<Ar at 8?(k7|VbB`}_Ho6VI3Y{rpPkAAUc-^7r#A
> zC;Ny0>gQJyPiN;*qyj%=k_GAdjlA2MV=?N3m&zU8$JW=z#&`IfO3MU)^7<Nlu2Zm8
> z_K)XZtHS-Y#-1k}kp?>9gJ-lXVgV0)PMTmBnxC5L1zmL>Nx>ep9_!8Bis~~V2k)KY
> z`O)xcL05Dp at u9vN=-a3%+VJ_&n{x93e2gx9R068smOkxz;cILXmVVJJtFi|1;o}aP
> z+I-0J6VEN(^e_AXllNoKuV;#T2ojiY>+YsP`!jS{g^rjD$75Bk-kb|O5g+>b4|k at J
> zAMWcus62 at epF?Q8adjVn`*FWX+mZ$t;eKjoL(%*wb!6w>s^D1c>w?_F_LH7p138Ne
> zT*>l7eP}C9;={)l)44i!0 at z;Z>59of25x_1GZWpvQ^I9%-xJo~#${C1R<1$q3){`;
> zNdcJ;^&`WS|D%1E!uEw?pSV_%4dUR&E?HU+0epD<Gv0bs|KG<Rkfzz3f_)b{?BjZ7
> z?EcU(`+ at Dt8#)D_c>eOoJiRfyA)YTlJim4B$!t(PqSz2~H37iK*&MOniuPAD*_yHc
> zdvqLTx>DIBB?R%|wqNC6v&izp)8>^yK4IU)^B3TA3Jb4}W`QbZsSy_XWB{M12)CR=
> z`VmfVU7!6u9%E%WNzeTFm-gLvaf;_7K>cUNPvS$hIQ_r&zC5nxsQEu3QD~uLmn~#T
> zmR9F{QnpeQvXxNTLiU}q at 3OCvCHvC8NV+K@N}<wXDM=zCTZrGxxphxZpX<9k&+Ga9
> zUeE94{=w^YZ}<I~J7;FjoS8W at FVpL=`6E+1U8D6CyTHUHzP at Qg-}-j{6;8IFzdTgs
> z1g9V8+lJg0(+~K*+pFM%oSpA*R$0LDvkqRjD9#yvsKooj*cjiO((`g8aa^~)snT*z
> zKh81#_)spsxhLQQTrlzn#>>~6qoX0<{P+4(Qz`11-grJ=_>T4tqq}(_#OdhDl+tic
> zKd{$tQnDBy9;-wEALM8e;^X|{qTz}H%v;Kmq{Y*jY(P8LuaqNdsw+!F$+;4h-;u=}
> zALR4)SvmM1=cbJSA3j$`e4J1HAX#0&@p?5(Qt86lx1$RzIQ@<MTJ2Ms9!7RJo1atH
> z;_?r6W}2TIe6$Y=75vBf5o2Lcf?JIi0?tpLG%u6lbG&VNePjQd9Y*R)!bwP{65^D?
> z>4)`o?ICCW1<W@&^&aL^fPSYT{V<-T`_MP71mt?m at 5fY?*$3W#K6S{n+)Y6LyZ2Ah
> z-c_0JgM0{05%VA9r6?EhQT~yB=rc8Qd1`Y3^)YDmW2t at f;`Y;^y+&*clTdOfHg5T`
> zUtE4bPd9D2E5=8;N~?ko%S!usstI{Z8(j|9Poes3{yXQ-)}b$L?+gkhn``Vgcvq$W
> zD$u{oGF6NZ>#BFH3O?}hp0jE_0k16#-~NH_K=av&(?4r&gJNBmP;x)6yy3UOod19y
> zoR=oX2Rzk~D)<0<r*v6E0p^LnOO8vV8AS)4$C~l at +pu<p^(7>fJhL3^H{&~(AJCt+
> zQ=f_PVSVEtSHXwz at +oCO+0+i?CiiVTwJC8qdUh4xe+?ChLbrl2GFV7GaHR*w2RijP
> z$iatYJaMxMKF&8!>J?A1eb<HTXf{VK>>{WCSpN?5hYSfO%WNLp96g!y2l2N)71NJ$
> z6H^5r_g^R7IGDl%`n&uZoi*md<kfZf`ZlmTKkoAA0P=k0Ed4QSIQ{UwOUt2t6!EIQ
> zK<_@(0R4i`olrhOJpJZ1x=GQ_ou3><H?s|<A(ei|h#J>$+x$xiCDHAS6RqcR`awR`
> zd&-f2q*uK{e{sIdJQyHUe&>mlKbLRNli_Zcw%6tMb6-+=-oUvb#P(TnrgcMhf40*9
> zDIFqbz6|JX at 2?g7L44>hRKImSRRPUH1J_)-@|$XuVm`M&2~(VUq%I64!>Gfa*;VGJ
> z!|yxWMb7*nT;EFhVe at f7K2^@v5<s4#vUfh9U?#vqbN<)bVBq-{=HonE+%;v at InIAr
> z-=Cx9^d|xQ8<p~p_{it0{S}3+?PEqiaF3<)rox~T!sSQz(^I9Jw*tsQhmFhPs`Rf0
> z`5(7ZKK|;%RrrJ3uS3&PiqG*H6HT?j`;5E%OP1dmKRWQv)1&~hbHw;<kC$=!!OSdF
> zlQTaN_#e8l3cfk?-y8I#h~lpJT{DtyA2t9+(enGzM}C+nq`>^a(us?<l-%X`pzqF;
> z<=~@Vw73dB?uUg-UQ at IW-I`yeK4_?S at cOPZ{{0 at WPrgK~=!(Y{rd&SZ=YA{RD3*U@
> zgL at Txv_Gr%ykYhs_H85`wr&3`jWyi=S)bQQtwpO#WP5`z>Ctmpe*h+*z=x#Aa_EP3
> zzc;K3KA4A at Qy0Bv{@cn9;dGMPXycIE96#^&TBk-k!9P4PsZE^;-2MZdCHq#2=?DFa
> zHm!mW@}!%0<}1a0p~C<PMd~GqiWI&NFC#i<()~ToFG5JaWA%ECd&Kzz`mPu$r~fc~
> ziFO8j+}}|?SHp&Dwxf(f-*4-d39+<JsbzVy<6Qn77IYkSrg=DVdY9hpU=*uAWc-2e
> z(*QaA$MZ%13i{FiJPmg3=h9CU{q)ICV(IA-M^=1O<@Ik`TNLi!>=Q^Pt#$EBt;gvH
> zIwjxb at CVlAbC)Xk(_sUswf_f&@oxH&`)*Lio+|Xao>`gr*&~#6s_A8YWWhh!pWU1H
> zi1`nEoBmnC_IEE`pdb0(@wu7+^Nh;e%p|lMc+Vv++`m$9c=+q_rXj at h-eO|6htm)H
> zRKBvD{xGnd7MG;>3he+N<_+tA82Oq`#=)@{!l^$yKXU$rtNH6*>=H!$7bQLluF3Ta
> z>_c{nobwCNKV(Z4d~`P(Wfw91ngw&N7NC3HK#>A};blZ8Cyr3sbw7|aAGJ^6NR|0+
> zAm^4XcZ>Oh^e+c|)K^QOAN4`MjZ}XxCxp at CTe0J@B1Lq>S6_8`-SZ{Eq?m?ycYVj@
> zAHJX7AwY}|Uy`_0&~FF$Fwg9cp<5|CKW_aMMbSHHJcaYW?&J&Q*OCHBsL#Pk?GJPQ
> z10RA6<@9#~zByP{!AHJ7QZ1$+x9aLSku=ZnZ9Si5+&`>2rg(lw-6*o}_^J(xv$^~u
> zoiEOd=?9b#=2h_FK3l|gw_+LxX05xCgn~N?CW-HlB|%4Gyw(MircKA)QOo4?gZ$*I
> z^cUlUeK7A`1s~=_4fGyeO7WcZq1QFq6#9H9)ljEEAG{zw7NB_ZnYD!M?Kvi9wGo#e
> z*xzeEEf(L80R9-Rg!xMNZB4kp33GtA#2VCN`&URoE#~Lyp5XqKscqqwDcd7RGn1|#
> ztrWO^0lr(`cVc|-|ECPEz{mdfa6HOrdnB2{F}TsJkU%;Y_s1B1zU#iMd~5WZ2=b=r
> z#M44`mVadS2XJb7d==w^Ty5V8{rQo8#7F(ru&gOy{G{285E|vv%Rlcer@#Ljd(|2f
> z!pZRAUwW7+bN-<GSbh}a1AAV~sDcmuf^$u_Cb0O-k2*mW`y=<SR!{VNYA`W`9BQ)R
> zYtv^OAM|K-zk1^J1-p8?yn;VC-wMx1Rsl-veEP6?uylRBx&QM~GPkdq at pa-?*uOZf
> z%Ki&_X|}qP7$4;7(}6rGe_8 at Q&IvRe_=D|_!}ab-?SC5;iu^<Q at tRSZqZutBl9H}d
> zj`ZR51D!@)2a54Q{&yPZPPTyGr`rnf--6>jVv4qaay0GgN4oTN2Lok&F8?2IzISq*
> z6+<pt-fDQ>k;@OPFPVE%F8>`=pHD`+v$Z$i!+tPw)MOn2j!9>{pO;gZHwOMseagrO
> z`umt23=1f_M%vz4nA^sR at 9#jr-nSGnK8TB!{WB?l`T#!q|6ak;^Sjfa6sm;BUwdvJ
> zR{3Zr^cG^tbk}ITVe2 at 5Kz=Of6EQx}<v9 at egY+!{d_2EjidGlEy)tRh<_^tF{_60e
> zJ?D at 1m=yI3kD|#Hy%STPe&+b#uR64oBR{~7_HTech at S%Z5YKq7Qq*36d8^%9p2(#k
> zw-;VN)|AVqZGvC&0|f~Q5R_ILUYw48BhxS7?^|Oz^VyL<&noaA0zQ}>gOrBt1+=4U
> z#}`nxy>#XBGe_AnR6RU~e2Vci*!z_8ANkYHL(Cso_l$xn_ at G~HPFuDS&@0?k>mgNv
> z!P(~ZIDa1b*Z92H at +#@6Z1k~U7^ffX&%`3QKZ$&(`U0_h at UlXF(tv*WyMs1MRM`IB
> zJ}-g7=GZl;1?NwI(&5Rwcg2!L=~G|Y8SwcvfO#$QvKSxMC3|!Q{po;@c1?eM9RcT&
> zFMfHOIt at BxKW8EDUlF;uc7sW7H;JS2N!@J+IDddHZ|68MKJX{J2;>v~?~C&<V0&q~
> z&%Tv_=if_pUsBiA;K8ln_S161tqJ>Phm!?ax8A>;&-DxFH2r-*j1Ts$|LCVu`B4RY
> z^xM|#Or|KOM&RF~KCgSDNTobAqI+Ua^>ykJNdlMaPc;3;<rDavs2U{3$NkH>Lcb6n
> zPg at aD$rSy#5{EE)y};tZp3U6<slThozNRxG$uI4|J6`QLKK%X*${}KWus^vY03YP5
> zGvd#I{bl#kWD3i0`IT)L9rh?jJ+Y9-&rezP)Z3F9N$$t~yw~(A=MUJ)fPpb$e8A08
> ztDwI=;KQy`_zCJ7 at tpBqDV(;vr}=sITF#&1f~7- at M@5jY+U{Oi`#C=FzgZnQ{rBMg
> zE(sO<M||A3O#38LjB{*C52Moj0{73IV_n}Cy$d6DX>FeOSj6QM?3-EJPh$FEeb*E~
> ze+F2eNr>M73}>ANS1HWh&euK at MqwPJ_O1?Ge|^pG407HK^EI5-Km3xx`44=!tS#R@
> zbT|a~C?7aK1^GT|ycV<nRt=-5Bb<&FUgz at JZTae=E@|P!?AL|b-*dSC1N3QpF_gQ%
> z<Q~nI;x`2RP*{MC9^n+NLf at h=>iH!XJUGt(T_!K?TB}BoP2Nw8I=XTCVSPueF%sj$
> z`|$-?93T2r{?urBi-No@`l=U3M|tJU=vHO^$f)L8FI84X5+&1R<zct~fqq at PK4N^Z
> ztNJMw_-a5u?!PLB;@J7Fpkp}2=s<60E}yUWo?afA5k at +FucJC4mD3M)e(wZ3x%jFo
> z75qVbjMsdijfJidCpb1Of{waXt6{+=9v?7K_NjHUB!bLaS(-H_h2z7|ols+f7$59^
> zfd=3sF5+XnT=U~qig||Q#4w8bcG8p6Z(h`TQh-%Bxo6+{*D(if-vDR5$29r)!I at J2
> z<9r-Ezx*^$X8P4VAdKqbK;~=Q|NrdqQM<Tv6!|nityJscKhU4ywn&T*`W1CHgX1&5
> zQz?<6fAVrn811=q987}e@^f?exTw>I!^oEzCH)>$*?)omp<m^ke?e|_Rnn#Q2kA$<
> zY*3a$p<e^|pApotn*7+j at oc+$YdBHe{iv+xByJyoKc{uJi|L1bA+vp&lzt7s*FnWC
> zxJsEF+7m`wumc#kpU3jg_j#8bL86ZTK38`Mmrp#urO7$}g4(*2!F(dLpNNlsgVy|H
> zW*;2=LMiH7VTb~Szk`<%-TJadV5j+!<ls0-ZRZkBKk#SUAvyU?ct7n8;N!P70Uzam
> z#*^C=<CG8QhS8nqp2u<g7GLHZ*_{wc)_$@YJf#trAF%T`4_*@U2iA97W)*zIHEfc?
> z<g>x)a9SKU<#FTITz*=GZ_hp45&E0W3{ihoi_;JM?@;Tw7$59I{)P(t#z4O*kiC9!
> zGKKKoN9zOOREIebT>b~@MXI*xA5Q$wJTd53%<)0LX6GIg<AdEUw5x&-X(QjT4 at t~E
> zoPHlkeIa at hrO54P*3#=cT*5<$X7TpU`k(pwf}E5c-5|zCy*pC{AK6~u5=T*P^YX&z
> z>b?E9c)a5MAB^7&ocHllB(dGNe`QLQ^CK+Z#%71b`0&2hwkr6jzp8E1DbAVir5jES
> z>~I6-@)>66H2ciQaB_5z`u!=={;`$kJ8g?oVtkOFkzO$03gt%&_>X>b at z|>jKLqwi
> zo4%VM!p-g5k6x3$HB*luhIRMuoUn!SAMEg2O*!#B;Qz))52W!i#Ap6y?PRHa(+Q^@
> z-P#R3XT;@G_nOJFp)g-b|6b^z#wi>h^haaH4l(^8x9W2NAL+;WSs4FW at -v){fpgxf
> z%b^t0<6b#je$o_t*Ntfm@>87PY at 5sRfqt6{JH_~5mwg*m at CWh1ZHqXnai21`xpx=^
> z;|BQ`MT*Zy{e85s-iymkBT38j2Uky3i4TJwl at _cL<HPUTyb|a~`_KgNaUbxF3!~sy
> z7|vT%Y5x@|q9gvqhvl|s--nU=sf9y+edP8TK9p$qiSdCw!wpk8KJtqMHV`7g>x{L@
> ztMLE%`EKa)-1Tjfu9Eie*JLJ3`;#;I0Xc8rST4qg=eBmaFXg`u(2sJT(@kFhe%>4J
> zmCoW!_wMoh*QCWCipL#{Aor&&d96Nx+aJ&`^~rMl2i#xElBD=eEAUr6&=k;r)3HdU
> zEm-|V0}6D&%ZO^U^lIDdT{wB))4THuC%(Qw)_0S(V)_C9uvrCuGr&jxq?__Lio5R2
> zR~d9s4^*(ml)(dj?Iq<yRDC7n$@cPl&-QWt1HOi)9Q{Q%XW>05{fLi#t@|7;mLEK4
> z at qop#cHH3pVb<6y_NQTfM`kULQ}a%8`r-M*uF9z&fcGV~i45Nh^RuYGqo!*Kz|Vt=
> zlxhm_AH4YbZs<ZLyKcKq-sS8+o0!b$hxIZ$C at 238`&xsAQhb)51vzk6sozq-Jc)K~
> zB?0+lUXRC5);eEv`PC85FB2_|f9~V!3;gM6n=j at +*#CCZ0UzZa^J^GC|F%R+fS)nb
> z{!L8*f)5Ijjv6xlpZcNy_>t{hqUyM;#C;v-573#su|$jy<}EbwHme^n>;m|Z9~pV$
> zy0w4_!s~q-2{6AMUY!30PaS*L4GJTR%I0_2?!@Uwy@~xQ#s~gCe;zMgUyRQ~`0D$y
> zpZbh`HRB8>N9OgoeEytxenP5IBxzh0uB0 at H<D(zq_*0AzcH#WIn=s!KR&fmAqdsi#
> zEMao<{`5_1+F>zBDChsm?|l+g(xXUyd;2k`7i^KmAK-g!pM4YK1OHurSJ033Go9c7
> z85vSSu>j)G{u`qFW at Y_G_52RVkKFt(&~4nUN_`H9KdT?Ws4eEltH*CE<HIvEJwBH`
> z<NSg3UFa1orXQ9?mLC}o^rL)Ye&HnqQs&f4rtElHtSFP85hdehcs&d!D%}q)U9Zje
> zcaXn1CmM<GUx3`|Hu=QrA4Xz-zs}vyeth8ZM4BJ>4y3s-$L99{jz3G)a{GuVhz~UQ
> z&@bMa>lf^UmS>xY@!@yPdhk&yKWc!F at qqTLZ&DjPKXweHko<)sF!vua->2tf`9+Y{
> zwtBa6s^m8Tr`xr0Vtn*}tg7JS{+PKniRB+nECMO4Kb+9G|K{hlASuB#jFj(gG~c at w
> z=RfeL?v+Jid|2PQcT1%7V|*C(WO!J(bYJNmOi_I^ayWl}hs?<uJ at YCtv`cFHcF{DM
> ze1e|d@!2QF2f1D52lJs6;Dz|;zqudFrda>;L at S7<Vfdk#(?3hEh4;=KkwoF*nWM9$
> z^AXto1^jt8T~2>6)VqdnrT7>h#&e6+h;UXnlN%Ah;?T{ea{l*h+iTv?C*d$Z>qDbf
> zR^0vopIvtriRlOXKgIDi$4CABu``w8K67GK5Z%QRc-;StjBwDNU<~=ePIqJc2Xpy>
> zpYL+0ra1lpdUtWdD=9wa7hq22Nwwxt6vd~@iolBc4IY2fT_56~)IEw6td3vZ$CA?z
> zYO{I!4lzFbuEjb9Qv61Mk9?fis+E9tqEpOE3WwkCeJ%L>rWG5u?sRA_AsZ&wo^<&M
> z*Dv6+Q?{J=8$35*R7LzB=SO4RUeRhz0qYOjpH~ym-yPpjlj8d0{(duT^36Gc67nL{
> zrSrU{oIhYEO%BA1=?8vq(W-(E{Vw|)@l_FUzxmKcSqSKY5gNX~Y-l^vrF}*W`CfPC
> zI%5f^AAa|Muskt7{4Sj&$S<H8p?qT9N!w3#1&s5>|EMEK>Hc$nn!leT2mbQsuN?ey
> zau8~Q4v-F&^3RAG+V<Cc7J8S2j8DHGUFav<UqFAa+uj%7F9!RjYz_0*@cX_ne+}Y#
> zlWvX}D|80?c41OoVLv_~fZK=21t~9dhsTnUO12#~cVPXu+5Q6Rf291K7$1&tnvM-!
> z(Jv`j4E6!`-;4V?b{EiId@{_Y?;$*VdIZNGTgTGXXX#C{<@5XD!}K^lkQdTeMcm&B
> zephmxI<72lS0C^(zP)i$3x?mWeFnucwe#n>{r~i9$JpK^oG7f0UE9g!ANF5gwZ39}
> zpg*_>`X?iQ&_7uZ=ijH!kEQ2R=$~BlOxf*I7(d at FCH2ZaLwx4dr^}Dl2XK7&y54v_
> zF+S{HZ=aV-_ZP%R`ya2 at Kw$Mzn}S#!&B{O?-)M0>?S{&vXtMmGa?a5z`KdqoZ{Sz-
> zK2Rq1-!QKF;(MUTfB2Js@~8bB_%HL{(0{1(PgtA-{GUJVU)A?t*hl2n4^-XXaesv8
> zvHiDlf0Wjb@%63DFIUg+1O0OI%Yeu7`{?J&%P&{YZ&v1K|EKv)Sa(@|7W12x`P0h$
> z@}Kf|a`KOI^LIct%RgfL1oKnX^LN$rFO~VJ>iHc|N4fb6z?J2vFh5c~|MI8!dG+`_
> zo<rrux6v+O{2%GZ_%`!PAiq!<->x2C{olrK(Z8*XZ)1G5GJXrsb;tPUpW>6%<742*
> z%8efaj4b|%@v-Xh$v?$Us>go-M{axx_`>32Xn!z%f^v%SrONo#pW*}6;}6IOdFN}8
> ze-__>&)NC9dVB!0Q$suP^F{Um>m;L)t7O*7MP at Ohhv5Dq!TxyQXI{vaGoKXr)=?AY
> zU%<Mym<IDZFm2&A;vtLsPjv~Q>R8_Rh1Wm$>`!a`Ztyj-U-$0YixQ3xd|29Ika&Lq
> zT;E18zXSP$^X2h(3|4<gu|D?W+)z4~<&SuNUtvn%7pp-xh~4|a)7?C+W%L974UJ~v
> z`}OdCy#$!Af%qPPkNegmpGVC88}1LFaLfji&FxRSb at x>_=0JT#mP+55Y5zd~35lw>
> ze*);mUPG8~g7`Bl=<hWCp|pO?B#`1h{P`@;@1N;xyrI)T35kYD&^hiLA8^t(%IVJl
> z?=Ogj`Spmu3-EEhf5+P~zns1(q!@1s@#gWdz+ppOzJ^FhsbHUz-gH at 2{yYeiGhZI?
> z8=nV!eEypI0{%aAtN%0s^{X5COus{RZT at b~fAa-rA1_UpkVOMqY+9zm&M!=UfUUJs
> zH;DNU$LYWW74$!c`5kz?Zv0D^)s3z8PNrkAyuFmy_s((Zcynmqi^SR1u4Bg;_EqUW
> z5p5^tKkn~375K$~k9rm6+e*OwtK2|Bt)O~!YnA+IZQCt_zmL91et6dPU%!>h56F2d
> zzfdtgydPex0{;`>Lw>}eZ+1%o^Hfo}5{kF8%2x9F?acYfr)GD(Ldwh*jO{$lMn*sA
> z*RAJ4Vtk;#zZ>WmuJ32Shx)x+HCwh3 at EjcA97`4FUWxSS#n0D=^Xj#jG3zR+b99hu
> z*L|FRkc%))WwCz(`nAHj0{;u(qu-Ei*^2omP3y$cE$jlGBE{$9`7}+jX~SJz1Bqeo
> z$ITOObNT_l&oWcF_)c9a<o`S1qu$2(Y71B&vN$EO;{F<sKiIViF2CL*m;@f_`k<RW
> zpN|Z5rdjEV at j<TIor!Qox!L&(@F7_1n7>C?z_g?O`+S- at 6f3N`d=^|w8yng*hN!B0
> zC)7~6B;!B$4?d4}i1E?>+XFt at g)o?31O9W*Jd<TC{@h&+`nbUD0%t?+-#%%+sd49$
> zFcPPADn4lo=MU(O+w$vTe6T+zHW#GpD*!&$vnM6BVf9@$JCp at T^Tdpv%l-ecA at RL_
> zY9*5IZ!fNxJA|(<kQWd+MjW4k_ZtPDlj3gye5iZADCAoTXx4O_C<}1;rR|<n1<IBe
> z*0-^C%G|;?0p#K8(KW-h>}33bZ7D%HUrax&%h0}n4}RQMoc|8`uqe*^4MjU08F8&5
> zf5h`s?`LjIoOKHNBi&b0>*mAP7x at 2tRh}3h*7ZX_m`{ZCbq9R-&+A^1I@=%T+>_>!
> z41+m-X?AC=yNW?%<uA>=VHUPB`hm|a-+vS1qx}Ck#qm#p0I68Mr11We=pLbTB4dyu
> zh3CS{h?;!Xy0pnMfMf(TH&T7b=?6WHTl_|h4}8$^sK7S>`XQ|_p_XSFs~>PX7)J4Q
> zbflci=b7*+I*}3K#B*Y_RqnTiGWtOdpSG<fUSFWo*RlfN3h>iUdM3Hu>@Q%RwrErV
> zy_vb;en6Lwl#vhgYj#r{l3JKTy6$VBy}ee93?JmPcJ>Ex{2AVFuXVx|_uWimz=z$+
> zX4(3=i0^oEgPY)v0o=EGGW@!x(d~8~OeP-`>^y8sZpiRK4%K#_7x$ls-=*YrQp*2+
> zfDd+4TYc>kmUjtm`IBzL^6-LIGW<dHi^67SrjS{~wcFRsS|`H?{zrw*7t;@R$#$5p
> z6n_WU2Z%o>hSYS&{ZX=_!yp0gF{}*a_0N*PvdhQY-XviPD;yu?kCfqq{2V<2vrMIY
> z<o^PHUS5Rx?C|;dp at 0wD`GN<!S_1gdE3H>i0dGfaeaiiZ`X+%LihoMT-Ra{u9b7a_
> zh7bDny-ZGh6zGNWS-{69+5&!$Z8aXg?$u1dI+`C(Ql$5^s+ at m&Znt?{OI<?tmG*YL
> zG?U9G=uugcocbBS|8}PW-v;n8zNfsowSecmJ_i#i=D{ZD^Z4hD?K9{1-x5Q*EUmx9
> zzaGa2^3ERi5%VA3_sglkNB*FHsMWkF)887WlPK^HJft=h{tjM7^k?#}V%H^)h`sqK
> z&!>spKfym6E+ at Z_eBU`l${#m4e*qu!<_=pX;C|p{-j3C=?rUyL89d-OvkH_rY%d}v
> z<)59Cm+qGFAK<qId5hN<@Tc2I*SGV06_%e;xzKOAfX@}mwb(t>8=>uG`17Bv`jniX
> zO=g*;dfL9;K=9Y0{|xjP?28u9uYu1)Rr^Zmp9k?7_`A<H2QL%A>IaQ$X)CN<a^lyv
> zVa;UtOI#DJJNT!NjGvFc_^T~J`n?bz{$D(xx!C at IUX(u6W%@ft(#668<h|oalR3;j
> ztiR>*H+~C@`x~GA8=q!k at HbBX`~Nl{hO+zDe1B2dUpqUf=T#!HdC|hZ>jJcIY(5m&
> z#n at W)#Qp>9 at 9&1`xk>j&m=6wrr=FzRL%@Be^Yc$sp9RP`e(rbAB|-ILiNoxGLQRi7
> zGJLR;*{|P<_b+f~2Ws?l!}#`TZzBr}IDTbxns-PT^HF7B6Wb#K*l&1o{KTVMO-CIF
> zB};OL-|)yfD#M3AN*i}sOh4?uM!h>o>2IcO0du-))O+r91oC%IEgSSd^4C5yf&6Qq
> z{#m^=w!jW9JpOhqJ4 at -Q3fwRFw!c+_wg+YM339HIW+#r%fIp?{l*Rnp&fYNJ9P0li
> zuR{h1- at z@6cg>^Mu{}%)&yPGCVd&q-MM8=fKmU?#JXeMfYFT^SGjV(a&M)=%!+dQx
> zKdLSPd^~^YoNCI>*WOCdnSUlUI8fyNVQhiTy!tUor1#=cdKPz%%kV)zlLHdP=OfUs
> zsR!Rm<5x-$AA`ShziQi+<*!Sx<x?eZEMRRyrTjIbiAmPulhcxjan6s+t>b-V_;7wP
> z^HLG}hw%QXnkCZwlp5e;Ui?X>7CW~`{LH7%?BD|VE{?x*tX0R=J}IP2k%7NQOKyL_
> zpDgHiLyQl6xz_;jk-m8_zZj0~8PnGEVE*T?Z#9H0Jl;`WznAnv$#q1NJLFWW;Z7M6
> zHvfp(PlzuK)RJ>Q8eqLr3Z(cg0UzQG$JX`h&+bp at 9<L>ML3AMdBacri)X-ei$oU${
> zdpKt3&b|RM{s2zNuXHi}=qI0s`Qxzu!{46}u>VhBsKYV=j}@vLf76y&-#EP~h3~`5
> zh|bC_GcP=Mht!ogb*!((&ZmriShld=^~LrR>}u%L*HZfRfPS$1i$*qIjdc}g7j#zt
> zYd;xZ|JqN+hJV7p!+NRqtN8w2N5?U-<n%4FDRx)J$Lsw32y!kre*y1j?UG346Z02v
> zs`lJ)*oM{br3U{N#s4ew7uDnQ=s)~d at qhgMUy09y{g)fx2ECQV=P~|_dR#R=|F6bZ
> zG5&_}XRxDk<Ewv)e^!rA!q?@-KY{<U_-fVoC)N>TeDz<Ak0Je)@k5Ni{de)P%J|j4
> z8Xp6BX7MY$Z}UHlZ~T|>6W|kzZ&Z(;{Ih!V_j|~Jzjn8JebJxlf53kIsXphwtS<t6
> z`-l3;|80E;JeSqapr4ENA$Xp|`p?SxlRwpORId*K9J%!mAOx&F1oaE+AF9`fRIeYX
> ztpBf`-v|FkZv6np<+1(&^DS6EUp>G7R}cT+>LFqGJ9vI`<N=|^>w~9B&YkRd&;8S7
> z{xifM`l~yN=lg&>HaK^D8tcC_0_Jx^{!t_Rx}JddwAOdYVttZo`ttnOvZy9g2dwcU
> z<6m`aRHqI1|6$*rxPFfTJ4Z-mLiR8HacmlU-v;m@{{P)<+gM>1Y>@R<Wz(bY&m>s)
> z<@0lYwDR~IsC9w_zOV7j|KL0s{cujX7M&rU{{rWZD7_<6d^^C0{*d+B at AqK+H@bfR
> zKvP+Pks_5+V?;X!&h(F4w~sh2IYcHIu=;%F|ATxF)@UuBuL18bQQ0rW9}4(*ufrlr
> zf#om4LPDkI$JGil{8Lxo*K}Whlo(rOIp{3eAfq4l at pAV#F+T7uRr3I+AMHfZ$yx&5
> z3UZ9PLa}|0_g=ofaX#wdW#i(=0O!I1L&Dhn7e+tu$1+GkJih~ew~NYNDSj%<ABVir
> zyUyPUtFJiftRWaEUu-_sm7lNgw$r(EB;_0_J>MW|d<f?c at Y!%|KQTV|MYV!9Nb$D<
> zf8cz*dDCnY0q-#<%y>x$LwkuY6M6p2X7g-|@Y**>>;X%Oap4IWe}I0Ejo-!Rci_Ly
> zLzo|m>zo)QV1533E48TtmbL7S)DZCY5nQd1@!z^;?6;}Wfke|r;a9y!tbVfceA>_~
> zQ;ZLGFTrNYG*(|!!%wil>$4?qy0dfLu;jNC>-0aL<^1tU8<kM&O%RckWi^J5Ff#hl
> z5A+->&W}KR;Pww!DSvbTAC`Ag*RT#OuBW3 at B<<sC%JZ|I_B_+5`7M$>t&^BKr4^Td
> z;B&}v9dY~to?A3x at -!Bg><IXv&v{LDxMO}w{hanEdJ)T8EVX6)QFDsAaOKDy(yRLc
> zx2V_tGWvo4HmP;R=WC!}`IeoO{`(hL{J|jAd8&YYcCR=3NXhc`PBlLA^Gm-q{WSgh
> zg_7S(Zp=4~2$bQ2|9}7288Q7pudQ<jDSjf%Zv{JLXk}r@>T|ND7EtWo*wTi}Pvi at q
> zqwdb}B>0ZW!H at YoJ_Gxs|2;YP-$8yNm$sMUCjdU2x6b(8au at Lah}N$Ul%-F at TFdzJ
> zDxmutRfuosMjUG7?i4MfALMV!W;y*if!uj at bf+`>mI3%6KSw&$Tg2}7mAb!|%6~5J
> zkFhFh;NsL?XG#C&HMgbvas7pL>^5bEI6e&Yk4dZGPY&Q?{<Qpqh9H4+quaSq%IfRR
> zDaz<KwosgJs(O|rEa);N`1cGM{lMphZ_Z+T)ZZtYrZW2T0U!J8y7efL_8q<(McaVD
> z>gsa(T at FPUZoYnoT#D8;c^A7vh7a_AxgsZi4tz6>{W68&=K?;~t-iag!Sc(R=OZfW
> zi+Fut->A{<r!3Es^q7<NM?16pBhz1?KfP~bx$&6=%JZc7g at BLuzj|-XXLWU_!h$L5
> z2mOrS9}Em}Y<lHKB)QkIq=jP?*DnRIlg=x|_#n6YH~(;F^#2BYuov#9$8;31KTNma
> zpVIq-d$@ci#QyZ$8y7{=w!i4(){yfb^ecb)axp%}=k0b&@moNC0r8DSc4zxza#C$U
> zTA#-GbH$>^#^Hq_B&bsxow!xpeuBEMP+TO&2fb*#TUUy2Rgu4#RnVICzg-#rj6%8E
> z at CfHlGWpRQ^CrINOD5U=O4Z8xGq-Pmb7|mdvHZaMpHHW;{DN0qu+PA+aOE0itUuVi
> zxrNgHKTbTpI at Y?)vPj<$a{2Y>p`mro%H#*_yP=%^>KMP(Tkpo~|K+EG1r$@%YGKm@
> z>x+H|KibW@$7YxD^?m78=T(d2fn>Lm%H5 at 3IRDX(#oZRuk9K=5k>*Ew1Am~N@%BVt
> zGq%1d{fp_$S3k~u&}bp!&+(vj*C+joBQM^0-}86^_v925df at y)_}#Be{l)eZ_+vf@
> z=1aogDI|<HK|5WycjhJm`ZU)xf4)g*G1k at eSwlk^{`j3K_J{H$WV`Jy^&@@n%kV)7
> zTgL4d(+{vs96Nckx at Y?!6R7{uFvv;s!TwjHjN*q0tUY-$uW#`f{H=$lZxZnuaB^n$
> ziD1NUjr4<^xoK at 7w$ET6_Sp6DWcMTTpO|1BO8su>`-HwJuV0Ut<MVHie`1~En^az3
> zRGy)lqivo=u6H}WR$G_tFFrV55BNXOc!YSq9?-A9v#lr7tIaP=@P4=QkXRo9?8H#h
> zjJ-lwY5AkY=i15mA6>pqV`KZ<P at kswqTHCphZ#QbXXhSmas4pZrGD$RrTp&<_+US;
> zn}3`u9PN|x+S;>^a09Qmp5^ti^JWeRU3lmadH&_g1a;+8$bU9}5cs-&dowXU$WPk1
> z=d+pom;{=z{tR;pGFbiF!P8q=9}f2d9{=xsYKB?Xu{dJ#Br7Q90;_Lf`0yNs*7e2y
> z3FzI79(hvye3);D_4(v%7VFRXE_N5ie&T))d41sT2P=|d@*k1A8m;f`HP|JiAK(|y
> z^c2$%?@LZUoz3*OWn)w9kMwZM+L_G$<oW)fYOKEmuW#w$;HzS<okn(zKk((XcdQH_
> z_><=)r at jdGUk6FjY*ruDd5Eb6l$W~R>f|Hf9D_L)I{$Y0M85uw!~8i8g>}T9PkK?t
> zCdj|MxA%6x at +yO<YCQh#xHk>g*RK%ji(nmtBUZ`XztU!Ym)>u3zh!Iz)#e=|=I_D$
> zluJnZ4gvdJF5S~jhM#!jXteL7dnCwx<c6tb$%xP9-@*Ui?lchFPuLd*nb}T~+UEpg
> zi@~4(?Qa;d{#5<fH59O)Y3^KW8UCve8%NZwpHJo~-x`rIDqV&T_Q5z`O-w)NS2G8f
> zNz8sKIGEr$`&Y|%UXb74(pW*$S$a>UP)mm2-R0n8-9<@6&Em-97Z;`ah4T&Jd!vio
> z#Q3l;Xt)WJ82?s7{U$hwsypmwp#QLboW1scy!`uN`<WRnW&Cl=4)@nJ&LBNX4a=`S
> zliFwG5BOKA6AQ%qFUZMv^D`5f{cqmU1nbXNHNU<a?_V$VnX^M+`Q-pEKegYy9%}#N
> zIl1pp=T^*3W`8Q>$K_OknE&XXCwscE^({MShIGvD?lBwdGv9?283;8%@SwxBjDD3+
> ztMC_19*|2{nr<#z#m+AbAJ2C^o{RC}+b*5zIx+clb~VHLcD-?@=d$z5C4)`^G)MYz
> z&VbkNT at 7xt`Q(&DlDgK+-DdY1nS25tiq?dS at qzw>y5{2;ev at lv*gtB5_4ujipSO13
> ztRb}idPrrk1NR>`{JwhPeZ&J&)_>M*ZL7sHeAuUk*2)y)ga78#wDnkq-wW`;8YG#&
> z8qM;v#h#4>>?a%3L|?|Aqt?UM9l0D&JoL9dj&zmQAL9CgoOjlhgAc!JNU**X|JzYB
> zi{-O6Ik^7NWBoG+2pt60zp)<IubTVYy&I8#n?!hfJh-*SOGZDe+tk+M<=cn&v at wi+
> zdp&dPzuHYX#}nflz1n*i2yDDSKO-6arQgC+G8eocDbw<QEjq>GKWu%0&eM*CV*a4q
> zjy>nd<mY!^bL^kCtz^kkjL&SGyy at _Ny#6|Lh5;d3-2SJXeHhgD>J#!T!_D5m)*a;k
> zFkD}-lW#756Y~e;QztT9%AXp3{qTP1(a$P-kpFuYgtZbbLjM1J=dLpT+YD6G|DpSo
> zY-!x+>*IE;KAho$e0DXyCdSvyvYu*I>dE|v4?Fs!e`TXwdnfi^(z`s%TgrbgE}zfy
> zEXE8ynnUdTO3KdfXYm1=CAB|;cI%7n5B$F8zcw=e&`DvSCDvCoZXUE5;~UpAN30T9
> zf4{|?e!Ca1*Pc0;OS)`zKKIRAg8XTX`0)RMrESFYqh9yWoQZLtS-V$SV*eRQ*a%NH
> zUq&db_ivXUmLHjIL4iJa8PT$Y$+a&hrI7)fzG at lYeu(rl{s5gl4YrEuhx5>f-kvj<
> ze&y{G at c#9vhBrL$eo9l-wSE5W^fR*mgY#%*IDVuhKfkCR at b9PTew*0bu^)S4W}HlZ
> zz at FIdJt98e!MSPCeaQ?aKlMMc`0c3S`ws}vXQ<bU*8l$V-G4g&55w-*IhprYX*V}+
> z;f at aRWI^YXQ?~3mhx}*pE8O4Z#c#pRTr0 at o@oh*q8tl8X3GWY<%sHtg{3$+DJw6G~
> zksH6Nj89^G1>+}`@yW{gN%i_SHzgC@^(LvJ`ZsnCl~Z4e=kBWYtCjVomG!GvpncJJ
> z<t|jZ&PH^9AEmG|^M_UIuh{)f;6sxpg4jO5b6NcrJ|F8(s at GpFNB_JjzaJFunwH$C
> z#$&R}TvK^bW)Sk<WxEMM``)L~PVxB{?2o!`;XG!467#!2|MM9!#XomL{MJh4cj|6d
> zr*>ljx6fM-mzZ{c_JCLqc)lbw82Ug|-~)aB at g-vV;kliAUz^AFcXjQq=zlieudoy6
> zugz<*#qqCwV}kML^P^O5{(k=dD<7o&$-7hO?=zyU>+QE&e>I={tgUi>+t%x-UnLzO
> zz6buz!t~YR{2hL8-!ZBG_T;xAp1=GY=1mk}PS;C?ev|*|7h~+7^#}XF`F`Q|i+wbv
> z*w=l0i+tUBzVK1Ioyh+b<UjZi9V|ME^Y6g#i=$1X@$GNTdSRX2@*wxo0>sg$ZprD!
> z@>K0(czv&1`q)9a9qy2R13!I at FJ=29!-wyUHn9=M4`JVWvBt=g)t?0HWcaPMojlom
> zSeG}-f7kcFS>Kn~UQUO{A7W0t>y&vsfn>k4GBwIc#PyX_#LwSHZWr&5 at cDCPb5GQ(
> zdyT*MvVdy9d!8ewv-<Nvz8V$%o%s5W>~ijgc4#6wcrvH<=lx867(T?WQXU73>j%Jp
> z*uO%M;(L4a#`=G~(p_^{|0n~~AC$FsI?|T1p9$v+^?SyG5crVfj_?0CrZ5cYXZZ^}
> zKYlY6pTFR_%6HAA^7){y3C77<EHvGV at qwDxoBIfo#N$?B^Z5PQ2HKfTu3d>HoqT(@
> q+qlC=h7bGri3f7}8^H4=+Zsyo^_5M~P9=vs*bDHx!rwGD5dIJU7PkWc
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-storage/testnode/foo.old b/tests/resources/source/pve2-storage/testnode/foo.old
> new file mode 100644
> index 0000000000000000000000000000000000000000..1f37f59f79b2a5c75eb9f02a24f093bc6c84947b
> GIT binary patch
> literal 14688
> zcmeI2dt6Of8^_C3#(hxZR=MQ%4(W>WrcSF;BL)$vbVN$YWkxxeMn~l?MP+E85#ErI
> z#x!UQ=H2sZG+viU!_+h`iIPiVL>gn7=Q(GuW1n3*U5(HC)<4hr?q{v%S!<nVt-a5$
> z?dImFVQOk>p~3x`3}CYyhV=Go#c^BC+Rz3~Y(o}?_y!ANI@`NDI|;5W6|e%IRn>U8
> z4i`fg&+!vBdmVZ0r#iXWSDT%N#u#oenks`Tuv5WCfV#YfDzRT*-ot-W-fUXn^8BxF
> zzB32$C){*-$J=}G11mo_cU`H=+gx>}E^l+ymAbsmRaffrHdkF8DwfVw7886JX*tr=
> z%+g}GsilRLCEroQX9MH2q=w7&x-{I<(!zA4rJ1?4wYj>E*=aG2&Zo%H at cRn(H!x<n
> zanLx_s+&R0{_Hd{KOTG8_fn(gNykU6{;5wJ6_1XOv-*$sX*<+Ble%4{<Kiqk-tJ6;
> z$Cnpj>~Voxzc+DwWqH8|&hy6SU);uv={(yZvSZ!WO4!Q%W?o?4Sb6=43``laOd=U^
> zukXMH$GdHmzWnE(edOz(;-pfC!qjzU`u%EX(0xH|okOTJr1eMRy^OEYtj<9DQ~NT0
> zokOTJr2VO-aa9`C189G0Y212*P-#m0Q%mEjG^z*C{?yXA^$4NTl=kN=+Yjoxq5A^@
> zv$w9j+#i_8<E*$b at ibDoeS!O<4L9<BoE^?tdh_bWaUafFb5 at J99XPAUSv10RY+=Ry
> zmDWYedbF$u?vs{!P~4yExgSKdeRoFQzgB*fI=4NxH{3fc<I(4;`Ob0AF*M%)G6y&r
> zY0~FPI^X83KS%hhE#K8Y`#1>w{Pll${=ho=oY~0nN@;(tUj9}-as2qlI3BRayD92d
> zWjyf)d;QTr at fY8qcLnvW+l2g%`IM(z{#y4B98+(!-z39M1J~=`N6+8F^|5W6+Y34O
> zUyDxa3D&DF=S9ikl|8$_^BSJd_<R(+^QS+10H2J>DBlmf*XXHPU*H?DTfdBO6O;5`
> zrXIoPJ40r^d)5pwdC>Fme&pOVv!v6&9}L`|h+OEm<@4`>@5I at zM22`F$dE>gjQM`x
> zan9%}y at RvFq%wPQDEgy2jdsrs5|c6AMaz)Aqcr1@`Tg^NPp90Nfc{h0_jaHAiQ;@j
> zu4vsOs60YUqM~#9At!2iJdQ~blcf at g7V^`<-nmoZxe~`gf0wja`a7>tmc at F+RpshW
> zh0i|A-hlpVIr?E-y-Jboe(L<3+y8Rr^{<t!ljkhL{wp0kb@==Ht*^eGT+ at EI@>o0^
> z+g}`A<&N#eLo2P3E5F~8gq)*)LVo`|)a&ZwYqi`ziwjn{^UrS_FaQ2Rb&c^e7F6{x
> zXGnZdY5tuo9|C$p_%<_!6x|ymL7rFIbMgjYW`05r^3j>?#;gO*7wtQbEM5?v7YXcl
> z>ETG^V=wG~TLFCQgLn2#{K1D5E}Wda4E^6OD8G2dhn%__ka*gJAxY)$_s#(hyIRtA
> z;V_0Q4EZq}c}~jxamWkSPjW!k88>_Ihrj{W;ZL&*eaNW!JG)AN$HrR>PJH4+(k~=b
> zECUYHO>;(mG3!i57_g4huvXiF;d(|maQdxo?HJ(Yx at ks!kU#v(Tb~A1$#n_Q?m~tX
> zU(UR_afc7N=)yAFZZa6>$4$U)8+)dj-(twRwQEyifR7oj>R}7K`rf2%(ZIN_$cdZs
> zZexGD at +pr-1K)C(poi^YopmxG-bbBvMA&}0D1Bzs4ThXgXdT7%XYGJ<bVeOS?(VCx
> zD*?vyz%(?F0Y3JdbV&xV=OOK0LxJ7h-Cec<-`LxImA*_de&npr`WSKyBWl$CP}g6y
> z2j-X5_M98$)AQAELQb4@$<z>dgLhQss_P6{l4fK2^KKuadHqDno_vOQ7{;cSKz&$*
> z9xDmE0^iS?!!~z;cl7xn0e??xo*5;tx7J~gBNokNNS7biFG2s7$Zml_Rt#}<zTXZR
> z*Sk6A*Y at blcRz;xkRr3+jP)G*pfYb2)GySh_${dCepbnQ)<FG)1s@%b^%+!Zn~C*k
> zr#+f|{?LcSi-*35M1PyoBE3FhvS-5YWAQvM>tr7P#8XVHw<mvs>|F7O#1ZZ%_KRF*
> zA?tV@(vA#m{`20#wtNeoCu{bfHNf+vV_=V9<XtDD-bHqtplyPDJ<Dr(n<T|}koh`e
> zW7dE3)<;?fcNt=1FS~N%GsX9bjNhs*)Hm9i*c<A<YYl!l7bjtRe}DfmoL|K6?{)mN
> z5%Pf}^K806e at S#@kv?#eUbHUmCrHO4!})%|4tTuV!Q7rD4B0U0R2A|KW}5Y;B8H?b
> zF4~2>AUsw}2E5Q`d}=tb=w!@5X)*M_6So8RJ3OzP7zX?Olbk^_a6j8T7$k{sl98a8
> zqTH)DJ;}*Vab5j^?F}701ByLKuYiMzr9?)wy1qD)R^mxKj1xy$naN1<k?#vz$9a;9
> zoo1)o50R0=73PNzo$yjy|4Vm&sO<{vSA1u3uENlpj9c$oJiV=qRQMm?>N~=lY#x$7
> za<_(zJS|us*(%AK9QoQ|-1O&gziAg~@}Aa=YVq$4SUzqV_-AMBaeZP|-H+c_ZS~-j
> zKW~Id8AE>EZE-E!wEp|IY{HC7Wq05_PIGtFg7wsFXYco4Sl<k1tr=^9LnReXBjNlU
> zxO~)Y!+mf*a{4vZof&p at hp?|CBrkKXxWqJ&#QyOjD{7g9*k&$hKglDo+I-c`r>Xs$
> zQi=2X6GKSfIRos&b?4Q4JU__d`{~+-knP{(q<?oki0mx0O^DbKLUez<l%EOQ)Z-P#
> z>lsrOejrpv`kzjU_USZ at 477O98TrE0fVeg7J;>F4`DLF22k(0L?@B*UlHFy43-W;Y
> zi@&Ze^Q<<$s(*Z1nlN8Rd{+k<$9c%>o$U<lv3Rb|!!Nza=%h)x$PYeSr?v5d7s<}4
> ze7g(qKeuS^bItQ2_MH!QME<?_qel)#-XtjJsxfj<{4a$s4trP2C!CKu_9~j#Z?+5U
> zPbPEQf2K_*2X0 at mSmzA$FIyWkV%~Hz=v>MdhsVgsjunxche)TBGN)^oT^wa3D)`}V
> zS4yU<&0qOPv{3-Gzc$6EKfBYD6to)tVOKaWa9sThJ&AP&kwyY1FDZSJ2ImQ0$MYF2
> z|M{+kTh^nc9$r4bwCsll?*|b*Uz$?y!tbLl`VTZy=6 at 60OC*xkxISPd!u5IG;}!ni
> z|9|5*{k#)?A5ApgTJ<N`KX1BUxxa<$Bjh at +7i(alcpkd1&<muA at cSLl8;(UARhdP7
> zi|=2p%F>k_UxMHJ at PC3KVLXO@tVESH7J(js at vuGmQNN<x8U7Y?ECW3Xu1lAyvgl(~
> z)>t9nm8#5k0Q~^tbMMzk^;B8 at 9uNAt_YCCkKOl4Zc4N6ly&U7C{tZUyuP;9XeH{9W
> zP#?i~d`{fHeft!JKCblRdl=ZRw%?;I{(7$uOYi?R>E#ej=x^%tMtMFo_<qXOkGlF7
> z)+bkQ&0SCG)=xSASDlBAtalZ?46B2$pEZD`g8stzLRRJzft~~T<a!+DeFck9kK_9d
> zZ!0*K>n~tYU(lzqJ?EF}{d^YsQP1c51uWP5d43_YsQ>f)?6;uL^BMJi9!sfTrWk)U
> zMtvXK_u=XNJcf_WulMuvv8eag#N7RrMZF*Wl)3liUd2*@Uz$Evr9VV!*7-?$t3EF%
> zpATMfzZc$*MV6dCGxUx^k14lO=r#Ix<t$nPdMvKT;P!RWpIFpyv3+K5d3)(tj{CbR
> z`hTOX at Nayk@S}c<?Ni&-tj~II{u7Qh`_-&3i~23bk8OZ{3*D6G0o~7Ze{%J%tS4c;
> z(Dx!E{*=h`TTKhZ|9`oEu}i_};=f<Nh1Y5_+pP|fk5AeF{TA2t%5z13s at J*{gy1|c
> zcf8yD`YnDxsMq2+3PPr#RdPyi4`dPbhkPxsXBPEaY(G=aOKyerL;a at 7a=%=^#rCMz
> zqD4IxZLEStl>JKNekGTDC9iKK+Z>fM^la35ATl1S$ZrLDEskS7=(lJ&magSEuUPIE
> wMREI^eWqT&g)l7Yw-_%D^jfs5xc;c$0xIJbaQZFkx!8^}{=W$M?R%c&FA=0UJOBUy
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-storage/testnode/iso b/tests/resources/source/pve2-storage/testnode/iso
> new file mode 100644
> index 0000000000000000000000000000000000000000..1f37f59f79b2a5c75eb9f02a24f093bc6c84947b
> GIT binary patch
> literal 14688
> zcmeI2dt6Of8^_C3#(hxZR=MQ%4(W>WrcSF;BL)$vbVN$YWkxxeMn~l?MP+E85#ErI
> z#x!UQ=H2sZG+viU!_+h`iIPiVL>gn7=Q(GuW1n3*U5(HC)<4hr?q{v%S!<nVt-a5$
> z?dImFVQOk>p~3x`3}CYyhV=Go#c^BC+Rz3~Y(o}?_y!ANI@`NDI|;5W6|e%IRn>U8
> z4i`fg&+!vBdmVZ0r#iXWSDT%N#u#oenks`Tuv5WCfV#YfDzRT*-ot-W-fUXn^8BxF
> zzB32$C){*-$J=}G11mo_cU`H=+gx>}E^l+ymAbsmRaffrHdkF8DwfVw7886JX*tr=
> z%+g}GsilRLCEroQX9MH2q=w7&x-{I<(!zA4rJ1?4wYj>E*=aG2&Zo%H at cRn(H!x<n
> zanLx_s+&R0{_Hd{KOTG8_fn(gNykU6{;5wJ6_1XOv-*$sX*<+Ble%4{<Kiqk-tJ6;
> z$Cnpj>~Voxzc+DwWqH8|&hy6SU);uv={(yZvSZ!WO4!Q%W?o?4Sb6=43``laOd=U^
> zukXMH$GdHmzWnE(edOz(;-pfC!qjzU`u%EX(0xH|okOTJr1eMRy^OEYtj<9DQ~NT0
> zokOTJr2VO-aa9`C189G0Y212*P-#m0Q%mEjG^z*C{?yXA^$4NTl=kN=+Yjoxq5A^@
> zv$w9j+#i_8<E*$b at ibDoeS!O<4L9<BoE^?tdh_bWaUafFb5 at J99XPAUSv10RY+=Ry
> zmDWYedbF$u?vs{!P~4yExgSKdeRoFQzgB*fI=4NxH{3fc<I(4;`Ob0AF*M%)G6y&r
> zY0~FPI^X83KS%hhE#K8Y`#1>w{Pll${=ho=oY~0nN@;(tUj9}-as2qlI3BRayD92d
> zWjyf)d;QTr at fY8qcLnvW+l2g%`IM(z{#y4B98+(!-z39M1J~=`N6+8F^|5W6+Y34O
> zUyDxa3D&DF=S9ikl|8$_^BSJd_<R(+^QS+10H2J>DBlmf*XXHPU*H?DTfdBO6O;5`
> zrXIoPJ40r^d)5pwdC>Fme&pOVv!v6&9}L`|h+OEm<@4`>@5I at zM22`F$dE>gjQM`x
> zan9%}y at RvFq%wPQDEgy2jdsrs5|c6AMaz)Aqcr1@`Tg^NPp90Nfc{h0_jaHAiQ;@j
> zu4vsOs60YUqM~#9At!2iJdQ~blcf at g7V^`<-nmoZxe~`gf0wja`a7>tmc at F+RpshW
> zh0i|A-hlpVIr?E-y-Jboe(L<3+y8Rr^{<t!ljkhL{wp0kb@==Ht*^eGT+ at EI@>o0^
> z+g}`A<&N#eLo2P3E5F~8gq)*)LVo`|)a&ZwYqi`ziwjn{^UrS_FaQ2Rb&c^e7F6{x
> zXGnZdY5tuo9|C$p_%<_!6x|ymL7rFIbMgjYW`05r^3j>?#;gO*7wtQbEM5?v7YXcl
> z>ETG^V=wG~TLFCQgLn2#{K1D5E}Wda4E^6OD8G2dhn%__ka*gJAxY)$_s#(hyIRtA
> z;V_0Q4EZq}c}~jxamWkSPjW!k88>_Ihrj{W;ZL&*eaNW!JG)AN$HrR>PJH4+(k~=b
> zECUYHO>;(mG3!i57_g4huvXiF;d(|maQdxo?HJ(Yx at ks!kU#v(Tb~A1$#n_Q?m~tX
> zU(UR_afc7N=)yAFZZa6>$4$U)8+)dj-(twRwQEyifR7oj>R}7K`rf2%(ZIN_$cdZs
> zZexGD at +pr-1K)C(poi^YopmxG-bbBvMA&}0D1Bzs4ThXgXdT7%XYGJ<bVeOS?(VCx
> zD*?vyz%(?F0Y3JdbV&xV=OOK0LxJ7h-Cec<-`LxImA*_de&npr`WSKyBWl$CP}g6y
> z2j-X5_M98$)AQAELQb4@$<z>dgLhQss_P6{l4fK2^KKuadHqDno_vOQ7{;cSKz&$*
> z9xDmE0^iS?!!~z;cl7xn0e??xo*5;tx7J~gBNokNNS7biFG2s7$Zml_Rt#}<zTXZR
> z*Sk6A*Y at blcRz;xkRr3+jP)G*pfYb2)GySh_${dCepbnQ)<FG)1s@%b^%+!Zn~C*k
> zr#+f|{?LcSi-*35M1PyoBE3FhvS-5YWAQvM>tr7P#8XVHw<mvs>|F7O#1ZZ%_KRF*
> zA?tV@(vA#m{`20#wtNeoCu{bfHNf+vV_=V9<XtDD-bHqtplyPDJ<Dr(n<T|}koh`e
> zW7dE3)<;?fcNt=1FS~N%GsX9bjNhs*)Hm9i*c<A<YYl!l7bjtRe}DfmoL|K6?{)mN
> z5%Pf}^K806e at S#@kv?#eUbHUmCrHO4!})%|4tTuV!Q7rD4B0U0R2A|KW}5Y;B8H?b
> zF4~2>AUsw}2E5Q`d}=tb=w!@5X)*M_6So8RJ3OzP7zX?Olbk^_a6j8T7$k{sl98a8
> zqTH)DJ;}*Vab5j^?F}701ByLKuYiMzr9?)wy1qD)R^mxKj1xy$naN1<k?#vz$9a;9
> zoo1)o50R0=73PNzo$yjy|4Vm&sO<{vSA1u3uENlpj9c$oJiV=qRQMm?>N~=lY#x$7
> za<_(zJS|us*(%AK9QoQ|-1O&gziAg~@}Aa=YVq$4SUzqV_-AMBaeZP|-H+c_ZS~-j
> zKW~Id8AE>EZE-E!wEp|IY{HC7Wq05_PIGtFg7wsFXYco4Sl<k1tr=^9LnReXBjNlU
> zxO~)Y!+mf*a{4vZof&p at hp?|CBrkKXxWqJ&#QyOjD{7g9*k&$hKglDo+I-c`r>Xs$
> zQi=2X6GKSfIRos&b?4Q4JU__d`{~+-knP{(q<?oki0mx0O^DbKLUez<l%EOQ)Z-P#
> z>lsrOejrpv`kzjU_USZ at 477O98TrE0fVeg7J;>F4`DLF22k(0L?@B*UlHFy43-W;Y
> zi@&Ze^Q<<$s(*Z1nlN8Rd{+k<$9c%>o$U<lv3Rb|!!Nza=%h)x$PYeSr?v5d7s<}4
> ze7g(qKeuS^bItQ2_MH!QME<?_qel)#-XtjJsxfj<{4a$s4trP2C!CKu_9~j#Z?+5U
> zPbPEQf2K_*2X0 at mSmzA$FIyWkV%~Hz=v>MdhsVgsjunxche)TBGN)^oT^wa3D)`}V
> zS4yU<&0qOPv{3-Gzc$6EKfBYD6to)tVOKaWa9sThJ&AP&kwyY1FDZSJ2ImQ0$MYF2
> z|M{+kTh^nc9$r4bwCsll?*|b*Uz$?y!tbLl`VTZy=6 at 60OC*xkxISPd!u5IG;}!ni
> z|9|5*{k#)?A5ApgTJ<N`KX1BUxxa<$Bjh at +7i(alcpkd1&<muA at cSLl8;(UARhdP7
> zi|=2p%F>k_UxMHJ at PC3KVLXO@tVESH7J(js at vuGmQNN<x8U7Y?ECW3Xu1lAyvgl(~
> z)>t9nm8#5k0Q~^tbMMzk^;B8 at 9uNAt_YCCkKOl4Zc4N6ly&U7C{tZUyuP;9XeH{9W
> zP#?i~d`{fHeft!JKCblRdl=ZRw%?;I{(7$uOYi?R>E#ej=x^%tMtMFo_<qXOkGlF7
> z)+bkQ&0SCG)=xSASDlBAtalZ?46B2$pEZD`g8stzLRRJzft~~T<a!+DeFck9kK_9d
> zZ!0*K>n~tYU(lzqJ?EF}{d^YsQP1c51uWP5d43_YsQ>f)?6;uL^BMJi9!sfTrWk)U
> zMtvXK_u=XNJcf_WulMuvv8eag#N7RrMZF*Wl)3liUd2*@Uz$Evr9VV!*7-?$t3EF%
> zpATMfzZc$*MV6dCGxUx^k14lO=r#Ix<t$nPdMvKT;P!RWpIFpyv3+K5d3)(tj{CbR
> z`hTOX at Nayk@S}c<?Ni&-tj~II{u7Qh`_-&3i~23bk8OZ{3*D6G0o~7Ze{%J%tS4c;
> z(Dx!E{*=h`TTKhZ|9`oEu}i_};=f<Nh1Y5_+pP|fk5AeF{TA2t%5z13s at J*{gy1|c
> zcf8yD`YnDxsMq2+3PPr#RdPyi4`dPbhkPxsXBPEaY(G=aOKyerL;a at 7a=%=^#rCMz
> zqD4IxZLEStl>JKNekGTDC9iKK+Z>fM^la35ATl1S$ZrLDEskS7=(lJ&magSEuUPIE
> wMREI^eWqT&g)l7Yw-_%D^jfs5xc;c$0xIJbaQZFkx!8^}{=W$M?R%c&FA=0UJOBUy
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-vm/100 b/tests/resources/source/pve2-vm/100
> new file mode 100644
> index 0000000000000000000000000000000000000000..a0c8f286362dfbe63961ed057cf47ed7aa6a78f4
> GIT binary patch
> literal 67744
> zcmeI5&5ImG9EMwS(I6<~pa;=F6hRLznO)rli8C>4 at Sul<1VIpkS#SxPNZcjy?w{bz
> zOF)ExSMlP-n^*5%{1f)*ZJnX}UFNOXsqUVx>Fu3<a at cqKqkdKW)Kk@&eD3Vr$kx`@
> z23hgr-8cXI>!WvG|KehCto%SXB+mUikH7x*(2L$2-MYE$r?SVvaenyU at u{aPoSf-&
> z+ at _6w$IrXJyYB;RrQfjA_MZ3d-go!xf!lcAnNC}J-ut@;d-v^Wv+Tz9&L_76p;P-j
> z?)Smrfp^?SzZ1?6ckkSt?zydgA3fYV*q!RQjebYBw|7P}yHl2ZT#VzHsqtjlzaQFR
> zgM+euU$ffn_50fy_51g;(;c_>ykEVwoPIwYeLh|I<ojiNRo3sayejK=SzeX(yDYED
> z`dyY+hcA5p&52CoZ`P*|O25B8EWM at VhFc}qpSSCa|9nnmHa9l6wg&4PTUT`^mRGOG
> zu2#9$_VW$a2OC at O4>kwyZB`iGPUGiWtI$izTiWJHf77$qeEsFsn$~$~=yjUbQ~NNd
> zpS{-i#kxvWFRY{ET4S2J`Eug%skFwW)cLxp_F>koqx-`;I at a~NsrF&kt)u(HI-d=7
> zWwF%yP-fYSixnzbh2y){^u3|>%EaUQ@}%x!kFE8gT&zm0RoeMTJ-;2V_vD9RjBWWf
> ztqWzA{Zig2a!0T}o*XpvFH?JE;_>}>QaAEYkxN<^%E+w?UP?M2<1zHA9_yo~b>aGD
> zebfUO at ay_|d;06J-t&cb>%F1Ovcn7EJ#~%)eoudDxIfRnKhloxkA~yZdqY`=RkeGQ
> zKJU28e$|tY)mYEorFEe?%Go=sol*NRtF=DmuEO6`^};$jKBebMr?f6qM_H+H<R;Zo
> zMsAH>Qu{EYjUpGrIy#OtiC$9sFr$qk7sER8JJKY2N$r(K$B91=Hr$`X_ebjS$?qtn
> z$VIhRMs8i`QtIdJTRnNb5d3i?wO1Y;C;t4Fe0`)HUsJEuUb*Nz%xjl=KKfQqUeDuO
> zc3$n3srhBBkFqI<UQazAeXA$0qmUyP)n0jYocQxw^7WB+d`<U#wO2+^FLWvOeDtT@
> zR>Av?BCiyAsmPa$e7nfYMZQ|3{yfb_ah!+Ni9Y9O|JQNofzHoM>g8O;2Y${&T$K3Y
> zeDKA2$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<fR*
> z&Iezdhdfc at i}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0rJW=9{^T8MAAy1U}
> z;(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2$P*>LI3Ij*9`Zzq
> zFV1Jxe9=6UKF{!g$Akd;pL?)s`ycbm{N at Cl!@T_;Uz`*Bf%6Ex!58O)FU|vBoJUst
> z{aA6q7w01`O7<7$gD=iQo+$Cf`QVH5kSEHn`=W7@@p*(#KlyZh{W3oHa at F2P>^nZc
> ztHy)%>+`#6>$mIkyK3u+=kfIf4|q%noRtS%-~Sk&uMgh8&Ldnm_~Lx<#d+Y1^T_!9
> zs2oV~HS{AqW`A*i&U$|d=Z9mTpYzV+m7zb+a}D<^>N(H4>$mGZF~41z-+%7?e&yoN
> zmrmAiete<f`t7=ZsmGW4=NqZV*Y$d-`Sq<{*XNh<`F;-%cuWZ30UqE1>wtZLeSm#n
> zb at qYq^T*N1{jU4#Ien|w_5HAKzkU_^$L~kw>sepRe1%`y{SW_So^ze&A^th1rte?;
> z!@mgu)?4lY`%BJ2KCr(y4{=fAi}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0r
> zJW=9{^T8MAAy1U};(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2
> z$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<iEnUo_6X
> zWY_0|@%egUe{mk+I>i^~gD=hlUz|tQ at ZT?Cy*W?ToAY43IS<xb&O={AKf+`77x#z#
> z#d+Y1^I(6`&f;7`PjuY%{YB#>tIa2z;4~qC2Y7%7>DNKm-<OQf*Zrz}USMDM`Gp5O
> zc+aJK&+-27^|Wg559XKo%?UV%dGAqtaZc<9&Li{&Uz`uVIFDuf64vK9&i}meVSn-Y
> zWPfoUq0gy(3F~tl=MNwFObFls9^gU$)<O9G<^MOx_W^x9 at B3ok{(l3W*WY7xKYyg=
> z*Y)+2`g!|SFZKMU=9hYWU9T6u&$EVqf2Qltn|gey`Sq<{>iM9azt7<Tj|l-h=$Z%r
> E1Fg*h5&!@I
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-vm/400 b/tests/resources/source/pve2-vm/400
> new file mode 100644
> index 0000000000000000000000000000000000000000..a0c8f286362dfbe63961ed057cf47ed7aa6a78f4
> GIT binary patch
> literal 67744
> zcmeI5&5ImG9EMwS(I6<~pa;=F6hRLznO)rli8C>4 at Sul<1VIpkS#SxPNZcjy?w{bz
> zOF)ExSMlP-n^*5%{1f)*ZJnX}UFNOXsqUVx>Fu3<a at cqKqkdKW)Kk@&eD3Vr$kx`@
> z23hgr-8cXI>!WvG|KehCto%SXB+mUikH7x*(2L$2-MYE$r?SVvaenyU at u{aPoSf-&
> z+ at _6w$IrXJyYB;RrQfjA_MZ3d-go!xf!lcAnNC}J-ut@;d-v^Wv+Tz9&L_76p;P-j
> z?)Smrfp^?SzZ1?6ckkSt?zydgA3fYV*q!RQjebYBw|7P}yHl2ZT#VzHsqtjlzaQFR
> zgM+euU$ffn_50fy_51g;(;c_>ykEVwoPIwYeLh|I<ojiNRo3sayejK=SzeX(yDYED
> z`dyY+hcA5p&52CoZ`P*|O25B8EWM at VhFc}qpSSCa|9nnmHa9l6wg&4PTUT`^mRGOG
> zu2#9$_VW$a2OC at O4>kwyZB`iGPUGiWtI$izTiWJHf77$qeEsFsn$~$~=yjUbQ~NNd
> zpS{-i#kxvWFRY{ET4S2J`Eug%skFwW)cLxp_F>koqx-`;I at a~NsrF&kt)u(HI-d=7
> zWwF%yP-fYSixnzbh2y){^u3|>%EaUQ@}%x!kFE8gT&zm0RoeMTJ-;2V_vD9RjBWWf
> ztqWzA{Zig2a!0T}o*XpvFH?JE;_>}>QaAEYkxN<^%E+w?UP?M2<1zHA9_yo~b>aGD
> zebfUO at ay_|d;06J-t&cb>%F1Ovcn7EJ#~%)eoudDxIfRnKhloxkA~yZdqY`=RkeGQ
> zKJU28e$|tY)mYEorFEe?%Go=sol*NRtF=DmuEO6`^};$jKBebMr?f6qM_H+H<R;Zo
> zMsAH>Qu{EYjUpGrIy#OtiC$9sFr$qk7sER8JJKY2N$r(K$B91=Hr$`X_ebjS$?qtn
> z$VIhRMs8i`QtIdJTRnNb5d3i?wO1Y;C;t4Fe0`)HUsJEuUb*Nz%xjl=KKfQqUeDuO
> zc3$n3srhBBkFqI<UQazAeXA$0qmUyP)n0jYocQxw^7WB+d`<U#wO2+^FLWvOeDtT@
> zR>Av?BCiyAsmPa$e7nfYMZQ|3{yfb_ah!+Ni9Y9O|JQNofzHoM>g8O;2Y${&T$K3Y
> zeDKA2$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<fR*
> z&Iezdhdfc at i}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0rJW=9{^T8MAAy1U}
> z;(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2$P*>LI3Ij*9`Zzq
> zFV1Jxe9=6UKF{!g$Akd;pL?)s`ycbm{N at Cl!@T_;Uz`*Bf%6Ex!58O)FU|vBoJUst
> z{aA6q7w01`O7<7$gD=iQo+$Cf`QVH5kSEHn`=W7@@p*(#KlyZh{W3oHa at F2P>^nZc
> ztHy)%>+`#6>$mIkyK3u+=kfIf4|q%noRtS%-~Sk&uMgh8&Ldnm_~Lx<#d+Y1^T_!9
> zs2oV~HS{AqW`A*i&U$|d=Z9mTpYzV+m7zb+a}D<^>N(H4>$mGZF~41z-+%7?e&yoN
> zmrmAiete<f`t7=ZsmGW4=NqZV*Y$d-`Sq<{*XNh<`F;-%cuWZ30UqE1>wtZLeSm#n
> zb at qYq^T*N1{jU4#Ien|w_5HAKzkU_^$L~kw>sepRe1%`y{SW_So^ze&A^th1rte?;
> z!@mgu)?4lY`%BJ2KCr(y4{=fAi}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0r
> zJW=9{^T8MAAy1U};(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2
> z$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<iEnUo_6X
> zWY_0|@%egUe{mk+I>i^~gD=hlUz|tQ at ZT?Cy*W?ToAY43IS<xb&O={AKf+`77x#z#
> z#d+Y1^I(6`&f;7`PjuY%{YB#>tIa2z;4~qC2Y7%7>DNKm-<OQf*Zrz}USMDM`Gp5O
> zc+aJK&+-27^|Wg559XKo%?UV%dGAqtaZc<9&Li{&Uz`uVIFDuf64vK9&i}meVSn-Y
> zWPfoUq0gy(3F~tl=MNwFObFls9^gU$)<O9G<^MOx_W^x9 at B3ok{(l3W*WY7xKYyg=
> z*Y)+2`g!|SFZKMU=9hYWU9T6u&$EVqf2Qltn|gey`Sq<{>iM9azt7<Tj|l-h=$Z%r
> E1Fg*h5&!@I
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/resources/source/pve2-vm/500.old b/tests/resources/source/pve2-vm/500.old
> new file mode 100644
> index 0000000000000000000000000000000000000000..a0c8f286362dfbe63961ed057cf47ed7aa6a78f4
> GIT binary patch
> literal 67744
> zcmeI5&5ImG9EMwS(I6<~pa;=F6hRLznO)rli8C>4 at Sul<1VIpkS#SxPNZcjy?w{bz
> zOF)ExSMlP-n^*5%{1f)*ZJnX}UFNOXsqUVx>Fu3<a at cqKqkdKW)Kk@&eD3Vr$kx`@
> z23hgr-8cXI>!WvG|KehCto%SXB+mUikH7x*(2L$2-MYE$r?SVvaenyU at u{aPoSf-&
> z+ at _6w$IrXJyYB;RrQfjA_MZ3d-go!xf!lcAnNC}J-ut@;d-v^Wv+Tz9&L_76p;P-j
> z?)Smrfp^?SzZ1?6ckkSt?zydgA3fYV*q!RQjebYBw|7P}yHl2ZT#VzHsqtjlzaQFR
> zgM+euU$ffn_50fy_51g;(;c_>ykEVwoPIwYeLh|I<ojiNRo3sayejK=SzeX(yDYED
> z`dyY+hcA5p&52CoZ`P*|O25B8EWM at VhFc}qpSSCa|9nnmHa9l6wg&4PTUT`^mRGOG
> zu2#9$_VW$a2OC at O4>kwyZB`iGPUGiWtI$izTiWJHf77$qeEsFsn$~$~=yjUbQ~NNd
> zpS{-i#kxvWFRY{ET4S2J`Eug%skFwW)cLxp_F>koqx-`;I at a~NsrF&kt)u(HI-d=7
> zWwF%yP-fYSixnzbh2y){^u3|>%EaUQ@}%x!kFE8gT&zm0RoeMTJ-;2V_vD9RjBWWf
> ztqWzA{Zig2a!0T}o*XpvFH?JE;_>}>QaAEYkxN<^%E+w?UP?M2<1zHA9_yo~b>aGD
> zebfUO at ay_|d;06J-t&cb>%F1Ovcn7EJ#~%)eoudDxIfRnKhloxkA~yZdqY`=RkeGQ
> zKJU28e$|tY)mYEorFEe?%Go=sol*NRtF=DmuEO6`^};$jKBebMr?f6qM_H+H<R;Zo
> zMsAH>Qu{EYjUpGrIy#OtiC$9sFr$qk7sER8JJKY2N$r(K$B91=Hr$`X_ebjS$?qtn
> z$VIhRMs8i`QtIdJTRnNb5d3i?wO1Y;C;t4Fe0`)HUsJEuUb*Nz%xjl=KKfQqUeDuO
> zc3$n3srhBBkFqI<UQazAeXA$0qmUyP)n0jYocQxw^7WB+d`<U#wO2+^FLWvOeDtT@
> zR>Av?BCiyAsmPa$e7nfYMZQ|3{yfb_ah!+Ni9Y9O|JQNofzHoM>g8O;2Y${&T$K3Y
> zeDKA2$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<fR*
> z&Iezdhdfc at i}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0rJW=9{^T8MAAy1U}
> z;(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2$P*>LI3Ij*9`Zzq
> zFV1Jxe9=6UKF{!g$Akd;pL?)s`ycbm{N at Cl!@T_;Uz`*Bf%6Ex!58O)FU|vBoJUst
> z{aA6q7w01`O7<7$gD=iQo+$Cf`QVH5kSEHn`=W7@@p*(#KlyZh{W3oHa at F2P>^nZc
> ztHy)%>+`#6>$mIkyK3u+=kfIf4|q%noRtS%-~Sk&uMgh8&Ldnm_~Lx<#d+Y1^T_!9
> zs2oV~HS{AqW`A*i&U$|d=Z9mTpYzV+m7zb+a}D<^>N(H4>$mGZF~41z-+%7?e&yoN
> zmrmAiete<f`t7=ZsmGW4=NqZV*Y$d-`Sq<{*XNh<`F;-%cuWZ30UqE1>wtZLeSm#n
> zb at qYq^T*N1{jU4#Ien|w_5HAKzkU_^$L~kw>sepRe1%`y{SW_So^ze&A^th1rte?;
> z!@mgu)?4lY`%BJ2KCr(y4{=fAi}S%3=OIs&_~Lx<#d*jRCB8Txd~qJ~M2RoX2Vb0r
> zJW=9{^T8MAAy1U};(YMMdB_tbzBnIzaUSwSi7(CvUz~?LQR0j9!58NtPn7uLeDKA2
> z$P*>LI3Ij*9`ZzqFU|*FoQFJ7;*0aa7v~{Ql=$L&@Wpw^6D7VlAAE5h@<iEnUo_6X
> zWY_0|@%egUe{mk+I>i^~gD=hlUz|tQ at ZT?Cy*W?ToAY43IS<xb&O={AKf+`77x#z#
> z#d+Y1^I(6`&f;7`PjuY%{YB#>tIa2z;4~qC2Y7%7>DNKm-<OQf*Zrz}USMDM`Gp5O
> zc+aJK&+-27^|Wg559XKo%?UV%dGAqtaZc<9&Li{&Uz`uVIFDuf64vK9&i}meVSn-Y
> zWPfoUq0gy(3F~tl=MNwFObFls9^gU$)<O9G<^MOx_W^x9 at B3ok{(l3W*WY7xKYyg=
> z*Y)+2`g!|SFZKMU=9hYWU9T6u&$EVqf2Qltn|gey`Sq<{>iM9azt7<Tj|l-h=$Z%r
> E1Fg*h5&!@I
>
> literal 0
> HcmV?d00001
>
> diff --git a/tests/utils.rs b/tests/utils.rs
> new file mode 100644
> index 0000000..be56095
> --- /dev/null
> +++ b/tests/utils.rs
> @@ -0,0 +1,117 @@
> +use pretty_assertions::assert_eq;
> +use std::{
> +    env, fs,
> +    io::{BufRead, Cursor},
> +    path::{Path, PathBuf},
> +    process::Command,
> +};
> +
> +pub const TMPDIR: &str = "tmp_tests";
> +pub const TMPDIR_SOURCE_BASEDIR: &str = "tmp_tests/resources/source";
> +pub const TMPDIR_TARGET: &str = "tmp_tests/target";
> +pub const TMPDIR_COMPARE: &str = "tmp_tests/resources/compare";
> +pub const TMPDIR_RESOURCELISTS: &str = "tmp_tests/resources/resourcelists";
> +pub const TEST_RESOURCE_DIR: &str = "tests/resources";
> +
> +fn get_target_dir() -> PathBuf {
> +    let bin = env::current_exe().expect("exe path");
> +    let mut target_dir = PathBuf::from(bin.parent().expect("bin parent"));
> +    target_dir.pop();
> +    target_dir
> +}
> +
> +pub fn migration_tool_path() -> String {
> +    let mut target_dir = get_target_dir();
> +    target_dir.push("proxmox-rrd-migration-tool");
> +    target_dir.to_str().unwrap().to_string()
> +}
> +
> +/// Prepare the directory with the source files on which the tests are performed
> +pub fn test_prepare() {
> +    let tmpdir = Path::new(TMPDIR);
> +
> +    println!("Setting up test tmp dir");
> +    if tmpdir.exists() {
> +        fs::remove_dir_all(tmpdir).expect("remove tmpdir");
> +    }
> +    fs::create_dir(tmpdir).expect("create tmpdir");
> +    fs::create_dir_all(TMPDIR_TARGET).expect("created tmp target dir");
> +
> +    Command::new("cp")
> +        .args(["-ra", TEST_RESOURCE_DIR, TMPDIR])
> +        .output()
> +        .expect("copy test resource files");
> +}
> +
> +/// Loop over directories to compare results
> +///
> +/// type:               type of test, node, guest, storage
> +/// target_path:        path to the dir where the target RRD files are
> +/// comp_subdir_prefix: subdir prefix where the target files are expetect to be per type
> +pub fn compare_results(migrationtype: &str, target_path: &PathBuf, comp_subdir_prefix: &str) {
> +    fs::read_dir(&target_path)
> +        .expect(format!("could not read target {migrationtype} dir").as_str())
> +        .filter(|f| f.is_ok())
> +        .map(|f| f.unwrap().path())
> +        .filter(|f| f.is_file())

You can use filter_map here

> +        .for_each(|file| {
> +            let path = file.as_path();
> +
> +            let expected_path: PathBuf = [
> +                TMPDIR_COMPARE,
> +                format!(
> +                    "{}_{}",
> +                    comp_subdir_prefix,
> +                    file.file_name().unwrap().to_string_lossy()
> +                )
> +                .as_str(),
> +            ]
> +            .iter()
> +            .collect();
> +            let expected = fs::read_to_string(expected_path).expect("read compare file");
> +            let testcase = String::from_utf8(
> +                Command::new("/usr/bin/rrdtool")
> +                    .args(["info", path.to_str().unwrap()])
> +                    .output()
> +                    .expect("execute rrdtool info")
> +                    .stdout,
> +            )
> +            .expect("rrdtool into to string");
> +            compare_rrdinfo_output(testcase, expected);
> +        });
> +}
> +
> +/// Compares the output of rrdinfo with the expected output.
> +pub fn compare_rrdinfo_output(testcase: String, expected: String) {
> +    let expected_lines: Vec<String> = expected.lines().map(|l| String::from(l)).collect();
> +    let testcase_lines: Vec<String> = testcase.lines().map(|l| String::from(l)).collect();
> +    assert_eq!(
> +        expected_lines.len(),
> +        testcase_lines.len(),
> +        "expected: {}, testcase: {}",
> +        expected_lines.len(),
> +        testcase_lines.len()
> +    );
> +    for (expected, command) in expected_lines.iter().zip(testcase_lines.iter()) {
> +        if expected.contains("cur_row") || expected.contains("last_update") {
> +            // these lines can still have different values regarding timing and ptr positions
> +            continue;
> +        }
> +        assert_eq!(expected, command);
> +    }
> +}
> +
> +/// Reads file and resturns it as a string, except for the last line
> +pub fn drop_last_line(content: Vec<u8>) -> String {
> +    let mut out: Vec<String> = Vec::new();
> +    let c = Cursor::new(content);
> +    let mut lines = c.lines();
> +    while let Some(line) = lines.next() {
> +        let line = line.expect("output line");
> +        out.push(line);
> +    }
> +    let _last_line = out.pop();
> +    let mut output = out.join("\n");
> +    output.push_str("\n");
> +    output
> +}





More information about the pve-devel mailing list