From e8b1c8e570fe6a31090850c37785c12585033a41 Mon Sep 17 00:00:00 2001 From: Sylvain Lesage Date: Thu, 16 Oct 2025 10:22:01 +0200 Subject: [PATCH] Minimal support for GeoParquet (#133) * Initial support for GeoParquet * pr comments * convert crs * add test file + expected JSON files * add sentence to README * Apply suggestion from @platypii Co-authored-by: Kenny Daniel * PR comments * update README * review comment --------- Co-authored-by: Kenny Daniel --- README.md | 2 + src/geoparquet.js | 37 + src/metadata.js | 15 +- src/query.js | 4 +- src/read.js | 4 +- src/types.d.ts | 2 + test/files/geoparquet.json | 1611 +++++++++++++++++++++++++++ test/files/geoparquet.metadata.json | 469 ++++++++ test/files/geoparquet.parquet | Bin 0 -> 28772 bytes 9 files changed, 2136 insertions(+), 8 deletions(-) create mode 100644 src/geoparquet.js create mode 100644 test/files/geoparquet.json create mode 100644 test/files/geoparquet.metadata.json create mode 100644 test/files/geoparquet.parquet diff --git a/README.md b/README.md index 073ce86..e9f04f6 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,8 @@ Hyparquet [respects](https://parquet.apache.org/docs/file-format/implementations This behavior can be changed by setting the `utf8` option to `false` in functions such as `parquetRead`. Note that this option only affects `BYTE_ARRAY` columns without an annotation. Columns with a `STRING`, `ENUM` or `UUID` logical type, for example, will be decoded as expected by the specification. +Note also that hyparquet checks by default if the metadata contains a `geo` key to detect [GeoParquet](https://geoparquet.org/). If so, any geospatial column will be marked with the GEOMETRY or GEOGRAPHY logical type and decoded as WKB binary data to GeoJSON geometries, regardless of the `utf8` option. Set the `geoparquet` option to `false` to disable this behavior. + ## Supported Parquet Files The parquet format is known to be a sprawling format which includes options for a wide array of compression schemes, encoding types, and data structures. diff --git a/src/geoparquet.js b/src/geoparquet.js new file mode 100644 index 0000000..71ef657 --- /dev/null +++ b/src/geoparquet.js @@ -0,0 +1,37 @@ +/** + * @import {KeyValue, LogicalType, SchemaElement} from '../src/types.d.ts' + * @param {SchemaElement[]} schema + * @param {KeyValue[] | undefined} key_value_metadata + * @returns {void} + */ +export function markGeoColumns(schema, key_value_metadata) { + // Prepare the list of GeoParquet columns + /** @type {Map} */ + const columns = new Map() + const geo = key_value_metadata?.find(({ key }) => key === 'geo')?.value + const decodedColumns = (geo && JSON.parse(geo)?.columns) ?? {} + for (const [name, column] of Object.entries(decodedColumns)) { + if (column.encoding !== 'WKB') { + continue + } + const type = column.edges === 'spherical' ? 'GEOGRAPHY' : 'GEOMETRY' + const id = column.crs?.id ?? column.crs?.ids?.[0] + const crs = id ? `${id.authority}:${id.code.toString()}` : undefined + // Note: we can't infer GEOGRAPHY's algorithm from GeoParquet + columns.set(name, { type, crs }) + } + + // Mark schema elements with logical type + // Only look at root-level columns of type BYTE_ARRAY without existing logical_type + for (let i = 1; i < schema.length; i++) { // skip root + const element = schema[i] + const { logical_type, name, num_children, repetition_type, type } = element + if (num_children) { + i += num_children + continue // skip the element and its children + } + if (type === 'BYTE_ARRAY' && logical_type === undefined && repetition_type !== 'REPEATED') { + element.logical_type = columns.get(name) + } + } +} diff --git a/src/metadata.js b/src/metadata.js index d7349d9..2478d3c 100644 --- a/src/metadata.js +++ b/src/metadata.js @@ -2,6 +2,7 @@ import { CompressionCodec, ConvertedType, EdgeInterpolationAlgorithm, Encoding, import { DEFAULT_PARSERS, parseDecimal, parseFloat16 } from './convert.js' import { getSchemaPath } from './schema.js' import { deserializeTCompactProtocol } from './thrift.js' +import { markGeoColumns } from './geoparquet.js' export const defaultInitialFetchSize = 1 << 19 // 512kb @@ -34,7 +35,7 @@ function decode(/** @type {Uint8Array} */ value) { * @param {MetadataOptions & { initialFetchSize?: number }} options initial fetch size in bytes (default 512kb) * @returns {Promise} parquet metadata object */ -export async function parquetMetadataAsync(asyncBuffer, { parsers, initialFetchSize = defaultInitialFetchSize } = {}) { +export async function parquetMetadataAsync(asyncBuffer, { parsers, initialFetchSize = defaultInitialFetchSize, geoparquet = true } = {}) { if (!asyncBuffer || !(asyncBuffer.byteLength >= 0)) throw new Error('parquet expected AsyncBuffer') // fetch last bytes (footer) of the file @@ -64,21 +65,22 @@ export async function parquetMetadataAsync(asyncBuffer, { parsers, initialFetchS const combinedView = new Uint8Array(combinedBuffer) combinedView.set(new Uint8Array(metadataBuffer)) combinedView.set(new Uint8Array(footerBuffer), footerOffset - metadataOffset) - return parquetMetadata(combinedBuffer, { parsers }) + return parquetMetadata(combinedBuffer, { parsers, geoparquet }) } else { // parse metadata from the footer - return parquetMetadata(footerBuffer, { parsers }) + return parquetMetadata(footerBuffer, { parsers, geoparquet }) } } /** * Read parquet metadata from a buffer synchronously. * + * @import {KeyValue} from '../src/types.d.ts' * @param {ArrayBuffer} arrayBuffer parquet file footer * @param {MetadataOptions} options metadata parsing options * @returns {FileMetaData} parquet metadata object */ -export function parquetMetadata(arrayBuffer, { parsers } = {}) { +export function parquetMetadata(arrayBuffer, { parsers, geoparquet = true } = {}) { if (!(arrayBuffer instanceof ArrayBuffer)) throw new Error('parquet expected ArrayBuffer') const view = new DataView(arrayBuffer) @@ -185,12 +187,17 @@ export function parquetMetadata(arrayBuffer, { parsers } = {}) { total_compressed_size: rowGroup.field_6, ordinal: rowGroup.field_7, })) + /** @type {KeyValue[] | undefined} */ const key_value_metadata = metadata.field_5?.map((/** @type {any} */ keyValue) => ({ key: decode(keyValue.field_1), value: decode(keyValue.field_2), })) const created_by = decode(metadata.field_6) + if (geoparquet) { + markGeoColumns(schema, key_value_metadata) + } + return { version, schema, diff --git a/src/query.js b/src/query.js index 76a0934..bffd891 100644 --- a/src/query.js +++ b/src/query.js @@ -18,7 +18,7 @@ export async function parquetQuery(options) { if (!options.file || !(options.file.byteLength >= 0)) { throw new Error('parquet expected AsyncBuffer') } - options.metadata ??= await parquetMetadataAsync(options.file) + options.metadata ??= await parquetMetadataAsync(options.file, options) const { metadata, rowStart = 0, columns, orderBy, filter } = options if (rowStart < 0) throw new Error('parquet rowStart must be positive') @@ -122,7 +122,7 @@ export async function parquetQuery(options) { */ async function parquetReadRows(options) { const { file, rows } = options - options.metadata ||= await parquetMetadataAsync(file) + options.metadata ||= await parquetMetadataAsync(file, options) const { row_groups: rowGroups } = options.metadata // Compute row groups to fetch const groupIncluded = Array(rowGroups.length).fill(false) diff --git a/src/read.js b/src/read.js index 7d3e7d6..374634c 100644 --- a/src/read.js +++ b/src/read.js @@ -20,7 +20,7 @@ import { concat, flatten } from './utils.js' */ export async function parquetRead(options) { // load metadata if not provided - options.metadata ??= await parquetMetadataAsync(options.file) + options.metadata ??= await parquetMetadataAsync(options.file, options) // read row groups const asyncGroups = parquetReadAsync(options) @@ -109,7 +109,7 @@ export async function parquetReadColumn(options) { if (options.columns?.length !== 1) { throw new Error('parquetReadColumn expected columns: [columnName]') } - options.metadata ??= await parquetMetadataAsync(options.file) + options.metadata ??= await parquetMetadataAsync(options.file, options) const asyncGroups = parquetReadAsync(options) // assemble struct columns diff --git a/src/types.d.ts b/src/types.d.ts index b78d287..f205a11 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -17,6 +17,7 @@ export interface ParquetParsers { */ export interface MetadataOptions { parsers?: ParquetParsers // custom parsers to decode advanced types + geoparquet?: boolean // parse geoparquet metadata and set logical type to geometry/geography for geospatial columns (default true) } /** @@ -33,6 +34,7 @@ export interface BaseParquetReadOptions { compressors?: Compressors // custom decompressors utf8?: boolean // decode byte arrays as utf8 strings (default true) parsers?: ParquetParsers // custom parsers to decode advanced types + geoparquet?: boolean // parse geoparquet metadata and set logical type to geometry/geography for geospatial columns (default true) } interface ArrayRowFormat { diff --git a/test/files/geoparquet.json b/test/files/geoparquet.json new file mode 100644 index 0000000..8245541 --- /dev/null +++ b/test/files/geoparquet.json @@ -0,0 +1,1611 @@ +[ + [ + 889953, + "Oceania", + "Fiji", + "FJI", + 5496, + { + "coordinates": [ + [ + [ + [180, -16.067132663642447], + [180, -16.555216566639196], + [179.36414266196414, -16.801354076946883], + [178.72505936299711, -17.01204167436804], + [178.59683859511713, -16.639150000000004], + [179.0966093629971, -16.433984277547403], + [179.4135093629971, -16.379054277547404], + [180, -16.067132663642447] + ] + ], + [ + [ + [178.12557, -17.50481], + [178.3736, -17.33992], + [178.71806, -17.62846], + [178.55271, -18.15059], + [177.93266000000003, -18.28799], + [177.38146, -18.16432], + [177.28504, -17.72465], + [177.67087, -17.381140000000002], + [178.12557, -17.50481] + ] + ], + [ + [ + [-179.79332010904864, -16.020882256741224], + [-179.9173693847653, -16.501783135649397], + [-180, -16.555216566639196], + [-180, -16.067132663642447], + [-179.79332010904864, -16.020882256741224] + ] + ] + ], + "type": "MultiPolygon" + }, + { + "xmax": 180, + "xmin": -180, + "ymax": -16.020882256741224, + "ymin": -18.28799 + } + ], + [ + 58005463, + "Africa", + "Tanzania", + "TZA", + 63177, + { + "coordinates": [ + [ + [33.90371119710453, -0.9500000000000001], + [34.07261999999997, -1.0598199999999451], + [37.69868999999994, -3.0969899999999484], + [37.7669, -3.6771200000000004], + [39.20222, -4.67677], + [38.74053999999995, -5.9089499999999475], + [38.79977000000008, -6.475660000000005], + [39.44, -6.839999999999861], + [39.47000000000014, -7.099999999999966], + [39.19468999999998, -7.703899999999976], + [39.25203000000005, -8.00780999999995], + [39.18652000000009, -8.48550999999992], + [39.53574000000009, -9.112369999999885], + [39.94960000000003, -10.098400000000026], + [40.316586229110854, -10.317097752817492], + [40.31659000000002, -10.317099999999868], + [39.52099999999996, -10.89688000000001], + [38.42755659358775, -11.285202325081656], + [37.827639999999974, -11.26878999999991], + [37.471289999999954, -11.568759999999997], + [36.775150994622805, -11.594537448780805], + [36.51408165868426, -11.720938002166735], + [35.31239790216904, -11.439146416879147], + [34.55998904799935, -11.520020033415925], + [34.27999999999997, -10.160000000000025], + [33.940837724096525, -9.693673841980285], + [33.73972000000009, -9.417149999999992], + [32.75937544122132, -9.23059905358906], + [32.19186486179194, -8.930358981973257], + [31.556348097466497, -8.762048841998642], + [31.15775133695005, -8.594578747317366], + [30.740009731422095, -8.34000593035372], + [30.74001549655179, -8.340007419470915], + [30.199996779101696, -7.079980970898163], + [29.620032179490014, -6.520015150583426], + [29.419992710088167, -5.939998874539434], + [29.519986606572928, -5.419978936386315], + [29.339997592900346, -4.4999834122940925], + [29.753512404099865, -4.452389418153302], + [30.11632000000003, -4.090120000000013], + [30.505539999999996, -3.5685799999999404], + [30.752240000000086, -3.3593099999999936], + [30.743010000000027, -3.034309999999948], + [30.527660000000026, -2.807619999999986], + [30.469673645761223, -2.41385475710134], + [30.469670000000008, -2.4138299999999617], + [30.75830895358311, -2.2872502579883687], + [30.816134881317712, -1.6989140763453887], + [30.419104852019245, -1.1346591121504161], + [30.769860000000108, -1.0145499999999856], + [31.866170000000068, -1.0273599999999306], + [33.90371119710453, -0.9500000000000001] + ] + ], + "type": "Polygon" + }, + { + "xmax": 40.31659000000002, + "xmin": 29.339997592900346, + "ymax": -0.9500000000000001, + "ymin": -11.720938002166735 + } + ], + [ + 603253, + "Africa", + "W. Sahara", + "ESH", + 907, + { + "coordinates": [ + [ + [-8.665589565454809, 27.656425889592356], + [-8.665124477564191, 27.589479071558227], + [-8.684399786809053, 27.395744126896005], + [-8.6872936670174, 25.881056219988906], + [-11.96941891117116, 25.933352769468268], + [-11.937224493853321, 23.374594224536168], + [-12.874221564169575, 23.284832261645178], + [-13.118754441774712, 22.771220201096256], + [-12.929101935263532, 21.327070624267563], + [-16.845193650773993, 21.33332347257488], + [-17.06342322434257, 20.999752102130827], + [-17.02042843267577, 21.422310288981578], + [-17.00296179856109, 21.420734157796577], + [-14.750954555713534, 21.500600083903663], + [-14.630832688851072, 21.860939846274903], + [-14.221167771857253, 22.31016307218816], + [-13.891110398809047, 23.691009019459305], + [-12.50096269372537, 24.7701162785782], + [-12.03075883630163, 26.030866197203068], + [-11.718219773800357, 26.104091701760623], + [-11.392554897497007, 26.883423977154393], + [-10.551262579785273, 26.990807603456886], + [-10.189424200877582, 26.860944729107405], + [-9.735343390328879, 26.860944729107405], + [-9.41303748212448, 27.088476060488574], + [-8.794883999049077, 27.120696316022507], + [-8.817828334986672, 27.656425889592356], + [-8.665589565454809, 27.656425889592356] + ] + ], + "type": "Polygon" + }, + { + "xmax": -8.665124477564191, + "xmin": -17.06342322434257, + "ymax": 27.656425889592356, + "ymin": 20.999752102130827 + } + ], + [ + 37589262, + "North America", + "Canada", + "CAN", + 1736425, + { + "coordinates": [ + [ + [ + [-122.84000000000003, 49.000000000000114], + [-122.97421000000001, 49.00253777777778], + [-124.91024, 49.98456], + [-125.62461, 50.416560000000004], + [-127.43561000000001, 50.83061], + [-127.99276, 51.71583], + [-127.85032, 52.32961], + [-129.12979, 52.75538], + [-129.30523, 53.561589999999995], + [-130.51497, 54.28757], + [-130.53610895273684, 54.80275447679924], + [-130.53611, 54.802780000000006], + [-129.98, 55.285000000000004], + [-130.00778000000003, 55.915830000000085], + [-131.70781, 56.55212], + [-132.73042, 57.692890000000006], + [-133.35556000000003, 58.41028000000001], + [-134.27111000000002, 58.86111000000005], + [-134.94500000000005, 59.2705600000001], + [-135.47583, 59.787780000000005], + [-136.47972000000004, 59.46389000000005], + [-137.4525, 58.905], + [-138.34089, 59.562110000000004], + [-139.03900000000002, 60], + [-140.013, 60.27682000000001], + [-140.99778, 60.30639000000001], + [-140.9925, 66.00003000000001], + [-140.986, 69.712], + [-140.98598761037601, 69.71199839952635], + [-139.12052, 69.47102], + [-137.54636000000002, 68.99002], + [-136.50358, 68.89804], + [-135.62576, 69.31512000000001], + [-134.41464000000002, 69.62743], + [-132.92925000000002, 69.50534], + [-131.43135999999998, 69.94451], + [-129.79471, 70.19369], + [-129.10773, 69.77927000000001], + [-128.36156, 70.01286], + [-128.13817, 70.48384], + [-127.44712000000001, 70.37721], + [-125.75632000000002, 69.48058], + [-124.42483, 70.1584], + [-124.28968, 69.39968999999999], + [-123.06108, 69.56372], + [-122.6835, 69.85553], + [-121.47226, 69.79778], + [-119.94288, 69.37786], + [-117.60268, 69.01128], + [-116.22643, 68.84151], + [-115.24690000000001, 68.90591], + [-113.89793999999999, 68.3989], + [-115.30489, 67.90261000000001], + [-113.49727, 67.68815000000001], + [-110.798, 67.80611999999999], + [-109.94619, 67.98104000000001], + [-108.8802, 67.38144], + [-107.79239, 67.88736], + [-108.81299, 68.31164], + [-108.16721000000001, 68.65392], + [-106.95, 68.7], + [-106.15, 68.8], + [-105.34282000000002, 68.56122], + [-104.33791000000001, 68.018], + [-103.22115000000001, 68.09775], + [-101.45433, 67.64689], + [-99.90195, 67.80566], + [-98.4432, 67.78165], + [-98.5586, 68.40394], + [-97.66948000000001, 68.57864000000001], + [-96.11991, 68.23939], + [-96.12588, 67.29338], + [-95.48943, 68.0907], + [-94.685, 68.06383], + [-94.23282000000002, 69.06903000000001], + [-95.30408, 69.68571], + [-96.47131, 70.08976], + [-96.39115, 71.19482], + [-95.2088, 71.92053], + [-93.88997, 71.76015], + [-92.87818, 71.31869], + [-91.51964000000001, 70.19129000000001], + [-92.40692000000001, 69.69997000000001], + [-90.5471, 69.49766], + [-90.55151000000001, 68.47499], + [-89.21515, 69.25873], + [-88.01966, 68.61508], + [-88.31748999999999, 67.87338000000001], + [-87.35017, 67.19872], + [-86.30606999999999, 67.92146], + [-85.57664, 68.78456], + [-85.52197, 69.88211], + [-84.10081000000001, 69.80539], + [-82.62258, 69.65826], + [-81.28043000000001, 69.16202000000001], + [-81.22019999999999, 68.66567], + [-81.96436000000001, 68.13253], + [-81.25928, 67.59716], + [-81.38653000000001, 67.11078], + [-83.34456, 66.41154], + [-84.73542, 66.2573], + [-85.76943, 66.55833], + [-86.06760000000001, 66.05625], + [-87.03143, 65.21297], + [-87.32324, 64.77563], + [-88.48296, 64.09897000000001], + [-89.91444, 64.03273], + [-90.70398, 63.610170000000004], + [-90.77004000000001, 62.960210000000004], + [-91.93342, 62.83508], + [-93.15698, 62.02469000000001], + [-94.24153, 60.89865], + [-94.62930999999999, 60.11021], + [-94.6846, 58.94882], + [-93.21502000000001, 58.78212], + [-92.76462000000001, 57.84571], + [-92.29702999999999, 57.08709], + [-90.89769, 57.28468], + [-89.03953, 56.85172], + [-88.03978000000001, 56.47162], + [-87.32421, 55.999140000000004], + [-86.07121, 55.72383], + [-85.01181000000001, 55.302600000000005], + [-83.36055, 55.24489], + [-82.27285, 55.14832], + [-82.43620000000001, 54.282270000000004], + [-82.12502, 53.27703], + [-81.40075, 52.157880000000006], + [-79.91289, 51.208420000000004], + [-79.14301, 51.533930000000005], + [-78.60191, 52.56208], + [-79.12421, 54.14145], + [-79.82958, 54.66772], + [-78.22874, 55.136449999999996], + [-77.0956, 55.83741], + [-76.54137, 56.53423000000001], + [-76.62319000000001, 57.20263], + [-77.30226, 58.05209], + [-78.51688, 58.80458], + [-77.33676, 59.852610000000006], + [-77.77272, 60.75788000000001], + [-78.10687, 62.31964000000001], + [-77.41067, 62.55053], + [-75.69621000000001, 62.2784], + [-74.6682, 62.181110000000004], + [-73.83988000000001, 62.4438], + [-72.90853, 62.10507], + [-71.67708, 61.52535], + [-71.37369000000001, 61.137170000000005], + [-69.59042, 61.06141], + [-69.62033, 60.221250000000005], + [-69.28790000000001, 58.95736], + [-68.37455, 58.80106], + [-67.64976, 58.21206], + [-66.20178, 58.76731], + [-65.24517, 59.87071], + [-64.58352000000001, 60.33558], + [-63.804750000000006, 59.442600000000006], + [-62.502359999999996, 58.16708], + [-61.396550000000005, 56.96745000000001], + [-61.798660000000005, 56.33945], + [-60.46853, 55.775479999999995], + [-59.56962, 55.20407], + [-57.97508, 54.94549000000001], + [-57.3332, 54.6265], + [-56.93689, 53.780319999999996], + [-56.15811, 53.647490000000005], + [-55.75632, 53.27036], + [-55.68338, 52.146640000000005], + [-56.40916000000001, 51.770700000000005], + [-57.12691, 51.419720000000005], + [-58.77482, 51.0643], + [-60.03309000000001, 50.24277], + [-61.72366, 50.08046], + [-63.86251, 50.29099], + [-65.36331, 50.2982], + [-66.39905, 50.228970000000004], + [-67.23631, 49.511559999999996], + [-68.51114, 49.068360000000006], + [-69.95362, 47.74488], + [-71.10458, 46.82171], + [-70.25522, 46.986059999999995], + [-68.65, 48.3], + [-66.55243, 49.1331], + [-65.05626, 49.232780000000005], + [-64.17099, 48.74248], + [-65.11545000000001, 48.07085], + [-64.79854, 46.99297], + [-64.47219, 46.238490000000006], + [-63.17329000000001, 45.73902], + [-61.520720000000004, 45.883770000000005], + [-60.518150000000006, 47.00793], + [-60.448600000000006, 46.28264], + [-59.80287, 45.9204], + [-61.03988, 45.265249999999995], + [-63.254709999999996, 44.67014], + [-64.24656, 44.265530000000005], + [-65.36406000000001, 43.54523], + [-66.1234, 43.61867], + [-66.16173, 44.46512], + [-64.42549, 45.29204], + [-66.02605000000001, 45.25931], + [-67.13741, 45.13753], + [-67.79134, 45.70281000000001], + [-67.79046000000001, 47.066359999999996], + [-68.23444, 47.354859999999974], + [-68.90500000000003, 47.18500000000006], + [-69.237216, 47.447781], + [-69.99997, 46.69307], + [-70.305, 45.915], + [-70.66, 45.46], + [-71.08482000000004, 45.30524000000014], + [-71.405, 45.254999999999995], + [-71.50506, 45.0082], + [-73.34783, 45.00738], + [-74.86700000000002, 45.000480000000096], + [-75.31821000000001, 44.81645], + [-76.375, 44.09631], + [-76.50000000000001, 44.01845889375865], + [-76.82003414580558, 43.628784288093755], + [-77.7378850979577, 43.62905558936328], + [-78.72027991404235, 43.62508942318493], + [-79.17167355011186, 43.46633942318426], + [-79.01, 43.27], + [-78.92, 42.964999999999996], + [-78.93936214874375, 42.86361135514798], + [-80.24744767934794, 42.36619985612255], + [-81.27774654816716, 42.209025987306816], + [-82.4392777167916, 41.675105088867326], + [-82.69008928092023, 41.675105088867326], + [-83.029810146807, 41.83279572200598], + [-83.14199968131264, 41.975681057292874], + [-83.12, 42.08], + [-82.9, 42.43], + [-82.42999999999999, 42.980000000000004], + [-82.13764238150395, 43.57108755143997], + [-82.33776312543114, 44.440000000000055], + [-82.55092464875821, 45.34751658790543], + [-83.59285071484311, 45.81689362241252], + [-83.46955074739469, 45.994686387712534], + [-83.61613094759059, 46.116926988299014], + [-83.89076534700574, 46.116926988299014], + [-84.0918512641615, 46.27541860613826], + [-84.1421195136734, 46.51222585711571], + [-84.33670000000001, 46.408770000000004], + [-84.60490000000004, 46.439599999999984], + [-84.54374874544584, 46.538684190449146], + [-84.77923824739992, 46.63710195574902], + [-84.8760798815149, 46.90008331968238], + [-85.65236324740341, 47.22021881773051], + [-86.46199083122826, 47.553338019392], + [-87.43979262330028, 47.94], + [-88.37811418328671, 48.302917588893706], + [-89.27291744663665, 48.01980825458281], + [-89.60000000000002, 48.010000000000105], + [-90.83, 48.27], + [-91.64, 48.14], + [-92.61000000000001, 48.44999999999993], + [-93.63087000000002, 48.609260000000006], + [-94.32914000000001, 48.67074], + [-94.64, 48.84], + [-94.81758000000002, 49.38905], + [-95.15609, 49.38425000000001], + [-95.15906950917206, 49], + [-97.2287200000048, 49.0007], + [-100.65000000000003, 49.000000000000114], + [-104.04826000000003, 48.99986000000007], + [-107.05000000000001, 49], + [-110.05000000000001, 49], + [-113, 49], + [-116.04818, 49], + [-117.03121, 49], + [-120, 49.000000000000114], + [-122.84000000000003, 49.000000000000114] + ] + ], + [ + [ + [-83.99367000000001, 62.452799999999996], + [-83.25048, 62.91409], + [-81.87699, 62.90458], + [-81.89825, 62.7108], + [-83.06857000000001, 62.159220000000005], + [-83.77462000000001, 62.18231], + [-83.99367000000001, 62.452799999999996] + ] + ], + [ + [ + [-79.77583312988281, 72.8029022216797], + [-80.87609863281251, 73.33318328857422], + [-80.83388519287111, 73.69318389892578], + [-80.35305786132812, 73.75971984863281], + [-78.06443786621094, 73.65193176269531], + [-76.34, 73.10268498995305], + [-76.25140380859375, 72.82638549804688], + [-77.31443786621094, 72.85554504394531], + [-78.39167022705078, 72.87665557861328], + [-79.4862518310547, 72.74220275878906], + [-79.77583312988281, 72.8029022216797] + ] + ], + [ + [ + [-80.315395, 62.08556500000001], + [-79.92939, 62.3856], + [-79.52002, 62.363710000000005], + [-79.26582, 62.158674999999995], + [-79.65752, 61.63308], + [-80.09956000000001, 61.71810000000001], + [-80.36215, 62.016490000000005], + [-80.315395, 62.08556500000001] + ] + ], + [ + [ + [-93.61275590694046, 74.97999726022438], + [-94.15690873897391, 74.59234650338688], + [-95.60868058956564, 74.66686391875176], + [-96.82093217648455, 74.92762319609658], + [-96.28858740922982, 75.37782827422338], + [-94.85081987178917, 75.64721751576089], + [-93.97774654821797, 75.29648956979595], + [-93.61275590694046, 74.97999726022438] + ] + ], + [ + [ + [-93.84000301794399, 77.51999726023455], + [-94.29560828324529, 77.49134267852868], + [-96.16965410031007, 77.55511139597685], + [-96.43630449093614, 77.83462921824362], + [-94.42257727738641, 77.820004787905], + [-93.7206562975659, 77.63433136668031], + [-93.84000301794399, 77.51999726023455] + ] + ], + [ + [ + [-96.75439876990876, 78.76581268992702], + [-95.5592779202946, 78.41831452098033], + [-95.83029496944934, 78.05694122996324], + [-97.30984290239799, 77.85059723582181], + [-98.12428931353404, 78.08285696075761], + [-98.55286780474668, 78.45810537384507], + [-98.63198442258553, 78.87193024363837], + [-97.33723141151266, 78.83198436147676], + [-96.75439876990876, 78.76581268992702] + ] + ], + [ + [ + [-88.15035030796028, 74.39230703398503], + [-89.7647220527584, 74.51555532500116], + [-92.42244096552946, 74.83775788034099], + [-92.76828548864282, 75.38681997344214], + [-92.88990597204175, 75.88265534128267], + [-93.89382402217599, 76.31924367950056], + [-95.9624574450358, 76.4413809272224], + [-97.1213789538295, 76.7510777859476], + [-96.74512285031237, 77.16138865834507], + [-94.68408586299944, 77.09787832305837], + [-93.57392106807313, 76.77629588490605], + [-91.6050231595366, 76.7785179714946], + [-90.7418458727493, 76.44959747995681], + [-90.96966142450802, 76.07401317005947], + [-89.82223792189926, 75.84777374948565], + [-89.18708289259985, 75.61016551380762], + [-87.83827633334965, 75.56618886992725], + [-86.37919226758864, 75.4824213731821], + [-84.78962521029058, 75.69920400664653], + [-82.75344458691006, 75.78431509063124], + [-81.12853084992436, 75.71398346628199], + [-80.05751095245915, 75.33684886341591], + [-79.83393286814837, 74.92312734648716], + [-80.45777075877587, 74.65730377877777], + [-81.94884253612557, 74.44245901152432], + [-83.22889360221143, 74.56402781849094], + [-86.09745235873332, 74.41003205026117], + [-88.15035030796028, 74.39230703398503] + ] + ], + [ + [ + [-111.26444332563088, 78.15295604116154], + [-109.85445187054711, 77.99632477488488], + [-110.18693803591302, 77.69701487905034], + [-112.0511911690585, 77.4092288276169], + [-113.53427893761912, 77.73220652944111], + [-112.7245867582539, 78.05105011668196], + [-111.26444332563088, 78.15295604116154] + ] + ], + [ + [ + [-110.96366065147602, 78.8044408230652], + [-109.6631457182026, 78.60197256134565], + [-110.88131425661892, 78.40691986765997], + [-112.54209143761516, 78.4079017198735], + [-112.52589087609164, 78.55055451121522], + [-111.5000103422334, 78.8499935981305], + [-110.96366065147602, 78.8044408230652] + ] + ], + [ + [ + [-55.600218268442056, 51.31707469339794], + [-56.13403581401709, 50.68700979267928], + [-56.795881720595276, 49.81230866149089], + [-56.14310502788433, 50.15011749938286], + [-55.471492275603, 49.93581533466846], + [-55.82240108908096, 49.58712860777905], + [-54.935142584845636, 49.3130109726868], + [-54.473775397343786, 49.556691189159125], + [-53.47654944519137, 49.24913890237404], + [-53.786013759971254, 48.516780503933624], + [-53.08613399922626, 48.68780365660358], + [-52.958648240762216, 48.15716421161447], + [-52.64809872090421, 47.53554840757552], + [-53.069158291218386, 46.65549876564492], + [-53.521456264853, 46.61829173439477], + [-54.17893551290251, 46.80706574155698], + [-53.9618686590605, 47.62520701760193], + [-54.24048214376214, 47.752279364607645], + [-55.40077307801157, 46.884993801453135], + [-55.99748084168583, 46.919720363953275], + [-55.29121904155279, 47.38956248635099], + [-56.250798712780586, 47.632545070987376], + [-57.32522925477708, 47.57280711525797], + [-59.26601518414682, 47.60334788674247], + [-59.419494188053676, 47.899453843774886], + [-58.79658647320744, 48.25152537697942], + [-59.23162451845657, 48.52318838153781], + [-58.3918049790652, 49.12558055276418], + [-57.35868974468606, 50.71827403421587], + [-56.738650071832026, 51.28743825947855], + [-55.87097693543532, 51.63209422464921], + [-55.40697424988659, 51.5882726100657], + [-55.600218268442056, 51.31707469339794] + ] + ], + [ + [ + [-83.88262630891977, 65.10961782496354], + [-82.78757687043883, 64.76669302027467], + [-81.6420137193926, 64.45513580998697], + [-81.55344031444432, 63.97960928003714], + [-80.81736121287886, 64.057485663501], + [-80.10345130076664, 63.72598135034862], + [-80.99101986359572, 63.41124603947496], + [-82.54717810741704, 63.65172231714521], + [-83.10879757356511, 64.10187571883971], + [-84.10041663281388, 63.569711819098], + [-85.52340471061905, 63.052379055424055], + [-85.8667687649824, 63.63725291610349], + [-87.22198320183678, 63.54123810490519], + [-86.35275977247133, 64.0358332383707], + [-86.2248864407651, 64.82291697860823], + [-85.88384782585486, 65.7387783881171], + [-85.1613079495499, 65.6572846543928], + [-84.97576371940592, 65.21751821558898], + [-84.4640120104195, 65.37177236598022], + [-83.88262630891977, 65.10961782496354] + ] + ], + [ + [ + [-78.77063859731078, 72.35217316353418], + [-77.8246239895596, 72.74961660429098], + [-75.60584469267573, 72.2436784939374], + [-74.228616095665, 71.76714427355789], + [-74.09914079455771, 71.33084015571758], + [-72.24222571479768, 71.55692454699452], + [-71.20001542833518, 70.92001251899718], + [-68.7860542466849, 70.52502370877427], + [-67.91497046575694, 70.12194753689765], + [-66.9690333726542, 69.18608734809182], + [-68.8051228502006, 68.72019847276444], + [-66.4498660956339, 68.06716339789203], + [-64.86231441919524, 67.84753856065159], + [-63.424934454996794, 66.92847321234059], + [-61.851981370680605, 66.86212067327783], + [-62.16317684594226, 66.16025136988962], + [-63.918444383384184, 64.9986685248329], + [-65.14886023625368, 65.42603261988667], + [-66.72121904159852, 66.38804108343219], + [-68.015016038674, 66.26272573512439], + [-68.1412874009792, 65.68978913030439], + [-67.08964616562342, 65.10845510523696], + [-65.73208045109976, 64.64840566675856], + [-65.32016760930125, 64.38273712834605], + [-64.66940629744968, 63.392926744227495], + [-65.01380388045888, 62.67418508569598], + [-66.27504472519048, 62.94509878198612], + [-68.7831862046927, 63.74567007105183], + [-67.36968075221309, 62.88396556258484], + [-66.32829728866726, 62.28007477482201], + [-66.16556820338015, 61.93089712182582], + [-68.87736650254465, 62.330149237712824], + [-71.02343705919385, 62.91070811629588], + [-72.23537858751902, 63.39783600529522], + [-71.88627844917127, 63.67998932560887], + [-73.37830624051838, 64.19396312118384], + [-74.83441891142263, 64.6790756293238], + [-74.81850257027673, 64.38909332951793], + [-77.70997982452008, 64.22954234481678], + [-78.5559488593542, 64.57290639918013], + [-77.89728105336198, 65.30919220647475], + [-76.01827429879717, 65.32696889918314], + [-73.95979529488268, 65.45476471624094], + [-74.29388342964964, 65.81177134872938], + [-73.94491248238262, 66.31057811142666], + [-72.65116716173942, 67.28457550726391], + [-72.92605994331605, 67.72692576768235], + [-73.31161780464572, 68.06943716091287], + [-74.84330725777684, 68.55462718370127], + [-76.86910091826672, 68.89473562283025], + [-76.22864905465738, 69.14776927354741], + [-77.28736996123715, 69.76954010688321], + [-78.1686339993266, 69.82648753526887], + [-78.95724219431673, 70.16688019477543], + [-79.49245500356366, 69.87180776638884], + [-81.30547095409176, 69.74318512641436], + [-84.94470618359851, 69.96663401964442], + [-87.06000342481789, 70.26000112576538], + [-88.68171322300148, 70.4107412787608], + [-89.51341956252303, 70.76203766548095], + [-88.46772111688082, 71.21818553332132], + [-89.88815121128755, 71.22255219184997], + [-90.20516028518205, 72.23507436796079], + [-89.436576707705, 73.12946421985238], + [-88.40824154331287, 73.53788890247121], + [-85.82615108920098, 73.80381582304518], + [-86.56217851433412, 73.15744700793844], + [-85.77437130404454, 72.53412588163387], + [-84.85011247428822, 73.34027822538708], + [-82.31559017610101, 73.7509508328106], + [-80.60008765330768, 72.71654368762417], + [-80.74894161652443, 72.06190664335072], + [-78.77063859731078, 72.35217316353418] + ] + ], + [ + [ + [-94.50365759965237, 74.13490672473922], + [-92.42001217321173, 74.1000251329422], + [-90.50979285354263, 73.85673248971206], + [-92.00396521682987, 72.96624420845852], + [-93.19629553910026, 72.77199249947334], + [-94.26904659704726, 72.02459625923599], + [-95.40985551632266, 72.06188080513458], + [-96.03374508338244, 72.94027680123183], + [-96.01826799191102, 73.43742991809582], + [-95.49579342322404, 73.86241689726417], + [-94.50365759965237, 74.13490672473922] + ] + ], + [ + [ + [-122.85492448615902, 76.11654287383568], + [-122.85492529360326, 76.11654287383568], + [-121.15753536032824, 76.86450755482828], + [-119.1039389718211, 77.51221995717462], + [-117.570130784966, 77.4983189968881], + [-116.19858659550738, 77.6452867703262], + [-116.33581336145845, 76.87696157501061], + [-117.10605058476882, 76.53003184681911], + [-118.04041215703819, 76.48117178008714], + [-119.89931758688572, 76.053213406062], + [-121.49999507712648, 75.90001862253276], + [-122.85492448615902, 76.11654287383568] + ] + ], + [ + [ + [-132.71000788443126, 54.04000931542356], + [-131.74998958400334, 54.12000438090922], + [-132.049480347351, 52.98462148702447], + [-131.1790425218266, 52.180432847698285], + [-131.57782954982298, 52.18237071390928], + [-132.18042842677852, 52.639707139692405], + [-132.54999243231384, 53.100014960332146], + [-133.05461117875552, 53.411468817755406], + [-133.2396644827927, 53.851080227262344], + [-133.1800040417117, 54.169975490935315], + [-132.71000788443126, 54.04000931542356] + ] + ], + [ + [ + [-105.4922891914932, 79.30159393992916], + [-103.52928239623795, 79.16534902619163], + [-100.8251580472688, 78.80046173777872], + [-100.0601918200522, 78.32475434031589], + [-99.67093909381364, 77.90754466420744], + [-101.30394019245301, 78.01898489044486], + [-102.94980872273302, 78.34322866486023], + [-105.17613277873151, 78.3803323432458], + [-104.21042945027713, 78.67742015249176], + [-105.41958045125853, 78.91833567983649], + [-105.4922891914932, 79.30159393992916] + ] + ], + [ + [ + [-123.51000158755119, 48.51001089130341], + [-124.01289078839955, 48.37084625914139], + [-125.65501277733838, 48.8250045843385], + [-125.95499446679275, 49.17999583596759], + [-126.85000443587185, 49.53000031188043], + [-127.02999344954443, 49.81499583597008], + [-128.0593363043662, 49.9949590114266], + [-128.44458410710214, 50.539137681676095], + [-128.35841365625546, 50.77064809834371], + [-127.30858109602994, 50.552573554071955], + [-126.69500097721235, 50.400903225295394], + [-125.7550066738232, 50.29501821552935], + [-125.4150015875588, 49.95000051533259], + [-124.92076818911934, 49.475274970083376], + [-123.92250870832106, 49.06248362893581], + [-123.51000158755119, 48.51001089130341] + ] + ], + [ + [ + [-121.53787999999997, 74.44893000000002], + [-120.10978, 74.24135000000001], + [-117.55563999999993, 74.18576999999993], + [-116.58442000000002, 73.89607000000007], + [-115.51080999999999, 73.47519], + [-116.76793999999995, 73.22291999999999], + [-119.22000000000003, 72.51999999999998], + [-120.45999999999998, 71.82000000000005], + [-120.45999999999998, 71.38360179308756], + [-123.09218999999996, 70.90164000000004], + [-123.62, 71.34000000000009], + [-125.92894873747338, 71.86868846301138], + [-125.49999999999994, 72.29226081179502], + [-124.80729000000002, 73.02255999999994], + [-123.93999999999994, 73.68000000000012], + [-124.91774999999996, 74.29275000000013], + [-121.53787999999997, 74.44893000000002] + ] + ], + [ + [ + [-107.81943000000001, 75.84552000000001], + [-106.92893000000001, 76.01282], + [-105.881, 75.96940000000001], + [-105.70498, 75.47951], + [-106.31347000000001, 75.00527], + [-109.70000000000002, 74.85000000000001], + [-112.22306999999999, 74.41696], + [-113.74381, 74.39427], + [-113.87135, 74.72029], + [-111.79420999999999, 75.16250000000001], + [-116.31221, 75.04343], + [-117.7104, 75.2222], + [-116.34602000000001, 76.19903000000001], + [-115.40487, 76.47887], + [-112.59056000000001, 76.14134], + [-110.81422, 75.54919], + [-109.06710000000001, 75.47321000000001], + [-110.49726000000001, 76.42982], + [-109.58109999999999, 76.79417], + [-108.54858999999999, 76.67832000000001], + [-108.21141, 76.20168000000001], + [-107.81943000000001, 75.84552000000001] + ] + ], + [ + [ + [-106.52258999999992, 73.07601], + [-105.40245999999996, 72.67259000000007], + [-104.77484000000004, 71.6984000000001], + [-104.4647599999999, 70.99297000000007], + [-102.78537, 70.49776000000003], + [-100.98077999999992, 70.02431999999999], + [-101.08928999999995, 69.58447000000012], + [-102.73115999999993, 69.50402000000003], + [-102.09329000000002, 69.11962000000011], + [-102.43024000000003, 68.75281999999999], + [-104.24000000000001, 68.91000000000008], + [-105.96000000000004, 69.18000000000012], + [-107.12254000000001, 69.11922000000004], + [-108.99999999999994, 68.78000000000003], + [-111.53414887520017, 68.63005915681794], + [-113.31320000000005, 68.53553999999997], + [-113.85495999999989, 69.00744000000009], + [-115.22000000000003, 69.28000000000009], + [-116.10793999999999, 69.16821000000004], + [-117.34000000000003, 69.9600000000001], + [-116.67472999999995, 70.06655], + [-115.13112000000001, 70.23730000000006], + [-113.72140999999999, 70.1923700000001], + [-112.41610000000003, 70.36637999999999], + [-114.35000000000002, 70.60000000000002], + [-116.48684000000003, 70.52044999999998], + [-117.90480000000002, 70.54056000000014], + [-118.43238000000002, 70.90920000000006], + [-116.11311, 71.30917999999997], + [-117.65567999999996, 71.29520000000002], + [-119.40199000000001, 71.55858999999998], + [-118.56266999999997, 72.30785000000003], + [-117.86641999999995, 72.70594000000006], + [-115.18909000000002, 73.31459000000012], + [-114.16716999999994, 73.1214500000001], + [-114.66633999999999, 72.65277000000009], + [-112.44101999999992, 72.95540000000011], + [-111.05039, 72.45040000000006], + [-109.92034999999993, 72.96113000000008], + [-109.00653999999997, 72.63335000000001], + [-108.18834999999996, 71.65089], + [-107.68599, 72.0654800000001], + [-108.39639, 73.08953000000008], + [-107.51645000000002, 73.23597999999998], + [-106.52258999999992, 73.07601] + ] + ], + [ + [ + [-100.43836, 72.70588000000001], + [-101.54, 73.36], + [-100.35642000000001, 73.84389], + [-99.16387, 73.63339], + [-97.38, 73.76], + [-97.12, 73.47], + [-98.05359, 72.99052], + [-96.54, 72.56], + [-96.72000000000001, 71.66], + [-98.35966, 71.27284999999999], + [-99.32286, 71.35639], + [-100.01482, 71.73827], + [-102.5, 72.51], + [-102.48000000000002, 72.83000000000001], + [-100.43836, 72.70588000000001] + ] + ], + [ + [ + [-106.6, 73.60000000000001], + [-105.26, 73.64], + [-104.5, 73.42], + [-105.38000000000001, 72.76], + [-106.94, 73.46000000000001], + [-106.6, 73.60000000000001] + ] + ], + [ + [ + [-98.50000000000001, 76.72], + [-97.735585, 76.25656000000001], + [-97.70441500000001, 75.74344], + [-98.16000000000001, 75], + [-99.80874, 74.89744], + [-100.88365999999999, 75.05736], + [-100.86292000000002, 75.64075], + [-102.50209, 75.5638], + [-102.56552, 76.3366], + [-101.48973, 76.30537], + [-99.98349, 76.64634], + [-98.57699, 76.58859], + [-98.50000000000001, 76.72] + ] + ], + [ + [ + [-96.01644, 80.60233000000001], + [-95.32345000000001, 80.90729], + [-94.29843, 80.97727], + [-94.73542, 81.20646000000002], + [-92.40983999999999, 81.25739000000003], + [-91.13288999999999, 80.72345000000003], + [-89.45000000000002, 80.50932203389831], + [-87.81, 80.32000000000001], + [-87.02000000000001, 79.66000000000001], + [-85.81435, 79.3369], + [-87.18755999999999, 79.0393], + [-89.03535000000001, 78.28723], + [-90.80436, 78.21533000000001], + [-92.87669000000001, 78.34333000000001], + [-93.95116000000002, 78.75099], + [-93.93574, 79.11373], + [-93.14524, 79.3801], + [-94.974, 79.37248], + [-96.07614000000001, 79.70502], + [-96.70972, 80.15777], + [-96.01644, 80.60233000000001] + ] + ], + [ + [ + [-91.58702000000001, 81.89429000000001], + [-90.10000000000001, 82.08500000000004], + [-88.93227, 82.11751000000001], + [-86.97024, 82.27961], + [-85.5, 82.65227345805702], + [-84.260005, 82.60000000000001], + [-83.18, 82.32], + [-82.42, 82.86000000000001], + [-81.1, 83.02], + [-79.30664, 83.13056], + [-76.25, 83.17205882352941], + [-75.71878000000001, 83.06404000000002], + [-72.83153, 83.23324000000001], + [-70.66576500000001, 83.16978075838284], + [-68.50000000000001, 83.10632151676572], + [-65.82735, 83.02801000000001], + [-63.68, 82.9], + [-61.85, 82.62860000000002], + [-61.89388, 82.36165000000001], + [-64.334, 81.92775000000002], + [-66.75342, 81.72527000000001], + [-67.65755, 81.50141], + [-65.48031, 81.50657000000002], + [-67.84, 80.90000000000003], + [-69.4697, 80.61683000000001], + [-71.18, 79.8], + [-73.2428, 79.63415], + [-73.88000000000001, 79.43016220480206], + [-76.90773, 79.32309000000001], + [-75.52924, 79.19766000000001], + [-76.22046, 79.01907], + [-75.39345, 78.52581], + [-76.34354, 78.18296000000001], + [-77.88851000000001, 77.89991], + [-78.36269, 77.50859000000001], + [-79.75951, 77.20967999999999], + [-79.61965000000001, 76.98336], + [-77.91089000000001, 77.022045], + [-77.88911, 76.777955], + [-80.56125, 76.17812], + [-83.17439, 76.45403], + [-86.11184, 76.29901000000001], + [-87.60000000000001, 76.42], + [-89.49068, 76.47239], + [-89.6161, 76.95213000000001], + [-87.76739, 77.17833], + [-88.26, 77.9], + [-87.65, 77.97022222222223], + [-84.97634, 77.53873], + [-86.34, 78.18], + [-87.96191999999999, 78.37181], + [-87.15198000000001, 78.75867], + [-85.37868, 78.99690000000001], + [-85.09495, 79.34543000000001], + [-86.50734, 79.73624], + [-86.93179, 80.25145], + [-84.19844, 80.20836], + [-83.40869565217389, 80.10000000000001], + [-81.84823, 80.46442], + [-84.1, 80.58], + [-87.59895, 80.51627], + [-89.36663, 80.85569000000001], + [-90.2, 81.26], + [-91.36786000000001, 81.5531], + [-91.58702000000001, 81.89429000000001] + ] + ], + [ + [ + [-75.21597, 67.44425], + [-75.86588, 67.14886], + [-76.98687, 67.09873], + [-77.2364, 67.58809000000001], + [-76.81166, 68.14856], + [-75.89521, 68.28721], + [-75.11449999999999, 68.01035999999999], + [-75.10333, 67.58202], + [-75.21597, 67.44425] + ] + ], + [ + [ + [-96.25740120380055, 69.49003035832177], + [-95.64768120380054, 69.10769035832178], + [-96.26952120380055, 68.75704035832177], + [-97.61740120380055, 69.06003035832177], + [-98.43180120380055, 68.95070035832177], + [-99.79740120380055, 69.40003035832177], + [-98.91740120380055, 69.71003035832177], + [-98.21826120380055, 70.14354035832177], + [-97.15740120380055, 69.86003035832177], + [-96.55740120380055, 69.68003035832177], + [-96.25740120380055, 69.49003035832177] + ] + ], + [ + [ + [-64.51912, 49.87304], + [-64.17322, 49.95718], + [-62.858290000000004, 49.70641], + [-61.835584999999995, 49.28855], + [-61.806304999999995, 49.10506000000001], + [-62.29318, 49.08717], + [-63.589259999999996, 49.400690000000004], + [-64.51912, 49.87304] + ] + ], + [ + [ + [-64.01486, 47.03601], + [-63.6645, 46.55001], + [-62.9393, 46.41587], + [-62.012080000000005, 46.44314], + [-62.503910000000005, 46.033390000000004], + [-62.87433, 45.968180000000004], + [-64.14280000000001, 46.39265], + [-64.39261, 46.72747], + [-64.01486, 47.03601] + ] + ] + ], + "type": "MultiPolygon" + }, + { + "xmax": -52.64809872090421, + "xmin": -140.99778, + "ymax": 83.23324000000001, + "ymin": 41.675105088867326 + } + ], + [ + 328239523, + "North America", + "United States of America", + "USA", + 21433226, + { + "coordinates": [ + [ + [ + [-122.84000000000003, 49.000000000000114], + [-120, 49.000000000000114], + [-117.03121, 49], + [-116.04818, 49], + [-113, 49], + [-110.05000000000001, 49], + [-107.05000000000001, 49], + [-104.04826000000003, 48.99986000000007], + [-100.65000000000003, 49.000000000000114], + [-97.2287200000048, 49.0007], + [-95.15906950917206, 49], + [-95.15609, 49.38425000000001], + [-94.81758000000002, 49.38905], + [-94.64, 48.84], + [-94.32914000000001, 48.67074], + [-93.63087000000002, 48.609260000000006], + [-92.61000000000001, 48.44999999999993], + [-91.64, 48.14], + [-90.83, 48.27], + [-89.60000000000002, 48.010000000000105], + [-89.27291744663665, 48.01980825458281], + [-88.37811418328671, 48.302917588893706], + [-87.43979262330028, 47.94], + [-86.46199083122826, 47.553338019392], + [-85.65236324740341, 47.22021881773051], + [-84.8760798815149, 46.90008331968238], + [-84.77923824739992, 46.63710195574902], + [-84.54374874544584, 46.538684190449146], + [-84.60490000000004, 46.439599999999984], + [-84.33670000000001, 46.408770000000004], + [-84.1421195136734, 46.51222585711571], + [-84.0918512641615, 46.27541860613826], + [-83.89076534700574, 46.116926988299014], + [-83.61613094759059, 46.116926988299014], + [-83.46955074739469, 45.994686387712534], + [-83.59285071484311, 45.81689362241252], + [-82.55092464875821, 45.34751658790543], + [-82.33776312543114, 44.440000000000055], + [-82.13764238150395, 43.57108755143997], + [-82.42999999999999, 42.980000000000004], + [-82.9, 42.43], + [-83.12, 42.08], + [-83.14199968131264, 41.975681057292874], + [-83.029810146807, 41.83279572200598], + [-82.69008928092023, 41.675105088867326], + [-82.4392777167916, 41.675105088867326], + [-81.27774654816716, 42.209025987306816], + [-80.24744767934794, 42.36619985612255], + [-78.93936214874375, 42.86361135514798], + [-78.92, 42.964999999999996], + [-79.01, 43.27], + [-79.17167355011186, 43.46633942318426], + [-78.72027991404235, 43.62508942318493], + [-77.7378850979577, 43.62905558936328], + [-76.82003414580558, 43.628784288093755], + [-76.50000000000001, 44.01845889375865], + [-76.375, 44.09631], + [-75.31821000000001, 44.81645], + [-74.86700000000002, 45.000480000000096], + [-73.34783, 45.00738], + [-71.50506, 45.0082], + [-71.405, 45.254999999999995], + [-71.08482000000004, 45.30524000000014], + [-70.66, 45.46], + [-70.305, 45.915], + [-69.99997, 46.69307], + [-69.237216, 47.447781], + [-68.90500000000003, 47.18500000000006], + [-68.23444, 47.354859999999974], + [-67.79046000000001, 47.066359999999996], + [-67.79134, 45.70281000000001], + [-67.13741, 45.13753], + [-66.96465999999998, 44.809700000000134], + [-68.03251999999998, 44.325199999999995], + [-69.05999999999995, 43.980000000000075], + [-70.11616999999995, 43.68405000000013], + [-70.64547563341102, 43.09023834896402], + [-70.81488999999999, 42.865299999999934], + [-70.82499999999999, 42.33499999999998], + [-70.49499999999995, 41.80500000000001], + [-70.07999999999998, 41.78000000000003], + [-70.185, 42.145000000000095], + [-69.88496999999995, 41.92283000000009], + [-69.96502999999996, 41.63717000000014], + [-70.63999999999999, 41.47500000000002], + [-71.12039000000004, 41.49445000000014], + [-71.8599999999999, 41.32000000000005], + [-72.29500000000002, 41.26999999999998], + [-72.87643000000003, 41.220650000000035], + [-73.71000000000004, 40.93110235165449], + [-72.24125999999995, 41.119480000000124], + [-71.94499999999988, 40.930000000000064], + [-73.34499999999997, 40.63000000000005], + [-73.98200000000003, 40.62799999999993], + [-73.95232499999997, 40.75075000000004], + [-74.25671, 40.47351000000003], + [-73.96243999999996, 40.42763000000002], + [-74.17838, 39.70925999999997], + [-74.90603999999996, 38.93954000000002], + [-74.98041, 39.19640000000004], + [-75.20002, 39.248450000000105], + [-75.52805000000001, 39.49850000000009], + [-75.32, 38.960000000000036], + [-75.07183476478986, 38.782032230179254], + [-75.05672999999996, 38.40412000000009], + [-75.37746999999996, 38.015510000000006], + [-75.94022999999999, 37.21689000000009], + [-76.03126999999995, 37.25659999999999], + [-75.72204999999985, 37.93705000000011], + [-76.23286999999999, 38.319214999999986], + [-76.35000000000002, 39.14999999999998], + [-76.54272499999996, 38.71761500000008], + [-76.32933000000003, 38.08326000000005], + [-76.98999793161352, 38.23999176691336], + [-76.30161999999996, 37.91794499999992], + [-76.25873999999999, 36.96640000000008], + [-75.97179999999997, 36.89726000000002], + [-75.8680399999999, 36.55125000000004], + [-75.72748999999999, 35.55074000000013], + [-76.36318, 34.80854000000011], + [-77.39763499999992, 34.512009999999975], + [-78.05496, 33.92547000000002], + [-78.55434999999989, 33.86133000000012], + [-79.06067000000002, 33.493949999999984], + [-79.20357000000001, 33.158390000000054], + [-80.30132499999996, 32.509355000000085], + [-80.86498, 32.033300000000054], + [-81.33629000000002, 31.44049000000001], + [-81.49041999999997, 30.7299900000001], + [-81.31371000000001, 30.035520000000076], + [-80.97999999999996, 29.18000000000012], + [-80.53558499999991, 28.472129999999993], + [-80.52999999999986, 28.040000000000077], + [-80.05653928497759, 26.88000000000011], + [-80.08801499999998, 26.205764999999985], + [-80.13155999999992, 25.816775000000064], + [-80.38103000000001, 25.20616000000001], + [-80.67999999999995, 25.08000000000004], + [-81.17212999999998, 25.201260000000104], + [-81.33000000000004, 25.639999999999986], + [-81.70999999999987, 25.870000000000005], + [-82.23999999999995, 26.730000000000132], + [-82.70515, 27.495040000000074], + [-82.85525999999999, 27.886240000000043], + [-82.64999999999998, 28.550000000000125], + [-82.92999999999995, 29.10000000000008], + [-83.70958999999999, 29.936560000000043], + [-84.09999999999997, 30.09000000000009], + [-85.10881999999998, 29.636150000000043], + [-85.28784000000002, 29.68612000000013], + [-85.7731, 30.152610000000095], + [-86.39999999999992, 30.40000000000009], + [-87.53035999999992, 30.27433000000002], + [-88.41781999999995, 30.384900000000016], + [-89.1804899999999, 30.315980000000025], + [-89.5938311784198, 30.159994004836847], + [-89.41373499999997, 29.89418999999998], + [-89.43, 29.488639999999975], + [-89.21767, 29.291080000000022], + [-89.40822999999995, 29.159610000000043], + [-89.77927999999997, 29.307140000000118], + [-90.15463, 29.11743000000007], + [-90.88022499999994, 29.148535000000095], + [-91.62678499999993, 29.677000000000135], + [-92.49905999999999, 29.552300000000002], + [-93.22636999999997, 29.783750000000055], + [-93.84841999999998, 29.71363000000008], + [-94.69, 29.480000000000132], + [-95.60025999999999, 28.738630000000057], + [-96.59403999999995, 28.307480000000055], + [-97.13999999999987, 27.83000000000004], + [-97.36999999999995, 27.380000000000052], + [-97.37999999999994, 26.690000000000055], + [-97.32999999999998, 26.210000000000093], + [-97.13999999999987, 25.870000000000005], + [-97.52999999999992, 25.84000000000009], + [-98.23999999999995, 26.06000000000006], + [-99.01999999999992, 26.37000000000006], + [-99.30000000000001, 26.840000000000032], + [-99.51999999999992, 27.54000000000002], + [-100.10999999999996, 28.110000000000127], + [-100.45584000000002, 28.69612000000012], + [-100.95759999999996, 29.380710000000136], + [-101.66239999999999, 29.77930000000009], + [-102.48000000000002, 29.75999999999999], + [-103.11000000000001, 28.970000000000027], + [-103.94, 29.27000000000004], + [-104.4569699999999, 29.571960000000047], + [-104.70574999999997, 30.121730000000014], + [-105.03737000000001, 30.644019999999955], + [-105.63159000000002, 31.08383000000009], + [-106.1429, 31.399950000000047], + [-106.50758999999988, 31.754520000000014], + [-108.24000000000001, 31.754853718166373], + [-108.24193999999994, 31.342220000000054], + [-109.03500000000003, 31.341940000000136], + [-111.02361000000002, 31.334719999999948], + [-113.30498, 32.03914000000009], + [-114.815, 32.52528000000001], + [-114.72138999999993, 32.72082999999992], + [-115.99134999999995, 32.61239000000012], + [-117.12775999999985, 32.53533999999996], + [-117.29593769127393, 33.04622461520387], + [-117.94400000000002, 33.621236431201396], + [-118.41060227589753, 33.74090922312445], + [-118.51989482279976, 34.02778157757575], + [-119.08100000000002, 34.07799999999992], + [-119.43884064201671, 34.34847717828427], + [-120.36777999999998, 34.447110000000066], + [-120.62286, 34.60854999999998], + [-120.74432999999999, 35.15686000000011], + [-121.71456999999992, 36.161529999999914], + [-122.54746999999998, 37.551760000000115], + [-122.51201000000003, 37.78339000000011], + [-122.95319, 38.11371000000008], + [-123.72720000000004, 38.95166000000012], + [-123.86516999999998, 39.76699000000008], + [-124.39807000000002, 40.313199999999995], + [-124.17885999999999, 41.142020000000116], + [-124.21370000000002, 41.99964000000011], + [-124.53283999999996, 42.7659900000001], + [-124.14213999999998, 43.708380000000034], + [-124.020535, 44.615894999999966], + [-123.89892999999995, 45.52341000000007], + [-124.079635, 46.864750000000015], + [-124.39566999999994, 47.72017000000011], + [-124.68721008300781, 48.18443298339855], + [-124.56610107421875, 48.37971496582037], + [-123.12, 48.04000000000002], + [-122.58735999999993, 47.09600000000006], + [-122.34000000000003, 47.360000000000014], + [-122.5, 48.180000000000064], + [-122.84000000000003, 49.000000000000114] + ] + ], + [ + [ + [-155.40214, 20.07975], + [-155.22452, 19.99302], + [-155.06226, 19.8591], + [-154.80741, 19.50871], + [-154.83147, 19.453280000000003], + [-155.22217, 19.23972], + [-155.54211, 19.08348], + [-155.68817, 18.91619], + [-155.93665, 19.05939], + [-155.90806, 19.33888], + [-156.07347000000001, 19.70294], + [-156.02368, 19.81422], + [-155.85008000000002, 19.97729], + [-155.91907, 20.17395], + [-155.86108000000002, 20.267210000000002], + [-155.78505, 20.2487], + [-155.40214, 20.07975] + ] + ], + [ + [ + [-155.99566000000002, 20.76404], + [-156.07926, 20.643970000000003], + [-156.41445, 20.57241], + [-156.58673, 20.783], + [-156.70167, 20.8643], + [-156.71054999999998, 20.92676], + [-156.61258, 21.01249], + [-156.25711, 20.917450000000002], + [-155.99566000000002, 20.76404] + ] + ], + [ + [ + [-156.75824, 21.176840000000002], + [-156.78933, 21.068730000000002], + [-157.32521, 21.097770000000004], + [-157.25027, 21.219579999999997], + [-156.75824, 21.176840000000002] + ] + ], + [ + [ + [-158.0252, 21.71696], + [-157.94161, 21.65272], + [-157.65283000000002, 21.322170000000003], + [-157.70703, 21.26442], + [-157.7786, 21.27729], + [-158.12667000000002, 21.31244], + [-158.2538, 21.53919], + [-158.29265, 21.57912], + [-158.0252, 21.71696] + ] + ], + [ + [ + [-159.36569, 22.21494], + [-159.34512, 21.982000000000003], + [-159.46372, 21.88299], + [-159.80051, 22.065330000000003], + [-159.74877, 22.1382], + [-159.5962, 22.236179999999997], + [-159.36569, 22.21494] + ] + ], + [ + [ + [-166.46779212142462, 60.384169826897754], + [-165.67442969466364, 60.29360687930625], + [-165.57916419173358, 59.90998688418753], + [-166.19277014876727, 59.75444082298899], + [-166.84833736882197, 59.941406155020985], + [-167.45527706609008, 60.21306915957936], + [-166.46779212142462, 60.384169826897754] + ] + ], + [ + [ + [-153.22872941792113, 57.96896841087248], + [-152.56479061583514, 57.901427313866996], + [-152.1411472239064, 57.591058661522], + [-153.00631405333692, 57.11584219016593], + [-154.0050902984581, 56.734676825581076], + [-154.51640275777004, 56.99274892844669], + [-154.67099280497118, 57.46119578717253], + [-153.7627795074415, 57.81657461204373], + [-153.22872941792113, 57.96896841087248] + ] + ], + [ + [ + [-140.98598761037601, 69.71199839952635], + [-140.986, 69.712], + [-140.9925, 66.00003000000001], + [-140.99778, 60.30639000000001], + [-140.013, 60.27682000000001], + [-139.03900000000002, 60], + [-138.34089, 59.562110000000004], + [-137.4525, 58.905], + [-136.47972000000004, 59.46389000000005], + [-135.47583, 59.787780000000005], + [-134.94500000000005, 59.2705600000001], + [-134.27111000000002, 58.86111000000005], + [-133.35556000000003, 58.41028000000001], + [-132.73042, 57.692890000000006], + [-131.70781, 56.55212], + [-130.00778000000003, 55.915830000000085], + [-129.98, 55.285000000000004], + [-130.53611, 54.802780000000006], + [-130.53610895273684, 54.80275447679924], + [-130.5361101894673, 54.8027534043494], + [-131.08581823797215, 55.17890615500204], + [-131.9672114671423, 55.497775580459006], + [-132.2500107428595, 56.3699962428974], + [-133.53918108435641, 57.17888743756214], + [-134.07806292029608, 58.12306753196691], + [-135.0382110322791, 58.18771474876394], + [-136.62806230995471, 58.21220937767043], + [-137.800006279686, 58.49999542910376], + [-139.867787041413, 59.53776154238915], + [-140.825273817133, 59.727517401765056], + [-142.57444353556446, 60.08444651960497], + [-143.9588809948799, 59.999180406323376], + [-145.92555681682788, 60.45860972761426], + [-147.11437394914665, 60.884656073644635], + [-148.22430620012761, 60.67298940697714], + [-148.01806555885082, 59.97832896589364], + [-148.57082251686086, 59.914172675203304], + [-149.72785783587585, 59.70565827090553], + [-150.60824337461642, 59.368211168039466], + [-151.7163927886833, 59.15582103131993], + [-151.85943315326722, 59.744984035879554], + [-151.40971900124717, 60.72580272077937], + [-150.3469414947325, 61.03358755150987], + [-150.62111080625704, 61.2844249538544], + [-151.89583919981683, 60.727197984451266], + [-152.57832984109558, 60.061657212964235], + [-154.01917212625764, 59.35027944603428], + [-153.28751135965317, 58.86472768821977], + [-154.23249243875847, 58.14637360293051], + [-155.3074914215102, 57.727794501366304], + [-156.30833472392305, 57.422774359763594], + [-156.55609737854638, 56.97998484967064], + [-158.11721655986779, 56.46360809999419], + [-158.43332129619714, 55.99415355083852], + [-159.60332739971741, 55.56668610292013], + [-160.28971961163427, 55.643580634170576], + [-161.22304765525777, 55.364734605523495], + [-162.23776607974105, 55.02418691672011], + [-163.06944658104638, 54.68973704692712], + [-164.78556922102717, 54.40417308208214], + [-164.94222632552007, 54.57222483989534], + [-163.84833960676565, 55.03943146424609], + [-162.87000139061595, 55.34804311789321], + [-161.80417497459607, 55.89498647727038], + [-160.5636047027812, 56.00805451112501], + [-160.07055986228448, 56.41805532492873], + [-158.6844429189195, 57.01667511659787], + [-158.46109737855403, 57.21692129172885], + [-157.72277035218391, 57.57000051536306], + [-157.55027442119362, 58.328326321030204], + [-157.04167497457698, 58.91888458926172], + [-158.19473120830554, 58.61580231386978], + [-158.51721798402303, 58.78778148053732], + [-159.0586061269288, 58.42418610293163], + [-159.71166704001737, 58.93139028587632], + [-159.98128882550017, 58.572549140041644], + [-160.3552711659965, 59.07112335879361], + [-161.3550034251151, 58.670837714260756], + [-161.96889360252632, 58.67166453717738], + [-162.05498653872465, 59.26692536074745], + [-161.8741707021354, 59.63362132429057], + [-162.51805904849212, 59.98972361921386], + [-163.8183414378202, 59.79805573184336], + [-164.66221757714652, 60.26748444278263], + [-165.3463877024748, 60.50749563256238], + [-165.3508318756519, 61.073895168697504], + [-166.12137915755602, 61.50001902937623], + [-165.73445187077058, 62.074996853271784], + [-164.9191786367179, 62.63307648380794], + [-164.56250790103934, 63.14637848576302], + [-163.75333248599708, 63.21944896102377], + [-163.06722449445786, 63.05945872664802], + [-162.26055538638175, 63.54193573674115], + [-161.53444983624863, 63.455816962326764], + [-160.7725066803211, 63.766108100023246], + [-160.9583351308426, 64.22279857040274], + [-161.51806840721218, 64.40278758407527], + [-160.77777767641481, 64.78860382756642], + [-161.39192623598765, 64.77723501246231], + [-162.4530500966689, 64.55944468856819], + [-162.75778601789415, 64.33860545516876], + [-163.54639421288428, 64.5591604681905], + [-164.96082984114514, 64.44694509546883], + [-166.42528825586447, 64.68667206487066], + [-166.8450042389391, 65.08889557561452], + [-168.11056006576715, 65.66999705673675], + [-166.70527116602193, 66.08831777613938], + [-164.47470964257548, 66.5766600612975], + [-163.65251176659564, 66.5766600612975], + [-163.78860165103623, 66.07720734319668], + [-161.67777442121013, 66.11611969671242], + [-162.48971452538004, 66.73556509059512], + [-163.71971696679117, 67.11639455837008], + [-164.4309913808565, 67.61633820257777], + [-165.39028683170673, 68.04277212185025], + [-166.76444068099605, 68.35887685817966], + [-166.20470740462667, 68.88303091091615], + [-164.43081051334346, 68.91553538682774], + [-163.1686136546145, 69.37111481391287], + [-162.930566169262, 69.85806183539927], + [-161.90889726463556, 70.33332998318764], + [-160.93479651593367, 70.44768992784958], + [-159.03917578838713, 70.89164215766891], + [-158.11972286683394, 70.82472117785102], + [-156.58082455139808, 71.35776357694175], + [-155.06779029032427, 71.14777639432367], + [-154.3441652089412, 70.69640859647018], + [-153.9000062733926, 70.88998851183567], + [-152.21000606993528, 70.82999217394485], + [-152.27000240782613, 70.60000621202983], + [-150.73999243874448, 70.43001658800569], + [-149.7200030181675, 70.53001048449045], + [-147.61336157935705, 70.2140349392418], + [-145.68998980022533, 70.12000967068673], + [-144.9200109590764, 69.98999176704046], + [-143.58944618042523, 70.15251414659832], + [-142.07251034871348, 69.85193817817265], + [-140.98598752156073, 69.71199839952635], + [-140.98598761037601, 69.71199839952635] + ] + ], + [ + [ + [-171.73165686753944, 63.782515367275934], + [-171.1144335602453, 63.59219106714495], + [-170.4911124339407, 63.694975490973505], + [-169.6825054596536, 63.43111562769119], + [-168.6894394603007, 63.297506212000556], + [-168.77194088445466, 63.18859813094544], + [-169.5294398672051, 62.97693146427792], + [-170.29055620021595, 63.194437567794424], + [-170.67138566799093, 63.3758218451389], + [-171.55306311753873, 63.317789211675105], + [-171.79111060289122, 63.40584585230046], + [-171.73165686753944, 63.782515367275934] + ] + ] + ], + "type": "MultiPolygon" + }, + { + "xmax": -66.96465999999998, + "xmin": -171.79111060289122, + "ymax": 71.35776357694175, + "ymin": 18.91619 + } + ] +] diff --git a/test/files/geoparquet.metadata.json b/test/files/geoparquet.metadata.json new file mode 100644 index 0000000..b0bed08 --- /dev/null +++ b/test/files/geoparquet.metadata.json @@ -0,0 +1,469 @@ +{ + "version": 2, + "schema": [ + { + "repetition_type": "REQUIRED", + "name": "schema", + "num_children": 7 + }, + { + "type": "DOUBLE", + "repetition_type": "OPTIONAL", + "name": "pop_est" + }, + { + "type": "BYTE_ARRAY", + "repetition_type": "OPTIONAL", + "name": "continent", + "converted_type": "UTF8", + "logical_type": { + "type": "STRING" + } + }, + { + "type": "BYTE_ARRAY", + "repetition_type": "OPTIONAL", + "name": "name", + "converted_type": "UTF8", + "logical_type": { + "type": "STRING" + } + }, + { + "type": "BYTE_ARRAY", + "repetition_type": "OPTIONAL", + "name": "iso_a3", + "converted_type": "UTF8", + "logical_type": { + "type": "STRING" + } + }, + { + "type": "INT64", + "repetition_type": "OPTIONAL", + "name": "gdp_md_est" + }, + { + "type": "BYTE_ARRAY", + "repetition_type": "OPTIONAL", + "name": "geometry", + "logical_type": { + "type": "GEOMETRY", + "crs": "OGC:CRS84" + } + }, + { + "repetition_type": "OPTIONAL", + "name": "bbox", + "num_children": 4 + }, + { + "type": "DOUBLE", + "repetition_type": "OPTIONAL", + "name": "xmax" + }, + { + "type": "DOUBLE", + "repetition_type": "OPTIONAL", + "name": "xmin" + }, + { + "type": "DOUBLE", + "repetition_type": "OPTIONAL", + "name": "ymax" + }, + { + "type": "DOUBLE", + "repetition_type": "OPTIONAL", + "name": "ymin" + } + ], + "num_rows": 5, + "row_groups": [ + { + "columns": [ + { + "file_offset": 0, + "meta_data": { + "type": "DOUBLE", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["pop_est"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 126, + "total_compressed_size": 128, + "data_page_offset": 58, + "dictionary_page_offset": 4, + "statistics": { + "max": 328239523, + "min": 603253, + "null_count": 0, + "max_value": 328239523, + "min_value": 603253 + }, + "encoding_stats": [ + { + "page_type": "DICTIONARY_PAGE", + "encoding": "PLAIN", + "count": 1 + }, + { + "page_type": "DATA_PAGE", + "encoding": "RLE_DICTIONARY", + "count": 1 + } + ], + "size_statistics": { + "repetition_level_histogram": [], + "definition_level_histogram": [0, 5] + } + } + }, + { + "file_offset": 0, + "meta_data": { + "type": "BYTE_ARRAY", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["continent"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 100, + "total_compressed_size": 104, + "data_page_offset": 186, + "dictionary_page_offset": 132, + "statistics": { + "null_count": 0, + "max_value": "Oceania", + "min_value": "Africa" + }, + "encoding_stats": [ + { + "page_type": "DICTIONARY_PAGE", + "encoding": "PLAIN", + "count": 1 + }, + { + "page_type": "DATA_PAGE", + "encoding": "RLE_DICTIONARY", + "count": 1 + } + ], + "size_statistics": { + "unencoded_byte_array_data_bytes": 45, + "repetition_level_histogram": [], + "definition_level_histogram": [0, 5] + } + } + }, + { + "file_offset": 0, + "meta_data": { + "type": "BYTE_ARRAY", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["name"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 138, + "total_compressed_size": 143, + "data_page_offset": 326, + "dictionary_page_offset": 236, + "statistics": { + "null_count": 0, + "max_value": "W. Sahara", + "min_value": "Canada" + }, + "encoding_stats": [ + { + "page_type": "DICTIONARY_PAGE", + "encoding": "PLAIN", + "count": 1 + }, + { + "page_type": "DATA_PAGE", + "encoding": "RLE_DICTIONARY", + "count": 1 + } + ], + "size_statistics": { + "unencoded_byte_array_data_bytes": 51, + "repetition_level_histogram": [], + "definition_level_histogram": [0, 5] + } + } + }, + { + "file_offset": 0, + "meta_data": { + "type": "BYTE_ARRAY", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["iso_a3"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 91, + "total_compressed_size": 93, + "data_page_offset": 428, + "dictionary_page_offset": 379, + "statistics": { + "null_count": 0, + "max_value": "USA", + "min_value": "CAN" + }, + "encoding_stats": [ + { + "page_type": "DICTIONARY_PAGE", + "encoding": "PLAIN", + "count": 1 + }, + { + "page_type": "DATA_PAGE", + "encoding": "RLE_DICTIONARY", + "count": 1 + } + ], + "size_statistics": { + "unencoded_byte_array_data_bytes": 15, + "repetition_level_histogram": [], + "definition_level_histogram": [0, 5] + } + } + }, + { + "file_offset": 0, + "meta_data": { + "type": "INT64", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["gdp_md_est"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 126, + "total_compressed_size": 123, + "data_page_offset": 521, + "dictionary_page_offset": 472, + "statistics": { + "max": 21433226, + "min": 907, + "null_count": 0, + "max_value": 21433226, + "min_value": 907 + }, + "encoding_stats": [ + { + "page_type": "DICTIONARY_PAGE", + "encoding": "PLAIN", + "count": 1 + }, + { + "page_type": "DATA_PAGE", + "encoding": "RLE_DICTIONARY", + "count": 1 + } + ], + "size_statistics": { + "repetition_level_histogram": [], + "definition_level_histogram": [0, 5] + } + } + }, + { + "file_offset": 0, + "meta_data": { + "type": "BYTE_ARRAY", + "encodings": ["PLAIN", "RLE", "RLE_DICTIONARY"], + "path_in_schema": ["geometry"], + "codec": "SNAPPY", + "num_values": 5, + "total_uncompressed_size": 22634, + "total_compressed_size": 20669, + "data_page_offset": 20766, + "dictionary_page_offset": 595, + "statistics": { + "null_count": 0, + "min_value": "\u0001\u0003\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u001c\u0000\u0000\u0000�_�'�T!�\u0000\f��\u000b�;@��\r2�T!��\u0004�\u0019�;@�w\u001b�i^!�8��|Oe;@�,���_!�,ʂ��9@H5�W�'�K\u00045��9@h8����'�@�7h�_7@�!\u0007���)���`��H7@�Z�a�<*�\u0014��n�6@�6�?��)�$���S5@t�p�^�0����TU5@�[\"�<\u00101�X�����4@@@:�:\u00051����\u001cl5@\f��\u001a�\u00001��\u000b�;�k5@�$�\u001d}�-����S'�5@蹏��B-��Íf�5@�\u001c��ebX)#$6It?-{afB$1%@zG>i z{y(nLbNwy*&|f9CoLosDi~0{^`tSR3sDE`0?f>rIg=N|AzuwaB`|lm53)6oc^^sfIhx%E<)>z5@&rE}Q0y*?Z zVD_kNW|WeYF-1(Diu8Z9t)Vz2D`ni@0r;hiNl8!9rpwYX*%L;l8;U2SOc*)daBRl^ z7|Z`}Eodx?|ECGCxZEs zivO<_r(WdfvbG#O^8aXD@ZXJFDimn2#}JDIlF^71P5rNB~V zTNY=)xSI~^hN;@2yjqWp$Q>{Jb{Q|R!+U*a^R|u7fHqeCLbEnI%$U4yuVZuuEM9xo zN<+>b*LFg08XHRFX)rzG?{uaXW}xj^qlGeg zI~?h$q!l+U14o4^-`0!JEVr?b!X(xC;9n9J_ z_(A9CpffAK8e-PU+lDL7_<^DByrm^>#;9UyIlc6oA0*!yG&RM+6qh?RKbvdm4l#xZ9V7Cbah?SP8(G-XS65W+E=Br z^t2Y%uint1Ki3mj7UEC5JsQ~J#?w%W_JppKD_ej3QAIc&Z}%KMp;)J9i1%ex?0L{+ zc23_5@ZQx?{CE}Yywa>XdZrf?2e$4UU&=+niO(08Bhl>JukSxp!p^n6FPu*ho#`#| z4^%)w)`bT3`9wEOEo4vXi`h|5B_0J{us7CKV@0GKmc3LAWoXv*WZij0^Ir^FV0hXK zdN%&P7aZ0Hvs3Mczisyd???TjBBh-oTnZP)Rkf=cJdN9II{Svt{>s53}{?0Cgs{TeL`wkj3qp*S~fIl(Z{5 zEF$_L=de!K>JiX0dC=DEL?d*q*grLL@0KCB_R5Mc&+3MQigAtYbe0tg)|*G0pLGS+ zr=U$I2UsF&;oV!$`?&+Za%u6=u@-po)@R(J>kjC@q4#HtIVPt(R|K1%ATweHeK;Ped2(5En|1C2K?XpX63Y~-D z(Z?o*M|YEO_WinC;izCZYVVn{;7<~cJLxB^yc-OgT2|DI{+xuB!!@?sS%-k}&NxpC z(`2mgdpM*nIRtzQ4(6Y+O2+s{3AT^Vg+S5bgv~{QWNhBX(!OjOO2X=Mn}skLS;3XH zm=Ow{RhI1xE%*ND^ixDLLNwkx88!9Xz}Jag~P>uC_2ap4$X@nls&`6C>-C;MRs@*b{Wg76aSBe!n|yPONd$zh z5VgPAl!E3jD_VzJM8Icedx&=Nxjv0mEP(V847ZB#cdYgw)k@+zJ{IYS`K_t(-a;62zfG*Kl7hcBkq~hcLe0|~ zZhd=`(P8DlH`Wp%Z2qWw%)c!e|E_YD5bn|N8aL4DMz5L{oh*bsYo{J)%T31J!_@AK zn<|9H!X18N+>-GpX~dDGLRc6xY~DDNWc0BMTKX_w2vP3?pD*j5jNx}r?!Q_r1oxNI zo{Z)sW9wk9$Cr&lxFmDhu;E@3#*E2!HZ2#zQ!%SFGcO6v&uzGRipDRmHDr|Cpd@_z z8r@75Qu`}@=r2?w?%JF%cV&zaOxJ5Rb~PnpVPEB61Ji}zcCcmAiJghqw)Z*f)FdG! zx3OorB_?8P%&lv@@j{4~i!+n`Ou%~^4&Akt2|;d}apdxh1e7$Nyj%}LkT}yq^Ad2J z5x;kcyt5FBWVOz1m*cVK+`HWGv|yq6(%X{@?T8|9k- z`d=*#xRw-;bB2X&Rq7UiVDXwUY6s$Qzg2X>nvVjIjW14KGBplmoIi1`zXhO2s#@wA zhfFisw*(OPdeNN2A7b(P`|_FRzX~98x^q7Tr#S4V@Vx8&Kq2U*FJE>*DGr%#Zd(bV z?IL{|WAX2|jSwo<(q};|I{y6#p;R}lsYe=%`jbQYy*3fTc;;AY#NzMk1uxCnLfDxs z5m{V{!E>R*7x?rQ!h>hVCk7_OAbY-GOU6q9Fg8WQHyO_C{`7V!jeph1lC*^NGCX&* zesSLq0(kw{MHj1O_&L?m;ts9HLrKl)Tcc#CPAWseObE65zbkh2lcCsqthHzWjsMcm zQ9K11ju3Y>HeVG08Gctq52Nww*ra}!Ok5Hwg%bevqH|1t1&A*ALQwfH=WLecDOZ7*Wz zTKQq$m2{)Ae9_m4i#bA2d3j{7Ty+$pk!1VrBq1rKwLPIkOMgu8$S@EBYwS$U+3+ab zG&oRUsXz#GeK~r*>?kxCG_xSVLI_(AtT-i9kHS-4?h~JVq4k_KW?1%3DZcd6x_;!M z0AkcCx2|3x#f_#3j^Dluz%G5_&KK!Y{5jTago}d^mOi}Oo0%fTq{QNB6AFaTFNlnX zzEZ5JBJE8K?!cJV+aySa_FKbILWn%Lv+RRVf@)&p1&JX-P~CF;lvacUNBxM7s<5W< zrLzatPm^HCyFp1)6oim(XxhJAAi+HwS3DU0TmY)fM#&`TOP0OXIRR95rUoeAlwc!C z)2IpooF+?Mb(j?Q2}V~;E)zg^wK&=cUV=p09M*v`@HwM6u*Dy(_L*ZfZf6YSGo+M5Jdj-q*}_Fbrwomqz1+z?Gl-j*oyhzT-Cp)<)x6l8=LU5pe&|oT=@^e=g6I-i<2^ z2i-qjPfmwNqeiplEWPw_m^Znh!_KHN`&+#xh=%g%}OXtIxe#8wStn#qKh(7<1j$Jl@ea9ESh8y;QwQjD2Rg z75&Tzhe=!83l~eps61FzZ2Tr1&U&u)nvgHXd^#U}QX*gwo$s6T#AwYNc*{uG$5`93 z;(tD5U?fas7Pwo4#IEZ%n?%A7##`GVLf>f@*4t`Df)VjQP88vcAMSaVTqEH|9H|U< z(LaVzj)X1tu|d+;LR2Yo+3D330bS0M7QE^ZqCCm-CCeh9v*Al#>qsHqr*7}fkAUTj z%FGmE1LOVaMS!i*;NBdO5U+TjI=iqa96E=VReseHA~T%@G{1LCzwB7`Qh-_`U0O^B zg@YBlrT2E9QUPXuXmc5!N(=C7*8RFj0p^%L%o+bK9KM(Yq|3|%xS(7uxYs%Yl8y#* z`@D$68x_y>x7CM3bC$j|93nBRYg1>cMmU6QC^kR6KLS7cT+X;LB@8Y^?wIEOJOcTG zpW5Sxguw?!@r;PT`!UDf_&y1R$IG8Yyle?aL(_p0ha4Fhd@i> zyWa&Jp}5erNaw6t2#g+eJ2uHF45u>fJ`RTYXK07Z!f@d6($t1S!EnG7!iT1XBWv08 zAMPc=u#|CoI1#wUEkSeO;9#&ntn#$-UIdO2X3P##3WkLq!ACRRMq&U70B^HkxHfQg z0YuY!-gq%;h>wa#ZJxADh#Aa&O%M8~k*$bkKIVKF$Z%A( z07qjjO2zM$1XxCVpqRvmx|O7Ig9P|xV&{5QMLwvQ z%n2IgD8R&CjT)U9LGa{ZX1uF`04-bwcg!;gf?CFsULA?#%sH1o2!y6#pFVCq9f56Y zw2}wE4+J$AkK-cW2s9=ICO0z(teAngMPNjLb?H#kpnnGW^KhKAv2DlYPl0gf(cV_w zxe<82D&X+PszAtQG)HA5b}{a(G!XQelRH3wdzCew{4@##MaBlD^|i=2u6_P&06bOK zZ+$kO70YeyRGhlr4eqY&LZ}Q-EQ-Q%XI4 z)ZI`;f%rm;07;Fms#q2Xs*GjwL4Z|TSMUCGI}koOEPS?_=yi|!PMuy71iiznRM-QA z$d`;&&edHVc zsT%r1)G5TrFIVm7&I|-88AQHOBAhOIbM1X`AWX<258#Lh>&;7!4j_6P$+Lv(BD|MH zwnG-R&wRASxWt4+H#ZR2ymIB9I72a>o|$tmzE2=*oj4UhHB`Z4ZE!AERcu zjTNJF$H}L2h(5EgTSaG&7~8KIzwJZx$m_fVKhKM?;oyco`;G-bJ~L1xiAavq(#-)d zMgCULOffRkojWA}bbpPSWza|xJ!|llg<}Fhufb=bt_drv<(0~&xvcB$)cz@ zshV&~Hvrln@D26XOVFvJ_* zC1~#0t^eewKk%7-IVVB0EWT2}zthqnL1xjFh6jLrIhVAV7u%?J9eY{;lsEq}x=iZK zF0^8#PHO-pr?|h|uu6i+NLSZDnBz4u#A0{UP$m_%Fan&ctJ31d~H~tZ~skqz8d_rQ(lUBiVd&8 zB#1(-`BSwOrD*8cy`jt}2)K-WtRY3#g^(2@ry$6SnzrY#xfCt84{Y~$4T6=&7M#0i zEXA)mvnoFN2LVf4N9mzGwWnUTq*NFLWglYpsk+kpca7gVj}LLEMU#b5 z*m-%+zy*Eyko8yUL}3rDaS)pif0_DF)W5wq=7SZvm!G=G++|{Ls(iS`EW1TCmN9OG z8z0WhEVD_@ipH#z$Pquo`LOsS9j{f<=sDo+B{IDJy-(&-w-3~g<^!Jz5gv?2L!b9) z7x(euX~fIqU#-ztaAK40Fru%$?zFc(AB{d8ygU_H{L49}IzomGi~IIyQmA3Q4~t_J zV_c>JhPitCH05GZJET1O#|%C=@jAGirdUlFz$#W&;mnTHP?48$AYMa7yNu+9hFpS% zih2VX4u5=fROIbgEOVBsmx`)!zkxj?nRE!(hZj=*M}kw^55#s zyq942{lV{~WHfMnT#{KD(^&l#w}rvB_hO{T3Z^=WfWBF3t`hbgg-(%FUPU1}(OF)F zYnYHDqD#f)nsf;^<q)-{L1u^fV5Z zFz=jlp}&TzYni`;T;=l=(BL6+y?B_sp-Uypz(<{@uTx*KlDrFb2}+|$_bNrg-b?m| zQ+|k%ESKmw`$&)%eqr+;k>uF0fxE;uQnN^__KFx8i!zcXc~$?+CG}Tg9NtMGo+}X$ z^XG+KQeO%FH8Jl-0B?+v%}^}~a>%9D>k|oHc`S#;te*VDVT;p;XGWv+P;OxT2@xc% z{&-$#VKlD#8Nq(JMFd`jV>b0ZkH$|$tmnITh=8|L&tjpI4390{Gc@s-2&N7Z4=+%Y zVXLSn%J!BB&i1pvG5&Bg-hL)0m-A8tom##bE2a|<7NqU{c2xw4!(8%M8jF1-Jt>;o zIO|VOjK(LsS8onV5ks>l+xzwMXmq=?)N)*s7!K$^Tz^+dhL3K3ct0;q3>RMQ%A1Jp^3@dy$I$wAajd4x>JI+>!A+dMXVv|qNs6Y66cg<`uY_JhezAl!b z@|3h;d6UF&Vz_l&?|d0vu;I@SpDTvxI$MUNk|!aDK@9V@oF6l;R)*7@W*uxh zB8H?cp5rR13?E*Xj_^JthOKTcOb&!MQIq1av$~!|ZBmTF;hvwD3|cD!^Oh#3_jyrh zq11HucclnS?_Cd292AY;X1ZV7a7YBJ-#lAA#6B8db}X$uMQhx)Zm4T7xxo#3*K?+Q zCBE(2ne9{0SA!6{4R8wgoH>%JmzuGTQ41Fe#8GJ0A+RJ%&eUH5uR3GyW)IX2HhNDWJ z*N9Fk(aS8_8->^GXE`-f`??#>zvZ2XLQmJmsz#0&w#i>wv}r;V?$x{A?em#<4Lc{?`bmmwx;^teo{B)9yJfF`xfElDKKu3Xfe4;1AL_cmL5g?t ztxlip7J;F{ma(pN5{zVb4|n(=g7+R1Z@cj&I6VE(i+yiIAo)GYcaNL|M{pLrU2;PN zV|qSYB$1nA)mA@8op`jUxIsTmUxHU;5ByY#hd1Z;zu7QVfJ~bX^ zPHrx^H%1IL6HKa-Y~!&t<4~qQ@!ru(#J3L9SUoB7n;SOlIv$6Gweg>(91ug6((&(k zqv9}|(|u&#Rxt=izZ{=gABW-HmEV+zi(miYSMD>8$GwNz2Mi*bGuO$X)+ioFYy9GS zREweDN%9a@XB@uFFAdE&EC%__e@{s7z&=JK`Ys~se6gxF7zW*bu3@Pf zhB+5H-o1+shP?VS;~$O;Lx(-@j(&T=2ae>2pHM9fc}{n^!v_X~0;ltCOk*gPoMc^W z`N9W{=dpSIFGI1osIi~L1wNS0T!#B6hhoIEm=h|sq`o$4?yB(!#R&(kYJJY}fhRX@ z`JcuRy!2*u%acufu&xp4tbZDUQ`%JToB5J0-5HzLcTos>t?~J&DC0wkYxvKDMImTA z{d2FrIv*yF(SP163PIf;+isVh34#Z+FATj?5`qV3+NHh_ldb&PUj5|h5F8!x%hoh9 z2<+IMaW6DOvE`2O+wjaFu)b?J+u%nCdcIoS(ziVbrY4LvXfX)IzHa;LLOO$B>uT?k zumhoZ&{3l(C_f1H96mFC_aB;{sA6Qp#2{E$pRyxxODGN&{Ib2jF9=R;*0j+z48vK= zYCOJBdsb7A>Q!wgU#T$Wgs_!-k%79c+|A*5_(oT;ds`4R28RFKcPJb!st<)5eI#Re z%=Sf}M~35NgY!S^4f!zZUhu;$8^Td#sMpOev>x#%Q+Aj;gk$ouetid)(Rz*EzUbxd zF#PNrnb{K;4CC%R*C|3Id8IaUzXW$HR?JYPFwj@6!>E}p z!6_{t-W%!*;PJukve9W0%h+ zdyz2s(~1W<-V$scc;!&_!AMBf6Mx~5U1&0>fA#2VkzlQ5>#< zKZS+_osERg^BOj+SS`hbqtmrQDNMCiM`vOB5(?X_|F(07lK_70EcjejAVsZTW@h}c z0yy|>#RE}@6kqJy_EBY&0PG*^d^yfbilIyAUU^Mnv0pi3lJ@IM(Jx+Pa3NX%E8Oka z&f%bZ$n@LwJo1csDTj&Km-?E^}`)>aAO)+K)DlJDd}6Wumn2x@AJYd9wa=vmfv zrz=zlZ;$*kn(rvYQ?1ftTDC%XrEb0M{CWXijyseY#-X6T_{*F{#ZQ{hd6y+;db%7I3>ibx6(A0Pl$vaPh;{`X#e^W zGj`K>npb(X)_)bE@6u;a6gwiJv>|zji%f*k^FyCzb14V$c7;LaArU&?ulzP~hyZ#| zRmf5gim)mA(2M6ZztWcBk$Jgd^y!m)wT>qMyU=+%R#sEYj}GS!Qvq!4oTZ#wD8`{D z2VH6v(|&Y+&K$xPqqpN{-W!Pkl*_$>bEk({W$N`xak?54V06~M@y-DUnGL^$l=wvTh)3ZVF7+oJbk z5#GPNv^JmkC)JXD@+*yB`GK6=49aQvyH1SRG+c~VwmHW5QI6&VYs;|BJTb;Z`Y2Bf z7Q(pb@BZl`G0tV1n*k-IruX%Ietw}C65WDX99k16GCzM z(1MPFD4d&J8tQdP2%T3eWJZgl(7P&rVt+cn6UL2s*b^6pR?9+7gZX5P#F$hW>PF!{ z?-gfrQpsN+G5fRSkJ}?hX~f^pRI;-wu=D zP;-9JXE_mY|Cjt>%kjnxCMcNNN#&kRkLxwwjHrypUv=$~n@dEH|E00$k#018tZToV zF;4`SbDYLiRz~4B+gS&%PZB}1x%dmPqOs%3hxa!h z0j|rUG2h4T=W@0P+;>%}jkptynJc>Pe4@czNilh3*++)!HlCb5)I$WzduN3YVaxD7 z4gPnW2y$0OsUM>RlfJO#ru}5{J}Oy{Z~C;sA^ zL)-*>efCjuShg7E`-s0x(@4M(M)@X&u42d+rS`cG0K=8`eG_L~Tnx!18Y+IYbOdN%3iPe`p_ zos2Ejlll&p4+T-L#j8J)DPLQ6C_H{ZD8xEnj$So08S&1ZfeO<@;O6&~BS%LjWAX3Y z9Br)-c#uAF<+O3hSn@l!JDO-E#ha?lbCa>`Pj2@kVF)xHJ-T4+vSdtt5E{}}8UhNk z_em$KlCk#uhCVwFhCtr<+mfBzC>w5@>Cn?10;?5ot~tFW87*Z^r%q{vGOO!woYk}G zQr5g3Gm~Pm!Fs14{F)f-O9Pr7K8nHC@9OHS&WpjjX@A;frx;91c+lidW~k1#^R{>7 zVor(`|Qc&VSI??A3pjzI|*g!JY1X22kpIj zRR+_NuzlPtU8OaASf0Wz%s8Bc^$vHr9Zh_=)zyNMZ0J`$hs(S42D3B+5JS6A~!s2W!XgW?26S_QkTXiVV!^XhPB`LaN_>{`)>%a z(XwRJL$_Tz-W}kq)3}z`p1a$<4P`{LbolN}6NCX~CG*v$lwHcH|uTVoJzVlDX+tOQ< zNI&&B@A=t8WZ4rUq=Afz3JvayMEuD!Hti9Sk<#0o`E2}@B>Z}M`kL}DLiqWIK1oEI z?8`W)CW7mfcG}^Xgf*ozHs$-!$QfYB&qVBH!kVMWLu8N)v@B1V@8u*1SZo&Cz)r0v zPLr6xuw&lB{N7j$?f3eR9{HEkm$k1Re=HXJQug;MOAI^SUky(!i2aw=|1E-4jj`zl zxv~FHEaYDvUqW zJ1qiv-b}TU+ywj-5;M>Bk_gT)U=Pg%{F|%gieWVWUfRps@u>DkPl3dX+B+S-Sv*e8 zd~>+Jq8L8BqXfpmIOP2{>5-Z}5y6MFiwU9rarmu-GDtL+?-}a`UE36gyUtT&e2^F{ z-zcB38ySa360-JOb0C+I#;9i!hrSe3%N`;I1-Z+|=PSoy0mc5hsC&Z>7XjNjH*YAd z>n(ztjH`;pb|r4ieSZ<`n!5VMshC)t%HGi9H$()*U9-Ngwx@M`MA7nYQpHRfUq2R| zXxU3o3SqsVq}XqN3{GJ3q??2=he;B7#bBpp;lw2~g}`Ayw+V>BawaQ2l9-5hU8l!y zPYiY&>E8Dtyh{7&jg!94jlo?%iGhQJP|hSB*2Un;_p}OjLMUU}f2Enx+qX9EY5MnkOPlQrm%Y z1^p%Q*pgEg9B52^-!j{AWKulV4cYXpkgz4$?h5fJV}rktU<^}irgimAKousq79!L% z)#OSO&|ht(cF$=c2nZWtJ0t-O38?8ihYW}g{sxX#_ zp#8|jm-`pSWAZ%Ln`eVaj4(-^9r1W?{M8@LRwBq@((8KhDA}qMXhuc>!zFG_aacZo zZtOKZ3g-|A<3&*%>V;=o%%=NU^G}+OhB*95IolFTx?f66%Z11kngGuzv}-wAo= zw8*-tj8QDMF{D5j6Y<{|gY$U0gA|-e>~*p0@qX%XGq%R!+#{R}k>>9~TtO^a z@jmOYveXW0k%w*=i&J=g^-N<$@HcZUi&e~3u%p1B1=o_`MrzXsDI`#90+vQDOIi1o z5{FeeRJZ4_tr#*%dJG&Z!zF~{8?7RS&mXrMYvjssJOkN!CxZUWQClcOT3QN{(_RsB z?DR(&UZbrV+aLl4*t6I*1|umHzq3gMgDDE_K0F2!nY=cIe;Htoab*nlODYf3pitj8 zO4Hic#E>iAaA%>081_z{(HNZ+gG@eu(LnLPeClr*5-@FZf|VFH_9IDHBf}vKw8l*Q zH$-oXERFju8Z;m)CM`+k<0`^dmzqmJ=^Ftmu2Teg27zGRB@niN4%v!mv?e&$A}@)i zwprKSXx#CGRpSyafj4H0ueg)3D^~9sSSXM{>n~ow%$6wJvfP~=ZY%kx7UH9D%%1#X z<%SXn@aBG$qDDZLsRSM~D)N*R&73)}#F{dbo*iV;GiaivH^eY%R_zbgMJYbtWA=3R zX)zQQZL#t5jY2|be@j^|{)d`85QRRU3GlaA49E8*)eWL}t|qCeZ)6|c6WCvRI5iqO zDOapgCx&xr1SX#njVEdd&Tvi)r405xI2uPWaGhIXn7Bfl6LlgQiz^7<(IJNVqKKl0 z9N9l){u?obG1=9jw8_h(UuY{yzzf*U349+~z<_zu#%0f0Dn zg{=}$yD?bdf&_h@bBk8egYUQ%lu_i3G~gVO1a~L|Qe?=~&_C#u1R^QpwCS1{*DsW4 z$FPhX5fkHi#ldfm)kYSa$@n8B9X0 z1e^n3*N*xSf#FptHfxA!2wRt|A;569Ldz5hpyFHw*E#_PG1!zb68Ou>uP7eyl|)Ul z1Olg0?mUrF+zfPaqceLJVM7(Zb%2BSc<~KHu>pu`&Z? zh!o+%I#Q=y;sq8xaRnmM0=#qc?~36sgv$NDpgz~d(Er^y)rXHnxP*ZkT@*v-9Kx!R z+nlqCpsJ_DV6d%=Z+lyW?nPvPREc5HaEGNoDKAxIK}^ z_!k4`BZeQwlsc#OHZg@1loSwE-Qb%Lw26Sl8U4lZWiMf9R7Z;_9HP`7Y ztde3teGW~Y;rp^*QY1y(cwvngVzWg`M_Z-n#Ix1s(g9n-GjvdpNl|ULO;7MiF-YyK zw+{@I;!Z!Rs<eI!4bk_&gN}d|kZP^8iSl2(9g9~pvdK^MG6LH63w$V$pR1pFGqkQj7-zX}zBb z;4f0lQH&KyguPW1LbTswgV1jxOk)6FYC_Pwed&w%oCtduHO3MG71?}R-z@s4zUY1G z|8H>*FHEIpQ<>^>-$E4`&N>}Z8&7b{9VYkJjei-93(x9gJPi~=!?$}kyj5jbIV>|~ zJlS)ZhoXvSXUcGO-tq+3$ z4j(GyIOBU?MPO>xO{aG?e4yeFmh+1UR3})}xW#<8js<;XTk*IdnwaYmO z&Q4CfxriP45AICxgb0<1gNq3p*1#sbDkli`_g3|PH8v78MTA!Q5eVxTjGQ8go-O_P z4nYu1SU^J^0qSONZ`4l+0Bn0Wb_c%_-Jp1RLA@v1gaQ&!^CMlTq{8O`^7 zVxmB>0|z`IdcVqjX0Q?d-<8OZn>wKd(AfI%<*!mHuq{W=ae_QJTd3J z?9ZBOEoZ^1Fe9b?g2T#knQh@!ZK3`TOk;k)LV;j54o@st z0(Ut}FB40(2t{i@%d>B-(=5GaTY6PndNo;kJ+ajEQZ$#d8VS}WR-A3^E`C;CX;xmd ztym`R)m8!Z)=gF%)@+w2R%%C;Sv$<-te>rBtuQyS_VTm#O0!m*uVOvh+N;`{^U1-b z$=d6QwU^uwC})o4aRJ)3KJ%{041{)`o|#P_Au=%WN~=Jqb|F??HGW&Vh`?TN6znVx5?G1>9TJ%6BAd-6vVb?NKi4_{ z{CQgaIh%xFs>=FhbI>PPv(cob-ow2G;ULh<3c`JZ`N& zOl6mF)kKKwWd3G<=(%(!SId;1v3DkoQjx6W^lx1H<{VG~>0@+i8V#mKRx z{=nt=DRX}cv6C(1((PTmAM z{TPx{;0Ip`5_s|iHO`z%Dn0Dkyw|Ypq6kZPaW4E#e$Zm&zWf5IbXOX~rIUWZey37I z(6VBA#V)EdOzP+iT`Cdy!a*nZGEbo^19 zpVXL9LCZQ{Fl3O#eZ*Kx$fjGBzR<~WQgtD7sy&X-K3{x+%h-ZsKEQr*sx19rOI=T) zrWoy*LWC85U^Awg-AK4!K7$;Jqbf$G(15H789Dg1N`B-m^9|!kt#s<#<<=YcL0<3I zZRV#L@&PQn5oAE?>#VbYx0V(dBG zzir}YfMnyGf+EU!xDrSY-U5V8%Hce2BGBC%szf;nP_9P>6>VZ-A(EUc0iNoUwKPzI zU+3j6a_|Aj=~lZDH(WxQYBJP008YQBHP4kw{yF@4-cUdaIxUHSX$&m)s25~0UXw(E zbqtj^6_5j4qIf}Ily{#)PydM+6UcM7lRK0!-k1WlXSdc``-&TMI&8a;s!jJ#+i-*sZ*fA&(-EuyMfb8ZG~Ji!$Q6931x6&t% zbJShar@zf^ddsB`RcDQWZl5lj!-Se*=JL zsa_C9Vavs#1k<-8^svAS40lYGut~F&Nxmn1vh;!irYbF#p3iRH{PL+Mbn}8Vdnza= zlQ-wuEUjr&(58iSPub z4B^>=C~Ri}hXypCepH2BPjn=?X6ByIX>r3#pA=p(Q}MOi6AJcHp~>KA{EG%&Ohu+l zpdo@BG)C;SctQ??cAi8IUjDWTb%#Bns-J@8u4t=DZjmQA@pvjW1h|4*%6B!7djN|! zTiwQ-j3%4pK1U)vz>sav<;&1;=2y=35!;ayEz>Mk(gKEzPvSf;R3U%(VrJYOQ zBNd*a635wH2Y9WDT-yCG-U3BVip&aG9YQ-Q>#6i{RTN5FL-g|2=vSj+@!^*kV6dBGGL{TM7`ioy4LK-urwY-SpP<7Un z0dZJH@uYRp-lQZRs&aklK5vkB3DLcih)+(%p`q}&bDh*1TBh7MKSvyol}!1FJb*mr z9E?ZpO?{F*NKgw#eTE@>D8BbI+|oZDh}(?xdLOg@#A6S0Y$+pbI5x<2C_e#Pn3`@X z>2@7mQ_~}&fLrj;x>s`nOqsgEsTA=meYR`PWdO_VXCi_s60j>$QU4~@RJ)4a^#)WW zAS`W?Es^tqzW~j%3Fx{g=fw}IfuEB(;ETpRYEO0C^9mauxYy6{&;qSQET(EKcQ+p} zonhB=&ms{^evSO{G~5T6xLNfuqM16pl|ImGb9wf$TuM4H;zylo$Wzy!RIE>|>*$?s;zD>mX33b0O7y3ctgJ16xzfg9- zmUPl%KX7`q=6j(IC0!WkDAlx6_$7Z_|0K+-8+3T+a#HE7O}@L8DG5W>UA=$&L4gTC z8dK7QDF;do0M7lytJ;c5$YScq?gW5#oWeK(I|)lt8@Akt2n5U9`&3K5C8DJxG0^Ei zU_5ed`6R4mYUalT!5mUrBI>{897P!Kk(te6!H*%-AB$DIPK(dbtP!S3NRB~qg&hH7 zNs8||N9)6&tmO&ndSYb6nk}?G&J@-v4T8UAxT_LTZN4sN4~Z5f1zH?6RN!dwHD~CO zt$V=Ecmt0YWuP}=@j=OhoHSIELC+3#Cs<&$%zs#B8X8i)nagiS81iF}!tazcO!)2h z{morRxXz;zq?j~(%Y>$8IRcfHWvq)$!$?y0N)sIadHwYMBnQ`!L{CRJq)R{Eke`Mp zm=)Kc_es3TPfA1WZqjV890*J>TJhVoG~7r9luiR2;csOn(M;J5MmfS7rXF@y8s6tp zX#0R8xRM2PsyGdK%>#P;^4c9?3iERVQ_|4+P|ogQ-yLB#wVzE5RGZMRNZ2^RE=G~l z{eJXo2bum(;6U!>;KDR~%2Wn;J28nHXMJ9}3hN#3iV9~&nx;%WtjP)Nr}~F2pnhLb zQ0H!q6BO{AwK$8@G=J*!h?YA+r2{G8kTJ3GlU^In(bK+ncuBD>7LXop(AFZ&%X;?yy z?(=hoaE;QCSM_Pwhc|zOe<0C0UVD_!q@nb4g6hvmXRG;HEor!j!eI&vo&ObZw$gG> zq*~XNG=#qs(X*X8luqn{*J)@|L8iuV7w|RLaqCaC;x4_|^dB^}VFo=OH{TK`?ISPo zu`@iR`i~9YXi3M-o!p?}0wc~9cYpelhFhpYEyctI`ZUU`seepEsfX62!DGz8Aem1YqjYLA{>vOgWW_xg-4>ZKB}72!5R zn$vL$ismfq3G)H#_IALa2;koRi$OG6(=#*L zF%E?mY52L>%Cg_jFtC$5+oYzJhS$=PzovW)1Dk8ML3221xUzE8R_?=cM1a0&;EqNfjEiPM$c3%x$oX^z&!$nrY-qc zo0f_NKAdci{0Kt+JIon6KNagwi{_X{MSzUw_IpKfDynRkN8eFEcL#8bkem{v`aQ$WVAON=3ZV_*ZnyaEt^Z7@4f zQ}Y$GsMb^7+WW2NtpIfjDwzN<&fH>P9x zwg=n2fG-UmM?LB*ZROOYEfrfx=r7g)O6m3lDEEY&+?#v_^9zXBQ zB=blz&rD_}gAng4GdH>OU|yLSprW;l)W;UYmI7+Em_=m~MTJEw7g_}bTBJ&?KX!kp z+q%M5EdnmJu6w@k&dqC5m#}~J_v`$0a=-JP@0|0U*LQ||b5i}zE0>ORkmjYce!Jxv z(AUE!HkE(dLB6r&U~ku>jJWsoL&}FU4)QI~*P>TIfAOZRr<@M5{OG>v_nm}uWpGOQ zY54x|oRb%8&c4lva}R#Fuf5Sh-f{Bcm6tCwqWjm1<4pq&^1C}v?dkoT5p(C-+w67+ z>Hpnh)bi_CC?x*0e%3k%d2I6>^{w+*Q4Re59lqE3;pDjs%5GuB?Q8Fxbp^)DG&iLV z8Ch}0il(jKhISP_p#Lk2SaI%0|G8$?YYsB=#`=#QaI<2yBWHg4e;nkI>GWF-1<+UL zv%6Hkhw+2w-cdiuioyS``(SaMlYIWgC$>~R#fl#-{jY~EkxsH{+RKv`!g$w;&0J=k zlRP=;9{)Q(XT@gAqmL*=Cu!cPe{{_rR?PjK?)D!~b&s|Ny_3yy=+4#;UZ)8Pb`G-Ce++9?e zh{+q(thi18KgEHR zXS>M@M{l^i(e|`n9Lscg2EzuW8~pCE419)oxQ>47{TqP)o`3#$aI1%0zU09_kPr_uUTk@C23-5;d~W*7 zuS33>dAw`Uk>@<*=MOKx;fGMS-TS2W$G?MLcE9-9_xL2}#b;hU1iwJ| z>UD-P?;%P&vh4YP_(#ykq4T@-sDTUW*djM@896S){oSAhKsOW(2cCG5AK=8nyPwM5 z{2wk-{nq-#6AUL78vga%@naA?4necW#fc%f^?vb97rA%+uFBu&Ik?!XI9|WUMNT;t zc=!4$PMnqcZ0F2D7rFcKQwDCqgn^?IKqacP;L) zbK*j7o$pP8JI{%C3O_%1 zVYiDMEAQB*c#VqY6O)E^__rQXf0aF?M)mvxCmq|o&|T@38yC)nR)uAEujwV_)^l=; zF!_5m@^2f)I*QZ+QvoZhD`XthJrUT!2kMc~VF8qKGt6-W80yU?_XLysEXf{RDuCS0 zZAcUm2~Z0CKLnT~wPC^vN>8e^vvv*vYMN43+FO*g7D^tB$ zuDbjsM0L1}YALZBM-iJ`-1i6@$|}BGrrJ=U+BF4~T-qZQ`CTbgQNnIqB@g)rX7&2p z%BnvdQmXd@3gZ9mNcyX9YdHEyD)9>VXCdV%H!OzvT%0U$l90XdPNnMp6H3)j zjw_{LA9LCuKZFn-10B~78=-k}G1|wn<6|S({oq$h)nmUz>`KoT#I6)NF?J}~jbOLo zHKl6XNyM)7Bth&-p%Y~{yt})UsvrIuqU;o6S9)w9cBRlSVpsLc3y_di6;+SDt^~a5 zNs#%gkA8V&U6xCx_;{>tVQrnJo~TzZV7YAF{Mx!il8;i!d=C>BGEqD&pA~3Uf~H{A z%DN#q8gMZt&hoJ^q8Dg4AzXRBC!J4lXvxw#cU;Jafho*7GD4b{$IB4uq(pX(bOs_q zk#stdTG-H#NXGl>M?G?i+|s_UCDv@aEp)l1NN^o%GYc4)Pgi-(g`BEmCfZzq~S zCnc88+F9GItDOtrX5GzbhNaS(Xb%@laZy@8I4g&d<4J+71zIeZ=9${gd@9XFYc&QS zFoX{jqOcM)3QLz>)!MnfBo#~XY0REyF-t0wj>MCEI*){Gb$42kXrNXkkVezkxO(;c zs}pRlwMnbKddhlY0+gGZv=gALod9KxMn4gubrT`o*d!VHsx+K{Qz9&lc#gjc$jz_`JsBLQ2 zXq#Y;kD-ji_4Eoj`}mL1^`jTJY{VieWNIiop>8NeL0X3X?Tz39MHL zmUt4f5cJCLN#Q`nah1x@a!wf90VN>XMJY#w>`s4Lr2Zmt3ey=yJcj-b!Fbe{A+4pDxRmmo z@pNr}EItsc$5JOb3P}<`DGWnUr7x)@4!NcWOd(0Juy%n#4TJ{Z!$!~W&H=1xMsUo2 zBs#`MJ067%$Vi;=EatMBkx0dCR)9dg(@jt%3}p)Mi7Up+`7tfH7p5%+rF4?pXP z=H~ge#c{K?p3rKEWtbqimE=q-<#j9Ta_|`i_PJDo02&4$eDvvM)C>lo8T7$t)C>kl zYsSo=0-0+F zWEwR;fPk$-^R@w-G=_If1<%`!#sMR&gP(|qsoMl#7{khbz&AD7VVgs6ty)PcNM_GX;Gy-dD(__4-GfUh2 zX*%WrIzV^iJm7QrHh~75kX6Wp^7cl%xh>eKw(}ikBOfCCSvufXBOa_x7zhP14cac4 zfTj>bvLQTQ(4S(hf`=w@`Ve8r*adY8==3o%Pu^STCL#hIXvKS>Y+f~Eb2N734FgQn zu%aVs$cOTVB95idq3s^%=wq^stu0GM69wRtVF+hD1pDof#+WabsT0d=3k3`@CTba= ztU{kh)8>=*u8+`xF3i)fW_|XSu-a~pv~&p$ozvVe?a^vcgYJ4m0eu1J^RyM=BR!2+ zOBnLB)f4uDK0yC!D&PorX@vr7^{4GEt$J6BCp>aJ(h2A--5vGk8KhH7dcySDE#7=L z$V3G_3284vKe8{_E5Zi7aa!A!U~T<)Z(hI2=gr%(&S}CcAUub!m2k#1h7R+@_tM_V zXdMOPwer$kU}c=QSoAANRbl@) z5w2a=eRjQ*m*RfHx-NtZy+I9&^I{;EqJk#KOG7a^((bmdyb*MaeF^21M3B%#D9CX^ z!lI*a4mA>v0;2;xXc0XspeI7XHn?JGh|(w@S^XJ+#c&+=_3JwN>>6jmo_7?w2!|Hu z)<`$u)Ih%Lll;Su&Iat46WkZbVJEN;LB6IT&!KamJLnaHTG>~nSYWh%enh?%XlpLP z*qm7^;EmAIUL%}UC?J^w+EM;E(hpNKp^rg4p+3S=90l5VCh8}sfCcg@oE@;<-k;0T zJl0=76>Jl_wcep~Fch#9Sc#v8hWNnvQLhlvwh5umwvv1|GG`;*UIp(+k$wqp8f?f~ z!&q)MpiclEIxqV}0X83kbEemi@{f^+vntC-G0OX*2DROq&d^#m(;@9C0{e|%xr;fX z2Ab9 zeU^!N<3S=9fxI&`@A4VZ86k8-E`Yf#9c71Ux4>E(_N_0-e+HXp%sFH4cXoCaAeZ5s z4>d!;8fxMKL@>Uy9Yr`nN(UP3H0nk<2;R|ORePJCu=Ugqu43gi~;sBVV z;3(D+v=(ZiXt6#)c{$pa<%&6)vuYCHD{#gR!Orn02hsr`LF7v`@+>GkIVo}(TZD@djsihMGAm4GoBLYYT7#BwVE8M>Lf9nXpdq&_WmS?M4BuM>2aHn28l5 z;79y~`Pl@dD?AQoi}>Ldqb$EMho`#HyCgpzWB%Ayc&Ry4#5WsVg{zSl>}kQ80Oaoe zAmJ|{-2*)^ZW!4W>h|IbTf%IV>6yG3K6d|Dl~mA~4HB&dpp-)RD~9Cn`pf#Z;yM%) z)gXLB3%p_bTCh^_CXr*wFSHdClXIV)N$8`)H} zAGXp6ePGoxRs-lm(gj)%tYKext3X9o$&w|C>e>XAT#@0@3z$S=0hLU~2WpG|N?A+5 Z=fHY(%?|jr*BAV!uzp>kaKqmh{9lr1jl%!{ literal 0 HcmV?d00001