From 415de10b219ea2e979bef42dd311c50debb0b892 Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:21:10 -0400 Subject: [PATCH 1/6] added in direct manipulation api --- src/lib.rs | 306 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 299 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index c486847..2a85833 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,15 +11,10 @@ use memmap2::MmapMut; use os::{Buffer, Header, View}; use serde::{Deserialize, Serialize}; use std::{ - cell::UnsafeCell, - ffi::c_void, - fs::{File, OpenOptions}, - mem, - sync::{ + cell::UnsafeCell, convert::TryInto, ffi::c_void, fs::{File, OpenOptions}, mem, sync::{ atomic::Ordering::{Acquire, Relaxed, Release}, Arc, - }, - time::{Duration, Instant}, + }, time::{Duration, Instant} }; use tempfile::NamedTempFile; use thiserror::Error as ThisError; @@ -116,6 +111,18 @@ fn map(file: &File) -> Result { } } +/// Trait for when `bincode`'s overhead is unacceptable and the developer would prefer to +/// directly write the message's contents into the mmap buffer without an additional copy and/or serialization. +/// +/// `msg_len` is the encoded size of the message in bytes. +/// `write_to_shm` allows for directly copying contents of the implementing struct into the +/// message's space in the buffer. This is incredibly unsafe and fully up to the deverloper +/// to account for padding, alignment, proper offsetting etc. or you will cause mayhem. +pub trait ShmWriter { + fn msg_len(&self) -> u32; + fn write_to_shm(&self, shm_ptr: *mut u8, msg_len: u32) -> Result<()>; +} + /// Represents a file-backed shared memory ring buffer, suitable for constructing a /// [`Receiver`](struct.Receiver.html) or [`Sender`](struct.Sender.html). /// @@ -235,6 +242,19 @@ impl Receiver { }) } + /// Attempt to read a message without blocking. Returns a slice directly from the ring buffer + /// + /// This will return `Ok(None)` if there are no messages immediately available. + pub fn try_recv_direct<'a>(&'a self) -> Result>{ + Ok(if let Some((value, position)) = self.try_recv_direct_0()? { + self.seek(position)?; + + Some(value) + } else { + None + }) + } + fn try_recv_0<'a, T: Deserialize<'a>>(&'a self) -> Result> { let buffer = self.0 .0.buffer(); let map = buffer.map(); @@ -267,6 +287,45 @@ impl Receiver { }) } + fn try_recv_direct_0<'a>(&'a self) -> Result> { + let buffer = self.0 .0.buffer(); + let map = buffer.map(); + + let mut read = buffer.header().read.load(Relaxed); + let write = buffer.header().write.load(Acquire); + + Ok(loop { + if write != read { + let slice = map.as_ref(); + let start = read + 4; + + // first 4 bytes is the length of the message + let size = if let Ok(fixed) = slice[read as usize..start as usize].try_into() { + u32::from_be_bytes(fixed) + } else { + return Err(Error::Runtime("bad uncast of message size".into())) + }; + + if size > 0 { + let end = start + size; + break Some(( + &slice[start as usize..end as usize], + end, + )); + } else if write < read { + read = BEGINNING; + let mut lock = buffer.lock()?; + buffer.header().read.store(read, Relaxed); + lock.notify_all()?; + } else { + return Err(Error::Runtime("corrupt ring buffer".into())); + } + } else { + break None; + } + }) + } + /// Attempt to read a message, blocking if necessary until one becomes available. pub fn recv(&self) -> Result where @@ -279,6 +338,15 @@ impl Receiver { Ok(value) } + /// Attempt to read a direct byte message, blocking if necessary until one becomes available. + pub fn recv_direct<'a>(&'a self) -> Result<&'a [u8]> { + let (value, position) = self.recv_direct_timeout_0(None)?.unwrap(); + + self.seek(position)?; + + Ok(value) + } + /// Attempt to read a message, blocking for up to the specified duration if necessary until one becomes /// available. pub fn recv_timeout(&self, timeout: Duration) -> Result> @@ -296,6 +364,20 @@ impl Receiver { ) } + /// Attempt to read a direct byte message, blocking for up to the specified duration if necessary until one becomes + /// available. + pub fn recv_direct_timeout<'a>(&'a self, timeout: Duration) -> Result> { + Ok( + if let Some((value, position)) = self.recv_direct_timeout_0(Some(timeout))? { + self.seek(position)?; + + Some(value) + } else { + None + }, + ) + } + /// Borrows this receiver for deserializing a message with references that refer directly to this /// [`Receiver`](struct.Receiver.html)'s ring buffer rather than copying out of it. /// @@ -349,6 +431,36 @@ impl Receiver { } } } + + fn recv_direct_timeout_0<'a>( + &'a self, + timeout: Option, + ) -> Result> { + let mut deadline = None; + loop { + if let Some(value_and_position) = self.try_recv_direct_0()? { + return Ok(Some(value_and_position)); + } + + let buffer = self.0 .0.buffer(); + + let mut now = Instant::now(); + deadline = deadline.or_else(|| timeout.map(|timeout| now + timeout)); + + let read = buffer.header().read.load(Relaxed); + + let mut lock = buffer.lock()?; + while read == buffer.header().write.load(Acquire) { + if deadline.map(|deadline| deadline > now).unwrap_or(true) { + lock.timed_wait(&self.0 .0, deadline.map(|deadline| deadline - now))?; + + now = Instant::now(); + } else { + return Ok(None); + } + } + } + } } /// Borrows a [`Receiver`](struct.Receiver.html) for the purpose of doing zero-copy deserialization of messages @@ -386,6 +498,26 @@ impl<'a> ZeroCopyContext<'a> { } } + /// Attempt to read a direct byte message without blocking. + /// + /// This will return `Ok(None)` if there are no messages immediately available. It will return + /// `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this instance has already + /// been used to read a message. + pub fn try_recv_direct<'b>(&'b mut self) -> Result> { + if self.position.is_some() { + Err(Error::AlreadyReceived) + } else { + Ok( + if let Some((value, position)) = self.receiver.try_recv_direct_0()? { + self.position = Some(position); + Some(value) + } else { + None + }, + ) + } + } + /// Attempt to read a message, blocking if necessary until one becomes available. /// /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this @@ -398,6 +530,18 @@ impl<'a> ZeroCopyContext<'a> { Ok(value) } + /// Attempt to read a direct byte message, blocking if necessary until one becomes available. + /// + /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this + /// instance has already been used to read a message. + pub fn recv_direct<'b>(&'b mut self) -> Result<&'b [u8]> { + let (value, position) = self.receiver.recv_direct_timeout_0(None)?.unwrap(); + + self.position = Some(position); + + Ok(value) + } + /// Attempt to read a message, blocking for up to the specified duration if necessary until one becomes /// available. /// @@ -420,6 +564,29 @@ impl<'a> ZeroCopyContext<'a> { ) } } + + /// Attempt to read a direct byte message, blocking for up to the specified duration if necessary until one becomes + /// available. + /// + /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this + /// instance has already been used to read a message. + pub fn recv_direct_timeout<'b>( + &'b mut self, + timeout: Duration, + ) -> Result> { + if self.position.is_some() { + Err(Error::AlreadyReceived) + } else { + Ok( + if let Some((value, position)) = self.receiver.recv_direct_timeout_0(Some(timeout))? { + self.position = Some(position); + Some(value) + } else { + None + }, + ) + } + } } impl<'a> Drop for ZeroCopyContext<'a> { @@ -547,6 +714,131 @@ impl Sender { Ok(true) } + + /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer + /// if necessary. Uses the lower level `ShmWriter` trait to write messages directly into the mmap buffer. + /// + /// The size of the message must be greater than zero or else this method will return + /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the message size is + /// greater than the ring buffer capacity, this method will return + /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. + pub fn send_direct(&self, value: &impl ShmWriter) -> Result<()> { + self.send_direct_timeout_0(value, false, None).map(drop) + } + + /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer + /// if necessary, but only up to the specified timeout. Uses the lower level `ShmWriter` trait to write messages + /// directly into the mmap buffer. + /// + /// This will return `Ok(true)` if the message was sent, or `Ok(false)` if it timed out while waiting. + /// + /// The size of the message must be greater than zero or else this method will return + /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size is + /// greater than the ring buffer capacity, this method will return + /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. + pub fn send_direct_timeout(&self, value: &impl ShmWriter, timeout: Duration) -> Result { + self.send_direct_timeout_0(value, false, Some(timeout)) + } + + /// Send the specified message, waiting for the ring buffer to become completely empty first. Uses the lower + /// level `ShmWriter` trait to write messages directly into the mmap buffer. + /// + /// This method is appropriate for sending time-sensitive messages where buffering would introduce undesirable + /// latency. + /// + /// The size of the message must be greater than zero or else this method will return + /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size + /// is greater than the ring buffer capacity, this method will return + /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. + pub fn send_direct_when_empty(&self, value: &impl ShmWriter) -> Result<()> { + self.send_direct_timeout_0(value, true, None).map(drop) + } + + fn send_direct_timeout_0( + &self, + value: &impl ShmWriter, + wait_until_empty: bool, + timeout: Option, + ) -> Result { + let buffer = self.0 .0.buffer(); + let map = self.0 .0.map_mut(); + + let size = value.msg_len(); + + if size == 0 { + return Err(Error::ZeroSizedMessage); + } + + let map_len = map.len(); + + if (BEGINNING + size + 8) as usize > map_len { + return Err(Error::MessageTooLarge); + } + + let mut lock = buffer.lock()?; + let mut deadline = None; + let mut write; + loop { + write = buffer.header().write.load(Relaxed); + let read = buffer.header().read.load(Relaxed); + + if write == read || (write > read && !wait_until_empty) { + if (write + size + 8) as usize <= map_len { + break; + } else if read != BEGINNING { + assert!(write > BEGINNING); + + unsafe { + std::ptr::copy_nonoverlapping( + 0u32.to_be_bytes().as_ptr(), + map.as_mut_ptr().offset(write as isize), + 4, + ); + } + + write = BEGINNING; + buffer.header().write.store(write, Release); + lock.notify_all()?; + continue; + } + } else if write + size + 8 <= read && !wait_until_empty { + break; + } + + let now = Instant::now(); + deadline = deadline.or_else(|| timeout.map(|timeout| now + timeout)); + + if deadline.map(|deadline| deadline > now).unwrap_or(true) { + lock.timed_wait(&self.0 .0, deadline.map(|deadline| deadline - now))?; + } else { + return Ok(false); + } + } + + unsafe { + // write our msg size first + std::ptr::copy_nonoverlapping( + size.to_be_bytes().as_ptr(), + map.as_mut_ptr().offset(write as isize), + 4, + ); + + let start = write + 4; + + let end = start + size; + + value.write_to_shm( + map.as_mut_ptr().offset(start as isize), + size, + )?; + + buffer.header().write.store(end, Release); + } + + lock.notify_all()?; + + Ok(true) + } } #[cfg(test)] From 2b34c0cc5b593ee4b092e12fea3056ae9fa18296 Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:44:09 -0400 Subject: [PATCH 2/6] typo fix --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 2a85833..ee6dd20 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -116,7 +116,7 @@ fn map(file: &File) -> Result { /// /// `msg_len` is the encoded size of the message in bytes. /// `write_to_shm` allows for directly copying contents of the implementing struct into the -/// message's space in the buffer. This is incredibly unsafe and fully up to the deverloper +/// message's space in the buffer. This is incredibly unsafe and fully up to the developer /// to account for padding, alignment, proper offsetting etc. or you will cause mayhem. pub trait ShmWriter { fn msg_len(&self) -> u32; From d19ebeca1b7098c5398b81d47d73a9910a5adc41 Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:15:36 -0400 Subject: [PATCH 3/6] fixed everything besides recv unification --- src/lib.rs | 171 ++++++++++++----------------------------------------- 1 file changed, 37 insertions(+), 134 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ee6dd20..059ede6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -119,8 +119,20 @@ fn map(file: &File) -> Result { /// message's space in the buffer. This is incredibly unsafe and fully up to the developer /// to account for padding, alignment, proper offsetting etc. or you will cause mayhem. pub trait ShmWriter { - fn msg_len(&self) -> u32; - fn write_to_shm(&self, shm_ptr: *mut u8, msg_len: u32) -> Result<()>; + fn msg_len(&self) -> Result; + fn write_to_shm(&self, shm_ptr: &mut [u8]) -> Result<()>; +} + +struct BincodeShmWriter(T); + +impl ShmWriter for BincodeShmWriter { + fn msg_len(&self) -> Result { + Ok(bincode::serialized_size(&self.0)?) + } + + fn write_to_shm(&self, writer: &mut [u8]) -> Result<()> { + Ok(bincode::serialize_into(writer, &self.0)?) + } } /// Represents a file-backed shared memory ring buffer, suitable for constructing a @@ -242,19 +254,6 @@ impl Receiver { }) } - /// Attempt to read a message without blocking. Returns a slice directly from the ring buffer - /// - /// This will return `Ok(None)` if there are no messages immediately available. - pub fn try_recv_direct<'a>(&'a self) -> Result>{ - Ok(if let Some((value, position)) = self.try_recv_direct_0()? { - self.seek(position)?; - - Some(value) - } else { - None - }) - } - fn try_recv_0<'a, T: Deserialize<'a>>(&'a self) -> Result> { let buffer = self.0 .0.buffer(); let map = buffer.map(); @@ -338,15 +337,6 @@ impl Receiver { Ok(value) } - /// Attempt to read a direct byte message, blocking if necessary until one becomes available. - pub fn recv_direct<'a>(&'a self) -> Result<&'a [u8]> { - let (value, position) = self.recv_direct_timeout_0(None)?.unwrap(); - - self.seek(position)?; - - Ok(value) - } - /// Attempt to read a message, blocking for up to the specified duration if necessary until one becomes /// available. pub fn recv_timeout(&self, timeout: Duration) -> Result> @@ -364,20 +354,6 @@ impl Receiver { ) } - /// Attempt to read a direct byte message, blocking for up to the specified duration if necessary until one becomes - /// available. - pub fn recv_direct_timeout<'a>(&'a self, timeout: Duration) -> Result> { - Ok( - if let Some((value, position)) = self.recv_direct_timeout_0(Some(timeout))? { - self.seek(position)?; - - Some(value) - } else { - None - }, - ) - } - /// Borrows this receiver for deserializing a message with references that refer directly to this /// [`Receiver`](struct.Receiver.html)'s ring buffer rather than copying out of it. /// @@ -616,7 +592,7 @@ impl Sender { /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send(&self, value: &impl Serialize) -> Result<()> { - self.send_timeout_0(value, false, None).map(drop) + unsafe { self.send_timeout_0(&BincodeShmWriter(value), false, None).map(drop) } } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer @@ -629,7 +605,7 @@ impl Sender { /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send_timeout(&self, value: &impl Serialize, timeout: Duration) -> Result { - self.send_timeout_0(value, false, Some(timeout)) + unsafe { self.send_timeout_0(&BincodeShmWriter(value), false, Some(timeout)) } } /// Send the specified message, waiting for the ring buffer to become completely empty first. @@ -642,77 +618,7 @@ impl Sender { /// is greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send_when_empty(&self, value: &impl Serialize) -> Result<()> { - self.send_timeout_0(value, true, None).map(drop) - } - - fn send_timeout_0( - &self, - value: &impl Serialize, - wait_until_empty: bool, - timeout: Option, - ) -> Result { - let buffer = self.0 .0.buffer(); - let map = self.0 .0.map_mut(); - - let size = bincode::serialized_size(value)? as u32; - - if size == 0 { - return Err(Error::ZeroSizedMessage); - } - - let map_len = map.len(); - - if (BEGINNING + size + 8) as usize > map_len { - return Err(Error::MessageTooLarge); - } - - let mut lock = buffer.lock()?; - let mut deadline = None; - let mut write; - loop { - write = buffer.header().write.load(Relaxed); - let read = buffer.header().read.load(Relaxed); - - if write == read || (write > read && !wait_until_empty) { - if (write + size + 8) as usize <= map_len { - break; - } else if read != BEGINNING { - assert!(write > BEGINNING); - - bincode::serialize_into( - &mut map[write as usize..(write + 4) as usize], - &0_u32, - )?; - write = BEGINNING; - buffer.header().write.store(write, Release); - lock.notify_all()?; - continue; - } - } else if write + size + 8 <= read && !wait_until_empty { - break; - } - - let now = Instant::now(); - deadline = deadline.or_else(|| timeout.map(|timeout| now + timeout)); - - if deadline.map(|deadline| deadline > now).unwrap_or(true) { - lock.timed_wait(&self.0 .0, deadline.map(|deadline| deadline - now))?; - } else { - return Ok(false); - } - } - - let start = write + 4; - bincode::serialize_into(&mut map[write as usize..start as usize], &size)?; - - let end = start + size; - bincode::serialize_into(&mut map[start as usize..end as usize], value)?; - - buffer.header().write.store(end, Release); - - lock.notify_all()?; - - Ok(true) + unsafe { self.send_timeout_0(&BincodeShmWriter(value), true, None).map(drop) } } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer @@ -722,8 +628,8 @@ impl Sender { /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the message size is /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub fn send_direct(&self, value: &impl ShmWriter) -> Result<()> { - self.send_direct_timeout_0(value, false, None).map(drop) + pub unsafe fn send_direct(&self, value: &impl ShmWriter) -> Result<()> { + self.send_timeout_0(value, false, None).map(drop) } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer @@ -736,8 +642,8 @@ impl Sender { /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size is /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub fn send_direct_timeout(&self, value: &impl ShmWriter, timeout: Duration) -> Result { - self.send_direct_timeout_0(value, false, Some(timeout)) + pub unsafe fn send_direct_timeout(&self, value: &impl ShmWriter, timeout: Duration) -> Result { + self.send_timeout_0(value, false, Some(timeout)) } /// Send the specified message, waiting for the ring buffer to become completely empty first. Uses the lower @@ -750,11 +656,11 @@ impl Sender { /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size /// is greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub fn send_direct_when_empty(&self, value: &impl ShmWriter) -> Result<()> { - self.send_direct_timeout_0(value, true, None).map(drop) + pub unsafe fn send_direct_when_empty(&self, value: &impl ShmWriter) -> Result<()> { + self.send_timeout_0(value, true, None).map(drop) } - fn send_direct_timeout_0( + unsafe fn send_timeout_0( &self, value: &impl ShmWriter, wait_until_empty: bool, @@ -763,7 +669,7 @@ impl Sender { let buffer = self.0 .0.buffer(); let map = self.0 .0.map_mut(); - let size = value.msg_len(); + let size = value.msg_len()? as u32; if size == 0 { return Err(Error::ZeroSizedMessage); @@ -815,25 +721,22 @@ impl Sender { } } - unsafe { - // write our msg size first - std::ptr::copy_nonoverlapping( - size.to_be_bytes().as_ptr(), - map.as_mut_ptr().offset(write as isize), - 4, - ); + // write our msg size first + std::ptr::copy_nonoverlapping( + size.to_be_bytes().as_ptr(), + map.as_mut_ptr().offset(write as isize), + 4, + ); - let start = write + 4; + let start = write + 4; - let end = start + size; + let end = start + size; - value.write_to_shm( - map.as_mut_ptr().offset(start as isize), - size, - )?; + value.write_to_shm( + &mut map[start as usize .. end as usize], + )?; - buffer.header().write.store(end, Release); - } + buffer.header().write.store(end, Release); lock.notify_all()?; From e61946afada145f98469e1e8cdb8ef8a9ced6574 Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Fri, 7 Jun 2024 23:23:52 -0400 Subject: [PATCH 4/6] unified the recv api --- src/lib.rs | 128 ++++++++++++++--------------------------------------- 1 file changed, 34 insertions(+), 94 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 059ede6..7317a5c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -123,6 +123,7 @@ pub trait ShmWriter { fn write_to_shm(&self, shm_ptr: &mut [u8]) -> Result<()>; } +// An internal wrapper to allow for a unified sender api. Uses bincode to handle encoding struct BincodeShmWriter(T); impl ShmWriter for BincodeShmWriter { @@ -245,16 +246,16 @@ impl Receiver { where T: for<'de> Deserialize<'de>, { - Ok(if let Some((value, position)) = self.try_recv_0()? { + Ok(if let Some((bytes, position)) = self.try_recv_0()? { self.seek(position)?; - Some(value) + Some(bincode::deserialize(bytes)?) } else { None }) } - fn try_recv_0<'a, T: Deserialize<'a>>(&'a self) -> Result> { + fn try_recv_0<'a>(&'a self) -> Result> { let buffer = self.0 .0.buffer(); let map = buffer.map(); @@ -265,40 +266,9 @@ impl Receiver { if write != read { let slice = map.as_ref(); let start = read + 4; - let size = bincode::deserialize::(&slice[read as usize..start as usize])?; - if size > 0 { - let end = start + size; - break Some(( - bincode::deserialize(&slice[start as usize..end as usize])?, - end, - )); - } else if write < read { - read = BEGINNING; - let mut lock = buffer.lock()?; - buffer.header().read.store(read, Relaxed); - lock.notify_all()?; - } else { - return Err(Error::Runtime("corrupt ring buffer".into())); - } - } else { - break None; - } - }) - } - - fn try_recv_direct_0<'a>(&'a self) -> Result> { - let buffer = self.0 .0.buffer(); - let map = buffer.map(); - let mut read = buffer.header().read.load(Relaxed); - let write = buffer.header().write.load(Acquire); - - Ok(loop { - if write != read { - let slice = map.as_ref(); - let start = read + 4; - - // first 4 bytes is the length of the message + // first 4 bytes is the length of the message, need to be consistent with how sender formats message len irregardless + // of if bincode is used for encoding the message let size = if let Ok(fixed) = slice[read as usize..start as usize].try_into() { u32::from_be_bytes(fixed) } else { @@ -330,11 +300,11 @@ impl Receiver { where T: for<'de> Deserialize<'de>, { - let (value, position) = self.recv_timeout_0(None)?.unwrap(); + let (bytes, position) = self.recv_timeout_0(None)?.unwrap(); self.seek(position)?; - Ok(value) + Ok(bincode::deserialize(bytes)?) } /// Attempt to read a message, blocking for up to the specified duration if necessary until one becomes @@ -344,10 +314,10 @@ impl Receiver { T: for<'de> Deserialize<'de>, { Ok( - if let Some((value, position)) = self.recv_timeout_0(Some(timeout))? { + if let Some((bytes, position)) = self.recv_timeout_0(Some(timeout))? { self.seek(position)?; - Some(value) + Some(bincode::deserialize(bytes)?) } else { None }, @@ -378,43 +348,13 @@ impl Receiver { } } - fn recv_timeout_0<'a, T: Deserialize<'a>>( - &'a self, - timeout: Option, - ) -> Result> { - let mut deadline = None; - loop { - if let Some(value_and_position) = self.try_recv_0()? { - return Ok(Some(value_and_position)); - } - - let buffer = self.0 .0.buffer(); - - let mut now = Instant::now(); - deadline = deadline.or_else(|| timeout.map(|timeout| now + timeout)); - - let read = buffer.header().read.load(Relaxed); - - let mut lock = buffer.lock()?; - while read == buffer.header().write.load(Acquire) { - if deadline.map(|deadline| deadline > now).unwrap_or(true) { - lock.timed_wait(&self.0 .0, deadline.map(|deadline| deadline - now))?; - - now = Instant::now(); - } else { - return Ok(None); - } - } - } - } - - fn recv_direct_timeout_0<'a>( + fn recv_timeout_0<'a>( &'a self, timeout: Option, ) -> Result> { let mut deadline = None; loop { - if let Some(value_and_position) = self.try_recv_direct_0()? { + if let Some(value_and_position) = self.try_recv_0()? { return Ok(Some(value_and_position)); } @@ -464,9 +404,9 @@ impl<'a> ZeroCopyContext<'a> { Err(Error::AlreadyReceived) } else { Ok( - if let Some((value, position)) = self.receiver.try_recv_0()? { + if let Some((bytes, position)) = self.receiver.try_recv_0()? { self.position = Some(position); - Some(value) + Some(bincode::deserialize(bytes)?) } else { None }, @@ -484,9 +424,9 @@ impl<'a> ZeroCopyContext<'a> { Err(Error::AlreadyReceived) } else { Ok( - if let Some((value, position)) = self.receiver.try_recv_direct_0()? { + if let Some((bytes, position)) = self.receiver.try_recv_0()? { self.position = Some(position); - Some(value) + Some(bytes) } else { None }, @@ -499,11 +439,11 @@ impl<'a> ZeroCopyContext<'a> { /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this /// instance has already been used to read a message. pub fn recv<'b, T: Deserialize<'b>>(&'b mut self) -> Result { - let (value, position) = self.receiver.recv_timeout_0(None)?.unwrap(); + let (bytes, position) = self.receiver.recv_timeout_0(None)?.unwrap(); self.position = Some(position); - Ok(value) + Ok(bincode::deserialize(bytes)?) } /// Attempt to read a direct byte message, blocking if necessary until one becomes available. @@ -511,11 +451,11 @@ impl<'a> ZeroCopyContext<'a> { /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this /// instance has already been used to read a message. pub fn recv_direct<'b>(&'b mut self) -> Result<&'b [u8]> { - let (value, position) = self.receiver.recv_direct_timeout_0(None)?.unwrap(); + let (bytes, position) = self.receiver.recv_timeout_0(None)?.unwrap(); self.position = Some(position); - Ok(value) + Ok(bytes) } /// Attempt to read a message, blocking for up to the specified duration if necessary until one becomes @@ -531,9 +471,9 @@ impl<'a> ZeroCopyContext<'a> { Err(Error::AlreadyReceived) } else { Ok( - if let Some((value, position)) = self.receiver.recv_timeout_0(Some(timeout))? { + if let Some((bytes, position)) = self.receiver.recv_timeout_0(Some(timeout))? { self.position = Some(position); - Some(value) + Some(bincode::deserialize(bytes)?) } else { None }, @@ -554,9 +494,9 @@ impl<'a> ZeroCopyContext<'a> { Err(Error::AlreadyReceived) } else { Ok( - if let Some((value, position)) = self.receiver.recv_direct_timeout_0(Some(timeout))? { + if let Some((bytes, position)) = self.receiver.recv_timeout_0(Some(timeout))? { self.position = Some(position); - Some(value) + Some(bytes) } else { None }, @@ -622,7 +562,8 @@ impl Sender { } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer - /// if necessary. Uses the lower level `ShmWriter` trait to write messages directly into the mmap buffer. + /// if necessary. Uses the lower level `ShmWriter` trait to write messages directly into the mmap buffer. Is + /// inherently unsafe due to complete control it gives over writing to memory. /// /// The size of the message must be greater than zero or else this method will return /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the message size is @@ -634,7 +575,7 @@ impl Sender { /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer /// if necessary, but only up to the specified timeout. Uses the lower level `ShmWriter` trait to write messages - /// directly into the mmap buffer. + /// directly into the mmap buffer. Is inherently unsafe due to complete control it gives over writing to memory. /// /// This will return `Ok(true)` if the message was sent, or `Ok(false)` if it timed out while waiting. /// @@ -647,7 +588,8 @@ impl Sender { } /// Send the specified message, waiting for the ring buffer to become completely empty first. Uses the lower - /// level `ShmWriter` trait to write messages directly into the mmap buffer. + /// level `ShmWriter` trait to write messages directly into the mmap buffer. Is inherently unsafe due to complete + /// control it gives over writing to memory. /// /// This method is appropriate for sending time-sensitive messages where buffering would introduce undesirable /// latency. @@ -694,13 +636,11 @@ impl Sender { } else if read != BEGINNING { assert!(write > BEGINNING); - unsafe { - std::ptr::copy_nonoverlapping( - 0u32.to_be_bytes().as_ptr(), - map.as_mut_ptr().offset(write as isize), - 4, - ); - } + std::ptr::copy_nonoverlapping( + 0u32.to_be_bytes().as_ptr(), + map.as_mut_ptr().offset(write as isize), + 4, + ); write = BEGINNING; buffer.header().write.store(write, Release); From 42543a91ec1aa1994f256a3076da96a8608fbc0d Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Sat, 8 Jun 2024 23:13:29 -0400 Subject: [PATCH 5/6] have everything besides arbitrary case test passing --- proptest-regressions/lib.txt | 7 + src/lib.rs | 239 ++++++++++++++++++++++++++++------- 2 files changed, 201 insertions(+), 45 deletions(-) create mode 100644 proptest-regressions/lib.txt diff --git a/proptest-regressions/lib.txt b/proptest-regressions/lib.txt new file mode 100644 index 0000000..109f441 --- /dev/null +++ b/proptest-regressions/lib.txt @@ -0,0 +1,7 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc 5d96cb981bff1698498f3191e58704c457dbec79a31330962bf90f0c6f842dad # shrinks to case = Case { channel_size: 396, data: [[75, 1, 166, 193, 174, 20, 113, 253, 196, 152, 31, 206, 47, 91, 246, 133, 20, 94, 12, 107, 223, 133, 25, 173, 2, 107, 251, 248, 173, 164, 188, 71, 130, 64], [167, 146, 30, 137, 93, 164, 251, 48, 78, 41, 222, 210, 15], [57, 224, 99, 173, 176, 216, 53, 38, 171, 195, 98, 234, 122, 248, 86, 242, 173, 46, 25, 190, 141, 155, 162, 9, 68, 127, 0, 77, 96, 152, 243, 144, 39, 36, 220, 154, 146, 28, 10, 174, 77, 170, 228, 159, 211, 117, 192, 231, 39, 89, 254, 14, 194, 182, 95, 150, 59, 163, 166, 178, 248, 40, 123, 133, 149, 220, 146, 207, 186, 62, 250, 217, 193, 174, 47, 148, 71, 245, 160, 50, 121, 240, 229, 172, 114, 90, 77, 255, 114, 204, 58, 17, 121, 27, 106, 232, 9, 78, 199, 234, 70, 62, 182, 160, 85, 229, 213, 238, 202, 157, 225, 12, 101, 34, 117, 172, 230, 236, 211, 241, 22, 232, 134, 240, 66, 160, 42, 36, 232, 158, 228, 187, 56, 206, 116, 76, 90, 218, 22, 213, 8, 184, 52, 2, 25, 199, 182, 54, 65, 157, 231, 94, 121, 62, 129, 66, 169, 182, 42, 15, 249, 41, 19, 187, 93, 174, 208, 234, 209, 188, 248, 31, 117, 25, 27, 3, 101, 9, 190, 72, 8, 77, 88, 106, 111, 101, 86, 48, 193, 19, 99, 233, 90, 106, 92, 224, 79, 54, 41, 114, 218, 30, 81, 7, 239, 105, 252, 69, 244, 133, 177, 127, 105, 68, 56, 127, 222, 240, 191, 206, 249, 163, 115, 2, 11, 1, 208, 82, 247, 70, 173, 81, 207, 192, 119, 63, 206, 123, 145, 160, 140, 173, 81, 164, 24, 143, 3, 210, 250, 224, 226, 187, 209, 112, 25, 241, 247, 137, 230, 249, 226, 162, 33, 171, 255, 174, 50, 220, 196, 115, 150, 86, 93, 129, 103, 138, 239, 189, 228, 183, 88, 9, 181, 250, 64, 111, 30, 7, 196, 115, 4, 152, 83, 51, 62, 210, 248, 193, 189, 16, 181, 44, 126, 72, 229, 96, 73, 192, 56, 197, 173, 133, 72, 130, 121, 100, 176, 49, 219, 132, 87, 13, 99, 115, 47, 220, 168, 156, 235, 122, 107, 76, 97, 219, 229, 59], [223, 182, 252, 221, 197, 148, 123, 159, 77, 134, 220, 55, 145, 187, 161, 10, 78, 12, 213, 135, 61, 26, 160, 80, 32, 115, 182, 83, 179, 124, 199, 93, 116, 58, 200, 61, 85, 207, 164, 139, 183, 169, 99, 166, 5, 248, 254, 206, 33, 224, 184, 0, 115, 246, 35, 119, 127, 184, 76, 6, 72, 53, 72, 131, 146, 201, 88, 67, 22, 112, 191, 16, 57, 106, 63, 191, 147, 233, 43, 73, 234, 115, 213, 71, 141, 187, 238, 213, 245, 181, 202], [224, 31, 100, 34, 141, 181, 1, 206, 192, 0, 193, 77, 206, 64, 52, 235, 223, 134, 114, 173, 223, 13, 25, 33, 178, 217, 5, 127, 137, 18, 198, 233, 204, 248, 191, 236, 72, 32, 32, 252, 160, 209, 223, 74, 168, 80, 96, 16, 198, 62, 157, 233, 72, 6, 220, 89, 179, 101, 66, 163, 71, 210, 11, 58, 120, 26, 245, 83, 86, 34, 234, 100, 62, 214, 138, 153, 184, 128, 170, 47, 217, 193, 45, 4, 158, 165, 255, 52, 244, 213, 247, 239, 165, 167, 243, 242, 154, 229, 251, 223, 126, 85, 194, 115, 109, 95, 206, 244, 56, 102, 19, 121, 255, 132, 174, 53, 138, 80, 75, 15, 111, 77, 64, 220, 105, 55, 216, 73, 58, 10, 231, 248, 136, 176, 87, 162, 228, 136, 231, 222, 121, 41, 51, 120, 236, 55, 203, 246, 205, 166, 84, 227, 223, 139, 226, 96, 21, 29, 224, 204, 174, 70, 160, 50, 254, 233, 64, 148, 107, 28, 112, 16, 137, 103, 127, 108], [181, 100, 170, 159, 143, 65, 54, 147, 141, 94, 31, 159, 142, 15, 85, 136, 20, 41, 125, 166, 113, 161, 199, 152, 67, 17, 14, 184, 127, 193, 247, 175, 19, 188, 40, 156, 60, 198, 202, 179, 174, 203, 96, 62, 141, 227, 194, 30, 172, 121, 103, 31, 157, 142, 157, 12, 204, 61, 196, 254, 48, 105, 180, 78, 208, 101, 226, 41, 188, 72, 222, 141, 11, 29, 253, 81, 144, 138, 182, 221, 160, 201, 16, 93, 238, 152, 243], [191, 107, 84, 246, 57, 45, 209, 227, 62, 19, 117, 252, 63, 213, 81, 95, 133, 225, 12, 3, 151, 181, 71, 44, 249, 225, 253, 148, 32, 253, 255, 2, 239, 161, 107, 8, 230, 94, 81, 242, 43, 124, 185, 165, 203, 204, 107, 67, 135, 185, 118, 15, 12, 77, 97, 193, 75, 101, 188, 210, 120, 181, 120, 167, 144, 191, 160, 50, 11, 235, 8, 66, 33, 178, 215, 177, 55, 83, 34, 207, 54, 91, 18, 128, 252, 101, 167, 250, 147, 5, 100, 5, 61, 76, 94, 155, 223, 225, 228, 120, 250, 71, 189, 68, 232, 220, 7, 31, 142, 204, 184, 73, 181, 201, 126, 114, 166, 14, 198, 63, 19, 98, 158, 249, 67, 91, 46, 50, 5, 132, 82, 102, 234, 148, 197, 60, 195, 41, 157, 223, 244, 171, 8, 82, 5, 54, 54, 63, 171, 221, 128, 30, 252, 117, 68, 130, 10, 9, 93, 142, 10, 242, 153, 196, 199, 93, 36, 50, 68, 116, 163, 205, 32, 36, 251, 7, 195, 175, 209, 231, 146, 246, 38, 243, 146, 7, 26, 54, 29, 111, 236, 96, 49, 116, 77, 226, 255, 169, 253, 78, 50, 42, 134, 177, 13, 240, 25, 227, 93, 181, 18, 135, 74, 6, 68, 49, 95, 205, 129, 165, 231, 148, 90, 217, 194, 86, 214, 242, 99, 174, 8, 96, 168, 215, 225, 178, 15, 93, 159, 210, 157, 167, 118, 141, 172, 201, 24, 8, 55, 84, 130, 245, 218, 52, 205, 38, 6, 236, 255, 188, 65, 206, 125, 55, 4, 78, 96, 25, 30, 5, 194, 126, 37, 168, 182, 37, 73, 173, 251, 209, 50, 111, 66, 194, 80, 201, 4, 38, 25, 211, 230, 215, 70, 0, 195, 115, 48, 60, 191, 87, 67, 236, 100, 23, 180, 252, 237, 28, 148, 65, 33, 177, 250, 120, 226, 40, 89, 173, 67, 248, 37, 27, 101, 139, 84, 132, 23, 218, 148, 143, 73, 187, 201, 35, 57, 53, 44, 25, 46, 195, 255], [240, 6, 216, 203, 24, 178, 67, 145, 96, 21, 74, 151, 211, 7, 136, 90, 127, 64, 153, 21, 90, 18, 29, 102, 17, 159, 96, 55, 140, 89, 164, 242, 22, 152, 157, 191, 197, 188, 187, 139, 105, 126, 182], [202, 232, 171, 47, 136, 171, 215, 147, 199, 185, 50, 62, 202, 192, 120, 116, 187, 204, 200, 254, 76, 24, 100, 189, 251, 29, 105, 176, 41, 169, 175, 255, 142, 135, 218, 98, 68, 250, 66, 240, 208, 62, 103, 48, 184, 237], [38, 249, 208, 230, 240, 70, 125, 156, 5, 89, 28, 236, 253, 14, 24, 151, 139, 28, 246, 2, 200, 160, 3, 3, 243, 44, 202, 214, 99, 169, 41, 197, 63, 179, 98, 46, 230, 109, 112, 33, 204, 40, 96, 25, 241, 157, 79, 4, 15, 153, 7, 195, 64, 25, 19, 8, 53, 164, 109, 236, 154, 225, 116, 151, 77, 41, 43, 44, 233, 11, 23, 85, 167, 138, 89, 146, 160, 235, 20, 14, 143, 198, 227, 216, 225, 128, 255, 153, 111, 60, 179, 56, 154, 153, 124, 21, 173, 184, 194, 44, 63, 29, 16, 18, 214, 209, 215, 232, 132, 153, 140, 80, 35, 10, 31, 195, 232, 44, 139, 39, 130, 145, 113, 77, 255, 167, 84, 203, 250, 191, 215, 141, 100, 122, 242, 121, 89, 227, 181, 13, 84, 89, 113, 146, 244, 126, 62, 147, 177, 177, 138, 68, 84, 153, 21, 3, 215, 6, 0, 179, 111, 105, 203, 45, 160, 203, 188, 159, 116, 153, 121, 184, 229, 220, 10, 197, 141, 202, 69, 121, 175, 234, 63, 62, 132, 48, 206, 204, 29, 249, 106, 119, 162, 20, 17, 204, 189, 93, 115], [36, 55, 250, 107, 85, 91, 39, 56, 78, 16, 151, 205, 27, 2, 220, 72, 149, 113, 65, 36, 48, 107, 32, 231, 250, 42, 123, 134, 244, 203, 158, 205, 247, 32, 210, 54, 217, 184, 80, 41, 198, 65, 55, 149, 221, 168, 195, 249, 127, 167, 233, 28, 88, 125, 78, 88, 160, 125, 44, 42, 71, 57, 225, 141, 230, 61, 116, 91, 83, 213, 97, 216, 237, 194, 10, 134, 217, 55, 50, 31, 56, 88, 247, 116, 157, 83, 218, 238, 147, 75, 253, 4], [162, 105, 173, 146, 21, 29, 247, 234, 39, 162, 181, 22, 133, 45, 180, 146, 113, 63, 100, 254, 156, 9, 72, 91, 202, 229, 15, 218, 202, 107, 196, 224, 218, 37, 73, 203, 149, 145, 178, 89, 105, 112, 11, 213, 108, 5, 242, 106, 164, 103, 100, 175, 105, 210, 9, 76, 195, 147, 82, 194, 50, 86, 245, 223, 169, 162, 0, 52, 175, 79, 54, 26, 165, 157, 213, 59, 242, 67, 146, 241, 4, 237, 138, 195, 243, 170, 210, 45, 159, 36, 66, 81, 177, 164, 43, 202, 194, 109, 93, 124, 225, 70, 144, 115, 195, 230, 107, 152, 151, 90, 100, 64, 86, 85, 118, 215, 235, 59, 79, 248, 58, 85, 196, 86, 83, 206, 59, 146, 101, 236, 255, 133, 225, 3, 148, 206, 50, 210, 156, 97, 168, 182, 215, 157, 94, 115, 218, 44, 187, 68, 165, 97, 20, 252, 217, 62, 19], [13, 24, 15, 4, 35, 186, 206, 10, 203, 181, 217, 135], [192, 92, 38, 58, 185, 102, 110, 81, 218, 13, 170, 227, 89, 103, 107, 32, 95, 32, 200, 92, 154, 233, 24, 216, 90, 114, 62, 57, 59, 193, 64, 209, 217, 30, 48, 61, 247, 62, 194, 109, 76, 122, 129, 197, 82, 92, 67, 21, 48, 17, 75, 161, 27, 200, 157, 249, 161, 72, 144, 87, 163, 223, 75, 57, 10, 189, 119, 217, 245, 229, 51, 53, 2, 218, 202, 221, 166, 21, 233, 120, 211, 199, 223, 163, 255, 57, 108, 253, 10, 114, 161, 186, 41, 244, 221, 182, 167, 196, 137, 74, 217, 228, 94, 182, 247, 199, 43, 0, 155, 108, 40, 131, 248, 188, 181, 229, 244, 236, 200, 112, 72, 219, 50, 14, 118, 148, 95, 170, 104, 220, 251, 129, 127, 210, 71, 110, 247, 138, 138, 79, 78, 207, 137, 233, 196, 94, 21, 33, 63, 103], [13, 176, 251, 67, 212, 130, 13, 150, 236, 255, 187, 51, 191, 129, 42, 236, 92, 109, 86, 58, 107, 108, 161, 203, 250, 35, 219, 96, 157, 15, 9, 112, 240, 236, 120, 128, 157, 53, 113, 16, 227, 188, 84, 185, 124, 125, 97, 41, 118, 178, 86, 74, 244, 98, 213, 98, 194, 240, 119, 199, 61, 250, 51, 120, 168, 99, 201, 173, 101, 75, 143, 145, 223, 177, 71, 105, 250, 0, 10, 62, 145, 154, 80, 79, 183, 11, 15, 209, 122, 1, 37, 223, 196, 241, 212, 118, 58, 103, 217, 75, 69, 65, 11, 85, 14, 23, 96, 187, 25, 98, 78, 34, 235, 91, 168, 206, 54, 116, 157, 43, 139, 225, 65, 222, 89, 68, 14, 152, 101, 162, 110, 137, 134, 245, 129, 110, 113, 233, 129, 147, 91, 240, 248, 63, 70, 154, 180, 33, 68, 222, 229, 74, 147, 159, 51, 74, 95, 195, 40, 72, 93, 11, 35, 234, 223, 25, 78, 65, 219, 171, 200, 132, 69, 151, 153, 138, 21, 54, 194, 115, 45, 79, 3, 60, 31, 19, 131, 192, 200, 240, 21, 123, 4, 164, 15, 217, 36, 148, 96, 22, 19, 41, 20, 106], [15, 208, 178, 246, 89, 71, 176, 165, 171, 106, 224, 176, 127, 69, 154, 187, 120, 221, 171, 252, 170, 251, 248, 108, 129, 133, 231, 220, 36, 16, 98, 14, 121, 246, 238, 197, 53, 157, 72, 252, 21, 128, 236, 152, 105, 92, 16, 122, 125, 29, 163, 120, 179, 116, 144, 191, 17, 40, 170, 196, 133, 135, 247, 29, 213, 41, 199, 63, 142, 83, 180, 222, 160, 180, 152, 233, 52, 185, 6, 77, 60, 98, 204, 70, 210, 211, 254, 135, 174, 244, 196, 81, 0, 112, 206, 11, 197, 125, 178, 123, 9, 156, 132, 43, 185, 237, 120, 157, 52, 2, 141, 82, 255, 58, 202, 186, 80, 32, 81, 79, 149, 64, 211, 186, 96, 224, 113, 164, 177, 182, 63, 77, 175, 0, 52, 123, 155, 238, 95, 250, 25, 71, 221, 162, 236, 175, 24, 30, 100, 89, 28, 220, 38, 53, 56, 14, 93, 10, 35, 183, 252, 178, 155, 221, 112, 171, 166, 102, 245, 43, 15, 116, 170, 183, 0, 187, 238, 90, 90, 97, 2, 199, 62, 74, 221, 60, 188, 242, 141, 81, 196, 114, 94, 248, 198, 5, 172, 8, 146, 200, 71, 14, 23, 237, 221, 202, 144, 16, 231, 149, 48, 112, 50, 155, 122, 20, 148, 253, 95, 6, 70, 182, 129, 214, 55, 73, 20, 94, 239, 111, 244, 197, 127, 211, 120, 108, 86, 102, 0, 78, 108, 120, 225, 161, 197, 47, 61, 132, 233, 46, 165, 231], [61, 151, 91, 169, 26, 9, 82, 96, 223, 191, 129, 197, 116, 139, 0, 235, 255, 51, 142, 216, 195, 59, 196, 218, 200, 177, 31, 214, 50, 43, 215, 198, 177, 153, 127, 57, 169, 12, 232, 148, 111, 111, 218, 87, 9, 89, 20, 147, 52, 40, 200, 48, 246, 210, 238, 248, 242, 173, 128, 151, 142, 169, 84, 218, 159, 90, 216, 14, 90, 93, 243, 115, 65, 245, 65, 31, 183, 151, 94, 96, 219, 78, 178, 99, 100, 10, 149, 202, 5, 8, 102, 11, 195, 252, 173, 86, 128, 110, 241, 62, 4, 25, 116, 79, 163, 226, 42, 132, 167, 51, 96, 123, 207, 12, 119, 222, 83, 239, 252, 77, 208, 42, 212, 155, 229, 255, 39, 244, 121, 79, 202, 253, 154, 107, 158, 39, 220, 96, 10, 189, 31, 18, 241, 64, 94, 164, 208, 13, 31, 250, 65, 55, 23, 118, 36, 139, 96, 237, 234, 252, 163, 137, 125, 99, 179, 59, 211, 202, 99, 4, 93, 60, 97, 38, 69, 58, 87, 166, 121, 89, 167, 142, 229, 247, 81, 203, 155, 111, 30, 114, 81, 109, 134, 78, 25, 14, 166, 206, 198, 71, 100, 19, 5, 158, 54, 218, 41, 184, 8, 182, 205, 179, 108, 88, 214, 19, 247, 32, 43, 154, 123, 69, 5, 9, 240, 126, 41, 33, 163, 208, 251, 136, 105, 12, 81, 22, 143, 73, 143, 201, 22, 102, 124, 31, 231, 219, 103, 188, 34, 112, 211, 208, 6, 244, 42, 3, 198, 85, 77, 218, 186, 182, 248, 232, 203, 31, 236, 178, 247, 163, 246, 235, 98, 46, 110, 47, 141, 72, 172, 176, 11, 248, 214, 113, 88, 142, 156, 35, 192, 201, 217, 6, 31, 136, 60, 185, 200, 131, 13, 15, 64, 86, 162, 158, 100, 241, 137, 251, 204, 134, 190, 105, 78, 188, 64, 30, 176], [18, 27, 42, 170, 54, 166, 88, 66, 119, 251, 102, 18, 152, 108, 153, 182, 4, 89, 160, 228, 19, 147, 25, 137, 139, 209, 233, 248, 47, 165, 178, 168, 78, 50, 74, 120, 217, 50, 57, 128, 255, 138, 157, 91, 16, 85, 244, 194, 241, 192, 9, 126, 231, 187, 254, 72, 205, 174, 225, 143, 250, 238, 75, 184, 187, 235, 113, 6, 123, 153, 73, 138, 49, 88, 181, 146, 113, 72, 48, 136, 222, 215, 70, 212, 30, 158, 85, 12, 44, 32, 161, 249, 7, 234, 188, 107, 8, 199, 163, 26, 171, 56, 23, 5, 20, 128, 18, 225, 123, 147, 54, 135, 236, 1, 187, 18, 207, 240, 107, 36, 249, 67, 175, 56, 7, 100, 105, 226, 64, 161, 177, 119, 28, 251, 75, 84, 7, 245, 178, 222, 209, 32, 126, 138, 205, 125, 129, 95, 170, 194, 164, 52, 232, 240, 185, 58, 193, 173, 37, 99, 104, 124, 137, 94, 57, 49, 146, 250, 82, 137, 215, 76, 110, 242, 136, 5, 42, 54, 235, 129, 198, 200, 211, 242, 149, 227, 124, 70, 116, 31, 219, 163, 158, 115, 176, 113, 116, 58, 40, 197, 11, 230, 178, 140, 136, 141, 54, 246, 32, 78, 217, 76, 36, 221, 223, 234, 199, 236, 220], [40, 35, 153, 140, 18, 161, 13, 66, 58, 243, 255, 94, 3, 225, 192, 12, 181, 189, 108, 164, 236, 164, 238, 154, 1, 181, 128, 6, 32, 175, 50, 136, 222, 98, 161, 10, 29, 87, 86, 77, 205, 69, 59, 36, 252, 42, 203, 55, 114, 142, 120, 15, 81, 0, 40, 197, 159, 22, 122, 247, 152, 72, 190, 196, 174, 51, 85, 6, 89, 145, 222, 230, 154, 120, 62, 58, 94, 132, 19, 197, 11, 6, 65, 119, 156, 239, 152, 75, 33, 145, 13], [67, 28, 235, 94, 216, 247, 18, 13, 212, 75, 80, 54, 7, 206, 64, 42, 63, 32, 250, 3, 183, 32, 35, 18, 95, 255, 88, 121, 218, 87, 143, 233, 157, 90, 225, 246, 158, 8, 4, 106, 117, 149, 230, 176, 72, 186, 109, 219, 101, 16, 188, 6, 227, 68, 251, 87, 223, 212, 221, 28, 104, 123, 124, 249, 208, 167, 205, 178, 2, 112, 164, 112, 196, 205, 135, 107, 152, 138, 227, 136, 180, 78, 112, 85, 226], [155, 193, 37, 246, 58, 33, 78, 244, 171, 232, 171, 246, 101, 230, 158, 75, 170, 16, 130, 174, 47, 91, 241, 161, 186, 183, 116, 26, 10, 180, 102, 74, 74, 237, 24, 251, 158, 18, 0, 36, 150, 102, 76, 191, 158, 191, 155, 240, 239, 158, 53, 143, 173, 141, 65, 136, 14, 0, 191, 191, 74, 143, 47, 154, 32, 212, 181, 0, 10, 236, 7, 15, 230, 101, 94, 230, 89, 107, 93, 185, 81, 214, 54, 204, 30, 15, 248, 101, 249, 230, 213, 104, 50, 213, 201, 147, 145, 9, 164, 86, 203, 247, 190, 175, 212, 137, 152, 239, 85, 255, 59, 238, 131, 52, 87, 59, 30, 81, 118, 160, 222, 123], [238, 120, 165, 91, 92, 46, 98, 170, 181, 163, 175, 113, 227, 240, 41, 137, 162, 22, 14, 37, 231, 32, 59, 73, 136, 25, 80, 191, 204, 127, 14, 134, 51, 88, 242, 218, 208, 59, 219, 92, 177, 139, 115, 147, 239, 234, 159, 71, 237, 255, 126, 16, 237, 184, 208, 99, 105, 200, 227, 185, 14, 101, 197, 191, 114, 43, 18, 55, 111, 2, 24, 157, 121, 89, 170, 185, 197, 142, 79, 242, 131, 210, 129, 177, 34, 41, 94, 158, 206, 206, 0, 125, 201, 212, 233, 202, 191, 76, 33, 55, 180, 182, 244, 110, 231, 193, 26, 180, 43, 254, 103, 85, 55, 249, 112, 96, 43, 252, 245, 222, 224, 54, 157, 237, 202, 246], [192, 195, 224, 16, 224, 10, 61, 147, 136, 255, 83, 67, 28, 175, 250, 162, 62], [63, 131, 146, 139, 210, 153, 173, 13, 130, 1, 96, 53, 232, 57, 235, 78, 160, 200, 248, 63, 228, 221, 177, 195, 209, 240, 76, 185, 104, 163, 46, 28, 10, 202, 27, 24, 122, 128, 96, 153, 31, 50, 85, 189, 128, 100, 194, 40, 118, 95, 126, 3, 44, 91, 175, 131, 238, 165, 182, 79, 75, 61, 54, 65, 219, 9, 86, 109, 10, 209, 78, 193, 63, 238, 73, 197, 127, 77, 110, 11, 37, 252, 239, 189, 34, 218, 2, 94, 192, 143, 65, 61, 160, 250, 22, 148, 153, 76, 214, 83, 85, 45, 40, 140, 224, 2, 254, 2, 2, 48, 77, 95, 66, 253, 239, 175, 73, 114, 143, 162, 107, 39, 31, 173, 42, 45, 19, 116, 205, 67, 189, 61, 105, 173, 19, 22, 133, 234, 43, 29, 7, 206, 247, 18, 102, 122, 35, 73, 103, 98, 27, 138, 50, 58, 252, 148, 57, 124, 185, 236, 64, 37, 242, 29, 201, 34, 81, 39, 214, 67, 148, 236, 234, 203, 123, 156, 242, 158, 161, 56, 118, 98, 108, 216, 98, 65, 208, 44, 221, 200, 247, 133, 246, 158, 44, 141, 39, 212, 250, 154, 136, 32, 31, 236, 249, 204, 58, 43, 141, 198, 212, 198, 25, 86, 28, 76, 51, 136, 146, 133, 51, 79, 168, 217, 16, 215, 171, 206, 166, 253, 177, 205, 64, 98, 202, 176, 229, 162, 73, 203, 149, 96, 59, 252, 70, 94, 162, 186, 15, 69, 205, 101, 22, 186, 38, 146, 31, 140, 52, 201], [110, 248, 125, 47, 209, 154, 0, 174, 243, 161, 45, 242, 19, 88, 50, 194, 36, 164, 85, 228, 117, 124, 115, 115, 79, 31, 249, 37, 38, 129, 206, 252, 178, 22, 226, 221, 117, 120, 151, 196, 41, 85, 122, 149, 9, 207, 161, 58, 193, 98, 0, 60, 21, 248, 129, 145, 151, 76, 198, 251, 226, 78, 94, 2, 40, 71, 6, 92, 234, 68, 24, 226, 221, 254, 81, 51, 7, 102, 196, 213, 10, 68, 97, 103, 155, 40, 148, 254, 89, 245, 31, 33, 50, 250, 167, 83, 164, 229, 70, 140, 246, 76, 24, 63, 200, 243, 252, 206, 140, 163, 10, 137, 6, 255, 102, 9, 32, 131, 136, 249, 110, 241, 129, 98, 44, 80, 198, 64, 162, 172, 158, 48, 207, 18, 207, 52, 221, 180, 127, 81, 173, 5, 177, 2, 30, 6, 228, 160, 131, 118, 141, 85, 62, 247, 31, 106, 164, 182, 122, 90, 72, 254, 137, 104, 140, 216, 137, 170, 220, 191, 58, 195, 85, 196, 190, 180, 138, 101, 100, 216, 126, 68, 213, 105, 197, 100, 154, 253, 52, 238, 119, 12, 97, 104, 126, 146, 104, 86, 170, 51, 241], [158, 198, 222, 166, 205, 7, 122, 150, 1, 246, 42, 118, 88, 254, 230, 88, 41, 12, 166, 41, 78, 107, 0, 209, 47, 51, 48, 8, 83, 185, 191, 84, 2, 24, 160, 23, 117, 56, 186, 226, 227, 245, 218, 101, 208, 11, 115, 62, 181, 109, 178, 192, 167, 201, 34, 43, 44, 150, 147, 228, 201, 232, 193, 132, 241, 23, 90, 98, 43, 154, 215, 82, 0, 115, 137, 30, 14, 234, 254, 254, 251, 219, 243, 55, 2, 56, 199, 76, 141, 156, 50, 59, 65, 192, 174, 50, 34, 63, 105, 85, 181, 77, 191, 62, 217, 251, 23, 2, 119, 12, 136, 248, 234, 174, 23, 56, 154, 51, 210, 150, 109, 187, 165, 250, 46, 210, 30, 1, 5, 108, 154, 180, 35, 214, 142, 37, 29, 49, 238, 50, 45, 123, 123, 148, 96, 76, 51, 185, 186, 178, 202, 80, 121, 75, 242, 88, 118, 138, 207, 176, 53, 246, 228, 213, 237, 133, 175, 67, 111, 126, 188, 192, 110, 226, 63, 44, 179, 14, 31, 100, 13, 75, 150, 208, 75, 49, 102, 203, 198, 142, 122, 106, 78, 223, 181, 193, 129, 204, 139, 7, 34, 39, 250, 123, 47, 252, 232, 60, 5, 83, 129, 96, 109, 179, 246, 65, 61, 84, 61, 180, 142, 183, 191, 131, 81, 46, 164, 43, 134, 200, 187, 118, 126, 146, 153, 3, 80, 85, 185, 164, 196, 130, 130, 183, 244, 134, 18, 121, 34, 131, 2, 241, 77, 216, 250, 1, 132, 29, 50, 210, 246, 195, 133, 142, 216, 60, 141, 87, 109, 94, 42, 59, 105, 148, 246, 70, 99, 250, 233, 223, 164, 43], [89, 56, 66, 193, 162, 207, 43, 186, 203, 1, 121, 55, 59, 185, 240, 185, 120, 247, 88, 60, 144, 237, 251, 145, 234, 25, 255, 141, 48, 156, 163, 39, 241, 17, 162, 58, 70, 174, 16, 119, 39, 222, 81, 137, 209, 109, 226, 172, 95, 187, 180, 25, 26, 41, 121, 174, 134, 255, 190, 184, 180, 236, 191, 220, 110, 23, 0, 241, 127, 125, 9, 18, 31, 67, 211, 240, 208, 226, 178, 240, 162, 7, 154, 50, 160, 31, 82, 122, 221, 61, 205, 178, 63, 70, 80, 138, 73, 233, 228, 65, 8, 162, 40, 161, 140, 217, 218, 107, 42, 251, 215, 2, 35, 231, 239, 63, 207, 33, 130, 9, 29, 66, 36, 186, 217, 188, 88, 135, 114, 245, 79, 104, 79, 18, 17, 84, 255, 229, 99, 235, 188, 50, 211, 192, 170, 99, 113, 246, 31, 228, 108, 143, 33, 50, 13, 17, 173, 57, 230, 124, 248, 67, 46, 129, 214, 170, 84, 235, 105, 21, 66, 196, 7, 102, 216, 214, 66, 154, 115, 95, 20, 170, 109, 144, 136, 32, 186, 64, 246, 223, 96, 0, 121, 13, 89, 104, 21, 240, 175, 60, 81, 199, 176, 74, 162, 77, 162, 185, 8, 132, 211, 175, 220, 238], [49, 54, 79, 233, 193, 70, 80, 177, 72, 96, 68, 83, 60, 183, 60, 6, 213, 163, 176, 67, 83, 48, 29, 153, 46, 193, 207, 96, 25, 42, 122, 32, 63, 242, 209, 116, 90, 174, 245, 208, 41, 43, 158, 13, 188, 49, 220, 26, 145, 25, 163, 214, 93, 44, 103, 165, 105, 38, 113, 209, 108, 228, 232, 25, 246, 11, 130, 99, 63, 138, 74, 105, 79, 207, 135, 236, 220, 24, 152, 52, 126, 126, 13, 97, 6, 193, 157, 243, 54, 195, 56, 157, 97, 238, 153, 195, 78, 148, 234, 31, 194, 58, 210, 177, 169, 110, 227, 49, 229, 217, 159, 22, 242, 24, 148, 75, 52, 179, 62, 54, 232, 49, 213, 231, 146, 77, 216, 205, 205, 146, 126, 160, 169, 61, 28, 109, 30, 112, 175, 44, 10, 51, 175, 115, 131, 26, 231, 39, 251, 186, 20, 135, 177, 21, 216, 100, 190, 105, 230, 135, 92, 215, 21, 5, 36, 77, 240, 82, 93, 45, 202, 21, 51, 130, 8, 105, 185, 168, 228, 13, 158, 254, 128, 53, 9, 236, 207, 164, 147, 31, 230, 236, 153, 16, 249, 164, 254, 151, 104, 196, 12, 192, 231, 37, 65, 188, 7, 197, 21, 74, 187, 115, 193, 200, 253, 166, 160, 37, 70, 59, 55, 60, 173, 110, 249, 103, 222, 87, 190, 69, 217, 154], [142, 0, 44, 6, 41, 93, 227, 97, 35, 231, 237, 97, 3, 202, 212, 56, 40, 238, 17, 54, 8, 162, 79, 175, 56, 9, 55, 17, 85, 33, 126, 90, 164, 139, 198, 254, 157, 110, 90, 9, 61, 193, 162, 143, 63, 120, 160, 46, 28, 150, 163, 198, 101, 31, 8, 146, 97, 27, 230, 113, 245, 20, 123, 93, 159, 3, 49, 227, 110, 5, 117, 23, 103, 141, 107, 96, 167, 45, 126, 179, 172, 56, 212, 204, 171, 145, 160, 25, 158, 242, 57, 189, 227, 78, 79, 238, 238, 41, 157, 97, 150, 57, 246, 171, 241, 48, 128, 36, 74, 163, 141, 119, 79, 26, 84, 153, 171, 193, 70, 70, 199, 53, 121, 35, 136, 130, 23, 205, 216, 247, 171, 217, 233, 89, 152, 79, 73, 74, 236, 65, 253, 141, 10, 95, 156, 126, 216, 78, 129, 102, 35, 233, 93, 239, 114, 135, 3, 168, 77, 15, 185, 219, 27, 182, 113, 191, 233, 16, 246, 145, 87, 125, 82, 241, 123, 246, 225, 18, 154, 50, 249, 12, 48, 76, 90, 167, 73, 32, 0, 87, 64, 204, 116, 201, 220, 185, 91, 51, 184, 90, 136, 113, 66, 0, 248, 35, 155, 99, 115, 244, 1, 224, 53, 30, 65, 214, 181, 25, 124, 133, 1, 194, 99, 38, 171, 132, 135, 28, 153, 167, 214, 23, 58, 128, 22, 162, 250, 101, 181, 19, 24, 56, 242, 51, 40, 69, 149, 76, 150, 64, 148, 245, 209, 135, 56, 132, 151, 97, 101, 239, 122, 181, 123, 108, 2, 215, 159, 182, 235, 7, 196, 103, 79, 90, 53, 20, 10, 197, 152, 128, 209, 253, 241, 174, 78, 108, 214, 59, 133, 101, 89, 137, 160, 76, 167, 173, 176, 167, 113, 91, 159, 185, 110, 69, 3, 76, 179, 197, 226, 98, 53, 40, 172, 118, 161], [128, 17, 10, 240, 90, 223, 37, 74, 207, 141, 231, 41, 154, 177, 200, 249, 57, 32, 222, 29, 158, 40, 196, 175, 167, 90, 143, 223, 106, 184, 41, 76, 42, 95, 224, 93, 119, 142, 170, 93, 225, 24, 69, 168, 151, 124, 149, 71, 78, 184, 165, 93, 242, 1, 205, 4, 2, 174, 37, 218, 138, 33, 5, 91, 168, 251, 197, 232, 120, 193, 32, 95, 174, 217, 119, 80, 124, 83, 26, 223, 106, 239, 66, 123, 250, 82, 151, 44, 125, 223, 36, 32, 159, 127, 187, 159, 181, 240, 4, 101, 22, 79, 11, 81, 51, 129, 86, 227], [179, 147, 76, 161, 22, 36, 173, 180, 229, 142, 109, 171, 207, 227, 15, 122, 119, 9, 227, 59, 254, 180, 149, 89, 159, 117, 76, 48, 213, 132, 91, 21, 206, 205, 98, 81, 195, 26, 84, 143, 252, 159, 173, 196, 200, 235, 4, 16, 230, 232, 188, 8, 213, 5, 4, 167, 119, 75, 227, 189, 246, 165, 163, 4, 198, 117, 29, 68, 40, 152, 84, 188, 70, 72, 72, 143, 208, 51, 169, 17, 220, 52, 241, 9, 141, 103, 178, 240, 19, 84, 253, 185, 114, 235, 19, 42, 206, 67, 151, 147, 140, 139, 22, 9, 184, 236, 186, 225, 146, 210, 205, 83, 104, 18, 24, 123, 36, 103, 86, 68, 83, 97, 65, 236, 27, 38, 85, 4, 48, 79, 11, 138, 157, 68, 76, 75, 230, 45, 180, 19, 208, 202, 168, 210, 225, 164, 133, 116, 86, 187, 93, 120, 218, 178, 13, 75, 137, 81, 159, 75, 35, 28, 100, 105, 225, 110, 235, 89, 78, 108, 88, 130, 14, 63, 200, 91, 142, 114, 18, 39, 32, 166, 179, 41, 171, 244, 199, 76, 255, 92, 165, 246, 46, 64, 175, 237, 94, 98, 181, 155, 140, 100, 0, 239, 46, 143, 52, 184, 190, 36, 220, 219, 63], [86, 167, 250, 137, 174, 244, 208, 133, 50, 244, 188, 192, 126, 60, 18, 137, 11, 47, 63, 15, 221, 212, 150, 75, 57, 57, 131, 146, 48, 243, 160, 231, 6, 177, 52, 138, 228, 10, 31, 101, 114, 163, 167, 244, 214, 212, 196, 173, 149, 19, 120, 130, 187, 44, 218, 189, 109, 158, 66, 234, 238, 31, 253, 77, 246, 7, 1, 35, 163, 15, 39, 150, 250, 140, 107, 89, 210, 151, 238, 158, 67, 29, 44, 89, 45, 57, 95, 60, 243, 201, 180, 149, 133, 238, 109, 63, 238, 96, 75, 105, 12, 8, 61, 236, 165, 169, 159, 130, 119, 201, 27, 249, 199, 60, 7, 70, 223, 58, 121, 123, 33, 33, 140, 119, 197, 32, 246, 196, 39, 219, 196, 222, 253, 79, 255, 212, 23, 101, 22, 50, 213, 244, 97, 61, 228, 17, 229, 117, 171, 32, 15, 115, 30, 231, 202, 217, 11, 117, 4, 113, 234, 158, 4, 143, 89, 120, 120, 243, 36, 209, 148, 181, 93, 167, 34, 177, 194, 215, 23, 178, 196, 166, 246, 221, 142, 120, 205, 252, 148, 40, 101, 169, 170, 212, 58, 145, 44, 198, 76, 230, 175, 44, 184, 14, 225, 112, 45, 138, 6, 47, 62, 216, 1, 177, 172, 70, 191, 252, 254, 164, 223, 155, 74, 12, 57, 105, 205, 245, 156, 75, 105, 194, 185, 111, 172, 120, 207, 83, 57, 111, 136, 124, 182, 5, 112, 60, 8, 206, 39, 170, 49, 105, 166, 100, 42, 126, 42, 61, 165, 41, 217, 111, 231, 251, 10, 40, 236, 183, 15, 210, 81, 173, 61, 186, 53, 254, 15, 218, 190, 78, 167, 52, 82, 59, 89, 198, 115, 130, 41, 116, 24, 57, 88], [40, 220, 182, 167, 34, 153, 184, 129, 127, 238, 251, 152, 146, 149, 61, 89, 122, 170, 138, 105, 168, 222, 112, 157, 9, 220, 175, 39, 12, 97, 158, 21, 26, 2, 250, 123, 204, 243, 255, 184, 154, 187, 107, 64, 137, 214, 228, 101, 68, 95, 16, 8, 45, 225, 172, 90, 68, 25, 99, 52, 158, 68, 155, 54, 76, 63, 162, 208, 33, 85, 110, 120, 100, 63, 105, 238, 45, 112, 58, 25, 188, 127, 158, 174, 174], [190, 41, 177, 241, 128, 228, 19, 61, 183, 233, 80, 166, 115, 40, 195, 207, 166, 33, 39, 203, 195, 89, 118, 164, 111, 54, 30, 200, 87, 243, 199, 169, 248, 140, 100, 223, 210, 138, 35, 241, 15, 20, 23, 200, 185, 250, 175, 75, 177, 253, 69, 136, 219, 173, 123, 194, 145, 9, 1, 114, 225, 110, 208, 244, 246, 249, 108, 183, 200, 127, 92, 32, 13, 215, 178, 10, 219, 105, 162, 21, 24, 125, 216, 28, 207, 139, 175, 26, 42, 10, 124, 77, 178, 253, 116, 129, 2, 19, 64, 34, 222, 6, 213, 124, 51, 122, 28, 192, 196, 51, 5, 215, 161, 209, 234, 66, 26, 169, 180, 74, 144, 156, 94, 111, 170, 9, 84, 84, 170, 163, 146, 186, 199, 128, 16, 246, 90, 72, 68, 0, 110, 8, 17, 251, 68, 106, 144], [169, 184, 215, 94, 203, 95, 94, 79, 24, 135, 140, 64, 93, 230, 31, 109, 187, 255, 204, 35, 212, 176, 117, 64, 88, 192, 48, 134, 169, 230, 104, 202, 144, 95, 219, 57, 125, 181, 50, 186, 242, 106, 220, 122, 123, 248, 235, 73, 14, 177, 215, 166, 246, 193, 111, 157, 248, 112, 44, 50, 35, 213, 103, 195, 59, 196, 83, 48, 66, 33, 33, 243, 227, 58, 47, 213, 188, 204], [243, 210, 184, 152, 171, 236, 172, 68, 20, 110, 103, 117, 11, 230, 110, 177, 99, 157, 61, 107, 127, 123, 183, 77, 152, 229, 70, 216, 164, 203, 82, 131, 92, 201, 17, 16, 209, 16, 43, 96, 36, 90, 120, 185, 25, 4, 91, 127, 35, 134, 68, 191, 109, 222, 196, 175, 55, 253, 197, 7, 180, 145, 29, 171, 99, 40, 115, 188, 24, 168, 195, 254, 161, 161, 138, 19, 117, 219, 235, 84, 220, 136, 100, 149, 116, 113, 174, 225, 232, 34, 245, 132, 35, 113, 71, 35, 30, 44, 201, 70, 113, 13, 246, 6, 16, 247, 84, 117, 35, 226, 193, 29, 72, 27, 17, 45, 240, 71, 116, 65, 214, 52, 117, 224, 207, 158, 56, 174, 227, 149, 92, 89, 46, 59, 232, 26, 15, 10, 33, 171, 119, 216, 150, 217, 62, 244, 19, 30, 92, 87, 203, 33, 213, 90, 89, 72, 204, 247, 79, 17, 253, 6, 95, 146, 48, 47, 129, 20, 32, 95, 148, 2, 6, 71, 108, 59], [69, 76, 129, 113, 226, 120, 26, 149, 91, 130, 15, 238, 68, 11, 54, 135, 179, 60, 244, 113, 255, 37, 213, 243, 17, 215, 73, 199, 249, 215, 179, 239, 233, 168, 151, 255, 222, 202, 53, 79, 103, 175, 78, 67, 215, 65, 220, 155, 255, 173, 155, 36, 196, 67, 51, 128, 32, 144, 79, 2, 38, 106, 127, 137, 200, 252, 102, 114, 134, 178, 107, 115, 237, 99, 124, 41, 200, 22, 89, 98, 70, 142, 139, 79, 187, 182, 161, 147, 219, 53, 76, 65, 231, 29, 136, 123, 211, 117, 46, 253, 110, 253, 6, 248, 238, 229, 131, 50, 237, 143, 53, 186, 106, 61, 178, 245, 52, 115, 78, 160, 145, 131, 152, 64, 167, 19, 73, 244, 63, 242, 129, 56, 154, 217, 62, 238, 154, 100, 81, 206, 33, 243, 54, 159, 101, 53, 187, 224, 142, 151, 157, 154, 182, 100, 98, 222, 115, 54, 225, 177, 0, 98, 137, 223, 101, 116, 22, 190, 105, 67, 16, 124, 62, 245, 246, 95, 174, 227, 23, 133, 173, 211, 248, 126, 105, 64, 147, 30, 21, 165, 99, 136, 243, 112, 124, 63, 215, 2, 10, 82, 136, 205, 111, 78, 237, 128, 47, 176, 104, 170, 63, 135, 227, 89, 144, 58, 151, 102, 162, 184, 110, 155, 226, 74, 90, 177, 187, 29, 102, 136, 116, 190, 196, 163, 252, 158, 61, 119, 63, 179, 47, 253, 107, 249, 27, 179, 82, 148, 238, 152, 245, 146, 121, 143, 135, 10, 176, 204, 17, 214, 119, 76, 211, 169, 86, 182, 204, 145, 44, 120, 165, 39, 206, 147, 206, 32, 59, 218, 91, 162, 122, 48, 86, 240, 50, 134, 154, 166, 40, 252, 152, 67, 131, 56, 199, 24, 193, 13, 106, 204, 246, 141, 221, 152, 184, 79, 23, 220, 105, 96, 1, 140, 182, 179, 224, 138, 149, 78, 154, 33, 114, 153, 173, 245, 242, 51, 160, 221, 179, 251, 114, 134, 192, 156, 86, 118, 168, 192, 81, 31, 9, 224, 118, 107, 226, 83, 168, 226, 242, 36, 141, 165, 57, 39, 78, 204, 146, 244, 133, 207, 173, 230, 135, 117, 84, 72, 231], [176, 11, 210, 50, 11, 133, 189, 66, 198, 163, 84, 244, 2, 25, 205, 173, 253, 55, 84, 181, 26, 111, 127, 42, 125, 69, 75, 140, 228, 14, 185, 230, 206, 114, 231, 166, 157, 88, 149, 60, 48, 252, 178, 198, 52, 77, 158, 124, 42, 241, 200, 35, 94, 253, 94, 94, 83, 96, 88, 66, 129, 66, 115, 22, 225, 238, 98, 231, 40, 229, 153, 229, 156, 151, 189, 126, 156, 161, 177, 71, 171, 57, 185, 205, 196, 252, 230, 158, 11, 106, 103, 127, 199, 45, 118, 57, 221, 108, 86, 116, 40, 254, 68, 151, 149, 247, 228, 249, 199, 134, 237, 24, 146, 216, 227, 248, 154, 10, 151, 96, 221, 123, 81, 6, 188, 99, 224, 154, 190, 143, 173, 187, 179, 188, 217, 183, 79, 78, 76, 210, 126, 177, 30, 100, 173], [63, 121, 166, 14, 19, 77, 91, 87, 36, 245, 219, 192, 21, 52, 140, 229, 18, 191, 179, 201, 8, 180, 207, 177, 168, 140, 206, 190, 218, 132, 197, 198, 110, 234, 224, 70, 180, 191, 235, 175, 212, 211, 201, 44, 37, 222, 168, 199, 196, 165, 196, 212, 114, 200, 83, 244, 85, 242, 59, 164, 18, 154, 172, 98, 129, 251, 25, 19, 16, 234, 249, 207, 237, 200, 42, 96, 147, 15, 94, 120, 204, 73, 17, 199, 199, 78, 79, 237, 242, 17, 10, 139, 164, 139, 97, 0, 211, 6, 182, 3, 129, 22, 199, 23, 140, 91, 31, 47, 113, 226, 150, 11, 151, 228, 38, 158, 75, 244, 56, 130, 75, 133, 103, 172, 220, 221, 110, 59], [176, 162, 188, 128, 211, 7, 72, 195, 16, 199, 211, 198, 35, 147, 18, 80, 191, 115, 211, 58, 105, 4, 135, 14, 196, 179, 22, 121, 223, 195, 148, 66, 169, 99, 144, 143, 140, 116, 94, 207, 33, 77, 243, 13, 76, 176, 156, 222, 182, 165, 184, 85, 206, 249, 39, 98, 27, 104, 165, 18, 43, 0, 67, 223], [170, 204, 199, 98, 201, 58, 240, 28, 207, 35, 89, 91, 119, 38, 4, 81, 139, 153, 188, 179, 47, 93, 108, 91, 80, 37, 204, 14, 24, 253, 213, 127, 23, 169, 48, 221, 230, 248, 191, 176, 129, 119, 89, 16, 208, 150, 116, 186, 152, 74, 118, 179, 240, 46, 144, 81, 88, 229, 110, 124, 199, 124, 46, 56, 194, 84, 174, 252, 118, 225, 114, 113, 110, 32, 185, 14, 15, 126, 56, 28, 213, 67, 86, 96, 67, 116, 180, 30, 114, 110, 73, 142, 193, 23, 48, 66, 183, 141, 38, 15, 187, 158, 255, 165, 168, 108, 253, 70, 68, 113, 102, 255, 158, 74, 235, 67, 200, 127, 134, 143, 185, 243, 254, 152, 120, 145, 119, 182, 144, 43, 123, 192, 23, 26, 34, 221, 114, 33, 222, 117, 226, 220, 147, 47, 103, 138, 241, 78, 208, 83, 128, 190, 218, 102, 111, 65, 218, 59, 82, 165, 31, 197, 57, 17, 151, 232, 11, 75, 136, 86, 106, 214, 231, 110, 179, 159, 154, 41, 113, 137, 213, 207, 109, 245, 248, 56, 64, 94, 190, 85, 66, 211, 72, 126, 157, 3, 197, 124, 107, 140, 51, 198, 126, 212, 151, 200, 192, 86, 103, 243, 232, 130, 108, 241, 59, 249, 105, 2, 24, 168, 52, 116, 135, 204, 195, 195, 48, 220, 74, 50, 124, 30, 95, 28, 172, 190, 174, 134, 41, 152, 24, 15, 179, 17, 205, 16, 75, 249, 198, 18, 118, 125, 142, 250, 53, 19, 127, 63, 33, 39, 193, 86], [225, 168, 15, 66, 32, 192, 253, 79, 81, 234, 225, 142, 67, 228, 133, 58, 231, 118, 204, 7, 56, 22, 252, 179, 112, 109, 245, 185, 157, 179, 238, 203, 162, 228, 99, 208, 90, 128, 16, 90, 96, 123, 240, 169, 35, 154, 231, 152, 226, 64, 174, 168, 27, 35, 135, 210, 56, 98, 56, 109, 30, 185, 182, 168, 191, 107, 87, 149, 3, 140, 98, 60, 88, 135, 99, 235, 94, 96, 43, 222, 182, 210, 61, 152, 126, 239, 157, 206, 127, 176, 44, 120, 14, 14, 74, 233, 186, 236, 189, 168, 247, 198, 79, 210, 138, 114, 202, 21, 137, 159, 196, 220, 69, 122, 191, 141, 10, 24, 230, 219, 74, 251, 53, 16, 31, 156, 105, 105, 97, 90, 199, 9, 217, 240, 228, 132, 206, 115, 148, 19, 211, 72, 65, 35, 223, 134, 246, 195, 156, 126, 255, 179, 124, 19, 44, 71, 147, 65, 137, 232, 88, 133, 236, 32, 231, 136, 204, 116, 171, 154, 112, 75, 15, 48, 150, 227, 216, 109, 89, 227, 224, 125, 123, 185, 163, 185, 244, 125, 207, 159, 73, 35, 3, 211, 93, 148, 142, 177, 58, 24, 48, 239, 127, 202, 230, 234, 208, 152, 0, 69, 242, 13, 57, 150, 164, 210, 35, 144, 173, 215, 203, 163, 40, 4, 35, 198, 165, 69, 112, 200, 232, 80, 152, 137, 63, 250, 12, 23, 95, 129, 55, 26, 194, 169, 20, 200, 170, 147, 176, 19, 201, 148, 151, 61, 39, 160, 3, 224, 80, 20, 245, 219, 57, 133, 178, 232, 108, 20, 214, 91, 25, 117, 165, 179, 219, 15, 169, 154, 113, 150, 112, 137, 162, 181, 115, 169, 25, 225, 196, 207, 116, 198, 203, 164, 69, 20, 73, 40, 128, 192, 212, 229, 81, 77, 250, 209, 164, 120, 64, 251, 232, 71, 151, 133, 138, 157, 183, 110, 65, 237, 125, 246, 107, 128, 211, 227, 5, 123, 208, 225, 121, 211, 41, 131, 212, 223, 96, 31, 117, 231, 90, 221, 21, 233, 251, 154, 48, 101, 143, 93, 22, 119, 118, 85, 63, 119, 138, 173, 22, 3, 236, 228, 174, 201], [145, 53, 152, 139, 203, 67, 156, 71, 95, 170, 195, 180, 94, 90, 155, 146, 151, 143, 174, 248, 153, 149, 207, 232, 41, 109, 101, 101, 241, 171, 125, 175, 179, 113, 13, 106, 44, 112, 221, 179, 204, 64, 128, 75, 143, 209, 232, 13, 59, 101, 48, 33, 130, 209, 19, 218, 194, 59, 10, 54, 116, 57, 34, 55, 16, 193, 198, 46, 60, 93, 51, 57, 114, 91, 122, 23, 15, 130, 119, 84, 206, 70, 143, 59, 48, 184, 171, 223, 9, 250, 115, 225, 214, 244, 187, 198, 108, 229, 143, 249, 77, 123, 210, 159, 240, 32, 230, 152, 254, 35, 52, 215, 181, 116, 67, 125, 210, 233, 156, 43, 11, 161, 54, 211, 239, 253, 48, 161, 21, 250, 208, 68, 43, 99, 209, 194, 20, 214, 8, 24, 159, 5, 150, 109, 127, 59, 221, 123, 67, 219, 134, 148, 75, 222, 19, 31, 89, 144, 32, 43, 129, 74, 103, 161, 140, 193, 135, 200, 16, 171, 165, 231, 40, 4, 113, 51, 178, 66, 174, 11, 109, 173, 79, 232, 192, 117, 46, 24, 48, 151, 97, 197, 113, 102, 185, 98, 4, 62, 133, 149, 184, 176, 67, 252, 171, 45, 121, 120, 106, 126, 51, 233, 175, 41, 4], [77, 85, 240, 88, 63, 101, 82, 137, 221, 159, 59, 54, 45, 31, 238, 180, 234, 26, 201, 19, 19, 114, 93, 76, 115, 91, 95, 176, 82, 120, 7, 202, 227, 248, 96, 143, 29, 39, 23, 154, 70, 163, 213, 117, 61, 90, 167, 146, 125, 171, 244, 22, 132, 33, 110, 72, 131, 72, 93, 22, 141, 130, 200, 188, 197, 140, 217, 185, 217, 87, 97, 83, 96, 215, 141, 162, 85, 107, 221, 156, 50, 4, 197, 71, 49, 160, 182, 215, 212, 209, 235, 3, 161, 235, 251, 157, 46, 152, 146, 46, 96, 9, 207, 134, 186, 66, 1, 100, 198, 79, 253, 239, 218, 205, 6, 150, 148, 210, 227, 5, 237, 67, 51, 180, 50, 42, 40, 174, 115, 27, 199, 218, 255, 0, 174, 212, 161, 211, 36, 209, 248, 118, 201, 156, 14, 6, 55, 138, 62, 254, 126, 11, 238, 9, 73, 170, 249, 234, 42, 29, 4, 20, 159, 202, 197, 167, 248, 31, 198, 138, 158, 123, 151, 38, 162, 216, 144, 205, 120, 212, 17, 64, 32, 82, 106, 102, 198, 198, 209, 31, 65, 163, 80, 131, 95, 176, 92, 247, 190, 182, 160, 167, 64, 85, 245, 42, 163, 165, 32, 29, 215, 79, 214, 237, 28, 88, 215, 154, 4, 221, 6, 39, 74], [132, 128, 86, 74, 112, 33, 63, 203, 95, 163, 7, 226, 26, 169, 87, 209, 68, 219, 33, 248, 255, 238, 177, 202, 114, 238, 36, 218, 217, 194, 222, 166, 43, 141, 18, 80, 123, 155, 223, 112, 179, 100, 52, 38, 30, 9, 53, 68, 194, 92, 22, 246, 158, 208, 246, 39, 162, 121, 79, 181, 160, 69, 211, 215, 0, 116, 151, 1, 99, 143, 25, 9, 73, 57, 100, 43, 240, 125, 109, 34, 148, 160, 142, 124, 237, 50, 156, 42, 55, 49, 104, 236, 167, 76, 226, 101, 150, 74, 154, 228, 114, 43, 111, 117, 49, 70, 204, 34, 100, 242, 181, 48, 49, 35, 1, 37, 86, 38, 211, 86, 178, 222, 33, 121, 108, 112, 225, 72, 102, 254, 240, 9, 114, 234, 115, 251, 109, 163, 154, 224, 228, 60, 178], [53, 66, 198, 32, 244, 190, 52, 129, 108, 109, 243, 197, 72, 25, 163, 91, 90, 23, 233, 101, 59, 29, 225, 211, 16, 210, 127, 197, 170, 202, 88, 164, 147, 227, 168, 3, 34, 155, 175, 99, 77, 214, 248, 113, 71, 32, 190, 162, 14, 131, 58, 76, 99, 83, 191, 94, 139, 216, 8, 24, 227, 216, 70, 244, 218, 199, 251, 223, 204, 61, 34, 157, 133, 44, 104, 162, 241, 242, 212, 173, 75, 237, 1, 224, 86, 78, 38, 36, 110, 179, 47, 142, 193, 158, 231, 141, 176, 74, 221, 196, 66, 163, 186, 143, 73, 202, 143, 240, 79, 71, 214, 198, 125, 109, 53, 50, 116, 67, 110, 148, 93, 150, 201, 222, 172, 52, 137, 78, 143, 165, 131, 76, 245, 121, 125, 36, 221, 248, 66, 99, 115, 5, 181, 252, 219, 162, 128, 1, 32, 129, 58, 21, 171, 194, 224, 32, 142, 60, 16, 224, 150, 58, 159, 167, 33, 196, 236, 135, 53, 93, 124, 162, 169, 191, 149, 206, 17, 169, 155, 170, 185, 120, 213, 112, 42, 15, 38, 177, 193, 84, 27, 97, 57, 206, 67, 18, 103, 28, 252, 234, 96, 82, 89, 211, 255, 143, 89, 167, 86, 175, 20, 115, 4, 27, 86, 98, 227, 250, 6, 56, 136, 172, 175, 215, 74, 234, 178, 65, 70, 216, 152, 99, 182, 14, 189, 213, 209, 16, 85, 0, 134, 53, 99, 99, 248, 122, 97, 127, 134, 115, 195, 187, 178, 91, 205, 38, 138, 101, 15, 86, 91, 22, 226, 210, 181, 126, 175, 117, 13, 98, 201, 232, 47, 154, 66, 228, 9, 138, 6, 219, 129, 102, 197, 143, 218, 244, 134, 1, 76, 219, 24, 187, 5, 84, 157, 103, 94, 106, 57, 236, 183, 251, 110, 40, 127, 14, 120, 110, 112, 38, 172, 196, 246, 22, 25, 30, 237, 58, 85, 34, 20, 139, 230, 97, 248, 130, 199, 7, 4, 196, 16, 149, 161, 181, 18, 54, 198, 110, 20], [142, 13, 88, 154, 145, 227, 244, 9, 205, 45, 210, 183, 221, 213, 192, 206, 71, 223, 233, 8, 102, 115, 92, 90, 106, 135, 143, 122, 136, 94, 249, 117, 53, 119, 122, 222, 49, 211, 195, 126, 44, 102, 34, 250, 209, 59, 127, 255, 81, 116, 97, 52, 131, 190, 128, 151, 35, 39, 106, 195, 33, 98, 67, 68, 192, 39, 201, 169, 135, 248, 107, 159, 66, 226, 145, 35, 27, 86, 144, 85, 1, 173, 135, 191, 45, 164, 229, 236, 32, 50, 164, 252, 223, 66, 144, 218, 211, 32, 133, 105, 174, 143, 212, 212, 174, 172, 132, 43, 191, 236, 172, 141, 6, 146, 195, 84, 227, 178, 212, 8, 138, 185, 197, 183, 7, 50, 74, 16, 135, 232, 100, 176, 169, 145, 71, 215, 197, 5, 111, 50, 185, 172, 82, 147, 69, 128, 65, 89, 131, 167, 32, 216, 57, 33, 139, 51, 226, 191, 163, 238, 152, 203, 178, 96, 253, 180, 105, 242, 114, 155, 251, 56, 129, 155, 57, 39, 187, 147, 165, 70, 201, 223, 219, 165, 226, 41, 74, 191, 220, 122, 251, 252, 232, 146, 76, 204, 218, 161, 183, 130, 134, 118, 117, 79, 19, 158, 28, 238, 193, 77, 142, 101, 29, 135, 205, 102, 106, 64], [114, 190, 21, 225, 19, 235, 58, 125, 26, 185, 158, 154, 31, 84, 251, 114, 39, 9, 164, 77, 235, 170, 204, 55, 233, 216, 196, 84, 217, 19, 166, 157, 222, 250, 101, 185, 224, 79, 10, 49, 63, 199, 14, 78, 181, 214, 13, 125, 142, 176, 99, 7, 212, 173, 232, 147, 65, 28, 144, 4, 194, 45, 33, 85, 53, 127, 35, 183, 141, 176, 253, 6, 238, 45, 103, 45, 176, 208, 7, 147, 243, 121, 66, 118, 161, 156, 244, 156, 106, 6, 120, 70, 171, 221, 119, 97, 215, 131, 100, 228, 151, 50, 218, 238, 37, 57, 9, 75, 144, 123, 112, 146, 15, 19, 167, 240, 3, 227, 116, 200, 111, 21, 42, 102, 135, 137, 37, 209, 110, 249, 212, 58, 23, 230, 201, 104, 240, 108, 182, 191, 1, 232, 194, 247, 83, 26, 112, 181, 234, 174, 149, 87, 250, 31, 251, 134, 166, 18, 192, 179, 144, 27, 200, 0, 80, 61, 237, 21, 199, 79, 244, 170, 47, 107, 187, 56, 241, 178, 103, 59, 138, 146, 163, 26, 177, 144, 2, 248, 189, 199, 232, 9, 20, 147, 2, 126, 233, 89, 125, 93], [207, 172, 168, 179, 71, 254, 37, 15, 154, 64, 79, 66, 31, 126, 154, 87, 243, 23, 180, 251, 25, 137, 166, 191, 220, 39, 172, 167, 7, 132, 20, 53, 157, 63, 48, 213, 119, 87, 104, 36, 112, 181, 240, 199, 120, 198, 202, 184, 166, 53, 229, 221, 157, 95, 130, 154, 113, 176, 135, 13, 132, 185, 73, 212, 101, 64, 29, 39, 248, 98, 133, 146, 107, 59, 243, 232, 6, 137, 215, 117, 106, 72, 24, 133, 109, 203, 73, 253, 3, 12, 83, 95, 171, 98, 190, 116, 245, 127, 209, 39, 101, 165, 107, 179, 13, 216, 79, 176, 240, 154, 180, 73, 91, 37, 92, 201, 116, 80, 91, 224, 91, 27, 112, 179, 54, 4, 2, 194, 200, 80, 139, 126, 15, 130, 107, 33, 228, 50, 139, 130, 196, 175, 152, 197, 105, 83, 66, 175, 189, 125, 157, 160, 75, 165, 219, 171, 164, 228, 173, 134, 14, 174, 250, 34, 99, 227, 69, 246, 131, 110, 46, 143, 201, 246, 254, 102, 215, 38, 219, 130, 240, 67, 156, 67, 24, 250, 232, 242, 63, 139, 24, 77, 63, 177, 33, 142, 110, 79, 60, 145, 195, 122, 201, 181, 47, 171, 235, 71, 227, 224, 242, 60, 31, 14, 92, 37, 148, 195, 206, 135, 123, 231, 23, 225, 147, 39, 184, 34, 128, 144, 117, 19, 151, 96, 89, 244, 109, 35, 182, 246, 202, 77, 129, 249, 107, 65, 22, 232, 123, 30, 121, 84, 126, 86, 172, 94, 220, 32, 211, 38, 81, 34, 81, 227, 165], [5, 163, 96, 148, 97, 66, 90, 6, 75, 206, 123, 1, 11, 161, 242, 156, 44, 221, 8, 115, 127, 59, 130, 0, 201, 253, 64, 102, 168, 200, 74, 70, 55, 1, 238, 224, 48, 233, 15, 194, 123, 108, 1, 218, 230, 213, 18, 49, 232, 255, 207, 66, 203, 211, 88, 73, 25, 12, 150, 83, 31, 73, 195, 62, 99, 50, 14, 232, 174, 116, 191, 211, 160, 99, 47, 107, 223, 227, 214, 42, 163, 29, 8, 20, 179, 168, 85, 193, 57, 5, 173, 17, 70, 61, 45, 20, 13, 12, 217, 184, 180, 7, 144, 27, 110, 119, 167, 17, 234, 93, 37, 174, 207, 76, 252, 17, 125, 204, 69, 4, 196, 132, 236, 72, 142, 80, 133, 186, 237, 144, 164, 128, 207, 168, 239, 142, 83, 101, 181, 18, 66, 204, 150, 88, 66, 155, 109, 63, 179, 208, 181, 197, 105, 184, 110, 251, 33, 112, 230, 173, 116, 90, 30, 191, 238, 166, 101, 27, 229, 104, 131, 5, 125, 131, 71, 112, 148, 137, 117, 124, 188, 86, 231, 85, 253, 14], [124, 93, 69, 246, 57, 188, 251, 214, 103, 213, 211, 159, 197, 229, 168, 79, 33, 158, 152, 214, 173, 224, 175, 132, 194, 222, 186, 138, 131, 82, 28, 242, 33, 210, 114, 31, 51, 6, 110, 40, 75, 112, 223, 205, 174, 83, 137, 11, 89, 227, 133, 139, 154, 25, 1, 31, 100, 250, 225, 23, 145, 51, 168, 135, 84, 253, 42, 57, 38, 44, 232, 50, 40, 59, 149, 106, 226, 156, 142, 132, 38, 241, 43, 115, 218, 44, 52, 101, 4, 29], [157, 58, 162, 43, 250, 27, 241, 44, 3, 237, 136, 137, 98, 93, 71, 133, 84, 32, 211, 53, 166, 200, 85, 104, 233, 63, 95, 23, 50, 41, 225, 252, 70, 139, 155, 64, 14, 173, 100, 204, 87, 200, 219, 216, 3, 44, 166, 22, 56, 200, 50, 206, 144, 82, 177, 200, 106, 204, 189, 245, 1, 243, 197, 28, 67, 214, 140, 102, 111, 15, 119, 133, 148, 59, 136, 178, 77, 148, 254, 103, 145, 235, 232, 152, 210, 64, 101, 54, 28, 236, 217, 170, 155, 75, 178, 39, 31, 193, 48, 90, 240, 148, 137, 129, 58, 50, 15, 114, 160, 73, 161, 156, 112, 49, 145, 92, 114, 185, 127, 243, 243, 107, 216, 29, 18, 96, 210, 168, 156, 75, 98, 71, 209, 147, 128, 254, 115, 31, 37, 39, 129, 167, 49, 253, 178, 246, 84, 237, 92, 237, 41, 172, 82, 87, 252, 81, 94, 138, 158, 154, 201, 18, 244, 35, 89, 131, 201, 218, 102, 87, 122, 200, 25, 76, 36, 63, 228, 218, 182, 13, 242, 193, 197, 10, 60, 53, 155, 187, 165, 128, 113, 116, 50, 59, 204, 229, 107, 64, 162, 127, 181, 93, 203, 171, 160, 61, 169, 218, 100, 81, 13, 221, 13, 76, 225, 225, 97, 237, 140, 4, 207, 57, 114, 233, 125, 147, 113, 94, 66, 46, 187, 236, 223, 197, 67, 112, 90, 231, 180, 243, 44, 169, 225, 164, 94, 113, 24, 13, 103, 50, 116, 179, 127, 42, 121, 226, 63, 27, 195, 246, 149, 149, 161, 179, 85, 216, 7, 245, 176, 204, 69, 20, 145, 44, 198, 54, 150, 55, 225, 49, 2, 2, 41, 22, 185, 216], [146, 12, 192, 33, 254, 175, 33, 139, 237, 71, 231, 24, 6, 251, 174, 89, 243, 69, 74, 37, 10, 115, 228, 18, 252, 244, 195, 120, 102, 219, 131, 186, 191, 209, 189, 29, 83, 44, 202, 48, 205, 111, 53, 72, 75, 240, 86, 240, 137, 147, 16, 22, 208, 240, 204, 232, 128, 55, 147, 235, 220, 54, 136, 251, 2, 27, 111, 142, 152, 238, 168, 121, 141, 225, 247, 238, 72, 110, 121, 250, 121, 157, 16, 114, 118, 12, 232, 223, 25, 83, 128, 229, 16, 161, 109, 100, 107, 118, 144, 153, 36, 134, 28, 126, 231, 152, 131, 230, 110, 113, 120, 71, 164, 16, 232, 187, 88, 205, 233, 76, 120, 182, 134, 189, 63], [91, 188, 31, 15, 5, 90, 52, 194, 232, 160, 89, 37, 90, 51, 69, 167, 37, 32, 5, 187, 201, 247, 93, 79, 142, 116, 145, 42, 18, 2, 157, 241, 194, 153, 106, 20, 3, 205, 24, 134, 0, 187, 162, 197, 200, 35, 237, 253, 213, 150, 163, 144, 223, 196, 161, 208, 92, 155, 49, 28, 132, 104, 237, 76, 125, 138, 18, 224, 190, 38, 206, 45, 151, 17, 194, 90, 152, 142, 67, 218, 125, 30, 225, 43, 188, 119, 163, 9, 223, 203, 6, 68, 234, 123, 96, 21, 89, 225, 197, 35, 251, 29, 217, 89, 89, 72, 89, 83, 108, 166, 85, 107, 13, 209, 39, 112, 78, 36, 24, 102, 186, 111, 54, 101, 59, 9, 219, 213, 118, 78, 193, 82, 127, 118, 175, 112, 98, 248, 207, 93, 5, 77, 214, 215, 211, 181, 200, 102, 159, 253, 27, 207, 77, 86, 55, 63, 85, 94, 106, 24, 151, 116, 59, 189, 192, 136, 84, 143, 78, 127, 48, 88, 168, 48, 188, 234, 117, 203, 179, 169, 213, 40, 101, 172, 170, 26, 13, 1, 0, 223, 104, 86, 112, 158, 115, 8, 183, 238, 228, 14, 81, 238, 90, 217, 161, 237, 29, 35, 73, 46, 164, 137, 8, 254, 30, 187, 92, 167, 147, 66, 220, 9, 69, 215, 20, 128, 120, 191, 134, 198, 42, 25, 32, 33, 65, 18, 136, 164, 77, 25, 208, 204, 235], [190, 198, 186, 117, 185, 201, 155, 7, 190, 146, 177, 11, 144, 9, 135, 233, 15, 158, 185, 72, 26, 95, 74, 204, 111, 141, 139, 208, 29, 150, 26, 87, 183, 191, 190, 82, 202, 57, 37, 94, 243, 63, 21, 4, 223, 111, 147, 57, 227, 91, 195, 213, 249, 120, 187, 10, 11, 252, 51, 131, 85, 152, 54, 37, 216, 203, 186, 152, 142, 161, 61, 177, 140, 238, 154, 19, 49, 199, 9, 170, 172, 224, 202, 120, 159, 37, 55, 45, 191, 61, 193, 138, 51, 207, 215, 119, 194, 174, 68, 68, 103, 101, 203, 136, 163, 246, 251, 73, 81, 142, 19, 230, 57, 84, 168, 36, 122, 209, 133, 76, 53, 38, 45, 179, 98, 181, 217, 179, 39, 201, 153, 102, 126, 12, 192, 118, 111, 82, 98, 189, 25, 44, 220, 166, 69, 147, 145, 200, 216, 177, 133, 234, 86, 154, 239, 3, 193, 31, 201, 8, 232, 52, 112, 74, 39, 239, 90, 180, 55, 94, 220, 92, 49, 149, 111, 178, 251, 117, 160, 133, 43, 168, 85, 235, 213, 223, 133, 88, 144, 126, 181, 25, 101, 220, 35, 252, 73, 83, 183, 248, 243, 26, 133, 144, 119, 249, 25, 236, 244, 54, 200, 15, 14, 51, 19, 224, 202, 12, 4, 51, 11, 32, 198, 185, 90, 182, 80, 253, 96, 68, 217, 42, 26, 217, 95, 177, 29, 10, 79, 229, 20, 91, 166, 214, 4, 183, 163, 63, 55, 10, 236, 131, 206, 194, 11, 47, 8, 82, 114, 147, 146, 34, 253, 109, 44, 152, 129, 13, 19, 99, 82, 225, 178, 249, 145, 136, 248, 215, 44, 60, 5, 214, 158, 67, 62, 241, 5, 213, 4, 72, 160, 127, 17, 216, 198, 77, 45, 70, 187, 105, 160, 61, 83, 4, 184, 157, 182, 230, 146, 183, 152, 229], [173, 201, 37, 164, 101, 159, 158, 29, 16, 87, 88, 130, 39, 138, 148, 156], [7, 224, 165, 13, 66, 5, 141, 5, 124, 62, 156, 244, 5, 53, 128, 33, 81, 101, 4, 238, 185, 224, 157, 76, 251, 150, 180, 96, 6, 122, 173, 221, 11, 45, 124, 66, 1, 167, 250, 151, 46, 63, 19, 61, 200, 60, 31, 80, 53, 146, 88, 119, 57, 62, 139, 191, 229, 169, 139, 231, 17, 119, 82, 124, 7, 205, 29, 107, 78, 155, 44, 197, 1, 37, 50, 136, 47, 17, 231, 118, 237, 146, 156, 99, 106, 178, 27, 221, 49, 50, 99, 164, 208, 230, 133, 178, 201, 93, 105, 101, 188, 120, 116, 31, 254, 132, 134, 186, 215, 65, 4, 150, 125, 24, 184, 138, 225, 27, 106, 190, 61, 183, 186, 221, 49, 230, 182, 205, 119, 64, 90, 188, 163, 6, 117, 138, 143, 235, 79, 179, 234, 202, 56, 161, 172, 92, 138, 66, 115, 148, 166, 45, 127, 190, 48, 7, 88, 20, 23, 97], [190, 72, 168, 192, 252, 187, 160, 172, 249, 236, 172, 222, 140, 34, 249, 175, 138, 59, 55, 50, 105, 219, 245, 104, 41, 110, 138, 14, 107, 241, 227, 35, 97, 44, 247, 55, 225, 251, 213, 198, 137, 230, 109, 93, 38, 248, 79, 70, 4, 230, 188, 96, 104, 234, 142, 160, 156, 20, 97, 232, 52, 96, 156, 61, 144, 100, 74, 59, 152, 124, 83, 6, 167, 89, 93, 171, 211, 14, 94, 132, 131, 123, 218, 203, 109, 166, 36, 126, 117, 252, 221, 21, 224, 228, 233, 247, 85, 64, 158, 135, 239, 92, 244, 80, 84, 162, 3, 159, 238, 95, 54, 70, 186, 130, 194, 170, 143, 64, 55, 11, 149, 19, 50, 14, 245], [187, 205, 34, 160, 168, 19, 58, 131, 252, 74, 5, 250, 58, 114, 153, 146, 206, 197, 30, 111, 239, 95, 210, 164, 95, 109, 60, 187, 180, 174, 85, 147, 86, 21, 77, 116, 254, 105, 201, 13, 201, 40, 32, 39, 58, 224, 70, 7, 62, 201, 115, 20, 218, 193, 146, 145, 217, 164, 43, 241, 37, 246, 203, 217, 22, 88, 248, 83, 144, 210, 184, 172, 96, 144, 144, 85, 14, 253, 182, 199, 205, 150, 77, 91, 138, 160, 4, 231, 223, 207, 152, 101, 161, 113, 140, 23, 54, 94, 3, 235, 132, 171, 42, 230, 17, 132, 108, 254, 174, 113, 178, 217, 238, 174, 15, 101, 17, 43, 157, 158, 55, 45, 139, 223, 130, 176, 27, 34, 250, 121, 30, 109, 221, 62, 43, 232, 117, 1, 164, 204, 65, 175, 226, 241, 190, 78, 128, 125, 24, 222, 150, 62, 31, 65, 46, 242, 62, 138, 160, 250, 165, 105, 166, 114, 10, 181, 47, 235, 67, 163, 33, 45, 157, 61, 217, 190, 66, 178, 180, 98, 15, 90, 252, 140, 107, 13, 191, 22, 122, 11, 17, 89, 82, 11, 163, 228, 192, 95, 65, 231, 162, 139, 126, 33, 191, 85, 123, 22, 145, 220, 37, 27, 136, 207, 132, 180, 216, 251, 83, 175, 29, 35, 219, 52, 242, 99, 94, 120, 210, 18, 172, 191, 48, 202, 53, 30, 172, 142, 67, 145, 165, 21, 144, 58, 95, 125, 26, 74, 66, 140, 49, 10, 68, 247, 67, 230, 220, 156, 9, 154, 94, 130, 117, 54, 238, 49, 71, 36, 67, 121, 177, 71, 204, 22, 130, 45, 206, 111, 146, 4, 64, 16, 167, 206, 189, 90, 198, 199, 4, 59, 252, 136, 95, 109, 197, 248, 160, 179, 189, 132, 152, 202, 119, 164, 168, 60, 150, 201, 35, 2, 32, 229, 211, 92, 135, 120, 126, 61, 5, 55, 81, 69, 3, 47, 119, 221, 230, 149, 175, 44, 163, 208, 239, 227, 121, 192, 99, 249, 79, 70, 119, 192, 148, 240, 144, 28, 203, 149, 65, 239, 43, 132], [134, 249, 125, 159, 165, 113, 63, 95, 175, 229, 210, 108, 140, 191, 64, 54, 80, 120, 119, 46, 175, 209, 165, 97, 173, 142, 65, 251, 160, 219, 118, 188, 128, 14, 42, 210, 83, 147, 147, 229, 53, 237, 183, 0, 118, 82, 193, 10, 49, 96], [206, 180, 254, 161, 94, 1, 61, 192, 213, 232, 13, 217, 93, 52, 49, 120, 95, 146, 249, 182, 184, 63, 250, 62, 18, 26, 238, 205, 66, 147, 96], [158, 55, 113, 127, 192, 38, 46, 126, 182, 159, 62, 172, 168, 24, 123, 132, 48, 36, 212, 24, 75, 36, 246, 9, 43, 163, 28, 231, 137, 240, 169, 12, 9, 148, 227, 59, 40, 152, 51, 254, 68, 126, 112, 212, 122, 164, 23, 127, 177, 207, 149, 216, 32, 116, 113, 243, 32, 128, 98, 210, 172, 11, 47, 121, 250, 176, 226, 229, 105, 37, 206, 75, 130, 115, 150, 121, 80, 222, 47, 209, 180, 85, 80, 23, 114, 56, 138, 242, 71, 11, 94, 91, 115, 44, 67, 159, 174, 65, 127, 230, 24, 128, 233, 87, 148, 6, 99, 225, 242, 1, 49, 81, 11, 111, 2, 77, 19, 216, 163, 69, 152, 82, 144, 156, 194, 235, 99, 186, 175, 91, 41, 76, 164, 196, 221, 237, 117, 253, 91, 154, 25, 195, 243, 177, 164, 110, 61, 187, 178, 98, 199, 83, 232, 169, 116, 45, 155, 171, 202, 104, 117, 248, 119, 142, 86, 24, 39, 72, 217, 49, 196, 237, 50, 28, 217, 180, 152, 60, 49, 146, 205, 205, 12, 121, 131, 50, 60, 106, 220, 100, 42, 124, 239, 182, 227, 151, 165, 174, 243, 40, 238, 151, 161, 175, 10, 243, 222, 211, 22, 91, 83, 41, 140, 17, 34, 89, 96, 89, 142, 238, 38, 144, 111, 32, 27, 111, 22, 61, 107, 56, 94, 97, 229, 40, 84, 153, 18, 30, 97, 17, 68, 142, 157, 92, 180, 156, 103, 195, 195, 231, 158, 24, 179, 155, 143, 215, 57, 232, 70, 226, 197, 70, 4, 248, 182, 142, 244, 198, 210, 205, 142, 17, 153, 106, 146, 7, 74, 115, 90, 28, 156, 199, 172, 64, 25], [224, 34, 215, 238, 24, 15, 108, 46, 98, 115, 22, 103, 86, 136, 80, 69, 48, 249, 19, 193, 87, 208, 87, 85, 162, 16, 57, 192, 80, 193, 160, 79, 156, 123, 43, 26, 175, 216, 211, 141, 190, 109, 30, 116, 124, 240, 200, 133, 178, 173, 247, 224, 201, 132, 223, 80, 188, 225, 2, 188, 126, 124, 22, 201, 28, 144, 237, 31, 227, 172, 138, 197, 86, 107, 27, 68, 163, 59, 204, 159, 223, 20, 18, 22, 255, 194, 133, 36, 240, 26, 63, 36, 201, 69, 147, 198, 184, 36, 248, 5, 2, 61, 247, 173, 177, 102, 36, 243, 216, 163, 188, 136, 229, 2, 203, 78, 144, 253, 250, 122, 208, 94, 181, 155, 123, 200, 252, 126, 123, 207, 29, 113, 27, 210, 192, 238, 180, 19, 191, 191, 240, 165, 174, 25, 152, 8, 78, 34, 253, 52, 23, 182, 120, 38, 194, 177, 17, 63, 153, 100, 28, 118, 41, 217, 56, 62, 215, 64, 134, 192, 11, 201, 32, 66, 144, 138, 169, 31, 122, 235, 65, 85, 206, 10, 130, 206, 249, 69, 43, 190, 207, 82, 146, 177, 89, 215, 147, 141, 158, 10, 90, 104, 196, 39, 95, 182, 63, 195, 228, 74, 142, 235, 235, 66, 72, 24, 233, 107, 192, 4, 32, 218, 243, 196, 246, 100, 226, 31, 194, 132, 111, 173, 221, 221, 40, 54, 201, 250, 106, 33, 100, 122, 155, 184, 13, 211, 40, 40, 191, 210, 126, 132, 53, 129, 79, 91], [123, 44, 181, 140, 127, 246, 194, 224, 6, 173, 208, 141, 199, 214, 224, 197, 107, 60, 139, 2, 72, 212, 85, 191, 97, 61, 182, 231, 217, 62, 166, 28, 250, 220, 237, 230, 22, 46, 250, 216, 237, 216, 68], [229, 195, 31, 234, 162, 33, 15, 250, 7, 194, 16, 104, 103, 124, 73, 225, 229, 159, 1, 202, 120, 129, 92, 71, 196, 43, 219, 109, 31, 67, 60, 162, 226, 199, 38, 168, 83, 16, 166, 178, 5, 115, 13, 33, 58, 167, 125, 218, 169], [124, 168, 169, 64, 89, 78, 220, 44, 94, 228, 12, 171, 146, 113, 157, 76, 76, 128, 25, 235, 171, 163, 36, 235, 35, 154, 211, 28, 251, 153, 161, 90, 9, 192, 139, 111, 58, 219, 240, 71, 105, 131, 51, 202, 133, 7, 117, 222, 239, 122, 180, 33, 72, 34, 176, 37, 154, 157, 59, 207, 33, 71, 229, 198, 39, 137, 164, 184, 60, 218, 219, 86, 147, 243, 131, 183, 82, 226, 97, 11, 147, 126, 128, 238, 103, 115, 104, 111, 79, 72, 109, 95, 78, 126, 204, 72, 77, 16, 22, 22, 171, 90, 73, 128, 127, 58, 18, 162, 124, 140, 197, 16, 166, 1, 151, 3, 228, 91, 83, 23, 226, 14, 7, 150, 254, 170, 233, 17, 113, 6, 207, 14, 111, 216, 186, 148, 72, 77, 202, 85, 10, 107, 17, 141, 202, 26, 176, 242, 39, 34, 103, 145, 243, 160, 52, 136, 243, 247, 88, 197, 93, 73, 127, 91, 208, 0, 154, 21, 205, 161, 29, 222, 33, 235, 32, 215, 236, 100, 118, 177, 65, 19, 246, 159, 34, 219, 136, 62, 217, 86, 19, 87, 43, 5, 56, 134, 48, 150, 43, 122, 105, 241, 103, 211, 49, 122, 115, 183, 37, 106, 181, 249, 215, 20, 14, 138, 182, 231, 83, 17, 248, 177, 75, 71, 7, 197, 170, 195, 55, 3, 130, 166, 146, 184, 162, 25, 166, 96, 94, 83, 213, 8, 52, 33, 246, 56, 218, 176, 216, 214, 106, 212, 229, 253, 86, 240, 181, 110, 57, 241, 177, 76, 197, 186, 108, 230, 90, 229, 230, 214, 11], [120, 240, 183, 214, 205, 6, 118, 244, 230, 198, 78, 247, 191, 70, 173, 182, 22, 255, 37, 15, 162, 42, 7, 113, 128, 193, 217, 243, 253, 230, 98, 30, 21, 33, 85, 112, 83, 223, 95, 147, 186, 197, 18, 138, 106, 38, 218, 90, 209, 107, 227, 134, 78, 16, 88, 247, 78, 114, 119, 1, 0, 68, 100, 237, 110, 181, 129, 37, 169, 37, 247, 160, 114, 24, 168, 185, 18, 246, 43, 124, 176, 43, 43, 43, 238, 226, 115, 23, 229, 109, 148, 0, 54, 131, 10, 114, 67, 245, 24, 205, 212, 166, 117, 124], [224, 151, 201, 10, 209, 119, 60, 15, 244, 17, 20, 249, 229, 209, 252, 88, 9, 144, 223, 9, 0, 106, 189, 112, 209, 194, 142, 243, 228, 52, 190, 17, 87, 158, 205, 134, 249, 27, 86, 216, 135, 186, 210, 232, 249, 62, 237, 25, 156, 146, 157, 73, 89, 25, 26, 208, 130, 118, 39, 104, 100, 155, 156, 102, 139, 32, 24, 250, 152, 58, 182, 96, 28, 231, 32, 54, 229, 90, 239, 135, 51, 115, 31, 82, 55, 195, 51, 45, 112, 53, 35, 216, 207, 49, 98, 182, 27, 95, 251, 223, 189, 112, 81, 50, 173, 58, 155, 54, 201, 176, 109, 238, 46, 147, 201, 128, 120, 161, 224, 121, 220, 240, 11, 173, 98, 163, 83, 139, 76, 71, 178, 29, 96, 81, 27, 69, 12, 244, 185, 61, 233, 77, 165, 158, 169, 75, 165, 58, 219, 36, 142, 210, 177, 78, 86, 216, 66, 215, 64, 222, 248, 64, 95, 114, 214, 163, 112, 83, 64, 54, 55, 152, 209, 200, 91, 101, 153, 164, 99, 241, 32, 82, 104, 114, 109, 249, 51, 125, 24, 160, 67, 14, 182, 171, 163, 60, 148, 194, 152, 187, 219, 91, 235, 97, 132, 122, 13, 87, 142, 66, 112, 251, 152, 4, 203, 9, 89, 25, 171, 157, 74, 103, 215, 85, 83, 66, 221, 62, 16, 68, 61, 97, 21, 134, 92, 30, 233, 44, 240, 38, 124, 188, 134, 57, 71, 180, 181, 89, 114, 193, 225, 213, 130, 59, 66, 214, 127, 91, 177, 206, 72, 25, 25, 192, 59, 61, 80, 103, 82, 145, 56, 133, 134, 23, 51, 245, 200, 156, 254, 110, 155, 180, 252, 52, 169, 48, 168, 3, 168], [31, 211, 183, 37, 184, 172, 222, 130, 191, 34, 42, 242, 110, 11, 224, 105, 213, 121, 16, 64, 126, 50, 206, 115, 14, 200, 85, 27, 46, 220, 37, 36, 82, 239, 127, 111, 63, 81, 109, 21, 153, 109, 38, 153, 207, 30, 90, 238, 184, 111, 52, 2, 127, 219, 101, 223, 225, 237, 205, 46, 205, 196, 241, 204, 108, 252, 92, 155, 92, 84, 49, 135, 184, 17, 252, 16, 155, 100, 183, 26, 202, 163], [42, 81, 137, 171, 21, 25, 118, 26, 31, 29, 176, 254, 217, 61, 143, 20, 156, 110, 86, 130, 136, 49, 141, 150, 145, 37, 208, 37, 236, 16, 174, 177, 24, 74, 229, 34, 58, 242, 223, 141, 17, 97, 217, 243, 212, 45, 9, 150, 142, 95, 188, 112, 230, 26, 8, 93, 79, 60, 120, 161, 64, 117, 120, 212, 205, 168, 5, 164, 131, 201, 42, 174, 84, 140, 14, 95, 29, 124, 254, 129, 178, 203, 1, 80, 224, 250, 176, 235, 254, 49, 186, 219, 124, 196, 207, 8, 162, 48], [228, 191, 144, 151, 58, 78, 136, 194, 7, 0, 152, 90, 10, 247, 62, 242, 218, 98, 68, 11, 219, 254, 145, 250, 205, 72, 164, 129, 43, 126, 11, 192, 125, 48, 188, 66, 45, 1, 18, 215, 55, 205, 204, 26, 175, 39, 211, 185, 204, 139, 248, 203, 123, 242, 180, 64, 29, 86, 103, 102, 93, 0, 144, 207, 137, 242, 44, 130, 38, 56, 46, 230, 17, 14, 88, 226, 250, 234, 226, 157, 153, 47, 125, 16, 98, 92, 70, 236, 76, 176, 93, 137, 17, 49, 219, 129, 208, 148, 162, 208, 222, 50, 100, 131, 52, 235, 119, 226, 104, 167, 2, 181, 10, 74, 184, 237, 107, 159, 93, 245, 74, 209, 129, 168, 66, 66, 11, 58, 114, 169, 142, 98, 69, 86, 79, 92, 243, 186, 135, 230, 2, 244, 250, 158, 4, 17, 135, 98, 108, 229, 181, 164, 164, 149, 96, 185, 115, 18, 39, 189, 57, 52, 16, 67, 69, 21, 7, 80, 22, 104, 140, 27, 142, 25, 32, 228, 134, 157, 95, 174, 150, 109, 50, 202, 64, 138, 31, 177, 168, 113, 77, 133, 254, 171, 173, 139, 223, 27, 89, 195, 168, 115, 134, 23, 45, 59, 188, 113, 38, 110, 48, 134, 3, 138, 181, 33, 185, 29, 115, 107, 27, 109, 70, 34, 226, 127, 136, 195, 116, 41, 204, 242, 224, 137, 95, 181, 107, 120, 131, 219, 206, 87, 145, 213, 14, 198, 218, 32, 246, 233, 119, 25, 146, 207, 67, 137, 246, 232, 31, 48, 102, 2, 213, 169, 115, 248, 85, 26, 202, 19, 211, 207, 248, 212, 158, 223, 159, 144, 236, 222, 147, 212, 7, 70, 112, 199, 0, 60, 169, 219, 107, 224, 248, 128, 32, 219, 119, 225, 75, 115, 43, 180, 40, 196, 120, 64, 247, 2, 76, 94, 143, 226, 168, 128, 69, 52, 110, 18, 44, 109, 3, 179, 196, 29, 88, 63, 4, 183, 36, 181, 222, 51, 233, 17, 17, 180, 184, 158, 90, 77, 34, 141, 175], [61, 161, 18, 121, 215, 171, 81, 248, 3, 169, 127, 215, 237, 104, 219, 57, 220, 114, 208, 240, 31, 184, 89, 215, 87, 35, 78, 236, 150, 26, 26, 194, 217, 252, 194, 223, 213, 83, 141, 121, 179, 23, 126, 41, 55, 203, 33, 63, 59, 79, 119, 111, 108, 247, 181, 209, 30, 114, 219, 73, 33, 252, 105, 53, 219, 98, 75, 96, 10, 231, 78, 115, 67, 235, 162, 197, 194, 163, 188, 43, 42, 41, 69, 14, 208, 41, 90, 121, 151, 182, 211, 195, 103, 151, 41, 37, 117, 7, 170, 17, 193, 182, 28, 41, 253, 46, 50, 194, 38, 75, 102, 236, 42, 113, 2, 40, 223, 178, 108, 106, 205, 214, 220, 250, 68, 15, 34, 223, 16, 230, 46, 72, 184, 163, 73, 209, 242, 9, 180, 195, 133, 233, 22, 170, 145, 221, 203, 65, 90, 152, 247, 34, 10, 207, 69, 48, 67, 57, 158, 65, 161, 132, 12, 173], [149, 100, 127, 167, 123, 73, 1, 141, 208, 161, 131, 91, 70, 245, 107, 73, 80, 169, 181, 104, 146, 131, 57, 32, 71, 234, 177, 253, 76, 69, 210, 60, 251, 237, 66, 55, 176, 168, 160, 224, 171, 183, 99, 49, 125, 180, 7, 29, 117, 249, 201, 237, 246, 187, 137, 245, 57, 12, 226, 209, 2, 141, 110, 25, 70, 169, 175, 82, 86, 177, 243, 98, 229, 251, 180, 113, 222, 64, 67, 107, 97, 148, 175, 143, 192, 24, 202, 198, 128, 115, 72, 158, 158, 177, 150, 153, 26, 5, 50, 113, 110, 104, 8, 95, 20, 254, 20, 156, 89, 217, 103, 126, 173, 52, 232, 209, 207, 40, 39, 134, 24, 8, 134, 206, 164, 59, 48, 94, 233, 72, 246, 28, 64, 250, 208, 25, 209, 67, 198, 145, 34, 74, 17, 26, 157, 81, 75, 3, 63, 68, 30, 209, 219, 184, 237, 99, 135, 26, 125, 167, 133, 236, 155, 188, 98, 92, 106, 238, 194, 117, 137, 157, 49, 35, 126, 154, 0, 40, 232, 211, 164, 44, 231, 236, 38, 132, 35, 9, 155, 185, 112, 217, 51, 51, 193, 143, 159, 5, 215, 99, 159, 27, 199, 51, 186, 74, 200, 119, 78, 10, 55, 255, 215, 210, 201, 103, 76, 64, 114, 39, 49, 112, 213, 116, 173, 44, 60, 211, 38, 238, 108, 39, 76, 201, 5, 209, 234, 133, 197, 54, 90, 49, 190, 3, 70, 130, 215, 240, 66, 250, 83, 31, 98, 212, 99, 246, 74, 226, 56, 24, 188, 44, 135, 175, 216, 46, 190, 161, 50, 22, 2, 114, 45, 223, 62, 178, 251, 3, 110, 46, 195, 81, 126, 120, 27, 53, 238, 228, 13, 27, 20, 116, 107, 102, 37, 20, 186, 86, 197, 53, 134, 59, 21, 42, 217, 175, 20, 19, 129, 79, 180, 16, 169, 208, 47, 115, 91, 200, 108, 189, 177, 151, 247, 205, 226, 133, 234, 233, 203, 103, 50, 13, 206, 15, 107, 158, 79, 114], [95, 104, 226, 3, 40, 93, 24, 199, 219, 109, 106, 176, 213, 210, 154, 87, 237, 24, 226, 20, 202, 25, 216, 59, 247, 251, 48, 134, 200, 243, 92, 123, 110, 88, 50, 84, 99, 176, 64, 52, 1, 85, 109, 212, 7, 67, 173, 213, 47, 92, 127, 81, 227, 182, 185, 109, 47, 164, 80, 127, 165, 76, 233, 188, 13, 192, 133, 92, 91, 69, 125, 152, 5, 88, 112, 223, 166, 163, 156, 236, 125, 157, 159, 224, 123, 205, 231, 193, 174, 186, 179, 128, 31, 207, 124, 157, 60, 24, 91, 121, 230, 172, 76, 139, 194, 114, 193, 179, 217, 233, 158, 63, 138, 236, 204, 150, 229, 19, 176, 204, 78, 178, 158, 26, 164, 127, 227, 94, 93, 71, 154, 36, 142, 30, 137, 105, 85, 21, 159, 241, 130, 225, 72, 80, 90, 252, 189, 77, 125, 103, 233, 4, 197, 60, 84, 248, 253, 163, 142, 239, 233, 87, 23, 116, 153, 52, 17, 168, 26, 181, 226, 51, 238, 189, 191, 236, 197, 89, 71, 39, 133, 4, 179, 153, 42, 178, 14, 100, 147, 204, 29, 29, 212, 9, 124, 35, 58, 5, 8, 150, 113, 120, 83, 73, 174, 2, 126, 39, 253, 167, 196, 112, 108, 192, 132, 137, 4, 119, 112, 130, 158, 113, 187, 105, 174, 189, 70, 101, 79, 80, 63, 67, 109, 52, 131, 145, 65, 74, 100, 176, 247, 223, 120, 178, 148, 15, 9, 17, 114, 205, 64, 118, 175, 206, 134, 8, 164, 165, 58, 0, 83, 219, 14, 228, 236, 128, 76, 154, 89, 183, 190, 32, 12, 28, 239, 28, 153, 49, 107, 242, 88, 38, 218, 210, 101, 222, 65, 106, 234, 187, 179, 250, 210, 22, 95, 251, 113, 93, 229, 190, 14, 151, 16, 183, 79, 99, 112, 167, 146, 229, 25, 194, 21, 129, 82, 122, 19, 151, 150, 155, 16, 17, 77, 212, 228, 171, 73, 238, 205, 207, 229, 232, 139, 48, 100, 252, 68, 9], [247, 192, 245, 143, 24, 163, 150, 38, 74, 184, 56, 78, 253, 170, 233, 163, 179, 100, 254, 227, 8, 42, 93, 54, 198, 169, 149, 69, 63, 14, 130, 150, 108, 53, 28, 194, 125, 50, 53, 120, 216, 108, 42, 193, 80, 227, 177, 101, 207, 140, 198, 94, 34, 196, 18, 98, 254, 97, 150, 16, 86, 188, 192, 118, 114, 245, 138, 76, 137, 123, 105, 208, 46, 92, 28, 133, 155, 72, 82, 58, 141, 97, 5, 71, 87, 137, 52, 172, 31, 243, 26, 48, 148, 72, 54, 221, 149, 55, 154, 146, 175, 202, 54, 132, 106, 172, 193, 252, 121, 14, 201, 104, 165, 0, 145, 152, 160, 204, 109, 118, 248, 124, 103, 44, 88, 34, 253, 19, 165, 58, 3, 205, 187, 10, 182, 85, 14, 128, 228, 71, 153, 184, 173, 90, 51, 229, 235, 74, 244, 152, 216, 98, 95, 12, 171, 44, 197, 220, 131, 42, 229, 78, 176, 44, 212, 189, 217, 207, 6, 38, 230, 255, 195, 224, 122, 190, 89, 117, 208, 46, 53, 21, 206, 50, 3, 174, 207, 20, 104, 11, 107, 47, 218, 4, 88, 200, 9, 10], [95, 143, 59, 235, 26, 78, 255, 14, 212, 18, 170, 74, 192, 254, 59, 103, 237, 107, 55, 77, 179, 154, 38, 58, 51, 122, 236, 65, 129, 69, 159, 175, 220, 21, 104, 249, 33, 214, 117, 99, 61, 232, 147, 54, 120, 78, 38, 28, 10, 186, 149, 21, 39, 132, 166, 186, 203, 34, 79, 144, 253, 122, 79, 17, 216, 255, 75, 27, 109, 34, 255, 83, 202, 233, 139, 100, 136, 196, 15, 1, 135, 19, 32, 121, 11, 239, 58, 72, 192, 202, 143, 66, 150, 4, 108, 79, 170, 166, 166, 136, 118, 110, 238, 107, 252, 13, 43, 78, 50, 205, 33, 95, 205, 193, 88, 101, 125, 21, 208, 210, 99, 80, 220, 184, 214, 207, 148, 176, 168, 213, 5, 20, 2, 55, 97, 212, 4, 88, 48, 95, 67, 73, 67, 114, 239, 136, 27, 124, 84, 176, 28, 158, 147, 148, 33, 8, 236, 183, 160, 253, 0, 55, 174, 11, 138, 253, 24, 177, 205, 123, 252, 47, 135, 191, 34, 225], [242, 140, 120, 225, 89, 177, 158, 22, 58, 78, 39, 209, 164, 203, 219, 27, 206, 41, 146, 80, 214, 136, 172, 165, 244, 28, 192, 151, 208, 231, 72, 152, 211, 158, 126, 178, 162, 179, 240, 200, 172, 221, 214, 67, 200, 140, 180, 34, 227, 13, 98, 44, 198, 63, 9, 180, 157, 67, 211, 219, 209, 69, 71, 118, 148, 224, 152, 63, 251, 157, 60, 77, 210, 79, 178, 56, 188, 73, 113, 116, 43, 194, 222, 106, 174, 154, 211, 235, 229, 201, 12, 4, 226, 164, 106, 222, 108, 125, 207, 175, 18, 12, 141, 59, 144, 233, 241, 37, 34, 212, 70, 159, 86, 239, 122, 155, 24, 238, 45, 199, 142, 112, 72, 157, 4, 193, 217, 134, 113, 79, 225, 235, 17, 53, 237, 118, 150, 245, 24, 227, 247, 224, 95, 29, 233, 194, 143, 49, 255, 59, 111, 154, 234, 168, 84, 204, 228, 213, 71, 158, 175, 201, 7, 1, 161, 36, 118, 160, 38, 22, 215, 76, 42, 209, 39, 133, 184, 184, 158, 125, 148, 26, 61, 129, 2, 142, 155, 158, 26, 224, 194, 164, 240, 41, 126, 125, 140, 112, 78, 129, 21, 249, 6, 155, 16, 128, 148, 235, 222, 17, 124, 121, 71, 196, 169, 113, 244, 164, 104, 1, 159, 54, 255, 252, 125, 33, 195, 104, 93, 192, 186, 125, 144, 166, 198, 91, 140, 69, 74, 173, 72, 79, 236, 217, 116, 43, 98, 114, 173, 192, 85, 136, 42, 129, 58, 22, 50, 94, 236, 195, 184, 98, 78, 202, 15, 219, 78, 127, 181, 29, 95, 127, 60, 49, 78, 170, 6, 206, 62, 143, 71, 35, 27, 1, 122, 98, 160, 185, 0, 40, 13, 177, 201, 252, 173, 251, 167, 41, 104, 6, 20, 223, 229, 245, 54, 22, 232, 251, 143, 48, 147, 77, 117, 217, 111, 20], [36, 81, 38, 20, 185, 212, 166, 187, 15, 111, 43, 15, 112, 60, 38, 186, 63, 6, 16, 116, 180, 196, 199, 133, 160, 144, 11, 118, 177, 159, 106, 159, 176, 78, 28, 142, 109, 107, 120, 0, 94, 231, 210, 161, 230, 61, 244, 75, 225, 222, 169, 188, 80, 26, 255, 178, 142, 19, 149, 255, 15, 238, 234, 4, 186, 28, 141, 86, 243, 247, 83, 246, 39, 25, 202, 93, 231, 231, 95, 76, 3, 212, 240, 165, 65, 159, 123, 133, 36, 103, 251, 23, 225, 14, 234, 238, 135, 135, 82, 125, 223, 118, 142, 242, 218, 251, 50, 45, 246, 176, 91, 197, 96, 224, 34, 253, 188, 11, 78, 53, 131, 16, 78, 172, 15, 8, 137, 181, 221, 237, 115, 253, 17, 155, 55, 81, 138, 174, 139, 105, 14, 212, 82, 207, 225, 237, 45, 240, 54, 251, 186, 131, 61, 135, 66, 105, 179, 29, 198, 183, 51, 61, 19, 63, 81, 123, 134, 91, 16, 242, 193, 100, 83, 10, 59, 140, 164, 204, 193, 173, 162, 238, 86, 217, 5, 182, 46, 191, 234, 1, 46, 177, 252, 220, 52, 108, 2, 185, 136, 77, 53, 5, 12, 110, 135, 114, 174, 71, 55, 72, 244, 173, 8, 237, 196, 216, 121, 78, 160, 17, 215, 59, 81, 43, 171, 9, 135, 228, 50, 254, 91, 116, 104, 218, 218, 15, 166, 228, 78, 146, 145, 1, 165, 78, 121, 41, 60, 201, 97, 236, 177, 75, 184, 222, 55, 166, 141, 167, 206, 100, 140, 222, 79, 16, 144, 218, 212, 82, 113, 200, 99, 125, 227, 59, 131, 164, 211, 143, 3, 5, 44, 32, 39, 20, 113, 104, 153, 63, 67, 181, 77, 75, 38, 204, 140, 200, 190, 212, 74, 169, 7, 164, 196, 16, 146, 207, 111, 87, 82, 132, 42, 109, 181, 112, 63, 65, 229, 246, 0, 133, 89, 93, 214, 245, 119, 208, 108, 190, 10, 246, 65, 95, 163, 134, 74, 64, 156, 90, 21, 146, 129, 21, 179, 183, 94, 165, 247, 64], [244, 46, 168, 107, 173, 1, 253, 245, 57, 212, 64, 104, 224, 76, 197, 24, 58, 76, 76, 196, 91, 111, 101, 64, 198, 182, 159, 223, 39, 95, 10, 152, 230, 200, 220, 72, 21, 191, 67, 66, 4, 166, 1, 144, 50, 17, 132, 52, 34, 170, 91, 7, 189, 190, 21, 113, 209, 61, 190, 150, 114, 202, 106, 204, 252, 24, 38, 58, 11, 1, 152, 61, 242, 76, 202, 216, 240, 230, 235, 171, 198], [54, 57, 136, 225, 246, 14, 139, 23, 105, 184, 46, 216, 4, 225, 143, 204, 125, 109, 103, 62, 112, 82, 200, 21, 222, 220, 3, 130, 31, 219, 255, 88, 206, 149, 139, 241, 219, 81, 96, 126, 76, 108, 222, 199, 94, 89, 156, 36, 96, 175, 81, 110, 206, 15, 45, 2, 155, 20, 4, 37, 244, 21, 124, 245, 181, 97, 215, 6, 149, 222, 44, 234, 215, 150, 77, 20, 139, 219, 53, 0, 254, 95, 163, 222, 113, 66, 214, 159, 97, 181, 96, 142, 29, 85, 44, 68, 176, 179, 34, 99, 200, 27, 93, 59, 26, 116, 41, 65, 133, 32, 206, 221, 90, 171, 118, 197, 96, 13, 45, 34, 135, 26, 39, 125, 124, 177, 236, 112, 68, 149, 21, 235, 59, 31, 200, 97, 213, 231, 114, 15, 102, 242, 97, 248, 250, 42, 147, 180, 87, 197, 108, 213, 120, 115, 196, 163, 39, 72, 214, 10, 5, 51, 252, 113, 230, 54, 189, 233, 238, 150, 93, 91, 75, 22, 217, 108, 1, 189, 216, 185, 14, 108, 77, 172, 61, 220, 140, 54, 73, 128, 174, 172, 57, 4, 208, 231, 134, 152, 225, 128, 197, 85, 30, 216, 252, 173, 177, 35, 253, 252, 22, 16, 11, 216, 227, 86, 204, 117, 7, 183, 41, 23, 240, 122, 50, 197, 174, 194, 218, 241, 145, 184, 212, 215, 220, 169, 91, 4, 137, 45, 190, 76, 125, 72, 8, 15, 228, 192, 98, 41, 251, 200, 245, 213, 168, 157, 77, 183, 156, 45, 140, 210, 202, 207, 8, 200, 203, 169, 158, 25, 212, 53, 169, 7, 187, 68, 208, 87, 1, 198, 156, 79, 231, 62, 87, 201, 61, 172, 129, 152, 250, 120, 126, 191, 24, 109, 157, 127, 239, 231, 185, 240, 95, 227, 137, 147, 65, 85, 138, 187, 68, 75, 227, 144, 122, 65, 114, 27, 94, 213, 230, 55, 182, 9, 3, 35, 44, 101, 220, 232, 107, 215, 100, 119, 172, 6, 91, 253, 75, 202, 202, 167, 4, 171, 235, 96, 57, 150, 8, 211, 243, 96, 204, 245, 21, 126, 114, 136, 225, 12, 254, 58, 153, 109, 131, 246, 193, 238, 177], [17, 225, 24, 193, 152, 32, 175, 136, 218, 232, 127, 110, 12, 206, 239, 42, 3, 112, 77, 0, 126, 58, 12, 40, 31, 138, 227, 55, 207, 107, 195, 26, 46, 165, 50, 61, 97, 220, 25, 146, 103, 13, 192, 166, 172, 215, 141, 86, 14, 65, 156, 80, 168, 19, 36, 238, 127, 84, 143, 223, 4, 172, 32, 47, 104, 158, 16, 75, 248, 7, 249, 181, 8, 102, 30, 41, 126, 14, 162, 135, 194, 38, 59, 187, 99, 214, 42, 151, 227, 0, 47, 199, 47, 147, 57, 242, 113, 156, 104, 133, 112, 109, 68, 114, 127, 231, 253, 210, 104, 0, 246, 139, 143, 92, 149, 86, 112, 196, 229, 254, 58, 104, 59, 170, 218, 151, 239, 116, 221, 70, 18, 112, 193, 131, 37, 195, 77, 205, 24, 82, 155, 108, 207, 54, 23, 225, 83, 16, 184, 196, 199, 158, 8, 253, 241, 21, 98, 240, 210, 106, 3, 135, 249, 201, 54, 12, 38, 226, 224, 61, 0, 179, 238, 53, 192, 163, 40, 65, 78, 252, 239, 8, 237, 63, 209, 94, 112, 150, 17, 7, 223, 154, 199, 157, 171, 220, 253, 22, 45, 222, 39, 67, 161, 127, 150, 220, 100, 13, 63, 240, 38, 154, 179, 237, 207, 195, 238, 132, 168, 86], [157, 206, 100, 231, 171, 158, 252, 7, 184, 171, 234, 223, 207, 190, 72, 191, 138, 238, 164, 137, 123, 37, 194, 146, 85, 55, 161, 223, 23, 180, 77, 254, 136, 164, 141, 78, 38, 190, 114, 135, 147, 57, 211, 101, 197, 113, 209, 226, 114, 176, 35, 122, 34, 138, 5, 229, 220, 17, 122, 176, 93, 214, 44, 61, 168, 47, 180, 70, 61, 58, 53, 203, 63, 222, 169, 170, 219, 90, 174, 202, 1, 20, 21, 147, 181, 113, 186, 176, 154, 230, 97, 181, 122, 141, 206, 191, 93, 12, 168, 0, 75, 250, 180, 130, 117, 237, 158, 224, 255, 152, 66, 213, 135, 175, 213, 113, 160, 183, 214, 217, 219, 117, 49, 217, 14, 226, 132, 229, 9, 116, 85, 28, 171, 182, 30, 179, 2, 144, 138, 246, 75, 79, 228, 164, 19, 1, 86, 108, 154, 13, 75, 8, 8, 88, 213, 193, 16, 247, 182, 183, 255, 159, 44, 117, 219, 152, 63, 90, 59, 84, 169, 172, 197, 183, 101, 226, 210, 6, 67, 192, 159, 241, 80, 87, 142, 174, 213, 226, 103, 42, 110, 80, 122, 236, 2, 48, 241, 158, 150, 219, 191, 69, 125, 74, 223, 213, 216, 58, 161, 167, 238, 117, 122, 50, 230, 33, 204, 250, 67, 204, 112, 245, 167, 251, 250, 234, 104, 230, 157, 215, 219, 10, 43, 142, 103, 232, 248, 11, 76, 116, 242, 49, 69, 229, 229, 99, 115, 30, 129, 97, 172, 184, 208, 49, 241, 16, 167, 49, 26, 116, 211, 238, 106, 164, 34, 168, 116, 248, 14, 115, 93, 124, 57, 118, 178, 145, 156, 233, 39, 31, 171, 187, 138, 49, 167, 98, 87, 169, 138, 7, 109, 0, 134, 215, 110, 204, 43, 255, 213, 130, 116, 29, 176, 243, 148, 244, 47, 222, 84, 97, 73, 223, 44, 12, 154, 55, 105, 18, 133, 178, 4, 251, 47, 167, 0, 246, 159, 123, 240, 33, 255, 123, 233, 17, 88, 243, 199, 73, 145, 2, 252, 162, 137, 115, 209, 110, 36, 85, 139, 187, 236, 230, 185, 74, 211, 254], [84, 108, 214, 167, 75, 227, 110, 111, 34, 122, 17, 47, 236, 210, 174, 27, 59, 207, 96, 32, 124, 65, 139, 60, 168, 147, 70, 7, 58, 30, 190, 254, 21, 35, 105, 227, 40, 6, 47, 102, 16, 243, 89, 142, 103, 132, 133, 98, 252, 110, 137, 172, 249, 100, 84, 139, 184, 230, 163, 43, 137, 100, 80, 92, 241, 251, 169, 135, 18, 217, 251, 198, 95, 82, 54, 110, 7, 35, 55, 250, 138, 51, 69, 132, 129, 215, 37, 38, 52, 253, 41, 108, 92, 91, 148, 185, 238, 125, 182, 13, 93, 174, 74, 126, 202, 249, 125, 11, 86, 112, 191, 51, 174, 54, 199, 47, 122, 119, 64, 223, 215, 227, 173, 243, 1, 89, 104, 54, 183, 158, 155, 194, 253, 83, 69, 197, 166], [202, 185, 213, 177, 36, 160, 66, 45, 153, 172, 236, 13, 222, 148, 74, 1, 65, 64, 151, 214, 88, 143, 217, 251, 31, 161, 126, 193, 95, 147, 52, 86, 204, 170, 139, 251, 139, 25, 45, 84, 70, 149, 110, 240, 179, 183, 240, 221, 165, 246, 45, 182, 3, 137, 190, 200, 136, 34, 67, 114, 218, 203, 156, 25, 155, 160, 170, 238, 87, 234, 129, 91, 32, 172, 0, 70], [39, 112, 154, 122, 96, 240, 31, 142, 209, 183, 210, 158, 54, 252, 199, 190, 154, 187, 205, 207, 19, 253, 68], [148, 62, 123, 242, 37, 80, 137, 83, 38, 36, 120, 54, 70, 86, 110, 48, 186, 204, 133, 106, 236, 218, 211, 67, 135, 5, 141, 5, 42, 130, 237, 88, 131, 62, 111, 125, 7, 31, 241, 184, 196, 92, 66, 17, 12, 118, 49, 235, 114, 234, 52, 175, 18, 198, 88, 117, 180, 118, 228, 72, 68, 80, 124, 156, 45, 138, 21], [165, 77, 247, 226, 236, 3, 91, 166, 169, 133, 238, 144, 161, 143, 203, 204, 244, 211, 249, 81, 29, 253, 31, 199, 195, 173, 214, 235, 70, 228, 68, 116, 60, 197, 132, 74, 231, 101, 39, 12, 219, 251, 174, 142, 2, 66, 4, 116, 250, 33, 200, 207, 218, 105, 85, 244, 151, 143, 194, 170, 205, 201, 28, 94, 131, 193, 61, 78, 104, 225, 77, 80, 38, 72, 30, 153, 25, 107, 213, 29, 73, 38, 230, 141, 187, 244, 50, 81, 55, 142, 148, 181, 74, 219, 65, 88, 205, 87, 51, 253, 182, 84, 222, 67, 127, 32, 153, 166, 120, 157, 72, 222, 94, 52, 115, 88, 215, 46, 168, 192, 145, 176, 25, 154, 77, 153, 3, 140, 136, 125, 221, 44, 244, 48, 148, 23, 0, 100, 127, 236, 51, 96, 97, 192, 47, 175, 78, 125, 151, 71, 162, 222, 187, 40, 96, 114, 41, 88, 188, 2, 0, 179, 150, 130, 144, 107, 11, 235, 244, 63, 176, 39, 150, 24, 183, 252, 218, 201, 202, 112, 106, 175, 184, 62, 90, 201, 242, 88, 190, 87, 93, 77, 38, 74, 55, 181, 187, 94, 5, 128, 71, 144, 161, 179, 118, 56, 84, 229, 134, 52, 90, 17, 199, 46, 59, 163, 185, 213, 67, 47, 223, 19, 177, 128, 46, 0, 107, 146, 98, 159, 177, 78, 115, 235, 112, 209, 123, 174, 196, 221, 100, 31, 56, 65, 39, 51, 76, 248, 254, 81, 89, 119, 40, 141, 32, 89, 177, 142, 87, 75, 251, 128, 114, 40, 67, 241, 218, 43, 62, 73, 185, 68, 98, 188], [198, 9, 194, 3, 104, 87, 45, 147, 92, 12, 184, 139, 129, 165, 57, 202, 147, 133, 183, 203, 38, 15, 24, 0, 89, 14, 4, 170, 162, 102, 23, 198, 179, 193, 49, 195, 207, 157, 207, 148, 13, 33, 152, 195, 117, 134, 96, 41, 182, 140, 36, 24, 117, 172, 14, 134, 248, 78, 213, 239, 158, 156, 227, 201, 76, 148, 49, 82, 173, 9, 135, 193, 2, 56, 89, 81, 177, 223, 232, 220, 165, 79, 100, 53, 189, 233, 164, 43, 199, 53, 224, 93, 160, 197, 143, 231, 148, 61, 226, 208, 152, 30, 112, 68, 105, 202, 108, 254, 218, 7, 149, 10, 211, 80, 92, 28, 198, 23, 85, 24, 189, 88, 28, 88, 41, 79, 159, 63, 5, 32, 13, 2, 96, 37, 184, 252, 87, 166, 64, 161, 57, 33], [60, 118, 86, 120, 82, 188, 213, 109, 202, 138, 89, 253, 50, 151, 24, 241, 123, 147, 33, 149, 78, 111, 82, 222, 137, 121, 207, 38, 145, 76, 250, 58, 72, 227, 227, 211, 65, 6, 179, 211, 32, 191, 23, 214, 85, 224, 32, 214, 13, 233, 8, 152, 238, 12, 119, 96, 255, 24, 232, 174, 70, 162, 186, 31, 47, 88, 156, 89, 158, 226, 242], [7, 141, 52, 123, 26, 225, 88, 215, 145, 117, 18, 39, 189, 190, 255, 119, 29, 38, 35, 181, 216, 140, 15, 173, 100, 114, 63, 231, 80, 177, 223, 134, 15, 55, 251, 43, 216, 169, 213, 73, 111, 100, 85, 35, 207, 71, 197, 210, 233, 237, 152, 71, 65, 225, 236, 149, 114, 86, 126, 11, 175, 0, 0, 167, 247, 218, 148, 99, 172, 234, 32, 120, 201, 92, 112, 205, 8, 102, 27, 149, 164, 87, 215, 54, 5, 175, 223, 110, 88, 189, 56, 120, 211, 181, 194, 25, 104, 201, 198, 191, 209, 119, 31, 67, 215, 133, 141, 39, 108, 197, 136, 225, 131, 118, 242, 78, 40, 18, 30, 140, 1, 77, 26, 221, 188, 181, 119, 71, 203, 8, 214, 200, 125, 248, 192, 30, 2, 46, 176, 172, 177, 233, 47, 30, 220, 60, 101, 18, 66, 200, 180, 154, 0, 1, 131, 6, 238, 210, 154, 76, 135, 36, 72, 32, 97, 32, 118, 41, 192, 16, 132, 10, 154, 128, 176, 3, 201, 7, 48, 210, 173, 5, 165, 115, 209, 143, 84, 164, 213, 140, 248, 126, 197, 198, 5, 124, 75, 112, 214, 169, 34, 217, 62, 58, 63, 246, 193, 242, 80, 6, 49, 195, 234, 210, 80, 191, 204, 121, 47, 24, 222, 41, 178, 41, 184, 254, 76, 30, 229, 156, 198, 233, 37, 248, 83, 251, 29, 2, 1, 104, 239, 181, 78, 183, 103, 55, 107, 56, 46, 206, 38, 243, 65, 162, 150, 223, 106, 14, 197, 29, 34, 225, 48, 26, 179, 134, 48, 62, 151, 39, 31, 167, 78, 219, 82, 248, 167, 254, 187, 39, 207, 57, 23, 226, 88, 28, 128, 168, 83, 39, 160, 238, 72, 138, 14, 107, 51, 82, 98, 180, 65, 166, 93, 170, 240, 28, 116, 241, 99, 74, 162, 140, 166, 55, 225, 234, 104, 89, 174, 172, 130, 96, 118, 18, 188, 97, 127, 52, 126, 26, 251, 14, 213, 237, 183, 225, 155, 52, 190, 81, 99, 102], [80, 58, 156, 77, 177, 159, 53, 251, 185, 61, 70, 215, 230, 236, 133, 150, 75, 89, 116, 192, 122, 133, 210, 199, 191, 227, 125, 68, 165, 235, 107, 221, 89, 247, 187, 146, 142, 190, 151, 132, 174, 238, 231, 195, 51, 104, 180, 239, 144, 114, 103, 95, 198, 219, 200, 77, 56, 73, 212, 196, 240, 108, 27, 200, 24, 211, 148, 99, 52, 21, 186, 67, 107, 90, 96, 209, 28, 8, 140, 106, 216, 25, 162, 146, 158, 149, 128, 176, 161, 230, 231, 130, 109, 120, 224, 64, 222, 116, 33, 153, 33, 220, 248, 185, 123, 4, 36, 154, 238, 50, 80, 129, 122, 47, 168, 136, 37, 57, 159, 26, 254, 40, 84, 182, 85, 51, 222, 45, 112, 177, 124, 228, 14, 18, 16, 170, 158, 162, 103, 143, 88, 101, 121, 214, 102, 40, 32, 159, 166, 175, 181, 62, 182, 192, 85, 53, 49, 187, 242, 219, 197, 223, 40, 244, 25, 225, 160, 146, 60, 78, 156, 100, 77, 132, 197, 109, 160, 161, 83, 117, 253, 39, 13, 242, 32, 129, 122, 85, 125, 116, 209, 209, 159, 79, 192, 239, 139, 196, 241, 52, 177, 72, 47, 42, 93, 175, 217, 114, 139, 188, 116, 108, 180, 193, 27, 230, 184, 218, 116, 211, 17, 176, 202, 27, 96, 133, 59, 212, 203, 24, 118, 209, 42, 96, 229, 23, 97, 149, 229, 149, 120, 36, 116, 16, 227, 118, 176, 213, 116, 186, 214, 93, 89, 104, 130, 12, 160, 76, 7, 236, 134, 187, 255, 7, 168, 57, 172, 134, 231, 133, 80, 118, 204, 205, 127, 188, 241, 210, 207, 234, 85, 0, 234, 105, 239, 105, 51, 250, 176, 209, 22, 173, 6, 192, 77, 238, 98, 233, 248, 197, 165, 252, 160, 253, 24, 60, 252, 239, 163, 124, 34, 33, 109, 165, 222, 48, 213, 140, 84, 254, 184, 236, 120, 117, 168, 123, 76, 113, 162, 157, 194, 38], [142, 160, 137, 41, 76, 99, 139, 15, 97, 198, 64, 236, 174, 80, 162, 8, 77, 107, 114, 168, 145, 115, 249, 199, 191, 110, 234, 51, 42, 99, 253, 155, 34, 110, 131, 254, 67, 161, 38, 107, 141, 1, 203, 47, 34, 43, 125, 75, 184, 201, 154, 6, 95, 56, 97, 226, 172, 241, 250, 153, 211, 39, 124, 41, 119, 85, 111, 153, 120, 143, 121, 211, 24, 72, 114, 208, 15, 180, 184, 201, 13, 130, 93, 134, 107, 37, 119, 213, 222, 80, 210, 21, 71, 164, 64, 82, 17, 9, 72, 133, 195, 196, 207, 139, 7, 79, 252, 113, 112, 115, 1, 218], [53, 179, 218, 242, 40, 76, 103, 10, 204, 45, 117, 74, 44, 199, 2, 21, 153, 113, 97, 145, 223, 38, 28, 9, 47, 192, 2, 168, 210, 51, 232, 165, 138, 37, 180, 208, 205, 249, 106, 5, 106, 19, 110, 65, 113, 147, 151, 238, 178, 118, 99, 40, 125, 205, 65, 253, 243, 232, 115, 83, 202, 78, 49, 174, 63, 203, 141, 126, 12, 53, 59, 206, 98, 41, 167, 115, 253, 141, 133, 119, 212, 52, 198, 240, 38, 101, 155, 100, 80, 214, 132, 160, 136, 152, 231, 183, 150, 168, 42, 149, 53, 131, 103, 224, 38, 168, 171, 243, 136, 50, 60, 96, 79, 79, 61, 19, 157, 173, 223, 36, 99, 186, 215, 97, 140, 28, 207, 157, 75, 165, 4, 108, 136, 44, 197, 197, 88, 124, 244, 202, 201, 41, 186, 1, 155, 81, 59, 115, 192, 199, 30, 195, 5, 45, 107, 171, 174, 177, 44, 218, 106, 158, 229, 3, 127, 133, 132, 75, 54, 62, 32, 145, 15, 84, 134, 100, 204, 253, 46, 101, 201, 33, 1, 229, 149, 237, 1, 106, 104, 235, 72, 59, 182, 195, 189, 56, 157, 28, 210, 59, 124, 81, 214, 69, 218, 151, 219, 176, 240, 114, 71, 167, 125], [238, 115, 58, 211, 132, 28, 47, 232, 246, 188, 109, 106, 39, 249, 150, 111, 30, 100, 159, 125, 77, 201, 230, 70, 162, 186, 127, 193, 125, 116, 22, 135, 66, 48, 150, 223, 66, 208, 232, 75, 44, 5, 153, 187, 190, 146, 76, 80, 2, 227, 198, 217, 147, 58, 122, 106, 84, 122, 150, 177, 129, 6, 8, 167, 159, 13, 109, 5, 232, 90, 59, 251, 212, 56, 10, 174, 71, 2, 108, 52, 173, 82, 233, 14, 30, 79, 170, 97, 109, 45, 150, 192, 51, 172, 82, 168, 87, 79, 123, 210, 52, 95, 26, 95, 6, 181, 203, 220, 61, 54, 169, 255, 26, 45, 195, 254, 174, 40, 58, 212, 218, 76, 128, 103, 45, 241, 201, 123, 202, 177, 89, 91, 29, 10, 32, 219, 190, 111, 11, 180, 110, 194, 224, 92, 47, 79, 76, 242, 219, 245, 199, 190, 71, 186, 49, 206, 251, 241, 96, 75, 149, 41, 187, 198, 30, 145, 228, 90], [130, 114, 183, 130, 141, 176, 165, 183, 85, 185, 140, 203, 191, 239, 94, 161, 100, 146, 127, 108, 236, 78, 107, 95, 31, 230, 228, 103, 184, 65, 42, 170, 114, 87, 121, 170, 240, 144, 238, 46, 120, 92, 208, 185, 124, 249, 7, 62, 162, 209, 20, 61, 231, 182, 50, 58, 27, 145, 116, 118, 122, 49, 156, 94, 112, 252, 0, 162, 136, 237, 104, 171, 99, 60, 79, 156, 123, 230, 153, 194, 68, 65, 48, 123, 209, 138, 85, 129, 165, 114, 178, 177, 18, 34, 192, 70, 29, 110, 210, 61, 194, 24, 11, 96, 15, 43, 157, 36, 74, 90, 185, 172, 253, 149, 108, 176, 166, 232, 1, 226, 26, 60, 220, 230, 39, 54, 208, 71, 148, 12, 93, 99, 92, 68, 29, 202, 60, 120, 200, 136, 17, 24, 174, 182, 220, 17, 159, 10, 2, 30, 177, 41, 112, 208, 147, 48, 185, 216, 140, 238, 154, 128, 13, 203, 165, 246, 242, 250, 172, 218, 72, 24, 108, 209, 207, 32, 235, 190, 43, 55, 108, 33, 198, 16, 211, 38, 0, 124, 210, 232, 220, 37, 58, 24, 66, 109, 91, 38, 94, 191, 169, 129, 66, 42, 62, 53, 144, 227, 12, 196, 252, 63, 133, 154, 109, 15, 125, 168, 17, 153, 162, 33, 127, 165, 64, 171, 52, 11, 157], [251, 222, 226, 203, 213, 154, 140, 174, 185, 63, 46, 156, 18, 213, 249, 209, 134, 204], [172, 255, 237, 108, 154, 156, 54, 48, 109, 103, 191, 160, 248, 255, 78, 139, 111, 163, 14, 9, 146, 19, 236, 116, 150, 121, 152, 154, 63, 237, 226, 243, 171, 32, 125, 98, 31, 195, 48, 122, 49, 58, 188, 162, 23, 134, 94, 105, 141, 6, 158, 46, 238, 97, 25, 19, 82, 52, 135, 224, 206, 30, 58, 247, 48, 242, 46, 137, 31, 223, 175, 23, 247, 109, 135, 93, 38, 127, 19, 31, 113, 47, 113, 239, 132, 127, 219, 200, 94, 150, 239, 10, 87, 61, 207, 230, 236, 134, 95, 51, 175, 76, 184, 203, 230, 252, 238, 14, 108, 13, 38, 207, 210, 112, 97, 212, 253, 199, 0, 71, 25, 44, 26, 208, 153, 21, 145, 34, 139, 70, 38, 19, 224, 178, 217, 148, 4, 110, 244, 17, 20, 14, 109, 147, 203, 179, 65, 254, 25, 240, 249, 248, 5, 87, 99, 132, 49, 39, 55, 163, 194, 197, 67, 127, 0, 106, 24, 16, 175, 185, 160, 99, 10, 91, 195, 17, 105, 193, 72, 176, 211, 164, 66, 199, 158, 119, 226, 235, 172, 202, 196, 77, 66, 207, 140, 23, 197, 51, 77, 213, 246, 6, 187, 205, 247, 170, 155, 193, 85, 26, 222, 182, 153, 241, 249, 167, 13, 28, 108, 227, 149, 163, 27, 204, 9, 126, 55, 73, 94, 187, 58, 246, 83, 91, 103, 244, 109, 89, 90, 84, 195, 102, 129, 210, 37], [180, 245, 16, 16, 119, 178, 2, 10, 107, 13, 24, 63, 235, 13, 194, 197, 104, 82, 233, 217, 177, 143, 63, 78, 176, 5, 4, 77, 180, 110, 95, 99, 213, 166, 141, 132, 115, 82, 1, 55, 9, 206, 211, 231, 102, 22, 93, 61, 182, 241, 30, 93, 142, 16, 182, 85, 196, 13, 13, 136, 59, 148, 248, 15, 197, 143, 203, 38, 167, 76, 221, 28, 82, 97, 35, 230, 194, 75, 69, 115, 77, 53, 230, 191, 81, 87, 114, 57, 82, 67, 93, 18, 55, 251, 42, 76, 34, 1, 141, 156, 79, 81, 202, 47, 38, 29, 114, 165, 221, 123, 35, 73, 72, 44, 0, 5, 87, 41, 252, 93, 3, 222, 139, 21, 105, 251, 177, 10, 161, 66, 244, 205, 192, 1, 144, 234, 126, 105, 104, 216, 125, 201, 130, 104, 237, 116, 52, 207, 198, 32, 212, 132, 244, 35, 109, 232, 15, 10, 111, 164, 179, 12, 205, 127, 29, 140, 2, 243, 48, 103, 42, 21, 114, 176, 159, 41, 158, 208, 107, 80, 12, 75, 146, 129, 67, 121, 17, 128, 242, 235, 68, 101, 83, 219, 144, 26, 57, 212, 226, 77, 101, 240, 84, 196, 95, 36, 233, 144, 137, 124, 4, 223, 167, 143, 115, 148, 37, 71, 162, 184, 147, 89, 89, 83, 195, 38, 38, 162, 113, 62, 173, 46, 11, 183, 115, 126, 142, 173, 107, 169, 196, 138, 40, 150, 123, 106, 146, 85, 250, 19, 31, 254, 186, 195, 108, 129, 249, 5, 156, 24, 71, 103, 87, 113, 70], [140, 88, 37, 103, 163, 35, 202, 63, 157, 149, 34, 243, 195, 236, 81, 94, 27, 92, 151, 65, 228, 88, 210, 103, 95, 104, 47, 165, 103, 136, 205, 68, 53, 22, 156, 116, 79, 154, 73, 101, 160, 23, 140, 81, 236, 253, 186, 248, 42, 63, 148, 47, 10, 190, 164, 98, 97, 89, 83, 187, 142, 212, 229, 82, 177, 242, 0, 101, 234, 4, 20, 123, 69, 99, 126, 7, 104, 208, 72, 35, 168, 198, 219, 174, 80, 52, 216, 56, 139, 159, 20, 152, 166, 254, 239, 48, 207, 30, 110, 246, 210, 49, 77, 217, 26, 180, 196, 35, 93, 219, 27, 61, 130, 108, 52, 119, 227, 217, 58, 172, 209, 43, 82, 90, 234, 77, 60, 218, 169, 211, 16, 142, 63, 199, 215, 165, 212, 248, 253, 188, 69, 98, 41], [46, 47, 184, 233, 77, 230, 201, 5, 177, 125, 59, 1, 176, 127, 79, 207, 38, 25, 178, 172, 142, 79, 66, 143, 199, 159, 130, 90, 170, 58, 211, 62, 125, 209, 134, 53, 113, 223, 89, 39, 232, 231, 104, 224, 247, 11, 197, 208, 74, 62, 151, 23, 249, 112, 46, 135, 50, 252, 141, 83, 121, 82, 38, 31, 71, 25, 3, 76, 93, 64, 180, 31, 100, 76, 100, 185, 19, 74, 125, 35, 101, 177, 90, 10, 148, 204, 204, 114, 94, 220, 8, 66, 54, 185, 165, 241, 149, 145, 117, 165, 101, 188, 214, 42, 121, 226, 176, 253, 110, 22, 106, 97, 11, 119, 130, 68, 215, 41, 175, 102, 33, 10, 87, 247, 27, 124, 164, 64, 163, 190, 173, 43, 153, 74, 109, 66, 136, 71, 150, 147, 16, 187, 188, 17, 30, 49, 20, 126, 184, 11, 106, 86, 87, 179, 126, 77, 194, 39, 253, 224, 247, 237, 139, 238, 3, 107, 146, 100, 190, 50, 132, 94, 21, 163, 227, 216, 75, 88, 186, 227, 227, 97, 170, 165, 253, 66, 117, 165, 117, 75, 220, 30, 255, 205, 14, 18, 136, 127, 138, 4, 138, 81, 137, 179, 65, 171, 104, 69, 52, 109, 59, 248, 79, 137, 249, 211, 211, 14, 30, 228, 167, 222, 97, 214, 125, 208, 200, 5, 233, 11, 185, 26, 153, 37, 67, 223, 143, 93, 52, 243, 145, 38, 122, 221, 189, 218, 100, 228, 64, 128, 138, 117, 236, 88, 2, 212, 12, 71, 230, 160, 209, 219, 3, 18, 193, 60, 240, 14, 200, 47, 110, 98, 196, 7, 43, 85, 200, 95, 69, 203, 128, 59, 147, 255, 34, 69, 57, 110, 110, 236, 78, 29, 225, 232, 14, 217, 201, 185, 133, 150, 64, 160, 173, 23, 166, 253, 229, 52, 198, 206, 68, 200, 56, 174, 151, 58, 68, 169, 85, 71, 26, 52, 82, 132, 105, 175, 74, 89, 46, 37, 105, 181, 99, 234, 11, 145, 160, 44], [118, 246, 169, 179, 29, 174, 60, 142, 23, 194, 172, 169, 204, 135, 52, 81, 152, 115, 15, 67, 210, 245, 47, 58, 46, 197, 56, 102, 251, 0, 154, 123, 188, 70, 212, 242, 65, 217, 203, 126, 154, 196, 222, 235, 44, 232, 32, 179, 234, 99, 212, 246, 150, 31, 30, 146, 111, 55, 83, 202, 8, 138, 120, 184, 103, 91, 231, 141, 17, 165, 107, 136, 209, 251, 36, 233, 94, 209, 101, 243, 216, 222, 122, 204, 172, 187, 188, 15, 204, 146, 245, 1, 62, 172, 71, 47, 41, 226, 212, 200, 77, 163, 191, 252, 43, 39, 180, 108, 216, 248, 193, 58, 7, 195, 92, 127, 126, 157, 196, 158, 251, 205, 149, 113, 189, 138, 106, 124, 169, 132, 110, 6, 195, 148, 214, 62, 163, 140, 106, 136, 155, 218, 178, 59, 190, 194, 196, 38, 37, 125, 96, 187, 151, 17, 47, 74, 243, 65, 217, 121, 176, 144, 166, 74, 76, 95, 62, 186, 120, 247, 57, 84, 76, 7, 236, 223, 182, 163, 44, 62, 101, 252, 20, 147, 187, 161, 168, 85, 184, 252, 177, 0, 62, 82, 123, 118, 141, 70, 96, 234, 246, 67, 138, 254, 177, 75, 235, 105, 234, 232, 154, 198, 136, 126, 25, 123, 91, 78, 243, 200, 178, 34, 127, 167, 223, 14, 198, 160, 190, 215, 141, 41, 0, 86, 214, 38, 63, 243, 244, 159, 77, 196, 235, 85, 97, 188, 156, 176, 158, 33, 57, 122, 154, 5, 6, 231, 148, 208, 209, 146, 145, 214, 123, 122, 213, 168, 91, 241, 114, 146, 5, 243, 172, 9, 224, 65, 130, 218, 219, 97, 82, 80, 72, 53, 247, 250, 135, 148, 134, 189, 30, 94, 67, 52, 246, 99, 35, 146, 42, 101, 205, 170, 207, 148, 35, 21, 155, 211, 83, 163, 59, 181, 142, 248], [178, 215, 231, 149, 201, 183, 211, 31, 13, 228, 16, 0, 25, 198, 80, 226, 76, 124, 130, 97, 89, 11, 244, 205, 28, 175, 198, 197, 185, 129, 252, 102, 106, 22, 0, 253, 100, 33, 139, 171, 86, 236, 21, 254, 177, 207, 65, 171, 141, 107, 34, 203, 154, 239, 138, 160, 189, 47, 165, 41, 31, 74, 38, 63, 249, 216, 188, 237, 184, 132, 53, 90, 117, 55, 130, 131, 92, 27, 148, 243, 0, 156, 163, 147, 123, 127, 150, 187, 63, 184, 81, 38, 212, 11, 188, 18, 204, 172, 168, 81, 37, 196, 225, 35, 224, 124, 134, 105, 194, 154, 249, 144, 156, 173, 168, 24, 178, 5, 217, 55, 217], [33, 124, 24, 124, 94, 175, 207, 201, 17, 193, 82, 124, 164, 202, 43, 90, 31, 137, 236, 177, 208, 37, 26, 185, 29, 79, 29, 70, 27, 208, 148, 142, 131, 121, 6, 139, 132, 163, 226, 190, 238, 35, 33, 25, 159, 33, 199, 221, 100, 197, 251, 175, 197, 169, 189, 94, 163, 108, 120, 237, 199, 94, 10, 54, 177, 93, 35, 25, 251, 37, 135, 117, 108, 189, 10, 30, 194, 188, 180, 243, 7, 80, 114, 49, 81, 223, 133, 178, 73, 117, 114, 154, 244, 193, 239, 1, 230, 248, 157, 45, 148, 51, 32, 139, 128, 200, 217, 14, 126, 11, 254, 165, 51, 201, 8, 168, 251, 243, 122, 117, 102, 139, 232, 242, 57, 20, 153, 57, 49, 86, 0, 52, 218, 170, 219, 231, 200, 64, 74, 74, 87, 220, 56, 106, 247, 215, 167, 129, 145, 27, 59, 83, 89, 171, 49, 56, 66, 208, 122, 153, 84, 7, 17, 248, 104, 242, 27, 43, 162, 135, 122, 88, 130, 70, 216, 177, 194, 227, 59, 74, 134, 177, 157, 125, 103, 12, 232, 72, 181, 211, 232, 154, 235, 83, 173, 67, 26, 139, 4, 232, 188, 165, 254, 168, 149, 148, 132, 3, 228, 169, 206, 103, 214, 93, 197, 185, 137, 254, 18, 155, 29, 88, 20, 192, 247, 88, 11, 29, 102, 188, 143, 16, 93, 198, 67, 122, 95, 147, 82, 210, 115, 72, 36, 14, 40, 35, 228, 8, 41, 17, 137, 150, 30, 209, 135, 40, 37, 184, 196, 156, 187, 175, 149, 140, 101, 72, 89, 241, 96, 177, 240, 134, 180, 88, 116, 7, 212, 232, 254, 108, 241], [49, 156, 98, 64, 54, 0, 224, 163, 242, 19, 27, 222, 111, 96, 80, 229, 151, 18, 149, 232, 224, 124, 217, 120, 226, 22, 217, 155, 196, 69, 50, 223, 139, 7, 8, 132, 137, 198, 249, 31, 41, 60, 22, 180, 241, 253, 235, 87, 22, 79, 156, 25, 128, 136, 58, 178, 144, 246, 75, 167, 36, 14, 137, 7, 157, 199, 151, 173, 12, 122, 200, 194, 241, 238, 74, 105, 121, 121, 33, 207, 110, 214, 188, 171, 202, 146, 215, 233, 129, 35, 195, 67, 112, 10, 55, 210, 228, 181, 202, 134, 64, 142, 106, 253, 105, 38, 162, 40, 191, 222, 26, 126, 234, 115, 114, 110, 48, 204, 52, 211, 224, 233, 68, 166, 32, 234, 108, 197, 3, 225, 114, 114, 96, 72, 126, 166, 197, 160, 34, 115, 187, 181, 93, 134, 134, 229, 74, 7, 37, 208, 203, 177, 145, 251, 41, 53, 170, 58, 191, 113, 109, 36, 35, 54, 10, 7, 65, 76, 136, 49, 2, 87, 131, 235], [74, 60, 225, 74, 123, 101, 143, 43, 201, 102, 192, 119, 125, 114, 17, 47, 24, 79, 57, 147, 160, 16, 37, 152, 196, 181, 184, 173, 199, 91, 32, 131, 210, 140, 193, 194, 176, 126, 225, 57, 117, 14, 237, 82, 143, 36, 236, 195, 18, 142, 72, 145, 254, 246, 43, 116, 9, 65, 17, 80, 243, 37, 173, 193, 35, 29, 146, 109, 49, 44, 42, 227, 41, 1, 152, 5, 37, 32, 21, 105, 108, 32, 112, 9, 183, 111, 56, 238, 48, 17, 146, 105, 245, 93, 18, 75, 68, 159, 253, 248, 187, 85, 0, 214, 22, 154, 46, 3, 172, 127, 253, 222, 92, 162, 118], [187, 110, 83, 197, 122, 210, 62, 64, 26, 119, 118, 12, 189, 185, 70, 142, 0, 118, 9, 44, 105, 177, 235, 99, 193, 160, 23, 39, 168, 205, 204, 215, 175, 59, 99, 57, 24, 165, 2, 245, 135, 177, 44, 96, 92, 237, 134, 206, 70, 221, 3, 30, 219, 216, 135, 35, 178, 73, 190, 11, 57, 83, 239, 190, 91, 67, 17, 151, 150, 56, 64, 43, 95, 18, 102, 197, 72, 46, 227, 17, 255, 123, 225, 32, 127, 235, 46, 87, 209, 158, 131, 125, 194, 115, 219, 9], [252, 205, 224, 4, 70, 26, 38, 151, 219, 28, 149, 119, 118, 55, 211, 88, 187, 76, 113, 76, 105, 9, 172, 3, 23, 145, 230, 194, 181, 75, 14, 190, 198, 186, 118, 125, 233, 220, 6, 73, 122, 109, 172, 118, 45, 146, 14, 20, 158, 2, 39, 40, 228, 70, 190, 62, 171, 93, 197, 180, 173, 124, 10, 160, 175, 254, 226, 136, 62, 138, 73, 35, 141, 94, 166, 102, 13, 77, 126, 249, 164, 209, 186, 216, 246, 222, 137, 17, 216], [95, 91, 176, 214, 145, 138, 10, 243, 207, 133, 147, 221, 61, 181, 237, 49, 123, 79, 185, 55, 148, 116, 165, 98, 221, 50, 76, 153, 101, 132, 97, 46, 32, 218, 196, 90, 103, 107, 99, 143, 201, 7, 178, 6, 201, 78, 255, 214, 7, 235, 144, 74, 27, 212, 158, 77, 47, 154, 202, 33, 148, 123, 154, 93, 140, 91, 89, 36, 154, 209, 200, 59, 189, 181, 45, 120, 133, 120, 69, 62, 80, 189, 175, 18, 197, 13, 33, 17, 180, 35, 31, 56, 55, 237, 109, 79, 88, 214, 129, 49, 192, 195, 117, 22, 170, 254, 44, 40, 245, 244, 236, 154, 250, 219, 205, 238, 140, 54, 115, 96, 81, 105, 50, 115, 81, 209, 143, 76, 12, 10, 182, 119, 77, 85, 52, 155, 14, 69, 81, 52, 8, 244, 208, 215, 125, 160, 244, 106, 71, 129, 27, 172, 236, 244, 23, 216, 151, 74, 39, 119, 82, 38, 76, 168, 104, 54, 148, 20, 56, 63, 102, 90, 248, 56, 196, 248, 92, 13, 19, 39, 192, 235, 199, 41, 15, 117, 60, 38, 158, 191, 204, 4, 108, 160, 111, 168, 183, 143, 28, 180, 96, 237, 165, 233, 235, 22, 198, 67, 0, 44, 184, 161, 187, 94, 248, 26, 157, 112, 140, 196, 125, 216, 61, 8, 230, 221, 200, 169, 76, 183, 238, 44, 55, 211, 148, 1, 238, 48, 152, 151, 216, 88, 75, 55, 75, 206, 163, 131, 99, 102, 193, 186, 164, 73, 63, 107, 238, 86, 158, 236, 26, 171, 26, 226, 82, 194, 186, 126, 218, 77, 166, 95, 201, 205, 40, 166, 25, 84, 131, 166, 207, 172, 53, 11, 89, 234, 73, 11, 238, 174, 248, 202, 49, 238, 178, 126, 100, 91, 97, 149, 22, 190, 242, 37, 7, 113, 6, 210, 255, 147, 49, 172, 155, 81, 104, 49, 135, 179, 106, 69, 46, 248, 62, 73, 116, 255, 55, 230, 241, 145, 63], [147, 14, 24, 83, 236, 212, 127, 159, 186, 35, 206, 131, 230, 224, 115, 239, 147, 124, 229, 22, 196, 33, 211, 210, 124, 60, 206, 197, 254, 9, 238, 57, 132, 70, 208, 81, 47, 10, 138, 245, 216, 48, 255], [232, 211, 176, 139, 171, 149, 244, 173, 66, 48, 160, 70, 234, 164, 130, 108, 181, 255, 214, 182, 62, 1, 37, 174, 14, 240, 115, 188, 183, 122, 207, 114, 184, 101, 112, 84, 212, 186, 112, 226, 222, 105, 221, 15, 144, 49, 223, 203, 158, 239, 57, 237, 106, 23, 41, 214, 247, 173, 203, 154, 195, 81, 228, 83, 119, 222, 194, 113, 181, 36, 92, 254, 2, 128, 178, 145, 102, 65, 157, 196, 205, 156, 187, 172, 218, 248, 47, 222, 34, 174, 217, 202, 152, 38, 133, 235, 110, 189, 93, 19, 40, 131, 43, 78, 88, 129, 40, 163, 243, 225, 184, 247, 135, 154, 9, 163, 68, 120, 222, 123, 251, 11, 127, 38, 9, 52, 8, 37, 80, 163, 10, 203, 42, 18, 43, 206, 222, 153, 44, 206, 133, 114, 59, 159, 95, 162, 242, 226, 52, 157, 144, 16, 174, 188, 81, 218, 10, 16, 155, 132, 2, 175, 238, 205, 13, 23, 151, 1, 48, 134, 148, 201, 220, 17, 255, 4, 69, 225, 71, 22, 121, 27, 168, 127, 178, 219, 239, 212, 63, 220, 133, 217, 32, 156, 248, 235, 53, 45, 235, 121, 242, 171, 175, 110, 185, 173, 214, 55, 219, 128, 37, 184, 101, 107, 126, 243, 73, 166, 189, 207, 188, 37, 213, 18, 204, 169, 159, 153, 232, 46, 69, 73, 22, 115, 118, 124, 84, 65, 161, 26, 19, 12, 30], [223, 19, 24, 7, 183, 22, 164, 111, 64, 152, 164, 112, 175, 91, 83, 70, 152, 166, 42, 207, 136, 141, 49, 80, 181, 154, 15, 215, 95, 222, 45, 54, 6, 201, 60, 36, 166, 202, 93, 232, 160, 143, 72, 72, 233, 103, 13, 40, 254, 192, 236, 143, 119, 171, 33, 36, 156, 190, 227, 117, 122, 137, 223, 143, 33, 21, 23, 108, 169, 199, 175, 113, 243, 210, 82, 225, 11, 124, 84, 82, 1, 193, 180, 27, 109, 61, 173, 121, 144, 166, 123, 37, 74, 31, 95, 128, 1, 77, 217, 241, 245, 161, 153, 24, 1, 172, 153, 86, 51, 71, 43, 21, 146, 85, 30, 231, 120, 167, 34, 5, 173, 146, 110, 215, 235, 76, 179, 253, 64, 110, 203, 141, 12, 16, 253, 161, 209, 209, 145, 112, 14, 64, 184, 74, 125, 143, 249, 185, 28, 213, 94, 188, 87, 154, 59, 235, 132, 136, 112, 35, 36, 164, 192, 69, 63, 228, 236, 163, 158, 210, 144, 11, 214, 222, 108, 70, 52, 63, 89, 224, 149, 0, 244, 29, 3, 27, 160, 69, 79, 246, 110, 26, 3, 140, 92, 58, 55, 159, 172, 128, 133, 151, 1, 39, 210, 86, 111, 201, 51, 121, 220, 147, 109, 118, 38, 162, 247, 128, 182, 1, 24, 170], [20, 159, 48, 178, 46, 139, 169, 161, 20, 196, 54, 20, 95, 149, 54, 235, 134, 244, 177, 226, 125, 237, 227, 65, 234, 62, 80, 153, 207, 225, 38, 186, 43, 254, 58, 131, 204, 107, 251, 100, 209, 178, 113, 11, 214, 153, 205, 235, 99, 170, 89, 247, 77, 117, 147, 199, 225, 78, 113, 223, 196, 197, 70, 35, 180, 94, 114, 80, 172, 87, 115, 6, 191, 119, 211, 105, 237, 58, 235, 1, 186, 219, 120, 62, 175, 33, 78, 116, 128, 197, 86, 139, 30, 228, 248, 0, 205, 120, 224, 161, 224, 91, 252, 159, 148, 240, 190, 88, 53, 135, 195, 52, 53, 189, 41, 100, 254, 189, 167, 72, 237, 116, 175, 59, 95, 192, 43, 68, 54, 235, 224, 56, 223, 247, 49, 16, 115, 148, 184, 170, 145, 204, 145, 144, 171, 87, 215, 151, 125, 101, 156, 19, 95, 175, 152, 31, 74, 160, 144, 1, 114, 193, 77, 85, 87, 184, 124, 11, 155, 194, 209, 181, 236, 81, 206, 89, 92, 247, 242, 243, 140, 240, 18, 3, 117, 182, 194, 33, 247, 28, 126, 79, 79, 158, 135, 3, 4, 116, 186, 9, 52, 48, 49, 223, 16, 144, 208, 216, 202, 191, 120, 194, 189, 46, 177, 113, 234, 229, 30, 134, 110, 155, 28, 121, 147, 149, 23, 76, 65, 1, 137, 61, 105, 104, 111, 24, 54, 217, 64, 169, 31, 2, 255, 205, 215, 212, 45, 3, 155, 215, 61], [255, 115, 11, 236, 103, 21, 18, 216, 191, 245, 182, 36, 136, 214, 178, 9, 169, 194, 244, 240, 53, 242, 1, 222, 94, 66, 46, 70, 98, 245, 180, 87, 246, 200, 162, 86, 219, 122, 103, 31, 79, 177, 203, 183, 115, 181, 130, 237, 41, 183, 173, 157, 217, 231, 120, 207, 114, 88, 48, 224, 73, 128, 107, 156, 32, 77, 220, 214, 104, 240, 48, 213, 152, 146, 176, 192, 126, 144, 51, 51, 231, 248, 174, 162, 141, 110, 114, 123, 249, 196, 159, 171, 186, 192, 48, 94, 39, 14, 213, 136, 18, 27, 175, 68, 79, 98, 147, 133, 225, 58, 66, 157, 74, 216, 65, 217, 94, 98, 201, 124, 252, 224, 82, 184, 174, 186, 109, 72, 80, 231, 65, 228, 201, 171, 238, 111, 240, 20, 116, 81, 194, 88, 169, 172, 157, 173, 62, 195, 208, 146, 70, 60, 239, 24, 45, 65, 124, 244, 157, 148, 56, 254, 183, 222, 20, 160, 84, 36, 68, 109, 145, 138, 139, 113, 212, 29, 122, 214, 84, 53, 17, 227, 204, 59, 98, 56, 139, 76, 64, 232, 134, 60, 241, 84, 11, 158, 84, 62, 177, 112, 148, 145, 124, 158, 181, 66, 47, 96, 240, 232, 143, 114, 251, 133, 182, 150, 246, 143, 71, 215, 126, 133, 32, 132, 246, 243, 55, 112, 73, 140, 248, 81, 67, 2, 137, 188, 55, 158, 117, 127, 182, 39, 232, 110, 113, 199, 205, 33, 30, 164, 74, 2, 233, 18, 64, 78, 163, 20, 191, 190, 210, 134, 178, 197, 83, 126, 147, 193, 195, 7, 133, 149, 52, 162, 83, 54, 46, 226, 68, 242, 22, 119, 235, 222, 169, 224, 62, 163, 230, 135, 74, 222, 193, 146, 10, 127, 67, 91, 237, 23, 225, 234, 126, 178, 70, 244, 161, 59, 134, 93, 25, 143, 221, 166, 9, 21, 144, 79, 109, 102, 185, 227, 26, 57, 219, 47, 116, 3, 236, 88, 110, 203, 48, 168, 215, 123, 119, 225, 219, 247, 49, 118, 5, 0, 252, 241, 78, 134, 246, 103, 19, 137, 100, 187, 108, 209, 16, 23, 22, 128, 233, 110, 181, 98, 108, 50, 81], [103, 173, 232, 79, 94, 254, 227, 192, 188, 223, 71, 143, 238, 202, 44, 35, 128, 181, 73, 52, 236, 225, 84, 135, 50, 15, 231, 89, 111, 189, 34, 25, 218, 224, 95, 169, 174, 225, 55, 36, 148, 45, 227, 94, 218, 21, 17, 96, 114, 35, 16, 187, 156, 212, 52, 204, 41, 3, 45, 173, 70, 16, 210, 54, 250, 126, 149, 216, 44, 177, 236, 44, 70, 27, 177, 73, 55, 49, 237, 198, 35, 221, 233, 165, 56, 202, 246, 33, 142, 245, 205, 110, 215, 161, 74, 104, 90, 80, 206, 13, 81, 92, 158, 158, 179, 126, 26, 36, 43, 31, 245, 59, 23, 40, 75, 135, 15, 255, 8, 6, 157, 67, 174, 40, 50, 101, 102, 18, 214, 144, 22, 71, 185, 75, 107, 62, 235, 203, 146, 223, 41, 23, 103, 91, 19, 135, 54, 124, 133, 173, 3, 233, 89, 4, 129, 190, 182, 171, 187, 61, 67, 82, 181, 9, 236, 170, 92, 69, 20, 192, 207, 22, 2, 203, 37, 200, 119, 230, 55, 89, 26, 237, 123, 172, 171, 240, 51, 75, 66, 185, 106, 248, 81, 194, 130, 204, 55, 207, 231, 44, 235, 91, 242, 5, 158, 62, 28, 22, 93, 211, 223, 194, 31, 248, 110, 245, 243, 109], [196, 22, 252, 97, 248, 152, 112, 10, 155, 16, 137, 104, 45, 168, 69, 175, 38, 57, 218, 8, 147, 111, 136, 189, 158, 99, 41, 188, 166, 205, 207, 253, 20, 78, 151, 94, 117, 205, 177, 199, 231, 75, 109, 22, 165, 112, 159, 177, 38, 170, 159, 78, 20, 221, 205, 52, 2, 244, 170, 250, 252, 182, 175, 23, 8, 60, 158, 21, 22, 230, 184, 148, 156, 162, 186, 197, 4, 44, 214, 222, 125, 68, 26, 27, 120, 86, 246, 65, 243, 190], [242, 166, 247, 24, 156, 112, 223, 215, 19, 221, 150, 141, 90, 125, 91, 217, 176, 99, 249, 74, 214, 56, 181, 224, 24, 77, 196, 50, 163, 183, 60, 221, 95, 221, 63, 234, 93, 60, 246, 74, 34, 55, 30, 123, 139, 77, 60, 222, 200, 79, 126, 245, 181, 167, 57, 95, 66, 76, 32, 111, 129, 168, 127, 36, 28, 63, 226, 121, 77, 7, 105, 172, 126, 254, 40, 234, 106, 209, 72, 222, 236, 248, 75, 80, 218, 6, 17, 6, 42, 152, 225, 245, 137, 204, 138, 231, 25, 100, 203, 152, 225, 92, 251, 171, 169, 207, 100, 3, 121, 98, 204, 5, 227, 218, 216, 57, 217, 10, 192, 8, 36, 103, 159, 202, 242, 235, 104, 47, 32, 141, 50, 97, 6, 83, 114, 113, 81, 165, 86, 140, 39, 63, 218, 231, 30, 149, 185, 241, 141, 47, 11, 178, 200, 1, 64, 134, 195, 73, 200, 231, 17, 68], [220, 13, 126, 162, 94, 135, 229, 33, 108, 154, 13, 12, 197, 34, 101, 235, 126, 234, 248, 212, 86, 254, 138, 184, 55, 64, 125, 62, 116, 33, 214, 233, 3, 13, 148, 49, 63, 157, 31, 205, 242, 75, 127, 55, 10, 149, 11, 14, 95, 73, 195, 149, 22, 140, 132, 179, 58, 16, 41, 147, 197, 160, 234, 177, 186, 165, 44, 47, 46, 190, 20, 211, 239, 66, 126, 7, 28, 192, 206, 86, 54, 89, 34, 43, 215, 202, 239, 51, 55, 6, 100, 222, 51, 206, 41, 245, 247, 66, 245, 223, 181, 48, 235, 32, 146, 250, 11, 188, 151, 153, 167, 234, 230, 30, 126, 196, 216, 142, 222, 39, 229, 148, 21, 111, 206, 89, 127, 119, 54, 56, 83, 165, 70, 27, 216, 88, 253, 95, 114, 230, 23, 114, 108, 122, 146, 226, 62, 67, 109, 112, 106, 34, 58, 65, 24, 240, 91, 148, 11, 105, 181, 128, 105, 17, 231, 58, 197, 100, 108, 163, 212, 48, 95, 142, 149, 191, 31, 67, 239, 5, 88, 65, 154, 145, 51, 137, 194, 91, 155, 219, 156, 233, 60, 223, 57, 27, 169, 227, 2, 195, 167, 112, 253, 165, 91, 188, 207, 26, 215, 150, 247, 216, 164, 31, 19, 80, 21, 238, 196, 82, 207, 181, 70, 105, 65, 63, 129, 77, 54, 166, 233, 219, 136, 147, 185, 237, 104, 118, 198, 49, 216, 86, 20, 73, 74, 246, 53, 92, 178, 236, 92, 23, 81, 127, 131, 237, 253, 137, 44, 151, 55, 85, 208, 222, 141, 160, 3, 20, 252, 104, 250, 146, 101, 51, 212, 208, 78, 201, 194, 112, 165, 114, 130, 191, 99, 81, 91, 184, 159, 41, 13, 107, 139, 0, 94, 165, 89, 94], [177, 108, 145, 128, 183, 108, 147, 53, 146, 3, 186, 222, 40, 150, 253, 72, 3, 237, 174, 2, 180, 54, 162, 62, 83, 83, 253, 232, 170, 64, 139, 103, 139, 195, 85, 219, 244, 171, 0, 205, 177, 85, 97, 181, 212, 30, 69, 126, 225, 178, 144, 9, 145, 245, 234, 243, 146, 146, 163, 23, 105, 84, 220, 153, 202, 11, 218, 158, 148, 212], [138, 199, 196, 219, 227, 126, 14, 144, 121, 169, 86, 105, 5, 49, 146, 86, 189, 252, 237, 176, 249, 145, 100, 109, 46, 103, 57, 225, 62, 98, 65, 114, 221, 73, 192, 34, 78, 180, 167, 242, 41, 234, 40, 207, 172, 77, 45, 123, 53, 137, 239, 109, 45, 250, 212, 251, 81, 85, 84, 47, 92, 59, 69, 61, 221, 103, 145, 193, 167, 139, 171, 179, 250, 255, 102, 43, 75, 17, 93, 226, 8, 141, 19, 83, 12, 236, 204, 81, 163, 154, 130, 3, 217, 194, 235, 3, 98, 106, 20, 133, 21, 162, 212, 88, 114, 83, 13, 137, 237, 228, 250, 145, 217, 113, 149, 106, 19, 94, 38, 119, 79, 35, 85, 154, 87, 68, 177, 20, 64, 73, 106, 37, 240, 106, 133, 82, 230, 66, 89, 107, 57, 180, 10, 226, 62, 3, 206, 199, 64, 94, 128], [180, 68, 147, 227, 212, 24, 71, 152, 161, 236, 206, 194, 123, 20, 227, 67, 59, 145, 99, 188, 88, 143, 150, 168, 78, 24, 113, 25, 10, 241, 126, 235, 112, 195, 240, 125, 28, 47, 168, 62, 107, 254, 205, 110, 121, 22, 34, 56, 159], [157, 90, 139, 190, 111, 163, 206, 107, 212, 156, 219, 24, 68, 64, 251, 112, 16, 76, 208, 31, 154, 177, 36, 94, 71, 163, 126, 187, 56, 124, 23, 50, 135, 34, 163, 225, 53, 125, 87, 116, 253, 97, 192, 182, 157, 46, 171, 71, 229, 125, 75, 60, 174, 126, 79, 133, 116], [246, 25, 164, 115, 208, 242, 89, 85, 84, 74, 176, 160, 225, 142, 146, 36, 172, 166, 231, 172, 144, 192, 191, 190, 154, 82, 110, 230, 165, 111, 128, 153, 148, 189, 195, 202, 107, 165, 130, 104, 104, 120, 146, 107, 210, 65, 117, 22, 66, 202, 191, 187, 232, 71, 42, 55, 185, 124, 64, 27, 60, 47, 248, 132, 147, 96, 23, 12, 143, 125, 184, 182, 121, 104, 155, 4, 64, 103, 24, 64, 152, 53, 53, 3, 187, 251, 4, 23, 207, 189, 83, 151, 247, 188, 138, 59, 161, 81, 219, 70, 46, 189, 126, 112, 142, 239, 46, 99, 232, 249, 220, 100, 145, 140, 48, 166, 6, 95, 145, 81, 169, 230, 125, 219, 157, 105, 23, 161, 131, 143, 19, 83, 164, 212, 66, 146, 199, 201, 169, 143, 171, 113, 154, 30, 105, 202, 246, 161, 95, 195, 220, 101, 70, 144, 122, 236, 12, 85, 193, 61, 165, 215, 134, 236, 152, 81, 110, 212, 215, 127, 148, 194, 72, 164, 27, 92, 16, 249, 157, 69, 41, 185, 142, 19, 12, 30, 52, 10, 126, 249, 209, 38, 100, 137, 59, 142, 226, 29, 252, 253, 89, 241, 223, 111, 246, 247, 116, 210, 131, 38, 138, 236, 65, 244, 235, 199, 99, 197, 0, 37, 5, 113, 96, 205, 86, 23, 82, 115, 35, 133, 216, 60, 49, 92, 27, 208, 78, 211, 249, 220, 249, 230, 202, 108, 103, 184, 62], [61, 71, 24, 123, 109, 255, 190, 75, 165, 30, 35, 203, 181, 22, 89, 191, 170, 89, 215, 255, 123, 130, 145, 156, 242, 41, 143, 38, 192, 197, 176, 252, 34, 96, 135, 156, 159, 196, 176, 113, 51, 195, 236, 117, 94, 98, 6, 137, 147, 91, 96, 9, 101, 0, 125, 41, 245, 79, 240, 115, 103, 62, 66, 202, 170, 190, 155, 177, 223, 158, 145, 202, 207, 110, 83, 186, 231, 88, 24, 63, 220, 207, 115, 87, 72, 141, 143, 224, 78, 192, 113, 10, 80, 230, 184, 117, 234, 237, 67, 80, 11, 238, 239, 12, 34, 246, 153, 202, 16, 240, 127, 214, 178, 2, 234, 117, 197, 246, 248, 66, 55, 147, 179, 42, 235, 82, 82, 231, 102, 207, 125, 109, 197, 221, 43, 99, 118, 211, 218, 212, 197, 78, 60, 37, 114, 159, 41, 63, 161, 107, 116, 48, 6, 181, 147, 143, 14, 112, 37, 234, 243, 14, 106, 93, 86, 164, 120, 141, 103, 231, 57, 166, 30, 244, 5, 137, 177, 154, 197, 169, 146, 242, 213, 73, 59, 95, 53, 112, 239, 189, 112, 140, 21, 57, 78, 6, 58, 186, 125, 46, 184, 197, 173, 132, 81, 114, 101, 76, 116, 54, 58, 72, 148, 227, 72, 112, 32, 65, 96, 186, 203, 213, 158, 152, 126, 0, 228, 14, 244, 250, 36, 206, 168, 174, 99, 11, 28, 132, 152, 68, 19, 29, 240, 102, 49, 210, 12, 208, 153, 87, 10, 214, 172, 2, 50, 62, 133, 9, 245, 236, 6, 155, 251, 133, 84, 32, 254, 234, 248, 115, 214, 10, 210, 9, 124, 168, 115, 18, 102, 107, 96, 118, 175, 162, 181, 170, 65, 160, 105, 46, 227, 33, 48, 179, 102, 13, 219, 233, 161, 7, 175, 135, 171, 38, 69, 139, 219, 129, 167, 7, 64, 201, 232, 49, 134, 34, 23, 212, 242, 180, 230, 29, 103, 5, 246, 215, 30, 177, 107, 201, 12, 107, 33, 175, 53, 235, 34, 156, 227, 5, 38, 62, 91, 194, 135, 5, 44, 105, 30, 243, 194, 115, 143, 24, 43, 102, 42, 159, 9, 204, 96], [130, 254, 178, 242, 61, 86, 17, 235, 34, 0, 18, 246, 5, 239, 55, 216, 22, 138, 62, 245, 79, 248, 2, 128, 104, 156, 248, 111, 174, 6, 90, 189, 76, 220, 242, 136, 253, 248, 135, 145, 174, 200, 140, 197, 255, 71, 252, 165, 201, 198, 250, 75, 160, 168, 95, 140, 240, 162, 93, 191, 111, 186, 110, 68, 51, 143, 231, 151, 16, 234, 188, 114, 222, 46, 252, 42, 31, 125, 176, 202, 24, 178, 73, 164, 217, 96, 40, 89, 65, 106, 140, 102, 211, 64, 242, 188, 104, 224, 9, 167, 84, 198, 198, 20, 9, 83, 54, 179, 177, 148, 51, 150, 227, 248, 166, 53, 157, 143, 134, 50, 27, 253, 102, 124, 143, 144, 206, 134, 194, 149, 18, 127, 235, 178, 225, 114, 242, 177, 55, 37, 109, 69, 121, 186, 64, 73, 102, 125, 23, 131, 13, 52, 255, 87, 53, 232, 63, 240, 229, 190, 201, 201, 153, 232, 109, 190, 64, 206, 160, 159, 182, 217, 219, 20, 214, 23, 72, 55, 19, 218, 83, 218, 204, 225, 102, 191, 91, 32, 177, 16, 65, 96, 1, 103, 51, 106, 55, 244, 146, 118, 181, 51, 32, 179, 168, 16, 135, 224, 59], [35, 239, 137, 36, 106, 189, 60, 102, 53, 101, 206, 72, 21, 7, 53, 254, 86, 178, 177, 51, 174, 172, 97, 46, 182, 4, 105, 177, 225, 35, 167, 197, 104, 227, 175, 58, 81, 55, 131, 134, 140, 81, 254, 209, 253, 176, 65, 238, 176, 38, 24, 122, 10, 13, 240, 36, 107, 255, 73, 22, 247, 114, 97, 188, 149, 40, 75, 238, 187, 45, 19, 78, 77, 115, 124, 182, 117, 241, 142, 1, 173, 135, 105, 27, 119, 188, 56, 115, 236, 190, 103, 95, 5, 58, 56, 104, 128, 142, 125, 135, 221, 94, 127, 30, 111, 52, 197, 51, 32, 205, 131, 27, 248, 32, 40, 137, 153, 225, 98, 7, 86, 243, 14, 137, 170, 109, 128, 207, 133, 86, 64, 231, 235, 140, 252, 220, 192, 242, 216, 238, 88, 199, 218, 217, 144, 250, 205, 135, 100, 211, 70], [112, 90, 229, 174, 174, 211, 198, 152, 124, 165, 193, 186, 216, 193, 251, 237, 189, 92, 67, 57, 3, 235, 20, 129, 172, 241, 141, 110, 159, 67, 251, 122, 68, 41, 60, 244, 103, 60, 150, 230, 118, 181, 255, 227, 231, 65, 173, 18, 81, 0, 65, 182, 157, 181, 47, 73, 182, 55, 163, 242, 254, 93, 75, 140, 58, 64, 137, 38, 106, 168, 80, 173, 190, 77, 113, 203, 115, 92, 45, 75, 218, 70, 90, 166, 31, 87, 40, 113, 26, 79, 36, 57, 153, 68, 111, 43, 63, 249, 83, 100, 50, 244, 44, 33, 5, 213, 111, 157, 255, 130, 161, 165, 31, 15, 95, 234, 142, 163, 114, 105, 208, 48, 108, 122, 116, 82, 125, 76, 178, 124, 141, 154, 93, 210, 228, 36, 175, 236, 185, 111, 155, 58, 59, 162, 79, 66, 223, 144, 157, 70, 246, 139, 247, 45, 79, 191, 63, 92, 103, 136, 254, 226, 253, 138, 203, 23, 5, 215, 30, 204, 128, 179, 152, 194, 177, 143, 207, 84, 127, 14, 135, 146, 54, 127, 147, 245, 98, 26, 113, 146, 222, 171, 24, 78, 184, 233, 57, 104, 178, 89, 243, 112, 81, 44, 227, 161, 28, 168, 32, 67, 13, 83, 176, 246, 213, 136, 7, 55, 184, 69, 91, 44, 40, 81, 112, 173, 3, 163, 13, 94, 196, 241, 238, 90, 212, 188, 189, 212, 131, 163, 73, 54, 102, 148, 83, 76, 99, 109, 3, 245, 162, 155, 210, 99, 40, 28, 85, 35, 37, 214, 40, 136, 130, 139, 61, 154, 248, 144, 161, 187, 162, 173, 50, 255, 114, 132, 102, 127, 50, 142, 59, 8, 120, 167, 159, 96, 157, 113, 87, 57, 249, 64, 88, 112, 156, 21, 143, 156, 36, 132, 169, 144, 227, 16, 70, 88, 81, 92, 123, 206, 46, 120, 25, 42, 80, 237, 227, 50, 124], [235, 199, 165, 102, 222], [28, 48, 159, 252, 23, 42, 185, 175, 45, 40, 75, 116, 215, 39, 143, 136, 0, 109, 23, 202, 94, 91, 102, 132, 79, 84, 247, 114, 187, 143, 53, 2, 76, 125, 195, 4, 31, 133, 205, 108, 215, 68, 71, 37, 114, 50, 60, 14, 123, 66, 223, 219, 195, 181, 129, 44, 156, 198, 62, 169, 225, 236, 0, 79, 215, 227, 180, 76, 199, 139, 82, 247], [243, 65, 114, 30, 247, 121, 244, 14, 57, 219, 190, 44, 102, 162, 213, 62, 19, 144, 221, 7, 161, 128, 68, 238, 166, 197, 166, 146, 62, 2, 199, 145, 40, 206, 204, 184, 26, 61, 205, 102, 194, 31, 170, 250, 140, 187, 19, 214, 169, 208, 3, 113, 72, 208, 220, 253, 131, 246, 26, 99, 78, 171, 192, 130, 178, 105, 85, 75, 181, 208, 184, 56, 244, 134, 160, 182, 113, 69, 222, 218, 45, 43, 253, 226, 39, 35, 144, 165, 219, 208, 213, 165, 148, 28, 185, 103, 198, 246, 160, 119, 32, 218, 44, 230, 131, 233, 124, 195, 10, 51, 6, 123, 175, 106, 73, 160, 39, 175, 3, 34, 209, 103, 146, 158, 86, 120, 204, 87, 26, 109, 10, 203, 225, 97, 161, 184, 81, 224, 87, 81, 222, 248, 6, 98, 245, 186, 169, 125, 70, 204, 166, 90, 7, 87, 115, 13, 142, 57, 184, 4, 166, 224, 162, 196, 90, 148, 192, 111, 103, 36, 224, 95, 125, 50, 143, 180, 27, 190, 52, 144, 75], [188, 41, 140, 167, 40, 197, 46, 65, 42, 103, 7, 49, 252, 62, 141, 100, 70, 45, 8, 43, 207, 169, 16, 245, 51, 38, 94, 19, 242, 255, 39, 253, 207, 28, 123, 160, 191, 132, 167, 10, 73, 129, 201, 232, 139, 239, 72, 72, 175, 8, 110, 116, 27, 159, 112, 160, 93, 69, 207, 64, 197, 124, 231, 138, 87, 116, 132, 237, 78, 216, 122, 94, 162, 34, 236, 129, 27, 249, 186, 1, 164, 13, 4, 176, 210, 247, 189, 134, 71, 215, 224, 184, 129, 39, 250, 167, 69, 12, 250, 207, 223, 182, 38, 195, 111, 15, 74, 8, 208, 1, 235, 47, 105, 160, 100, 237, 83, 192, 47, 35, 167, 60, 28, 93, 100, 231, 186, 29, 245, 54, 184, 77, 162, 194, 50, 201, 226, 198, 62, 46, 83, 51, 82, 175, 134, 52, 32, 55, 152, 222, 46, 145, 182, 141, 192, 84, 174, 182, 138, 213, 33, 244, 240, 155, 238, 83, 112, 51, 88, 62, 226, 101, 151, 45, 103, 185, 48, 53, 217, 220, 209, 193, 102, 189, 144, 155, 207, 215, 53, 250, 190, 61, 92, 127, 165, 70, 42, 18, 13, 237, 195, 42, 41, 128, 62, 39, 141, 218, 217, 15, 170, 55, 220, 0, 181, 61, 71, 169, 171, 149, 234, 196, 227, 47, 93, 53, 68, 112, 35, 230, 221, 40, 227, 28, 27, 146, 168, 249, 234, 158, 130, 194, 28, 201, 227, 80, 39, 42, 223, 235, 46, 50, 249, 165, 11, 80, 110, 91, 255, 127, 242, 233, 100, 1, 95, 75, 27, 191, 123, 131, 22, 59, 226, 59, 252, 43, 61, 212, 120, 90, 207, 179, 242, 73, 160, 56, 51, 230, 86, 69, 96, 36, 237, 78, 185, 168, 245, 12, 151, 165, 145, 153, 16, 175, 252, 57, 240, 56, 131, 69, 139, 151, 17, 45, 174, 149, 248, 224, 58, 0, 181, 3, 254, 9, 204, 165, 51, 188, 171, 6, 13, 99, 201, 58, 98, 144, 243, 80, 247, 109, 13, 167, 14, 99, 137, 174], [14, 66, 251, 100, 28, 56, 147, 157, 25, 3, 79, 136, 130, 81, 229, 122, 119, 201, 106, 117, 61, 233, 173, 65, 198, 165, 186, 30, 124, 103, 105, 53, 118, 22, 254, 179, 106, 129, 173, 88, 101, 75, 4, 42, 7, 158, 154, 217, 107, 187, 198, 53, 205, 46, 164, 182, 25, 243, 126, 145, 249, 82, 9, 237, 123, 81, 15, 54, 112, 83, 101, 31, 23, 179, 41, 216, 93, 31, 124, 171, 158, 34, 171, 48, 178, 183, 73, 154, 17, 147, 184, 1, 102, 77, 177, 90, 11, 220, 214, 0, 144, 239, 34, 144, 42, 75, 1, 59, 184, 169, 253, 219, 13, 43, 108, 57, 138, 138, 173, 236, 13, 88, 74, 14, 250, 206, 51, 237, 188], [209, 51, 180, 217, 98, 76, 162, 244, 174, 158, 107, 62, 104, 96, 24, 6, 99, 195, 219, 215, 172, 90, 159, 156, 250, 24, 176, 254, 113, 63, 39, 171, 35, 108, 60, 78, 197, 255, 133, 66, 114, 233, 57, 151, 40, 216, 80, 95, 7, 251, 240, 145, 179, 87, 9, 70, 7, 143, 239, 66, 131, 243, 239, 58, 189, 160, 17, 130, 166, 73, 133, 56, 182, 38, 204, 157, 88, 27, 44, 33, 54, 208, 206, 237, 94, 220, 132, 212, 127, 30, 67, 8, 160, 179, 1, 238, 165, 152, 92, 208, 19, 97, 238, 33, 98, 202, 205, 204, 189, 226, 192, 86, 41, 86, 156, 2, 90, 43, 207, 205, 65, 103, 185, 60, 186, 166, 25, 80, 96, 126, 176, 219, 24, 47, 0, 135, 204, 189, 231, 82, 152, 79, 211, 79, 19, 99, 177, 164, 125, 99, 9, 226, 210, 102, 35, 248, 155, 193, 217, 7, 235, 168, 85, 71, 37, 161, 141, 77], [223, 176, 115, 171, 226, 158, 169, 222, 177, 104, 201, 59, 149, 153, 74, 139, 98, 111, 155, 165, 232, 101, 232, 62, 82, 162, 142, 220, 52, 99, 80, 169, 127, 122, 184, 84, 11, 78, 155, 145, 39, 154, 168, 6, 10, 42], [248, 122, 166, 137, 141, 36, 181, 177, 3, 236, 212, 245, 110, 218, 231, 225, 91, 246, 6, 95, 203, 51, 169, 96, 8, 137, 42, 158, 25, 70, 230, 207, 8, 121, 98, 213, 53, 178, 7, 222, 199, 214, 34, 13, 48, 175, 83, 199, 228, 29, 134, 37, 255, 174, 155, 4, 82, 250, 231, 122, 84, 231, 38, 240, 97, 156, 42, 207, 100, 225, 203, 55, 97, 146, 8, 245, 53, 83, 88, 54, 18, 165, 224, 59, 160, 117, 113, 30, 31, 15, 65, 100, 16, 70], [239, 233, 220, 214, 179, 164, 109, 75, 226, 158, 121, 100, 168, 206, 114, 58, 104, 206, 11, 162, 144, 191, 64, 148, 100, 224, 99, 105, 225, 242, 206, 95, 165, 138, 210, 136, 215, 175, 62, 36, 208, 177, 41, 4, 59, 219, 194, 241, 23, 238, 229, 177, 36, 148, 19, 139, 92, 2, 22, 36, 30, 158, 122, 121, 144, 152, 80, 32, 36, 73, 3, 57, 52, 252, 194, 141, 103, 53, 17, 223, 113, 200, 136, 134, 172, 51, 184, 248, 38, 3, 65, 206, 91, 92, 221, 57, 118, 118, 208, 59, 60, 161, 184, 183, 3, 12, 102, 117, 97, 22, 172, 199, 93, 245, 20, 100, 114, 2, 78, 21, 232, 55, 37, 179, 205, 179, 56, 159, 241, 158, 27, 234, 74, 87, 181, 107], [38, 227, 231, 253, 205, 36, 48, 183, 230, 5, 160, 20, 218, 42, 29, 201, 107, 98, 185, 229, 126, 22, 117, 60, 32, 7, 160, 63, 208, 81, 99, 190, 164, 69, 96, 116, 251, 34, 191, 122, 7, 1, 195, 133, 143, 102, 16, 247, 14, 122, 104, 185, 176, 128, 29, 62, 76, 180, 138, 69, 86, 52], [34, 43, 120, 143, 195, 89, 19, 75, 167, 70, 200, 242, 108, 227, 121, 235, 205, 23, 211, 17, 156, 116, 187, 147, 143, 147, 227, 162, 209, 71, 156, 103, 49, 86, 75, 58, 108, 90, 165, 166, 153, 139, 167, 249, 130, 138, 170, 221, 176, 246, 142, 228, 171, 246, 177, 145, 113, 163, 55, 113, 216, 214, 185, 194, 251, 90, 198, 71, 15, 15, 121, 206, 221, 13, 26, 159, 39, 173, 50, 78, 161, 39, 187, 208, 89, 188, 191, 181, 206, 86, 141, 239, 136, 96, 76, 231, 1, 40, 190, 246, 143, 84, 150, 6, 155, 136, 18, 35, 237], [28, 228, 180, 138, 254, 1, 144, 171, 204, 73, 183, 195, 95, 171, 158, 101, 13, 2, 206, 222, 205, 192, 137, 9, 130, 35, 3, 68, 103, 13, 82, 185, 154, 235, 99, 100, 172, 81, 156, 55, 217, 157, 138, 63, 33, 122, 222, 86, 37, 100, 123, 51, 100, 124, 67, 240, 128, 159, 249, 106, 45, 66, 247, 99, 244, 180, 210, 128, 219, 3], [222, 10, 208, 14, 250, 163, 177, 254, 83, 180, 209, 98, 165, 133, 80, 247, 60, 34, 16, 185, 71, 161, 142, 222, 205, 210, 213, 143, 131, 117, 200, 225, 223, 206, 234, 173, 11, 202, 130, 178, 236, 174, 146, 246, 154, 28, 213, 27, 67, 6, 40, 103, 15, 167, 222, 114, 189, 219, 72, 248, 58, 66, 212, 115, 22, 152, 107, 226, 232, 111, 181, 224, 181, 54, 2, 48, 100, 26, 112, 15, 208, 150, 237, 23, 146, 117, 216, 239, 1, 207, 233, 222, 172, 199, 107, 214, 88, 66, 237, 249, 208, 198, 33, 74, 32, 187, 96, 224, 154, 160, 44, 81, 158, 115, 115, 255, 75, 156, 220, 50, 0, 24, 203, 103, 146, 85, 83, 13, 64, 250, 254, 4, 85, 187, 123, 94, 106, 106, 15, 66, 110, 185, 138, 115, 211, 68, 247, 229, 105, 177, 52, 83, 124, 252, 178, 77, 243, 78, 73, 95, 223, 48, 221, 26, 208, 244, 50, 210, 138, 66, 91, 199, 8, 221, 236, 109, 64, 177, 164, 155, 110, 130, 245, 30, 215, 166, 0, 252, 241, 130, 49, 127, 115, 97, 53, 155, 146, 167, 126, 114, 160, 87, 142, 125, 2, 96, 99, 39, 20, 224, 166, 168, 107, 176, 240, 89, 169, 25, 197, 155, 226, 67, 69, 59, 116, 68, 44, 255, 158, 183, 81, 148, 10, 231, 85, 179, 163, 60, 42, 201, 46, 17, 12, 179, 227, 83, 17, 172, 141, 243, 4, 183, 113, 26, 124, 87, 221, 247, 202, 186, 3, 62, 240, 220, 149, 114, 41, 178, 158, 88, 63, 95, 72, 252, 122, 218, 139, 78, 110, 174, 50, 179, 113, 120, 7, 213, 69, 180, 39, 23, 11, 241, 72, 219, 96, 198, 153, 106, 190, 237, 80, 77, 234, 34, 183, 246, 145, 159, 163, 148, 81, 136, 125, 251, 25, 57, 79, 174, 185, 16, 185, 221, 22, 247, 56, 15, 7, 103, 2, 137, 35, 61], [67, 191, 21, 212, 182, 120, 140, 14, 130, 239, 86, 8, 169, 229, 108, 96, 198, 170, 59, 24, 227, 198, 9, 245, 105, 87, 70, 126, 181, 154, 108, 101, 136, 34, 242, 54, 199, 104, 142, 115, 207, 240, 83, 206, 25, 33, 203, 23, 168, 110, 203, 216, 161, 237, 228, 105, 221, 92, 184, 160, 80, 252, 155, 37, 207, 144, 67, 201, 175, 61, 3, 199, 116, 195, 62, 118, 16, 180, 57, 76, 23, 151, 187, 224, 231, 2, 53, 98, 46, 196, 147, 244, 144, 184, 218, 145, 63, 78, 154, 126, 93, 5, 137, 178, 148, 70, 36, 4, 74, 192, 164, 154, 59, 221, 126, 144], [96, 155, 236, 39, 236, 10, 118, 201, 186, 90, 13, 17, 236, 102, 3, 167, 101, 47, 248, 171, 85, 182, 98, 75, 44, 33, 3, 137, 228, 136, 67, 19, 99, 58, 113, 46, 185, 217, 49, 98, 68, 162, 146, 65, 211, 235, 27, 66, 107, 230, 186, 104], [240, 85, 22, 200, 154, 153, 64, 207, 24, 20, 239, 170, 88, 98, 7, 57, 149, 145, 27, 255, 168, 162, 241, 157, 14, 161, 214, 83, 204, 50, 44, 117, 90, 65, 174, 164, 146, 103, 121, 7, 30, 171, 47, 167, 83, 7, 221], [163, 82, 55, 186, 243, 35, 136, 100, 74, 20, 64, 137, 128, 29, 211, 104, 16, 118, 74, 144, 228, 178, 64, 64, 174, 220, 250, 88, 224, 69, 24, 49, 62, 7, 131, 126, 31, 48, 131, 0, 108, 163, 157, 102, 114, 199, 156, 20, 225, 94, 166, 147, 191, 99, 248, 97, 140, 102, 153, 143], [45, 42, 255, 195, 244, 63, 94, 15, 135, 163, 217, 75, 129, 8, 90, 74, 205, 30, 20, 177, 223, 220, 95, 169, 246, 238, 43, 126, 119, 192, 241, 123, 221, 228, 221, 152, 209, 165, 75, 214, 73, 3, 161, 161, 186, 108, 77, 78, 193, 180, 108, 205, 176, 132, 82, 127, 204, 68, 114, 161, 64, 244, 200, 81, 155, 228, 162, 219, 215, 184, 117, 195, 55, 61, 15, 138, 230, 15, 31, 10, 141, 133, 7, 98, 10, 235, 135, 200, 148, 113, 34, 42, 253, 52, 137, 248, 87, 163, 215, 129, 218, 157, 255, 49, 209, 52, 251, 69, 21, 172, 194, 203, 40, 180, 193, 17, 29, 239, 38, 152, 230, 173, 86, 106, 247, 120, 202, 248, 47, 226, 27, 251, 9, 11, 67, 62, 121, 225, 159, 208, 142, 187, 94, 242, 199, 93, 101, 113, 61, 83, 35, 181, 65, 101, 78, 244, 28, 30, 190, 40, 138, 77, 13, 152, 183, 28, 243, 192, 23, 146, 61, 8, 112, 93, 33, 74, 161, 13, 246, 86, 215, 23, 154, 210, 242, 249, 30, 20, 41, 131, 19, 110, 195, 173, 146, 129, 52, 120, 66, 107, 251, 83, 216, 75, 228, 25, 226, 99, 195, 248, 86, 134, 77, 195, 205, 66, 242, 185, 220, 168, 5, 86, 175, 81, 178, 53, 33, 194, 174, 106, 124, 62, 185, 242, 176, 71, 121, 128, 88, 78, 201, 149, 193, 35, 39, 166, 249, 125, 27, 129, 26, 126, 0, 79, 234, 110, 98, 209, 132, 134, 123, 78, 58, 88, 8, 51, 217, 136, 96, 80, 228, 18, 212, 34, 168, 139, 109, 235, 124, 124, 58, 149, 17, 76, 166, 192, 26, 235, 251, 102, 193, 190, 31, 254, 253, 71, 240, 192, 114, 119, 23, 195, 27, 190, 219, 129, 48, 226, 67, 54, 240, 222, 225, 37, 111, 216, 112, 111, 80, 59, 216, 22, 204, 113, 207, 93, 47, 203, 220, 218, 229, 40, 14, 218, 129, 136, 56, 13, 245, 237, 216, 210, 0, 51, 102, 55, 81, 238, 140, 92, 81], [183, 115, 88, 117, 243, 59, 247, 69, 102, 154, 225, 87, 177, 38, 53, 55, 150, 144, 117, 248, 96, 230, 74, 58, 148, 217, 207, 137, 147, 159, 214, 154, 90, 130, 194, 139, 139, 86, 31, 53, 13, 211, 182, 51, 241, 163, 66, 97, 85, 246, 239, 219, 102, 53, 42, 64, 197, 74, 97, 245, 15, 21, 228, 187, 112, 162, 222, 29, 234, 6, 100, 212, 239, 192, 28, 74, 19, 166, 172, 5, 249, 53, 134, 140, 236, 79, 157, 243, 1, 75, 112, 92, 162, 62, 121, 211, 151, 67, 180, 146, 184, 112, 242, 212, 130, 142, 153, 16, 235, 72, 112, 85, 52, 166, 204, 165, 175, 20, 252, 97, 105, 87, 170, 235, 194, 93, 30, 70, 51, 104, 212, 199, 35, 158, 218, 196, 53, 120, 163, 168, 123, 172, 20, 246, 121, 106, 218, 149, 237, 210, 33, 103, 51, 90, 83, 132, 153, 240, 182, 159, 91, 68, 44, 182, 80, 60, 203, 4, 219, 198, 92, 241, 47, 132, 215, 99, 179, 124, 109, 200, 169, 73, 120, 38, 8, 26, 192, 76, 253, 58, 227, 247, 122, 146, 8, 36, 252, 110, 36, 19, 156, 47, 168, 85, 86, 12, 189, 235, 241, 246, 72, 116, 226, 220, 209, 11, 200, 120, 178, 65, 101, 187, 176, 26, 14, 31, 190, 64, 158, 15, 166, 129, 80, 217, 212, 183, 185, 55, 49, 178, 80, 62, 211, 207, 25, 219, 203, 252, 245, 102, 89, 209, 226, 112, 239, 98, 149, 137, 245, 114, 190, 170, 236, 25, 218], [243, 148, 96, 72, 138, 20, 162, 177, 118, 33, 154, 17, 39, 121, 212, 254, 7, 227, 207, 38, 195, 177, 159, 224, 1, 171, 223, 170, 61, 234, 97, 93, 174, 87, 234, 92, 118, 149, 111, 189, 173, 111, 199, 66, 38, 152, 118, 33, 240, 168, 142, 186, 224, 32, 93, 1, 7, 203, 175, 58, 26, 192, 171, 186, 176, 101, 240, 233, 205, 184, 227, 16, 64, 140, 169, 88, 197, 230, 68, 230, 253, 228, 17, 172, 218, 84, 178, 229, 64, 184, 75, 245, 212, 101, 198, 127, 154, 88, 110, 222, 213, 130, 188, 97, 113, 205, 18, 136, 26, 82, 220, 27, 2, 218, 132, 205, 131, 234, 2, 147, 101, 2, 194, 223, 162, 84, 9, 76, 98, 201, 6, 114, 176, 79, 24, 239, 3, 109, 196, 141, 224, 229, 211, 250, 193, 86, 15, 130, 251, 14, 41, 101, 63, 185, 206, 251, 13, 74, 118, 233, 208, 112, 83, 192, 108, 114, 253, 138, 30, 203, 226, 218, 147, 55, 132, 78, 155, 209, 100, 182, 4, 70, 62, 46, 34, 170, 143, 3, 129, 86, 229, 64, 107, 103, 158, 238, 95, 196, 219, 132, 222, 36, 167, 37, 92, 215, 199, 206, 253, 218, 50, 245, 84, 108, 114, 188, 81, 201, 85, 128, 116, 179, 232, 241, 59, 66, 128, 127, 216, 32, 198, 41, 191, 255, 99, 48, 248, 188, 109, 239, 84, 85, 73, 87, 18, 124, 247, 5, 179, 92, 93, 77, 217, 114, 136, 41, 209, 173, 74, 252, 34, 16, 174, 214, 45, 132, 227, 215, 141, 117, 5, 17, 233, 85, 25, 164, 236, 147, 21, 127, 156, 64, 227, 143, 14, 175, 185, 109, 168, 108, 164, 210, 212, 26, 33, 61, 130, 63, 81, 191, 34, 160, 77, 225, 15, 207, 139, 40, 203, 212, 26, 37, 108, 203, 112, 37, 164, 164, 61, 223, 73, 38, 143, 96, 34, 169, 198, 185, 106, 190, 22, 25, 102], [248, 127, 98, 168, 1, 67, 190, 233, 176, 217, 139, 91, 41, 58, 85, 128, 244, 214, 142, 9, 228, 245, 186, 33, 83, 82, 218, 106, 11, 218, 10, 29, 64, 116, 157, 199, 214, 221, 43, 242, 119, 233, 180, 88, 173, 177, 173, 182, 7, 127, 198, 86, 157, 200, 83, 40, 27, 64, 164, 32, 58, 157, 79, 82, 204, 78, 85, 16, 185, 220, 29, 75, 96, 4, 95, 221, 166, 193, 217, 247, 162, 85, 77, 165, 91, 101, 64, 63, 44, 245, 239, 141, 87, 17, 237, 42, 59, 33, 173, 52, 76, 35, 166, 42, 228, 125, 120, 98, 200, 113, 105, 168, 210, 75, 147, 211, 110, 85, 4, 39, 234, 173, 5, 110, 119, 238, 215, 227, 92, 147, 117, 225, 65, 44], [108, 82, 105, 170, 39, 55, 151, 29, 218, 195, 29, 190, 116, 37, 234, 152, 199, 127, 138, 176, 114, 237, 54, 93, 142, 218, 110, 83, 129, 30, 40, 98, 220, 86, 247, 60, 126, 32, 206, 142, 247, 208, 128, 126, 233, 155, 193, 239, 125, 106, 199, 122, 98, 189, 199, 219, 252, 56, 108, 57, 180, 229, 214, 198, 213, 233, 144, 198, 184, 45, 65, 85, 41, 132, 238, 215, 176, 19, 99, 138, 227, 245, 17, 196, 64, 9, 240, 250, 134, 4, 81, 182, 31, 9, 162, 227, 145, 182, 71, 55, 66, 151, 106, 240, 53, 51, 230, 12, 157, 91, 126, 118, 173, 145, 94, 230, 228, 103, 64, 171, 0, 17, 121, 157, 180, 7, 89, 142, 209, 145, 158, 213, 248, 93, 65, 54, 196, 45, 108, 94, 224, 82, 81, 26, 92, 43, 231, 213, 191, 143, 54, 69, 88, 66, 147, 193, 141, 90, 218, 206, 210, 205, 63, 192, 235, 231, 48, 166, 197, 106, 112, 6, 109, 139, 141, 209, 63, 233, 175, 175, 143, 33, 112, 30, 154, 178, 20, 32, 39, 97, 2, 0, 51, 240, 184, 98, 47, 116, 176, 169, 34, 143, 120, 86, 240, 237, 58, 114, 157, 137, 30, 13, 188, 11, 162, 210, 58, 13, 166, 207, 106, 242, 210, 22, 5, 45, 66, 41, 177, 200, 44, 30, 154, 108, 62, 46, 183, 121, 89, 63, 126, 255, 106, 170, 243, 222, 37, 19, 56, 113, 7, 81, 195, 158, 148, 56, 249, 111, 173, 48, 33, 46, 246, 26, 37, 249, 175, 126, 97, 11, 155, 165, 108, 29, 14, 110, 192, 93, 254, 91, 108, 139, 50, 169, 49, 206, 236, 229, 126, 201, 192, 15, 33, 94, 253, 63, 59, 233], [28, 184, 200, 200, 91, 189, 37, 234, 226, 92, 31, 165, 119, 118, 86, 90, 43, 98, 252, 194, 76, 241, 244, 144, 108, 210, 255, 54, 86, 223, 165, 178, 25, 78, 242, 23, 35, 217, 172, 108, 179, 224, 166, 203, 252, 28, 183, 17, 202, 111, 240, 26, 78, 129, 9, 20, 92, 131, 190, 199, 222, 106, 223, 109, 15, 61, 56, 225, 59, 62, 2, 162, 4, 196, 195, 7, 43, 50, 169, 90, 205, 109, 211, 79, 170, 1, 80, 85, 96, 45, 200, 147, 120, 4, 174, 233, 99, 187, 90, 75, 108, 113, 73, 117, 141, 0, 65, 100, 243, 184, 107, 24, 78, 236, 250, 193, 71, 242, 39, 32, 124, 220, 198, 30, 42, 65, 29, 34, 54, 93, 24, 239, 112, 131, 237, 225, 247, 175, 6, 60, 24, 157, 231, 48, 103, 145, 11, 205, 65, 188, 188, 117, 187, 151, 234, 168, 168, 219, 249, 77, 78, 128, 203, 130, 39, 37, 75, 41, 204, 57, 84, 27, 32, 244, 16, 143, 17, 229, 52, 40, 128, 81, 165, 109, 175, 78, 78, 167, 0, 178, 30, 30, 221, 229, 54, 124, 195, 59, 7, 80, 212, 88, 104, 109, 156, 72, 81, 74, 136, 192, 119, 57, 193, 148, 212, 33, 77, 228, 161, 205, 95, 248, 126, 135, 95, 54, 2, 1, 0, 158, 105, 134, 151, 11, 159, 54, 139, 222, 116, 152, 25, 63, 113, 153, 215, 82, 63, 106, 227, 31, 100, 7, 139, 45, 217, 129, 240, 154, 61, 130, 102, 172, 233, 183, 86, 123, 178, 93, 231, 240, 155, 68], [6, 12, 193, 120, 233, 135, 72, 7, 230, 95, 119, 200, 153, 241, 200, 17, 105, 165, 114, 38, 216, 201, 185, 250, 144, 15, 137, 102, 224, 43, 132, 16, 14, 56, 225, 234, 33, 92, 91, 194, 207, 77, 171, 22, 39, 245, 23, 86, 83, 7, 95, 20, 241, 155, 54, 189, 242, 51, 21, 228, 95, 228, 203, 117, 233, 192, 157, 213, 53, 75, 56, 15, 104, 8, 4, 32, 62, 121, 129, 24, 245, 172, 220, 192, 82, 220, 206, 76, 83, 17, 224, 42, 20, 110, 97, 46, 89, 79, 159, 227, 196, 205, 221, 183, 101, 197, 197, 228, 9, 104, 202, 58, 216, 22, 24, 110, 108, 119, 134, 110, 80, 238, 221, 137, 125, 107, 85, 140, 49, 140, 96, 233, 183, 2, 254, 38, 144, 254, 66, 152, 140, 143, 233, 74, 31, 184, 43, 221, 207, 158, 248, 216, 23, 205, 43, 194, 85, 33, 67, 191, 225, 240, 181, 225, 9, 251, 65, 183, 231, 99, 187, 134, 65, 27, 177, 26, 222, 33, 128, 128, 86, 173, 217, 243, 164, 44, 247, 138, 39, 110, 145, 108, 244, 229, 23, 229, 163, 129, 72, 222, 170, 2, 51, 149, 175, 31, 204, 130, 151, 146, 38, 56, 65, 221, 112, 78, 55, 106, 125, 121, 154, 142, 196, 54, 156, 252, 156, 83, 109, 77, 5, 132, 158, 194, 118, 195, 37, 109, 190, 242, 135, 148, 156, 163, 74, 113, 198, 196, 32, 143, 248, 117, 229, 179, 145, 200, 217, 112, 242, 244, 227, 151, 153, 155, 164, 159, 122, 10, 121, 10, 210, 88, 64, 12, 25, 104, 242, 130, 92, 252, 184, 117, 231, 62, 156, 124, 38, 169, 139, 115, 17, 227, 148, 202, 163, 91, 162, 127, 234, 133, 182, 181, 48, 19, 253, 133, 254, 57, 37, 10, 191, 157, 99, 204, 50, 55, 232, 241], [99, 205, 197, 211, 187, 51, 234, 55, 168, 191, 84, 84, 78, 190, 14, 217, 114, 118, 57, 63, 83, 167, 33, 194, 77, 162, 190, 37, 127, 240, 179, 81, 150, 181, 49, 77, 15, 153, 203, 163, 60, 167, 33, 154, 68, 123, 192, 226, 22, 120, 198, 24, 142, 177, 154, 16, 44, 160, 49, 59, 8, 152, 158, 186, 240, 214, 231, 184, 228, 13, 23, 221, 230, 236, 105, 69, 174, 252, 88, 160, 106, 235, 52, 77, 182, 88, 88, 240, 125, 139, 60, 197, 28, 64, 169, 93, 44, 176, 255, 169, 21, 64, 212, 209, 69, 129, 155, 146, 26, 127, 113, 199, 1, 18, 217, 237, 193, 183, 147, 24, 197, 206, 179, 208, 30, 102, 94, 199, 5, 85, 101, 112, 106, 162, 133, 187, 90, 8, 101, 225, 87, 28, 78, 71, 250, 95, 254, 19, 72, 196, 99, 239, 185, 141, 35, 30, 204, 100, 36, 109, 72, 70, 192, 224, 118, 106, 120, 255, 160, 153, 242, 154, 7, 157, 112, 45, 77], [74, 86, 193, 121, 178, 247, 144, 237, 157, 141, 150, 216, 236, 251, 148, 237, 76, 208, 27, 152, 127, 180, 234, 123, 124, 197, 194, 253, 124, 17, 246, 113, 178, 188, 100, 17, 44, 99, 235, 53, 37, 176, 141, 240, 147, 135, 224, 68, 202, 65, 228, 9, 254, 120, 72, 143, 175, 82, 160, 69, 133, 138, 91, 51, 90, 164, 21, 148, 133, 229, 62, 157, 233, 244, 24, 133, 193, 145, 28, 132, 150, 10, 72, 255, 166, 180, 126, 72, 126, 199, 83, 80, 107, 31, 137, 144, 199, 235, 100, 60, 174, 103, 118, 27, 245, 76, 133, 142, 171], [181, 138, 51, 46, 254, 70, 45, 249, 207, 50, 167, 93, 193, 220, 233, 196, 33, 2, 205, 9, 22, 184, 109, 31, 115, 0, 18, 138, 238, 106, 16, 216, 227, 0, 60, 215, 83, 177, 82, 64, 5, 131, 50, 224, 47, 129, 225, 24, 204, 194, 111, 189, 131, 198, 198, 99, 85, 173, 59, 247, 74, 230, 33, 74, 115, 238, 166, 112, 163, 52, 179, 184, 162, 77, 14, 225, 36, 137, 82, 240, 39, 230, 246, 44, 72, 211, 213, 193, 217, 173, 81, 111, 139, 102, 151, 120, 233, 75, 114, 15, 198, 244, 150, 239, 159, 60, 237, 162, 146, 243, 119, 141, 240, 122, 196, 159, 221, 113, 156, 91, 111, 151, 171, 92, 78, 204, 118, 122, 13, 62, 231, 141, 123, 200, 67, 223, 219, 220, 11, 65, 235, 239, 209, 6, 2, 5, 184, 35, 63, 29, 173, 139, 114, 244, 92, 75, 82, 98, 250, 203, 39, 209, 101, 24, 26, 198, 18, 219, 253, 4, 170, 216, 249, 15, 197, 88, 172, 7, 129, 117, 111, 122, 150, 47, 17, 3, 139, 36, 112], [53, 162, 37, 122, 19, 251, 16, 183, 16, 33, 110, 160, 136, 186, 7, 158, 104, 148, 163, 5, 154, 127, 110, 156, 64, 255, 102, 62, 119, 12, 219, 174, 145, 139, 198, 6, 190, 208, 56, 140, 72, 93, 41, 129, 255, 148, 224, 94, 151, 244, 207, 159, 79, 148, 6, 221, 222, 253, 227, 223, 65, 251, 113, 199, 55, 176, 177, 93, 122, 162, 36, 49, 8, 99, 66, 73, 221, 112, 129, 176, 43, 81, 10, 4, 251, 214, 149, 137, 119, 174, 148, 12, 46, 178, 51, 217, 73, 220, 17, 196, 45, 167, 241, 60, 188, 134, 20, 120, 89, 194, 3, 246, 108, 213, 107, 216, 141, 183, 175, 144, 11, 10, 76, 201, 78, 74, 107, 111, 180, 103, 218, 116, 131, 140, 78, 80, 34, 155, 122, 131, 225, 232, 25, 76, 103, 201, 5, 252, 175, 22, 50, 47, 173, 5, 63, 151, 230, 192, 195, 91, 82, 38, 80, 135, 174, 1, 68, 223, 199, 9, 223, 31, 182, 162, 17, 242, 202, 142, 172, 175, 2, 45, 5, 181, 251, 12, 179, 207, 85, 158, 110, 252, 248, 94, 217, 205, 129, 44, 158, 210, 163, 223, 200, 173, 196, 47, 84, 135, 169, 202, 63, 60, 47, 223, 148, 167, 52, 41, 118, 87, 139, 169, 236, 174, 150, 144, 21, 220, 122, 202, 235, 163, 61, 79, 230, 210, 211, 147, 0, 0, 186, 67, 66, 231, 242, 126, 4, 243, 254, 185, 248, 178, 220, 40, 158, 144, 61, 163, 224, 237, 168, 9, 211, 57, 202, 129, 51, 160, 244, 106, 180, 120, 9, 47, 88, 145, 149, 43, 38, 153, 153, 75, 101, 124, 35, 95, 93, 99, 135, 162, 56, 110, 222, 36, 93, 89, 77, 45, 174, 36, 65, 235, 219, 168, 95, 69, 182, 254, 180, 47, 110, 72, 101, 121, 13, 9, 225, 171], [217, 50, 10, 168, 146, 79, 61, 66, 188, 8, 232, 142, 224, 87, 198, 173, 199, 18, 77, 57, 146, 37, 148, 64, 119, 213, 225, 72, 157, 254, 181, 118, 233, 161, 239, 216, 11, 216, 176, 102, 221, 196, 37, 59, 197, 20, 125, 209, 248, 195, 137, 175, 170, 90, 132, 216, 56, 112, 249, 136, 29, 184, 12, 65, 55, 185, 19, 104, 255, 81, 127, 66, 70, 139, 168, 61, 136, 98, 119, 83, 116, 158, 239, 15, 173, 15, 199, 79, 68, 250, 141, 152, 110, 97, 197, 89, 255, 123, 214, 54, 169, 183, 193, 155, 154, 78, 218, 151, 201, 120, 235, 198, 167, 20, 25, 137, 199, 183, 39, 53, 44, 26, 0, 5, 187, 150, 73, 38, 167, 168, 88, 131, 117, 126, 207, 130, 16, 97, 116, 80, 22, 158, 163, 41, 176, 157, 57, 125, 53, 33, 67, 34, 119, 207, 222, 37, 40, 242, 243, 225, 108, 132, 181, 87, 148, 83, 235, 169, 70, 7, 199, 154, 222, 124, 255, 86, 252, 245, 25, 13, 56, 208, 116, 11, 238, 153, 35, 210, 205, 15, 247, 228, 196, 9, 172, 158, 159, 32, 151, 133, 240, 198, 227, 123, 70, 72, 230, 61, 174, 27, 52, 54, 53, 208, 20, 216, 16, 179, 127, 33, 26, 108, 33, 201, 169, 58, 95, 200, 34, 202, 111, 211, 156, 26, 209, 100, 100, 167, 53, 230, 97, 66, 28, 130, 91, 56, 40, 191, 28, 97, 183, 191, 198, 160, 150, 26, 205, 192, 125, 204, 160, 101, 116, 16, 207, 113, 120, 135, 50, 209, 227, 235, 137, 107, 80, 10, 7, 76, 72, 58, 164, 93, 22, 124, 1, 116], [52, 224, 143, 1, 127, 245, 153, 148, 8, 32, 20, 205, 145, 17, 212, 59, 147, 52, 160, 184, 60, 230, 182, 75, 211, 90, 212, 189, 243, 53, 29, 94, 30, 230, 131, 59, 192, 236, 44, 210, 4, 13, 120, 180, 38, 44, 158, 2, 196, 130, 111, 67, 119, 118, 113, 173, 65, 100, 60, 162, 13, 68, 222, 72, 234, 44, 229, 61, 58, 154, 25, 199, 220, 247, 223, 154, 253, 209, 192, 64, 220, 5, 1, 73, 66, 237, 103, 233, 61, 204, 176, 73, 89, 0, 19, 43, 7, 18, 237, 186, 193, 15, 194, 132, 8, 151, 181, 40, 233, 131, 41, 181, 164, 46, 20, 88, 250, 181, 179, 47, 155, 232, 245, 51, 3, 86, 69, 93, 114, 167, 35, 160, 101, 17, 57, 19, 12, 185, 192, 223, 177, 129, 185, 195, 34, 102, 141, 157, 124, 36, 140, 155, 116, 15, 95, 50, 151, 74, 124, 146, 96, 166, 205, 29, 162, 121, 137, 217, 19, 156, 45, 172, 99, 254, 144, 196, 118, 135, 31, 149, 31, 150, 35, 101, 130, 72, 64, 197, 3, 36, 224, 53, 55, 18, 63, 244, 55, 160, 159, 144, 71, 189, 184, 95, 22, 62, 94, 104, 223, 109, 88, 157, 242, 33, 171, 225, 251, 245, 56, 189, 106, 12, 113, 67, 48, 189, 217, 96, 133, 39, 247, 225, 10, 65, 199, 168, 49, 56, 223, 120, 170, 80, 3, 80, 0, 92, 114, 77, 118, 7, 250, 86, 190, 231, 33, 22, 185, 160, 224, 231, 172, 22, 247, 224, 95, 176, 67, 188, 179, 210, 12, 58, 244, 34, 234, 128, 183, 156, 38, 156, 11, 160, 43, 34, 102, 224, 186, 197, 97, 33, 136, 17, 219, 14, 246, 60, 209, 110, 199, 184, 158, 107, 140, 29, 224, 41, 254, 152, 167, 94, 232, 244, 170, 69, 222, 35, 100, 104, 149, 145, 67, 122, 88, 234, 111, 83, 1, 47, 141, 109, 226, 93, 121, 249, 210, 78, 43, 231, 33, 77, 10, 135, 230, 89, 65, 49, 182, 136, 238], [188, 254, 192, 65, 179, 4, 216, 46, 25, 54, 130, 148, 233, 132, 39, 202, 194, 185, 148, 125, 77, 32, 150, 165, 24, 144, 103, 182, 19, 50, 160, 53, 21, 26], [209, 61, 98, 0, 198, 69, 0, 111, 56, 201, 237, 87, 198, 209, 76, 46, 231, 212, 44, 141, 80, 92, 159, 229, 192, 47, 219, 100, 27, 19, 201, 147, 202, 216, 129, 28, 116, 166, 189, 223, 209, 81, 215, 43, 46, 163, 167, 252, 176, 136, 146, 148, 124, 46, 235, 11, 143, 15, 149, 0, 155, 36, 28, 227, 196, 42, 209, 174, 73, 62, 62, 56, 10, 170, 199, 154, 152, 228, 42, 45, 39, 106, 214, 0, 110, 171, 108, 41, 219, 186, 245, 28, 97, 99, 175, 46, 91, 49, 52, 130, 245, 155, 195, 221, 183, 178, 219, 159, 108, 52, 167, 140, 120, 20, 24, 54, 24, 37, 207, 89, 38, 215, 121, 12, 37, 26, 237, 34, 44, 255, 178, 228, 56, 53, 53, 238, 84, 10, 167, 10, 51, 113, 40, 96, 2, 251, 96, 8, 86, 24, 237, 87, 246, 75, 200, 227, 231, 22, 165, 35, 163, 114, 222, 137, 32, 180, 37, 181, 125, 6, 102, 128, 117, 159, 115, 21, 68, 190, 24, 223, 128, 111, 16, 117, 48, 158, 163, 7, 103, 122, 221, 150, 242, 141, 89, 246, 129, 223, 3, 116, 80, 119, 132, 116, 179, 42, 27, 213, 202, 201, 135, 234, 250, 27, 39, 199, 149, 88, 41, 155, 195, 37, 167, 115, 153, 37, 46, 98, 126, 77, 50, 22, 130, 188, 178, 107, 142, 121, 154, 242, 75, 31, 207, 206, 200, 160, 70, 72, 70, 188, 189, 218, 249, 209, 141, 12, 12, 205, 42, 13, 170, 109, 49, 115, 99, 42, 62, 221, 235, 205, 86, 213, 59, 113, 167, 69, 169, 52, 217, 48, 80, 197, 193, 175, 82, 133, 243, 183, 223, 249, 79, 133, 212, 85, 11, 120], [101, 11, 153, 170, 92, 6, 137, 77, 100, 126, 124, 8, 126, 10, 111, 119, 107, 111, 11, 109, 225, 186, 2, 135, 137, 12, 83, 58, 240, 45], [34, 238, 237, 142, 158, 48, 120, 2, 72, 120, 150, 69, 113, 254, 203, 174, 32, 12, 112, 178, 163, 84, 96, 216, 145, 72, 3, 148, 22, 109, 96, 235, 185, 116, 30, 150, 105, 67, 208, 191, 241, 179, 27, 111, 184, 61, 233, 129, 214, 137, 110, 228, 218, 163, 186, 96, 166, 92, 27, 45, 172, 26, 48, 87, 103, 173, 2, 23, 44, 55, 31, 185, 219, 10, 203, 138, 170, 38, 174, 245, 115, 162, 108, 252, 129, 177, 78, 60, 132, 240, 210, 177, 90, 226, 176, 233, 202, 65, 13, 78, 225, 248, 126, 170, 67, 185, 122, 209, 236, 208, 247, 204, 225, 173, 190, 202, 158, 101, 182, 69, 189, 200, 152, 168, 60, 158, 33, 158, 108, 193, 100, 207, 164, 34, 49, 4, 251, 86, 6, 11, 192, 79, 157, 150, 179, 2, 145, 206, 88, 90, 158, 100, 232, 50, 50, 242, 137, 252, 198, 7, 77, 162, 215, 8, 22, 35, 202, 184, 186, 234, 132, 124, 221, 222, 183, 71, 250, 239, 57, 55, 138, 134, 230, 245, 147, 163, 55, 132, 9, 96, 153, 52, 43, 44, 11, 131, 29, 216, 89, 63, 77, 184, 244, 84, 186, 148, 132, 21, 121, 203, 136, 122, 129, 164, 30, 242, 93, 186, 237, 134, 2, 190, 218, 255, 247, 49, 164, 215, 95, 84, 151, 208, 196, 178, 106, 209, 171, 186, 114, 36, 10, 122, 78, 141, 238], [12, 141, 183, 168, 36, 75, 253, 97, 186, 193, 245, 68, 176, 54, 143, 118, 3, 231, 252, 70, 186, 47, 177, 188, 106, 125, 233, 236, 173, 187, 220, 233, 40, 251, 248, 52, 106, 158, 179, 242, 233, 107, 122, 197, 157, 192, 19, 209, 201, 55, 244, 61], [53, 62, 8, 17, 4, 207, 208, 217, 42, 61, 215, 181, 238, 80, 138, 22, 231, 238, 99, 248, 59, 167, 222, 48, 194, 232, 90, 172, 173, 96, 68, 11, 74, 4, 58, 149, 112, 201, 66, 40, 0, 185, 127, 53, 3, 111, 115, 249, 117, 18, 139, 151, 54, 121, 201, 213, 105, 217, 128, 64, 113, 110, 49, 92, 77, 74, 163, 156, 130, 198, 194, 155, 1, 181, 105, 191, 202, 202, 56, 54, 1, 28, 21, 149, 250, 249, 134, 255, 50, 125, 135, 146, 221, 112, 119, 6, 34, 160, 36, 93, 214, 186, 237, 182, 60, 140, 18, 182, 16, 189, 239, 131, 167, 6, 127, 108, 143, 131, 50, 146, 244, 126, 17, 210, 6, 211, 137, 48, 3, 122, 128, 60, 12, 138, 155, 39, 105, 75, 223, 236, 13, 43, 88, 213, 81, 188, 53, 85, 65, 6, 135, 144, 174, 135, 207, 55, 229, 215, 155, 0, 218, 72, 36, 14, 238, 17, 38, 153, 207, 87, 106, 171, 152, 177, 121, 199, 228, 194, 242, 105, 31, 103, 183, 5, 107, 88, 248, 146, 161, 27, 253, 95], [206, 40, 134, 215, 48, 186, 130, 130, 112, 203, 107, 218, 219, 71, 89, 231, 23, 53, 2], [147, 95, 105, 136, 48, 89, 184, 129, 77, 209, 195, 196, 9, 137, 125, 223, 228, 177, 100, 246, 63, 27, 232, 118, 93, 99, 66, 156, 170, 255, 45, 178, 25, 126, 153, 191, 104, 186, 245, 143, 242, 97, 225, 242, 27, 14, 211, 251, 37, 197, 240, 94, 85, 74, 134, 26, 65, 243, 66, 96, 63, 48, 28, 59, 199, 192, 149, 23, 230, 114, 247, 99, 82, 106, 91, 21, 116, 83, 39, 182, 49, 40, 160, 111, 24, 8, 77, 120, 151, 26, 194, 229, 98, 236, 147, 242, 103, 153, 59, 175, 162, 9, 135, 226, 251, 10, 125, 35, 33, 8, 12, 103, 88, 228, 58, 32, 224, 176, 127, 85, 84, 1, 99, 181, 201, 149, 91, 171, 190, 142, 209, 165, 171, 252, 228, 56, 136, 187, 255, 208, 142, 49, 185, 241, 74, 95, 27, 103, 8, 222, 60, 121, 205, 153, 97, 147, 83, 72, 191, 14, 99, 140, 60, 19, 24, 17, 53], [14, 118, 121, 40, 78, 225, 124, 196, 99, 187, 231, 33, 224, 0, 252, 54, 117, 102, 217, 222, 182, 213, 106, 24, 206, 43, 111, 230, 251, 169, 70, 127, 8, 107, 81, 208, 106, 33, 194, 120, 168, 235, 205, 181, 236, 73, 42, 173, 53, 80, 176, 237, 10, 24, 207, 94, 33, 51, 131, 139, 27, 147, 152, 7, 17, 161, 0, 126, 254, 174, 40, 219, 86, 129, 19, 129, 130, 36, 182, 204, 2, 157, 55, 214, 50, 234, 189, 230, 214, 123, 178, 96, 42, 130, 114, 147, 124, 69, 177, 45, 20, 164, 56, 130, 128, 152, 11, 240, 43, 49, 177, 45, 227, 96, 220, 203, 70, 237, 142, 49, 46, 249, 102, 190, 242, 203, 88, 174, 2, 58, 138, 254, 126, 142, 241, 4, 24, 202, 20, 135, 39, 159, 93, 88, 149, 12, 28, 1, 164, 178, 175, 162, 222, 4, 199, 255, 225, 145, 124, 212, 157, 27, 38, 141, 230, 60, 63, 56, 27, 104, 197, 102, 13, 103, 213, 191, 41, 67, 43, 23, 237, 82, 159, 12, 48, 213, 5, 121, 248, 150, 151, 227, 61, 232, 170, 46, 58, 115, 192, 240, 176, 219, 246, 140, 5, 57, 69, 189, 181, 238, 99, 213, 116, 141, 23, 202, 185, 127, 190, 92, 174, 109, 39, 49, 39, 49, 14, 227, 43, 226, 3, 39, 118, 65, 213, 42, 1, 74, 61, 190, 241, 196, 187, 194, 174, 86, 149, 145, 57, 176, 72, 161, 70, 253, 112, 220, 111, 75, 50, 193, 90, 124, 36, 140, 78, 26, 227, 66, 53, 138, 131, 141, 17, 221, 161, 41, 197, 83, 139, 9, 77, 175, 76, 112, 231, 185, 172, 148, 159, 45, 201, 182, 75, 184, 202, 143, 213, 248, 60, 10, 3, 159, 48, 184, 129, 45, 82, 119, 85, 84, 215, 232, 58, 143, 44, 201, 183, 73, 110, 29, 23, 119, 134, 202, 94, 188, 241, 64, 21, 249, 180, 204, 12, 149, 176, 117, 158, 208, 32, 238], [87, 203, 80, 146, 239, 55, 97, 39, 161, 122, 85, 80, 66, 131, 244, 210, 18, 47, 254, 132, 21, 237, 212, 17, 35, 200, 98, 94, 239, 232, 76, 180, 124, 228, 11, 176, 243, 168, 121, 223, 191, 218, 192, 17, 109, 166, 107, 201, 161, 9, 44, 65, 179, 95, 33, 48, 252, 88, 6, 62, 191, 29, 210, 97, 84, 58, 169, 89, 98, 113, 110, 217, 111, 48, 172, 58, 118, 119, 22, 224, 164, 72, 219, 105, 166, 211, 189, 209, 115, 1, 46, 212, 199, 175, 124, 20, 254, 174, 32, 217, 31, 49, 40, 136, 179, 212, 154, 95, 166, 108, 142, 190, 162, 215, 25, 65, 48, 52, 37, 27, 113, 207, 232, 97, 249, 223, 87, 142, 121, 5, 89, 89, 202, 117, 40, 187, 52, 85, 5, 21, 224, 166, 134, 115, 49, 229, 50, 38, 252, 110, 75, 37, 197, 136, 226, 29, 245, 70, 202, 19, 141, 133, 234, 187, 137, 195, 172, 141, 98, 4, 16, 238, 127, 118, 147, 71, 183, 68, 128, 23, 133, 41, 187, 179, 199, 26, 137, 182, 12, 42, 117, 188, 84, 79, 131, 143, 110, 239, 211, 148, 98, 187, 205, 95, 199, 149, 222, 93, 60, 6, 137, 106, 178, 193], [35, 11, 169, 181, 91, 187, 210, 59, 38, 148, 120, 39, 192, 184, 212, 70, 173, 95, 58, 232, 13, 132, 255, 169, 215, 19, 63, 35, 205, 34, 91, 94, 117, 181, 218, 186, 146, 15, 74, 115, 5, 180, 217, 24, 193, 126, 78, 67, 92, 159, 76, 25, 106, 50, 35, 117, 175, 106, 220, 195, 116, 26, 40, 131, 155, 118, 113, 86, 117, 138, 239, 201, 42, 28, 191, 131, 226, 42, 233, 177, 240, 203, 64, 101, 229, 43, 29, 143, 189, 201, 110, 164, 52, 101, 61, 154, 245, 117, 98, 101, 47, 87, 74, 63, 108, 195, 169, 230, 115, 113, 229, 172, 116, 119, 211, 9, 60, 51, 182, 10, 110, 32, 65, 127, 215, 111, 139, 41, 110, 77, 124, 238, 171, 178, 181, 35, 204, 214, 182, 141, 105, 222, 93, 68, 161, 110, 121, 78, 128, 183, 47, 208, 111, 227, 221, 216, 57, 47, 163, 19, 19, 195, 55, 150, 16, 158, 71, 87, 244, 212, 11, 254, 137, 175, 162, 62, 11, 152, 66, 141, 146, 124, 153, 236, 180, 189, 84, 47, 107, 161, 19, 82, 226, 182, 214, 78, 107, 69, 177, 164, 5, 142, 126, 218, 5, 206, 243, 148, 98, 48, 75, 114, 245, 204, 90, 229, 204, 126, 230, 14, 245, 183, 127, 172, 84, 241, 130, 155, 24, 209, 222, 179, 105, 72, 69, 89, 202, 20, 91, 107, 145, 4, 23, 184, 130, 134, 49, 27, 182, 101, 223, 232, 163, 215, 179, 168, 174, 207, 92, 240, 125, 175, 165, 163, 16, 180, 137, 109, 157, 28, 38, 107, 55, 52, 181, 127, 11, 238, 155, 209, 55, 61], [73, 42, 31, 189, 72, 121, 11, 249, 63, 20, 169, 176, 5, 26, 53, 175, 103, 44, 204, 239, 134, 169, 54, 12, 108, 97, 252, 230, 35, 176, 184, 11, 13, 117, 18, 36, 134, 49, 76, 253, 200, 216, 146, 63, 61, 159, 164, 92, 133, 244, 53, 52, 116, 173, 222, 253, 67, 37, 89, 226, 223, 93, 81, 236, 233, 57, 238, 57, 63, 155, 105, 26, 73, 211, 28, 20, 211, 49, 80, 86, 175, 135, 57, 38, 155, 0, 247, 26, 39, 170, 159, 128, 241, 149, 182, 168, 42, 72, 128, 209, 179, 154, 32, 56, 89, 121, 73, 176, 250, 61, 193, 34, 130, 210, 146, 121, 102, 189, 225, 238, 235, 248, 154, 7, 183, 187, 216, 81, 20, 15, 11, 220, 72, 101, 109, 223, 105, 120, 243, 224, 210, 175, 38, 0, 42, 7, 84, 73, 111, 115, 18, 243, 39, 119, 93, 156, 206, 17, 89, 251, 3, 152, 150, 254, 134, 151, 20, 44, 209, 198, 133, 0, 7, 38, 72, 44, 24, 92, 22, 181, 147, 125, 45, 145, 68, 114, 42, 74, 16, 146, 246, 156, 227, 196, 115, 74, 137, 224, 3, 160, 60, 22, 91, 33, 95, 216, 31, 191, 180, 60, 248, 222, 85, 104, 166, 194, 180, 181, 115, 151, 229, 107, 232, 5, 175, 235, 228, 108, 158, 114, 17, 85, 94, 248, 109, 99, 219, 232, 162, 49, 61, 23, 143, 118, 33, 97, 215, 188, 127, 72, 220, 239, 223, 201, 56, 35, 70, 193, 243, 58, 139, 124, 83, 24, 158, 53, 165, 111, 48, 167, 47, 44, 47, 152, 55], [36, 163, 148, 60, 148, 214, 207, 70, 41, 132, 16, 80, 154, 230, 238, 208, 213, 39, 191, 167, 139, 10, 177, 79, 204, 182, 127, 68, 83, 55, 6, 60, 143, 69, 177, 171, 84, 88, 4, 52, 248, 167, 171, 177, 81, 180, 241, 169, 226, 8, 16, 85, 80, 48, 234, 41, 149, 20, 110, 140, 146, 135, 248, 120, 225, 41, 128, 72, 99, 198, 41, 123, 134, 217, 173, 238, 238, 188, 64, 160, 190, 175, 183, 168, 135, 201, 146, 32, 204, 232], [225, 205, 181, 33, 84, 97, 117, 203, 98, 141, 198, 235, 112, 224, 49, 126, 128, 74, 162, 8, 151, 169, 230, 246, 146, 73, 90, 248, 9, 154, 117, 64, 202, 13, 227, 70, 118, 124, 14, 139, 104, 167, 30, 12, 202, 197, 122, 179, 111, 207, 52, 170, 122, 91, 33, 61, 54, 51, 85, 197, 58, 101, 11, 85, 202, 46, 249, 31, 98, 43, 22, 179, 226, 72, 186, 243, 120, 25, 112, 57, 73, 149, 46, 145, 1, 84, 23, 87, 5, 32, 10, 114, 140, 84, 96, 153, 190, 133, 30, 146, 179, 165, 210, 228, 26, 217, 115, 216, 149, 176, 44, 141, 100, 79, 57, 134, 218, 247, 69, 137, 35, 4, 33, 232, 119, 194, 193, 32, 89, 37, 182, 147, 17, 60, 109, 70, 171, 227, 193, 22, 92, 209, 97, 132, 133, 52, 165, 12, 3, 72, 69, 209, 207, 208, 192, 211, 2, 193, 229, 180, 64, 242, 227, 215, 203, 216, 15, 217, 149, 155, 78, 255, 48, 184, 243, 106, 239, 39, 113, 109, 195, 55, 59, 162, 8, 26, 4, 175, 33, 50, 87, 244, 243, 58, 96, 4, 54, 2, 23, 146, 241, 78, 27, 127, 60, 147, 119, 244, 13, 159, 147, 135, 127, 249, 144, 50, 159, 149, 219, 235, 0, 214, 109, 230, 132], [239, 98, 46, 36, 252, 106, 253, 211, 171, 137, 215, 135, 52, 251, 40, 204, 233, 235, 24, 197, 167, 39, 17, 75, 87, 93, 23, 211, 250, 218, 76, 63, 144, 75, 41, 96, 196, 4, 180, 193, 89, 226, 158, 206, 39, 182, 2, 120, 81, 22, 244, 0, 112, 225, 81, 111, 76, 172, 49, 14, 246, 109, 175, 250, 95, 127, 42, 63, 188, 42, 39, 242, 37, 231, 71, 111, 30, 156, 143, 125, 199, 199, 83, 177, 10, 158, 178, 172, 208, 201, 113, 100, 144, 151, 201, 14, 238, 234, 39, 189, 105, 12, 52, 201, 184, 210, 139, 118, 165, 225, 49, 71, 37, 37, 231, 76, 165, 133, 87, 209, 112, 11, 9, 167, 134, 229, 209, 15, 254, 129, 178, 18, 12, 22, 223, 86, 222, 52, 54, 141, 220, 43, 11, 28, 95, 10, 44, 115, 98, 204, 76, 106, 107, 235, 156, 230, 172, 147, 48, 179, 40, 149, 187, 17, 222, 190, 64, 139, 122, 87, 156, 187, 202, 66, 80, 191, 149, 157, 71, 80, 149, 235, 85, 185, 111, 130, 174, 244, 69, 38, 100, 206, 23, 59, 19, 55, 171, 201, 170, 209, 49, 97, 193, 168, 21, 133, 185, 126, 12, 111, 133, 130, 46, 142, 198, 157, 9, 60, 164, 233, 208, 137, 193, 238, 161, 161, 124, 33, 97, 44, 142, 17, 166, 226, 110, 44, 164, 63, 138, 22, 175, 25, 36, 42, 130, 69, 82, 117, 125, 117, 250, 15, 67, 201, 155, 247, 61, 245, 170, 135], [159, 59, 186, 90, 250, 18, 17, 254, 255, 232, 170, 60, 161, 156, 16, 121, 91, 201, 40, 117, 11, 72, 28, 117, 138, 93, 179, 3, 236, 242, 159, 5, 56, 5, 164, 106, 29, 235, 116, 157, 64, 20, 247, 182, 177, 33, 56, 222, 33, 163, 69, 44, 192, 241, 193, 149, 75, 22, 139, 206, 93, 185, 192, 162, 36, 50, 236, 180, 162, 21, 183, 41, 178, 163, 194, 11, 169, 190, 142, 254, 55, 17, 19, 107, 226, 69, 251, 231, 82, 171, 30, 234, 110, 196, 237, 72, 146, 119, 35, 33, 19, 16, 64, 166, 28, 235, 45, 167, 167, 29, 230, 118, 210, 213, 36, 104, 150, 99, 165, 4, 177, 7, 255, 42, 189, 181, 53, 69, 23, 45, 13, 201, 159, 117, 159, 117, 255, 214, 127, 86, 116, 6, 122, 92, 67, 34, 47, 245, 92, 202, 237, 48, 221, 35, 212, 120, 15, 81, 149, 37, 185, 54, 67, 194, 120, 80, 255, 139, 216, 29, 106, 163, 165, 18, 64, 36, 251, 109, 55, 169, 160, 19, 110, 227, 190, 58, 31, 183, 160, 8, 190, 52, 147, 191, 37, 77, 87, 1, 81, 1, 247, 20, 69, 230, 19, 231, 7, 35, 183, 11, 150, 155, 210, 73, 188, 208, 229, 68, 72, 219, 15, 180, 103, 48, 144, 3, 129, 197, 71, 180, 198, 1, 201, 135, 22, 107, 114, 83, 252, 118, 250, 225, 248, 53, 89, 151, 190, 216, 16, 112, 74, 75, 47, 206, 254, 48, 49, 31, 215, 47, 20, 28, 243, 195, 20, 227, 40, 114, 150, 225, 149, 166, 155, 85, 101, 132, 90, 198, 51, 93, 86, 16, 118, 93, 145, 205, 142, 168, 227, 91, 39, 71, 21, 173, 125, 178, 18, 144], [167, 183, 40, 166, 249, 203, 212, 25, 31, 65, 254, 16, 69, 89, 149, 137, 84, 193, 150, 134, 54, 118, 221, 134, 178, 183, 165, 159, 117, 237, 80, 28, 115, 42, 157, 171, 150, 184, 168, 31, 114, 227, 81, 128, 51, 58, 165, 195, 223, 235, 89, 130, 25, 93, 200, 226, 203, 209, 163, 86, 166, 133, 129, 216, 145, 221, 105, 146, 232, 65, 59, 194, 74, 239, 136, 7, 193, 197, 215, 19, 159, 188, 254, 119, 170, 218, 56, 174, 218, 106, 135, 217, 60, 164, 211, 71, 66, 62, 117, 1, 113, 222, 247, 107, 40, 32, 229, 70, 81, 206, 68, 149, 17, 173, 9, 153, 133, 146, 227, 11, 28, 65, 238, 254, 82, 105, 158, 162, 204, 29, 225, 100, 99, 71, 109, 45, 193, 187, 152, 156, 34, 147, 235, 82, 93, 123, 219, 88, 231, 224, 225, 150, 127, 1, 71, 148, 5, 196, 17, 30, 90, 8, 245, 100, 225, 199, 61, 91, 15, 161, 49, 21, 33, 208, 144, 213, 137, 20, 39, 92, 35, 64, 100, 171, 41, 217, 20, 34, 182, 204, 199, 5, 160, 112, 36, 98, 177, 208, 58, 95, 65, 38, 179, 0, 68, 1, 239, 113, 10, 170, 212, 173, 161, 248, 52, 192, 192, 102, 72, 178, 227, 229, 122, 247, 185, 74, 25, 78, 202, 44, 251, 15, 192, 29, 36, 81, 144, 119, 156, 32, 8, 168, 112, 244, 89, 136, 58, 228, 156, 124, 245, 174, 17, 202, 79, 30, 153, 192, 198, 211, 83, 143, 212, 117, 210, 183, 38, 250, 158, 83, 252, 208, 198, 55, 211, 236, 171, 119, 29, 200, 244, 138, 27, 63, 38, 189, 232, 186, 186, 235, 127, 75, 251, 124, 137, 228, 14, 81, 8, 40, 150, 41, 26, 78, 202, 57, 17, 215, 170, 242, 233, 151, 161, 241, 255, 16, 119, 121, 185, 132, 22, 173, 247, 193, 33, 203, 190, 61, 209, 89, 104, 247, 221, 241, 89, 249, 178, 156, 120, 208, 219, 166, 155, 198, 105, 44, 164, 192, 70, 37, 242, 23, 213, 61, 201, 52, 46, 189, 130], [168, 60, 181, 56, 31, 122, 19, 0, 48, 159, 61, 194, 108, 89, 56, 115, 129, 129, 240, 88, 251, 167, 169, 30, 22, 145, 77, 129, 76, 251, 121, 215, 104, 118, 196, 85, 199, 162, 158, 39, 103, 167, 67, 163, 72, 17, 177, 144, 139, 161, 206, 132, 54, 162, 250, 232, 152, 9, 155, 1, 89, 225, 174, 57, 10, 123, 79, 231, 44, 155, 66, 200, 195, 20, 140, 226, 88, 160, 144, 104, 26, 194, 6, 36, 199, 123, 39, 206, 242, 186, 122, 211, 88, 87, 81, 156, 253, 45, 81, 208, 131, 200, 43, 121, 34, 251, 56, 168, 85, 106, 188, 142, 71, 67, 205, 128, 178, 163, 29, 57, 110, 133, 18, 197, 91, 204, 31, 157, 190, 70, 209, 77, 102, 63, 103, 133, 169, 64, 10, 34, 216, 33, 31, 113, 158, 104, 73, 95, 6, 105, 197, 249, 139, 204, 181, 190, 78, 164, 18, 160, 68, 178, 60, 190, 138, 215, 92, 45, 252, 49, 108, 212, 134, 235, 133, 131, 41, 190, 119, 97, 112, 88, 161, 55, 132, 57, 20, 102, 137, 48, 199, 201, 165, 30, 250, 86, 114, 184, 196, 15, 249, 82, 42, 31, 27, 112, 207, 98, 176, 103, 183, 221, 101, 152, 142, 127, 250, 250, 211, 186, 20, 37, 153, 158, 142, 254, 250, 151, 116, 93, 160, 191, 89, 25, 93, 228, 26, 16, 86, 82, 252, 85, 93, 10, 240, 44, 166, 144, 137, 11, 11, 193, 171, 72, 211, 9, 108, 62, 232, 112, 14, 63, 19, 248, 108, 97, 142, 215, 238, 4, 86, 192, 205, 55, 216], [165, 129, 55, 206, 178, 3, 77, 196, 179, 37, 59, 30, 59, 77, 82, 19, 152, 67, 175, 121, 0, 158, 16, 224, 238, 86, 123, 116, 132, 136, 140, 210, 249, 48, 244, 30, 234, 130, 129, 105, 244, 56, 163, 102, 129, 174, 68, 113, 141, 107, 35, 131, 214, 85, 165, 59, 104, 191, 253, 83, 227, 215, 93, 66, 159, 11, 193, 49, 91, 88, 8, 7, 77, 188, 230, 151, 88, 178, 229, 41, 93, 58, 2, 187, 11, 216, 192, 158, 96, 182, 129, 210, 24, 29, 197, 185, 190, 206, 172, 154, 213, 137, 157, 150, 43, 17, 107, 69, 110, 15, 141, 117, 221, 240, 93, 229, 186, 48, 179, 105, 95, 66, 10, 35, 228, 176, 219, 193, 145, 59, 37, 14, 172, 75, 171, 209, 214, 248, 232, 230, 64, 254, 109, 74, 242, 150, 135, 97, 25, 195, 239, 157, 252, 5, 80, 254, 76, 217, 150, 218, 72, 13, 108, 150, 116, 131, 19, 233, 92, 209, 128, 161, 118, 120, 39, 169, 250, 255, 211, 226, 33, 6, 88, 212, 10, 11, 44, 63, 150, 93, 118, 148, 62, 148, 105, 236, 245, 221, 83, 200, 144, 244, 175, 223, 8, 250, 252, 41, 217, 4, 164, 109, 172, 41, 20, 81, 115, 5], [151, 123, 118, 92, 61, 254, 217, 190, 145, 211, 111, 157, 158, 65, 194, 186, 98, 112, 168, 29, 86, 93, 212, 225, 61, 23, 244, 72, 202, 241, 238, 236, 124, 103, 251, 69, 244, 58, 92, 121, 210, 57, 211, 251, 80, 31, 109, 8, 143, 89, 85, 165, 186, 38, 59, 159, 71, 95, 59, 132, 225, 109, 233, 196, 132, 154, 245, 28, 140, 121, 210, 234, 10, 103, 61, 62, 172, 199, 181, 154, 184, 202, 243, 167, 60, 10, 239, 181, 246, 253, 16, 10, 162, 69, 187, 17, 160, 225, 9, 238, 92, 27, 132, 133, 136, 160, 40, 192, 225, 226, 95, 245, 196, 176, 90, 53, 199, 106, 117, 65, 171, 139, 72, 146, 46, 211, 55, 232, 196, 69, 66, 115, 141, 156, 223, 48, 249, 195, 40, 249, 10, 195, 138, 201, 44, 98, 210, 104, 225, 233, 176, 18, 122, 249, 109, 131, 85, 211, 226, 24, 230, 222, 14, 67, 202, 239, 214, 53, 15, 212, 222, 225, 50, 193, 96, 181, 100, 212, 107, 207, 247], [152, 85, 240, 23, 137, 216, 246, 117, 241, 114, 66, 146, 19], [106, 229, 254, 165, 223, 25, 175, 144, 32, 37, 82, 15, 73, 207, 239, 27, 10, 48, 195, 194, 73, 255, 161, 110, 86, 178, 14, 240, 98, 95, 108, 206, 36, 72, 39, 100, 67, 250, 216, 237, 217, 204, 236, 150, 15, 127, 40, 121, 43, 218, 246, 202, 142, 137, 226, 207, 4, 96, 210, 10, 234, 175, 159, 101, 186, 84, 59, 196, 149, 179, 229, 255, 48, 174, 252, 170, 172, 220, 174, 177, 100, 141, 41, 70, 151, 214, 197, 19, 140, 23, 189, 17, 221, 187, 207, 244, 83, 114, 227, 25, 224, 222, 8, 63, 57, 6, 95, 6, 58, 136, 224, 231, 168, 1, 23, 191, 127, 137, 57, 97, 67, 149, 242, 188, 193, 233, 79, 188, 170, 67, 170, 172, 31, 30, 11, 226, 114, 9, 77, 81, 147, 97, 66, 183, 130, 8, 9, 144, 208, 236, 32, 213, 175, 120, 239, 158, 63, 149, 128, 96, 57, 76, 71, 75, 209, 29, 186, 209, 129, 168, 94, 187, 102, 245, 12, 173, 47, 75, 187, 17, 217, 172, 183, 216, 234, 216, 40, 96, 223, 6, 24, 252, 209, 44, 209, 152, 205, 160, 120, 196, 226, 216, 58, 39, 214, 105, 120, 31, 38, 173, 65, 8, 248, 123, 19, 125, 3, 221, 12, 127, 5, 1, 180, 136, 168, 192, 215, 5, 202, 64, 194, 5, 232, 60, 108, 150, 206, 238, 206, 15, 202, 192, 141, 43, 180, 32, 123, 184, 41, 32, 103, 101], [157, 138, 203, 90, 188, 252, 79], [188, 239, 83, 159, 186, 41, 238, 242, 111, 62, 141, 16, 145, 187, 193, 56, 253, 22, 160, 137, 111, 47, 115, 22, 34, 153, 214, 69, 223, 186, 31, 22, 61, 85, 43, 88, 205, 63, 211, 79, 212, 181, 239, 150, 104, 91, 3, 45, 196, 10, 215, 175, 47, 151, 54, 174], [5, 98, 153, 191, 175, 80, 169, 224, 29, 155, 22, 154, 187, 19, 205, 102, 36, 18, 149, 188, 95, 55, 167, 215, 165, 2, 74, 41, 233, 64, 85, 52, 40, 144, 112, 108, 206, 229, 1, 235, 27, 101, 106, 173, 249, 47, 69, 81, 224, 122, 173, 27, 169, 15, 64, 188, 79, 230, 184, 164, 164, 78, 67, 213, 155, 12, 200, 238, 249, 66, 31, 220, 10, 32, 61, 99, 71, 217, 150, 133, 186, 240, 190, 117, 8, 230, 174, 74, 225, 18, 19, 121, 162, 57, 23, 142, 28, 221, 46, 178, 75, 225, 129, 89, 46, 168, 108, 212, 182, 238, 67, 200, 104, 108, 30, 221, 19, 242, 169, 210, 80, 135, 242, 178, 86, 202, 80, 205, 225, 114, 51, 202, 1, 49, 33, 71, 248, 25, 129, 204, 171, 85, 2, 174, 63, 159, 223, 144, 92, 216, 95, 227, 106, 24, 92, 127, 59, 39, 240, 93, 128, 155, 213, 216, 9, 36, 17, 17, 29, 16, 86, 172, 62, 58, 68, 90, 57, 97, 195, 77, 198, 187, 55, 245, 216, 208, 101, 199, 83, 212, 247, 49, 52, 190, 161, 17, 94, 163, 173, 3, 130, 3, 47, 100, 105, 216, 139, 76, 199, 22, 173, 50, 117, 37, 0, 132, 42, 168, 69, 51, 90, 131, 45, 243, 203, 235, 62, 57, 243, 107, 205, 97, 112, 151, 253, 25, 37, 118, 203, 20, 69, 165, 242, 239, 209, 230, 65, 196, 253, 197, 209, 146, 84, 17, 215, 36, 33, 151, 249, 160, 68, 143, 2, 17, 176, 39, 112, 198, 99, 36, 3, 200, 0, 119, 77, 185, 161, 72, 5, 56, 134, 255, 86, 139, 99, 234, 152, 120, 18, 122, 238, 85, 104, 211, 141, 43, 198, 69, 72, 234, 32, 152, 225, 38, 114, 126, 80, 225, 236, 161, 55, 50, 39, 217, 76, 210, 37, 210, 26, 165, 38, 221, 141, 251, 28, 48, 119, 67, 73, 97, 222], [251, 69, 252, 234, 177, 219, 168, 177, 13, 247, 205, 188, 18, 210, 149, 92, 129, 39, 193, 107, 142, 6, 23, 157, 181, 166, 119, 129, 250, 145, 251, 29, 1, 31, 139, 155, 236, 129, 165, 217, 114, 173, 9, 37, 40, 4, 29, 106, 98, 73, 244, 23, 121, 185, 168, 182, 185, 19, 48, 96, 112, 177, 189, 209, 180, 37, 129, 135, 37, 130, 23, 94, 42, 163, 231, 251, 8, 134, 140, 233, 121, 0, 88, 77, 96, 201, 169, 252, 158, 49, 171, 53, 43, 27, 78, 149, 128, 195, 229, 40, 63, 208, 104, 168, 71, 20, 197, 203, 37, 246, 60, 43, 103, 181, 219, 5, 185, 48, 21, 199, 230, 13, 233, 112, 66, 235, 99, 116, 156, 232, 168, 35, 71, 80, 55, 2, 109, 195, 61, 6, 102, 213, 173, 152, 75, 102, 89, 90, 59, 26, 187, 202, 118, 210, 122, 229, 162, 142, 118, 201, 234, 154, 82, 114, 202, 157, 114, 165, 115, 181, 138, 156, 20, 145, 54, 55, 131, 41, 77, 155, 23, 59, 207, 125, 56, 38, 31, 131, 31, 216, 208, 148, 56, 186, 150, 201, 53, 61, 254, 35, 68, 13, 45, 31, 168, 247, 173, 160, 126, 36, 194, 38, 12, 38, 183, 17, 108, 6, 47, 218, 7, 200, 229, 65, 64, 76, 49, 211, 116, 239, 46, 139, 195, 19, 25, 88, 234, 62, 133, 148, 110, 249, 149, 196, 75, 220, 105, 100, 190, 55, 137, 127, 48, 28, 167, 3, 131, 14, 173, 140, 17, 52], [225, 182, 186, 120, 11, 194, 246, 46, 67, 39, 194, 86, 5, 3, 4, 99, 170, 187, 247, 90, 106, 74, 174, 59, 4, 138, 233, 207, 125, 18, 201, 147, 249, 99, 83, 66, 117, 41, 222, 180, 215, 124, 15, 28, 197, 77, 16, 91, 72, 62, 226, 219, 121, 20, 107, 231, 248, 223, 30, 227, 247, 188, 92, 120, 152, 61, 3, 25, 4, 126, 35, 225, 252, 144, 25, 20, 7, 221, 2, 200, 46, 83, 151, 115, 48, 208, 83, 100, 236, 30, 50, 64, 30, 227, 156, 148, 136, 66, 31, 56, 148, 55, 79, 194, 173, 32, 193, 78, 197, 184, 232, 187, 105, 42, 137, 253, 121, 240, 7, 88, 55, 82, 122, 217, 188, 141, 17, 84, 17, 42, 64, 85, 86, 237, 246, 145, 28, 46, 220, 168, 8, 20, 189, 169, 182, 39, 9, 188, 212, 58, 157, 79, 26, 211, 245, 154, 219, 76, 78, 107, 99, 86, 44, 203, 37, 40, 225, 227, 87, 83, 35, 104, 206, 34, 37, 254, 198, 224, 131, 19, 23, 22, 214, 140, 57, 37, 24, 205, 6, 16, 127, 213, 155, 239, 4, 75, 9, 179, 222, 34, 42, 248, 21, 49, 85, 58, 221, 214, 6, 77, 19, 235, 140, 46, 198, 48, 150, 86, 151, 173, 69, 49, 75, 205, 168, 77, 91, 36, 218, 51, 128, 127, 193, 11, 99, 56, 175, 66, 227, 97, 124, 15, 150, 71, 180, 71, 171, 190, 198, 33, 179, 109, 251, 11, 202, 67, 129, 82, 144, 193, 238, 130, 73, 98, 196, 0, 150, 249, 62, 1, 131, 176, 224, 156, 215, 166, 190, 142, 11, 134, 225, 251, 50, 83, 84, 246, 76, 166, 145, 13, 111, 161, 179, 209, 40, 164, 218], [197, 74, 249, 78, 118, 107, 29, 87, 76, 129, 16, 136, 154, 224, 31, 224, 142, 254, 139, 9, 92, 213, 210, 126, 255, 148, 149, 183, 38, 126, 1, 238, 151, 135, 206, 107, 16, 185, 203, 184, 72, 167, 141, 201, 38, 116, 171, 182, 1, 1, 101, 246, 157, 99, 84, 241, 252, 95, 31, 62, 74, 15, 20, 39, 255, 111, 213, 12, 250, 78, 222, 180, 71, 13, 183, 148, 0, 67, 34, 220, 81, 25, 92, 186, 68, 138, 62, 216, 141, 50, 115, 142, 202, 85, 224, 192, 113, 157, 183, 213, 119, 36], [65, 62, 65, 9, 175, 237, 148, 126, 159, 79, 92, 23, 29, 49, 81, 191, 191, 96, 244, 12, 72, 192, 15, 36, 226, 164, 30, 95, 71, 220, 167, 101, 243, 50, 225, 208, 188, 119, 195, 26, 180, 36, 20, 252, 153, 85, 121, 128, 12, 71, 199, 249, 182, 69, 65, 156, 27, 187, 169, 27, 151, 244, 164, 168, 110, 112, 198, 202, 71, 182, 31, 30, 207, 243, 126, 115, 136, 235, 85, 75, 63, 87, 41, 51, 244, 130, 212, 114, 122, 69, 223, 166, 13, 131, 166, 121, 191, 11, 91, 169, 30, 8, 45, 24, 156, 46, 12, 245, 191, 91, 247, 93, 79, 63, 211, 67, 146, 231, 218, 202, 178, 110, 76, 73, 85, 26, 121, 69, 208, 160, 155, 96, 125, 246, 178, 46, 118, 243, 16, 223, 200, 196, 11, 132, 16, 54, 253, 9, 160, 139, 86, 119, 58, 84, 197, 177, 137, 82, 115, 232, 71, 187, 65, 53, 99, 100, 213, 72, 85, 19, 43, 124, 128, 51, 9, 190, 81, 17, 206, 222, 235, 207, 0, 17, 250, 65, 201, 116, 207, 21, 91, 11, 151, 34, 81, 90, 12, 146, 171, 170, 7, 170, 91, 155, 144, 53, 110, 183, 230, 76, 56, 114, 169, 96, 181, 215, 82, 210, 148, 191, 99, 149, 155, 39, 217, 180, 13, 107, 228, 96], [170, 46, 73, 92, 151, 56, 181, 159, 94, 252, 197, 204, 199, 229, 215, 135, 234, 171, 6, 3, 134, 125, 128, 22, 50, 84, 68, 94, 140, 107, 143, 240, 168, 72, 54, 35, 4, 76, 75, 138, 43, 103, 200, 178, 7, 228, 232, 198, 177, 77, 62, 194, 63, 196, 126, 203, 255, 69, 167, 214, 232, 180, 11, 104, 198, 17, 23, 57, 223, 172, 11, 59, 80, 200, 38, 123, 70, 168, 159, 50, 120, 195, 159, 17, 201, 90, 185, 231, 155, 131, 133, 156, 139, 14, 45, 44, 107, 167, 227, 224, 166, 99, 149, 17, 41, 251, 252, 10, 126, 32, 34, 125, 30, 147, 202, 118, 249, 149, 135, 11, 235, 14, 63, 19, 9, 19, 151, 154, 2, 6, 40], [194, 202, 153, 32, 217, 243, 69, 62, 62, 226, 118, 121, 107, 45, 199, 130, 242, 249, 133, 138, 28, 0, 164, 222, 129, 232, 93, 67, 154, 155, 8, 252, 214, 2, 69, 38, 214, 16, 217, 87, 226, 39, 48, 76, 229, 138, 149, 208, 93, 32, 55, 148, 159, 134, 172, 89, 67, 42, 193, 110, 133, 110, 72, 226, 251, 137, 180, 67, 226, 181, 79, 14, 180, 84, 10, 46, 206, 176, 215, 70, 151, 125, 31, 237, 103, 194, 250, 8, 151, 216, 66, 231, 68, 189, 136, 99, 97, 36, 201, 182, 167, 50, 121, 213, 107, 21, 207, 132, 51, 164, 61, 252, 177, 9, 158, 129, 135, 137, 128, 223, 96, 22, 69, 90, 122, 171, 122, 230, 196, 176, 212, 39, 55, 117, 223, 131, 59, 95, 82, 235, 159, 80, 8, 62, 215, 89, 179, 123, 3, 88, 68, 147, 219, 207, 247, 162, 241, 249, 240, 24, 38, 117, 159, 34, 79, 19, 92, 191, 10, 45, 180, 181, 73, 79, 16, 68, 57, 215, 59], [158, 228, 155, 237, 148, 193, 227, 69, 17, 197, 195, 69, 248, 98, 76, 7, 83, 209, 70, 142, 231, 149, 125, 95, 74, 154, 193, 57, 49, 57, 113, 127, 147, 27, 190, 28, 150, 167, 184, 70, 253, 90, 128, 104, 60, 249, 114, 90, 67, 70, 62, 243, 169, 39, 29, 94, 62, 106, 2, 239, 89, 78, 124, 24, 9, 34, 136, 97, 64, 85, 181, 10, 0, 120, 229, 214, 214, 233, 86, 73, 89, 131, 191, 12, 80, 0, 9, 197, 162, 229, 163, 23, 136, 18, 151, 169, 33, 190, 162, 17, 184, 205, 215, 82, 174, 90, 240, 241, 100, 27, 198, 37, 96, 44, 135, 210, 175, 82, 241, 187, 200, 169, 155, 120, 211, 93, 116, 143, 151, 104, 229, 159, 192, 150, 215, 63, 156, 12, 196, 150, 102, 248, 158, 85, 213, 174, 121, 52, 254, 14, 174, 96, 61, 49, 18, 167, 66, 185, 160, 255, 97, 238, 54, 35, 56, 107, 41, 17, 76, 24, 172, 120, 216, 19, 115, 66, 238, 225, 187, 223, 147, 103, 239, 143, 13, 32, 173, 35, 199, 98, 107, 111, 114, 164, 50, 24, 156, 28, 89, 196, 145, 96, 186, 70, 242, 60, 13, 172, 159, 88, 18, 85, 51, 29, 146, 79, 62, 172, 216, 253, 231, 104, 126, 117, 237, 125, 245, 160, 171, 199, 236, 17, 228, 152, 111, 183, 36, 61, 38, 196, 154, 214, 141, 194, 217, 44, 251, 43, 35, 211, 189, 202, 48, 108, 14, 244, 125, 140, 63, 128, 245, 106, 18, 0, 58, 236, 0, 33, 207, 66, 182, 38, 193, 99, 164, 228, 131, 101, 63, 129, 33, 150, 135, 189, 43, 221, 32, 25, 143, 159, 28, 53, 250, 63, 122, 232, 79, 127, 103, 82, 163, 255, 134, 172, 16, 175, 85, 1, 184, 249, 248, 25, 161, 189, 64, 58, 183, 19, 47, 165, 19, 139, 103, 80, 183, 197, 24, 8, 220, 14, 135, 33, 211, 75, 123, 99, 243, 242, 16, 222, 250, 89, 54, 98, 45, 156, 68, 208, 118, 187, 144, 2, 161], [97, 160, 216, 46, 75, 71, 198, 136, 24, 110, 161, 225, 150, 137, 69, 30, 61, 15, 65, 26, 188, 20, 146, 98, 193, 153, 116, 30, 37, 176, 219, 175, 159, 42, 31, 250, 82, 216, 48, 200, 101, 198, 128, 85, 136, 222, 222, 247, 25, 238, 133, 58, 2, 222, 43, 216, 197, 106, 214, 147, 186, 211, 150, 199, 111, 220, 71, 7, 179, 254, 231, 166, 26, 253, 117, 49, 228, 147, 86, 200, 111, 225, 237, 203, 217, 198, 250, 120, 4, 143, 40, 81, 123, 186, 197, 226, 15, 78, 47, 242, 171, 128, 168, 203, 194, 7, 181, 115, 5, 161, 191, 151, 39, 43, 100, 219, 39, 121, 219, 5, 0, 18, 206, 234, 57, 195, 193, 86, 83, 37, 227, 50, 38, 203, 245, 217, 51, 119, 1, 225, 209, 175, 58, 175, 72, 210, 3, 229, 108, 60, 51, 221, 215, 75, 8, 66, 161, 148, 9, 239, 218, 227, 248, 177, 57, 88, 97, 128, 204, 156, 207, 15, 126, 190, 72, 175, 113, 16, 231, 142, 226, 171, 94, 159, 149, 10, 55, 103, 57, 156, 238, 133, 50, 33, 36, 162, 86, 44, 216, 230, 39, 44, 101, 79, 212, 251, 75, 156, 11, 26, 162, 143, 204, 43, 138, 133, 14, 84, 190, 31, 125, 246, 7, 156, 189, 202, 39, 78, 127, 69, 4, 243, 9, 9, 168, 1, 252, 37, 161, 150, 135, 249, 124, 179, 107, 51, 165, 101, 131, 169, 161, 110, 10, 172, 183, 237, 112, 46, 107, 7, 136, 96, 155, 195, 147, 55, 152, 214, 116, 162, 123, 4, 187, 28, 108, 194, 149, 35, 141, 226, 173, 215, 5, 116, 131, 137, 113, 212, 177, 251, 54, 147, 138, 154, 228, 89, 193, 254, 249, 44, 241, 157, 92, 39, 161, 15, 65], [216, 26, 200, 182, 228, 214, 228, 83, 83, 242, 9, 50, 250, 65, 245, 160, 232, 33, 42, 150, 152, 243, 59, 180, 196, 130, 134, 233, 54, 13, 52, 216, 40, 31, 59, 166, 54, 177, 7, 0, 143, 174, 68, 161, 8, 144, 201, 61, 61, 184, 169, 101, 145, 253, 146, 172, 92, 153, 209, 107, 5, 245, 105, 156, 110, 111, 119, 253, 15, 4, 209, 217, 193, 45, 182, 67, 140, 217, 242, 56, 37, 124, 169, 42, 145, 226, 157, 63, 87, 128, 83, 88, 247, 104, 91, 80, 43, 90, 208, 66, 21, 200, 28, 119, 153, 76, 142, 14, 224, 188, 227, 198, 229, 72, 250, 107, 0, 134, 22, 165, 172, 110, 238, 223, 89, 78, 162, 65, 197, 114, 192, 80, 79, 189, 41, 192, 51, 159, 102, 47, 110, 148, 50, 171, 82, 176, 59, 88, 234, 21, 93, 130, 87, 124, 18, 100, 247, 203, 16, 238, 10, 2, 206, 213, 181, 31, 26, 233, 160, 238, 159, 108, 56, 219, 80, 251, 55, 133, 148, 197, 247, 12, 109, 160, 39, 136, 239, 194, 196, 166, 142, 15, 222, 48, 218, 46, 165, 135, 252, 212, 131, 43, 217, 101, 132, 221, 162, 120, 183, 80, 235, 196, 134, 165, 163, 216, 84, 210, 114, 11, 210, 49, 85, 252, 199, 144, 202, 188, 241, 58, 93, 70, 146, 21, 195, 206, 118, 167, 153, 197, 161, 55, 198, 229, 162, 19, 62, 214, 116, 120, 238, 237, 109, 229, 202, 114, 247, 200, 140, 246, 121, 157, 248, 5, 21, 104, 7, 165], [244, 73, 218, 3, 198, 15, 229, 215, 19, 134, 51, 74, 117, 213, 247, 160, 150, 157, 7, 93, 244, 95, 151, 224, 196, 192, 90, 125, 235, 150, 138, 16, 7, 230, 158, 113, 148, 64, 84, 204, 42, 46, 240, 19, 232, 187, 85, 43, 154, 64, 3, 12, 207, 229, 202, 59, 79, 247, 65, 1, 65, 190, 40, 145, 144, 82, 23, 27, 30, 71, 58, 170, 209, 204, 233, 35, 142, 217, 159, 46, 193, 67, 1, 251, 222, 9, 193, 41, 151, 45, 147, 60, 39, 206, 146, 227, 243, 206, 146, 189, 177, 66, 53, 134, 88, 49, 168, 62, 102, 162, 46, 47, 85, 149, 83, 245, 67, 232, 245, 245, 209, 95, 54, 55, 17, 100, 174, 126, 13, 50, 28, 67, 28, 236, 137, 49, 9, 144, 31, 26, 242, 49, 101, 52, 70, 224, 0, 123, 48, 23, 253, 31, 153, 105, 228, 114, 93, 199, 238, 41, 202, 90, 37, 174, 127, 54, 19, 201, 224, 97, 149, 17, 215, 88, 234, 194, 216, 184, 50, 92, 13, 4, 46, 13, 226, 239, 197, 248, 231, 105, 212, 168, 229, 123, 233, 189, 35, 138, 28, 118, 251, 163, 185, 52, 19, 93, 173, 194, 232, 189, 115, 235, 135, 226, 141, 35, 153], [147, 78, 56, 157, 13, 199, 74, 20, 191, 68, 203, 217, 69, 177, 169, 201, 99, 232, 61, 56, 129, 133, 19, 60, 114, 19, 7, 39, 60, 246, 20, 74, 36, 229, 28, 127, 205, 0, 237, 236, 169, 181, 72, 15, 49, 131, 100, 183, 20, 173, 144, 87, 43, 151, 49, 206, 106, 212, 175, 69, 255, 241, 36, 209, 160, 105, 59, 255, 98, 44, 143, 110, 209, 168, 64, 0, 153, 18, 251, 193, 77, 30, 190, 1, 142, 124, 177, 141, 133, 14, 204, 217, 182, 113, 65, 101, 77, 145, 115, 97, 8, 178, 116, 36, 218, 85, 10, 145, 63, 209, 19, 166, 135, 13, 44, 242, 122, 194, 145, 109, 215, 164, 233, 210, 200, 213, 74, 213, 64, 91, 12, 70, 14, 115, 173, 172, 117, 11], [25, 244, 159, 27, 246, 177, 208, 120, 27, 85, 170, 40, 149, 26, 214, 220, 185, 111, 245, 176, 255, 238, 198, 190, 141, 102, 9, 33, 233, 14, 229, 31, 13, 245, 55, 220, 126, 220, 235, 182, 47, 92, 8, 234, 218, 212, 16, 6, 22, 207, 211, 143, 14, 168, 113, 253, 172, 62, 201, 75, 96, 42, 241, 251, 18, 75, 118, 186, 29, 78, 163, 91, 192, 54, 253, 69, 43, 80, 181, 86, 131, 56, 158, 138, 145, 21, 214, 221, 62, 248, 55, 29, 24, 220, 254, 136, 179, 39, 235, 234, 251, 149, 61, 221, 144, 192, 2], [193, 166, 244, 8, 197, 229, 231, 201, 179, 5, 33, 207, 166, 75, 203, 32, 72, 29, 247, 122, 91, 253, 38, 37, 91, 145, 131, 31, 17, 240, 235, 189, 89, 122, 137, 156, 183, 125, 173, 63, 99, 102, 88, 19, 166, 148, 59, 115, 196, 114, 214, 246, 91, 57, 250, 184, 64, 60, 229, 101, 71, 79, 27, 32, 253, 57, 114, 24, 134, 247, 19, 190, 204, 136, 37, 201, 220, 254, 136, 190, 90, 219, 117, 103, 148, 124, 216, 141, 37, 161, 243, 15, 43, 193, 93, 188, 35, 75, 110, 141, 19, 13, 64, 80, 128, 161, 137, 152, 54, 218, 216, 155, 229, 212, 131, 169, 26, 47, 112, 236, 4, 169, 180, 56, 117, 255, 50, 41, 30, 190, 31, 146, 191, 37], [107, 41, 194, 136, 23, 73, 86, 190, 124, 80, 248, 20, 42, 124, 125, 213, 92, 84, 59, 211, 25, 154, 169, 11, 58, 192, 193, 130, 169, 241, 40, 61, 38, 167, 114, 118, 151, 90, 161, 31, 12, 242, 4, 58, 20, 76, 139, 104, 2, 207, 144, 92, 236, 20, 8, 220, 66, 98, 147, 248, 226, 255, 249, 104, 66, 37, 34, 254, 251, 8, 122, 139, 139, 15, 169, 30, 12, 244, 139, 224, 160, 102, 233, 216, 126, 92, 231, 26, 0, 164, 176, 65, 251, 184, 224, 78, 51, 117, 70, 4, 244, 238, 67, 111, 227, 132, 203, 241, 65, 179, 217, 37, 149, 95, 211, 86, 52, 69, 174, 82, 11, 41, 118, 59, 79, 76, 86, 158, 228, 134, 90, 253, 205, 108, 105, 247, 1, 186, 234, 73, 228, 102, 209, 123, 175, 112, 209, 76, 113, 137, 174, 90, 171, 64, 172, 137, 3, 209, 144, 176, 239, 253, 11, 233, 249, 166, 183, 115, 216, 176, 136, 171, 191, 17, 236, 65, 60, 221, 90, 169, 83, 111, 120, 240, 179, 7, 124, 194, 162, 207, 197, 175, 248, 210, 153, 92, 226, 203, 123, 145, 131, 113, 156, 96, 206, 227, 96, 209, 237, 3, 176, 160, 146, 129, 164, 96, 141, 91, 232, 168, 229, 44, 224, 193, 8, 119, 130, 197, 65, 251, 236, 49, 173, 209, 91, 101, 210, 213, 185, 216, 132, 7, 117, 193, 87, 7, 142, 182, 178, 159, 72, 210, 174, 186, 215, 112, 129, 62, 100, 161, 79, 166, 62, 132, 42, 249, 31, 151], [228, 203, 242, 177, 141, 136, 255, 215, 17, 151, 166, 251, 11, 60, 175, 191, 169, 229, 218, 76, 34, 164, 107, 190, 202, 154, 164, 127, 150, 3, 18, 100, 108, 91, 84, 54, 71, 170, 241, 82, 37, 198, 240, 79, 218, 34, 153, 217, 175, 220, 99, 211, 126, 65, 95, 237, 199, 153, 91, 253, 127, 216, 86, 104, 189, 224, 152, 5, 142, 42, 150, 162, 72], [95, 27, 5, 165, 169, 8, 221, 22, 43, 122, 144, 116, 235, 26, 169, 82, 190, 19, 112, 71], [145, 3, 155, 200, 91, 28, 150, 70, 31, 32, 100, 195, 76, 27, 52, 117, 55, 182, 71, 206, 255, 126, 89, 236, 234, 160, 222, 145, 15, 182, 23, 133, 249, 64, 42, 14, 207, 162, 50, 96, 192, 59, 216, 206, 198, 9, 227, 55, 94, 177, 180, 88, 63, 118, 209, 150, 161, 68, 234, 84, 163, 76, 0, 17, 110, 193, 29, 236, 146, 25, 159, 219, 228, 65, 17, 228, 77, 154, 64, 43, 37, 72, 182, 178, 163, 105, 19, 118, 237, 76, 68, 46, 184, 109, 10, 152, 141, 24, 44, 3, 90, 76, 159, 182, 71, 80, 64, 212, 216, 240, 239, 140, 92, 66, 56, 62, 109, 180, 9, 237, 164, 48, 195, 171, 77, 108, 228, 240, 140, 58, 152, 192, 126, 136, 103, 20, 65, 95, 189, 181, 177, 84, 208, 242, 39, 163, 174, 170, 8, 117, 16, 68, 136, 7, 49, 44, 93, 135, 125, 137, 111, 208, 66, 150, 22, 55, 190, 127, 114, 45, 50, 158, 190, 197, 226, 222, 118, 170, 94, 24, 143, 109, 233, 19, 192, 115, 135, 211, 251, 219, 184, 24, 124, 73, 7, 205, 174, 191, 115, 93, 126, 191, 110, 48, 44, 91, 194, 31, 205, 35, 55, 42, 166, 152, 31, 251, 30, 122, 42, 132, 34, 36, 7, 227, 148, 131, 95, 52, 2, 136, 205, 105, 133, 246, 246, 134, 224, 46, 180, 131, 126, 76, 249, 66, 190, 13, 91, 72, 15, 11, 35, 33, 166, 103, 77, 153, 72, 85, 3, 15, 71, 151, 244, 251, 0, 164, 0, 147, 163, 77, 201, 190, 193, 200, 97, 124, 74, 250, 28, 184, 89, 160, 46, 37, 208, 254, 224, 82, 158, 120, 217, 161, 62, 62, 252, 217, 197, 90, 134, 11, 213, 78, 153, 237, 127, 101, 15, 36, 18, 241, 194, 62, 145, 145, 132, 36, 236, 24, 218, 176, 109, 161, 221, 156, 86, 119, 248, 56, 187, 64, 61, 189, 241, 253, 68, 101, 190, 32, 94, 244, 0, 29, 254, 193, 103, 79, 233, 67, 55, 238, 112, 73, 148, 216, 251, 135, 16, 176, 199, 131, 154, 82, 85, 64, 56, 167, 67, 241, 228, 186], [140, 17, 254, 31, 112, 96, 64, 171, 56, 235, 186, 212, 225, 110, 183, 58, 89, 112, 71, 100, 255, 85, 20, 253, 245, 155, 50, 149, 182, 13, 36, 137, 3, 122, 19, 15, 2, 146, 53, 161, 0, 249, 150, 113, 220, 244, 28, 63, 123, 6, 35, 227, 32, 39, 197, 9, 205, 58, 123, 95, 30, 82, 206, 150, 197, 1, 243, 12, 50, 183], [17, 66, 8, 154, 250, 194, 76, 7, 220, 199, 106, 136, 65, 62, 243, 99, 84, 95, 121, 105, 49, 225, 49, 178, 27, 201, 4, 46, 204, 142, 82, 221, 134, 112, 92, 230, 111, 87, 209, 180, 240, 69, 58, 40, 105, 255, 134, 243, 70, 191, 131, 17, 118, 159, 139, 105, 62, 234, 12, 78, 153, 115, 16, 113, 91, 10, 224, 12, 6, 48, 120, 18, 219, 4, 45, 199, 71, 188, 254, 37, 78, 68, 79, 177, 12], [148, 225, 239, 155, 237, 184, 16, 234, 253, 69, 203, 98, 169, 85, 140, 186, 128, 46, 194, 89, 172, 36, 238, 155, 203, 119, 55, 254, 31, 39, 245, 91, 67, 101, 6, 175, 131, 141, 172, 45, 47, 142, 205, 189, 131, 208, 117, 175, 120, 114, 75, 136, 227, 175, 157, 7, 66, 196, 89, 167, 157, 6, 190, 250, 95, 147, 162, 26, 116, 60, 152, 223, 157, 118, 213, 236, 169, 34, 11, 45, 154, 55, 162, 230, 88, 251, 242, 176, 181, 8, 76, 90, 245, 28, 197, 14, 147, 164, 115, 232, 126, 104, 86, 138, 169, 52, 65, 243, 195, 55, 84, 221, 115, 106, 9, 45, 160, 203, 110, 59, 155, 116, 200, 24, 58, 81, 59, 41, 63, 38, 132, 24, 173, 233, 29, 10, 57, 250, 51], [127, 246, 204, 44, 111, 99, 5, 155, 164, 154, 239, 3, 20, 33, 92, 79, 252, 5, 5, 56, 188, 76, 168, 57, 155, 109, 202, 144, 166, 134, 53, 73, 77, 194, 185, 117, 92, 237, 245, 90, 19, 199, 55, 122, 234, 158, 232, 89, 79, 206, 109, 87, 40, 227, 70, 98, 92, 83, 42, 51, 25, 217, 21, 87, 91, 87, 189, 205, 69, 216, 236, 80, 211, 83, 165, 176, 104, 151, 141, 194, 237, 84, 28, 157, 45, 159, 242, 164, 63, 170, 168, 207, 74, 125, 138, 234, 64, 52, 37, 72, 117, 151, 102, 185, 231, 65, 164, 204, 145], [58, 239, 16, 160, 175, 94, 63, 249, 246, 2, 39, 130, 232, 26, 144, 42, 28, 50, 110, 9, 95, 39, 233, 78, 60, 253, 136, 231, 11, 154, 64, 182, 238, 53, 188, 30, 255, 168, 112, 191, 70, 144, 125, 5, 77, 44, 67, 4, 39, 53, 159, 235, 186, 201, 15, 213, 192, 85, 59, 243, 87, 189, 19, 248, 141, 134, 173, 176, 253, 142, 108, 118, 64, 73, 77, 108, 49, 50, 116, 132, 35, 78, 30, 204, 50, 144], [82, 112, 64, 37, 197, 137, 253, 159, 176, 206, 122, 242, 237, 132, 121, 224, 32, 189, 84, 115, 13, 33, 185, 26, 41, 84, 232, 216, 79, 217, 28, 239, 40, 145, 46, 139, 122, 149, 54, 55, 243, 242, 247, 164, 9, 95, 35, 178, 217, 38, 170, 9, 38, 173, 29, 195, 221, 113, 75, 13, 194, 91, 213, 33, 38, 199, 198, 15, 83, 9, 213, 58, 209, 175, 67, 48, 124, 157, 61, 133, 162, 180, 100, 10, 56, 136, 148, 116, 141, 219, 8, 233, 221, 97, 192, 100, 87, 213, 31], [1, 71, 237, 110, 97, 254, 136, 159, 99, 36, 43, 131, 111, 21, 198, 93, 74, 205, 95, 63, 250, 25, 78, 200, 129, 169, 168, 202, 226, 50, 26, 230, 181, 127, 145, 236, 140, 253, 255, 171, 162, 164, 203, 211, 53, 206, 206, 81, 30, 56, 156, 219, 145, 194, 236, 55, 66, 101, 180, 211, 24, 250, 59, 126, 193, 166, 182, 91, 36, 243, 250, 212, 189, 0, 166, 10, 67, 179, 198, 46, 251, 135, 162, 158, 162, 83, 195, 254, 161, 165, 180, 60, 157, 95, 32, 213, 218, 134, 166, 109, 178, 16, 20, 253, 133, 241, 62, 173, 70, 64, 211, 69, 8, 241, 0, 10, 231, 63, 210, 48, 60, 185, 77, 80, 216, 54, 105, 31, 78, 178, 46, 18, 57, 200, 247, 92, 19, 160, 16, 58, 193, 139, 155, 19, 14, 49, 210, 100, 82, 43, 82, 19, 248, 1, 226, 222, 204, 10, 218, 244, 47, 87, 46, 128, 193, 228, 94, 4, 20, 184, 50, 19, 47, 95, 229, 59, 63, 36, 67, 161, 96, 137, 50, 112, 74, 182, 44, 176, 57, 51, 217, 75, 244, 28, 221, 229, 227, 92, 168, 207], [29, 93, 208, 15, 154, 55, 33, 103, 252, 210, 210, 138, 52, 9, 46, 132, 203, 177, 177, 64, 25, 57, 64, 202, 146, 230, 106, 76, 152, 108, 7, 218, 134, 61, 249, 210, 136, 229, 136, 221, 242, 94, 146, 168, 21, 207, 219, 106, 36, 75, 53, 201, 93, 32, 98, 242, 167, 135, 1, 182, 241, 33, 74, 184, 193, 2, 101, 53], [193, 150, 171, 181, 246, 218, 217, 91, 201, 215, 140, 128, 173, 228, 249, 226, 46, 200, 254, 134, 102, 224, 149, 108, 254, 213, 72, 15, 103, 18, 119, 78, 246, 233, 26, 222, 104, 113, 240, 139, 213, 94, 217, 128, 130, 90, 55, 127, 244, 191, 158, 195, 106, 38, 113, 244, 103, 176, 104, 156, 103, 179, 50, 43, 199, 115, 195, 165, 202, 188, 126, 218, 254, 15, 37, 128, 39, 22, 204, 192, 138, 90, 153, 244, 128, 193, 140, 0, 79, 66, 198, 146, 63, 58, 95, 36, 187, 248, 214, 145, 116, 231, 52, 16, 192, 242, 170, 115, 206, 116, 190, 97, 189, 78, 222, 233, 224, 187, 63, 138, 210, 87, 145, 135, 106, 103, 110, 104, 44, 96, 160, 246, 239, 198, 15, 46, 235, 43, 91, 68, 244, 58, 85, 245, 150, 243, 226, 89, 10, 111, 138, 136, 180, 166, 170, 151, 212, 172, 32, 0, 119, 119, 208, 219, 51, 167, 81, 178, 50, 51, 181, 195, 49, 157, 64, 180, 113, 79, 74, 219, 82, 29], [19, 172, 35, 188, 49, 20, 3, 96, 254, 89, 57, 18, 205, 223, 186, 72, 203, 59, 211, 105, 147, 174, 244, 79, 199, 38, 101, 203, 198, 122, 99, 2, 210, 233, 229, 222, 234, 195, 22, 66, 228, 208, 160, 18, 126, 106, 84, 227, 241, 179, 53, 36, 107, 57, 155, 251, 177, 170, 63, 191, 131, 56, 84, 17, 139, 197, 130, 8, 84, 122, 149, 60, 47, 136, 152, 96, 55, 217, 228, 163, 230, 226, 241, 195, 156, 253, 40, 253, 173, 17, 5, 231, 235, 206, 99, 203, 45, 30, 161, 22, 108, 88, 210, 60, 247, 137, 8, 254, 158, 104, 28, 103, 189, 188, 110, 35, 185, 129, 212, 49, 235, 9, 198, 79, 108, 188, 186, 93, 102, 120, 155, 55, 123, 150, 1, 150, 131, 195, 243, 162, 10, 242, 163, 184, 154, 234, 69, 186, 167, 63, 252, 146, 18, 32, 99, 213, 198, 17, 134, 51, 34, 132, 126, 246, 80, 42, 222, 37, 54, 179, 249, 126, 56, 231, 35, 210, 148, 79, 12, 134, 38, 54, 139, 180, 30, 117, 184, 29, 249, 110, 167, 223, 41, 159, 246, 127, 220, 95, 85, 142, 130, 181, 76, 210, 180, 230, 3, 232, 132, 50, 241, 16, 97, 31, 66, 198, 11, 226, 25, 55, 219, 109, 202, 14, 89, 21, 241, 222, 127, 203, 40, 195, 59, 14, 112, 72, 120, 69, 41, 69, 189, 107, 53, 9, 237, 17, 148, 189, 191, 124, 240, 136, 37, 244, 46, 207, 189, 71, 60, 208, 205, 244, 220, 77, 33, 216, 55, 71, 221, 201, 220, 53, 150, 134, 68, 167, 120, 116, 152, 168, 105, 170, 237, 142, 157, 199, 223, 254, 84, 180, 162, 5, 112, 251, 142, 188, 244, 108, 127, 223, 3, 87, 207, 17, 179, 5, 114, 14, 30, 86, 193, 95, 6, 49, 179, 9, 167, 145, 239, 209, 224, 181, 193, 21, 246, 124, 241, 234, 212, 13, 8, 119, 122, 246, 116, 66, 24, 136, 90, 166, 184, 222, 91, 151, 10, 99, 110, 130, 79, 219, 162, 185, 191, 51, 164, 55, 39, 184, 37, 159, 22, 176, 180, 94, 12, 166], [140, 81, 104, 67, 146, 151, 148, 83, 128, 36, 66, 19, 65, 197, 96, 139, 21, 3, 104, 253, 70, 194, 176, 174, 60, 33, 89, 138, 156, 186, 117, 133, 17, 103, 62, 8, 40, 214, 176, 130, 152, 232, 93, 28, 213, 232, 211, 85, 156, 217, 168, 170, 202, 127, 225, 229, 255, 55, 171, 242, 66, 166, 208, 247, 21, 133, 254, 13, 206, 189, 199, 57, 209, 100, 155, 149, 13, 25, 103, 173, 236, 109, 220, 231, 237, 13, 225, 84, 1, 159, 58, 33, 67, 99, 217, 238, 72, 228, 135, 73, 116, 104, 79, 46, 112, 53, 190, 227, 236, 176, 5, 254, 11, 235, 185, 7, 158, 180, 1, 63, 94, 25, 177, 133, 130, 140, 15, 48, 135, 4, 64, 144, 41, 243, 97, 39, 197, 248, 40, 7, 185, 57, 190, 104, 179, 212, 139, 199, 0, 240, 48, 225, 215, 192, 244, 246, 7, 72, 238, 174, 178, 223, 91, 253, 77, 66, 232, 89, 60, 148, 230, 101, 92, 78, 175, 247, 160, 29, 79, 12, 99, 211, 206, 218, 88, 213, 116, 51, 253, 145, 217, 177, 106, 165, 66, 214, 138, 58, 36, 142, 243, 24, 128, 167, 118, 106, 121, 141, 225, 121, 247, 97, 218, 39, 126, 105, 130, 253, 10, 127, 136, 194, 20, 194, 17, 107, 239, 176, 72, 99, 38, 109, 107, 122, 179, 156, 167, 171, 75, 110, 211, 155, 172, 170, 5, 177, 178, 135, 46, 165, 243, 191, 174, 10, 206, 173, 180, 206, 3, 249, 209, 86, 211, 104, 59, 107, 21, 82, 111, 188, 97, 170, 71, 189, 225, 79, 51, 50, 129, 16, 43, 250, 111, 231, 19, 98, 215, 220, 91, 18, 112, 125, 43, 116, 105, 32, 35, 221, 184, 216, 56, 232, 23, 66, 172, 217, 249, 17, 207, 246, 183, 216, 143, 244, 213, 180, 39, 98, 167, 51], [23, 58, 152, 64, 21, 132, 118, 167, 8, 66, 61, 221, 96, 93, 159, 247, 158, 148, 207, 48, 252, 24, 100, 101, 173, 180, 110, 42, 250, 10, 247, 152, 148, 64, 222, 139, 157, 200, 63, 117, 45, 84, 227, 139, 76, 20, 219, 123, 232, 141, 52, 237, 47, 232, 67, 165, 71, 195, 226, 173, 84, 103, 247, 217, 134, 41, 220, 221, 92, 5, 152, 242, 109, 218, 124, 82, 34, 63, 59, 76, 115, 194, 168, 228, 161, 71, 66, 44, 251, 61, 165, 26, 43, 124, 29, 200, 146, 167, 99, 227, 161, 95, 3, 227, 0, 114, 197, 91, 146, 214, 246, 81, 59, 237, 39, 47, 107, 34, 237, 51, 181, 203, 204, 151, 188, 137, 152, 131, 129, 55, 114, 3, 230, 218, 14, 122, 33, 126, 89, 39, 183, 165, 203, 90, 189, 160, 244, 84, 54, 144, 108, 99, 82, 244, 48, 191, 16, 51, 3, 254, 165, 128, 28, 179, 148, 130, 89, 117, 29, 41, 155, 12, 247, 248, 86, 4, 140, 79, 96, 187, 228, 80, 29, 64, 254, 163, 229, 102, 54, 223, 29, 196, 244, 201, 247, 178, 112, 177, 209, 186, 31, 115, 220, 120, 207, 106, 122, 184, 162, 14, 102, 73, 234, 95, 173, 148, 152, 233, 0, 172, 21, 120, 121, 204, 181, 126, 245, 104, 106, 102, 112, 117, 116, 32, 9, 111, 248, 143, 7, 93, 63, 134, 103, 155, 89, 177, 14, 161, 99, 99, 158, 221, 144, 106, 179], [249, 2, 39, 136, 57, 86, 227, 91, 104, 188, 106, 15, 247, 244, 156, 204, 220, 0, 26, 93, 196, 166, 158, 131, 120, 213, 143, 203, 13, 90, 32, 78, 16, 41, 187, 238, 187, 118, 79, 87, 16, 186, 246, 185, 223, 136, 207, 50, 200, 23, 31, 167, 178, 109, 187, 104, 234, 196, 15, 215, 31, 188, 108, 216, 196, 167, 164, 55, 226, 98, 46, 52, 150, 206, 234, 160, 73, 68, 15, 230, 211, 130, 8, 20, 10, 66, 65, 224, 49, 247, 213, 135, 223, 158, 31, 164, 35, 9, 210, 230, 161, 187, 156, 102, 63, 186, 150, 225, 20, 27, 43, 183, 69, 147, 128, 116], [124, 187, 80, 141, 141, 85, 68, 79, 33, 223, 230, 138, 246, 247, 47, 163, 73, 183, 174, 21, 90, 26, 179, 29, 58, 202, 176, 70, 132, 83, 233, 178, 62, 209, 150, 245, 129, 88, 220, 253, 133, 2, 137, 199, 192, 181, 111, 225, 47, 184, 217, 29, 32, 194, 253, 3, 183, 92, 114, 57, 194, 48, 127, 94, 243, 207, 15, 113, 184, 225, 167, 217, 224, 216, 96, 2, 176, 4, 141, 8, 115, 189, 104, 6, 83, 29, 227, 246, 235, 16, 144, 62, 71, 240, 158, 128, 151, 175, 244, 214, 1, 63, 20, 47, 89, 242, 198, 165, 68, 0, 137, 195, 101, 127, 53, 148, 45, 188, 165, 68, 224, 176, 57, 18, 43, 47, 76, 184, 243, 59, 67, 116, 64, 21, 150, 210, 60, 145, 171, 254, 184, 67, 21, 171, 150, 99, 144, 92, 40, 146, 11, 150, 41, 20, 120, 183, 24, 230, 202, 205, 141, 205, 220, 53, 150, 151, 99, 78, 111, 70, 73, 222, 188, 103, 104, 169, 11, 103, 185, 111, 32, 95, 69, 168, 78, 20, 233, 230, 98, 91, 63, 142, 115, 60, 88, 246, 108, 87, 97, 48, 163, 222, 190, 239, 254, 21, 235, 205, 71, 42, 150, 136, 128, 82, 193, 85, 186, 94, 49, 152, 62, 203, 87, 194, 1, 217, 136, 77, 55, 252, 98, 237, 74, 75, 215, 35, 95, 84, 227, 218, 78, 205, 115, 225, 140, 245, 70, 129, 82, 69, 71, 152, 180, 137, 104, 229, 89, 64, 3, 4, 1, 216, 193, 59, 23, 116, 214, 239, 57, 144, 61, 183, 0, 11, 14, 99, 242, 60, 113, 157, 234, 99, 238, 149, 112, 16, 11, 112, 85, 36, 196, 65, 183, 40, 90, 233, 250, 30, 158, 248, 100, 211, 252, 134, 200, 133, 47, 85, 252], [49, 154, 220, 101, 55, 115, 129, 107, 14, 168, 195, 18, 22, 73, 99, 222, 56, 98, 244, 39, 153, 180, 196, 42, 54, 74, 8, 253, 182, 16, 166, 112, 166, 116, 85, 27, 55, 19, 185, 123, 178, 51, 27, 86, 31, 196, 93, 63, 199, 230, 85, 227, 252, 41, 87, 3, 116, 144, 163, 25, 108, 121, 96, 24, 71, 41, 108, 70, 48, 138, 89, 141, 125, 159, 163, 35, 6, 37, 53, 195, 104, 9, 241, 88, 7, 51, 178, 166, 223, 7, 68, 87, 53, 79, 142, 215, 17, 50, 122, 192, 4, 203, 48, 154, 62, 155, 64, 104, 209, 158, 87, 145, 8, 101, 136, 148, 55, 112, 115, 69, 11, 222, 176, 128, 95, 45, 202, 122, 21, 155, 5, 141, 66, 156, 219, 81, 109, 71, 241, 121, 250, 101, 172, 11, 188, 113, 84, 0, 18, 53, 0, 100, 27, 131, 34, 121, 133, 149, 242, 196, 122, 73, 207, 67, 92, 84, 228, 241, 192, 238, 203, 118, 44, 142, 121, 94, 183, 113, 207, 215, 255, 236, 184, 175, 85, 183, 178, 28, 123, 248, 172, 194, 200, 172, 135, 71, 151, 76, 1, 96, 2, 114, 73, 203, 42, 214, 245, 80, 156, 177, 164, 23, 244, 44, 104, 162, 92, 64, 196, 209, 151, 244, 175, 39, 59, 143, 44, 192, 210, 163, 97, 125, 166, 66, 7, 36, 92, 121, 225, 149, 11, 169, 215, 7, 26, 121, 249, 100, 72, 124, 217, 89, 146, 43, 16, 94, 56, 38, 170, 85, 1, 49, 162, 254, 136, 210, 180, 77, 150, 216, 46, 145, 161, 196, 134, 58, 203, 21, 165, 107, 151, 3, 39, 170, 27, 138, 246, 82, 209, 210, 175, 118, 60, 9, 72, 41, 119, 119, 207, 222, 103, 149, 194, 149, 19, 138, 106, 15, 194, 90, 2], [85, 70, 203, 86, 170, 35, 146, 77, 33, 195, 131, 1, 225, 163, 191, 159, 43, 243, 161, 85, 166, 194, 242, 216, 29, 115, 24, 79, 123, 83, 149, 213, 52, 142, 25, 198, 10, 50, 227, 118, 55, 52, 86, 77, 242, 64, 77, 45, 164, 134, 127, 74, 223, 87, 19, 73, 15, 28, 115, 40, 190, 16, 138, 72, 72, 69, 77, 48, 21, 165, 234, 170, 27, 149, 217, 87, 67, 32, 52, 160, 163, 33, 242, 219, 107, 160, 38, 188, 105, 83, 95, 5, 106, 205, 38, 171, 220, 38, 21, 129, 167, 74, 46, 194, 2, 27, 183, 114, 92, 121, 10, 132, 134, 76, 237, 65, 18, 206, 115, 121, 104, 32, 97, 146, 151, 195, 4, 77, 102, 46, 212, 101, 220, 111, 237, 135, 185, 137, 226, 18, 216, 169, 48, 5, 1, 91, 68, 199, 85, 179, 233, 101, 191, 105, 58, 113, 5, 94, 145, 154, 78, 226, 240, 115, 105, 136, 218, 123, 155, 12, 112, 18, 45, 60, 159, 31, 146, 146, 70, 202, 158, 238, 130, 23, 235, 132, 191, 110, 117, 49, 138, 134, 244, 118, 152, 13, 46, 191, 25, 96, 94, 85, 116, 194, 212, 17, 26, 170, 50, 57, 119, 146, 48, 40, 164, 60, 46, 185, 35, 244, 43, 140, 27, 60, 61, 89, 86, 135, 53, 237, 119, 92, 85, 129, 71, 192, 253, 150, 153, 63, 92, 117, 48, 104, 118, 180, 193, 57, 192, 31, 177, 22], [52, 118, 123, 103, 56, 210, 172, 120, 46, 83, 69, 10, 234, 99, 2, 201, 253, 3, 116, 130, 217, 169, 51, 198, 146, 0, 100, 62, 175, 255, 133, 177, 209, 18, 6, 219, 59, 67, 144, 221, 122, 133, 68, 253, 185, 24, 26, 121, 166, 31, 59, 99, 44, 226, 243, 179, 225, 83, 133, 110, 173, 237, 192, 212, 97, 149, 54, 37, 180, 201, 95, 99, 74, 5, 56, 242, 198, 123, 124, 150, 146, 128, 204, 75, 151, 195, 183, 58, 57, 29, 77, 119, 25, 190, 120, 252, 124, 208, 141, 155, 100, 228, 35, 60, 250, 80, 47, 130, 158, 243, 197, 72, 111, 153, 125, 148, 32, 167, 190, 48, 61, 25, 155, 45, 48, 157, 7, 181, 60, 74, 2, 141, 211, 220, 202, 205, 222, 146, 223, 244, 106, 254, 44, 243, 116, 239, 78, 165, 3, 131, 192, 235, 206, 204, 196, 159, 1, 163, 192, 243, 62, 4, 9, 45, 116, 246, 51, 7, 216, 235, 51, 29, 202, 171, 184, 118, 181, 145, 63, 110, 49, 116, 160, 65, 30, 54, 81, 166, 45, 124, 57, 253, 228, 127, 105, 114, 105, 17, 76, 18, 30, 181, 28, 182, 48, 187, 72, 130, 43, 213, 131, 132, 228, 6, 208, 200, 157, 107, 79, 187, 247, 195, 30, 159, 158, 145, 79, 32, 20, 222, 90, 8, 253, 158, 237, 220, 174, 48, 226, 193, 88, 60, 84, 179, 221, 114, 216, 219, 245, 14, 175, 133, 95, 208, 148, 233, 52, 26, 46, 42, 23, 27, 6, 12, 221, 150, 38, 231, 121, 52, 92, 221, 108, 6, 79, 9, 160, 133, 101, 96, 81, 237, 137, 166, 224, 88, 119, 229, 53, 52, 241, 118, 178, 52, 205, 86, 167, 39, 132, 171, 193, 29, 250, 205, 102, 245, 175, 133, 201, 110, 201, 134, 178, 192, 25, 145, 88, 111, 181, 255, 65, 32, 2, 10, 193, 80, 52, 37, 60, 221, 191, 255, 36, 137, 188, 158, 218, 224, 169, 60, 183, 194, 92, 234, 196, 15, 245, 253, 187, 58, 226, 130, 133, 168, 67, 148, 220, 166, 45, 51, 131, 29, 151, 234, 164, 4, 33, 183, 230, 245, 161], [74, 116, 141, 181, 5, 18, 33, 14, 252, 143, 171, 80, 39, 11, 252, 193, 213, 25, 164, 63, 56, 80, 68, 13, 150, 129, 38, 19, 233, 128, 193, 197, 195, 5, 143, 37, 117, 52, 18, 156, 221, 67, 74, 208, 85, 232, 140, 168, 22, 61, 232, 28, 93, 120, 57, 217, 197, 98, 242, 245, 40, 91, 87, 254, 116, 200, 98, 202, 204, 63, 255, 225, 116, 181, 142, 202, 153, 196, 227, 70, 197, 182, 204, 98, 239, 217, 202, 31, 54, 177, 112, 165, 246, 22, 7, 221, 157, 4, 152, 52, 191, 113, 221, 179, 32, 186, 17, 87, 43, 52, 72, 63, 100, 194, 218, 79, 226, 138, 124, 142, 164, 141, 239, 186, 104, 204, 218, 197, 108, 252, 208, 42, 215, 168, 5, 184, 66, 207, 75, 211, 11, 202, 205, 63, 65, 125, 162, 163, 215, 111, 172, 233, 234, 49, 92, 187, 98, 23, 26, 143, 205, 160, 153, 33, 151, 79, 186, 17, 169, 178, 98, 137, 87, 251, 164, 164, 211, 156, 35, 154, 59, 134, 58, 165, 12, 19, 124, 101, 87, 228, 215, 177, 250, 6, 236, 161, 222, 174, 157, 228, 180, 174, 70, 243, 210, 59, 32, 178, 232, 182, 64, 238, 131, 42, 245, 4, 124, 58, 152, 161, 80, 80, 154, 190, 188, 210, 92, 87, 67, 223, 85, 4, 176, 63, 165, 115, 213, 213, 253, 10, 54, 218, 6, 116, 27, 219, 206, 20, 145, 216, 141, 20, 1, 246, 222, 68, 53, 88, 32, 163, 149, 121, 3, 194, 108, 181, 92, 58, 130, 191, 45, 250, 209, 82, 49, 242, 89, 232, 16, 3, 5, 246, 236, 129, 198, 54, 216, 18, 99, 118, 197, 205, 170, 255, 95, 98, 125, 190, 87, 120, 19, 108, 233, 77, 58, 151, 194, 141, 232], [36, 40, 29, 242, 211, 224, 228, 230, 29, 81, 219, 62, 32, 237, 90, 222, 87, 120, 18, 12, 58, 97, 169, 254, 94, 19, 16, 116, 86, 72, 182, 156, 239, 29, 75, 199, 233, 201, 196, 10, 61, 117, 42, 36, 213, 84, 233, 231, 69, 143, 200, 19, 103, 117, 127, 105, 121, 130, 71, 76, 253, 69, 223, 102, 65, 116, 211, 196, 174, 119, 76, 26, 193, 85, 148, 10, 138, 37, 249, 81, 76, 19, 158, 15, 78, 135, 181, 210, 253, 126, 135, 240, 80, 25, 142, 76, 247, 248, 8, 230, 128, 217, 130, 52, 57, 78, 133, 30, 211, 153, 133, 148, 202, 213, 247, 35, 18, 40, 172, 174, 162, 86, 29, 117, 144, 77, 149, 255, 47, 12, 8, 247, 35, 91, 16, 167, 121, 213, 155, 200, 64, 165, 62, 7, 237, 80, 20, 54, 250, 137, 167, 206, 140, 185, 39, 153, 51, 225, 172, 98, 176, 247, 17, 172, 177, 109, 252, 249, 36, 122, 97, 101, 248, 225, 140, 178, 135, 217, 122, 240, 241, 98, 79, 249, 35, 237, 207, 245, 236, 161, 15, 12, 51, 196, 126, 18, 215, 215, 251, 220, 62, 118, 184, 163, 89, 234, 48, 183, 239, 62, 115, 157, 157, 15, 108, 182, 15, 171, 117, 20, 198, 109, 130, 49, 233, 122, 137, 255, 141, 22, 157, 253, 233, 34, 85, 184, 65, 109, 125, 142, 202, 142, 107, 53, 134, 141, 246, 235, 223, 233, 167, 16, 6, 131, 103, 80, 216, 183, 0, 222, 217, 204, 108, 18, 16, 5, 204, 127, 63, 44, 98, 154, 28, 111, 87, 254, 192, 101, 13, 77, 76, 67, 128, 220, 183, 93, 68, 124, 124, 194, 239, 63, 132, 126, 131, 128, 36, 202, 165, 40, 186, 67, 62, 88, 160, 221, 15, 178, 138, 146, 48, 108, 234, 184, 110, 78, 51, 61, 243, 162, 160, 161, 171, 174, 74, 160, 116, 219, 74, 234, 79, 90, 235, 216, 89, 228, 161, 231, 226, 73], [2, 212, 216, 91, 49, 218, 231, 102, 251, 57, 12, 92, 62, 46, 225, 146, 165, 49, 234, 156, 243, 141, 180, 105, 189, 244, 166, 222, 95, 173, 97, 199, 40, 243, 122, 50, 60, 74, 8, 50, 99, 236, 122, 167, 43, 13], [248, 44, 149, 57, 124, 159, 146, 21, 156, 188, 170, 211, 30, 133, 231, 112, 236, 230, 225, 252, 95, 184, 104, 85, 73, 150, 51, 4, 205, 208, 16, 14, 233, 238, 201, 80, 208, 230, 165, 66, 54, 98, 126, 89, 54, 75, 76, 3], [119, 126, 96, 145, 228, 10, 184, 125, 18, 221, 217, 70, 205, 144, 75, 21, 56, 214, 110, 94, 44, 88, 95, 192, 121, 114, 124, 26, 26, 211, 49, 188, 94, 22, 14, 158, 239, 14, 248, 195, 141, 114, 38, 237, 54, 71, 33, 161, 241, 142, 249, 241, 55, 180, 211, 227, 209, 37, 122, 24, 7, 70, 134, 128, 135, 172, 223, 254, 207, 18, 243, 146, 5, 113, 205, 181, 232, 51, 15, 147, 125, 57, 99, 109, 154, 163, 254, 185, 203, 150, 162, 208, 252, 63, 221, 233, 35, 165, 70, 144, 200, 33, 180, 134, 138, 193, 180, 141, 164, 161, 60, 88, 63, 72, 128, 45, 61, 246, 28, 154, 167, 193, 167, 51, 141, 233, 84, 239, 19, 167, 158, 17, 137, 57, 14, 189, 56, 220, 27, 1, 252, 17, 91, 180, 144, 80, 184, 136, 87, 5, 83, 66, 242, 217, 73, 92, 140, 150, 93, 190, 42, 70, 65, 189, 22, 212, 33, 210, 243, 241, 155, 208, 30, 127, 81, 181, 224, 123, 248, 182, 125, 81, 237, 102, 222, 118, 172, 108, 74, 243, 246, 233, 245, 75, 140, 66, 46, 75, 153, 61, 229, 21, 249, 197, 49, 130, 52, 249, 25, 165, 230, 209, 227, 243, 194, 63, 166, 29, 254, 48, 165, 160, 118, 200, 41, 35, 176, 111, 65, 47, 208, 49, 124, 170, 52, 207, 45, 55, 164, 71, 1, 36, 35, 128, 138, 232, 225, 72, 39, 35, 113, 227, 8, 29, 116, 97, 109], [125, 87, 232, 161, 164, 16, 31, 125, 7, 60, 179, 68, 174, 210, 174, 127, 87, 104, 194, 71, 38, 177, 130, 225, 22, 62, 169, 7, 169, 24, 240, 29, 187, 181, 172, 126, 212, 201, 156, 160, 239, 61, 173, 185, 209, 235, 71, 0, 85, 152, 172, 206, 200, 236, 110, 192, 30, 249, 67, 146, 178, 3, 37, 240, 154, 117, 30, 128, 159, 223, 96, 132, 121, 7, 179, 141, 118, 107, 211, 209, 170, 130, 101, 235, 156, 248, 34, 152, 171, 175, 124, 220, 127, 130, 224, 148, 231, 150, 159, 139, 70, 34, 40, 220, 127, 43, 44, 250, 202, 31, 241, 235, 40, 36, 223, 122, 113, 150, 206, 88, 167, 200, 212, 42, 171, 135, 56, 107, 98, 128, 173, 233, 251, 58, 23, 215, 223, 137, 222, 13, 118, 229, 135, 143, 139, 173, 195, 105, 15, 194, 184, 70, 33, 238, 184, 32, 70, 203, 44, 250, 69, 139, 25, 178, 148, 143, 149], [146, 120, 68, 112, 31, 82, 238, 209, 244, 18, 85, 248, 101, 26, 161, 103, 72, 68, 115, 30, 231, 25, 29, 41, 121, 204, 255, 50, 132, 246, 30, 114, 21, 240, 135, 154, 84, 175, 104, 185, 95, 138, 196, 183, 221, 6, 102, 58, 80, 229, 198, 60, 218, 94, 33, 90, 83, 225, 243, 214, 186, 8, 230, 255, 179, 132, 214, 98, 223, 247, 8, 115, 113, 95, 123, 22, 45, 28, 74, 167, 130, 170, 250, 19, 60, 52, 157, 68, 204, 29, 186, 234, 66, 63, 224, 68, 144, 81, 20, 173, 183, 96, 52, 254, 200, 122, 103, 188, 129, 23, 163, 2, 211, 196, 11, 230, 131, 133, 124, 32, 78, 117, 112, 76, 91, 233, 153, 28, 162, 245, 243, 112, 217, 173, 205, 14, 35, 254, 204, 162, 21, 227, 83, 174, 122, 214, 144, 188, 206, 66, 58, 33, 132, 250, 161, 235, 100, 130, 146, 145, 88, 46, 188, 179, 82, 116, 20, 25, 29, 232, 96, 237, 69, 119, 99, 80, 15, 131, 143, 101, 221, 124, 189, 70, 4, 97, 200, 108, 141, 233, 125, 212, 23, 67, 127, 184, 233, 70, 23, 33, 192, 184, 230, 245, 179, 72, 52, 28, 77, 3, 221, 11, 16, 122, 142, 186, 98, 63, 33, 12, 92, 216, 95, 254, 213, 199, 251, 253, 64, 122, 124, 32, 176, 197, 41, 36, 147, 159, 38, 71, 153, 135, 189, 48, 212, 92, 149, 13, 14, 209, 148, 129, 111, 242], [24, 98, 98, 234, 14, 235, 20, 199, 20, 158, 24, 31, 70, 31, 136, 108, 218, 201, 127, 220, 163, 173, 159, 248, 21, 54, 55, 56, 46, 70, 105, 208, 105, 87, 197, 118, 38, 183, 3, 191, 84, 75, 19, 202, 3, 110, 87, 197, 194, 178, 132, 57, 87, 134, 233, 37, 112, 190, 65, 5, 135, 226, 172, 243, 16, 138, 12, 19, 110, 72, 241, 235, 231, 65, 246, 171, 159, 127, 148, 193, 13, 224, 188, 219, 98, 36, 89, 231, 161, 136, 242, 176, 219, 164, 154, 19, 120, 232, 36, 242, 220, 83, 147, 9, 74, 136, 45, 242, 144, 31, 251, 156, 72, 180, 220, 129, 135, 247, 93, 147, 82, 233, 239, 109, 113, 6, 23, 120, 86, 195, 116, 96, 91, 203, 127, 201, 102, 200, 188, 125, 163, 68, 102, 226, 11, 19, 55, 212, 58, 84, 227, 104, 69, 137, 121, 10, 235, 165, 245, 36, 52], [147, 203, 80, 223, 139, 189, 187, 238, 241, 152, 16, 0, 184, 127, 129, 15, 227, 133, 171, 150, 247, 4, 52, 53, 44, 76, 197, 183, 56, 163, 47, 6, 76, 15, 13, 4, 190, 70, 221, 62, 170, 189, 248, 29, 248, 2, 61, 226, 134, 254, 13, 132, 204, 15, 60, 83, 147, 244, 12, 166, 54, 3, 17, 233, 237, 213, 83, 229, 54, 95, 0, 33, 136, 20, 246, 51, 34, 86, 79, 83, 186, 91, 122, 233, 221, 176, 99, 46, 87, 75, 210, 250, 0, 225, 107, 2, 21, 195, 164, 166, 103, 213, 170, 25, 138, 191, 208, 109, 171, 200, 108, 139, 31, 41, 135, 251, 33, 144, 143, 107, 85, 102, 131, 12, 18, 113, 194, 140, 109, 25, 36, 206, 125, 205, 25, 194, 151, 23, 165, 201, 10, 254, 113, 129, 199, 74, 74, 66, 246, 137, 234, 86, 156, 71, 74, 39, 93, 170, 143, 55, 126, 184, 195, 59, 46, 253, 122, 181, 14, 229, 222, 61, 78, 214, 245, 138, 64, 134, 188, 74, 66, 67, 103, 161, 19, 42, 85, 97, 59, 214, 74, 39, 27, 221, 236, 132, 120, 210, 74, 4, 187, 151, 41, 123, 60, 8, 2, 189, 243, 195, 193, 83, 204, 16, 98, 174, 51, 181, 143, 137, 252, 119, 96, 140, 234, 155, 233, 15, 8, 67, 115, 251, 218, 15, 207, 211, 89, 185, 203, 233, 61, 86, 228, 222, 119, 173, 35, 160, 137, 174, 52, 184, 227, 70, 241, 135, 0, 93, 35, 254, 48, 204, 119, 152, 32, 3, 205, 69, 209, 44, 21, 203, 151, 238, 148, 164, 158, 8, 214, 210, 75, 2, 3, 35, 48, 162, 89, 155, 16, 182, 162, 101, 191, 232, 33, 68, 40, 15, 192, 50, 52, 180, 218, 217, 13, 232, 156, 5, 24, 69, 180, 31, 119, 0, 24, 81, 216, 224, 84, 42, 75, 240, 144, 13, 56, 150, 246, 196, 206, 243, 24, 125, 176, 9, 92, 253, 130, 239, 3, 197, 84, 145, 23, 101, 155, 151, 86, 53, 231, 36, 9, 218, 194, 24, 232], [14, 58, 11, 198, 251, 182, 96, 236, 2, 165, 28, 221, 193, 124, 70, 31, 250, 8, 196, 73, 206, 86, 245, 104, 35, 26, 139, 214, 166, 44, 88, 141, 126, 109, 155, 89, 209, 45, 1, 185, 152, 67, 49, 144, 79, 214, 177, 243, 185, 123, 39, 56, 226, 41, 180, 90, 232, 119, 204, 31, 67, 69, 240, 74, 144, 227, 69, 13, 48, 20, 231, 224, 53, 74, 123, 228, 96, 45, 71, 53, 7, 4, 222, 229, 16, 178, 6, 70, 167, 189, 154, 209, 204, 250, 122, 74, 117, 130, 112, 62, 126, 216, 186, 238, 122, 76, 49, 183, 100, 216, 183, 33, 202, 254, 92, 168, 198, 16, 110, 158, 173, 173, 238, 226, 92, 221, 60, 108, 133, 76, 188, 202, 185, 91, 129, 134, 160, 238, 186, 247, 231, 4, 59, 191, 112, 190, 222, 196, 199, 53, 33, 76, 171, 6, 192, 214, 225, 150, 45, 4, 160, 21, 241, 108, 115, 6, 19, 59, 65, 85, 187, 8, 80, 0, 39, 85, 73, 153, 79, 65, 126, 123, 180, 90, 244, 172, 217, 109, 96, 145, 156, 44, 51, 79, 229, 52, 108, 63, 43, 189, 215, 218, 195, 30, 173, 206, 236, 202, 47, 252, 26, 170, 34, 65, 106, 228, 148, 241, 252, 125, 34, 36, 144, 22, 185, 111, 165, 229, 115, 38, 215, 5, 20, 127, 179, 70, 30, 183, 46, 223, 134, 108, 98, 192, 115, 123, 238, 184, 60, 129, 243, 255, 4, 94, 61, 223, 254, 180, 12, 86, 140, 55, 14, 19, 47, 187, 225, 155, 24, 19, 179, 55, 51, 91, 122, 150, 46, 175, 25, 206, 47, 101, 187, 1, 53, 140, 34, 236, 79, 70, 243, 6, 122, 141, 127, 109, 116, 247, 67, 202, 197, 97, 153, 144, 202, 71, 104, 93, 30, 55, 83, 11, 168, 98, 8, 63, 128, 70, 187, 159, 63, 7, 225, 68, 199, 25, 119, 225, 186, 212, 217, 114, 11, 107, 137, 235, 116, 96, 106, 55, 64, 210, 198, 20, 116, 242, 245, 227, 201], [84, 193, 208, 197, 161, 203, 73, 46, 139, 198, 227, 215, 37, 55, 28, 141, 14, 142, 19, 223, 182, 34, 120, 211, 9, 180, 12, 211, 177, 252, 232, 187, 54, 129, 85, 126, 199, 223, 87, 94, 158, 26, 85, 27, 68, 173, 8, 54, 197, 147, 21, 231, 247, 26, 254, 9, 77, 124, 193, 65, 234, 150, 56, 100, 158, 153, 20, 84, 187, 230, 20, 221, 172, 211, 114, 117, 79, 186, 167, 0, 25, 235, 30, 251, 174, 254, 43, 198, 100, 94, 62, 85, 138, 253, 111, 221, 106, 231, 154, 63, 91, 18, 121, 230, 148, 191, 60, 190, 200, 161, 253, 9, 93, 76, 184, 165, 156, 137, 109, 194, 107, 85, 56, 160, 55, 70, 123, 175, 138, 51, 195, 239, 8, 124, 197, 231, 35, 76, 45, 82, 220, 220, 79, 179, 114, 74, 158, 141, 168, 234, 62, 188, 155, 177, 37, 2, 130, 2, 165, 130, 86, 39, 131, 124, 145, 86, 18, 66, 33, 4, 3, 55, 73, 168, 50, 133, 110, 149, 22, 164, 99, 135, 154, 53, 247, 35, 200, 138, 70, 250, 252, 73, 99, 140, 78, 177, 14, 249, 147, 232, 108, 171, 151, 71, 198, 53, 251, 47, 129, 151, 146, 212, 108, 226, 14, 248, 253, 246, 190, 193, 244, 116, 108, 198, 172, 58, 64, 121, 206, 66, 200, 166, 216, 14, 246, 67, 66, 122, 206, 142, 250, 217, 97, 207, 193, 0, 175, 104, 56, 113, 74, 71, 252, 251, 51, 244, 173, 106, 231, 123, 23, 21, 4, 85, 195, 49, 183, 218, 2, 255, 44, 55, 226, 174, 161, 209, 200, 225, 185, 213, 48, 73, 194, 209, 12, 239, 103, 156, 241, 155, 81, 67, 205, 136, 66, 113, 91, 35, 2, 69, 174, 15, 184, 201, 93, 19, 55, 201, 65, 69, 116, 70, 93], [88, 235, 108, 180, 169, 131, 217, 148, 30, 239, 136, 129, 204, 133, 50, 7, 70, 92, 176, 60, 24, 115, 58, 100, 132, 242, 86, 168, 123, 85, 39, 166, 3, 35, 168, 251, 35, 97, 251, 95, 145, 7, 109, 67, 212, 228, 165, 251, 8, 244, 171, 129, 213, 163, 37, 1, 186, 177, 106, 144, 202, 245, 191, 36, 231, 142, 119, 105, 89, 53, 66, 55, 208, 102, 255, 83, 50, 249, 111, 112, 32, 190], [214, 175, 228, 242, 148, 133, 242, 6, 217, 106, 145, 169, 104, 127, 165, 35, 244, 156, 6, 235, 38, 248, 176, 59, 85, 195, 206, 86, 77, 167, 220, 178, 47, 81, 104, 142, 105, 156, 78, 117, 197, 138, 105, 0, 233, 33, 86, 34, 178, 159, 31, 1, 130, 55, 196, 9, 219, 9, 129, 183, 163, 179, 63, 96, 84, 127, 52, 20, 23, 42, 3, 107, 151, 153, 100, 135, 12, 7, 30, 64, 63, 161, 162, 57, 29, 85, 142, 237, 223, 253, 16, 138, 196, 209, 167, 91, 141, 50, 2, 182, 205, 200, 84, 215, 136, 241, 152, 58, 148, 96, 19, 181, 47, 16, 57, 28, 140, 71, 107, 57, 249, 85, 131, 182, 89, 241, 68, 93, 126, 154, 109, 42, 90, 72, 191, 243, 164, 185, 29, 144, 181, 79, 217, 130, 122, 65, 88, 238, 106, 113, 17, 62, 204, 29, 209, 73, 138, 112, 169, 216, 162, 253, 253, 55, 25, 13, 207, 165, 155, 219, 208, 58, 108, 128, 166, 152, 242, 242, 157, 68, 99, 48, 173, 238, 112, 186, 170, 223, 134, 14, 213, 61, 230, 255, 101, 50, 116, 172, 106, 186, 194, 4, 75, 254, 202, 128, 199, 63, 237, 91, 101, 2, 24, 28, 175, 118, 51, 213, 120, 38, 80, 130, 84, 118, 246, 69, 11, 169, 169, 99, 119, 104, 232, 26, 243, 200, 52, 13, 177, 32, 224, 32, 139, 176, 14, 40, 11, 158, 87, 23, 191, 4, 175, 232, 117, 234, 199, 69, 212, 116, 187, 200, 224, 211, 138, 222, 189, 44, 86, 54, 237, 93, 39, 177, 105, 140, 220, 14, 188, 84, 191, 129, 55, 255, 13, 196, 104, 196, 124, 189, 17, 74, 109, 193, 250, 67, 216, 147, 194, 12, 161, 132, 145, 13, 168, 52, 140, 61, 204, 22, 148, 232, 114, 100, 57, 102, 146, 231], [231, 30, 91, 143, 98, 220, 222, 175, 157, 248, 157, 62, 234, 35, 197, 181, 38, 60, 181, 48, 166, 124, 13, 3, 211, 24, 218, 20, 162, 44, 217, 17], [181, 39, 11, 210, 47, 228, 239, 201, 62, 235, 83, 205, 129, 74, 14, 62, 58, 202, 39, 129, 204, 88, 115, 28, 122, 108, 128, 98, 145, 167, 162, 58, 113, 149, 126, 130, 121, 178, 204, 102, 212, 128, 206, 35, 109, 148, 193, 129, 18, 32, 2, 187, 226, 116, 198, 244, 220, 253, 130, 251, 146, 119, 133, 237, 147, 213, 240, 76, 18, 82, 250, 133, 125, 228, 159, 214, 192, 137, 101, 132, 40, 37, 232, 240, 112, 153, 218, 201, 138, 206, 14, 133, 46, 154, 92, 191, 65, 65, 10, 34, 119, 67, 81, 19, 17, 216, 224, 59, 87, 78, 3, 57, 156, 98, 32, 197, 13, 151, 83, 244, 246, 161, 228, 167, 31, 91, 81, 72, 103, 180, 78, 220, 193, 106, 150, 125, 99, 226, 92, 77, 236, 167, 229, 23, 241, 109, 158, 240, 168, 59, 69, 79, 36, 121, 63, 227, 218, 6, 135, 178, 82, 12, 155, 154, 165, 64, 137, 138, 158, 94, 1, 183, 170, 77, 32, 56, 183, 163, 251, 227, 139, 2, 69, 34, 181, 98, 28, 151, 183, 62, 228, 202, 54, 57, 253, 51, 22, 217, 12, 154, 59, 244, 19, 123, 21], [136, 92, 143, 234, 167, 254, 22, 53, 243, 133, 108, 220, 31, 11, 100, 117, 39, 156, 141, 176, 84, 84, 46, 75, 211, 98, 28, 116, 142, 49, 27, 156, 9, 67, 85, 220, 90, 216, 181, 178, 60, 75, 128, 70, 183, 96, 206, 165, 192, 200, 186, 116, 169, 32, 238, 192, 171, 144, 179, 20, 3, 98, 164, 89, 30, 9, 248, 252, 13, 71, 90, 160, 124, 147, 89, 247, 27, 123, 158, 135, 126, 42, 100, 52, 199, 169, 98, 115, 162, 181, 34, 227, 120, 50, 28, 102, 11, 82, 110, 62, 241, 61, 15, 44], [155, 92, 144, 242, 226, 7, 158, 168, 68, 124, 146, 202, 189, 17, 227, 170, 222, 89, 116, 49, 158, 16, 74, 173, 220, 211, 119, 145, 231, 90, 166, 74, 93, 225, 126, 106, 180, 153, 177, 49, 17, 27, 155, 133, 52, 246, 134, 99, 125, 183, 73, 236, 109, 88, 241, 193, 188, 164, 25, 21, 115, 234, 195, 13, 235, 203, 216, 64, 102, 18, 131, 190, 175, 80, 131, 142, 194, 134, 176, 137, 110, 165, 112, 197, 112, 195, 127, 214, 158, 218, 78, 63, 207, 119, 95, 100, 145, 115, 12, 72, 227, 167, 210, 101, 66, 238, 57, 205, 123, 126, 65, 193, 66, 59, 10, 224, 186, 2, 8, 169, 195, 1, 186, 117, 3, 162, 115, 99, 247, 36, 74, 100, 58, 238, 109, 43, 236, 165, 227, 245, 21, 147, 10, 71, 242, 84, 80, 190, 5, 129, 42, 45, 160, 84, 234, 203, 228, 77, 213, 195, 212, 227, 135, 35, 121, 36, 255, 81, 221, 226, 233, 88, 155, 100, 47, 65, 188, 145, 201, 177, 35, 105, 202, 79, 192, 191, 254, 98, 134, 149, 183, 168, 165, 147, 78, 169, 12, 180, 140, 67, 98, 212, 203, 222, 37, 41, 107, 28, 171, 207, 113, 172, 249, 216, 86, 224, 45, 193, 191, 45, 14, 192, 175, 181, 17, 46, 52, 129, 198, 174, 221, 52, 195, 16, 111, 129, 206, 51, 219, 200, 84, 62, 68, 77, 72, 122, 254, 155, 30, 70, 66, 224, 133, 194, 70, 36, 97, 79, 245, 149, 60, 250, 10, 193, 255, 250, 239, 143, 208, 146, 228, 109, 64, 182, 69, 253, 225, 78, 117, 167, 163, 113, 32, 186, 98, 230, 81, 117, 221, 6, 74, 1, 25, 51, 95, 87, 95, 240, 62, 48, 109, 161, 162, 230, 122, 220, 75, 81, 123, 135, 122, 143, 125, 46, 127, 218, 172, 179, 200, 12, 228, 235, 58, 246, 24, 226, 1, 118, 182, 49, 104, 150, 147, 69], [205, 45, 120, 225, 168, 45, 34, 49, 170, 183, 145, 132, 71, 193, 30, 39, 102, 129, 120, 253, 207, 232, 90, 246, 243, 162, 165, 242, 68, 103, 146, 75, 252, 6, 203, 41, 166, 135, 115, 62, 8, 229, 21, 28, 193, 159, 16, 5, 251, 179, 225, 47, 132, 114, 4, 47, 27, 120, 249, 187, 216, 186, 136, 51, 21, 192, 20, 69, 104, 204, 60, 75, 157, 44, 109, 21, 49, 252, 80, 220, 173, 171, 25, 225, 211, 16, 214, 241, 65, 112, 228, 39, 55, 47, 107, 41], [201, 63, 50, 89, 245, 131, 171, 250, 64, 170, 64, 4, 24, 108, 155, 195, 183, 210, 154, 254, 46, 232, 137, 44, 72, 150, 214, 91, 81, 253, 222, 83, 127, 129, 37, 39, 43, 209, 134, 59, 112, 131, 170, 85, 214, 127, 86, 185, 30, 105, 36, 81, 66, 101, 183, 44, 24, 135, 89, 131, 243, 18, 216, 100, 96, 167, 229, 217, 210, 31, 139, 222, 239, 71, 244, 129, 127, 81, 123, 148, 58, 71, 66, 133, 255, 84, 145, 241, 122, 243, 13, 30, 177, 216, 69, 213, 239, 69, 16, 109, 25, 159, 158, 236, 247, 1, 184, 99, 100, 54, 102, 12, 77, 216, 97, 196, 137, 56, 36, 38, 199, 62, 199, 161, 20, 160, 130, 53, 67, 203, 170, 227, 188, 251, 93, 214, 223, 154, 210, 65, 130, 41, 124, 9, 155, 148, 219, 175, 251, 51, 160, 213, 108, 114, 57, 126, 15, 236, 44, 16, 134, 178, 246, 190, 121, 179, 192, 91, 1, 221, 85, 228, 249, 51, 150, 234, 157, 172, 105, 58, 97, 20, 137, 250, 228, 229, 101, 218, 134, 8, 33, 193, 79, 124, 38, 21, 143, 97, 127, 2, 234, 80, 26, 125, 23, 160, 213, 84, 93, 132, 172, 67, 66, 30, 236, 99, 96, 130, 51, 133, 96, 31, 197, 238, 239, 73, 143, 51, 141, 2, 92, 197, 167, 14, 83, 194, 44, 245, 22, 189, 198, 218, 19, 53, 19, 128, 103, 120], [185, 46, 97, 212, 187, 166, 73, 79, 174, 15, 126, 64, 0, 237, 25, 89, 255, 62, 191, 237, 158, 21, 151, 112, 49, 102, 125, 207, 210, 164, 113, 66, 248, 160, 125, 128, 220, 253, 111, 193, 18, 225, 188, 154, 231, 147, 2, 91, 99, 234, 40, 189, 136, 15, 21, 19, 204, 219, 61, 224, 204, 54, 51, 166, 2, 183, 208, 237, 168, 72, 163, 218, 45, 149, 75, 180, 215, 87, 215, 107, 162, 17, 33, 175, 186, 133, 102, 107, 162, 228, 91, 103, 176, 5, 248, 255, 162, 59, 129, 34, 54, 10, 142, 10, 84, 180, 235, 9, 56, 244, 121, 4, 229, 22, 35, 55, 49, 4, 123, 4, 75, 49, 34, 248, 43, 155, 29, 166, 154, 243, 194, 112, 165, 249, 51, 83, 236, 29, 195, 2, 121, 94, 45, 24, 65, 155, 223, 185, 230, 94, 230, 82, 1, 214, 136, 91, 91, 83, 224, 134, 126, 45, 206, 238, 37, 171, 174, 97, 168, 215, 135, 143, 139, 113, 238, 6, 186, 20, 49, 164, 9, 119, 209, 249, 129, 209, 93, 45, 141, 35, 149, 111, 205, 163, 171, 8, 22, 99, 233, 19, 114, 81, 61, 116, 193, 147, 78, 183, 215, 55, 224, 176, 122, 75, 77, 103, 244, 107, 134, 29, 8, 96, 99, 240, 169, 118, 9, 178, 9, 255, 214, 18, 145, 163, 120, 172, 72, 194, 62, 0, 233, 124, 85, 196, 152, 220, 181, 194, 55, 40, 220, 151, 105, 70, 232, 65, 73, 192, 6, 237, 57, 91, 215, 168, 15, 159, 74, 155, 75, 201, 182, 72, 58, 10, 86, 96, 136, 141, 121, 206, 175, 185, 159, 159, 52, 200, 246, 86, 172, 212, 151, 253, 71, 172, 108, 230, 57, 3, 5, 126, 247, 11, 107, 217, 91, 187, 99, 128, 0, 70, 115, 208, 81, 33, 161, 74, 36, 140, 143, 5, 239, 119, 133, 180, 250, 97, 88, 231, 186, 209, 125, 192, 43, 118, 27, 247, 199, 167, 140, 132, 251, 53, 25, 67, 106, 210, 142, 200, 93, 173, 221, 8], [166, 92, 89, 212, 179, 59, 74, 161, 52, 160, 12, 28, 28, 170, 25, 73, 150, 226, 47, 89, 8, 100, 206, 80, 103, 92, 95, 40, 115, 224, 150, 247, 232, 61, 153, 235, 248, 194, 1, 243, 58, 92, 250, 214, 65, 12, 202, 62, 89, 113, 72, 122, 15, 45, 0, 12, 62, 86, 186, 93, 204, 118, 71, 162, 23, 226, 23, 63, 88, 185, 1, 60, 157, 161, 104, 170, 177, 146, 1, 248, 45, 130, 212, 135, 35, 54, 32, 24, 135, 198, 178, 138, 181, 45, 10, 148, 179, 118, 144, 78, 234, 112, 3, 162, 117, 113, 41, 130, 193, 113, 244, 59, 101, 126, 110, 2, 225, 75, 200, 225, 189, 208, 200, 18, 208, 9, 17, 80, 178, 92, 242, 231, 225, 38, 25, 206, 21, 58, 129, 246, 199, 30, 214, 252, 144, 181, 17, 57, 252, 250, 76, 185, 51, 227, 11, 222, 182, 26, 30, 194, 99, 252, 89, 32, 147, 143, 197, 219, 207, 178, 248, 202, 210, 250, 35, 35, 160, 169, 157, 167, 111, 110, 247, 136, 153, 77, 229, 1, 32, 62, 234, 210, 85, 254, 57, 133, 137, 239, 175, 47, 238, 8, 246, 105, 255, 191, 94, 191, 252, 14, 190, 147, 32, 11, 169, 75, 185, 5, 227, 219, 4, 251, 100, 135, 31, 140, 94, 12, 17, 68, 54, 249, 12, 77, 227, 170, 8, 116, 88, 157, 255, 71, 96, 62, 115, 126, 34, 170, 82, 190, 50, 108, 90, 79, 11, 255, 32, 81, 85, 92, 237, 136, 135, 120, 54, 201, 29, 25, 239, 31, 140, 181, 237, 201, 23, 89, 153, 22, 43, 135, 98, 220, 51, 110, 135, 206, 202, 135, 205, 255, 83, 232, 86, 169, 75, 102, 134, 62, 22, 13, 97, 231, 245, 131, 164, 174, 107, 174, 225, 6, 26, 68, 245, 146, 219, 64, 68, 45, 20, 159, 143, 106, 250, 81, 81, 137, 181, 11, 223, 249, 113, 247, 179, 108, 161, 205, 38, 16, 182, 207, 28, 147, 145, 22, 201, 141, 193, 127, 135, 59, 162], [181, 173, 115, 232, 206, 71, 7, 131, 228, 65, 250, 187, 127, 94, 170, 181, 190, 184, 132, 242, 168, 63, 44, 119, 75, 159, 182, 83, 226, 183, 212, 187, 56, 20, 119, 101, 217, 0, 118, 200, 173, 136, 68, 37, 79, 250, 140, 225, 246, 130, 116, 218, 255, 0, 217, 106, 194, 66, 187, 248, 176, 31, 251, 135, 91, 108, 64, 123, 51, 183, 247, 206, 7, 7, 234, 143, 191, 231, 57, 82, 212, 167, 2, 228, 242, 18, 140, 83, 79, 128, 95, 154, 59, 229, 54, 222, 96, 158, 128, 230, 37, 216, 117, 40, 156, 64, 36, 143, 34, 107, 93, 76, 51, 208, 32, 24, 139], [201, 113, 20, 95, 151, 243, 231, 94, 250, 241, 5, 76, 232, 17, 219, 61, 237, 141, 249, 160, 127, 163, 193, 143, 241, 54, 216, 208, 168, 119, 128, 8, 135, 101, 16, 8, 132, 10, 134, 16, 237, 74, 209, 32, 196, 156, 111, 106, 14, 246, 165, 83, 23, 185, 146, 119, 54, 29, 128, 53, 107, 52, 179, 90, 82, 106, 0, 104, 226, 163, 64, 55, 89, 129, 242, 64, 81, 182, 8, 212, 70, 250, 19, 80, 28, 146, 244, 210, 14, 23, 170, 125, 108, 206, 47, 142, 2, 189, 189, 17, 252, 42, 35, 126, 246, 1, 95, 182, 254, 123, 144, 171, 12, 46, 125, 102, 157, 180, 46, 57, 145, 68, 101, 248, 109, 10, 20, 11, 186, 71, 112, 165, 70, 2, 10, 248, 253, 147, 5, 116, 23, 226, 53, 66, 138, 89, 72, 121, 198, 168, 57, 176, 61, 116, 204, 150, 186, 91, 211, 54], [172, 51, 240, 172, 155, 135, 197, 0, 47, 63, 8, 153, 134, 247, 24, 244, 41, 167, 51, 251, 156, 148, 138, 150, 233, 162, 254, 225, 76, 200, 129, 163, 147, 109, 56, 57, 45, 2, 136, 145, 21], [218, 188, 180, 142, 36, 12, 252, 88, 220, 139, 102, 156, 251, 184, 215, 172, 210, 241, 49, 60, 83, 160, 238, 165, 233, 241, 255, 13, 77, 23, 55, 252, 111, 225, 27, 253, 151, 248, 49, 54, 187, 186, 239, 216, 182, 155, 233, 27, 167, 35, 41, 65, 234, 13, 237, 156, 224, 106, 189, 205, 92, 7, 129, 178, 111, 85, 84, 121, 124, 196, 206, 213, 111, 225, 184, 98, 213, 69, 101, 201, 126, 92, 103, 240, 161, 218, 194, 248, 38, 154, 88, 185, 159, 17, 54, 190, 3, 158, 60, 148, 195, 217, 156, 41, 173, 235, 177, 47, 143, 87, 38, 235, 149, 67, 19, 167, 182, 22, 2, 211, 127, 0, 193, 22, 68, 211, 29, 110, 205, 116, 99, 160, 100, 66, 191, 82, 245, 127, 254, 77, 91, 128, 30, 74, 31, 70, 182, 171, 219, 114, 117, 7, 204, 114, 138, 196, 93, 195, 250, 11, 45, 114, 220], [109, 180, 187, 18, 201, 130, 176, 208, 94, 232, 183, 136, 172, 163, 204, 212, 122, 35, 139, 39, 201, 152, 254, 149, 242, 115, 78, 183, 212, 110, 248, 49, 248, 0, 233, 211, 231, 12, 47, 164, 103, 137, 252, 132, 55, 135, 237, 200, 162, 238, 213, 22, 80, 133, 220, 171, 117, 32, 211, 148, 163, 53, 6, 100, 233, 132, 90, 212, 15, 216, 64, 46, 225, 139, 180, 29, 53, 162, 141, 207, 44, 73, 255, 95, 147, 78, 170, 163, 137, 168, 151, 101, 135, 87, 209, 239, 214, 130, 175, 198, 109, 181, 212, 71, 158, 153, 7, 3, 235, 122, 15, 121, 242, 160, 140, 67, 221, 155, 178, 167, 254, 33, 252, 60, 17, 123, 125, 74, 179, 163, 221, 224, 4, 110, 134, 60, 119, 21, 41, 61, 30, 52, 158, 196, 12, 31, 134, 131, 33, 246, 177, 179, 16, 91, 161, 23, 205, 103, 5, 212, 50, 185, 154, 252, 92, 134, 99, 30, 6, 68, 156, 173, 33, 31, 139, 128, 62, 183, 73, 225, 181, 28, 86, 236, 243, 33, 82, 106, 247, 227, 141, 207, 165, 99, 112, 254, 80, 152, 35, 5, 135, 234, 131, 75, 35, 21, 215, 60, 96, 166, 21, 143, 67, 51, 186, 201, 31, 165, 68, 135, 125, 24, 142, 146, 221, 164, 59, 77, 185, 179, 223, 222, 179, 25, 168, 214, 156, 151, 243, 91, 245, 247, 96, 242, 66, 115, 8, 26, 249, 170, 135, 67, 120, 67, 137, 237, 182, 244, 98, 221, 13, 254, 60, 125, 153, 220, 82, 79, 18, 54, 76, 170, 191, 235, 248, 107, 99, 165, 23, 159, 27, 111, 240, 52, 66, 87, 122, 91, 187, 32, 36, 172, 195, 85, 145, 63, 38, 136, 82, 155, 12, 108, 153, 49, 253, 60, 160, 153, 79, 186, 207, 149, 102, 73, 29, 198, 106, 86, 113, 178, 32, 75, 107, 134, 5, 204, 167, 239, 198, 80, 118, 159, 215, 107, 12, 166, 6, 161, 184, 248, 36, 245, 5, 73, 235, 36, 123, 63, 162], [237, 48, 202, 167, 144, 21, 185, 245, 23, 64, 226, 118, 130, 156, 123, 184, 77, 111, 85, 245, 214, 194, 8, 33, 96, 87, 116, 69, 76, 45, 149, 230, 243, 131, 159, 177, 14, 196, 141, 175, 186, 161, 0, 88, 241, 74, 141, 5, 166, 78, 17, 67, 233, 181, 43, 248, 196, 136, 182, 40, 12, 1, 72, 184, 156, 211, 83, 64, 51, 77, 245, 255, 182, 35, 228, 161, 206, 96, 125, 249, 50, 187, 250, 211, 90, 130, 158, 142, 241, 218, 161, 241, 74, 53, 104, 175, 221, 85, 118, 11, 78, 166, 66, 208, 27, 179, 172, 211, 12, 117, 232, 73, 105, 193, 249, 254, 234, 29, 169, 19, 117, 219, 83, 181, 212, 250, 190, 85, 125, 224, 57, 23, 194, 170, 120, 150, 77, 35, 203, 234, 53, 146, 147, 122, 153, 19, 160, 246, 254, 205, 215, 85, 116, 68, 168, 223, 178, 235, 39, 37, 7, 121, 88, 46, 26, 83, 6, 158, 140, 126, 183, 157, 129, 111, 252, 223, 6, 100, 60, 101, 37, 72, 88, 180, 5, 67, 200, 9, 140, 173, 46, 71, 58, 2, 244, 244, 214, 75, 200, 195, 37, 128, 178, 226, 88, 30, 243, 226, 242, 229, 112, 67, 154, 52, 5, 105, 143, 8, 54, 88, 37, 16, 183, 15, 180, 227, 13, 129, 201, 166, 192, 60, 162, 173, 164, 15, 201, 247, 141, 140, 179, 226, 59, 145, 76, 235, 160, 55, 105, 152, 180, 137, 227, 241, 15, 119, 97, 254, 25, 168, 46, 57, 84, 226, 69, 81, 24, 6, 103, 188, 126, 162, 17, 191, 181, 103, 115, 242, 163, 218, 0, 100, 96, 226, 232, 13, 217, 168, 129, 24, 231, 34, 23, 123, 64, 239, 98, 95, 166, 24, 39, 234, 12, 165, 216, 47, 91, 76, 249, 128, 110, 61, 42, 168, 198, 105, 217, 68, 169, 221, 88, 7, 13, 35, 91, 115, 155, 66, 213, 224, 162, 31, 171, 199, 235, 24, 154, 171, 215, 231, 214, 152, 204, 117, 216, 193, 98, 50, 128, 3, 241], [176, 104, 233, 133, 4, 39, 202, 140, 218, 202, 41, 98, 252, 23, 173, 249, 104, 208, 110, 108, 71, 7, 59, 175, 37, 112, 77, 75, 80, 42, 28, 155, 142, 235, 28, 155, 87, 32], [25, 88, 117, 134, 183, 43, 248, 234, 64, 131, 95, 207, 19, 238, 182, 200, 23, 171, 56, 201, 69, 148, 117, 9, 72, 131, 109, 151, 138, 164, 238, 231, 162, 156, 8, 108, 67, 78, 71, 133, 52, 114, 170, 72, 253, 77, 18, 196, 188, 4], [224, 233, 26, 157, 138, 29, 251, 1, 218, 170, 36, 57, 16, 34, 242, 180, 60, 250, 232, 110, 32, 205, 230, 73, 139, 61, 116, 88, 43, 159, 9, 211, 79, 251, 35, 180, 109, 153, 149, 91, 115, 148, 80, 152, 1, 47, 67, 81, 235, 149, 186, 224, 31, 208, 239, 91, 165, 187, 6, 207, 235, 219, 18, 83, 26, 242, 45, 143, 184, 131, 129, 98, 14, 126, 252, 166, 112, 191, 252, 163, 1, 106, 68, 40], [95, 235, 219, 44, 38, 137, 9, 157, 250, 168, 168, 106, 50, 169, 98, 53, 97, 90, 2, 59, 184, 162, 78, 215, 192, 26, 52, 149, 235, 32, 234, 11, 101, 103, 68, 26, 18, 175, 72, 153, 104, 219, 74, 78, 114, 33, 106, 236, 105, 75, 63, 177, 10, 17, 163, 18, 199, 228, 176, 128, 11, 147, 186, 238, 69, 243, 208, 192, 182, 46, 164, 217, 106, 179, 200, 193, 98, 75, 144, 103], [29, 144, 149, 195, 183, 7, 251, 56, 148, 237, 50, 108, 118, 53, 150, 140, 195, 153, 195, 151, 233, 232, 110, 7, 95, 151, 209, 30, 242, 200, 137, 17, 41, 247, 146, 154, 250, 30, 48, 73, 107, 44, 79, 18, 169, 182, 253, 167, 37, 56, 230, 26, 147, 56, 44, 149, 207, 84, 246, 138, 244, 245, 187, 201, 106, 214, 109, 61, 28, 127, 248, 152, 215, 183, 65, 15, 35, 57, 61, 199, 225, 147, 55, 146, 11, 154, 100, 232, 22, 136, 19, 107, 153, 131, 37, 204, 0, 0, 196, 27, 198, 204, 49, 212, 10, 12, 137, 113, 54, 134, 7, 227, 246, 236, 9, 64, 220, 6, 106, 59, 137, 152, 74, 111, 166, 91, 122, 92, 230, 214, 112, 112, 176, 151, 67, 37, 117, 239, 79, 4, 50, 123, 135, 41, 63, 0, 148, 154, 249, 27, 183, 114], [238, 189, 154, 225, 164, 76, 165, 223, 194, 49, 89, 197, 106, 162, 251, 234, 178, 85, 121, 17, 223, 14, 189, 167, 166], [228, 10, 235, 181, 216, 19, 164, 8, 226, 239, 182, 163, 143, 165, 210, 63, 120, 96, 53, 101, 240, 185, 45, 203, 59, 242, 22, 223, 61, 203, 20, 52, 179, 127, 241, 113, 123, 241, 136, 13, 64, 255, 230, 243, 140, 229, 10, 173, 113, 153, 49, 17, 132, 212, 21, 63, 120, 40, 204, 176, 104, 251, 236, 71, 53, 236, 252, 108, 69, 147, 124, 159, 11, 200, 11, 178, 160, 66, 196, 42, 29, 52, 192, 28, 138, 124, 84, 40, 203, 119, 24, 217, 136, 78, 21, 134, 151, 156, 141, 196, 11, 210, 35, 52, 86, 193, 39, 134, 240, 162, 223, 191, 35, 78, 65, 102, 242, 212, 89, 47, 90, 133, 119, 136, 44, 232, 79, 165, 249, 188, 72, 162, 158, 20, 86, 20, 100, 104, 9, 39, 59, 111, 87, 36, 47, 33, 126, 216, 36, 35, 157, 127, 226, 133, 62, 42, 63, 146, 17, 201, 11, 155, 159, 58, 248, 110, 115, 9, 120, 201, 184, 230, 133, 156, 145, 116, 153, 136, 171, 20, 64, 48, 132, 214, 227, 220, 215, 240, 89, 67, 45, 58, 119, 53, 235, 116, 236, 38, 49, 224, 155, 75, 70, 87, 49, 66, 179, 213, 71, 166, 26, 227, 111, 64, 17, 237, 41, 254, 63, 207, 49, 150, 72, 109, 168, 31, 218, 82, 240, 236], [203, 99, 111, 211, 254, 109, 160, 104, 184, 45, 173, 205, 73, 34, 32, 105, 21, 75, 137, 82, 64, 30, 243, 36, 253, 224, 247, 207, 243, 77, 166, 166, 223, 102, 171, 218, 4, 137, 246, 103, 155, 230, 121, 132, 64, 212, 4, 252, 99, 141, 96, 107, 204, 43, 10, 155, 83, 236, 97, 126, 221, 98, 197, 5, 139, 55, 50, 183, 38, 56, 247, 2, 250, 130, 174, 64, 131, 157, 32, 33, 9, 3, 247, 73, 8, 45, 200, 163, 233, 219, 222, 78, 92, 114, 65, 148, 126, 133, 203, 232, 79, 89, 68, 251, 25, 212, 224, 35, 249, 162, 205, 116, 17, 240, 253, 219, 196, 71, 104, 69, 194, 86, 101, 137, 17, 59, 215, 41, 110, 226, 235, 169, 184, 24, 170, 78, 162, 101, 231, 27, 253, 15, 90, 8, 195, 124, 135, 80, 4, 166, 118, 14, 51, 162, 168, 234, 3, 12, 141, 114, 108, 131, 37, 116, 171, 7, 162, 67, 50, 78, 245, 86, 188, 179, 6, 226, 122, 156, 174, 145, 105, 246, 102, 252, 212, 119, 108, 135, 45, 42, 21, 202, 248, 121, 192, 246, 125, 26, 155, 173, 238, 180, 101, 228, 39, 3, 178, 250, 159, 17, 14, 120, 82, 88, 181, 34, 31, 168, 216, 119, 112, 38, 129, 132, 242, 110, 207, 5, 135, 93, 134, 108, 255, 48, 153, 15, 221, 127, 95, 126, 161], [242, 244, 15, 83, 97, 59, 118, 72, 163, 70, 28, 122, 187, 156, 96, 76, 138, 215, 153, 97, 139, 20, 150], [243, 111, 232, 47, 170, 171, 170, 64, 168, 59, 94, 159, 116, 215, 176, 176, 160, 71, 159, 237, 34, 90, 73, 33, 44, 244, 126, 163, 225, 65, 14, 114, 99, 249, 116, 155, 32, 105, 53, 89, 58, 255, 221, 225, 41, 59, 201, 201, 89, 222, 14, 14, 119, 0, 153, 163, 208, 30, 90, 82, 223, 179, 96, 113, 179, 91, 83, 30, 73, 175, 27, 50, 32, 126, 196, 149, 71, 54, 157, 112, 184, 143, 25, 166, 248, 235, 41, 79, 141, 19, 158, 143, 75, 253, 159, 140, 143, 77, 76, 186, 209, 130, 45, 247, 247, 202, 11, 174, 210, 212, 4, 160, 218, 32, 171, 6, 144, 3, 244, 232, 241, 142, 233, 191, 90, 126, 203, 5, 45, 115, 216, 214, 241, 170, 83, 60, 249, 9, 219, 175, 135, 215, 20, 255, 97, 157, 6, 122, 241, 148, 112, 55, 188, 200, 68, 224, 238, 30, 187, 28, 249, 234, 186, 156, 230, 219, 49, 84, 146, 49, 234, 99, 156, 72, 47, 99, 252, 27, 120, 170, 240, 99, 145, 126, 18, 118, 113, 157, 8, 59, 150, 227, 199, 104, 147, 101, 135, 182, 49, 212, 244, 201, 156, 142, 107, 83, 157, 224, 239, 9, 88, 219, 74, 231, 114, 105, 160, 91, 177, 72, 158, 142, 159, 169, 111, 211, 238, 255, 71, 36, 191, 160, 163, 14, 188, 117, 14, 138, 212, 32, 222, 188, 4, 46], [152, 93, 155, 130, 156, 250, 120, 149, 51, 10, 67], [68, 18, 129, 17, 216, 237, 37, 181, 163, 150, 209, 97, 46, 163, 150, 221, 127, 6, 73, 2, 1, 162, 187, 183, 205, 32, 227, 83, 61, 102, 152, 203, 129, 63, 40, 200, 112, 227, 39, 105, 56, 211, 44, 132, 183, 192, 86, 1, 235, 17, 225, 219, 55, 43, 30, 180, 138, 58, 236, 69, 92, 241, 23, 92, 88, 158, 164, 56, 96, 42, 119, 173, 13, 141, 84, 110, 88, 216, 225, 39, 255, 96, 94, 64, 161, 230, 25, 93, 42, 184, 65, 1, 7, 93, 82, 73, 0, 71, 242, 12, 172, 238, 140, 37, 253, 35, 136, 240, 235, 198, 195, 230, 239, 207, 180, 186, 220, 3, 206, 33, 2, 199, 169, 36, 205, 18, 119, 121, 83, 51, 68, 49, 26, 46, 38, 19, 252, 106, 139, 240, 9, 51, 191, 146, 199, 167, 166, 42, 34, 234, 245, 237, 58, 209, 104, 47, 173, 58, 131, 23, 80, 160, 123, 248, 3, 139, 16, 241, 20, 17, 58, 221, 80, 34, 161, 70, 150, 74, 222, 90, 230, 180, 128, 48, 159, 106, 115, 13, 52, 117, 240, 203, 31, 35, 253, 135, 233, 219, 48, 44, 64, 238, 147, 255, 113, 140, 250, 64, 147, 71, 66, 228, 32, 99, 213, 238, 171, 203, 136, 56, 132, 8, 72, 67, 173, 37, 109, 27, 81, 206, 142, 15, 227, 84, 174, 238, 150, 103, 90, 211, 141, 158, 7, 86, 227, 219, 80, 59, 132, 149, 237, 25, 222, 134, 11, 75, 238, 214, 57, 247, 81, 12, 239, 61, 81, 61, 84, 254, 110, 147, 193, 24, 41, 48, 219, 184, 98, 46, 97, 0, 177, 3, 8, 223, 238, 51, 70, 131, 42, 35, 250, 39, 69, 72, 56, 64, 150, 56, 238, 138, 248, 172, 98, 142, 251, 73, 202, 247, 253, 128, 173, 147, 202, 168, 151, 217, 161, 73, 13, 174, 66, 246, 5, 140, 143, 25, 30, 62, 189, 100, 149, 87, 90, 102, 199, 22, 5, 202, 4, 246, 40, 131, 182, 44, 95, 216], [46, 42, 54, 110, 165, 28, 39, 67, 37, 98, 80, 235, 205, 162, 16, 185, 228, 223, 83, 77, 173, 47, 7, 174, 143, 124, 29, 230, 194, 99, 206, 155, 6, 147, 81], [153, 78, 9, 65, 121, 191, 68, 51, 197, 190, 109, 235, 15, 196, 13, 147, 161, 71, 184, 1, 92, 243, 58, 142, 134, 129, 26, 182, 49, 215, 145, 155, 186, 131, 57, 8, 135, 135, 160, 205, 78, 64, 139, 76, 40, 49, 243, 187, 32, 140, 42, 120, 247, 169, 182, 170, 219, 243, 190, 199, 241, 173, 197, 208, 215, 134, 227, 133, 164, 7, 63, 169, 71, 97, 15, 10, 121, 249, 164, 254, 236, 87, 4, 228, 228, 178, 252, 176, 28, 8, 17, 54, 39, 84, 249, 243, 11, 203, 233, 103, 24, 121, 66, 32, 141, 162, 137, 123, 88, 247, 86, 232, 39, 233, 121, 255, 96, 244, 189, 208, 47, 150, 218, 32, 107, 217, 102, 2, 220, 175, 211, 28, 73, 75, 100, 227, 37, 209, 96, 247, 255, 10, 215, 225, 153, 223, 229, 169, 14, 228, 144, 24, 223, 101, 231, 183, 179, 121, 238, 57, 129, 101, 180, 201, 94, 213, 190, 53, 111, 210, 147, 77, 233, 29, 111, 51, 175, 237, 243, 56, 87, 248, 184, 111, 165, 204, 11, 141, 118, 13, 35, 169, 69, 53, 39, 123, 143, 208], [2, 173, 197, 147, 233, 150, 178, 126, 242, 228, 116, 59, 131, 140, 250, 80, 96, 37, 211, 166, 89, 37, 205, 207, 189, 191, 223, 156, 200, 133, 131, 45, 23, 110, 162, 81, 191, 217, 223, 118, 197, 70, 174, 255, 114, 115, 143, 129, 71, 60, 83, 114, 132, 181, 239, 48, 17, 56, 144, 27, 227, 192, 176, 207, 36, 147, 170, 21, 152, 255, 40, 12, 103, 88, 198, 229, 233, 142, 140, 184, 11, 206, 15, 254, 2, 127, 215, 124, 134, 204, 232, 30, 232, 44, 61, 230, 239, 65, 54, 6, 209, 150, 78, 0, 79, 242, 170, 238, 179, 254, 234, 177, 231, 168, 233, 152, 214, 108, 144, 195, 178, 214, 212, 129, 144, 94, 71, 46, 108, 95, 74, 91, 228, 225, 7, 206, 32, 218, 144, 102, 160, 133, 136, 81, 255, 254, 6, 223, 88, 214, 3, 77, 77, 104, 17, 145, 12, 215, 110, 159, 58, 163, 239, 88, 62, 202, 176, 212, 204, 171, 194, 224, 249, 212, 157, 4, 193, 159, 255, 28, 85, 106, 168, 50, 178, 1, 129, 183, 150, 230, 73, 54, 71, 92, 76, 69, 42, 64, 198, 58, 31, 45, 47, 244, 244, 240, 84, 54, 130, 76, 235, 28, 252, 31, 168, 181, 246, 176, 169, 62, 233, 186, 240, 13, 149, 79, 251, 31, 106, 240, 151, 107, 194, 88, 10, 106, 99, 142, 32, 84, 55, 172, 102, 156, 28, 10, 150, 173, 208], [185, 106, 168, 73, 174, 248, 122, 117, 19, 95, 20, 63, 198, 9, 30, 165, 23, 138, 94, 94, 103, 158, 184, 222, 50, 198, 209, 12, 152, 140, 237, 17, 234, 222, 202, 98, 22, 190, 4, 230, 48, 241, 81, 176, 185, 184, 5, 119, 57, 225, 131, 179, 158, 173, 54, 215, 35, 56, 55, 187, 122, 119, 112, 117, 109, 137, 150, 182, 126, 70, 9, 112, 123, 194, 23, 74, 189, 23, 42, 128, 170, 15, 107], [208, 187, 46, 103, 239, 15, 208, 149, 135, 77, 106, 3, 231, 199, 241, 33, 116, 196, 105, 39, 121, 96, 204, 60, 112, 23, 4, 14, 42, 229, 99, 68, 191, 170, 81, 204, 167, 36, 75, 76, 205, 229, 234, 224, 178, 182, 163, 252, 130, 0, 161, 163, 115, 230, 67, 85, 127, 4, 224, 168, 175, 154, 78, 98, 215, 126, 230, 43, 214, 155, 126, 187, 71, 236, 104, 58, 29, 172, 126, 25, 220, 80, 177, 214, 64, 185, 93, 140, 160, 112, 141, 64, 37, 74, 29, 97, 47, 219, 21, 141, 162, 255, 213, 240, 177, 0, 80, 29, 161, 24, 170, 89, 247, 113, 240, 78, 21, 132, 179, 158, 147, 237, 187, 6, 81, 172, 60, 59, 100, 98, 78, 253, 169, 196, 41, 151, 210, 119, 179, 200, 14, 87, 21, 174, 22, 55, 244, 69, 63, 57, 74, 242, 183, 83, 214, 5, 180, 251, 220, 193, 50, 159, 232, 209, 55, 254, 217, 252, 35, 23, 62, 149, 99, 37, 196, 23, 65, 203, 17, 134, 38, 241, 226, 87, 124, 168, 157, 87, 242, 98, 103, 121, 213, 49, 191, 123, 156, 106, 70, 46, 101, 229, 173, 145, 88, 185, 45, 253, 59, 205, 120, 10, 189, 52, 130, 245, 141, 211, 96, 7, 52, 172, 142, 62, 28, 100, 225, 231, 110, 77, 68, 149, 249, 37, 168, 194, 13, 83, 234, 217, 81, 246, 155, 203, 81, 242, 238, 80, 240, 87, 73, 7, 156, 49, 201, 101, 207, 189, 122, 102, 45, 51, 52, 6, 82, 65, 125, 254, 186, 37, 20, 212, 244, 105, 33, 170, 54, 25, 200, 63, 174, 197, 86, 51, 177, 100, 166, 180, 52, 240, 59, 202, 235, 153, 30, 61, 128, 126, 43, 66, 149, 232], [229, 213, 18, 143, 196, 92, 247, 120, 57, 248, 218, 224, 11, 60, 136, 150, 245, 19, 235, 44, 119, 106, 61, 44, 153, 168, 122, 251, 141, 204, 251, 93, 114, 154, 132, 181, 154, 80, 214, 89, 5, 19, 200, 122, 89, 186, 189, 197, 150, 37, 95, 113, 216, 252, 240, 28, 205, 41, 34, 26, 83, 236, 111, 243, 191, 178, 45, 15, 47, 35, 141, 125, 236, 136, 66, 226, 176, 96, 119, 156, 194, 193, 72, 142, 107, 90, 50, 34, 154, 103, 163, 53, 236, 126, 180, 226, 92, 236, 172, 197, 219, 226, 47, 113, 227, 62, 251, 122, 32, 154, 146, 17, 72, 103, 144, 218, 137, 189, 109, 113, 123, 196, 232, 72, 11, 134, 142, 17, 82, 202, 168, 108, 154, 3, 53, 183, 254, 88, 119, 114, 66, 249, 8, 189, 88, 245, 233, 83, 42, 179, 25, 7, 130, 213, 154, 51, 0, 126, 165, 84, 51, 245, 254, 178, 200, 54, 62, 18, 174, 209, 52, 51, 55, 32, 13, 126, 252, 43, 39, 52, 134, 225, 211, 200, 67, 49, 141, 107, 141, 31, 69, 126, 66, 165, 169, 21, 128, 236, 174, 219, 2, 252, 42, 123, 125, 184, 181, 243, 212, 202, 229, 131, 123, 67, 14, 48, 21, 66, 134, 204, 140, 228, 64, 177, 137, 194, 236, 34, 183, 229, 155, 154, 0, 140, 131, 163, 237, 217, 149, 182, 144, 63, 225, 90, 169, 28, 91, 181, 205, 67, 96, 48, 18, 58, 196, 220, 255, 153, 113, 238, 16, 172, 71, 31, 15, 20, 30], [140, 79, 161, 178, 221, 30, 80, 62, 87, 33, 242, 10, 201, 78, 230, 149, 21, 97, 211, 198, 100, 137, 10, 228, 70, 101, 250, 206, 223, 219, 34, 150, 103, 202, 64, 223, 50, 96, 219, 25, 160, 236, 31, 132, 40, 244, 63, 114, 33, 38, 68, 107, 128, 146], [155, 120, 152, 216, 107, 27, 128, 133, 10, 193, 132, 94, 238, 42, 30, 57, 30, 2, 135, 43, 108, 218, 15, 252, 214, 96, 255, 79, 35, 80, 80, 176, 34, 51, 102, 190, 143, 8, 4, 225, 187, 41, 97, 232, 208, 103, 165, 251, 191, 55, 169, 72, 20, 96, 60, 102, 248, 78, 53, 68, 212, 3, 56, 138, 135, 39, 40, 63, 184, 14, 116, 169, 14, 174, 212, 135, 14, 143, 152, 3, 142, 31, 138, 176, 239, 145, 246, 82, 55, 169, 148, 142, 169, 34, 177, 68, 20, 62, 80, 201, 135, 104, 120, 118, 52, 39, 139, 247, 108, 243, 164, 72, 184, 80, 238, 113, 97, 240, 107, 33, 193, 7, 16, 142, 222, 80, 50, 243, 146, 236, 199, 14, 171, 57, 113, 51, 113, 99, 219, 148, 189, 49, 193, 130, 29, 232, 221, 217, 13, 43, 208, 52, 178, 71, 222, 173, 223, 9, 243, 58, 126, 157, 27, 121, 130, 67, 216, 101, 5, 229, 17, 47, 168, 21, 157, 105, 22, 51, 91, 42, 55, 230, 88, 227, 124, 30, 28, 37, 177, 221, 241, 109, 76, 150, 158, 91, 136, 59, 229, 5, 44, 231, 120, 110, 61, 107, 163, 18, 55, 56, 12, 89, 139, 91, 60, 243, 237, 239, 36, 173, 226, 113, 75, 104, 223, 37, 170, 88, 252, 214, 148, 65, 252, 30, 237, 183, 216, 120, 247, 91, 100, 23, 12, 56, 121, 228, 21, 240, 104, 82, 215, 90, 203, 239, 30, 130, 202, 4, 167, 207, 5, 10, 140, 187, 158, 15, 137, 59, 118, 54, 136, 35, 203, 26, 22, 28, 232, 105, 244, 0, 236, 195, 111, 222, 97, 204, 10, 5, 190, 100, 69, 221, 247, 190, 27, 26, 24, 141, 228, 254, 85, 69, 12, 123, 77, 48, 26, 10, 122, 234, 29, 169, 86, 213, 77, 89, 231, 60, 229, 200, 52, 75, 235, 65, 198, 253, 73, 20, 178, 235, 126, 82, 253, 189, 57, 166, 191, 119, 134, 126, 22, 24, 151, 168, 181, 235, 201, 166, 144, 117, 101, 39, 226, 154, 179, 241, 88, 25, 39, 22, 230, 128, 154, 250, 128, 68, 192, 27, 123], [153, 51, 131, 120, 205, 236, 13, 252, 241, 222, 182, 242, 115, 206, 213, 53, 169, 181, 105, 255, 208, 124, 103, 152, 40, 102, 107, 100, 111, 130, 77, 226, 30, 122, 217, 31, 85, 71, 185, 114, 132, 249, 252], [1, 66, 87, 145, 67, 114, 168, 31, 18, 81, 83, 65, 165, 174, 132, 171, 228, 70, 14, 129, 184, 122, 121, 121, 95, 125, 168, 132, 22, 243, 14, 170, 146, 181, 90, 13, 136, 174, 208, 60, 39, 219, 203, 58, 39, 91, 0, 170, 73, 203, 167, 166, 46, 237, 178, 159, 143, 64, 2, 64, 63, 227, 246, 93, 86, 211, 171, 72, 25, 49, 47, 172, 180, 74, 146, 214, 35, 116, 59, 87, 218, 70, 63, 178, 96, 183, 203, 119, 33, 1, 14, 104, 213, 138, 108, 190, 116, 236, 104, 28, 185, 237, 149, 36, 87, 107, 142, 196, 214, 27, 45, 73, 198, 66, 8, 196, 20, 201, 143, 186, 222, 44, 22, 249, 42, 2, 254, 82, 52, 171, 250, 160, 127, 132, 97, 67, 42, 9, 134, 159, 80, 120, 33, 219, 38, 51, 98, 71, 243, 116, 139, 87, 45, 160, 162, 196, 104, 86, 0, 155, 53, 192, 172, 22, 43, 0, 165, 166, 109, 19, 255, 42, 244, 53, 124, 204, 176, 192, 64, 224, 45, 19, 250, 144, 143, 190, 191, 8, 69, 117, 246, 151, 140, 198, 10, 174, 16, 124, 158, 188, 45, 168, 140, 184, 154, 243, 83, 56, 159, 124, 60, 238, 90, 109, 9, 140, 63, 105, 71, 87, 223, 23, 127, 137, 220, 126, 151, 82, 74, 194, 146, 244, 185, 14, 244, 30, 244, 220, 213, 231, 24, 48, 209, 21, 203, 170, 175, 181, 18, 26, 133, 57, 126, 153, 110, 154, 194, 221, 190, 83, 162, 180, 145, 195, 96, 56, 198, 111, 152, 224, 68, 102, 83, 192, 208, 27, 57, 45, 176, 147, 144, 231, 203, 72, 99, 13, 84, 51, 120, 241, 26, 19, 227, 133, 51, 224, 250, 2, 200, 93, 88, 237, 86, 171, 84, 65, 75, 38, 27, 12], [96, 123, 251, 9, 241, 2, 90, 9, 252, 33, 183, 236, 217, 152, 9, 42, 89, 212, 84, 170, 36, 53, 212, 174, 28, 165, 238, 208, 35, 115, 251, 208, 101, 120, 240, 83, 69, 81, 115, 252, 194, 52, 78, 217, 29, 176, 158, 158, 206, 33, 27, 119, 172, 102, 76, 85, 34, 97, 175, 117, 206, 95, 3, 15, 46, 224, 157, 214, 181, 214, 136, 154, 144, 123, 158, 127, 97, 240, 106, 142, 9, 140, 8, 82, 90, 22, 103, 93, 14, 54, 20, 220, 87, 143, 44, 14, 210, 54, 44, 125, 6, 146, 235, 181, 110, 160, 211, 135, 1, 59, 201, 43, 24, 206, 74, 132, 230, 100, 122, 14, 95, 240, 73, 152, 104, 194, 95, 175, 171, 223, 22, 230, 251, 36, 67, 251, 165, 129, 224, 120, 177, 248, 142, 62, 54, 146, 144, 174, 108, 131, 151, 166, 66, 52, 44, 145, 36, 248, 51, 131, 76, 177, 131, 151, 182, 28, 226, 45, 162, 124, 46, 64, 198, 0, 139, 224, 156, 170, 37, 131, 93, 92, 59, 34, 200, 81, 122, 68, 164, 223, 101, 177, 38, 102, 124, 130, 70, 121, 170, 181, 202, 242, 255, 39, 94, 43, 165, 2, 192, 111, 63, 89, 85, 105, 79, 220, 87, 90, 131, 29, 171, 64, 221, 199, 89, 91, 103, 162, 149, 30, 32, 207, 120, 129, 89, 244, 218, 112, 119, 250, 175, 176, 0, 9, 36, 244, 84, 50, 223, 113, 99, 33, 188, 253, 13, 78, 74, 215, 115, 28, 26, 123, 25, 159, 120, 21, 71, 182, 108, 67, 155], [128, 48, 101, 112, 6, 180, 1, 84, 42, 82, 185, 173, 221, 185, 135, 84, 86, 125, 30, 147, 161, 177, 130, 179, 34, 113, 252, 150, 172, 165, 221, 100, 43, 20, 249, 147, 10, 93, 89, 83, 18, 109, 118, 5, 178, 124, 71, 169, 51, 42, 202, 254, 211, 55, 189, 214, 150, 7, 108, 56, 245, 30, 211, 179, 240, 26, 170, 43, 141, 98, 184, 251, 103, 207, 241, 65, 54, 98, 68, 111, 169, 20, 212, 38, 85, 186, 70, 73, 125, 179, 78, 193, 64, 64, 155, 150, 122, 142, 168, 35, 7, 2, 149, 150, 54, 187, 151, 168, 25, 243, 185, 34, 180, 163, 8, 110, 100, 110, 217, 146, 31, 216, 209, 97, 128, 59, 85, 190, 233, 5, 55, 229, 29, 77, 47, 3, 162, 208, 33, 79, 30, 169, 129, 19, 67, 88, 104, 195, 78, 188, 96, 31, 56, 79, 109, 188, 186, 5, 47, 212, 5, 162, 15, 139, 243, 92, 8, 150, 172, 181, 157, 226, 1, 51, 203, 29, 38, 129, 134, 186, 165, 107, 73, 250, 41, 168, 144, 28, 128, 5, 23, 93, 202, 237, 236, 53, 20, 125, 141, 237, 207, 95, 8, 189, 178, 25, 36, 237, 22, 200, 207, 174, 242, 169, 62, 136, 96, 119, 194, 42], [187, 252, 179, 65, 87, 160, 147, 63, 84, 6, 66, 214, 86, 139, 115, 160, 144, 22, 7, 183, 188, 107, 236, 206, 251, 95, 173, 180, 231, 120, 8, 159, 17, 154, 118, 169, 47, 86, 18, 251, 7, 149, 206, 240, 4, 115, 144, 40, 20, 98, 39, 78, 234, 189, 100, 150, 108, 119, 4, 237, 40, 33, 59, 93, 22, 92, 11, 253, 201, 12, 27, 178, 65, 251, 81, 137, 215, 88, 74, 132, 161, 162, 177, 8, 229, 89, 167, 206, 126, 194, 250, 90, 217, 1, 132, 208, 159, 87, 209, 253, 177, 141, 231, 76, 230, 92, 114, 53, 83, 135, 50, 215, 67, 217, 79, 27, 31, 32, 93, 16, 149, 83, 43, 43, 169, 97, 109, 186, 199, 63, 195, 206, 196, 62, 66, 89, 239, 114, 77, 170, 139, 226, 74, 46, 235, 35, 129, 1, 121, 238, 122, 137, 112, 89, 145, 127, 37, 58, 167, 112, 183, 147, 118, 64, 175, 169, 97, 66, 164, 242, 145, 34, 69, 97, 2, 110, 43, 166, 229, 152, 73, 43, 211, 189, 190, 217, 82, 171, 33, 119, 217, 90, 244, 185, 141, 54, 95, 55, 188, 241, 18, 180, 171, 192, 87, 47, 80, 66, 94, 34, 174, 227, 174, 143, 245, 1, 215, 119, 75, 154, 212, 191, 168, 187, 137, 31, 159, 217, 79, 70, 140, 147, 149, 50, 31, 185, 154, 85, 168, 167, 84, 160, 222, 149, 72, 95, 84, 15, 64], [78, 155, 130, 44, 23, 21, 35, 177, 155, 79, 13, 38, 240, 227, 3, 105, 13, 240, 74, 68, 180, 198, 72, 247, 128, 74, 164, 136, 107, 27, 181, 104, 215, 190, 46, 191, 70, 93, 125, 97, 32, 126, 125, 79, 155, 128, 90, 68, 45, 142, 81, 185, 111, 78, 252, 102, 9, 247, 65, 175, 18, 186, 121, 87, 222, 87, 56, 138, 198, 59, 94, 138, 158, 90, 176, 52, 49, 240, 186, 127, 30, 39, 157, 166, 167, 37, 157, 234, 53, 152, 138, 7, 166, 48, 64, 209, 39, 61, 42, 237, 187, 7, 21, 43, 211, 86, 185, 39, 218, 213, 168, 210, 86, 166, 27, 63, 68, 139, 252, 216, 122, 50, 21, 254, 30, 19, 149, 214, 1, 145, 111, 251, 37, 44, 144, 91, 254, 159, 135, 106, 167, 95, 113, 48, 26, 9, 236, 1, 119, 190, 148, 16, 159, 184, 222, 221, 180, 255], [228, 156, 238, 206, 7, 33, 248, 160, 29, 133, 182, 182, 216, 101, 30, 27, 108, 0, 162, 203, 140, 54, 60, 15, 17, 84, 23, 5, 2, 78, 184, 53, 181, 193, 177, 105, 26, 141, 42, 52, 130, 100, 10, 219, 80, 122, 82, 70, 87, 81, 99, 24, 232, 146, 206, 82, 234, 7, 159, 245, 90, 91, 131, 25, 81, 97, 20, 213, 148, 27, 231, 43, 37, 31, 160, 225, 206, 111, 183, 242, 207, 147, 17, 201, 227, 252, 253, 55, 161, 45, 210, 184, 36, 155, 135, 12, 4, 135, 143, 254, 131, 146, 181, 108, 26, 189, 138, 139, 238, 211, 175, 242, 159, 172, 189, 42, 182, 32, 78, 122, 121, 175, 225, 42, 90, 156, 177, 176, 131], [239, 223, 144, 20, 77, 66, 58, 243, 231, 226, 205, 60, 212, 171, 25, 12, 38, 228, 161, 178, 195, 220, 19, 92, 167, 247, 220, 16, 216, 83, 22, 75, 12, 34, 42, 153, 60, 34, 8, 11, 191, 66, 55, 131, 112, 211, 78, 131, 101, 89, 7, 66, 172, 61, 72, 165, 82, 97, 172, 108, 254, 43, 118, 238, 57, 103, 39, 163, 24, 113, 80, 33, 194, 14, 63, 72, 23, 157, 138, 149, 73, 243, 86, 132, 62, 248, 142, 3, 127, 205, 6, 201, 189, 187, 103, 26, 29, 168, 48, 14, 160, 32, 228, 193, 241, 198, 75, 214, 52, 151, 88, 54, 4, 98, 117, 200, 247, 26, 101, 238, 77, 57, 184, 41, 215, 240, 13, 177, 48, 91, 86, 160, 229, 141, 144, 142, 243, 77, 204, 26, 149, 153, 68, 121, 127, 48, 34, 117, 133, 254, 11, 96, 239, 253, 140, 152, 56, 85, 30, 29, 56, 33, 2, 44, 100, 208, 253, 128, 171, 73, 3, 176, 209, 124, 151, 39, 232, 131, 170, 152, 188, 38, 132, 115, 169, 253, 159, 236, 225, 40, 32, 11, 211, 214, 81, 167, 217, 194, 202, 20, 146, 91, 37, 188, 146, 32, 157, 138, 41, 127, 59, 248, 146, 207, 44, 92, 58, 105, 212, 157, 140, 247, 205, 37, 1, 123, 170, 194, 39, 58, 243, 65, 153, 32, 22, 205, 217, 177, 84, 118, 252, 177, 18, 51, 144, 42, 254, 113, 110, 155, 244, 32, 73, 65, 171, 67, 174, 196, 24, 187, 158, 19, 220, 81, 228, 201, 37, 121, 223, 159, 132, 200, 34, 193, 35, 100, 185, 157, 194, 74, 232, 120, 87, 45, 210, 198, 223, 9, 33, 224, 77, 220, 199, 144, 143, 153, 145, 244, 222, 111, 240, 8, 39, 0, 239, 125, 221, 198], [88, 158, 254, 112, 35, 50, 21, 251, 21, 232, 33, 30, 94, 175, 255, 67, 128, 223, 57, 16, 127, 140, 176, 35, 133, 210, 138, 41, 90, 214, 30, 142, 123, 129, 70, 55, 27, 73, 85, 30, 16, 72, 10, 23, 116, 40, 125, 89, 129, 120, 52, 10, 145, 217, 160, 105, 202, 174, 158, 197, 131, 54, 125, 200, 18, 229, 143, 73, 78, 21, 188, 99, 187, 53, 25, 4, 211, 92, 82, 22, 12, 113, 183, 110, 80, 61, 42, 49, 195, 192, 39, 190, 25, 29, 178, 167, 88, 244, 41, 188, 252, 26, 163, 116, 201, 199, 165, 217, 183, 89, 62, 231, 115, 135, 184, 229, 207, 65, 142, 121, 123, 189, 123, 243, 147, 22, 128, 58, 143, 254, 155, 227, 36, 29, 4, 216, 221, 186, 157, 139, 61, 70, 250, 151, 171, 123, 136, 254, 232, 66, 30, 125, 221, 181, 30, 42, 83, 204, 63, 169, 157, 209, 176, 6, 80, 44, 127, 71, 178, 189, 197, 137, 17, 136, 227, 15, 196, 234, 102, 73, 96, 49, 14, 165, 43, 210, 99, 175, 47, 13, 53, 246, 97, 205, 55, 148, 182, 94], [36, 75, 83, 170, 111, 241, 142, 253, 156, 102, 110, 96, 15, 124, 228, 189, 125, 163, 201, 120, 127, 163, 239, 168, 38, 110, 133, 206, 108, 50, 120, 120, 139, 44, 215, 202, 38, 157, 44, 108, 205, 91, 214, 128, 28, 166, 29, 45, 220, 87, 66, 117, 255, 206, 163, 206, 10, 175, 83, 238, 248, 97, 164, 73, 1, 107, 241, 183, 207, 153, 172, 221, 96, 217, 20, 161, 72, 81, 198, 255, 115, 20, 134, 121, 145, 0, 139, 12, 133, 146, 56, 203], [65, 159, 89, 129, 240, 95, 25, 97, 56, 77, 188, 220, 191, 247, 64, 144, 8, 55, 148, 230, 245, 164, 66, 133, 218, 125, 226, 79, 61, 248, 179, 174, 63, 221, 114, 46, 134, 82, 206, 54, 135, 44, 207, 127, 26, 209, 153, 9, 219, 227, 124, 118, 18, 131, 173, 28, 149, 79], [106, 211, 187, 5, 125, 2, 243, 79, 233, 145, 71, 227, 154, 131, 217, 231, 70, 198, 151, 114, 210, 35, 148, 27, 129, 105, 255, 89, 120, 21, 250, 70, 101, 133, 71, 145, 180, 83, 59, 110, 144, 47, 190, 232, 50, 182, 185, 213, 230, 163, 107, 42, 100, 120, 117, 38, 121, 137, 241, 225, 146, 73, 53, 85, 85, 70, 79, 109, 217, 167, 241, 31, 226, 0, 100, 119, 123, 244, 66, 197, 61, 240, 142, 145, 124, 140, 162, 49, 179, 58, 242, 113, 8, 89, 166, 37, 112, 115, 168, 142, 88, 35, 62, 195, 12, 244, 128, 198, 218, 211, 18, 85, 191, 58, 137, 249, 39, 8, 110, 72, 206, 148, 117, 187, 184, 247, 168, 228, 2, 47, 106, 75, 75, 61, 84, 219, 33, 204, 204, 85, 67, 238, 24, 180, 187, 182, 33, 131, 103, 3, 229, 146, 42, 238, 245, 124, 250, 154, 143, 225, 217, 244, 79, 167, 52, 145, 245, 71, 138, 37, 148, 11, 121, 43, 114, 87, 117, 183, 222, 45, 190, 35, 97, 22, 161, 16, 106, 193, 85, 208, 12, 171, 124, 81, 248, 32, 131, 5, 22, 89, 134, 129, 152, 115, 148, 77, 145, 240, 243, 123, 17, 219, 51, 254, 96, 154, 115, 133, 11, 59, 198, 210, 51, 77, 37, 66, 187, 239, 104, 134, 206, 181, 238, 41, 220, 3, 155, 107, 138, 73, 84, 54, 184, 52, 99, 240, 111, 187, 37, 38, 163, 65, 198, 232, 16, 68, 67, 232, 181, 144, 90, 9, 99, 78, 123, 73, 65, 0, 36, 134, 105, 66, 230, 25, 103, 202, 160, 167, 90, 46, 141, 121, 243, 185, 131, 101, 139, 157, 166, 248, 85, 50, 15, 10, 137, 101, 40, 117, 209, 190, 185, 203, 38, 52, 83, 157, 60, 109, 86, 154, 25, 168, 248, 238, 137, 121, 150, 203, 111, 60, 90, 206, 245, 139, 94, 203, 203, 100, 100, 183, 124, 189, 190, 148, 62, 30, 141, 64, 130, 7, 173, 3, 229, 81, 172, 148, 162, 122, 69, 251, 138, 30, 24, 184, 173, 42, 143, 54, 101, 166, 87, 153, 198, 67, 72, 58], [104, 22, 106, 73, 57, 122, 117, 185, 123, 227, 190, 209, 224, 98, 77, 40, 88, 193, 192, 107, 124, 159, 99, 182, 61, 198, 94, 126, 30, 136, 151, 136, 213, 195, 71, 243, 90, 10, 255, 103, 207, 119, 228, 53, 128, 141, 217, 113, 120, 239, 27, 81, 64, 230, 159, 164, 244, 249, 81, 183, 105, 195, 88, 38, 44, 13, 33, 18, 159, 205, 191, 124, 84, 69, 86, 114, 8, 72, 68, 189, 17, 129, 221, 18, 116, 75, 186, 156, 134, 118, 175, 223, 82, 7, 18, 234, 169, 18, 225, 137, 50, 193, 221, 7, 93, 75, 180, 229, 197, 123, 78, 207, 64, 160, 93, 66, 35, 100, 75, 190, 254, 30, 119, 33, 215, 154, 82, 0, 2, 200, 209, 5, 134, 178, 96, 213, 167, 127, 88, 89, 67, 21, 71, 229, 106, 216, 215, 235, 163, 158, 34, 6, 0, 71, 151, 193, 184, 143, 167, 3, 188, 24, 181, 192, 18, 23, 88, 16, 64, 192, 40, 61, 101, 226, 215, 153, 77, 143, 144, 151, 120, 49, 9, 215, 35, 89, 22, 253, 146, 35, 72, 203, 125, 45, 48, 136, 12, 133, 198, 103, 147, 100, 21, 87, 129, 8, 153, 174, 131, 82, 172, 149, 16, 206, 61, 70, 145, 109, 170, 72, 192, 57, 93, 139, 19, 66, 40, 210, 33, 232, 190, 184, 68, 193, 112, 49, 157, 18, 77, 69, 180, 40, 243, 55, 66, 250, 136, 95, 5, 201, 39, 19, 16, 136, 181, 74, 196, 159, 28, 27, 58, 55, 70, 46, 41, 167, 78, 97, 70, 1, 71, 0, 58, 186, 100, 68, 244, 195, 17, 128, 137, 215, 53, 76, 157, 130, 168, 254, 160, 42, 64, 255, 183, 212, 129, 11, 75, 177, 141, 112, 69, 158, 162, 170, 100, 59, 190, 21, 28, 191, 155, 166, 128, 45, 238, 243, 102, 81, 9, 186, 8, 182, 42, 19, 6, 119, 146, 1, 132, 69, 249, 133, 190, 28, 31, 108, 14, 192], [105, 255, 176, 75, 89, 253, 254, 242, 50, 52, 131, 76, 166, 43, 158, 165, 124, 63, 176, 89, 188, 206, 179, 124, 192, 133, 24, 189, 180, 61, 179, 53, 181, 175, 148, 158, 17, 217, 179, 36, 160, 191, 73, 21, 157, 142, 240, 165, 21, 166, 16, 110, 45, 137, 193, 104, 212, 188, 34, 98, 139, 225, 160, 7, 99, 130, 253, 91, 212, 17, 120, 25, 79, 21, 168, 34, 61, 173, 145, 73, 224, 136, 201, 164, 160, 173, 164, 118, 69, 125, 34, 234, 33, 165, 128, 169, 80, 102, 72, 204, 81, 166, 61, 106, 52, 158, 65, 228, 172, 158, 121, 204, 189, 67, 215, 166, 170, 61, 215, 139, 158, 64, 129, 185, 188, 23, 196, 23, 129, 16, 58, 135, 178, 33, 153, 103, 51, 165, 171, 168, 89, 252, 242, 230, 129, 90, 66, 127, 63, 233, 118, 81, 197, 155, 137, 202, 204, 222, 51, 59, 100, 171, 86, 10, 221, 130, 12, 130, 91, 190, 129, 150, 140, 127, 177, 238, 61, 132, 177, 162, 55, 115, 40, 119, 57, 209, 243, 119, 242, 250, 150, 82, 73, 119, 108, 226, 166, 103, 158, 23, 87, 33, 178, 17, 183, 110], [90], [220, 113, 13, 66, 25, 102, 98, 198, 112, 186, 35, 170, 167, 38, 29, 104, 171, 195, 67, 248, 239, 23, 37, 165, 114, 218, 136, 134, 39, 86, 242, 227, 204, 29, 48, 221, 75, 30, 84, 51, 204, 63, 32, 102, 218, 236, 175, 251, 77, 74, 253, 144, 183, 202, 142, 171, 245, 11, 99, 17, 57, 20, 81, 46, 232, 167, 17, 12, 43, 20, 25, 157, 239, 13, 11, 244, 242, 215, 71, 190, 243, 177, 45, 67, 199, 213, 114, 220, 233, 187, 51, 13, 154, 81, 3, 235, 113, 174, 104, 78, 185, 169, 224, 41, 15, 237, 205, 79, 244, 136, 91, 63, 171, 35, 211, 97, 102, 237, 57, 171, 5, 118, 251, 124, 104, 169, 192, 38, 38, 88, 179, 43, 85, 146, 86, 49, 152, 89, 29, 86, 46, 242, 23, 209, 97, 34, 184, 159, 239, 75, 20, 60, 74, 221, 193, 40, 124, 199, 8, 106, 42, 209, 12, 93, 24, 212, 94, 75, 98, 216, 220, 187, 22, 248, 241, 44, 150, 100, 102, 61, 182, 88, 5, 159, 16, 127], [8, 17, 239, 190, 177, 21, 175, 38, 121, 218, 56, 14, 74, 196, 54, 2, 172, 167, 167, 11, 187, 97, 27, 133, 194, 16, 53, 243, 139, 78, 215, 242, 44, 244, 200, 251, 53, 113, 39, 133, 113, 7, 40], [113, 190, 163, 174, 197, 214, 95, 108, 159, 211, 23, 197, 74, 133, 119, 23, 52, 113, 101, 60, 162, 150, 176, 99, 194, 111, 67, 232, 68, 38, 160, 116, 133, 54, 153, 127, 31, 59, 161, 50, 197, 137, 0, 65, 107, 29, 171, 82, 62, 154, 85, 85, 211, 8, 217, 121, 209, 177, 100, 67, 235, 209, 255, 171, 119, 177, 224, 48, 45, 247, 161, 37, 232, 62, 184, 129, 4, 31, 145, 28, 160, 35, 172, 117, 56, 98, 62, 180, 229, 143, 216, 32, 44, 241, 21, 27, 250, 175, 117, 166, 91, 237, 219, 161, 147, 51, 126, 125, 134, 60, 24, 181, 46, 56, 57, 88, 151, 78, 216, 47, 27, 59, 115, 146, 181, 194, 156, 83, 182, 3, 148, 187, 99, 187, 114, 105, 35, 68, 7, 195, 136, 10, 18, 139, 90, 37, 106, 18, 146, 214, 45, 125, 122, 1, 222, 131, 129, 76, 224, 218, 134, 85, 35, 244, 133, 39, 232, 181, 93, 97, 185, 73, 88, 28, 168, 193, 68, 41, 180, 124, 180, 214, 207, 123, 153, 123, 191, 155, 207, 182, 137, 245, 105, 26, 77, 201, 72, 176, 220, 223, 67, 81, 174, 105, 141, 192, 44, 223, 34, 227, 107, 163, 210, 173, 241, 210, 37, 180, 146, 83, 83, 203, 45, 226, 58, 43, 133, 36, 58, 129, 115, 113, 113], [119, 175, 148, 68, 101, 141, 128, 251, 169, 98, 43, 103, 226, 51, 248, 86, 159, 129, 97, 5, 140, 192, 20, 204, 185, 1, 111, 11, 255, 32, 116, 114, 252, 123, 177, 92, 178, 37, 64, 247, 174, 132, 91, 118, 227, 88, 19, 249, 221, 132, 169, 111, 159, 31, 176, 108, 153, 250, 105, 12, 53, 27, 33, 22, 174, 119, 129, 14, 210, 202, 45, 134, 148, 240, 196, 179, 114, 133, 211, 85, 159, 67, 90, 222, 167, 248, 119, 118, 230, 187, 145, 194, 42, 234, 38, 25, 7, 13, 212, 7, 50, 189, 223, 111, 245, 224, 118, 213, 122, 233, 212, 118, 217, 172, 135, 0, 54, 228, 44, 175, 131, 211, 159, 222, 1, 44, 79, 255, 219, 41, 142, 28, 50, 204, 187, 40, 200, 40, 218, 159, 223, 116, 115, 132, 175, 65, 218, 49, 72, 75, 5, 84, 157, 80, 46, 104, 197, 5, 51, 101, 235, 26, 204, 157, 128, 144, 31, 2, 204, 28, 48, 170, 144, 166, 200, 184, 244, 1, 19, 135, 248, 125, 32, 21, 79, 90, 26, 148, 233, 198, 6, 194, 203, 18, 121, 95, 239, 33, 93, 75, 35, 134, 227, 116, 174, 246, 155, 192, 165, 25, 202, 19, 77, 104, 133, 61, 89, 1, 158, 62, 101, 94, 152, 189, 229, 122, 209, 73, 144, 6, 60, 109, 81, 8, 100, 215, 148, 69, 52, 230, 62, 211, 60, 68, 7, 81, 225, 11, 90, 42, 71, 246, 169, 244, 254, 1, 183, 126, 96, 37, 113, 243, 159, 229, 189, 111, 65, 207, 54, 215, 95, 36, 27, 106, 230, 77, 55, 73], [150, 148, 213, 131, 171, 38, 191, 88, 220, 71, 56, 156, 242, 80, 167, 8, 121, 104, 43, 175, 109, 242, 246, 34, 149, 193, 118, 180, 188, 45, 228, 125, 254, 25, 31, 173, 13, 11, 225, 142, 221, 235, 91, 93, 119, 0, 195, 232, 186, 50, 170, 44, 89, 231, 61, 87, 122, 109, 128, 133, 149, 243, 85, 103, 67, 46, 46, 155, 19, 208, 252, 49, 242, 137, 46, 191, 68, 217, 138, 252, 140, 188, 119, 118, 112, 110, 184, 49, 104, 86, 90, 201, 251, 117, 245, 30, 244, 118, 183, 164, 24, 108, 6, 197, 160, 129, 172, 28, 55, 222, 78, 60, 235, 250, 217, 16, 203, 43, 153, 232, 13, 210, 70, 123, 74, 106, 82, 220, 151, 85, 75, 95, 135, 34, 96, 8, 48, 174, 69, 76, 44, 38, 88, 107, 245, 99, 158, 65, 109, 7, 189, 7, 204, 78, 53, 144, 246, 148, 142, 171, 154, 54, 119, 51, 206, 238, 48, 135, 104, 90, 3, 82, 19, 48, 40, 174, 190, 29, 182, 65, 178, 131, 147, 171, 12, 163, 207, 169, 240, 7, 219, 80, 38, 53, 77, 186, 71, 226, 167, 216, 82, 136, 87, 212, 242, 115, 101, 31, 35, 158, 24, 227, 22, 178, 87, 222, 45, 245, 244, 203, 177, 103, 133, 127, 222, 117, 190, 55, 49, 115, 30, 37, 237, 46, 146, 124, 84, 1, 41, 60, 175, 28, 53, 223, 50, 97, 240, 191, 189, 78, 67, 144, 138, 46, 199, 237, 31, 183, 49, 202, 33, 77, 39, 59, 187, 252, 162, 245, 123, 206, 19, 113, 209, 236, 160, 43], [204, 248, 80, 91, 22, 86, 82, 186, 152, 38, 1, 54, 207, 139, 116, 177, 86, 3, 108, 239, 59, 73, 7, 11, 23, 182, 105, 104, 27, 246, 95, 98, 9, 29, 251, 67, 21, 89, 176, 48, 218, 67, 205, 20, 210, 43, 176, 64, 254, 47, 93, 157, 197, 90, 61, 17, 10, 242, 99, 241, 51, 62, 191, 40, 192, 255, 42, 29, 63, 103, 183, 230, 95, 114, 111, 45, 69, 225, 120, 172, 201, 5, 93, 85, 219, 144, 167, 164, 124, 106, 253, 35, 238, 102, 161, 169, 213, 92, 225, 230, 113, 150, 37, 107, 93, 111, 147, 220, 28, 151, 38, 202, 23, 10, 51, 170, 235, 134, 168, 35, 194, 80, 202, 185, 217, 5, 95, 161, 161, 191, 67, 184, 99, 178, 217, 56, 94, 24, 133, 92, 155, 230, 24, 225, 11, 35, 255, 172, 93, 138, 249, 123, 74, 192, 226, 78, 224, 238, 91, 16, 153, 251, 176, 200, 218, 205, 217, 248, 217, 119, 137, 16, 48, 63, 72, 117, 176, 36, 104, 29, 51, 120, 91, 78, 76, 2, 126, 23, 139, 215, 234, 15, 44, 42, 121, 55, 51, 229, 180, 13, 201, 193, 125, 135, 160, 3, 10, 204, 163, 157, 157, 11, 109, 193, 90, 123, 57, 135, 75, 64, 219, 189, 171, 59, 170, 3, 102, 175, 169, 183, 127, 121, 48, 86, 108, 248, 152, 155, 76, 69, 78, 24, 144, 119, 225, 197, 33, 30, 27, 198, 100, 195, 156, 254, 208, 154, 98, 77, 151, 3, 254, 107], [74, 105, 72, 37, 8, 253, 111, 21, 238, 85, 128, 117, 25, 161, 234, 95, 34, 222, 122, 139, 92, 160, 194, 26, 193, 225, 14, 110, 26, 156, 112, 19, 229, 187, 181, 61, 53, 220, 29, 29, 88, 9, 19, 229, 82, 75, 16, 225, 102, 44, 252, 86, 107, 94, 131, 128, 195, 41, 103, 65, 109, 39, 105, 189, 42, 50, 137, 20, 243, 172, 92, 78, 106, 227, 190, 111, 85, 192, 122, 86, 79, 129, 181, 211, 114, 99, 121, 64, 64, 247, 195, 87, 224, 87, 180, 197, 144, 197, 179, 100, 184, 29, 40, 135, 245, 146, 11, 2, 201, 115, 71, 193, 238, 114, 227, 234, 251, 71, 109, 128, 138, 210, 185, 206, 56, 205, 68, 99, 238, 208, 35, 138, 202, 95, 200, 124, 97, 130, 181, 177, 141, 163, 145, 43, 89, 200, 75, 215, 38, 187, 158, 97, 151, 221, 207, 207, 12, 10, 152, 219, 69, 189, 246, 28, 59, 34, 68, 173, 190, 113, 103, 157, 80, 2, 8, 207, 167, 20, 129, 207, 214, 191, 4, 88, 189, 6, 24, 73, 6, 101, 205, 132, 25, 217, 164, 247, 2, 244, 166, 20, 15, 119, 253, 76, 4, 235, 101, 168, 247, 91, 191, 22, 93, 148, 82, 238, 64, 112, 29, 137, 58, 0, 197, 161, 171, 238, 109, 131, 67, 123, 7, 110, 235, 3, 130, 120, 50, 87, 26, 206, 174, 90, 233, 171, 249, 126, 231, 72, 31, 111, 78, 184, 76, 84, 232, 1, 112, 8, 191, 164, 112, 56, 121, 94, 76, 91, 172, 53, 92, 170, 140, 11, 44, 199, 137, 203, 253, 95, 152, 147, 241, 112, 171, 97, 82, 69, 85, 220, 255, 87, 135, 90, 148, 88, 241, 126, 191, 255, 141, 0, 1, 115, 170, 98, 150, 171, 32, 30, 190, 161, 194, 228, 2, 7, 1, 95, 47, 107, 67, 184, 138, 80, 140, 164, 65, 217, 215, 37, 45, 178, 175, 60, 164, 52, 176, 197, 167, 172, 236, 23, 78, 137, 37, 137, 19, 239, 118, 205, 76, 202, 177, 3, 184, 91, 87, 74, 197, 112, 202, 226, 250, 0], [59, 210, 194, 182, 39, 207, 224, 48, 75, 82, 213, 20, 137, 54, 126, 70, 104, 235, 233, 83, 0, 5, 3, 233, 0, 220, 89, 156, 138, 183, 69, 194, 218, 238, 51, 15, 107, 45, 104, 123, 204, 239, 161, 129, 82, 87, 0, 46, 34, 191, 9, 4, 175, 133, 159, 240, 35, 105, 102, 198, 163, 79, 14, 132, 254, 187, 219, 25, 167, 113, 100, 157, 49, 142, 56, 228, 242, 67, 5, 168, 141, 202, 187, 38, 133, 35, 121, 67, 105, 252, 157, 57, 32, 127, 212, 254, 55, 3, 120, 181, 66, 218, 212, 104, 165, 2, 21, 65, 194, 9, 201, 249, 179, 137, 192, 215, 49, 99, 55, 214, 162, 165, 77, 4, 123, 140, 217, 133, 127, 122, 52, 138, 158, 7, 62, 244, 233, 135, 151, 159, 148, 103, 85, 62, 98, 68, 54, 191, 93, 194, 124, 94, 18, 25, 71, 235, 95, 208, 129, 236, 66, 36, 129, 84, 92, 43, 7, 120, 128, 171, 105, 75, 2, 109, 251, 220, 179, 100, 224, 164, 127, 168, 86, 165, 173, 172, 218, 218, 220, 152, 176, 142, 194, 119, 115, 115, 118, 160, 177, 128, 103, 175, 157, 69, 26, 244, 183, 65, 113, 115, 152, 128, 162, 4, 27, 166, 168, 86, 248, 172, 98, 211, 125, 160, 158, 255, 93, 42, 113, 181, 176, 37, 96, 89, 207, 176, 15, 16, 31, 206, 172, 64, 87, 139], [121, 143, 17, 2, 215, 94, 140, 213, 89, 158, 52, 126, 75, 216, 55, 42, 80, 106, 174, 255, 70, 187, 39, 69, 249, 214, 40, 100, 67, 227, 240, 89, 0, 18, 128, 128, 113, 100, 133, 204, 160, 176, 221, 128, 38, 123, 11, 251, 65, 218, 48, 89, 143, 105, 253, 29, 18, 222, 58, 28, 208, 243, 1, 181, 127, 179, 222, 159, 178, 41, 205, 83, 247, 232, 59, 157, 155, 245, 49, 63, 12, 153, 201, 76, 145, 140, 86, 75, 140, 123, 195, 141, 98, 89, 61, 67, 69, 129, 2, 69, 242, 2, 148, 122, 28, 128, 12, 193, 153, 127, 202, 160, 142, 18, 148, 29, 43, 253, 219, 59, 199, 12, 97, 99, 189, 226, 101, 104, 155, 178, 80, 20, 34, 53, 185, 13, 52, 239, 49, 138, 134, 227, 106, 38, 184, 172, 10, 180, 92, 182, 44, 108, 67, 121, 246, 58, 182, 230, 2, 192, 195, 168, 86, 27, 55, 40, 6, 50, 5, 240, 66, 187, 35, 176, 92, 208, 3, 35, 10, 232, 50, 36, 30, 158, 253, 16, 147, 201, 21, 160, 245, 227, 45, 40, 218, 172, 177, 4, 236, 250, 106, 169, 250, 200, 163, 227, 54, 226, 132, 199, 133, 15, 147, 219, 52, 129, 106, 15, 187, 129, 38, 175, 248, 148, 203, 169, 214, 133, 47, 1, 58, 51, 77, 156, 166, 136, 137, 166, 86, 50, 71, 184, 179, 75, 100, 94, 6, 83, 71, 127, 33, 38, 87, 88, 138, 54, 107, 137, 171, 49, 108, 145, 15, 125, 110, 185, 61, 126, 190, 18, 148, 207, 28, 7, 37, 139, 22, 128, 8, 78, 154, 211, 163, 186, 202, 227, 46, 162, 77, 72, 72, 213, 44, 94, 202, 230, 242, 225, 250, 185, 64, 169, 157, 84, 98, 246, 159, 28, 170, 229, 159, 0, 218, 49, 139, 218, 136, 81, 74, 243, 60, 255, 60, 105, 221, 53, 164, 96, 173, 19, 242, 53, 97, 20, 199, 156, 186, 155, 13, 24, 198, 215, 131, 231, 162, 57, 54, 110, 137, 193, 12, 109, 249, 93, 12, 184, 162, 31], [223, 6, 6, 219, 138, 218, 139, 46, 140, 195, 67, 22, 89, 143, 26, 96, 245, 241, 225, 104, 122, 158, 203, 188, 24, 11, 191, 113, 199, 201, 40, 55, 169, 120, 158, 82, 123, 9, 75, 81, 58, 65, 224, 66, 13, 216, 169, 224, 92, 138, 125, 76, 199, 211, 87, 206, 13, 232, 167, 113, 235, 176, 159, 7, 61, 53, 110, 67, 172, 206, 31, 245, 174, 98, 55, 32, 58, 215, 94, 185, 178, 178, 120, 169, 173, 245, 23, 191, 249, 46, 128, 159, 108, 207, 83, 119, 179, 233, 54, 168, 240, 36, 232, 14, 33, 153, 204, 238, 110, 195, 27, 173, 151, 222, 105, 182, 31, 183, 122, 73, 118, 252, 32, 42, 144, 125, 249, 50, 225, 208, 149, 143, 15, 77, 156, 208, 178, 153, 116, 180, 223, 165, 95, 38, 83, 247, 145, 211, 133, 58, 34, 32, 161, 191, 84, 5, 84, 252, 241, 41, 146, 251, 187, 153, 34, 173, 246, 239, 201, 254, 185, 0, 145, 179, 161, 56, 243, 75, 125, 130, 110, 53, 9, 25, 51, 255, 88, 22, 98, 87, 200, 97, 31, 186, 198, 244, 100, 40, 53, 55, 158, 202, 50, 47, 53, 38, 186, 58, 140, 20, 179, 30, 61, 4, 107, 129, 74, 81, 61, 212, 149, 45, 198, 109, 0, 19, 206, 127, 106, 99, 236, 138, 22, 255, 54, 138, 180, 221, 195, 86, 217, 124, 178, 69, 33, 156, 130, 245, 73, 42, 47, 4, 207, 181, 253, 158, 135, 163, 203, 157, 57, 198, 95, 140, 182, 147, 207, 4, 182, 194, 60, 164, 241, 118, 180, 136, 193, 214, 28, 9, 63, 229, 150, 188, 54, 17, 112, 156, 116, 190, 78, 182, 223, 242, 251, 193, 88, 46, 149, 179, 255, 136, 190, 98, 2, 117, 207, 210, 83, 205, 61, 10, 189, 176, 177, 185, 18, 216, 54, 167, 208, 74, 27, 211, 81, 117, 248, 139, 51, 172, 217, 72, 250, 196, 44, 11, 93, 46], [153, 198, 157, 243, 60, 137, 37, 241, 161, 2, 121, 37, 142, 202, 222, 8, 114, 90, 43, 19, 46, 8, 76, 129, 241, 99, 24, 246, 153, 69, 25, 184, 169, 67, 130, 197, 110, 210, 105, 242, 53, 79, 72, 74, 242, 170, 168, 46, 93, 100, 240, 30, 177, 153, 81, 208, 238, 41, 125, 44, 5, 84, 44, 240, 56, 33, 168, 100, 123, 228, 92, 129, 220, 50, 42, 102, 11, 124, 226, 73, 60, 205, 196, 91, 138, 192, 2, 142, 255, 138, 44, 197, 219, 35, 93, 89, 68, 137, 3, 197, 2, 75, 68, 18, 105, 122, 135, 27, 190, 220, 167, 99, 70, 209, 224, 189, 0, 198, 78, 75, 22, 121, 206, 214, 3, 173, 178, 140, 139, 235, 144, 82, 82, 207, 74, 23, 5, 154, 21, 215, 115, 84, 27, 74, 60, 168, 64, 133, 179, 228, 82, 11, 163, 17, 134, 142, 85, 108, 32, 223, 152, 50, 228, 188, 109, 165, 252, 109, 229, 240, 204, 165, 135, 115, 53, 142, 238, 156, 206, 78, 124, 136, 74, 136, 73, 49, 174, 222, 210, 44, 111, 44, 97, 0, 59, 31, 76, 243, 16, 39, 128, 80, 74, 44, 238, 1, 21, 119, 87, 248, 237, 85, 157, 98, 160, 129, 68, 134, 67, 29, 204, 9, 188, 160, 174, 55, 145, 88, 240, 155, 185, 27, 64, 130, 171, 128, 105, 23, 89, 169, 103, 159, 187, 219, 179, 144, 211, 181, 94, 138, 253, 53, 125, 42, 198, 182, 181, 207, 34, 231, 222, 222, 138, 155, 238, 171, 25, 1, 115, 8, 196, 164, 61, 2, 254, 149, 115, 117, 110, 34, 56, 98, 208, 48, 192, 184, 103, 4, 181, 32, 67, 109, 123, 142, 84, 135, 87, 188, 67, 212, 151, 140, 37, 213], [177, 222, 250, 20, 255, 3, 19, 62, 241, 162, 65, 185, 45, 174, 4, 102, 245, 55, 49, 187, 76, 17, 184, 232, 170, 204, 72, 32, 222, 153, 54, 25, 13, 226, 169, 155, 75, 27, 135, 20, 251, 201, 180, 77, 250, 161, 228, 222, 253, 245, 168, 221, 225, 62, 245, 78, 172, 0, 191, 161, 122, 134, 207, 0, 95, 57, 233, 132, 221, 65, 246, 152, 62, 26, 35, 58, 212, 231, 41, 10, 191, 95, 218, 61, 25, 236, 234, 44, 251, 152, 19, 172, 207, 41, 184, 91, 50, 54, 87, 113, 121, 92, 215, 205, 2, 110, 224, 2, 221, 20, 40, 234, 247, 123, 190, 17, 55, 176, 242, 81, 71, 90, 219, 218, 220, 155, 107, 94, 72, 221, 211, 199, 37, 16, 30, 164, 197, 143, 172, 76, 141, 94, 29, 87, 217, 41, 221, 86, 55, 11, 132, 250, 190, 79, 120, 226, 117, 239, 241, 53, 173, 86, 114, 77, 71, 123, 210, 184, 1, 139, 75, 107, 147, 99, 61, 154, 216, 48, 177, 223, 15, 134, 84, 85], [73, 240, 76, 145, 29, 237, 80, 176, 70, 201, 105, 37, 178, 195, 239, 255, 89, 176, 95, 239, 173, 96, 125, 46, 194, 55, 99, 103, 182, 34, 62, 230, 241, 234, 25, 121, 60, 113, 132, 112, 206, 69, 64, 43, 229, 29, 18, 114, 95, 7, 171, 43, 27, 242, 189, 178, 113, 121, 122, 166, 204, 76, 230, 49, 12, 57, 37, 211, 244, 237, 248, 222, 154, 51, 222, 202, 220, 126, 134, 95, 62, 134, 205, 140, 250, 221, 66, 75, 108, 191, 90, 143, 174, 73, 2, 248, 97, 134, 48, 135, 135], [229, 154, 191, 194, 34, 226, 41, 199, 160, 37, 27, 220, 189, 74, 244, 108, 164, 188, 164, 112, 145, 20, 56, 35, 158, 208, 214, 75, 87, 230, 247, 212, 83, 108, 116, 91, 240, 63, 157, 99, 92, 184, 253, 38, 10, 121, 196, 231, 79, 77, 48, 140, 246, 219, 6, 190, 31, 29, 20, 80, 146, 239, 140, 208, 187, 112, 58, 48, 138, 14, 190, 56, 242, 117, 120, 231, 143, 88, 5, 141, 254, 40, 2, 105, 49, 210, 9, 158, 232, 138, 69, 222, 215, 137, 149, 152, 201, 186, 227, 195, 53, 121, 209, 198, 34, 16, 82, 225, 171, 62, 114, 3, 237, 73, 25, 17, 191, 164, 185, 56, 81, 231, 123, 158, 55, 218, 5, 9, 178, 235, 70, 7, 60, 150, 172, 229, 24, 152, 125, 21, 162, 187, 64, 93, 191, 56, 227, 182, 105, 231, 247, 93, 55, 62, 26, 55, 194, 154, 88, 125, 121, 87, 52, 170, 195, 126, 6, 137, 205, 11, 162, 215, 244, 72, 190, 100, 222, 92, 217, 39, 116, 34, 33, 67, 98, 119, 252, 154, 190, 115, 134, 249, 243, 22, 67, 18, 84, 199, 74, 120, 248, 11, 154, 54, 193, 77, 68, 29, 248, 9, 205, 55, 114, 81, 162, 130, 89, 203, 88, 17, 60, 186, 255, 125, 137, 138, 48, 79, 166, 64, 226, 159, 40, 91, 132, 137, 169, 180, 89, 97, 197, 94, 172, 247, 215, 168, 5, 141, 18, 224, 133, 32, 110, 121, 39, 31, 149, 125, 106, 217, 168, 107, 53, 54, 116, 76, 254, 105, 229, 67, 106, 213, 152, 141, 22, 236, 232, 149, 185, 200, 85, 32, 235, 152, 60, 242, 248, 49, 155, 88, 62, 109, 35, 178, 255, 90, 245, 67, 80, 28, 79, 172, 48, 50, 31, 247, 162, 74, 127, 235, 175, 59], [231, 102, 221, 214, 131, 128, 35, 80, 98, 55, 44, 71, 38, 133, 232, 204, 96, 204, 203, 30, 245, 91, 223, 243, 63, 99, 14, 33, 181, 127, 37, 74, 185, 249, 226, 252, 76, 92, 226, 120, 90, 12, 8, 104, 236, 117, 173, 65, 213, 32, 250, 137, 163, 185, 140, 11, 250, 238, 241, 52, 231, 70, 224, 237, 161, 140, 122, 222, 37, 227, 200, 143, 74, 220, 154, 111, 122, 238, 112, 67, 188, 237, 152, 156, 136, 102, 28, 171, 55, 45, 143, 94, 132, 8, 84, 117, 24, 23, 134, 228, 1, 154, 99, 158, 105, 53], [254, 79, 204, 160, 151, 71, 176, 9, 198, 102, 109, 208, 243, 62, 161, 28, 89, 249, 153, 56, 137, 7, 157, 79, 21, 93, 164, 5, 98, 159, 229, 105, 100, 240, 193, 244, 213, 24, 161, 176, 129, 79, 27, 62, 183, 95, 145, 213, 239, 31, 41, 96, 32, 26, 128, 66, 217, 189, 138, 24, 82, 190, 99, 192, 144, 81, 86, 19, 249, 117, 194, 15, 17, 202, 230, 18, 99, 34, 173, 255, 144, 141, 48, 47, 245, 226, 147, 153, 107, 196, 83, 75, 6, 249, 113, 80, 244, 76, 160, 50, 41, 133, 242, 95, 158, 197, 93, 109, 124, 112, 79, 27, 88, 124, 215, 114, 235, 77, 70, 94, 145, 124, 4, 137, 201, 253, 134, 245, 233, 190, 143, 234, 28, 89, 69, 108, 112, 95, 68, 51, 36, 89, 65, 5, 100, 80, 206, 195, 18, 87, 252, 58, 232, 17, 181, 146, 4, 77, 6, 35, 71, 150, 219, 30, 133, 85, 27, 177, 42, 174, 200, 5, 109, 94, 81, 171, 141, 166, 5, 120, 66, 159, 239, 109, 136, 205, 247, 44, 45, 78, 71, 164, 20, 251, 227, 93, 106, 13, 2, 207, 7, 107, 209, 225, 58, 154, 174, 150, 143, 238, 243, 25, 33, 107, 90, 189, 98, 75, 61, 186, 90, 73, 175, 185, 157, 138, 243, 152, 157, 38, 28, 104, 69, 218, 174, 200, 217, 85, 98], [106, 11, 127, 156, 220, 122, 218, 123, 22, 144, 114, 49, 172, 195, 77, 191, 246, 66, 149, 253, 39, 244, 26, 43, 1, 255, 193, 58, 199, 194, 204, 144, 75, 243, 8, 178, 222, 144, 204, 95, 88, 48, 186, 65, 1, 13, 161, 26, 169, 236, 4, 217, 239, 217, 16, 213, 79, 98, 253, 40, 208, 57, 164, 224, 231, 127, 200, 192, 248, 164, 87, 39, 203, 209, 94, 174, 138, 61, 50, 62, 149, 18, 200, 69, 242, 137, 254, 88, 69, 30, 76, 106, 231, 95, 139, 22, 117, 182, 21, 43, 193, 58, 11, 61, 169, 255, 207, 118, 225, 183, 15, 198, 210, 149, 92, 89, 123, 217, 98, 201, 69, 128, 50, 137, 28, 234, 103, 15, 83, 237, 59, 17, 100, 237, 143, 152, 91, 39, 177, 171, 148, 83, 151, 13, 110, 126, 226, 215, 112, 194, 111, 204, 76, 55, 143, 252, 119, 151, 37, 133, 16, 197, 24, 5, 44, 141, 64, 169, 125, 43, 166, 46, 60, 30, 55, 20, 170, 213, 164, 132, 6, 133, 109, 17, 222, 110, 108, 249, 41, 129, 67, 61, 100, 217, 105, 138, 59, 138, 34, 63, 45, 137, 56, 136, 194, 179, 130, 219, 25, 245, 29, 93, 158, 72, 152, 191, 46, 246, 122, 58, 85, 56, 247, 129, 43, 183, 79, 36, 9, 144, 69, 203, 106, 47, 153, 145, 185, 107, 82, 184, 47, 220, 216, 222, 171, 164, 21], [66, 193, 34, 100, 109, 103, 199, 99, 45, 143, 13, 189, 239, 9, 119, 127, 107, 153, 228, 196, 111, 156, 75, 115, 108, 192, 148, 165, 118, 217, 103, 80, 69, 139, 132, 101, 168, 1, 93, 114, 222, 151, 225, 96, 148, 181, 186, 120, 157, 211, 130, 166, 72, 53, 139, 58, 157, 177, 108, 109, 155, 75, 24, 34, 246, 60, 27, 117, 159, 133, 202, 2, 169, 9, 138, 111, 69, 207, 150, 148, 61, 153, 182, 152, 32, 101, 183, 214, 254, 35, 174, 222, 118, 21, 0, 30, 253, 198, 237, 130, 211, 155, 217, 31, 65, 80, 163, 100, 119, 197, 185, 112, 4, 113, 215, 108, 193, 66, 38, 246, 174, 239, 215, 70, 45, 223, 144, 32, 133, 4, 22, 159, 105, 146, 33, 234, 6, 200, 176, 180, 150, 174, 15, 201, 16, 126, 87, 228, 162, 74, 109, 181, 95, 116, 0, 45, 110, 248, 223, 70, 153, 246, 202, 29, 34, 209, 239, 218, 80, 43, 42, 40, 180, 163, 172, 29, 96, 133, 106, 181, 110, 216, 160, 228, 69, 162, 8, 38, 140, 39, 12, 2, 72, 42, 102, 119, 162, 204, 224, 26, 221, 230, 145, 25, 24, 115, 85, 129, 98, 236, 61, 217, 184, 166, 229, 99, 212, 105, 116, 112, 219, 203, 200, 18, 173, 27, 230, 215, 48, 105, 182, 129, 133, 65, 10, 38, 127, 224, 225, 255, 11, 41, 243, 1, 138, 147, 73, 30, 180, 24, 10, 115, 15, 250, 111, 12, 147, 188, 36, 164, 175, 37, 84, 93, 180, 200, 13, 202, 153, 227, 236, 233, 122, 205, 130, 126, 182, 21, 80, 105, 92, 34, 97, 230, 156, 47, 175, 141, 157, 16, 125, 76, 253, 44, 172, 180, 195, 172, 200, 221, 61, 155, 35, 14, 117, 41, 223, 243, 152, 35, 165, 22, 204, 94, 97, 126, 224, 154, 178, 196, 34, 222, 234, 21, 200, 230, 244, 61, 164, 33, 7, 243, 91, 229, 195, 48, 62, 91, 254, 5, 129, 233, 142, 194, 211, 233, 22, 129, 76, 136, 167, 129, 134, 14], [118, 124, 66, 190, 95, 163, 132, 175, 240, 199, 175, 120, 230, 2, 65, 138, 163, 30, 134, 22, 18, 75, 76, 209, 89, 30, 242, 130, 73, 170, 63, 139, 96, 58, 220, 97, 114, 86, 51, 170, 162, 135, 164, 190, 100, 25, 196, 208, 87, 166, 90, 143, 30, 139, 213, 194, 76, 222, 20, 219, 101, 33, 254, 149, 81, 242, 68, 249, 117, 110, 168, 29, 76, 2, 90, 181, 187, 16, 50, 227, 226, 156, 84, 192, 22, 87, 150, 12, 10, 48, 238, 34, 199, 121, 32, 81, 134, 4, 79, 14, 106, 54, 116, 245, 58, 34, 89, 198, 13, 67, 219, 189, 190, 29, 116, 2, 193, 195, 232, 217, 97, 12, 220, 126, 168, 201, 37, 70, 171, 41, 3, 187, 241, 44, 167, 180, 101, 217, 98, 47, 48, 233, 40, 22, 118, 14, 145, 233, 127, 13, 4, 40, 27, 68, 9, 221, 148, 7, 139, 55, 157, 64, 20, 239, 245, 134, 3, 38, 112, 72, 174, 27, 158, 1, 184, 120, 131, 89, 251, 86, 36, 43, 210, 193, 82, 226, 110, 44, 201, 157, 160, 120, 57, 140, 81, 198, 251, 109, 48, 25, 23, 143, 135, 189, 108, 153, 15, 132, 165, 39, 34, 78, 162, 16, 120, 40, 242, 195, 114, 36, 174, 183, 221, 139, 53, 187, 125, 255, 151, 162, 175, 154, 107, 213, 217, 42, 90, 168, 141, 3, 133, 55, 211, 174, 58, 123, 4, 126, 58, 204, 92, 152, 5, 105, 150, 252, 12, 69, 53, 105, 176, 170, 112, 22, 219, 181, 217, 70, 116], [123, 50, 166], [59, 49, 156, 242, 156, 218, 90, 180, 116, 205, 84, 166, 168, 13, 130, 132, 29, 34, 191, 156, 230, 33, 234, 19, 140, 57, 233, 246, 246, 236, 155, 58, 229, 61, 69, 155, 61, 88, 0, 196, 100, 237, 50, 203, 136, 237, 189, 35, 221, 158, 79, 159, 8, 235, 232, 10, 30, 215, 62, 1, 97, 63, 158, 0, 224, 58, 141, 189, 232, 16, 103, 21, 139, 44, 18, 100, 200, 64, 13, 12, 33, 128, 172, 135, 196, 196, 254, 77, 246, 25, 21, 101, 228, 8, 63, 124, 244, 6, 112, 135, 150, 177, 168, 233, 50, 164, 94, 63, 77, 33, 227, 89, 4, 246, 34, 137, 205, 229, 115, 250, 91, 124, 89, 125, 86, 0, 22, 229, 33, 189, 81, 186, 236, 21, 227, 143, 203, 71, 161, 167, 50, 95, 197, 88, 174, 132, 198, 231, 197, 254, 239, 170, 220, 131, 19, 77, 191, 13, 78, 2, 71, 56, 93, 233], [96, 142, 20, 13, 141, 216, 89, 61, 224, 38, 10, 133, 147, 39, 28, 254, 168, 122, 75, 10, 22, 187, 2, 255, 0, 51, 161, 7, 77, 118, 21, 5, 253, 44, 128, 199, 1, 79, 91, 63, 7, 95, 169, 72, 47, 232, 222, 221, 20, 17, 233, 165, 225, 127, 17, 196, 20, 48, 100, 233, 75, 252, 227, 254, 240, 106, 70, 105, 77, 162, 54, 248, 232, 117, 146, 146, 121, 75, 175, 12, 171, 183, 145, 170, 136, 154, 251, 20, 77, 2, 213, 204, 161, 227, 19, 153, 90, 213, 215, 89, 131, 215, 95, 107, 249, 124, 231, 168, 198, 100, 102, 210, 104, 136, 131, 254, 212, 181, 95, 98, 197, 67, 68, 200, 6, 214, 176, 205, 16, 7, 239, 238, 186, 192, 96, 104, 77, 211, 123, 53, 28, 187, 35, 45, 28, 172, 74, 250, 161, 86, 196, 211, 165, 196, 193, 214, 145, 142, 121, 194, 171, 140, 86, 31, 241, 248, 210, 104, 31, 17, 255, 222, 139, 78, 81, 37, 230, 94, 18, 156, 202, 137, 60, 142, 67, 97, 111, 99, 218, 39, 148, 157, 76, 11, 248, 193, 72, 161, 68, 188, 224, 254, 211, 178, 118, 238, 137, 43, 165, 95, 94, 79, 254, 226, 28, 28, 150, 20, 5, 240, 123, 25, 228, 25, 244, 103, 88, 121, 37, 212, 198, 25, 87, 137, 5, 160, 167, 157, 69, 44, 79, 240, 157, 123, 125, 254, 251, 147, 112, 1, 206, 165, 148, 91], [203, 199, 157, 197, 79, 131, 141, 82, 245, 105, 14, 217, 69, 118, 62, 176, 184, 216, 99, 52, 192, 139, 87, 237, 154, 182, 73, 226, 223, 233, 238, 88, 203, 39, 211, 92, 217, 125, 54, 24, 107, 139, 15, 75, 182, 65, 196, 222, 84, 53, 235, 135, 130, 190, 229, 168, 67, 147, 88, 151, 13, 173, 222, 30, 155, 213, 219, 64, 224, 187, 216, 78, 26, 95, 116, 188, 177, 147, 170, 70, 172, 141, 129, 53, 226, 10, 39, 144, 51, 154, 131, 120, 28, 77, 12, 30, 159, 134, 241, 148, 79, 48, 69, 216, 212, 24, 240, 84, 52, 31, 137, 116, 78, 152, 154, 20, 87, 202, 46, 44, 47, 219, 241], [123, 12, 19, 123, 113, 95, 237, 22, 194, 65, 210, 114, 66, 151, 215, 44, 223, 119, 12, 70, 112, 38, 117, 164, 131, 37, 211, 244, 202, 191, 29, 241, 230, 173, 166, 198, 133, 82, 195, 130, 231, 19, 2, 67, 147, 93, 230, 85, 59, 141, 199, 85, 146, 70, 123, 49, 29, 178, 159, 43, 54, 59, 154, 234, 249, 124, 235, 252, 114, 192, 97, 118, 193, 199, 118, 29, 189, 46, 141, 129, 133, 58, 241, 156, 6, 142, 95, 217, 141, 241, 38, 98, 214, 179, 254, 124, 37, 18, 133, 89, 163, 78, 94, 107, 91, 218, 139, 23, 121, 33, 50, 163, 227, 168, 61, 74, 78, 246, 29, 223, 176, 205, 67, 117, 78, 20, 105, 48, 107, 108, 67, 194, 159, 55, 180, 146, 100, 114, 146, 17, 140, 218, 28, 99, 94, 49, 102, 91, 180, 129, 86, 37, 175, 209, 9, 162, 141, 109, 235, 220, 76, 24, 126, 61, 146, 176, 225, 235, 215, 161, 190, 138, 116, 14, 96, 109, 195, 219, 241, 146, 121, 46, 240, 165, 19, 168, 16, 121, 33, 27, 77, 234, 92, 166, 127, 13, 222, 165, 250, 113, 162, 101, 179, 3, 184, 240, 9, 126, 214, 128, 28, 120, 241, 104, 203, 78, 127, 197, 114, 186, 104, 211, 253, 75, 240, 84, 122, 20, 11, 62, 252, 44, 150, 71, 41, 158, 114, 56, 1, 231, 20, 199, 60, 67, 22, 155, 27, 142, 122, 249, 197, 59, 102, 237, 89, 11, 145, 97, 137, 43, 109, 1], [55, 143, 144, 251, 161, 71, 13, 106, 176, 82, 130, 189, 133, 12, 7, 103, 213, 61, 121, 235, 252, 3, 186, 54, 23, 217, 35, 212, 198, 221, 166, 243, 131, 155, 179, 12, 0, 103, 185, 136, 0, 6, 245, 111, 229, 122, 98, 67, 151, 120, 136, 33, 167, 5, 84, 20, 217, 164, 246, 164, 229, 126, 230, 119, 5, 54, 88, 0, 102, 35], [58, 9, 214, 192, 79, 72, 125, 45, 245, 61, 23, 134, 127, 255, 70, 83, 244, 237, 218, 11, 169, 185, 40, 19, 131, 132, 214, 61, 206, 25, 32, 150, 88, 131, 6, 95, 194, 221, 51, 143, 215, 126, 65, 134, 87, 48, 74, 90, 100, 136, 249, 199, 22, 79, 80, 110, 205, 216, 146, 61, 159, 59, 134, 233, 108, 222, 132, 179, 3, 233, 189, 233, 9, 72, 230, 138, 234, 188, 173, 8, 255, 206, 61, 234, 157, 37, 1, 169, 121, 83, 247, 80, 148, 202, 177, 189, 46, 121, 161, 22, 124, 34, 29, 125, 238, 21, 9, 61, 130, 168, 148, 133, 155, 139, 27, 62, 246, 226, 41, 141, 105, 106, 18, 150, 10, 105, 212, 77, 82, 24, 22, 168, 144, 253, 173, 81, 173, 152, 74, 242, 221, 231, 78, 54, 71, 243, 109, 181, 92, 40, 195, 208, 176, 88, 92, 20, 62, 141, 69, 94, 24, 155, 253, 232, 158, 191, 212, 23, 108, 198, 137, 20, 204, 73, 78, 241, 2, 221, 237, 80, 240, 246, 88, 115, 116, 89, 43, 168, 34, 99, 158, 43, 200, 32, 181, 131, 59, 77, 102, 226, 5, 67, 223, 55, 181, 28, 47, 203, 162, 150, 40, 153, 165, 130, 222, 84, 45, 146, 218, 253, 134, 71, 247, 34, 200, 81, 133, 251, 151, 52, 18, 206, 75, 182, 205, 149, 13, 238, 41, 105], [175, 10, 167, 251, 225, 166, 209, 127, 152, 235, 99, 15, 253, 22, 165, 124, 195, 175, 226, 172, 175, 53, 73, 121, 115, 63, 212, 198, 167, 144, 166, 103, 6, 54, 35, 214, 180, 146, 181, 209, 36, 89, 176, 62, 157, 134, 57, 244, 255, 31, 15, 210, 33, 139, 141, 84, 199, 76, 237, 13, 35, 139, 138, 182, 109, 26, 224, 65, 16, 94, 21, 26, 3, 34, 54, 61, 232, 5, 16, 31, 153, 244, 34, 243, 122, 122, 39, 163, 219, 131, 113, 48, 20, 225, 224, 229, 186, 94, 149, 95, 75, 155, 212, 71, 170, 239, 191, 145, 220, 111, 69, 4, 89, 76, 198, 230, 218, 174, 209, 236, 53, 156, 92, 129, 1, 240, 197, 197, 242, 106, 206, 83, 8, 242, 240, 32, 186, 152, 109, 179, 184, 167, 87, 255, 209, 199, 249, 33, 18, 226, 220, 41, 144, 127, 244, 67, 107, 17, 88, 15, 132, 232, 57, 162, 37, 102, 110, 221, 68, 94, 69, 130, 232, 52, 149, 69, 179, 102, 142, 124, 222, 6, 91, 253, 219, 41, 200, 165, 17, 249, 217, 112, 2, 123, 240, 115, 14, 159, 183, 233, 253, 135, 186, 107, 172, 56, 209, 125, 126, 81, 154, 192, 3], [76, 93, 183, 167, 251, 50, 235, 65, 247, 253, 125, 28, 189, 96, 38, 219, 63, 162, 143, 120, 102, 180, 74, 167, 209, 248, 236, 36, 0, 37, 209, 198, 83, 172, 194, 93, 185, 190, 20, 8, 177, 92, 40, 176, 38, 173, 163, 168, 92, 210, 189, 96, 240, 15, 85, 255, 41, 173, 218, 28, 188, 198, 2, 233, 251, 145, 107, 22, 19, 125, 56, 213, 106, 96, 121, 72, 210, 231, 78, 234, 85, 135, 124, 84, 54, 191, 13, 48, 162, 63, 196, 102, 12, 21, 92, 67, 17, 237, 125, 253, 188, 190, 216, 82, 5, 174, 36, 92, 226, 87, 71, 112, 182, 15, 110, 50, 93, 74, 216, 162, 95, 62, 185, 204, 91, 81, 208, 156, 148, 71, 124, 92, 65, 172, 74, 165, 4, 253, 66, 34, 232, 138, 141, 36, 213, 169, 8, 103, 94, 114, 144, 237, 89, 18, 138, 190, 202, 178, 105, 133, 77, 90, 194, 29, 0, 96, 38, 48, 128, 89, 233, 89, 84, 80, 1, 74, 232, 21, 112, 92, 179, 97, 40, 110, 118, 84, 249, 231, 136, 159, 118, 175, 22, 66, 254, 170, 174, 62, 17, 30, 178, 234, 196, 25, 122, 232, 54, 68, 243, 212, 59, 119, 231, 180, 97, 110, 93, 243, 156, 196, 255, 239, 195, 184, 84, 111, 133, 159, 254, 181, 169, 177, 186, 178, 7, 252, 87, 88, 200, 173, 164, 66, 109, 85, 94, 35, 83, 174, 183, 177, 73, 58, 136, 207, 162, 177, 4, 242, 85, 102, 60, 0, 184, 144, 127, 235, 138, 66, 157, 39, 170, 117, 17, 97, 48, 255, 126, 139, 131, 169, 235, 68, 20, 235, 141, 169, 182, 228, 164, 151, 147], [178, 0, 19, 73, 204, 182, 135, 135, 116, 54, 245, 160, 101, 168, 107, 116, 218, 183, 193, 24, 152, 77, 67, 214, 64, 198, 138, 204, 213, 108, 11, 107, 255, 159, 62, 106, 47, 218, 181, 2, 73, 67, 42, 100, 222, 184, 83, 244, 117, 240, 92, 87, 29, 105, 120, 133, 162, 166, 89, 103, 74, 114, 77, 26, 36, 216, 64, 144, 76, 151, 168, 146, 147, 217, 222, 82, 217, 174, 68, 217, 23, 74, 65, 180, 142, 18, 79, 31, 212, 0, 94, 187, 95, 159, 150, 243, 76, 204, 78, 206, 193, 4, 252, 220, 202, 34, 132, 254, 106, 175, 199, 125, 39, 43, 198, 100, 1, 197, 153, 136, 105, 246, 31, 64, 97, 117, 147, 189, 141, 178, 78, 238, 88, 177, 79, 85, 30, 171, 253, 42, 143, 100, 51, 249, 55, 71, 66, 172, 26, 208, 57, 191, 93, 19, 230, 184, 107, 125, 150, 71, 253, 219, 81, 12, 227, 217, 104, 64, 226, 104, 41, 196, 188, 224, 236, 155, 246, 41, 91, 241, 67, 206, 6, 185, 116, 219, 237, 38, 12, 64, 38, 99, 241, 45, 23, 40, 143, 150, 132, 140, 111, 9, 101, 221, 5, 143, 146, 8, 221, 180, 148, 178, 253, 241, 61, 113, 202, 40, 220, 168, 27, 223, 64, 227, 15, 19, 42, 250, 1, 21, 231, 43, 114, 46, 17, 54, 245, 164, 84, 199, 136, 219, 23, 196, 66, 149, 132, 215, 204, 107, 49, 51, 232, 198, 141, 223, 218, 85, 115, 107, 140, 99, 232, 39, 174, 70, 102, 232, 191, 90, 211, 107, 2, 199, 233, 83, 197], [21, 81, 148, 134, 155, 234, 153, 96, 54, 73, 152, 32, 4, 133, 159, 18, 16, 187, 161, 79, 140, 223, 10, 95, 88, 224, 198, 81, 68, 43, 188, 235, 249, 4, 244, 42, 14, 198, 137, 50, 12, 148, 87, 105, 50, 74, 67, 93, 14, 75, 209, 53, 30, 170, 225, 159, 205, 76, 19, 31, 151], [27, 1, 151, 184, 236, 182, 142, 139, 187, 226, 116, 193, 50, 134, 217, 2, 48, 120, 112, 16, 140, 252, 236, 164, 87, 93, 97, 24, 198, 43, 126, 20, 218, 192, 38, 153, 143, 168, 98, 222, 83, 86, 238, 105, 78, 181, 102, 81, 18, 176, 11, 28, 163, 255, 213, 195, 241, 165, 112, 172, 3, 84, 167, 151, 156, 21, 114, 206, 117, 195, 140, 250, 56, 170, 100, 189, 177, 213, 123, 21, 218, 217, 81, 232, 62, 69, 84, 184, 18, 35, 110, 56, 78, 54, 210, 153, 114, 86, 129, 208, 47, 108, 225, 13, 133, 69, 162, 25, 152, 146, 128, 115, 90, 48, 7, 209, 239, 124, 40, 5, 112, 140, 41, 197, 252, 139, 127, 41, 101, 87, 240, 10, 8, 181, 12, 76, 177, 242, 111, 223, 191, 28, 192, 134, 52, 146, 252, 92, 221, 63, 252, 14, 101, 14, 168, 167, 126, 36, 224, 52, 16, 20, 19, 213, 26, 146, 186, 70, 246, 180, 5, 234, 234, 229, 240, 99, 77, 204, 91, 48, 50, 41, 167, 125, 59, 209, 192, 169, 112, 84, 241, 30, 178, 107, 96, 235, 51, 23, 78, 21, 9, 74, 99, 56, 80, 255, 68, 35, 243, 74, 88, 96, 7, 237, 190, 123, 110, 78, 70, 242, 221, 145, 64, 57, 156, 11, 200, 241, 255, 17, 58, 132, 138, 143, 249, 95, 211, 163, 177, 201, 39, 241], [108, 125, 198, 163, 72, 54, 171, 140, 241, 177, 60, 167, 217, 252, 151, 78, 253, 56, 231, 213, 79, 239, 235, 165, 107, 177, 162, 97, 99, 93, 206, 46, 203, 147, 171, 149, 125, 129, 112, 186, 224, 102, 201, 92, 229, 221, 79, 29, 132, 83, 229, 92, 8, 116, 186, 219, 232, 126, 149, 93, 112, 163, 204, 5, 65, 196, 72, 196, 219, 81, 97, 227, 196, 143, 62, 149, 251, 147, 227, 201, 186, 71, 98, 185, 229, 220, 246, 223, 106, 35, 126, 170, 16, 39, 218, 69, 137, 19, 209, 137, 116, 197, 23, 96, 228, 217, 232, 140, 189, 82, 80, 40, 229, 149, 187, 38, 225, 112, 145, 141, 58, 190, 174, 246, 97, 14, 110, 101, 50, 200, 48, 232, 23, 229, 139, 95, 174, 209, 189, 143, 244, 169, 102, 171, 76, 30, 185, 73, 242, 144, 139, 104, 26, 229, 121, 79, 107, 248, 126, 25, 0, 205, 192, 213, 105, 91, 164, 21, 92, 155, 213, 69, 111, 133, 3]], direct_data: [DirectData { ts: 0, uint_val: 0, int64_val: 0 }, DirectData { ts: 1, uint_val: 1, int64_val: 1 }, DirectData { ts: 2, uint_val: 2, int64_val: 2 }, DirectData { ts: 3, uint_val: 3, int64_val: 3 }, DirectData { ts: 4, uint_val: 4, int64_val: 4 }, DirectData { ts: 5, uint_val: 5, int64_val: 5 }, DirectData { ts: 6, uint_val: 6, int64_val: 6 }, DirectData { ts: 7, uint_val: 7, int64_val: 7 }, DirectData { ts: 8, uint_val: 8, int64_val: 8 }, DirectData { ts: 9, uint_val: 9, int64_val: 9 }, DirectData { ts: 10, uint_val: 10, int64_val: 10 }, DirectData { ts: 11, uint_val: 11, int64_val: 11 }, DirectData { ts: 12, uint_val: 12, int64_val: 12 }, DirectData { ts: 13, uint_val: 13, int64_val: 13 }, DirectData { ts: 14, uint_val: 14, int64_val: 14 }, DirectData { ts: 15, uint_val: 15, int64_val: 15 }, DirectData { ts: 16, uint_val: 16, int64_val: 16 }, DirectData { ts: 17, uint_val: 17, int64_val: 17 }, DirectData { ts: 18, uint_val: 18, int64_val: 18 }, DirectData { ts: 19, uint_val: 19, int64_val: 19 }, DirectData { ts: 20, uint_val: 20, int64_val: 20 }, DirectData { ts: 21, uint_val: 21, int64_val: 21 }, DirectData { ts: 22, uint_val: 22, int64_val: 22 }, DirectData { ts: 23, uint_val: 23, int64_val: 23 }, DirectData { ts: 24, uint_val: 24, int64_val: 24 }, DirectData { ts: 25, uint_val: 25, int64_val: 25 }, DirectData { ts: 26, uint_val: 26, int64_val: 26 }, DirectData { ts: 27, uint_val: 27, int64_val: 27 }, DirectData { ts: 28, uint_val: 28, int64_val: 28 }, DirectData { ts: 29, uint_val: 29, int64_val: 29 }, DirectData { ts: 30, uint_val: 30, int64_val: 30 }, DirectData { ts: 31, uint_val: 31, int64_val: 31 }, DirectData { ts: 32, uint_val: 32, int64_val: 32 }, DirectData { ts: 33, uint_val: 33, int64_val: 33 }, DirectData { ts: 34, uint_val: 34, int64_val: 34 }, DirectData { ts: 35, uint_val: 35, int64_val: 35 }, DirectData { ts: 36, uint_val: 36, int64_val: 36 }, DirectData { ts: 37, uint_val: 37, int64_val: 37 }, DirectData { ts: 38, uint_val: 38, int64_val: 38 }, DirectData { ts: 39, uint_val: 39, int64_val: 39 }, DirectData { ts: 40, uint_val: 40, int64_val: 40 }, DirectData { ts: 41, uint_val: 41, int64_val: 41 }, DirectData { ts: 42, uint_val: 42, int64_val: 42 }, DirectData { ts: 43, uint_val: 43, int64_val: 43 }, DirectData { ts: 44, uint_val: 44, int64_val: 44 }, DirectData { ts: 45, uint_val: 45, int64_val: 45 }, DirectData { ts: 46, uint_val: 46, int64_val: 46 }, DirectData { ts: 47, uint_val: 47, int64_val: 47 }, DirectData { ts: 48, uint_val: 48, int64_val: 48 }, DirectData { ts: 49, uint_val: 49, int64_val: 49 }, DirectData { ts: 50, uint_val: 50, int64_val: 50 }, DirectData { ts: 51, uint_val: 51, int64_val: 51 }, DirectData { ts: 52, uint_val: 52, int64_val: 52 }, DirectData { ts: 53, uint_val: 53, int64_val: 53 }, DirectData { ts: 54, uint_val: 54, int64_val: 54 }, DirectData { ts: 55, uint_val: 55, int64_val: 55 }, DirectData { ts: 56, uint_val: 56, int64_val: 56 }, DirectData { ts: 57, uint_val: 57, int64_val: 57 }, DirectData { ts: 58, uint_val: 58, int64_val: 58 }, DirectData { ts: 59, uint_val: 59, int64_val: 59 }, DirectData { ts: 60, uint_val: 60, int64_val: 60 }, DirectData { ts: 61, uint_val: 61, int64_val: 61 }, DirectData { ts: 62, uint_val: 62, int64_val: 62 }, DirectData { ts: 63, uint_val: 63, int64_val: 63 }, DirectData { ts: 64, uint_val: 64, int64_val: 64 }, DirectData { ts: 65, uint_val: 65, int64_val: 65 }, DirectData { ts: 66, uint_val: 66, int64_val: 66 }, DirectData { ts: 67, uint_val: 67, int64_val: 67 }, DirectData { ts: 68, uint_val: 68, int64_val: 68 }, DirectData { ts: 69, uint_val: 69, int64_val: 69 }, DirectData { ts: 70, uint_val: 70, int64_val: 70 }, DirectData { ts: 71, uint_val: 71, int64_val: 71 }, DirectData { ts: 72, uint_val: 72, int64_val: 72 }, DirectData { ts: 73, uint_val: 73, int64_val: 73 }, DirectData { ts: 74, uint_val: 74, int64_val: 74 }, DirectData { ts: 75, uint_val: 75, int64_val: 75 }, DirectData { ts: 76, uint_val: 76, int64_val: 76 }, DirectData { ts: 77, uint_val: 77, int64_val: 77 }, DirectData { ts: 78, uint_val: 78, int64_val: 78 }, DirectData { ts: 79, uint_val: 79, int64_val: 79 }, DirectData { ts: 80, uint_val: 80, int64_val: 80 }, DirectData { ts: 81, uint_val: 81, int64_val: 81 }, DirectData { ts: 82, uint_val: 82, int64_val: 82 }, DirectData { ts: 83, uint_val: 83, int64_val: 83 }, DirectData { ts: 84, uint_val: 84, int64_val: 84 }, DirectData { ts: 85, uint_val: 85, int64_val: 85 }, DirectData { ts: 86, uint_val: 86, int64_val: 86 }, DirectData { ts: 87, uint_val: 87, int64_val: 87 }, DirectData { ts: 88, uint_val: 88, int64_val: 88 }, DirectData { ts: 89, uint_val: 89, int64_val: 89 }, DirectData { ts: 90, uint_val: 90, int64_val: 90 }, DirectData { ts: 91, uint_val: 91, int64_val: 91 }, DirectData { ts: 92, uint_val: 92, int64_val: 92 }, DirectData { ts: 93, uint_val: 93, int64_val: 93 }, DirectData { ts: 94, uint_val: 94, int64_val: 94 }, DirectData { ts: 95, uint_val: 95, int64_val: 95 }, DirectData { ts: 96, uint_val: 96, int64_val: 96 }, DirectData { ts: 97, uint_val: 97, int64_val: 97 }, DirectData { ts: 98, uint_val: 98, int64_val: 98 }, DirectData { ts: 99, uint_val: 99, int64_val: 99 }, DirectData { ts: 100, uint_val: 100, int64_val: 100 }, DirectData { ts: 101, uint_val: 101, int64_val: 101 }, DirectData { ts: 102, uint_val: 102, int64_val: 102 }, DirectData { ts: 103, uint_val: 103, int64_val: 103 }, DirectData { ts: 104, uint_val: 104, int64_val: 104 }, DirectData { ts: 105, uint_val: 105, int64_val: 105 }, DirectData { ts: 106, uint_val: 106, int64_val: 106 }, DirectData { ts: 107, uint_val: 107, int64_val: 107 }, DirectData { ts: 108, uint_val: 108, int64_val: 108 }, DirectData { ts: 109, uint_val: 109, int64_val: 109 }, DirectData { ts: 110, uint_val: 110, int64_val: 110 }, DirectData { ts: 111, uint_val: 111, int64_val: 111 }, DirectData { ts: 112, uint_val: 112, int64_val: 112 }, DirectData { ts: 113, uint_val: 113, int64_val: 113 }, DirectData { ts: 114, uint_val: 114, int64_val: 114 }, DirectData { ts: 115, uint_val: 115, int64_val: 115 }, DirectData { ts: 116, uint_val: 116, int64_val: 116 }, DirectData { ts: 117, uint_val: 117, int64_val: 117 }, DirectData { ts: 118, uint_val: 118, int64_val: 118 }, DirectData { ts: 119, uint_val: 119, int64_val: 119 }, DirectData { ts: 120, uint_val: 120, int64_val: 120 }, DirectData { ts: 121, uint_val: 121, int64_val: 121 }, DirectData { ts: 122, uint_val: 122, int64_val: 122 }, DirectData { ts: 123, uint_val: 123, int64_val: 123 }, DirectData { ts: 124, uint_val: 124, int64_val: 124 }, DirectData { ts: 125, uint_val: 125, int64_val: 125 }, DirectData { ts: 126, uint_val: 126, int64_val: 126 }, DirectData { ts: 127, uint_val: 127, int64_val: 127 }, DirectData { ts: 128, uint_val: 128, int64_val: 128 }, DirectData { ts: 129, uint_val: 129, int64_val: 129 }, DirectData { ts: 130, uint_val: 130, int64_val: 130 }, DirectData { ts: 131, uint_val: 131, int64_val: 131 }, DirectData { ts: 132, uint_val: 132, int64_val: 132 }, DirectData { ts: 133, uint_val: 133, int64_val: 133 }, DirectData { ts: 134, uint_val: 134, int64_val: 134 }, DirectData { ts: 135, uint_val: 135, int64_val: 135 }, DirectData { ts: 136, uint_val: 136, int64_val: 136 }, DirectData { ts: 137, uint_val: 137, int64_val: 137 }, DirectData { ts: 138, uint_val: 138, int64_val: 138 }, DirectData { ts: 139, uint_val: 139, int64_val: 139 }, DirectData { ts: 140, uint_val: 140, int64_val: 140 }, DirectData { ts: 141, uint_val: 141, int64_val: 141 }, DirectData { ts: 142, uint_val: 142, int64_val: 142 }, DirectData { ts: 143, uint_val: 143, int64_val: 143 }, DirectData { ts: 144, uint_val: 144, int64_val: 144 }, DirectData { ts: 145, uint_val: 145, int64_val: 145 }, DirectData { ts: 146, uint_val: 146, int64_val: 146 }, DirectData { ts: 147, uint_val: 147, int64_val: 147 }, DirectData { ts: 148, uint_val: 148, int64_val: 148 }, DirectData { ts: 149, uint_val: 149, int64_val: 149 }, DirectData { ts: 150, uint_val: 150, int64_val: 150 }, DirectData { ts: 151, uint_val: 151, int64_val: 151 }, DirectData { ts: 152, uint_val: 152, int64_val: 152 }, DirectData { ts: 153, uint_val: 153, int64_val: 153 }, DirectData { ts: 154, uint_val: 154, int64_val: 154 }, DirectData { ts: 155, uint_val: 155, int64_val: 155 }, DirectData { ts: 156, uint_val: 156, int64_val: 156 }, DirectData { ts: 157, uint_val: 157, int64_val: 157 }, DirectData { ts: 158, uint_val: 158, int64_val: 158 }, DirectData { ts: 159, uint_val: 159, int64_val: 159 }, DirectData { ts: 160, uint_val: 160, int64_val: 160 }, DirectData { ts: 161, uint_val: 161, int64_val: 161 }, DirectData { ts: 162, uint_val: 162, int64_val: 162 }, DirectData { ts: 163, uint_val: 163, int64_val: 163 }, DirectData { ts: 164, uint_val: 164, int64_val: 164 }, DirectData { ts: 165, uint_val: 165, int64_val: 165 }, DirectData { ts: 166, uint_val: 166, int64_val: 166 }, DirectData { ts: 167, uint_val: 167, int64_val: 167 }, DirectData { ts: 168, uint_val: 168, int64_val: 168 }, DirectData { ts: 169, uint_val: 169, int64_val: 169 }, DirectData { ts: 170, uint_val: 170, int64_val: 170 }, DirectData { ts: 171, uint_val: 171, int64_val: 171 }, DirectData { ts: 172, uint_val: 172, int64_val: 172 }, DirectData { ts: 173, uint_val: 173, int64_val: 173 }, DirectData { ts: 174, uint_val: 174, int64_val: 174 }, DirectData { ts: 175, uint_val: 175, int64_val: 175 }, DirectData { ts: 176, uint_val: 176, int64_val: 176 }, DirectData { ts: 177, uint_val: 177, int64_val: 177 }, DirectData { ts: 178, uint_val: 178, int64_val: 178 }, DirectData { ts: 179, uint_val: 179, int64_val: 179 }, DirectData { ts: 180, uint_val: 180, int64_val: 180 }, DirectData { ts: 181, uint_val: 181, int64_val: 181 }, DirectData { ts: 182, uint_val: 182, int64_val: 182 }, DirectData { ts: 183, uint_val: 183, int64_val: 183 }, DirectData { ts: 184, uint_val: 184, int64_val: 184 }, DirectData { ts: 185, uint_val: 185, int64_val: 185 }, DirectData { ts: 186, uint_val: 186, int64_val: 186 }, DirectData { ts: 187, uint_val: 187, int64_val: 187 }, DirectData { ts: 188, uint_val: 188, int64_val: 188 }, DirectData { ts: 189, uint_val: 189, int64_val: 189 }, DirectData { ts: 190, uint_val: 190, int64_val: 190 }, DirectData { ts: 191, uint_val: 191, int64_val: 191 }, DirectData { ts: 192, uint_val: 192, int64_val: 192 }, DirectData { ts: 193, uint_val: 193, int64_val: 193 }, DirectData { ts: 194, uint_val: 194, int64_val: 194 }, DirectData { ts: 195, uint_val: 195, int64_val: 195 }, DirectData { ts: 196, uint_val: 196, int64_val: 196 }, DirectData { ts: 197, uint_val: 197, int64_val: 197 }, DirectData { ts: 198, uint_val: 198, int64_val: 198 }, DirectData { ts: 199, uint_val: 199, int64_val: 199 }, DirectData { ts: 200, uint_val: 200, int64_val: 200 }, DirectData { ts: 201, uint_val: 201, int64_val: 201 }, DirectData { ts: 202, uint_val: 202, int64_val: 202 }, DirectData { ts: 203, uint_val: 203, int64_val: 203 }, DirectData { ts: 204, uint_val: 204, int64_val: 204 }, DirectData { ts: 205, uint_val: 205, int64_val: 205 }, DirectData { ts: 206, uint_val: 206, int64_val: 206 }, DirectData { ts: 207, uint_val: 207, int64_val: 207 }, DirectData { ts: 208, uint_val: 208, int64_val: 208 }, DirectData { ts: 209, uint_val: 209, int64_val: 209 }, DirectData { ts: 210, uint_val: 210, int64_val: 210 }, DirectData { ts: 211, uint_val: 211, int64_val: 211 }, DirectData { ts: 212, uint_val: 212, int64_val: 212 }, DirectData { ts: 213, uint_val: 213, int64_val: 213 }, DirectData { ts: 214, uint_val: 214, int64_val: 214 }, DirectData { ts: 215, uint_val: 215, int64_val: 215 }, DirectData { ts: 216, uint_val: 216, int64_val: 216 }, DirectData { ts: 217, uint_val: 217, int64_val: 217 }, DirectData { ts: 218, uint_val: 218, int64_val: 218 }, DirectData { ts: 219, uint_val: 219, int64_val: 219 }, DirectData { ts: 220, uint_val: 220, int64_val: 220 }, DirectData { ts: 221, uint_val: 221, int64_val: 221 }, DirectData { ts: 222, uint_val: 222, int64_val: 222 }, DirectData { ts: 223, uint_val: 223, int64_val: 223 }, DirectData { ts: 224, uint_val: 224, int64_val: 224 }, DirectData { ts: 225, uint_val: 225, int64_val: 225 }, DirectData { ts: 226, uint_val: 226, int64_val: 226 }, DirectData { ts: 227, uint_val: 227, int64_val: 227 }, DirectData { ts: 228, uint_val: 228, int64_val: 228 }, DirectData { ts: 229, uint_val: 229, int64_val: 229 }, DirectData { ts: 230, uint_val: 230, int64_val: 230 }, DirectData { ts: 231, uint_val: 231, int64_val: 231 }, DirectData { ts: 232, uint_val: 232, int64_val: 232 }, DirectData { ts: 233, uint_val: 233, int64_val: 233 }, DirectData { ts: 234, uint_val: 234, int64_val: 234 }, DirectData { ts: 235, uint_val: 235, int64_val: 235 }, DirectData { ts: 236, uint_val: 236, int64_val: 236 }, DirectData { ts: 237, uint_val: 237, int64_val: 237 }, DirectData { ts: 238, uint_val: 238, int64_val: 238 }, DirectData { ts: 239, uint_val: 239, int64_val: 239 }, DirectData { ts: 240, uint_val: 240, int64_val: 240 }, DirectData { ts: 241, uint_val: 241, int64_val: 241 }, DirectData { ts: 242, uint_val: 242, int64_val: 242 }, DirectData { ts: 243, uint_val: 243, int64_val: 243 }, DirectData { ts: 244, uint_val: 244, int64_val: 244 }, DirectData { ts: 245, uint_val: 245, int64_val: 245 }, DirectData { ts: 246, uint_val: 246, int64_val: 246 }, DirectData { ts: 247, uint_val: 247, int64_val: 247 }, DirectData { ts: 248, uint_val: 248, int64_val: 248 }, DirectData { ts: 249, uint_val: 249, int64_val: 249 }, DirectData { ts: 250, uint_val: 250, int64_val: 250 }, DirectData { ts: 251, uint_val: 251, int64_val: 251 }, DirectData { ts: 252, uint_val: 252, int64_val: 252 }, DirectData { ts: 253, uint_val: 253, int64_val: 253 }, DirectData { ts: 254, uint_val: 254, int64_val: 254 }, DirectData { ts: 255, uint_val: 0, int64_val: 255 }, DirectData { ts: 256, uint_val: 0, int64_val: 256 }, DirectData { ts: 257, uint_val: 1, int64_val: 257 }, DirectData { ts: 258, uint_val: 2, int64_val: 258 }, DirectData { ts: 259, uint_val: 3, int64_val: 259 }, DirectData { ts: 260, uint_val: 4, int64_val: 260 }, DirectData { ts: 261, uint_val: 5, int64_val: 261 }, DirectData { ts: 262, uint_val: 6, int64_val: 262 }, DirectData { ts: 263, uint_val: 7, int64_val: 263 }, DirectData { ts: 264, uint_val: 8, int64_val: 264 }, DirectData { ts: 265, uint_val: 9, int64_val: 265 }, DirectData { ts: 266, uint_val: 10, int64_val: 266 }, DirectData { ts: 267, uint_val: 11, int64_val: 267 }, DirectData { ts: 268, uint_val: 12, int64_val: 268 }, DirectData { ts: 269, uint_val: 13, int64_val: 269 }, DirectData { ts: 270, uint_val: 14, int64_val: 270 }, DirectData { ts: 271, uint_val: 15, int64_val: 271 }, DirectData { ts: 272, uint_val: 16, int64_val: 272 }, DirectData { ts: 273, uint_val: 17, int64_val: 273 }, DirectData { ts: 274, uint_val: 18, int64_val: 274 }, DirectData { ts: 275, uint_val: 19, int64_val: 275 }, DirectData { ts: 276, uint_val: 20, int64_val: 276 }, DirectData { ts: 277, uint_val: 21, int64_val: 277 }, DirectData { ts: 278, uint_val: 22, int64_val: 278 }, DirectData { ts: 279, uint_val: 23, int64_val: 279 }, DirectData { ts: 280, uint_val: 24, int64_val: 280 }, DirectData { ts: 281, uint_val: 25, int64_val: 281 }, DirectData { ts: 282, uint_val: 26, int64_val: 282 }, DirectData { ts: 283, uint_val: 27, int64_val: 283 }, DirectData { ts: 284, uint_val: 28, int64_val: 284 }, DirectData { ts: 285, uint_val: 29, int64_val: 285 }, DirectData { ts: 286, uint_val: 30, int64_val: 286 }, DirectData { ts: 287, uint_val: 31, int64_val: 287 }, DirectData { ts: 288, uint_val: 32, int64_val: 288 }, DirectData { ts: 289, uint_val: 33, int64_val: 289 }, DirectData { ts: 290, uint_val: 34, int64_val: 290 }, DirectData { ts: 291, uint_val: 35, int64_val: 291 }, DirectData { ts: 292, uint_val: 36, int64_val: 292 }, DirectData { ts: 293, uint_val: 37, int64_val: 293 }, DirectData { ts: 294, uint_val: 38, int64_val: 294 }, DirectData { ts: 295, uint_val: 39, int64_val: 295 }, DirectData { ts: 296, uint_val: 40, int64_val: 296 }, DirectData { ts: 297, uint_val: 41, int64_val: 297 }, DirectData { ts: 298, uint_val: 42, int64_val: 298 }, DirectData { ts: 299, uint_val: 43, int64_val: 299 }, DirectData { ts: 300, uint_val: 44, int64_val: 300 }, DirectData { ts: 301, uint_val: 45, int64_val: 301 }, DirectData { ts: 302, uint_val: 46, int64_val: 302 }, DirectData { ts: 303, uint_val: 47, int64_val: 303 }, DirectData { ts: 304, uint_val: 48, int64_val: 304 }, DirectData { ts: 305, uint_val: 49, int64_val: 305 }, DirectData { ts: 306, uint_val: 50, int64_val: 306 }, DirectData { ts: 307, uint_val: 51, int64_val: 307 }, DirectData { ts: 308, uint_val: 52, int64_val: 308 }, DirectData { ts: 309, uint_val: 53, int64_val: 309 }, DirectData { ts: 310, uint_val: 54, int64_val: 310 }, DirectData { ts: 311, uint_val: 55, int64_val: 311 }, DirectData { ts: 312, uint_val: 56, int64_val: 312 }, DirectData { ts: 313, uint_val: 57, int64_val: 313 }, DirectData { ts: 314, uint_val: 58, int64_val: 314 }, DirectData { ts: 315, uint_val: 59, int64_val: 315 }, DirectData { ts: 316, uint_val: 60, int64_val: 316 }, DirectData { ts: 317, uint_val: 61, int64_val: 317 }, DirectData { ts: 318, uint_val: 62, int64_val: 318 }, DirectData { ts: 319, uint_val: 63, int64_val: 319 }, DirectData { ts: 320, uint_val: 64, int64_val: 320 }, DirectData { ts: 321, uint_val: 65, int64_val: 321 }, DirectData { ts: 322, uint_val: 66, int64_val: 322 }, DirectData { ts: 323, uint_val: 67, int64_val: 323 }, DirectData { ts: 324, uint_val: 68, int64_val: 324 }, DirectData { ts: 325, uint_val: 69, int64_val: 325 }, DirectData { ts: 326, uint_val: 70, int64_val: 326 }, DirectData { ts: 327, uint_val: 71, int64_val: 327 }, DirectData { ts: 328, uint_val: 72, int64_val: 328 }, DirectData { ts: 329, uint_val: 73, int64_val: 329 }, DirectData { ts: 330, uint_val: 74, int64_val: 330 }, DirectData { ts: 331, uint_val: 75, int64_val: 331 }, DirectData { ts: 332, uint_val: 76, int64_val: 332 }, DirectData { ts: 333, uint_val: 77, int64_val: 333 }, DirectData { ts: 334, uint_val: 78, int64_val: 334 }, DirectData { ts: 335, uint_val: 79, int64_val: 335 }, DirectData { ts: 336, uint_val: 80, int64_val: 336 }, DirectData { ts: 337, uint_val: 81, int64_val: 337 }, DirectData { ts: 338, uint_val: 82, int64_val: 338 }, DirectData { ts: 339, uint_val: 83, int64_val: 339 }, DirectData { ts: 340, uint_val: 84, int64_val: 340 }, DirectData { ts: 341, uint_val: 85, int64_val: 341 }, DirectData { ts: 342, uint_val: 86, int64_val: 342 }, DirectData { ts: 343, uint_val: 87, int64_val: 343 }, DirectData { ts: 344, uint_val: 88, int64_val: 344 }, DirectData { ts: 345, uint_val: 89, int64_val: 345 }, DirectData { ts: 346, uint_val: 90, int64_val: 346 }, DirectData { ts: 347, uint_val: 91, int64_val: 347 }, DirectData { ts: 348, uint_val: 92, int64_val: 348 }, DirectData { ts: 349, uint_val: 93, int64_val: 349 }, DirectData { ts: 350, uint_val: 94, int64_val: 350 }, DirectData { ts: 351, uint_val: 95, int64_val: 351 }, DirectData { ts: 352, uint_val: 96, int64_val: 352 }, DirectData { ts: 353, uint_val: 97, int64_val: 353 }, DirectData { ts: 354, uint_val: 98, int64_val: 354 }, DirectData { ts: 355, uint_val: 99, int64_val: 355 }, DirectData { ts: 356, uint_val: 100, int64_val: 356 }, DirectData { ts: 357, uint_val: 101, int64_val: 357 }, DirectData { ts: 358, uint_val: 102, int64_val: 358 }, DirectData { ts: 359, uint_val: 103, int64_val: 359 }, DirectData { ts: 360, uint_val: 104, int64_val: 360 }, DirectData { ts: 361, uint_val: 105, int64_val: 361 }, DirectData { ts: 362, uint_val: 106, int64_val: 362 }, DirectData { ts: 363, uint_val: 107, int64_val: 363 }, DirectData { ts: 364, uint_val: 108, int64_val: 364 }, DirectData { ts: 365, uint_val: 109, int64_val: 365 }, DirectData { ts: 366, uint_val: 110, int64_val: 366 }, DirectData { ts: 367, uint_val: 111, int64_val: 367 }, DirectData { ts: 368, uint_val: 112, int64_val: 368 }, DirectData { ts: 369, uint_val: 113, int64_val: 369 }, DirectData { ts: 370, uint_val: 114, int64_val: 370 }, DirectData { ts: 371, uint_val: 115, int64_val: 371 }, DirectData { ts: 372, uint_val: 116, int64_val: 372 }, DirectData { ts: 373, uint_val: 117, int64_val: 373 }, DirectData { ts: 374, uint_val: 118, int64_val: 374 }, DirectData { ts: 375, uint_val: 119, int64_val: 375 }, DirectData { ts: 376, uint_val: 120, int64_val: 376 }, DirectData { ts: 377, uint_val: 121, int64_val: 377 }, DirectData { ts: 378, uint_val: 122, int64_val: 378 }, DirectData { ts: 379, uint_val: 123, int64_val: 379 }, DirectData { ts: 380, uint_val: 124, int64_val: 380 }, DirectData { ts: 381, uint_val: 125, int64_val: 381 }, DirectData { ts: 382, uint_val: 126, int64_val: 382 }, DirectData { ts: 383, uint_val: 127, int64_val: 383 }, DirectData { ts: 384, uint_val: 128, int64_val: 384 }, DirectData { ts: 385, uint_val: 129, int64_val: 385 }, DirectData { ts: 386, uint_val: 130, int64_val: 386 }, DirectData { ts: 387, uint_val: 131, int64_val: 387 }, DirectData { ts: 388, uint_val: 132, int64_val: 388 }, DirectData { ts: 389, uint_val: 133, int64_val: 389 }, DirectData { ts: 390, uint_val: 134, int64_val: 390 }, DirectData { ts: 391, uint_val: 135, int64_val: 391 }, DirectData { ts: 392, uint_val: 136, int64_val: 392 }, DirectData { ts: 393, uint_val: 137, int64_val: 393 }, DirectData { ts: 394, uint_val: 138, int64_val: 394 }, DirectData { ts: 395, uint_val: 139, int64_val: 395 }, DirectData { ts: 396, uint_val: 140, int64_val: 396 }, DirectData { ts: 397, uint_val: 141, int64_val: 397 }, DirectData { ts: 398, uint_val: 142, int64_val: 398 }, DirectData { ts: 399, uint_val: 143, int64_val: 399 }, DirectData { ts: 400, uint_val: 144, int64_val: 400 }, DirectData { ts: 401, uint_val: 145, int64_val: 401 }, DirectData { ts: 402, uint_val: 146, int64_val: 402 }, DirectData { ts: 403, uint_val: 147, int64_val: 403 }, DirectData { ts: 404, uint_val: 148, int64_val: 404 }, DirectData { ts: 405, uint_val: 149, int64_val: 405 }, DirectData { ts: 406, uint_val: 150, int64_val: 406 }, DirectData { ts: 407, uint_val: 151, int64_val: 407 }, DirectData { ts: 408, uint_val: 152, int64_val: 408 }, DirectData { ts: 409, uint_val: 153, int64_val: 409 }, DirectData { ts: 410, uint_val: 154, int64_val: 410 }, DirectData { ts: 411, uint_val: 155, int64_val: 411 }, DirectData { ts: 412, uint_val: 156, int64_val: 412 }, DirectData { ts: 413, uint_val: 157, int64_val: 413 }, DirectData { ts: 414, uint_val: 158, int64_val: 414 }, DirectData { ts: 415, uint_val: 159, int64_val: 415 }, DirectData { ts: 416, uint_val: 160, int64_val: 416 }, DirectData { ts: 417, uint_val: 161, int64_val: 417 }, DirectData { ts: 418, uint_val: 162, int64_val: 418 }, DirectData { ts: 419, uint_val: 163, int64_val: 419 }, DirectData { ts: 420, uint_val: 164, int64_val: 420 }, DirectData { ts: 421, uint_val: 165, int64_val: 421 }, DirectData { ts: 422, uint_val: 166, int64_val: 422 }, DirectData { ts: 423, uint_val: 167, int64_val: 423 }, DirectData { ts: 424, uint_val: 168, int64_val: 424 }, DirectData { ts: 425, uint_val: 169, int64_val: 425 }, DirectData { ts: 426, uint_val: 170, int64_val: 426 }, DirectData { ts: 427, uint_val: 171, int64_val: 427 }, DirectData { ts: 428, uint_val: 172, int64_val: 428 }, DirectData { ts: 429, uint_val: 173, int64_val: 429 }, DirectData { ts: 430, uint_val: 174, int64_val: 430 }, DirectData { ts: 431, uint_val: 175, int64_val: 431 }, DirectData { ts: 432, uint_val: 176, int64_val: 432 }, DirectData { ts: 433, uint_val: 177, int64_val: 433 }, DirectData { ts: 434, uint_val: 178, int64_val: 434 }, DirectData { ts: 435, uint_val: 179, int64_val: 435 }, DirectData { ts: 436, uint_val: 180, int64_val: 436 }, DirectData { ts: 437, uint_val: 181, int64_val: 437 }, DirectData { ts: 438, uint_val: 182, int64_val: 438 }, DirectData { ts: 439, uint_val: 183, int64_val: 439 }, DirectData { ts: 440, uint_val: 184, int64_val: 440 }, DirectData { ts: 441, uint_val: 185, int64_val: 441 }, DirectData { ts: 442, uint_val: 186, int64_val: 442 }, DirectData { ts: 443, uint_val: 187, int64_val: 443 }, DirectData { ts: 444, uint_val: 188, int64_val: 444 }, DirectData { ts: 445, uint_val: 189, int64_val: 445 }, DirectData { ts: 446, uint_val: 190, int64_val: 446 }, DirectData { ts: 447, uint_val: 191, int64_val: 447 }, DirectData { ts: 448, uint_val: 192, int64_val: 448 }, DirectData { ts: 449, uint_val: 193, int64_val: 449 }, DirectData { ts: 450, uint_val: 194, int64_val: 450 }, DirectData { ts: 451, uint_val: 195, int64_val: 451 }, DirectData { ts: 452, uint_val: 196, int64_val: 452 }, DirectData { ts: 453, uint_val: 197, int64_val: 453 }, DirectData { ts: 454, uint_val: 198, int64_val: 454 }, DirectData { ts: 455, uint_val: 199, int64_val: 455 }, DirectData { ts: 456, uint_val: 200, int64_val: 456 }, DirectData { ts: 457, uint_val: 201, int64_val: 457 }, DirectData { ts: 458, uint_val: 202, int64_val: 458 }, DirectData { ts: 459, uint_val: 203, int64_val: 459 }, DirectData { ts: 460, uint_val: 204, int64_val: 460 }, DirectData { ts: 461, uint_val: 205, int64_val: 461 }, DirectData { ts: 462, uint_val: 206, int64_val: 462 }, DirectData { ts: 463, uint_val: 207, int64_val: 463 }, DirectData { ts: 464, uint_val: 208, int64_val: 464 }, DirectData { ts: 465, uint_val: 209, int64_val: 465 }, DirectData { ts: 466, uint_val: 210, int64_val: 466 }, DirectData { ts: 467, uint_val: 211, int64_val: 467 }, DirectData { ts: 468, uint_val: 212, int64_val: 468 }, DirectData { ts: 469, uint_val: 213, int64_val: 469 }, DirectData { ts: 470, uint_val: 214, int64_val: 470 }, DirectData { ts: 471, uint_val: 215, int64_val: 471 }, DirectData { ts: 472, uint_val: 216, int64_val: 472 }, DirectData { ts: 473, uint_val: 217, int64_val: 473 }, DirectData { ts: 474, uint_val: 218, int64_val: 474 }, DirectData { ts: 475, uint_val: 219, int64_val: 475 }, DirectData { ts: 476, uint_val: 220, int64_val: 476 }, DirectData { ts: 477, uint_val: 221, int64_val: 477 }, DirectData { ts: 478, uint_val: 222, int64_val: 478 }, DirectData { ts: 479, uint_val: 223, int64_val: 479 }, DirectData { ts: 480, uint_val: 224, int64_val: 480 }, DirectData { ts: 481, uint_val: 225, int64_val: 481 }, DirectData { ts: 482, uint_val: 226, int64_val: 482 }, DirectData { ts: 483, uint_val: 227, int64_val: 483 }, DirectData { ts: 484, uint_val: 228, int64_val: 484 }, DirectData { ts: 485, uint_val: 229, int64_val: 485 }, DirectData { ts: 486, uint_val: 230, int64_val: 486 }, DirectData { ts: 487, uint_val: 231, int64_val: 487 }, DirectData { ts: 488, uint_val: 232, int64_val: 488 }, DirectData { ts: 489, uint_val: 233, int64_val: 489 }, DirectData { ts: 490, uint_val: 234, int64_val: 490 }, DirectData { ts: 491, uint_val: 235, int64_val: 491 }, DirectData { ts: 492, uint_val: 236, int64_val: 492 }, DirectData { ts: 493, uint_val: 237, int64_val: 493 }, DirectData { ts: 494, uint_val: 238, int64_val: 494 }, DirectData { ts: 495, uint_val: 239, int64_val: 495 }, DirectData { ts: 496, uint_val: 240, int64_val: 496 }, DirectData { ts: 497, uint_val: 241, int64_val: 497 }, DirectData { ts: 498, uint_val: 242, int64_val: 498 }, DirectData { ts: 499, uint_val: 243, int64_val: 499 }, DirectData { ts: 500, uint_val: 244, int64_val: 500 }, DirectData { ts: 501, uint_val: 245, int64_val: 501 }, DirectData { ts: 502, uint_val: 246, int64_val: 502 }, DirectData { ts: 503, uint_val: 247, int64_val: 503 }, DirectData { ts: 504, uint_val: 248, int64_val: 504 }, DirectData { ts: 505, uint_val: 249, int64_val: 505 }, DirectData { ts: 506, uint_val: 250, int64_val: 506 }, DirectData { ts: 507, uint_val: 251, int64_val: 507 }, DirectData { ts: 508, uint_val: 252, int64_val: 508 }, DirectData { ts: 509, uint_val: 253, int64_val: 509 }, DirectData { ts: 510, uint_val: 254, int64_val: 510 }, DirectData { ts: 511, uint_val: 0, int64_val: 511 }, DirectData { ts: 512, uint_val: 0, int64_val: 512 }, DirectData { ts: 513, uint_val: 1, int64_val: 513 }, DirectData { ts: 514, uint_val: 2, int64_val: 514 }, DirectData { ts: 515, uint_val: 3, int64_val: 515 }, DirectData { ts: 516, uint_val: 4, int64_val: 516 }, DirectData { ts: 517, uint_val: 5, int64_val: 517 }, DirectData { ts: 518, uint_val: 6, int64_val: 518 }, DirectData { ts: 519, uint_val: 7, int64_val: 519 }, DirectData { ts: 520, uint_val: 8, int64_val: 520 }, DirectData { ts: 521, uint_val: 9, int64_val: 521 }, DirectData { ts: 522, uint_val: 10, int64_val: 522 }, DirectData { ts: 523, uint_val: 11, int64_val: 523 }, DirectData { ts: 524, uint_val: 12, int64_val: 524 }, DirectData { ts: 525, uint_val: 13, int64_val: 525 }, DirectData { ts: 526, uint_val: 14, int64_val: 526 }, DirectData { ts: 527, uint_val: 15, int64_val: 527 }, DirectData { ts: 528, uint_val: 16, int64_val: 528 }, DirectData { ts: 529, uint_val: 17, int64_val: 529 }, DirectData { ts: 530, uint_val: 18, int64_val: 530 }, DirectData { ts: 531, uint_val: 19, int64_val: 531 }, DirectData { ts: 532, uint_val: 20, int64_val: 532 }, DirectData { ts: 533, uint_val: 21, int64_val: 533 }, DirectData { ts: 534, uint_val: 22, int64_val: 534 }, DirectData { ts: 535, uint_val: 23, int64_val: 535 }, DirectData { ts: 536, uint_val: 24, int64_val: 536 }, DirectData { ts: 537, uint_val: 25, int64_val: 537 }, DirectData { ts: 538, uint_val: 26, int64_val: 538 }, DirectData { ts: 539, uint_val: 27, int64_val: 539 }, DirectData { ts: 540, uint_val: 28, int64_val: 540 }, DirectData { ts: 541, uint_val: 29, int64_val: 541 }, DirectData { ts: 542, uint_val: 30, int64_val: 542 }, DirectData { ts: 543, uint_val: 31, int64_val: 543 }, DirectData { ts: 544, uint_val: 32, int64_val: 544 }, DirectData { ts: 545, uint_val: 33, int64_val: 545 }, DirectData { ts: 546, uint_val: 34, int64_val: 546 }, DirectData { ts: 547, uint_val: 35, int64_val: 547 }, DirectData { ts: 548, uint_val: 36, int64_val: 548 }, DirectData { ts: 549, uint_val: 37, int64_val: 549 }, DirectData { ts: 550, uint_val: 38, int64_val: 550 }, DirectData { ts: 551, uint_val: 39, int64_val: 551 }, DirectData { ts: 552, uint_val: 40, int64_val: 552 }, DirectData { ts: 553, uint_val: 41, int64_val: 553 }, DirectData { ts: 554, uint_val: 42, int64_val: 554 }, DirectData { ts: 555, uint_val: 43, int64_val: 555 }, DirectData { ts: 556, uint_val: 44, int64_val: 556 }, DirectData { ts: 557, uint_val: 45, int64_val: 557 }, DirectData { ts: 558, uint_val: 46, int64_val: 558 }, DirectData { ts: 559, uint_val: 47, int64_val: 559 }, DirectData { ts: 560, uint_val: 48, int64_val: 560 }, DirectData { ts: 561, uint_val: 49, int64_val: 561 }, DirectData { ts: 562, uint_val: 50, int64_val: 562 }, DirectData { ts: 563, uint_val: 51, int64_val: 563 }, DirectData { ts: 564, uint_val: 52, int64_val: 564 }, DirectData { ts: 565, uint_val: 53, int64_val: 565 }, DirectData { ts: 566, uint_val: 54, int64_val: 566 }, DirectData { ts: 567, uint_val: 55, int64_val: 567 }, DirectData { ts: 568, uint_val: 56, int64_val: 568 }, DirectData { ts: 569, uint_val: 57, int64_val: 569 }, DirectData { ts: 570, uint_val: 58, int64_val: 570 }, DirectData { ts: 571, uint_val: 59, int64_val: 571 }, DirectData { ts: 572, uint_val: 60, int64_val: 572 }, DirectData { ts: 573, uint_val: 61, int64_val: 573 }, DirectData { ts: 574, uint_val: 62, int64_val: 574 }, DirectData { ts: 575, uint_val: 63, int64_val: 575 }, DirectData { ts: 576, uint_val: 64, int64_val: 576 }, DirectData { ts: 577, uint_val: 65, int64_val: 577 }, DirectData { ts: 578, uint_val: 66, int64_val: 578 }, DirectData { ts: 579, uint_val: 67, int64_val: 579 }, DirectData { ts: 580, uint_val: 68, int64_val: 580 }, DirectData { ts: 581, uint_val: 69, int64_val: 581 }, DirectData { ts: 582, uint_val: 70, int64_val: 582 }, DirectData { ts: 583, uint_val: 71, int64_val: 583 }, DirectData { ts: 584, uint_val: 72, int64_val: 584 }, DirectData { ts: 585, uint_val: 73, int64_val: 585 }, DirectData { ts: 586, uint_val: 74, int64_val: 586 }, DirectData { ts: 587, uint_val: 75, int64_val: 587 }, DirectData { ts: 588, uint_val: 76, int64_val: 588 }, DirectData { ts: 589, uint_val: 77, int64_val: 589 }, DirectData { ts: 590, uint_val: 78, int64_val: 590 }, DirectData { ts: 591, uint_val: 79, int64_val: 591 }, DirectData { ts: 592, uint_val: 80, int64_val: 592 }, DirectData { ts: 593, uint_val: 81, int64_val: 593 }, DirectData { ts: 594, uint_val: 82, int64_val: 594 }, DirectData { ts: 595, uint_val: 83, int64_val: 595 }, DirectData { ts: 596, uint_val: 84, int64_val: 596 }, DirectData { ts: 597, uint_val: 85, int64_val: 597 }, DirectData { ts: 598, uint_val: 86, int64_val: 598 }, DirectData { ts: 599, uint_val: 87, int64_val: 599 }, DirectData { ts: 600, uint_val: 88, int64_val: 600 }, DirectData { ts: 601, uint_val: 89, int64_val: 601 }, DirectData { ts: 602, uint_val: 90, int64_val: 602 }, DirectData { ts: 603, uint_val: 91, int64_val: 603 }, DirectData { ts: 604, uint_val: 92, int64_val: 604 }, DirectData { ts: 605, uint_val: 93, int64_val: 605 }, DirectData { ts: 606, uint_val: 94, int64_val: 606 }, DirectData { ts: 607, uint_val: 95, int64_val: 607 }, DirectData { ts: 608, uint_val: 96, int64_val: 608 }, DirectData { ts: 609, uint_val: 97, int64_val: 609 }, DirectData { ts: 610, uint_val: 98, int64_val: 610 }, DirectData { ts: 611, uint_val: 99, int64_val: 611 }, DirectData { ts: 612, uint_val: 100, int64_val: 612 }, DirectData { ts: 613, uint_val: 101, int64_val: 613 }, DirectData { ts: 614, uint_val: 102, int64_val: 614 }, DirectData { ts: 615, uint_val: 103, int64_val: 615 }, DirectData { ts: 616, uint_val: 104, int64_val: 616 }, DirectData { ts: 617, uint_val: 105, int64_val: 617 }, DirectData { ts: 618, uint_val: 106, int64_val: 618 }, DirectData { ts: 619, uint_val: 107, int64_val: 619 }, DirectData { ts: 620, uint_val: 108, int64_val: 620 }, DirectData { ts: 621, uint_val: 109, int64_val: 621 }, DirectData { ts: 622, uint_val: 110, int64_val: 622 }, DirectData { ts: 623, uint_val: 111, int64_val: 623 }, DirectData { ts: 624, uint_val: 112, int64_val: 624 }, DirectData { ts: 625, uint_val: 113, int64_val: 625 }, DirectData { ts: 626, uint_val: 114, int64_val: 626 }, DirectData { ts: 627, uint_val: 115, int64_val: 627 }, DirectData { ts: 628, uint_val: 116, int64_val: 628 }, DirectData { ts: 629, uint_val: 117, int64_val: 629 }, DirectData { ts: 630, uint_val: 118, int64_val: 630 }, DirectData { ts: 631, uint_val: 119, int64_val: 631 }, DirectData { ts: 632, uint_val: 120, int64_val: 632 }, DirectData { ts: 633, uint_val: 121, int64_val: 633 }, DirectData { ts: 634, uint_val: 122, int64_val: 634 }, DirectData { ts: 635, uint_val: 123, int64_val: 635 }, DirectData { ts: 636, uint_val: 124, int64_val: 636 }, DirectData { ts: 637, uint_val: 125, int64_val: 637 }, DirectData { ts: 638, uint_val: 126, int64_val: 638 }, DirectData { ts: 639, uint_val: 127, int64_val: 639 }, DirectData { ts: 640, uint_val: 128, int64_val: 640 }, DirectData { ts: 641, uint_val: 129, int64_val: 641 }, DirectData { ts: 642, uint_val: 130, int64_val: 642 }, DirectData { ts: 643, uint_val: 131, int64_val: 643 }, DirectData { ts: 644, uint_val: 132, int64_val: 644 }, DirectData { ts: 645, uint_val: 133, int64_val: 645 }, DirectData { ts: 646, uint_val: 134, int64_val: 646 }, DirectData { ts: 647, uint_val: 135, int64_val: 647 }, DirectData { ts: 648, uint_val: 136, int64_val: 648 }, DirectData { ts: 649, uint_val: 137, int64_val: 649 }, DirectData { ts: 650, uint_val: 138, int64_val: 650 }, DirectData { ts: 651, uint_val: 139, int64_val: 651 }, DirectData { ts: 652, uint_val: 140, int64_val: 652 }, DirectData { ts: 653, uint_val: 141, int64_val: 653 }, DirectData { ts: 654, uint_val: 142, int64_val: 654 }, DirectData { ts: 655, uint_val: 143, int64_val: 655 }, DirectData { ts: 656, uint_val: 144, int64_val: 656 }, DirectData { ts: 657, uint_val: 145, int64_val: 657 }, DirectData { ts: 658, uint_val: 146, int64_val: 658 }, DirectData { ts: 659, uint_val: 147, int64_val: 659 }, DirectData { ts: 660, uint_val: 148, int64_val: 660 }, DirectData { ts: 661, uint_val: 149, int64_val: 661 }, DirectData { ts: 662, uint_val: 150, int64_val: 662 }, DirectData { ts: 663, uint_val: 151, int64_val: 663 }, DirectData { ts: 664, uint_val: 152, int64_val: 664 }, DirectData { ts: 665, uint_val: 153, int64_val: 665 }, DirectData { ts: 666, uint_val: 154, int64_val: 666 }, DirectData { ts: 667, uint_val: 155, int64_val: 667 }, DirectData { ts: 668, uint_val: 156, int64_val: 668 }, DirectData { ts: 669, uint_val: 157, int64_val: 669 }, DirectData { ts: 670, uint_val: 158, int64_val: 670 }, DirectData { ts: 671, uint_val: 159, int64_val: 671 }, DirectData { ts: 672, uint_val: 160, int64_val: 672 }, DirectData { ts: 673, uint_val: 161, int64_val: 673 }, DirectData { ts: 674, uint_val: 162, int64_val: 674 }, DirectData { ts: 675, uint_val: 163, int64_val: 675 }, DirectData { ts: 676, uint_val: 164, int64_val: 676 }, DirectData { ts: 677, uint_val: 165, int64_val: 677 }, DirectData { ts: 678, uint_val: 166, int64_val: 678 }, DirectData { ts: 679, uint_val: 167, int64_val: 679 }, DirectData { ts: 680, uint_val: 168, int64_val: 680 }, DirectData { ts: 681, uint_val: 169, int64_val: 681 }, DirectData { ts: 682, uint_val: 170, int64_val: 682 }, DirectData { ts: 683, uint_val: 171, int64_val: 683 }, DirectData { ts: 684, uint_val: 172, int64_val: 684 }, DirectData { ts: 685, uint_val: 173, int64_val: 685 }, DirectData { ts: 686, uint_val: 174, int64_val: 686 }, DirectData { ts: 687, uint_val: 175, int64_val: 687 }, DirectData { ts: 688, uint_val: 176, int64_val: 688 }, DirectData { ts: 689, uint_val: 177, int64_val: 689 }, DirectData { ts: 690, uint_val: 178, int64_val: 690 }, DirectData { ts: 691, uint_val: 179, int64_val: 691 }, DirectData { ts: 692, uint_val: 180, int64_val: 692 }, DirectData { ts: 693, uint_val: 181, int64_val: 693 }, DirectData { ts: 694, uint_val: 182, int64_val: 694 }, DirectData { ts: 695, uint_val: 183, int64_val: 695 }, DirectData { ts: 696, uint_val: 184, int64_val: 696 }, DirectData { ts: 697, uint_val: 185, int64_val: 697 }, DirectData { ts: 698, uint_val: 186, int64_val: 698 }, DirectData { ts: 699, uint_val: 187, int64_val: 699 }, DirectData { ts: 700, uint_val: 188, int64_val: 700 }, DirectData { ts: 701, uint_val: 189, int64_val: 701 }, DirectData { ts: 702, uint_val: 190, int64_val: 702 }, DirectData { ts: 703, uint_val: 191, int64_val: 703 }, DirectData { ts: 704, uint_val: 192, int64_val: 704 }, DirectData { ts: 705, uint_val: 193, int64_val: 705 }, DirectData { ts: 706, uint_val: 194, int64_val: 706 }, DirectData { ts: 707, uint_val: 195, int64_val: 707 }, DirectData { ts: 708, uint_val: 196, int64_val: 708 }, DirectData { ts: 709, uint_val: 197, int64_val: 709 }, DirectData { ts: 710, uint_val: 198, int64_val: 710 }, DirectData { ts: 711, uint_val: 199, int64_val: 711 }, DirectData { ts: 712, uint_val: 200, int64_val: 712 }, DirectData { ts: 713, uint_val: 201, int64_val: 713 }, DirectData { ts: 714, uint_val: 202, int64_val: 714 }, DirectData { ts: 715, uint_val: 203, int64_val: 715 }, DirectData { ts: 716, uint_val: 204, int64_val: 716 }, DirectData { ts: 717, uint_val: 205, int64_val: 717 }, DirectData { ts: 718, uint_val: 206, int64_val: 718 }, DirectData { ts: 719, uint_val: 207, int64_val: 719 }, DirectData { ts: 720, uint_val: 208, int64_val: 720 }, DirectData { ts: 721, uint_val: 209, int64_val: 721 }, DirectData { ts: 722, uint_val: 210, int64_val: 722 }, DirectData { ts: 723, uint_val: 211, int64_val: 723 }, DirectData { ts: 724, uint_val: 212, int64_val: 724 }, DirectData { ts: 725, uint_val: 213, int64_val: 725 }, DirectData { ts: 726, uint_val: 214, int64_val: 726 }, DirectData { ts: 727, uint_val: 215, int64_val: 727 }, DirectData { ts: 728, uint_val: 216, int64_val: 728 }, DirectData { ts: 729, uint_val: 217, int64_val: 729 }, DirectData { ts: 730, uint_val: 218, int64_val: 730 }, DirectData { ts: 731, uint_val: 219, int64_val: 731 }, DirectData { ts: 732, uint_val: 220, int64_val: 732 }, DirectData { ts: 733, uint_val: 221, int64_val: 733 }, DirectData { ts: 734, uint_val: 222, int64_val: 734 }, DirectData { ts: 735, uint_val: 223, int64_val: 735 }, DirectData { ts: 736, uint_val: 224, int64_val: 736 }, DirectData { ts: 737, uint_val: 225, int64_val: 737 }, DirectData { ts: 738, uint_val: 226, int64_val: 738 }, DirectData { ts: 739, uint_val: 227, int64_val: 739 }, DirectData { ts: 740, uint_val: 228, int64_val: 740 }, DirectData { ts: 741, uint_val: 229, int64_val: 741 }, DirectData { ts: 742, uint_val: 230, int64_val: 742 }, DirectData { ts: 743, uint_val: 231, int64_val: 743 }, DirectData { ts: 744, uint_val: 232, int64_val: 744 }, DirectData { ts: 745, uint_val: 233, int64_val: 745 }, DirectData { ts: 746, uint_val: 234, int64_val: 746 }, DirectData { ts: 747, uint_val: 235, int64_val: 747 }, DirectData { ts: 748, uint_val: 236, int64_val: 748 }, DirectData { ts: 749, uint_val: 237, int64_val: 749 }, DirectData { ts: 750, uint_val: 238, int64_val: 750 }, DirectData { ts: 751, uint_val: 239, int64_val: 751 }, DirectData { ts: 752, uint_val: 240, int64_val: 752 }, DirectData { ts: 753, uint_val: 241, int64_val: 753 }, DirectData { ts: 754, uint_val: 242, int64_val: 754 }, DirectData { ts: 755, uint_val: 243, int64_val: 755 }, DirectData { ts: 756, uint_val: 244, int64_val: 756 }, DirectData { ts: 757, uint_val: 245, int64_val: 757 }, DirectData { ts: 758, uint_val: 246, int64_val: 758 }, DirectData { ts: 759, uint_val: 247, int64_val: 759 }, DirectData { ts: 760, uint_val: 248, int64_val: 760 }, DirectData { ts: 761, uint_val: 249, int64_val: 761 }, DirectData { ts: 762, uint_val: 250, int64_val: 762 }, DirectData { ts: 763, uint_val: 251, int64_val: 763 }, DirectData { ts: 764, uint_val: 252, int64_val: 764 }, DirectData { ts: 765, uint_val: 253, int64_val: 765 }, DirectData { ts: 766, uint_val: 254, int64_val: 766 }, DirectData { ts: 767, uint_val: 0, int64_val: 767 }, DirectData { ts: 768, uint_val: 0, int64_val: 768 }, DirectData { ts: 769, uint_val: 1, int64_val: 769 }, DirectData { ts: 770, uint_val: 2, int64_val: 770 }, DirectData { ts: 771, uint_val: 3, int64_val: 771 }, DirectData { ts: 772, uint_val: 4, int64_val: 772 }, DirectData { ts: 773, uint_val: 5, int64_val: 773 }, DirectData { ts: 774, uint_val: 6, int64_val: 774 }, DirectData { ts: 775, uint_val: 7, int64_val: 775 }, DirectData { ts: 776, uint_val: 8, int64_val: 776 }, DirectData { ts: 777, uint_val: 9, int64_val: 777 }, DirectData { ts: 778, uint_val: 10, int64_val: 778 }, DirectData { ts: 779, uint_val: 11, int64_val: 779 }, DirectData { ts: 780, uint_val: 12, int64_val: 780 }, DirectData { ts: 781, uint_val: 13, int64_val: 781 }, DirectData { ts: 782, uint_val: 14, int64_val: 782 }, DirectData { ts: 783, uint_val: 15, int64_val: 783 }, DirectData { ts: 784, uint_val: 16, int64_val: 784 }, DirectData { ts: 785, uint_val: 17, int64_val: 785 }, DirectData { ts: 786, uint_val: 18, int64_val: 786 }, DirectData { ts: 787, uint_val: 19, int64_val: 787 }, DirectData { ts: 788, uint_val: 20, int64_val: 788 }, DirectData { ts: 789, uint_val: 21, int64_val: 789 }, DirectData { ts: 790, uint_val: 22, int64_val: 790 }, DirectData { ts: 791, uint_val: 23, int64_val: 791 }, DirectData { ts: 792, uint_val: 24, int64_val: 792 }, DirectData { ts: 793, uint_val: 25, int64_val: 793 }, DirectData { ts: 794, uint_val: 26, int64_val: 794 }, DirectData { ts: 795, uint_val: 27, int64_val: 795 }, DirectData { ts: 796, uint_val: 28, int64_val: 796 }, DirectData { ts: 797, uint_val: 29, int64_val: 797 }, DirectData { ts: 798, uint_val: 30, int64_val: 798 }, DirectData { ts: 799, uint_val: 31, int64_val: 799 }, DirectData { ts: 800, uint_val: 32, int64_val: 800 }, DirectData { ts: 801, uint_val: 33, int64_val: 801 }, DirectData { ts: 802, uint_val: 34, int64_val: 802 }, DirectData { ts: 803, uint_val: 35, int64_val: 803 }, DirectData { ts: 804, uint_val: 36, int64_val: 804 }, DirectData { ts: 805, uint_val: 37, int64_val: 805 }, DirectData { ts: 806, uint_val: 38, int64_val: 806 }, DirectData { ts: 807, uint_val: 39, int64_val: 807 }, DirectData { ts: 808, uint_val: 40, int64_val: 808 }, DirectData { ts: 809, uint_val: 41, int64_val: 809 }, DirectData { ts: 810, uint_val: 42, int64_val: 810 }, DirectData { ts: 811, uint_val: 43, int64_val: 811 }, DirectData { ts: 812, uint_val: 44, int64_val: 812 }, DirectData { ts: 813, uint_val: 45, int64_val: 813 }, DirectData { ts: 814, uint_val: 46, int64_val: 814 }, DirectData { ts: 815, uint_val: 47, int64_val: 815 }, DirectData { ts: 816, uint_val: 48, int64_val: 816 }, DirectData { ts: 817, uint_val: 49, int64_val: 817 }, DirectData { ts: 818, uint_val: 50, int64_val: 818 }, DirectData { ts: 819, uint_val: 51, int64_val: 819 }, DirectData { ts: 820, uint_val: 52, int64_val: 820 }, DirectData { ts: 821, uint_val: 53, int64_val: 821 }, DirectData { ts: 822, uint_val: 54, int64_val: 822 }, DirectData { ts: 823, uint_val: 55, int64_val: 823 }, DirectData { ts: 824, uint_val: 56, int64_val: 824 }, DirectData { ts: 825, uint_val: 57, int64_val: 825 }, DirectData { ts: 826, uint_val: 58, int64_val: 826 }, DirectData { ts: 827, uint_val: 59, int64_val: 827 }, DirectData { ts: 828, uint_val: 60, int64_val: 828 }, DirectData { ts: 829, uint_val: 61, int64_val: 829 }, DirectData { ts: 830, uint_val: 62, int64_val: 830 }, DirectData { ts: 831, uint_val: 63, int64_val: 831 }, DirectData { ts: 832, uint_val: 64, int64_val: 832 }, DirectData { ts: 833, uint_val: 65, int64_val: 833 }, DirectData { ts: 834, uint_val: 66, int64_val: 834 }, DirectData { ts: 835, uint_val: 67, int64_val: 835 }, DirectData { ts: 836, uint_val: 68, int64_val: 836 }, DirectData { ts: 837, uint_val: 69, int64_val: 837 }, DirectData { ts: 838, uint_val: 70, int64_val: 838 }, DirectData { ts: 839, uint_val: 71, int64_val: 839 }, DirectData { ts: 840, uint_val: 72, int64_val: 840 }, DirectData { ts: 841, uint_val: 73, int64_val: 841 }, DirectData { ts: 842, uint_val: 74, int64_val: 842 }, DirectData { ts: 843, uint_val: 75, int64_val: 843 }, DirectData { ts: 844, uint_val: 76, int64_val: 844 }, DirectData { ts: 845, uint_val: 77, int64_val: 845 }, DirectData { ts: 846, uint_val: 78, int64_val: 846 }, DirectData { ts: 847, uint_val: 79, int64_val: 847 }, DirectData { ts: 848, uint_val: 80, int64_val: 848 }, DirectData { ts: 849, uint_val: 81, int64_val: 849 }, DirectData { ts: 850, uint_val: 82, int64_val: 850 }, DirectData { ts: 851, uint_val: 83, int64_val: 851 }, DirectData { ts: 852, uint_val: 84, int64_val: 852 }, DirectData { ts: 853, uint_val: 85, int64_val: 853 }, DirectData { ts: 854, uint_val: 86, int64_val: 854 }, DirectData { ts: 855, uint_val: 87, int64_val: 855 }, DirectData { ts: 856, uint_val: 88, int64_val: 856 }, DirectData { ts: 857, uint_val: 89, int64_val: 857 }, DirectData { ts: 858, uint_val: 90, int64_val: 858 }, DirectData { ts: 859, uint_val: 91, int64_val: 859 }, DirectData { ts: 860, uint_val: 92, int64_val: 860 }, DirectData { ts: 861, uint_val: 93, int64_val: 861 }, DirectData { ts: 862, uint_val: 94, int64_val: 862 }, DirectData { ts: 863, uint_val: 95, int64_val: 863 }, DirectData { ts: 864, uint_val: 96, int64_val: 864 }, DirectData { ts: 865, uint_val: 97, int64_val: 865 }, DirectData { ts: 866, uint_val: 98, int64_val: 866 }, DirectData { ts: 867, uint_val: 99, int64_val: 867 }, DirectData { ts: 868, uint_val: 100, int64_val: 868 }, DirectData { ts: 869, uint_val: 101, int64_val: 869 }, DirectData { ts: 870, uint_val: 102, int64_val: 870 }, DirectData { ts: 871, uint_val: 103, int64_val: 871 }, DirectData { ts: 872, uint_val: 104, int64_val: 872 }, DirectData { ts: 873, uint_val: 105, int64_val: 873 }, DirectData { ts: 874, uint_val: 106, int64_val: 874 }, DirectData { ts: 875, uint_val: 107, int64_val: 875 }, DirectData { ts: 876, uint_val: 108, int64_val: 876 }, DirectData { ts: 877, uint_val: 109, int64_val: 877 }, DirectData { ts: 878, uint_val: 110, int64_val: 878 }, DirectData { ts: 879, uint_val: 111, int64_val: 879 }, DirectData { ts: 880, uint_val: 112, int64_val: 880 }, DirectData { ts: 881, uint_val: 113, int64_val: 881 }, DirectData { ts: 882, uint_val: 114, int64_val: 882 }, DirectData { ts: 883, uint_val: 115, int64_val: 883 }, DirectData { ts: 884, uint_val: 116, int64_val: 884 }, DirectData { ts: 885, uint_val: 117, int64_val: 885 }, DirectData { ts: 886, uint_val: 118, int64_val: 886 }, DirectData { ts: 887, uint_val: 119, int64_val: 887 }, DirectData { ts: 888, uint_val: 120, int64_val: 888 }, DirectData { ts: 889, uint_val: 121, int64_val: 889 }, DirectData { ts: 890, uint_val: 122, int64_val: 890 }, DirectData { ts: 891, uint_val: 123, int64_val: 891 }, DirectData { ts: 892, uint_val: 124, int64_val: 892 }, DirectData { ts: 893, uint_val: 125, int64_val: 893 }, DirectData { ts: 894, uint_val: 126, int64_val: 894 }, DirectData { ts: 895, uint_val: 127, int64_val: 895 }, DirectData { ts: 896, uint_val: 128, int64_val: 896 }, DirectData { ts: 897, uint_val: 129, int64_val: 897 }, DirectData { ts: 898, uint_val: 130, int64_val: 898 }, DirectData { ts: 899, uint_val: 131, int64_val: 899 }, DirectData { ts: 900, uint_val: 132, int64_val: 900 }, DirectData { ts: 901, uint_val: 133, int64_val: 901 }, DirectData { ts: 902, uint_val: 134, int64_val: 902 }, DirectData { ts: 903, uint_val: 135, int64_val: 903 }, DirectData { ts: 904, uint_val: 136, int64_val: 904 }, DirectData { ts: 905, uint_val: 137, int64_val: 905 }, DirectData { ts: 906, uint_val: 138, int64_val: 906 }, DirectData { ts: 907, uint_val: 139, int64_val: 907 }, DirectData { ts: 908, uint_val: 140, int64_val: 908 }, DirectData { ts: 909, uint_val: 141, int64_val: 909 }, DirectData { ts: 910, uint_val: 142, int64_val: 910 }, DirectData { ts: 911, uint_val: 143, int64_val: 911 }, DirectData { ts: 912, uint_val: 144, int64_val: 912 }, DirectData { ts: 913, uint_val: 145, int64_val: 913 }, DirectData { ts: 914, uint_val: 146, int64_val: 914 }, DirectData { ts: 915, uint_val: 147, int64_val: 915 }, DirectData { ts: 916, uint_val: 148, int64_val: 916 }, DirectData { ts: 917, uint_val: 149, int64_val: 917 }, DirectData { ts: 918, uint_val: 150, int64_val: 918 }, DirectData { ts: 919, uint_val: 151, int64_val: 919 }, DirectData { ts: 920, uint_val: 152, int64_val: 920 }, DirectData { ts: 921, uint_val: 153, int64_val: 921 }, DirectData { ts: 922, uint_val: 154, int64_val: 922 }, DirectData { ts: 923, uint_val: 155, int64_val: 923 }, DirectData { ts: 924, uint_val: 156, int64_val: 924 }, DirectData { ts: 925, uint_val: 157, int64_val: 925 }, DirectData { ts: 926, uint_val: 158, int64_val: 926 }, DirectData { ts: 927, uint_val: 159, int64_val: 927 }, DirectData { ts: 928, uint_val: 160, int64_val: 928 }, DirectData { ts: 929, uint_val: 161, int64_val: 929 }, DirectData { ts: 930, uint_val: 162, int64_val: 930 }, DirectData { ts: 931, uint_val: 163, int64_val: 931 }, DirectData { ts: 932, uint_val: 164, int64_val: 932 }, DirectData { ts: 933, uint_val: 165, int64_val: 933 }, DirectData { ts: 934, uint_val: 166, int64_val: 934 }, DirectData { ts: 935, uint_val: 167, int64_val: 935 }, DirectData { ts: 936, uint_val: 168, int64_val: 936 }, DirectData { ts: 937, uint_val: 169, int64_val: 937 }, DirectData { ts: 938, uint_val: 170, int64_val: 938 }, DirectData { ts: 939, uint_val: 171, int64_val: 939 }, DirectData { ts: 940, uint_val: 172, int64_val: 940 }, DirectData { ts: 941, uint_val: 173, int64_val: 941 }, DirectData { ts: 942, uint_val: 174, int64_val: 942 }, DirectData { ts: 943, uint_val: 175, int64_val: 943 }, DirectData { ts: 944, uint_val: 176, int64_val: 944 }, DirectData { ts: 945, uint_val: 177, int64_val: 945 }, DirectData { ts: 946, uint_val: 178, int64_val: 946 }, DirectData { ts: 947, uint_val: 179, int64_val: 947 }, DirectData { ts: 948, uint_val: 180, int64_val: 948 }, DirectData { ts: 949, uint_val: 181, int64_val: 949 }, DirectData { ts: 950, uint_val: 182, int64_val: 950 }, DirectData { ts: 951, uint_val: 183, int64_val: 951 }, DirectData { ts: 952, uint_val: 184, int64_val: 952 }, DirectData { ts: 953, uint_val: 185, int64_val: 953 }, DirectData { ts: 954, uint_val: 186, int64_val: 954 }, DirectData { ts: 955, uint_val: 187, int64_val: 955 }, DirectData { ts: 956, uint_val: 188, int64_val: 956 }, DirectData { ts: 957, uint_val: 189, int64_val: 957 }, DirectData { ts: 958, uint_val: 190, int64_val: 958 }, DirectData { ts: 959, uint_val: 191, int64_val: 959 }, DirectData { ts: 960, uint_val: 192, int64_val: 960 }, DirectData { ts: 961, uint_val: 193, int64_val: 961 }, DirectData { ts: 962, uint_val: 194, int64_val: 962 }, DirectData { ts: 963, uint_val: 195, int64_val: 963 }, DirectData { ts: 964, uint_val: 196, int64_val: 964 }, DirectData { ts: 965, uint_val: 197, int64_val: 965 }, DirectData { ts: 966, uint_val: 198, int64_val: 966 }, DirectData { ts: 967, uint_val: 199, int64_val: 967 }, DirectData { ts: 968, uint_val: 200, int64_val: 968 }, DirectData { ts: 969, uint_val: 201, int64_val: 969 }, DirectData { ts: 970, uint_val: 202, int64_val: 970 }, DirectData { ts: 971, uint_val: 203, int64_val: 971 }, DirectData { ts: 972, uint_val: 204, int64_val: 972 }, DirectData { ts: 973, uint_val: 205, int64_val: 973 }, DirectData { ts: 974, uint_val: 206, int64_val: 974 }, DirectData { ts: 975, uint_val: 207, int64_val: 975 }, DirectData { ts: 976, uint_val: 208, int64_val: 976 }, DirectData { ts: 977, uint_val: 209, int64_val: 977 }, DirectData { ts: 978, uint_val: 210, int64_val: 978 }, DirectData { ts: 979, uint_val: 211, int64_val: 979 }, DirectData { ts: 980, uint_val: 212, int64_val: 980 }, DirectData { ts: 981, uint_val: 213, int64_val: 981 }, DirectData { ts: 982, uint_val: 214, int64_val: 982 }, DirectData { ts: 983, uint_val: 215, int64_val: 983 }, DirectData { ts: 984, uint_val: 216, int64_val: 984 }, DirectData { ts: 985, uint_val: 217, int64_val: 985 }, DirectData { ts: 986, uint_val: 218, int64_val: 986 }, DirectData { ts: 987, uint_val: 219, int64_val: 987 }, DirectData { ts: 988, uint_val: 220, int64_val: 988 }, DirectData { ts: 989, uint_val: 221, int64_val: 989 }, DirectData { ts: 990, uint_val: 222, int64_val: 990 }, DirectData { ts: 991, uint_val: 223, int64_val: 991 }, DirectData { ts: 992, uint_val: 224, int64_val: 992 }, DirectData { ts: 993, uint_val: 225, int64_val: 993 }, DirectData { ts: 994, uint_val: 226, int64_val: 994 }, DirectData { ts: 995, uint_val: 227, int64_val: 995 }, DirectData { ts: 996, uint_val: 228, int64_val: 996 }, DirectData { ts: 997, uint_val: 229, int64_val: 997 }, DirectData { ts: 998, uint_val: 230, int64_val: 998 }, DirectData { ts: 999, uint_val: 231, int64_val: 999 }, DirectData { ts: 1000, uint_val: 232, int64_val: 1000 }, DirectData { ts: 1001, uint_val: 233, int64_val: 1001 }, DirectData { ts: 1002, uint_val: 234, int64_val: 1002 }, DirectData { ts: 1003, uint_val: 235, int64_val: 1003 }, DirectData { ts: 1004, uint_val: 236, int64_val: 1004 }, DirectData { ts: 1005, uint_val: 237, int64_val: 1005 }, DirectData { ts: 1006, uint_val: 238, int64_val: 1006 }, DirectData { ts: 1007, uint_val: 239, int64_val: 1007 }, DirectData { ts: 1008, uint_val: 240, int64_val: 1008 }, DirectData { ts: 1009, uint_val: 241, int64_val: 1009 }, DirectData { ts: 1010, uint_val: 242, int64_val: 1010 }, DirectData { ts: 1011, uint_val: 243, int64_val: 1011 }, DirectData { ts: 1012, uint_val: 244, int64_val: 1012 }, DirectData { ts: 1013, uint_val: 245, int64_val: 1013 }, DirectData { ts: 1014, uint_val: 246, int64_val: 1014 }, DirectData { ts: 1015, uint_val: 247, int64_val: 1015 }, DirectData { ts: 1016, uint_val: 248, int64_val: 1016 }, DirectData { ts: 1017, uint_val: 249, int64_val: 1017 }, DirectData { ts: 1018, uint_val: 250, int64_val: 1018 }, DirectData { ts: 1019, uint_val: 251, int64_val: 1019 }, DirectData { ts: 1020, uint_val: 252, int64_val: 1020 }, DirectData { ts: 1021, uint_val: 253, int64_val: 1021 }, DirectData { ts: 1022, uint_val: 254, int64_val: 1022 }, DirectData { ts: 1023, uint_val: 0, int64_val: 1023 }], sender_count: 1 } diff --git a/src/lib.rs b/src/lib.rs index 7317a5c..e4c4401 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,10 +11,16 @@ use memmap2::MmapMut; use os::{Buffer, Header, View}; use serde::{Deserialize, Serialize}; use std::{ - cell::UnsafeCell, convert::TryInto, ffi::c_void, fs::{File, OpenOptions}, mem, sync::{ + cell::UnsafeCell, + convert::TryInto, + ffi::c_void, + fs::{File, OpenOptions}, + mem, + sync::{ atomic::Ordering::{Acquire, Relaxed, Release}, Arc, - }, time::{Duration, Instant} + }, + time::{Duration, Instant}, }; use tempfile::NamedTempFile; use thiserror::Error as ThisError; @@ -114,8 +120,8 @@ fn map(file: &File) -> Result { /// Trait for when `bincode`'s overhead is unacceptable and the developer would prefer to /// directly write the message's contents into the mmap buffer without an additional copy and/or serialization. /// -/// `msg_len` is the encoded size of the message in bytes. -/// `write_to_shm` allows for directly copying contents of the implementing struct into the +/// `msg_len` is the encoded size of the message in bytes. +/// `write_to_shm` allows for directly copying contents of the implementing struct into the /// message's space in the buffer. This is incredibly unsafe and fully up to the developer /// to account for padding, alignment, proper offsetting etc. or you will cause mayhem. pub trait ShmWriter { @@ -272,15 +278,12 @@ impl Receiver { let size = if let Ok(fixed) = slice[read as usize..start as usize].try_into() { u32::from_be_bytes(fixed) } else { - return Err(Error::Runtime("bad uncast of message size".into())) + return Err(Error::Runtime("bad uncast of message size".into())); }; if size > 0 { let end = start + size; - break Some(( - &slice[start as usize..end as usize], - end, - )); + break Some((&slice[start as usize..end as usize], end)); } else if write < read { read = BEGINNING; let mut lock = buffer.lock()?; @@ -348,10 +351,7 @@ impl Receiver { } } - fn recv_timeout_0<'a>( - &'a self, - timeout: Option, - ) -> Result> { + fn recv_timeout_0<'a>(&'a self, timeout: Option) -> Result> { let mut deadline = None; loop { if let Some(value_and_position) = self.try_recv_0()? { @@ -486,10 +486,7 @@ impl<'a> ZeroCopyContext<'a> { /// /// This will return `Err(`[`Error::AlreadyReceived`](enum.Error.html#variant.AlreadyReceived)`))` if this /// instance has already been used to read a message. - pub fn recv_direct_timeout<'b>( - &'b mut self, - timeout: Duration, - ) -> Result> { + pub fn recv_direct_timeout<'b>(&'b mut self, timeout: Duration) -> Result> { if self.position.is_some() { Err(Error::AlreadyReceived) } else { @@ -532,7 +529,8 @@ impl Sender { /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send(&self, value: &impl Serialize) -> Result<()> { - unsafe { self.send_timeout_0(&BincodeShmWriter(value), false, None).map(drop) } + self.send_timeout_0(&BincodeShmWriter(value), false, None) + .map(drop) } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer @@ -545,7 +543,7 @@ impl Sender { /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send_timeout(&self, value: &impl Serialize, timeout: Duration) -> Result { - unsafe { self.send_timeout_0(&BincodeShmWriter(value), false, Some(timeout)) } + self.send_timeout_0(&BincodeShmWriter(value), false, Some(timeout)) } /// Send the specified message, waiting for the ring buffer to become completely empty first. @@ -558,39 +556,40 @@ impl Sender { /// is greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. pub fn send_when_empty(&self, value: &impl Serialize) -> Result<()> { - unsafe { self.send_timeout_0(&BincodeShmWriter(value), true, None).map(drop) } + self.send_timeout_0(&BincodeShmWriter(value), true, None) + .map(drop) } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer - /// if necessary. Uses the lower level `ShmWriter` trait to write messages directly into the mmap buffer. Is + /// if necessary. Uses the lower level `ShmWriter` trait to write messages directly into the mmap buffer. Is /// inherently unsafe due to complete control it gives over writing to memory. /// /// The size of the message must be greater than zero or else this method will return /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the message size is /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub unsafe fn send_direct(&self, value: &impl ShmWriter) -> Result<()> { + pub fn send_direct(&self, value: &impl ShmWriter) -> Result<()> { self.send_timeout_0(value, false, None).map(drop) } /// Send the specified message, waiting for sufficient contiguous space to become available in the ring buffer - /// if necessary, but only up to the specified timeout. Uses the lower level `ShmWriter` trait to write messages + /// if necessary, but only up to the specified timeout. Uses the lower level `ShmWriter` trait to write messages /// directly into the mmap buffer. Is inherently unsafe due to complete control it gives over writing to memory. - /// + /// /// This will return `Ok(true)` if the message was sent, or `Ok(false)` if it timed out while waiting. /// /// The size of the message must be greater than zero or else this method will return /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size is /// greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub unsafe fn send_direct_timeout(&self, value: &impl ShmWriter, timeout: Duration) -> Result { + pub fn send_direct_timeout(&self, value: &impl ShmWriter, timeout: Duration) -> Result { self.send_timeout_0(value, false, Some(timeout)) } - /// Send the specified message, waiting for the ring buffer to become completely empty first. Uses the lower - /// level `ShmWriter` trait to write messages directly into the mmap buffer. Is inherently unsafe due to complete + /// Send the specified message, waiting for the ring buffer to become completely empty first. Uses the lower + /// level `ShmWriter` trait to write messages directly into the mmap buffer. Is inherently unsafe due to complete /// control it gives over writing to memory. - /// + /// /// This method is appropriate for sending time-sensitive messages where buffering would introduce undesirable /// latency. /// @@ -598,11 +597,11 @@ impl Sender { /// `Err(`[`Error::ZeroSizedMessage`](enum.Error.html#variant.ZeroSizedMessage)`))`. If the size /// is greater than the ring buffer capacity, this method will return /// `Err(`[`Error::MessageTooLarge`](enum.Error.html#variant.MessageTooLarge)`))`. - pub unsafe fn send_direct_when_empty(&self, value: &impl ShmWriter) -> Result<()> { + pub fn send_direct_when_empty(&self, value: &impl ShmWriter) -> Result<()> { self.send_timeout_0(value, true, None).map(drop) } - unsafe fn send_timeout_0( + fn send_timeout_0( &self, value: &impl ShmWriter, wait_until_empty: bool, @@ -636,11 +635,8 @@ impl Sender { } else if read != BEGINNING { assert!(write > BEGINNING); - std::ptr::copy_nonoverlapping( - 0u32.to_be_bytes().as_ptr(), - map.as_mut_ptr().offset(write as isize), - 4, - ); + let bytes = 0_u32.to_be_bytes(); + map[write as usize..(write + 4) as usize].copy_from_slice(&bytes); write = BEGINNING; buffer.header().write.store(write, Release); @@ -661,20 +657,13 @@ impl Sender { } } - // write our msg size first - std::ptr::copy_nonoverlapping( - size.to_be_bytes().as_ptr(), - map.as_mut_ptr().offset(write as isize), - 4, - ); - let start = write + 4; + let bytes = size.to_be_bytes(); + map[write as usize..start as usize].copy_from_slice(&bytes); let end = start + size; - value.write_to_shm( - &mut map[start as usize .. end as usize], - )?; + value.write_to_shm(&mut map[start as usize..end as usize])?; buffer.header().write.store(end, Release); @@ -691,10 +680,79 @@ mod tests { use proptest::{arbitrary::any, collection::vec, prop_assume, proptest, strategy::Strategy}; use std::thread; + #[derive(Debug, Clone, PartialEq)] + #[repr(C)] + struct DirectData { + ts: u64, + uint_val: u8, + int64_val: i64, + } + + impl DirectData { + fn from_bytes(bytes: &[u8]) -> Result { + let mut offset = 0; + + let read_size = std::mem::size_of::(); + let ts = u64::from_be_bytes( + bytes[offset as usize..(offset + read_size) as usize].try_into()?, + ); + offset += read_size; + + let read_size = std::mem::size_of::(); + let uint_val = u8::from_be_bytes( + bytes[offset as usize..(offset + read_size) as usize].try_into()?, + ); + offset += read_size; + + let read_size = std::mem::size_of::(); + let int64_val = i64::from_be_bytes( + bytes[offset as usize..(offset + read_size) as usize].try_into()?, + ); + + Ok(Self { + ts, + uint_val, + int64_val, + }) + } + } + + impl ShmWriter for DirectData { + fn msg_len(&self) -> crate::Result { + Ok( + (std::mem::size_of::() + + std::mem::size_of::() + + std::mem::size_of::()) as u64, + ) + } + + // a direct writer example where bytes are cast directly into shared memory w/o padding + fn write_to_shm(&self, shm_ptr: &mut [u8]) -> crate::Result<()> { + let mut offset = 0; + + let bytes = self.ts.to_be_bytes(); + let write_size = bytes.len(); + shm_ptr[offset..(offset + write_size)].copy_from_slice(&bytes); + offset += write_size; + + let bytes = self.uint_val.to_be_bytes(); + let write_size = bytes.len(); + shm_ptr[offset..(offset + write_size)].copy_from_slice(&bytes); + offset += write_size; + + let bytes = self.int64_val.to_be_bytes(); + let write_size = bytes.len(); + shm_ptr[offset..(offset + write_size)].copy_from_slice(&bytes); + + Ok(()) + } + } + #[derive(Debug)] struct Case { channel_size: u32, data: Vec>, + direct_data: Vec, sender_count: u32, } @@ -753,6 +811,64 @@ mod tests { Ok(()) } + + fn run_direct(&self) -> Result<()> { + let (name, buffer) = SharedRingBuffer::create_temp(self.channel_size)?; + let mut rx = Receiver::new(buffer); + + let receiver_thread = if self.sender_count == 1 { + // Only one sender means we can expect to receive in a predictable order: + let expected = self.direct_data.clone(); + thread::spawn(move || -> Result<()> { + for item in &expected { + let mut ctx = rx.zero_copy_context(); + let bytes = ctx.recv_direct()?; + let received = DirectData::from_bytes(bytes)?; + + assert_eq!(item, &received); + } + + Ok(()) + }) + } else { + // Multiple senders mean we'll receive in an unpredictable order, so just verify we receive the + // expected number of messages: + let expected = self.direct_data.len() * self.sender_count as usize; + thread::spawn(move || -> Result<()> { + for _ in 0..expected { + rx.recv::>()?; + } + Ok(()) + }) + }; + + let data = Arc::new(self.direct_data.clone()); + let sender_threads = (0..self.sender_count) + .map(move |_| { + os::test::fork({ + let name = name.clone(); + let data = data.clone(); + move || -> Result<()> { + let tx = Sender::new(SharedRingBuffer::open(&name)?); + + for item in data.as_ref() { + tx.send_direct(item)?; + } + + Ok(()) + } + }) + }) + .collect::>>()?; + + for thread in sender_threads { + thread.join().map_err(|e| anyhow!("{:?}", e))??; + } + + receiver_thread.join().map_err(|e| anyhow!("{:?}", e))??; + + Ok(()) + } } fn arb_case() -> impl Strategy { @@ -761,6 +877,13 @@ mod tests { Case { channel_size, data, + direct_data: (0..1024) + .map(|n| DirectData { + ts: n, + uint_val: n as u8 % u8::MAX, + int64_val: n as i64, + }) + .collect::>(), sender_count, } }) @@ -774,11 +897,37 @@ mod tests { data: (0..1024) .map(|_| (0_u8..101).collect::>()) .collect::>(), + direct_data: (0..1024) + .map(|n| DirectData { + ts: n, + uint_val: n as u8 % u8::MAX, + int64_val: n as i64, + }) + .collect::>(), sender_count: 1, } .run() } + #[test] + fn simple_direct_case() -> Result<()> { + Case { + channel_size: 1024, + data: (0..1024) + .map(|_| (0_u8..101).collect::>()) + .collect::>(), + direct_data: (0..1024) + .map(|n| DirectData { + ts: n, + uint_val: n as u8 % u8::MAX, + int64_val: n as i64, + }) + .collect::>(), + sender_count: 1, + } + .run_direct() + } + #[test] fn zero_copy() -> Result<()> { #[derive(Serialize, Deserialize, Eq, PartialEq, Debug)] From eda41ccfce5d0fa7101dfb76433fd00d2a028f1f Mon Sep 17 00:00:00 2001 From: andrew-manifold <102973930+andrew-manifold@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:00:07 -0400 Subject: [PATCH 6/6] added in additional tests --- src/lib.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index e4c4401..cc558f0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -662,7 +662,6 @@ impl Sender { map[write as usize..start as usize].copy_from_slice(&bytes); let end = start + size; - value.write_to_shm(&mut map[start as usize..end as usize])?; buffer.header().write.store(end, Release); @@ -688,6 +687,12 @@ mod tests { int64_val: i64, } + impl DirectData { + fn test() -> Self { + Self { ts: 1001, uint_val: 75, int64_val: 19191919 } + } + } + impl DirectData { fn from_bytes(bytes: &[u8]) -> Result { let mut offset = 0; @@ -767,6 +772,7 @@ mod tests { thread::spawn(move || -> Result<()> { for item in &expected { let received = rx.recv::>()?; + assert_eq!(item.len(), received.len()); assert_eq!(item, &received); } @@ -984,6 +990,33 @@ mod tests { Ok(()) } + #[test] + fn slow_direct_sender_with_recv_timeout() -> Result<()> { + let (name, buffer) = SharedRingBuffer::create_temp(256)?; + let mut rx = Receiver::new(buffer); + let tx = Sender::new(SharedRingBuffer::open(&name)?); + + let direct_data = DirectData::test(); + + let sender = os::test::fork(move || { + thread::sleep(Duration::from_secs(1)); + tx.send_direct(&direct_data).map_err(anyhow::Error::from) + })?; + + loop { + if let Some(bytes) = rx.zero_copy_context().recv_direct_timeout(Duration::from_millis(1))? { + let recv_val = DirectData::from_bytes(bytes)?; + + assert_eq!(DirectData::test(), recv_val); + break; + } + } + + sender.join().map_err(|e| anyhow!("{:?}", e))??; + + Ok(()) + } + #[test] fn slow_receiver_with_send_timeout() -> Result<()> { let (name, buffer) = SharedRingBuffer::create_temp(256)?; @@ -1004,6 +1037,34 @@ mod tests { Ok(()) } + #[test] + fn slow_direct_receiver_with_send_timeout() -> Result<()> { + let (name, buffer) = SharedRingBuffer::create_temp(256)?; + let mut rx = Receiver::new(buffer); + let tx = Sender::new(SharedRingBuffer::open(&name)?); + + let direct_data = DirectData::test(); + + let sender = os::test::fork(move || loop { + if tx.send_direct_timeout(&direct_data, Duration::from_millis(1))? { + break Ok(()); + } + })?; + + thread::sleep(Duration::from_secs(1)); + + let mut ctx = rx.zero_copy_context(); + + let bytes = ctx.recv_direct()?; + let recv_val = DirectData::from_bytes(bytes)?; + + assert_eq!(DirectData::test(), recv_val); + + sender.join().map_err(|e| anyhow!("{:?}", e))??; + + Ok(()) + } + proptest! { #[test] fn arbitrary_case(case in arb_case()) { @@ -1020,5 +1081,21 @@ mod tests { prop_assume!(result.is_ok(), "error: {:?}", result.unwrap_err()); } + + #[test] + fn arbitrary_direct_case(case in arb_case()) { + let result = thread::spawn(move || { + let result = case.run_direct(); + if let Err(e) = &result { + println!("\ntrouble: {:?}", e); + } else if false { + print!("."); + std::io::Write::flush(&mut std::io::stdout())?; + } + result + }).join().unwrap(); + + prop_assume!(result.is_ok(), "error: {:?}", result.unwrap_err()); + } } }