From 74091ddb6010dddce54dceab6dd0b042a9cd1e3e Mon Sep 17 00:00:00 2001 From: hailong15 Date: Tue, 14 Oct 2025 11:05:23 +0800 Subject: [PATCH 1/6] allow deadcode on kv --- .github/workflows/rust.yml | 3 +-- protocol/src/kv/mod.rs | 10 +++++----- protocol/src/lib.rs | 1 + 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4271f8ab2..e6eb7294e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -19,8 +19,7 @@ env: min_key: 1 max_key: 10000 socks_dir: /home/runner/work/breeze/socks - # TODO rust版本升级后,突然大量warnings,暂时允许dead_code警告 - RUSTFLAGS: "-D warnings --allow dead_code" + RUSTFLAGS: "-D warnings" jobs: build: diff --git a/protocol/src/kv/mod.rs b/protocol/src/kv/mod.rs index 37f0486b3..d02d7889d 100644 --- a/protocol/src/kv/mod.rs +++ b/protocol/src/kv/mod.rs @@ -8,7 +8,7 @@ mod reqpacket; mod rsppacket; mod mc2mysql; -pub use mc2mysql::{escape_mysql_and_push, MysqlBuilder, Strategy, VectorSqlBuilder}; +pub use mc2mysql::{MysqlBuilder, Strategy, VectorSqlBuilder, escape_mysql_and_push}; use std::ops::Deref; use self::common::proto::Text; @@ -23,12 +23,12 @@ use self::rsppacket::ResponsePacket; use super::Flag; use super::Protocol; -use crate::kv::client::Client; -use crate::kv::error::Error; use crate::HandShake; use crate::HashedCommand; use crate::RequestProcessor; use crate::Stream; +use crate::kv::client::Client; +use crate::kv::error::Error; use crate::{Command, Operation}; use ds::RingSlice; @@ -36,11 +36,11 @@ use sharding::hash::Hash; pub mod prelude { - #[doc(inline)] - pub use crate::kv::common::row::convert::FromRow; #[doc(inline)] pub use crate::kv::common::row::ColumnIndex; #[doc(inline)] + pub use crate::kv::common::row::convert::FromRow; + #[doc(inline)] pub use crate::kv::common::value::convert::{ConvIr, FromValue, ToValue}; // Trait for protocol markers [`crate::Binary`] and [`crate::Text`]. diff --git a/protocol/src/lib.rs b/protocol/src/lib.rs index 6e1071d66..317dc12ca 100644 --- a/protocol/src/lib.rs +++ b/protocol/src/lib.rs @@ -11,6 +11,7 @@ pub use redis::RedisFlager; pub use redis::packet::Packet; pub mod req; //pub mod resp; +#[allow(dead_code)] pub mod kv; pub mod metrics; pub mod msgque; From 0fb66e57195e4ad1f918ad8bb6ab92aa1465d640 Mon Sep 17 00:00:00 2001 From: hailong15 Date: Tue, 14 Oct 2025 16:43:27 +0800 Subject: [PATCH 2/6] redis auth --- protocol/src/redis/mod.rs | 67 ++++++++++++++++++++++++++++++-- protocol/src/redis/packet.rs | 13 ++++--- protocol/src/vector/reqpacket.rs | 4 +- tests/src/benches/redis.rs | 10 +++-- tests/src/protocols/parse.rs | 28 ++++++------- tests/src/protocols/proc_test.rs | 34 ++++++++++++---- 6 files changed, 121 insertions(+), 35 deletions(-) diff --git a/protocol/src/redis/mod.rs b/protocol/src/redis/mod.rs index 8674dbbff..f89cf6282 100644 --- a/protocol/src/redis/mod.rs +++ b/protocol/src/redis/mod.rs @@ -5,17 +5,31 @@ pub use flag::RedisFlager; pub(crate) mod packet; use crate::{ + Command, Commander, Error, HandShake, HashedCommand, Metric, MetricItem, MetricName, Protocol, + RequestProcessor, ResOption, Result, Stream, Writer, redis::command::CommandType, redis::{error::RedisError, packet::RequestPacket}, - Command, Commander, Error, HashedCommand, Metric, MetricItem, MetricName, Protocol, - RequestProcessor, Result, Stream, Writer, }; -pub use packet::{transmute, Packet, ResponseContext}; +pub use packet::{Packet, ResponseContext, transmute}; use sharding::hash::Hash; #[derive(Clone, Default)] pub struct Redis; +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +pub enum HandShakeStatus { + Init = 0, + Sent = 1, + Success = 2, +} + +impl Default for HandShakeStatus { + fn default() -> Self { + Self::Init + } +} + impl Redis { #[inline] fn parse_request_inner( @@ -91,9 +105,56 @@ impl Redis { } impl Protocol for Redis { + fn handshake(&self, stream: &mut impl Stream, option: &mut ResOption) -> Result { + let ctx = transmute(stream.context()); + let status = match ctx.status { + 0 => HandShakeStatus::Init, + 1 => HandShakeStatus::Sent, + 2 => HandShakeStatus::Success, + _ => HandShakeStatus::Init, + }; + + match status { + HandShakeStatus::Init => { + // a two-bulk "AUTH" command. + let pass = &option.token; + let mut auth_cmd = Vec::with_capacity(32); + auth_cmd.extend_from_slice(b"*2\r\n$4\r\nAUTH\r\n$"); + auth_cmd.extend_from_slice(pass.len().to_string().as_bytes()); + auth_cmd.extend_from_slice(b"\r\n"); + auth_cmd.extend_from_slice(pass.as_bytes()); + auth_cmd.extend_from_slice(b"\r\n"); + + stream.write_all(&auth_cmd)?; + ctx.status = HandShakeStatus::Sent as u32; + Ok(HandShake::Continue) + } + HandShakeStatus::Sent => { + let data: Packet = stream.slice().into(); + if let Some(idx) = data.find_lf_cr(0) { + // response should be +OK\r\n + if &data[..idx] == b"+OK" { + stream.ignore(idx + 2); + ctx.status = HandShakeStatus::Success as u32; + return Ok(HandShake::Success); + } + log::warn!( + "redis auth failed response:{:?}", + data.sub_slice(0, idx + 2) + ); + Err(Error::AuthFailed) + } else { + stream.reserve(8); + Ok(HandShake::Continue) + } + } + HandShakeStatus::Success => Ok(HandShake::Success), + } + } #[inline] fn config(&self) -> crate::Config { crate::Config { + need_auth: true, pipeline: true, ..Default::default() } diff --git a/protocol/src/redis/packet.rs b/protocol/src/redis/packet.rs index 634ca0604..8aab4af81 100644 --- a/protocol/src/redis/packet.rs +++ b/protocol/src/redis/packet.rs @@ -2,7 +2,7 @@ use super::{ command::{CommandHasher, CommandProperties, CommandType}, error::RedisError, }; -use crate::{error::Error, redis::command, Flag, Result, StreamContext}; +use crate::{Flag, Result, StreamContext, error::Error, redis::command}; use ds::RingSlice; use sharding::hash::Hash; @@ -39,7 +39,8 @@ impl From for StreamContext { #[derive(Debug, Default, Clone, Copy)] pub struct ResponseContext { pub oft: usize, - pub bulk: usize, + pub bulk: u32, + pub status: u32, } #[inline] pub fn transmute(ctx: &mut StreamContext) -> &mut ResponseContext { @@ -607,7 +608,7 @@ impl Packet { self.skip_multibulks_inner(&mut ctx.oft, &mut ctx.bulk) .map_err(|e| { if let Error::ProtocolIncomplete(_) = e { - Error::ProtocolIncomplete(ctx.bulk * 64) + Error::ProtocolIncomplete(ctx.bulk as usize * 64) } else { e } @@ -641,7 +642,7 @@ impl Packet { // } //协议完整才跳过,否则不做改动 #[inline] - pub fn full_skip_multibulks(&self, oft: &mut usize, bulks: &mut usize) -> Result<()> { + pub fn full_skip_multibulks(&self, oft: &mut usize, bulks: &mut u32) -> Result<()> { let (mut oft_tmp, mut bulks_tmp) = (*oft, *bulks); self.skip_multibulks_inner(&mut oft_tmp, &mut bulks_tmp)?; *oft = oft_tmp; @@ -649,12 +650,12 @@ impl Packet { Ok(()) } #[inline] - pub fn skip_multibulks_inner(&self, oft: &mut usize, bulks: &mut usize) -> Result<()> { + pub fn skip_multibulks_inner(&self, oft: &mut usize, bulks: &mut u32) -> Result<()> { while *bulks > 0 { self.check_onetoken(*oft)?; // 下面每种情况都确保了不会越界 match self.at(*oft) { - b'*' => *bulks = *bulks + self.num_of_bulks(oft)?, + b'*' => *bulks = *bulks + self.num_of_bulks(oft)? as u32, // 能完整解析才跳过当前字符串:num个字节 + "\r\n" 2个字节 b'$' => self.skip_string_inner(oft).map(|_| {})?, b'+' | b':' => self.line(oft)?, diff --git a/protocol/src/vector/reqpacket.rs b/protocol/src/vector/reqpacket.rs index e00d3fddc..0d0bdff5f 100644 --- a/protocol/src/vector/reqpacket.rs +++ b/protocol/src/vector/reqpacket.rs @@ -5,9 +5,9 @@ use sharding::hash::Hash; use std::fmt::{self, Debug, Display, Formatter}; use crate::{ + Flag, Packet, Result, redis::{command::CommandHasher, packet::CRLF_LEN}, vector::{command, error::KvectorError}, - Flag, Packet, Result, }; /// key 最大长度限制为200 @@ -189,7 +189,7 @@ impl<'a, S: crate::Stream> RequestPacket<'a, S> { log::warn!("not enough bulks to skip req:{}", self); return Err(KvectorError::ReqInvalidBulkNum.into()); } - let mut tmp_count = count as usize; + let mut tmp_count = count as u32; self.data .full_skip_multibulks(&mut self.oft, &mut tmp_count)?; assert_eq!(tmp_count, 0); diff --git a/tests/src/benches/redis.rs b/tests/src/benches/redis.rs index 5f681223a..f9e44db84 100644 --- a/tests/src/benches/redis.rs +++ b/tests/src/benches/redis.rs @@ -1,8 +1,8 @@ -use criterion::{black_box, Criterion}; +use criterion::{Criterion, black_box}; use ds::{BufWriter, RingSlice}; use protocol::{ - redis::{Packet, Redis}, BufRead, + redis::{Packet, Redis}, }; pub(super) fn parse(c: &mut Criterion) { let data = b"*2\r\n$5\r\nbfset\r\n$19\r\n9972602101111556910\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972601925349247790\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972602670110837550\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972603151400930094\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972603030906964782\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972602882608958254\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972602137802279726\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972601835448535854\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972602680699357998\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972601700260875054\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972602577506896686\r\n*2\r\n$5\r\nbfset\r\n$19\r\n9972601852848605998\r\n"; @@ -31,7 +31,11 @@ pub(super) fn parse(c: &mut Criterion) { // }); // }); // }); - let mut ctx = protocol::redis::ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = protocol::redis::ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; group.bench_function("skip_multibulks", |b| { b.iter(|| { black_box({ diff --git a/tests/src/protocols/parse.rs b/tests/src/protocols/parse.rs index f5edcae45..3150234b3 100644 --- a/tests/src/protocols/parse.rs +++ b/tests/src/protocols/parse.rs @@ -1,9 +1,9 @@ use crate::proto_hook; use ds::BufWriter; -use protocol::redis::transmute; -use protocol::redis::Redis; use protocol::Error::ProtocolIncomplete; use protocol::StreamContext; +use protocol::redis::Redis; +use protocol::redis::transmute; use protocol::BufRead; const CTX: StreamContext = [0; 16]; @@ -159,7 +159,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 7; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 4); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -168,7 +168,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 6; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 13); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -177,7 +177,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 5; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 18); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -186,7 +186,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 4; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 22); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -195,7 +195,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 3; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 28); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -204,7 +204,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 2; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 34); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -214,7 +214,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 4; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 38); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -223,7 +223,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 3; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 42); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -232,7 +232,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 2; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 46); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -241,7 +241,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 1; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 50); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -250,7 +250,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 2; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 54); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), @@ -259,7 +259,7 @@ fn test_bulk() { Err(ProtocolIncomplete(left)) => { let bulk = 1; assert_eq!(left, bulk * 64); - assert_eq!(ctx.bulk, bulk); + assert_eq!(ctx.bulk as usize, bulk); assert_eq!(ctx.oft, 60); } e => panic!("Expected ProtocolIncomplete, got: {:?}", e), diff --git a/tests/src/protocols/proc_test.rs b/tests/src/protocols/proc_test.rs index 6773d59a2..3daaec613 100644 --- a/tests/src/protocols/proc_test.rs +++ b/tests/src/protocols/proc_test.rs @@ -1,14 +1,18 @@ use bytes::BufMut; use ds::RingSlice; -use protocol::redis::ResponseContext; use protocol::Bit; use protocol::Packet; +use protocol::redis::ResponseContext; #[test] fn parse_rsp() { let data: RingSlice = SIMPLE_ARR.as_bytes().into(); let data: Packet = data.into(); - let mut ctx = ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; assert!(data.skip_multibulks_with_ctx(&mut ctx).is_ok()); assert_eq!(ctx.oft, data.len()); assert_eq!(ctx.bulk, 0); @@ -24,7 +28,11 @@ fn parse_command_rsp() { let rsp = "*2\r\n*6\r\n$5\r\nhost:\r\n:-1\r\n*2\r\n+loading\r\n+stale\r\n:0\r\n:0\r\n:0\r\n*6\r\n$11\r\nunsubscribe\r\n:-1\r\n*4\r\n+pubsub\r\n+noscript\r\n+loading\r\n+stale\r\n:0\r\n:0\r\n:0\r\n"; let rsp_data: RingSlice = rsp.as_bytes().into(); let rsp_data: Packet = rsp_data.into(); - let mut ctx = ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; assert!(rsp_data.skip_multibulks_with_ctx(&mut ctx).is_ok()); assert_eq!(ctx.oft, rsp_data.len()); assert_eq!(ctx.bulk, 0); @@ -42,7 +50,11 @@ fn parse_command_long_array_rsp() { let rsp3 = "5\r\n$10\r\nfield_1587\r\n$10\r\nvalue_1587\r\n$9\r\nfield_494\r\n$9\r\nvalue_494\r\n$9\r\nfield_544\r\n$9\r\nvalue_544\r\n$9\r\nfield_960\r\n$9\r\nvalue_960\r\n$10\r\nfield_1277\r\n$10\r\nvalue_1277\r\n$9\r\nfield_870\r\n$9\r\nvalue_870\r\n$10\r\nfield_1463\r\n$10\r\nvalue_1463\r\n$10\r\nfield_1098\r\n$10\r\nvalue_1098\r\n$9\r\nfield_784\r\n$9\r\nvalue_784\r\n$9\r\nfield_596\r\n$9\r\nvalue_596\r\n$10\r\nfield_1024\r\n$10\r\nvalue_1024\r\n$9\r\nfield_835\r\n$9\r\nvalue_835\r\n$9\r\nfield_880\r\n$9\r\nvalue_880\r\n$10\r\nfield_1710\r\n$10\r\nvalue_1710\r\n$9\r\nfield_977\r\n$9\r\nvalue_977\r\n$10\r\nfield_1972\r\n$10\r\nvalue_1972\r\n$10\r\nfield_1719\r\n$10\r\nvalue_1719\r\n$8\r\nfield_48\r\n$8\r\nvalue_48\r\n$9\r\nfield_804\r\n$9\r\nvalue_804\r\n$9\r\nfield_495\r\n$9\r\nvalue_495\r\n$9\r\nfield_105\r\n$9\r\nvalue_105\r\n$10\r\nfield_1615\r\n$10\r\nvalue_1615\r\n$9\r\nfield_517\r\n$9\r\nvalue_517\r\n$8\r\nfield_36\r\n$8\r\nvalue_36\r\n$10\r\nfield_1088\r\n$10\r\nvalue_1088\r\n$10\r\nfield_1402\r\n$10\r\nvalue_1402\r\n$10\r\nfield_1542\r\n$10\r\nvalue_1542\r\n$10\r\nfield_1789\r\n$10\r\nvalue_1789\r\n$9\r\nfield_571\r\n$9\r\nvalue_571\r\n$9\r\nfield_801\r\n$9\r\nvalue_801\r\n$10\r\nfield_1837\r\n$10\r\nvalue_1837\r\n$9\r\nfield_436\r\n$9\r\nvalue_436\r\n$9\r\nfield_756\r\n$9\r\nvalue_756\r\n$10\r\nfield_1985\r\n$10\r\nvalue_1985\r\n$10\r\nfield_1472\r\n$10\r\nvalue_1472\r\n$9\r\nfield_973\r\n$9\r\nvalue_973\r\n$10\r\nfield_1260\r\n$10\r\nvalue_1260\r\n$10\r\nfield_1397\r\n$10\r\nvalue_1397\r\n$9\r\nfield_589\r\n$9\r\nvalue_589\r\n$9\r\nfield_251\r\n$9\r\nvalue_251\r\n$9\r\nfield_757\r\n$9\r\nvalue_757\r\n$10\r\nfield_1783\r\n$10\r\nvalue_1783\r\n$10\r\nfield_1237\r\n$10\r\nvalue_1237\r\n$10\r\nfield_1202\r\n$10\r\nvalue_1202\r\n$8\r\nfield_29\r\n$8\r\nvalue_29\r\n$10\r\nfield_1747\r\n$10\r\nvalue_1747\r\n$9\r\nfield_661\r\n$9\r\nvalue_661\r\n$9\r\nfield_520\r\n$9\r\nvalue_520\r\n$9\r\nfield_348\r\n$9\r\nvalue_348\r\n$9\r\nfield_140\r\n$9\r\nvalue_140\r\n$9\r\nfield_514\r\n$9\r\nvalue_514\r\n$10\r\nfield_1109\r\n$10\r\nvalue_1109\r\n$9\r\nfield_471\r\n$9\r\nvalue_471\r\n$9\r\nfield_592\r\n$9\r\nvalue_592\r\n$10\r\nfield_1857\r\n$10\r\nvalue_1857\r\n$10\r\nfield_1748\r\n$10\r\nvalue_1748\r\n$9\r\nfield_259\r\n$9\r\nvalue_259\r\n$9\r\nfield_210\r\n$9\r\nvalue_210\r\n$10\r\nfield_1543\r\n$10\r\nvalue_1543\r\n$10\r\nfield_1838\r\n$10\r\nvalue_1838\r\n$10\r\nfield_1801\r\n$10\r\nvalue_1801\r\n$10\r\nfield_1779\r\n$10\r\nvalue_1779\r\n$10\r\nfield_1123\r\n$10\r\nvalue_1123\r\n$9\r\nfield_398\r\n$9\r\nvalue_398\r\n$10\r\nfield_1018\r\n$10\r\nvalue_1018\r\n$10\r\nfield_1828\r\n$10\r\nvalue_1828\r\n$10\r\nfield_1660\r\n$10\r\nvalue_1660\r\n$9\r\nfield_135\r\n$9\r\nvalue_135\r\n$9\r\nfield_317\r\n$9\r\nvalue_317\r\n$9\r\nfield_698\r\n$9\r\nvalue_698\r\n$10\r\nfield_1357\r\n$10\r\nvalue_1357\r\n$9\r\nfield_606\r\n$9\r\nvalue_606\r\n$10\r\nfield_1605\r\n$10\r\nvalue_1605\r\n$9\r\nfield_170\r\n$9\r\nvalue_170\r\n$10\r\nfield_1999\r\n$10\r\nvalue_1999\r\n$9\r\nfield_282\r\n$9\r\nvalue_282\r\n$10\r\nfield_1804\r\n$10\r\nvalue_1804\r\n$10\r\nfield_1224\r\n$10\r\nvalue_1224\r\n$10\r\nfield_1527\r\n$10\r\nvalue_1527\r\n$10\r\nfield_1581\r\n$10\r\nvalue_1581\r\n$10\r\nfield_1533\r\n$10\r\nvalue_1533\r\n$10\r\nfield_1442\r\n$10\r\nvalue_1442\r\n$9\r\nfield_531\r\n$9\r\nvalue_531\r\n$10\r\nfield_1586\r\n$10\r\nvalue_1586\r\n$9\r\nfield_879\r\n$9\r\nvalue_879\r\n$9\r\nfield_419\r\n$9\r\nvalue_419\r\n$9\r\nfield_844\r\n$9\r\nvalue_844\r\n$10\r\nfield_1793\r\n$10\r\nvalue_1793\r\n$8\r\nfield_63\r\n$8\r\nvalue_63\r\n$9\r\nfield_633\r\n$9\r\nvalue_633\r\n$8\r\nfield_12\r\n$8\r\nvalue_12\r\n$7\r\nfield_7\r\n$7\r\nvalue_7\r\n$10\r\nfield_1044\r\n$10\r\nvalue_1044\r\n$10\r\nfield_1429\r\n$10\r\nvalue_1429\r\n$9\r\nfield_266\r\n$9\r\nvalue_266\r\n$10\r\nfield_1215\r\n$10\r\nvalue_1215\r\n$8\r\nfield_80\r\n$8\r\nvalue_80\r\n$10\r\nfield_1058\r\n$10\r\nvalue_1058\r\n$10\r\nfield_1636\r\n$10\r\nvalue_1636\r\n$8\r\nfield_82\r\n$8\r\nvalue_82\r\n$9\r\nfield_631\r\n$9\r\nvalue_631\r\n$10\r\nfield_1601\r\n$10\r\nvalue_1601\r\n$10\r\nfield_1365\r\n$10\r\nvalue_1365\r\n$10\r\nfield_1811\r\n$10\r\nvalue_1811\r\n$10\r\nfield_1227\r\n$10\r\nvalue_1227\r\n$10\r\nfield_1446\r\n$10\r\nvalue_1446\r\n$8\r\nfield_26\r\n$8\r\nvalue_26\r\n$8\r\nfield_64\r\n$8\r\nvalue_64\r\n$10\r\nfield_1160\r\n$10\r\nvalue_1160\r\n$10\r\nfield_1912\r\n$10\r\nvalue_1912\r\n$9\r\nfield_594\r\n$9\r\nvalue_594\r\n$9\r\nfield_527\r\n$9\r\nvalue_527\r\n$10\r\nfield_1741\r\n$10\r\nvalue_1741\r\n$10\r\nfield_1641\r\n$10\r\nvalue_1641\r\n$10\r\nfield_1465\r\n$10\r\nvalue_1465\r\n$9\r\nfield_847\r\n$9\r\nvalue_847\r\n$10\r\nfield_1775\r\n$10\r\nvalue_1775\r\n$10\r\nfield_1145\r\n$10\r\nvalue_1145\r\n$9\r\nfield_714\r\n$9\r\nvalue_714\r\n$10\r\nfield_1666\r\n$10\r\nvalue_1666\r\n$10\r\nfield_1717\r\n$10\r\nvalue_1717\r\n$10\r\nfield_1364\r\n$10\r\nvalue_1364\r\n$10\r\nfield_1754\r\n$10\r\nvalue_1754\r\n$9\r\nfield_202\r\n$9\r\nvalue_202\r\n$9\r\nfield_701\r\n$9\r\nvalue_701\r\n$10\r\nfield_1996\r\n$10\r\nvalue_1996\r\n$9\r\nfield_992\r\n$9\r\nvalue_992\r\n$10\r\nfield_1366\r\n$10\r\nvalue_1366\r\n$9\r\nfield_492\r\n$9\r\nvalue_492\r\n$10\r\nfield_1829\r\n$10\r\nvalue_1829\r\n$9\r\nfield_441\r\n$9\r\nvalue_441\r\n$9\r\nfield_504\r\n$9\r\nvalue_504\r\n$10\r\nfield_1473\r\n$10\r\nvalue_1473\r\n$10\r\nfield_1707\r\n$10\r\nvalue_1707\r\n$9\r\nfield_556\r\n$9\r\nvalue_556\r\n$10\r\nfield_1891\r\n$10\r\nvalue_1891\r\n$10\r\nfield_1627\r\n$10\r\nvalue_1627\r\n$8\r\nfield_76\r\n$8\r\nvalue_76\r\n$9\r\nfield_350\r\n$9\r\nvalue_350\r\n$10\r\nfield_1769\r\n$10\r\nvalue_1769\r\n$10\r\nfield_1886\r\n$10\r\nvalue_1886\r\n$9\r\nfield_657\r\n$9\r\nvalue_657\r\n$9\r\nfield_970\r\n$9\r\nvalue_970\r\n$9\r\nfield_334\r\n$9\r\nvalue_334\r\n$10\r\nfield_1992\r\n$10\r\nvalue_1992\r\n$10\r\nfield_1421\r\n$10\r\nvalue_1421\r\n$10\r\nfield_1263\r\n$10\r\nvalue_1263\r\n$9\r\nfield_991\r\n$9\r\nvalue_991\r\n$9\r\nfield_953\r\n$9\r\nvalue_953\r\n$10\r\nfield_1832\r\n$10\r\nvalue_1832\r\n$10\r\nfield_1170\r\n$10\r\nvalue_1170\r\n$9\r\nfield_586\r\n$9\r\nvalue_586\r\n$10\r\nfield_1188\r\n$10\r\nvalue_1188\r\n$10\r\nfield_1594\r\n$10\r\nvalue_1594\r\n$10\r\nfield_1296\r\n$10\r\nvalue_1296\r\n$10\r\nfield_1824\r\n$10\r\nvalue_1824\r\n$10\r\nfield_1645\r\n$10\r\nvalue_1645\r\n$10\r\nfield_1596\r\n$10\r\nvalue_1596\r\n$10\r\nfield_1431\r\n$10\r\nvalue_1431\r\n$9\r\nfield_293\r\n$9\r\nvalue_293\r\n$10\r\nfield_1873\r\n$10\r\nvalue_1873\r\n$8\r\nfield_40\r\n$8\r\nvalue_40\r\n$9\r\nfield_591\r\n$9\r\nvalue_591\r\n$9\r\nfield_952\r\n$9\r\nvalue_952\r\n$9\r\nfield_634\r\n$9\r\nvalue_634\r\n$10\r\nfield_1557\r\n$10\r\nvalue_1557\r\n$10\r\nfield_1313\r\n$10\r\nvalue_1313\r\n$9\r\nfield_217\r\n$9\r\nvalue_217\r\n$10\r\nfield_1245\r\n$10\r\nvalue_1245\r\n$9\r\nfield_147\r\n$9\r\nvalue_147\r\n$10\r\nfield_1142\r\n$10\r\nvalue_1142\r\n$9\r\nfield_230\r\n$9\r\nvalue_230\r\n$9\r\nfield_753\r\n$9\r\nvalue_753\r\n$10\r\nfield_1796\r\n$10\r\nvalue_1796\r\n$10\r\nfield_1450\r\n$10\r\nvalue_1450\r\n$10\r\nfield_1104\r\n$10\r\nvalue_1104\r\n$9\r\nfield_530\r\n$9\r\nvalue_530\r\n$7\r\nfield_6\r\n$7\r\nvalue_6\r\n$9\r\nfield_933\r\n$9\r\nvalue_933\r\n$10\r\nfield_1637\r\n$10\r\nvalue_1637\r\n$9\r\nfield_383\r\n$9\r\nvalue_383\r\n$9\r\nfield_743\r\n$9\r\nvalue_743\r\n$10\r\nfield_1705\r\n$10\r\nvalue_1705\r\n$10\r\nfield_1440\r\n$10\r\nvalue_1440\r\n$9\r\nfield_125\r\n$9\r\nvalue_125\r\n$9\r\nfield_286\r\n$9\r\nvalue_286\r\n$10\r\nfield_1285\r\n$10\r\nvalue_1285\r\n$9\r\nfield_337\r\n$9\r\nvalue_337\r\n$10\r\nfield_1435\r\n$10\r\nvalue_1435\r\n$9\r\nfield_229\r\n$9\r\nvalue_229\r\n$10\r\nfield_1597\r\n$10\r\nvalue_1597\r\n$9\r\nfield_785\r\n$9\r\nvalue_785\r\n$9\r\nfield_925\r\n$9\r\nvalue_925\r\n$9\r\nfield_460\r\n$9\r\nvalue_460\r\n$9\r\nfield_883\r\n$9\r\nvalue_883\r\n$10\r\nfield_1417\r\n$10\r\nvalue_1417\r\n$9\r\nfield_174\r\n$9\r\nvalue_174\r\n$9\r\nfield_117\r\n$9\r\nvalue_117\r\n$9\r\nfield_721\r\n$9\r\nvalue_721\r\n$10\r\nfield_1205\r\n$10\r\nvalue_1205\r\n$9\r\nfield_189\r\n$9\r\nvalue_189\r\n$9\r\nfield_901\r\n$9\r\nvalue_901\r\n$9\r\nfield_694\r\n$9\r\nvalue_694\r\n$9\r\nfield_781\r\n$9\r\nvalue_781\r\n$10\r\nfield_1464\r\n$10\r\nvalue_1464\r\n$8\r\nfield_67\r\n$8\r\nvalue_67\r\n$9\r\nfield_346\r\n$9\r\nvalue_346\r\n$10\r\nfield_1537\r\n$10\r\nvalue_1537\r\n$10\r\nfield_1230\r\n$10\r\nvalue_1230\r\n$10\r\nfield_1043\r\n$10\r\nvalue_1043\r\n$9\r\nfield_980\r\n$9\r\nvalue_980\r\n$10\r\nfield_1187\r\n$10\r\nvalue_1187\r\n$9\r\nfield_155\r\n$9\r\nvalue_155\r\n$10\r\nfield_1911\r\n$10\r\nvalue_1911\r\n$10\r\nfield_1519\r\n$10\r\nvalue_1519\r\n$9\r\nfield_336\r\n$9\r\nvalue_336\r\n$9\r\nfield_829\r\n$9\r\nvalue_829\r\n$9\r\nfield_903\r\n$9\r\nvalue_903\r\n$9\r\nfield_893\r\n$9\r\nvalue_893\r\n$10\r\nfield_1730\r\n$10\r\nvalue_1730\r\n$9\r\nfield_227\r\n$9\r\nvalue_227\r\n$9\r\nfield_966\r\n$9\r\nvalue_966\r\n$10\r\nfield_1201\r\n$10\r\nvalue_1201\r\n$9\r\nfield_241\r\n$9\r\nvalue_241\r\n$10\r\nfield_1642\r\n$10\r\nvalue_1642\r\n$10\r\nfield_1390\r\n$10\r\nvalue_1390\r\n$10\r\nfield_1817\r\n$10\r\nvalue_1817\r\n$9\r\nfield_987\r\n$9\r\nvalue_987\r\n$10\r\nfield_1632\r\n$10\r\nvalue_1632\r\n$9\r\nfield_564\r\n$9\r\nvalue_564\r\n$9\r\nfield_856\r\n$9\r\nvalue_856\r\n$9\r\nfield_264\r\n$9\r\nvalue_264\r\n$10\r\nfield_1868\r\n$10\r\nvalue_1868\r\n$9\r\nfield_104\r\n$9\r\nvalue_104\r\n$9\r\nfield_485\r\n$9\r\nvalue_485\r\n$9\r\nfield_660\r\n$9\r\nvalue_660\r\n$9\r\nfield_865\r\n$9\r\nvalue_865\r\n$7\r\nfield_0\r\n$7\r\nvalue_0\r\n$9\r\nfield_811\r\n$9\r\nvalue_811\r\n$10\r\nfield_1029\r\n$10\r\nvalue_1029\r\n$10\r\nfield_1219\r\n$10\r\nvalue_1219\r\n$10\r\nfield_1149\r\n$10\r\nvalue_1149\r\n$9\r\nfield_107\r\n$9\r\nvalue_107\r\n$9\r\nfield_885\r\n$9\r\nvalue_885\r\n$10\r\nfield_1231\r\n$10\r\nvalue_1231\r\n$10\r\nfield_1734\r\n$10\r\nvalue_1734\r\n$9\r\nfield_716\r\n$9\r\nvalue_716\r\n$9\r\nfield_888\r\n$9\r\nvalue_888\r\n$9\r\nfield_706\r\n$9\r\nvalue_706\r\n$10\r\nfield_1847\r\n$10\r\nvalue_1847\r\n$10\r\nfield_1644\r\n$10\r\nvalue_1644\r\n$9\r\nfield_521\r\n$9\r\nvalue_521\r\n$9\r\nfield_649\r\n$9\r\nvalue_649\r\n$10\r\nfield_1051\r\n$10\r\nvalue_1051\r\n$10\r\nfield_1848\r\n$10\r\nvalue_1848\r\n$10\r\nfield_1198\r\n$10\r\nvalue_1198\r\n$10\r\nfield_1056\r\n$10\r\nvalue_1056\r\n$9\r\nfield_703\r\n$9\r\nvalue_703\r\n$9\r\nfield_595\r\n$9\r\nvalue_595\r\n$9\r\nfield_776\r\n$9\r\nvalue_776\r\n$10\r\nfield_1375\r\n$10\r\nvalue_1375\r\n$10\r\nfield_1419\r\n$10\r\nvalue_1419\r\n$10\r\nfield_1610\r\n$10\r\nvalue_1610\r\n$10\r\nfield_1403\r\n$10\r\nvalue_1403\r\n$9\r\nfield_219\r\n$9\r\nvalue_219\r\n$10\r\nfield_1713\r\n$10\r\nvalue_1713\r\n$8\r\nfield_28\r\n$8\r\nvalue_28\r\n$9\r\nfield_810\r\n$9\r\nvalue_810\r\n$9\r\nfield_816\r\n$9\r\nvalue_816\r\n$9\r\nfield_192\r\n$9\r\nvalue_192\r\n$10\r\nfield_1923\r\n$10\r\nvalue_1923\r\n$10\r\nfield_1900\r\n$10\r\nvalue_1900\r\n$10\r\nfield_1083\r\n$10\r\nvalue_1083\r\n$10\r\nfield_1360\r\n$10\r\nvalue_1360\r\n$9\r\nfield_522\r\n$9\r\nvalue_522\r\n$9\r\nfield_316\r\n$9\r\nvalue_316\r\n$10\r\nfield_1727\r\n$10\r\nvalue_1727\r\n$8\r\nfield_87\r\n$8\r\nvalue_87\r\n$10\r\nfield_1625\r\n$10\r\nvalue_1625\r\n$10\r\nfield_1400\r\n$10\r\nvalue_1400\r\n$10\r\nfield_1391\r\n$10\r\nvalue_1391\r\n$9\r\nfield_572\r\n$9\r\nvalue_572\r\n$8\r\nfield_14\r\n$8\r\nvalue_14\r\n$9\r\nfield_535\r\n$9\r\nvalue_535\r\n$9\r\nfield_102\r\n$9\r\nvalue_102\r\n$10\r\nfield_1437\r\n$10\r\nvalue_1437\r\n$9\r\nfield_975\r\n$9\r\nvalue_975\r\n$10\r\nfield_1309\r\n$10\r\nvalue_1309\r\n$10\r\nfield_1200\r\n$10\r\nvalue_1200\r\n$9\r\nfield_817\r\n$9\r\nvalue_817\r\n$10\r\nfield_1183\r\n$10\r\nvalue_1183\r\n$10\r\nfield_1799\r\n$10\r\nvalue_1799\r\n$10\r\nfield_1773\r\n$10\r\nvalue_1773\r\n$9\r\nfield_137\r\n$9\r\nvalue_137\r\n$10\r\nfield_1352\r\n$10\r\nvalue_1352\r\n$9\r\nfield_597\r\n$9\r\nvalue_597\r\n$8\r\nfield_59\r\n$8\r\nvalue_59\r\n$9\r\nfield_258\r\n$9\r\nvalue_258\r\n$10\r\nfield_1998\r\n$10\r\nvalue_1998\r\n$10\r\nfield_1646\r\n$10\r\nvalue_1646\r\n$9\r\nfield_457\r\n$9\r\nvalue_457\r\n$10\r\nfield_1989\r\n$10\r\nvalue_1989\r\n$10\r\nfield_1566\r\n$10\r\nvalue_1566\r\n$10\r\nfield_1288\r\n$10\r\nvalue_1288\r\n$10\r\nfield_1168\r\n$10\r\nvalue_1168\r\n$9\r\nfield_558\r\n$9\r\nvalue_558\r\n$10\r\nfield_1267\r\n$10\r\nvalue_1267\r\n$9\r\nfield_797\r\n$9\r\nvalue_797\r\n$10\r\nfield_1306\r\n$10\r\nvalue_1306\r\n$10\r\nfield_1725\r\n$10\r\nvalue_1725\r\n$9\r\nfield_459\r\n$9\r\nvalue_459\r\n$9\r\nfield_906\r\n$9\r\nvalue_906\r\n$9\r\nfield_297\r\n$9\r\nvalue_297\r\n$9\r\nfield_626\r\n$9\r\nvalue_626\r\n$10\r\nfield_1503\r\n$10\r\nvalue_1503\r\n$10\r\nfield_1427\r\n$10\r\nvalue_1427\r\n$9\r\nfield_369\r\n$9\r\nvalue_369\r\n$9\r\nfield_915\r\n$9\r\nvalue_915\r\n$10\r\nfield_1272\r\n$10\r\nvalue_1272\r\n$9\r\nfield_567\r\n$9\r\nvalue_567\r\n$10\r\nfield_1947\r\n$10\r\nvalue_1947\r\n$9\r\nfield_637\r\n$9\r\nvalue_637\r\n$9\r\nfield_681\r\n$9\r\nvalue_681\r\n$10\r\nfield_1737\r\n$10\r\nvalue_1737\r\n$9\r\nfield_869\r\n$9\r\nvalue_869\r\n$10\r\nfield_1842\r\n$10\r\nvalue_1842\r\n$10\r\nfield_1816\r\n$10\r\nvalue_1816\r\n$10\r\nfield_1443\r\n$10\r\nvalue_1443\r\n$10\r\nfield_1558\r\n$10\r\nvalue_1558\r\n$10\r\nfield_1234\r\n$10\r\nvalue_1234\r\n$9\r\nfield_308\r\n$9\r\nvalue_308\r\n$8\r\nfield_50\r\n$8\r\nvalue_50\r\n$9\r\nfield_496\r\n$9\r\nvalue_496\r\n$10\r\nfield_1108\r\n$10\r\nvalue_1108\r\n$9\r\nfield_609\r\n$9\r\nvalue_609\r\n$10\r\nfield_1786\r\n$10\r\nvalue_1786\r\n$9\r\nfield_762\r\n$9\r\nvalue_762\r\n$9\r\nfield_461\r\n$9\r\nvalue_461\r\n$10\r\nfield_1418\r\n$10\r\nvalue_1418\r\n$10\r\nfield_1961\r\n$10\r\nvalue_1961\r\n$10\r\nfield_1949\r\n$10\r\nvalue_1949\r\n$10\r\nfield_1652\r\n$10\r\nvalue_1652\r\n$9\r\nfield_134\r\n$9\r\nvalue_134\r\n$9\r\nfield_291\r\n$9\r\nvalue_291\r\n$10\r\nfield_1249\r\n$10\r\nvalue_1249\r\n$10\r\nfield_1865\r\n$10\r\nvalue_1865\r\n$9\r\nfield_569\r\n$9\r\nvalue_569\r\n$10\r\nfield_1534\r\n$10\r\nvalue_1534\r\n$9\r\nfield_267\r\n$9\r\nvalue_267\r\n$10\r\nfield_1254\r\n$10\r\nvalue_1254\r\n$10\r\nfield_1964\r\n$10\r\nvalue_1964\r\n$10\r\nfield_1047\r\n$10\r\nvalue_1047\r\n$8\r\nfield_81\r\n$8\r\nvalue_81\r\n$10\r\nfield_1500\r\n$10\r\nvalue_1500\r\n$10\r\nfield_1175\r\n$10\r\nvalue_1175\r\n$10\r\nfield_1493\r\n$10\r\nvalue_1493\r\n$10\r\nfield_1328\r\n$10\r\nvalue_1328\r\n$9\r\nfield_955\r\n$9\r\nvalue_955\r\n$9\r\nfield_965\r\n$9\r\nvalue_965\r\n$9\r\nfield_667\r\n$9\r\nvalue_667\r\n$9\r\nfield_410\r\n$9\r\nvalue_410\r\n$10\r\nfield_1060\r\n$10\r\nvalue_1060\r\n$10\r\nfield_1162\r\n$10\r\nvalue_1162\r\n$9\r\nfield_240\r\n$9\r\nvalue_240\r\n$10\r\nfield_1019\r\n$10\r\nvalue_1019\r\n$9\r\nfield_150\r\n$9\r\nvalue_150\r\n$10\r\nfield_1270\r\n$10\r\nvalue_1270\r\n$9\r\nfield_261\r\n$9\r\nvalue_261\r\n$9\r\nfield_130\r\n$9\r\nvalue_130\r\n$10\r\nfield_1987\r\n$10\r\nvalue_1987\r\n$10\r\nfield_1510\r\n$10\r\nvalue_1510\r\n$9\r\nfield_630\r\n$9\r\nvalue_630\r\n$10\r\nfield_1009\r\n$10\r\nvalue_1009\r\n$8\r\nfield_37\r\n$8\r\nvalue_37\r\n$10\r\nfield_1565\r\n$10\r\nvalue_1565\r\n$9\r\nfield_320\r\n$9\r\nvalue_320\r\n$9\r\nfield_732\r\n$9\r\nvalue_732\r\n$10\r\nfield_1669\r\n$10\r\nvalue_1669\r\n$8\r\nfield_70\r\n$8\r\nvalue_70\r\n$10\r\nfield_1284\r\n$10\r\nvalue_1284\r\n$9\r\nfield_604\r\n$9\r\nvalue_604\r\n$10\r\nfield_1189\r\n$10\r\nvalue_1189\r\n$10\r\nfield_1017\r\n$10\r\nvalue_1017\r\n$10\r\nfield_1930\r\n$10\r\nvalue_1930\r\n$10\r\nfield_1138\r\n$10\r\nvalue_1138\r\n$9\r\nfield_913\r\n$9\r\nvalue_913\r\n$8\r\nfield_78\r\n$8\r\nvalue_78\r\n$9\r\nfield_322\r\n$9\r\nvalue_322\r\n$9\r\nfield_639\r\n$9\r\nvalue_639\r\n$10\r\nfield_1977\r\n$10\r\nvalue_1977\r\n$10\r\nfield_1240\r\n$10\r\nvalue_1240\r\n$10\r\nfield_1070\r\n$10\r\nvalue_1070\r\n$10\r\nfield_1933\r\n$10\r\nvalue_1933\r\n$10\r\nfield_1509\r\n$10\r\nvalue_1509\r\n$9\r\nfield_685\r\n$9\r\nvalue_685\r\n$10\r\nfield_1148\r\n$10\r\nvalue_1148\r\n$9\r\nfield_283\r\n$9\r\nvalue_283\r\n$10\r\nfield_1203\r\n$10\r\nvalue_1203\r\n$10\r\nfield_1262\r\n$10\r\nvalue_1262\r\n$10\r\nfield_1068\r\n$10\r\nvalue_1068\r\n$10\r\nfield_1814\r\n$10\r\nvalue_1814\r\n$9\r\nfield_957\r\n$9\r\nvalue_957\r\n$9\r\nfield_541\r\n$9\r\nvalue_541\r\n$9\r\nfield_834\r\n$9\r\nvalue_834\r\n$9\r\nfield_511\r\n$9\r\nvalue_511\r\n$9\r\nfield_244\r\n$9\r\nvalue_244\r\n$10\r\nfield_1371\r\n$10\r\nvalue_1371\r\n$10\r\nfield_1283\r\n$10\r\nvalue_1283\r\n$10\r\nfield_1076\r\n$10\r\nvalue_1076\r\n$10\r\nfield_1788\r\n$10\r\nvalue_1788\r\n$10\r\nfield_1387\r\n$10\r\nvalue_1387\r\n$9\r\nfield_615\r\n$9\r\nvalue_615\r\n$10\r\nfield_1120\r\n$10\r\nvalue_1120\r\n$10\r\nfield_1764\r\n$10\r\nvalue_1764\r\n$10\r\nfield_1323\r\n$10\r\nvalue_1323\r\n$9\r\nfield_515\r\n$9\r\nvalue_515\r\n$9\r\nfield_141\r\n$9\r\nvalue_141\r\n$10\r\nfield_1424\r\n$10\r\nvalue_1424\r\n$9\r\nfield_311\r\n$9\r\nvalue_311\r\n$10\r\nfield_1556\r\n$10\r\nvalue_1556\r\n$10\r\nfield_1507\r\n$10\r\nvalue_1507\r\n$10\r\nfield_1216\r\n$10\r\nvalue_1216\r\n$9\r\nfield_449\r\n$9\r\nvalue_449\r\n$9\r\nfield_905\r\n$9\r\nvalue_905\r\n$9\r\nfield_163\r\n$9\r\nvalue_163\r\n$9\r\nfield_786\r\n$9\r\nvalue_786\r\n$9\r\nfield_448\r\n$9\r\nvalue_448\r\n$10\r\nfield_1469\r\n$10\r\nvalue_1469\r\n$10\r\nfield_1217\r\n$10\r\nvalue_1217\r\n$9\r\nfield_641\r\n$9\r\nvalue_641\r\n$9\r\nfield_127\r\n$9\r\nvalue_127\r\n$9\r\nfield_290\r\n$9\r\nvalue_290\r\n$10\r\nfield_1348\r\n$10\r\nvalue_1348\r\n$10\r\nfield_1990\r\n$10\r\nvalue_1990\r\n$10\r\nfield_1480\r\n$10\r\nvalue_1480\r\n$10\r\nfield_1872\r\n$10\r\nvalue_1872\r\n$10\r\nfield_1478\r\n$10\r\nvalue_1478\r\n$10\r\nfield_1751\r\n$10\r\nvalue_1751\r\n$10\r\nfield_1000\r\n$10\r\nvalue_1000\r\n$10\r\nfield_1073\r\n$10\r\nvalue_1073\r\n$9\r\nfield_651\r\n$9\r\nvalue_651\r\n$8\r\nfield_77\r\n$8\r\nvalue_77\r\n$10\r\nfield_1026\r\n$10\r\nvalue_1026\r\n$10\r\nfield_1920\r\n$10\r\nvalue_1920\r\n$10\r\nfield_1396\r\n$10\r\nvalue_1396\r\n$8\r\nfield_71\r\n$8\r\nvalue_71\r\n$8\r\nfield_49\r\n$8\r\nvalue_49\r\n$9\r\nfield_280\r\n$9\r\nvalue_280\r\n$9\r\nfield_617\r\n$9\r\nvalue_617\r\n$10\r\nfield_1931\r\n$10\r\nvalue_1931\r\n$10\r\nfield_1455\r\n$10\r\nvalue_1455\r\n$10\r\nfield_1580\r\n$10\r\nvalue_1580\r\n$10\r\nfield_1152\r\n$10\r\nvalue_1152\r\n$10\r\nfield_1311\r\n$10\r\nvalue_1311\r\n$9\r\nfield_618\r\n$9\r\nvalue_618\r\n$10\r\nfield_1247\r\n$10\r\nvalue_1247\r\n$10\r\nfield_1907\r\n$10\r\nvalue_1907\r\n$10\r\nfield_1432\r\n$10\r\nvalue_1432\r\n$10\r\nfield_1895\r\n$10\r\nvalue_1895\r\n$9\r\nfield_387\r\n$9\r\nvalue_387\r\n$9\r\nfield_268\r\n$9\r\nvalue_268\r\n$9\r\nfield_616\r\n$9\r\nvalue_616\r\n$9\r\nfield_654\r\n$9\r\nvalue_654\r\n$10\r\nfield_1752\r\n$10\r\nvalue_1752\r\n$9\r\nfield_356\r\n$9\r\nvalue_356\r\n$9\r\nfield_524\r\n$9\r\nvalue_524\r\n$9\r\nfield_570\r\n$9\r\nvalue_570\r\n$10\r\nfield_1883\r\n$10\r\nvalue_1883\r\n$9\r\nfield_321\r\n$9\r\nvalue_321\r\n$8\r\nfield_35\r\n$8\r\nvalue_35\r\n$10\r\nfield_1988\r\n$10\r\nvalue_1988\r\n$10\r\nfield_1623\r\n$10\r\nvalue_1623\r\n$9\r\nfield_151\r\n$9\r\nvalue_151\r\n$9\r\nfield_917\r\n$9\r\nvalue_917\r\n$10\r\nfield_1522\r\n$10\r\nvalue_1522\r\n$10\r\nfield_1239\r\n$10\r\nvalue_1239\r\n$9\r\nfield_860\r\n$9\r\nvalue_860\r\n$10\r\nfield_1106\r\n$10\r\nvalue_1106\r\n$10\r\nfield_1444\r\n$10\r\nvalue_1444\r\n$10\r\nfield_1662\r\n$10\r\nvalue_1662\r\n$9\r\nfield_223\r\n$9\r\nvalue_223\r\n$9\r\nfield_126\r\n$9\r\nvalue_126\r\n$9\r\nfield_143\r\n$9\r\nvalue_143\r\n$9\r\nfield_224\r\n$9\r\nvalue_224\r\n$10\r\nfield_1048\r\n$10\r\nvalue_1048\r\n$10\r\nfield_1762\r\n$10\r\nvalue_1762\r\n$10\r\nfield_1536\r\n$10\r\nvalue_1536\r\n$8\r\nfield_46\r\n$8\r\nvalue_46\r\n$10\r\nfield_1266\r\n$10\r\nvalue_1266\r\n$10\r\nfield_1174\r\n$10\r\nvalue_1174\r\n$10\r\nfield_1875\r\n$10\r\nvalue_1875\r\n$8\r\nfield_92\r\n$8\r\nvalue_92\r\n$10\r\nfield_1952\r\n$10\r\nvalue_1952\r\n$9\r\nfield_341\r\n$9\r\nvalue_341\r\n$10\r\nfield_1085\r\n$10\r\nvalue_1085\r\n$9\r\nfield_852\r\n$9\r\nvalue_852\r\n$10\r\nfield_1819\r\n$10\r\nvalue_1819\r\n$10\r\nfield_1976\r\n$10\r\nvalue_1976\r\n$9\r\nfield_565\r\n$9\r\nvalue_565\r\n$10\r\nfield_1057\r\n$10\r\nvalue_1057\r\n$10\r\nfield_1171\r\n$10\r\nvalue_1171\r\n$10\r\nfield_1225\r\n$10\r\nvalue_1225\r\n$9\r\nfield_225\r\n$9\r\nvalue_225\r\n$10\r\nfield_1736\r\n$10\r\nvalue_1736\r\n$10\r\nfield_1576\r\n$10\r\nvalue_1576\r\n$9\r\nfield_921\r\n$9\r\nvalue_921\r\n$9\r\nfield_929\r\n$9\r\nvalue_929\r\n$10\r\nfield_1164\r\n$10\r\nvalue_1164\r\n$9\r\nfield_819\r\n$9\r\nvalue_819\r\n$10\r\nfield_1843\r\n$10\r\nvalue_1843\r\n$10\r\nfield_1735\r\n$10\r\nvalue_1735\r\n$10\r\nfield_1982\r\n$10\r\nvalue_1982\r\n$9\r\nfield_424\r\n$9\r\nvalue_424\r\n$9\r\nfield_231\r\n$9\r\nvalue_231\r\n$10\r\nfield_1420\r\n$10\r\nvalue_1420\r\n$10\r\nfield_1517\r\n$10\r\nvalue_1517\r\n$7\r\nfield_9\r\n$7\r\nvalue_9\r\n$10\r\nfield_1903\r\n$10\r\nvalue_1903\r\n$10\r\nfield_1655\r\n$10\r\nvalue_1655\r\n$9\r\nfield_582\r\n$9\r\nvalue_582\r\n$10\r\nfield_1896\r\n$10\r\nvalue_1896\r\n$10\r\nfield_1630\r\n$10\r\nvalue_1630\r\n$10\r\nfield_1430\r\n$10\r\nvalue_1430\r\n$9\r\nfield_488\r\n$9\r\nvalue_488\r\n$9\r\nfield_288\r\n$9\r\nvalue_288\r\n$9\r\nfield_947\r\n$9\r\nvalue_947\r\n$10\r\nfield_1078\r\n$10\r\nvalue_1078\r\n$10\r\nfield_1902\r\n$10\r\nvalue_1902\r\n$10\r\nfield_1598\r\n$10\r\nvalue_1598\r\n$10\r\nfield_1488\r\n$10\r\nvalue_1488\r\n$9\r\nfield_304\r\n$9\r\nvalue_304\r\n$10\r\nfield_1649\r\n$10\r\nvalue_1649\r\n$9\r\nfield_900\r\n$9\r\nvalue_900\r\n$9\r\nfield_802\r\n$9\r\nvalue_802\r\n$10\r\nfield_1585\r\n$10\r\nvalue_1585\r\n$10\r\nfield_1578\r\n$10\r\nvalue_1578\r\n$9\r\nfield_447\r\n$9\r\nvalue_447\r\n$9\r\nfield_281\r\n$9\r\nvalue_281\r\n$10\r\nfield_1696\r\n$10\r\nvalue_1696\r\n$9\r\nfield_194\r\n$9\r\nvalue_194\r\n$9\r\nfield_833\r\n$9\r\nvalue_833\r\n$10\r\nfield_1332\r\n$10\r\nvalue_1332\r\n$9\r\nfield_409\r\n$9\r\nvalue_409\r\n$9\r\nfield_205\r\n$9\r\nvalue_205\r\n$9\r\nfield_648\r\n$9\r\nvalue_648\r\n$9\r\nfield_391\r\n$9\r\nvalue_391\r\n$10\r\nfield_1209\r\n$10\r\nvalue_1209\r\n$10\r\nfield_1555\r\n$10\r\nvalue_1555\r\n$10\r\nfield_1523\r\n$10\r\nvalue_1523\r\n$9\r\nfield_114\r\n$9\r\nvalue_114\r\n$10\r\nfield_1182\r\n$10\r\nvalue_1182\r\n$9\r\nfield_430\r\n$9\r\nvalue_430\r\n$10\r\nfield_1222\r\n$10\r\nvalue_1222\r\n$9\r\nfield_220\r\n$9\r\nvalue_220\r\n$10\r\nfield_1691\r\n$10\r\nvalue_1691\r\n$10\r\nfield_1116\r\n$10\r\nvalue_1116\r\n$9\r\nfield_181\r\n$9\r\nvalue_181\r\n$9\r\nfield_798\r\n$9\r\nvalue_798\r\n$10\r\nfield_1978\r\n$10\r\nvalue_1978\r\n$9\r\nfield_118\r\n$9\r\nvalue_118\r\n$10\r\nfield_1248\r\n$10\r\nvalue_1248\r\n$9\r\nfield_354\r\n$9\r\nvalue_354\r\n$9\r\nfield_540\r\n$9\r\nvalue_540\r\n$10\r\nfield_1917\r\n$10\r\nvalue_1917\r\n$10\r\nfield_1548\r\n$10\r\nvalue_1548\r\n$10\r\nfield_1347\r\n$10\r\nvalue_1347\r\n$10\r\nfield_1635\r\n$10\r\nvalue_1635\r\n$10\r\nfield_1210\r\n$10\r\nvalue_1210\r\n$9\r\nfield_274\r\n$9\r\nvalue_274\r\n$9\r\nfield_305\r\n$9\r\nvalue_305\r\n$9\r\nfield_766\r\n$9\r\nvalue_766\r\n$10\r\nfield_1914\r\n$10\r\nvalue_1914\r\n$10\r\nfield_1619\r\n$10\r\nvalue_1619\r\n$9\r\nfield_503\r\n$9\r\nvalue_503\r\n$10\r\nfield_1840\r\n$10\r\nvalue_1840\r\n$9\r\nfield_643\r\n$9\r\nvalue_643\r\n$9\r\nfield_733\r\n$9\r\nvalue_733\r\n$10\r\nfield_1490\r\n$10\r\nvalue_1490\r\n$9\r\nfield_516\r\n$9\r\nvalue_516\r\n$10\r\nfield_1011\r\n$10\r\nvalue_1011\r\n$9\r\nfield_873\r\n$9\r\nvalue_873\r\n$9\r\nfield_238\r\n$9\r\nvalue_238\r\n$9\r\nfield_722\r\n$9\r\nvalue_722\r\n$10\r\nfield_1599\r\n$10\r\nvalue_1599\r\n$8\r\nfield_74\r\n$8\r\nvalue_74\r\n$10\r\nfield_1561\r\n$10\r\nvalue_1561\r\n$9\r\nfield_568\r\n$9\r\nvalue_568\r\n$10\r\nfield_1212\r\n$10\r\nvalue_1212\r\n$10\r\nfield_1080\r\n$10\r\nvalue_1080\r\n$10\r\nfield_1897\r\n$10\r\nvalue_1897\r\n$9\r\nfield_475\r\n$9\r\nvalue_475\r\n$9\r\nfield_653\r\n$9\r\nvalue_653\r\n$9\r\nfield_822\r\n$9\r\nvalue_822\r\n$10\r\nfield_1755\r\n$10\r\nvalue_1755\r\n$9\r\nfield_399\r\n$9\r\nvalue_399\r\n$9\r\nfield_193\r\n$9\r\nvalue_193\r\n$10\r\nfield_1663\r\n$10\r\nvalue_1663\r\n$10\r\nfield_1331\r\n$10\r\nvalue_1331\r\n$10\r\nfield_1474\r\n$10\r\nvalue_1474\r\n$10\r\nfield_1471\r\n$10\r\nvalue_1471\r\n$9\r\nfield_450\r\n$9\r\nvalue_450\r\n$10\r\nfield_1631\r\n$10\r\nvalue_1631\r\n$10\r\nfield_1355\r\n$10\r\nvalue_1355\r\n$9\r\nfield_918\r\n$9\r\nvalue_918\r\n$10\r\nfield_1881\r\n$10\r\nvalue_1881\r\n$9\r\nfield_123\r\n$9\r\nvalue_123\r\n$8\r\nfield_94\r\n$8\r\nvalue_94\r\n$10\r\nfield_1965\r\n$10\r\nvalue_1965\r\n$9\r\nfield_731\r\n$9\r\nvalue_731\r\n$9\r\nfield_875\r\n$9\r\nvalue_875\r\n$9\r\nfield_103\r\n$9\r\nvalue_103\r\n$10\r\nfield_1305\r\n$10\r\nvalue_1305\r\n$9\r\nfield_445\r\n$9\r\nvalue_445\r\n$10\r\nfield_1491\r\n$10\r\nvalue_1491\r\n$9\r\nfield_993\r\n$9\r\nvalue_993\r\n$9\r\nfield_619\r\n$9\r\nvalue_619\r\n$10\r\nfield_1680\r\n$10\r\nvalue_1680\r\n$10\r\nfield_1859\r\n$10\r\nvalue_1859\r\n$10\r\nfield_1302\r\n$10\r\nvalue_1302\r\n$10\r\nfield_1612\r\n$10\r\nvalue_1612\r\n$9\r\nfield_176\r\n$9\r\nvalue_176\r\n$9\r\nfield_583\r\n$9\r\nvalue_583\r\n$10\r\nfield_1969\r\n$10\r\nvalue_1969\r\n$9\r\nfield_405\r\n$9\r\nvalue_405\r\n$9\r\nfield_381\r\n$9\r\nvalue_381\r\n$9\r\nfield_891\r\n$9\r\nvalue_891\r\n$10\r\nfield_1668\r\n$10\r\nvalue_1668\r\n$10\r\nfield_1470\r\n$10\r\nvalue_1470\r\n$9\r\nfield_221\r\n$9\r\nvalue_221\r\n$9\r\nfield_528\r\n$9\r\nvalue_528\r\n$9\r\nfield_607\r\n$9\r\nvalue_607\r\n$9\r\nfield_765\r\n$9\r\nvalue_765\r\n$9\r\nfield_534\r\n$9\r\nvalue_534\r\n$9\r\nfield_481\r\n$9\r\nvalue_481\r\n$9\r\nfield_523\r\n$9\r\nvalue_523\r\n$10\r\nfield_1904\r\n$10\r\nvalue_1904\r\n$9\r\nfield_944\r\n$9\r\nvalue_944\r\n$9\r\nfield_537\r\n$9\r\nvalue_537\r\n$9\r\nfield_158\r\n$9\r\nvalue_158\r\n$9\r\nfield_806\r\n$9\r\nvalue_806\r\n$9\r\nfield_204\r\n$9\r\nvalue_204\r\n$10\r\nfield_1830\r\n$10\r\nvalue_1830\r\n$10\r\nfield_1746\r\n$10\r\nvalue_1746\r\n$10\r\nfield_1714\r\n$10\r\nvalue_1714\r\n$9\r\nfield_109\r\n$9\r\nvalue_109\r\n$9\r\nfield_818\r\n$9\r\nvalue_818\r\n$9\r\nfield_770\r\n$9\r\nvalue_770\r\n$10\r\nfield_1921\r\n$10\r\nvalue_1921\r\n$10\r\nfield_1856\r\n$10\r\nvalue_1856\r\n$10\r\nfield_1489\r\n$10\r\nvalue_1489\r\n$9\r\nfield_349\r\n$9\r\nvalue_349\r\n$10\r\nfield_1650\r\n$10\r\nvalue_1650\r\n$10\r\nfield_1929\r\n$10\r\nvalue_1929\r\n$10\r\nfield_1894\r\n$10\r\nvalue_1894\r\n$9\r\nfield_260\r\n$9\r\nvalue_260\r\n$10\r\nfield_1322\r\n$10\r\nvalue_1322\r\n$10\r\nfield_1185\r\n$10\r\nvalue_1185\r\n$9\r\nfield_627\r\n$9\r\nvalue_627\r\n$9\r\nfield_408\r\n$9\r\nvalue_408\r\n$9\r\nfield_676\r\n$9\r\nvalue_676\r\n$9\r\nfield_177\r\n$9\r\nvalue_177\r\n$8\r\nfield_16\r\n$8\r\nvalue_16\r\n$9\r\nfield_702\r\n$9\r\nvalue_702\r\n$10\r\nfield_1195\r\n$10\r\nvalue_1195\r\n$9\r\nfield_112\r\n$9\r\nvalue_112\r\n$9\r\nfield_352\r\n$9\r\nvalue_352\r\n$10\r\nfield_1129\r\n$10\r\nvalue_1129\r\n$10\r\nfield_1008\r\n$10\r\nvalue_1008\r\n$10\r\nfield_1986\r\n$10\r\nvalue_1986\r\n$9\r\nfield_864\r\n$9\r\nvalue_864\r\n$9\r\nfield_152\r\n$9\r\nvalue_152\r\n$10\r\nfield_1549\r\n$10\r\nvalue_1549\r\n$9\r\nfield_655\r\n$9\r\nvalue_655\r\n$10\r\nfield_1054\r\n$10\r\nvalue_1054\r\n$9\r\nfield_451\r\n$9\r\nvalue_451\r\n$9\r\nfield_761\r\n$9\r\nvalue_761\r\n$10\r\nfield_1269\r\n$10\r\nvalue_1269\r\n$9\r\nfield_479\r\n$9\r\nvalue_479\r\n$10\r\nfield_1687\r\n$10\r\nvalue_1687\r\n$9\r\nfield_453\r\n$9\r\nvalue_453\r\n$9\r\nfield_837\r\n$9\r\nvalue_837\r\n$9\r\nfield_402\r\n$9\r\nvalue_402\r\n$10\r\nfield_1206\r\n$10\r\nvalue_1206\r\n$9\r\nfield_129\r\n$9\r\nvalue_129\r\n$9\r\nfield_783\r\n$9\r\nvalue_783\r\n$8\r\nfield_47\r\n$8\r\nvalue_47\r\n$9\r\nfield_719\r\n$9\r\nvalue_719\r\n$9\r\nfield_782\r\n$9\r\nvalue_782\r\n$10\r\nfield_1445\r\n$10\r\nvalue_1445\r\n$9\r\nfield_379\r\n$9\r\nvalue_379\r\n$9\r\nfield_677\r\n$9\r\nvalue_677\r\n$9\r\nfield_790\r\n$9\r\nvalue_790\r\n$9\r\nfield_862\r\n$9\r\nvalue_862\r\n$10\r\nfield_1193\r\n$10\r\nvalue_1193\r\n$10\r\nfield_1089\r\n$10\r\nvalue_1089\r\n$9\r\nfield_505\r\n$9\r\nvalue_505\r\n$8\r\nfield_31\r\n$8\r\nvalue_31\r\n$9\r\nfield_924\r\n$9\r\nvalue_924\r\n$10\r\nfield_1199\r\n$10\r\nvalue_1199\r\n$10\r\nfield_1407\r\n$10\r\nvalue_1407\r\n$10\r\nfield_1688\r\n$10\r\nvalue_1688\r\n$10\r\nfield_1177\r\n$10\r\nvalue_1177\r\n$9\r\nfield_355\r\n$9\r\nvalue_355\r\n$9\r\nfield_331\r\n$9\r\nvalue_331\r\n$9\r\nfield_636\r\n$9\r\nvalue_636\r\n$10\r\nfield_1343\r\n$10\r\nvalue_1343\r\n$10\r\nfield_1835\r\n$10\r\nvalue_1835\r\n$9\r\nfield_892\r\n$9\r\nvalue_892\r\n$10\r\nfield_1692\r\n$10\r\nvalue_1692\r\n$10\r\nfield_1885\r\n$10\r\nvalue_1885\r\n$10\r\nfield_1393\r\n$10\r\nvalue_1393\r\n$9\r\nfield_384\r\n$9\r\nvalue_384\r\n$9\r\nfield_363\r\n$9\r\nvalue_363\r\n$9\r\nfield_646\r\n$9\r\nvalue_646\r\n$10\r\nfield_1071\r\n$10\r\nvalue_1071\r\n$9\r\nfield_858\r\n$9\r\nvalue_858\r\n$10\r\nfield_1834\r\n$10\r\nvalue_1834\r\n$9\r\nfield_499\r\n$9\r\nvalue_499\r\n$9\r\nfield_659\r\n$9\r\nvalue_659\r\n$10\r\nfield_1082\r\n$10\r\nvalue_1082\r\n$10\r\nfield_1614\r\n$10\r\nvalue_1614\r\n$9\r\nfield_265\r\n$9\r\nvalue_265\r\n$9\r\nfield_548\r\n$9\r\nvalue_548\r\n$10\r\nfield_1981\r\n$10\r\nvalue_1981\r\n$10\r\nfield_1356\r\n$10\r\nvalue_1356\r\n$10\r\nfield_1544\r\n$10\r\nvalue_1544\r\n$9\r\nfield_122\r\n$9\r\nvalue_122\r\n$9\r\nfield_234\r\n$9\r\nvalue_234\r\n$10\r\nfield_1697\r\n$10\r\nvalue_1697\r\n$10\r\nfield_1849\r\n$10\r\nvalue_1849\r\n$10\r\nfield_1529\r\n$10\r\nvalue_1529\r\n$10\r\nfield_1211\r\n$10\r\nvalue_1211\r\n$9\r\nfield_934\r\n$9\r\nvalue_934\r\n$10\r\nfield_1777\r\n$10\r\nvalue_1777\r\n$9\r\nfield_941\r\n$9\r\nvalue_941\r\n$9\r\nfield_235\r\n$9\r\nvalue_235\r\n$9\r\nfield_741\r\n$9\r\nvalue_741\r\n$9\r\nfield_877\r\n$9\r\nvalue_877\r\n$9\r\nfield_198\r\n$9\r\nvalue_198\r\n$10\r\nfield_1409\r\n$10\r\nvalue_1409\r\n$9\r\nfield_278\r\n$9\r\nvalue_278\r\n$10\r\nfield_1702\r\n$10\r\nvalue_1702\r\n$10\r\nfield_1620\r\n$10\r\nvalue_1620\r\n$9\r\nfield_995\r\n$9\r\nvalue_995\r\n$9\r\nfield_142\r\n$9\r\nvalue_142\r\n$9\r\nfield_269\r\n$9\r\nvalue_269\r\n$9\r\nfield_936\r\n$9\r\nvalue_936\r\n$9\r\nfield_868\r\n$9\r\nvalue_868\r\n$10\r\nfield_1041\r\n$10\r\nvalue_1041\r\n$10\r\nfield_1346\r\n$10\r\nvalue_1346\r\n$10\r\nfield_1634\r\n$10\r\nvalue_1634\r\n$9\r\nfield_871\r\n$9\r\nvalue_871\r\n$9\r\nfield_788\r\n$9\r\nvalue_788\r\n$10\r\nfield_1010\r\n$10\r\nvalue_1010\r\n$10\r\nfield_1128\r\n$10\r\nvalue_1128\r\n$9\r\nfield_791\r\n$9\r\nvalue_791\r\n$10\r\nfield_1333\r\n$10\r\nvalue_1333\r\n$9\r\nfield_413\r\n$9\r\nvalue_413\r\n$9\r\nfield_296\r\n$9\r\nvalue_296\r\n$10\r\nfield_1993\r\n$10\r\nvalue_1993\r\n$9\r\nfield_680\r\n$9\r\nvalue_680\r\n$10\r\nfield_1012\r\n$10\r\nvalue_1012\r\n$10\r\nfield_1425\r\n$10\r\nvalue_1425\r\n$10\r\nfield_1743\r\n$10\r\nvalue_1743\r\n$10\r\nfield_1531\r\n$10\r\nvalue_1531\r\n$9\r\nfield_510\r\n$9\r\nvalue_510\r\n$8\r\nfield_13\r\n$8\r\nvalue_13\r\n$10\r\nfield_1672\r\n$10\r\nvalue_1672\r\n$10\r\nfield_1361\r\n$10\r\nvalue_1361\r\n$9\r\nfield_201\r\n$9\r\nvalue_201\r\n$9\r\nfield_718\r\n$9\r\nvalue_718\r\n$10\r\nfield_1495\r\n$10\r\nvalue_1495\r\n$9\r\nfield_529\r\n$9\r\nvalue_529\r\n$10\r\nfield_1966\r\n$10\r\nvalue_1966\r\n$10\r\nfield_1658\r\n$10\r\nvalue_1658\r\n$9\r\nfield_805\r\n$9\r\nvalue_805\r\n$10\r\nfield_1818\r\n$10\r\nvalue_1818\r\n$10\r\nfield_1494\r\n$10\r\nvalue_1494\r\n$10\r\nfield_1319\r\n$10\r\nvalue_1319\r\n$9\r\nfield_431\r\n$9\r\nvalue_431\r\n$10\r\nfield_1554\r\n$10\r\nvalue_1554\r\n$9\r\nfield_380\r\n$9\r\nvalue_380\r\n$9\r\nfield_928\r\n$9\r\nvalue_928\r\n$9\r\nfield_668\r\n$9\r\nvalue_668\r\n$9\r\nfield_773\r\n$9\r\nvalue_773\r\n$10\r\nfield_1640\r\n$10\r\nvalue_1640\r\n$9\r\nfield_882\r\n$9\r\nvalue_882\r\n$9\r\nfield_897\r\n$9\r\nvalue_897\r\n$9\r\nfield_183\r\n$9\r\nvalue_183\r\n$9\r\nfield_963\r\n$9\r\nvalue_963\r\n$9\r\nfield_744\r\n$9\r\nvalue_744\r\n$9\r\nfield_971\r\n$9\r\nvalue_971\r\n$10\r\nfield_1308\r\n$10\r\nvalue_1308\r\n$9\r\nfield_734\r\n$9\r\nvalue_734\r\n$9\r\nfield_357\r\n$9\r\nvalue_357\r\n$9\r\nfield_325\r\n$9\r\nvalue_325\r\n$10\r\nfield_1935\r\n$10\r\nvalue_1935\r\n$8\r\nfield_85\r\n$8\r\nvalue_85\r\n$9\r\nfield_310\r\n$9\r\nvalue_310\r\n$10\r\nfield_1286\r\n$10\r\nvalue_1286\r\n$10\r\nfield_1994\r\n$10\r\nvalue_1994\r\n$10\r\nfield_1740\r\n$10\r\nvalue_1740\r\n$9\r\nfield_809\r\n$9\r\nvalue_809\r\n$10\r\nfield_1898\r\n$10\r\nvalue_1898\r\n$10\r\nfield_1590\r\n$10\r\nvalue_1590\r\n$10\r\nfield_1434\r\n$10\r\nvalue_1434\r\n$9\r\nfield_849\r\n$9\r\nvalue_849\r\n$10\r\nfield_1813\r\n$10\r\nvalue_1813\r\n$10\r\nfield_1415\r\n$10\r\nvalue_1415\r\n$9\r\nfield_573\r\n$9\r\nvalue_573\r\n$9\r\nfield_243\r\n$9\r\nvalue_243\r\n$10\r\nfield_1689\r\n$10\r\nvalue_1689\r\n$9\r\nfield_292\r\n$9\r\nvalue_292\r\n$8\r\nfield_42\r\n$8\r\nvalue_42\r\n$9\r\nfield_371\r\n$9\r\nvalue_371\r\n$9\r\nfield_149\r\n$9\r\nvalue_149\r\n$8\r\nfield_91\r\n$8\r\nvalue_91\r\n$10\r\nfield_1806\r\n$10\r\nvalue_1806\r\n$10\r\nfield_1753\r\n$10\r\nvalue_1753\r\n$9\r\nfield_536\r\n$9\r\nvalue_536\r\n$9\r\nfield_493\r\n$9\r\nvalue_493\r\n$9\r\nfield_792\r\n$9\r\nvalue_792\r\n$10\r\nfield_1795\r\n$10\r\nvalue_1795\r\n$10\r\nfield_1292\r\n$10\r\nvalue_1292\r\n$10\r\nfield_1785\r\n$10\r\nvalue_1785\r\n$9\r\nfield_382\r\n$9\r\nvalue_382\r\n$9\r\nfield_400\r\n$9\r\nvalue_400\r\n$10\r\nfield_1315\r\n$10\r\nvalue_1315\r\n$10\r\nfield_1093\r\n$10\r\nvalue_1093\r\n$10\r\nfield_1809\r\n$10\r\nvalue_1809\r\n$9\r\nfield_707\r\n$9\r\nvalue_707\r\n$10\r\nfield_1726\r\n$10\r\nvalue_1726\r\n$8\r\nfield_55\r\n$8\r\nvalue_55\r\n$9\r\nfield_473\r\n$9\r\nvalue_473\r\n$10\r\nfield_1213\r\n$10\r\nvalue_1213\r\n$10\r\nfield_1441\r\n$10\r\nvalue_1441\r\n$10\r\nfield_1166\r\n$10\r\nvalue_1166\r\n$8\r\nfield_95\r\n$8\r\nvalue_95\r\n$9\r\nfield_713\r\n$9\r\nvalue_713\r\n$9\r\nfield_789\r\n$9\r\nvalue_789\r\n$9\r\nfield_889\r\n$9\r\nvalue_889\r\n$10\r\nfield_1800\r\n$10\r\nvalue_1800\r\n$9\r\nfield_930\r\n$9\r\nvalue_930\r\n$10\r\nfield_1712\r\n$10\r\nvalue_1712\r\n$10\r\nfield_1340\r\n$10\r\nvalue_1340\r\n$9\r\nfield_437\r\n$9\r\nvalue_437\r\n$9\r\nfield_427\r\n$9\r\nvalue_427\r\n$9\r\nfield_359\r\n$9\r\nvalue_359\r\n$10\r\nfield_1807\r\n$10\r\nvalue_1807\r\n$10\r\nfield_1778\r\n$10\r\nvalue_1778\r\n$10\r\nfield_1191\r\n$10\r\nvalue_1191\r\n$10\r\nfield_1622\r\n$10\r\nvalue_1622\r\n$9\r\nfield_612\r\n$9\r\nvalue_612\r\n$10\r\nfield_1013\r\n$10\r\nvalue_1013\r\n$10\r\nfield_1064\r\n$10\r\nvalue_1064\r\n$9\r\nfield_874\r\n$9\r\nvalue_874\r\n$10\r\nfield_1131\r\n$10\r\nvalue_1131\r\n$9\r\nfield_624\r\n$9\r\nvalue_624\r\n$9\r\nfield_239\r\n$9\r\nvalue_239\r\n$9\r\nfield_828\r\n$9\r\nvalue_828\r\n$9\r\nfield_487\r\n$9\r\nvalue_487\r\n$10\r\nfield_1878\r\n$10\r\nvalue_1878\r\n$10\r\nfield_1609\r\n$10\r\nvalue_1609\r\n$9\r\nfield_467\r\n$9\r\nvalue_467\r\n$9\r\nfield_324\r\n$9\r\nvalue_324\r\n$9\r\nfield_689\r\n$9\r\nvalue_689\r\n$10\r\nfield_1524\r\n$10\r\nvalue_1524\r\n$9\r\nfield_727\r\n$9\r\nvalue_727\r\n$9\r\nfield_622\r\n$9\r\nvalue_622\r\n$10\r\nfield_1975\r\n$10\r\nvalue_1975\r\n$9\r\nfield_411\r\n$9\r\nvalue_411\r\n$10\r\nfield_1167\r\n$10\r\nvalue_1167\r\n$10\r\nfield_1782\r\n$10\r\nvalue_1782\r\n$10\r\nfield_1126\r\n$10\r\nvalue_1126\r\n$10\r\nfield_1571\r\n$10\r\nvalue_1571\r\n$10\r\nfield_1485\r\n$10\r\nvalue_1485\r\n$8\r\nfield_39\r\n$8\r\nvalue_39\r\n$10\r\nfield_1146\r\n$10\r\nvalue_1146\r\n$9\r\nfield_841\r\n$9\r\nvalue_841\r\n$10\r\nfield_1744\r\n$10\r\nvalue_1744\r\n$10\r\nfield_1621\r\n$10\r\nvalue_1621\r\n$10\r\nfield_1439\r\n$10\r\nvalue_1439\r\n$9\r\nfield_961\r\n$9\r\nvalue_961\r\n$10\r\nfield_1338\r\n$10\r\nvalue_1338\r\n$10\r\nfield_1358\r\n$10\r\nvalue_1358\r\n$9\r\nfield_658\r\n$9\r\nvalue_658\r\n$8\r\nfield_68\r\n$8\r\nvalue_68\r\n$10\r\nfield_1250\r\n$10\r\nvalue_1250\r\n$10\r\nfield_1722\r\n$10\r\nvalue_1722\r\n$9\r\nfield_279\r\n$9\r\nvalue_279\r\n$9\r\nfield_931\r\n$9\r\nvalue_931\r\n$9\r\nfield_857\r\n$9\r\nvalue_857\r\n$9\r\nfield_213\r\n$9\r\nvalue_213\r\n$9\r\nfield_414\r\n$9\r\nvalue_414\r\n$10\r\nfield_1324\r\n$10\r\nvalue_1324\r\n$10\r\nfield_1919\r\n$10\r\nvalue_1919\r\n$10\r\nfield_1422\r\n$10\r\nvalue_1422\r\n$8\r\nfield_58\r\n$8\r\nvalue_58\r\n$9\r\nfield_824\r\n$9\r\nvalue_824\r\n$9\r\nfield_850\r\n$9\r\nvalue_850\r\n$10\r\nfield_1618\r\n$10\r\nvalue_1618\r\n$9\r\nfield_470\r\n$9\r\nvalue_470\r\n$10\r\nfield_1629\r\n$10\r\nvalue_1629\r\n$10\r\nfield_1350\r\n$10\r\nvalue_1350\r\n$9\r\nfield_154\r\n$9\r\nvalue_154\r\n$8\r\nfield_38\r\n$8\r\nvalue_38\r\n$10\r\nfield_1136\r\n$10\r\nvalue_1136\r\n$8\r\nfield_86\r\n$8\r\nvalue_86\r\n$10\r\nfield_1860\r\n$10\r\nvalue_1860\r\n$10\r\nfield_1321\r\n$10\r\nvalue_1321\r\n$9\r\nfield_180\r\n$9\r\nvalue_180\r\n$9\r\nfield_519\r\n$9\r\nvalue_519\r\n$9\r\nfield_853\r\n$9\r\nvalue_853\r\n$9\r\nfield_898\r\n$9\r\nvalue_898\r\n$9\r\nfield_767\r\n$9\r\nvalue_767\r\n$10\r\nfield_1220\r\n$10\r\nvalue_1220\r\n$10\r\nfield_1498\r\n$10\r\nvalue_1498\r\n$10\r\nfield_1153\r\n$10\r\nvalue_1153\r\n$9\r\nfield_793\r\n$9\r\nvalue_793\r\n$10\r\nfield_1560\r\n$10\r\nvalue_1560\r\n$9\r\nfield_319\r\n$9\r\nvalue_319\r\n$10\r\nfield_1853\r\n$10\r\nvalue_1853\r\n$10\r\nfield_1476\r\n$10\r\nvalue_1476\r\n$10\r\nfield_1003\r\n$10\r\nvalue_1003\r\n$10\r\nfield_1067\r\n$10\r\nvalue_1067\r\n$9\r\nfield_182\r\n$9\r\nvalue_182\r\n$9\r\nfield_203\r\n$9\r\nvalue_203\r\n$9\r\nfield_222\r\n$9\r\nvalue_222\r\n$9\r\nfield_675\r\n$9\r\nvalue_675\r\n$10\r\nfield_1173\r\n$10\r\nvalue_1173\r\n$10\r\nfield_1458\r\n$10\r\nvalue_1458\r\n$9\r\nfield_577\r\n$9\r\nvalue_577\r\n$9\r\nfield_760\r\n$9\r\nvalue_760\r\n$10\r\nfield_1836\r\n$10\r\nvalue_1836\r\n$9\r\nfield_978\r\n$9\r\nvalue_978\r\n$10\r\nfield_1447\r\n$10\r\nvalue_1447\r\n$8\r\nfield_75\r\n$8\r\nvalue_75\r\n$9\r\nfield_161\r\n$9\r\nvalue_161\r\n$10\r\nfield_1297\r\n$10\r\nvalue_1297\r\n$10\r\nfield_1154\r\n$10\r\nvalue_1154\r\n$10\r\nfield_1030\r\n$10\r\nvalue_1030\r\n$10\r\nfield_1591\r\n$10\r\nvalue_1591\r\n$10\r\nfield_1379\r\n$10\r\nvalue_1379\r\n$9\r\nfield_186\r\n$9\r\nvalue_186\r\n$9\r\nfield_200\r\n$9\r\nvalue_200\r\n$8\r\nfield_90\r\n$8\r\nvalue_90\r\n$9\r\nfield_771\r\n$9\r\nvalue_771\r\n$9\r\nfield_861\r\n$9\r\nvalue_861\r\n$10\r\nfield_1749\r\n$10\r\nvalue_1749\r\n$8\r\nfield_69\r\n$8\r\nvalue_69\r\n$10\r\nfield_1301\r\n$10\r\nvalue_1301\r\n$10\r\nfield_1184\r\n$10\r\nvalue_1184\r\n$9\r\nfield_242\r\n$9\r\nvalue_242\r\n$9\r\nfield_566\r\n$9\r\nvalue_566\r\n$9\r\nfield_385\r\n$9\r\nvalue_385\r\n$9\r\nfield_948\r\n$9\r\nvalue_948\r\n$9\r\nfield_697\r\n$9\r\nvalue_697\r\n$7\r\nfield_1\r\n$7\r\nvalue_1\r\n$10\r\nfield_1107\r\n$10\r\nvalue_1107\r\n$9\r\nfield_476\r\n$9\r\nvalue_476\r\n$9\r\nfield_160\r\n$9\r\nvalue_160\r\n$9\r\nfield_927\r\n$9\r\nvalue_927\r\n$8\r\nfield_21\r\n$8\r\nvalue_21\r\n$7\r\nfield_3\r\n$7\r\nvalue_3\r\n$9\r\nfield_691\r\n$9\r\nvalue_691\r\n$9\r\nfield_794\r\n$9\r\nvalue_794\r\n$9\r\nfield_909\r\n$9\r\nvalue_909\r\n$10\r\nfield_1647\r\n$10\r\nvalue_1647\r\n$10\r\nfield_1608\r\n$10\r\nvalue_1608\r\n$10\r\nfield_1190\r\n$10\r\nvalue_1190\r\n$10\r\nfield_1780\r\n$10\r\nvalue_1780\r\n$10\r\nfield_1223\r\n$10\r\nvalue_1223\r\n$10\r\nfield_1661\r\n$10\r\nvalue_1661\r\n$10\r\nfield_1709\r\n$10\r\nvalue_1709\r\n$9\r\nfield_421\r\n$9\r\nvalue_421\r\n$9\r\nfield_353\r\n$9\r\nvalue_353\r\n$9\r\nfield_547\r\n$9\r\nvalue_547\r\n$9\r\nfield_429\r\n$9\r\nvalue_429\r\n$9\r\nfield_855\r\n$9\r\nvalue_855\r\n$9\r\nfield_998\r\n$9\r\nvalue_998\r\n$9\r\nfield_876\r\n$9\r\nvalue_876\r\n$10\r\nfield_1611\r\n$10\r\nvalue_1611\r\n$9\r\nfield_404\r\n$9\r\nvalue_404\r\n$9\r\nfield_839\r\n$9\r\nvalue_839\r\n$10\r\nfield_1274\r\n$10\r\nvalue_1274\r\n$9\r\nfield_145\r\n$9\r\nvalue_145\r\n$9\r\nfield_454\r\n$9\r\nvalue_454\r\n$9\r\nfield_275\r\n$9\r\nvalue_275\r\n$10\r\nfield_1406\r\n$10\r\nvalue_1406\r\n$8\r\nfield_61\r\n$8\r\nvalue_61\r\n$10\r\nfield_1221\r\n$10\r\nvalue_1221\r\n$10\r\nfield_1991\r\n$10\r\nvalue_1991\r\n$10\r\nfield_1046\r\n$10\r\nvalue_1046\r\n$10\r\nfield_1733\r\n$10\r\nvalue_1733\r\n$9\r\nfield_502\r\n$9\r\nvalue_502\r\n$9\r\nfield_116\r\n$9\r\nvalue_116\r\n$9\r\nfield_574\r\n$9\r\nvalue_574\r\n$10\r\nfield_1462\r\n$10\r\nvalue_1462\r\n$9\r\nfield_164\r\n$9\r\nvalue_164\r\n$9\r\nfield_298\r\n$9\r\nvalue_298\r\n$9\r\nfield_578\r\n$9\r\nvalue_578\r\n$10\r\nfield_1704\r\n$10\r\nvalue_1704\r\n$9\r\nfield_851\r\n$9\r\nvalue_851\r\n$10\r\nfield_1854\r\n$10\r\nvalue_1854\r\n$10\r\nfield_1303\r\n$10\r\nvalue_1303\r\n$9\r\nfield_663\r\n$9\r\nvalue_663\r\n$9\r\nfield_169\r\n$9\r\nvalue_169\r\n$10\r\nfield_1761\r\n$10\r\nvalue_1761\r\n$10\r\nfield_1653\r\n$10\r\nvalue_1653\r\n$10\r\nfield_1593\r\n$10\r\nvalue_1593\r\n$10\r\nfield_1072\r\n$10\r\nvalue_1072\r\n$9\r\nfield_215\r\n$9\r\nvalue_215\r\n$10\r\nfield_1118\r\n$10\r\nvalue_1118\r\n$9\r\nfield_859\r\n$9\r\nvalue_859\r\n$10\r\nfield_1280\r\n$10\r\nvalue_1280\r\n$9\r\nfield_159\r\n$9\r\nvalue_159\r\n$9\r\nfield_999\r\n$9\r\nvalue_999\r\n$8\r\nfield_53\r\n$8\r\nvalue_53\r\n$9\r\nfield_628\r\n$9\r\nvalue_628\r\n$10\r\nfield_1794\r\n$10\r\nvalue_1794\r\n$10\r\nfield_1097\r\n$10\r\nvalue_1097\r\n$10\r\nfield_1781\r\n$10\r\nvalue_1781\r\n$8\r\nfield_15\r\n$8\r\nvalue_15\r\n$10\r\nfield_1251\r\n$10\r\nvalue_1251\r\n$9\r\nfield_635\r\n$9\r\nvalue_635\r\n$10\r\nfield_1893\r\n$10\r\nvalue_1893\r\n$10\r\nfield_1137\r\n$10\r\nvalue_1137\r\n$8\r\nfield_41\r\n$8\r\nvalue_41\r\n$10\r\nfield_1289\r\n$10\r\nvalue_1289\r\n$9\r\nfield_339\r\n$9\r\nvalue_339\r\n$10\r\nfield_1706\r\n$10\r\nvalue_1706\r\n$9\r\nfield_937\r\n$9\r\nvalue_937\r\n$9\r\nfield_489\r\n$9\r\nvalue_489\r\n$9\r\nfield_443\r\n$9\r\nvalue_443\r\n$9\r\nfield_139\r\n$9\r\nvalue_139\r\n$10\r\nfield_1530\r\n$10\r\nvalue_1530\r\n$10\r\nfield_1141\r\n$10\r\nvalue_1141\r\n$10\r\nfield_1367\r\n$10\r\nvalue_1367\r\n$10\r\nfield_1117\r\n$10\r\nvalue_1117\r\n$9\r\nfield_508\r\n$9\r\nvalue_508\r\n$10\r\nfield_1910\r\n$10\r\nvalue_1910\r\n$10\r\nfield_1320\r\n$10\r\nvalue_1320\r\n$8\r\nfield_19\r\n$8\r\nvalue_19\r\n$10\r\nfield_1045\r\n$10\r\nvalue_1045\r\n$10\r\nfield_1105\r\n$10\r\nvalue_1105\r\n$10\r\nfield_1750\r\n$10\r\nvalue_1750\r\n$10\r\nfield_1941\r\n$10\r\nvalue_1941\r\n$10\r\nfield_1351\r\n$10\r\nvalue_1351\r\n$10\r\nfield_1389\r\n$10\r\nvalue_1389\r\n$9\r\nfield_512\r\n$9\r\nvalue_512\r\n$10\r\nfield_1372\r\n$10\r\nvalue_1372\r\n$9\r\nfield_497\r\n$9\r\nvalue_497\r\n$9\r\nfield_922\r\n$9\r\nvalue_922\r\n$10\r\nfield_1038\r\n$10\r\nvalue_1038\r\n$10\r\nfield_1246\r\n$10\r\nvalue_1246\r\n$9\r\nfield_683\r\n$9\r\nvalue_683\r\n$9\r\nfield_920\r\n$9\r\nvalue_920\r\n$9\r\nfield_679\r\n$9\r\nvalue_679\r\n$9\r\nfield_729\r\n$9\r\nvalue_729\r\n$10\r\nfield_1876\r\n$10\r\nvalue_1876\r\n$10\r\nfield_1855\r\n$10\r\nvalue_1855\r\n$10\r\nfield_1681\r\n$10\r\nvalue_1681\r\n$10\r\nfield_1316\r\n$10\r\nvalue_1316\r\n$10\r\nfield_1155\r\n$10\r\nvalue_1155\r\n$8\r\nfield_17\r\n$8\r\nvalue_17\r\n$9\r\nfield_836\r\n$9\r\nvalue_836\r\n$10\r\nfield_1084\r\n$10\r\nvalue_1084\r\n$10\r\nfield_1477\r\n$10\r\nvalue_1477\r\n$10\r\nfield_1870\r\n$10\r\nvalue_1870\r\n$8\r\nfield_72\r\n$8\r\nvalue_72\r\n$10\r\nfield_1686\r\n$10\r\nvalue_1686\r\n$10\r\nfield_1603\r\n$10\r\nvalue_1603\r\n$10\r\nfield_1583\r\n$10\r\nvalue_1583\r\n$9\r\nfield_795\r\n$9\r\nvalue_795\r\n$8\r\nfield_34\r\n$8\r\nvalue_34\r\n$10\r\nfield_1913\r\n$10\r\nvalue_1913\r\n$10\r\nfield_1353\r\n$10\r\nvalue_1353\r\n$9\r\nfield_498\r\n$9\r\nvalue_498\r\n$10\r\nfield_1701\r\n$10\r\nvalue_1701\r\n$10\r\nfield_1633\r\n$10\r\nvalue_1633\r\n$10\r\nfield_1382\r\n$10\r\nvalue_1382\r\n$9\r\nfield_598\r\n$9\r\nvalue_598\r\n$7\r\nfield_2\r\n$7\r\nvalue_2\r\n$10\r\nfield_1699\r\n$10\r\nvalue_1699\r\n$9\r\nfield_148\r\n$9\r\nvalue_148\r\n$8\r\nfield_25\r\n$8\r\nvalue_25\r\n$10\r\nfield_1514\r\n$10\r\nvalue_1514\r\n$10\r\nfield_1940\r\n$10\r\nvalue_1940\r\n$10\r\nfield_1282\r\n$10\r\nvalue_1282\r\n$10\r\nfield_1034\r\n$10\r\nvalue_1034\r\n$10\r\nfield_1846\r\n$10\r\nvalue_1846\r\n$10\r\nfield_1159\r\n$10\r\nvalue_1159\r\n$10\r\nfield_1092\r\n$10\r\nvalue_1092\r\n$9\r\nfield_645\r\n$9\r\nvalue_645\r\n$9\r\nfield_434\r\n$9\r\nvalue_434\r\n$10\r\nfield_1007\r\n$10\r\nvalue_1007\r\n$10\r\nfield_1763\r\n$10\r\nvalue_1763\r\n$10\r\nfield_1928\r\n$10\r\nvalue_1928\r\n$10\r\nfield_1792\r\n$10\r\nvalue_1792\r\n$10\r\nfield_1264\r\n$10\r\nvalue_1264\r\n$9\r\nfield_179\r\n$9\r\nvalue_179\r\n$9\r\nfield_994\r\n$9\r\nvalue_994\r\n$9\r\nfield_207\r\n$9\r\nvalue_207\r\n$10\r\nfield_1588\r\n$10\r\nvalue_1588\r\n$9\r\nfield_546\r\n$9\r\nvalue_546\r\n$9\r\nfield_738\r\n$9\r\nvalue_738\r\n$10\r\nfield_1345\r\n$10\r\nvalue_1345\r\n$10\r\nfield_1336\r\n$10\r\nvalue_1336\r\n$9\r\nfield_986\r\n$9\r\nvalue_986\r\n$10\r\nfield_1032\r\n$10\r\nvalue_1032\r\n$9\r\nfield_307\r\n$9\r\nvalue_307\r\n$10\r\nfield_1457\r\n$10\r\nvalue_1457\r\n$9\r\nfield_157\r\n$9\r\nvalue_157\r\n$9\r\nfield_401\r\n$9\r\nvalue_401\r\n$8\r\nfield_62\r\n$8\r\nvalue_62\r\n$10\r\nfield_1866\r\n$10\r\nvalue_1866\r\n$10\r\nfield_1337\r\n$10\r\nvalue_1337\r\n$10\r\nfield_1121\r\n$10\r\nvalue_1121\r\n$10\r\nfield_1656\r\n$10\r\nvalue_1656\r\n$10\r\nfield_1984\r\n$10\r\nvalue_1984\r\n$10\r\nfield_1314\r\n$10\r\nvalue_1314\r\n$9\r\nfield_452\r\n$9\r\nvalue_452\r\n$9\r\nfield_412\r\n$9\r\nvalue_412\r\n$10\r\nfield_1711\r\n$10\r\nvalue_1711\r\n$10\r\nfield_1685\r\n$10\r\nvalue_1685\r\n$10\r\nfield_1589\r\n$10\r\nvalue_1589\r\n$10\r\nfield_1841\r\n$10\r\nvalue_1841\r\n$10\r\nfield_1265\r\n$10\r\nvalue_1265\r\n$9\r\nfield_950\r\n$9\r\nvalue_950\r\n$9\r\nfield_248\r\n$9\r\nvalue_248\r\n$9\r\nfield_474\r\n$9\r\nvalue_474\r\n$10\r\nfield_1600\r\n$10\r\nvalue_1600\r\n$9\r\nfield_932\r\n$9\r\nvalue_932\r\n$9\r\nfield_974\r\n$9\r\nvalue_974\r\n$10\r\nfield_1867\r\n$10\r\nvalue_1867\r\n$9\r\nfield_184\r\n$9\r\nvalue_184\r\n$10\r\nfield_1454\r\n$10\r\nvalue_1454\r\n$10\r\nfield_1370\r\n$10\r\nvalue_1370\r\n$10\r\nfield_1354\r\n$10\r\nvalue_1354\r\n$10\r\nfield_1574\r\n$10\r\nvalue_1574\r\n$10\r\nfield_1276\r\n$10\r\nvalue_1276\r\n$10\r\nfield_1169\r\n$10\r\nvalue_1169\r\n$9\r\nfield_608\r\n$9\r\nvalue_608\r\n$9\r\nfield_711\r\n$9\r\nvalue_711\r\n$9\r\nfield_542\r\n$9\r\nvalue_542\r\n$9\r\nfield_153\r\n$9\r\nvalue_153\r\n$10\r\nfield_1850\r\n$10\r\nvalue_1850\r\n$10\r\nfield_1261\r\n$10\r\nvalue_1261\r\n$9\r\nfield_332\r\n$9\r\nvalue_332\r\n$9\r\nfield_674\r\n$9\r\nvalue_674\r\n$9\r\nfield_211\r\n$9\r\nvalue_211\r\n$10\r\nfield_1001\r\n$10\r\nvalue_1001\r\n$10\r\nfield_1412\r\n$10\r\nvalue_1412\r\n$10\r\nfield_1399\r\n$10\r\nvalue_1399\r\n$9\r\nfield_465\r\n$9\r\nvalue_465\r\n$10\r\nfield_1720\r\n$10\r\nvalue_1720\r\n$9\r\nfield_463\r\n$9\r\nvalue_463\r\n$9\r\nfield_478\r\n$9\r\nvalue_478\r\n$10\r\nfield_1703\r\n$10\r\nvalue_1703\r\n$10\r\nfield_1613\r\n$10\r\nvalue_1613\r\n$9\r\nfield_364\r\n$9\r\nvalue_364\r\n$9\r\nfield_614\r\n$9\r\nvalue_614\r\n$7\r\nfield_4\r\n$7\r\nvalue_4\r\n$10\r\nfield_1851\r\n$10\r\nvalue_1851\r\n$10\r\nfield_1452\r\n$10\r\nvalue_1452\r\n$9\r\nfield_323\r\n$9\r\nvalue_323\r\n$10\r\nfield_1124\r\n$10\r\nvalue_1124\r\n$8\r\nfield_33\r\n$8\r\nvalue_33\r\n$10\r\nfield_1233\r\n$10\r\nvalue_1233\r\n$9\r\nfield_590\r\n$9\r\nvalue_590\r\n$10\r\nfield_1526\r\n$10\r\nvalue_1526\r\n$10\r\nfield_1099\r\n$10\r\nvalue_1099\r\n$10\r\nfield_1075\r\n$10\r\nvalue_1075\r\n$10\r\nfield_1014\r\n$10\r\nvalue_1014\r\n$10\r\nfield_1090\r\n$10\r\nvalue_1090\r\n$10\r\nfield_1180\r\n$10\r\nvalue_1180\r\n$9\r\nfield_128\r\n$9\r\nvalue_128\r\n$10\r\nfield_1344\r\n$10\r\nvalue_1344\r\n$9\r\nfield_106\r\n$9\r\nvalue_106\r\n$10\r\nfield_1670\r\n$10\r\nvalue_1670\r\n$9\r\nfield_587\r\n$9\r\nvalue_587\r\n$10\r\nfield_1694\r\n$10\r\nvalue_1694\r\n$9\r\nfield_983\r\n$9\r\nvalue_983\r\n$9\r\nfield_688\r\n$9\r\nvalue_688\r\n$9\r\nfield_185\r\n$9\r\nvalue_185\r\n$9\r\nfield_132\r\n$9\r\nvalue_132\r\n$10\r\nfield_1545\r\n$10\r\nvalue_1545\r\n$9\r\nfield_672\r\n$9\r\nvalue_672\r\n$10\r\nfield_1102\r\n$10\r\nvalue_1102\r\n$9\r\nfield_209\r\n$9\r\nvalue_209\r\n$10\r\nfield_1291\r\n$10\r\nvalue_1291\r\n$10\r\nfield_1453\r\n$10\r\nvalue_1453\r\n$9\r\nfield_340\r\n$9\r\nvalue_340\r\n$9\r\nfield_329\r\n$9\r\nvalue_329\r\n$9\r\nfield_742\r\n$9\r\nvalue_742\r\n$10\r\nfield_1540\r\n$10\r\nvalue_1540\r\n$9\r\nfield_907\r\n$9\r\nvalue_907\r\n$10\r\nfield_1742\r\n$10\r\nvalue_1742\r\n$9\r\nfield_168\r\n$9\r\nvalue_168\r\n$9\r\nfield_115\r\n$9\r\nvalue_115\r\n$9\r\nfield_926\r\n$9\r\nvalue_926\r\n$9\r\nfield_327\r\n$9\r\nvalue_327\r\n$10\r\nfield_1532\r\n$10\r\nvalue_1532\r\n$9\r\nfield_682\r\n$9\r\nvalue_682\r\n$10\r\nfield_1882\r\n$10\r\nvalue_1882\r\n$8\r\nfield_30\r\n$8\r\nvalue_30\r\n$9\r\nfield_778\r\n$9\r\nvalue_778\r\n$10\r\nfield_1974\r\n$10\r\nvalue_1974\r\n$9\r\nfield_236\r\n$9\r\nvalue_236\r\n$10\r\nfield_1369\r\n$10\r\nvalue_1369\r\n$10\r\nfield_1948\r\n$10\r\nvalue_1948\r\n$10\r\nfield_1756\r\n$10\r\nvalue_1756\r\n$10\r\nfield_1410\r\n$10\r\nvalue_1410\r\n$9\r\nfield_518\r\n$9\r\nvalue_518\r\n$9\r\nfield_133\r\n$9\r\nvalue_133\r\n$10\r\nfield_1228\r\n$10\r\nvalue_1228\r\n$9\r\nfield_124\r\n$9\r\nvalue_124\r\n$10\r\nfield_1110\r\n$10\r\nvalue_1110\r\n$10\r\nfield_1334\r\n$10\r\nvalue_1334\r\n$10\r\nfield_1475\r\n$10\r\nvalue_1475\r\n$9\r\nfield_501\r\n$9\r\nvalue_501\r\n$9\r\nfield_962\r\n$9\r\nvalue_962\r\n$9\r\nfield_455\r\n$9\r\nvalue_455\r\n$9\r\nfield_342\r\n$9\r\nvalue_342\r\n$9\r\nfield_830\r\n$9\r\nvalue_830\r\n$10\r\nfield_1715\r\n$10\r\nvalue_1715\r\n$10\r\nfield_1197\r\n$10\r\nvalue_1197\r\n$9\r\nfield_751\r\n$9\r\nvalue_751\r\n$10\r\nfield_1504\r\n$10\r\nvalue_1504\r\n$9\r\nfield_187\r\n$9\r\nvalue_187\r\n$9\r\nfield_156\r\n$9\r\nvalue_156\r\n$9\r\nfield_199\r\n$9\r\nvalue_199\r\n$9\r\nfield_972\r\n$9\r\nvalue_972\r\n$10\r\nfield_1468\r\n$10\r\nvalue_1468\r\n$9\r\nfield_884\r\n$9\r\nvalue_884\r\n$10\r\nfield_1077\r\n$10\r\nvalue_1077\r\n$10\r\nfield_1718\r\n$10\r\nvalue_1718\r\n$10\r\nfield_1481\r\n$10\r\nvalue_1481\r\n$9\r\nfield_420\r\n$9\r\nvalue_420\r\n$9\r\nfield_764\r\n$9\r\nvalue_764\r\n$10\r\nfield_1257\r\n$10\r\nvalue_1257\r\n$8\r\nfield_65\r\n$8\r\nvalue_65\r\n$10\r\nfield_1021\r\n$10\r\nvalue_1021\r\n$9\r\nfield_328\r\n$9\r\nvalue_328\r\n$9\r\nfield_984\r\n$9\r\nvalue_984\r\n$9\r\nfield_581\r\n$9\r\nvalue_581\r\n$10\r\nfield_1374\r\n$10\r\nvalue_1374\r\n$9\r\nfield_271\r\n$9\r\nvalue_271\r\n$9\r\nfield_407\r\n$9\r\nvalue_407\r\n$9\r\nfield_749\r\n$9\r\nvalue_749\r\n$10\r\nfield_1863\r\n$10\r\nvalue_1863\r\n$10\r\nfield_1502\r\n$10\r\nvalue_1502\r\n$8\r\nfield_23\r\n$8\r\nvalue_23\r\n$9\r\nfield_131\r\n$9\r\nvalue_131\r\n$9\r\nfield_190\r\n$9\r\nvalue_190\r\n$9\r\nfield_678\r\n$9\r\nvalue_678\r\n$9\r\nfield_273\r\n$9\r\nvalue_273\r\n$9\r\nfield_705\r\n$9\r\nvalue_705\r\n$9\r\nfield_403\r\n$9\r\nvalue_403\r\n$9\r\nfield_389\r\n$9\r\nvalue_389\r\n$9\r\nfield_908\r\n$9\r\nvalue_908\r\n$10\r\nfield_1916\r\n$10\r\nvalue_1916\r\n$10\r\nfield_1079\r\n$10\r\nvalue_1079\r\n$9\r\nfield_543\r\n$9\r\nvalue_543\r\n$9\r\nfield_415\r\n$9\r\nvalue_415\r\n$9\r\nfield_696\r\n$9\r\nvalue_696\r\n$10\r\nfield_1505\r\n$10\r\nvalue_1505\r\n$10\r\nfield_1376\r\n$10\r\nvalue_1376\r\n$10\r\nfield_1127\r\n$10\r\nvalue_1127\r\n$10\r\nfield_1861\r\n$10\r\nvalue_1861\r\n$10\r\nfield_1771\r\n$10\r\nvalue_1771\r\n$9\r\nfield_580\r\n$9\r\nvalue_580\r\n$10\r\nfield_1654\r\n$10\r\nvalue_1654\r\n$10\r\nfield_1684\r\n$10\r\nvalue_1684\r\n$10\r\nfield_1572\r\n$10\r\nvalue_1572\r\n$10\r\nfield_1798\r\n$10\r\nvalue_1798\r\n$9\r\nfield_602\r\n$9\r\nvalue_602\r\n$9\r\nfield_422\r\n$9\r\nvalue_422\r\n$9\r\nfield_945\r\n$9\r\nvalue_945\r\n$10\r\nfield_1879\r\n$10\r\nvalue_1879\r\n$9\r\nfield_551\r\n$9\r\nvalue_551\r\n$10\r\nfield_1953\r\n$10\r\nvalue_1953\r\n$10\r\nfield_1551\r\n$10\r\nvalue_1551\r\n$9\r\nfield_375\r\n$9\r\nvalue_375\r\n$10\r\nfield_1723\r\n$10\r\nvalue_1723\r\n$10\r\nfield_1383\r\n$10\r\nvalue_1383\r\n$10\r\nfield_1459\r\n$10\r\nvalue_1459\r\n$8\r\nfield_73\r\n$8\r\nvalue_73\r\n$9\r\nfield_800\r\n$9\r\nvalue_800\r\n$10\r\nfield_1758\r\n$10\r\nvalue_1758\r\n$9\r\nfield_652\r\n$9\r\nvalue_652\r\n$9\r\nfield_896\r\n$9\r\nvalue_896\r\n$10\r\nfield_1944\r\n$10\r\nvalue_1944\r\n$10\r\nfield_1943\r\n$10\r\nvalue_1943\r\n$9\r\nfield_246\r\n$9\r\nvalue_246\r\n$10\r\nfield_1327\r\n$10\r\nvalue_1327\r\n$9\r\nfield_361\r\n$9\r\nvalue_361\r\n$10\r\nfield_1386\r\n$10\r\nvalue_1386\r\n$9\r\nfield_982\r\n$9\r\nvalue_982\r\n$10\r\nfield_1207\r\n$10\r\nvalue_1207\r\n$9\r\nfield_728\r\n$9\r\nvalue_728\r\n$10\r\nfield_1831\r\n$10\r\nvalue_1831\r\n$8\r\nfield_44\r\n$8\r\nvalue_44\r\n$9\r\nfield_272\r\n$9\r\nvalue_272\r\n$8\r\nfield_45\r\n$8\r\nvalue_45\r\n$9\r\nfield_842\r\n$9\r\nvalue_842\r\n$10\r\nfield_1181\r\n$10\r\nvalue_1181\r\n$9\r\nfield_113\r\n$9\r\nvalue_113\r\n$8\r\nfield_24\r\n$8\r\nvalue_24\r\n$10\r\nfield_1100\r\n$10\r\nvalue_1100\r\n$10\r\nfield_1115\r\n$10\r\nvalue_1115\r\n$10\r\nfield_1805\r\n$10\r\nvalue_1805\r\n$9\r\nfield_136\r\n$9\r\nvalue_136\r\n$10\r\nfield_1708\r\n$10\r\nvalue_1708\r\n$9\r\nfield_491\r\n$9\r\nvalue_491\r\n$10\r\nfield_1006\r\n$10\r\nvalue_1006\r\n$10\r\nfield_1845\r\n$10\r\nvalue_1845\r\n$10\r\nfield_1803\r\n$10\r\nvalue_1803\r\n$10\r\nfield_1659\r\n$10\r\nvalue_1659\r\n$10\r\nfield_1020\r\n$10\r\nvalue_1020\r\n$10\r\nfield_1955\r\n$10\r\nvalue_1955\r\n$10\r\nfield_1908\r\n$10\r\nvalue_1908\r\n$10\r\nfield_1815\r\n$10\r\nvalue_1815\r\n$10\r\nfield_1122\r\n$10\r\nvalue_1122\r\n$9\r\nfield_740\r\n$9\r\nvalue_740\r\n$10\r\nfield_1968\r\n$10\r\nvalue_1968\r\n$10\r\nfield_1821\r\n$10\r\nvalue_1821\r\n$9\r\nfield_344\r\n$9\r\nvalue_344\r\n$9\r\nfield_687\r\n$9\r\nvalue_687\r\n$10\r\nfield_1890\r\n$10\r\nvalue_1890\r\n$9\r\nfield_808\r\n$9\r\nvalue_808\r\n$10\r\nfield_1377\r\n$10\r\nvalue_1377\r\n$10\r\nfield_1140\r\n$10\r\nvalue_1140\r\n$10\r\nfield_1095\r\n$10\r\nvalue_1095\r\n$10\r\nfield_1385\r\n$10\r\nvalue_1385\r\n$9\r\nfield_823\r\n$9\r\nvalue_823\r\n$10\r\nfield_1508\r\n$10\r\nvalue_1508\r\n$10\r\nfield_1359\r\n$10\r\nvalue_1359\r\n$10\r\nfield_1568\r\n$10\r\nvalue_1568\r\n$10\r\nfield_1330\r\n$10\r\nvalue_1330\r\n$9\r\nfield_432\r\n$9\r\nvalue_432\r\n$10\r\nfield_1643\r\n$10\r\nvalue_1643\r\n$8\r\nfield_56\r\n$8\r\nvalue_56\r\n$9\r\nfield_976\r\n$9\r\nvalue_976\r\n$10\r\nfield_1888\r\n$10\r\nvalue_1888\r\n$10\r\nfield_1373\r\n$10\r\nvalue_1373\r\n$9\r\nfield_100\r\n$9\r\nvalue_100\r\n$9\r\nfield_173\r\n$9\r\nvalue_173\r\n$9\r\nfield_699\r\n$9\r\nvalue_699\r\n$10\r\nfield_1671\r\n$10\r\nvalue_1671\r\n$10\r\nfield_1639\r\n$10\r\nvalue_1639\r\n$9\r\nfield_550\r\n$9\r\nvalue_550\r\n$10\r\nfield_1326\r\n$10\r\nvalue_1326\r\n$9\r\nfield_772\r\n$9\r\nvalue_772\r\n$9\r\nfield_863\r\n$9\r\nvalue_863\r\n$9\r\nfield_887\r\n$9\r\nvalue_887\r\n$10\r\nfield_1461\r\n$10\r\nvalue_1461\r\n$10\r\nfield_1218\r\n$10\r\nvalue_1218\r\n$9\r\nfield_428\r\n$9\r\nvalue_428\r\n$10\r\nfield_1134\r\n$10\r\nvalue_1134\r\n$9\r\nfield_351\r\n$9\r\nvalue_351\r\n$9\r\nfield_486\r\n$9\r\nvalue_486\r\n$9\r\nfield_647\r\n$9\r\nvalue_647\r\n$10\r\nfield_1151\r\n$10\r\nvalue_1151\r\n$10\r\nfield_1973\r\n$10\r\nvalue_1973\r\n$10\r\nfield_1757\r\n$10\r\nvalue_1757\r\n$9\r\nfield_796\r\n$9\r\nvalue_796\r\n$10\r\nfield_1810\r\n$10\r\nvalue_1810\r\n$10\r\nfield_1518\r\n$10\r\nvalue_1518\r\n$9\r\nfield_737\r\n$9\r\nvalue_737\r\n$10\r\nfield_1844\r\n$10\r\nvalue_1844\r\n$8\r\nfield_93\r\n$8\r\nvalue_93\r\n$10\r\nfield_1466\r\n$10\r\nvalue_1466\r\n$10\r\nfield_1232\r\n$10\r\nvalue_1232\r\n$9\r\nfield_333\r\n$9\r\nvalue_333\r\n$10\r\nfield_1970\r\n$10\r\nvalue_1970\r\n$10\r\nfield_1624\r\n$10\r\nvalue_1624\r\n$10\r\nfield_1760\r\n$10\r\nvalue_1760\r\n$9\r\nfield_532\r\n$9\r\nvalue_532\r\n$9\r\nfield_257\r\n$9\r\nvalue_257\r\n$10\r\nfield_1394\r\n$10\r\nvalue_1394\r\n$10\r\nfield_1226\r\n$10\r\nvalue_1226\r\n$9\r\nfield_438\r\n$9\r\nvalue_438\r\n$9\r\nfield_178\r\n$9\r\nvalue_178\r\n$10\r\nfield_1808\r\n$10\r\nvalue_1808\r\n$9\r\nfield_656\r\n$9\r\nvalue_656\r\n$9\r\nfield_914\r\n$9\r\nvalue_914\r\n$10\r\nfield_1515\r\n$10\r\nvalue_1515\r\n$9\r\nfield_943\r\n$9\r\nvalue_943\r\n$10\r\nfield_1559\r\n$10\r\nvalue_1559\r\n$10\r\nfield_1678\r\n$10\r\nvalue_1678\r\n$9\r\nfield_610\r\n$9\r\nvalue_610\r\n$9\r\nfield_171\r\n$9\r\nvalue_171\r\n$9\r\nfield_726\r\n$9\r\nvalue_726\r\n$9\r\nfield_368\r\n$9\r\nvalue_368\r\n$9\r\nfield_803\r\n$9\r\nvalue_803\r\n$10\r\nfield_1436\r\n$10\r\nvalue_1436\r\n$9\r\nfield_704\r\n$9\r\nvalue_704\r\n$10\r\nfield_1392\r\n$10\r\nvalue_1392\r\n$10\r\nfield_1025\r\n$10\r\nvalue_1025\r\n$9\r\nfield_378\r\n$9\r\nvalue_378\r\n$9\r\nfield_270\r\n$9\r\nvalue_270\r\n$9\r\nfield_946\r\n$9\r\nvalue_946\r\n$9\r\nfield_195\r\n$9\r\nvalue_195\r\n$9\r\nfield_735\r\n$9\r\nvalue_735\r\n$9\r\nfield_779\r\n$9\r\nvalue_779\r\n$9\r\nfield_314\r\n$9\r\nvalue_314\r\n$10\r\nfield_1243\r\n$10\r\nvalue_1243\r\n$9\r\nfield_843\r\n$9\r\nvalue_843\r\n$9\r\nfield_472\r\n$9\r\nvalue_472\r\n$10\r\nfield_1074\r\n$10\r\nvalue_1074\r\n$10\r\nfield_1980\r\n$10\r\nvalue_1980\r\n$10\r\nfield_1569\r\n$10\r\nvalue_1569\r\n$10\r\nfield_1258\r\n$10\r\nvalue_1258\r\n$9\r\nfield_599\r\n$9\r\nvalue_599\r\n$9\r\nfield_101\r\n$9\r\nvalue_101\r\n$9\r\nfield_996\r\n$9\r\nvalue_996\r\n$10\r\nfield_1275\r\n$10\r\nvalue_1275\r\n$9\r\nfield_629\r\n$9\r\nvalue_629\r\n$10\r\nfield_1065\r\n$10\r\nvalue_1065\r\n$9\r\nfield_477\r\n$9\r\nvalue_477\r\n$10\r\nfield_1765\r\n$10\r\nvalue_1765\r\n$9\r\nfield_642\r\n$9\r\nvalue_642\r\n$9\r\nfield_747\r\n$9\r\nvalue_747\r\n$10\r\nfield_1426\r\n$10\r\nvalue_1426\r\n$10\r\nfield_1268\r\n$10\r\nvalue_1268\r\n$9\r\nfield_684\r\n$9\r\nvalue_684\r\n$10\r\nfield_1942\r\n$10\r\nvalue_1942\r\n$9\r\nfield_625\r\n$9\r\nvalue_625\r\n$9\r\nfield_621\r\n$9\r\nvalue_621\r\n$10\r\nfield_1061\r\n$10\r\nvalue_1061\r\n$9\r\nfield_533\r\n$9\r\nvalue_533\r\n$9\r\nfield_309\r\n$9\r\nvalue_309\r\n$9\r\nfield_725\r\n$9\r\nvalue_725\r\n$10\r\nfield_1192\r\n$10\r\nvalue_1192\r\n$10\r\nfield_1482\r\n$10\r\nvalue_1482\r\n$8\r\nfield_96\r\n$8\r\nvalue_96\r\n$10\r\nfield_1695\r\n$10\r\nvalue_1695\r\n$10\r\nfield_1005\r\n$10\r\nvalue_1005\r\n$10\r\nfield_1983\r\n$10\r\nvalue_1983\r\n$9\r\nfield_632\r\n$9\r\nvalue_632\r\n$9\r\nfield_867\r\n$9\r\nvalue_867\r\n$9\r\nfield_938\r\n$9\r\nvalue_938\r\n$10\r\nfield_1271\r\n$10\r\nvalue_1271\r\n$9\r\nfield_838\r\n$9\r\nvalue_838\r\n$9\r\nfield_750\r\n$9\r\nvalue_750\r\n$9\r\nfield_812\r\n$9\r\nvalue_812\r\n$9\r\nfield_579\r\n$9\r\nvalue_579\r\n$10\r\nfield_1438\r\n$10\r\nvalue_1438\r\n$9\r\nfield_347\r\n$9\r\nvalue_347\r\n$10\r\nfield_1950\r\n$10\r\nvalue_1950\r\n$9\r\nfield_365\r\n$9\r\nvalue_365\r\n$10\r\nfield_1290\r\n$10\r\nvalue_1290\r\n$10\r\nfield_1909\r\n$10\r\nvalue_1909\r\n$10\r\nfield_1318\r\n$10\r\nvalue_1318\r\n$9\r\nfield_233\r\n$9\r\nvalue_233\r\n$10\r\nfield_1329\r\n$10\r\nvalue_1329\r\n$9\r\nfield_372\r\n$9\r\nvalue_372\r\n$9\r\nfield_563\r\n$9\r\nvalue_563\r\n$9\r\nfield_601\r\n$9\r\nvalue_601\r\n$10\r\nfield_1607\r\n$10\r\nvalue_1607\r\n$10\r\nfield_1553\r\n$10\r\nvalue_1553\r\n$9\r\nfield_780\r\n$9\r\nvalue_780\r\n$9\r\nfield_262\r\n$9\r\nvalue_262\r\n$9\r\nfield_526\r\n$9\r\nvalue_526\r\n$9\r\nfield_620\r\n$9\r\nvalue_620\r\n$9\r\nfield_146\r\n$9\r\nvalue_146\r\n$10\r\nfield_1874\r\n$10\r\nvalue_1874\r\n$10\r\nfield_1273\r\n$10\r\nvalue_1273\r\n$10\r\nfield_1979\r\n$10\r\nvalue_1979\r\n$9\r\nfield_442\r\n$9\r\nvalue_442\r\n$10\r\nfield_1281\r\n$10\r\nvalue_1281\r\n$10\r\nfield_1401\r\n$10\r\nvalue_1401\r\n$9\r\nfield_468\r\n$9\r\nvalue_468\r\n$10\r\nfield_1682\r\n$10\r\nvalue_1682\r\n$10\r\nfield_1577\r\n$10\r\nvalue_1577\r\n$8\r\nfield_98\r\n$8\r\nvalue_98\r\n$10\r\nfield_1015\r\n$10\r\nvalue_1015\r\n$9\r\nfield_393\r\n$9\r\nvalue_393\r\n$9\r\nfield_700\r\n$9\r\nvalue_700\r\n$10\r\nfield_1139\r\n$10\r\nvalue_1139\r\n$9\r\nfield_435\r\n$9\r\nvalue_435\r\n$9\r\nfield_815\r\n$9\r\nvalue_815\r\n$10\r\nfield_1812\r\n$10\r\nvalue_1812\r\n$9\r\nfield_277\r\n$9\r\nvalue_277\r\n$10\r\nfield_1899\r\n$10\r\nvalue_1899\r\n$10\r\nfield_1253\r\n$10\r\nvalue_1253\r\n$9\r\nfield_902\r\n$9\r\nvalue_902\r\n$10\r\nfield_1049\r\n$10\r\nvalue_1049\r\n$10\r\nfield_1925\r\n$10\r\nvalue_1925\r\n$10\r\nfield_1448\r\n$10\r\nvalue_1448\r\n$9\r\nfield_254\r\n$9\r\nvalue_254\r\n$9\r\nfield_967\r\n$9\r\nvalue_967\r\n$10\r\nfield_1143\r\n$10\r\nvalue_1143\r\n$10\r\nfield_1101\r\n$10\r\nvalue_1101\r\n$10\r\nfield_1293\r\n$10\r\nvalue_1293\r\n$9\r\nfield_989\r\n$9\r\nvalue_989\r\n$9\r\nfield_232\r\n$9\r\nvalue_232\r\n$10\r\nfield_1552\r\n$10\r\nvalue_1552\r\n$10\r\nfield_1235\r\n$10\r\nvalue_1235\r\n$10\r\nfield_1483\r\n$10\r\nvalue_1483\r\n$10\r\nfield_1511\r\n$10\r\nvalue_1511\r\n$9\r\nfield_695\r\n$9\r\nvalue_695\r\n$10\r\nfield_1499\r\n$10\r\nvalue_1499\r\n$9\r\nfield_108\r\n$9\r\nvalue_108\r\n$10\r\nfield_1665\r\n$10\r\nvalue_1665\r\n$8\r\nfield_60\r\n$8\r\nvalue_60\r\n$10\r\nfield_1479\r\n$10\r\nvalue_1479\r\n$10\r\nfield_1963\r\n$10\r\nvalue_1963\r\n$10\r\nfield_1186\r\n$10\r\nvalue_1186\r\n$9\r\nfield_206\r\n$9\r\nvalue_206\r\n$10\r\nfield_1208\r\n$10\r\nvalue_1208\r\n$10\r\nfield_1178\r\n$10\r\nvalue_1178\r\n$10\r\nfield_1214\r\n$10\r\nvalue_1214\r\n$9\r\nfield_724\r\n$9\r\nvalue_724\r\n$10\r\nfield_1428\r\n$10\r\nvalue_1428\r\n$9\r\nfield_444\r\n$9\r\nvalue_444\r\n$10\r\nfield_1037\r\n$10\r\nvalue_1037\r\n$9\r\nfield_417\r\n$9\r\nvalue_417\r\n$9\r\nfield_640\r\n$9\r\nvalue_640\r\n$9\r\nfield_693\r\n$9\r\nvalue_693\r\n$10\r\nfield_1368\r\n$10\r\nvalue_1368\r\n$8\r\nfield_84\r\n$8\r\nvalue_84\r\n$10\r\nfield_1892\r\n$10\r\nvalue_1892\r\n$10\r\nfield_1035\r\n$10\r\nvalue_1035\r\n$10\r\nfield_1279\r\n$10\r\nvalue_1279\r\n$9\r\nfield_191\r\n$9\r\nvalue_191\r\n$10\r\nfield_1196\r\n$10\r\nvalue_1196\r\n$10\r\nfield_1062\r\n$10\r\nvalue_1062\r\n$10\r\nfield_1299\r\n$10\r\nvalue_1299\r\n$10\r\nfield_1679\r\n$10\r\nvalue_1679\r\n$9\r\nfield_939\r\n$9\r\nvalue_939\r\n$9\r\nfield_575\r\n$9\r\nvalue_575\r\n$10\r\nfield_1728\r\n$10\r\nvalue_1728\r\n$8\r\nfield_54\r\n$8\r\nvalue_54\r\n$9\r\nfield_605\r\n$9\r\nvalue_605\r\n$10\r\nfield_1664\r\n$10\r\nvalue_1664\r\n$10\r\nfield_1563\r\n$10\r\nvalue_1563\r\n$10\r\nfield_1304\r\n$10\r\nvalue_1304\r\n$9\r\nfield_958\r\n$9\r\nvalue_958\r\n$10\r\nfield_1405\r\n$10\r\nvalue_1405\r\n$9\r\nfield_162\r\n$9\r\nvalue_162\r\n$9\r\nfield_988\r\n$9\r\nvalue_988\r\n$10\r\nfield_1541\r\n$10\r\nvalue_1541\r\n$9\r\nfield_814\r\n$9\r\nvalue_814\r\n$10\r\nfield_1066\r\n$10\r\nvalue_1066\r\n$8\r\nfield_20\r\n$8\r\nvalue_20\r\n$9\r\nfield_662\r\n$9\r\nvalue_662\r\n$9\r\nfield_562\r\n$9\r\nvalue_562\r\n$9\r\nfield_942\r\n$9\r\nvalue_942\r\n$10\r\nfield_1042\r\n$10\r\nvalue_1042\r\n$10\r\nfield_1604\r\n$10\r\nvalue_1604\r\n$10\r\nfield_1538\r\n$10\r\nvalue_1538\r\n$10\r\nfield_1877\r\n$10\r\nvalue_1877\r\n$10\r\nfield_1770\r\n$10\r\nvalue_1770\r\n$9\r\nfield_295\r\n$9\r\nvalue_295\r\n$9\r\nfield_763\r\n$9\r\nvalue_763\r\n$10\r\nfield_1901\r\n$10\r\nvalue_1901\r\n$10\r\nfield_1451\r\n$10\r\nvalue_1451\r\n$9\r\nfield_326\r\n$9\r\nvalue_326\r\n$9\r\nfield_439\r\n$9\r\nvalue_439\r\n$9\r\nfield_121\r\n$9\r\nvalue_121\r\n$9\r\nfield_827\r\n$9\r\nvalue_827\r\n$9\r\nfield_774\r\n$9\r\nvalue_774\r\n$9\r\nfield_985\r\n$9\r\nvalue_985\r\n$10\r\nfield_1114\r\n$10\r\nvalue_1114\r\n$10\r\nfield_1926\r\n$10\r\nvalue_1926\r\n$10\r\nfield_1525\r\n$10\r\nvalue_1525\r\n$10\r\nfield_1827\r\n$10\r\nvalue_1827\r\n$10\r\nfield_1924\r\n$10\r\nvalue_1924\r\n$10\r\nfield_1486\r\n$10\r\nvalue_1486\r\n$10\r\nfield_1031\r\n$10\r\nvalue_1031\r\n$10\r\nfield_1958\r\n$10\r\nvalue_1958\r\n$10\r\nfield_1570\r\n$10\r\nvalue_1570\r\n$10\r\nfield_1932\r\n$10\r\nvalue_1932\r\n$10\r\nfield_1833\r\n$10\r\nvalue_1833\r\n$9\r\nfield_911\r\n$9\r\nvalue_911\r\n$9\r\nfield_425\r\n$9\r\nvalue_425\r\n$10\r\nfield_1194\r\n$10\r\nvalue_1194\r\n$10\r\nfield_1161\r\n$10\r\nvalue_1161\r\n$9\r\nfield_490\r\n$9\r\nvalue_490\r\n$10\r\nfield_1163\r\n$10\r\nvalue_1163\r\n$10\r\nfield_1584\r\n$10\r\nvalue_1584\r\n$10\r\nfield_1096\r\n$10\r\nvalue_1096\r\n$10\r\nfield_1906\r\n$10\r\nvalue_1906\r\n$10\r\nfield_1676\r\n$10\r\nvalue_1676\r\n$10\r\nfield_1294\r\n$10\r\nvalue_1294\r\n$8\r\nfield_88\r\n$8\r\nvalue_88\r\n$10\r\nfield_1156\r\n$10\r\nvalue_1156\r\n$10\r\nfield_1539\r\n$10\r\nvalue_1539\r\n$9\r\nfield_406\r\n$9\r\nvalue_406\r\n$10\r\nfield_1040\r\n$10\r\nvalue_1040\r\n$9\r\nfield_263\r\n$9\r\nvalue_263\r\n$9\r\nfield_923\r\n$9\r\nvalue_923\r\n$10\r\nfield_1081\r\n$10\r\nvalue_1081\r\n$9\r\nfield_228\r\n$9\r\nvalue_228\r\n$8\r\nfield_18\r\n$8\r\nvalue_18\r\n$10\r\nfield_1414\r\n$10\r\nvalue_1414\r\n$9\r\nfield_673\r\n$9\r\nvalue_673\r\n$9\r\nfield_458\r\n$9\r\nvalue_458\r\n$8\r\nfield_51\r\n$8\r\nvalue_51\r\n$9\r\nfield_318\r\n$9\r\nvalue_318\r\n$10\r\nfield_1698\r\n$10\r\nvalue_1698\r\n$10\r\nfield_1573\r\n$10\r\nvalue_1573\r\n$9\r\nfield_638\r\n$9\r\nvalue_638\r\n$10\r\nfield_1957\r\n$10\r\nvalue_1957\r\n$9\r\nfield_208\r\n$9\r\nvalue_208\r\n$10\r\nfield_1086\r\n$10\r\nvalue_1086\r\n$9\r\nfield_584\r\n$9\r\nvalue_584\r\n$9\r\nfield_825\r\n$9\r\nvalue_825\r\n$9\r\nfield_585\r\n$9\r\nvalue_585\r\n$9\r\nfield_686\r\n$9\r\nvalue_686\r\n$10\r\nfield_1951\r\n$10\r\nvalue_1951\r\n$9\r\nfield_249\r\n$9\r\nvalue_249\r\n$9\r\nfield_285\r\n$9\r\nvalue_285\r\n$10\r\nfield_1820\r\n$10\r\nvalue_1820\r\n$10\r\nfield_1236\r\n$10\r\nvalue_1236\r\n$9\r\nfield_315\r\n$9\r\nvalue_315\r\n$9\r\nfield_745\r\n$9\r\nvalue_745\r\n$9\r\nfield_997\r\n$9\r\nvalue_997\r\n$9\r\nfield_560\r\n$9\r\nvalue_560\r\n$9\r\nfield_312\r\n$9\r\nvalue_312\r\n$9\r\nfield_715\r\n$9\r\nvalue_715\r\n$10\r\nfield_1945\r\n$10\r\nvalue_1945\r\n$9\r\nfield_367\r\n$9\r\nvalue_367\r\n$10\r\nfield_1592\r\n$10\r\nvalue_1592\r\n$10\r\nfield_1767\r\n$10\r\nvalue_1767\r\n$10\r\nfield_1918\r\n$10\r\nvalue_1918\r\n$10\r\nfield_1638\r\n$10\r\nvalue_1638\r\n$10\r\nfield_1547\r\n$10\r\nvalue_1547\r\n$9\r\nfield_237\r\n$9\r\nvalue_237\r\n$9\r\nfield_253\r\n$9\r\nvalue_253\r\n$9\r\nfield_484\r\n$9\r\nvalue_484\r\n$8\r\nfield_66\r\n$8\r\nvalue_66\r\n$8\r\nfield_27\r\n$8\r\nvalue_27\r\n$9\r\nfield_739\r\n$9\r\nvalue_739\r\n$9\r\nfield_919\r\n$9\r\nvalue_919\r\n$10\r\nfield_1460\r\n$10\r\nvalue_1460\r\n$9\r\nfield_506\r\n$9\r\nvalue_506\r\n$10\r\nfield_1423\r\n$10\r\nvalue_1423\r\n$10\r\nfield_1033\r\n$10\r\nvalue_1033\r\n$7\r\nfield_8\r\n$7\r\nvalue_8\r\n$9\r\nfield_138\r\n$9\r\nvalue_138\r\n$10\r\nfield_1433\r\n$10\r\nvalue_1433\r\n$10\r\nfield_1395\r\n$10\r\nvalue_1395\r\n$9\r\nfield_979\r\n$9\r\nvalue_979\r\n$10\r\nfield_1550\r\n$10\r\nvalue_1550\r\n$10\r\nfield_1564\r\n$10\r\nvalue_1564\r\n$9\r\nfield_456\r\n$9\r\nvalue_456\r\n$9\r\nfield_692\r\n$9\r\nvalue_692\r\n$9\r\nfield_752\r\n$9\r\nvalue_752\r\n$9\r\nfield_343\r\n$9\r\nvalue_343\r\n$10\r\nfield_1915\r\n$10\r\nvalue_1915\r\n$10\r\nfield_1484\r\n$10\r\nvalue_1484\r\n$10\r\nfield_1884\r\n$10\r\nvalue_1884\r\n$10\r\nfield_1513\r\n$10\r\nvalue_1513\r\n$10\r\nfield_1528\r\n$10\r\nvalue_1528\r\n$10\r\nfield_1487\r\n$10\r\nvalue_1487\r\n$10\r\nfield_1380\r\n$10\r\nvalue_1380\r\n$10\r\nfield_1956\r\n$10\r\nvalue_1956\r\n$9\r\nfield_561\r\n$9\r\nvalue_561\r\n$8\r\nfield_89\r\n$8\r\nvalue_89\r\n$9\r\nfield_723\r\n$9\r\nvalue_723\r\n$10\r\nfield_1864\r\n$10\r\nvalue_1864\r\n$10\r\nfield_1787\r\n$10\r\nvalue_1787\r\n$10\r\nfield_1252\r\n$10\r\nvalue_1252\r\n$10\r\nfield_1546\r\n$10\r\nvalue_1546\r\n$9\r\nfield_120\r\n$9\r\nvalue_120\r\n$9\r\nfield_709\r\n$9\r\nvalue_709\r\n$10\r\nfield_1852\r\n$10\r\nvalue_1852\r\n$9\r\nfield_826\r\n$9\r\nvalue_826\r\n$9\r\nfield_854\r\n$9\r\nvalue_854\r\n$9\r\nfield_549\r\n$9\r\nvalue_549\r\n$9\r\nfield_388\r\n$9\r\nvalue_388\r\n$9\r\nfield_954\r\n$9\r\nvalue_954\r\n$9\r\nfield_959\r\n$9\r\nvalue_959\r\n$9\r\nfield_981\r\n$9\r\nvalue_981\r\n$10\r\nfield_1946\r\n$10\r\nvalue_1946\r\n$10\r\nfield_1791\r\n$10\r\nvalue_1791\r\n$9\r\nfield_423\r\n$9\r\nvalue_423\r\n$8\r\nfield_43\r\n$8\r\nvalue_43\r\n$9\r\nfield_613\r\n$9\r\nvalue_613\r\n$10\r\nfield_1055\r\n$10\r\nvalue_1055\r\n$10\r\nfield_1567\r\n$10\r\nvalue_1567\r\n$9\r\nfield_848\r\n$9\r\nvalue_848\r\n$10\r\nfield_1310\r\n$10\r\nvalue_1310\r\n$10\r\nfield_1582\r\n$10\r\nvalue_1582\r\n$10\r\nfield_1135\r\n$10\r\nvalue_1135\r\n$9\r\nfield_284\r\n$9\r\nvalue_284\r\n$9\r\nfield_730\r\n$9\r\nvalue_730\r\n$9\r\nfield_912\r\n$9\r\nvalue_912\r\n$10\r\nfield_1016\r\n$10\r\nvalue_1016\r\n$9\r\nfield_376\r\n$9\r\nvalue_376\r\n$8\r\nfield_52\r\n$8\r\nvalue_52\r\n$9\r\nfield_247\r\n$9\r\nvalue_247\r\n$9\r\nfield_881\r\n$9\r\nvalue_881\r\n$10\r\nfield_1960\r\n$10\r\nvalue_1960\r\n$8\r\nfield_11\r\n$8\r\nvalue_11\r\n$9\r\nfield_373\r\n$9\r\nvalue_373\r\n$9\r\nfield_916\r\n$9\r\nvalue_916\r\n$10\r\nfield_1004\r\n$10\r\nvalue_1004\r\n$9\r\nfield_256\r\n$9\r\nvalue_256\r\n$10\r\nfield_1172\r\n$10\r\nvalue_1172\r\n$9\r\nfield_446\r\n$9\r\nvalue_446\r\n$9\r\nfield_306\r\n$9\r\nvalue_306\r\n$9\r\nfield_313\r\n$9\r\nvalue_313\r\n$10\r\nfield_1724\r\n$10\r\nvalue_1724\r\n$9\r\nfield_440\r\n$9\r\nvalue_440\r\n$9\r\nfield_395\r\n$9\r\nvalue_395\r\n$10\r\nfield_1119\r\n$10\r\nvalue_1119\r\n$10\r\nfield_1039\r\n$10\r\nvalue_1039\r\n$10\r\nfield_1776\r\n$10\r\nvalue_1776\r\n$10\r\nfield_1626\r\n$10\r\nvalue_1626\r\n$10\r\nfield_1512\r\n$10\r\nvalue_1512\r\n$10\r\nfield_1936\r\n$10\r\nvalue_1936\r\n$9\r\nfield_644\r\n$9\r\nvalue_644\r\n$10\r\nfield_1023\r\n$10\r\nvalue_1023\r\n$10\r\nfield_1887\r\n$10\r\nvalue_1887\r\n$10\r\nfield_1325\r\n$10\r\nvalue_1325\r\n$9\r\nfield_360\r\n$9\r\nvalue_360\r\n$9\r\nfield_894\r\n$9\r\nvalue_894\r\n$10\r\nfield_1606\r\n$10\r\nvalue_1606\r\n$9\r\nfield_821\r\n$9\r\nvalue_821\r\n$9\r\nfield_555\r\n$9\r\nvalue_555\r\n$9\r\nfield_299\r\n$9\r\nvalue_299\r\n$9\r\nfield_910\r\n$9\r\nvalue_910\r\n$9\r\nfield_940\r\n$9\r\nvalue_940\r\n$9\r\nfield_301\r\n$9\r\nvalue_301\r\n$9\r\nfield_196\r\n$9\r\nvalue_196\r\n$9\r\nfield_111\r\n$9\r\nvalue_111\r\n$9\r\nfield_712\r\n$9\r\nvalue_712\r\n$9\r\nfield_895\r\n$9\r\nvalue_895\r\n$10\r\nfield_1112\r\n$10\r\nvalue_1112\r\n$10\r\nfield_1094\r\n$10\r\nvalue_1094\r\n$10\r\nfield_1063\r\n$10\r\nvalue_1063\r\n$9\r\nfield_600\r\n$9\r\nvalue_600\r\n$9\r\nfield_832\r\n$9\r\nvalue_832\r\n$10\r\nfield_1732\r\n$10\r\nvalue_1732\r\n$10\r\nfield_1456\r\n$10\r\nvalue_1456\r\n$10\r\nfield_1287\r\n$10\r\nvalue_1287\r\n$10\r\nfield_1349\r\n$10\r\nvalue_1349\r\n$9\r\nfield_813\r\n$9\r\nvalue_813\r\n$10\r\nfield_1535\r\n$10\r\nvalue_1535\r\n$8\r\nfield_99\r\n$8\r\nvalue_99\r\n$10\r\nfield_1797\r\n$10\r\nvalue_1797\r\n$9\r\nfield_623\r\n$9\r\nvalue_623\r\n$9\r\nfield_831\r\n$9\r\nvalue_831\r\n$9\r\nfield_302\r\n$9\r\nvalue_302\r\n$9\r\nfield_119\r\n$9\r\nvalue_119\r\n$9\r\nfield_807\r\n$9\r\nvalue_807\r\n$10\r\nfield_1176\r\n$10\r\nvalue_1176\r\n$10\r\nfield_1312\r\n$10\r\nvalue_1312\r\n$10\r\nfield_1497\r\n$10\r\nvalue_1497\r\n$10\r\nfield_1602\r\n$10\r\nvalue_1602\r\n$10\r\nfield_1002\r\n$10\r\nvalue_1002\r\n$9\r\nfield_218\r\n$9\r\nvalue_218\r\n$10\r\nfield_1125\r\n$10\r\nvalue_1125\r\n$10\r\nfield_1693\r\n$10\r\nvalue_1693\r\n$9\r\nfield_553\r\n$9\r\nvalue_553\r\n$9\r\nfield_769\r\n$9\r\nvalue_769\r\n$9\r\nfield_669\r\n$9\r\nvalue_669\r\n$9\r\nfield_466\r\n$9\r\nvalue_466\r\n$10\r\nfield_1027\r\n$10\r\nvalue_1027\r\n$10\r\nfield_1889\r\n$10\r\nvalue_1889\r\n$9\r\nfield_276\r\n$9\r\nvalue_276\r\n$9\r\nfield_650\r\n$9\r\nvalue_650\r\n$10\r\nfield_1242\r\n$10\r\nvalue_1242\r\n$10\r\nfield_1229\r\n$10\r\nvalue_1229\r\n$10\r\nfield_1739\r\n$10\r\nvalue_1739\r\n$10\r\nfield_1667\r\n$10\r\nvalue_1667\r\n$9\r\nfield_366\r\n$9\r\nvalue_366\r\n$9\r\nfield_167\r\n$9\r\nvalue_167\r\n$10\r\nfield_1768\r\n$10\r\nvalue_1768\r\n$9\r\nfield_899\r\n$9\r\nvalue_899\r\n$9\r\nfield_525\r\n$9\r\nvalue_525\r\n$10\r\nfield_1579\r\n$10\r\nvalue_1579\r\n$9\r\nfield_377\r\n$9\r\nvalue_377\r\n$9\r\nfield_670\r\n$9\r\nvalue_670\r\n$9\r\nfield_483\r\n$9\r\nvalue_483\r\n$10\r\nfield_1069\r\n$10\r\nvalue_1069\r\n$10\r\nfield_1823\r\n$10\r\nvalue_1823\r\n$10\r\nfield_1575\r\n$10\r\nvalue_1575\r\n$9\r\nfield_345\r\n$9\r\nvalue_345\r\n$10\r\nfield_1858\r\n$10\r\nvalue_1858\r\n$10\r\nfield_1398\r\n$10\r\nvalue_1398\r\n$9\r\nfield_509\r\n$9\r\nvalue_509\r\n$9\r\nfield_500\r\n$9\r\nvalue_500\r\n$9\r\nfield_416\r\n$9\r\nvalue_416\r\n$10\r\nfield_1784\r\n$10\r\nvalue_1784\r\n$8\r\nfield_79\r\n$8\r\nvalue_79\r\n$10\r\nfield_1157\r\n$10\r\nvalue_1157\r\n$9\r\nfield_216\r\n$9\r\nvalue_216\r\n$9\r\nfield_964\r\n$9\r\nvalue_964\r\n$10\r\nfield_1036\r\n$10\r\nvalue_1036\r\n$10\r\nfield_1922\r\n$10\r\nvalue_1922\r\n$10\r\nfield_1413\r\n$10\r\nvalue_1413\r\n$8\r\nfield_22\r\n$8\r\nvalue_22\r\n$9\r\nfield_559\r\n$9\r\nvalue_559\r\n$9\r\nfield_370\r\n$9\r\nvalue_370\r\n$9\r\nfield_690\r\n$9\r\nvalue_690\r\n$10\r\nfield_1738\r\n$10\r\nvalue_1738\r\n$10\r\nfield_1256\r\n$10\r\nvalue_1256\r\n$10\r\nfield_1826\r\n$10\r\nvalue_1826\r\n$9\r\nfield_758\r\n$9\r\nvalue_758\r\n$9\r\nfield_666\r\n$9\r\nvalue_666\r\n$10\r\nfield_1467\r\n$10\r\nvalue_1467\r\n$9\r\nfield_392\r\n$9\r\nvalue_392\r\n$9\r\nfield_338\r\n$9\r\nvalue_338\r\n$10\r\nfield_1516\r\n$10\r\nvalue_1516\r\n$10\r\nfield_1307\r\n$10\r\nvalue_1307\r\n$10\r\nfield_1745\r\n$10\r\nvalue_1745\r\n$10\r\nfield_1295\r\n$10\r\nvalue_1295\r\n$10\r\nfield_1716\r\n$10\r\nvalue_1716\r\n$9\r\nfield_603\r\n$9\r\nvalue_603\r\n$9\r\nfield_358\r\n$9\r\nvalue_358\r\n$10\r\nfield_1298\r\n$10\r\nvalue_1298\r\n$10\r\nfield_1657\r\n$10\r\nvalue_1657\r\n$10\r\nfield_1971\r\n$10\r\nvalue_1971\r\n$10\r\nfield_1144\r\n$10\r\nvalue_1144\r\n$9\r\nfield_144\r\n$9\r\nvalue_144\r\n$10\r\nfield_1103\r\n$10\r\nvalue_1103\r\n$9\r\nfield_188\r\n$9\r\nvalue_188\r\n$9\r\nfield_197\r\n$9\r\nvalue_197\r\n$9\r\nfield_904\r\n$9\r\nvalue_904\r\n$10\r\nfield_1059\r\n$10\r\nvalue_1059\r\n$10\r\nfield_1501\r\n$10\r\nvalue_1501\r\n$9\r\nfield_708\r\n$9\r\nvalue_708\r\n$9\r\nfield_872\r\n$9\r\nvalue_872\r\n$10\r\nfield_1130\r\n$10\r\nvalue_1130\r\n$10\r\nfield_1862\r\n$10\r\nvalue_1862\r\n$10\r\nfield_1404\r\n$10\r\nvalue_1404\r\n$10\r\nfield_1147\r\n$10\r\nvalue_1147\r\n$10\r\nfield_1880\r\n$10\r\nvalue_1880\r\n$8\r\nfield_10\r\n$8\r\nvalue_10\r\n$9\r\nfield_951\r\n$9\r\nvalue_951\r\n$10\r\nfield_1674\r\n$10\r\nvalue_1674\r\n$10\r\nfield_1790\r\n$10\r\nvalue_1790\r\n$9\r\nfield_175\r\n$9\r\nvalue_175\r\n$9\r\nfield_968\r\n$9\r\nvalue_968\r\n$9\r\nfield_754\r\n$9\r\nvalue_754\r\n$9\r\nfield_886\r\n$9\r\nvalue_886\r\n$10\r\nfield_1521\r\n$10\r\nvalue_1521\r\n$10\r\nfield_1411\r\n$10\r\nvalue_1411\r\n$9\r\nfield_110\r\n$9\r\nvalue_110\r\n$9\r\nfield_935\r\n$9\r\nvalue_935\r\n$10\r\nfield_1449\r\n$10\r\nvalue_1449\r\n$10\r\nfield_1378\r\n$10\r\nvalue_1378\r\n$10\r\nfield_1959\r\n$10\r\nvalue_1959\r\n$9\r\nfield_418\r\n$9\r\nvalue_418\r\n$9\r\nfield_245\r\n$9\r\nvalue_245\r\n$10\r\nfield_1690\r\n$10\r\nv"; let rsp4 = "alue_1690\r\n$9\r\nfield_746\r\n$9\r\nvalue_746\r\n$10\r\nfield_1721\r\n$10\r\nvalue_1721\r\n$10\r\nfield_1595\r\n$10\r\nvalue_1595\r\n$9\r\nfield_990\r\n$9\r\nvalue_990\r\n$10\r\nfield_1113\r\n$10\r\nvalue_1113\r\n$9\r\nfield_593\r\n$9\r\nvalue_593\r\n$9\r\nfield_820\r\n$9\r\nvalue_820\r\n$10\r\nfield_1132\r\n$10\r\nvalue_1132\r\n$9\r\nfield_394\r\n$9\r\nvalue_394\r\n$10\r\nfield_1244\r\n$10\r\nvalue_1244\r\n$10\r\nfield_1158\r\n$10\r\nvalue_1158\r\n$9\r\nfield_482\r\n$9\r\nvalue_482\r\n$9\r\nfield_539\r\n$9\r\nvalue_539\r\n$9\r\nfield_212\r\n$9\r\nvalue_212\r\n$9\r\nfield_890\r\n$9\r\nvalue_890\r\n$10\r\nfield_1997\r\n$10\r\nvalue_1997\r\n$9\r\nfield_759\r\n$9\r\nvalue_759\r\n$10\r\nfield_1772\r\n$10\r\nvalue_1772\r\n$9\r\nfield_755\r\n$9\r\nvalue_755\r\n$7\r\nfield_5\r\n$7\r\nvalue_5\r\n$10\r\nfield_1628\r\n$10\r\nvalue_1628\r\n$9\r\nfield_545\r\n$9\r\nvalue_545\r\n$9\r\nfield_717\r\n$9\r\nvalue_717\r\n$9\r\nfield_576\r\n$9\r\nvalue_576\r\n$10\r\nfield_1022\r\n$10\r\nvalue_1022\r\n$10\r\nfield_1731\r\n$10\r\nvalue_1731\r\n$8\r\nfield_57\r\n$8\r\nvalue_57\r\n$9\r\nfield_777\r\n$9\r\nvalue_777\r\n$10\r\nfield_1028\r\n$10\r\nvalue_1028\r\n$10\r\nfield_1766\r\n$10\r\nvalue_1766\r\n$10\r\nfield_1050\r\n$10\r\nvalue_1050\r\n$10\r\nfield_1362\r\n$10\r\nvalue_1362\r\n$9\r\nfield_303\r\n$9\r\nvalue_303\r\n$9\r\nfield_166\r\n$9\r\nvalue_166\r\n$9\r\nfield_768\r\n$9\r\nvalue_768\r\n$9\r\nfield_462\r\n$9\r\nvalue_462\r\n$9\r\nfield_390\r\n$9\r\nvalue_390\r\n$10\r\nfield_1648\r\n$10\r\nvalue_1648\r\n$10\r\nfield_1927\r\n$10\r\nvalue_1927\r\n$10\r\nfield_1492\r\n$10\r\nvalue_1492\r\n$9\r\nfield_287\r\n$9\r\nvalue_287\r\n$9\r\nfield_552\r\n$9\r\nvalue_552\r\n$9\r\nfield_469\r\n$9\r\nvalue_469\r\n$10\r\nfield_1341\r\n$10\r\nvalue_1341\r\n$9\r\nfield_255\r\n$9\r\nvalue_255\r\n$9\r\nfield_433\r\n$9\r\nvalue_433\r\n$10\r\nfield_1939\r\n$10\r\nvalue_1939\r\n$9\r\nfield_775\r\n$9\r\nvalue_775\r\n$10\r\nfield_1150\r\n$10\r\nvalue_1150\r\n$10\r\nfield_1300\r\n$10\r\nvalue_1300\r\n$10\r\nfield_1052\r\n$10\r\nvalue_1052\r\n$9\r\nfield_557\r\n$9\r\nvalue_557\r\n$9\r\nfield_294\r\n$9\r\nvalue_294\r\n$9\r\nfield_289\r\n$9\r\nvalue_289\r\n$9\r\nfield_799\r\n$9\r\nvalue_799\r\n$10\r\nfield_1617\r\n$10\r\nvalue_1617\r\n$10\r\nfield_1111\r\n$10\r\nvalue_1111\r\n$10\r\nfield_1937\r\n$10\r\nvalue_1937\r\n$10\r\nfield_1384\r\n$10\r\nvalue_1384\r\n$10\r\nfield_1339\r\n$10\r\nvalue_1339\r\n$10\r\nfield_1087\r\n$10\r\nvalue_1087\r\n$10\r\nfield_1871\r\n$10\r\nvalue_1871\r\n$10\r\nfield_1562\r\n$10\r\nvalue_1562\r\n$10\r\nfield_1520\r\n$10\r\nvalue_1520\r\n$9\r\nfield_214\r\n$9\r\nvalue_214\r\n$9\r\nfield_252\r\n$9\r\nvalue_252\r\n$9\r\nfield_300\r\n$9\r\nvalue_300\r\n$9\r\nfield_846\r\n$9\r\nvalue_846\r\n$10\r\nfield_1905\r\n$10\r\nvalue_1905\r\n$9\r\nfield_426\r\n$9\r\nvalue_426\r\n$9\r\nfield_396\r\n$9\r\nvalue_396\r\n$10\r\nfield_1954\r\n$10\r\nvalue_1954\r\n$10\r\nfield_1416\r\n$10\r\nvalue_1416\r\n$9\r\nfield_226\r\n$9\r\nvalue_226\r\n$10\r\nfield_1388\r\n$10\r\nvalue_1388\r\n$10\r\nfield_1165\r\n$10\r\nvalue_1165\r\n$9\r\nfield_335\r\n$9\r\nvalue_335\r\n$9\r\nfield_949\r\n$9\r\nvalue_949\r\n$10\r\nfield_1363\r\n$10\r\nvalue_1363\r\n$9\r\nfield_840\r\n$9\r\nvalue_840\r\n$10\r\nfield_1204\r\n$10\r\nvalue_1204\r\n$9\r\nfield_464\r\n$9\r\nvalue_464\r\n$8\r\nfield_32\r\n$8\r\nvalue_32\r\n$9\r\nfield_748\r\n$9\r\nvalue_748\r\n$10\r\nfield_1677\r\n$10\r\nvalue_1677\r\n$9\r\nfield_250\r\n$9\r\nvalue_250\r\n$10\r\nfield_1759\r\n$10\r\nvalue_1759\r\n$9\r\nfield_538\r\n$9\r\nvalue_538\r\n$9\r\nfield_878\r\n$9\r\nvalue_878\r\n$9\r\nfield_362\r\n$9\r\nvalue_362\r\n$10\r\nfield_1729\r\n$10\r\nvalue_1729\r\n$10\r\nfield_1408\r\n$10\r\nvalue_1408\r\n$10\r\nfield_1967\r\n$10\r\nvalue_1967\r\n$9\r\nfield_554\r\n$9\r\nvalue_554\r\n$10\r\nfield_1802\r\n$10\r\nvalue_1802\r\n$9\r\nfield_172\r\n$9\r\nvalue_172\r\n$10\r\nfield_1506\r\n$10\r\nvalue_1506\r\n$10\r\nfield_1241\r\n$10\r\nvalue_1241\r\n$10\r\nfield_1938\r\n$10\r\nvalue_1938\r\n$10\r\nfield_1683\r\n$10\r\nvalue_1683\r\n$10\r\nfield_1934\r\n$10\r\nvalue_1934\r\n$10\r\nfield_1616\r\n$10\r\nvalue_1616\r\n$9\r\nfield_969\r\n$9\r\nvalue_969\r\n$10\r\nfield_1825\r\n$10\r\nvalue_1825\r\n$10\r\nfield_1381\r\n$10\r\nvalue_1381\r\n$9\r\nfield_374\r\n$9\r\nvalue_374\r\n$10\r\nfield_1091\r\n$10\r\nvalue_1091\r\n$9\r\nfield_665\r\n$9\r\nvalue_665\r\n$9\r\nfield_588\r\n$9\r\nvalue_588\r\n$9\r\nfield_845\r\n$9\r\nvalue_845\r\n$10\r\nfield_1342\r\n$10\r\nvalue_1342\r\n$10\r\nfield_1335\r\n$10\r\nvalue_1335\r\n$9\r\nfield_165\r\n$9\r\nvalue_165\r"; let rsp5 = "\n"; - let mut ctx = ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; let mut v: Vec = Vec::with_capacity(65000); v.put_slice(rsp1.as_bytes()); @@ -111,7 +123,11 @@ fn parse_command_deep_array_rsp() { let rsp3 = "\n*2\r\n$20\r\n30.00000089406967163\r\n$20\r\n49.99999957172130394\r\n*"; let rsp4 = "3\r\n$7\r\nTianjin\r\n$8\r\n573.0514\r\n*2\r\n$20\r\n26.99999839067459106\r\n$20\r\n53.9999999430143873"; let rsp5 = "3\r\n"; - let mut ctx = ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; let mut v: Vec = Vec::with_capacity(1024); v.put_slice(rsp1.as_bytes()); @@ -186,7 +202,11 @@ fn parse_response_deep_array() { response_skip_multibulks(data); } fn response_skip_multibulks(data: &[u8]) { - let mut ctx = ResponseContext { oft: 0, bulk: 0 }; + let mut ctx = ResponseContext { + oft: 0, + bulk: 0, + status: 0, + }; for i in 1..(data.len() - 1) { let data = data[..i].to_vec(); let rsp_data: RingSlice = RingSlice::from_vec(&data); @@ -227,4 +247,4 @@ fn bit() { assert_eq!(v, 0x70); } // 65个str类型的数组 -static SIMPLE_ARR:&'static str = "*65\r\n$16\r\nad_61fa9e8bc3624\r\n$169\r\n{\"adid\":\"ad_61fa9e8bc3624\",\"start\":1643817600,\"end\":1646496000,\"exposure\":100000000,\"mids\":\"4731641022647893,4731670442019006\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62024d35f2de0\r\n$169\r\n{\"adid\":\"ad_62024d35f2de0\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4733663557980874,4734162701387024\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f7666e70f64\r\n$169\r\n{\"adid\":\"ad_61f7666e70f64\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4728771901133069,4731640230183405\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_620370eed4001\r\n$169\r\n{\"adid\":\"ad_620370eed4001\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4730337131237645,4734730736506689\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$13\r\n0000000000000\r\n$155\r\n{\"adid\":\"0000000000000\",\"start\":1,\"end\":1641394800000,\"exposure\":2147483647,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[\"诺贝尔_梁特别纪念\"]}\r\n$6\r\n888888\r\n$118\r\n{\"adid\":\"888888\",\"start\":1641952859,\"end\":1636732800,\"exposure\":0,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61fa9fecafbb0\r\n$169\r\n{\"adid\":\"ad_61fa9fecafbb0\",\"start\":1643817600,\"end\":1646496000,\"exposure\":100000000,\"mids\":\"4731641022647893,4731670442019006\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621cca647edc7\r\n$169\r\n{\"adid\":\"ad_621cca647edc7\",\"start\":1645977600,\"end\":1648569600,\"exposure\":100000000,\"mids\":\"4722181898240555,4722187947212819\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61ef5e9ca6a58\r\n$128\r\n{\"adid\":\"ad_61ef5e9ca6a58\",\"start\":1643077260,\"end\":1643595661,\"exposure\":0,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6206317004e93\r\n$169\r\n{\"adid\":\"ad_6206317004e93\",\"start\":1644508800,\"end\":1647187200,\"exposure\":100000000,\"mids\":\"4734886621480080,4735615411424926\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$7\r\nlj_test\r\n$69\r\n{\"adid\":\"lj_test\",\"start\":1547811967,\"end\":4476654671,\"exposure\":100}\r\n$16\r\nad_621c8cf3ed4da\r\n$169\r\n{\"adid\":\"ad_621c8cf3ed4da\",\"start\":1646100000,\"end\":1648742400,\"exposure\":100000000,\"mids\":\"4736804262248952,4736733373533937\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6200ced6323a5\r\n$169\r\n{\"adid\":\"ad_6200ced6323a5\",\"start\":1644163200,\"end\":1646841600,\"exposure\":100000000,\"mids\":\"4726598756205880,4732063011572467\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621caee0a2410\r\n$169\r\n{\"adid\":\"ad_621caee0a2410\",\"start\":1646100000,\"end\":1648742400,\"exposure\":100000000,\"mids\":\"4736804262248952,4736733373533937\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621625d65d2eb\r\n$169\r\n{\"adid\":\"ad_621625d65d2eb\",\"start\":1645545600,\"end\":1648224000,\"exposure\":100000000,\"mids\":\"4734972374549029,4737921637421709\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62063250bd30a\r\n$169\r\n{\"adid\":\"ad_62063250bd30a\",\"start\":1644508800,\"end\":1647187200,\"exposure\":100000000,\"mids\":\"4734886621480080,4735615411424926\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62024c68a9273\r\n$169\r\n{\"adid\":\"ad_62024c68a9273\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4733663557980874,4734162701387024\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621cbf813a42a\r\n$169\r\n{\"adid\":\"ad_621cbf813a42a\",\"start\":1645977600,\"end\":1648656000,\"exposure\":100000000,\"mids\":\"4741545502441988,4741580051712413\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f794caa1369\r\n$169\r\n{\"adid\":\"ad_61f794caa1369\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4730930545562652,4731646026973271\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nwjtestmml8888888\r\n$134\r\n{\"adid\":\"wjtestmml8888888\",\"start\":1,\"end\":9223372036854775807,\"exposure\":1000000,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6214a5d19802b\r\n$169\r\n{\"adid\":\"ad_6214a5d19802b\",\"start\":1645545600,\"end\":1648224000,\"exposure\":100000000,\"mids\":\"4734972374549029,4737921637421709\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6131ee328227d\r\n$95\r\n{\"adid\":\"ad_6131ee328227d\",\"start\":1630598400,\"end\":1633017600,\"exposure\":2000000000,\"mids\":\"\"}\r\n$16\r\nad_620a05bed5bd2\r\n$152\r\n{\"adid\":\"ad_620a05bed5bd2\",\"start\":1644768000,\"end\":1647446400,\"exposure\":100000000,\"mids\":\"4736726230895209\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$17\r\ndaoguang3_test_12\r\n$105\r\n{\"adid\":\"daoguang3_test_12\",\"start\":1575861384,\"end\":2207877384,\"exposure\":222,\"mids\":\"4468286953166651\"}\r\n$16\r\nad_620a04c645bc3\r\n$152\r\n{\"adid\":\"ad_620a04c645bc3\",\"start\":1644768000,\"end\":1647446400,\"exposure\":100000000,\"mids\":\"4736726230895209\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_612c96944b18c\r\n$95\r\n{\"adid\":\"ad_612c96944b18c\",\"start\":1630598400,\"end\":1633017600,\"exposure\":2000000000,\"mids\":\"\"}\r\n$16\r\nad_619c94c9e1a3f\r\n$95\r\n{\"adid\":\"ad_619c94c9e1a3f\",\"start\":1637651606,\"end\":1648710807,\"exposure\":2100000000,\"mids\":\"\"}\r\n$16\r\nad_621cc078b14e5\r\n$169\r\n{\"adid\":\"ad_621cc078b14e5\",\"start\":1645977600,\"end\":1648656000,\"exposure\":100000000,\"mids\":\"4741545502441988,4741580051712413\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f765cf92f4b\r\n$169\r\n{\"adid\":\"ad_61f765cf92f4b\",\"start\":1643558460,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4728771901133069,4731640230183405\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f79446ac00f\r\n$169\r\n{\"adid\":\"ad_61f79446ac00f\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4730930545562652,4731646026973271\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6200d040e9c05\r\n$169\r\n{\"adid\":\"ad_6200d040e9c05\",\"start\":1644163200,\"end\":1646841600,\"exposure\":100000000,\"mids\":\"4726598756205880,4732063011572467\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62036e6a0a0b1\r\n$169\r\n{\"adid\":\"ad_62036e6a0a0b1\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4730337131237645,4734730736506689\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_testbychange3\r\n"; +static SIMPLE_ARR: &'static str = "*65\r\n$16\r\nad_61fa9e8bc3624\r\n$169\r\n{\"adid\":\"ad_61fa9e8bc3624\",\"start\":1643817600,\"end\":1646496000,\"exposure\":100000000,\"mids\":\"4731641022647893,4731670442019006\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62024d35f2de0\r\n$169\r\n{\"adid\":\"ad_62024d35f2de0\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4733663557980874,4734162701387024\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f7666e70f64\r\n$169\r\n{\"adid\":\"ad_61f7666e70f64\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4728771901133069,4731640230183405\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_620370eed4001\r\n$169\r\n{\"adid\":\"ad_620370eed4001\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4730337131237645,4734730736506689\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$13\r\n0000000000000\r\n$155\r\n{\"adid\":\"0000000000000\",\"start\":1,\"end\":1641394800000,\"exposure\":2147483647,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[\"诺贝尔_梁特别纪念\"]}\r\n$6\r\n888888\r\n$118\r\n{\"adid\":\"888888\",\"start\":1641952859,\"end\":1636732800,\"exposure\":0,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61fa9fecafbb0\r\n$169\r\n{\"adid\":\"ad_61fa9fecafbb0\",\"start\":1643817600,\"end\":1646496000,\"exposure\":100000000,\"mids\":\"4731641022647893,4731670442019006\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621cca647edc7\r\n$169\r\n{\"adid\":\"ad_621cca647edc7\",\"start\":1645977600,\"end\":1648569600,\"exposure\":100000000,\"mids\":\"4722181898240555,4722187947212819\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61ef5e9ca6a58\r\n$128\r\n{\"adid\":\"ad_61ef5e9ca6a58\",\"start\":1643077260,\"end\":1643595661,\"exposure\":0,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6206317004e93\r\n$169\r\n{\"adid\":\"ad_6206317004e93\",\"start\":1644508800,\"end\":1647187200,\"exposure\":100000000,\"mids\":\"4734886621480080,4735615411424926\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$7\r\nlj_test\r\n$69\r\n{\"adid\":\"lj_test\",\"start\":1547811967,\"end\":4476654671,\"exposure\":100}\r\n$16\r\nad_621c8cf3ed4da\r\n$169\r\n{\"adid\":\"ad_621c8cf3ed4da\",\"start\":1646100000,\"end\":1648742400,\"exposure\":100000000,\"mids\":\"4736804262248952,4736733373533937\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6200ced6323a5\r\n$169\r\n{\"adid\":\"ad_6200ced6323a5\",\"start\":1644163200,\"end\":1646841600,\"exposure\":100000000,\"mids\":\"4726598756205880,4732063011572467\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621caee0a2410\r\n$169\r\n{\"adid\":\"ad_621caee0a2410\",\"start\":1646100000,\"end\":1648742400,\"exposure\":100000000,\"mids\":\"4736804262248952,4736733373533937\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621625d65d2eb\r\n$169\r\n{\"adid\":\"ad_621625d65d2eb\",\"start\":1645545600,\"end\":1648224000,\"exposure\":100000000,\"mids\":\"4734972374549029,4737921637421709\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62063250bd30a\r\n$169\r\n{\"adid\":\"ad_62063250bd30a\",\"start\":1644508800,\"end\":1647187200,\"exposure\":100000000,\"mids\":\"4734886621480080,4735615411424926\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62024c68a9273\r\n$169\r\n{\"adid\":\"ad_62024c68a9273\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4733663557980874,4734162701387024\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_621cbf813a42a\r\n$169\r\n{\"adid\":\"ad_621cbf813a42a\",\"start\":1645977600,\"end\":1648656000,\"exposure\":100000000,\"mids\":\"4741545502441988,4741580051712413\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f794caa1369\r\n$169\r\n{\"adid\":\"ad_61f794caa1369\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4730930545562652,4731646026973271\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nwjtestmml8888888\r\n$134\r\n{\"adid\":\"wjtestmml8888888\",\"start\":1,\"end\":9223372036854775807,\"exposure\":1000000,\"mids\":\"\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6214a5d19802b\r\n$169\r\n{\"adid\":\"ad_6214a5d19802b\",\"start\":1645545600,\"end\":1648224000,\"exposure\":100000000,\"mids\":\"4734972374549029,4737921637421709\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6131ee328227d\r\n$95\r\n{\"adid\":\"ad_6131ee328227d\",\"start\":1630598400,\"end\":1633017600,\"exposure\":2000000000,\"mids\":\"\"}\r\n$16\r\nad_620a05bed5bd2\r\n$152\r\n{\"adid\":\"ad_620a05bed5bd2\",\"start\":1644768000,\"end\":1647446400,\"exposure\":100000000,\"mids\":\"4736726230895209\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$17\r\ndaoguang3_test_12\r\n$105\r\n{\"adid\":\"daoguang3_test_12\",\"start\":1575861384,\"end\":2207877384,\"exposure\":222,\"mids\":\"4468286953166651\"}\r\n$16\r\nad_620a04c645bc3\r\n$152\r\n{\"adid\":\"ad_620a04c645bc3\",\"start\":1644768000,\"end\":1647446400,\"exposure\":100000000,\"mids\":\"4736726230895209\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_612c96944b18c\r\n$95\r\n{\"adid\":\"ad_612c96944b18c\",\"start\":1630598400,\"end\":1633017600,\"exposure\":2000000000,\"mids\":\"\"}\r\n$16\r\nad_619c94c9e1a3f\r\n$95\r\n{\"adid\":\"ad_619c94c9e1a3f\",\"start\":1637651606,\"end\":1648710807,\"exposure\":2100000000,\"mids\":\"\"}\r\n$16\r\nad_621cc078b14e5\r\n$169\r\n{\"adid\":\"ad_621cc078b14e5\",\"start\":1645977600,\"end\":1648656000,\"exposure\":100000000,\"mids\":\"4741545502441988,4741580051712413\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f765cf92f4b\r\n$169\r\n{\"adid\":\"ad_61f765cf92f4b\",\"start\":1643558460,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4728771901133069,4731640230183405\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_61f79446ac00f\r\n$169\r\n{\"adid\":\"ad_61f79446ac00f\",\"start\":1643558400,\"end\":1646236800,\"exposure\":100000000,\"mids\":\"4730930545562652,4731646026973271\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_6200d040e9c05\r\n$169\r\n{\"adid\":\"ad_6200d040e9c05\",\"start\":1644163200,\"end\":1646841600,\"exposure\":100000000,\"mids\":\"4726598756205880,4732063011572467\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_62036e6a0a0b1\r\n$169\r\n{\"adid\":\"ad_62036e6a0a0b1\",\"start\":1644336000,\"end\":1647014400,\"exposure\":100000000,\"mids\":\"4730337131237645,4734730736506689\",\"uid_blacklist\":[],\"keyword_blacklist\":[]}\r\n$16\r\nad_testbychange3\r\n"; From 51062aece7a9d35a90dfec79609b2d4a47d80502 Mon Sep 17 00:00:00 2001 From: hailong15 Date: Tue, 14 Oct 2025 17:12:46 +0800 Subject: [PATCH 3/6] fix err --- protocol/src/redis/mod.rs | 24 ++++++++---------------- protocol/src/redis/packet.rs | 8 ++++++-- stream/src/checker.rs | 8 ++++---- tests/src/benches/redis.rs | 2 +- tests/src/protocols/proc_test.rs | 11 ++++++----- 5 files changed, 25 insertions(+), 28 deletions(-) diff --git a/protocol/src/redis/mod.rs b/protocol/src/redis/mod.rs index f89cf6282..684d3ca06 100644 --- a/protocol/src/redis/mod.rs +++ b/protocol/src/redis/mod.rs @@ -17,7 +17,7 @@ use sharding::hash::Hash; pub struct Redis; #[derive(Debug, Clone, Copy, PartialEq, Eq)] -#[repr(u8)] +#[repr(u32)] pub enum HandShakeStatus { Init = 0, Sent = 1, @@ -106,13 +106,7 @@ impl Redis { impl Protocol for Redis { fn handshake(&self, stream: &mut impl Stream, option: &mut ResOption) -> Result { - let ctx = transmute(stream.context()); - let status = match ctx.status { - 0 => HandShakeStatus::Init, - 1 => HandShakeStatus::Sent, - 2 => HandShakeStatus::Success, - _ => HandShakeStatus::Init, - }; + let status = transmute(stream.context()).status; match status { HandShakeStatus::Init => { @@ -126,22 +120,20 @@ impl Protocol for Redis { auth_cmd.extend_from_slice(b"\r\n"); stream.write_all(&auth_cmd)?; - ctx.status = HandShakeStatus::Sent as u32; + transmute(stream.context()).status = HandShakeStatus::Sent; Ok(HandShake::Continue) } + HandShakeStatus::Sent => { - let data: Packet = stream.slice().into(); + let data = stream.slice(); if let Some(idx) = data.find_lf_cr(0) { // response should be +OK\r\n - if &data[..idx] == b"+OK" { + if data.start_with(0, b"+OK\r\n") { stream.ignore(idx + 2); - ctx.status = HandShakeStatus::Success as u32; + transmute(stream.context()).status = HandShakeStatus::Success; return Ok(HandShake::Success); } - log::warn!( - "redis auth failed response:{:?}", - data.sub_slice(0, idx + 2) - ); + log::warn!("redis auth failed response:{:?}", data); Err(Error::AuthFailed) } else { stream.reserve(8); diff --git a/protocol/src/redis/packet.rs b/protocol/src/redis/packet.rs index 8aab4af81..60910b89f 100644 --- a/protocol/src/redis/packet.rs +++ b/protocol/src/redis/packet.rs @@ -2,7 +2,11 @@ use super::{ command::{CommandHasher, CommandProperties, CommandType}, error::RedisError, }; -use crate::{Flag, Result, StreamContext, error::Error, redis::command}; +use crate::{ + Flag, Result, StreamContext, + error::Error, + redis::{HandShakeStatus, command}, +}; use ds::RingSlice; use sharding::hash::Hash; @@ -40,7 +44,7 @@ impl From for StreamContext { pub struct ResponseContext { pub oft: usize, pub bulk: u32, - pub status: u32, + pub status: HandShakeStatus, } #[inline] pub fn transmute(ctx: &mut StreamContext) -> &mut ResponseContext { diff --git a/stream/src/checker.rs b/stream/src/checker.rs index 9e1a87e23..0afac2b07 100644 --- a/stream/src/checker.rs +++ b/stream/src/checker.rs @@ -1,8 +1,8 @@ -use ds::time::{timeout, Duration}; +use ds::time::{Duration, timeout}; use rt::Cancel; use std::future::Future; use std::pin::Pin; -use std::task::{ready, Poll}; +use std::task::{Poll, ready}; use tokio::io::AsyncWrite; use tokio::net::TcpStream; @@ -10,8 +10,8 @@ use tokio::net::TcpStream; use protocol::{Error, HandShake, Protocol, Request, ResOption, Result, Stream}; use crate::handler::Handler; -use ds::chan::mpsc::Receiver; use ds::Switcher; +use ds::chan::mpsc::Receiver; use metrics::Path; use rt::{Entry, Timeout}; @@ -77,7 +77,7 @@ impl BackendChecker { let mut stream = rt::Stream::from(stream.expect("not expected")); let rx = &mut self.rx; - if self.parser.config().need_auth { + if self.parser.config().need_auth && self.option.token.len() > 0 { let auth = Auth { option: &mut self.option, s: &mut stream, diff --git a/tests/src/benches/redis.rs b/tests/src/benches/redis.rs index f9e44db84..700fcb472 100644 --- a/tests/src/benches/redis.rs +++ b/tests/src/benches/redis.rs @@ -34,7 +34,7 @@ pub(super) fn parse(c: &mut Criterion) { let mut ctx = protocol::redis::ResponseContext { oft: 0, bulk: 0, - status: 0, + status: protocol::redis::HandShakeStatus::Init, }; group.bench_function("skip_multibulks", |b| { b.iter(|| { diff --git a/tests/src/protocols/proc_test.rs b/tests/src/protocols/proc_test.rs index 3daaec613..64a6c8c82 100644 --- a/tests/src/protocols/proc_test.rs +++ b/tests/src/protocols/proc_test.rs @@ -2,6 +2,7 @@ use bytes::BufMut; use ds::RingSlice; use protocol::Bit; use protocol::Packet; +use protocol::redis::HandShakeStatus::Init; use protocol::redis::ResponseContext; #[test] @@ -11,7 +12,7 @@ fn parse_rsp() { let mut ctx = ResponseContext { oft: 0, bulk: 0, - status: 0, + status: Init, }; assert!(data.skip_multibulks_with_ctx(&mut ctx).is_ok()); assert_eq!(ctx.oft, data.len()); @@ -31,7 +32,7 @@ fn parse_command_rsp() { let mut ctx = ResponseContext { oft: 0, bulk: 0, - status: 0, + status: Init, }; assert!(rsp_data.skip_multibulks_with_ctx(&mut ctx).is_ok()); assert_eq!(ctx.oft, rsp_data.len()); @@ -53,7 +54,7 @@ fn parse_command_long_array_rsp() { let mut ctx = ResponseContext { oft: 0, bulk: 0, - status: 0, + status: Init, }; let mut v: Vec = Vec::with_capacity(65000); @@ -126,7 +127,7 @@ fn parse_command_deep_array_rsp() { let mut ctx = ResponseContext { oft: 0, bulk: 0, - status: 0, + status: Init, }; let mut v: Vec = Vec::with_capacity(1024); @@ -205,7 +206,7 @@ fn response_skip_multibulks(data: &[u8]) { let mut ctx = ResponseContext { oft: 0, bulk: 0, - status: 0, + status: Init, }; for i in 1..(data.len() - 1) { let data = data[..i].to_vec(); From 9a2b76cbde1d0ba68861b528860f1112424157e0 Mon Sep 17 00:00:00 2001 From: hailong15 Date: Thu, 23 Oct 2025 11:15:56 +0800 Subject: [PATCH 4/6] =?UTF-8?q?redis=20topo=20=E6=94=AF=E6=8C=81=E5=AF=86?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- endpoint/src/redisservice/config.rs | 29 +++++++++++++++++++++------ endpoint/src/redisservice/topo.rs | 31 +++++++++++++++++++++++++---- endpoint/src/topo.rs | 28 ++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 10 deletions(-) diff --git a/endpoint/src/redisservice/config.rs b/endpoint/src/redisservice/config.rs index 4ab320708..de063f73f 100644 --- a/endpoint/src/redisservice/config.rs +++ b/endpoint/src/redisservice/config.rs @@ -1,11 +1,8 @@ -//use ds::time::Duration; - -use std::{collections::HashSet, fmt::Debug}; - +use base64::{Engine as _, engine::general_purpose}; use serde::{Deserialize, Serialize}; -//use sharding::distribution::{DIST_ABS_MODULA, DIST_MODULA}; +use std::{collections::HashSet, fmt::Debug, fs}; -use crate::{Timeout, TO_REDIS_M, TO_REDIS_S}; +use crate::{TO_REDIS_M, TO_REDIS_S, Timeout}; // range/modrange 对应的distribution配置项如果有此后缀,不进行后端数量的校验 const NO_CHECK_SUFFIX: &str = "-nocheck"; @@ -42,6 +39,8 @@ pub struct Basic { // master是否参与读 #[serde(default)] pub(crate) master_read: bool, + #[serde(default)] + pub(crate) password: String, } impl RedisNamespace { @@ -78,6 +77,15 @@ impl RedisNamespace { return None; } + // 解密密码 + match ns.decrypt_password() { + Ok(password) => ns.basic.password = password, + Err(e) => { + log::warn!("failed to decrypt password, e:{}", e); + return None; + } + } + log::debug!("parsed redis config:{}/{}", ns.basic.distribution, cfg); return Some(ns); } @@ -139,4 +147,13 @@ impl RedisNamespace { true } + + #[inline] + fn decrypt_password(&self) -> Result> { + let key_pem = fs::read_to_string(&context::get().key_path)?; + let encrypted_data = general_purpose::STANDARD.decode(self.basic.password.as_bytes())?; + let decrypted_data = ds::decrypt::decrypt_password(&key_pem, &encrypted_data)?; + let decrypted_string = String::from_utf8(decrypted_data)?; + Ok(decrypted_string) + } } diff --git a/endpoint/src/redisservice/topo.rs b/endpoint/src/redisservice/topo.rs index 4dff8d163..f2b0bdad9 100644 --- a/endpoint/src/redisservice/topo.rs +++ b/endpoint/src/redisservice/topo.rs @@ -1,10 +1,10 @@ use crate::{ + Endpoint, Endpoints, PerformanceTuning, Topology, dns::{DnsConfig, DnsLookup}, shards::Shard, - Endpoint, Endpoints, PerformanceTuning, Topology, }; use discovery::TopologyWrite; -use protocol::{Protocol, RedisFlager, Request, Resource::Redis}; +use protocol::{Protocol, RedisFlager, Request, ResOption, Resource::Redis}; use sharding::distribution::Distribute; use sharding::hash::{Hash, HashKey, Hasher}; @@ -18,6 +18,7 @@ pub struct RedisService { distribute: Distribute, parser: P, cfg: Box>, + password: String, } impl From

for RedisService { #[inline] @@ -28,6 +29,7 @@ impl From

for RedisService { hasher: Default::default(), distribute: Default::default(), cfg: Default::default(), + password: Default::default(), } } } @@ -188,6 +190,18 @@ where assert_eq!(addrs.len(), self.cfg.shards_url.len()); // 到这之后,所有的shard都能解析出ip + // 如果密码不一致,则清空所有现有的shard + if self.password != self.cfg.basic.password { + self.shards.clear(); + self.password = self.cfg.basic.password.clone(); + } + + // Redis认证只需要密码,无需用户名 + let res_option = ResOption { + token: self.cfg.basic.password.clone(), + username: String::new(), // Redis不需要用户名 + }; + // 把所有的endpoints cache下来 let mut endpoints: Endpoints<'_, P, E> = Endpoints::new(&self.cfg.service, &self.parser, Redis); @@ -199,10 +213,18 @@ where // 遍历所有的shards_url addrs.iter().for_each(|ips| { assert!(ips.len() >= 2); - let master = endpoints.take_or_build_one(&ips[0], self.cfg.timeout_master()); + let master = endpoints.take_or_build_one_with_res( + &ips[0], + self.cfg.timeout_master(), + res_option.clone(), + ); // 第0个是master,如果master提供读,则从第0个开始。 let oft = if self.cfg.basic.master_read { 0 } else { 1 }; - let slaves = endpoints.take_or_build(&ips[oft..], self.cfg.timeout_slave()); + let slaves = endpoints.take_or_build_with_res( + &ips[oft..], + self.cfg.timeout_slave(), + res_option.clone(), + ); let shard = Shard::selector( self.cfg.basic.selector.tuning_mode(), master, @@ -213,6 +235,7 @@ where shard.check_region_len(ty, &self.cfg.service); self.shards.push(shard); }); + Some(()) } } diff --git a/endpoint/src/topo.rs b/endpoint/src/topo.rs index 2f231f03c..1c6bbba34 100644 --- a/endpoint/src/topo.rs +++ b/endpoint/src/topo.rs @@ -121,6 +121,13 @@ impl<'a, P: Protocol, E: Endpoint> Endpoints<'a, P, E> { .pop() .expect("take") } + + pub fn take_or_build_one_with_res(&mut self, addr: &str, to: Timeout, res: ResOption) -> E { + self.take_or_build_with_res(&[addr.to_owned()], to, res) + .pop() + .expect("take") + } + pub fn take_or_build(&mut self, addrs: &[String], to: Timeout) -> Vec { addrs .iter() @@ -137,6 +144,27 @@ impl<'a, P: Protocol, E: Endpoint> Endpoints<'a, P, E> { .collect() } + pub fn take_or_build_with_res( + &mut self, + addrs: &[String], + to: Timeout, + res: ResOption, + ) -> Vec { + addrs + .iter() + .map(|addr| { + self.cache + .get_mut(addr) + .map(|endpoints| endpoints.pop()) + .flatten() + .unwrap_or_else(|| { + let p = self.parser.clone(); + E::build_o(&addr, p, self.resource, self.service, to, res.clone()) + }) + }) + .collect() + } + #[inline] pub fn take_all(&mut self) -> Vec { self.cache From 65f70cf57acbfbb8d67e2c51cac4488220800646 Mon Sep 17 00:00:00 2001 From: hailong15 Date: Fri, 24 Oct 2025 18:38:28 +0800 Subject: [PATCH 5/6] fix --- endpoint/src/redisservice/config.rs | 12 +++++++----- stream/src/checker.rs | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/endpoint/src/redisservice/config.rs b/endpoint/src/redisservice/config.rs index de063f73f..e0df06943 100644 --- a/endpoint/src/redisservice/config.rs +++ b/endpoint/src/redisservice/config.rs @@ -78,11 +78,13 @@ impl RedisNamespace { } // 解密密码 - match ns.decrypt_password() { - Ok(password) => ns.basic.password = password, - Err(e) => { - log::warn!("failed to decrypt password, e:{}", e); - return None; + if !ns.basic.password.is_empty() { + match ns.decrypt_password() { + Ok(password) => ns.basic.password = password, + Err(e) => { + log::warn!("failed to decrypt password, e:{}", e); + return None; + } } } diff --git a/stream/src/checker.rs b/stream/src/checker.rs index 0afac2b07..5e915f151 100644 --- a/stream/src/checker.rs +++ b/stream/src/checker.rs @@ -119,7 +119,7 @@ impl BackendChecker { timeout += 1; } Error::ChanReadClosed => { - debug_assert!(!self.finish.get(), "channel closed but not finish"); + debug_assert!(self.finish.get(), "channel closed but not finish"); } Error::TxBufFull => { let mut buf_full = path_addr.num("buf_full"); From 89ddaa8e1fbaa3a8922ab647b6b9e3b6490fc2ed Mon Sep 17 00:00:00 2001 From: hailong15 Date: Tue, 11 Nov 2025 16:05:10 +0800 Subject: [PATCH 6/6] redis_key_path --- context/src/lib.rs | 7 +++++++ endpoint/src/redisservice/config.rs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/context/src/lib.rs b/context/src/lib.rs index 0e310a7ab..f8a8a303c 100644 --- a/context/src/lib.rs +++ b/context/src/lib.rs @@ -109,6 +109,13 @@ pub struct ContextOption { #[clap(long, help("private key path"), default_value("/var/private_key.pem"))] pub key_path: String, + #[clap( + long, + help("redis private key path"), + default_value("/var/redis_private_key.pem") + )] + pub redis_key_path: String, + #[clap(long, help("region"), default_value(""))] pub region: String, diff --git a/endpoint/src/redisservice/config.rs b/endpoint/src/redisservice/config.rs index e0df06943..d0a0ea3c3 100644 --- a/endpoint/src/redisservice/config.rs +++ b/endpoint/src/redisservice/config.rs @@ -152,7 +152,7 @@ impl RedisNamespace { #[inline] fn decrypt_password(&self) -> Result> { - let key_pem = fs::read_to_string(&context::get().key_path)?; + let key_pem = fs::read_to_string(&context::get().redis_key_path)?; let encrypted_data = general_purpose::STANDARD.decode(self.basic.password.as_bytes())?; let decrypted_data = ds::decrypt::decrypt_password(&key_pem, &encrypted_data)?; let decrypted_string = String::from_utf8(decrypted_data)?;