diff --git a/dev/GenerateIcebergUuidOracle.java b/dev/GenerateIcebergUuidOracle.java new file mode 100644 index 00000000000..9f1d680b315 --- /dev/null +++ b/dev/GenerateIcebergUuidOracle.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HexFormat; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +/** Run with JDK 17 and 21; the generated fixtures must match byte for byte. */ +class GenerateIcebergUuidOracle { + private static final String LICENSE = + """ + # Licensed to the Apache Software Foundation (ASF) under one + # or more contributor license agreements. See the NOTICE file + # distributed with this work for additional information + # regarding copyright ownership. The ASF licenses this file + # to you under the Apache License, Version 2.0 (the + # "License"); you may not use this file except in compliance + # with the License. You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, + # software distributed under the License is distributed on an + # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + # KIND, either express or implied. See the License for the + # specific language governing permissions and limitations + # under the License. + """; + + public static void main(String[] args) throws Exception { + System.err.println(System.getProperty("java.vendor") + " " + Runtime.version()); + var lines = new ArrayList<>(LICENSE.lines().toList()); + lines.add( + "# Generated by dev/GenerateIcebergUuidOracle.java; UTF-8 hex input, UUID hex or error"); + var inputs = + new ArrayList<>( + List.of( + "", + "1-1-1-1-1", + "+1-1-1-1-1", + "100000000-1-1-1-1", + "1-10000-1-1-1", + "1-1-1-1-1", + "١-١-١-١-١", + "A-b-C-d-E", + "𝟙-1-1-1-1", + "-1-1-1-1-1", + "1--1-1-1", + "1-1-1-1-8000000000000000", + "f47ac10b58cc4372a5670e02b2c3d479", + "{f47ac10b-58cc-4372-a567-0e02b2c3d479}", + "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", + "00000000-0000-0000-0000-000000000000", + " 1-1-1-1-1", + "1-1-1-1-1\n")); + for (int group = 0; group < 5; group++) { + for (String value : + List.of( + "", + "+", + "++1", + "g", + "7", + "+f", + "00000000000000001", + "7fffffffffffffff", + "8000000000000000", + "ffffffffffffffff", + "0000000000000000000001")) { + var groups = new String[] {"1", "1", "1", "1", "1"}; + groups[group] = value; + inputs.add(String.join("-", groups)); + } + } + // Check Character.digit(char, 16) over the entire BMP, including rejected numeric characters. + var digits = new ArrayList<>(LICENSE.lines().toList()); + for (int c = 0; c <= 0xffff; c++) { + int digit = Character.digit((char) c, 16); + if (digit >= 0) { + digits.add(String.format("%04x\t%d", c, digit)); + inputs.add((char) c + "-1-1-1-1"); + } + } + var random = new Random(6959); + String alphabet = "0123456789abcdefABCDEF+- g\t1١A²Ⅳ𝟙"; + // Include valid groups of irregular widths, then mutate separators, signs and characters. + for (int i = 0; i < 1024; i++) { + var groups = new ArrayList(); + for (int g = 0; g < 5; g++) { + String hex = Long.toHexString(random.nextLong() & Long.MAX_VALUE); + groups.add(hex.substring(0, 1 + random.nextInt(hex.length()))); + } + String value = String.join("-", groups); + inputs.add(value); + int at = random.nextInt(value.length()); + // Use code points to avoid creating unpaired surrogates that UTF-8 cannot represent. + int[] chars = alphabet.codePoints().toArray(); + String replacement = new String(Character.toChars(chars[random.nextInt(chars.length)])); + inputs.add(value.substring(0, at) + replacement + value.substring(at + 1)); + } + for (String input : inputs) { + String result; + try { + result = UUID.fromString(input).toString().replace("-", ""); + } catch (IllegalArgumentException e) { + result = "error"; + } + lines.add(HexFormat.of().formatHex(input.getBytes(StandardCharsets.UTF_8)) + "\t" + result); + } + Path out = Path.of(args[0]); + Files.createDirectories(out); + Files.write(out.resolve("uuid-java.tsv"), lines, StandardCharsets.UTF_8); + Files.write(out.resolve("uuid-java-digits.tsv"), digits, StandardCharsets.UTF_8); + } +} diff --git a/docs/source/contributor-guide/iceberg-writes.md b/docs/source/contributor-guide/iceberg-writes.md index 373f3c91df5..02289542d1d 100644 --- a/docs/source/contributor-guide/iceberg-writes.md +++ b/docs/source/contributor-guide/iceberg-writes.md @@ -274,9 +274,14 @@ Points where Comet adapts iceberg-rust to match iceberg-java: accounting follows `FallbackValuesWriter`, `DictionaryValuesWriter` and `RunLengthBitPackingHybridEncoder`, and its tests pin answers recorded from parquet-mr itself. The held rows then go through `RowPacer`, so the roll grid does not move. -- **Field ids and casting.** `decorate_batch_with_field_ids` casts each batch to the +- **Field ids and casting.** `UuidAlignment` casts each batch to the field-id-annotated Arrow schema derived from the Iceberg schema, with `safe: false`, so a type - mismatch fails the task instead of writing NULLs. + mismatch fails the task instead of writing NULLs. It identifies UUID leaves by Iceberg field + id and parses their strings with Java-compatible UUID semantics into 16 big-endian bytes. + Conversion descriptors are built once per task; UUID-free subtrees keep the ordinary cast path. + Struct validity and list/map offset windows mask invisible values before parsing, including + required children under null parents. Invalid visible UUIDs fail through the existing abort + guard. `fixed(16)` is not treated as UUID. - **Deterministic output order.** `FanoutPartitions`, Comet's version of iceberg-rust's `FanoutWriter`, closes its files in an order that depends on how the rows arrived and on which partitions it closed early, so the fanout path sorts its `DataFile`s by path before returning them @@ -461,6 +466,27 @@ for Spark 4.2, so the 4.2 profile builds against the 4.0 runtime and the Iceberg Behaviour that differs between Iceberg versions, such as reflection targets, metrics conventions and partition path spelling, needs a test that runs on each. +The native writer's UUID parser is pinned against fixtures generated with JDK 17 and 21; +`dev/GenerateIcebergUuidOracle.java` records Java's acceptance and 16-byte output, plus +`Character.digit` for the entire BMP. Regeneration instructions and the exact tested JDK versions +are in `native/core/src/execution/operators/testdata/README.md`. + +Select the UUID writer benchmark separately with: + +```sh +PROFILES=-Pspark-4.1 SPARK_GENERATE_BENCHMARK_FILES=1 \ + make benchmark-org.apache.spark.sql.benchmark.CometIcebergWriteBenchmark uuid +``` + +It uses real Iceberg UUID columns, four million rows, eight source Parquet files, and three +corpora: canonical UUIDs, canonical UUIDs with one null in eight, and Java-compatible shortened +groups. Source generation and table creation are untimed. It rejects native fallback, checks +normalized checksums, and reports five or more measured iterations with median, range, rows/s, +writer factor, file count and output bytes. The default benchmark selection remains the non-UUID +control (`control` selects only its unpartitioned insert). Comparing that control before and +after a change requires matching builds and settings; +the UUID writer factor alone is not evidence of a regression-free non-UUID path. + When writing a native-write test: - **Assert that the native writer ran.** Every fallback is silent to the query, so a passing diff --git a/docs/source/user-guide/latest/iceberg.md b/docs/source/user-guide/latest/iceberg.md index 972ceea6fbf..9263c9e8505 100644 --- a/docs/source/user-guide/latest/iceberg.md +++ b/docs/source/user-guide/latest/iceberg.md @@ -494,7 +494,7 @@ A write is eligible only when ALL of the following hold: | Hadoop S3A settings for an `s3` / `s3a` data location | only `fs.s3a.access.key`, `secret.key`, `session.token`, `endpoint`, `endpoint.region`, and `path.style.access`, including their `fs.s3a.bucket..*` forms; any other effective `fs.s3a.*` setting falls back, apart from the ignored settings listed below | | Iceberg `FileIO` S3 settings for an `s3` / `s3a` data location | the S3 endpoint, region, static/session credentials, path-style, SSE (`none`, `s3`, `kms`, or `custom`; not `dsse-kms`), assume-role, anonymous/config-chain settings parsed by the pinned iceberg-rust version, plus Comet's credential-provider class and built-in web-identity properties. When a custom provider is configured, its vendor-owned `s3.*` / `client.*` properties are also forwarded; unsupported Iceberg-defined S3 settings still fall back | | partition spec | any, except a `void` field whose source column was dropped beside a live field (see below) | -| column types | any except `uuid` (Spark plans it as a string; no Arrow cast reaches `fixed(16)`) and the v3 types `variant`, `unknown`, `timestamp_ns`, `geometry` and `geography` | +| column types | any except the v3 types `variant`, `unknown`, `timestamp_ns`, `geometry` and `geography` | Within the namespaces that shape data-file bytes — `write.parquet.*` and `parquet.*` — everything not listed above must be absent: unvetted `write.parquet.*` keys (e.g. @@ -587,6 +587,14 @@ or GCS each read is a GET request, so the task waits two request round trips per small next to uploading a large file, but a write that produces many small files, such as a fanout write over many partitions, pays it for every one of them. +UUID columns, including struct fields, array elements and map keys/values, are normalized +from Spark strings using Java's `UUID.fromString` rules. This accepts uppercase, shortened +groups and the other non-canonical forms accepted by Java; an invalid visible value fails the +task and triggers ordinary write cleanup. `fixed(16)` columns retain binary semantics. +UUID columns used as partition or sort sources currently fall back, because Spark distributes +and orders the input strings before UUID normalization. UUID data columns remain eligible in +unpartitioned, clustered and fanout writes partitioned or sorted by other columns. + ### Failure handling Eligibility is decided entirely at plan time. That includes the reflection surface: every @@ -656,16 +664,23 @@ unchanged. Some differences between parquet-mr and the pinned parquet-rs / iceberg-rust are unconditional — they apply to every native write and cannot be configured away. Enabling `spark.comet.write.iceberg.enabled` accepts them. They fall into two classes with very -different blast radius: differences confined to the physical bytes of a data file (cosmetic — -no reader decision is based on them), and differences visible in manifest metadata (these +different blast radius: differences confined to the physical bytes of a data file, and +differences visible in manifest metadata (these outlive the write and feed later readers' pruning decisions, so each one is analyzed individually below). -#### Physical file layout only (cosmetic) +#### Physical file layout -No Iceberg reader bases a planning or correctness decision on these; they change the bytes of -a data file but not what any reader computes from it: +Iceberg readers use the table schema and recover the same values from these layouts. +Tools that inspect Parquet files without the Iceberg schema can observe the UUID annotation +difference below; the remaining differences are cosmetic: +- UUID leaves use `FIXED_LEN_BYTE_ARRAY(16)` with Iceberg field ids and big-endian UUID bytes, + but the pinned iceberg-rust writer omits the Parquet `UUID` logical annotation that + iceberg-java emits. This applies to nested UUIDs too. Iceberg readers interpret these fields + using the table schema; a standalone Parquet reader relying on the logical annotation sees + fixed-length binary instead of UUID. Native writes therefore do not provide full UUID footer + parity ([#6959](https://github.com/apache/datafusion-comet/issues/6959)). - Footer key-value metadata differs: native files carry an `ARROW:schema` entry and no `iceberg.schema` entry; iceberg-java files are the opposite. - The Parquet root schema element is named `arrow_schema` (iceberg-java: `table`). diff --git a/native/core/src/execution/operators/iceberg_uuid.rs b/native/core/src/execution/operators/iceberg_uuid.rs new file mode 100644 index 00000000000..4628d653099 --- /dev/null +++ b/native/core/src/execution/operators/iceberg_uuid.rs @@ -0,0 +1,819 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//! Iceberg UUID strings use Java's `UUID.fromString` semantics, including its permissive +//! five-group fallback. Only Iceberg UUID fields use this conversion; `fixed(16)` stays binary. + +use std::sync::Arc; + +use arrow::array::{ + Array, ArrayRef, AsArray, FixedSizeBinaryBuilder, ListArray, MapArray, StructArray, +}; +use arrow::datatypes::{DataType, Field, SchemaRef}; +use arrow::record_batch::RecordBatch; +use datafusion::error::{DataFusionError, Result}; +use iceberg::spec::{PrimitiveType, Schema, Type}; +use parquet::arrow::PARQUET_FIELD_ID_META_KEY; + +/// Java parses UTF-16 code units, so supplementary-plane digits are deliberately excluded. +/// This table is pinned against Character.digit(char, 16) on JDK 17 and 21 over the entire BMP. +fn java_hex_digit(c: char) -> Option { + match c { + '0'..='9' => Some(c as u64 - '0' as u64), + 'a'..='f' => Some(c as u64 - 'a' as u64 + 10), + 'A'..='F' => Some(c as u64 - 'A' as u64 + 10), + '\u{ff21}'..='\u{ff26}' => Some(c as u64 - 0xff21 + 10), + '\u{ff41}'..='\u{ff46}' => Some(c as u64 - 0xff41 + 10), + _ => { + const ZEROS: &[u32] = &[ + 0x660, 0x6f0, 0x7c0, 0x966, 0x9e6, 0xa66, 0xae6, 0xb66, 0xbe6, 0xc66, 0xce6, 0xd66, + 0xde6, 0xe50, 0xed0, 0xf20, 0x1040, 0x1090, 0x17e0, 0x1810, 0x1946, 0x19d0, 0x1a80, + 0x1a90, 0x1b50, 0x1bb0, 0x1c40, 0x1c50, 0xa620, 0xa8d0, 0xa900, 0xa9d0, 0xa9f0, + 0xaa50, 0xabf0, 0xff10, + ]; + let value = c as u32; + ZEROS.iter().find_map(|&zero| { + (value >= zero && value < zero + 10).then(|| u64::from(value - zero)) + }) + } + } +} + +fn parse_java_uuid(value: &str) -> Option<[u8; 16]> { + // Avoid the group parser and Unicode handling for canonical ASCII strings. parse_str alone + // also accepts forms Java rejects, so require the canonical dash positions first. + let bytes = value.as_bytes(); + if bytes.len() == 36 && [8, 13, 18, 23].iter().all(|&i| bytes[i] == b'-') { + if let Ok(uuid) = uuid::Uuid::parse_str(value) { + return Some(*uuid.as_bytes()); + } + } + if value.encode_utf16().take(37).count() > 36 { + return None; + } + let mut groups = value.split('-'); + let mut parts = [0u64; 5]; + for part in &mut parts { + let group = groups.next()?; + let digits = group.strip_prefix('+').unwrap_or(group); + if digits.is_empty() { + return None; + } + let mut number = 0u64; + for c in digits.chars() { + number = number.checked_mul(16)?.checked_add(java_hex_digit(c)?)?; + // Long.parseLong rejects signed overflow *before* UUID masks the group width. + if number > i64::MAX as u64 { + return None; + } + } + *part = number; + } + if groups.next().is_some() { + return None; + } + let most = ((parts[0] & 0xffff_ffff) << 32) | ((parts[1] & 0xffff) << 16) | (parts[2] & 0xffff); + let least = ((parts[3] & 0xffff) << 48) | (parts[4] & 0xffff_ffff_ffff); + let mut out = [0u8; 16]; + out[..8].copy_from_slice(&most.to_be_bytes()); + out[8..].copy_from_slice(&least.to_be_bytes()); + Some(out) +} + +/// Constructed once per task. Subtrees without UUID retain the ordinary Arrow cast path. +pub(super) struct UuidAlignment(Vec); + +enum Conversion { + Cast, + Uuid, + Struct(Vec), + List(Box), + Map(Box), +} + +impl UuidAlignment { + pub(super) fn new(schema: &Schema, target: &SchemaRef) -> Self { + Self( + target + .fields() + .iter() + .map(|f| Conversion::new(schema, f)) + .collect(), + ) + } + + pub(super) fn convert(&self, batch: RecordBatch, target: &SchemaRef) -> Result { + if batch.num_columns() != self.0.len() { + return Err(DataFusionError::Execution( + "Iceberg write column count mismatch".into(), + )); + } + let columns = batch + .columns() + .iter() + .zip(target.fields()) + .zip(&self.0) + .map(|((array, field), conversion)| conversion.convert(array, field, None)) + .collect::>>()?; + Ok(RecordBatch::try_new(Arc::clone(target), columns)?) + } +} + +impl Conversion { + fn new(schema: &Schema, field: &Field) -> Self { + if field + .metadata() + .get(PARQUET_FIELD_ID_META_KEY) + .and_then(|id| id.parse().ok()) + .and_then(|id| schema.field_by_id(id)) + .is_some_and(|f| *f.field_type == Type::Primitive(PrimitiveType::Uuid)) + { + return Self::Uuid; + } + let result = match field.data_type() { + DataType::Struct(fields) => { + Self::Struct(fields.iter().map(|f| Self::new(schema, f)).collect()) + } + DataType::List(element) => Self::List(Box::new(Self::new(schema, element))), + DataType::Map(entries, _) => Self::Map(Box::new(Self::new(schema, entries))), + _ => Self::Cast, + }; + if result.has_uuid() { + result + } else { + Self::Cast + } + } + + fn has_uuid(&self) -> bool { + match self { + Self::Cast => false, + Self::Uuid => true, + Self::Struct(fields) => fields.iter().any(Self::has_uuid), + Self::List(element) | Self::Map(element) => element.has_uuid(), + } + } + + fn convert( + &self, + array: &ArrayRef, + target: &Field, + visible: Option<&[bool]>, + ) -> Result { + let cast = |ty| { + arrow::compute::cast_with_options( + array, + ty, + &arrow::compute::CastOptions { + safe: false, + ..Default::default() + }, + ) + }; + let type_error = || { + DataFusionError::Execution(format!( + "Iceberg field {} expected a container matching {}, got {}", + target.name(), + target.data_type(), + array.data_type() + )) + }; + match self { + Self::Cast => Ok(cast(target.data_type())?), + Self::Uuid => { + // FFI normally supplies Utf8 (possibly dictionary-encoded). Arrow also knows how + // to normalize LargeUtf8 and Utf8View without changing string contents. + let strings = cast(&DataType::Utf8)?; + let strings = strings.as_string::(); + let mut out = FixedSizeBinaryBuilder::with_capacity(array.len(), 16); + for row in 0..array.len() { + if visible.is_some_and(|v| !v[row]) { + // Invisible required children must remain valid Arrow values. They are + // never written, and must not cause errors by parsing arbitrary bytes. + out.append_value([0; 16])?; + } else if strings.is_null(row) { + out.append_null(); + } else { + let bytes = parse_java_uuid(strings.value(row)).ok_or_else(|| { + DataFusionError::Execution(format!( + "Invalid UUID string in Iceberg field {} at batch row {row}", + target.name() + )) + })?; + out.append_value(bytes)?; + } + } + Ok(Arc::new(out.finish())) + } + Self::Struct(conversions) => { + let source = array + .as_any() + .downcast_ref::() + .ok_or_else(type_error)?; + let DataType::Struct(fields) = target.data_type() else { + unreachable!() + }; + if source.num_columns() != fields.len() { + return Err(DataFusionError::Execution( + "Iceberg struct field count mismatch".into(), + )); + } + let active: Vec = (0..array.len()) + .map(|i| source.is_valid(i) && visible.is_none_or(|v| v[i])) + .collect(); + let columns = conversions + .iter() + .zip(source.columns()) + .zip(fields) + .map(|((conversion, column), field)| { + conversion.convert(column, field, Some(&active)) + }) + .collect::>>()?; + Ok(Arc::new(StructArray::try_new( + fields.clone(), + columns, + source.nulls().cloned(), + )?)) + } + Self::List(element) => { + let source = array + .as_any() + .downcast_ref::() + .ok_or_else(type_error)?; + let DataType::List(field) = target.data_type() else { + unreachable!() + }; + let active = child_visibility( + array, + visible, + source.value_offsets(), + source.values().len(), + ); + let values = element.convert(source.values(), field, Some(&active))?; + Ok(Arc::new(ListArray::try_new( + Arc::clone(field), + source.offsets().clone(), + values, + source.nulls().cloned(), + )?)) + } + Self::Map(entries) => { + let source = array + .as_any() + .downcast_ref::() + .ok_or_else(type_error)?; + let DataType::Map(field, ordered) = target.data_type() else { + unreachable!() + }; + let active = child_visibility( + array, + visible, + source.value_offsets(), + source.entries().len(), + ); + let values = entries.convert( + &(Arc::new(source.entries().clone()) as ArrayRef), + field, + Some(&active), + )?; + Ok(Arc::new(MapArray::try_new( + Arc::clone(field), + source.offsets().clone(), + values.as_struct().clone(), + source.nulls().cloned(), + *ordered, + )?)) + } + } + } +} + +fn child_visibility( + array: &ArrayRef, + visible: Option<&[bool]>, + offsets: &[i32], + len: usize, +) -> Vec { + let mut active = vec![false; len]; + for row in 0..array.len() { + if array.is_valid(row) && visible.is_none_or(|v| v[row]) { + active[offsets[row] as usize..offsets[row + 1] as usize].fill(true); + } + } + active +} + +#[cfg(test)] +mod tests { + use super::*; + use arrow::array::{ + BinaryArray, DictionaryArray, Int32Array, LargeStringArray, StringArray, StringViewArray, + }; + use arrow::buffer::{NullBuffer, OffsetBuffer}; + use arrow::datatypes::{Int32Type, Schema as ArrowSchema}; + use iceberg::spec::{ListType, MapType, NestedField, StructType}; + + const UUID: &str = "f47ac10b-58cc-4372-a567-0e02b2c3d479"; + + fn uuid_type() -> Type { + Type::Primitive(PrimitiveType::Uuid) + } + + fn alignment( + schema: Schema, + columns: Vec, + ) -> (UuidAlignment, RecordBatch, SchemaRef) { + let target = Arc::new(iceberg::arrow::schema_to_arrow_schema(&schema).unwrap()); + let fields: Vec<_> = target + .fields() + .iter() + .zip(&columns) + .map(|(f, c)| Field::new(f.name(), c.data_type().clone(), f.is_nullable())) + .collect(); + let batch = RecordBatch::try_new(Arc::new(ArrowSchema::new(fields)), columns).unwrap(); + (UuidAlignment::new(&schema, &target), batch, target) + } + + fn check_uuid(array: &ArrayRef, row: usize, value: &str) { + let array = array.as_fixed_size_binary(); + assert_eq!(array.value(row), parse_java_uuid(value).unwrap()); + } + + #[test] + fn uuid_flat_strings_nulls_empty_and_fixed16() { + let schema = Schema::builder() + .with_fields(vec![ + NestedField::optional(1, "u", uuid_type()).into(), + NestedField::required(2, "fixed", Type::Primitive(PrimitiveType::Fixed(16))).into(), + ]) + .build() + .unwrap(); + let fixed: ArrayRef = Arc::new(BinaryArray::from_vec(vec![&[0xff; 16]; 3])); + for strings in [ + Arc::new(StringArray::from(vec![Some("1-1-1-1-1"), Some(UUID), None])) as ArrayRef, + Arc::new(LargeStringArray::from(vec![ + Some("1-1-1-1-1"), + Some(UUID), + None, + ])) as ArrayRef, + Arc::new( + DictionaryArray::::try_new( + Int32Array::from(vec![Some(0), Some(1), None]), + Arc::new(StringArray::from(vec!["1-1-1-1-1", UUID])), + ) + .unwrap(), + ) as ArrayRef, + Arc::new(StringViewArray::from(vec![ + Some("1-1-1-1-1"), + Some(UUID), + None, + ])) as ArrayRef, + ] { + let (convert, batch, target) = + alignment(schema.clone(), vec![strings, Arc::clone(&fixed)]); + let result = convert.convert(batch.clone(), &target).unwrap(); + check_uuid(result.column(0), 0, "1-1-1-1-1"); + check_uuid(result.column(0), 1, UUID); + assert!(result.column(0).is_null(2)); + assert_eq!( + result.column(1).as_fixed_size_binary().value(0), + &[0xff; 16] + ); + assert!(matches!(convert.0[1], Conversion::Cast)); + assert_eq!(result.schema(), target); + let empty = convert.convert(batch.slice(0, 0), &target).unwrap(); + assert_eq!(empty.num_rows(), 0); + } + let (convert, batch, target) = alignment( + schema.clone(), + vec![ + Arc::new(StringArray::from(vec![None::<&str>; 3])), + Arc::clone(&fixed), + ], + ); + assert_eq!( + convert + .convert(batch, &target) + .unwrap() + .column(0) + .null_count(), + 3 + ); + let (convert, batch, target) = alignment( + schema, + vec![Arc::new(StringArray::from(vec!["", UUID, UUID])), fixed], + ); + assert!(convert + .convert(batch, &target) + .unwrap_err() + .to_string() + .contains("Invalid UUID")); + } + + #[test] + fn uuid_required_child_under_null_struct() { + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "s", + Type::Struct(StructType::new(vec![NestedField::required( + 2, + "u", + uuid_type(), + ) + .into()])), + ) + .into()]) + .build() + .unwrap(); + let strings: ArrayRef = Arc::new(StringArray::from(vec!["garbage", UUID])); + let fields = vec![Field::new("u", DataType::Utf8, false)].into(); + let source: ArrayRef = Arc::new(StructArray::new( + fields, + vec![strings], + Some(NullBuffer::from(vec![false, true])), + )); + let (convert, batch, target) = alignment(schema, vec![source]); + let result = convert.convert(batch.clone(), &target).unwrap(); + assert!(result.column(0).is_null(0)); + check_uuid(result.column(0).as_struct().column(0), 1, UUID); + let sliced = convert.convert(batch.slice(1, 1), &target).unwrap(); + check_uuid(sliced.column(0).as_struct().column(0), 0, UUID); + } + + #[test] + fn uuid_lists_ignore_null_ranges_and_slice_exterior() { + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "l", + Type::List(ListType::new( + NestedField::optional(2, "element", uuid_type()).into(), + )), + ) + .into()]) + .build() + .unwrap(); + let source: ArrayRef = Arc::new(ListArray::new( + Arc::new(Field::new("element", DataType::Utf8, true)), + OffsetBuffer::new(vec![0, 1, 2, 4, 5].into()), + Arc::new(StringArray::from(vec![ + Some("bad"), + Some("bad"), + Some(UUID), + None, + Some("bad"), + ])), + Some(NullBuffer::from(vec![true, false, true, true])), + )); + let (convert, batch, target) = alignment(schema, vec![source]); + assert!(convert.convert(batch.clone(), &target).is_err()); + let result = convert.convert(batch.slice(1, 2), &target).unwrap(); + let list = result.column(0).as_list::(); + assert!(list.is_null(0)); + assert_eq!(list.value_offsets(), &[1, 2, 4]); + check_uuid(list.values(), 2, UUID); + assert!(list.values().is_null(3)); + } + + #[test] + fn uuid_map_keys_values_and_null_entries() { + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "m", + Type::Map(MapType::new( + NestedField::required(2, "key", uuid_type()).into(), + NestedField::optional(3, "value", uuid_type()).into(), + )), + ) + .into()]) + .build() + .unwrap(); + let fields = vec![ + Field::new("key", DataType::Utf8, false), + Field::new("value", DataType::Utf8, true), + ] + .into(); + let entries = StructArray::new( + fields, + vec![ + Arc::new(StringArray::from(vec!["bad", "1-1-1-1-1", "bad"])), + Arc::new(StringArray::from(vec![Some("bad"), Some(UUID), None])), + ], + None, + ); + let field = Arc::new(Field::new("entries", entries.data_type().clone(), false)); + let source: ArrayRef = Arc::new(MapArray::new( + field, + OffsetBuffer::new(vec![0, 1, 2, 3].into()), + entries, + Some(NullBuffer::from(vec![false, true, true])), + false, + )); + let (convert, batch, target) = alignment(schema, vec![source]); + let result = convert.convert(batch.slice(0, 2), &target).unwrap(); + let map = result.column(0).as_map(); + check_uuid(map.keys(), 1, "1-1-1-1-1"); + check_uuid(map.values(), 1, UUID); + assert!(map.is_null(0)); + } + + #[test] + fn uuid_map_nonzero_offset_skips_null_ranges_and_slice_exterior() { + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "m", + Type::Map(MapType::new( + NestedField::required(2, "key", uuid_type()).into(), + NestedField::optional(3, "value", uuid_type()).into(), + )), + ) + .into()]) + .build() + .unwrap(); + let fields = vec![ + Field::new("key", DataType::Utf8, false), + Field::new("value", DataType::Utf8, true), + ] + .into(); + let entries = StructArray::new( + fields, + vec![ + Arc::new(StringArray::from(vec![ + "bad prefix", + "1-1-1-1-1", + UUID, + "bad null map", + "bad suffix", + ])), + Arc::new(StringArray::from(vec![ + Some("bad prefix"), + Some(UUID), + None, + Some("bad null map"), + Some("bad suffix"), + ])), + ], + None, + ); + let field = Arc::new(Field::new("entries", entries.data_type().clone(), false)); + let source: ArrayRef = Arc::new(MapArray::new( + field, + OffsetBuffer::new(vec![0, 1, 3, 4, 5].into()), + entries, + Some(NullBuffer::from(vec![true, true, false, true])), + false, + )); + let (convert, batch, target) = alignment(schema, vec![source]); + for len in [1, 2] { + let window = batch.slice(1, len); + let result = convert.convert(window.clone(), &target).unwrap(); + let map = result.column(0).as_map(); + assert_eq!(map.value_offsets(), &([1, 3, 4][..=len])); + assert_eq!(map.nulls(), window.column(0).nulls()); + check_uuid(map.keys(), 1, "1-1-1-1-1"); + check_uuid(map.keys(), 2, UUID); + check_uuid(map.values(), 1, UUID); + assert!(map.values().is_null(2)); + assert_eq!(result.schema(), target); + } + // Making either exterior row visible must restore the UUID error. + for row in [0, 3] { + assert!(convert + .convert(batch.slice(row, 1), &target) + .unwrap_err() + .to_string() + .contains("Invalid UUID")); + } + } + + #[test] + fn uuid_nested_container_visibility_reaches_map_keys_and_required_values() { + // s.items: list>>> + let value_type = Type::Struct(StructType::new(vec![ + NestedField::required(7, "u", uuid_type()).into(), + NestedField::required(8, "n", Type::Primitive(PrimitiveType::Int)).into(), + ])); + let map_type = Type::Map(MapType::new( + NestedField::required(5, "key", uuid_type()).into(), + NestedField::optional(6, "value", value_type).into(), + )); + let element_type = Type::Struct(StructType::new(vec![NestedField::optional( + 4, "m", map_type, + ) + .into()])); + let list_type = Type::List(ListType::new( + NestedField::optional(3, "element", element_type).into(), + )); + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "s", + Type::Struct(StructType::new(vec![NestedField::optional( + 2, "items", list_type, + ) + .into()])), + ) + .into()]) + .build() + .unwrap(); + + let source = |visible_key: &str, visible_value: &str| -> ArrayRef { + // Each collection points at one child, including NULL collections. Rows 0 and 7 + // are outside the selected window. Rows 1..5 each mask a different nesting level. + let values = StructArray::new( + vec![ + Field::new("u", DataType::Utf8, false), + Field::new("n", DataType::Int32, false), + ] + .into(), + vec![ + Arc::new(StringArray::from( + vec!["bad"; 6] + .into_iter() + .chain([visible_value, "bad"]) + .collect::>(), + )), + Arc::new(Int32Array::from_iter_values(10..18)), + ], + Some(NullBuffer::from(vec![ + true, true, true, true, true, false, true, true, + ])), + ); + let entries = StructArray::new( + vec![ + Field::new("key", DataType::Utf8, false), + Field::new("value", values.data_type().clone(), true), + ] + .into(), + vec![ + Arc::new(StringArray::from(vec![ + "bad", + "bad", + "bad", + "bad", + "bad", + UUID, + visible_key, + "bad", + ])), + Arc::new(values), + ], + None, + ); + let map = MapArray::new( + Arc::new(Field::new("entries", entries.data_type().clone(), false)), + OffsetBuffer::new((0..=8).collect::>().into()), + entries, + Some(NullBuffer::from(vec![ + true, true, true, true, false, true, true, true, + ])), + false, + ); + let elements = StructArray::new( + vec![Field::new("m", map.data_type().clone(), true)].into(), + vec![Arc::new(map)], + Some(NullBuffer::from(vec![ + true, true, true, false, true, true, true, true, + ])), + ); + let list = ListArray::new( + Arc::new(Field::new("element", elements.data_type().clone(), true)), + OffsetBuffer::new((0..=8).collect::>().into()), + Arc::new(elements), + Some(NullBuffer::from(vec![ + true, true, false, true, true, true, true, true, + ])), + ); + Arc::new(StructArray::new( + vec![Field::new("items", list.data_type().clone(), true)].into(), + vec![Arc::new(list)], + Some(NullBuffer::from(vec![ + true, false, true, true, true, true, true, true, + ])), + )) + }; + let upper = UUID.to_uppercase(); + let (convert, batch, target) = alignment(schema.clone(), vec![source("1-1-1-1-1", &upper)]); + let result = convert.convert(batch.slice(1, 6), &target).unwrap(); + let outer = result.column(0).as_struct(); + let list = outer.column(0).as_list::(); + let elements = list.values().as_struct(); + let map = elements.column(0).as_map(); + let values = map.values().as_struct(); + assert!(outer.is_null(0)); + assert!(list.is_null(1)); + assert!(elements.is_null(3)); + assert!(map.is_null(4)); + assert!(values.is_null(5)); + assert_eq!(list.value_offsets(), &[1, 2, 3, 4, 5, 6, 7]); + check_uuid(map.keys(), 5, UUID); + check_uuid(map.keys(), 6, "1-1-1-1-1"); + check_uuid(values.column(0), 6, UUID); + assert_eq!(values.column(0).null_count(), 0); + assert_eq!( + values + .column(1) + .as_primitive::() + .values() + .as_ref(), + &[10, 11, 12, 13, 14, 15, 16, 17] + ); + assert_eq!(result.schema(), target); + + // Hidden garbage is ignored, but an invalid visible key or required value still fails. + for (key, value) in [("bad visible key", UUID), (UUID, "bad visible value")] { + let (convert, batch, target) = alignment(schema.clone(), vec![source(key, value)]); + assert!(convert + .convert(batch.slice(1, 6), &target) + .unwrap_err() + .to_string() + .contains("Invalid UUID")); + } + } + + #[test] + fn uuid_free_subtrees_keep_cast_path() { + let schema = Schema::builder() + .with_fields(vec![NestedField::optional( + 1, + "s", + Type::Struct(StructType::new(vec![NestedField::optional( + 2, + "text", + Type::Primitive(PrimitiveType::String), + ) + .into()])), + ) + .into()]) + .build() + .unwrap(); + let fields = vec![Field::new("text", DataType::Utf8, true)].into(); + let source: ArrayRef = Arc::new(StructArray::new( + fields, + vec![Arc::new(StringArray::from(vec!["bad uuid"]))], + None, + )); + let (convert, batch, target) = alignment(schema, vec![source]); + assert!(matches!(convert.0[0], Conversion::Cast)); + assert!(convert.convert(batch, &target).is_ok()); + } + + #[test] + fn uuid_java_oracle() { + let mut cases = 0; + for line in include_str!("testdata/uuid-java.tsv") + .lines() + .filter(|s| !s.starts_with('#')) + { + let (input, expected) = line.split_once('\t').unwrap(); + let value = String::from_utf8(hex::decode(input).unwrap()).unwrap(); + let actual = parse_java_uuid(&value) + .map(hex::encode) + .unwrap_or_else(|| "error".into()); + assert_eq!(actual, expected, "{value:?}"); + cases += 1; + } + assert!(cases > 2000); + } + + #[test] + fn uuid_java_hex_digits_entire_bmp() { + let expected = include_str!("testdata/uuid-java-digits.tsv") + .lines() + .filter(|line| !line.starts_with('#')) + .map(|line| { + let (ch, digit) = line.split_once('\t').unwrap(); + ( + u32::from_str_radix(ch, 16).unwrap(), + digit.parse::().unwrap(), + ) + }) + .collect::>(); + for code in 0..=0xffff { + if let Some(ch) = char::from_u32(code) { + assert_eq!( + java_hex_digit(ch), + expected.get(&code).copied(), + "U+{code:04X}" + ); + } + } + } +} diff --git a/native/core/src/execution/operators/iceberg_write.rs b/native/core/src/execution/operators/iceberg_write.rs index c949b95cf66..d102449c62e 100644 --- a/native/core/src/execution/operators/iceberg_write.rs +++ b/native/core/src/execution/operators/iceberg_write.rs @@ -93,6 +93,7 @@ use crate::execution::operators::iceberg_partition_path::{ partition_to_path, CometLocationGenerator, }; use crate::execution::operators::iceberg_partition_value::PartitionValueCalculator; +use crate::execution::operators::iceberg_uuid::UuidAlignment; /// The writer every partition gets: iceberg-rust's own data file writer, rolling Parquet files /// that report what they hold in memory. @@ -1020,9 +1021,10 @@ async fn run_write_task( None, DataFileFormat::Parquet, ); - // Build the field-id-decorated target schema once per task; every batch is cast against it. + // Build the field-id-decorated target schema and UUID conversion paths once per task. let target_schema = Arc::new(iceberg::arrow::schema_to_arrow_schema(&iceberg_schema).map_err(iceberg_err)?); + let alignment = UuidAlignment::new(&iceberg_schema, &target_schema); let slicer = RowSlicer::for_schema(&target_schema); let nests_floats = target_schema .fields() @@ -1078,7 +1080,7 @@ async fn run_write_task( let outcome = async move { while let Some(batch) = input.try_next().await? { - let mut decorated = decorate_batch_with_field_ids(batch, &target_schema)?; + let mut decorated = alignment.convert(batch, &target_schema)?; if nests_floats { decorated = drop_unwritten_values(decorated)?; } @@ -1597,40 +1599,6 @@ fn build_output_schema() -> SchemaRef { ])) } -/// Align an input batch with the field-id-decorated target schema by casting each column. The -/// caller is responsible for building `target_schema` once per task via -/// `iceberg::arrow::schema_to_arrow_schema` — it carries `PARQUET_FIELD_ID_META_KEY` on every -/// nested field, and `arrow::compute::cast` rebuilds the column structure to match while -/// reusing data buffers. This is the same conformance step the iceberg-rust DataFusion -/// integration gets for free from DataFusion's `INSERT INTO` planner. -fn decorate_batch_with_field_ids( - batch: RecordBatch, - target_schema: &SchemaRef, -) -> DFResult { - if batch.num_columns() != target_schema.fields().len() { - return Err(DataFusionError::Plan(format!( - "Iceberg write column count mismatch: arrow batch has {} columns but schema has {}", - batch.num_columns(), - target_schema.fields().len() - ))); - } - // safe:false so a lossy type divergence fails the task instead of writing silent NULLs. - let cast_options = arrow::compute::CastOptions { - safe: false, - ..Default::default() - }; - let casted: Vec = batch - .columns() - .iter() - .zip(target_schema.fields().iter()) - .map(|(col, target)| { - arrow::compute::cast_with_options(col, target.data_type(), &cast_options) - }) - .collect::>() - .map_err(DataFusionError::from)?; - RecordBatch::try_new(Arc::clone(target_schema), casted).map_err(DataFusionError::from) -} - fn file_name_prefix(partition_id: i32, task_attempt_id: i64, operation_id: &str) -> String { format!("{partition_id:05}-{task_attempt_id:05}-{operation_id}") } @@ -4560,7 +4528,9 @@ mod tests { let schema = iceberg_user_schema(); let target = Arc::new(iceberg::arrow::schema_to_arrow_schema(&schema).unwrap()); let original = batch(&[1, 2], &["a", "b"]); - let decorated = decorate_batch_with_field_ids(original, &target).unwrap(); + let decorated = UuidAlignment::new(&schema, &target) + .convert(original, &target) + .unwrap(); let arrow_schema = decorated.schema(); assert_eq!( arrow_schema @@ -4590,7 +4560,9 @@ mod tests { let batch = RecordBatch::try_new(arrow_schema, vec![Arc::new(Int32Array::from(vec![1]))]) .unwrap(); - let err = decorate_batch_with_field_ids(batch, &target).unwrap_err(); + let err = UuidAlignment::new(&schema, &target) + .convert(batch, &target) + .unwrap_err(); assert!(format!("{err}").contains("column count mismatch")); } @@ -5525,8 +5497,9 @@ mod tests { async fn an_open_file_gives_back_its_share_when_it_closes_or_is_dropped() { let schema = Arc::new(iceberg_user_schema()); let target = Arc::new(iceberg::arrow::schema_to_arrow_schema(&schema).unwrap()); - let rows = - decorate_batch_with_field_ids(round_robin_batch(ROWS_DIVISOR, 1), &target).unwrap(); + let rows = UuidAlignment::new(&schema, &target) + .convert(round_robin_batch(ROWS_DIVISOR, 1), &target) + .unwrap(); let file_io = FileIOBuilder::new(Arc::new(OpenDalStorageFactory::Memory)).build(); let open_files = OpenFileMemory::default(); let builder = MeteredParquetWriterBuilder { @@ -5587,7 +5560,9 @@ mod tests { // Units of about 40 KB, so a row group flushes every three or four. for unit in 0..20 { let rows = payload_batch_from("r0", unit * ROWS_DIVISOR, ROWS_DIVISOR, 32); - let rows = decorate_batch_with_field_ids(rows, &target).unwrap(); + let rows = UuidAlignment::new(&schema, &target) + .convert(rows, &target) + .unwrap(); file.write(&rows).await.unwrap(); let share = open_files.bytes(); match storage { diff --git a/native/core/src/execution/operators/mod.rs b/native/core/src/execution/operators/mod.rs index 49669c58314..4bc0a2f7eaf 100644 --- a/native/core/src/execution/operators/mod.rs +++ b/native/core/src/execution/operators/mod.rs @@ -38,6 +38,7 @@ pub(crate) mod iceberg_location_scoped; mod iceberg_partition_path; mod iceberg_partition_value; mod iceberg_scan; +mod iceberg_uuid; mod iceberg_write; pub use iceberg_write::IcebergWriteExec; mod merge_rows; diff --git a/native/core/src/execution/operators/testdata/README.md b/native/core/src/execution/operators/testdata/README.md new file mode 100644 index 00000000000..f71c7bf894d --- /dev/null +++ b/native/core/src/execution/operators/testdata/README.md @@ -0,0 +1,35 @@ + + +UUID Java oracle fixtures are generated by `dev/GenerateIcebergUuidOracle.java`. +From the repository root, run the following with both JDK 17 and JDK 21, using +separate output directories and comparing both files before replacing the fixtures: + +```sh +java dev/GenerateIcebergUuidOracle.java /tmp/uuid-oracle +``` + +The checked-in files matched byte for byte on Homebrew 17.0.20+0 and Oracle +Corporation 21.0.12+7-LTS-205. The generator prints the vendor and exact runtime +version on stderr. `uuid-java.tsv` records UTF-8 input bytes in hex and either the +16 big-endian UUID bytes in hex or `error`. It includes fixed edge cases and +mutations seeded with 6959. `uuid-java-digits.tsv` records every BMP code unit for +which `Character.digit(char, 16)` succeeds; the Rust test also checks rejection +of every other BMP scalar. Supplementary-plane digits are rejected because Java +parses each UTF-16 code unit independently. diff --git a/native/core/src/execution/operators/testdata/uuid-java-digits.tsv b/native/core/src/execution/operators/testdata/uuid-java-digits.tsv new file mode 100644 index 00000000000..3abebe7fe13 --- /dev/null +++ b/native/core/src/execution/operators/testdata/uuid-java-digits.tsv @@ -0,0 +1,410 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +0030 0 +0031 1 +0032 2 +0033 3 +0034 4 +0035 5 +0036 6 +0037 7 +0038 8 +0039 9 +0041 10 +0042 11 +0043 12 +0044 13 +0045 14 +0046 15 +0061 10 +0062 11 +0063 12 +0064 13 +0065 14 +0066 15 +0660 0 +0661 1 +0662 2 +0663 3 +0664 4 +0665 5 +0666 6 +0667 7 +0668 8 +0669 9 +06f0 0 +06f1 1 +06f2 2 +06f3 3 +06f4 4 +06f5 5 +06f6 6 +06f7 7 +06f8 8 +06f9 9 +07c0 0 +07c1 1 +07c2 2 +07c3 3 +07c4 4 +07c5 5 +07c6 6 +07c7 7 +07c8 8 +07c9 9 +0966 0 +0967 1 +0968 2 +0969 3 +096a 4 +096b 5 +096c 6 +096d 7 +096e 8 +096f 9 +09e6 0 +09e7 1 +09e8 2 +09e9 3 +09ea 4 +09eb 5 +09ec 6 +09ed 7 +09ee 8 +09ef 9 +0a66 0 +0a67 1 +0a68 2 +0a69 3 +0a6a 4 +0a6b 5 +0a6c 6 +0a6d 7 +0a6e 8 +0a6f 9 +0ae6 0 +0ae7 1 +0ae8 2 +0ae9 3 +0aea 4 +0aeb 5 +0aec 6 +0aed 7 +0aee 8 +0aef 9 +0b66 0 +0b67 1 +0b68 2 +0b69 3 +0b6a 4 +0b6b 5 +0b6c 6 +0b6d 7 +0b6e 8 +0b6f 9 +0be6 0 +0be7 1 +0be8 2 +0be9 3 +0bea 4 +0beb 5 +0bec 6 +0bed 7 +0bee 8 +0bef 9 +0c66 0 +0c67 1 +0c68 2 +0c69 3 +0c6a 4 +0c6b 5 +0c6c 6 +0c6d 7 +0c6e 8 +0c6f 9 +0ce6 0 +0ce7 1 +0ce8 2 +0ce9 3 +0cea 4 +0ceb 5 +0cec 6 +0ced 7 +0cee 8 +0cef 9 +0d66 0 +0d67 1 +0d68 2 +0d69 3 +0d6a 4 +0d6b 5 +0d6c 6 +0d6d 7 +0d6e 8 +0d6f 9 +0de6 0 +0de7 1 +0de8 2 +0de9 3 +0dea 4 +0deb 5 +0dec 6 +0ded 7 +0dee 8 +0def 9 +0e50 0 +0e51 1 +0e52 2 +0e53 3 +0e54 4 +0e55 5 +0e56 6 +0e57 7 +0e58 8 +0e59 9 +0ed0 0 +0ed1 1 +0ed2 2 +0ed3 3 +0ed4 4 +0ed5 5 +0ed6 6 +0ed7 7 +0ed8 8 +0ed9 9 +0f20 0 +0f21 1 +0f22 2 +0f23 3 +0f24 4 +0f25 5 +0f26 6 +0f27 7 +0f28 8 +0f29 9 +1040 0 +1041 1 +1042 2 +1043 3 +1044 4 +1045 5 +1046 6 +1047 7 +1048 8 +1049 9 +1090 0 +1091 1 +1092 2 +1093 3 +1094 4 +1095 5 +1096 6 +1097 7 +1098 8 +1099 9 +17e0 0 +17e1 1 +17e2 2 +17e3 3 +17e4 4 +17e5 5 +17e6 6 +17e7 7 +17e8 8 +17e9 9 +1810 0 +1811 1 +1812 2 +1813 3 +1814 4 +1815 5 +1816 6 +1817 7 +1818 8 +1819 9 +1946 0 +1947 1 +1948 2 +1949 3 +194a 4 +194b 5 +194c 6 +194d 7 +194e 8 +194f 9 +19d0 0 +19d1 1 +19d2 2 +19d3 3 +19d4 4 +19d5 5 +19d6 6 +19d7 7 +19d8 8 +19d9 9 +1a80 0 +1a81 1 +1a82 2 +1a83 3 +1a84 4 +1a85 5 +1a86 6 +1a87 7 +1a88 8 +1a89 9 +1a90 0 +1a91 1 +1a92 2 +1a93 3 +1a94 4 +1a95 5 +1a96 6 +1a97 7 +1a98 8 +1a99 9 +1b50 0 +1b51 1 +1b52 2 +1b53 3 +1b54 4 +1b55 5 +1b56 6 +1b57 7 +1b58 8 +1b59 9 +1bb0 0 +1bb1 1 +1bb2 2 +1bb3 3 +1bb4 4 +1bb5 5 +1bb6 6 +1bb7 7 +1bb8 8 +1bb9 9 +1c40 0 +1c41 1 +1c42 2 +1c43 3 +1c44 4 +1c45 5 +1c46 6 +1c47 7 +1c48 8 +1c49 9 +1c50 0 +1c51 1 +1c52 2 +1c53 3 +1c54 4 +1c55 5 +1c56 6 +1c57 7 +1c58 8 +1c59 9 +a620 0 +a621 1 +a622 2 +a623 3 +a624 4 +a625 5 +a626 6 +a627 7 +a628 8 +a629 9 +a8d0 0 +a8d1 1 +a8d2 2 +a8d3 3 +a8d4 4 +a8d5 5 +a8d6 6 +a8d7 7 +a8d8 8 +a8d9 9 +a900 0 +a901 1 +a902 2 +a903 3 +a904 4 +a905 5 +a906 6 +a907 7 +a908 8 +a909 9 +a9d0 0 +a9d1 1 +a9d2 2 +a9d3 3 +a9d4 4 +a9d5 5 +a9d6 6 +a9d7 7 +a9d8 8 +a9d9 9 +a9f0 0 +a9f1 1 +a9f2 2 +a9f3 3 +a9f4 4 +a9f5 5 +a9f6 6 +a9f7 7 +a9f8 8 +a9f9 9 +aa50 0 +aa51 1 +aa52 2 +aa53 3 +aa54 4 +aa55 5 +aa56 6 +aa57 7 +aa58 8 +aa59 9 +abf0 0 +abf1 1 +abf2 2 +abf3 3 +abf4 4 +abf5 5 +abf6 6 +abf7 7 +abf8 8 +abf9 9 +ff10 0 +ff11 1 +ff12 2 +ff13 3 +ff14 4 +ff15 5 +ff16 6 +ff17 7 +ff18 8 +ff19 9 +ff21 10 +ff22 11 +ff23 12 +ff24 13 +ff25 14 +ff26 15 +ff41 10 +ff42 11 +ff43 12 +ff44 13 +ff45 14 +ff46 15 diff --git a/native/core/src/execution/operators/testdata/uuid-java.tsv b/native/core/src/execution/operators/testdata/uuid-java.tsv new file mode 100644 index 00000000000..a91d0fabfca --- /dev/null +++ b/native/core/src/execution/operators/testdata/uuid-java.tsv @@ -0,0 +1,2533 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# Generated by dev/GenerateIcebergUuidOracle.java; UTF-8 hex input, UUID hex or error + error +312d312d312d312d31 00000001000100010001000000000001 +2b312d312d312d312d31 00000001000100010001000000000001 +3130303030303030302d312d312d312d31 00000000000100010001000000000001 +312d31303030302d312d312d31 00000001000000010001000000000001 +efbc912defbc912defbc912defbc912defbc91 00000001000100010001000000000001 +d9a12dd9a12dd9a12dd9a12dd9a1 00000001000100010001000000000001 +efbca12defbd822defbca32defbd842defbca5 0000000a000b000c000d00000000000e +f09d9f992d312d312d312d31 error +2d312d312d312d312d31 error +312d2d312d312d31 error +312d312d312d312d38303030303030303030303030303030 error +6634376163313062353863633433373261353637306530326232633364343739 error +7b66343761633130622d353863632d343337322d613536372d3065303262326333643437397d error +66343761633130622d353863632d343337322d613536372d306530326232633364343739 f47ac10b58cc4372a5670e02b2c3d479 +46464646464646462d464646462d464646462d464646462d464646464646464646464646 ffffffffffffffffffffffffffffffff +30303030303030302d303030302d303030302d303030302d303030303030303030303030 00000000000000000000000000000000 +20312d312d312d312d31 error +312d312d312d312d310a error +2d312d312d312d31 error +2b2d312d312d312d31 error +2b2b312d312d312d312d31 error +672d312d312d312d31 error +efbc972d312d312d312d31 00000007000100010001000000000001 +2b662d312d312d312d31 0000000f000100010001000000000001 +30303030303030303030303030303030312d312d312d312d31 00000001000100010001000000000001 +376666666666666666666666666666662d312d312d312d31 ffffffff000100010001000000000001 +383030303030303030303030303030302d312d312d312d31 error +666666666666666666666666666666662d312d312d312d31 error +303030303030303030303030303030303030303030312d312d312d312d31 00000001000100010001000000000001 +312d2d312d312d31 error +312d2b2d312d312d31 error +312d2b2b312d312d312d31 error +312d672d312d312d31 error +312defbc972d312d312d31 00000001000700010001000000000001 +312d2b662d312d312d31 00000001000f00010001000000000001 +312d30303030303030303030303030303030312d312d312d31 00000001000100010001000000000001 +312d376666666666666666666666666666662d312d312d31 00000001ffff00010001000000000001 +312d383030303030303030303030303030302d312d312d31 error +312d666666666666666666666666666666662d312d312d31 error +312d303030303030303030303030303030303030303030312d312d312d31 00000001000100010001000000000001 +312d312d2d312d31 error +312d312d2b2d312d31 error +312d312d2b2b312d312d31 error +312d312d672d312d31 error +312d312defbc972d312d31 00000001000100070001000000000001 +312d312d2b662d312d31 000000010001000f0001000000000001 +312d312d30303030303030303030303030303030312d312d31 00000001000100010001000000000001 +312d312d376666666666666666666666666666662d312d31 000000010001ffff0001000000000001 +312d312d383030303030303030303030303030302d312d31 error +312d312d666666666666666666666666666666662d312d31 error +312d312d303030303030303030303030303030303030303030312d312d31 00000001000100010001000000000001 +312d312d312d2d31 error +312d312d312d2b2d31 error +312d312d312d2b2b312d31 error +312d312d312d672d31 error +312d312d312defbc972d31 00000001000100010007000000000001 +312d312d312d2b662d31 0000000100010001000f000000000001 +312d312d312d30303030303030303030303030303030312d31 00000001000100010001000000000001 +312d312d312d376666666666666666666666666666662d31 0000000100010001ffff000000000001 +312d312d312d383030303030303030303030303030302d31 error +312d312d312d666666666666666666666666666666662d31 error +312d312d312d303030303030303030303030303030303030303030312d31 00000001000100010001000000000001 +312d312d312d312d error +312d312d312d312d2b error +312d312d312d312d2b2b31 error +312d312d312d312d67 error +312d312d312d312defbc97 00000001000100010001000000000007 +312d312d312d312d2b66 0000000100010001000100000000000f +312d312d312d312d3030303030303030303030303030303031 00000001000100010001000000000001 +312d312d312d312d37666666666666666666666666666666 00000001000100010001ffffffffffff +312d312d312d312d38303030303030303030303030303030 error +312d312d312d312d66666666666666666666666666666666 error +312d312d312d312d30303030303030303030303030303030303030303031 00000001000100010001000000000001 +302d312d312d312d31 00000000000100010001000000000001 +312d312d312d312d31 00000001000100010001000000000001 +322d312d312d312d31 00000002000100010001000000000001 +332d312d312d312d31 00000003000100010001000000000001 +342d312d312d312d31 00000004000100010001000000000001 +352d312d312d312d31 00000005000100010001000000000001 +362d312d312d312d31 00000006000100010001000000000001 +372d312d312d312d31 00000007000100010001000000000001 +382d312d312d312d31 00000008000100010001000000000001 +392d312d312d312d31 00000009000100010001000000000001 +412d312d312d312d31 0000000a000100010001000000000001 +422d312d312d312d31 0000000b000100010001000000000001 +432d312d312d312d31 0000000c000100010001000000000001 +442d312d312d312d31 0000000d000100010001000000000001 +452d312d312d312d31 0000000e000100010001000000000001 +462d312d312d312d31 0000000f000100010001000000000001 +612d312d312d312d31 0000000a000100010001000000000001 +622d312d312d312d31 0000000b000100010001000000000001 +632d312d312d312d31 0000000c000100010001000000000001 +642d312d312d312d31 0000000d000100010001000000000001 +652d312d312d312d31 0000000e000100010001000000000001 +662d312d312d312d31 0000000f000100010001000000000001 +d9a02d312d312d312d31 00000000000100010001000000000001 +d9a12d312d312d312d31 00000001000100010001000000000001 +d9a22d312d312d312d31 00000002000100010001000000000001 +d9a32d312d312d312d31 00000003000100010001000000000001 +d9a42d312d312d312d31 00000004000100010001000000000001 +d9a52d312d312d312d31 00000005000100010001000000000001 +d9a62d312d312d312d31 00000006000100010001000000000001 +d9a72d312d312d312d31 00000007000100010001000000000001 +d9a82d312d312d312d31 00000008000100010001000000000001 +d9a92d312d312d312d31 00000009000100010001000000000001 +dbb02d312d312d312d31 00000000000100010001000000000001 +dbb12d312d312d312d31 00000001000100010001000000000001 +dbb22d312d312d312d31 00000002000100010001000000000001 +dbb32d312d312d312d31 00000003000100010001000000000001 +dbb42d312d312d312d31 00000004000100010001000000000001 +dbb52d312d312d312d31 00000005000100010001000000000001 +dbb62d312d312d312d31 00000006000100010001000000000001 +dbb72d312d312d312d31 00000007000100010001000000000001 +dbb82d312d312d312d31 00000008000100010001000000000001 +dbb92d312d312d312d31 00000009000100010001000000000001 +df802d312d312d312d31 00000000000100010001000000000001 +df812d312d312d312d31 00000001000100010001000000000001 +df822d312d312d312d31 00000002000100010001000000000001 +df832d312d312d312d31 00000003000100010001000000000001 +df842d312d312d312d31 00000004000100010001000000000001 +df852d312d312d312d31 00000005000100010001000000000001 +df862d312d312d312d31 00000006000100010001000000000001 +df872d312d312d312d31 00000007000100010001000000000001 +df882d312d312d312d31 00000008000100010001000000000001 +df892d312d312d312d31 00000009000100010001000000000001 +e0a5a62d312d312d312d31 00000000000100010001000000000001 +e0a5a72d312d312d312d31 00000001000100010001000000000001 +e0a5a82d312d312d312d31 00000002000100010001000000000001 +e0a5a92d312d312d312d31 00000003000100010001000000000001 +e0a5aa2d312d312d312d31 00000004000100010001000000000001 +e0a5ab2d312d312d312d31 00000005000100010001000000000001 +e0a5ac2d312d312d312d31 00000006000100010001000000000001 +e0a5ad2d312d312d312d31 00000007000100010001000000000001 +e0a5ae2d312d312d312d31 00000008000100010001000000000001 +e0a5af2d312d312d312d31 00000009000100010001000000000001 +e0a7a62d312d312d312d31 00000000000100010001000000000001 +e0a7a72d312d312d312d31 00000001000100010001000000000001 +e0a7a82d312d312d312d31 00000002000100010001000000000001 +e0a7a92d312d312d312d31 00000003000100010001000000000001 +e0a7aa2d312d312d312d31 00000004000100010001000000000001 +e0a7ab2d312d312d312d31 00000005000100010001000000000001 +e0a7ac2d312d312d312d31 00000006000100010001000000000001 +e0a7ad2d312d312d312d31 00000007000100010001000000000001 +e0a7ae2d312d312d312d31 00000008000100010001000000000001 +e0a7af2d312d312d312d31 00000009000100010001000000000001 +e0a9a62d312d312d312d31 00000000000100010001000000000001 +e0a9a72d312d312d312d31 00000001000100010001000000000001 +e0a9a82d312d312d312d31 00000002000100010001000000000001 +e0a9a92d312d312d312d31 00000003000100010001000000000001 +e0a9aa2d312d312d312d31 00000004000100010001000000000001 +e0a9ab2d312d312d312d31 00000005000100010001000000000001 +e0a9ac2d312d312d312d31 00000006000100010001000000000001 +e0a9ad2d312d312d312d31 00000007000100010001000000000001 +e0a9ae2d312d312d312d31 00000008000100010001000000000001 +e0a9af2d312d312d312d31 00000009000100010001000000000001 +e0aba62d312d312d312d31 00000000000100010001000000000001 +e0aba72d312d312d312d31 00000001000100010001000000000001 +e0aba82d312d312d312d31 00000002000100010001000000000001 +e0aba92d312d312d312d31 00000003000100010001000000000001 +e0abaa2d312d312d312d31 00000004000100010001000000000001 +e0abab2d312d312d312d31 00000005000100010001000000000001 +e0abac2d312d312d312d31 00000006000100010001000000000001 +e0abad2d312d312d312d31 00000007000100010001000000000001 +e0abae2d312d312d312d31 00000008000100010001000000000001 +e0abaf2d312d312d312d31 00000009000100010001000000000001 +e0ada62d312d312d312d31 00000000000100010001000000000001 +e0ada72d312d312d312d31 00000001000100010001000000000001 +e0ada82d312d312d312d31 00000002000100010001000000000001 +e0ada92d312d312d312d31 00000003000100010001000000000001 +e0adaa2d312d312d312d31 00000004000100010001000000000001 +e0adab2d312d312d312d31 00000005000100010001000000000001 +e0adac2d312d312d312d31 00000006000100010001000000000001 +e0adad2d312d312d312d31 00000007000100010001000000000001 +e0adae2d312d312d312d31 00000008000100010001000000000001 +e0adaf2d312d312d312d31 00000009000100010001000000000001 +e0afa62d312d312d312d31 00000000000100010001000000000001 +e0afa72d312d312d312d31 00000001000100010001000000000001 +e0afa82d312d312d312d31 00000002000100010001000000000001 +e0afa92d312d312d312d31 00000003000100010001000000000001 +e0afaa2d312d312d312d31 00000004000100010001000000000001 +e0afab2d312d312d312d31 00000005000100010001000000000001 +e0afac2d312d312d312d31 00000006000100010001000000000001 +e0afad2d312d312d312d31 00000007000100010001000000000001 +e0afae2d312d312d312d31 00000008000100010001000000000001 +e0afaf2d312d312d312d31 00000009000100010001000000000001 +e0b1a62d312d312d312d31 00000000000100010001000000000001 +e0b1a72d312d312d312d31 00000001000100010001000000000001 +e0b1a82d312d312d312d31 00000002000100010001000000000001 +e0b1a92d312d312d312d31 00000003000100010001000000000001 +e0b1aa2d312d312d312d31 00000004000100010001000000000001 +e0b1ab2d312d312d312d31 00000005000100010001000000000001 +e0b1ac2d312d312d312d31 00000006000100010001000000000001 +e0b1ad2d312d312d312d31 00000007000100010001000000000001 +e0b1ae2d312d312d312d31 00000008000100010001000000000001 +e0b1af2d312d312d312d31 00000009000100010001000000000001 +e0b3a62d312d312d312d31 00000000000100010001000000000001 +e0b3a72d312d312d312d31 00000001000100010001000000000001 +e0b3a82d312d312d312d31 00000002000100010001000000000001 +e0b3a92d312d312d312d31 00000003000100010001000000000001 +e0b3aa2d312d312d312d31 00000004000100010001000000000001 +e0b3ab2d312d312d312d31 00000005000100010001000000000001 +e0b3ac2d312d312d312d31 00000006000100010001000000000001 +e0b3ad2d312d312d312d31 00000007000100010001000000000001 +e0b3ae2d312d312d312d31 00000008000100010001000000000001 +e0b3af2d312d312d312d31 00000009000100010001000000000001 +e0b5a62d312d312d312d31 00000000000100010001000000000001 +e0b5a72d312d312d312d31 00000001000100010001000000000001 +e0b5a82d312d312d312d31 00000002000100010001000000000001 +e0b5a92d312d312d312d31 00000003000100010001000000000001 +e0b5aa2d312d312d312d31 00000004000100010001000000000001 +e0b5ab2d312d312d312d31 00000005000100010001000000000001 +e0b5ac2d312d312d312d31 00000006000100010001000000000001 +e0b5ad2d312d312d312d31 00000007000100010001000000000001 +e0b5ae2d312d312d312d31 00000008000100010001000000000001 +e0b5af2d312d312d312d31 00000009000100010001000000000001 +e0b7a62d312d312d312d31 00000000000100010001000000000001 +e0b7a72d312d312d312d31 00000001000100010001000000000001 +e0b7a82d312d312d312d31 00000002000100010001000000000001 +e0b7a92d312d312d312d31 00000003000100010001000000000001 +e0b7aa2d312d312d312d31 00000004000100010001000000000001 +e0b7ab2d312d312d312d31 00000005000100010001000000000001 +e0b7ac2d312d312d312d31 00000006000100010001000000000001 +e0b7ad2d312d312d312d31 00000007000100010001000000000001 +e0b7ae2d312d312d312d31 00000008000100010001000000000001 +e0b7af2d312d312d312d31 00000009000100010001000000000001 +e0b9902d312d312d312d31 00000000000100010001000000000001 +e0b9912d312d312d312d31 00000001000100010001000000000001 +e0b9922d312d312d312d31 00000002000100010001000000000001 +e0b9932d312d312d312d31 00000003000100010001000000000001 +e0b9942d312d312d312d31 00000004000100010001000000000001 +e0b9952d312d312d312d31 00000005000100010001000000000001 +e0b9962d312d312d312d31 00000006000100010001000000000001 +e0b9972d312d312d312d31 00000007000100010001000000000001 +e0b9982d312d312d312d31 00000008000100010001000000000001 +e0b9992d312d312d312d31 00000009000100010001000000000001 +e0bb902d312d312d312d31 00000000000100010001000000000001 +e0bb912d312d312d312d31 00000001000100010001000000000001 +e0bb922d312d312d312d31 00000002000100010001000000000001 +e0bb932d312d312d312d31 00000003000100010001000000000001 +e0bb942d312d312d312d31 00000004000100010001000000000001 +e0bb952d312d312d312d31 00000005000100010001000000000001 +e0bb962d312d312d312d31 00000006000100010001000000000001 +e0bb972d312d312d312d31 00000007000100010001000000000001 +e0bb982d312d312d312d31 00000008000100010001000000000001 +e0bb992d312d312d312d31 00000009000100010001000000000001 +e0bca02d312d312d312d31 00000000000100010001000000000001 +e0bca12d312d312d312d31 00000001000100010001000000000001 +e0bca22d312d312d312d31 00000002000100010001000000000001 +e0bca32d312d312d312d31 00000003000100010001000000000001 +e0bca42d312d312d312d31 00000004000100010001000000000001 +e0bca52d312d312d312d31 00000005000100010001000000000001 +e0bca62d312d312d312d31 00000006000100010001000000000001 +e0bca72d312d312d312d31 00000007000100010001000000000001 +e0bca82d312d312d312d31 00000008000100010001000000000001 +e0bca92d312d312d312d31 00000009000100010001000000000001 +e181802d312d312d312d31 00000000000100010001000000000001 +e181812d312d312d312d31 00000001000100010001000000000001 +e181822d312d312d312d31 00000002000100010001000000000001 +e181832d312d312d312d31 00000003000100010001000000000001 +e181842d312d312d312d31 00000004000100010001000000000001 +e181852d312d312d312d31 00000005000100010001000000000001 +e181862d312d312d312d31 00000006000100010001000000000001 +e181872d312d312d312d31 00000007000100010001000000000001 +e181882d312d312d312d31 00000008000100010001000000000001 +e181892d312d312d312d31 00000009000100010001000000000001 +e182902d312d312d312d31 00000000000100010001000000000001 +e182912d312d312d312d31 00000001000100010001000000000001 +e182922d312d312d312d31 00000002000100010001000000000001 +e182932d312d312d312d31 00000003000100010001000000000001 +e182942d312d312d312d31 00000004000100010001000000000001 +e182952d312d312d312d31 00000005000100010001000000000001 +e182962d312d312d312d31 00000006000100010001000000000001 +e182972d312d312d312d31 00000007000100010001000000000001 +e182982d312d312d312d31 00000008000100010001000000000001 +e182992d312d312d312d31 00000009000100010001000000000001 +e19fa02d312d312d312d31 00000000000100010001000000000001 +e19fa12d312d312d312d31 00000001000100010001000000000001 +e19fa22d312d312d312d31 00000002000100010001000000000001 +e19fa32d312d312d312d31 00000003000100010001000000000001 +e19fa42d312d312d312d31 00000004000100010001000000000001 +e19fa52d312d312d312d31 00000005000100010001000000000001 +e19fa62d312d312d312d31 00000006000100010001000000000001 +e19fa72d312d312d312d31 00000007000100010001000000000001 +e19fa82d312d312d312d31 00000008000100010001000000000001 +e19fa92d312d312d312d31 00000009000100010001000000000001 +e1a0902d312d312d312d31 00000000000100010001000000000001 +e1a0912d312d312d312d31 00000001000100010001000000000001 +e1a0922d312d312d312d31 00000002000100010001000000000001 +e1a0932d312d312d312d31 00000003000100010001000000000001 +e1a0942d312d312d312d31 00000004000100010001000000000001 +e1a0952d312d312d312d31 00000005000100010001000000000001 +e1a0962d312d312d312d31 00000006000100010001000000000001 +e1a0972d312d312d312d31 00000007000100010001000000000001 +e1a0982d312d312d312d31 00000008000100010001000000000001 +e1a0992d312d312d312d31 00000009000100010001000000000001 +e1a5862d312d312d312d31 00000000000100010001000000000001 +e1a5872d312d312d312d31 00000001000100010001000000000001 +e1a5882d312d312d312d31 00000002000100010001000000000001 +e1a5892d312d312d312d31 00000003000100010001000000000001 +e1a58a2d312d312d312d31 00000004000100010001000000000001 +e1a58b2d312d312d312d31 00000005000100010001000000000001 +e1a58c2d312d312d312d31 00000006000100010001000000000001 +e1a58d2d312d312d312d31 00000007000100010001000000000001 +e1a58e2d312d312d312d31 00000008000100010001000000000001 +e1a58f2d312d312d312d31 00000009000100010001000000000001 +e1a7902d312d312d312d31 00000000000100010001000000000001 +e1a7912d312d312d312d31 00000001000100010001000000000001 +e1a7922d312d312d312d31 00000002000100010001000000000001 +e1a7932d312d312d312d31 00000003000100010001000000000001 +e1a7942d312d312d312d31 00000004000100010001000000000001 +e1a7952d312d312d312d31 00000005000100010001000000000001 +e1a7962d312d312d312d31 00000006000100010001000000000001 +e1a7972d312d312d312d31 00000007000100010001000000000001 +e1a7982d312d312d312d31 00000008000100010001000000000001 +e1a7992d312d312d312d31 00000009000100010001000000000001 +e1aa802d312d312d312d31 00000000000100010001000000000001 +e1aa812d312d312d312d31 00000001000100010001000000000001 +e1aa822d312d312d312d31 00000002000100010001000000000001 +e1aa832d312d312d312d31 00000003000100010001000000000001 +e1aa842d312d312d312d31 00000004000100010001000000000001 +e1aa852d312d312d312d31 00000005000100010001000000000001 +e1aa862d312d312d312d31 00000006000100010001000000000001 +e1aa872d312d312d312d31 00000007000100010001000000000001 +e1aa882d312d312d312d31 00000008000100010001000000000001 +e1aa892d312d312d312d31 00000009000100010001000000000001 +e1aa902d312d312d312d31 00000000000100010001000000000001 +e1aa912d312d312d312d31 00000001000100010001000000000001 +e1aa922d312d312d312d31 00000002000100010001000000000001 +e1aa932d312d312d312d31 00000003000100010001000000000001 +e1aa942d312d312d312d31 00000004000100010001000000000001 +e1aa952d312d312d312d31 00000005000100010001000000000001 +e1aa962d312d312d312d31 00000006000100010001000000000001 +e1aa972d312d312d312d31 00000007000100010001000000000001 +e1aa982d312d312d312d31 00000008000100010001000000000001 +e1aa992d312d312d312d31 00000009000100010001000000000001 +e1ad902d312d312d312d31 00000000000100010001000000000001 +e1ad912d312d312d312d31 00000001000100010001000000000001 +e1ad922d312d312d312d31 00000002000100010001000000000001 +e1ad932d312d312d312d31 00000003000100010001000000000001 +e1ad942d312d312d312d31 00000004000100010001000000000001 +e1ad952d312d312d312d31 00000005000100010001000000000001 +e1ad962d312d312d312d31 00000006000100010001000000000001 +e1ad972d312d312d312d31 00000007000100010001000000000001 +e1ad982d312d312d312d31 00000008000100010001000000000001 +e1ad992d312d312d312d31 00000009000100010001000000000001 +e1aeb02d312d312d312d31 00000000000100010001000000000001 +e1aeb12d312d312d312d31 00000001000100010001000000000001 +e1aeb22d312d312d312d31 00000002000100010001000000000001 +e1aeb32d312d312d312d31 00000003000100010001000000000001 +e1aeb42d312d312d312d31 00000004000100010001000000000001 +e1aeb52d312d312d312d31 00000005000100010001000000000001 +e1aeb62d312d312d312d31 00000006000100010001000000000001 +e1aeb72d312d312d312d31 00000007000100010001000000000001 +e1aeb82d312d312d312d31 00000008000100010001000000000001 +e1aeb92d312d312d312d31 00000009000100010001000000000001 +e1b1802d312d312d312d31 00000000000100010001000000000001 +e1b1812d312d312d312d31 00000001000100010001000000000001 +e1b1822d312d312d312d31 00000002000100010001000000000001 +e1b1832d312d312d312d31 00000003000100010001000000000001 +e1b1842d312d312d312d31 00000004000100010001000000000001 +e1b1852d312d312d312d31 00000005000100010001000000000001 +e1b1862d312d312d312d31 00000006000100010001000000000001 +e1b1872d312d312d312d31 00000007000100010001000000000001 +e1b1882d312d312d312d31 00000008000100010001000000000001 +e1b1892d312d312d312d31 00000009000100010001000000000001 +e1b1902d312d312d312d31 00000000000100010001000000000001 +e1b1912d312d312d312d31 00000001000100010001000000000001 +e1b1922d312d312d312d31 00000002000100010001000000000001 +e1b1932d312d312d312d31 00000003000100010001000000000001 +e1b1942d312d312d312d31 00000004000100010001000000000001 +e1b1952d312d312d312d31 00000005000100010001000000000001 +e1b1962d312d312d312d31 00000006000100010001000000000001 +e1b1972d312d312d312d31 00000007000100010001000000000001 +e1b1982d312d312d312d31 00000008000100010001000000000001 +e1b1992d312d312d312d31 00000009000100010001000000000001 +ea98a02d312d312d312d31 00000000000100010001000000000001 +ea98a12d312d312d312d31 00000001000100010001000000000001 +ea98a22d312d312d312d31 00000002000100010001000000000001 +ea98a32d312d312d312d31 00000003000100010001000000000001 +ea98a42d312d312d312d31 00000004000100010001000000000001 +ea98a52d312d312d312d31 00000005000100010001000000000001 +ea98a62d312d312d312d31 00000006000100010001000000000001 +ea98a72d312d312d312d31 00000007000100010001000000000001 +ea98a82d312d312d312d31 00000008000100010001000000000001 +ea98a92d312d312d312d31 00000009000100010001000000000001 +eaa3902d312d312d312d31 00000000000100010001000000000001 +eaa3912d312d312d312d31 00000001000100010001000000000001 +eaa3922d312d312d312d31 00000002000100010001000000000001 +eaa3932d312d312d312d31 00000003000100010001000000000001 +eaa3942d312d312d312d31 00000004000100010001000000000001 +eaa3952d312d312d312d31 00000005000100010001000000000001 +eaa3962d312d312d312d31 00000006000100010001000000000001 +eaa3972d312d312d312d31 00000007000100010001000000000001 +eaa3982d312d312d312d31 00000008000100010001000000000001 +eaa3992d312d312d312d31 00000009000100010001000000000001 +eaa4802d312d312d312d31 00000000000100010001000000000001 +eaa4812d312d312d312d31 00000001000100010001000000000001 +eaa4822d312d312d312d31 00000002000100010001000000000001 +eaa4832d312d312d312d31 00000003000100010001000000000001 +eaa4842d312d312d312d31 00000004000100010001000000000001 +eaa4852d312d312d312d31 00000005000100010001000000000001 +eaa4862d312d312d312d31 00000006000100010001000000000001 +eaa4872d312d312d312d31 00000007000100010001000000000001 +eaa4882d312d312d312d31 00000008000100010001000000000001 +eaa4892d312d312d312d31 00000009000100010001000000000001 +eaa7902d312d312d312d31 00000000000100010001000000000001 +eaa7912d312d312d312d31 00000001000100010001000000000001 +eaa7922d312d312d312d31 00000002000100010001000000000001 +eaa7932d312d312d312d31 00000003000100010001000000000001 +eaa7942d312d312d312d31 00000004000100010001000000000001 +eaa7952d312d312d312d31 00000005000100010001000000000001 +eaa7962d312d312d312d31 00000006000100010001000000000001 +eaa7972d312d312d312d31 00000007000100010001000000000001 +eaa7982d312d312d312d31 00000008000100010001000000000001 +eaa7992d312d312d312d31 00000009000100010001000000000001 +eaa7b02d312d312d312d31 00000000000100010001000000000001 +eaa7b12d312d312d312d31 00000001000100010001000000000001 +eaa7b22d312d312d312d31 00000002000100010001000000000001 +eaa7b32d312d312d312d31 00000003000100010001000000000001 +eaa7b42d312d312d312d31 00000004000100010001000000000001 +eaa7b52d312d312d312d31 00000005000100010001000000000001 +eaa7b62d312d312d312d31 00000006000100010001000000000001 +eaa7b72d312d312d312d31 00000007000100010001000000000001 +eaa7b82d312d312d312d31 00000008000100010001000000000001 +eaa7b92d312d312d312d31 00000009000100010001000000000001 +eaa9902d312d312d312d31 00000000000100010001000000000001 +eaa9912d312d312d312d31 00000001000100010001000000000001 +eaa9922d312d312d312d31 00000002000100010001000000000001 +eaa9932d312d312d312d31 00000003000100010001000000000001 +eaa9942d312d312d312d31 00000004000100010001000000000001 +eaa9952d312d312d312d31 00000005000100010001000000000001 +eaa9962d312d312d312d31 00000006000100010001000000000001 +eaa9972d312d312d312d31 00000007000100010001000000000001 +eaa9982d312d312d312d31 00000008000100010001000000000001 +eaa9992d312d312d312d31 00000009000100010001000000000001 +eaafb02d312d312d312d31 00000000000100010001000000000001 +eaafb12d312d312d312d31 00000001000100010001000000000001 +eaafb22d312d312d312d31 00000002000100010001000000000001 +eaafb32d312d312d312d31 00000003000100010001000000000001 +eaafb42d312d312d312d31 00000004000100010001000000000001 +eaafb52d312d312d312d31 00000005000100010001000000000001 +eaafb62d312d312d312d31 00000006000100010001000000000001 +eaafb72d312d312d312d31 00000007000100010001000000000001 +eaafb82d312d312d312d31 00000008000100010001000000000001 +eaafb92d312d312d312d31 00000009000100010001000000000001 +efbc902d312d312d312d31 00000000000100010001000000000001 +efbc912d312d312d312d31 00000001000100010001000000000001 +efbc922d312d312d312d31 00000002000100010001000000000001 +efbc932d312d312d312d31 00000003000100010001000000000001 +efbc942d312d312d312d31 00000004000100010001000000000001 +efbc952d312d312d312d31 00000005000100010001000000000001 +efbc962d312d312d312d31 00000006000100010001000000000001 +efbc972d312d312d312d31 00000007000100010001000000000001 +efbc982d312d312d312d31 00000008000100010001000000000001 +efbc992d312d312d312d31 00000009000100010001000000000001 +efbca12d312d312d312d31 0000000a000100010001000000000001 +efbca22d312d312d312d31 0000000b000100010001000000000001 +efbca32d312d312d312d31 0000000c000100010001000000000001 +efbca42d312d312d312d31 0000000d000100010001000000000001 +efbca52d312d312d312d31 0000000e000100010001000000000001 +efbca62d312d312d312d31 0000000f000100010001000000000001 +efbd812d312d312d312d31 0000000a000100010001000000000001 +efbd822d312d312d312d31 0000000b000100010001000000000001 +efbd832d312d312d312d31 0000000c000100010001000000000001 +efbd842d312d312d312d31 0000000d000100010001000000000001 +efbd852d312d312d312d31 0000000e000100010001000000000001 +efbd862d312d312d312d31 0000000f000100010001000000000001 +34313262382d3335363136386435336662646263342d3166613530366234663130642d313430633731346433643634376166332d3736316266356538313263336637 error +34313262382d3335363136386435336662646263342d3166613530366234663130642d313430633734346433643634376166332d3736316266356538313263336637 error +3665346532616333346332652d36353964302d35386263303666633435312d373430643762372d3734616534 error +3665346532616333346332652d36353964302d35386263303638633435312d373430643762372d3734616534 error +3662386561353265363932613863332d32346562306136332d346235663639643065343735662d3136312d343832626539 error +3662386561353265363932613863332d32346562304236332d346235663639643065343735662d3136312d343832626539 error +343635652d31366565653263383766356166392d3137333133322d32663166382d35383136 error +343635652d31366565653263383766352b66392d3137333133322d32663166382d35383136 error +333838623961626162392d313230626139656365623539622d35386162636331302d376630316233392d313536323732 error +333838623961626162392d313230626139656365623539622d35386162636331302d376630316233392d313536333732 error +3433656435373565352d37356262616534646139326236362d316631622d3662323866616534323366632d373133636536633766 error +3433656435373565352d37356262616534646139326236362d316631622d36623238666165343233666339373133636536633766 error +32646466353466382d352d353736662d3534343662313566376364376339612d353138306538 error +32646466353466382d352d353736662d35343436623135663763643763396166353138306538 error +363534396331306630322d36632d32336238613733392d313838632d333964333365653730 error +363534396331306630322d36632d32336238613733392d313838632d2b3964333365653730 error +3164376331373430642d3161396365662d333861656230623536613431322d3266372d34376236323934663433396135 error +3164376331373430642d3161396365662d333861656230623536613431322d326637efbc9134376236323934663433396135 error +373838652d35343263636533303137392d31346538353333643232352d33653331353435663664316533632d31363038613730 error +373838652d35343263636533303137392d31346538353333643232352d336533c2b2353435663664316533632d31363038613730 error +3736353061626663353634616530632d326563616239313365323134622d33383230326439352d363532392d3336323134316364336130653133 error +3736353061626663353634616530632d326563616239313365323134622d33383230326439352d363532f09d9f992d3336323134316364336130653133 error +3463313130613333646434643036302d356664636261392d353665633163613535612d3537322d6136396334313338356263323664 error +3463313130613333646434643036302d356664636261392d353665633163613535612d3537322d6136396334313338356263323661 error +316634616564626661616337642d3963393434306430392d342d37393632613362363636353939382d323631343539313062 error +316634616564626661616337642d3963d9a13434306430392d342d37393632613362363636353939382d323631343539313062 error +3666352d6563313731663062362d336331663037663766373335303831382d3533393763302d33666366 error +3666352d6563313731663062362d336331663037663766373335303831382d3533393763302d33666338 error +366130342d356562622d643634622d312d3362 00006a045ebbd64b000100000000003b +366130342d353862622d643634622d312d3362 00006a0458bbd64b000100000000003b +622d332d356265373930373063632d3665386562623631352d3364666164 0000000b000370ccb61500000003dfad +622d332d356265373930373063632d362b386562623631352d3364666164 error +362d326136342d356463636334616662322d33653831656539392d33 000000062a64afb2ee99000000000003 +362d326136342d356463636334616662322d33653831656539092d33 error +366631336337622d333432612d34616339623432623161663963322d3362323863373932632d326433 error +366631333637622d333432612d34616339623432623161663963322d3362323863373932632d326433 error +366634333036623436303037662d31376336313865643031632d3662302d3737613864383335352d3139656662366561 error +366634333036623436303037662d31376336313865643009632d3662302d3737613864383335352d3139656662366561 error +3139653332643435663034366164352d362d34636533346336352d336539323165313366303335612d3165376138326665633966 error +3139653332643435663034366164352d362d34636533346336352d336539323165313366303335612d3165376138326665633966 error +376336633562663165312d3636653330646137626538306636652d323631653332663831313233396532372d333365302d356538 error +376336633562663165312d3636653362646137626538306636652d323631653332663831313233396532372d333365302d356538 error +33323633636261333136346534652d352d3336626439622d3534612d373564 a3164e4e0005bd9b054a00000000075d +33323633636230333136346534652d352d3336626439622d3534612d373564 03164e4e0005bd9b054a00000000075d +363430322d3264336264643231353738663336312d336365392d333530643965633030342d3135613438333633 error +363430322d3264336266643231353738663336312d336365392d333530643965633030342d3135613438333633 error +3639633465392d31663130623937666166392d31652d3735382d31623839 0069c4e9faf9001e0758000000001b89 +3639633465392d316631d9a1623937666166392d31652d3735382d31623839 0069c4e9faf9001e0758000000001b89 +32326663386231643934642d37626462396563636335302d37382d342d33626332616637 c8b1d94dcc5000780004000003bc2af7 +32326663386231643934642d37626462396563636332302d37382d342d33626332616637 c8b1d94dcc2000780004000003bc2af7 +343832343236382d3165372d373330613166352d36633231373033612d3766 0482426801e7a1f5703a00000000007f +343832343236382d3165372d373330613166352d36303231373033612d3766 0482426801e7a1f5703a00000000007f +372d373462386634306663653637633532332d34652d343838313935343638626663623936372d353739 error +372d373462386634306663633637633532332d34652d343838313935343638626663623936372d353739 error +366532333735343936346431343438642d3362623636616162652d3136386666652d36333131363632613437626234312d35646264343834 error +366532333735343936346431343438642d2d62623636616162652d3136386666652d36333131363632613437626234312d35646264343834 error +322d34623336323661306263363333652d366336612d3538636636662d3565396663313762 error +322d34623336323661306263363333652d366336612d35386366e285a3662d3565396663313762 error +33366431633030353937646538372d35616630652d342d3535332d3638343662 0597de87af0e0004055300000006846b +333664316330303539376465c2b2372d35616630652d342d3535332d3638343662 error +333865663563313830392d662d37622d3637663662306263652d33613332 ef5c1809000f007b0bce000000003a32 +333865663563313830392d662d37622d3637663662306263652d3361332d error +32623164643864356438652d376566326365633463316432353766612d3739372d3162333663323536366365362d3765396137666134613663653230 error +326231646438d9a1356438652d376566326365633463316432353766612d3739372d3162333663323536366365362d3765396137666134613663653230 error +366262336138336466336238322d3139632d323534353831642d39653032616363356362612d35643463353639343635 error +366262336138336466336238322d3139632d323534353831642d39653032666363356362612d35643463353639343635 error +34313237306161653133662d336166343731342d32633730312d322d3161326664363632366630 error +34313237306161653133662d2d6166343731342d32633730312d322d3161326664363632366630 error +33312d3731326330623939316131352d34633432356133332d3639656439396361393964332d363934366163633431633331 error +33312d3731326330623939366131352d34633432356133332d3639656439396361393964332d363934366163633431633331 error +323735373364313739303033633032382d3537376233636236342d3335392d35652d343062323532306465616635 error +323735373364313739303033633032382d3537376233646236342d3335392d35652d343062323532306465616635 error +316636353332363638396338302d31326230363333642d33642d326333342d33613564646239653433346361 error +316636353332363638396338302d31326230363333642d33642d326333342d33613564646239653433346361 error +353964656361316661312d363566392d3430313336343365316461322d363539652d33396565663165306163616631343730 error +353964656361316661312d363566392d342d313336343365316461322d363539652d33396565663165306163616631343730 error +323861646231342d36373233623231313839656231382d31376235623861376663663864642d32642d31646337333662356537 error +323861646231342d36203233623231313839656231382d31376235623861376663663864642d32642d31646337333662356537 error +613132656331636632613666642d3431622d316130353739303031632d3337313034383961332d3733 error +613132656331636632613666642d3431622d3161303537393030312d2d3337313034383961332d3733 error +37303161332d372d353132392d3130353162313162642d3262376431343232 000701a30007512911bd00002b7d1422 +37303161332d622d353132392d3130353162313162642d3262376431343232 000701a3000b512911bd00002b7d1422 +373964343939343463332d336439352d32652d31306234382d32 d49944c33d95002e0b48000000000002 +673964343939343463332d336439352d32652d31306234382d32 error +33363062372d3461383663613666323364343261302d36616666662d3530323837326465316262343033652d353233363064643332 error +33363062372d3461383663613666323364343261302d36616666662d3530323837326461316262343033652d353233363064643332 error +31616330636433346465312d326664366664336135366133372d36382d3630323233643334612d3536663839616462326339313235 error +31616330636433346465312d326664366664336135366133372d36382d3630323233643334612d3536663839616436326339313235 error +37396431382d3161626663612d35352d3132303862653833663132312d36633731313332656538 error +37396431612d3161626663612d35352d3132303862653833663132312d36633731313332656538 error +35613735333463646533312d353134626636306263392d36322d316131633761333536372d313164366233313932316139333635 error +35613735333463646533312d353134626636306263392d36322d316131633761333536372d313164366233313932316139336235 error +373166343866662d3733313632313637643561633034612d353739352d35313932303331632d3138313735616432663966 error +373166343866662d3733313632313637643561633034612d353739352d35313932303331632d3138313745616432663966 error +353530372d3663626434346535303262663333642d3235616566652d32633235336232616433332d3763306464373662 error +353530372d3663626434344435303262663333642d3235616566652d32633235336232616433332d3763306464373662 error +3133386261333861342d366131386638343763653166333434392d312d3765302d333930326131363337353061 error +3133386261333861342d3661313866e285a3343763653166333434392d312d3765302d333930326131363337353061 error +36663063646665612d3131363230626663362d34396532326435652d3330372d3362 6f0cdfeabfc62d5e030700000000003b +36663063646665612d3131363234626663362d34396532326435652d3330372d3362 6f0cdfeabfc62d5e030700000000003b +346338643534663963333736342d34376532633639622d353630623735316634626139622d372d333761 error +346338643534663963333736342d34376532633639622d353630623735316634626120622d372d333761 error +34352d362d316365353138392d333336613065633237393633393631622d3232 0000004500065189961b000000000022 +34352d362d316365353138392d333336613065633237393633c2b23631622d3232 error +323964376162373564663865642d363134396431366435363531372d3332386234343866666361392d37383265323261316435373434362d34616363653434 error +323964376162373564663865642d363134396431366435363531372d3332386234343866666361392d37333265323261316435373434362d34616363653434 error +343532352d3232382d64383733626166373364646438662d3230312d36666363613333353638 error +343532322d3232382d64383733626166373364646438662d3230312d36666363613333353638 error +3330323030303764633233353433382d3439326230636162313037372d3663306238393737313365636364382d32306339632d6530396435383335616638 error +3330323030303764633233353433382d3439326230636162313037372d3663306233393737313365636364382d32306339632d6530396435383335616638 error +37656532622d356137623062373565393366632d34373562333533366261336466632d34363864383339613165362d36373336313565323038316536 error +37656532622d356137623062373565393366632d34373562333533366261336466632d34363864383339613165362d36373336313565326538316536 error +3735346636396561373330352d316262306538372d32373532662d35656566312d353233643561653761 error +3735346633396561373330352d316262306538372d32373532662d35656566312d353233643561653761 error +3434303338663866652d616363383365326237612d353232666363316534322d3664386662656133342d3733386338 error +3434303338663866652d6163633833653262376163353232666363316534322d3664386662656133342d3733386338 error +3435666461662d326638373036363864342d342d332d366131313632 0045fdaf68d4000400030000006a1162 +343566646166e285a3326638373036363864342d342d332d366131313632 error +3233623332663837622d333732356463632d3437622d32613639303834333730373739312d3538393334393136613038 error +3233623332663837622d334132356463632d3437622d32613639303834333730373739312d3538393334393136613038 error +332d376232633336303064382d3362366230653864386538612d333239393261303539356439392d326430363833 error +332d376232633336303064382d33d9a1366230653864386538612d333239393261303539356439392d326430363833 error +6336646364616332362d36393631373838616337322d3735322d36613834356164622d363864316263306463646335376133 error +6336646364616332362d3639363137383861633732643735322d36613834356164622d363864316263306463646335376133 error +35393732302d323137342d3566303933346430323562662d34666632312d37613330343433613738 error +43393732302d323137342d3566303933346430323562662d34666632312d37613330343433613738 error +363635636163396332613364626139662d372d33393565393936356332336563372d33316538362d32 error +363639636163396332613364626139662d372d33393565393936356332336563372d33316538362d32 error +353565313334302d373736386635362d312d332d353564 055e13408f560001000300000000055d +e285a33565313334302d373736386635362d312d332d353564 error +366262666434322d3330386134646366373333362d62623337666134396237343461622d32363734333330393439652d356463333534366636396564 error +366262666434322d3330386134646366373333362d62623337666134396237343461622d323637343333303934efbc91652d356463333534366636396564 error +343535342d332d3337613737612d346639353834323466386134366562332d37393337336237333666 error +343535342d332d3337613737efbca12d346639353834323466386134366562332d37393337336237333666 error +373061646533373434363961362d34373466313334632d333032362d336563343434313763622d663730 error +373061646533373434363961362d34373466313334632d332d32362d336563343434313763622d663730 error +3562612d353433342d396561626636396539382d37623264346464356236662d34646336 000005ba54349e985b6f000000004dc6 +3562612d353433342d396561626636396539382d37623264346464356236662d3464efbc9136 000005ba54349e985b6f000000004d16 +316232642d31343763396261613064382d356631343734393263322d3266656635323565662d323561623134303437 error +316232642d31efbca13763396261613064382d356631343734393263322d3266656635323565662d323561623134303437 error +35626165363733342d3434612d313338623837663632632d37653264333937312d64613237356130 error +35626165363733342d3434612d313343623837663632632d37653264333937312d64613237356130 error +3138613433613230393833312d316164313332353263312d363430613334382d3363662d3564386165383361 error +3138613433613230393833312d316164313332353263312d363430613634382d3363662d3564386165383361 error +32642d353061662d37336338622d376433632d6132383363613462303365346531 0000002d50af3c8b7d3c83ca4b03e4e1 +32642d353061662d37336338622d376433632d6132383337613462303365346531 0000002d50af3c8b7d3c837a4b03e4e1 +37306264363136663765343936622d36653962322d376431343964353466652d373434663835316139342d36386635353936633032646264306436 error +37306264363136664265343936622d36653962322d376431343964353466652d373434663835316139342d36386635353936633032646264306436 error +312d35372d343333312d3462333433326463343638313536612d35383462626432303036616561 error +312d35372d343533312d3462333433326463343638313536612d35383462626432303036616561 error +316162633234313534336533632d62382d35622d313334366333663037366233636639352d3762386265 error +316162633234313534336533632d62382d35622d313334366333663037366233636639352d3762386265 error +3330342d3763323432306364666662382d31613232303033653033326339342d372d33316334353136303263323261643638 error +3330342d37e285a3323432306364666662382d31613232303033653033326339342d372d33316334353136303263323261643638 error +3632653533396438622d61623161312d373566612d34616134373339393666312d353630386232376164323936393735 error +3632653533396438622d61623161312d373566612d34616134373339203666312d353630386232376164323936393735 error +35633362363462316534623838372d61612d34356461612d3666623265376662616538382d3634353834313264333762613863 error +35633362363462316534623838372d61612d34356461612d3666623265376662386538382d3634353834313264333762613863 error +37616164626534386430386437662d65663765306166656631632d646336362d3565326631302d36313765393236383138 error +37616164626534386430386437662d65663765306166656631632d646336362d3565326631302d36313765393036383138 error +35623431393863373432656138662d3231356563373934333161332d312d352d3662373935 error +35623431393863373432656138662d3231356563373934333161332d312d352d3662376735 error +31326463353830366632662d333933653663386163393937303130642d353363663565663431393466612d3233386637653662613639322d34373036323563 error +313264633538303666326646333933653663386163393937303130642d353363663565663431393466612d3233386637653662613639322d34373036323563 error +37666463393735392d342d37653231663930623231393536362d3561323862363461633233613936612d316463613765 error +37666463393735392d342d37653231663930623231393536362d3561323862363461633233613936612d316463613739 error +333862663864396636652d346564343832626130652d352d34383662366635322d6335633961646330 error +333862663864396635652d346564343832626130652d352d34383662366635322d6335633961646330 error +3332633863353138333634326561362d34363436642d363063383833643366663966353766322d35393863336161323738356539312d383061 error +3332633863353138333634326561362d34363436642d363063383833643366663966353866322d35393863336161323738356539312d383061 error +33313837393461382d3361303062613431643032382d372d38336662333439632d3661663337343539313538 error +33313837393461382d3361303062613431303032382d372d38336662333439632d3661663337343539313538 error +3530333131373864392d313134316237343932322d32636331392d333533322d3632633863 error +3530333131373864392d313134316237343932642d32636331392d333533322d3632633863 error +3732643738333839643530343761322d35313837333964326238663137652d34373662642d37343434342d3966353031623037393633 error +3732643738333839643530343761322d35313837333964326238663137652d34373662642d37343434342d39e285a3353031623037393633 error +3535312d376431382d323436343732653235396561386438332d36616566643839642d31316533663737383136623431 error +3535312d376431382d3234363437326532353965efbca1386438332d36616566643839642d31316533663737383136623431 error +353535346639633162393064313637362d336133346130373331666264652d363034363933326531373330323935622d3563382d373834346437643032646634326261 error +633535346639633162393064313637362d336133346130373331666264652d363034363933326531373330323935622d3563382d373834346437643032646634326261 error +316637316535326465392d366161312d37302d323831643063653461342d37 71e52de96aa10070e4a4000000000007 +316637316535326465392d366161314337302d323831643063653461342d37 error +363735346163656337653866352d3337643832332d373738656139373061302d3432396436322d3438666466616138323534 error +363735346163656337653866352d3337643832332d373738656139373061302d3432396437322d3438666466616138323534 error +63316662303630636364312d342d333865386231326631613333652d37393938653662633034316230392d383736393437386135383535 error +63316662303630636364312d342d333865386231326631613333652d37393938653662633034316230392d383766393437386135383535 error +3461663365636366366466652d316237313834343539383263332d363161656236332d3739656631386532363239622d35333734303038 error +3461663365636366366466652d3162373138f09d9f99343539383263332d363161656236332d3739656631386532363239622d35333734303038 error +373830316264636539353539306533352d393233366235382d37613138633137382d326131643632312d34666532366231316535313064 error +373830316238636539353539306533352d393233366235382d37613138633137382d326131643632312d34666532366231316535313064 error +36326332326633646332362d3464616534372d33356163336437623061376262382d3366383633322d36666265313635343262 error +36326332326633646332362d3464616534372d33356163336464623061376262382d3366383633322d36666265313635343262 error +3261613034323131376166393938342d3730313563393463383739372d32383233376535646232322d3363632d373430343636353163 error +3261613034323131376166393938342d3730313563393463383739372d32383233376535646232322d3363632d3734efbca1343636353163 error +33616466392d373833626336353230363439393364622d6339332d31623339353161342d31613865353832646464613137633266 error +33616466392d373833626336353030363439393364622d6339332d31623339353161342d31613865353832646464613137633266 error +3331393966363266342d3134372d3538346633372d3738333061646332396430363835352d37353836646632 error +3331393966363266342d3134372d3538346633372d3738333061616332396430363835352d37353836646632 error +6164653737663461332d343435342d39362d3136343838616631653536312d37393161613231396662393266386539 error +6164653737663461332d343435342d39362d3136344138616631653536312d37393161613231396662393266386539 error +3363653966616134356662612d3734372d32623461316530333235613864642d63342d3465623331343134 error +336365396661613435666261e285a33734372d32623461316530333235613864642d63342d3465623331343134 error +6436626162302d322d32313165373336632d31623632343534612d32 00d6bab00002736c454a000000000002 +6436622d62302d322d32313165373336632d31623632343534612d32 error +34392d3730366162376661352d37652d333134643331662d3539363431356436333537616631 error +34392d3730366162376661352d37652d333134643331662d3520363431356436333537616631 error +372d3336633636313735352d3234392d3739362d3163 0000000717550249079600000000001c +352d3336633636313735352d3234392d3739362d3163 0000000517550249079600000000001c +376438302d3663323632636163356638613963642d313366656234642d323731346637366633313237392d33653631316562643234656336 error +376438302d3663323632636167356638613963642d313366656234642d323731346637366633313237392d33653631316562643234656336 error +33632d356239333961632d313737382d35666538323262383866386433362d3461306261363365653437363461 error +33632d356239333961632d313737c2b22d35666538323262383866386433362d3461306261363365653437363461 error +322d31333836323166366665626439622d373736652d3665356430313166656238302d363365313635646234663361 error +322d31333836323166366665626439622d373736652d3665356430313166656238302d363365313635646234663661 error +313664313536352d372d3233382d34622d343937646431 016d156500070238004b000000497dd1 +313664313536352d372d3233382d34c2b22d343937646431 error +3561623237363735643666613264362d3836646661383931643732642d34643564643933382d31643136343665312d3131323730 error +3561623237363735643666613264362d3836646661383931643732642d34643564643933382d2d643136343665312d3131323730 error +323839332d3661352d312d363038353633336163342d31656131333061 0000289306a500013ac4000001ea130a +32383933efbca13661352d312d363038353633336163342d31656131333061 error +3762362d3133392d31662d32323137306265346163352d3465386664353265343364 000007b60139001f4ac504e8fd52e43d +3762362d3133392031662d32323137306265346163352d3465386664353265343364 error +35633762323864633637326638342d31342d36362d3431366166333734643164302d36323635306664 error +35633762323864633737326638342d31342d36362d3431366166333734643164302d36323635306664 error +3462643261313733623966393562392d3630653933373363382d3535326430616336322d323138362d333966 error +3462643261313733623966393562392d3630653933203363382d3535326430616336322d323138362d333966 error +33653466376431323632353636362d35666534342d3462312d373732303265363837622d35653165 error +33653466376431323632353636362d35666534342d3462312d373732303265203837622d35653165 error +36632d353235396332666134383134342d312d353233393638646363336363343934342d313634373330373738653861366461 error +36632d353235396332666134383134342d312d353233393638646363336363343934342dc2b23634373330373738653861366461 error +32346266623965362d3436333561382d32313432326562666639662d6365343365623233306539656239642d323131373866 error +32346266623965362d3436333561382b32313432326562666639662d6365343365623233306539656239642d323131373866 error +373132373963622d636137323230613530392d35386236383536623935312d322d35633930 error +373132373963622d636137323230613530392d3538c2b236383536623935312d322d35633930 error +353864343138352d326534643533393963663236343266612d3537366138386461332d3132616264642d383033386366343362323132 error +353864343138352d326534643533393963663236343266612d3537366138386461332d3132616264642d383033386341343362323132 error +333130303131666266342d37326666663638632d3261333630316236623734612d316533653761636239373662342d3165646162386535 error +333130303131666266342d37326666663638632d3261333630316236623734612d316533653761636239373662342d3165646162646535 error +34626261356336653963612d333762382d356364656565306531336538332d346638613235363732323465336232302d31663435 error +67626261356336653963612d333762382d356364656565306531336538332d346638613235363732323465336232302d31663435 error +396461323037323838612d31653763316138662d343138363233386230396335343735352d3163633838393031352d313562 error +396461323037323838612d31653763efbca16138662d343138363233386230396335343735352d3163633838393031352d313562 error +31363635326436393465623035622d3932313664303662616362352d35643263336138396632376336372d3530646339313461326232643762612d31313463353563663964653236 error +31363635326436393465623035622d3932313664303662616362352d35643263336138396632376336372d3530646339313461326232643762612d31313463463563663964653236 error +3133612d37642d3165312d333961302d333732333265 0000013a007d01e139a000000037232e +3133612d37642d31653145333961302d333732333265 error +353765613436662d3632636432383633332d31383631363462656166612d3265373262373938333630362d3261326563 error +353765613436662d3632636432383633332d31383631363462656166612d3265373262373938333630362d3261326563 error +3463366336622d38613736636638643261622d3237353634332d326336632d3265343666383861366130 error +3463366336622d38613736636638643261622d3237353634332d326336632d3241343666383861366130 error +3763393632613338663636642d323031643362633966326330322d336263306130312d3563366331306537666366362d353165343764366434383865 error +3763393632613338663636642d363031643362633966326330322d336263306130312d3563366331306537666366362d353165343764366434383865 error +3432663434346132623262352d36613664663538663832626438342d3431333563623632656632353538382d353736303164656633386139612d373238323739 error +3432663434346132623262352d36613664663538663832626438342d3431333563623632656632353538382d353736303164656633386139612d373238323739 error +6335643132633465362d37646361333433376661652d323933372d37646230352d32 5d12c4e67fae2937db05000000000002 +6335640932633465362d37646361333433376661652d323933372d37646230352d32 error +3131646666392d326332322d333534616534303230303838312d35613966632d376363623537333262336430 error +3131646666392d326332322d333534616534303230303838312d35613966632d376363623537332b62336430 error +3561376466643136633863642d35653433356162326562363166652d32352d3233383236312d3266336662 error +3561376466643136633863642d35653433356162326562363966652d32352d3233383236312d3266336662 error +36663938326663663833383861392d3766332d33303235392d33626662302d3236 cf8388a907f30259bfb0000000000026 +30663938326663663833383861392d3766332d33303235392d33626662302d3236 cf8388a907f30259bfb0000000000026 +3434353538643234312d32636663333061666337356432662d36346337363138613065393733392d3136612d3534383364366662303839 error +3434353538643234312d32636663333061666337356432664636346337363138613065393733392d3136612d3534383364366662303839 error +65646239332d3233652d373435633663632d373464363536386238323032632d36303566633262 error +65646239332d3233652d373435633663632d373464363536386238363032632d36303566633262 error +373833323330623663652d34393832333837343538666163372d3736373137626233313363636238382d322d336138643165386430613864 error +373833323330622063652d34393832333837343538666163372d3736373137626233313363636238382d322d336138643165386430613864 error +33393363613439626639392d34302d34666436653535382d3230623935392d3237 ca49bf990040e558b959000000000027 +33393363613439626639392d34302d34666436653535352d3230623935392d3237 ca49bf990040e555b959000000000027 +31653739666632632d362d37616635323766652d343265363231656433303034332d353535353730373332 error +31653739666632632d362d376166e285a3323766652d343265363231656433303034332d353535353730373332 error +36323234662d346561392d326163612d3165332d313031363861353365346661 0006224f4ea92aca01e310168a53e4fa +36323234662d346561392d326163612d3165332d313035363861353365346661 0006224f4ea92aca01e310568a53e4fa +373162353238373666393431363363622d34316630632d352d316331356130643963342d3338 error +373162353238373666393431363363622d34316630632d352d356331356130643963342d3338 error +623565363132652d313266623735623366302d31383633363737342d39326230303330666330666439312d326266373932326466383166623731 error +623565363132652d3132c2b2623735623366302d31383633363737342d39326230303330666330666439312d326266373932326466383166623731 error +3532613734663935343366392d3334362d353139632d34663039362d313864666638306434383233613965 error +3532613734663935343366392d3334362d353139632d34663039362d31386466663830643438323361c2b265 error +372d3665382d3162646431653234643034333630622d36383463656266662d356332636437396264306662 error +372d3665382d3162646431653734643034333630622d36383463656266662d356332636437396264306662 error +323939663830646539343831312d376139632d333832383835356232383464362d373031376233636636376566302d32643465 error +323939663830646539343831312d376139632d333832383835356232383464362d373431376233636636376566302d32643465 error +353734662d37653361333138393333652d376165336561653231386134333131312d3836653936663363666439612d32636264336163643532333230633766 error +353734662d37653361333138393333652d376165336561653231386134333131312d3836653936663363666439612d32636264336163643532333630633766 error +372d3462356431653766626162352d3135356330353361376461622d326333393330633632623861652d6636 error +372d3462356431653766626162352d3135356330353361376461622d326333efbca13330633632623861652d6636 error +37613235326566612d3134386131352d32333530353562363161613332632d326163666232313464306464663038372d36 error +37613235326566612d3134386131352d32333530353562363161613332632d326135666232313464306464663038372d36 error +363561636438363766362d376537326132343762346165663864372d31653633633336372d3164656335336134613865622d3531 error +363561636438363766362d376537326132343762346165663864372d41653633633336372d3164656335336134613865622d3531 error +3461393137622d31633665613964646637353839362d3634633332396534652d313635623637663461612d3333656330653964 error +3461393137622d31633665613964646637353839362d3634633332396534652d31363562363766346161313333656330653964 error +363434642d323163656432666137612d353663633735343731653135622d36656264346663336262646138652d35643461323538623332616566366637 error +363434642d323163654532666137612d353663633735343731653135622d36656264346663336262646138652d35643461323538623332616566366637 error +33653764376135362d333439383338663139612d312d346533362d37306431383733633239353432 error +33653764376135362d333439383338663139612d312d346533362d37306431383733633239393432 error +34313338383438303230393533302d32333238653865382d376536303335353365303732643137382d31613366343033623538612d3436326637323465333338 error +34313338383438303230393533302d32333238653867382d376536303335353365303732643137382d31613366343033623538612d3436326637323465333338 error +38393462312d352d37373034613831613835393437612d31396232313564372d3230336336393738626231316130 error +38393462312d352d37373034613831613835393437612d31396232313564372d3230c2b26336393738626231316130 error +353236356164356532313134366464662d3735343865613633612d333039306239363637342d3338393464613465393463346239652d3262 error +353236356164356532313134366464662d3735343865613633612d333039306239363637342d3338393464613465396163346239652d3262 error +363961363731303066632d362d3666666439653663366639352d313665342d376263616566396635 error +363961363731303066632d322d3666666439653663366639352d313665342d376263616566396635 error +346664656636636364336661662d3366386337383837353235623964352d3161636336633339613035323435382d333039333930643932356363642d3564306539613031323739346661 error +346664656636636364336661662d3366386337383837353235623964352d3161636336633339613035323435382d33303933393064393235636364313564306539613031323739346661 error +3437383133303939626463382d316136636638302d32612d3335372d3535333834303934 3099bdc8cf80002a0357000055384094 +3437383133303939626463382d316736636638302d32612d3335372d3535333834303934 error +346461666662336361372d323432376365323933626665622d32322d622d353666633632363863 error +346461666662336361372d320932376365323933626665622d32322d622d353666633632363863 error +363131662d39396437306132362d323432383461663333386665622d31352d37636536 0000611f0a268feb0015000000007ce6 +363131662d393964c2b2306132362d323432383461663333386665622d31352d37636536 error +333132342d3733352d346161663462302d313466643531336134613839612d313836 000031240735f4b0a89a000000000186 +333132342d3733352d346161663462302d3134c2b2643531336134613839612d313836 error +3132626634376138343133316562622d3633653730323263316663383037322d6538322d353736642d376661373736373961653634333166 error +3132626634376138343133316562622d3633653730323263316663383037322d6538322d353736642d376661373736373961653634336466 error +65386665642d3735662d3137306165343264652d3365303562643964623064343932322d356461343262 error +65386665642d3735662d3137306165343264652d3365303562643964623064343932322d3564efbc91343262 error +34643463393637386562393639352d313164666662306261393134622d342d353235363266326666643966613963322d36306165373061306438333933 error +34643463393637386562393639352d313164666662306261393134622d342d353235e285a33266326666643966613963322d36306165373061306438333933 error +3564373531333065363463366535322d3231326465646235343339362d34373032326133363630332d3562366164376337303539372d31373231386665326533626263 error +3564373531333065363463366535322d3231326465646235343339362d343730e285a3326133363630332d3562366164376337303539372d31373231386665326533626263 error +362d316434346235643465656332342d3337336331632d39313230386538362d373733643465336461623735 error +362d316434346235643465656332342d3337336331632d30313230386538362d373733643465336461623735 error +3136373164393838612d356663373834383535342d33303066632d3263363761652d313132383666 error +3136373164393838612d356663373834383535612d33303066632d3263363761652d313132383666 error +372d35386162643737383939363537642d3434343830653534333263643638662d3431323764366338362d3533363564 error +372d35386162643737383939363537642d3434343830653534333263643638662d3431323764366338362d3533363535 error +3933622d33396336303132356238632d336434643935386637666464363636302d3235383837313432316233343436382d34 error +3933622d33396336303132356238632d336434643935386637666464363636302d3234383837313432316233343436382d34 error +333266342d33653537373139362d3633636164353362383565362d37352d6535366631656233626338 error +333266342d33653537373139362d3633636164353362383565362d37352d653536663165e285a333626338 error +62646264302d316333326261363761303333632d3665622d32383232636464383932626431312d616663316466396433303530633564 error +62646264302d316333326261363761303333632d3665622d32383232636464383432626431312d616663316466396433303530633564 error +3561636233646565386465663263332d3239313435653938626462333536352d3234653336343637322d3565326338652d34313536 error +3561636233646565386465663263332d3239313435653938626462333536352d3234653336343637322d3565326338652d35313536 error +342d333635613632376663616264362d34653738343836632d366363353563633032376365342d35 error +342d33363561363237c2b263616264362d34653738343836632d366363353563633032376365342d35 error +37663065612d39306535652d386537636234306161622d626130373639383239652d343937 error +37663065612d39306535652d386537636234366161622d626130373639383239652d343937 error +35316666396634336637306633352d316234633334362d3737656539393762653533302d37662d6331643530326537323266 error +45316666396634336637306633352d316234633334362d3737656539393762653533302d37662d6331643530326537323266 error +3134626535363764362d353039366164643265642d363538306165616335663538652d313061306538316633393032613034312d36353564643037376432 error +3134626535363764362d353039366164643265642d363538306165616335663538652d313761306538316633393032613034312d36353564643037376432 error +31366565342d3764356465362d313435323463312d35373430343531643931323137362d32356132376535646262393664656265 error +31366565342d3764356465362d313435323463302d35373430343531643931323137362d32356132376535646262393664656265 error +33316632313133312d62633662372d3262383338343032343634342d3533356566383332332d3664313735353937 error +33316632313133312d62633662202d3262383338343032343634342d3533356566383332332d3664313735353937 error +35626533373434353065356332612d3533662d373132342d373039356138626432393234372d3433 error +35626533373434353065356332612d3533662d373167342d373039356138626432393234372d3433 error +366631396336633363302d363733332d376539303035356339393564663038642d31632d3161313563323264343065353530 error +366631396336633363302d363733332d376539303035356339393564663038642d3163623161313563323264343065353530 error +373637322d366664386234303865616136313136372d373736343563352d3162333137636339312d3432333337333466636637663837 error +373637322d366664386234303865616136313136372d372036343563352d3162333137636339312d3432333337333466636637663837 error +363831362d3731303461373939643732382d356536662d37643134622d3330313638343263 error +363431362d3731303461373939643732382d356536662d37643134622d3330313638343263 error +3463662d3231303061623932346339622d3638643239322d326331343439373265376464366262382d326363346666383538323262356237 error +3463662d3231303061623932346339622d3638643239322d326331343439373265376464366262382d326363346666383538f09d9f993262356237 error +33656365663963326362662d31622d37356332612d36346466653463632d34 ef9c2cbf001b5c2ae4cc000000000004 +33656365663963326362662d31622d37356332d9a12d36346466653463632d34 ef9c2cbf001b5c21e4cc000000000004 +32393135612d34326665353639372d32333664662d34383561313466366337392d3535643232646165646532393237 error +32393135612d34326665353639372d32333664662d34383561313466366337392d3535643232646165646532393262 error +613965326439363566303531312d34622d32653535353533383136386532612d34362d34303337616638306362 error +613965326439363566303531312d34622d32653535353533383136386532612d34362d34303337616138306362 error +32633139343736303337612d34656230386465393566642d3732333763332d326266633364312d32326439383632626139353965633063 error +32633139343736303337612d34656230386365393566642d3732333763332d326266633364312d32326439383632626139353965633063 error +3431613461633439646164396664652d343966636331342d3734626336616166326538302d3533313365353531363230633033312d34396531333036353064 error +3431613461633439646164396664652d343966636331342d3734626336616166326538302d35d9a1313365353531363230633033312d34396531333036353064 error +373133643236333630392d3139323235646261353431346465612d323032623634383637323836632d3262666534383138666434366562652d34 error +373133643236333630392d3139323235646261353431346465612d323032623634383637323836632d3262666534383138666434366562653334 error +322d32343936352d323936363730323166613131653335332d35666666353836646562642d36393737336631323865 error +322d32343936352d323936363730323166613131353335332d35666666353836646562642d36393737336631323865 error +33642d343164393639636265353536382d326166612d3266396130393235643333392d343036306163316536646163 error +33642d343164393639636265353536382d326166612d3266396130393235644633392d343036306163316536646163 error +362d346535376338373435356231642d3137316538313634623230306165372d322d3738643461666461 error +362d346535376338373435356231642d3137316538313634623230306165372d322d3738643461666409 error +32646130383666662d3438343062376363626164353165322d3732323165356136393332393764342d3136626536623930333937302d3230623466643931356166 error +32646130383666662d3438343062376363626164353165322d3732323165356136393332393764342d3136626536623946333937302d3230623466643931356166 error +37356132366130362d322d356662633832396538352d34363635346432643366362d353664303163356136656165 error +37356132366130362d412d356662633832396538352d34363635346432643366362d353664303163356136656165 error +32336633332d646233362d3739352d362d61316530363462303862333561 00023f33db36079500061e064b08b35a +32336633332d646233362d3739352d362d61316530363462303862643561 00023f33db36079500061e064b08bd5a +612d37363231626466333666333262382d3465396439656438383537312d3635653266373738643463383961352d31326234363538326366336434 error +612d37363231626466333666333262382d3465396439656438383537312d3635653266373738643463383961352d31326234363538efbca16366336434 error +313633332d3534326437612d33666231363230343335332d3761623464632d34 000016332d7a4353b4dc000000000004 +313633332d3534326437612d33666231363230343335332d3761623464632d67 error +34323263636633653834322d316265323561656662363065332d3666633430313961626238312d366233366639382d373830393666 error +34323263636633653834322d316265323561656662363065332d3666633430313961626262312d366233366639382d373830393666 error +32333836333761623432313435302d373039333435383061312d36333332333630356432322d333265343539613465336439316431612d6465353861653739666131 error +65333836333761623432313435302d373039333435383061312d36333332333630356432322d333265343539613465336439316431612d6465353861653739666131 error +3337302d3137306663343663643835343666662d3864392d336536612d323366373037646630 error +3337302d313730666334366364383534366666d9a13864392d336536612d323366373037646630 error +3666393064663833382d3364632d35306237336335323335322d313638362d37393864333061313535373361 error +366639306466f09d9f9933382d3364632d35306237336335323335322d313638362d37393864333061313535373361 error +6330362d343464353866623538316231632d33632d33303238623162303236332d3130613132306434323030376339 error +6362362d343464353866623538316231632d33632d33303238623162303236332d3130613132306434323030376339 error +32322d32632d356431312d35356163663964623765382d373236 00000022002c5d11b7e8000000000726 +32322d32632d356431312d35356163663964623741382d373236 00000022002c5d11b7a8000000000726 +3564383362382d636430643338383439376231342d376464666134342d322d36303238653139 error +3564383362382d636430643338384239376231342d376464666134342d322d36303238653139 error +336633366634356230333631622d312d36363433623732623137376361332d326366393037383630626465652d35383733343439663932396234 error +336633366634356230333665622d312d36363433623732623137376361332d326366393037383630626465652d35383733343439663932396234 error +313435376636613263383031642d34636637386430393636613766642d36622d3238336263652d346161616532 error +313435376636613263383031642d41636637386430393636613766642d36622d3238336263652d346161616532 error +3738663837386632366266343563332d3161616233323530662d3135332d393638363565333236622d35633963333733 error +6438663837386632366266343563332d3161616233323530662d3135332d393638363565333236622d35633963333733 error +3762356162666531386463613933622d333031623039383566633533646536362d372d32652d356662306166303563343962613865 error +3762356162666531386463613933622d333031623039383566633533646536362d372d32652d356662306166303563343962613365 error +323863313466612d3334633261303536643362623764382d3565373738372d3163323937346631633465383736322d3730383563323834 error +323863313466612d6634633261303536643362623764382d3565373738372d3163323937346631633465383736322d3730383563323834 error +33396562623861623733633461652d3665303533342d3730613233656161353735366464382d366132633032613664356161383331632d323637343761 error +33396562333861623733633461652d3665303533342d3730613233656161353735366464382d366132633032613664356161383331632d323637343761 error +36616537633932393835643339382d353265633133613836666238306632632d34353737386430372d312d366161336332 error +36616537633932393835643342382d353265633133613836666238306632632d34353737386430372d312d366161336332 error +336335303233342d3566663930646262312d313262303237653232346135386361372d31612d3532333032363230333665366633 error +336335303233342d3566663930646262312d313262303237653232346135386361372d31612d35323330323632303336653666d9a1 error +36303663332d33306534313065652d37322d363033386563376436363662373635372d363765336530 error +36303663332d33306534313065652d37322d3630333865633764363636623736353709363765336530 error +37342d3137626363642d353336642d643932342d333535626630346431 00000074bccd536dd924000355bf04d1 +37342d3137626363642d353336642d643932342d333567626630346431 error +373938383531383564306464322d31666565346530343966302d376634363065612d36396435612d3464653461 error +373938383531383564306464322d31666565346530343966302d376634363065612d36396435612d3464653461 error +373037363061652d3161392d34343562372d373564356337383636656630633231382d3530353364666635 error +373037363061652d3161392d65343562372d373564356337383636656630633231382d3530353364666635 error +33623532323936366337616632322d346463306430632d326465386535622d3362303338386265642d3363 error +64623532323936366337616632322d346463306430632d326465386535622d3362303338386265642d3363 error +363964642d3731312d373966356131662d356431643030613535393331622d333861 000069dd07115a1f931b00000000038a +363964642d3731312d3739663561316609356431643030613535393331622d333861 error +376431633566376431666363312d3639332d333566366439646135612d33326634333732633261616332642d326336 error +376431633566376431666363312d3639332d333561366439646135612d33326634333732633261616332642d326336 error +35332d3262642d613061303337613038376261372d3137626137336363383062372d333737366237 error +35332d3262642d613061303337613038636261372d3137626137336363383062372d333737366237 error +3361336338666563352d363530622d343037633861623931646162392d333635633736623265382d326139376230313132613432663930 error +3361336438666563352d363530622d343037633861623931646162392d333635633736623265382d326139376230313132613432663930 error +3338326465383734396338302d3732332d343963663766396561613663323062322d3665393736306434313134633136382d6232343136306536633238656465 error +3338326465383734396338302d3732332d343963663766396561613663323062322d36e285a3393736306434313134633136382d6232343136306536633238656465 error +333830376463376333653939376138652d363531383434373432372d34383138386135313131342d66386233313036313635652d363634303938 error +333830376463376333653939376138652d363531383434376632372d34383138386135313131342d66386233313036313635652d363634303938 error +34326334343961623337313161382d363131663163372d356538646434366463366265326462372d3539646439356162353734332d32 error +34326334343961623337313161382d633131663163372d356538646434366463366265326462372d3539646439356162353734332d32 error +3563636331336561613936372d3638363733332d366530662d376631353465382d353630316639356663 error +3563636331336561613936372d3638363733332d366530662d376631353465382d3536303166392d6663 error +323835313432653466303564332d376136302d31393934313763303764322d363337372d353165 error +32383531343265f09d9f9966303564332d376136302d31393934313763303764322d363337372d353165 error +66333735332d38302d3433346332653231343565392d3338323635633566316433372d3135386333343431 error +66333735332d38302d3433346332653231343565392d3338323635633566316433372d3163386333343431 error +36373661643062363161343730352d34356264373139316465642d3765326239303563646632612d326365303132653863342d323138386263633130306639 error +36373661643062363161343730352d45356264373139316465642d3765326239303563646632612d326365303132653863342d323138386263633130306639 error +343036653638363739316662302d35393031616131636538312d36373834323835372d313064333463643838353762663235612d376131333633633031643035 error +343036653638363739316662302d35393031616131636538312d36373834323835372d31306433346364383835372b663235612d376131333633633031643035 error +366236313866633733323831632d3735662d34662d3263393061373763373730663935392d3131353335333438 error +366236313866633733323862632d3735662d34662d3263393061373763373730663935392d3131353335333438 error +3664646261362d33653937302d3232303065323036373139393635312d643764353466312d32383036633931 error +3664646261362d33653937302d3232303065322036373139393635312d643764353466312d32383036633931 error +343532303830316333343732336330662d3232653231313333656462312d316530623538383364363036636239302d32663565303665612d36643136663533303664 error +343532303830316333343732336330662d3232653231313333656462312d316530623538383364363036636239302d32663565303665612d36643136663533303664 error +333534616238326538632d3665612d343166383162383364313761352d332d3561336338 4ab82e8c06ea17a5000300000005a3c8 +333534616238326538632d3665612d343166383162373364313761352d332d3561336338 4ab82e8c06ea17a5000300000005a3c8 +372d342d36626565363166302d37383164613731623434662d326133363335 00000007000461f0b44f0000002a3635 +372d342d36626565363166302d37383164613732623434662d326133363335 00000007000461f0b44f0000002a3635 +35393062396563303439343139352d31623631616332623132662d3636633039312d332d3430 error +35393062396563303439343139352d3162363161c2b232623132662d3636633039312d332d3430 error +3232336463352d36623834343035346135612d383631632d3362612d356436383131316461326535 error +3232336463632d36623834343035346135612d383631632d3362612d356436383131316461326535 error +3762343639382d3637396230393563353831623335612d33632d316266363865646536646133643064632d3533 error +3762343639382d3637396230393563353831623335612d33632d316266363865646536646133643064632d3533 error +332d323163662d33333830313133366239346166342d32656639393738356434312d31333861356533653135306334646534 error +332d323163662d33333830313133366239346166342d32656639463738356434312d31333861356533653135306334646534 error +352d3736352d313439363231613265383836343764652d31376535386261396630366332652d333036 error +352d3736352d313439363231613265383836343764652d31376535386261396630366332652d333042 error +3265316633323134372d3934323664652d353839332d313762352d35333034626462303635 error +3265316633663134372d3934323664652d353839332d313762352d35333034626462303635 error +333663313764373166323334643934322d3263643231336564633261303339322d3361303835622d3266333039653863303064372d353061 error +333663313764373166323334643934322d3263643231336564634161303339322d3361303835622d3266333039653863303064372d353061 error +363937393764623839666335373630392d3338303261626339323938333466302d366333643232622d3235643965642d31313431623135 error +363937396764623839666335373630392d3338303261626339323938333466302d366333643232622d3235643965642d31313431623135 error +326161616231393033653561313462312d3565646264372d372d35366365616534316133392d3631633032393330 error +326161616231393033653561313462312d3565666264372d372d35366365616534316133392d3631633032393330 error +3332613938656238342d333831333738326132343633346336332d31323932336636653265346535622d36306235653130316464663565662d363636613966363239353231393231 error +3332613938656238342d333831333738326132343633346336332d31323942336636653265346535622d36306235653130316464663565662d363636613966363239353231393231 error +31376534666366633061386334652d33353961396564632d3565303934386265396134312d3665313939363830662d3230333137316231 error +31376534666366633061386334652d33353961396564632d3565303934386265396134312d366531393936efbc9130662d3230333137316231 error +336564656263623161343537662d3762323466322d3333383332316339372d34623530622d31373333613632 error +336564c2b26263623161343537662d3762323466322d3333383332316339372d34623530622d31373333613632 error +6463383165633335373730326433642d3561362d37376436373630642d362d35643733 57702d3d05a6760d0006000000005d73 +6463383165633335373730326433642d3561362d37376436373130642d362d35643733 57702d3d05a6710d0006000000005d73 +666266316330363461646631322d36613036613837312d656165356333306337322d323161326564646661366162302d373161623135356534 error +666266316330363461646631322d36613036613837312d656165356333303037322d323161326564646661366162302d373161623135356534 error +3634616335356235362d343736653130623139366433393761382d33342d353831336263626435306130633763392d343764656466613731 error +3634616335356235362d343765653130623139366433393761382d33342d353831336263626435306130633763392d343764656466613731 error +32363864642d33312d372d353130326163373930353364376362652d3436 000268dd003100077cbe000000000046 +32363864642d33d9a12d372d353130326163373930353364376362652d3436 000268dd003100077cbe000000000046 +313435662d322d313265663063383365346262613164392d343838366335656665313937342d31613061373262316162393466356565 error +313435662d322d313265663063383365c2b26262613164392d343838366335656665313937342d31613061373262316162393466356565 error +363766653330616531322d3134612d36653264643766363538612d37652d62626231 fe30ae12014a658a007e00000000bbb1 +363766653330616531322d3134612d36653264643766363538612d37652d62626231 fe30ae12014a658a007e00000000bbb1 +3135346530632d326332392d31663962336639376234663839642d37626165313034663638326638382d316164313839383064626334 error +31f09d9f99346530632d326332392d31663962336639376234663839642d37626165313034663638326638382d316164313839383064626334 error +32373235356433306535663164632d6434336164643237356634662d3630392d36652d633537323561613832646633616438 error +32373235356433306535643164632d6434336164643237356634662d3630392d36652d633537323561613832646633616438 error +3761613433383838392d343839396234382d3462346231316162306661633162302d363530666163326339343366646333612d32326462 error +3761613433383838392d343839396234382d3462346231316162306666633162302d363530666163326339343366646333612d32326462 error +376233663365316236633163612d376366326638616664362d33386161362d376233352d3339643335636336 error +376233663365316238633163612d376366326638616664362d33386161362d376233352d3339643335636336 error +626539613363356432306365652d37666163376436313935612d34372d3133353536633132613163383433362d3331 error +626539613363356432306365652d37666163376436313945612d34372d3133353536633132613163383433362d3331 error +376239643564366366313466356263622d376265372d35303038663963342d323038363431353533662d35 error +376239643564366366313466356263622d376265372d35303038663963342d323038363431353533662d35 error +336430363765366439393932332d31303430333961373037623463662d343364396664343636632d362d3533656264 error +336430363765366439393932332d31303430333961373037623463642d343364396664343636632d362d3533656264 error +33326230343930392d32383065323237333834356532382d34353736362d32303962333439612d3436313564 error +33326230343930392d32383065323237333834356532382d34353736362d32303962333439612b3436313564 error +37626433373635632d3330633333642d3135352d352d36613631653962 7bd3765cc33d01550005000006a61e9b +37626433373635632d3330633333642d3135382d352d36613631653962 7bd3765cc33d01580005000006a61e9b +363935323336353031663130312d32646365382d37623636356532656134612d663664386336336232316537622d3630663330 error +363935323336353031663130312d32646365382d37623636356532656134612d663639386336336232316537622d3630663330 error +3437623334372d3632303836352d372d3235612d3537643234356130613634 0047b34708650007025a057d245a0a64 +3437623334372d3632303836352d372d323561463537643234356130613634 error +3764373662313737313134376562392d336139632d6139343461373431313536612d3431642d3530643536 error +3764373662313737313134376562392d336139632d6139343461373431313536612d3431642d3537643536 error +313536316638313234396562352d3332613563643465382d33302d35346137323165343130653365312d34323664623438316332663239353264 error +3135f09d9f99316638313234396562352d3332613563643465382d33302d35346137323165343130653365312d34323664623438316332663239353264 error +3464346532356562363734372d343263633265356462363936383539652d323133663538392d36633937323235396461306665382d3436663966 error +3464346532356562363734372d343263633265356462363936383539652d323133663538392d36633937323235396461306665382d3436433966 error +36316533346533322d33392d3566326331613635663534353636342d3236396262336264353461632d3665373932653938333736 error +36316533346533322d33392d3566326331613635663534353636342d3236396262336264353461632d4565373932653938333736 error +3163393032362d3633663839643734333632662d3633343066653062312d3366353361372d3638 error +3163393032362d3633663839643734333632662d3633343066653062312d3366353361372d2038 error +353463646463302d366238612d323735623637363964343337376431362d3661643632353939392d36633436353966326134633462 error +353409646463302d366238612d323735623637363964343337376431362d3661643632353939392d36633436353966326134633462 error +333262386435342d336632326432623532646265336333632d64396134396561626638302d323135363833312d62 error +333262386435342d316632326432623532646265336333632d64396134396561626638302d323135363833312d62 error +36303966636336653965643961382d37333863343531386230353536322d356438356365622d31343633616532622d373861643161326565 error +36303966636336653965643961382d37333863343531386230353536322d356438356365622d31343633616532622d633861643161326565 error +366139393766662d332d356466636565366132643133662d3264366266343461383831612d3235396264 error +366139393766662d332d356466636565366132643133662d3264366266343461383831612d3235396264 error +32333137366338323461372d3361332d3366613831306436663836302d62643463326662323864642d32376634633663373662 error +32333137366338323461372d3361332d3366613831306436663836302d626434633266623238efbca1642d32376634633663373662 error +313261622d31666332613161373065372d3564616338633261633030362d3535346635332d376238636237386562 error +313261622d31666332613161373065372d3564616338633261633030362d3535346635332d376238636237466562 error +3631353832313766376434356237612d3263302d33376534373063342d3165373665303966662d36663365663630 error +3631353832313766376434356237612d3263302d33376534373063342d3165373665303966662d36663335663630 error +35646632326462352d363965306633613030666264323933382d356339663432323864333131316333372d33333236382d366364386232646630313264 error +35646632326462352d363965306633613030666264323933382d356339663432323864333131316333372d33333236382d363464386232646630313264 error +3238643939323465653566663230322d34333934393762642d36662d3639326132652d3339 error +3238643939323465653566663230322d34333934393762642d36662d3639326164652d3339 error +6637346230373462353363303632642d333538396166616438313162622d3636363538662d313532623065343138373361632d37 error +6637346230373462353363303632642d33353839616661643831316262313636363538662d313532623065343138373361632d37 error +37326265356439316532632d33626431613531622d653633353866392d36656639623339346234383635652d6238626434363061 error +37326265356466316532632d33626431613531622d653633353866392d36656639623339346234383635652d6238626434363061 error +3636663334362d35333266352d373339313762343261652d312d366635 0066f34632f542ae00010000000006f5 +6136663334362d35333266352d373339313762343261652d312d366635 00a6f34632f542ae00010000000006f5 +346130632d343066376639656531323438626636312d312d3464352d35373062 00004a0cbf61000104d500000000570b +346130632d343066376639656531323438622036312d312d3464352d35373062 error +3239643162303261383565352d35322d323633346131663030652d35612d38336462366562646465363363 error +3239643162303261383565352d35322d323637346131663030652d35612d38336462366562646465363363 error +32303165642d6262333134353136316661642d326431623038353062643330372d33336364666163642d316361346462363838376563 error +32303165642d6262333134353143316661642d326431623038353062643330372d33336364666163642d316361346462363838376563 error +37363432392d322d3566313934623461663664363631302d393138363564366630316532662d31373462616436393732 error +37366432392d322d3566313934623461663664363631302d393138363564366630316532662d31373462616436393732 error +3233303837373566642d323530623431653363653965343730312d34353630656561622d3533376433633934392d35623530333834 error +3233303837333566642d323530623431653363653965343730312d34353630656561622d3533376433633934392d35623530333834 error +3231316634316666612d3362343239612d326234322d322d336465373432313330 11f41ffa429a2b4200020003de742130 +3231316634316666612d3362343239612d3262343245322d336465373432313330 error +323330393063656131346433613039632d3762366239663733342d3438622d3165312d31363630386166343734 error +323330393063656131346433613039632d3762366239663765342d3438622d3165312d31363630386166343734 error +33346166322d3232656263643262636564373531392d3639643138616530376365622d333163643239622d313930356465 error +33346166322d3232656263643262636564373531392d3639643138616530376365622d333163643239652d313930356465 error +32353735376162626231643037632d6630613033363039376438392d33643734302d3332382d346132 error +3235373537616262e285a331643037632d6630613033363039376438392d33643734302d3332382d346132 error +322d3739376339626464363162386364322d313363322d336163346561353466386366332d356533386461383836376639343530 error +322defbca139376339626464363162386364322d313363322d336163346561353466386366332d356533386461383836376639343530 error +65653665306533302d3333393164633333366131396264652d362d33663236653962312d3930626335356338303039 error +65653665306533302d3333393164633333366131396264652d362d33663236653962312d3930626335353438303039 error +35372d3161373630312d342d3530332d3137316564316632363562 000000577601000405030171ed1f265b +35372d3161373630312d342d3530332d3137316564313032363562 000000577601000405030171ed10265b +3137626164366464643461623331332d363434353537352d352d34393038363631613237312d35313831666130 error +3137626164366464643461623331332d363434354537352d352d34393038363631613237312d35313831666130 error +316266323335632d34336261342d356634622d3231303563356264383233386561322d343538 error +316266323335632d34336261342d356634412d3231303563356264383233386561322d343538 error +37633438363164333432392d3236666462302d3165313134346630353761372d3465302d3561616630303861333565336337 error +37633438363164333432392d3236666462302d3165313134346630353761372d3465302d3561616609303861333565336337 error +3239356433626435373230643534662d336162323334352d313936643231643362612d3435373038353234373439342d353538383534353661 error +3239356433626435373230643534662d336162323334352d313936643231643362612d3435373031353234373439342d353538383534353661 error +333238323630663536393137382d343734642d316263643635352d37656261322d3633333433 error +333238323630663536efbc913137382d343734642d316263643635352d37656261322d3633333433 error +37376531653361653231666335642d353437373838656135622d35623630306339352d33613839332d353532343339626535 error +37376531653345653231666335642d353437373838656135622d35623630306339352d33613839332d353532343339626535 error +3134373966356435312d3234613363626663376163383262322d33633734373831626363342d33322d376463623430 error +3134373966356435312d323461336362666337616338efbc9162322d33633734373831626363342d33322d376463623430 error +3437346262626332306330302d3337622d3162623335653362386339366663382d3236376564613065622d313064353137 error +3437346262626332306330302d3337622d3162623335653362386339646663382d3236376564613065622d313064353137 error +31363131356537352d3537613365363939623862613861662d34326365396366393963363233352d31646439352d376163 error +31363131356537352d3537616165363939623862613861662d34326365396366393963363233352d31646439352d376163 error +316630336432312d31613766396636313663366462652d633264323165623061326538392d37663531363832623430302d3136393263 error +316630336432312d31613766396636313663366462652d633264323165623061326538392d37666231363832623430302d3136393263 error +346261626531346264322d3763393633613963316562356234352d37353434316131373131342d36343934316634652d35396136633432 error +346261626531346264322d3763393633613963316562356234352d37353434316131373131342d36343934316634652d35396136633432 error +3564306335303764392d34353362363364623863662d3331343739652d32326365326533392d33613934373866353363346237 error +3564306335303764392d34353362363364623863662d3331653739652d32326365326533392d33613934373866353363346237 error +386661352d326465643462352d3737612d3536396265306335353165372d3665303131333734 error +386661352d326465453462352d3737612d3536396265306335353165372d3665303131333734 error +313838662d31302d3231376532616435366166333735382d6137372d3561306466643939346133 error +313838662d31302d3231376532616435366166333735382d6137372d3561306466643939346133 error +323663386630666364333631616338392d3734373634322d61353762313066386332342d3232333839372d353465 error +323663386630666364333631616338392d3734373634322d61353762313066386332342d3232f09d9f993839372d353465 error +6161626234393164652d3738653830322d3663333139612d326632372d333931336239376237 error +6161626234393164652d3738653830322d3663333139612d326632372d333931336239376237 error +356232612d35313536383937382d3836326133373339326639342d313562623039383733612d3333386436363061 error +356232612d35313536383937382d3836326133373339326639342d31356262303938373361313333386436363061 error +362d37656338363239612d333933353730646335662d35666137306332396532312d353364636666613166 error +362d37656338463239612d333933353730646335662d35666137306332396532312d353364636666613166 error +63352d336331336436306638653661376138332d33363665346262332d33393534633638613535343834622d3739373965316264633031 error +63352d336331336436306638653661376138332d33363665346262334633393534633638613535343834622d3739373965316264633031 error +34306431663366353266642d32373137652d31646333396339613039662d342d343836393733346565616430 error +34306431663366353266642d32373137652d31646333396339613039662d342d343836390933346565616430 error +356664363030656263616234633736612d343434652d3132613836336565383562666132622d33646439616466363665612d3664393833643161383663336163 error +356664363030656263616234633736612d343434652d3132613836336565383562666132622d33646439616466363665612d3664393833643161383663336109 error +3265313963383161323638382d373431346331646561376231312d3630392d36632d316261383062356236636239 error +3265313963383161323638382d373431346331646561376231312d3630392d36632d3162613830e285a3356236636239 error +3662383338616332363265616365312d36623132313064393532653033652d323732356561336439383237662d353732646662322d32666233343763646437 error +3662383338616332363265616365312d36623132313064d9a13532653033652d323732356561336439383237662d353732646662322d32666233343763646437 error +363037663130646630306635652d33356163356439613134303135622d333131623461313033612d3465343663336635366435662d3431646436 error +363037663130646630306635652d33356163356439613134303135642d333131623461313033612d3465343663336635366435662d3431646436 error +372d32653564653339396666662d31383163313662612d33306138353732633664343935362d376530373261316137363538 error +372d32653564653339396666662d31383163313662612d33306138353732633664343941362d376530373261316137363538 error +3236666162663862353535652d323839383666356139393939306431342d34363333323330343536322d3731343038663230306430323539342d343035336233 error +3236666162663862353535652d323839383666356144393939306431342d34363333323330343536322d3731343038663230306430323539342d343035336233 error +373439303862323630386336392d3464626637362d373134306461346138612d66373938666563612d333132323239326230663336343232 error +373439303862323630386336392d346462663736f09d9f99373134306461346138612d66373938666563612d333132323239326230663336343232 error +336664612d3138396365646630356430372d312d3734306264656133616265623431392d33366266 error +336664612d3138396365646630356430372d312d373430626465613361e285a365623431392d33366266 error +35343636352d35376262383732342d393432336232666264636565302d316534322d34666666303332333930623264656161 error +35343636352d35376262383732342d393432336232666264636565302d316534322d34666666303332336630623264656161 error +386535343831363130616265652d33632d3434362d3563356464322d3161 1610abee003c04465dd200000000001a +386535343831363130616267652d33632d3434362d3563356464322d3161 error +346631633834366531643764636362622d3538316265302d363737636663643063666236632d393862336339383861353362312d6336373439 error +346631633834366531643764636362622d3538316265302d363737636663643063666236632d3938623363d9a1383861353362312d6336373439 error +3664386139312d3465303632316235333066343561302d353935616533323866366139642d37633833632d363164396331 error +3664386139312d3420303632316235333066343561302d353935616533323866366139642d37633833632d363164396331 error +32662d373664343730663833383337392d3136376666636363333635312d373264323463366666372d35346434303338333530626363636634 error +32662d373664343730663833383337392d3136376666636363333635312d373264323463366666372d35346434303338333530626363636635 error +6235373239323166396239332d322d313132393761376565612d3235336431353135343839382d3136383263656261643539 error +6235373239323166396239332d322d313132393761376565612d3235336431353135343839652d3136383263656261643539 error +33316432363033616165622d31313835356132642d373266322d61376530366238312d31353836646464636631396339 error +33316432363033616165622d31313835356132642d373366322d61376530366238312d31353836646464636631396339 error +36623564373531636430346137622d3537313336302d353035632d32326532653566653962306365612d333830353934666266363130306461 error +36623564373531636430346137412d3537313336302d353035632d32326532653566653962306365612d333830353934666266363130306461 error +32656463373839663535323939612d3631333030622d39362d3533353430382d3231 9f55299a300b00965408000000000021 +32654263373839663535323939612d3631333030622d39362d3533353430382d3231 9f55299a300b00965408000000000021 +373735663463353362643265333631372d37363961376431333938312d343039662d6533656362622d3364666466353936393634 error +373735663463353362643265333631372d37363961376431333938312d343039662d6533656362622d3764666466353936393634 error +3166356336382d332d3838353235643532323338643933372d31343330646164342d3263326230643033 error +3166356336382d332d3838353235643532323338643933372d31343130646164342d3263326230643033 error +3436353666613563356136386662362d64653339662d3763372d343666333463312d3261383332396638326562 error +3436353666613563356136386662362d64653339662d3763372d343637333463312d3261383332396638326562 error +3434383663316230372d343539372d353932652d3364382d35646563383231363763326633313531 error +3434383663356230372d343539372d353932652d3364382d35646563383231363763326633313531 error +343630663966382d373230633163663963316238332d373061663637632d342d356633346238336161 error +343630663966382d373230633163663963316238332d373061663637632d342d35663334623833e285a361 error +3632393762362d3238372d333065386562322d333034303834662d316166 006297b602878eb2084f0000000001af +36323937c2b2362d3238372d333065386562322d333034303834662d316166 error +373730393165382d62306331642d396166626234383036642d33326633303431312d323536333965356661633635 error +373730393165382d62306331642d3961666262f09d9f99383036642d33326633303431312d323536333965356661633635 error +3662343264643966662d33652d3464616366363765303665382d313366663438313237363830312d35373831613064646439 error +3662344164643966662d33652d3464616366363765303665382d313366663438313237363830312d35373831613064646439 error +35353538663566313565642d3130393462326331302d3736346630326135393839363165652d33303632663133612d373633326138313730 error +35353538663566313565642d3130393462326331302d3736346630326135393839363165652d33303632663133612d373633326138313746 error +352d3164342d32376161356562303830622d376162663936393764632d376139636363343732626336656135 error +352d3164342d32376161356546303830622d376162663936393764632d376139636363343732626336656135 error +3130666630632d373264393462623966362d313766663235636332352d3136663436323130306334332d33373534653031663137363965376435 error +3130666630632d373264393462622b66362d313766663235636332352d3136663436323130306334332d33373534653031663137363965376435 error +36372d36612d32386338376433653631302d323137303365303961653463362d66323132 00000067006ae610e4c600000000f212 +36372d36612d32386338376433653631302d323164303365303961653463362d66323132 00000067006ae610e4c600000000f212 +323361656463623737623963646136392d372d363066376339633230343865662d3564333666653531302d6430313064393535343462333237 error +323361656463623737623963646136392d372d363030376339633230343865662d3564333666653531302d6430313064393535343462333237 error +3637636662363034393137663536352d343937656339376536633132662d322d36622d3430396462393036633332 error +3637636662363034393137663936352d343937656339376536633132662d322d36622d3430396462393036633332 error +37386362336232612d37666661353163336638352d353866363430646335372d3466636465386134632d3266346166656137613833 error +37386362336232612d37666661353163336638352d353866363430646335372d3466636465386734632d3266346166656137613833 error +323233623062363565373631392d356164332d33353039646233373766372d31626365373138316566392d31643138626464376231623539373262 error +323233623062363565373631392d356164332d33333039646233373766372d31626365373138316566392d31643138626464376231623539373262 error +3734392d376363302d333166656666342d626437362d3735633135353837666133 000007497cc0eff4bd76075c15587fa3 +3734392d376363302d333166656666342d626437362d3735c2b23135353837666133 error +3235343637643938612d3533363932313434363766322d37332d37343866302d33653639656536393565663135 error +3235343637643938612d3533360932313434363766322d37332d37343866302d33653639656536393565663135 error +343535326139653763323966342d3632313663383334622d336535612d32652d376435333731386239 error +343535326139653763323966342d36323136633833346246336535612d32652d376435333731386239 error +333364396636383136342d36306631383161626537336561352d3161623635393064646130652d652d3761313439306432386130373462 error +333364396636383136342d3630efbc9131383161626537336561352d3161623635393064646130652d652d3761313439306432386130373462 error +626337623237392d35616663632d35386239612d613132643735633437396130332d36316165333565 error +626337623237392d3561666363efbc9135386239612d613132643735633437396130332d36316165333565 error +333937613838633562326335663231622d313937333338363466393930313562302d3364303036612d366338386334353666662d3732363638313431336439323339 error +333937613838633562326335663231622d313937333338363466393930313562302d3333303036612d366338386334353666662d3732363638313431336439323339 error +3734303465656661373332623361372d34663736393330343337372d313233656562383932313333642d3765652d336637 error +3734303465656661373332623361372d34666436393330343337372d313233656562383932313333642d3765652d336637 error +39313132313637376239352d363138383038382d343134663261303066332d323364632d376663656461 error +31313132313637376239352d363138383038382d343134663261303066332d323364632d376663656461 error +35322d34316231626539373465313161332d363830616363326339636662622d34373132342d3463366366646165343535623335 error +35322d34316231626539373465313161332d363830616363326339636662622d34373132342d3463366366646165343565623335 error +346438623537313339632d33303933623235313633393537632d33616434653463366132342d3539623535622d343533363930 error +346438623537313339632d33303933623235313633393537632d33616434654463366132342d3539623535622d343533363930 error +663562653362313238332d3437343362646631363035363963322d3263336163633037653832343539642d356239353137656266356535382d3237383937373735373130 error +663562653362313238332d3437343362646631363035363963322d3263336163633037653832343539642d356239353137656266356535382d3237383937373735373130 error +313966316438622d336431303535636366303961653162662d326465373162386161333764306163312d36356562313863613461372d36316266623866333166 error +313966316438622d336431303535636366303961653162662d326465373162386161333764306163312d36356562313863613461372d36316266efbc913866333166 error +32373537373462622d366538352d31303736626131312d31623634646665662d3938666334333530333662643538 error +32373537373462622d656538352d31303736626131312d31623634646665662d3938666334333530333662643538 error +343836643130393031322d64656434372d3337613339393965356461616332302d336436623434663536372d363032 error +343836643130393031322d64656434372d3362613339393965356461616332302d336436623434663536372d363032 error +33352d33306363376632633032302d342d31342d333264643336653233356361 00000035c0200004001432dd36e235ca +33352d33306363376632633032302d342d31342d336764643336653233356361 error +3234663738382d36303431302d61353339662d313334333031376365613730366461612d3737 error +3234663738382d36303431302d61353339662d314534333031376365613730366461612d3737 error +623635352d3639313634623232623134353166612d3162342d3437343634352d37653134 0000b65551fa01b44645000000007e14 +623635352d3632313634623232623134353166612d3162342d3437343634352d37653134 0000b65551fa01b44645000000007e14 +333537646463343836612d3430373465662d3533323665323537646235663765622d34332d32373536 error +333537646463343836612d3430373465662d3533323632323537646235663765622d34332d32373536 error +333261376561366565652d366564633433363036303764312d613030646230333232626131352d3463643134323531386566383938342d37613532613536333133356162323064 error +333261376561366565652d366564633433363036303764312d613030646230333232626131352d3463643134323531386566383938342d37613532613536333133356462323064 error +352d333061303931372d336266346433323533356461302d342d3666643233663239 0000000509175da0000400006fd23f29 +352d333061303931372d336266346433323533356461372d342d3666643233663239 0000000509175da7000400006fd23f29 +332d31383136353034392d3432643634392d3533623332636334383766623932662d3638346261 error +332d31383136353034392d3432643634392d3533623332636334382066623932662d3638346261 error +376132652d313939323561376339363530353961332d3738396461642d3262613464393161623838336562322d3231363632613438373232 error +376132652d313939323561376339363530353961332d3738396461642d3262613464393161623838336562322d3231653632613438373232 error +36622d33332d3263363663613330613833332d33322d37323465653538366330643538 0000006b0033a833003224ee586c0d58 +36622d33332d3263363663613330613833332d33322d37323465653541366330643538 0000006b0033a833003224ee5a6c0d58 +373937632d32332d3763656136622d3464656562643061343064392d326562616266346433653130343166 error +373937632d32332d3763656136622d3464656562643061343064392d326562616241346433653130343166 error +326438643663653236636133303938622d372d36613536623834353066632d3661366335333337653861312d333932363866623066646436303539 error +326438643663653236636133303738622d372d36613536623834353066632d3661366335333337653861312d333932363866623066646436303539 error +313130342d313866356136312d3335626435393665373833623836362d31326633373034353966366364382d333231 error +313130342d313866354536312d3335626435393665373833623836362d31326633373034353966366364382d333231 error +343136623333392d3239392d316438332d6233356632366337632d32633866323762336665353335 error +343136623333392d3239392d316438332d6233353132366337632d32633866323762336665353335 error +3365662d31396665333331643130642d332d3535653339322d3563383063363962656131653032 error +33efbca1662d31396665333331643130642d332d3535653339322d3563383063363962656131653032 error +3566306363383837332d366230386635372d313231302d376637626463343030633665642d343962303339653134326161 error +3566306363383837332d366230386635352d313231302d376637626463343030633665642d343962303339653134326161 error +363335363663623763622d336662376466386563622d656461633561633037346662642d3437383731333165372d32 error +36333536efbca163623763622d336662376466386563622d656461633561633037346662642d3437383731333165372d32 error +326461396166612d346235656163632d343364372d6630613466332d33626234643537363266 error +326461396166612d346235656163632d343364372d66306134efbca1332d33626234643537363266 error +366538636463643364372d333336636237332d66382d3266666330316532662d336437353230 error +366538636463643364372d333336636237332d66382d3266666330316532662d336237353230 error +34373834303938342d372d33382d3161363638386165386338653637632d37396234616231613962 error +34373834303938342d372d33382d3161363665386165386338653637632d37396234616231613962 error +3266353164336233333432643862652d353337312d336535333930356331306666352d363639373538306534306336306638382d3162313239 error +3266353164336233333432643862652d353337312d33653533c2b230356331306666352d363639373538306534306336306638382d3162313239 error +3636342d356435626562616639392d373564652d3166336531616338612d33313935323139376139666137 error +3636342d356435626562616639392d37356465313166336531616338612d33313935323139376139666137 error +336161363238643736302d356535353737303231372d3564322d35382d316639 a628d760021705d200580000000001f9 +336161363238643736302d356535353737303231372d3564320935382d316639 error +64643061623733652d323237386130326334322d3735612d3630326361656531393731363836662d3838 error +64643061623733652d323237386130326334322d3735612d3630326361656531393731363836662d2d38 error +33636165376635306537662d3334386266333763653831316364322d36373330643230363836613462362d343332652d3233326136613035 error +33636165376635306537662d3334386266333763653831316364322d36373330643230363836613462362d343332652d3233326139613035 error +366430352d33352d356661376436353539643163626139662d373335336235323461622d3163623061343761333134373932 error +366430352d33352d356661373536353539643163626139662d373335336235323461622d3163623061343761333134373932 error +36363931666432313735332d373937343530663830322d3730613431336135646533613632382d3133306461336162356233336663662d32313930643135353237 error +36363931666432313735332d373937343530663830322d3730613435336135646533613632382d3133306461336162356233336663662d32313930643135353237 error +3230393939332d31653434373638622d372d376464312d3339 00209993768b00077dd1000000000039 +3230393939332d31654434373638622d372d376464312d3339 00209993768b00077dd1000000000039 +3235393932616530333231352d326431346631333236622d3131663064333364303930652d3365332d353565323433636462316432643164 error +3235393932616530333231352d326431346631333236622d3142663064333364303930652d3365332d353565323433636462316432643164 error +362d3430323362313239303937636365392d356133382d313135382d343031373965313934 error +362d6630323362313239303937636365392d356133382d313135382d343031373965313934 error +3234383836382d373863363235633064302d33632d3633636632626366386339343233362d3464633631313163383861 error +3234383836382d373863363235633064302d33632d3633636632626366386339343233362d346463363131d9a163383861 error +3535373561322d3136383364632d35376133362d3562666532666434326663392d3434 005575a283dc7a362fc9000000000044 +3535373561322d3136383364632d35376133362d3562666532666434326663392d3438 005575a283dc7a362fc9000000000048 +352d352d37653964383264323839302d332d333961613033646130 0000000500052890000300039aa03da0 +352d352d37653964383264323839302d3309333961613033646130 error +34346464663030636237372d373461392d34356463386632306636612d323133376337312d336139333533373234 error +34346435663030636237372d373461392d34356463386632306636612d323133376337312d336139333533373234 error +313833396636633930382d313935373836646633613236322d3134652d3332343333612d32 error +313833396636633930382d313935373836646633613236322d3134372d3332343333612d32 error +313263623632653733336632622d3366383633373565653165642d37623334333230643964372d333162383065303464652d346130333062323666343231643930 error +313263623632653733336632622d3366386733373565653165642d37623334333230643964372d333162383065303464652d346130333062323666343231643930 error +35373962663032326431312d37636334363830666366383664302d32353131622d31312d33 error +35373962663032326431312d37636334363830666366383664302d3235c2b231622d31312d33 error +33623365323835666430653762622d373536303130622d326239636635656135653639386130342d37643431383631623661612d323530346639386265 error +33623365323835666430653762622d373536303330622d326239636635656135653639386130342d37643431383631623661612d323530346639386265 error +35623765633761313561353234302d336562372d32612d38316361313033336639322d31396364346234393664626664 error +35623765633766313561353234302d336562372d32612d38316361313033336639322d31396364346234393664626664 error +3239663933616131382d37666136383231363938313365642d366266336165663466343337632d3135623436643633312d3666636263 error +3239663933616131382d37666136383231363938313365642d366266336165333466343337632d3135623436643633312d3666636263 error +352d363235393166326134322d3162632d3636633936393935353363622d3731386465633762346466 error +352d363235393166326134322d3162632d363663392d393935353363622d3731386465633762346466 error +342d35346639323036323939662d346135646632346435366332392d3262342d33653637636432 error +342d35346639323036323939642d346135646632346435366332392d3262342d33653637636432 error +35356638652d3663642d37356562346336633037302d362d35 00055f8e06cdc0700006000000000005 +35356638652d3663642d33356562346336633037302d362d35 00055f8e06cdc0700006000000000005 +3530326365333266632d356234356532333737363339352d3337636231313538386564362d3363353738343962396535626533622d3133646534313065 error +3530326365333266632d356234356532333737363346352d3337636231313538386564362d3363353738343962396535626533622d3133646534313065 error +3436352d366230323361382d62342d34316336346565306537362d313362 0000046523a800b40e7600000000013b +3436352d366230323361382d62342d34316336346565306565362d313362 0000046523a800b40ee600000000013b +3765662d323631626461346330622d37393638393430613634333832392d3335663039333431642d35 error +3765662d323631626461346330622d37393638393430613634334232392d3335663039333431642d35 error +3566373434373635642d35366234616164362d31633536336164613438372d3363662d63393039646564656232396436 error +3566373434373635642d35366234616164362d3163efbc9136336164613438372d3363662d63393039646564656232396436 error +373839633131303031373964392d33626662363466662d3263626163653531356431343937622d35312d3533633139626165 error +373839633131303031373964392d33626662363466372d3263626163653531356431343937622d35312d3533633139626165 error +346536656366312d36626132656336622d663662383937632d3138333733613732612d36306236393138303039346631616333 error +346536656366312d36626132656336622d663662383937632d3138333733653732612d36306236393138303039346631616333 error +36306139333934653565376361342d316433642d316631633938633437373335633338662d34313162663537386463653837372d353134616462323038313064 error +36306139333934653565376361342d316444642d316631633938633437373335633338662d34313162663537386463653837372d353134616462323038313064 error +376438656134662d363637666261653862372d343433372d34646335343433662d37363963 error +376438656134662d363637666261653262372d343433372d34646335343433662d37363963 error +34396366383335312d3537623365393363373237356630322d633666353134612d31656338312d3463303035 error +34396366383335312d3537623365393363373237352b30322d633666353134612d31656338312d3463303035 error +373736333161313666396634363035322d373731326238323265613138373263622d3337302d342d313732373738356534663235333137 error +373736333161313666396634363035322d373731326238323265613138373263622d3337302d342d313732373738356534663235333137 error +3233353430392d32623238382d3365646236383337386639633366352d383435323630666531322d31363763653264383732363063 error +3233353430392d32623238382d3365646236383337386639343366352d383435323630666531322d31363763653264383732363063 error +3563373733613434303436662d34343731663238342d3635393930393634302d353638316464366464612d366336643538303434 error +3563373733613434303436662d34343731663238342d3635393930393634302d353638316464366437612d366336643538303434 error +63613465662d373637383064633434353837342d3330663761662d35366234326133392d326263 error +63613465662d373237383064633434353837342d3330663761662d35366234326133392d326263 error +356337642d372d336163333833342d34326238323563352d343061 00005c7d0007383425c500000000040a +356337642d372d336163333833342d34326238323563352d346161 00005c7d0007383425c50000000004aa +32653636313834343065613335352d36643030622d32372d3134356439322d3463 440ea355d00b00275d9200000000004c +32653636313834343065613335352d36643030622d32372d3134356439322d34f09d9f99 error +3265333335653238622d3537346233646437383530623061392d34393433322d313365623661646465362d336437666230353235316138336636 error +3265333335653238622d3537346233646437383530623061392d34393433322d313330623661646465362d336437666230353235316138336636 error +3564333739366632322d35346165363833652d662d33332d313630363038393337 d3796f22683e000f0033000160608937 +3564333739366632322d35346165363833652d662d33332d3136303630e285a3393337 error +326430666235643764646135366162342d3638656237306436353832302d31342d32346433656634633131656165332d31666163 error +326430666235643764646135366162342d3638656237306436353832303431342d32346433656634633131656165332d31666163 error +31386539353265653137323766302d342d3166636365633965662d32656238313237663762336636312d32316165623438383934363832 error +31386539353265653137323766302d342d3166636365633965662d32656238313237663762336636312d32316165623438653934363832 error +32363933322d33392d36633139613131622d3465652d373739333436 000269320039a11b04ee000000779346 +32363933326633392d36633139613131622d3465652d373739333436 error +3564353962343939303137322d34372d34333135626531373630642d34663762623234652d3163393532323938653766 error +3564353966343939303137322d34372d34333135626531373630642d34663762623234652d3163393532323938653766 error +373134376637662d353434656362363966382d32346561633235312d3339366333643539362d363563393838 error +373134376637662d353434656362363966382d32346561343235312d3339366333643539362d363563393838 error +323138633831382d326438382d373664393036642d353431312d3265646131 0218c8182d88906d541100000002eda1 +323138633831382d326438382d373664394636642d353431312d3265646131 0218c8182d889f6d541100000002eda1 +3365326238653230313231373963352d333461373033386139373862372d333931623335392d3531612d363164303561643533 error +3365326238653230313231373963352d333461373033386339373862372d333931623335392d3531612d363164303561643533 error +3731386235352d3137623138612d37632d35393138366331622d3330 00718b55b18a007c6c1b000000000030 +3731386235352d3137623138612d37632d353931f09d9f99366331622d3330 error +35366463396563663636632d323062633261632d3733666564366462643863636664382d3765363465363537646339662d3630 error +35366463396563663636e285a32d323062633261632d3733666564366462643863636664382d3765363465363537646339662d3630 error +3162312d3266396235656463332d3161323339356537333764383537362d34613237362d3634346165613561 error +3162312d3266396235654463332d3161323339356537333764383537362d34613237362d3634346165613561 error +31313633633265373466362d313164396531332d3333343439313931323766662d32643261356134333939392d39 error +31313633633265373466362d313164396531332d3333343439313931323766662d32643261356134333939392d2d error +3130623831312d6131312d33366333643161613932623434312d333863363939362d31636534396135636234623838313136 error +3130623831312d6131312d33366333643161613932626234312d333863363939362d31636534396135636234623838313136 error +3338353866353464363230363464642d35366631352d33363630343465312d323164636438353237396639302d33623661 error +3338353866353464363230363464642d35366631352d33363630343465312d323164633038353237396639302d33623661 error +35383261623263343162652d36346465396134323037366136342d313030666233343237303434303233302d356638633832643664653836352d353766323661373433333866 error +35383261623263343162652d36346465396134323037366136342d313030666233343237303434303233302d356738633832643664653836352d353766323661373433333866 error +3563646664382d35392d3363663039352d35342d3234653430343539653766323735 005cdfd80059f0950054e40459e7f275 +3563646664386335392d3363663039352d35342d3234653430343539653766323735 error +3233646336323032663835636439382d3165363732643037393539642d336461366634306430663439396664382d37622d34323066636438373666 error +323364633632303266383563643938313165363732643037393539642d336461366634306430663439396664382d37622d34323066636438373666 error +3239333166372d6539346666342d31383434383935623464642d352d37343362 002931f74ff4b4dd000500000000743b +3239333166372d6539346666342d31383434383935623464642d352d37343330 002931f74ff4b4dd0005000000007430 +3465393434366636366639663937392d35346233322d6366333737303663316435382d362d656638343134 error +3465393432366636366639663937392d35346233322d6366333737303663316435382d362d656638343134 error +33653932656230382d373838383962306232352d6134646334622d39356333393432352d32343934396135653365 error +33653932656230382d37383838396230623235456134646334622d39356333393432352d32343934396135653365 error +353962383131636264312d376134636539396238393264383531652d37652d322d35636561336532333363 error +353962383131636264312d376134636539396238393264383531652d37652d612d35636561336532333363 error +3338323835622d31632d3462626364363361323234653664372d366566303531613361323434392d343063313332626561643330 error +3338323835622d31632d3462626364363361323234653664372d366566303531613361323434392d343063313332666561643330 error +3638352d346332323061633139333965652d3339386164316261333938342d3366366133343038346365313966372d336235633037313165323337346362 error +3638352d346332323061633139333965652d3339386164316261333938342d3366366133343038346365303966372d336235633037313165323337346362 error +372d652d3132363336363234393937612d33343561312d316233346133373762316539 00000007000e997a45a11b34a377b1e9 +372d652d3132363336363234393937613233343561312d316233346133373762316539 error +31332d3464363739373833356365313166372d65372d346338383437356366332d363262666433313165343634646233 error +31332d3464363739373833356365313166372d65372d346338383437356366332d363262666433313165343634d9a16233 error +35386164343163643338362d3364663762652d343038386237656331336637326236362d333934392d353132333763633966613133333136 error +35386164343163643338362d3364663762652d343038386237656331336637326236362d333934392d353132333763636566613133333136 error +623436622d326434323166363330313161652d3762386132313231332d3264342d34633038353162323638343864 error +623436622d326434323166363330313161652b3762386132313231332d3264342d34633038353162323638343864 error +3736622d34363231663731626562322d336332366566373561396535306438662d38666535356462382d343232636630 error +3736622d34363231663731626533322d336332366566373561396535306438662d38666535356462382d343232636630 error +356332322d35336463383638362d36616266313233396133333837372d33336138312d353763613439373533353838373233 error +356332322d35336463383638362d36616267313233396133333837372d33336138312d353763613439373533353838373233 error +333636343731343938383763333332392d3339362d33303138373332303338662d37383863313639386164652d36326166 error +333636343735343938383763333332392d3339362d33303138373332303338662d37383863313639386164652d36326166 error +32623737393633636632623334302d3732353432383734613932312d3633613664643239643737392d32366233372d66393465356265623933 error +32623737393633636632623334302d3732353432383734613932312de285a333613664643239643737392d32366233372d66393465356265623933 error +37366666663934373537343965332d3266642d3335386361352d353966372d313962316465633863623136356363 error +37366666663934373537343965332d3266642d3335386361352d353966372d3139623164c2b2633863623136356363 error +37613338653833332d3564356433633565313233622d3336623364372d32633862366463622d3437 error +37613338653833332d3564356433633565313233352d3336623364372d32633862366463622d3437 error +62662d31353564333865333464632d6131303965633838343133373261382d3730392d36633738 error +62662d31353564336465333464632d6131303965633838343133373261382d3730392d36633738 error +366162343532363830392d33652d31356132313861356339632d356231343963623939653135372d34643534306461636130616261 error +3661623435323638efbc91392d33652d31356132313861356339632d356231343963623939653135372d34643534306461636130616261 error +3630322d336432612d312d333139343263376539666133382d3639313064386264 000006023d2a0001fa3800006910d8bd +3630452d336432612d312d333139343263376539666133382d3639313064386264 0000060e3d2a0001fa3800006910d8bd +3662343465303264342d313031373639626135656664352d3464323337663538356236643032302d332d326132323164 error +3662343465306464342d313031373639626135656664352d3464323337663538356236643032302d332d326132323164 error +3232633837663234312d3539646237322d3338313862653566663064616362332d336166662d3733 error +3232633837663234312d3539646237322d33383138d9a1653566663064616362332d336166662d3733 error +32343635363138353764312d316638392d326364386564333732332d336164613635653338386664633163382d636263363264 error +32343635363138353764312d316638392d326364386564333732332d336164613635653338386664093163382d636263363264 error +3764363665616262303066656535342d3231333938312d322d323830396531343635393734346664352d3734393564 error +3764363665616262303066656535342d3231333938312d322d313830396531343635393734346664352d3734393564 error +3361623761653664366331333735342d666438663764626532656233622d332d3433393839383530636137613237322d3337 error +3361623761653664366331333735342d6664386637646265326562336264332d3433393839383530636137613237322d3337 error +33353734342d326136363562666639383434386536312d313762616530366536612d346362652d343535346463 error +33353734342d323636363562666639383434386536312d313762616530366536612d346362652d343535346463 error +3634343465332d376139613263333935642d3638392d333664326166363033393165396566342d39653866623838336337 error +3634343465332d376139613263333935642d3638392d333664326166363033393165396566342d39653866623838336337 error +37303233353031373737353332632d36332d35332d31616234633163622d386163383363633233323330 error +37303233353031373737353332632d36332d35332d31616234633163622d386163383463633233323330 error +342d31352d372d362d37623662343932 00000004001500070006000007b6b492 +342d31352d372d362d372d3662343932 error +3439313633653138303061382d34626531333963376535346364612d3236646138352d322d36663036 error +3439313633653138303061382d62626531333963376535346364612d3236646138352d322d36663036 error +35393334643365626166393734392d3237626335656430653535333836332d3164312d322d3732616333393730303830 error +35393334643365626166393734392d3237626335656430653535333836332d3164312d322d3732616333393730303830 error +366334333135623533376232622d37333830393130363838612d3431376136362d343638356533383164362d65326564663838323933303631 error +366334333135623533376232622d37333830393130363838612d3431376136362d343638356533383164362d65326561663838323933303631 error +36313066652d35653838656134382d373339373637382d386333663562383561356136352d33363932 error +36313066652d35653838656134382d373339373637382d386333663562383561356136382d33363932 error +32623937373930372d376230333161616466636238312d362d31356436666565323637372d37333734393163633236 error +32623937373930372d37623033316161646663efbc9138312d362d31356436666565323637372d37333734393163633236 error +3562303739323531666264636330652d363963346133393265303761306539332d3130366238653232623930642d3165362d3839 error +3562303739323531666264636330652d363963346133393265303761303239332d3130366238653232623930642d3165362d3839 error +3431393933316334636563666164612d326665323335613162313638382d343332313262352d35633233392d363534396161386239393431383931 error +3431393933316334636563666164612d336665323335613162313638382d343332313262352d35633233392d363534396161386239393431383931 error +3165356135613931312d32336663622d31382d33636637342d33313637 e5a5a9113fcb0018cf74000000003167 +3165356135613931312d32336663622d31382d33634637342d33313637 e5a5a9113fcb0018cf74000000003167 +37613630356431643261333435302d343064323766322d332d32632d33346630646530613234353366 error +37613630356431643261333435302d343064323766322d332d09632d33346630646530613234353366 error +323834646366636131352d35362d3739303239383362613135343861392d376464656231623037666262632d37 error +323834646366efbca16131352d35362d3739303239383362613135343861392d376464656231623037666262632d37 error +3534643361636136352d33382d3638336465616330353436302d31636531333739312d353435303961626663393561323236 error +3534643361636136352d33382d3638333265616330353436302d31636531333739312d353435303961626663393561323236 error +31613162353764643136396437342d35666333383032613663626231652d313062643666323861653566612d323466376237373462643165322d353266356434633636333238313031 error +3161efbc9162353764643136396437342d35666333383032613663626231652d313062643666323861653566612d323466376237373462643165322d353266356434633636333238313031 error +3637612d6631392d33326530642d3334303037652d33666235 0000067a0f192e0d007e000000003fb5 +3637612d6631392defbca1326530642d3334303037652d33666235 0000067a0f192e0d007e000000003fb5 +3134653335632d61633861616163642d36346339636664322d326335633838626637623134612d35356463323038 error +3134653335632d61633861616163642d36346339636664f09d9f992d326335633838626637623134612d35356463323038 error +312d363863643562616662642d3630643830303262662d6662623932653536393563392d376363663663313533373262326336 error +3131363863643562616662642d3630643830303262662d6662623932653536393563392d376363663663313533373262326336 error +333437666564336234382d31633065626433382d3465612d36343365313237633834366331622d3366666437396536306139313239 error +333437666564336234382d31633065626433382d3465612d363433653132376338343663312b2d3366666437396536306139313239 error +366263643933632d3664333063393231392d35626230312d3636322d35366563 06bcd93c9219bb0106620000000056ec +366263653933632d3664333063393231392d35626230312d3636322d35366563 06bce93c9219bb0106620000000056ec +33342d323364396466316231632d37383234652d37302d36393864353761 000000341b1c824e007000000698d57a +33342d323364393266316231632d37383234652d37302d36393864353761 000000341b1c824e007000000698d57a +32363534632d336331656465386232332d356334313065652d332d333335 0002654c8b2310ee0003000000000335 +32363534632d336331656465386232332d356334e285a33065652d332d333335 error +33653035313662393235352d6239393633313133623634302d3661652d3731333535653333323739392d37356330 error +33653035313662393235352d6239393633673133623634302d3661652d3731333535653333323739392d37356330 error +37643964332d362d363837642d326134303264613933626263356530632d376130633863303866 error +37643964332d362d363837642d326134303264613933626263356530632d376130633863302b66 error +356664646435303034666661352d353163323530362d373937382d336662336162663839333038303631342d363038316430366534 error +356664646635303034666661352d353163323530362d373937382d336662336162663839333038303631342d363038316430366534 error +3263343662662d333935303433362d3639382d3632333535662d376137 002c46bf04360698355f0000000007a7 +3263343662662d353935303433362d3639382d3632333535662d376137 002c46bf04360698355f0000000007a7 +36623562386630646430316265362d33383966643439313436346361342d3166306330396638356134622d33383332333931612d316333376662 error +36623562386630646430316265362d33383966643439313436346361342d3166306330396638356134622d33383332333931612d316337376662 error +36353566316164383339312d3434343237643436633964342d346432392d3431332d3262 f1ad8391c9d44d29041300000000002b +36353566316164383339312d3434343237643436633934342d346432392d3431332d3262 f1ad8391c9444d29041300000000002b +3132392d3263393432636364362d336362646163666363363964623636332d323132636632653535623434663162362d34653234 error +3132392d3263393432636364362d336362646163666363363964623636332d323132636632653535623434663162362d34653234 error +3734632d31642d333766656434383838393063386166362d353565383638366165312d3336316430 error +3731632d31642d333766656434383838393063386166362d353565383638366165312d3336316430 error +3164323839383531663862336261392d312d336161653838616364642d356131643734346365392d37633539346430303234626364 error +316432383938353166386233efbc9161392d312d336161653838616364642d356131643734346365392d37633539346430303234626364 error +34303835632d372d342d343038323733616366323537382d37303631306536643035333636623735 error +34303835632d372d342d343038323733616366323537382d37303631306536643035333636673735 error +31666165376437662d64623239613531363262326133642d32393565623238612d646231626236642d31 error +312b6165376437662d64623239613531363262326133642d32393565623238612d646231626236642d31 error +3232353632352d326635652d363337392d372d373137666233633030636561 002256252f5e63790007717fb3c00cea +3232353632352d326635652d363337392d372d373137466233633030636561 002256252f5e63790007717fb3c00cea +3837313266662d34636231652d31663437353731322d37366563653264652d3434343435333438633134353637 error +3837313266662d34636231652d31663437356231322d37366563653264652d3434343435333438633134353637 error +353835366234616165622d343162386532302d313561313862626134322d323636363763333166666138356366392d3561313663383031386561 error +353835366234616165622d343162386532302d313542313862626134322d323636363763333166666138356366392d3561313663383031386561 error +336534636335323063656430352d353163333739663264612d3236663830323539312d32392d333362393966393432356366396534 error +336534636335323063656430352d353163333739663264612d3236663830323539312d34392d333362393966393432356366396534 error +3264322d3437666465306538623566323734662d326563613035612d353834322d31 000002d2274fa05a5842000000000001 +3264322d3437666465306538623566323734662d326563612b35612d353834322d31 error +3539333436316437382d39653433623366656663393064662d37613463313361642d35343133372d3435 error +3539333436316437382d39613433623366656663393064662d37613463313361642d35343133372d3435 error +61373431653932386332392d6565322d366565333866313865662d66643032376239653866642d3234323764 error +61373431653932386332392d6565322d366565333866313965662d66643032376239653866642d3234323764 error +366537343639666561326331372d3766663162643066352d35323835666238342d663733352d3535343739643839 error +3665373436396665d9a1326331372d3766663162643066352d35323835666238342d663733352d3535343739643839 error +34376436363265336365616161382d33332d3764662d36373431343335662d33353638653536383164346432 error +34376436363265336365616161382d33332d3764662d363734312d3335662d33353638653536383164346432 error +336565346165662d3563382d336333343463323535376438372d373630343463363564612d353761373335613863 error +336565346165662d3563382d334533343463323535376438372d373630343463363564612d353761373335613863 error +35336265342d313335306631353032366539346363302d3336353561663963352d363565322d333134373164366165346333 error +35336265342d313335306631353032366539346363302d3336353561663963352d363565322d333134373164366165346334 error +65346235303665336537353439632d66636637306662646439643238372d382d3464323635393362306136366166392d353964663133 error +65346235303665336537353439632d66636637306662646439643238372d382d3464323635393362306136366166392d3539efbc91663133 error +37326238316662336634613435312d32303862653134316139322d3165362d37356132373664363165312d316531 error +37326238316662d9a16634613435312d32303862653134316139322d3165362d37356132373664363165312d316531 error +36392d312d366337356464353033326638303836372d3366663939313664392d3561643634303831363837 error +36392d312d366337356464353033326638303836372d3366663939313664392d35616436342d3831363837 error +376663656564353236363962333434612d333431326561306231376661613863352d3161633262393536383965322d35632d37326162653532386636646565 error +376663656564353236362b62333434612d333431326561306231376661613863352d3161633262393536383965322d35632d37326162653532386636646565 error +37373663373863313365642d373037386534663464393230353364662d633938333735322d626636302d353530393235353365 error +37373663373863313365642d373037386520663464393230353364662d633938333735322d626636302d353530393235353365 error +322d362d366137346231386630643266302d3532333238326566613133632d3661393664 000000020006d2f0a13c00000006a96d +382d362d366137346231386630643266302d3532333238326566613133632d3661393664 000000080006d2f0a13c00000006a96d +33663536623466352d37352d382d31306163356337386335333639382d35653061333433613163 error +33663536623466352d37352d382d31306163356337326335333639382d35653061333433613163 error +3766643266643532312d376239382d322d6430612d3332643435613938373936 fd2fd5217b9800020d0a032d45a98796 +3766643266643532312d376239382d322d64c2b2612d3332643435613938373936 error +3438383432642d333831303865336130313636362d393034376635363634392d35633865366162363661316235642d37 error +3438383432642d423831303865336130313636362d393034376635363634392d35633865366162363661316235642d37 error +32392d333539396231326631362d3564383266353334393665302d32353335633161663639633663302d313232 error +32392d333539396231326631362d3564383266353534393665302d32353335633161663639633663302d313232 error +3236653133303237313332323363622d32633938666639656362372d336566342d373363363638316433353061352d35653730306136643234643839 error +3236653133303237313332323363622d32633938666639656362372d336566342d373363363638316433353041352d35653730306136643234643839 error +33613264316131623038362d3565632d33613233622d346564373935343430303237372d356535316336666262646636 error +33613264316131623038362d3565632d33613233622d346564373935343430303237efbca12d356535316336666262646636 error +3733323566323164303633632d313438353865373665636332362d3431343730663632366663642d33383334623732632d346263306637 error +3733323566323164303633632d313438353865373665633032362d3431343730663632366663642d33383334623732632d346263306637 error +3335616135622d3462343938656466633030303132372d343834373937316437333464662d3434333636336263383937362d3736363136306137643563 error +3335616135622d3462343938656466633030303132372d343834373937316437333464662d3434333636336263383937362d3736363136efbc916137643563 error +32312d37393036652d3736663234653566383633382d3138646163633764652d3963653565 error +32312d37393036652d3736663234653566383633382d3138646163633764652d3963653565 error +33353630642d37362d34383837393935313566382d3739643838353463642d36613364666131 error +33353630642d37362d34383837393935313566382d37e285a3643838353463642d36613364666131 error +3535653634386336613463662d36633135303036342d312d6534646638616337633665342d373137643438366433643637313239 error +3535653634386336613463662d36633135303036342d312d6534646638616337636765342d373137643438366433643637313239 error +323736323138633938383139622d35343563376632343564302d3637653338613930343538366334352d32373563363531376535383934322d3237333534326666376438383837 error +323736323138633938383139622d35343563376632343564302d3637653338613930343538366334352d32373563653531376535383934322d3237333534326666376438383837 error +3136642d343034656637623062636536363561632d3665313461626366622d32666438312d34363735303031626463 error +3136642d343034656637623062636536363561632d3665313461626366622d326664c2b2312d34363735303031626463 error +3436316532366661666535626337352d353233653230356561333365662d36633965316331356233302d3137656230666462333630302d37323533643861643133 error +3436316532366661666535626337352d353233653230356561333365662d36633965316331356233302d3137656230666462673630302d37323533643861643133 error +343234333965666630636134653563332d3266353836656163352d353635652d362d3761 0ca4e5c3eac5565e000600000000007a +343234333965666630636134653563332d3266353836656163352d353235652d362d3761 0ca4e5c3eac5525e000600000000007a +373037316664342d336466332d3430396366396263373238372d313735622d3439656133396530363830633461 error +373037316664342d336466332d3430396366396263373238372d313735622d34396561333965303638e285a3633461 error +6432306238376536653635376163342d3337332d35356232373039346133612d35322d3732636462326464 error +6432306238376536653635376163342d3337332d35356232373039346133612d35322d3732630962326464 error +3738303466342d37646263363963393031626262392d64323435373764663030342d312d34656133333065656365346130626465 error +6538303466342d37646263363963393031626262392d64323435373764663030342d312d34656133333065656365346130626465 error +34622d3665332d3138656339332d31312d34663235643737 0000004b06e3ec930011000004f25d77 +342d2d3665332d3138656339332d31312d34663235643737 error +356462663239326263392d3436653731396139306463352d333536336461316134363331332d333532383563356230353530356234662d313737 error +356462663239326263392d3436653731396139306463352d333536336461316134363331332d3335323835633562efbca1353530356234662d313737 error +36616439623932392d323333382d316139662d323832353663636464322d313631 6ad9b92923381a9fcdd2000000000161 +36616439623932392d323333382d316130662d323832353663636464322d313631 6ad9b92923381a0fcdd2000000000161 +3363313266626536306263656661632d31386565396234386662313763642d6632362d31393932353762313837622d346362613339393366646433 error +3363313266626536306263656661632d3138656539623438666231376364616632362d31393932353762313837622d346362613339393366646433 error +363036653266362d3666313165626430633933363966362d343463663535353666656666393637652d61396264342d363230393336383335 error +363036343266362d3666313165626430633933363966362d343463663535353666656666393637652d61396264342d363230393336383335 error +34352d35313461643539352d376663323237312d3664313937366339342d31663438363330 error +34352d35313461643539352d376663323237312d3664313937366363342d31663438363330 error +33362d316235626264323339392d3539316230316437342d34316163623233323939632d31 error +33362d316235626264323339392d3539646230316437342d34316163623233323939632d31 error +3564626235343431383231656332302d352d396163393864312d3661372d32383235356565373061 error +3564626235343431383231656332302d352d396163393864312d3661372d32383235356564373061 error +352d313962632d3733353139342d3638633335393730342d6164303436 0000000519bc519497040000000ad046 +352d313962632d3733353139342d36386333353937efbc91342d6164303436 0000000519bc519497140000000ad046 +356133326630396632652d353261376335643839353061646462382d36322d34613330383462373537396130332d31353939656231 error +356133323430396632652d353261376335643839353061646462382d36322d34613330383462373537396130332d31353939656231 error +3234313833352d3134656634646263383430363232352d373937653730323937663930322d3265616637393465396564383263662d323931303266 error +3234313833352d3134656634646263383430363232352d373937653730323937663930322d3265616637393443396564383263662d323931303266 error +6330393437332d37662d3233613632362d363364306565303865303633643836612d3734393034323264 error +6345393437332d37662d3233613632362d363364306565303865303633643836612d3734393034323264 error +33646631663065362d323965652d36623233663330653235393033332d356130642d32666561 error +33646631393065362d323965652d36623233663330653235393033332d356130642d32666561 error +32313035642d33383131633436623866333961662d346536623564613666312d353937386464363432342d32 error +32313035642d33383131633436623866333961662d3465366235efbca1613666312d353937386464363432342d32 error +343161632d326138663833393735343162392d3266633633656465396635633438322d363036342d31646132656339383566633562323230 error +343161632d326138663833393735343162392d3266633633656465396635633438322d363036342d41646132656339383566633562323230 error +3465303035623665632d336539356233366530393833302d3337383062336465352d3435342d3265653130663436326137 error +3465303035623665632d336539356233366530393833302d3337383062336465352d3435342d3265656430663436326137 error +342d3161392d3635342d3339303234353163366563382d32 0000000401a906546ec8000000000002 +342d3161392d3635342d3339303234353163366563382d43 0000000401a906546ec800000000000c +37303132333266373536332d34372d3438643931326665643233363663342d3637322d363938 error +37303132333266373539332d34372d3438643931326665643233363663342d3637322d363938 error +35613865353361353936642d64353162392d36312d3761643633383932312d653232613962376434373339 error +35613865353361353936643264353162392d36312d3761643633383932312d653232613962376434373339 error +39642d3633346439633134652d366330343333363261652d3333313535396232622d3434 0000009dc14e62ae9b2b000000000044 +39642d36333464396331346562366330343333363261652d3333313535396232622d3434 error +333763316435323835333233372d346136323865382d346332353439386461363563302d343530316361396466666130392d3265343335323634353866 error +333763316435323835333233372d346136323865382d3463f09d9f99353439386461363563302d343530316361396466666130392d3265343335323634353866 error +346631636438642d3265333435313033333562363133312d3263326238642d3236313731646635393734616331382d33656462613832 error +346631636438642d3265333435313033333562363133312d3263326238642d3236653731646635393734616331382d33656462613832 error +63393231352d33643564363932633063352d363264366430662d31662d353965646539 000c9215c0c56d0f001f00000059ede9 +63393231352d33643564363932633063352d363264366430372d31662d353965646539 000c9215c0c56d07001f00000059ede9 +63303162646631323636652d34652d31366634353863323966326164312d34382d356664 bdf1266e004e2ad100480000000005fd +63303162646631323636652d34652d31366634353863323966656164312d34382d356664 bdf1266e004eead100480000000005fd +33663466336664383633353335302d342d36652d33633130376666616466322d3738343033363331 error +33663466336664383633353335302d342d36652d33633146376666616466322d3738343033363331 error +36622d313037622d333336333638353562633366632d3432626463362d31366235323838393032 error +36622d313037412d333336333638353562633366632d3432626463362d31366235323838393032 error +3638372d33652d33662d37662d32316535313733393962 00000687003e003f007f0021e517399b +4638372d33652d33662d37662d32316535313733393962 00000f87003e003f007f0021e517399b +342d36636531383064633064386337322d36333630623762632d3338313132642d35643038 error +342d36636531383064633064386337322d36333630623762632d3338313132642d3564d9a138 error +373664396338363530643136343466352d36612d3535616362666363343930662d38393030633565382d34313565393633383132663063353535 error +373664396338363530643136343466352d36612d3535616362666363343930662d38393030633565382d34313565393633383132663063354135 error +316362623935653962396134313330372d32372d37322d373236352d376236663031663430643763303761 error +316362623935652d62396134313330372d32372d37322d373236352d376236663031663430643763303761 error +362d6233646566643636622d35326233623438303466372d3736632d323734386436306662 error +362d6233646566643636622d35326233623438303466372d373663c2b2323734386436306662 error +3666336533643438363137333366352d6638646463332d32333066366264642d336531313633666161653063322d353261326630 error +3666336533643438363937333366352d6638646463332d32333066366264642d336531313633666161653063322d353261326630 error +3734356362373465632d37613330666533352d332d37632d333031626633386534626533366164 error +3734356362373465632d37613330666533352d332d37632d333031626633386334626533366164 error +316332623830662d343234302d34643931373064346332342d3165323039613963356361642d3134343065 error +316332623830662d343234302d33643931373064346332342d3165323039613963356361642d3134343065 error +32326463633539666430302d3563376562313734663866312d366437333539613935312d33666366642d3466323966643533 error +32326463633539666430302d3563376562313734f09d9f993866312d366437333539613935312d33666366642d3466323966643533 error +34373763303930386165612d343366662d3462612d36393035663331633262612d343066386261393534 error +34373763303930386165612d34c2b266662d3462612d36393035663331633262612d343066386261393534 error +37393361352d35632d35352d35666465336535622d3465393331 000793a5005c00553e5b00000004e931 +37393361352d46632d35352d35666465336535622d3465393331 000793a500fc00553e5b00000004e931 +373161633335362d3538626265326334372d3335666138323263636566346166382d316430613335666237353765312d313165 error +373161633335362d3538626265326334202d3335666138323263636566346166382d316430613335666237353765312d313165 error +322d323137352d32352d3166313334342d66323238396231 0000000221750025134400000f2289b1 +322d323137352d32352d3466313334342d66323238396231 0000000221750025134400000f2289b1 +313136316331313664372d376530643563313131643734386161382d37346336633431312d373366632d333032656634383930333439323234 error +3131363163313136643734376530643563313131643734386161382d37346336633431312d373366632d333032656634383930333439323234 error +35313064343038662d32323361383762313066322d3534633865662d36316632352d333361663435616132663965343961 error +35313064343038662d32323361383762313066672d3534633865662d36316632352d333361663435616132663965343961 error +336230653233322d313065326566612d316236666466313433362d3538393330612d31373431333263346333633563313762 error +336230653233322d313065326566612d314436666466313433362d3538393330612d31373431333263346333633563313762 error +35362d3637323633333662302d36623738646339386365362d31396666663732303432393862332d3631313766 error +35362d3637323633333662302d36623738646339386365363831396666663732303432393862332d3631313766 error +342d3531366463303266622d3362336338313934633764376436632d31383965643132322d3765616534373165303164396561 error +34653531366463303266622d3362336338313934633764376436632d31383965643132322d3765616534373165303164396561 error +3637662d3133652d32663530666132642d3563353766383466653438383763332d36643766636334303535646532393636 error +3637662d3133652d32663530666132642d3563353766383466653438383763332d36643720636334303535646532393636 error +313032336566306464646235612d336361343961362d3531623234323762356662372d32612d34396530343630303339666361303938 error +313032336566306464646235612d336361343961362d3531623234323762356662372d32612d34396530343630303339666361303966 error +3632666633642d662d36323634392d64623664326365362d313537323862326133 0062ff3d000f26492ce600015728b2a3 +3632666633642d662d36323634392d64623664326365362d313537323820326133 error +3161313466666138333464346162392d326532372d373864646136373738353462302d313861613137326165633963662d34 error +3161373466666138333464346162392d326532372d373864646136373738353462302d313861613137326165633963662d34 error +323935643438322d3332622d372d316534332d31396234 0295d482032b00071e430000000019b4 +323935643438322d3332622d372d316534333031396234 error +3237662d373461663365313237642d3463332d3665333764323362336233363433372d343964 error +3237662d373461663365313237642b3463332d3665333764323362336233363433372d343964 error +3736386639342d3264616162623664376165652d3136383364316538343965652d6230316530393937612d353139386261383233616634 error +3736386639342d3264616162623664376165652d3136383364316538623965652d6230316530393937612d353139386261383233616634 error +6133362d363831326532356137392d3761312d3762652d336464363836306461363634 00000a365a7907a107be3dd6860da664 +6133362d363831326532356137392d3761312d3762422d336464363836306461363634 00000a365a7907a107bb3dd6860da664 +3237313562643836392d343964356335332d33363331633934663831653938642d3237662d353637643833 error +3237313562643836392d343964356335332d33363331633934663831653938642d3237662d353632643833 error +663265326130363535312d31336366613162342d343661383633393736383639652d33633736323663623166382d3733373865 error +663265326130363535312d31336366613162342d343661383633393736383639652d33633736373663623166382d3733373865 error +33393732646331346465332d372d3530392d322d323935613333333635396463323132 2dc14de3000705090002a333659dc212 +33393732646331c2b26465332d372d3530392d322d323935613333333635396463323132 error +376463326236363566353138342d36323334653463316531616234332d35373764393565356338662d333761393066366239636339322d336232333661653235363630653134 error +376463326236363566353138342d36323334653463316531616234332d35373764393565356338662d333761393066366239636339322d336232333661433235363630653134 error +3732313836352d33623232322d346336342d37636439662d363933373735 00721865b2224c64cd9f000000693775 +3732313836352d33623232322d346336342d37636439662d363933373735 00721865b2224c64cd9f000000693775 +3433356432376437652d32663034326561302d3636336232353633642d343434653666616432663164303138612d35386163663939 error +3433356432376437652d32663034326561302d3636336232353633642d343434653666676432663164303138612d35386163663939 error +34663530332d3432653932322d3362306366656561612d3763366564316531636635346533612d37303263336130 error +34663530332d3432653932322d3362304266656561612d3763366564316531636635346533612d37303263336130 error +3664373836362d642d32622d6561343563343764646661643763382d3937 006d7866000d002bd7c8000000000097 +3664373836362d452d32622d6561343563343764646661643763382d3937 006d7866000e002bd7c8000000000097 +3364326330653139382d35662d3138333830663538353632322d36363338373861302d66 d2c0e198005f562278a000000000000f +3364326330653139382d35662d3138333830663538353632322d36363338373861302d66 d2c0e198005f562278a000000000000f +3330333862312d3437363632653034382d356666373433653563653436372d332d32646332 error +3330333862312d3437363632653034382d356666373433653563653436642d332d32646332 error +3632383061356262306330656265342d34303361663066666238362d353466652d3163642d35363434396630613661653966 error +3632383061356262306362656265342d34303361663066666238362d353466652d3163642d35363434396630613661653966 error +3639343732363132373233336139392d343364373338362d3332376564303231376139363434662d3537363432323961613339646539352d353861313132393762 error +3639343732363132373233336139392d343364373338362d3332376564303231376139363434662d3537363432323961613339646539352d353861313132393262 error +352d37302d31383335312d3661622d3165643961333533 000000050070835106ab00001ed9a353 +352d37302d31383335312d0961622d3165643961333533 error +3332646632396562333439343330362d32616632333735656133663865312d373265333761353938322d34656666333966332d313963343130383432 error +3332646632396562333439343330362d3261663233efbca135656133663865312d373265333761353938322d34656666333966332d313963343130383432 error +612d32392d34383835653734632d32343166353231643862343437302d373135623533313037 error +612d32392d34383835653734636532343166353231643862343437302d373135623533313037 error +3464363232303461652d323435356332626265366631663661362d33323132643934376536642d35363861613239663938663335382d3534643966353061 error +3464363232303461652d323435356332626265366631663661362d33323132643934376536642d35363861613239663938463335382d3534643966353061 error +342d32613433373434382d313364323661652d326634373639663032652d373765656232636534396239 error +342d32613433373434382d31336432366165f09d9f99326634373639663032652d373765656232636534396239 error +37666632662d3434326161396633663263393863322d3561323834363262633466302d34636635332d3135326431643930336465663835 error +37666632662d3434326161396633663263393863322d3561323834363262633466302d34636635332d3135326431643930336465663835 error +372d3530612d343539333337346439663032633664322d31312d3633326637326362 00000007050ac6d200110000632f72cb +372d3530612d343539333337346439663045633664322d31312d3633326637326362 00000007050ac6d200110000632f72cb +3932386538636534393233312d3339613966386635632d326465316539613839346135332d3737666637643362316337316330632d3533326231343536 error +3932386538636534393233312d3339613966386635632d32efbc9165316539613839346135332d3737666637643362316337316330632d3533326231343536 error +3463643734322d3664616630662d3539652d3634396337326637333631642d353038366330 error +3463643734322d3664616630662d3539652d3634396362326637333631642d353038366330 error +333337312d313832326266326432636265612d32376465666437663466396561332d35333730613465652d326563 error +33efbc9137312d313832326266326432636265612d32376465666437663466396561332d35333730613465652d326563 error +3131633137643236323834323135322d32386538313433326332312d3133653461623861346462346632352d3636663837362d35633731303436323634 error +31316331376432d9a1323834323135322d32386538313433326332312d3133653461623861346462346632352d3636663837362d35633731303436323634 error +6634313838342d373631333365343939362d32313339656162662d363434383863343536653634656534392d36363133346138353536313637 error +6634313838342d373631333365343939362d32313339656162662d363434383863373536653634656534392d36363133346138353536313637 error +34346439336536623235356630612d3637376134642d37326330392d3531373861363830393864306131632d3135633662653334 error +34346439336536623235356630612d3637376134642d37326330392d3531373861453830393864306131632d3135633662653334 error +342d313035613733663930642d32326139383231333436316638382d31382d3137 00000004f90d1f880018000000000017 +342d313035613733663930642d32326139383231333436316638382d3138363137 error +313134622d36333764343731642d31633931313662323364636662652d34666562623433373230666435382d34643036 error +313134622d36333764343731643431633931313662323364636662652d34666562623433373230666435382d34643036 error +33382d333938636330616365366162396537322d362d3632366432302d33613232653837633161 error +33382d333938636330613265366162396537322d362d3632366432302d33613232653837633161 error +3438362d3132376538326262652d35392d373138352d32326363393766366533363832366165 error +3438362d3132376538326262652d35392d373138352d32326363393733366533363832366165 error +33393663623738313937303865342d37333861386632323432326466312d31626464392d3531642d36653335396634616530306434646162 error +33393663623738313942303865342d37333861386632323432326466312d31626464392d3531642d36653335396634616530306434646162 error +3234643366392d3461656235336336362d3338303233373734393636392d3539382d373836373063336464653661 error +3234643366392d3461656235336336362d3338303233373734393636392d3539382d3738f09d9f99373063336464653661 error +3633333030383066313863326630662d363531386133346639322d37642d326264376636613963383030343438362d653031383965326264643563336164 error +3633333030383066313863326630662d363531386133346639322d37642d326264376636613963383030343438362d653031383965326264e285a33563336164 error +3233362d3531372d373138306538363539326231312d3564636134662d363763313031616335336335643137 error +3233362d3531372d373131306538363539326231312d3564636134662d363763313031616335336335643137 error +3465636465653936662d36392d3232383230342d3361316163612d3138363330383361386234 error +3465346465653936662d36392d3232383230342d3361316163612d3138363330383361386234 error +63383163386264342d356537663334333833386663352d373263633836353239613231306162632d363832313934666565346464322d37303362 error +63383163386264342d356537663334333833386663352d37326363383635323961322d306162632d363832313934666565346464322d37303362 error +32393037613538303134306264322d36663562303533356336652d37363664632d3462643137663062662d3363633738373438663330383365 error +32393037613538303334306264322d36663562303533356336652d37363664632d3462643137663062662d3363633738373438663330383365 error +35392d3630302d3136383331616634622d32662d31623230343430343564 000000590600af4b002f001b2044045d +35392d3630302d3136383331616634622d32662d31623230343430efbc913564 000000590600af4b002f001b2044015d +3165363363623430383361636130342d32303161362d366337383164343066343935343763312d343665343337652d653938373538353737623830 error +3165363363623430383361636130342d32303361362d366337383164343066343935343763312d343665343337652d653938373538353737623830 error +323566652d353838656139393037312d323736342d3135366536396137376636343935322d37 error +323566652d3538386561393930373163323736342d3135366536396137376636343935322d37 error +3537316138623061343133383837662d323665362d35396466303939613862303934312d32386135336635363034622d353034616561383735346133 error +3537316138623061343133383837662d323665362d35396466303939613862303934312d32386135336635363034622d353034616561383735344633 error +3564642d3236633661346134342d37642d366265653265666130342d393138396239643536656237326438 error +3564642d3236633661346134342d37642d366265653265666130342d394338396239643536656237326438 error +3338613231363832313935363431322d33306330643633646130302d366461362d3363666566623762303239333065372d34323164646231383266366136386663 error +3338613231363832313935363431322d33626330643633646130302d366461362d3363666566623762303239333065372d34323164646231383266366136386663 error +353665383362613130652d3632336635653230353464632d376439643035333236362d33643264646263653865336466332d34353037363366 error +353665383362613130652d3632336635653230353464632d376439423035333236362d33643264646263653865336466332d34353037363366 error +326435302d336634372d3237333030663865663838633339312d3465392d3135653039363530363134343538 error +326435302d336634372d3237333030663865663838633339312d3465392d3135653039363530303134343538 error +373139342d3566353031366138632d376339612d3765326637362d323038643035643563376565 error +373139342d3566353031366138632d376339612d3765326637362d323038643035643563666565 error +363538383065622d35363835342d3538623363623266662d3334323163623864312d3664326531336330 error +363538383065622d35363835342d3538623363623266662d3334323163623864312d3664324131336330 error +32326563323639623634632d33613035652d373035303935336533652d3533373862343266656631662d39 error +32326563323639623634632d33613035652d373020303935336533652d3533373862343266656631662d39 error +343663393036653236612d3165313731613964303764396530642d312d336438393161362d363834303261376234316439383130 error +343663393036653236612d3165313731613964303764396530642d312d336438393161362d36383430efbc9161376234316439383130 error +3761333630632d332d32373934393666343537362d32616466322d3137346462616534373965303037 error +3761333630632d332d32373934393666343537362d32616466322d3137346462614634373965303037 error +373233306563653161353536652d33626164303130643939642d316539313530313465323136302d666339643635363666353932622d3631386138 error +373233306534653161353536652d33626164303130643939642d316539313530313465323136302d666339643635363666353932622d3631386138 error +61333064613036616432662d362d6566363866653233612d362d3438663665333764 da06ad2f0006e23a0006000048f6e37d +61333064613036616432662d362d6566363866653233612d362d3438453665333764 da06ad2f0006e23a0006000048e6e37d +373037373462656535373165392d316164302d32383531633564633937612d316661613634392d3565 error +373037373462656535373165392d314364302d32383531633564633937612d316661613634392d3565 error +35346634653163382d323864643337316562652d356463643032656363383465323433642d356561393364642d3136366632 error +35346634653163382d323864643337316530652d356463643032656363383465323433642d356561393364642d3136366632 error +333133343930353636313633346664612d333661322d3565323063366230363230652d3531333865353936336435336464352d35 error +333133343930353636313633346664612d333661322d3565323063366230363230652d3531333834353936336435336464352d35 error +353864316632633166616361642d3236363038326637612d39332d3434322d3238663832306332386231363237 error +353864316632633166616361642d3236363038326637612d39332d3442322d3238663832306332386231363237 error +35653738396439392d363532646535663430346263656336622d363964633930326439323736652d313063626239303934376663312d34313930633665613532313331396562 error +35653738396439392d363532646535663430346263656336622d363964633930326439323736652d313063626239303934376663312d34313930633665613532313331396562 error +366561652d35653733313662332d3333312d3433333164373534382d31373135383562336463 error +366561652d35653733313662332d3333312d343333316437353438efbca131373135383562336463 error +37373065362d3631342d31626664322d3139306639353061642d36376134636139 000770e60614bfd250ad0000067a4ca9 +37373065362d3631342de285a3626664322d3139306639353061642d36376134636139 error +32313932336231382d3332343066393432382d336636386137302d362d6662383566383533333863303839 error +32313932336231382d3332343066393432382d336636386137302d362d66622b3566383533333863303839 error +3531376639343862653839312d3464362d346639662d33342d3162383136 948be89104d64f9f003400000001b816 +3531376639343862653839312d34f09d9f99362d346639662d33342d3162383136 error +376535316264636131302d6635623963306431356262342d3363616134616232313564642d6136666130303739656135323062342d35343463 error +376535316264636131302d6635623963306431356262342d33636161346162d9a1313564642d6136666130303739656135323062342d35343463 error +353038363338632d3764386563323762343130622d312d333265326430323132613731643135352d3761376631393030313563 error +353038363338632d3764386563323762343130622d312d333265326430323132613731643136352d3761376631393030313563 error +316436302d3535626464613037372d33386563643863343661322d3438302d35 00001d60a07746a20480000000000005 +316436302d3535626464613037372d33386564643863343661322d3438302d35 00001d60a07746a20480000000000005 +333462653465312d32613134316539666432312d3139642d3435616234303031626262313834322d333831 error +333462653465312d32613134316539666432312d3139642d3435616234303031626262d9a13834322d333831 error +326662646666653731353265652d3536372d323034313266356432382d343839316564333031363432386661352d32346436 error +326662646566653731353265652d3536372d323034313266356432382d343839316564333031363432386661352d32346436 error +366238622d316539656632363431622d34653862662d3466663061653830633032623435612d3365366430613534 error +366238622d316539656632673431622d34653862662d3466663061653830633032623435612d3365366430613534 error +352d3336632d3761662d373064353434363039316633393361632d37633461316136 00000005036c07af93ac000007c4a1a6 +352d3336632d37616641373064353434363039316633393361632d37633461316136 error +3463342d323663642d33393365373636302d336639312d33336530616136386335393230 000004c426cd76603f913e0aa68c5920 +34633461323663642d33393365373636302d336639312d33336530616136386335393230 error +3339622d332d323436663537333231333761652d636361313332322d3331386232383764633763313232 error +3339622d332d32343666353733323133376165f09d9f99636361313332322d3331386232383764633763313232 error +3365386335363236646466372d31313064643031642d373562613466373631313931652d3539393265613436313865633564392d39306466 error +3365386335363236646466372d31313064643031642d373562613466373631313931652d3539393265613436313865633509392d39306466 error +373332623337652d366339623031353365372d353331332d37342d3733 0732b37e53e753130074000000000073 +373332623337652d366339623031353365372d35332b332d37342d3733 error +31613438333462643662663938612d373230372d3639302d37653166386532393961342d376333633038396431 error +31613438333462643662663938612d373230372d3639304637653166386532393961342d376333633038396431 error +33333439322d3537662d3636663937613065306332316637372d373831663064316138342d3637313864323537 error +33333439322d3537662d3636663937613065676332316637372d373831663064316138342d3637313864323537 error +37372d3738343732396630382d35342d3366663634663664372d3666386539376238303865333739 error +37372d3738343732396630382d35342d3566663634663664372d3666386539376238303865333739 error +333733372d322d322d346664626666662d353266386565663234303466326335 0000373700020002bfff8eef2404f2c5 +333733372d322d322d346664626661662d353266386565663234303466326335 0000373700020002bfaf8eef2404f2c5 +37376232362d32323964366566332d3539623433392d31326166333664393761312d36363731613938626438 error +37376232362d32323964366566332d3539620933392d31326166333664393761312d36363731613938626438 error +3437313235642d32316164343230386564373161662d323163393363653762612d3233343730313333613466366430342d316530373034646232643330 error +3437313235642d32316164343267386564373161662d323163393363653762612d3233343730313333613466366430342d316530373034646232643330 error +3366322d3739646139353661662d31376137352d3366316661386633373863313665322d386362633938303036 error +3366322d3739646139353661342d31376137352d3366316661386633373863313665322d386362633938303036 error +6361636631366638332d63393431636137643934656639332d656466616636343938343331312d333162623464653836326232666639312d3766366532323434346532373862 error +6361636631366638332d6339e285a331636137643934656639332d656466616636343938343331312d333162623464653836326232666639312d3766366532323434346532373862 error +366364663562613663362d356638656565342d343263356566653734336334306435652d64353532656234636336632d626262343036663438 error +366364663562613663362d356638653365342d343263356566653734336334306435652d64353532656234636336632d626262343036663438 error +39373465362d312d6436613930313130346232612d3439396136346232306537346464322d33663063663762 error +39373465362d342d6436613930313130346232612d3439396136346232306537346464322d33663063663762 error +3735663065623239363164323533312d372d36336438653066312d32392d33383763 961d25310007e0f1002900000000387c +3735663065623239363164323533432d372d36336438653066312d32392d33383763 961d253c0007e0f1002900000000387c +31393738666236663136343038662d33362d3539373234333931656234303464342d36353731633236312d326264373932663136366565616164 error +31393738666236663136343038662d33362d3539373234333965656234303464342d36353731633236312d326264373932663136366565616164 error +366332343865666638633433342d31642d38663231386635623731642d363436332d34393137 error +366332343865666630633433342d31642d38663231386635623731642d363436332d34393137 error +6465373764643931312d343038623633313635653736652d3633613831383764302d3762643063343836632d37353338303035 error +6465373764643942312d343038623633313635653736652d3633613831383764302d3762643063343836632d37353338303035 error +372d3337656262342d3433632d3638346535313739613537362d66343166 00000007ebb4043ca57600000000f41f +372d3337656262342d3433632d3638346535313739613537362d6634312b error +353561396430363433393538622d366434652d332d3230322d3434326432 0643958b6d4e000302020000000442d2 +353561396430363433393538622df09d9f996434652d332d3230322d3434326432 error +323934633162373262396464663439392d3562613232646435633362322d3162356630393238302d333839613734633631343638646232342d343862653561643436663263 error +323934633162373262396464663439392d3562613232646435633362322d3162356630393220302d333839613734633631343638646232342d343862653561643436663263 error +36646337363139636333326438622d3330373861636632352d35343030316133366638363232652d3639393737363133632d33303734396361 error +36646337363139636333326438622d3330373861636632352d35343030316133366638363232652defbca139393737363133632d33303734396361 error +363739326365666466303830353661332d32373066663139373066332d332d3432366461363735656266612d62643565343061653534 error +363739326365666466303830353661332d32373066663139373066332d332d6432366461363735656266612d62643565343061653534 error +353038352d3364342d346631373438336130303338332d34656564312d346339386139 0000508503d40383eed10000004c98a9 +353038352d3364342d343231373438336130303338332d34656564312d346339386139 0000508503d40383eed10000004c98a9 +333932383563342d3666333861316566313363363135302d34653061396632613234613761642d3766362d3736396265 error +333932383563342d3666333861316566313363363135302d34653061396632613234613761642d3766362d3731396265 error +353363353964373538302d3433373036356666332d3131652d37393736623432652d6165 c59d75805ff3011eb42e0000000000ae +353363353964373509302d3433373036356666332d3131652d37393736623432652d6165 error +36323039616232342d31342d3130613333332d36373661626266613930326136632d3434333234356535663538656430 error +3632303961623234c2b231342d3130613333332d36373661626266613930326136632d3434333234356535663538656430 error +313466613131363963666237353035342d3136622d322d36386539366336643639363663332d33613534366139666537656464 error +313466613131363963666237353035342d3136622d322d36316539366336643639363663332d33613534366139666537656464 error +366466663062396138662d333433616337662d346664666662636335362d336235633763653565622d3562396339303263386132646138 error +366466663062396138662d333433616337662d346664666662636335362d336235633763652065622d3562396339303263386132646138 error +356335303363622d346333343539656261373461382d353734312d6232316563363463306333312d3566393565353835 error +356335303363622d346333346139656261373461382d353734312d6232316563363463306333312d3566393565353835 error +3263662d32383639633633302d313739622d3835393962376663612d326332353530 000002cfc630179b7fca0000002c2550 +3263662d32383639633633302d313739622d3835394362376663612d326332353530 000002cfc630179b7fca0000002c2550 +35362d3562393336332d323835632d31326564612d31376635613632376166376634633330 error +35362d3562393836332d323835632d31326564612d31376635613632376166376634633330 error +3639326164356335393766382d36333439663430316137342d33622d323162376266663536663438306233342d3633336338343439343331393636 error +3639326164356335393766382d36333439663430316137342d33622d323162376266663536663438306233342d36333363383434efbc91343331393636 error +3561323337306430333561352d32392d313165312d35376334303830336534663936392d323963 error +3561323337306430333561352d32392d313165312d353763343038303365346639363966323963 error +3138352d3361306139616334636431332d3731372d36323536343566372d3737656665656431363836 error +3138352d3361306139616334636431332d3731374536323536343566372d3737656665656431363836 error +316261373961396330332d6533642d3134362d62652d313839313830653362396636 a79a9c030e3d014600be189180e3b9f6 +316261373961396330332d6533642b3134362d62652d313839313830653362396636 error +31652d32342d37646537346362662d373265343134326165393164616531652d33356239666166643736613965 error +31652d32342d37646537346362662d373265343134324665393164616531652d33356239666166643736613965 error +343764302d316634393663302d37316333626238376536346466322d312d3531306139 000047d096c04df200010000000510a9 +343741302d316634393663302d37316333626238376536346466322d312d3531306139 000047a096c04df200010000000510a9 +313437653937643865366639352d313363652d3566643632643932652d32333666323933622d346165643662 error +313437653937643865366639352d313363652d3566643632643932652d32333666323933622d346165643662 error +36393136383362632d3431633436333633346266392d316131386134366137633261356363382d343539393233663934626639622d3130306337653330316662623066 error +3639312d383362632d3431633436333633346266392d316131386134366137633261356363382d343539393233663934626639622d3130306337653330316662623066 error +37363337312d3135393030622d3763613165313062316637332d31396333626334372d366465643263 error +37363337312d3135393030622d3763613165313062316637332d31396333626344372d366465643263 error +373062393938316564342d3438623861333866363561372d373335363138346236616462362d31362d3563 error +373045393938316564342d3438623861333866363561372d373335363138346236616462362d31362d3563 error +3631326438623164303539302d353865363639393535623931662d35342d316333366363636130633937312d356531313431393965663032 error +3631326438623164303539302d353865363639393535623931662d35342d316333366363636130633937312d356531303431393965663032 error +35642d343831313765643162393738373164332d3666616364356161656133332d3431362d356236613930626435646233 error +35642d343831313765643162393738453164332d3666616364356161656133332d3431362d356236613930626435646233 error +35656538613835633433326637392d3366386638363337613039372d323731363731623363386531622d323866343663393761612d336534616330366461626634613834 error +35656538613835633433326637392d3366386638363337613039372d323731363731623363386531622d323866343663393761612d336534616330366461626636613834 error +373138633137623963302d3235332d32363463332d362d3463383765613833 8c17b9c0025364c3000600004c87ea83 +373538633137623963302d3235332d32363463332d362d3463383765613833 8c17b9c0025364c3000600004c87ea83 +35346639353338322d366439313561612d373761313964633737332d35643665322d3765323561623766 error +35346639353338322d366439313561092d373761313964633737332d35643665322d3765323561623766 error +313562303032363932383136372d3265653832336131642d3661352d3331633766343534366538322d3630356532633463386561 error +313562303032363932383136372d3265653832336131642d3661352d3331633766423534366538322d3630356532633463386561 error +37626662376138616366373261382d312d3462393861373363312d353136353461653863666432353766392d37333362323931633665343464376232 error +37626662376138613266373261382d312d3462393861373363312d353136353461653863666432353766392d37333362323931633665343464376232 error +3636323961646561662d313731372d3166652d3363642d36 629adeaf171701fe03cd000000000006 +36363239f09d9f99646561662d313731372d3166652d3363642d36 error +33313932643536663239646363362d32356433376661306334343966632d373034322d37382d33366462626430 error +33313932643536663239646363362d323564333766613063343439666336373034322d37382d33366462626430 error +35656266386333342d373737623336662d33616564322d38613939363664333161316536332d313337643465313761643035636530 error +35656266383133342d373737623336662d33616564322d38613939363664333161316536332d313337643465313761643035636530 error +323936323132646533332d35333334343039362d66393336642d3533646434653531382d366266626338 error +323936323132e285a36533332d35333334343039362d66393336642d3533646434653531382d366266626338 error +37313232306664622d362d3366382d3166343066322d363066 71220fdb000603f840f200000000060f +37313232306664622d362d6366382d3166343066322d363066 71220fdb00060cf840f200000000060f +323538616334662d32632d3331313163376438326334622d3162373363612d6334633164663365306530636266 error +323538616334662d32632d3331313163376438326334622d3162373363612d633463316466332b306530636266 error +3338346362653237643130302d3566622d36353932306461356533322d37376133323363616338383735302d333538 error +3338346362653237643130302d3566622d36353932306461353233322d37376133323363616338383735302d333538 error +36356532313833642d312d36613331653231646334642d353030306261306431363165612d3465643133363962343332 error +36356532313833642d312d36613331653231646334642d353030306261306431363165612d3465643133363963343332 error +33363064612d3737656565342d32312d366632393836336133362d34313132343537376365613966 error +33363064612d3737656565342d32312d366632393836336133362d34313132343538376365613966 error +352d3365362d342d373264333763612d316436653630343461663766343261 0000000503e6000437cae6044af7f42a +352d3365362d342d373264333763612d31643665362d343461663766343261 error +313863663936393534636437312d363735363035616435343462352d36323166666134613162663033322d64332d3435303038396262653035 error +313863663936393534636437312d363735363035616435343462352d36323166666134613163663033322d64332d3435303038396262653035 error +3563663866613863342d3130633436656530662d322d3234363833382d353063333038 cf8fa8c4ee0f0002683800000050c308 +356366386661386334323130633436656530662d322d3234363833382d353063333038 error +36383861343437612d363439396338326235303936373563382d37303363376632383635386537382d313538382d6438 error +36383861343437612d363439396338326235303936373563382d37303363376632383635386544382d313538382d6438 error +32643631303135352d353463366430326139642d3563302d323361376535353436356631396131302d376537373839 error +32643631303135352d35346336c2b230326139642d3563302d323361376535353436356631396131302d376537373839 error +33382d352d3262652d33372d3565393163636536 00000038000502be003700005e91cce6 +333867352d3262652d33372d3565393163636536 error +3532336632383031303630613839392d34633762633730372d35632d3539392d34666333 1060a899c707005c0599000000004fc3 +3532336632383063303630613839392d34633762633730372d35632d3539392d34666333 c060a899c707005c0599000000004fc3 +3330633937396333663965352d3362656564386438623238666461322d3636636235393035656236372d6261653437353265352d33383461376363653161306266 error +3330633937396333663965352d3362656564386438443238666461322d3636636235393035656236372d6261653437353265352d33383461376363653161306266 error +353962303231663565353439382d35356637363966656561626330362d363433373935302d366462626665323134372d38346431656664 error +3539efbc91303231663565353439382d35356637363966656561626330362d363433373935302d366462626665323134372d38346431656664 error +353932373032313264656436362d356464336337343364633433652d37642d32303738663837653937652d31656239366565326537396131 error +353932373032313264656436362d356464336337343364633433653037642d32303738663837653937652d31656239366565326537396131 error +3361373866386435326365342d343637306134392d31622d6334326230633039616534622d363735393536326561623534 error +3361373866386435326365342d343636306134392d31622d6334326230633039616534622d363735393536326561623534 error +343837663134323862372d37316236626131626530662d36363437356666366539362d313165633739643231626361313636302d35613962366165323932633933 error +343837663534323862372d37316236626131626530662d36363437356666366539362d313165633739643231626361313636302d35613962366165323932633933 error +34662d31643161386235642d31646630653365313536646163302d31666138326539312d33 error +34662d31313161386235642d31646630653365313536646163302d31666138326539312d33 error +643461353731332d37643330392d373163652d33396235663235362d3230326163336434 0d4a5713d30971cef2560000202ac3d4 +643461353731332d37643330392d373163652d33396235663235f09d9f992d3230326163336434 error +36356436623532313938613466362d3163336131363966343137302d31616337312d363232393935323165623331662d32 error +36356436623532313938613466362d3163336131363966343137302d33616337312d363232393935323165623331662d32 error +3165623932623039396239362d32386532373134313332662d313234353264373132663036643339302d3463383639373362313065326431652d343031 error +3165623932303039396239362d32386532373134313332662d313234353264373132663036643339302d3463383639373362313065326431652d343031 error +3533373834632d32623661316630632d3565302d343334623032363865326231653830622d34393762633564306263366562 error +3533423834632d32623661316630632d3565302d343334623032363865326231653830622d34393762633564306263366562 error +323235322d326466656364616330623331623935352d3738662d32356139342d3231303732343236663331 error +323235322d326466656364616330623331623935352d3738662d32356139342d3231613732343236663331 error +37313562352d323461332d3261662d3861313162643431623236303665302d3434316664 000715b524a302af06e00000000441fd +37313562352d326761332d3261662d3861313162643431623236303665302d3434316664 error +33653437373663322d33313835323864302d313138342d362d33313631623033633762636362663531 error +33653437373663322d33313835323864302d313138342d362d33313631623033633762636362663531 error +3736372d346437616163656236386136382d356332663866396638343839392d323033622d313364663331663566393031356531 error +3736372d3464376161636562363861e285a3382d356332663866396638343839392d323033622d313364663331663566393031356531 error +31343239316539643532636431612d6532643036336635642d37323763632d332d336565663465 error +31343239316539643532636431612d6532643036336635642d37323763632d332d336565663445 error +353533626662313833382d34653339633066353939622d313938372d3661353965626130632d323337 error +3535336266d9a1313833382d34653339633066353939622d313938372d3661353965626130632d323337 error +64393530652d6562342d65396138612d3132396235343566303238332d363836333665626565353835373764 error +64393530652d6562342d65396138342d3132396235343566303238332d363836333665626565353835373764 error +35383264662d356537313339632d3339363864326665303132613966312d316661353833393832333937333936312d3437 error +35383264662d356537313339632d3339363834326665303132613966312d316661353833393832333937333936312d3437 error +34383362313035636362326237312d3166346434636363392d3632666336653666622d373333382d313938636365356131 error +34383362313035636362326237312d3166346434636363392d3632666336653666622d373333382d313964636365356131 error +393837662d3537313166632d36663063612d3538376230322d323537326637353839666365 error +393837662d3537313166636136663063612d3538376230322d323537326637353839666365 error +316265382d3138356631313836332d3537392d36363762336537343130612d3563316434343830633561 error +316265382d3138356631efbc913836332d3537392d36363762336537343130612d3563316434343830633561 error +32392d326332383034383666663330393531382d31356436653063333733632d36323134666638623133623436332d34363232646131646630376463333836 error +32392d326332383034383666663330393531382d31356436653063333733632d36323134666638623133623436332d34363266646131646630376463333836 error +3664643235636633666533642d37356230396561316161612d3561353131656237366365393533622d3131313235653839666164636234362d336533 error +3664643235636633666533642d37356230396561316161612d3561353131656237366365393533622d3131313235653839666164426234362d336533 error +37626363342d3430623665393033632d323261322d383832642d3432626265623335 0007bcc4903c22a2882d000042bbeb35 +37626363342d3430623665393033632d323261322d383832642d3432623065623335 0007bcc4903c22a2882d000042b0eb35 +63323636623035302d3738376466666535373664643238322d32393337306330393030353935642d34343834666466313636362d33386437303333 error +63323636623035302d3738376466666535373664643538322d32393337306330393030353935642d34343834666466313636362d33386437303333 error +336437326134322d332d343134306438633438336237352d346236312d313065316136363562 error +3364373261343262332d343134306438633438336237352d346236312d313065316136363562 error +353732336534633032626138666662312d31393064302d3564363065323530302d3562326337362d366165663462303065346562 error +353732332d34633032626138666662312d31393064302d3564363065323530302d3562326337362d366165663462303065346562 error +326465612d356531633737336237623134353739622d3536646432302d34626335643036303665633765362d34316163656262346662663363 error +326465612d356531463737336237623134353739622d3536646432302d34626335643036303665633765362d34316163656262346662663363 error +313961316261396531306666302d34396332636661336530632d6336326464312d36323764393430373764623331372d31366134353266326535623134 error +313961316261396531306666302d34396332636661336530632d6336326464312d36323764393430463764623331372d31366134353266326535623134 error +31333663333833322d35616139636333643061302d363737323765393765303265382d333662383035306337313561333937362d3265653636353062 error +31333663333833322d35616139636333643061302d363737323765393765303465382d333662383035306337313561333937362d3265653636353062 error +352d3232343636613031633263322d3631353063393232382d3966662d3364376565376363 error +352d3232343636613031633263322d3631353063393232382d3966662d336437656537efbca163 error +3732343739332d333664396561636364383066392d323034643638636462652d3130302d37376462393036 error +3732343739332d333664396561636364383066392d323034643638636462652d3130303737376462393036 error +31356136366136622d31363365346630613631332d3731346134332d3538352d63313663333734366633 error +31356136366136622d31363365346630613631332d6331346134332d3538352d63313663333734366633 error +376432383033652d3236642d3135653164623731656439366266312d36623864622d3139306630323236306636 error +376432383033652d3236382d3135653164623731656439366266312d36623864622d3139306630323236306636 error +35343431642d3264356231323030363331633064372d35352d343238343237346234333835623334302d34356263626164343036 error +35343431642d3264356231323030363331633064392d35352d343238343237346234333835623334302d34356263626164343036 error +31396666376434613864306337362d3238373732643633613761342d34343439313236643064372d356263343537353534353736363631662d316235396432626136306331343462 error +31396666376434613864306337362d3238373732643633613761342d34343439313236643064372d356263343537353534353736363631662d316235396432626136306331344562 error +34643333353538333466642d353863316335333034643530642d34653235646338326566332d35372d323665 error +34643333353538333466642d353863316335333034643530642d34efbc913235646338326566332d35372d323665 error +34332d372d633735356535303833653336662d33666262333931336431636130652d326233313237 error +34332d372d633735356535303833653336662d33666262333931336431636130652d326241313237 error +3664396635393766653831643337642d663966373564632d32366664326436352d3564323133392d36623962653630383834336135 error +3664396635393766653831643337642d663966373564632d32366664326436352d3564323133392d36623962653630383834326135 error +333934383439313237342d353336333533343530656538383835612d3236356238613933622d3738653461623464313036313238362d32663862623036 error +333934383439313237342d353336333533443530656538383835612d3236356238613933622d3738653461623464313036313238362d32663862623036 error +3533363135353430652d3132323063353236656265396337392d3566643530343030352d33616663663166326562322d36656135 error +35332d3135353430652d3132323063353236656265396337392d3566643530343030352d33616663663166326562322d36656135 error +353537383963363862622d3336612d343864383565352d333966372d333663626436 789c68bb036a85e539f700000036cbd6 +353537383963363862622d3336612d343864383765352d333966372d333663626436 789c68bb036a87e539f700000036cbd6 +65322d37343431346137626438316534622d313732362d3664613933332d353038 000000e21e4b1726a933000000000508 +65322d37343431346137626438316534622d31373236c2b23664613933332d353038 error +33326236626462392d353036353432626437612d376661386464332d31386335613930362d3136356635386166 error +33326236626462462d353036353432626437612d376661386464332d31386335613930362d3136356635386166 error +353733346633393965626134383930642d376534343933353832633231642d353431643133342d33316565376331323537333432372d37663266333963343533646634393332 error +353733346633393965626134383930642d376534343933353809633231642d353431643133342d33316565376331323537333432372d37663266333963343533646634393332 error +372d3461336132652d31393061323338326532333066642d316530302d3733636134 000000073a2e30fd1e00000000073ca4 +372d3461336132652d31393061323338323532333066642d316530302d3733636134 000000073a2e30fd1e00000000073ca4 +363865666233623261396136643665612d3332323736336333393031326636312d3231663231352d346338363833396631613735312d326237 error +363865666233623261396136643665612d3332323736336333393031326636312d3231663231352d346338363833396637613735312d326237 error +333631643231326465622d366334366232643838663437666636302d3530646439613666362d3336663363643436303131332d3564393638373130653039386661 error +333631643231326465622d366334366232643838663437666636302d3530646439613666362d3336663331643436303131332d3564393638373130653039386661 error +32383738323262306563636464302d3232373034313262316336343234662d326436323763613464336465372d3264383932663139643461352d34656265373062 error +32383738323262306563636464302d3232373034313262316336343234662d326436323763613464336465372b3264383932663139643461352d34656265373062 error +37356363613062383564353862392d376631613237613630646233632d31386635643937336531322d352d3538 error +37356363613062383564353862392d376631613237613630646233632d31386635643937336531322d352d6338 error +323566622d3336303365312d34302d36652d363838313335 000025fb03e10040006e000000688135 +323566622d3336303365312d34302d38652d363838313335 000025fb03e10040008e000000688135 +323135346136386238652d3335356366353538393363392d3336302d3138643362653636366530663837332d333139663130343736343630 error +323135346136386238f09d9f992d3335356366353538393363392d3336302d3138643362653636366530663837332d333139663130343736343630 error +3637656134646138652d3538363665326561653434372d35346437373532376337396137382d37663761643261353463333364372d3331643664333865306238666633 error +3637656134646138652d35383636653265efbc91653434372d35346437373532376337396137382d37663761643261353463333364372d3331643664333865306238666633 error +3435356461353963313266336265372d336637352d346532382d35316134372d366234613365346564 error +3435356461353963313266336265372d336637352d346532382d35316134372d366234613365346564 error +313332646131612d342d316630396236643563656534352d35626539363666326563352d31386435 error +313332646131612d342d316630396236643563656534352d35626539363666322063352d31386435 error +3732633632366665666534366638652d332d332d3439333664663731392d343933646539 efe46f8e00030003f719000000493de9 +3732633632366665666534366664652d332d332d3439333664663731392d343933646539 efe46fde00030003f719000000493de9 +3330646135366239632d3466396238336538612d3435623732323663342d323434356337316239372d3761663364343465 error +3330646135366239632d3466396232336538612d3435623732323663342d323434356337316239372d3761663364343465 error +33643363636231336438352d3761386235652d37652d366339642d656262 ccb13d858b5e007e6c9d000000000ebb +336433636362313364e285a3352d3761386235652d37652d366339642d656262 error +353466376337312d34383866323839653866393163332d39623264352d3664636237313838623736623464302d373731383131 error +353466376337312d34383866323839653866393163332d61623264352d3664636237313838623736623464302d373731383131 error +316432636338656233393161322d33352d6435313938323638392d373964653631663633386436656634622d35366231396563336663653236373239 error +313532636338656233393161322d33352d6435313938323638392d373964653631663633386436656634622d35366231396563336663653236373239 error +34363537353638353738373836662d353036636263642d3639372d36356435383930333233363837652d3439656633393336636131 error +34363537353638353738373836662d353036636263642d3639372d36356435383930333233363837652d343965663339d9a136636131 error +316365323438643833323964362d33322d3638306538376133626530393539632d34616232632d353636343032 error +316365323432643833323964362d33322d3638306538376133626530393539632d34616232632d353636343032 error +333939643665656633333366343762312d31616566623330342d3564303030613634392d34613633373937643763313933322d32 error +333939643665656633333366343762312d31386566623330342d3564303030613634392d34613633373937643763313933322d32 error +342d3131623534392d376232313263303037623139333833642d372d3733633839366264333037 error +342d3131623534392d376232314463303037623139333833642d372d3733633839366264333037 error +37392d3133656331303934612d3763666636623136612d373039616338376163656435312d366338636461343237646566 error +37392d3133656331303934612d3763666636623136612d373039616338376163656735312d366338636461343237646566 error +312d336235383933636366346666623938392d312d3538376231343830376333383664352d32313636323234313631333566 error +312d336235383933636366346666623938392d312d3538376231343830376233383664352d32313636323234313631333566 error +372d3531652d333433393638323262306564366633372d3633372d3534366434343564 00000007051e6f3706370000546d445d +372d3531652d333433393638323262306564366631372d3633372d3534366434343564 00000007051e6f1706370000546d445d +366635633562362d373038303366333436303638663466362d32386530336334612d31652d3532323834643237353063 error +366635633562362d373038303366333436303638663466efbca12d32386530336334612d31652d3532323834643237353063 error +3735386235313963346465362d35373133373263376430652d3339643539613532666461322d3630396535393033383064642d316165 error +3435386235313963346465362d35373133373263376430652d3339643539613532666461322d3630396535393033383064642d316165 error +31346462386565303132332d363936323039386430336237642d3464383931613331346435612d31356537353636633962653430352d326636 error +31346462386565303132332d363936323039386430336237642d3464383931613331343335612d31356537353636633962653430352d326636 error +356566392d33353530373238342d3461636637313933326336396638352d31613639652d316337 error +356566392d3335353037efbca138342d3461636637313933326336396638352d31613639652d316337 error +3762342d3335643737386164366538322d313933323437312d346664332d323265 000007b46e8224714fd300000000022e +3762342d3335643737386164366538322d313933323437312d346666332d323265 000007b46e8224714ff300000000022e +3366626432392d3330643139643439383632322d353438352d32346537643833336461646238362d32 error +3366626432392d3330613139643439383632322d353438352d32346537643833336461646238362d32 error +33302d31633362666638312d376436662d32343565646336663434393531312d313031 00000030ff817d6f9511000000000101 +33302d31633362666638312d376436662d32343565646336663439393531312d313031 00000030ff817d6f9511000000000101 +3536393535362d313664342d37633932622d3238376636392d35316131636466 0056955616d4c92b7f690000051a1cdf +3536393535362d313664342d37633932622d3238373036392d35316131636466 0056955616d4c92b70690000051a1cdf +3231653530613730663534312d3365392d366434326161373532633133303034362d32393735663039386330376631332d366265336238303237393137 error +3231653530613730663534312d3365392d366434326161373532633133303034362d32393735663039386330456631332d366265336238303237393137 error +366435643339366263386166312d3431343031373635646564616366322d346434353465333738662d31343632353438336365366536302d3438393134633035326334663631 error +366435643339366263386166312d3431343031373635646564616366322d346434353465333738662d31343632353438336365316536302d3438393134633035326334663631 error +326631623764643436632d33323564356130336430386136382d3134396532613761312d3234303766313532313265303039632d643632 error +326631623764643436632d33323564356130336430386136382d3134396532613761312d3234303766313532313265303062632d643632 error +3335393135392d33306130313566393561652d35303430616438323161663633392d333935302d39663736663636646662623636 error +3335393135392d33306130313566393561652d35303430616438323161663633392d333935302d39663736666736646662623636 error +3332346632313536372d33643732652d336430623962656332396364353831322d3733383835322d346561663332393232 error +3332346632313536373633643732652d336430623962656332396364353831322d3733383835322d346561663332393232 error +363963616333333635623965616536322d3533653431333836652d32363462632d352d33366530363237363932303964366238 error +363963616333333635623965616536322d3533653431333836652d20363462632d352d33366530363237363932303964366238 error +33643833333861322d32343562323139373762663962312d353033652d3663633137343861303632646637352d373135346633333534386132 error +33643833333861322d323435623231393737626639623137353033652d3663633137343861303632646637352d373135346633333534386132 error +346636356535313365393464332d343331623933366665383739372d3563363465342d3363316637386363343831622d353134 error +346636356535313365393464332d343331623933366665383739372d3563363465342d3363316637386363346131622d353134 error +3339636135386465313262633563362d6462343730612d3335322d36373566643139383663356165322d3639 error +3339636135646465313262633563362d6462343730612d3335322d36373566643139383663356165322d3639 error +3164313337362d3331342d312d66382d36 001d13760314000100f8000000000006 +31c2b2313337362d3331342d312d66382d36 error +343130302d322d363738613162383637383438652d36353966613261356266652d36333539333434666365 error +343130652d322d363738613162383637383438652d36353966613261356266652d36333539333434666365 error +346133323430662d363363313366323066353830622d353136383235363964656165633634322d323164383031386338346364353435312d35343530363364316361346635 error +346133323430662d363363313366323066353830622d353136383235363964656165633634322d2d3164383031386338346364353435312d35343530363364316361346635 error +352d3437313266363964322d3265326631313035623839392d33666638332d3731623865353361 error +352d343731326636396432673265326631313035623839392d33666638332d3731623865353361 error +3531646261352d366266653230616430333332336332312d363464612d352d3261633265 0051dba53c2164da000500000002ac2e +3531c2b26261352d366266653230616430333332336332312d363464612d352d3261633265 error +3135353537386234612d31373137653662622d313663662d333662643435302d613964633330613336666666316463 error +3135353537386234612d31373137653662622d313663662d333662644235302d613964633330613336666666316463 error +3130623366636239643763663934312d3764363331383863616235312d34613132646136633163622d376439306162373230363336342d34373937663261 error +3130623366636239643763663934312d3764363331383863616235312d34613132646145633163622d376439306162373230363336342d34373937663261 error +35323133393036612d3539363935653661656261362d366562653539333532616631336231612d313634383533396637392d3362396632386261 error +35323133393036612d3539363935653661656261362d366562653539333532616631336231612d313634383533396637392d3362396632386261 error +3137622d323337633030363164312d65366131352d326266322d333533336137656234646436646661 error +3137622d323337633030363164313865366131352d326266322d333533336137656234646436646661 error +3761352d333261353265342d373332393131633631642d3538323562636337323265362d356237653730643765663638623061 error +3761352d333261353265342d373332393131633631642d353832356263633732322d362d356237653730643765663638623061 error +3534323861316632333936392d376638652d3466306137643137326165646363632d3237383336613530663535663735352d353630613232613335313238 error +3534373861316632333936392d376638652d3466306137643137326165646363632d3237383336613530663535663735352d353630613232613335313238 error +33333963362d3730396131356632303030396664332d3137306331386461393139306131362d316532652d376630666662663037336333 error +33333963362d3730396131356632303030396664422d3137306331386461393139306131362d316532652d376630666662663037336333 error +32336462306536642d356431323536383161396631313266312d3161366634326233643261333162652d366338323630363061366465642d363965376238 error +32336462306536642d356431323536383161396631313266312d3161366634326233453261333162652d366338323630363061366465642d363965376238 error +3939666634613932653736332d34392d32612d3534633339643034653461313765332d323466 error +3939666634613932653736332d34392d32612d3534633039643034653461313765332d323466 error +36383837382d32356665626336363265332d3637322d3134633839396437646335313031352d3136656431663239 error +36383837382d32356665626336303265332d3637322d3134633839396437646335313031352d3136656431663239 error +366264343432333233642d34383664626162303064322d32343233633765323234313031342d31332d353165306335666365 error +366264343432333233642d34383664626162303064326232343233633765323234313031342d31332d353165306335666365 error +352d363634343463366337366134362d33326362663639312d363339362d34373964 000000056a46f691639600000000479d +352d363634343463366337366134362d33416362663639312d363339362d34373964 000000056a46f691639600000000479d +3362336263666133323961652d3735372d3265333134332d32636461632d34636337623661353138313063343466 error +3362336263666133323961652d3735e285a32d3265333134332d32636461632d34636337623661353138313063343466 error +353164663061343332636562302d39613734622d31663232376236382d37326331322d36386630396362636132333433643765 error +353164663061343332636562302d39613734622d31663232376230382d37326331322d36386630396362636132333433643765 error +39633266313237302d6131302d323565626636362d3537643964623362366535326536612d313134623265 error +39633266313237302d6131302d32356562663636efbc913537643964623362366535326536612d313134623265 error +343532633866333431353433393834642d31373963646262323137392d373862302d373838312d34663438353266 error +3435326338663334313534efbca1393834642d31373963646262323137392d373862302d373838312d34663438353266 error +39372d356439383435353236323864313830652d342d37666534343532363165373164622d343435326231663362636233666361 error +39372d356439383435353236323864313830652d342d3766e285a334343532363165373164622d343435326231663362636233666361 error +336363616635343034302d37613764362d332d343236643262356436392d3130386161303066636232 error +336363616635343034302d37613734362d332d343236643262356436392d3130386161303066636232 error +3464396435372d3564353132343739302d34366361362d36376539362d3561666630663766 error +3464396435372d3564353132343739302d34366361362d36376539362d356166663066efbca166 error +3161622d313930372d373762662d3533626231663136623730383235622d36373465376665356431 error +31612d2d313930372d373762662d3533626231663136623730383235622d36373465376665356431 error +3230382d323266646663612d3736646664393839636337666338332d363465353365363233306566653230642d36333066 error +3230382d323266646645612d3736646664393839636337666338332d363465353365363233306566653230642d36333066 error +373465376462323263313937633832352d3232312d33613032342d31382d3230 c197c8250221a0240018000000000020 +373465376462323263313937633832352d3232312d33613032343231382d3230 error +3738372d3464666331302d342d363661396232663336636262372d3362343164323738 00000787fc100004cbb700003b41d278 +3738372d346466f09d9f9931302d342d363661396232663336636262372d3362343164323738 error +34323038316262313265313865632d372d3137663038643839312d3331306439343136623463332d31366339326235376163383564 error +33323038316262313265313865632d372d3137663038643839312d3331306439343136623463332d31366339326235376163383564 error +32663031652d3765663239343038356431313034332d3234663462643162633032333666372d3239643165312d33336136 error +32663031652d6165663239343038356431313034332d3234663462643162633032333666372d3239643165312d33336136 error +3762372d3639632d3337666165652d352d34666630643536363163313730 000007b7069cfaee0005ff0d5661c170 +3762372d3639632d3337306165652d352d34666630643536363163313730 000007b7069c0aee0005ff0d5661c170 +356166382d336362662d33306437326530396234333435332d32376338323934622d31306438323364316231653765 error +356166382d336362662d333064373265303962d9a1333435332d32376338323934622d31306438323364316231653765 error +35646561303134332d3532316331393934333461636461382d3435336231396564333962623238302d3539346434332d33393763353963613062316137 error +35646561303134332d3532316331393934333461636461382d3435336231396564333962623238302d0939346434332d33393763353963613062316137 error +32352d33663232372d336166612d31392d643566 00000025f2273afa0019000000000d5f +32092d33663232372d336166612d31392d643566 error +363337616133383062632d32373438616563622d31632d3166313131362d37376661333939 error +363337616133383062632d39373438616563622d31632d3166313131362d37376661333939 error +3137612d3361373137322d3635313935632d3232306536646663386338352d34316135313938326634383236353531 error +3137612d3361373132322d3635313935632d3232306536646663386338352d34316135313938326634383236353531 error +333364653638382d326566373661332d37612d323539346430656535662d3266333765363033303533666535 error +333364653638382d326566373661332d37612d323539346430656535662d32663337c2b2363033303533666535 error +336334363931636333352d31356236642d376666332d31623064323637383734622d613930326131643762323366 error +336334363931632b33352d31356236642d376666332d31623064323637383734622d613930326131643762323366 error +31312d313935642d316532303461352d31323063353532636265322d366433626261346531 error +31312d313935642d316532303461352d31323063353532636265322d366433626264346531 error +36326431352d34373463642d3334613039646234346665382d313039613966633264663836313635312d376466633335323232 error +36324331352d34373463642d3334613039646234346665382d313039613966633264663836313635312d376466633335323232 error +3765622d3638376532652d323336382d32613336393262623535613364372d3739366164343332 error +3765622d3638376532652d323336382d32613336093262623535613364372d3739366164343332 error +376263643330392d37323037623030352d316334362d32613064313231613330383631302d3633 error +376263643330392d37323037623030352d316334362d32613064313231613330333631302d3633 error +6166346137616334662d31333930636364303133622d3362326364393966386136386337302d336630646139396661313334653636312d353233623865363261666238626665 error +6166346137616334662d31333930636364303133622d3362326364393966384536386337302d336630646139396661313334653636312d353233623865363261666238626665 error +336664666635663463363763316138642d3135336530333061382d3337626335613630332d34376133326533346632332d36 error +336664666635663463363763316138642d3135336530333061382d3337626335613630332d34376133c2b26533346632332d36 error +373131663939392d333636622d36353862663065372d376536383063646238656363653565612d3739316162 error +373131663931392d333636622d36353862663065372d376536383063646238656363653565612d3739316162 error +353231346362313534313338652d316338363130632d3663643965332d32376530643661333333662d35626238393338666234616230656636 error +353231346362313534313338652d316338363130632d3663643965332d32376530643661333333662d35626238393338666234616230c2b26636 error +323837643665616366376634316430302d3364332d34366539653032393661616562652d366663356164613939613864393338382d3539373839326530656134 error +323837643665616366376634316430302d3364332d34366539653032393661616562652d366663356164613939613864393138382d3539373839326530656134 error +316561343462342d3237632d332d33306633353066336463652d36 01ea44b4027c00033dce000000000006 +316561343462342d3237632d332d33306633353066332b63652d36 error +353734343866612d64396537666132653735643165342d35616137342d66336138342d363336653335356231 error +353734340966612d64396537666132653735643165342d35616137342d66336138342d363336653335356231 error +33663932332d34616463396262626230622d3439642d333566643034343037663235342d3438303339363735643637646336 error +33663932332d34616463396262626230622d3439642d333566643034343037663235672d3438303339363735643637646336 error +342d323162653032386163362d32376331663834663038663731632d312d326166626331386436626632636135 error +342d323162653032416163362d32376331663834663038663731632d312d326166626331386436626632636135 error +32613435363835643238612d336364663165352d37613238622d32393936636364643734652d623532306133 error +32613435363835643238612d336364673165352d37613238622d32393936636364643734652d623532306133 error +316266653430622d373235363436363630636137383739652d37656235362d31352d3334 01bfe40b879eeb560015000000000034 +316266653430622d373235363436363630636137383739652d37656235362d31352d4334 01bfe40b879eeb5600150000000000c4 +333762336165623939632d313466632d34613462313239612d323631383939646666666362362d376539343931366632613363623138 error +333762336165c2b23939632d313466632d34613462313239612d323631383939646666666362362d376539343931366632613363623138 error +3433626164302d3630376131643835386165626131612d3361323331663837353135662d3261666131616135316366393361382d35386334643466633066 error +3433626164302d3630376131643835386165626131612d3361323331663837353135662d3220666131616135316366393361382d35386334643466633066 error +35636335613031382d323836656465666237662d37666133366165343139362d333937353034376266633030343764652d31343364316362323236333462303832 error +35636335613031382d323836656465666237662d37666133366165343139362d333937353034376266633030313764652d31343364316362323236333462303832 error +37383132383939396637362d3238393839613332393238622d37382d366135356365312d32373664343234656666 error +37383132383939396637362d3238393839613332393238622d37382d366134356365312d32373664343234656666 error +3236326233332d33633163333838363531312d313465636339622d31392d363862373939626334636239 error +3236326233332d33633163333838363531312d313465636339622d31392d363862373939626334636239 error +3365333338636537652d3735623339333339322d353335353131612d643364333430386162622d3635326666 error +3365333338636537652d3735623339333339322d353335353131612d643364333430c2b26162622d3635326666 error +3130642d323732613631323336313939332d32646539643431343861662d356263306638636330613239622d313566636263633965336532646237 error +3130642d323732613631323336313939332d32646539643431343861662d356263306638636330613239efbca12d313566636263633965336532646237 error +3533303861633061366133353666362d3234663161372d372d376538343837653738356533362d623935633663353930643333636138 error +3533303861633061366133353666362d3234663161372d372d376538343837653738356533362d623945633663353930643333636138 error +352d33642d333665616339356437642d35343963396438656262636665302d3531646165613231356162 error +352d33642d333665616339356437642d35343963396438656262636665302d3531646265613231356162 error +376234312d373762346433662d3337363037316462322d3535663934376631363332362d33346437316362303661663936383461 error +376234312d373762346433662d3337363037316462322d3535663934376631363332362d33346437314562303661663936383461 error +32323965623361323836312d323462363865373365382d3562366133622d326262666263363865383665372d3337656132363034 error +32323965623361323836312d323462363865373365382d2d62366133622d326262666263363865383665372d3337656132363034 error +343930363264632d32342d32342d356430613239372d376133646164373061323563 049062dc00240024a2977a3dad70a25c +343930363264633232342d32342d356430613239372d376133646164373061323563 error +33623638303237652d333939392d31642d322d3632 3b68027e3999001d0002000000000062 +3362363830322d652d333939392d31642d322d3632 error +32613731653565622d6135346635633832616231622d32656637323739322d363463636233372d376635623832 error +32613731653565622d6135346635633832616231622d32656637323739322d363463636233372d376635463832 error +3965646331323632633266372d3535643330633239373632366663352d323434633436632d323930363435386233663763313435612d3166636632353539646237616362 error +3965646331323632633266372d3535643330633239373632366663352d323434633436632d323930363435656233663763313435612d3166636632353539646237616362 error +3562623238343637643261352d362d37322d37373364336432352d3330646133333735373831646238 error +3562623238343637643261352d362d37322d37373364336432352d3330644133333735373831646238 error +3662633433662d333462666538306438332d37396162303162383738332d31353563302d323666306465313234 error +3662633433662d333462666538306438332d37396162303162383738332d31353563302d323666306465313234 error +36353863323239376664316433642d3363353361616134652d343937362d336338363033633364646630393539622d32383039 error +36353863323239376664316433642d3363353361616134652d343937362d326338363033633364646630393539622d32383039 error +313538352d3666353036616332623665613235392d34376436362d31356536642d34343461313338 error +313538352d3666353036616332623665613235392d34376442362d31356536642d34343461313338 error +356631633632656264302d35642d3536613232333737393130663966312d343037363063302d32 error +356631633632656264302d35642d3536613232333737393130663966312d343037363063302d62 error +65386136652d3665333835623831353665326133392d3535343661393665312d352d3363633964363037373037 error +65386136652d3665333835623831353665326133c2b22d3535343661393665312d352d3363633964363037373037 error +333638383432332d322d3563352d37653364642d3734643932666563383465 03688423000205c5e3dd074d92fec84e +333638383432332b322d3563352d37653364642d3734643932666563383465 error +37363061303535623831383932372d313833363336623264396634373738342d352d322d37393533 error +37363061303535623831383932372d313835363336623264396634373738342d352d322d37393533 error +31632d3237646334376134646563313036642d3239336635303564333566662d3362392d31 error +31632d3237646334376134646563313036642d3239336635303564453566662d3362392d31 error +36633337352d316363386632662d3737303237313163373639342d33313330332d3539383232633330 error +36633337352d316363396632662d3737303237313163373639342d33313330332d3539383232633330 error +3165373864633461636131382d3438383036333431303834652d33376438396330643135642d32363864616633376265376438382d3630333031 error +3165373864633461636131382d3438383036333431303834652d33376438396330643135642d323638642b6633376265376438382d3630333031 error +373038312d33616536662d326536632d3765356131352d3463663736393036373531 00007081ae6f2e6c5a1504cf76906751 +37303831efbca133616536662d326536632d3765356131352d3463663736393036373531 error +3231372d312d333735382d626132342d3661383664313662363961 0000021700013758ba2406a86d16b69a +3235372d312d333735382d626132342d3661383664313662363961 0000025700013758ba2406a86d16b69a +333337613734622d3734372d372d3734623862343061356261356264642d316530323061 0337a74b074700075bdd0000001e020a +333337613734622d3734372d372d3734624662343061356261356264642d316530323061 0337a74b074700075bdd0000001e020a +37366336646234343561313637352d3637662d3330613161396166623239302d32373936316533622d34343763 error +3736633664623434356131363735313637662d3330613161396166623239302d32373936316533622d34343763 error +373731303966626233646435323436622d32393137643066373064356237652d313162613465632d37303664322d37363533376632353736383362333964 error +373731303966626233646435323436622d32393137643066373064356237652d313162613465632d37303664322d37363533376632353736383362334464 error +3166303963643337622d3631646638373666353361312d32393633613137656634373234342d3364393463623133333261382d363837323365663931 error +3166303963643337622d3631646638373666353361312d32393633613137656634373234342d3364393463623133333261382d363837323364663931 error +31373337353662386562333532612d3633313164353230332d31613863363131636236333430342d356361326465632d656236323636663266613566633734 error +31373337353662386562333532612d3633313164353230332d31613863363131636236333430342d356361326465632d656236323636663266613566463734 error +31333439343738382d32623336326630326139372d6139353063386166363531396435662d343431363365636162353035303431622d6233643637393333616437 error +31333439343738382d36623336326630326139372d6139353063386166363531396435662d343431363365636162353035303431622d6233643637393333616437 error +37666434633531613766642d3165313465386164306466633239392d36312d36623835366439636664642d3336 error +37666434633531613766642d316531efbca165386164306466633239392d36312d36623835366439636664642d3336 error +312d34633037386130316537376133642d3739303137612d35383161352d353734646434 000000017a3d017a81a5000000574dd4 +312d34633037386130316537376133e285a32d3739303137612d35383161352d353734646434 error +3334303434386630362d3539662d3635616466383162322d32316334613339383737322d323335 error +3334303434384130362d3539662d3635616466383162322d32316334613339383737322d323335 error +3237352d3637323032363839356632343666332d326635356636376330353433652d35383437302d3361 error +3237352d3637323032363839356632343666672d326635356636376330353433652d35383437302d3361 error +3134366636373838363063632d313633613736613135633166323632652d312d3432613830333332333635653833612d33666134326239313664 error +3136366636373838363063632d313633613736613135633166323632652d312d3432613830333332333635653833612d33666134326239313664 error +323864633438326137346633652d32612d3231626330382d353330303565666264332d3562336134343239 error +323864633462326137346633652d32612d3231626330382d353330303565666264332d3562336134343239 error +3630306563326462366139372d346366323738303663622d362d35626330643837636462642d3537 error +3630306563326462366139372d346366323738303663622d362d35626330643837636462642d6237 error +3139633231646231383761302d3334373565333235313938312d3730373336633137342d35326334636165303036663031332d6230633639653034323039 error +3139633231646231383761302d3334373565333209313938312d3730373336633137342d35326334636165303036663031332d6230633639653034323039 error +323363636361323566313465372d353265653432336336653235323436302d3166613737643834312d33303965313835372d3134323538 error +323363636361323566313465372d353265653432336336653235323436302d3166613737643834312d33303965313835372d3134323565 error +322d33383134616239633538332d3761323130313535316632666532332d3765646534652d3566353364356532 error +322d33386534616239633538332d3761323130313535316632666532332d3765646534652d3566353364356532 error +3338396136643766312d37633136626333363763632d362d333830382d3761643831663035346635 error +3338396136643736312d37633136626333363763632d362d333830382d3761643831663035346635 error +346535646438653366652d31622d373664646264663562663636316138642d333463613037642d3135313962303232363662 error +426535646438653366652d31622d373664646264663562663636316138642d333463613037642d3135313962303232363662 error +362d363666633131346464363162652d33652d316638626536376663383735326433622d35323761 error +362d353666633131346464363162652d33652d316638626536376663383735326433622d35323761 error +316335646232326533652d3230343663376363632d3561376366303831653261312d36643233353166302d36636265616464353331383536666464 error +316335646232326533652d3230e285a33663376363632d3561376366303831653261312d36643233353166302d36636265616464353331383536666464 error +3636336565642d323564623630352d37373464642d373236336536342d376236373331326631 error +3636336565642d323564623630352d64373464642d373236336536342d376236373331326631 error +38376235352d392d3837372d356239656230332d3430636361616134 00087b5500090877eb03000040ccaaa4 +38376235352d392d3837372d356239656230092d3430636361616134 error +352d37332d333737303663322d3562333331353164652d356534 00000005007306c251de0000000005e4 +352d37332d333737303663322d35623333f09d9f99353164652d356534 error +36663164346666392d36642d34653433332d362d3634373839 6f1d4ff9006de4330006000000064789 +36e285a33164346666392d36642d34653433332d362d3634373839 error +626137352d3737612d312d3866342d37 0000ba75077a000108f4000000000007 +6261c2b2352d3737612d312d3866342d37 error +37656166393662663035652d323237633635326338653365362d3535636531356438322d3466392d36353431 error +37656166393662663035652d323237633635326338653365362d3535636531356438382d3466392d36353431 error +322d32363631346231313664303636652d346239326363332d3239343430376239626639393430302d3232313034313162316431 error +322d32363631346231313664303636652d346239326363332d3239346730376239626639393430302d3232313034313162316431 error +3830336233642d323934353538656163383334333937382d35666634656662393239362d32356632632d3335353631 error +3830336233642d323934353538656163383334333937382d35666634656662393239362d32356632632d332d353631 error +34656433652d36356264653433306231612d3432626634352d34352d376262393564326233633762343266 error +34656433652d36356264653433306231612d3432626634352d34352d376233393564326233633762343266 error +3439323837333962372d326261333338386537382d33343630312d336465373430386131352d356265323637613963613439613330 error +3439323837333962efbca12d326261333338386537382d33343630312d336465373430386131352d356265323637613963613439613330 error +313730306463666166326438666665352d362d35646461353464362d3534336165643435623734622d31613862343834 error +313730306463666166326438666665352d362d35646461353464362d3534336165643435623734622d31613862343834 error +33646461633139613131633234652d33646662646365626431633235392d326334656231362d346430663137646538633135663563632d356563646534 error +33646461633139613131633234652d3364666264632d626431633235392d326334656231362d346430663137646538633135663563632d356563646534 error +3736626130656332316166372d372d3737343936346261323633322d36366335623534613733662d3238303736 error +373662613065633231612d372d372d3737343936346261323633322d36366335623534613733662d3238303736 error +3365642d3338386535663639613861346237322d342d3561623263376633372d353063663663653233 error +3365642d3338386535663667613861346237322d342d3561623263376633372d353063663663653233 error +32352d3463333964306632316139616434352d3161642d356632613462312d39343133663430633338636434 error +32352d3463333964306632316139646434352d3161642d356632613462312d39343133663430633338636434 error +3363343939372d312d352d373365393733643331356238372d34613437336662383464 003c4997000100055b87004a473fb84d +3363343939372d312d352d373365393733643331356238372d34613437336662383420 error +36303361362d313161396231656565643639642d313639392d373232613862666266313431302d3261653035336336 error +36303361362d313161396231656565643639642d313662392d373232613862666266313431302d3261653035336336 error +3837356230653266623034613333632d37336662373064652d313331353935302d3161336330326438312d3362343232653663 error +3837356230653238623034613333632d37336662373064652d313331353935302d3161336330326438312d3362343232653663 error +34623334386134336662352d3239323863653537306561652d36352d33382d33 48a43fb50eae00650038000000000003 +64623334386134336662352d3239323863653537306561652d36352d33382d33 48a43fb50eae00650038000000000003 +352d33306461373537362d3531646539396363663766636164372d3564366462362d3363 000000057576cad76db600000000003c +352d33306461373537362d3531646539396363663766636164372d3564366433362d3363 000000057576cad76d3600000000003c +316534353533616562392d352d376637396335616236333530332d33632d39373432633834373164 error +316534353533616562392d352d376637396335616236333530332d33632d39373432633834643164 error +6562333861352d33332d376339613539613662333465662d336536382d31386438343436393631666361333731 error +6562333861352d33332d376339613539613666333465662d336536382d31386438343436393631666361333731 error +35653033616434362d342d343163636233622d3734343338352d366666 5e03ad460004cb3b43850000000006ff +35653033616439362d342d343163636233622d3734343338352d366666 5e03ad960004cb3b43850000000006ff +333761343137663830343263623161332d34353733613734356531632d356331633631322d32313765373831383835613734342d32623362633665386661323739336534 error +333761343137663830343263623161332d34353733613734356531302d356331633631322d32313765373831383835613734342d32623362633665386661323739336534 error +34646561313930363531616363642d36393939613636356235342d363037642d36333230622d34343137 error +34646561313930363531616363642d36393939613636efbca16235342d363037642d36333230622d34343137 error +39653365393261386431353835372d33666132392d356566336164653330626432366465332d3137353138342d33623932 error +39653365393261386431353835322d33666132392d356566336164653330626432366465332d3137353138342d33623932 error +346638366331373335396135666162342d323630396237633262303062302d31343439392d342d37373962 error +346638366331373335396135666162342d323630396237633262303062302d31340939392d342d37373962 error +363061393438322d393936313633373332623263642d32323465303436392d35613165353264633939613731342d3761303165643037 error +363061393438322d393936313633373332623263642d32323465303436392d356131653532646339f09d9f99613731342d3761303165643037 error +32303336343466632d34336530343562653065622d3430663638393234302d3264383233622d3730323763653135 error +32303336343466632d34336530343562653065622d3430663638394334302d3264383233622d3730323763653135 error +3638363930313065626238652d366133332d37633461333036662d35356431363838352d35616530613533323265 error +3638363930313065626238652d366133332d37633461333036662d35356431363838352d35616530614333323265 error +353666373762323334652d3539393163326537616335362d363831642d333334346338633266613766333035342d343638 error +353666373762326334652d3539393163326537616335362d363831642d333334346338633266613766333035342d343638 error +6133353765622d64623837376534312d34653861622d3339392d35633831636438643364323362663262 error +3533353765622d64623837376534312d34653861622d3339392d35633831636438643364323362663262 error +376437353464613536382d32662d34316230386531336661653861612d36333334332d3864353739626438356339 error +376437353464613536382d32662d34316230386531336661333861612d36333334332d3864353739626438356339 error +336434643566393766302d36326635662d313737372d3637663262373965613761653062382d336639626563613030 error +336434643566393766302d36326635662d313737382d3637663262373965613761653062382d336639626563613030 error +36363935662d363463336339383138336134662d313038343364396639323964326265382d376366343137323435623039393638322d32653265623834 error +36363935662d363463336339384138336134662d313038343364396639323964326265382d376366343137323435623039393638322d32653265623834 error +346331343233642d343535313233662d3237356439383637623536372d32383165302d3733376464333935 error +346331343233642d343535313233662d3837356439383637623536372d32383165302d3733376464333935 error +353764323562393231626337322d363237353033332d3535663932646430652d343861363262636137363036646266342d3438333933633165623933 error +353764443562393231626337322d363237353033332d3535663932646430652d343861363262636137363036646266342d3438333933633165623933 error +323531302d3666333436656334613238342d3462643634613535633865383063302d363163656539633431322d32 error +323532302d3666333436656334613238342d3462643634613535633865383063302d363163656539633431322d32 error +326335333832663962393465352d62353134653466352d33326465363638303062336131632d3333613030366134393936342d336636643732316561323239 error +326335333832663962393465352d62356434653466352d33326465363638303062336131632d3333613030366134393936342d336636643732316561323239 error +313039633132623137656261353234392d352d3131323431316134393064642d37363537312d65353733366434313737 error +313039633132623137656261353234392d352d313132343131613439306464c2b237363537312d65353733366434313737 error +3332643138376438663965313562312d37363331393664316162642d36663732322d37613462313561302d386362306463393461 error +3332643138376438663965313562092d37363331393664316162642d36663732322d37613462313561302d386362306463393461 error +37326664353063352d3433623831386430352d3461636661306466362d3730323465372d356264363563306534 error +37326664353063352d3433623831386430352d3461636661303766362d3730323465372d356264363563306534 error +3132373138636366612d3661322d36622d332d3433373839303134 2718ccfa06a2006b0003000043789014 +313237313863632b612d3661322d36622d332d3433373839303134 error +343438326439383666642d343464643936306531612d3230396533616536343534656536662d33373963373161372d346362393733326437 error +343438326439383666642d343464643936306531612d3230396533616536343534656536662d33373963373161372d346362393733326461 error +34316365356135393630302d37342d3665363663633434393364622d3239373331392d36313066636661303635643236363639 error +34316365356135393630302d37342d3665363663633434393364622d3239373331392d36313066636661303635642036363639 error +363061333531633535616562612d336632642d33343135312d312d323332 1c55aeba3f2d41510001000000000232 +363061333531383535616562612d336632642d33343135312d312d323332 1855aeba3f2d41510001000000000232 +32353035323130626438372d363831613939372d36623435666466382d343538646261643335643539372d3765323262 error +32353035323130626438372d363831613939372d36623435666466382d413538646261643335643539372d3765323262 error +61373464362d313237396138396463663438393631382d31623866326463383865342d363461622d353262383139 error +61373464362d313237396138396463663438393631382d31623866326463383865342d363461622d353262353139 error +3764652d36623739316665326164642d363339363736662d3638343138646165393361636235312d3731303663 error +3764652d36623739316665326164642d363339363736662d3638343138336165393361636235312d3731303663 error +373238343535343331382d37316134336336302d366433306638646361352d363539323335643435623930646435612d35313135616133326561623561636537 error +373238343535343331382d37316134336336302d366433306638646361352d363539323335643435623930646435612d353131d9a1616133326561623561636537 error +37616133393739652d353238353863393738623736382d323864363437313136642d322d37393837383963 error +3761613339373965e285a3353238353863393738623736382d323864363437313136642d322d37393837383963 error +363463653036353635313663632d37356561663138343134372d3765306138313737353164383730352d32373233653834643964613633302d3666333238 error +363463653036353635313663632d37356561663138343134372d3765306138313737353164383730352d32373233203834643964613633302d3666333238 error +32622d3364342d31656235663737363665663233392d33383039653132322d32346565 0000002b03d4f239e1220000000024ee +32622d33d9a1342d31656235663737363665663233392d33383039653132322d32346565 0000002b0314f239e1220000000024ee +353366313831376137386534622d3731642d3136616133393934353938333631642d3464392d3231303439656162 error +353366313831376137386534622d3731642d313661613339393435393833363164303464392d3231303439656162 error +333333386566626461332d3433332d3230646139353830612d316331643035343162316234346135662d34373832663239633563 error +333333386566626461332d3433332d3230646139353830612d316331643035343162316234346135662d34373332663239633563 error +31653663393735633731363331302d373365636437662d3265626636313963392d35396262373630392d3663 error +31653663393735633731363331302d373365636437662d3265626636313963392d35396262373630392d3664 error +373763626236332d622d323734326536332d373530622d37 077cbb63000b2e63750b000000000007 +373763626236332d622d3237342d6536332d373530622d37 error +34376233393431312d356662332d372d346439636162392d366461373730393061 47b394115fb30007cab90006da77090a +34376233393431312d356662332d372d346439636162392d366461374530393061 47b394115fb30007cab90006da7e090a +36363635636139323035633566632d3762333736342d33303935372d3432396663343439306537656361632d333133 error +36363635636139323035633566632d3762333736342d33303935372d3432436663343439306537656361632d333133 error +6130373936653232663238376662332d316633323435343133656336353739632d37393738663439666634652d353534633365382d346136373630633566353632343933 error +6130373936653232663238376662332d316633323435343133656336353739632d37393738663439666234652d353534633365382d346136373630633566353632343933 error +3532636562392d31346365323664392d343934392d342d32356364316265 0052ceb926d9494900040000025cd1be +3532636562392d31346365323664392d343962392d342d32356364316265 0052ceb926d949b900040000025cd1be +3165616339373136613438373865622d37332d316132333236363265623462312d36312d3365346362613535363231383263 error +3165616339373136613438373865622d37332d316132333236363265623462312d36312d3365346362612d35363231383263 error +366430353730313635382d372d36376464316165302d6261396238332d31663761 0570165800071ae09b83000000001f7a +366430353730313035382d372d36376464316165302d6261396238332d31663761 0570105800071ae09b83000000001f7a +3532663934616639663237336438352d3162622d32302d642d33333431 9f273d8501bb0020000d000000003341 +3532663934616639666437336438352d3162622d32302d642d33333431 9fd73d8501bb0020000d000000003341 +356130363534363533636665392d372d35323235633739342d3564392d383462313230356465613963 error +356130363534366233636665392d372d35323235633739342d3564392d383462313230356465613963 error +353036386335323966372d37302d33643730626266642d343962626461663530322d3766363734 error +353036386335323966372d37302d33643730626266642d343962626461663530322b3766363734 error +366465323832332d62653936626533333638322d3136666532312d37333837323534353861352d36616666353162383532 error +366465323832332d62653936626533333638322d3136666532312d37333837323534353861352d36616666353141383532 error +34343436306465323838302d35346133396164643331652d3164312d383661663930376534336232352d37 error +34343436306465323838302d35346142396164643331652d3164312d383661663930376534336232352d37 error +35336665382d376333356262343737392d333835666436646263326465652d362d333439386163 error +35336665382d376333356262343737392d333835666436646263326465652d362d333439384563 error +323663663930663962362d31306537632d64666431323464342d37332d33366465633133306537 error +323663663930663962362d313065372d2d64666431323464342d37332d33366465633133306537 error +37653662343234316430353536642d386235632d372d35652d323466 41d0556d8b5c0007005e00000000024f +376536623432343164303535366435386235632d372d35652d323466 error +363031356265392d3461363439613034382d6264396163632d323835626638343630333830316365342d3632643166626333636638326339 error +366231356265392d3461363439613034382d6264396163632d323835626638343630333830316365342d3632643166626333636638326339 error +33662d3733363735312d3566613337332d35633366342d313062356139353334333737 0000003f6751a373c3f410b5a9534377 +33662d3733363735312d3564613337332d35633366342d313062356139353334333737 0000003f6751a373c3f410b5a9534377 +373531353033663437356437393065312d35652d3235356137312d33393037306539643038302d33 error +373531353033663437356437393065312d35652d3235356137312d33393037f09d9f996539643038302d33 error +3233613438633763333266653434332d316262653434323533302d332d3233392d31646534663466326562 error +3233613438633763333266653434332d316262653434323533302d332d3233392d3164c2b234663466326562 error +3763313731612d3363323963366532633837622d35323264382d3133663236633037356436633934332d313532 error +3763313731612d3363323963366532633844622d35323264382d3133663236633037356436633934332d313532 error +35633432376335393230332d35623139313931662d343466666439373137636463642d31626631323663623937322d346332313164333032373734646364 error +35633432376335393230332d35623139313931662d343466666439373137636463642d31626631323663623937322d376332313164333032373734646364 error +356565653833393138342d313537612d34642d3235353662323239343939312d313230396132 error +356565653833393138342d313537612d34642d3235353662323239343939312d313230392032 error +31372d313138663939613932613639656136302d36396430386366612d373863326133396631616566376239662d366263376163 error +31372d313138663939613932613639656136302d36396430386366612d37386332efbc9133396631616566376239662d366263376163 error +3339393935336138393564646165382d353738352d353532382d3537332d36613131 895ddae8578555280573000000006a11 +3339393935336138393564646165382d453738352d353532382d3537332d36613131 895ddae8e78555280573000000006a11 +3636376138333532393136316334612d34386432316136346231633765652d353230346462356566323838623265392d326134653434303431343738346535362d373435313035356530 error +3636376138333632393136316334612d34386432316136346231633765652d353230346462356566323838623265392d326134653434303431343738346535362d373435313035356530 error +37643238373164303134636361612d33303464362d6638612d35343065302d366337373066 error +37643238373164303134636361612d33303464362d6638612d35423065302d366337373066 error +3164393737393331313762382d363763643435313637332d396537353935333233306331622d31666634663639613735373561642d34646363613531623261373932 error +3164393735393331313762382d363763643435313637332d396537353935333233306331622d31666634663639613735373561642d34646363613531623261373932 error +3766643337663836646437306431312d362d35652d36623731656662652d313661323562363733373233 error +3766643337663836646437306431312d362d35652d3662373165666265d9a1313661323562363733373233 error +35322d3332612d33352d33652d3735353230 00000052032a0035003e000000075520 +35322d3332612d33352d3365323735353230 error +3738336135623163643631652d326131643531363930392d326337613238612d372d323236656362336636333461 error +3738336135623163643631302d326131643531363930392d326337613238612d372d323236656362336636333461 error +3637343033622d3233393836332d36376466346430346261346537322d34362d6161323332663136 error +3637343033622d3233393836332d36376466346430346261346537342d34362d6161323332663136 error +326630372d31396436303232643336343763612d326538303961316164622d343435332d37623962636532306661323530 error +326630372d31396436303232643336343763612d326538303961316164622d343435332d3762396263653230e285a361323530 error +32643363392d322d32383639623466353166363637322d363036366263643238626130662d356430 error +32643363392d322d32383639623466e285a33166363637322d363036366263643238626130662d356430 error +316663636138393063363231362d3431663732336234342d3434343036666361652d6536323564383133333631323037312d32343131643936316461626636663861 error +316663636138393063363231362d3431663732336234e285a32d3434343036666361652d6536323564383133333631323037312d32343131643936316461626636663861 error +373333613761382d342d3431656333666534656137343433652d3239353239332d32356231663838613835343532 error +373333613761382d342d3431656333666534efbc916137343433652d3239353239332d32356231663838613835343532 error +326434652d6333383834342d333533303264312d36333639323465646161652d3562 00002d4e884402d1daae00000000005b +326434652d6333383834342d333533303264312d36333639323865646161652d3562 00002d4e884402d1daae00000000005b +346665386665386632333536306565362d342d353436393363372d3437362d366538313861326131 error +346665386665386632333536306565362d342d35342b393363372d3437362d366538313861326131 error +3634336138376131616435656533392d3134352d3338392d3935393534666165323635622d3561 error +3634446138376131616435656533392d3134352d3338392d3935393534666165323635622d3561 error +33392d3466386634316133373035612d313238643666352d322d313064376438653737356238633166 error +33442d3466386634316133373035612d313238643666352d322d313064376438653737356238633166 error +376165633462636664333831313064322d31622d336231622d323864332d32663937 d38110d2001b3b1b28d3000000002f97 +376165633462636664333831313064322d31622d336231622d323864332d32663937 d38110d2001b3b1b28d3000000002f97 +343033336138316266642d3362612d36363830332d3439393332652d3265663635 33a81bfd03ba6803932e00000002ef65 +343033336138316266642d3362612d363638efbc91332d3439393332652d3265663635 33a81bfd03ba6813932e00000002ef65 +343839372d333161352d333330352d3337373333663436302d316538303039376561653962663035 error +343839372d333161352d3333f09d9f99352d3337373333663436302d316538303039376561653962663035 error +37636537643561613764373962612d363362386537653836362d3566373332363136363736312d3163616331646562372d336262 error +37636537643561613764373962612d363362386537653836362d3566373332363136363736f09d9f992d3163616331646562372d336262 error +353539392d35353562666634312d31393336342d37383630343935376535302d33386162656230336365643762 error +353539392d35353562666634312d31393336342d3738363034393537653530d9a133386162656230336365643762 error +316631352d343665322d31663534632d316131302d3462 00001f1546e2f54c1a1000000000004b +316631352d343665322d31663534632d316131302d3362 00001f1546e2f54c1a1000000000003b +3564393435352d3731393630626232312d32386562306132323630322d326566303864303265363731322d363831363636646265626563336161 error +3564393435352d3731393630626232312d323865623061323236303263326566303864303265363731322d363831363636646265626563336161 error +333565316538662d3761632d313636633038393931312d3766613539643534343837356339312d3165623435643461 error +333565316538662d3761632d313636633038393931312d3766613539643534343837354639312d3165623435643461 error +34393236662d376563653837656133372d3765343236626363326265383832622d343663656166363639356265652d313733 error +34393236662d376563653837656133372d3765343236626363326265383832622d343563656166363639356265652d313733 error +31346665322d313932652d3266343434303366356265362d31353061666461322d3133623166306632346466 error +31346665322d313932652d2b66343434303366356265362d31353061666461322d3133623166306632346466 error +37322d3633336532663533373637313365352d32382d613965303336643739326665652d3133 error +37322d3633333932663533373637313365352d32382d613965303336643739326665652d3133 error +356535322d343531313037366637636164333431652d346637652d363166346434352d6662 error +356535322d343531313037366637636164333434652d346637652d363166346434352d6662 error +342d3330303064306633663638652d3535646439372d3534663739633434662d376333 00000004f68edd97c44f0000000007c3 +342d3330303064306633663638652d3535646439372d3534663739633434662d376333 00000004f68edd97c44f0000000007c3 +313765662d373363382d353234643130343637323436306530392d33652d376239636635613465 error +313765662d373363382d353234643130343637323436306530392d33652d2d6239636635613465 error +3738352d3232612d3633643835342d6637666162623761616465372d6639 00000785022ad854ade70000000000f9 +3738202d3232612d3633643835342d6637666162623761616465372d6639 error +3234316538313562656530316666332d32633138333462356466632d3335363661653333342d356538666538666338656432323063662d363863643337 error +3234316538313562656530316666332d322b3138333462356466632d3335363661653333342d356538666538666338656432323063662d363863643337 error +3634623662323734383666332d313031613566376564352d333538613162306436652d372d3534663834 error +3634623662323734383665332d313031613566376564352d333538613162306436652d372d3534663834 error +37343365362d3531356462306462613365362d3365343837353738363563623239322d353137353833322d3537393536333432 error +37343365362d3531356462306462613365362d3365343837353738363563623239322d35313735383332413537393536333432 error +343761653337623233393164642d31613038362d336262376636343865313565373765632d3163393531386236353532383338302d373361 error +343761653337623233393164642d31613038362d336262376636343865313565373765322d3163393531386236353532383338302d373361 error +326339653966303437352d37622d363039346663353136393336312d323335633032323661393465373137642d3436643563356336363865323032 error +326339653966303437352d37622d363039346663353136393336312d323335653032323661393465373137642d3436643563356336363865323032 error +33393631666238386165612d3561346430623035316162663835652d343839376436636564316639342d373764666433302d66646634343131626265 error +33393631666238386165612d3561346430623035316162663835652d343839376436632b64316639342d373764666433302d66646634343131626265 error +3263393362663030332d3232356166393863632d3432663866646337313432382d373630383766323833656462346562612d313338623262363134 error +3263393362663032332d3232356166393863632d3432663866646337313432382d373630383766323833656462346562612d313338623262363134 error +35646333316165312d34663565373634656461362d376265352d646632363662632d38663466 error +35646333316165312d34663565373234656461362d376265352d646632363662632d38663466 error +373635312d343761346466313634332d3166663263362d3136383434303633612d35 000076511643f2c6063a000000000005 +373635312d343761346466313634332d3166663263362d3136384434303633612d35 000076511643f2c6063a000000000005 +3361653633383838312d316162623238666466392d373630303466346462653237382d352d37373633 error +3361653633383830312d316162623238666466392d373630303466346462653237382d352d37373633 error +326234643638626666356134662d323462646233646438612d3564342d34332d3163 8bff5a4fdd8a05d4004300000000001c +326234643638626666356134662d323441646233646438612d3564342d34332d3163 8bff5a4fdd8a05d4004300000000001c +34323336323463643962323434632d32623836393964356466342d6164666235623738663366373237622d356137663939632d313736386136623939666535356661 error +343233f09d9f99323463643962323434632d32623836393964356466342d6164666235623738663366373237622d356137663939632d313736386136623939666535356661 error +346561652d373365332d32323564366134306532352d3937663238352d323162356136343236353765 error +346561652d373365332d32323564366134306532352d3937663238352d323162356135343236353765 error +3261393837663634363335613264362d376530643263342d32616631666430652d342d36363366623962323230653634 error +3261393837663634363320613264362d376530643263342d32616631666430652d342d36363366623962323230653634 error +32382d332d372d34392d3134363335656262393832 00000028000300070049014635ebb982 +32382d332d372d34392d3134363335656262393832 00000028000300070049014635ebb982 +35363237372d372d3437303531363661662d353932613364643136632d363862336539 00056277000766afd16c00000068b3e9 +35363237372d372d3437efbca13531363661662d353932613364643136632d363862336539 00056277000766afd16c00000068b3e9 +3561396363353930303065652d313466336261303334656638306264662d31633339362d373539373932373331303339312d613137 error +3561396363353930303065652d313466336261303334416638306264662d31633339362d373539373932373331303339312d613137 error +3765656638613237303636332d34336237652d3434383139652d626465623238346365342d34323933 error +3765656638613237303636e285a32d34336237652d3434383139652d626465623238346365342d34323933 error +3263382d333064656130646335382d346531342d376261363032303530633464363066322d36333136 error +3263382d333064656130646335382d346531342d376261366332303530633464363066322d36333136 error +34623337323336613231306434652d31666263366136316437302d6430336237393064392d316437332d34633233333562306530323139 error +34623337323336613231306434652d31666263366136316437302d6430336237393064392d316437332d34633233333562446530323139 error +6339353961653034353463326632612d343539363734396439336534656662392d343966333163396339343639352d353966663733376166326663322d3262396537 error +6339353961653034353463326632612d3435393637343964393365c2b2656662392d343966333163396339343639352d353966663733376166326663322d3262396537 error diff --git a/spark/src/main/scala/org/apache/comet/iceberg/IcebergReflection.scala b/spark/src/main/scala/org/apache/comet/iceberg/IcebergReflection.scala index 33a0593568d..c96081e43c3 100644 --- a/spark/src/main/scala/org/apache/comet/iceberg/IcebergReflection.scala +++ b/spark/src/main/scala/org/apache/comet/iceberg/IcebergReflection.scala @@ -1708,6 +1708,37 @@ object IcebergReflection extends Logging { None } + /** UUID source whose Spark string ordering/distribution precedes native UUID normalization. */ + def uuidTransformSource(schema: Any, specOrOrder: Any): Option[String] = { + import scala.jdk.CollectionConverters._ + val fields = getMethod(specOrOrder.getClass, "fields") + .invoke(specOrOrder) + .asInstanceOf[java.util.List[_]] + fields.asScala.iterator + .filter { field => + getMethod(field.getClass, "transform").invoke(field).toString != "void" + } + .flatMap { field => + val id = getMethod(field.getClass, "sourceId").invoke(field).asInstanceOf[Int] + Option( + getMethod(schema.getClass, "findField", classOf[Int]) + .invoke(schema, Int.box(id))).flatMap { source => + val tpe = getMethod(source.getClass, "type").invoke(source) + val typeIdName = + getMethod(tpe.getClass, "typeId").invoke(tpe).asInstanceOf[Enum[_]].name() + if (typeIdName == "UUID") { + Some( + getMethod(schema.getClass, "findColumnName", classOf[Int]) + .invoke(schema, Int.box(id)) + .asInstanceOf[String]) + } else None + } + } + .take(1) + .toSeq + .headOption + } + /** * Sum `recordCount` and `fileSizeInBytes` across `dataFiles` for SQL-metric reporting. The * concrete `DataFile` impl (`BaseFile`) is package-private in Iceberg, so look the accessors up diff --git a/spark/src/main/scala/org/apache/comet/serde/operator/CometIcebergNativeWrite.scala b/spark/src/main/scala/org/apache/comet/serde/operator/CometIcebergNativeWrite.scala index b385668291d..a28bafe52cd 100644 --- a/spark/src/main/scala/org/apache/comet/serde/operator/CometIcebergNativeWrite.scala +++ b/spark/src/main/scala/org/apache/comet/serde/operator/CometIcebergNativeWrite.scala @@ -81,11 +81,11 @@ object CometIcebergNativeWrite extends CometOperatorSerde[IcebergWriteExec] { } private val EncryptionPropertyPrefix = "encryption." - // `uuid` plus the v3-only types. Iceberg plans `variant` as Spark's VariantType and `unknown` + // The v3-only types. Iceberg plans `variant` as Spark's VariantType and `unknown` // as NullType, neither of which the native writer handles; Spark cannot plan a write to // `timestamp_ns`, `geometry` or `geography` today, so those are declined in case it learns to. private val UnsupportedWriteTypeIds: Set[String] = - Set("UUID", "VARIANT", "UNKNOWN", "TIMESTAMP_NANO", "GEOMETRY", "GEOGRAPHY") + Set("VARIANT", "UNKNOWN", "TIMESTAMP_NANO", "GEOMETRY", "GEOGRAPHY") // Loaded from the native storage factory: `builtin_storage_schemes` in // `native/core/src/execution/operators/iceberg_common.rs` is the single point of change and // explains why `oss` is read-only and `memory` write-only. Lazy so constructing the serde does @@ -415,6 +415,7 @@ object CometIcebergNativeWrite extends CometOperatorSerde[IcebergWriteExec] { requireSupportedFormatVersion, requireNoMetadataColumns, requireSupportedColumnTypes, + requireNoUuidTransformSource, requireNoVoidFieldWithDroppedSource, requireNoEncryptionPrefix, requireNoBloomFilterColumnsEnabled, @@ -511,11 +512,8 @@ object CometIcebergNativeWrite extends CometOperatorSerde[IcebergWriteExec] { } } - // Iceberg maps `uuid` to Spark's StringType, so the native writer would receive a Utf8 column - // while iceberg-rust's target Arrow schema demands FixedSizeBinary(16) -- no Arrow cast bridges - // the two, so the write would pass detection and then fail the task. Decline it up front, along - // with the v3-only types in `UnsupportedWriteTypeIds`. `fixed(N)` arrives as Binary and casts to - // FixedSizeBinary(N), so it needs no rule. + // UUID strings are normalized recursively by the native writer. The remaining unsupported + // types must still be declined before execution, including inside nested containers. private val requireSupportedColumnTypes: TriggerRule = ctx => IcebergReflection .getWriteSchemaFromSparkWrite(ctx.sparkWrite) @@ -530,6 +528,38 @@ object CometIcebergNativeWrite extends CometOperatorSerde[IcebergWriteExec] { } } + // Spark distributes/sorts UUIDs as their input strings, before the writer normalizes them. + // Case, shortened groups and group masking can put equal UUIDs in different runs, and string + // order is not UUID byte order. Keep these sources on iceberg-java until the upstream + // distribution and ordering expressions also normalize UUIDs. + private val requireNoUuidTransformSource: TriggerRule = ctx => { + val schema = IcebergReflection.getSchema(ctx.table).getOrElse { + throw new IllegalStateException("could not resolve schema for UUID source checking") + } + if (IcebergReflection.findFieldWithTypeIds(schema, Set("UUID")).isEmpty) { + None + } else { + val spec = IcebergReflection + .getOutputSpecIdFromSparkWrite(ctx.sparkWrite) + .flatMap(IcebergReflection.getPartitionSpecById(ctx.table, _)) + .getOrElse { + throw new IllegalStateException( + "could not resolve output spec for UUID source checking") + } + val order = IcebergReflection + .getOutputSortOrderIdFromSparkWrite(ctx.sparkWrite) + .flatMap(IcebergReflection.getSortOrderById(ctx.table, _)) + .getOrElse { + IcebergReflection.getMethod(ctx.table.getClass, "sortOrder").invoke(ctx.table) + } + IcebergReflection + .uuidTransformSource(schema, spec) + .orElse(IcebergReflection.uuidTransformSource(schema, order)) + .map(name => + s"UUID column $name is a partition or sort source requiring UUID normalization") + } + } + // A format-version-1 spec keeps a dropped partition field as a `void` transform, and its source // column can be dropped afterwards. iceberg-java cannot write through a spec that mixes such a // field with a live one, and the native writer fails resolving the spec's partition type, so diff --git a/spark/src/test/scala/org/apache/comet/CometIcebergWriteActionSuite.scala b/spark/src/test/scala/org/apache/comet/CometIcebergWriteActionSuite.scala index 6f752267a63..236f0981221 100644 --- a/spark/src/test/scala/org/apache/comet/CometIcebergWriteActionSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometIcebergWriteActionSuite.scala @@ -38,6 +38,7 @@ import org.json4s.jackson.JsonMethods.parse import org.apache.hadoop.fs.{Path => HadoopPath} import org.apache.parquet.hadoop.ParquetFileReader import org.apache.parquet.hadoop.util.HadoopInputFile +import org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName import org.apache.spark.{CometListenerBusUtils, SparkConf, SparkException, SparkThrowable, Success, TaskContext} import org.apache.spark.rdd.RDD import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd} @@ -4020,6 +4021,197 @@ class CometIcebergWriteActionSuite } } + for (mode <- Seq("unpartitioned", "clustered", "fanout"); aqe <- Seq("false", "true")) { + test(s"native acceleration: uuid rows, nested fields, metrics and footer ($mode, AQE=$aqe)") { + assumeNativeAcceleration() + withIcebergCatalog { _ => + withSQLConf(SQLConf.ADAPTIVE_EXECUTION_ENABLED.key -> aqe) { + import org.apache.iceberg.types.Types + val uuid = Types.UUIDType.get() + val native = s"uuid_${mode}_${aqe}_native" + val jvm = s"uuid_${mode}_${aqe}_jvm" + Seq(native, jvm).foreach { name => + val partition = if (mode == "unpartitioned") "" else "PARTITIONED BY (p)" + spark.sql(s"""CREATE TABLE $catalog.$ns.$name (id INT, p INT) USING iceberg + $partition TBLPROPERTIES ( + 'write.metadata.metrics.default'='full', + 'write.spark.fanout.enabled'='${mode == "fanout"}', + 'write.distribution-mode'='${if (mode == "fanout") "none" else "hash"}')""") + val table = loadIcebergTable(spark, catalog, ns, name) + addIcebergColumn(table, "u", uuid) + addIcebergColumn( + table, + "s", + Types.StructType.of(Types.NestedField.optional(101, "u", uuid))) + addIcebergColumn(table, "l", Types.ListType.ofOptional(102, uuid)) + addIcebergColumn(table, "m", Types.MapType.ofOptional(103, 104, uuid, uuid)) + addIcebergColumn(table, "fx", icebergFixedType(16)) + spark.sql(s"REFRESH TABLE $catalog.$ns.$name") + if (mode == "clustered") { + spark.sql(s"ALTER TABLE $catalog.$ns.$name WRITE LOCALLY ORDERED BY p") + } + } + val canonical = "f47ac10b-58cc-4372-a567-0e02b2c3d479" + val short = "1-1-1-1-1" + def insert(name: String): Unit = { + spark.sql(s"""INSERT INTO $catalog.$ns.$name + SELECT /*+ COALESCE(1) */ * FROM VALUES + (1, 0, '$canonical', named_struct('u', '${canonical.toUpperCase( + java.util.Locale.ROOT)}'), + array('$short', CAST(NULL AS STRING)), map('$short', '$canonical'), + X'00112233445566778899AABBCCDDEEFF'), + (2, 1, '+1-1-1-1-1', named_struct('u', '1-1-1-1-1'), + array('$canonical'), map('$canonical', CAST(NULL AS STRING)), + X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'), + (3, 0, CAST(NULL AS STRING), CAST(NULL AS STRUCT), + CAST(NULL AS ARRAY), CAST(NULL AS MAP), + CAST(NULL AS BINARY)), + (4, 1, '100000000-1-1-1-1', named_struct('u', '$canonical'), + CAST(array() AS ARRAY), CAST(map() AS MAP), + X'00000000000000000000000000000000') + AS src(id, p, u, s, l, m, fx)""") + } + assertNativeWriteEngages(native, Seq(1, 2, 3, 4))(insert(native)) + insert(jvm) + withSQLConf(CometConf.COMET_ENABLED.key -> "false") { + checkAnswer(spark.table(s"$catalog.$ns.$native"), spark.table(s"$catalog.$ns.$jvm")) + } + def metrics(name: String): Seq[Row] = spark + .sql(s""" + SELECT ${if (mode == "unpartitioned") "NULL" else "partition"} AS part, + record_count, value_counts, null_value_counts, + transform_values(lower_bounds, (k, v) -> hex(v)), + transform_values(upper_bounds, (k, v) -> hex(v)) + FROM $catalog.$ns.$name.data_files + """) + .collect() + .toSeq + .sortBy(_.toString) + assert(metrics(native) == metrics(jvm)) + + val uuidPaths = + Seq("u", "s.u", "l.list.element", "m.key_value.key", "m.key_value.value") + Seq(native, jvm).foreach { name => + val table = loadIcebergTable(spark, catalog, ns, name) + .asInstanceOf[org.apache.iceberg.Table] + spark.sql(s"SELECT file_path FROM $catalog.$ns.$name.data_files").collect().foreach { + row => + val reader = ParquetFileReader.open(HadoopInputFile + .fromPath(new HadoopPath(row.getString(0)), spark.sessionState.newHadoopConf())) + try { + val schema = reader.getFooter.getFileMetaData.getSchema + uuidPaths.foreach { path => + val leaf = schema.getType(path.split("\\."): _*).asPrimitiveType() + assert(leaf.getPrimitiveTypeName == PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) + assert(leaf.getTypeLength == 16) + val icebergPath = path.replace(".list.", ".").replace(".key_value.", ".") + assert( + leaf.getId.intValue() == table.schema().findField(icebergPath).fieldId()) + // The pinned iceberg-rust writer does not emit the UUID logical annotation. + // Pin that documented physical divergence rather than claiming footer parity. + if (name == native) assert(leaf.getLogicalTypeAnnotation == null) + else assert(leaf.getLogicalTypeAnnotation.toString == "UUID") + } + } finally reader.close() + } + } + } + } + } + } + + for (shape <- Seq("flat", "list_element", "map_value")) { + test(s"native acceleration: invalid uuid in a later batch aborts finalized files ($shape)") { + assumeNativeAcceleration() + withIcebergCatalog { _ => + import org.apache.iceberg.types.Types + val canonical = "f47ac10b-58cc-4372-a567-0e02b2c3d479" + val uuid = Types.UUIDType.get() + val columnType = shape match { + case "flat" => uuid + case "list_element" => Types.ListType.ofOptional(101, uuid) + case "map_value" => Types.MapType.ofOptional(102, 103, Types.StringType.get(), uuid) + } + def wrap(value: String): String = shape match { + case "flat" => value + case "list_element" => s"array($value)" + case "map_value" => s"map('k', $value)" + } + val sourceView = s"uuid_cleanup_source_$shape" + val native = s"uuid_${shape}_bad_native" + val jvm = s"uuid_${shape}_bad_jvm" + val control = s"uuid_${shape}_control" + val sourceValue = wrap(s"CASE WHEN id = 7000 THEN 'invalid' ELSE '$canonical' END") + val seed = wrap(s"'$canonical'") + val failingField = shape match { + case "flat" => "u" + case "list_element" => "element" + case "map_value" => "value" + } + withTempView(sourceView) { + // A physical Parquet source avoids a LocalTableScan handing every row over at once. + withTempPath { source => + spark + .range(10000) + .selectExpr("CAST(id AS INT) AS id", s"$sourceValue AS u") + .coalesce(1) + .write + .parquet(source.getCanonicalPath) + spark.read + .parquet(source.getCanonicalPath) + .createOrReplaceTempView(sourceView) + Seq(native, jvm, control).foreach { name => + spark.sql(s"""CREATE TABLE $catalog.$ns.$name (id INT) USING iceberg + TBLPROPERTIES ('write.target-file-size-bytes'='1')""") + addIcebergColumn(loadIcebergTable(spark, catalog, ns, name), "u", columnType) + spark.sql(s"REFRESH TABLE $catalog.$ns.$name") + spark.sql(s"INSERT INTO $catalog.$ns.$name VALUES (-1, $seed)") + } + withNativeEnabled { + withSQLConf(CometConf.COMET_BATCH_SIZE.key -> "1000") { + assertNativeWriteEngages(control, (-1 until 7000)) { + spark.sql(s"INSERT INTO $catalog.$ns.$control " + + s"SELECT id, u FROM $sourceView WHERE id < 7000") + } + assert(parquetFiles(dataDir(control)).size >= 4) + } + } + Seq("native", "jvm").foreach { arm => + val name = if (arm == "native") native else jvm + val before = countSnapshots(name) + val committed = parquetFiles(dataDir(name)) + val committedRows = spark.table(s"$catalog.$ns.$name").collect().toSeq + withSQLConf( + CometConf.COMET_ICEBERG_NATIVE_WRITE_ENABLED.key -> (arm == "native").toString, + CometConf.COMET_EXEC_LOCAL_TABLE_SCAN_ENABLED.key -> "true", + CometConf.COMET_BATCH_SIZE.key -> "1000") { + val (plans, error) = captureFailedPlans(spark) { + spark.sql(s"INSERT INTO $catalog.$ns.$name SELECT id, u FROM $sourceView") + } + assert(error.nonEmpty, s"$arm accepted invalid UUID") + if (arm == "native") { + assert(plans.exists(p => + collectWithSubqueries(p) { case w: CometIcebergWriteExec => + w + }.nonEmpty)) + assert( + error.toSeq + .flatMap(exceptionChain) + .exists(t => + Option(t.getMessage).exists( + _.contains(s"Invalid UUID string in Iceberg field $failingField")))) + } + } + assert(countSnapshots(name) == before) + assert(parquetFiles(dataDir(name)) == committed) + checkAnswer(spark.table(s"$catalog.$ns.$name"), committedRows) + } + } + } + } + } + } + test("Comet-written rows round-trip through Spark's reader unchanged") { assume(icebergAvailable, "Iceberg not available in classpath") withIcebergCatalog { _ => diff --git a/spark/src/test/scala/org/apache/comet/CometIcebergWriteDetectionSuite.scala b/spark/src/test/scala/org/apache/comet/CometIcebergWriteDetectionSuite.scala index a102d142c83..115802e09d7 100644 --- a/spark/src/test/scala/org/apache/comet/CometIcebergWriteDetectionSuite.scala +++ b/spark/src/test/scala/org/apache/comet/CometIcebergWriteDetectionSuite.scala @@ -1563,11 +1563,10 @@ class CometIcebergWriteDetectionSuite extends CometTestBase with CometIcebergTes } } - test("fall-back: uuid column in the write schema") { + test("Compatible with a uuid column in the write schema") { withDetectionCatalog { _ => // Spark DDL cannot declare `uuid`, so evolve the schema through the Iceberg API. Spark - // plans the column as StringType, but the native writer's target Arrow schema demands - // FixedSizeBinary(16) with no cast from Utf8 -- detection must decline before execution. + // plans the column as StringType; the native writer normalizes it to 16 UUID bytes. createTable("uuid_col", partitionSpec = "") addIcebergColumn(loadIcebergTable(spark, catalog, ns, "uuid_col"), "u", icebergUuidType()) spark.sql(s"REFRESH TABLE $catalog.$ns.uuid_col") @@ -1576,7 +1575,46 @@ class CometIcebergWriteDetectionSuite extends CometTestBase with CometIcebergTes s"INSERT INTO $catalog.$ns.uuid_col VALUES " + "(1, 'us', 1.0, 'f47ac10b-58cc-4372-a567-0e02b2c3d479')") } - assertUnsupportedContains(writeExec, "uuid_col", "column u has Iceberg type uuid") + val support = CometIcebergNativeWrite.getSupportLevel(writeExec) + assert(support.isInstanceOf[Compatible], s"expected Compatible, got $support") + } + } + + Seq("identity", "bucket", "sort").foreach { kind => + test(s"fall-back: uuid as a $kind source") { + withDetectionCatalog { _ => + val name = s"uuid_$kind" + createTable(name, partitionSpec = "") + val table = loadIcebergTable(spark, catalog, ns, name) + .asInstanceOf[org.apache.iceberg.Table] + addIcebergColumn(table, "u", icebergUuidType()) + kind match { + case "identity" => table.updateSpec().addField("u").commit() + case "bucket" => + table + .updateSpec() + .addField(org.apache.iceberg.expressions.Expressions.bucket("u", 8)) + .commit() + case "sort" => table.replaceSortOrder().asc("u").commit() + } + spark.sql(s"REFRESH TABLE $catalog.$ns.$name") + val writeExec = planInsertWriteExec(s"$catalog.$ns.$name", "(1, 'us', 1.0, '1-1-1-1-1')") + assertUnsupportedContains(writeExec, name, "UUID column u", "partition or sort source") + } + } + } + + test("fall-back: uuid does not make an unknown column eligible") { + assume(isSpark40Plus, "unknown requires Iceberg 1.10+") + withDetectionCatalog { _ => + createTable("uuid_unknown", partitionSpec = "", properties = Some("'format-version'='3'")) + val table = loadIcebergTable(spark, catalog, ns, "uuid_unknown") + addIcebergColumn(table, "u", icebergUuidType()) + addIcebergColumn(table, "un", icebergUnknownType()) + spark.sql(s"REFRESH TABLE $catalog.$ns.uuid_unknown") + val writeExec = + planInsertWriteExec(s"$catalog.$ns.uuid_unknown", "(1, 'us', 1.0, '1-1-1-1-1', NULL)") + assertUnsupportedContains(writeExec, "uuid_unknown", "unknown") } } diff --git a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometIcebergWriteBenchmark.scala b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometIcebergWriteBenchmark.scala index 3ca224ec1a4..02abdaabec8 100644 --- a/spark/src/test/scala/org/apache/spark/sql/benchmark/CometIcebergWriteBenchmark.scala +++ b/spark/src/test/scala/org/apache/spark/sql/benchmark/CometIcebergWriteBenchmark.scala @@ -19,6 +19,7 @@ package org.apache.spark.sql.benchmark +import scala.collection.mutable import scala.concurrent.duration._ import org.apache.spark.SparkConf @@ -176,7 +177,8 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { statement: String, expectedRowsAfter: Long, expectShuffle: Option[Boolean], - expectSort: Option[Boolean]) + expectSort: Option[Boolean], + uuid: Boolean = false) private def workloads(values: Int): Seq[Workload] = { val insert = s"INSERT INTO $targetTable SELECT * FROM parquetV1Table" @@ -295,6 +297,11 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { withTempPath { warehouse => configureIcebergHadoopCatalog(warehouse, catalog) + if (mainArgs.contains("uuid")) { + runUuidWorkloads() + return + } + runBenchmarkWithTable("Iceberg write", 4 * 1024 * 1024) { values => withTempPath { dir => withTempTable("parquetV1Table") { @@ -302,7 +309,53 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { spark.sql(corpusQuery).repartition(sourceFiles).write, dir.getCanonicalPath + "/parquetV1") try { - workloads(values).foreach(runWorkload(_, values)) + val cases = workloads(values) + val selected = if (mainArgs.contains("control")) cases.take(1) else cases + selected.foreach(runWorkload(_, values)) + } finally { + spark.sql(s"DROP TABLE IF EXISTS $targetTable") + } + } + } + } + } + } + + /** Select with `...CometIcebergWriteBenchmark uuid`; generation and validation are untimed. */ + private def runUuidWorkloads(): Unit = { + val values = 4 * 1024 * 1024 + Seq("canonical", "canonical-null", "shortened").foreach { shape => + runBenchmarkWithTable(s"Iceberg UUID $shape", values) { size => + withTempPath { dir => + withTempTable("parquetV1Table") { + val hash = "md5(concat('6959:', CAST(value AS STRING)))" + val canonical = s"concat(substr($hash, 1, 8), '-', substr($hash, 9, 4), '-', " + + s"substr($hash, 13, 4), '-', substr($hash, 17, 4), '-', substr($hash, 21, 12))" + val uuid = shape match { + case "canonical" => canonical + case "canonical-null" => s"IF(PMOD(value, 8) = 0, NULL, $canonical)" + case "shortened" => "concat(hex(pmod(value, 2147483647)), '-1-1-1-1')" + } + saveAsParquetV1Table( + spark + .sql(s"SELECT value AS id, $uuid AS u FROM $tbl") + .repartition(sourceFiles) + .write, + dir.getCanonicalPath + "/uuid") + try { + runWorkload( + Workload( + title = s"UUID $shape INSERT", + partitionSpec = "", + properties = Nil, + orderBy = None, + prePopulate = false, + statement = s"INSERT INTO $targetTable SELECT * FROM parquetV1Table", + expectedRowsAfter = size.toLong, + expectShuffle = None, + expectSort = None, + uuid = true), + size) } finally { spark.sql(s"DROP TABLE IF EXISTS $targetTable") } @@ -313,6 +366,17 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { } private def runWorkload(workload: Workload, values: Int): Unit = { + val expectedUuid = if (workload.uuid) { + spark.udf.register( + "benchmark_normalize_uuid", + (value: String) => Option(value).map(java.util.UUID.fromString(_).toString).orNull) + Some( + spark + .sql("SELECT count(*), sum(xxhash64(id, benchmark_normalize_uuid(u))) " + + "FROM parquetV1Table") + .head()) + } else None + val samples = mutable.LinkedHashMap.empty[String, mutable.ArrayBuffer[Double]] // `warmupTime` is a deadline and `minTime` a total across the measured iterations, so both are // floors on a case's total cost rather than on one write. The floors are set below the fastest // write the corpus produces - the native writer is around half a second here - so that every @@ -333,6 +397,8 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { arms.foreach { arm => val label = verifyArm(benchmark, arm, workload) + val times = mutable.ArrayBuffer.empty[Double] + samples(label) = times benchmark.addTimerCase(label) { timer => // Neither an insert nor a copy-on-write delete is idempotent. Without rebuilding the table // each iteration, an insert would append to the previous iteration's files and a delete @@ -341,10 +407,33 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { timer.startTiming() withSQLConf(arm.confs: _*) { spark.sql(workload.statement) } timer.stopTiming() + expectedUuid.foreach { expected => + val actual = + spark.sql(s"SELECT count(*), sum(xxhash64(id, u)) FROM $targetTable").head() + require(actual == expected, s"$label: UUID checksum mismatch: $actual != $expected") + } + if (timer.iteration >= 0) times += timer.totalTime().toDouble / 1000000.0 } } benchmark.run() + samples.foreach { case (label, times) => + require(times.size >= 5) + val sorted = times.sorted + val median = (sorted((sorted.size - 1) / 2) + sorted(sorted.size / 2)) / 2 + benchmark.out.println( + f"$label: median=$median%.2f ms, range=${sorted.head}%.2f.." + + f"${sorted.last}%.2f ms, rows/s=${values.toDouble * 1000 / median}%.0f") + } + if (workload.uuid) { + def median(label: String): Double = { + val sorted = samples(label).sorted + (sorted((sorted.size - 1) / 2) + sorted(sorted.size / 2)) / 2 + } + benchmark.out.println( + "UUID writer factor (median): " + + f"${median("Comet scan") / median("Comet scan + native write")}%.3fX") + } } /** @@ -370,6 +459,26 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { throw new IllegalStateException( s"${arm.name}: table holds $remaining rows, expected ${workload.expectedRowsAfter}") } + if (workload.uuid) { + // UUID parsing is outside timing, and validation compares normalized values rather than + // the original strings (uppercase and shortened groups are legitimate Java inputs). + spark.udf.register( + "benchmark_normalize_uuid", + (value: String) => Option(value).map(java.util.UUID.fromString(_).toString).orNull) + val expected = spark + .sql( + "SELECT sum(xxhash64(id, benchmark_normalize_uuid(u))) " + + "FROM parquetV1Table") + .head() + val actual = spark.sql(s"SELECT sum(xxhash64(id, u)) FROM $targetTable").head() + require(actual == expected, s"${arm.name}: UUID checksum mismatch: $actual != $expected") + val files = spark + .sql( + "SELECT count(*), sum(file_size_in_bytes) " + + s"FROM $targetTable.data_files") + .head() + benchmark.out.println(s"${arm.name}: ${files.getLong(0)} files, ${files.getLong(1)} bytes") + } val cometOps = collectAcross(plans) { case op if isComet(op) => op } if (arm.expectComet && cometOps.isEmpty) { @@ -429,6 +538,7 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { s"BENCH_MAVEN_OPTS). Plans:\n${plans.mkString("\n--\n")}") } if (arm.expectNativeWrite && nativeWrites.isEmpty) { + require(!workload.uuid, s"${arm.name}: UUID benchmark fell back; measurement is invalid") warn( benchmark, s"${workload.title} / ${arm.name}: no CometIcebergWriteExec in the plan. The write fell " + @@ -455,7 +565,13 @@ object CometIcebergWriteBenchmark extends CometBenchmarkBase { workload.properties // `WHERE false` takes the schema from the source without writing anything, which avoids // restating the corpus as DDL and keeps the two in step. - spark.sql(s""" + if (workload.uuid) { + spark.sql(s"""CREATE TABLE $targetTable (id BIGINT) USING iceberg + TBLPROPERTIES (${properties.mkString(", ")})""") + val table = org.apache.iceberg.spark.Spark3Util.loadIcebergTable(spark, targetTable) + table.updateSchema().addColumn("u", org.apache.iceberg.types.Types.UUIDType.get()).commit() + spark.sql(s"REFRESH TABLE $targetTable") + } else spark.sql(s""" CREATE TABLE $targetTable USING iceberg ${workload.partitionSpec}