From 81419190644a9b73c78a09baee4c02681be24fb9 Mon Sep 17 00:00:00 2001 From: Tyler Date: Tue, 15 Jun 2021 11:06:36 -0700 Subject: [PATCH] Implements count=N - Adds tests for count=READS and count=BYTES. - Implements count logic for read count and bytes count limits. --- src/uu/dd/src/dd.rs | 243 +++++++++++------- .../src/dd_unit_tests/block_unblock_tests.rs | 2 + .../dd/src/dd_unit_tests/conv_sync_tests.rs | 1 + .../dd/src/dd_unit_tests/conversion_tests.rs | 4 + src/uu/dd/src/dd_unit_tests/mod.rs | 3 + src/uu/dd/src/dd_unit_tests/sanity_tests.rs | 162 +++++++++++- src/uu/dd/src/parseargs.rs | 22 ++ .../gnudd-deadbeef-first-12345.spec | 1 + .../gnudd-deadbeef-first-16k.spec | 1 + .../gnudd-random-first-32k.spec | Bin 0 -> 32768 bytes 10 files changed, 341 insertions(+), 98 deletions(-) create mode 100644 src/uu/dd/test-resources/gnudd-deadbeef-first-12345.spec create mode 100644 src/uu/dd/test-resources/gnudd-deadbeef-first-16k.spec create mode 100644 src/uu/dd/test-resources/gnudd-random-first-32k.spec diff --git a/src/uu/dd/src/dd.rs b/src/uu/dd/src/dd.rs index def82aafb..8d1c7121a 100644 --- a/src/uu/dd/src/dd.rs +++ b/src/uu/dd/src/dd.rs @@ -66,6 +66,17 @@ struct ReadStat reads_partial: u64, records_truncated: u32, } +impl std::ops::AddAssign for ReadStat +{ + fn add_assign(&mut self, other: Self) + { + *self = Self { + reads_complete: self.reads_complete + other.reads_complete, + reads_partial: self.reads_partial + other.reads_partial, + records_truncated: self.records_truncated + other.records_truncated, + } + } +} struct WriteStat { @@ -73,6 +84,17 @@ struct WriteStat writes_partial: u64, bytes_total: u128, } +impl std::ops::AddAssign for WriteStat +{ + fn add_assign(&mut self, other: Self) + { + *self = Self { + writes_complete: self.writes_complete + other.writes_complete, + writes_partial: self.writes_partial + other.writes_partial, + bytes_total: self.bytes_total + other.bytes_total, + } + } +} type Cbs = usize; @@ -150,6 +172,16 @@ pub enum StatusLevel None, } +/// The value of count=N +/// Defaults to Reads(N) +/// if iflag=count_bytes +/// then becomes Bytes(N) +pub enum CountType +{ + Reads(usize), + Bytes(usize), +} + #[derive(Debug)] enum InternalError { @@ -180,6 +212,7 @@ struct Input non_ascii: bool, ibs: usize, xfer_stats: Option, + count: Option, cflags: IConvFlags, iflags: IFlags, } @@ -194,12 +227,14 @@ impl Input let cflags = parseargs::parse_conv_flag_input(matches)?; let iflags = parseargs::parse_iflags(matches)?; let skip = parseargs::parse_skip_amt(&ibs, &iflags, matches)?; + let count = parseargs::parse_count(&iflags, matches)?; let mut i = Input { src: io::stdin(), non_ascii, ibs, xfer_stats, + count, cflags, iflags, }; @@ -225,6 +260,7 @@ impl Input let cflags = parseargs::parse_conv_flag_input(matches)?; let iflags = parseargs::parse_iflags(matches)?; let skip = parseargs::parse_skip_amt(&ibs, &iflags, matches)?; + let count = parseargs::parse_count(&iflags, matches)?; if let Some(fname) = matches.opt_str("if") { @@ -241,6 +277,7 @@ impl Input non_ascii, ibs, xfer_stats, + count, cflags, iflags, }; @@ -279,7 +316,7 @@ impl Read for Input impl Input { - /// Fills a given obs-sized buffer. + /// Fills a given buffer. /// Reads in increments of 'self.ibs'. /// The start of each ibs-sized read follows the previous one. fn fill_consecutive(&mut self, buf: &mut Vec) -> Result> @@ -317,7 +354,7 @@ impl Input }) } - /// Fills a given obs-sized buffer. + /// Fills a given buffer. /// Reads in increments of 'self.ibs'. /// The start of each ibs-sized read is aligned to multiples of ibs; remaing space is filled with the 'pad' byte. fn fill_blocks(&mut self, buf: &mut Vec, obs: usize, pad: u8) -> Result> @@ -375,23 +412,19 @@ impl Input } /// Force-fills a buffer, ignoring zero-length reads which would otherwise be - /// interpreted as EOF. Does not continue after errors. - /// Note: This may never return. - fn force_fill(&mut self, mut buf: &mut [u8], target_len: usize) -> Result<(), Box> + /// interpreted as EOF. + /// Note: This will not return unless the source (eventually) produces + /// enough bytes to meet target_len. + fn force_fill(&mut self, mut buf: &mut [u8], target_len: usize) -> Result> { - let mut total_len = 0; - - loop + let mut base_idx = 0; + while base_idx < target_len { - total_len += self.read(&mut buf)?; - - if total_len == target_len - { - return Ok(()); - } + base_idx += self.read(&mut buf[base_idx..target_len])?; } - } + Ok(base_idx) + } } struct Output @@ -602,7 +635,7 @@ impl Output /// Splits the content of buf into cbs-length blocks /// Appends padding as specified by conv=block and cbs=N -fn block(buf: Vec, cbs: usize, rstats: &mut ReadStat) -> Vec> +fn block(buf: Vec, cbs: usize, rstat: &mut ReadStat) -> Vec> { let mut blocks = buf.split(| &e | e == '\n' as u8) .fold(Vec::new(), | mut blocks, split | @@ -610,7 +643,7 @@ fn block(buf: Vec, cbs: usize, rstats: &mut ReadStat) -> Vec> let mut split = split.to_vec(); if split.len() > cbs { - rstats.records_truncated += 1; + rstat.records_truncated += 1; } split.resize(cbs, ' ' as u8); blocks.push(split); @@ -683,7 +716,7 @@ fn unblock(buf: Vec, cbs: usize) -> Vec .collect() } -fn conv_block_unblock_helper(mut buf: Vec, i: &mut Input, o: &Output, rstats: &mut ReadStat) -> Result, Box> +fn conv_block_unblock_helper(mut buf: Vec, i: &mut Input, o: &Output, rstat: &mut ReadStat) -> Result, Box> { // Local Predicate Fns ------------------------------------------------- #[inline] @@ -737,7 +770,7 @@ fn conv_block_unblock_helper(mut buf: Vec, i: &mut Input< { // ascii input so perform the block first let cbs = i.cflags.block.unwrap(); - let mut blocks = block(buf, cbs, rstats); + let mut blocks = block(buf, cbs, rstat); if let Some(ct) = i.cflags.ctable { @@ -762,7 +795,7 @@ fn conv_block_unblock_helper(mut buf: Vec, i: &mut Input< apply_ct(&mut buf, &ct); } - let blocks = block(buf, cbs, rstats) + let blocks = block(buf, cbs, rstat) .into_iter() .flatten() .collect(); @@ -860,7 +893,7 @@ fn read_helper(i: &mut Input, o: &mut Output, bsize: us { // Read let mut buf = vec![BUF_INIT_BYTE; bsize]; - let mut rstats = match i.cflags.sync + let mut rstat = match i.cflags.sync { Some(ch) => i.fill_blocks(&mut buf, o.obs, ch)?, @@ -868,9 +901,9 @@ fn read_helper(i: &mut Input, o: &mut Output, bsize: us i.fill_consecutive(&mut buf)?, }; // Return early if no data - if rstats.reads_complete == 0 && rstats.reads_partial == 0 + if rstat.reads_complete == 0 && rstat.reads_partial == 0 { - return Ok((rstats,buf)); + return Ok((rstat,buf)); } // Perform any conv=x[,x...] options @@ -880,12 +913,12 @@ fn read_helper(i: &mut Input, o: &mut Output, bsize: us } if is_conv(&i) || is_block(&i) || is_unblock(&i) { - let buf = conv_block_unblock_helper(buf, i, o, &mut rstats)?; - Ok((rstats, buf)) + let buf = conv_block_unblock_helper(buf, i, o, &mut rstat)?; + Ok((rstat, buf)) } else { - Ok((rstats, buf)) + Ok((rstat, buf)) } } } @@ -935,13 +968,13 @@ fn print_xfer_stats(update: &ProgUpdate) } -/// Generate a progress updater that tracks progress, receives updates, and TODO: responds to signals. +/// Generate a progress updater that tracks progress, receives updates, and responds to signals. fn gen_prog_updater(rx: mpsc::Receiver, xfer_stats: Option) -> impl Fn() -> () { // -------------------------------------------------------------- fn posixly_correct() -> bool { - !env::var("POSIXLY_CORRECT").is_err() + env::var("POSIXLY_CORRECT").is_ok() } // -------------------------------------------------------------- move || { @@ -951,7 +984,7 @@ fn gen_prog_updater(rx: mpsc::Receiver, xfer_stats: Option https://unix.stackexchange.com/questions/179481/siginfo-on-gnu-linux-arch-linux-missing // if let Err(e) = signal_hook::flag::register_usize(signal::SIGINFO, sigval.clone(), signal::SIGINFO as usize) // { @@ -980,12 +1013,9 @@ fn gen_prog_updater(rx: mpsc::Receiver, xfer_stats: Option - { - debug_println!("Internal dd Warning: Error in progress update thread\n\t{}", e); - - continue; - }, + (Err(_), _) => + // recv only fails permenantly + break, }; // Handle signals match sigval.load(Ordering::Relaxed) @@ -1014,17 +1044,64 @@ fn calc_bsize(ibs: usize, obs: usize) -> usize lcm } +/// Calculate the buffer size appropriate for this loop iteration, respecting +/// a count=N if present. +fn calc_loop_bsize(count: &Option, rstat: &ReadStat, wstat: &WriteStat, ibs: usize, ideal_bsize: usize) -> usize +{ + match count + { + Some(CountType::Reads(rmax)) => + { + let rmax: u64 = (*rmax).try_into().unwrap(); + let rsofar = rstat.reads_complete + rstat.reads_partial; + let rremain: usize = (rmax - rsofar).try_into().unwrap(); + cmp::min(ideal_bsize, rremain*ibs) + }, + Some(CountType::Bytes(bmax)) => + { + let bmax: u128 = (*bmax).try_into().unwrap(); + let bremain: usize = (bmax - wstat.bytes_total).try_into().unwrap(); + cmp::min(ideal_bsize, bremain) + }, + None => + ideal_bsize, + } +} + +/// Decide if the current progress is below a count=N limit or return +/// true if no such limit is set. +fn below_count_limit(count: &Option, rstat: &ReadStat, wstat: &WriteStat) -> bool +{ + match count + { + Some(CountType::Reads(n)) => + { + let n = (*n).try_into().unwrap(); + // debug_assert!(rstat.reads_complete + rstat.reads_partial >= n); + rstat.reads_complete + rstat.reads_partial <= n + }, + Some(CountType::Bytes(n)) => + { + let n = (*n).try_into().unwrap(); + // debug_assert!(wstat.bytes_total >= n); + wstat.bytes_total <= n + }, + None => + true, + } +} + /// Perform the copy/convert opertaions. Stdout version // Note: Some of dd's functionality depends on whether the output is actually a file. This breaks the Output abstraction, // and should be fixed in the future. fn dd_stdout(mut i: Input, mut o: Output) -> Result<(), Box> { - let mut rstats = ReadStat { + let mut rstat = ReadStat { reads_complete: 0, reads_partial: 0, records_truncated: 0, }; - let mut wstats = WriteStat { + let mut wstat = WriteStat { writes_complete: 0, writes_partial: 0, bytes_total: 0, @@ -1038,37 +1115,30 @@ fn dd_stdout(mut i: Input, mut o: Output) -> Result<(), tx }; - loop + while below_count_limit(&i.count, &rstat, &wstat) { // Read/Write - match read_helper(&mut i, &mut o, bsize)? + let loop_bsize = calc_loop_bsize(&i.count, &rstat, &wstat, i.ibs, bsize); + match read_helper(&mut i, &mut o, loop_bsize)? { (ReadStat { reads_complete: 0, reads_partial: 0, .. }, _) => break, (rstat_update, buf) => { - let wstats_update = o.write_blocks(buf)?; + let wstat_update = o.write_blocks(buf)?; - rstats = ReadStat { - reads_complete: rstats.reads_complete + rstat_update.reads_complete, - reads_partial: rstats.reads_partial + rstat_update.reads_partial, - records_truncated: rstats.records_truncated + rstat_update.records_truncated, - }; - wstats = WriteStat { - writes_complete: wstats.writes_complete + wstats_update.writes_complete, - writes_partial: wstats.writes_partial + wstats_update.writes_partial, - bytes_total: wstats.bytes_total + wstats_update.bytes_total, - }; - }, + rstat += rstat_update; + wstat += wstat_update; + }, }; // Update Prog prog_tx.send(ProgUpdate { - reads_complete: rstats.reads_complete, - reads_partial: rstats.reads_partial, - writes_complete: wstats.writes_complete, - writes_partial: wstats.writes_partial, - bytes_total: wstats.bytes_total, - records_truncated: rstats.records_truncated, + reads_complete: rstat.reads_complete, + reads_partial: rstat.reads_partial, + writes_complete: wstat.writes_complete, + writes_partial: wstat.writes_partial, + bytes_total: wstat.bytes_total, + records_truncated: rstat.records_truncated, duration: start.elapsed(), })?; } @@ -1088,12 +1158,12 @@ fn dd_stdout(mut i: Input, mut o: Output) -> Result<(), Some(StatusLevel::None) => {}, _ => print_xfer_stats(&ProgUpdate { - reads_complete: rstats.reads_complete, - reads_partial: rstats.reads_partial, - writes_complete: wstats.writes_complete, - writes_partial: wstats.writes_partial, - bytes_total: wstats.bytes_total, - records_truncated: rstats.records_truncated, + reads_complete: rstat.reads_complete, + reads_partial: rstat.reads_partial, + writes_complete: wstat.writes_complete, + writes_partial: wstat.writes_partial, + bytes_total: wstat.bytes_total, + records_truncated: rstat.records_truncated, duration: start.elapsed(), }), } @@ -1105,12 +1175,12 @@ fn dd_stdout(mut i: Input, mut o: Output) -> Result<(), // and should be fixed in the future. fn dd_fileout(mut i: Input, mut o: Output) -> Result<(), Box> { - let mut rstats = ReadStat { + let mut rstat = ReadStat { reads_complete: 0, reads_partial: 0, records_truncated: 0, }; - let mut wstats = WriteStat { + let mut wstat = WriteStat { writes_complete: 0, writes_partial: 0, bytes_total: 0, @@ -1124,37 +1194,30 @@ fn dd_fileout(mut i: Input, mut o: Output) -> Result<(), Box break, (rstat_update, buf) => { - let wstats_update = o.write_blocks(buf)?; + let wstat_update = o.write_blocks(buf)?; - rstats = ReadStat { - reads_complete: rstats.reads_complete + rstat_update.reads_complete, - reads_partial: rstats.reads_partial + rstat_update.reads_partial, - records_truncated: rstats.records_truncated + rstat_update.records_truncated, - }; - wstats = WriteStat { - writes_complete: wstats.writes_complete + wstats_update.writes_complete, - writes_partial: wstats.writes_partial + wstats_update.writes_partial, - bytes_total: wstats.bytes_total + wstats_update.bytes_total, - }; + rstat += rstat_update; + wstat += wstat_update; }, }; // Update Prog prog_tx.send(ProgUpdate { - reads_complete: rstats.reads_complete, - reads_partial: rstats.reads_partial, - writes_complete: wstats.writes_complete, - writes_partial: wstats.writes_partial, - bytes_total: wstats.bytes_total, - records_truncated: rstats.records_truncated, + reads_complete: rstat.reads_complete, + reads_partial: rstat.reads_partial, + writes_complete: wstat.writes_complete, + writes_partial: wstat.writes_partial, + bytes_total: wstat.bytes_total, + records_truncated: rstat.records_truncated, duration: start.elapsed(), })?; } @@ -1174,12 +1237,12 @@ fn dd_fileout(mut i: Input, mut o: Output) -> Result<(), Box {}, _ => print_xfer_stats(&ProgUpdate { - reads_complete: rstats.reads_complete, - reads_partial: rstats.reads_partial, - writes_complete: wstats.writes_complete, - writes_partial: wstats.writes_partial, - bytes_total: wstats.bytes_total, - records_truncated: rstats.records_truncated, + reads_complete: rstat.reads_complete, + reads_partial: rstat.reads_partial, + writes_complete: wstat.writes_complete, + writes_partial: wstat.writes_partial, + bytes_total: wstat.bytes_total, + records_truncated: rstat.records_truncated, duration: start.elapsed(), }), } diff --git a/src/uu/dd/src/dd_unit_tests/block_unblock_tests.rs b/src/uu/dd/src/dd_unit_tests/block_unblock_tests.rs index b0a1ba6fc..eba49f9d0 100644 --- a/src/uu/dd/src/dd_unit_tests/block_unblock_tests.rs +++ b/src/uu/dd/src/dd_unit_tests/block_unblock_tests.rs @@ -24,6 +24,7 @@ macro_rules! make_block_test ( non_ascii: false, ibs: 512, xfer_stats: None, + count: None, cflags: IConvFlags { ctable: None, block: $block, @@ -56,6 +57,7 @@ macro_rules! make_unblock_test ( non_ascii: false, ibs: 512, xfer_stats: None, + count: None, cflags: IConvFlags { ctable: None, block: None, diff --git a/src/uu/dd/src/dd_unit_tests/conv_sync_tests.rs b/src/uu/dd/src/dd_unit_tests/conv_sync_tests.rs index 070fdb217..959cb53fd 100644 --- a/src/uu/dd/src/dd_unit_tests/conv_sync_tests.rs +++ b/src/uu/dd/src/dd_unit_tests/conv_sync_tests.rs @@ -24,6 +24,7 @@ macro_rules! make_sync_test ( non_ascii: false, ibs: $ibs, xfer_stats: None, + count: None, cflags: IConvFlags { ctable: None, block: None, diff --git a/src/uu/dd/src/dd_unit_tests/conversion_tests.rs b/src/uu/dd/src/dd_unit_tests/conversion_tests.rs index b7d7ccb9b..f7ee7f92c 100644 --- a/src/uu/dd/src/dd_unit_tests/conversion_tests.rs +++ b/src/uu/dd/src/dd_unit_tests/conversion_tests.rs @@ -10,6 +10,7 @@ macro_rules! make_conv_test ( non_ascii: false, ibs: 512, xfer_stats: None, + count: None, cflags: icf!($ctable), iflags: DEFAULT_IFLAGS, }, @@ -35,6 +36,7 @@ macro_rules! make_icf_test ( non_ascii: false, ibs: 512, xfer_stats: None, + count: None, cflags: $icf, iflags: DEFAULT_IFLAGS, }, @@ -138,6 +140,7 @@ fn all_valid_ascii_ebcdic_ascii_roundtrip_conv_test() non_ascii: false, ibs: 128, xfer_stats: None, + count: None, cflags: icf!(Some(&ASCII_TO_EBCDIC)), iflags: DEFAULT_IFLAGS, }; @@ -160,6 +163,7 @@ fn all_valid_ascii_ebcdic_ascii_roundtrip_conv_test() non_ascii: false, ibs: 256, xfer_stats: None, + count: None, cflags: icf!(Some(&EBCDIC_TO_ASCII)), iflags: DEFAULT_IFLAGS, }; diff --git a/src/uu/dd/src/dd_unit_tests/mod.rs b/src/uu/dd/src/dd_unit_tests/mod.rs index 8904a2372..eb8af60df 100644 --- a/src/uu/dd/src/dd_unit_tests/mod.rs +++ b/src/uu/dd/src/dd_unit_tests/mod.rs @@ -95,6 +95,7 @@ macro_rules! make_spec_test ( non_ascii: false, ibs: 512, xfer_stats: None, + count: None, cflags: icf!(), iflags: DEFAULT_IFLAGS, }, @@ -116,11 +117,13 @@ macro_rules! make_spec_test ( dd_fileout($i,$o).unwrap(); let res = File::open($tmp_fname).unwrap(); + // Check test file isn't empty (unless spec file is too) assert_eq!(res.metadata().unwrap().len(), $spec.metadata().unwrap().len()); let spec = BufReader::new($spec); let res = BufReader::new(res); + // Check all bytes match for (b_res, b_spec) in res.bytes().zip(spec.bytes()) { assert_eq!(b_res.unwrap(), diff --git a/src/uu/dd/src/dd_unit_tests/sanity_tests.rs b/src/uu/dd/src/dd_unit_tests/sanity_tests.rs index 8724474a0..e9923b4b1 100644 --- a/src/uu/dd/src/dd_unit_tests/sanity_tests.rs +++ b/src/uu/dd/src/dd_unit_tests/sanity_tests.rs @@ -1,5 +1,25 @@ use super::*; +const DST_PLACEHOLDER: Vec = Vec::new(); + +macro_rules! make_io_test ( + ( $test_id:ident, $test_name:expr, $i:expr, $o:expr, $spec:expr ) => + { + make_spec_test!($test_id, + $test_name, + $i, + Output { + dst: File::create(format!("./test-resources/FAILED-{}.test", $test_name)).unwrap(), + obs: $o.obs, + cflags: $o.cflags, + oflags: $o.oflags, + }, + $spec, + format!("./test-resources/FAILED-{}.test", $test_name) + ); + }; +); + make_spec_test!( zeros_4k_test, "zeros-4k", @@ -24,7 +44,7 @@ make_spec_test!( File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap() ); -make_spec_test!( +make_io_test!( random_73k_test_not_a_multiple_obs_gt_ibs, "random-73k-not-a-multiple-obs-gt-ibs", Input { @@ -32,20 +52,20 @@ make_spec_test!( non_ascii: false, ibs: 521, xfer_stats: None, + count: None, cflags: icf!(), iflags: DEFAULT_IFLAGS, }, Output { - dst: File::create(format!("./test-resources/FAILED-{}.test", "random-73k-not-a-multiple-obs-gt-ibs")).unwrap(), + dst: DST_PLACEHOLDER, obs: 1031, cflags: DEFAULT_CFO, oflags: DEFAULT_OFLAGS, }, - File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(), - format!("./test-resources/FAILED-{}.test", "random-73k-not-a-multiple-obs-gt-ibs") + File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap() ); -make_spec_test!( +make_io_test!( random_73k_test_obs_lt_not_a_multiple_ibs, "random-73k-obs-lt-not-a-multiple-ibs", Input { @@ -53,17 +73,143 @@ make_spec_test!( non_ascii: false, ibs: 1031, xfer_stats: None, + count: None, cflags: icf!(), iflags: DEFAULT_IFLAGS, }, Output { - dst: File::create(format!("./test-resources/FAILED-{}.test", "random-73k-obs-lt-not-a-multiple-ibs")).unwrap(), + dst: DST_PLACEHOLDER, obs: 521, cflags: DEFAULT_CFO, oflags: DEFAULT_OFLAGS, }, - File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(), - format!("./test-resources/FAILED-{}.test", "random-73k-obs-lt-not-a-multiple-ibs") + File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap() +); + +make_io_test!( + deadbeef_all_32k_test_count_reads, + "deadbeef_all_32k_test_count_reads", + Input { + src: File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap(), + non_ascii: false, + ibs: 1024, + xfer_stats: None, + count: Some(CountType::Reads(32)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1024, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap() +); + +make_io_test!( + deadbeef_all_32k_test_count_bytes, + "deadbeef_all_32k_test_count_bytes", + Input { + src: File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap(), + non_ascii: false, + ibs: 531, + xfer_stats: None, + count: Some(CountType::Bytes(32*1024)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1031, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap() +); + +make_io_test!( + deadbeef_32k_to_16k_test_count_reads, + "deadbeef_32k_test_count_reads", + Input { + src: File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap(), + non_ascii: false, + ibs: 1024, + xfer_stats: None, + count: Some(CountType::Reads(16)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1031, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/gnudd-deadbeef-first-16k.spec").unwrap() +); + +make_io_test!( + deadbeef_32k_to_12345_test_count_bytes, + "deadbeef_32k_to_12345_test_count_bytes", + Input { + src: File::open("./test-resources/deadbeef-18d99661a1de1fc9af21b0ec2cd67ba3.test").unwrap(), + non_ascii: false, + ibs: 531, + xfer_stats: None, + count: Some(CountType::Bytes(12345)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1031, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/gnudd-deadbeef-first-12345.spec").unwrap() +); + +make_io_test!( + random_73k_test_count_reads, + "random-73k-test-count-reads", + Input { + src: File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(), + non_ascii: false, + ibs: 1024, + xfer_stats: None, + count: Some(CountType::Reads(32)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1024, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/gnudd-random-first-32k.spec").unwrap() +); + +make_io_test!( + random_73k_test_count_bytes, + "random-73k-test-count-bytes", + Input { + src: File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(), + non_ascii: false, + ibs: 521, + xfer_stats: None, + count: Some(CountType::Bytes(32*1024)), + cflags: icf!(), + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: DST_PLACEHOLDER, + obs: 1031, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + File::open("./test-resources/gnudd-random-first-32k.spec").unwrap() ); // Test internal buffer size fn diff --git a/src/uu/dd/src/parseargs.rs b/src/uu/dd/src/parseargs.rs index 96e58ffa2..620f18250 100644 --- a/src/uu/dd/src/parseargs.rs +++ b/src/uu/dd/src/parseargs.rs @@ -3,6 +3,7 @@ mod unit_tests; use crate::conversion_tables::*; use crate::{ + CountType, IConvFlags, OConvFlags, StatusLevel, }; @@ -759,6 +760,27 @@ pub fn parse_seek_amt(obs: &usize, oflags: &OFlags, matches: &getopts::Matches) } } +/// Parse the value of count=N and the type of N implied by iflags +pub fn parse_count(iflags: &IFlags, matches: &getopts::Matches) -> Result, ParseError> +{ + if let Some(amt) = matches.opt_str("count") + { + let n = parse_bytes_with_opt_multiplier(amt)?; + if iflags.count_bytes + { + Ok(Some(CountType::Bytes(n))) + } + else + { + Ok(Some(CountType::Reads(n))) + } + } + else + { + Ok(None) + } +} + /// Parse whether the args indicate the input is not ascii pub fn parse_input_non_ascii(matches: &getopts::Matches) -> Result { diff --git a/src/uu/dd/test-resources/gnudd-deadbeef-first-12345.spec b/src/uu/dd/test-resources/gnudd-deadbeef-first-12345.spec new file mode 100644 index 000000000..c36c9ec7a --- /dev/null +++ b/src/uu/dd/test-resources/gnudd-deadbeef-first-12345.spec @@ -0,0 +1 @@ +­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­ \ No newline at end of file diff --git a/src/uu/dd/test-resources/gnudd-deadbeef-first-16k.spec b/src/uu/dd/test-resources/gnudd-deadbeef-first-16k.spec new file mode 100644 index 000000000..dbd247457 --- /dev/null +++ b/src/uu/dd/test-resources/gnudd-deadbeef-first-16k.spec @@ -0,0 +1 @@ +­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾­Þï¾ \ No newline at end of file diff --git a/src/uu/dd/test-resources/gnudd-random-first-32k.spec b/src/uu/dd/test-resources/gnudd-random-first-32k.spec new file mode 100644 index 0000000000000000000000000000000000000000..8f42c0a646b6dcc2d30935151dcd46b9125eb59c GIT binary patch literal 32768 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 q{Z%FLQb2U7n&)