From cd5fd2d998dd7213832f62d95c38e671873c1321 Mon Sep 17 00:00:00 2001 From: Aaron Po Date: Sun, 23 Aug 2026 23:53:56 -0400 Subject: [PATCH] Add reverse geocoding for brewery street addresses (#245) * Add geocoding to seed application, remove postal codes from generator Update comments --- .gitignore | 2 +- docs/pipeline/ETHICS-AND-KNOWN-ISSUES.md | 23 +- tooling/pipeline/CMakeLists.txt | 10 +- .../pipeline/includes/biergarten_pipeline.h | 5 +- .../biergarten_pipeline_orchestrator.h | 5 - .../biergarten_pipeline_orchestrator/coords.h | 58 + .../generation_json_validation.h | 14 +- .../data_generation/openai_generator.h | 10 +- .../data_generation/openai_json_schemas.h | 11 +- .../includes/data_model/generated_models.h | 12 +- .../database/sqlite_statement_helpers.h | 16 +- .../postal_code/mock_postal_code_service.h | 80 - .../postal_code/postal_code_service.h | 35 - .../postal_code/xeger_postal_code_service.h | 32 - tooling/pipeline/locations.json | 4422 ++++++++++------- .../application_options/parse_arguments.cc | 9 +- .../biergarten_pipeline_orchestrator.cc | 2 - .../generate_breweries.cc | 47 +- .../generate_users.cc | 17 +- .../log_results.cc | 1 - .../generation_json_validation.cc | 4 +- .../openai/generate_brewery.cc | 9 +- .../data_generation/openai/generate_user.cc | 3 +- tooling/pipeline/src/main.cc | 38 +- .../curated_data/curated_json_data_service.cc | 52 +- .../postal_code/xeger_postal_code_service.cc | 44 - .../src/services/sqlite/process_record.cc | 7 - .../services/sqlite/process_user_record.cc | 15 +- .../Database.Seed/Database.Seed.csproj | 20 +- .../DatabaseHelpers/ConnectionStrings.cs | 3 +- .../Geocoding/NominatimReverseGeocoder.cs | 124 + .../PipelineData/BreweryAddress.cs | 2 - .../Database.Seed/PipelineData/UserAddress.cs | 4 +- web/backend/Database/Database.Seed/Program.cs | 90 +- ...en_seed_2026-07-20T05-46-02.993511Z.sqlite | Bin 172032 -> 0 bytes ...en_seed_2026-08-24T01-52-09.841693Z.sqlite | Bin 0 -> 524288 bytes .../SeedData/open-ai-test.sqlite | Bin 94208 -> 0 bytes .../SeedData/open-ai-test2.sqlite | Bin 286720 -> 0 bytes .../Database.Seed/SeedData/seed.sqlite | Bin 61440 -> 0 bytes .../Sqlite/PipelineSeedDataReader.cs | 16 +- .../Repository/BreweryRepository.cs | 21 +- 41 files changed, 2966 insertions(+), 2297 deletions(-) create mode 100644 tooling/pipeline/includes/biergarten_pipeline_orchestrator/coords.h delete mode 100644 tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h delete mode 100644 tooling/pipeline/includes/services/postal_code/postal_code_service.h delete mode 100644 tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h delete mode 100644 tooling/pipeline/src/services/postal_code/xeger_postal_code_service.cc create mode 100644 web/backend/Database/Database.Seed/Geocoding/NominatimReverseGeocoder.cs delete mode 100644 web/backend/Database/Database.Seed/SeedData/biergarten_seed_2026-07-20T05-46-02.993511Z.sqlite create mode 100644 web/backend/Database/Database.Seed/SeedData/biergarten_seed_2026-08-24T01-52-09.841693Z.sqlite delete mode 100644 web/backend/Database/Database.Seed/SeedData/open-ai-test.sqlite delete mode 100644 web/backend/Database/Database.Seed/SeedData/open-ai-test2.sqlite delete mode 100644 web/backend/Database/Database.Seed/SeedData/seed.sqlite diff --git a/.gitignore b/.gitignore index eef46f41..078de8a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - +scratchpad.txt # dependencies /node_modules /.pnp diff --git a/docs/pipeline/ETHICS-AND-KNOWN-ISSUES.md b/docs/pipeline/ETHICS-AND-KNOWN-ISSUES.md index fc54d59b..08d9ca9b 100644 --- a/docs/pipeline/ETHICS-AND-KNOWN-ISSUES.md +++ b/docs/pipeline/ETHICS-AND-KNOWN-ISSUES.md @@ -18,7 +18,7 @@ low-resource language failures. - [Known issues](#known-issues) - [Hallucinated brewing techniques](#hallucinated-brewing-techniques) - [Low-resource language hallucination](#low-resource-language-hallucination) - - [Synthetic postal codes](#synthetic-postal-codes) + - [Synthetic coordinates](#synthetic-coordinates) --- @@ -284,20 +284,17 @@ Output sample: [./french-cities.example](french-cities.example) SQLite schema so downstream applications can filter or flag potentially hallucinated text by language tier. -### Synthetic postal codes +### Synthetic coordinates -When the pipeline is run without `--mocked`, `XegerPostalCodeService` generates -a fresh postal code per brewery/user address by reverse-matching one of the -city's curated postal-code regexes from `locations.json` (falling back to the -country format regex), rather than returning one of `MockPostalCodeService`'s -curated real-world examples. +Each brewery and user address carries a longitude/latitude pair, sampled +uniformly at random within a 5 km disc centred on the city's curated +`latitude`/`longitude` from `locations.json`. -The generated code is **format-conformant by construction** — it always -satisfies the regex it was generated from — but it is not looked up from any -real postal registry. It does not correspond to a real address, business, or -resident, and should not be treated as accurate geocoding or delivery data. This -is consistent with the rest of the dataset: fixture data for a proof-of-concept, -not a source of truth. +The resulting point is **plausible by construction** — it always falls within +the city's vicinity — but it is not looked up from any real address registry. +It does not correspond to a real address, business, or resident, and should +not be treated as accurate geocoding data. This is consistent with the rest of +the dataset: fixture data for a proof-of-concept, not a source of truth. --- diff --git a/tooling/pipeline/CMakeLists.txt b/tooling/pipeline/CMakeLists.txt index 33a813fd..dd3e0e03 100644 --- a/tooling/pipeline/CMakeLists.txt +++ b/tooling/pipeline/CMakeLists.txt @@ -32,7 +32,9 @@ else() if(CUDAToolkit_FOUND) message(STATUS "[biergarten] NVIDIA GPU detected — enabling CUDA acceleration.") set(GGML_CUDA ON CACHE BOOL "Enable CUDA for NVIDIA GPUs" FORCE) - set(CMAKE_CUDA_ARCHITECTURES native) + if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES) + set(CMAKE_CUDA_ARCHITECTURES native) + endif() elseif(hip_FOUND OR DEFINED ENV{ROCM_PATH} OR EXISTS "/opt/rocm") message(STATUS "[biergarten] AMD GPU detected — enabling HIP/ROCm acceleration.") set(GGML_HIPBLAS ON CACHE BOOL "Enable HIP for AMD GPUs" FORCE) @@ -149,7 +151,6 @@ add_executable(${PROJECT_NAME} target_sources(${PROJECT_NAME} PRIVATE src/main.cc ) - # --- json_handling --- target_sources(${PROJECT_NAME} PRIVATE src/services/curated_data/curated_json_data_service.cc @@ -224,11 +225,6 @@ target_sources(${PROJECT_NAME} PRIVATE src/services/enrichment/wikipedia/get_summary.cc ) -# --- services: postal_code --- -target_sources(${PROJECT_NAME} PRIVATE - src/services/postal_code/xeger_postal_code_service.cc -) - # --- services: xeger --- target_sources(${PROJECT_NAME} PRIVATE src/services/xeger/xeger.cc diff --git a/tooling/pipeline/includes/biergarten_pipeline.h b/tooling/pipeline/includes/biergarten_pipeline.h index 74cd93f7..fd7f293f 100644 --- a/tooling/pipeline/includes/biergarten_pipeline.h +++ b/tooling/pipeline/includes/biergarten_pipeline.h @@ -61,10 +61,7 @@ #include "services/enrichment/mock_enrichment.h" #include "services/enrichment/wikipedia_service.h" -// --- services: postal_code --- -#include "services/postal_code/mock_postal_code_service.h" -#include "services/postal_code/postal_code_service.h" -#include "services/postal_code/xeger_postal_code_service.h" +// --- services: xeger --- #include "services/xeger/xeger.h" // --- services: logging --- diff --git a/tooling/pipeline/includes/biergarten_pipeline_orchestrator.h b/tooling/pipeline/includes/biergarten_pipeline_orchestrator.h index ff0f7210..a99acd82 100644 --- a/tooling/pipeline/includes/biergarten_pipeline_orchestrator.h +++ b/tooling/pipeline/includes/biergarten_pipeline_orchestrator.h @@ -16,7 +16,6 @@ #include "services/database/export_service.h" #include "services/enrichment/enrichment_service.h" #include "services/logging/logger.h" -#include "services/postal_code/postal_code_service.h" /** * @brief Main orchestrator for the Biergarten data generation pipeline. @@ -35,8 +34,6 @@ class BiergartenPipelineOrchestrator { * @param exporter Database backend for persisting generated records. * @param curated_data_service Loads curated location, persona, and name * data used to seed generation. - * @param postal_code_service Resolves a postal code for a city from its - * curated postal-code data. * @param application_options CLI configuration and paths. */ BiergartenPipelineOrchestrator( @@ -45,7 +42,6 @@ class BiergartenPipelineOrchestrator { std::unique_ptr generator, std::unique_ptr exporter, std::unique_ptr curated_data_service, - std::unique_ptr postal_code_service, const ApplicationOptions& application_options); /** @@ -82,7 +78,6 @@ class BiergartenPipelineOrchestrator { */ std::unique_ptr exporter_; std::unique_ptr curated_data_service_; - std::unique_ptr postal_code_service_; ApplicationOptions application_options_; diff --git a/tooling/pipeline/includes/biergarten_pipeline_orchestrator/coords.h b/tooling/pipeline/includes/biergarten_pipeline_orchestrator/coords.h new file mode 100644 index 00000000..9c21d26e --- /dev/null +++ b/tooling/pipeline/includes/biergarten_pipeline_orchestrator/coords.h @@ -0,0 +1,58 @@ +#ifndef BIERGARTEN_PIPELINE_INCLUDES_BIERGARTEN_PIPELINE_ORCHESTRATOR_COORDS_H_ +#define BIERGARTEN_PIPELINE_INCLUDES_BIERGARTEN_PIPELINE_ORCHESTRATOR_COORDS_H_ + +/** + * @file biergarten_pipeline_orchestrator/coords.h + * @brief Shared coordinate jitter helper used to place generated + * brewery/user addresses near a city's centre. + */ + +#include +#include +#include + +namespace biergarten_pipeline_orchestrator_internal { + +struct Coords { + double longitude; + double latitude; +}; + +inline constexpr double kEarthRadiusKm = 6371.0; + +inline double DegreesToRadians(double degrees) { + return degrees * std::numbers::pi / 180.0; +} + +inline double RadiansToDegrees(double radians) { + return radians * 180.0 / std::numbers::pi; +} + +/** + * @brief Samples a point uniformly at random within @p distance_km of + * @p centre. + */ +inline Coords GetRandomCoordsWithinRange(const Coords& centre, + const int distance_km, + std::mt19937& rng) { + std::uniform_real_distribution angle_dist(0.0, + 2.0 * std::numbers::pi); + std::uniform_real_distribution unit_dist(0.0, 1.0); + + const double angle_radians = angle_dist(rng); + // sqrt() keeps points uniformly distributed over the disc's area. + const double radius_km = distance_km * std::sqrt(unit_dist(rng)); + + const double delta_latitude_degrees = + RadiansToDegrees(radius_km * std::cos(angle_radians) / kEarthRadiusKm); + const double delta_longitude_degrees = RadiansToDegrees( + radius_km * std::sin(angle_radians) / + (kEarthRadiusKm * std::cos(DegreesToRadians(centre.latitude)))); + + return Coords{.longitude = centre.longitude + delta_longitude_degrees, + .latitude = centre.latitude + delta_latitude_degrees}; +} + +} // namespace biergarten_pipeline_orchestrator_internal + +#endif // BIERGARTEN_PIPELINE_INCLUDES_BIERGARTEN_PIPELINE_ORCHESTRATOR_COORDS_H_ diff --git a/tooling/pipeline/includes/data_generation/generation_json_validation.h b/tooling/pipeline/includes/data_generation/generation_json_validation.h index 5f7f099a..125f665c 100644 --- a/tooling/pipeline/includes/data_generation/generation_json_validation.h +++ b/tooling/pipeline/includes/data_generation/generation_json_validation.h @@ -3,9 +3,9 @@ /** * @file data_generation/generation_json_validation.h - * @brief Generator-agnostic helpers for preparing prompt context and - * validating structured JSON output. Shared across all DataGenerator - * implementations (Llama, OpenAI, ...). + * @brief Generator-agnostic helpers, shared across all DataGenerator + * implementations (Llama, OpenAI, ...), for preparing prompt context and + * validating structured JSON output. */ #include @@ -36,11 +36,9 @@ std::optional ValidateBreweryJson(const std::string& raw, BreweryResult& brewery_out); /** - * @brief Validates and parses user JSON output. - * - * Only populates `username`, `bio`, and `activity_weight` -- `first_name` - * and `last_name` are not LLM-authored and are set separately from the - * sampled Name. + * @brief Validates and parses user JSON output, populating only + * `username`, `bio`, and `activity_weight` (`first_name` and `last_name` + * come from the sampled Name). * * @param raw Raw model output. * @param user_out Parsed user payload. diff --git a/tooling/pipeline/includes/data_generation/openai_generator.h b/tooling/pipeline/includes/data_generation/openai_generator.h index 27f759cc..e54c3cf4 100644 --- a/tooling/pipeline/includes/data_generation/openai_generator.h +++ b/tooling/pipeline/includes/data_generation/openai_generator.h @@ -18,13 +18,9 @@ /** * @brief Data generator implementation backed by the OpenAI Chat - * Completions API. - * - * Unlike LlamaGenerator, this generator has no local model state and no - * chat-template formatting step -- Chat Completions takes system/user - * messages directly, and Structured Outputs (response_format: json_schema, - * strict: true) guarantee schema-valid JSON, replacing llama.cpp's GBNF - * grammar constraint. + * Completions API, sending system/user messages directly and using + * Structured Outputs (response_format: json_schema, strict: true) to + * guarantee schema-valid JSON. */ class OpenAIGenerator final : public DataGenerator { public: diff --git a/tooling/pipeline/includes/data_generation/openai_json_schemas.h b/tooling/pipeline/includes/data_generation/openai_json_schemas.h index 8cc8f31c..4dcd50c8 100644 --- a/tooling/pipeline/includes/data_generation/openai_json_schemas.h +++ b/tooling/pipeline/includes/data_generation/openai_json_schemas.h @@ -4,14 +4,9 @@ /** * @file data_generation/openai_json_schemas.h * @brief JSON Schemas constraining structured output from OpenAIGenerator - * Chat Completions requests, via response_format.json_schema (Structured - * Outputs, strict mode). This is OpenAI's equivalent of the GBNF grammars - * in json_grammars.h -- the API guarantees the response message content is - * a single JSON string that validates against the schema, so there's no - * grammar-level "thought-block" prefix to account for. - * - * OpenAI's strict mode requires "additionalProperties": false on every - * object in the schema, which these already have. + * Chat Completions requests via response_format.json_schema (Structured + * Outputs, strict mode), each setting "additionalProperties": false as + * strict mode requires. */ #include diff --git a/tooling/pipeline/includes/data_model/generated_models.h b/tooling/pipeline/includes/data_model/generated_models.h index 89b2cc9d..2e636b7b 100644 --- a/tooling/pipeline/includes/data_model/generated_models.h +++ b/tooling/pipeline/includes/data_model/generated_models.h @@ -88,23 +88,23 @@ struct EnrichedCity { }; /** - * @brief A physical address: the city plus a concrete postal code selected - * from that city's curated postal-code examples. + * @brief A physical address: the city plus a coordinate pair sampled near + * the city's centre. */ struct BreweryAddress { City city; - std::string postal_code{}; double longitude{}; double latitude{}; }; /** - * @brief A physical address for a generated user: the city plus a concrete - * postal code selected from that city's curated postal-code examples. + * @brief A physical address for a generated user: the city plus a + * coordinate pair sampled near the city's centre. */ struct UserAddress { City city; - std::string postal_code{}; + double longitude{}; + double latitude{}; }; /** diff --git a/tooling/pipeline/includes/services/database/sqlite_statement_helpers.h b/tooling/pipeline/includes/services/database/sqlite_statement_helpers.h index 8b7a2507..a86d2a8f 100644 --- a/tooling/pipeline/includes/services/database/sqlite_statement_helpers.h +++ b/tooling/pipeline/includes/services/database/sqlite_statement_helpers.h @@ -54,7 +54,6 @@ CREATE TABLE IF NOT EXISTS brewery_addresses ( id INTEGER PRIMARY KEY AUTOINCREMENT, brewery_id INTEGER NOT NULL, city_id INTEGER NOT NULL, - postal_code TEXT NOT NULL, longitude REAL NOT NULL, latitude REAL NOT NULL, FOREIGN KEY(brewery_id) REFERENCES breweries(id) ON DELETE CASCADE, @@ -90,7 +89,8 @@ CREATE TABLE IF NOT EXISTS user_addresses ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, city_id INTEGER NOT NULL, - postal_code TEXT NOT NULL, + longitude REAL NOT NULL, + latitude REAL NOT NULL, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY(city_id) REFERENCES cities(id) ON DELETE CASCADE ); @@ -130,10 +130,9 @@ inline constexpr std::string_view kInsertBreweryAddressSql = R"sql( INSERT INTO brewery_addresses ( brewery_id, city_id, - postal_code, longitude, latitude -) VALUES (?, ?, ?, ?, ?); +) VALUES (?, ?, ?, ?); )sql"; inline constexpr std::string_view kInsertUserSql = R"sql( @@ -153,8 +152,9 @@ inline constexpr std::string_view kInsertUserAddressSql = R"sql( INSERT INTO user_addresses ( user_id, city_id, - postal_code -) VALUES (?, ?, ?); + longitude, + latitude +) VALUES (?, ?, ?, ?); )sql"; // sqlite3_bind_*() parameter indices are 1-based, matching the "?" @@ -182,7 +182,6 @@ enum BreweryBindIndex { enum BreweryAddressBindIndex { kBreweryAddressBreweryIdBindIndex = 1, kBreweryAddressCityIdBindIndex, - kBreweryAddressPostalCodeBindIndex, kBreweryAddressLongitudeBindIndex, kBreweryAddressLatitudeBindIndex, }; @@ -201,7 +200,8 @@ enum UserBindIndex { enum UserAddressBindIndex { kUserAddressUserIdBindIndex = 1, kUserAddressCityIdBindIndex, - kUserAddressPostalCodeBindIndex, + kUserAddressLongitudeBindIndex, + kUserAddressLatitudeBindIndex, }; SqliteStatementHandle PrepareStatement(const SqliteDatabaseHandle& db_handle, diff --git a/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h b/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h deleted file mode 100644 index 5c23e334..00000000 --- a/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_MOCK_POSTAL_CODE_SERVICE_H_ -#define BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_MOCK_POSTAL_CODE_SERVICE_H_ - -/** - * @file services/postal_code/mock_postal_code_service.h - * @brief Data-driven postal code service that selects the first curated - * example for a city and validates it against the city's postal-code regex. - */ - -#include -#include -#include -#include - -#include "services/postal_code/postal_code_service.h" - -/** - * @brief Postal code service backed entirely by the curated locations - * dataset: it returns the city's first example postal code after checking it - * against the curated postal-code regex. - * - * A precise city regex is preferred when present; otherwise the permissive - * country format regex is used as the fallback. A city with no examples, or an - * example that fails validation, throws so the caller can skip the city. - */ -class MockPostalCodeService final : public IPostalCodeService { - public: - std::string GeneratePostalCode(const City& city) override { - const PostalCodeSpec& spec = city.postal_code; - - if (spec.examples.empty()) { - throw std::runtime_error(std::format( - "No postal-code examples available for city '{}'", city.city)); - } - - const std::string& candidate = spec.examples.front(); - - if (!MatchesAnyPattern(candidate, spec)) { - throw std::runtime_error( - std::format("Postal code '{}' for city '{}' does not match the " - "curated postal-code regex", - candidate, city.city)); - } - - return candidate; - } - - private: - /** - * @brief Returns true if @p candidate matches any city regex, or the - * country format regex when no city regex matches. When the spec carries no - * usable regex at all, validation is skipped (returns true). - */ - static bool MatchesAnyPattern(const std::string& candidate, - const PostalCodeSpec& spec) { - bool has_pattern = false; - - for (const std::string& pattern : spec.city_regexes) { - if (pattern.empty()) { - continue; - } - has_pattern = true; - if (std::regex_match(candidate, std::regex(pattern))) { - return true; - } - } - - if (!spec.country_format_regex.empty()) { - has_pattern = true; - if (std::regex_match(candidate, - std::regex(spec.country_format_regex))) { - return true; - } - } - - return !has_pattern; - } -}; - -#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_MOCK_POSTAL_CODE_SERVICE_H_ diff --git a/tooling/pipeline/includes/services/postal_code/postal_code_service.h b/tooling/pipeline/includes/services/postal_code/postal_code_service.h deleted file mode 100644 index c040c4a7..00000000 --- a/tooling/pipeline/includes/services/postal_code/postal_code_service.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_POSTAL_CODE_SERVICE_H_ -#define BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_POSTAL_CODE_SERVICE_H_ - -/** - * @file services/postal_code/postal_code_service.h - * @brief Abstraction for resolving a postal code for a city. - */ - -#include - -#include "data_model/models.h" - -/** - * @brief Interface for services that resolve a postal code for a city. - */ -class IPostalCodeService { - public: - IPostalCodeService() = default; - virtual ~IPostalCodeService() = default; - - IPostalCodeService(const IPostalCodeService&) = delete; - IPostalCodeService& operator=(const IPostalCodeService&) = delete; - IPostalCodeService(IPostalCodeService&&) = delete; - IPostalCodeService& operator=(IPostalCodeService&&) = delete; - - /** - * @brief Resolves a postal code for @p city. - * - * @param city City whose curated postal-code examples supply the result. - * @return A postal code string, or an empty string if none is available. - */ - virtual std::string GeneratePostalCode(const City& city) = 0; -}; - -#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_POSTAL_CODE_SERVICE_H_ diff --git a/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h b/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h deleted file mode 100644 index 04f17d62..00000000 --- a/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_XEGER_POSTAL_CODE_SERVICE_H_ -#define BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_XEGER_POSTAL_CODE_SERVICE_H_ - -/** - * @file services/postal_code/xeger_postal_code_service.h - * @brief Postal code service that generates a fresh, format-conformant code - * per call from the curated regex patterns, instead of returning a fixed - * example. - */ - -#include - -#include "services/postal_code/postal_code_service.h" - -/** - * @brief Postal code service using regex-driven generation (xeger). - * - * Picks among the city's curated `city_regexes` (falls back to - * `country_format_regex`), then generates a random string matching that pattern - * via GenerateStringFromRegex(). - */ -class XegerPostalCodeService final : public IPostalCodeService { - public: - XegerPostalCodeService(); - - std::string GeneratePostalCode(const City& city) override; - - private: - std::mt19937 rng_; -}; - -#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_XEGER_POSTAL_CODE_SERVICE_H_ diff --git a/tooling/pipeline/locations.json b/tooling/pipeline/locations.json index e0d37e51..07d0c915 100644 --- a/tooling/pipeline/locations.json +++ b/tooling/pipeline/locations.json @@ -1,1910 +1,2622 @@ -[ - { - "city": "Cape Town", - "state_province": "Western Cape", - "iso3166_2": "ZA-WC", - "country": "South Africa", - "iso3166_1": "ZA", - "latitude": -33.9249, - "longitude": 18.4241, - "local_languages": ["af", "en", "xh"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:7(?:10[03]|4(?:[26][05]|0[04-7]|3[05-79]|4[0-4679]|5[0156]|8[09]|9[0139])|5(?:[56][01]|0[013-7]|25|3[0235-9]|40|8[12])|7(?:[23]5|0[058]|4[05]|5[0-256]|6[02-4679]|7[09]|8[02-9]|9[08])|8(?:[26]4|0[0-2568]|48|72|8[08])|9(?:[12]5|[59]0|3[57]|4[156]|6[56]|7[4-9]))|8(?:0(?:[246]0|0[0-3578]|1[0278]|5[01])|160))$" +{ + "cities": [ + { + "city": "Cape Town", + "state_province": "Western Cape", + "iso3166_2": "ZA-WC", + "country": "South Africa", + "iso3166_1": "ZA", + "latitude": -33.9249, + "longitude": 18.4241, + "local_languages": [ + "af", + "en", + "xh" ], - "examples": ["7100", "7103", "7400"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 135, - "notes": "Cape Town metro spans roughly 7000-8099; 7xxx also covers parts of the wider Western Cape. Enumerated from 135 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Johannesburg", - "state_province": "Gauteng", - "iso3166_2": "ZA-GT", - "country": "South Africa", - "iso3166_1": "ZA", - "latitude": -26.2041, - "longitude": 28.0473, - "local_languages": ["en", "zu", "st", "af"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:1(?:7(?:0[08]|1[1256])|8(?:0[13-9]|1[14-689]|37|41|5[23]|6[35]))|2(?:0(?:[156]\\d|0[013-9]|2[0-468]|3[0-8]|4[0-47-9]|7[02-46-8]|8[12]|9[0-5])|1(?:[01]\\d|2[0-489]|3[0-24-79]|4[0-57-9]|5[1-9]|6[0-579]|7[01]|8[89]|9[0-8])))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:7(?:10[03]|4(?:[26][05]|0[04-7]|3[05-79]|4[0-4679]|5[0156]|8[09]|9[0139])|5(?:[56][01]|0[013-7]|25|3[0235-9]|40|8[12])|7(?:[23]5|0[058]|4[05]|5[0-256]|6[02-4679]|7[09]|8[02-9]|9[08])|8(?:[26]4|0[0-2568]|48|72|8[08])|9(?:[12]5|[59]0|3[57]|4[156]|6[56]|7[4-9]))|8(?:0(?:[246]0|0[0-3578]|1[0278]|5[01])|160))$" + ], + "examples": [ + "7100", + "7103", + "7400" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 135, + "notes": "Cape Town metro spans roughly 7000-8099; 7xxx also covers parts of the wider Western Cape. Enumerated from 135 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Johannesburg", + "state_province": "Gauteng", + "iso3166_2": "ZA-GT", + "country": "South Africa", + "iso3166_1": "ZA", + "latitude": -26.2041, + "longitude": 28.0473, + "local_languages": [ + "en", + "zu", + "st", + "af" ], - "examples": ["1700", "1708", "1711"], - "source": "derived from GeoNames postal data (radius, r=18km)", - "codes_matched": 178, - "notes": "Johannesburg street codes cluster in 2000-2199; PO Box codes differ. Enumerated from 178 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Durban", - "state_province": "KwaZulu-Natal", - "iso3166_2": "ZA-NL", - "country": "South Africa", - "iso3166_1": "ZA", - "latitude": -29.8587, - "longitude": 31.0218, - "local_languages": ["zu", "en"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:36(?:0[02-57-9]|1[0-7]|2[014-69]|3[0145]|5[0-25])|4(?:0(?:0[014-8]|1[13-9]|2[1-9]|3[124-9]|5[0-36-9]|6\\d|7[0-24589]|8[023589]|9[0-48])|1(?:0[149]|1[0135]|3[378]|4[48]|53)|3(?:[02]1|10|5[09]|6[0-24])))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:1(?:7(?:0[08]|1[1256])|8(?:0[13-9]|1[14-689]|37|41|5[23]|6[35]))|2(?:0(?:[156]\\d|0[013-9]|2[0-468]|3[0-8]|4[0-47-9]|7[02-46-8]|8[12]|9[0-5])|1(?:[01]\\d|2[0-489]|3[0-24-79]|4[0-57-9]|5[1-9]|6[0-579]|7[01]|8[89]|9[0-8])))$" + ], + "examples": [ + "1700", + "1708", + "1711" + ], + "source": "derived from GeoNames postal data (radius, r=18km)", + "codes_matched": 178, + "notes": "Johannesburg street codes cluster in 2000-2199; PO Box codes differ. Enumerated from 178 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Durban", + "state_province": "KwaZulu-Natal", + "iso3166_2": "ZA-NL", + "country": "South Africa", + "iso3166_1": "ZA", + "latitude": -29.8587, + "longitude": 31.0218, + "local_languages": [ + "zu", + "en" ], - "examples": ["3600", "3602", "3603"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 121, - "notes": "eThekwini/Durban street codes cluster in 4000-4199. Enumerated from 121 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Franschhoek", - "state_province": "Western Cape", - "iso3166_2": "ZA-WC", - "country": "South Africa", - "iso3166_1": "ZA", - "latitude": -33.9146, - "longitude": 19.1198, - "local_languages": ["af", "en"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^769[01]$"], - "examples": ["7690", "7691"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 2, - "notes": "Single town code. Enumerated from 2 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Nairobi", - "state_province": "Nairobi", - "iso3166_2": "KE-30", - "country": "Kenya", - "iso3166_1": "KE", - "latitude": -1.2921, - "longitude": 36.8219, - "local_languages": ["sw", "en"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^00(?:[348]00|10[0-2]|2(?:1[03-69]|3[013569])|5(?:0\\d|1[0-35-9]|2[0-3])|6(?:0[013-79]|1[0-589]|2[0-35-7])|90[02356])$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:36(?:0[02-57-9]|1[0-7]|2[014-69]|3[0145]|5[0-25])|4(?:0(?:0[014-8]|1[13-9]|2[1-9]|3[124-9]|5[0-36-9]|6\\d|7[0-24589]|8[023589]|9[0-48])|1(?:0[149]|1[0135]|3[378]|4[48]|53)|3(?:[02]1|10|5[09]|6[0-24])))$" + ], + "examples": [ + "3600", + "3602", + "3603" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 121, + "notes": "eThekwini/Durban street codes cluster in 4000-4199. Enumerated from 121 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Franschhoek", + "state_province": "Western Cape", + "iso3166_2": "ZA-WC", + "country": "South Africa", + "iso3166_1": "ZA", + "latitude": -33.9146, + "longitude": 19.1198, + "local_languages": [ + "af", + "en" ], - "examples": ["00100", "00101", "00102"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 69, - "notes": "All Nairobi County codes begin 00; GPO is 00100. Range 00100-00999. Enumerated from 69 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Buenos Aires", - "state_province": "Buenos Aires City", - "iso3166_2": "AR-C", - "country": "Argentina", - "iso3166_1": "AR", - "latitude": -34.6037, - "longitude": -58.3816, - "local_languages": ["es-AR"], - "postal_code": { - "country_format_regex": "^(?:[A-HJ-NP-TV-Z]\\d{4}[A-Z]{3}|\\d{4})$", - "city_regex": ["^C1[0-4]\\d{2}[A-Z]{3}$", "^1[0-4]\\d{2}$"], - "examples": ["C1425DKE", "1425"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "CABA uses CPA prefix 'C'. Legacy 4-digit form 1000-1499 still widely accepted." - } - }, - { - "city": "Bariloche", - "state_province": "Río Negro", - "iso3166_2": "AR-R", - "country": "Argentina", - "iso3166_1": "AR", - "latitude": -41.1335, - "longitude": -71.3103, - "local_languages": ["es-AR"], - "postal_code": { - "country_format_regex": "^(?:[A-HJ-NP-TV-Z]\\d{4}[A-Z]{3}|\\d{4})$", - "city_regex": ["^840[09]$"], - "examples": ["8400", "8409"], - "source": "derived from GeoNames postal data (sub, r=25km)", - "codes_matched": 2, - "notes": "San Carlos de Bariloche legacy code 8400; CPA prefix 'R' (Rio Negro). Enumerated from 2 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Bogotá", - "state_province": "Bogotá D.C.", - "iso3166_2": "CO-DC", - "country": "Colombia", - "iso3166_1": "CO", - "latitude": 4.711, - "longitude": -74.0721, - "local_languages": ["es-CO"], - "postal_code": { - "country_format_regex": "^\\d{6}$", - "city_regex": [ - "^11(?:0(?:[29][1-3]1|[36][12]1|[47][1-4]1|1[1-5]1|8[1-8]1)|1(?:[457]11|[23][12]1|[89][1-4]1|0[1-7]1|1(?:[1-4]1|[5-7][16])|6[1-3]1))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^769[01]$" + ], + "examples": [ + "7690", + "7691" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 2, + "notes": "Single town code. Enumerated from 2 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Nairobi", + "state_province": "Nairobi", + "iso3166_2": "KE-30", + "country": "Kenya", + "iso3166_1": "KE", + "latitude": -1.2921, + "longitude": 36.8219, + "local_languages": [ + "sw", + "en" ], - "examples": ["110111", "110121", "110131"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 66, - "notes": "Bogota D.C. = DANE department code 11. Enumerated from 66 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Medellín", - "state_province": "Antioquia", - "iso3166_2": "CO-ANT", - "country": "Colombia", - "iso3166_1": "CO", - "latitude": 6.2442, - "longitude": -75.5812, - "local_languages": ["es-CO"], - "postal_code": { - "country_format_regex": "^\\d{6}$", - "city_regex": ["^0500(?:0[1-7]|1[0-8]|2\\d|3[0-7]|4[0-478])$"], - "examples": ["050001", "050002", "050003"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 41, - "notes": "Antioquia = 05; Medellin zone = 050xxx. Wider metro uses 051xxx-055xxx. Enumerated from 41 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "São Paulo", - "state_province": "São Paulo", - "iso3166_2": "BR-SP", - "country": "Brazil", - "iso3166_1": "BR", - "latitude": -23.5505, - "longitude": -46.6333, - "local_languages": ["pt-BR"], - "postal_code": { - "country_format_regex": "^\\d{5}-?\\d{3}$", - "city_regex": ["^0[1-5]\\d{3}-?\\d{3}$", "^08[0-4]\\d{2}-?\\d{3}$"], - "examples": ["01310-100"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Sao Paulo city CEP: 01000-000 to 05999-999, plus 08000-000 to 08499-999." - } - }, - { - "city": "Curitiba", - "state_province": "Paraná", - "iso3166_2": "BR-PR", - "country": "Brazil", - "iso3166_1": "BR", - "latitude": -25.4284, - "longitude": -49.2733, - "local_languages": ["pt-BR"], - "postal_code": { - "country_format_regex": "^\\d{5}-?\\d{3}$", - "city_regex": ["^8[0-2]\\d{3}-?\\d{3}$"], - "examples": ["80010-010"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Curitiba CEP: 80000-000 to 82999-999." - } - }, - { - "city": "Rio de Janeiro", - "state_province": "Rio de Janeiro", - "iso3166_2": "BR-RJ", - "country": "Brazil", - "iso3166_1": "BR", - "latitude": -22.9068, - "longitude": -43.1729, - "local_languages": ["pt-BR"], - "postal_code": { - "country_format_regex": "^\\d{5}-?\\d{3}$", - "city_regex": ["^(?:2[0-2]\\d{3}|23[0-7]\\d{2})-?\\d{3}$"], - "examples": ["20040-020"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Rio city CEP: 20000-000 to 23799-999." - } - }, - { - "city": "Santiago", - "state_province": "Santiago Metropolitan", - "iso3166_2": "CL-RM", - "country": "Chile", - "iso3166_1": "CL", - "latitude": -33.4489, - "longitude": -70.6693, - "local_languages": ["es-CL"], - "postal_code": { - "country_format_regex": "^\\d{7}$", - "city_regex": [ - "^(?:7(?:5[05]|63|75|8[15]|9[17])|8(?:[26]4|[48][26]|[59][048]|01|3[28]|7[08])|9(?:0[28]|1[26]|2[05]))\\d{4}$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^00(?:[348]00|10[0-2]|2(?:1[03-69]|3[013569])|5(?:0\\d|1[0-35-9]|2[0-3])|6(?:0[013-79]|1[0-589]|2[0-35-7])|90[02356])$" + ], + "examples": [ + "00100", + "00101", + "00102" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 69, + "notes": "All Nairobi County codes begin 00; GPO is 00100. Range 00100-00999. Enumerated from 69 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Buenos Aires", + "state_province": "Buenos Aires City", + "iso3166_2": "AR-C", + "country": "Argentina", + "iso3166_1": "AR", + "latitude": -34.6037, + "longitude": -58.3816, + "local_languages": [ + "es-AR" ], - "examples": ["7500000", "7550000", "7630000"], - "source": "derived from GeoNames postal data (radius, r=18km)", - "codes_matched": 31, - "notes": "Santiago Province spans approx. 7500000-9250000; 7xx = eastern communes, 8xx = central. Dataset is commune-level (nnn0000); 3-digit commune prefix + block. Enumerated from 31 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Valdivia", - "state_province": "Los Ríos", - "iso3166_2": "CL-LR", - "country": "Chile", - "iso3166_1": "CL", - "latitude": -39.8142, - "longitude": -73.2459, - "local_languages": ["es-CL"], - "postal_code": { - "country_format_regex": "^\\d{7}$", - "city_regex": ["^509\\d{4}$"], - "examples": ["5090000"], - "source": "derived from GeoNames postal data (sub, r=20km)", - "codes_matched": 1, - "notes": "Los Rios region range approx. 5090000-5230000; Valdivia commune base code 5090000. Dataset is commune-level (nnn0000); 3-digit commune prefix + block. Enumerated from 1 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Lima", - "state_province": "Lima", - "iso3166_2": "PE-LMA", - "country": "Peru", - "iso3166_1": "PE", - "latitude": -12.0464, - "longitude": -77.0428, - "local_languages": ["es-PE"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^15(?:0(?:0[1346-9]|1[1289]|2[1-46]|3[346-9]|4[6-9]|5[46-8]|6[3467]|7[2-469]|8[1-46-8]|9[346])|1(?:0[1-36-9]|1[23])|3(?:0[12467]|1[124]|2[6-8]|3[1-3])|4(?:[039][148]|[14][269]|[28][37]|53|79)|8(?:0[13469]|1[126-8]|2[489]|3[1467]|42))$" + "postal_code": { + "country_format_regex": "^(?:[A-HJ-NP-TV-Z]\\d{4}[A-Z]{3}|\\d{4})$", + "city_regex": [ + "^C1[0-4]\\d{2}[A-Z]{3}$", + "^1[0-4]\\d{2}$" + ], + "examples": [ + "C1425DKE", + "1425" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "CABA uses CPA prefix 'C'. Legacy 4-digit form 1000-1499 still widely accepted." + } + }, + { + "city": "Bariloche", + "state_province": "Río Negro", + "iso3166_2": "AR-R", + "country": "Argentina", + "iso3166_1": "AR", + "latitude": -41.1335, + "longitude": -71.3103, + "local_languages": [ + "es-AR" ], - "examples": ["15001", "15003", "15004"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 111, - "notes": "Lima Region = prefix 15; metropolitan Lima districts sit in 15001-15099. Callao is 07xxx. Enumerated from 111 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Tokyo", - "state_province": "Tokyo", - "iso3166_2": "JP-13", - "country": "Japan", - "iso3166_1": "JP", - "latitude": 35.6762, - "longitude": 139.6503, - "local_languages": ["ja"], - "postal_code": { - "country_format_regex": "^\\d{3}-?\\d{4}$", - "city_regex": [ - "^(?:1(?:[068]\\d|[14][0-6]|2[013-5]|3[0-24-7]|5[0-8]|7[013-9]|95)|20[1-46])-?\\d{4}$" + "postal_code": { + "country_format_regex": "^(?:[A-HJ-NP-TV-Z]\\d{4}[A-Z]{3}|\\d{4})$", + "city_regex": [ + "^840[09]$" + ], + "examples": [ + "8400", + "8409" + ], + "source": "derived from GeoNames postal data (sub, r=25km)", + "codes_matched": 2, + "notes": "San Carlos de Bariloche legacy code 8400; CPA prefix 'R' (Rio Negro). Enumerated from 2 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Bogotá", + "state_province": "Bogotá D.C.", + "iso3166_2": "CO-DC", + "country": "Colombia", + "iso3166_1": "CO", + "latitude": 4.711, + "longitude": -74.0721, + "local_languages": [ + "es-CO" ], - "examples": ["100-0000", "100-0001", "100-0002"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 7876, - "notes": "Tokyo Metropolis: 100-xxxx to 208-xxxx. The 23 wards are 100-179. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 7876 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Osaka", - "state_province": "Osaka", - "iso3166_2": "JP-27", - "country": "Japan", - "iso3166_1": "JP", - "latitude": 34.6937, - "longitude": 135.5023, - "local_languages": ["ja"], - "postal_code": { - "country_format_regex": "^\\d{3}-?\\d{4}$", - "city_regex": ["^5(?:[35]\\d|4[0-7])-?\\d{4}$"], - "examples": ["530-0000", "530-0001", "530-0002"], - "source": "derived from GeoNames postal data (radius, r=12km)", - "codes_matched": 1440, - "notes": "Osaka City: 530-xxxx to 559-xxxx. Wider Osaka Prefecture is 5xx. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 1440 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Kyoto", - "state_province": "Kyoto", - "iso3166_2": "JP-26", - "country": "Japan", - "iso3166_1": "JP", - "latitude": 35.0116, - "longitude": 135.7681, - "local_languages": ["ja"], - "postal_code": { - "country_format_regex": "^\\d{3}-?\\d{4}$", - "city_regex": ["^6(?:0[0-7]|1[0-256])-?\\d{4}$"], - "examples": ["600-0000", "600-8001", "600-8002"], - "source": "derived from GeoNames postal data (radius, r=12km)", - "codes_matched": 4614, - "notes": "Kyoto City: 600-xxxx to 616-xxxx. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 4614 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Sapporo", - "state_province": "Hokkaido", - "iso3166_2": "JP-01", - "country": "Japan", - "iso3166_1": "JP", - "latitude": 43.0618, - "longitude": 141.3545, - "local_languages": ["ja"], - "postal_code": { - "country_format_regex": "^\\d{3}-?\\d{4}$", - "city_regex": ["^0(?:0[1-7]|6[0-5])-?\\d{4}$"], - "examples": ["001-0000", "001-0010", "001-0011"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 1373, - "notes": "Sapporo: 001-xxxx to 007-xxxx (north/west) and 060-xxxx to 065-xxxx (central/east). Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 1373 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Seoul", - "state_province": "Seoul", - "iso3166_2": "KR-11", - "country": "South Korea", - "iso3166_1": "KR", - "latitude": 37.5665, - "longitude": 126.978, - "local_languages": ["ko"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^0(?:1[0-46-9]|2[0-24-8]|3[013-79]|4\\d|5[0-8]|6[0-35-9]|7[02-9]|8[0-35-8])\\d{2}$" + "postal_code": { + "country_format_regex": "^\\d{6}$", + "city_regex": [ + "^11(?:0(?:[29][1-3]1|[36][12]1|[47][1-4]1|1[1-5]1|8[1-8]1)|1(?:[457]11|[23][12]1|[89][1-4]1|0[1-7]1|1(?:[1-4]1|[5-7][16])|6[1-3]1))$" + ], + "examples": [ + "110111", + "110121", + "110131" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 66, + "notes": "Bogota D.C. = DANE department code 11. Enumerated from 66 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Medellín", + "state_province": "Antioquia", + "iso3166_2": "CO-ANT", + "country": "Colombia", + "iso3166_1": "CO", + "latitude": 6.2442, + "longitude": -75.5812, + "local_languages": [ + "es-CO" ], - "examples": ["01000", "01001", "01002"], - "source": "derived from GeoNames postal data (radius, r=18km)", - "codes_matched": 5628, - "notes": "Post-2015 5-digit system: Seoul = 01000-09999. Compressed on the 3-digit prefix. Enumerated from 5628 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Busan", - "state_province": "Busan", - "iso3166_2": "KR-26", - "country": "South Korea", - "iso3166_1": "KR", - "latitude": 35.1796, - "longitude": 129.0756, - "local_languages": ["ko"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^4(?:6[0235-79]|7[0-35-9]|8[0-57-9]|9[0-5])\\d{2}$"], - "examples": ["46002", "46018", "46027"], - "source": "derived from GeoNames postal data (radius, r=18km)", - "codes_matched": 2214, - "notes": "Busan = 46000-49999. Compressed on the 3-digit prefix. Enumerated from 2214 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Ho Chi Minh City", - "state_province": "Ho Chi Minh", - "iso3166_2": "VN-SG", - "country": "Vietnam", - "iso3166_1": "VN", - "latitude": 10.8231, - "longitude": 106.6297, - "local_languages": ["vi"], - "postal_code": { - "country_format_regex": "^\\d{5,6}$", - "city_regex": ["^7[0-4]\\d{3}$", "^7[0-4]\\d{4}$"], - "examples": ["70000", "700000"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Current 5-digit system: HCMC = 70000-74999. Legacy/6-digit form (700000) still appears in some systems." - } - }, - { - "city": "Hanoi", - "state_province": "Hanoi", - "iso3166_2": "VN-HN", - "country": "Vietnam", - "iso3166_1": "VN", - "latitude": 21.0285, - "longitude": 105.8542, - "local_languages": ["vi"], - "postal_code": { - "country_format_regex": "^\\d{5,6}$", - "city_regex": ["^1[0-4]\\d{3}$", "^1[0-4]\\d{4}$"], - "examples": ["10000", "100000"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Hanoi = 10000-14999 (5-digit). Legacy 6-digit form 100000 still in circulation." - } - }, - { - "city": "Da Nang", - "state_province": "Da Nang", - "iso3166_2": "VN-DN", - "country": "Vietnam", - "iso3166_1": "VN", - "latitude": 16.0544, - "longitude": 108.2022, - "local_languages": ["vi"], - "postal_code": { - "country_format_regex": "^\\d{5,6}$", - "city_regex": ["^5[0-5]\\d{3}$", "^5[0-5]\\d{4}$"], - "examples": ["50000", "550000"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Sources conflict: Da Nang is cited as both 50000 and 55000. Pattern accepts 50000-55999 and the 6-digit legacy form." - } - }, - { - "city": "Bangkok", - "state_province": "Bangkok", - "iso3166_2": "TH-10", - "country": "Thailand", - "iso3166_1": "TH", - "latitude": 13.7563, - "longitude": 100.5018, - "local_languages": ["th"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^10(?:[4-8]00|1[0-7]0|2[024-69]0|3[0-3]0)$"], - "examples": ["10100", "10110", "10120"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 23, - "notes": "Bangkok = province code 10; codes run 10100-10900. Enumerated from 23 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Taipei", - "state_province": "Taipei", - "iso3166_2": "TW-TPE", - "country": "Taiwan", - "iso3166_1": "TW", - "latitude": 25.033, - "longitude": 121.5654, - "local_languages": ["zh-TW"], - "postal_code": { - "country_format_regex": "^\\d{3}(?:\\d{2}|\\d{3})?$", - "city_regex": ["^1(?:0[0-9]|1[0-6])(?:\\d{2}|\\d{3})?$"], - "examples": ["100", "10058", "100013"], - "source": "researched (no usable open dataset)", - "codes_matched": null, - "notes": "Taipei City districts = 100-116. 3-digit is valid alone; 3+2 is legacy, 3+3 is current." - } - }, - { - "city": "Beijing", - "state_province": "Beijing", - "iso3166_2": "CN-BJ", - "country": "China", - "iso3166_1": "CN", - "latitude": 39.9042, - "longitude": 116.4074, - "local_languages": ["zh-CN"], - "postal_code": { - "country_format_regex": "^\\d{6}$", - "city_regex": ["^10[0-2]\\d{3}$"], - "examples": ["100000", "101100", "101200"], - "source": "derived from GeoNames postal data (radius, r=40km)", - "codes_matched": 11, - "notes": "Beijing municipality = 100000-102629. Dataset is city-level; compressed on the 3-digit prefix. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Shanghai", - "state_province": "Shanghai", - "iso3166_2": "CN-SH", - "country": "China", - "iso3166_1": "CN", - "latitude": 31.2304, - "longitude": 121.4737, - "local_languages": ["zh-CN"], - "postal_code": { - "country_format_regex": "^\\d{6}$", - "city_regex": ["^20[0-2]\\d{3}$"], - "examples": ["200000", "201100", "201300"], - "source": "derived from GeoNames postal data (radius, r=40km)", - "codes_matched": 10, - "notes": "Shanghai municipality = 200000-202699. Dataset is city-level; compressed on the 3-digit prefix. Enumerated from 10 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Bengaluru", - "state_province": "Karnataka", - "iso3166_2": "IN-KA", - "country": "India", - "iso3166_1": "IN", - "latitude": 12.9716, - "longitude": 77.5946, - "local_languages": ["kn", "en"], - "postal_code": { - "country_format_regex": "^[1-9]\\d{5}$", - "city_regex": ["^560\\d{3}$"], - "examples": ["560001", "560002", "560003"], - "source": "derived from GeoNames postal data (field)", - "codes_matched": 106, - "notes": "Bengaluru urban PIN codes = 560xxx. Bengaluru Rural uses 561xxx/562xxx. Compressed on the 3-digit pin prefix. Enumerated from 106 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Singapore", - "state_province": "Central Singapore", - "iso3166_2": "SG-01", - "country": "Singapore", - "iso3166_1": "SG", - "latitude": 1.3521, - "longitude": 103.8198, - "local_languages": ["en", "zh", "ms", "ta"], - "postal_code": { - "country_format_regex": "^\\d{6}$", - "city_regex": ["^(?:[1-6]\\d|0[1-9]|7[0-35-9]|8[0-28]|91)\\d{4}$"], - "examples": ["018906", "018907", "018910"], - "source": "derived from GeoNames postal data (radius, r=30km)", - "codes_matched": 121135, - "notes": "Singapore is a single postal district; sectors 01-82 cover the whole island. Compressed on the 2-digit sector prefix. Enumerated from 121135 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Melbourne", - "state_province": "Victoria", - "iso3166_2": "AU-VIC", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -37.8136, - "longitude": 144.9631, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:3(?:0(?:[45]\\d|0[0-68]|1[0-35689]|2[0-35-9]|3[1-46-9]|6[0-25-8]|7[0-689]|8[1-9]|9[013-5])|1(?:[0248][1-9]|[39][0-4]|1[14]|5[0-2]|6[1-35-9]|7[0-24])|20[24-7]|428|752)|8(?:0(?:0[1-9]|1[0-2]|45|51|6[69]|7[01])|1(?:0[27]|11|20)|205|383|438|511))$" + "postal_code": { + "country_format_regex": "^\\d{6}$", + "city_regex": [ + "^0500(?:0[1-7]|1[0-8]|2\\d|3[0-7]|4[0-478])$" + ], + "examples": [ + "050001", + "050002", + "050003" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 41, + "notes": "Antioquia = 05; Medellin zone = 050xxx. Wider metro uses 051xxx-055xxx. Enumerated from 41 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "São Paulo", + "state_province": "São Paulo", + "iso3166_2": "BR-SP", + "country": "Brazil", + "iso3166_1": "BR", + "latitude": -23.5505, + "longitude": -46.6333, + "local_languages": [ + "pt-BR" ], - "examples": ["3000", "3001", "3002"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 179, - "notes": "Greater Melbourne approx. 3000-3207. Victoria as a whole is 3000-3999. Enumerated from 179 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Sydney", - "state_province": "New South Wales", - "iso3166_2": "AU-NSW", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -33.8688, - "longitude": 151.2093, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:1(?:0(?:0[1-9]|10|2[0-35-9]|3\\d|4[0-6])|1(?:[2-9]\\d|0[015-9]|1[02-9])|2(?:0[1-3578]|3\\d|40|9[1-9])|3(?:[046]0|14|35|5[05])|4(?:[35][05]|[67][056]|0[15]|19|2[02-9]|4[015]|8[0145]|9[0359])|5(?:[18]5|6[05]|70|9[057])|6(?:[46]0|[78][05]|02|3[059]|5[58])|7(?:[09]0|[15][05]|[78]1|4[01]|65)|8(?:0[05]|1[19]|25|3[015]|60|7[45]|8[58]|91))|2(?:0(?:[2-46]\\d|[79][0-79]|0[0-246-9]|1[0-35-9]|5[0257-9]|8[4-9])|1(?:[1-39]\\d|0[0-49]|4[0-6]|5[0-24]|6[0-35]|7[23])|2(?:0[03-9]|1[0-46-9]|2\\d|3[014])))$" + "postal_code": { + "country_format_regex": "^\\d{5}-?\\d{3}$", + "city_regex": [ + "^0[1-5]\\d{3}-?\\d{3}$", + "^08[0-4]\\d{2}-?\\d{3}$" + ], + "examples": [ + "01310-100" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Sao Paulo city CEP: 01000-000 to 05999-999, plus 08000-000 to 08499-999." + } + }, + { + "city": "Curitiba", + "state_province": "Paraná", + "iso3166_2": "BR-PR", + "country": "Brazil", + "iso3166_1": "BR", + "latitude": -25.4284, + "longitude": -49.2733, + "local_languages": [ + "pt-BR" ], - "examples": ["1001", "1002", "1003"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 424, - "notes": "Sydney metro approx. 2000-2249; 1000-1999 are Sydney PO Box / large-volume codes. Enumerated from 424 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Brisbane", - "state_province": "Queensland", - "iso3166_2": "AU-QLD", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -27.4705, - "longitude": 153.026, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:4(?:0(?:0\\d|1[0-478]|3[0-24-7]|5[13-59]|6[015-9]|7[02-8])|1(?:[05][1-9]|1\\d|2[0-37]|3[12]|6[0139]|7[0-489]))|90(?:0[0-2579]|1[035]))$" + "postal_code": { + "country_format_regex": "^\\d{5}-?\\d{3}$", + "city_regex": [ + "^8[0-2]\\d{3}-?\\d{3}$" + ], + "examples": [ + "80010-010" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Curitiba CEP: 80000-000 to 82999-999." + } + }, + { + "city": "Rio de Janeiro", + "state_province": "Rio de Janeiro", + "iso3166_2": "BR-RJ", + "country": "Brazil", + "iso3166_1": "BR", + "latitude": -22.9068, + "longitude": -43.1729, + "local_languages": [ + "pt-BR" ], - "examples": ["4000", "4001", "4002"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 99, - "notes": "Greater Brisbane approx. 4000-4207. Enumerated from 99 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Adelaide", - "state_province": "South Australia", - "iso3166_2": "AU-SA", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -34.9285, - "longitude": 138.6007, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^5(?:0(?:[14]\\d|[68][1-9]|0[015-9]|2[0-5]|3[1-57-9]|5[0-2]|7[0-6]|9[0-8])|1(?:0[6-9]|2[67]|3[1-46-9]|4[0-24]|5[0-24-689]|6[12])|8(?:0[01]|10|39)|9(?:42|50))$" + "postal_code": { + "country_format_regex": "^\\d{5}-?\\d{3}$", + "city_regex": [ + "^(?:2[0-2]\\d{3}|23[0-7]\\d{2})-?\\d{3}$" + ], + "examples": [ + "20040-020" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Rio city CEP: 20000-000 to 23799-999." + } + }, + { + "city": "Santiago", + "state_province": "Santiago Metropolitan", + "iso3166_2": "CL-RM", + "country": "Chile", + "iso3166_1": "CL", + "latitude": -33.4489, + "longitude": -70.6693, + "local_languages": [ + "es-CL" ], - "examples": ["5000", "5001", "5005"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 112, - "notes": "Adelaide metro approx. 5000-5199. Enumerated from 112 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Perth", - "state_province": "Western Australia", - "iso3166_2": "AU-WA", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -31.9505, - "longitude": 115.8605, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^6(?:0(?:[56]\\d|0[013-9]|1[0-24-9]|2[0-79]|7[0167]|90)|1(?:[05]\\d|10|4[7-9]|6[02-46])|8(?:[79]2|0[039]|17|2[07]|3[0-27-9]|4\\d|50|65)|9(?:[18]\\d|[35][1-9]|0[0-79]|2[0-69]|4[0-7]|6[013-579]|7[09]|9[017]))$" + "postal_code": { + "country_format_regex": "^\\d{7}$", + "city_regex": [ + "^(?:7(?:5[05]|63|75|8[15]|9[17])|8(?:[26]4|[48][26]|[59][048]|01|3[28]|7[08])|9(?:0[28]|1[26]|2[05]))\\d{4}$" + ], + "examples": [ + "7500000", + "7550000", + "7630000" + ], + "source": "derived from GeoNames postal data (radius, r=18km)", + "codes_matched": 31, + "notes": "Santiago Province spans approx. 7500000-9250000; 7xx = eastern communes, 8xx = central. Dataset is commune-level (nnn0000); 3-digit commune prefix + block. Enumerated from 31 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Valdivia", + "state_province": "Los Ríos", + "iso3166_2": "CL-LR", + "country": "Chile", + "iso3166_1": "CL", + "latitude": -39.8142, + "longitude": -73.2459, + "local_languages": [ + "es-CL" ], - "examples": ["6000", "6001", "6003"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 182, - "notes": "Perth metro approx. 6000-6199. Enumerated from 182 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Hobart", - "state_province": "Tasmania", - "iso3166_2": "AU-TAS", - "country": "Australia", - "iso3166_1": "AU", - "latitude": -42.8821, - "longitude": 147.3272, - "local_languages": ["en-AU"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^7(?:0(?:0[0-24-9]|1[0-25-9]|2[13]|5[0-35])|170)$"], - "examples": ["7000", "7001", "7002"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 25, - "notes": "Hobart approx. 7000-7099. Enumerated from 25 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Wellington", - "state_province": "Wellington", - "iso3166_2": "NZ-WGN", - "country": "New Zealand", - "iso3166_1": "NZ", - "latitude": -41.2865, - "longitude": 174.7762, - "local_languages": ["en", "mi"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^60(?:1[12]|2[1-3]|3[57])$"], - "examples": ["6011", "6012", "6021"], - "source": "derived from GeoNames postal data (radius, r=12km)", - "codes_matched": 7, - "notes": "Wellington City = 6011-6037. Wider region extends to 5010-5999. Enumerated from 7 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Auckland", - "state_province": "Auckland", - "iso3166_2": "NZ-AUK", - "country": "New Zealand", - "iso3166_1": "NZ", - "latitude": -36.8485, - "longitude": 174.7633, - "local_languages": ["en", "mi"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:0(?:6(?:0[024]|1[0248]|2[024679]|3[02]|4[0-5]|5[0-7]|6[0-3])|7(?:4\\d|5[0-8]|82|9[2-4])|8(?:1[04]|20|41|9[12])|9(?:30|43))|1(?:0(?:[47][12]|[56][0-2]|1[01]|2[1-6])|1(?:4[0-57-9]|5[01])|24[56]|3(?:4[024-9]|5[0-2])|44[0356]|54[1-6]|64[0-3]|74[0-6]|84[02])|2(?:0(?:1[02-468]|2[2-5])|1(?:0[2-5]|4[0-79]|5[013-9]|60)|24[0-3]|5(?:7[16]|80)))$" + "postal_code": { + "country_format_regex": "^\\d{7}$", + "city_regex": [ + "^509\\d{4}$" + ], + "examples": [ + "5090000" + ], + "source": "derived from GeoNames postal data (sub, r=20km)", + "codes_matched": 1, + "notes": "Los Rios region range approx. 5090000-5230000; Valdivia commune base code 5090000. Dataset is commune-level (nnn0000); 3-digit commune prefix + block. Enumerated from 1 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Lima", + "state_province": "Lima", + "iso3166_2": "PE-LMA", + "country": "Peru", + "iso3166_1": "PE", + "latitude": -12.0464, + "longitude": -77.0428, + "local_languages": [ + "es-PE" ], - "examples": ["0600", "0602", "0604"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 169, - "notes": "Auckland is non-contiguous: 0600-0999 (north/west), 1010-1081 (central), 2010-2699 (south). Enumerated from 169 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Christchurch", - "state_province": "Canterbury", - "iso3166_2": "NZ-CAN", - "country": "New Zealand", - "iso3166_1": "NZ", - "latitude": -43.532, - "longitude": 172.6306, - "local_languages": ["en", "mi"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^80(?:[46][12]|[58][1-3]|1[134]|2[2-5])$"], - "examples": ["8011", "8013", "8014"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 17, - "notes": "Christchurch City = 8011-8062. Canterbury region extends 7600-8999. Enumerated from 17 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Nelson", - "state_province": "Nelson", - "iso3166_2": "NZ-NSN", - "country": "New Zealand", - "iso3166_1": "NZ", - "latitude": -41.2706, - "longitude": 173.284, - "local_languages": ["en", "mi"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^70(?:1[01]|4[0-79])$"], - "examples": ["7010", "7011", "7040"], - "source": "derived from GeoNames postal data (radius, r=10km)", - "codes_matched": 11, - "notes": "Nelson City = 7010-7011 and 7040-7047. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Munich", - "state_province": "Bavaria", - "iso3166_2": "DE-BY", - "country": "Germany", - "iso3166_1": "DE", - "latitude": 48.1351, - "longitude": 11.582, - "local_languages": ["de"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^8(?:0(?:33[135-79]|469|53[89]|6(?:3[46-9]|8[679])|79[6-9]|80[1-579]|9(?:3[3579]|9[23579]))|1(?:[89]2[579]|24[1357-9]|3(?:69|7[13579])|47[5-79]|5(?:39|4[13579])|6(?:6[79]|7[13579])|73[579]))$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^15(?:0(?:0[1346-9]|1[1289]|2[1-46]|3[346-9]|4[6-9]|5[46-8]|6[3467]|7[2-469]|8[1-46-8]|9[346])|1(?:0[1-36-9]|1[23])|3(?:0[12467]|1[124]|2[6-8]|3[1-3])|4(?:[039][148]|[14][269]|[28][37]|53|79)|8(?:0[13469]|1[126-8]|2[489]|3[1467]|42))$" + ], + "examples": [ + "15001", + "15003", + "15004" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 111, + "notes": "Lima Region = prefix 15; metropolitan Lima districts sit in 15001-15099. Callao is 07xxx. Enumerated from 111 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Tokyo", + "state_province": "Tokyo", + "iso3166_2": "JP-13", + "country": "Japan", + "iso3166_1": "JP", + "latitude": 35.6762, + "longitude": 139.6503, + "local_languages": [ + "ja" ], - "examples": ["80331", "80333", "80335"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 75, - "notes": "Munich = 80331-81929. Enumerated from 75 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Berlin", - "state_province": "Berlin", - "iso3166_2": "DE-BE", - "country": "Germany", - "iso3166_1": "DE", - "latitude": 52.52, - "longitude": 13.405, - "local_languages": ["de"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^1(?:0(?:[68]2[3579]|1(?:1[579]|7[89])|3(?:1[57-9]|6[579])|4[03][579]|5(?:5[13579]|8[579])|7(?:[07][79]|[18][13579]))|1011|2(?:0(?:4[3579]|5[13579]|99)|1(?:[06][13579]|5[79])|2(?:[47][79]|0[3579])|3(?:0[579]|4[79]|5[13579])|4(?:3[579]|59|8[79])|5(?:2[4679]|5[579]|8[79])|6(?:[17]9|2[1379]|8[13579]))|3(?:0(?:5[13579]|8[689])|1(?:2[579]|5[689]|8[79])|3(?:4[79]|5[13579])|4(?:[36][579]|0[3579])|5(?:[89][13579]|0[3579])|62[79])|4(?:0(?:5[023579]|89)|1(?:[02]9|[69][3579]|31)))$" + "postal_code": { + "country_format_regex": "^\\d{3}-?\\d{4}$", + "city_regex": [ + "^(?:1(?:[068]\\d|[14][0-6]|2[013-5]|3[0-24-7]|5[0-8]|7[013-9]|95)|20[1-46])-?\\d{4}$" + ], + "examples": [ + "100-0000", + "100-0001", + "100-0002" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 7876, + "notes": "Tokyo Metropolis: 100-xxxx to 208-xxxx. The 23 wards are 100-179. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 7876 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Osaka", + "state_province": "Osaka", + "iso3166_2": "JP-27", + "country": "Japan", + "iso3166_1": "JP", + "latitude": 34.6937, + "longitude": 135.5023, + "local_languages": [ + "ja" ], - "examples": ["10115", "10117", "10119"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 182, - "notes": "Berlin = 10115-14199. Enumerated from 182 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Cologne", - "state_province": "North Rhine-Westphalia", - "iso3166_2": "DE-NW", - "country": "Germany", - "iso3166_1": "DE", - "latitude": 50.9375, - "longitude": 6.9603, - "local_languages": ["de"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^5(?:0(?:6(?:6[78]|7[0246-9])|7(?:3[3579]|6[579])|8(?:2[3579]|5[89])|9(?:3[13579]|6[89]|9[679]))|1(?:06[13579]|1[04][3579]))$" + "postal_code": { + "country_format_regex": "^\\d{3}-?\\d{4}$", + "city_regex": [ + "^5(?:[35]\\d|4[0-7])-?\\d{4}$" + ], + "examples": [ + "530-0000", + "530-0001", + "530-0002" + ], + "source": "derived from GeoNames postal data (radius, r=12km)", + "codes_matched": 1440, + "notes": "Osaka City: 530-xxxx to 559-xxxx. Wider Osaka Prefecture is 5xx. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 1440 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Kyoto", + "state_province": "Kyoto", + "iso3166_2": "JP-26", + "country": "Japan", + "iso3166_1": "JP", + "latitude": 35.0116, + "longitude": 135.7681, + "local_languages": [ + "ja" ], - "examples": ["50667", "50668", "50670"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 45, - "notes": "Cologne = 50667-51149. Enumerated from 45 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Bamberg", - "state_province": "Bavaria", - "iso3166_2": "DE-BY", - "country": "Germany", - "iso3166_1": "DE", - "latitude": 49.8916, - "longitude": 10.8916, - "local_languages": ["de"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^960(?:4[79]|5[02])$"], - "examples": ["96047", "96049", "96050"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 4, - "notes": "Bamberg = 96047-96052. Enumerated from 4 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Brussels", - "state_province": "Brussels-Capital", - "iso3166_2": "BE-BRU", - "country": "Belgium", - "iso3166_1": "BE", - "latitude": 50.8503, - "longitude": 4.3517, - "local_languages": ["fr", "nl"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^1(?:0(?:[02-79]0|8[0-3])|1[2-9]0|2[01]0)$"], - "examples": ["1000", "1020", "1030"], - "source": "derived from GeoNames postal data (radius, r=8km)", - "codes_matched": 22, - "notes": "Brussels-Capital Region = 1000-1210. Enumerated from 22 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Antwerp", - "state_province": "Flanders", - "iso3166_2": "BE-VLG", - "country": "Belgium", - "iso3166_1": "BE", - "latitude": 51.2194, - "longitude": 4.4025, - "local_languages": ["nl"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^20(?:[02-6]0|18)$"], - "examples": ["2000", "2018", "2020"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 7, - "notes": "City of Antwerp = 2000-2660; 2xxx also covers other Antwerp Province towns. Enumerated from 7 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Bruges", - "state_province": "Flanders", - "iso3166_2": "BE-VLG", - "country": "Belgium", - "iso3166_1": "BE", - "latitude": 51.2093, - "longitude": 3.2247, - "local_languages": ["nl"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^8(?:[02]00|3[148]0)$"], - "examples": ["8000", "8200", "8310"], - "source": "derived from GeoNames postal data (radius, r=12km)", - "codes_matched": 5, - "notes": "Bruges uses discrete codes: 8000 (centre), 8200, 8310, 8340, 8380 (submunicipalities). Enumerated from 5 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "London", - "state_province": "England", - "iso3166_2": "GB-ENG", - "country": "United Kingdom", - "iso3166_1": "GB", - "latitude": 51.5074, - "longitude": -0.1278, - "local_languages": ["en-GB"], - "postal_code": { - "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", - "city_regex": [ - "^(?:E(?:1W|C(?:[14][AMNRVY]|2[AMNPRVY]|3[AMNPV]))|SW1[EHPV-Y]|W(?:1[B-DF-HJKS-UW]|C(?:1[ABEHNRVX]|2[ABEHNR]))) ?\\d[A-Z]{2}$" + "postal_code": { + "country_format_regex": "^\\d{3}-?\\d{4}$", + "city_regex": [ + "^6(?:0[0-7]|1[0-256])-?\\d{4}$" + ], + "examples": [ + "600-0000", + "600-8001", + "600-8002" + ], + "source": "derived from GeoNames postal data (radius, r=12km)", + "codes_matched": 4614, + "notes": "Kyoto City: 600-xxxx to 616-xxxx. Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 4614 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Sapporo", + "state_province": "Hokkaido", + "iso3166_2": "JP-01", + "country": "Japan", + "iso3166_1": "JP", + "latitude": 43.0618, + "longitude": 141.3545, + "local_languages": [ + "ja" ], - "examples": ["E1W 1AA", "EC1A 1AA", "EC1M 1AA"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 58, - "notes": "First pattern = inner London postcode areas; second = outer Greater London areas. Dataset is outward-code level; inward code appended. Enumerated from 58 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Bristol", - "state_province": "England", - "iso3166_2": "GB-ENG", - "country": "United Kingdom", - "iso3166_1": "GB", - "latitude": 51.4545, - "longitude": -2.5879, - "local_languages": ["en-GB"], - "postal_code": { - "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", - "city_regex": ["^BS(?:[1256]|3[12459]?|4[01]) ?\\d[A-Z]{2}$"], - "examples": ["BS1 1AA", "BS2 1AA", "BS3 1AA"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 12, - "notes": "BS postcode area (also covers parts of North Somerset / South Gloucestershire). Dataset is outward-code level; inward code appended. Enumerated from 12 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Edinburgh", - "state_province": "Scotland", - "iso3166_2": "GB-SCT", - "country": "United Kingdom", - "iso3166_1": "GB", - "latitude": 55.9533, - "longitude": -3.1883, - "local_languages": ["en-GB", "gd"], - "postal_code": { - "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", - "city_regex": ["^EH(?:[2-9]|1[12]?) ?\\d[A-Z]{2}$"], - "examples": ["EH1 1AA", "EH11 1AA", "EH12 1AA"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 11, - "notes": "EH postcode area. Dataset is outward-code level; inward code appended. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Glasgow", - "state_province": "Scotland", - "iso3166_2": "GB-SCT", - "country": "United Kingdom", - "iso3166_1": "GB", - "latitude": 55.8642, - "longitude": -4.2518, - "local_languages": ["en-GB", "gd"], - "postal_code": { - "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", - "city_regex": ["^G(?:[12][23]?|3[14]?|4[0-24]?|52?) ?\\d[A-Z]{2}$"], - "examples": ["G1 1AA", "G12 1AA", "G13 1AA"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 16, - "notes": "G postcode area. Dataset is outward-code level; inward code appended. Enumerated from 16 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Prague", - "state_province": "Prague", - "iso3166_2": "CZ-10", - "country": "Czechia", - "iso3166_1": "CZ", - "latitude": 50.0755, - "longitude": 14.4378, - "local_languages": ["cs"], - "postal_code": { - "country_format_regex": "^\\d{3} ?\\d{2}$", - "city_regex": [ - "^1(?:0[0-246-9]\\ 00|1[089]\\ 00|2[08]\\ 00|30\\ 00|4[0-37-9]\\ 00|5(?:[02489]\\ 00|5\\ (?:[23]1|00))|6[0-59]\\ 00|7[01]\\ 00|8[0-246]\\ 00|9(?:[3689]\\ 00|0\\ (?:00|1[1257])))$" + "postal_code": { + "country_format_regex": "^\\d{3}-?\\d{4}$", + "city_regex": [ + "^0(?:0[1-7]|6[0-5])-?\\d{4}$" + ], + "examples": [ + "001-0000", + "001-0010", + "001-0011" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 1373, + "notes": "Sapporo: 001-xxxx to 007-xxxx (north/west) and 060-xxxx to 065-xxxx (central/east). Dataset holds full 7-digit codes; compressed on the 3-digit area prefix. Enumerated from 1373 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Seoul", + "state_province": "Seoul", + "iso3166_2": "KR-11", + "country": "South Korea", + "iso3166_1": "KR", + "latitude": 37.5665, + "longitude": 126.978, + "local_languages": [ + "ko" ], - "examples": ["100 00", "101 00", "102 00"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 52, - "notes": "Prague = 100 00 - 199 00. Enumerated from 52 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Pilsen", - "state_province": "Plzeň", - "iso3166_2": "CZ-32", - "country": "Czechia", - "iso3166_1": "CZ", - "latitude": 49.7384, - "longitude": 13.3736, - "local_languages": ["cs"], - "postal_code": { - "country_format_regex": "^\\d{3} ?\\d{2}$", - "city_regex": ["^3(?:0[17]\\ 00|1[02]\\ 00)$"], - "examples": ["301 00", "307 00", "310 00"], - "source": "derived from GeoNames postal data (radius, r=10km)", - "codes_matched": 4, - "notes": "Plzen = 301 00 - 312 00. Enumerated from 4 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Amsterdam", - "state_province": "North Holland", - "iso3166_2": "NL-NH", - "country": "Netherlands", - "iso3166_1": "NL", - "latitude": 52.3676, - "longitude": 4.9041, - "local_languages": ["nl"], - "postal_code": { - "country_format_regex": "^\\d{4} ?[A-Z]{2}$", - "city_regex": [ - "^1(?:0(?:[157][1-9]|[29][1-8]|[34][1-7]|6\\d|8[1-367])|10[1-9]) ?[A-Z]{2}$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^0(?:1[0-46-9]|2[0-24-8]|3[013-79]|4\\d|5[0-8]|6[0-35-9]|7[02-9]|8[0-35-8])\\d{2}$" + ], + "examples": [ + "01000", + "01001", + "01002" + ], + "source": "derived from GeoNames postal data (radius, r=18km)", + "codes_matched": 5628, + "notes": "Post-2015 5-digit system: Seoul = 01000-09999. Compressed on the 3-digit prefix. Enumerated from 5628 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Busan", + "state_province": "Busan", + "iso3166_2": "KR-26", + "country": "South Korea", + "iso3166_1": "KR", + "latitude": 35.1796, + "longitude": 129.0756, + "local_languages": [ + "ko" ], - "examples": ["1011 AB", "1012 AB", "1013 AB"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 81, - "notes": "Amsterdam = 1000-1109 numeric part. Dataset is 4-digit numeric; letter pair appended. Enumerated from 81 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Copenhagen", - "state_province": "Capital Region", - "iso3166_2": "DK-84", - "country": "Denmark", - "iso3166_1": "DK", - "latitude": 55.6761, - "longitude": 12.5683, - "local_languages": ["da"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:1(?:8(?:[017]\\d|2[02-9]|35|5[0-7]|6[0-8])|9(?:[16][0-7]|0[0-689]|2[0-8]|5\\d|7[0-4]))|2000)$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^4(?:6[0235-79]|7[0-35-9]|8[0-57-9]|9[0-5])\\d{2}$" + ], + "examples": [ + "46002", + "46018", + "46027" + ], + "source": "derived from GeoNames postal data (radius, r=18km)", + "codes_matched": 2214, + "notes": "Busan = 46000-49999. Compressed on the 3-digit prefix. Enumerated from 2214 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Ho Chi Minh City", + "state_province": "Ho Chi Minh", + "iso3166_2": "VN-SG", + "country": "Vietnam", + "iso3166_1": "VN", + "latitude": 10.8231, + "longitude": 106.6297, + "local_languages": [ + "vi" ], - "examples": ["1800", "1801", "1802"], - "source": "derived from GeoNames postal data (sub, r=12km)", - "codes_matched": 107, - "notes": "Copenhagen K = 1000-1499; Frederiksberg and surrounding districts = 1800-2500. Enumerated from 107 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Warsaw", - "state_province": "Masovian", - "iso3166_2": "PL-MZ", - "country": "Poland", - "iso3166_1": "PL", - "latitude": 52.2297, - "longitude": 21.0122, - "local_languages": ["pl"], - "postal_code": { - "country_format_regex": "^\\d{2}-\\d{3}$", - "city_regex": [ - "^0(?:0\\-(?:[013-7]\\d|2[0-8]|8[0-79]|91)|1\\-(?:[13-57-9]\\d|[02][0-6]|6[0-57-9])|2\\-\\d\\d|3\\-(?:[0-79]\\d|8[0-46-9])|4\\-(?:[0-46-8]\\d|5[0-7]|9[05689]))\\d$" + "postal_code": { + "country_format_regex": "^\\d{5,6}$", + "city_regex": [ + "^7[0-4]\\d{3}$", + "^7[0-4]\\d{4}$" + ], + "examples": [ + "70000", + "700000" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Current 5-digit system: HCMC = 70000-74999. Legacy/6-digit form (700000) still appears in some systems." + } + }, + { + "city": "Hanoi", + "state_province": "Hanoi", + "iso3166_2": "VN-HN", + "country": "Vietnam", + "iso3166_1": "VN", + "latitude": 21.0285, + "longitude": 105.8542, + "local_languages": [ + "vi" ], - "examples": ["00-002", "00-003", "00-004"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 3661, - "notes": "Warsaw = 00-001 to 04-999. Compressed one digit short of full length. Enumerated from 3661 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Krakow", - "state_province": "Lesser Poland", - "iso3166_2": "PL-MA", - "country": "Poland", - "iso3166_1": "PL", - "latitude": 50.0647, - "longitude": 19.945, - "local_languages": ["pl"], - "postal_code": { - "country_format_regex": "^\\d{2}-\\d{3}$", - "city_regex": [ - "^3(?:0\\-(?:[036]\\d|[27][0-589]|1[0-59]|4[0-49]|5[0-8]|8[0-69]|9[0469])|1\\-(?:[45][0-8]|[89]\\d|0[0-7]|1[0-6]|2[0-46-8]|3[0-79]|6[0-579]|7[0-2569]))\\d$" + "postal_code": { + "country_format_regex": "^\\d{5,6}$", + "city_regex": [ + "^1[0-4]\\d{3}$", + "^1[0-4]\\d{4}$" + ], + "examples": [ + "10000", + "100000" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Hanoi = 10000-14999 (5-digit). Legacy 6-digit form 100000 still in circulation." + } + }, + { + "city": "Da Nang", + "state_province": "Da Nang", + "iso3166_2": "VN-DN", + "country": "Vietnam", + "iso3166_1": "VN", + "latitude": 16.0544, + "longitude": 108.2022, + "local_languages": [ + "vi" ], - "examples": ["30-001", "30-002", "30-003"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 1106, - "notes": "Krakow = 30-001 to 31-999. Compressed one digit short of full length. Enumerated from 1106 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Rome", - "state_province": "Lazio", - "iso3166_2": "IT-62", - "country": "Italy", - "iso3166_1": "IT", - "latitude": 41.9028, - "longitude": 12.4964, - "local_languages": ["it"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^001(?:[3-9][1-9]|1[89]|2[0-8])$"], - "examples": ["00118", "00119", "00120"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 74, - "notes": "Rome = 00118-00199 (00120 = Vatican City, a separate state). Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Milan", - "state_province": "Lombardy", - "iso3166_2": "IT-25", - "country": "Italy", - "iso3166_1": "IT", - "latitude": 45.4642, - "longitude": 9.19, - "local_languages": ["it"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^201(?:[2-5][1-9]|6[12])$"], - "examples": ["20121", "20122", "20123"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 38, - "notes": "Milan city = 20121-20162. Enumerated from 38 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Barcelona", - "state_province": "Catalonia", - "iso3166_2": "ES-CT", - "country": "Spain", - "iso3166_1": "ES", - "latitude": 41.3851, - "longitude": 2.1734, - "local_languages": ["ca", "es"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^080(?:[1-3]\\d|0[1-9]|4[0-2]|7[015]|80)$"], - "examples": ["08001", "08002", "08003"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 46, - "notes": "Barcelona city = 08001-08042. Province is 08xxx. Enumerated from 46 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Madrid", - "state_province": "Madrid", - "iso3166_2": "ES-MD", - "country": "Spain", - "iso3166_1": "ES", - "latitude": 40.4168, - "longitude": -3.7038, - "local_languages": ["es"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^280(?:[1-4]\\d|0[1-9]|5[0-5]|7[01]|8[0235-7])$"], - "examples": ["28001", "28002", "28003"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 63, - "notes": "Madrid city = 28001-28080. Community of Madrid is 28xxx. Enumerated from 63 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Paris", - "state_province": "Île-de-France", - "iso3166_2": "FR-IDF", - "country": "France", - "iso3166_1": "FR", - "latitude": 48.8566, - "longitude": 2.3522, - "local_languages": ["fr"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^750(?:[01]\\d|20)$"], - "examples": ["75000", "75001", "75002"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 21, - "notes": "Paris = 75001-75020, plus 75116 (a second code for the 16th arrondissement). Enumerated from 21 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Lyon", - "state_province": "Auvergne-Rhône-Alpes", - "iso3166_2": "FR-ARA", - "country": "France", - "iso3166_1": "FR", - "latitude": 45.764, - "longitude": 4.8357, - "local_languages": ["fr"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": ["^6900\\d$"], - "examples": ["69000", "69001", "69002"], - "source": "derived from GeoNames postal data (name, r=15km)", - "codes_matched": 10, - "notes": "Lyon = 69001-69009 (nine arrondissements). Enumerated from 10 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Stockholm", - "state_province": "Stockholm", - "iso3166_2": "SE-AB", - "country": "Sweden", - "iso3166_1": "SE", - "latitude": 59.3293, - "longitude": 18.0686, - "local_languages": ["sv"], - "postal_code": { - "country_format_regex": "^\\d{3} ?\\d{2}$", - "city_regex": [ - "^1(?:0(?:[569]\\ \\d|[02]\\ [0-7]|1\\ [0-35]|3\\ [0-35-9]|4\\ [02-6]|7\\ [0-26-9])|1(?:[0-2478]\\ \\d|[35]\\ [02-9]|6\\ [0-46-9])|2(?:[17]\\ 2|0\\ [0-36-9]|5\\ 8|6\\ [0-278])|3(?:1\\ [12589]|5\\ 7)|4(?:1\\ [89]|5\\ 8)|6(?:[49]\\ [89]|1\\ 8|2\\ [18]|3\\ 9)|7(?:0\\ 8|1\\ [17]|2\\ [89]|3\\ [13-68])|82\\ 8|95\\ 8)\\d$" + "postal_code": { + "country_format_regex": "^\\d{5,6}$", + "city_regex": [ + "^5[0-5]\\d{3}$", + "^5[0-5]\\d{4}$" + ], + "examples": [ + "50000", + "550000" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Sources conflict: Da Nang is cited as both 50000 and 55000. Pattern accepts 50000-55999 and the 6-digit legacy form." + } + }, + { + "city": "Bangkok", + "state_province": "Bangkok", + "iso3166_2": "TH-10", + "country": "Thailand", + "iso3166_1": "TH", + "latitude": 13.7563, + "longitude": 100.5018, + "local_languages": [ + "th" ], - "examples": ["100 04", "100 05", "100 12"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 1139, - "notes": "Stockholm County = 1xx xx. Compressed one digit short of full length. Enumerated from 1139 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Gothenburg", - "state_province": "Västra Götaland", - "iso3166_2": "SE-O", - "country": "Sweden", - "iso3166_1": "SE", - "latitude": 57.7089, - "longitude": 11.9746, - "local_languages": ["sv"], - "postal_code": { - "country_format_regex": "^\\d{3} ?\\d{2}$", - "city_regex": [ - "^4(?:0(?:[89]\\ \\d|0\\ [1-79]|1\\ [12589]|2\\ [2-7]|3\\ [0-4]|4\\ [0238]|5\\ [0-57-9]|7\\ 0)|1(?:[26]\\ [024-9]|1\\ [0-489]|3\\ [0-2489]|4\\ [025-8]|5\\ \\d|7\\ [0-8]|8\\ [0-47]))\\d$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^10(?:[4-8]00|1[0-7]0|2[024-69]0|3[0-3]0)$" + ], + "examples": [ + "10100", + "10110", + "10120" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 23, + "notes": "Bangkok = province code 10; codes run 10100-10900. Enumerated from 23 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Taipei", + "state_province": "Taipei", + "iso3166_2": "TW-TPE", + "country": "Taiwan", + "iso3166_1": "TW", + "latitude": 25.033, + "longitude": 121.5654, + "local_languages": [ + "zh-TW" ], - "examples": ["400 10", "400 12", "400 13"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 755, - "notes": "Gothenburg = 400 00 - 425 99. Compressed one digit short of full length. Enumerated from 755 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Oslo", - "state_province": "Oslo", - "iso3166_2": "NO-03", - "country": "Norway", - "iso3166_1": "NO", - "latitude": 59.9139, - "longitude": 10.7522, - "local_languages": ["no"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^(?:0(?:[56][0-25-9]|0[0-5]|1\\d|2[013-8]|3[0-8]|4[0-24-9]|7[015-9]|8[04-9]|9[015-8])|1(?:[01][015-8]|2[015-9]))\\d$" + "postal_code": { + "country_format_regex": "^\\d{3}(?:\\d{2}|\\d{3})?$", + "city_regex": [ + "^1(?:0[0-9]|1[0-6])(?:\\d{2}|\\d{3})?$" + ], + "examples": [ + "100", + "10058", + "100013" + ], + "source": "researched (no usable open dataset)", + "codes_matched": null, + "notes": "Taipei City districts = 100-116. 3-digit is valid alone; 3+2 is legacy, 3+3 is current." + } + }, + { + "city": "Beijing", + "state_province": "Beijing", + "iso3166_2": "CN-BJ", + "country": "China", + "iso3166_1": "CN", + "latitude": 39.9042, + "longitude": 116.4074, + "local_languages": [ + "zh-CN" ], - "examples": ["0001", "0010", "0015"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 631, - "notes": "Oslo = 0001-1295; the 0xxx block is the city proper. Compressed one digit short of full length. Enumerated from 631 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Dublin", - "state_province": "Leinster", - "iso3166_2": "IE-L", - "country": "Ireland", - "iso3166_1": "IE", - "latitude": 53.3498, - "longitude": -6.2603, - "local_languages": ["en", "ga"], - "postal_code": { - "country_format_regex": "^(?:D6W|[AC-FHKNPRTV-Y]\\d{2}) ?[0-9AC-FHKNPRTV-Y]{4}$", - "city_regex": ["^D(?:0[1-9]|1[0-8]|2[024]|6W) ?[0-9AC-FHKNPRTV-Y]{4}$"], - "examples": ["D01 XY35", "D02 XY35", "D03 XY35"], - "source": "derived from GeoNames postal data (sub, r=25km)", - "codes_matched": 22, - "notes": "Dublin routing keys: D01-D18, D20, D22, D24 and the exception D6W. Note D19, D21, D23 are not issued. Dataset is routing-key level; unique identifier appended. Enumerated from 22 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Vienna", - "state_province": "Vienna", - "iso3166_2": "AT-9", - "country": "Austria", - "iso3166_1": "AT", - "latitude": 48.2082, - "longitude": 16.3738, - "local_languages": ["de-AT"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": ["^1(?:0[1-9]0|1\\d0|2[0-3]0)$"], - "examples": ["1010", "1020", "1030"], - "source": "derived from GeoNames postal data (field)", - "codes_matched": 23, - "notes": "Vienna = 1010-1230, always ending in 0 (district number x10). Enumerated from 23 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Zurich", - "state_province": "Zurich", - "iso3166_2": "CH-ZH", - "country": "Switzerland", - "iso3166_1": "CH", - "latitude": 47.3769, - "longitude": 8.5417, - "local_languages": ["de-CH"], - "postal_code": { - "country_format_regex": "^\\d{4}$", - "city_regex": [ - "^80(?:0[0-68]|1[027]|2[247]|3[1246-8]|4[0-24-9]|5[0-3578]|6[034]|7[05]|8[178]|9[0-389])$" + "postal_code": { + "country_format_regex": "^\\d{6}$", + "city_regex": [ + "^10[0-2]\\d{3}$" + ], + "examples": [ + "100000", + "101100", + "101200" + ], + "source": "derived from GeoNames postal data (radius, r=40km)", + "codes_matched": 11, + "notes": "Beijing municipality = 100000-102629. Dataset is city-level; compressed on the 3-digit prefix. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Shanghai", + "state_province": "Shanghai", + "iso3166_2": "CN-SH", + "country": "China", + "iso3166_1": "CN", + "latitude": 31.2304, + "longitude": 121.4737, + "local_languages": [ + "zh-CN" ], - "examples": ["8000", "8001", "8002"], - "source": "derived from GeoNames postal data (name, r=12km)", - "codes_matched": 50, - "notes": "City of Zurich = 8001-8064. Enumerated from 50 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Tallinn", - "state_province": "Harju", - "iso3166_2": "EE-37", - "country": "Estonia", - "iso3166_1": "EE", - "latitude": 59.437, - "longitude": 24.7536, - "local_languages": ["et"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^(?:1(?:0(?:001|1(?:[2-4]\\d|1[1-9]|5[0-689])|3(?:1[1-9]|2[013])|41[1-6]|6(?:1[1-9]|2[01])|9(?:1[1-9]|2[0-2]))|1(?:[23]1[1-8]|101|41[1-7]|6(?:1[1-9]|2[0-5])|71[1-3]|91[1-4])|2(?:01[1-5]|11[1-3]|6(?:1[1-9]|20)|91[1-9])|3(?:4(?:1[1-9]|2[0-6])|5(?:1[1-9]|2[0-4])|6(?:1[1-9]|2\\d)|81[1267]|91[1-9])|5(?:0(?:[16]5|0[79]|2[69]|30|4[17-9]|5[59]|7[01]|9[4589])|1(?:6[15]|70|8[58]|9[039]))|9086)|7(?:4(?:0(?:0[18]|1[014-69]|20)|20[168])|5(?:3(?:0[1346-8]|1[02]|2[1-357]|31)|4(?:03|12)|511)|69(?:0[12]|1[26]|2[2-4])))$" + "postal_code": { + "country_format_regex": "^\\d{6}$", + "city_regex": [ + "^20[0-2]\\d{3}$" + ], + "examples": [ + "200000", + "201100", + "201300" + ], + "source": "derived from GeoNames postal data (radius, r=40km)", + "codes_matched": 10, + "notes": "Shanghai municipality = 200000-202699. Dataset is city-level; compressed on the 3-digit prefix. Enumerated from 10 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Bengaluru", + "state_province": "Karnataka", + "iso3166_2": "IN-KA", + "country": "India", + "iso3166_1": "IN", + "latitude": 12.9716, + "longitude": 77.5946, + "local_languages": [ + "kn", + "en" ], - "examples": ["10001", "10111", "10112"], - "source": "derived from GeoNames postal data (radius, r=12km)", - "codes_matched": 289, - "notes": "Tallinn = 10xxx-13xxx. Enumerated from 289 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Denver", - "state_province": "Colorado", - "iso3166_2": "US-CO", - "country": "United States", - "iso3166_1": "US", - "latitude": 39.7392, - "longitude": -104.9903, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^802(?:[23]\\d|0[1-9]|1[0-24-9]|4[346-9]|5[0-2679]|6[0-6]|7[134]|81|9[01349])$" + "postal_code": { + "country_format_regex": "^[1-9]\\d{5}$", + "city_regex": [ + "^560\\d{3}$" + ], + "examples": [ + "560001", + "560002", + "560003" + ], + "source": "derived from GeoNames postal data (field)", + "codes_matched": 106, + "notes": "Bengaluru urban PIN codes = 560xxx. Bengaluru Rural uses 561xxx/562xxx. Compressed on the 3-digit pin prefix. Enumerated from 106 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Singapore", + "state_province": "Central Singapore", + "iso3166_2": "SG-01", + "country": "Singapore", + "iso3166_1": "SG", + "latitude": 1.3521, + "longitude": 103.8198, + "local_languages": [ + "en", + "zh", + "ms", + "ta" ], - "examples": ["80201", "80202", "80203"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 66, - "notes": "Denver = 80202-80249 plus 80290-80299. Enumerated from 66 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Portland", - "state_province": "Oregon", - "iso3166_2": "US-OR", - "country": "United States", - "iso3166_1": "US", - "latitude": 45.5152, - "longitude": -122.6784, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^972(?:[59][0-468]|0[1-9]|1\\d|2[0-57-9]|3[0-3689]|4[02]|6[6-9]|8[0-36])$" + "postal_code": { + "country_format_regex": "^\\d{6}$", + "city_regex": [ + "^(?:[1-6]\\d|0[1-9]|7[0-35-9]|8[0-28]|91)\\d{4}$" + ], + "examples": [ + "018906", + "018907", + "018910" + ], + "source": "derived from GeoNames postal data (radius, r=30km)", + "codes_matched": 121135, + "notes": "Singapore is a single postal district; sectors 01-82 cover the whole island. Compressed on the 2-digit sector prefix. Enumerated from 121135 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Melbourne", + "state_province": "Victoria", + "iso3166_2": "AU-VIC", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -37.8136, + "longitude": 144.9631, + "local_languages": [ + "en-AU" ], - "examples": ["97201", "97202", "97203"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 60, - "notes": "Portland, Oregon = 972xx. Enumerated from 60 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "San Diego", - "state_province": "California", - "iso3166_2": "US-CA", - "country": "United States", - "iso3166_1": "US", - "latitude": 32.7157, - "longitude": -117.1611, - "local_languages": ["en-US", "es-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^921(?:0[1-9]|1[0-79]|2[0-469]|3[0-24-9]|4[02579]|5[02-589]|6[0135-9]|7[0-24-79]|8[267]|9[0-35-9])$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:3(?:0(?:[45]\\d|0[0-68]|1[0-35689]|2[0-35-9]|3[1-46-9]|6[0-25-8]|7[0-689]|8[1-9]|9[013-5])|1(?:[0248][1-9]|[39][0-4]|1[14]|5[0-2]|6[1-35-9]|7[0-24])|20[24-7]|428|752)|8(?:0(?:0[1-9]|1[0-2]|45|51|6[69]|7[01])|1(?:0[27]|11|20)|205|383|438|511))$" + ], + "examples": [ + "3000", + "3001", + "3002" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 179, + "notes": "Greater Melbourne approx. 3000-3207. Victoria as a whole is 3000-3999. Enumerated from 179 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Sydney", + "state_province": "New South Wales", + "iso3166_2": "AU-NSW", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -33.8688, + "longitude": 151.2093, + "local_languages": [ + "en-AU" ], - "examples": ["92101", "92102", "92103"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 74, - "notes": "San Diego = 921xx. Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Asheville", - "state_province": "North Carolina", - "iso3166_2": "US-NC", - "country": "United States", - "iso3166_1": "US", - "latitude": 35.5951, - "longitude": -82.5515, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": ["^288(?:0[1-6]|1[03-6])$"], - "examples": ["28801", "28802", "28803"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 11, - "notes": "Asheville = 28801-28816. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Grand Rapids", - "state_province": "Michigan", - "iso3166_2": "US-MI", - "country": "United States", - "iso3166_1": "US", - "latitude": 42.9634, - "longitude": -85.6681, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^495(?:0[1-8]|1[024-68]|2[358]|3[04]|4[468]|55|60|88|99)$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:1(?:0(?:0[1-9]|10|2[0-35-9]|3\\d|4[0-6])|1(?:[2-9]\\d|0[015-9]|1[02-9])|2(?:0[1-3578]|3\\d|40|9[1-9])|3(?:[046]0|14|35|5[05])|4(?:[35][05]|[67][056]|0[15]|19|2[02-9]|4[015]|8[0145]|9[0359])|5(?:[18]5|6[05]|70|9[057])|6(?:[46]0|[78][05]|02|3[059]|5[58])|7(?:[09]0|[15][05]|[78]1|4[01]|65)|8(?:0[05]|1[19]|25|3[015]|60|7[45]|8[58]|91))|2(?:0(?:[2-46]\\d|[79][0-79]|0[0-246-9]|1[0-35-9]|5[0257-9]|8[4-9])|1(?:[1-39]\\d|0[0-49]|4[0-6]|5[0-24]|6[0-35]|7[23])|2(?:0[03-9]|1[0-46-9]|2\\d|3[014])))$" + ], + "examples": [ + "1001", + "1002", + "1003" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 424, + "notes": "Sydney metro approx. 2000-2249; 1000-1999 are Sydney PO Box / large-volume codes. Enumerated from 424 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Brisbane", + "state_province": "Queensland", + "iso3166_2": "AU-QLD", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -27.4705, + "longitude": 153.026, + "local_languages": [ + "en-AU" ], - "examples": ["49501", "49502", "49503"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 26, - "notes": "Grand Rapids = 495xx. Enumerated from 26 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Chicago", - "state_province": "Illinois", - "iso3166_2": "US-IL", - "country": "United States", - "iso3166_1": "US", - "latitude": 41.8781, - "longitude": -87.6298, - "local_languages": ["en-US", "es-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^60(?:6(?:0[1-9]|1\\d|2[0-689]|3[0-46-9]|4[0-79]|5[1-79]|6[014689]|7[03-578]|8[0-24-9]|9[013-79])|701)$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:4(?:0(?:0\\d|1[0-478]|3[0-24-7]|5[13-59]|6[015-9]|7[02-8])|1(?:[05][1-9]|1\\d|2[0-37]|3[12]|6[0139]|7[0-489]))|90(?:0[0-2579]|1[035]))$" + ], + "examples": [ + "4000", + "4001", + "4002" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 99, + "notes": "Greater Brisbane approx. 4000-4207. Enumerated from 99 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Adelaide", + "state_province": "South Australia", + "iso3166_2": "AU-SA", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -34.9285, + "longitude": 138.6007, + "local_languages": [ + "en-AU" ], - "examples": ["60601", "60602", "60603"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 84, - "notes": "Chicago = 606xx-608xx. Enumerated from 84 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Seattle", - "state_province": "Washington", - "iso3166_2": "US-WA", - "country": "United States", - "iso3166_1": "US", - "latitude": 47.6062, - "longitude": -122.3321, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^981(?:[01][1-9]|2[124-79]|3[134689]|4[14-68]|5[458]|6[014-68]|7[04578]|8[158]|9[014589])$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^5(?:0(?:[14]\\d|[68][1-9]|0[015-9]|2[0-5]|3[1-57-9]|5[0-2]|7[0-6]|9[0-8])|1(?:0[6-9]|2[67]|3[1-46-9]|4[0-24]|5[0-24-689]|6[12])|8(?:0[01]|10|39)|9(?:42|50))$" + ], + "examples": [ + "5000", + "5001", + "5005" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 112, + "notes": "Adelaide metro approx. 5000-5199. Enumerated from 112 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Perth", + "state_province": "Western Australia", + "iso3166_2": "AU-WA", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -31.9505, + "longitude": 115.8605, + "local_languages": [ + "en-AU" ], - "examples": ["98101", "98102", "98103"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 59, - "notes": "Seattle = 981xx. Enumerated from 59 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Austin", - "state_province": "Texas", - "iso3166_2": "US-TX", - "country": "United States", - "iso3166_1": "US", - "latitude": 30.2672, - "longitude": -97.7431, - "local_languages": ["en-US", "es-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^7(?:33(?:01|44)|87(?:[1-356]\\d|0[1-589]|4[124-9]|7[2-489]|83|99))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^6(?:0(?:[56]\\d|0[013-9]|1[0-24-9]|2[0-79]|7[0167]|90)|1(?:[05]\\d|10|4[7-9]|6[02-46])|8(?:[79]2|0[039]|17|2[07]|3[0-27-9]|4\\d|50|65)|9(?:[18]\\d|[35][1-9]|0[0-79]|2[0-69]|4[0-7]|6[013-579]|7[09]|9[017]))$" + ], + "examples": [ + "6000", + "6001", + "6003" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 182, + "notes": "Perth metro approx. 6000-6199. Enumerated from 182 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Hobart", + "state_province": "Tasmania", + "iso3166_2": "AU-TAS", + "country": "Australia", + "iso3166_1": "AU", + "latitude": -42.8821, + "longitude": 147.3272, + "local_languages": [ + "en-AU" ], - "examples": ["73301", "73344", "78701"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 74, - "notes": "Austin = 787xx. Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Boston", - "state_province": "Massachusetts", - "iso3166_2": "US-MA", - "country": "United States", - "iso3166_1": "US", - "latitude": 42.3601, - "longitude": -71.0589, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^02(?:1(?:[36]3|0[89]|1[0-8]|2[378]|9[69])|2(?:0[13-6]|1[0-257]|22|41|66|8[34]|9[378]))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^7(?:0(?:0[0-24-9]|1[0-25-9]|2[13]|5[0-35])|170)$" + ], + "examples": [ + "7000", + "7001", + "7002" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 25, + "notes": "Hobart approx. 7000-7099. Enumerated from 25 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Wellington", + "state_province": "Wellington", + "iso3166_2": "NZ-WGN", + "country": "New Zealand", + "iso3166_1": "NZ", + "latitude": -41.2865, + "longitude": 174.7762, + "local_languages": [ + "en", + "mi" ], - "examples": ["02108", "02109", "02110"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 36, - "notes": "Boston = 021xx and 022xx. Enumerated from 36 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Philadelphia", - "state_province": "Pennsylvania", - "iso3166_2": "US-PA", - "country": "United States", - "iso3166_1": "US", - "latitude": 39.9526, - "longitude": -75.1652, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^19(?:0(?:19|9[239])|1(?:[2-4]\\d|0[1-9]|1[0-689]|5[0-5]|6[0-2]|7[0-35-9]|8[1-578]|9[0-7])|2(?:44|55))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^60(?:1[12]|2[1-3]|3[57])$" + ], + "examples": [ + "6011", + "6012", + "6021" + ], + "source": "derived from GeoNames postal data (radius, r=12km)", + "codes_matched": 7, + "notes": "Wellington City = 6011-6037. Wider region extends to 5010-5999. Enumerated from 7 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Auckland", + "state_province": "Auckland", + "iso3166_2": "NZ-AUK", + "country": "New Zealand", + "iso3166_1": "NZ", + "latitude": -36.8485, + "longitude": 174.7633, + "local_languages": [ + "en", + "mi" ], - "examples": ["19019", "19092", "19093"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 87, - "notes": "Philadelphia = 191xx. Enumerated from 87 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Brooklyn", - "state_province": "New York", - "iso3166_2": "US-NY", - "country": "United States", - "iso3166_1": "US", - "latitude": 40.6782, - "longitude": -73.9442, - "local_languages": ["en-US", "es-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": ["^112(?:[13]\\d|0[1-9]|2[0-689]|4[1-3579]|5[126])$"], - "examples": ["11201", "11202", "11203"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 47, - "notes": "Brooklyn = 112xx. Enumerated from 47 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Milwaukee", - "state_province": "Wisconsin", - "iso3166_2": "US-WI", - "country": "United States", - "iso3166_1": "US", - "latitude": 43.0389, - "longitude": -87.9065, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^532(?:0[1-9]|1\\d|2[0-8]|3[347]|59|6[378]|7[48]|88|9[035])$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:0(?:6(?:0[024]|1[0248]|2[024679]|3[02]|4[0-5]|5[0-7]|6[0-3])|7(?:4\\d|5[0-8]|82|9[2-4])|8(?:1[04]|20|41|9[12])|9(?:30|43))|1(?:0(?:[47][12]|[56][0-2]|1[01]|2[1-6])|1(?:4[0-57-9]|5[01])|24[56]|3(?:4[024-9]|5[0-2])|44[0356]|54[1-6]|64[0-3]|74[0-6]|84[02])|2(?:0(?:1[02-468]|2[2-5])|1(?:0[2-5]|4[0-79]|5[013-9]|60)|24[0-3]|5(?:7[16]|80)))$" + ], + "examples": [ + "0600", + "0602", + "0604" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 169, + "notes": "Auckland is non-contiguous: 0600-0999 (north/west), 1010-1081 (central), 2010-2699 (south). Enumerated from 169 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Christchurch", + "state_province": "Canterbury", + "iso3166_2": "NZ-CAN", + "country": "New Zealand", + "iso3166_1": "NZ", + "latitude": -43.532, + "longitude": 172.6306, + "local_languages": [ + "en", + "mi" ], - "examples": ["53201", "53202", "53203"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 41, - "notes": "Milwaukee = 532xx. Enumerated from 41 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Richmond", - "state_province": "Virginia", - "iso3166_2": "US-VA", - "country": "United States", - "iso3166_1": "US", - "latitude": 37.5407, - "longitude": -77.436, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^23(?:173|2(?:1[89]|2[0-7]|3[024-7]|4[19]|50|6[019]|7[4689]|8[24-69]|9[0-3578]))$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^80(?:[46][12]|[58][1-3]|1[134]|2[2-5])$" + ], + "examples": [ + "8011", + "8013", + "8014" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 17, + "notes": "Christchurch City = 8011-8062. Canterbury region extends 7600-8999. Enumerated from 17 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Nelson", + "state_province": "Nelson", + "iso3166_2": "NZ-NSN", + "country": "New Zealand", + "iso3166_1": "NZ", + "latitude": -41.2706, + "longitude": 173.284, + "local_languages": [ + "en", + "mi" ], - "examples": ["23173", "23218", "23219"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 39, - "notes": "Richmond = 232xx. Enumerated from 39 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Cincinnati", - "state_province": "Ohio", - "iso3166_2": "US-OH", - "country": "United States", - "iso3166_1": "US", - "latitude": 39.1031, - "longitude": -84.512, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^45(?:2(?:[01][1-9]|[34]\\d|2[0-79]|5[0-58]|6[2-47-9]|7[013-57]|80|9[689])|999)$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^70(?:1[01]|4[0-79])$" + ], + "examples": [ + "7010", + "7011", + "7040" + ], + "source": "derived from GeoNames postal data (radius, r=10km)", + "codes_matched": 11, + "notes": "Nelson City = 7010-7011 and 7040-7047. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Munich", + "state_province": "Bavaria", + "iso3166_2": "DE-BY", + "country": "Germany", + "iso3166_1": "DE", + "latitude": 48.1351, + "longitude": 11.582, + "local_languages": [ + "de" ], - "examples": ["45201", "45202", "45203"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 71, - "notes": "Cincinnati = 452xx. Enumerated from 71 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "St. Louis", - "state_province": "Missouri", - "iso3166_2": "US-MO", - "country": "United States", - "iso3166_1": "US", - "latitude": 38.627, - "longitude": -90.1994, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^631(?:[1-3]\\d|0[1-9]|4[013-7]|5[015-8]|6[034679]|7[17-9]|8[028]|9[579])$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^8(?:0(?:33[135-79]|469|53[89]|6(?:3[46-9]|8[679])|79[6-9]|80[1-579]|9(?:3[3579]|9[23579]))|1(?:[89]2[579]|24[1357-9]|3(?:69|7[13579])|47[5-79]|5(?:39|4[13579])|6(?:6[79]|7[13579])|73[579]))$" + ], + "examples": [ + "80331", + "80333", + "80335" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 75, + "notes": "Munich = 80331-81929. Enumerated from 75 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Berlin", + "state_province": "Berlin", + "iso3166_2": "DE-BE", + "country": "Germany", + "iso3166_1": "DE", + "latitude": 52.52, + "longitude": 13.405, + "local_languages": [ + "de" ], - "examples": ["63101", "63102", "63103"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 68, - "notes": "St. Louis = 631xx. Enumerated from 68 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Tampa", - "state_province": "Florida", - "iso3166_2": "US-FL", - "country": "United States", - "iso3166_1": "US", - "latitude": 27.9506, - "longitude": -82.4572, - "local_languages": ["en-US", "es-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^336(?:0[1-9]|1\\d|2[0-69]|3[013-57]|4[67]|5[05]|6[0-4]|7[2-579]|8[0-24-9]|94)$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^1(?:0(?:[68]2[3579]|1(?:1[579]|7[89])|3(?:1[57-9]|6[579])|4[03][579]|5(?:5[13579]|8[579])|7(?:[07][79]|[18][13579]))|1011|2(?:0(?:4[3579]|5[13579]|99)|1(?:[06][13579]|5[79])|2(?:[47][79]|0[3579])|3(?:0[579]|4[79]|5[13579])|4(?:3[579]|59|8[79])|5(?:2[4679]|5[579]|8[79])|6(?:[17]9|2[1379]|8[13579]))|3(?:0(?:5[13579]|8[689])|1(?:2[579]|5[689]|8[79])|3(?:4[79]|5[13579])|4(?:[36][579]|0[3579])|5(?:[89][13579]|0[3579])|62[79])|4(?:0(?:5[023579]|89)|1(?:[02]9|[69][3579]|31)))$" + ], + "examples": [ + "10115", + "10117", + "10119" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 182, + "notes": "Berlin = 10115-14199. Enumerated from 182 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Cologne", + "state_province": "North Rhine-Westphalia", + "iso3166_2": "DE-NW", + "country": "Germany", + "iso3166_1": "DE", + "latitude": 50.9375, + "longitude": 6.9603, + "local_languages": [ + "de" ], - "examples": ["33601", "33602", "33603"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 58, - "notes": "Tampa = 336xx. Enumerated from 58 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Minneapolis", - "state_province": "Minnesota", - "iso3166_2": "US-MN", - "country": "United States", - "iso3166_1": "US", - "latitude": 44.9778, - "longitude": -93.265, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^554(?:[1-4]\\d|0[1-9]|5[04589]|6[07]|7[02-489]|8[03-8])$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^5(?:0(?:6(?:6[78]|7[0246-9])|7(?:3[3579]|6[579])|8(?:2[3579]|5[89])|9(?:3[13579]|6[89]|9[679]))|1(?:06[13579]|1[04][3579]))$" + ], + "examples": [ + "50667", + "50668", + "50670" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 45, + "notes": "Cologne = 50667-51149. Enumerated from 45 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Bamberg", + "state_province": "Bavaria", + "iso3166_2": "DE-BY", + "country": "Germany", + "iso3166_1": "DE", + "latitude": 49.8916, + "longitude": 10.8916, + "local_languages": [ + "de" ], - "examples": ["55401", "55402", "55403"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 69, - "notes": "Minneapolis = 554xx. Enumerated from 69 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Burlington", - "state_province": "Vermont", - "iso3166_2": "US-VT", - "country": "United States", - "iso3166_1": "US", - "latitude": 44.4759, - "longitude": -73.2121, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": ["^0540[12568]$"], - "examples": ["05401", "05402", "05405"], - "source": "derived from GeoNames postal data (name, r=20km)", - "codes_matched": 5, - "notes": "Burlington = 054xx. Enumerated from 5 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Portland", - "state_province": "Maine", - "iso3166_2": "US-ME", - "country": "United States", - "iso3166_1": "US", - "latitude": 43.6591, - "longitude": -70.2568, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": ["^041(?:0[1-49]|12|2[2-4])$"], - "examples": ["04101", "04102", "04103"], - "source": "derived from GeoNames postal data (name, r=25km)", - "codes_matched": 9, - "notes": "Portland, Maine = 041xx. Distinct from Portland, Oregon (972xx). Enumerated from 9 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Atlanta", - "state_province": "Georgia", - "iso3166_2": "US-GA", - "country": "United States", - "iso3166_1": "US", - "latitude": 33.749, - "longitude": -84.388, - "local_languages": ["en-US"], - "postal_code": { - "country_format_regex": "^\\d{5}(?:-\\d{4})?$", - "city_regex": [ - "^3(?:03(?:0[1-9]|1\\d|2[0-24-9]|3[1246-9]|4[0-689]|5[03-578]|6[013489]|7[014578]|8[0458]|9[2468])|11(?:0[67]|26|3[169]|5[06]|9[2356]))$" + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^960(?:4[79]|5[02])$" + ], + "examples": [ + "96047", + "96049", + "96050" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 4, + "notes": "Bamberg = 96047-96052. Enumerated from 4 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Brussels", + "state_province": "Brussels-Capital", + "iso3166_2": "BE-BRU", + "country": "Belgium", + "iso3166_1": "BE", + "latitude": 50.8503, + "longitude": 4.3517, + "local_languages": [ + "fr", + "nl" ], - "examples": ["30301", "30302", "30303"], - "source": "derived from GeoNames postal data (name, r=30km)", - "codes_matched": 82, - "notes": "Atlanta city = 303xx; the wider metro extends across 303xx-309xx. Enumerated from 82 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Toronto", - "state_province": "Ontario", - "iso3166_2": "CA-ON", - "country": "Canada", - "iso3166_1": "CA", - "latitude": 43.651, - "longitude": -79.347, - "local_languages": ["en-CA"], - "postal_code": { - "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", - "city_regex": [ - "^M(?:1[BCEGHJ-NPR-TV-X]|2[HJ-NPR]|3[A-CHJ-N]|4[A-CEGHJ-NPR-TV-Y]|5[A-CEGHJ-NPR-TV-X]|6[A-CEGHJ-NPRS]|7[AY]|8[V-Z]|9[A-CL-NPRVW]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^1(?:0(?:[02-79]0|8[0-3])|1[2-9]0|2[01]0)$" + ], + "examples": [ + "1000", + "1020", + "1030" + ], + "source": "derived from GeoNames postal data (radius, r=8km)", + "codes_matched": 22, + "notes": "Brussels-Capital Region = 1000-1210. Enumerated from 22 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Antwerp", + "state_province": "Flanders", + "iso3166_2": "BE-VLG", + "country": "Belgium", + "iso3166_1": "BE", + "latitude": 51.2194, + "longitude": 4.4025, + "local_languages": [ + "nl" ], - "examples": ["M1B 1A1", "M1C 1A1", "M1E 1A1"], - "source": "derived from GeoNames postal data (radius, r=30km)", - "codes_matched": 102, - "notes": "Toronto = the entire 'M' forward sortation area. Dataset is fsa-level; local delivery unit appended. Enumerated from 102 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Vancouver", - "state_province": "British Columbia", - "iso3166_2": "CA-BC", - "country": "Canada", - "iso3166_1": "CA", - "latitude": 49.2827, - "longitude": -123.1207, - "local_languages": ["en-CA"], - "postal_code": { - "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", - "city_regex": [ - "^V(?:5[K-NPR-TV-Z]|6[A-CEGHJ-NPRSZ]|7[GHJ-NPR-TV-Y]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^20(?:[02-6]0|18)$" + ], + "examples": [ + "2000", + "2018", + "2020" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 7, + "notes": "City of Antwerp = 2000-2660; 2xxx also covers other Antwerp Province towns. Enumerated from 7 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Bruges", + "state_province": "Flanders", + "iso3166_2": "BE-VLG", + "country": "Belgium", + "iso3166_1": "BE", + "latitude": 51.2093, + "longitude": 3.2247, + "local_languages": [ + "nl" ], - "examples": ["V5K 1A1", "V5L 1A1", "V5M 1A1"], - "source": "derived from GeoNames postal data (sub, r=20km)", - "codes_matched": 43, - "notes": "Vancouver proper = V5/V6; V7 covers North/West Vancouver and Richmond. Dataset is fsa-level; local delivery unit appended. Enumerated from 43 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Montreal", - "state_province": "Quebec", - "iso3166_2": "CA-QC", - "country": "Canada", - "iso3166_1": "CA", - "latitude": 45.5017, - "longitude": -73.5673, - "local_languages": ["fr-CA", "en-CA"], - "postal_code": { - "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", - "city_regex": [ - "^H(?:[1-3][A-CEGHJ-NPR-TV-Z]|0M|4[A-CEGHJ-NPR-TV-XZ]|5[AB]|7[A-CEGHJ-NPR-TV-Y]|8[NPR-TYZ]|9[A-CGHJPRSW]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^8(?:[02]00|3[148]0)$" + ], + "examples": [ + "8000", + "8200", + "8310" + ], + "source": "derived from GeoNames postal data (radius, r=12km)", + "codes_matched": 5, + "notes": "Bruges uses discrete codes: 8000 (centre), 8200, 8310, 8340, 8380 (submunicipalities). Enumerated from 5 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "London", + "state_province": "England", + "iso3166_2": "GB-ENG", + "country": "United Kingdom", + "iso3166_1": "GB", + "latitude": 51.5074, + "longitude": -0.1278, + "local_languages": [ + "en-GB" ], - "examples": ["H0M 1A1", "H1A 1A1", "H1B 1A1"], - "source": "derived from GeoNames postal data (radius, r=25km)", - "codes_matched": 118, - "notes": "Montreal = the entire 'H' forward sortation area. Dataset is fsa-level; local delivery unit appended. Enumerated from 118 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Calgary", - "state_province": "Alberta", - "iso3166_2": "CA-AB", - "country": "Canada", - "iso3166_1": "CA", - "latitude": 51.0447, - "longitude": -114.0719, - "local_languages": ["en-CA"], - "postal_code": { - "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", - "city_regex": [ - "^T(?:1Y|2[A-CEGHJ-NPR-TV-Z]|3[A-CEGHJ-NPRS]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + "postal_code": { + "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", + "city_regex": [ + "^(?:E(?:1W|C(?:[14][AMNRVY]|2[AMNPRVY]|3[AMNPV]))|SW1[EHPV-Y]|W(?:1[B-DF-HJKS-UW]|C(?:1[ABEHNRVX]|2[ABEHNR]))) ?\\d[A-Z]{2}$" + ], + "examples": [ + "E1W 1AA", + "EC1A 1AA", + "EC1M 1AA" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 58, + "notes": "First pattern = inner London postcode areas; second = outer Greater London areas. Dataset is outward-code level; inward code appended. Enumerated from 58 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Bristol", + "state_province": "England", + "iso3166_2": "GB-ENG", + "country": "United Kingdom", + "iso3166_1": "GB", + "latitude": 51.4545, + "longitude": -2.5879, + "local_languages": [ + "en-GB" ], - "examples": ["T1Y 1A1", "T2A 1A1", "T2B 1A1"], - "source": "derived from GeoNames postal data (sub, r=30km)", - "codes_matched": 35, - "notes": "Calgary uses T1Y, T2A-T2Z and T3A-T3R; the T1/T3 blocks also include nearby communities. Dataset is fsa-level; local delivery unit appended. Enumerated from 35 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Halifax", - "state_province": "Nova Scotia", - "iso3166_2": "CA-NS", - "country": "Canada", - "iso3166_1": "CA", - "latitude": 44.6488, - "longitude": -63.5752, - "local_languages": ["en-CA"], - "postal_code": { - "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", - "city_regex": ["^B3[HJ-NPRS] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$"], - "examples": ["B3H 1A1", "B3J 1A1", "B3K 1A1"], - "source": "derived from GeoNames postal data (sub, r=25km)", - "codes_matched": 9, - "notes": "Halifax peninsula/urban = B3x. The wider municipality also uses B2x and B4x. Dataset is fsa-level; local delivery unit appended. Enumerated from 9 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Mexico City", - "state_province": "Mexico City", - "iso3166_2": "MX-CMX", - "country": "Mexico", - "iso3166_1": "MX", - "latitude": 19.4326, - "longitude": -99.1332, - "local_languages": ["es-MX"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^(?:0(?:1(?:[0247]\\d|1[0-8]|3[1-478]|5[0-689]|6[0-5]|8[0-24-7]|9[049])|2(?:[13][0-6]|[49]\\d|0[0-24-9]|2[03-6]|5[0-4]|6[03-8]|7[0-35-9]|8[013-7])|3(?:[3479][0-4]|0[0-2]|1[09]|2[02-4]|5\\d|6[0-6]|8[0-24])|4(?:0[0-4]|1[0-2]|2[013-8]|3\\d|4[0-24-9]|5[013]|6[0-6]|7[0-3]|8[013-579]|9[0-8])|5(?:0[0236]|1[0-3]|2[0-46-8]|3[1-467]|5[03]|6[02])|6(?:0\\d|1[047]|2[024578]|3[05]|4[0357]|5[089]|6[09]|7[024689]|8[024-9]|9[029])|7(?:[289]\\d|[3-5][0-8]|0[0-24-9]|1[013-9]|6[02-8]|7[02-9])|8(?:[028][0-4]|1[06-8]|3[0-2]|4[02]|5[0-268]|6[0-25]|7[0-367]|9[0-3])|9(?:[278]\\d|[14][0-8]|0[0-46-9]|3[0-356]|5[0-35-7]|6[02-46-9]|9[0-467]))|1(?:0(?:[04]0|1[013]|2[09]|3[0235-8]|5[08]|6[0-5]|7[0-4]|8[1-4]|9[0-2])|1(?:[17]0|[24]\\d|[38][0-7]|0[04]|5[0-689]|6[0145]|9[1-35])|2(?:0[078]|20)|3(?:0[0367]|1[128]|2[013578]|3[016]|4[13]|55|6[04])|4(?:[03]\\d|1[1-6]|2[0-7]|4[0-68]|6[0-5])|5(?:[48][0-7]|0[0-2]|1[02]|2\\d|3[0-57-9]|5[0-4]|6[0-8]|7[0-5]|9[04-9])|6(?:0[1-57]|10|3[0-4]|4[14]|62|7[1-58]|8[168])))\\d$" + "postal_code": { + "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", + "city_regex": [ + "^BS(?:[1256]|3[12459]?|4[01]) ?\\d[A-Z]{2}$" + ], + "examples": [ + "BS1 1AA", + "BS2 1AA", + "BS3 1AA" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 12, + "notes": "BS postcode area (also covers parts of North Somerset / South Gloucestershire). Dataset is outward-code level; inward code appended. Enumerated from 12 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Edinburgh", + "state_province": "Scotland", + "iso3166_2": "GB-SCT", + "country": "United Kingdom", + "iso3166_1": "GB", + "latitude": 55.9533, + "longitude": -3.1883, + "local_languages": [ + "en-GB", + "gd" ], - "examples": ["01000", "01010", "01020"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 1207, - "notes": "Mexico City = 01000-16999. Compressed one digit short of full length. Enumerated from 1207 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Tijuana", - "state_province": "Baja California", - "iso3166_2": "MX-BCN", - "country": "Mexico", - "iso3166_1": "MX", - "latitude": 32.5149, - "longitude": -117.0382, - "local_languages": ["es-MX"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^22(?:0(?:[23][045]|00|4[46])|1(?:15|2[03-7]|6[03-5]|70|94)|2(?:06|1[04-7]|50)|4(?:0[056]|24|4[046]|57)|5(?:0[04-6]|1[05-7]|2[3-6]|3[04-7]|5[057]|6[03-7])|6(?:0[04-6]|1[046]|2[4-6]|4[03-5]|5[04]|6[03-7]))$" + "postal_code": { + "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", + "city_regex": [ + "^EH(?:[2-9]|1[12]?) ?\\d[A-Z]{2}$" + ], + "examples": [ + "EH1 1AA", + "EH11 1AA", + "EH12 1AA" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 11, + "notes": "EH postcode area. Dataset is outward-code level; inward code appended. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Glasgow", + "state_province": "Scotland", + "iso3166_2": "GB-SCT", + "country": "United Kingdom", + "iso3166_1": "GB", + "latitude": 55.8642, + "longitude": -4.2518, + "local_languages": [ + "en-GB", + "gd" ], - "examples": ["22000", "22020", "22024"], - "source": "derived from GeoNames postal data (radius, r=20km)", - "codes_matched": 85, - "notes": "Tijuana = 22000-22699. Enumerated from 85 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Monterrey", - "state_province": "Nuevo León", - "iso3166_2": "MX-NLE", - "country": "Mexico", - "iso3166_1": "MX", - "latitude": 25.6866, - "longitude": -100.3161, - "local_languages": ["es-MX"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^64(?:0(?:[235-7]0|0[04679]|1[089]|4[09])|1(?:[239]0|0[024-9]|1[06-9]|4[058]|5[07-9]|6[05-8]|7[08]|8[06])|2(?:[7-9]0|0[04-689]|1[0589]|2[05-9]|3[03-8]|4[04-9]|5[089]|6[04-69])|3(?:[0-257-9]0|3[09]|4[04-9]|6[05-9])|4(?:[0135-79]0|4[02]|8[089])|5(?:[06][08]|[58]0|1[07]|3[06]|4[09]|7[01])|6(?:[06]0|[45][09]|1[089]|2[03])|7(?:[037]0|15|2[03]|5[034]|6[0459]|8[038]|9[08])|8(?:[0-28]0|3[0346]|4[04-69]|5[089]|6[05]|78|9[037-9])|9(?:[1356]0|[04][09]|2[056]|7[089]|8[034679]|9[067]))$" + "postal_code": { + "country_format_regex": "^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$", + "city_regex": [ + "^G(?:[12][23]?|3[14]?|4[0-24]?|52?) ?\\d[A-Z]{2}$" + ], + "examples": [ + "G1 1AA", + "G12 1AA", + "G13 1AA" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 16, + "notes": "G postcode area. Dataset is outward-code level; inward code appended. Enumerated from 16 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Prague", + "state_province": "Prague", + "iso3166_2": "CZ-10", + "country": "Czechia", + "iso3166_1": "CZ", + "latitude": 50.0755, + "longitude": 14.4378, + "local_languages": [ + "cs" ], - "examples": ["64000", "64004", "64006"], - "source": "derived from GeoNames postal data (radius, r=18km)", - "codes_matched": 212, - "notes": "Monterrey city = 64000-64999; the metro area extends into 65xxx-67xxx. Enumerated from 212 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Guadalajara", - "state_province": "Jalisco", - "iso3166_2": "MX-JAL", - "country": "Mexico", - "iso3166_1": "MX", - "latitude": 20.6597, - "longitude": -103.3496, - "local_languages": ["es-MX"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^44(?:009|1(?:[01346-9]0|5[08])|2(?:[0378]0|1[04-9]|2[07]|4[0679]|5[07-9]|6[05-8]|9[089])|3(?:[3-8]0|0[067]|2[09]|9[0589])|4(?:[02457]0|1[09]|3[08]|6[079]|9[03])|5(?:[1268]0|[045][09]|3[058])|6(?:[029]0|[18][09]|3[0589]|4[78]|5[06-9]|6[0578]|7[089])|7(?:[078]0|1[069]|2[03-79]|3[079]|4[08]|5[057]|6[05689]|9[09])|8(?:[046]0|1[0578]|2[0457-9]|7[09]|9[05-9])|9(?:[039]0|[14][089]|2[09]|5[069]|6[0679]|7[078]|8[04-79]))$" + "postal_code": { + "country_format_regex": "^\\d{3} ?\\d{2}$", + "city_regex": [ + "^1(?:0[0-246-9]\\ 00|1[089]\\ 00|2[08]\\ 00|30\\ 00|4[0-37-9]\\ 00|5(?:[02489]\\ 00|5\\ (?:[23]1|00))|6[0-59]\\ 00|7[01]\\ 00|8[0-246]\\ 00|9(?:[3689]\\ 00|0\\ (?:00|1[1257])))$" + ], + "examples": [ + "100 00", + "101 00", + "102 00" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 52, + "notes": "Prague = 100 00 - 199 00. Enumerated from 52 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Pilsen", + "state_province": "Plzeň", + "iso3166_2": "CZ-32", + "country": "Czechia", + "iso3166_1": "CZ", + "latitude": 49.7384, + "longitude": 13.3736, + "local_languages": [ + "cs" ], - "examples": ["44009", "44100", "44110"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 183, - "notes": "Guadalajara city = 44100-44999; Zapopan/Tlaquepaque use 45xxx. Enumerated from 183 observed codes; the country_format_regex is the permissive fallback." - } - }, - { - "city": "Ensenada", - "state_province": "Baja California", - "iso3166_2": "MX-BCN", - "country": "Mexico", - "iso3166_1": "MX", - "latitude": 31.8667, - "longitude": -116.5964, - "local_languages": ["es-MX"], - "postal_code": { - "country_format_regex": "^\\d{5}$", - "city_regex": [ - "^228(?:[03]0|1[02-589]|2[023]|4[027]|5[0259]|6[03]|7[0239]|8[07-9]|9[578])$" + "postal_code": { + "country_format_regex": "^\\d{3} ?\\d{2}$", + "city_regex": [ + "^3(?:0[17]\\ 00|1[02]\\ 00)$" + ], + "examples": [ + "301 00", + "307 00", + "310 00" + ], + "source": "derived from GeoNames postal data (radius, r=10km)", + "codes_matched": 4, + "notes": "Plzen = 301 00 - 312 00. Enumerated from 4 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Amsterdam", + "state_province": "North Holland", + "iso3166_2": "NL-NH", + "country": "Netherlands", + "iso3166_1": "NL", + "latitude": 52.3676, + "longitude": 4.9041, + "local_languages": [ + "nl" ], - "examples": ["22800", "22810", "22812"], - "source": "derived from GeoNames postal data (radius, r=15km)", - "codes_matched": 32, - "notes": "Ensenada = 22800-22899. Enumerated from 32 observed codes; the country_format_regex is the permissive fallback." + "postal_code": { + "country_format_regex": "^\\d{4} ?[A-Z]{2}$", + "city_regex": [ + "^1(?:0(?:[157][1-9]|[29][1-8]|[34][1-7]|6\\d|8[1-367])|10[1-9]) ?[A-Z]{2}$" + ], + "examples": [ + "1011 AB", + "1012 AB", + "1013 AB" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 81, + "notes": "Amsterdam = 1000-1109 numeric part. Dataset is 4-digit numeric; letter pair appended. Enumerated from 81 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Copenhagen", + "state_province": "Capital Region", + "iso3166_2": "DK-84", + "country": "Denmark", + "iso3166_1": "DK", + "latitude": 55.6761, + "longitude": 12.5683, + "local_languages": [ + "da" + ], + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:1(?:8(?:[017]\\d|2[02-9]|35|5[0-7]|6[0-8])|9(?:[16][0-7]|0[0-689]|2[0-8]|5\\d|7[0-4]))|2000)$" + ], + "examples": [ + "1800", + "1801", + "1802" + ], + "source": "derived from GeoNames postal data (sub, r=12km)", + "codes_matched": 107, + "notes": "Copenhagen K = 1000-1499; Frederiksberg and surrounding districts = 1800-2500. Enumerated from 107 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Warsaw", + "state_province": "Masovian", + "iso3166_2": "PL-MZ", + "country": "Poland", + "iso3166_1": "PL", + "latitude": 52.2297, + "longitude": 21.0122, + "local_languages": [ + "pl" + ], + "postal_code": { + "country_format_regex": "^\\d{2}-\\d{3}$", + "city_regex": [ + "^0(?:0\\-(?:[013-7]\\d|2[0-8]|8[0-79]|91)|1\\-(?:[13-57-9]\\d|[02][0-6]|6[0-57-9])|2\\-\\d\\d|3\\-(?:[0-79]\\d|8[0-46-9])|4\\-(?:[0-46-8]\\d|5[0-7]|9[05689]))\\d$" + ], + "examples": [ + "00-002", + "00-003", + "00-004" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 3661, + "notes": "Warsaw = 00-001 to 04-999. Compressed one digit short of full length. Enumerated from 3661 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Krakow", + "state_province": "Lesser Poland", + "iso3166_2": "PL-MA", + "country": "Poland", + "iso3166_1": "PL", + "latitude": 50.0647, + "longitude": 19.945, + "local_languages": [ + "pl" + ], + "postal_code": { + "country_format_regex": "^\\d{2}-\\d{3}$", + "city_regex": [ + "^3(?:0\\-(?:[036]\\d|[27][0-589]|1[0-59]|4[0-49]|5[0-8]|8[0-69]|9[0469])|1\\-(?:[45][0-8]|[89]\\d|0[0-7]|1[0-6]|2[0-46-8]|3[0-79]|6[0-579]|7[0-2569]))\\d$" + ], + "examples": [ + "30-001", + "30-002", + "30-003" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 1106, + "notes": "Krakow = 30-001 to 31-999. Compressed one digit short of full length. Enumerated from 1106 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Rome", + "state_province": "Lazio", + "iso3166_2": "IT-62", + "country": "Italy", + "iso3166_1": "IT", + "latitude": 41.9028, + "longitude": 12.4964, + "local_languages": [ + "it" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^001(?:[3-9][1-9]|1[89]|2[0-8])$" + ], + "examples": [ + "00118", + "00119", + "00120" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 74, + "notes": "Rome = 00118-00199 (00120 = Vatican City, a separate state). Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Milan", + "state_province": "Lombardy", + "iso3166_2": "IT-25", + "country": "Italy", + "iso3166_1": "IT", + "latitude": 45.4642, + "longitude": 9.19, + "local_languages": [ + "it" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^201(?:[2-5][1-9]|6[12])$" + ], + "examples": [ + "20121", + "20122", + "20123" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 38, + "notes": "Milan city = 20121-20162. Enumerated from 38 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Barcelona", + "state_province": "Catalonia", + "iso3166_2": "ES-CT", + "country": "Spain", + "iso3166_1": "ES", + "latitude": 41.3851, + "longitude": 2.1734, + "local_languages": [ + "ca", + "es" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^080(?:[1-3]\\d|0[1-9]|4[0-2]|7[015]|80)$" + ], + "examples": [ + "08001", + "08002", + "08003" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 46, + "notes": "Barcelona city = 08001-08042. Province is 08xxx. Enumerated from 46 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Madrid", + "state_province": "Madrid", + "iso3166_2": "ES-MD", + "country": "Spain", + "iso3166_1": "ES", + "latitude": 40.4168, + "longitude": -3.7038, + "local_languages": [ + "es" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^280(?:[1-4]\\d|0[1-9]|5[0-5]|7[01]|8[0235-7])$" + ], + "examples": [ + "28001", + "28002", + "28003" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 63, + "notes": "Madrid city = 28001-28080. Community of Madrid is 28xxx. Enumerated from 63 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Paris", + "state_province": "Île-de-France", + "iso3166_2": "FR-IDF", + "country": "France", + "iso3166_1": "FR", + "latitude": 48.8566, + "longitude": 2.3522, + "local_languages": [ + "fr" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^750(?:[01]\\d|20)$" + ], + "examples": [ + "75000", + "75001", + "75002" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 21, + "notes": "Paris = 75001-75020, plus 75116 (a second code for the 16th arrondissement). Enumerated from 21 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Lyon", + "state_province": "Auvergne-Rhône-Alpes", + "iso3166_2": "FR-ARA", + "country": "France", + "iso3166_1": "FR", + "latitude": 45.764, + "longitude": 4.8357, + "local_languages": [ + "fr" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^6900\\d$" + ], + "examples": [ + "69000", + "69001", + "69002" + ], + "source": "derived from GeoNames postal data (name, r=15km)", + "codes_matched": 10, + "notes": "Lyon = 69001-69009 (nine arrondissements). Enumerated from 10 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Stockholm", + "state_province": "Stockholm", + "iso3166_2": "SE-AB", + "country": "Sweden", + "iso3166_1": "SE", + "latitude": 59.3293, + "longitude": 18.0686, + "local_languages": [ + "sv" + ], + "postal_code": { + "country_format_regex": "^\\d{3} ?\\d{2}$", + "city_regex": [ + "^1(?:0(?:[569]\\ \\d|[02]\\ [0-7]|1\\ [0-35]|3\\ [0-35-9]|4\\ [02-6]|7\\ [0-26-9])|1(?:[0-2478]\\ \\d|[35]\\ [02-9]|6\\ [0-46-9])|2(?:[17]\\ 2|0\\ [0-36-9]|5\\ 8|6\\ [0-278])|3(?:1\\ [12589]|5\\ 7)|4(?:1\\ [89]|5\\ 8)|6(?:[49]\\ [89]|1\\ 8|2\\ [18]|3\\ 9)|7(?:0\\ 8|1\\ [17]|2\\ [89]|3\\ [13-68])|82\\ 8|95\\ 8)\\d$" + ], + "examples": [ + "100 04", + "100 05", + "100 12" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 1139, + "notes": "Stockholm County = 1xx xx. Compressed one digit short of full length. Enumerated from 1139 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Gothenburg", + "state_province": "Västra Götaland", + "iso3166_2": "SE-O", + "country": "Sweden", + "iso3166_1": "SE", + "latitude": 57.7089, + "longitude": 11.9746, + "local_languages": [ + "sv" + ], + "postal_code": { + "country_format_regex": "^\\d{3} ?\\d{2}$", + "city_regex": [ + "^4(?:0(?:[89]\\ \\d|0\\ [1-79]|1\\ [12589]|2\\ [2-7]|3\\ [0-4]|4\\ [0238]|5\\ [0-57-9]|7\\ 0)|1(?:[26]\\ [024-9]|1\\ [0-489]|3\\ [0-2489]|4\\ [025-8]|5\\ \\d|7\\ [0-8]|8\\ [0-47]))\\d$" + ], + "examples": [ + "400 10", + "400 12", + "400 13" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 755, + "notes": "Gothenburg = 400 00 - 425 99. Compressed one digit short of full length. Enumerated from 755 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Oslo", + "state_province": "Oslo", + "iso3166_2": "NO-03", + "country": "Norway", + "iso3166_1": "NO", + "latitude": 59.9139, + "longitude": 10.7522, + "local_languages": [ + "no" + ], + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^(?:0(?:[56][0-25-9]|0[0-5]|1\\d|2[013-8]|3[0-8]|4[0-24-9]|7[015-9]|8[04-9]|9[015-8])|1(?:[01][015-8]|2[015-9]))\\d$" + ], + "examples": [ + "0001", + "0010", + "0015" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 631, + "notes": "Oslo = 0001-1295; the 0xxx block is the city proper. Compressed one digit short of full length. Enumerated from 631 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Dublin", + "state_province": "Leinster", + "iso3166_2": "IE-L", + "country": "Ireland", + "iso3166_1": "IE", + "latitude": 53.3498, + "longitude": -6.2603, + "local_languages": [ + "en", + "ga" + ], + "postal_code": { + "country_format_regex": "^(?:D6W|[AC-FHKNPRTV-Y]\\d{2}) ?[0-9AC-FHKNPRTV-Y]{4}$", + "city_regex": [ + "^D(?:0[1-9]|1[0-8]|2[024]|6W) ?[0-9AC-FHKNPRTV-Y]{4}$" + ], + "examples": [ + "D01 XY35", + "D02 XY35", + "D03 XY35" + ], + "source": "derived from GeoNames postal data (sub, r=25km)", + "codes_matched": 22, + "notes": "Dublin routing keys: D01-D18, D20, D22, D24 and the exception D6W. Note D19, D21, D23 are not issued. Dataset is routing-key level; unique identifier appended. Enumerated from 22 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Vienna", + "state_province": "Vienna", + "iso3166_2": "AT-9", + "country": "Austria", + "iso3166_1": "AT", + "latitude": 48.2082, + "longitude": 16.3738, + "local_languages": [ + "de-AT" + ], + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^1(?:0[1-9]0|1\\d0|2[0-3]0)$" + ], + "examples": [ + "1010", + "1020", + "1030" + ], + "source": "derived from GeoNames postal data (field)", + "codes_matched": 23, + "notes": "Vienna = 1010-1230, always ending in 0 (district number x10). Enumerated from 23 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Zurich", + "state_province": "Zurich", + "iso3166_2": "CH-ZH", + "country": "Switzerland", + "iso3166_1": "CH", + "latitude": 47.3769, + "longitude": 8.5417, + "local_languages": [ + "de-CH" + ], + "postal_code": { + "country_format_regex": "^\\d{4}$", + "city_regex": [ + "^80(?:0[0-68]|1[027]|2[247]|3[1246-8]|4[0-24-9]|5[0-3578]|6[034]|7[05]|8[178]|9[0-389])$" + ], + "examples": [ + "8000", + "8001", + "8002" + ], + "source": "derived from GeoNames postal data (name, r=12km)", + "codes_matched": 50, + "notes": "City of Zurich = 8001-8064. Enumerated from 50 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Tallinn", + "state_province": "Harju", + "iso3166_2": "EE-37", + "country": "Estonia", + "iso3166_1": "EE", + "latitude": 59.437, + "longitude": 24.7536, + "local_languages": [ + "et" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^(?:1(?:0(?:001|1(?:[2-4]\\d|1[1-9]|5[0-689])|3(?:1[1-9]|2[013])|41[1-6]|6(?:1[1-9]|2[01])|9(?:1[1-9]|2[0-2]))|1(?:[23]1[1-8]|101|41[1-7]|6(?:1[1-9]|2[0-5])|71[1-3]|91[1-4])|2(?:01[1-5]|11[1-3]|6(?:1[1-9]|20)|91[1-9])|3(?:4(?:1[1-9]|2[0-6])|5(?:1[1-9]|2[0-4])|6(?:1[1-9]|2\\d)|81[1267]|91[1-9])|5(?:0(?:[16]5|0[79]|2[69]|30|4[17-9]|5[59]|7[01]|9[4589])|1(?:6[15]|70|8[58]|9[039]))|9086)|7(?:4(?:0(?:0[18]|1[014-69]|20)|20[168])|5(?:3(?:0[1346-8]|1[02]|2[1-357]|31)|4(?:03|12)|511)|69(?:0[12]|1[26]|2[2-4])))$" + ], + "examples": [ + "10001", + "10111", + "10112" + ], + "source": "derived from GeoNames postal data (radius, r=12km)", + "codes_matched": 289, + "notes": "Tallinn = 10xxx-13xxx. Enumerated from 289 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Denver", + "state_province": "Colorado", + "iso3166_2": "US-CO", + "country": "United States", + "iso3166_1": "US", + "latitude": 39.7392, + "longitude": -104.9903, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^802(?:[23]\\d|0[1-9]|1[0-24-9]|4[346-9]|5[0-2679]|6[0-6]|7[134]|81|9[01349])$" + ], + "examples": [ + "80201", + "80202", + "80203" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 66, + "notes": "Denver = 80202-80249 plus 80290-80299. Enumerated from 66 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Portland", + "state_province": "Oregon", + "iso3166_2": "US-OR", + "country": "United States", + "iso3166_1": "US", + "latitude": 45.5152, + "longitude": -122.6784, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^972(?:[59][0-468]|0[1-9]|1\\d|2[0-57-9]|3[0-3689]|4[02]|6[6-9]|8[0-36])$" + ], + "examples": [ + "97201", + "97202", + "97203" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 60, + "notes": "Portland, Oregon = 972xx. Enumerated from 60 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "San Diego", + "state_province": "California", + "iso3166_2": "US-CA", + "country": "United States", + "iso3166_1": "US", + "latitude": 32.7157, + "longitude": -117.1611, + "local_languages": [ + "en-US", + "es-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^921(?:0[1-9]|1[0-79]|2[0-469]|3[0-24-9]|4[02579]|5[02-589]|6[0135-9]|7[0-24-79]|8[267]|9[0-35-9])$" + ], + "examples": [ + "92101", + "92102", + "92103" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 74, + "notes": "San Diego = 921xx. Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Asheville", + "state_province": "North Carolina", + "iso3166_2": "US-NC", + "country": "United States", + "iso3166_1": "US", + "latitude": 35.5951, + "longitude": -82.5515, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^288(?:0[1-6]|1[03-6])$" + ], + "examples": [ + "28801", + "28802", + "28803" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 11, + "notes": "Asheville = 28801-28816. Enumerated from 11 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Grand Rapids", + "state_province": "Michigan", + "iso3166_2": "US-MI", + "country": "United States", + "iso3166_1": "US", + "latitude": 42.9634, + "longitude": -85.6681, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^495(?:0[1-8]|1[024-68]|2[358]|3[04]|4[468]|55|60|88|99)$" + ], + "examples": [ + "49501", + "49502", + "49503" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 26, + "notes": "Grand Rapids = 495xx. Enumerated from 26 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Chicago", + "state_province": "Illinois", + "iso3166_2": "US-IL", + "country": "United States", + "iso3166_1": "US", + "latitude": 41.8781, + "longitude": -87.6298, + "local_languages": [ + "en-US", + "es-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^60(?:6(?:0[1-9]|1\\d|2[0-689]|3[0-46-9]|4[0-79]|5[1-79]|6[014689]|7[03-578]|8[0-24-9]|9[013-79])|701)$" + ], + "examples": [ + "60601", + "60602", + "60603" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 84, + "notes": "Chicago = 606xx-608xx. Enumerated from 84 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Seattle", + "state_province": "Washington", + "iso3166_2": "US-WA", + "country": "United States", + "iso3166_1": "US", + "latitude": 47.6062, + "longitude": -122.3321, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^981(?:[01][1-9]|2[124-79]|3[134689]|4[14-68]|5[458]|6[014-68]|7[04578]|8[158]|9[014589])$" + ], + "examples": [ + "98101", + "98102", + "98103" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 59, + "notes": "Seattle = 981xx. Enumerated from 59 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Austin", + "state_province": "Texas", + "iso3166_2": "US-TX", + "country": "United States", + "iso3166_1": "US", + "latitude": 30.2672, + "longitude": -97.7431, + "local_languages": [ + "en-US", + "es-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^7(?:33(?:01|44)|87(?:[1-356]\\d|0[1-589]|4[124-9]|7[2-489]|83|99))$" + ], + "examples": [ + "73301", + "73344", + "78701" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 74, + "notes": "Austin = 787xx. Enumerated from 74 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Boston", + "state_province": "Massachusetts", + "iso3166_2": "US-MA", + "country": "United States", + "iso3166_1": "US", + "latitude": 42.3601, + "longitude": -71.0589, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^02(?:1(?:[36]3|0[89]|1[0-8]|2[378]|9[69])|2(?:0[13-6]|1[0-257]|22|41|66|8[34]|9[378]))$" + ], + "examples": [ + "02108", + "02109", + "02110" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 36, + "notes": "Boston = 021xx and 022xx. Enumerated from 36 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Philadelphia", + "state_province": "Pennsylvania", + "iso3166_2": "US-PA", + "country": "United States", + "iso3166_1": "US", + "latitude": 39.9526, + "longitude": -75.1652, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^19(?:0(?:19|9[239])|1(?:[2-4]\\d|0[1-9]|1[0-689]|5[0-5]|6[0-2]|7[0-35-9]|8[1-578]|9[0-7])|2(?:44|55))$" + ], + "examples": [ + "19019", + "19092", + "19093" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 87, + "notes": "Philadelphia = 191xx. Enumerated from 87 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Brooklyn", + "state_province": "New York", + "iso3166_2": "US-NY", + "country": "United States", + "iso3166_1": "US", + "latitude": 40.6782, + "longitude": -73.9442, + "local_languages": [ + "en-US", + "es-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^112(?:[13]\\d|0[1-9]|2[0-689]|4[1-3579]|5[126])$" + ], + "examples": [ + "11201", + "11202", + "11203" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 47, + "notes": "Brooklyn = 112xx. Enumerated from 47 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Milwaukee", + "state_province": "Wisconsin", + "iso3166_2": "US-WI", + "country": "United States", + "iso3166_1": "US", + "latitude": 43.0389, + "longitude": -87.9065, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^532(?:0[1-9]|1\\d|2[0-8]|3[347]|59|6[378]|7[48]|88|9[035])$" + ], + "examples": [ + "53201", + "53202", + "53203" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 41, + "notes": "Milwaukee = 532xx. Enumerated from 41 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Richmond", + "state_province": "Virginia", + "iso3166_2": "US-VA", + "country": "United States", + "iso3166_1": "US", + "latitude": 37.5407, + "longitude": -77.436, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^23(?:173|2(?:1[89]|2[0-7]|3[024-7]|4[19]|50|6[019]|7[4689]|8[24-69]|9[0-3578]))$" + ], + "examples": [ + "23173", + "23218", + "23219" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 39, + "notes": "Richmond = 232xx. Enumerated from 39 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Cincinnati", + "state_province": "Ohio", + "iso3166_2": "US-OH", + "country": "United States", + "iso3166_1": "US", + "latitude": 39.1031, + "longitude": -84.512, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^45(?:2(?:[01][1-9]|[34]\\d|2[0-79]|5[0-58]|6[2-47-9]|7[013-57]|80|9[689])|999)$" + ], + "examples": [ + "45201", + "45202", + "45203" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 71, + "notes": "Cincinnati = 452xx. Enumerated from 71 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "St. Louis", + "state_province": "Missouri", + "iso3166_2": "US-MO", + "country": "United States", + "iso3166_1": "US", + "latitude": 38.627, + "longitude": -90.1994, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^631(?:[1-3]\\d|0[1-9]|4[013-7]|5[015-8]|6[034679]|7[17-9]|8[028]|9[579])$" + ], + "examples": [ + "63101", + "63102", + "63103" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 68, + "notes": "St. Louis = 631xx. Enumerated from 68 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Tampa", + "state_province": "Florida", + "iso3166_2": "US-FL", + "country": "United States", + "iso3166_1": "US", + "latitude": 27.9506, + "longitude": -82.4572, + "local_languages": [ + "en-US", + "es-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^336(?:0[1-9]|1\\d|2[0-69]|3[013-57]|4[67]|5[05]|6[0-4]|7[2-579]|8[0-24-9]|94)$" + ], + "examples": [ + "33601", + "33602", + "33603" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 58, + "notes": "Tampa = 336xx. Enumerated from 58 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Minneapolis", + "state_province": "Minnesota", + "iso3166_2": "US-MN", + "country": "United States", + "iso3166_1": "US", + "latitude": 44.9778, + "longitude": -93.265, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^554(?:[1-4]\\d|0[1-9]|5[04589]|6[07]|7[02-489]|8[03-8])$" + ], + "examples": [ + "55401", + "55402", + "55403" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 69, + "notes": "Minneapolis = 554xx. Enumerated from 69 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Burlington", + "state_province": "Vermont", + "iso3166_2": "US-VT", + "country": "United States", + "iso3166_1": "US", + "latitude": 44.4759, + "longitude": -73.2121, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^0540[12568]$" + ], + "examples": [ + "05401", + "05402", + "05405" + ], + "source": "derived from GeoNames postal data (name, r=20km)", + "codes_matched": 5, + "notes": "Burlington = 054xx. Enumerated from 5 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Portland", + "state_province": "Maine", + "iso3166_2": "US-ME", + "country": "United States", + "iso3166_1": "US", + "latitude": 43.6591, + "longitude": -70.2568, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^041(?:0[1-49]|12|2[2-4])$" + ], + "examples": [ + "04101", + "04102", + "04103" + ], + "source": "derived from GeoNames postal data (name, r=25km)", + "codes_matched": 9, + "notes": "Portland, Maine = 041xx. Distinct from Portland, Oregon (972xx). Enumerated from 9 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Atlanta", + "state_province": "Georgia", + "iso3166_2": "US-GA", + "country": "United States", + "iso3166_1": "US", + "latitude": 33.749, + "longitude": -84.388, + "local_languages": [ + "en-US" + ], + "postal_code": { + "country_format_regex": "^\\d{5}(?:-\\d{4})?$", + "city_regex": [ + "^3(?:03(?:0[1-9]|1\\d|2[0-24-9]|3[1246-9]|4[0-689]|5[03-578]|6[013489]|7[014578]|8[0458]|9[2468])|11(?:0[67]|26|3[169]|5[06]|9[2356]))$" + ], + "examples": [ + "30301", + "30302", + "30303" + ], + "source": "derived from GeoNames postal data (name, r=30km)", + "codes_matched": 82, + "notes": "Atlanta city = 303xx; the wider metro extends across 303xx-309xx. Enumerated from 82 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Toronto", + "state_province": "Ontario", + "iso3166_2": "CA-ON", + "country": "Canada", + "iso3166_1": "CA", + "latitude": 43.651, + "longitude": -79.347, + "local_languages": [ + "en-CA" + ], + "postal_code": { + "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", + "city_regex": [ + "^M(?:1[BCEGHJ-NPR-TV-X]|2[HJ-NPR]|3[A-CHJ-N]|4[A-CEGHJ-NPR-TV-Y]|5[A-CEGHJ-NPR-TV-X]|6[A-CEGHJ-NPRS]|7[AY]|8[V-Z]|9[A-CL-NPRVW]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + ], + "examples": [ + "M1B 1A1", + "M1C 1A1", + "M1E 1A1" + ], + "source": "derived from GeoNames postal data (radius, r=30km)", + "codes_matched": 102, + "notes": "Toronto = the entire 'M' forward sortation area. Dataset is fsa-level; local delivery unit appended. Enumerated from 102 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Vancouver", + "state_province": "British Columbia", + "iso3166_2": "CA-BC", + "country": "Canada", + "iso3166_1": "CA", + "latitude": 49.2827, + "longitude": -123.1207, + "local_languages": [ + "en-CA" + ], + "postal_code": { + "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", + "city_regex": [ + "^V(?:5[K-NPR-TV-Z]|6[A-CEGHJ-NPRSZ]|7[GHJ-NPR-TV-Y]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + ], + "examples": [ + "V5K 1A1", + "V5L 1A1", + "V5M 1A1" + ], + "source": "derived from GeoNames postal data (sub, r=20km)", + "codes_matched": 43, + "notes": "Vancouver proper = V5/V6; V7 covers North/West Vancouver and Richmond. Dataset is fsa-level; local delivery unit appended. Enumerated from 43 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Montreal", + "state_province": "Quebec", + "iso3166_2": "CA-QC", + "country": "Canada", + "iso3166_1": "CA", + "latitude": 45.5017, + "longitude": -73.5673, + "local_languages": [ + "fr-CA", + "en-CA" + ], + "postal_code": { + "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", + "city_regex": [ + "^H(?:[1-3][A-CEGHJ-NPR-TV-Z]|0M|4[A-CEGHJ-NPR-TV-XZ]|5[AB]|7[A-CEGHJ-NPR-TV-Y]|8[NPR-TYZ]|9[A-CGHJPRSW]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + ], + "examples": [ + "H0M 1A1", + "H1A 1A1", + "H1B 1A1" + ], + "source": "derived from GeoNames postal data (radius, r=25km)", + "codes_matched": 118, + "notes": "Montreal = the entire 'H' forward sortation area. Dataset is fsa-level; local delivery unit appended. Enumerated from 118 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Calgary", + "state_province": "Alberta", + "iso3166_2": "CA-AB", + "country": "Canada", + "iso3166_1": "CA", + "latitude": 51.0447, + "longitude": -114.0719, + "local_languages": [ + "en-CA" + ], + "postal_code": { + "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", + "city_regex": [ + "^T(?:1Y|2[A-CEGHJ-NPR-TV-Z]|3[A-CEGHJ-NPRS]) ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + ], + "examples": [ + "T1Y 1A1", + "T2A 1A1", + "T2B 1A1" + ], + "source": "derived from GeoNames postal data (sub, r=30km)", + "codes_matched": 35, + "notes": "Calgary uses T1Y, T2A-T2Z and T3A-T3R; the T1/T3 blocks also include nearby communities. Dataset is fsa-level; local delivery unit appended. Enumerated from 35 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Halifax", + "state_province": "Nova Scotia", + "iso3166_2": "CA-NS", + "country": "Canada", + "iso3166_1": "CA", + "latitude": 44.6488, + "longitude": -63.5752, + "local_languages": [ + "en-CA" + ], + "postal_code": { + "country_format_regex": "^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$", + "city_regex": [ + "^B3[HJ-NPRS] ?\\d[ABCEGHJ-NPRSTV-Z]\\d$" + ], + "examples": [ + "B3H 1A1", + "B3J 1A1", + "B3K 1A1" + ], + "source": "derived from GeoNames postal data (sub, r=25km)", + "codes_matched": 9, + "notes": "Halifax peninsula/urban = B3x. The wider municipality also uses B2x and B4x. Dataset is fsa-level; local delivery unit appended. Enumerated from 9 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Mexico City", + "state_province": "Mexico City", + "iso3166_2": "MX-CMX", + "country": "Mexico", + "iso3166_1": "MX", + "latitude": 19.4326, + "longitude": -99.1332, + "local_languages": [ + "es-MX" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^(?:0(?:1(?:[0247]\\d|1[0-8]|3[1-478]|5[0-689]|6[0-5]|8[0-24-7]|9[049])|2(?:[13][0-6]|[49]\\d|0[0-24-9]|2[03-6]|5[0-4]|6[03-8]|7[0-35-9]|8[013-7])|3(?:[3479][0-4]|0[0-2]|1[09]|2[02-4]|5\\d|6[0-6]|8[0-24])|4(?:0[0-4]|1[0-2]|2[013-8]|3\\d|4[0-24-9]|5[013]|6[0-6]|7[0-3]|8[013-579]|9[0-8])|5(?:0[0236]|1[0-3]|2[0-46-8]|3[1-467]|5[03]|6[02])|6(?:0\\d|1[047]|2[024578]|3[05]|4[0357]|5[089]|6[09]|7[024689]|8[024-9]|9[029])|7(?:[289]\\d|[3-5][0-8]|0[0-24-9]|1[013-9]|6[02-8]|7[02-9])|8(?:[028][0-4]|1[06-8]|3[0-2]|4[02]|5[0-268]|6[0-25]|7[0-367]|9[0-3])|9(?:[278]\\d|[14][0-8]|0[0-46-9]|3[0-356]|5[0-35-7]|6[02-46-9]|9[0-467]))|1(?:0(?:[04]0|1[013]|2[09]|3[0235-8]|5[08]|6[0-5]|7[0-4]|8[1-4]|9[0-2])|1(?:[17]0|[24]\\d|[38][0-7]|0[04]|5[0-689]|6[0145]|9[1-35])|2(?:0[078]|20)|3(?:0[0367]|1[128]|2[013578]|3[016]|4[13]|55|6[04])|4(?:[03]\\d|1[1-6]|2[0-7]|4[0-68]|6[0-5])|5(?:[48][0-7]|0[0-2]|1[02]|2\\d|3[0-57-9]|5[0-4]|6[0-8]|7[0-5]|9[04-9])|6(?:0[1-57]|10|3[0-4]|4[14]|62|7[1-58]|8[168])))\\d$" + ], + "examples": [ + "01000", + "01010", + "01020" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 1207, + "notes": "Mexico City = 01000-16999. Compressed one digit short of full length. Enumerated from 1207 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Tijuana", + "state_province": "Baja California", + "iso3166_2": "MX-BCN", + "country": "Mexico", + "iso3166_1": "MX", + "latitude": 32.5149, + "longitude": -117.0382, + "local_languages": [ + "es-MX" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^22(?:0(?:[23][045]|00|4[46])|1(?:15|2[03-7]|6[03-5]|70|94)|2(?:06|1[04-7]|50)|4(?:0[056]|24|4[046]|57)|5(?:0[04-6]|1[05-7]|2[3-6]|3[04-7]|5[057]|6[03-7])|6(?:0[04-6]|1[046]|2[4-6]|4[03-5]|5[04]|6[03-7]))$" + ], + "examples": [ + "22000", + "22020", + "22024" + ], + "source": "derived from GeoNames postal data (radius, r=20km)", + "codes_matched": 85, + "notes": "Tijuana = 22000-22699. Enumerated from 85 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Monterrey", + "state_province": "Nuevo León", + "iso3166_2": "MX-NLE", + "country": "Mexico", + "iso3166_1": "MX", + "latitude": 25.6866, + "longitude": -100.3161, + "local_languages": [ + "es-MX" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^64(?:0(?:[235-7]0|0[04679]|1[089]|4[09])|1(?:[239]0|0[024-9]|1[06-9]|4[058]|5[07-9]|6[05-8]|7[08]|8[06])|2(?:[7-9]0|0[04-689]|1[0589]|2[05-9]|3[03-8]|4[04-9]|5[089]|6[04-69])|3(?:[0-257-9]0|3[09]|4[04-9]|6[05-9])|4(?:[0135-79]0|4[02]|8[089])|5(?:[06][08]|[58]0|1[07]|3[06]|4[09]|7[01])|6(?:[06]0|[45][09]|1[089]|2[03])|7(?:[037]0|15|2[03]|5[034]|6[0459]|8[038]|9[08])|8(?:[0-28]0|3[0346]|4[04-69]|5[089]|6[05]|78|9[037-9])|9(?:[1356]0|[04][09]|2[056]|7[089]|8[034679]|9[067]))$" + ], + "examples": [ + "64000", + "64004", + "64006" + ], + "source": "derived from GeoNames postal data (radius, r=18km)", + "codes_matched": 212, + "notes": "Monterrey city = 64000-64999; the metro area extends into 65xxx-67xxx. Enumerated from 212 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Guadalajara", + "state_province": "Jalisco", + "iso3166_2": "MX-JAL", + "country": "Mexico", + "iso3166_1": "MX", + "latitude": 20.6597, + "longitude": -103.3496, + "local_languages": [ + "es-MX" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^44(?:009|1(?:[01346-9]0|5[08])|2(?:[0378]0|1[04-9]|2[07]|4[0679]|5[07-9]|6[05-8]|9[089])|3(?:[3-8]0|0[067]|2[09]|9[0589])|4(?:[02457]0|1[09]|3[08]|6[079]|9[03])|5(?:[1268]0|[045][09]|3[058])|6(?:[029]0|[18][09]|3[0589]|4[78]|5[06-9]|6[0578]|7[089])|7(?:[078]0|1[069]|2[03-79]|3[079]|4[08]|5[057]|6[05689]|9[09])|8(?:[046]0|1[0578]|2[0457-9]|7[09]|9[05-9])|9(?:[039]0|[14][089]|2[09]|5[069]|6[0679]|7[078]|8[04-79]))$" + ], + "examples": [ + "44009", + "44100", + "44110" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 183, + "notes": "Guadalajara city = 44100-44999; Zapopan/Tlaquepaque use 45xxx. Enumerated from 183 observed codes; the country_format_regex is the permissive fallback." + } + }, + { + "city": "Ensenada", + "state_province": "Baja California", + "iso3166_2": "MX-BCN", + "country": "Mexico", + "iso3166_1": "MX", + "latitude": 31.8667, + "longitude": -116.5964, + "local_languages": [ + "es-MX" + ], + "postal_code": { + "country_format_regex": "^\\d{5}$", + "city_regex": [ + "^228(?:[03]0|1[02-589]|2[023]|4[027]|5[0259]|6[03]|7[0239]|8[07-9]|9[578])$" + ], + "examples": [ + "22800", + "22810", + "22812" + ], + "source": "derived from GeoNames postal data (radius, r=15km)", + "codes_matched": 32, + "notes": "Ensenada = 22800-22899. Enumerated from 32 observed codes; the country_format_regex is the permissive fallback." + } } - } -] + ] +} \ No newline at end of file diff --git a/tooling/pipeline/src/application_options/parse_arguments.cc b/tooling/pipeline/src/application_options/parse_arguments.cc index 1822584b..bf3b37b6 100644 --- a/tooling/pipeline/src/application_options/parse_arguments.cc +++ b/tooling/pipeline/src/application_options/parse_arguments.cc @@ -38,9 +38,8 @@ std::optional ParseArguments( "Number of layers to offload to GPU"); }; - // --mocked, --model, and --openai are mutually exclusive; validation is - // enforced below rather than at registration to produce a clear - // diagnostic message. + // --mocked, --model, and --openai are mutually exclusive, validated below + // to produce a clear diagnostic message. auto add_generator_options = [&]() -> void { opt("mocked", prog_opts::bool_switch(), "Use mocked generator for brewery/user data"); @@ -154,9 +153,7 @@ std::optional ParseArguments( return std::nullopt; } - // Prompt directory is only meaningful for live inference (Llama or - // OpenAI) — the mock generator has no use for it and should not - // require it to be present. + // Prompt directory is required only for live inference (Llama or OpenAI). if (!use_mocked && options.pipeline.prompt_dir.empty()) { const std::string msg = "Invalid arguments: --prompt-dir is required when not using " diff --git a/tooling/pipeline/src/biergarten_pipeline_orchestrator/biergarten_pipeline_orchestrator.cc b/tooling/pipeline/src/biergarten_pipeline_orchestrator/biergarten_pipeline_orchestrator.cc index 59b09ed0..eae518aa 100644 --- a/tooling/pipeline/src/biergarten_pipeline_orchestrator/biergarten_pipeline_orchestrator.cc +++ b/tooling/pipeline/src/biergarten_pipeline_orchestrator/biergarten_pipeline_orchestrator.cc @@ -13,12 +13,10 @@ BiergartenPipelineOrchestrator::BiergartenPipelineOrchestrator( std::unique_ptr generator, std::unique_ptr exporter, std::unique_ptr curated_data_service, - std::unique_ptr postal_code_service, const ApplicationOptions& application_options) : logger_(std::move(logger)), context_service_(std::move(context_service)), generator_(std::move(generator)), exporter_(std::move(exporter)), curated_data_service_(std::move(curated_data_service)), - postal_code_service_(std::move(postal_code_service)), application_options_(application_options) {} \ No newline at end of file diff --git a/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_breweries.cc b/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_breweries.cc index 2fa65463..1e4c4e1a 100644 --- a/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_breweries.cc +++ b/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_breweries.cc @@ -4,54 +4,16 @@ */ #include -#include #include -#include #include #include #include "biergarten_pipeline_orchestrator.h" +#include "biergarten_pipeline_orchestrator/coords.h" #include "services/logging/logger.h" -struct Coords { - double longitude; - double latitude; -}; - -// @todo find a better home for this -namespace { -constexpr double kEarthRadiusKm = 6371.0; - -double DegreesToRadians(double degrees) { - return degrees * std::numbers::pi / 180.0; -} - -double RadiansToDegrees(double radians) { - return radians * 180.0 / std::numbers::pi; -} -} // namespace - -static Coords GetRandomCoordsWithinRange(const Coords& centre, - const int distance_km, - std::mt19937& rng) { - std::uniform_real_distribution angle_dist(0.0, - 2.0 * std::numbers::pi); - std::uniform_real_distribution unit_dist(0.0, 1.0); - - const double angle_radians = angle_dist(rng); - // sqrt() keeps points uniformly distributed over the disc's area rather - // than clustering near the centre. - const double radius_km = distance_km * std::sqrt(unit_dist(rng)); - - const double delta_latitude_degrees = - RadiansToDegrees(radius_km * std::cos(angle_radians) / kEarthRadiusKm); - const double delta_longitude_degrees = RadiansToDegrees( - radius_km * std::sin(angle_radians) / - (kEarthRadiusKm * std::cos(DegreesToRadians(centre.latitude)))); - - return Coords{.longitude = centre.longitude + delta_longitude_degrees, - .latitude = centre.latitude + delta_latitude_degrees}; -} +using biergarten_pipeline_orchestrator_internal::Coords; +using biergarten_pipeline_orchestrator_internal::GetRandomCoordsWithinRange; void BiergartenPipelineOrchestrator::GenerateBreweries( std::span cities) { @@ -70,8 +32,6 @@ void BiergartenPipelineOrchestrator::GenerateBreweries( try { const BreweryResult brewery = generator_->GenerateBrewery(enriched_city); - const std::string postal_code = - postal_code_service_->GeneratePostalCode(enriched_city.location); constexpr int kMaxDistanceFromCentreKm = 5; const Coords city_centre{.longitude = enriched_city.location.longitude, @@ -81,7 +41,6 @@ void BiergartenPipelineOrchestrator::GenerateBreweries( return BreweryRecord{ .address = BreweryAddress{.city = enriched_city.location, - .postal_code = postal_code, .longitude = brewery_coords.longitude, .latitude = brewery_coords.latitude}, .brewery = brewery}; diff --git a/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_users.cc b/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_users.cc index 7dd2fb60..c3b16afa 100644 --- a/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_users.cc +++ b/tooling/pipeline/src/biergarten_pipeline_orchestrator/generate_users.cc @@ -15,9 +15,13 @@ #include #include "biergarten_pipeline_orchestrator.h" +#include "biergarten_pipeline_orchestrator/coords.h" #include "services/curated_data/curated_json_data_service.h" #include "services/logging/logger.h" +using biergarten_pipeline_orchestrator_internal::Coords; +using biergarten_pipeline_orchestrator_internal::GetRandomCoordsWithinRange; + namespace { std::string Sanitize(std::string_view value) { std::string out; @@ -135,12 +139,17 @@ void BiergartenPipelineOrchestrator::GenerateUsers( try { const UserResult user = generator_->GenerateUser(city, persona, sampled_name); - const std::string postal_code = - postal_code_service_->GeneratePostalCode(city.location); + + constexpr int kMaxDistanceFromCentreKm = 5; + const Coords city_centre{.longitude = city.location.longitude, + .latitude = city.location.latitude}; + const Coords user_coords = GetRandomCoordsWithinRange( + city_centre, kMaxDistanceFromCentreKm, rng); return UserRecord{ - .address = - UserAddress{.city = city.location, .postal_code = postal_code}, + .address = UserAddress{.city = city.location, + .longitude = user_coords.longitude, + .latitude = user_coords.latitude}, .user = user, .email = BuildEmail(sampled_name, used_email_local_parts), .date_of_birth = GenerateDateOfBirth(rng), diff --git a/tooling/pipeline/src/biergarten_pipeline_orchestrator/log_results.cc b/tooling/pipeline/src/biergarten_pipeline_orchestrator/log_results.cc index 1b27752a..dee24693 100644 --- a/tooling/pipeline/src/biergarten_pipeline_orchestrator/log_results.cc +++ b/tooling/pipeline/src/biergarten_pipeline_orchestrator/log_results.cc @@ -26,7 +26,6 @@ void BiergartenPipelineOrchestrator::LogResults() const { {"country", city.country}, {"state_province", city.state_province}, {"iso3166_2", city.iso3166_2}, - {"postal_code", address.postal_code}, {"longitude", address.longitude}, {"latitude", address.latitude}, }}}); diff --git a/tooling/pipeline/src/data_generation/generation_json_validation.cc b/tooling/pipeline/src/data_generation/generation_json_validation.cc index 42344f16..29ce700d 100644 --- a/tooling/pipeline/src/data_generation/generation_json_validation.cc +++ b/tooling/pipeline/src/data_generation/generation_json_validation.cc @@ -58,9 +58,7 @@ std::string CondenseWhitespace(std::string_view text) { return out; } -// Guard against truncating in the first half of the string. -// This preserves the critical opening content and avoids cutting critical -// context words early in the region description. +// Keeps truncation past the string's midpoint, preserving the critical opening content. constexpr size_t kTruncationGuardDivisor = 2; bool ReadRequiredTrimmedStringField(const boost::json::object& obj, diff --git a/tooling/pipeline/src/data_generation/openai/generate_brewery.cc b/tooling/pipeline/src/data_generation/openai/generate_brewery.cc index 3f39fe87..c44d057c 100644 --- a/tooling/pipeline/src/data_generation/openai/generate_brewery.cc +++ b/tooling/pipeline/src/data_generation/openai/generate_brewery.cc @@ -36,10 +36,7 @@ std::string FormatLocalLanguageCodes( constexpr int kBreweryMaxTokens = 2800; -// Structured outputs already guarantee schema-valid JSON, so retries here -// are only for transient failures or the model returning placeholder text -// -- not for malformed JSON shape, unlike LlamaGenerator's grammar-assisted -// retry loop. +// Structured outputs already guarantee schema-valid JSON, so retries here only cover transient failures or the model returning placeholder text. constexpr int kMaxAttempts = 2; } // namespace @@ -54,9 +51,7 @@ BreweryResult OpenAIGenerator::GenerateBrewery( FormatLocalLanguageCodes(location.local_languages); /** - * Load brewery system prompt via the injected prompt directory. The - * same file LlamaGenerator uses -- the prompt content is backend - * agnostic. + * Loads the backend-agnostic brewery system prompt via the injected prompt directory. */ const std::string system_prompt = prompt_directory_->Load("BREWERY_GENERATION"); diff --git a/tooling/pipeline/src/data_generation/openai/generate_user.cc b/tooling/pipeline/src/data_generation/openai/generate_user.cc index ab792104..592a1245 100644 --- a/tooling/pipeline/src/data_generation/openai/generate_user.cc +++ b/tooling/pipeline/src/data_generation/openai/generate_user.cc @@ -16,8 +16,7 @@ namespace { constexpr int kUserMaxTokens = 1200; -// Structured outputs already guarantee schema-valid JSON, so retries here -// are only for transient failures or placeholder text -- not JSON shape. +// Structured outputs already guarantee schema-valid JSON, so retries here only cover transient failures or placeholder text. constexpr int kMaxAttempts = 2; } // namespace diff --git a/tooling/pipeline/src/main.cc b/tooling/pipeline/src/main.cc index 32b01709..ebed60a0 100644 --- a/tooling/pipeline/src/main.cc +++ b/tooling/pipeline/src/main.cc @@ -87,36 +87,16 @@ int main(const int argc, char** argv) { di::bind().to(options), di::bind().to(model_path), di::bind().to(), - di::bind().to( - [options, - &log_producer]() -> std::unique_ptr { - if (options.generator.mode == GeneratorMode::kMock) { - log_producer->Log( - {.level = LogLevel::Info, - .phase = PipelinePhase::Startup, - .message = "Postal code: mock (curated examples)"}); - - return std::make_unique(); - } - - log_producer->Log( - {.level = LogLevel::Info, - .phase = PipelinePhase::Startup, - .message = - "Postal code: Xeger (regex-based generation)"}); - - return std::make_unique(); - }), di::bind().to( [options, &log_producer]() -> std::unique_ptr { - // if (options.generator.mode == GeneratorMode::kMock) { - // log_producer->Log({.level = LogLevel::Info, - // .phase = PipelinePhase::Startup, - // .message = "Curated data: mock"}); - // - // return std::make_unique(); - // } + if (options.generator.mode == GeneratorMode::kMock) { + log_producer->Log({.level = LogLevel::Info, + .phase = PipelinePhase::Startup, + .message = "Curated data: mock"}); + + return std::make_unique(); + } log_producer->Log({.level = LogLevel::Info, .phase = PipelinePhase::Startup, @@ -214,9 +194,7 @@ int main(const int argc, char** argv) { } #ifdef BIERGARTEN_MOCK_ONLY - // Only reachable when mode == Llama: Mock and OpenAI are - // handled above and don't need llama.cpp, but LlamaGenerator - // itself is not linked into a BIERGARTEN_MOCK_ONLY build. + // Only reachable when mode == Llama, which requires llama.cpp and is excluded from a BIERGARTEN_MOCK_ONLY build. throw std::runtime_error( "LlamaGenerator is unavailable in a BIERGARTEN_MOCK_ONLY " "build"); diff --git a/tooling/pipeline/src/services/curated_data/curated_json_data_service.cc b/tooling/pipeline/src/services/curated_data/curated_json_data_service.cc index eb17df45..a0690063 100644 --- a/tooling/pipeline/src/services/curated_data/curated_json_data_service.cc +++ b/tooling/pipeline/src/services/curated_data/curated_json_data_service.cc @@ -77,12 +77,11 @@ static PostalCodeSpec ReadPostalCodeSpec(const boost::json::object& object) { } namespace { -boost::json::value ParseJsonFile(const std::filesystem::path& filepath, - const char* what) { +boost::json::value ParseJsonFile(const std::filesystem::path& filepath) { std::ifstream input(filepath); if (!input.is_open()) { throw std::runtime_error( - std::format("Failed to open {} file: {}", what, filepath.string())); + std::format("Failed to open file: {}", filepath.string())); } std::stringstream buffer; @@ -92,7 +91,7 @@ boost::json::value ParseJsonFile(const std::filesystem::path& filepath, boost::json::value root = boost::json::parse(buffer.str(), error); if (error) { throw std::runtime_error( - std::format("Failed to parse {} JSON: {}", what, error.message())); + std::format("Failed to parse JSON: {}", error.message())); } return root; } @@ -126,34 +125,47 @@ const LocationsList& CuratedJsonDataService::LoadLocations() { if (!cache_.locations.empty()) { return cache_.locations; } + boost::json::value root_val = + ParseJsonFile(filepaths_.locations_path); - const boost::json::value root = - ParseJsonFile(filepaths_.locations_path, "locations"); - - if (!root.is_array()) { + if (!root_val.is_object()) { throw std::runtime_error( - "Invalid locations JSON: root element must be an array"); + "Invalid locations JSON: root element must be an object"); } - LocationsList locations; - const auto& items = root.as_array(); - locations.reserve(items.size()); + boost::json::object root_obj = root_val.as_object(); - for (const auto& item : items) { + if (!root_obj.contains("cities")) + { + throw std::runtime_error( + "Invalid locations JSON: root object must contain a 'cities' key"); + } + + if (!root_obj["cities"].is_array()) + { + throw std::runtime_error( + "Invalid locations JSON: 'cities' key must be an array"); + } + + LocationsList locations; + const boost::json::array& cities = root_obj["cities"].as_array(); + locations.reserve(cities.size()); + + for (const boost::json::value& item : cities) { if (!item.is_object()) { throw std::runtime_error( "Invalid locations JSON: each entry must be an object"); } - const auto& object = item.as_object(); + const boost::json::object& object = item.as_object(); locations.push_back(City{ .city = ReadRequiredString(object, "city"), .state_province = ReadRequiredString(object, "state_province"), .iso3166_2 = ReadRequiredString(object, "iso3166_2"), .country = ReadRequiredString(object, "country"), .iso3166_1 = ReadRequiredString(object, "iso3166_1"), - .latitude = ReadRequiredDouble(object, "latitude"), .longitude = ReadRequiredDouble(object, "longitude"), + .latitude = ReadRequiredDouble(object, "latitude"), .local_languages = ReadRequiredStringArray(object, "local_languages"), .postal_code = ReadPostalCodeSpec(object), }); @@ -168,7 +180,7 @@ const PersonasList& CuratedJsonDataService::LoadPersonas() { } const boost::json::value root = - ParseJsonFile(filepaths_.personas_path, "personas"); + ParseJsonFile(filepaths_.personas_path); if (!root.is_array()) { throw std::runtime_error( @@ -176,10 +188,10 @@ const PersonasList& CuratedJsonDataService::LoadPersonas() { } PersonasList personas; - const auto& items = root.as_array(); + const boost::json::array& items = root.as_array(); personas.reserve(items.size()); - for (const auto& item : items) { + for (const boost::json::value& item : items) { if (!item.is_object()) { throw std::runtime_error( "Invalid personas JSON: each entry must be an object"); @@ -204,7 +216,7 @@ const ForenamesByCountryMap& CuratedJsonDataService::LoadForenamesByCountry() { } const boost::json::value root = - ParseJsonFile(filepaths_.forenames_path, "forenames-by-country"); + ParseJsonFile(filepaths_.forenames_path); if (!root.is_object()) { throw std::runtime_error( @@ -252,7 +264,7 @@ const SurnamesByCountryMap& CuratedJsonDataService::LoadSurnamesByCountry() { } const boost::json::value root = - ParseJsonFile(filepaths_.surnames_path, "surnames-by-country"); + ParseJsonFile(filepaths_.surnames_path); if (!root.is_object()) { throw std::runtime_error( diff --git a/tooling/pipeline/src/services/postal_code/xeger_postal_code_service.cc b/tooling/pipeline/src/services/postal_code/xeger_postal_code_service.cc deleted file mode 100644 index 761f80df..00000000 --- a/tooling/pipeline/src/services/postal_code/xeger_postal_code_service.cc +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file services/postal_code/xeger_postal_code_service.cc - * @brief XegerPostalCodeService::GeneratePostalCode() implementation. - */ - -#include "services/postal_code/xeger_postal_code_service.h" - -#include -#include -#include -#include -#include -#include - -#include "services/xeger/xeger.h" - -XegerPostalCodeService::XegerPostalCodeService() - : rng_(std::random_device{}()) {} - -std::string XegerPostalCodeService::GeneratePostalCode(const City& city) { - const PostalCodeSpec& spec = city.postal_code; - - std::vector city_patterns; - for (const std::string& pattern : spec.city_regexes) { - if (!pattern.empty()) { - city_patterns.push_back(pattern); - } - } - - std::string_view pattern; - if (!city_patterns.empty()) { - std::uniform_int_distribution dist(0, city_patterns.size() - 1); - pattern = city_patterns[dist(rng_)]; - } else if (!spec.country_format_regex.empty()) { - pattern = spec.country_format_regex; - } else { - throw std::runtime_error(std::format( - "XegerPostalCodeService: no postal-code pattern available for " - "city '{}'", - city.city)); - } - - return GenerateStringFromRegex(pattern, rng_); -} diff --git a/tooling/pipeline/src/services/sqlite/process_record.cc b/tooling/pipeline/src/services/sqlite/process_record.cc index 964892a7..64b575b7 100644 --- a/tooling/pipeline/src/services/sqlite/process_record.cc +++ b/tooling/pipeline/src/services/sqlite/process_record.cc @@ -170,13 +170,6 @@ uint64_t SqliteExportService::ProcessRecord(const BreweryRecord& brewery) { sqlite_export_service_internal::kBreweryAddressCityIdBindIndex, .value = city_id, .action = "Failed to bind SQLite brewery address city id"}); - sqlite_export_service_internal::Bind( - insert_brewery_address_stmt_, - sqlite_export_service_internal::BoundParam{ - .index = sqlite_export_service_internal:: - kBreweryAddressPostalCodeBindIndex, - .value = brewery.address.postal_code, - .action = "Failed to bind SQLite brewery address postal code"}); sqlite_export_service_internal::Bind( insert_brewery_address_stmt_, sqlite_export_service_internal::BoundParam{ diff --git a/tooling/pipeline/src/services/sqlite/process_user_record.cc b/tooling/pipeline/src/services/sqlite/process_user_record.cc index 322fc382..a48df59f 100644 --- a/tooling/pipeline/src/services/sqlite/process_user_record.cc +++ b/tooling/pipeline/src/services/sqlite/process_user_record.cc @@ -87,11 +87,18 @@ uint64_t SqliteExportService::ProcessRecord(const UserRecord& user) { .action = "Failed to bind SQLite user address city id"}); sqlite_export_service_internal::Bind( insert_user_address_stmt_, - sqlite_export_service_internal::BoundParam{ + sqlite_export_service_internal::BoundParam{ .index = - sqlite_export_service_internal::kUserAddressPostalCodeBindIndex, - .value = user.address.postal_code, - .action = "Failed to bind SQLite user address postal code"}); + sqlite_export_service_internal::kUserAddressLongitudeBindIndex, + .value = user.address.longitude, + .action = "Failed to bind SQLite user address longitude"}); + sqlite_export_service_internal::Bind( + insert_user_address_stmt_, + sqlite_export_service_internal::BoundParam{ + .index = + sqlite_export_service_internal::kUserAddressLatitudeBindIndex, + .value = user.address.latitude, + .action = "Failed to bind SQLite user address latitude"}); sqlite_export_service_internal::StepStatement( db_handle_, insert_user_address_stmt_, diff --git a/web/backend/Database/Database.Seed/Database.Seed.csproj b/web/backend/Database/Database.Seed/Database.Seed.csproj index ee222915..8c02e66d 100644 --- a/web/backend/Database/Database.Seed/Database.Seed.csproj +++ b/web/backend/Database/Database.Seed/Database.Seed.csproj @@ -8,20 +8,20 @@ - - - - + + + + - - - - - + + + + + - + diff --git a/web/backend/Database/Database.Seed/DatabaseHelpers/ConnectionStrings.cs b/web/backend/Database/Database.Seed/DatabaseHelpers/ConnectionStrings.cs index 535d1a0a..cc0733f2 100644 --- a/web/backend/Database/Database.Seed/DatabaseHelpers/ConnectionStrings.cs +++ b/web/backend/Database/Database.Seed/DatabaseHelpers/ConnectionStrings.cs @@ -12,6 +12,5 @@ public class ConnectionStrings public static string GetSqlServerConnectionString(IConfiguration configuration) => SqlConnectionStringHelper.BuildConnectionString(configuration); - public static string SqliteConnectionString => "Data Source=SeedData/open-ai-test2.sqlite"; - // "Data Source=SeedData/biergarten_seed_2026-07-20T05-46-02.993511Z.sqlite"; + public static string SqliteConnectionString => "Data Source=SeedData/biergarten_seed_2026-08-24T01-52-09.841693Z.sqlite"; } diff --git a/web/backend/Database/Database.Seed/Geocoding/NominatimReverseGeocoder.cs b/web/backend/Database/Database.Seed/Geocoding/NominatimReverseGeocoder.cs new file mode 100644 index 00000000..28d82c71 --- /dev/null +++ b/web/backend/Database/Database.Seed/Geocoding/NominatimReverseGeocoder.cs @@ -0,0 +1,124 @@ +using System.Globalization; +using System.Net.Http.Json; +using System.Text.Json.Serialization; + +namespace Database.Seed.Geocoding; + +public sealed record ReverseGeocodeResult(string AddressLine1, string PostalCode); + +internal sealed record NominatimAddress +{ + [JsonPropertyName("house_number")] + public string? HouseNumber { get; init; } + + [JsonPropertyName("road")] + public string? Road { get; init; } + + [JsonPropertyName("postcode")] + public string? Postcode { get; init; } +} + +internal sealed record NominatimReverseGeocodeResponse +{ + [JsonPropertyName("address")] + public NominatimAddress? Address { get; init; } + + [JsonPropertyName("error")] + public string? Error { get; init; } +} + +/// +/// Reverse geocodes coordinates into street addresses via the public Nominatim API +/// (https://nominatim.openstreetmap.org), following its usage policy of a single +/// identifying User-Agent and at most one request per second +/// (https://operations.osmfoundation.org/policies/nominatim/). +/// +public sealed class NominatimReverseGeocoder : IDisposable +{ + private const string ReverseEndpoint = "https://nominatim.openstreetmap.org/reverse"; + private static readonly TimeSpan MinRequestInterval = TimeSpan.FromSeconds(1); + + private readonly HttpClient _httpClient; + private readonly SemaphoreSlim _rateLimitLock = new(1, 1); + private DateTime _lastRequestUtc = DateTime.MinValue; + + public NominatimReverseGeocoder(string userAgent) + { + _httpClient = new HttpClient(); + _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent); + } + + /// + /// Reverse geocodes a coordinate pair, returning null if Nominatim has no address + /// for the point or the request fails so callers can fall back to a placeholder address. + /// + public async Task ReverseGeocodeAsync( + double longitude, + double latitude, + CancellationToken cancellationToken = default + ) + { + await WaitForRateLimitAsync(cancellationToken); + + string url = + $"{ReverseEndpoint}?format=jsonv2" + + $"&lat={latitude.ToString(CultureInfo.InvariantCulture)}" + + $"&lon={longitude.ToString(CultureInfo.InvariantCulture)}" + + "&zoom=18&addressdetails=1"; + + try + { + NominatimReverseGeocodeResponse? response = + await _httpClient.GetFromJsonAsync( + url, + cancellationToken + ); + + if (response?.Address is null || response.Error is not null) + return null; + + string addressLine1 = string.Join( + ' ', + new[] { response.Address.HouseNumber, response.Address.Road }.Where( + part => !string.IsNullOrWhiteSpace(part) + ) + ); + + return string.IsNullOrWhiteSpace(addressLine1) + ? null + : new ReverseGeocodeResult(addressLine1, response.Address.Postcode ?? string.Empty); + } + catch (HttpRequestException) + { + return null; + } + catch (TaskCanceledException) when (!cancellationToken.IsCancellationRequested) + { + // HttpClient's own timeout elapsed here. + return null; + } + } + + private async Task WaitForRateLimitAsync(CancellationToken cancellationToken) + { + await _rateLimitLock.WaitAsync(cancellationToken); + try + { + TimeSpan elapsed = DateTime.UtcNow - _lastRequestUtc; + if (elapsed < MinRequestInterval) + await Task.Delay(MinRequestInterval - elapsed, cancellationToken); + + _lastRequestUtc = DateTime.UtcNow; + } + finally + { + _rateLimitLock.Release(); + } + } + + public void Dispose() + { + _httpClient.Dispose(); + _rateLimitLock.Dispose(); + } +} diff --git a/web/backend/Database/Database.Seed/PipelineData/BreweryAddress.cs b/web/backend/Database/Database.Seed/PipelineData/BreweryAddress.cs index 7d373338..83178358 100644 --- a/web/backend/Database/Database.Seed/PipelineData/BreweryAddress.cs +++ b/web/backend/Database/Database.Seed/PipelineData/BreweryAddress.cs @@ -4,8 +4,6 @@ public sealed record BreweryAddress { public required City City { get; init; } - public required string PostalCode { get; init; } - public required double Longitude { get; init; } public required double Latitude { get; init; } diff --git a/web/backend/Database/Database.Seed/PipelineData/UserAddress.cs b/web/backend/Database/Database.Seed/PipelineData/UserAddress.cs index 6b63a17c..d4f5a7d1 100644 --- a/web/backend/Database/Database.Seed/PipelineData/UserAddress.cs +++ b/web/backend/Database/Database.Seed/PipelineData/UserAddress.cs @@ -4,5 +4,7 @@ public sealed record UserAddress { public required City City { get; init; } - public required string PostalCode { get; init; } + public required double Longitude { get; init; } + + public required double Latitude { get; init; } } diff --git a/web/backend/Database/Database.Seed/Program.cs b/web/backend/Database/Database.Seed/Program.cs index e6be1a44..a504e03e 100644 --- a/web/backend/Database/Database.Seed/Program.cs +++ b/web/backend/Database/Database.Seed/Program.cs @@ -1,4 +1,5 @@ using Database.Seed.DatabaseHelpers; +using Database.Seed.Geocoding; using Database.Seed.PipelineData; using Database.Seed.Sqlite; using Domain.Entities; @@ -16,6 +17,9 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Spectre.Console; +const string NominatimUserAgent = + "TheBiergartenApp-Seeder/1.0 (+https://github.com/aaronpo97/the-biergarten-app)"; + return await RunAsync(); static async Task RunAsync() @@ -100,23 +104,34 @@ static async Task RunAsync() } ); - await AnsiConsole - .Status() - .Spinner(Spinner.Known.Dots) - .SpinnerStyle(Style.Parse("green")) - .StartAsync( - "Loading brewery data into target database...", - async ctx => - { - await LoadBreweriesIntoDatabaseAsync( - breweryRepository, - locationRepository, - seedData.Breweries, - postedByIds - ); - ctx.Status("Brewery data loaded into target database."); - } - ); + List geocodingWarnings = []; + + using (NominatimReverseGeocoder geocoder = new(NominatimUserAgent)) + { + await AnsiConsole + .Status() + .Spinner(Spinner.Known.Dots) + .SpinnerStyle(Style.Parse("green")) + .StartAsync( + "Loading brewery data into target database...", + async ctx => + { + await LoadBreweriesIntoDatabaseAsync( + breweryRepository, + locationRepository, + geocoder, + seedData.Breweries, + postedByIds, + geocodingWarnings, + ctx + ); + ctx.Status("Brewery data loaded into target database."); + } + ); + } + + foreach (string warning in geocodingWarnings) + AnsiConsole.MarkupLine($"[yellow]![/] {warning.EscapeMarkup()}"); return 0; } @@ -165,20 +180,18 @@ static async Task> LoadUsersIntoDatabaseAsync( return userAccountIds; } -/// -/// Persists each record, resolving (and creating, if needed) its -/// Country/StateProvince/City chain via . The pipeline -/// data has no street-level address or a specific user tied to each brewery, so a placeholder -/// address is used and PostedById is assigned round-robin from -/// to keep seeding deterministic across runs. -/// static async Task LoadBreweriesIntoDatabaseAsync( IBreweryRepository breweryRepository, ILocationRepository locationRepository, + NominatimReverseGeocoder geocoder, IReadOnlyList breweries, - IReadOnlyList posterUserIds + IReadOnlyList posterUserIds, + List geocodingWarnings, + StatusContext ctx ) { + const string placeholderAddressLine1 = "Address unavailable"; + if (posterUserIds.Count == 0) throw new InvalidOperationException( "Cannot load breweries without any registered users."); @@ -187,6 +200,10 @@ static async Task LoadBreweriesIntoDatabaseAsync( { BreweryRecord breweryRecord = breweries[i]; + ctx.Status( + $"Geocoding and loading brewery {i + 1}/{breweries.Count} into target database..." + ); + Guid cityId = await locationRepository.GetOrCreateCityIdAsync( new CityLocation( breweryRecord.Address.City.CityName, @@ -197,6 +214,18 @@ static async Task LoadBreweriesIntoDatabaseAsync( ) ); + ReverseGeocodeResult? geocoded = await geocoder.ReverseGeocodeAsync( + breweryRecord.Address.Longitude, + breweryRecord.Address.Latitude + ); + + if (geocoded is null) + geocodingWarnings.Add( + $"Could not reverse geocode '{breweryRecord.Brewery.NameEn}' " + + $"({breweryRecord.Address.Latitude}, {breweryRecord.Address.Longitude}); " + + "using a placeholder address." + ); + await breweryRepository.CreateAsync( new BreweryPost { @@ -204,12 +233,13 @@ static async Task LoadBreweriesIntoDatabaseAsync( BreweryName = breweryRecord.Brewery.NameEn, Description = breweryRecord.Brewery.DescriptionEn, PostedById = posterUserIds[i % posterUserIds.Count], + // TODO: Populate Coordinates from breweryRecord.Address.Latitude/Longitude once it goes through NetTopologySuite (NTS). Location = new BreweryPostLocation { BreweryPostLocationId = Guid.NewGuid(), CityId = cityId, - AddressLine1 = "Address unavailable", - PostalCode = breweryRecord.Address.PostalCode, + AddressLine1 = geocoded?.AddressLine1 ?? placeholderAddressLine1, + PostalCode = geocoded?.PostalCode ?? string.Empty, }, } ); @@ -224,7 +254,8 @@ static Table BuildBreweryTable(IReadOnlyList breweries) .AddColumn("City") .AddColumn("State/Province") .AddColumn("Country") - .AddColumn("Postal Code"); + .AddColumn("Longitude") + .AddColumn("Latitude"); foreach (BreweryRecord brewery in breweries) { @@ -234,7 +265,8 @@ static Table BuildBreweryTable(IReadOnlyList breweries) brewery.Address.City.CityName, brewery.Address.City.StateProvince, brewery.Address.City.Country, - brewery.Address.PostalCode + brewery.Address.Longitude.ToString("F6"), + brewery.Address.Latitude.ToString("F6") ); } diff --git a/web/backend/Database/Database.Seed/SeedData/biergarten_seed_2026-07-20T05-46-02.993511Z.sqlite b/web/backend/Database/Database.Seed/SeedData/biergarten_seed_2026-07-20T05-46-02.993511Z.sqlite deleted file mode 100644 index baadeeb982b712d77d8aef6a5d8d7dfd39c2c515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172032 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 z 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 literal 0 HcmV?d00001 diff --git a/web/backend/Database/Database.Seed/SeedData/open-ai-test.sqlite b/web/backend/Database/Database.Seed/SeedData/open-ai-test.sqlite deleted file mode 100644 index e3ead9ab019b0fd9e3aeb91782cabe30adc981ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94208 zcmeIb3zQt?mFHQ79wiAxO}E>l;V`xW+}*Oqs-jAdlC&HzdQgBs4;l#rmNAaZjH(P( zWJWq8vx+L?Gm-#D}M|ei4~jdO)}5OdpRYI8bC}M10@<{`Y=2zI(rW@3-@hwuX(s8;R=`zu~Rw z`g>j7-CY|zudAzT5&tdWzwDode3+Yk;s4zopU?GiQCI(g|7LOT|J`-L{D-<0|8?&_ zU;O+9e{%ljMMoF?qXj=-`2Y2Mq33)qZGNd#50WHEZYze3$=kxx>|YmezF~Odu3>M>_A7^P_Rjs(BG22g-JAXF zN7ELUPoDoiUE6b~cYVS8b)7zS)~?fQ%lB_y)U#yy^6tAfHvB>q%qDR5xAW8fc5U3W zb@;TQcps&gumlXdhOZvJ!Mpy3E!#HUaEo`{@GaiP8+Yy4vYm&w4R7DIg8S0GTQ_gt zvCG?jH=r^!dd(sJ?P%HgfUFm3b3otrmaIjnv=AJ5p*`8dCY!8x8^w0!@-f}SNymUQ2B zMGM75L?jE(z%2P&K{XQAlg4dTzjBrlNB%i4jRweY{Y;QV)7cvJo~Oi%a<>lzvSafy1Q() zC7+F03*P288?k-2sh8X~Xc#WqH?OB>$<>#2@4KWmH4F7%BB)QEIXlm|u;7eYa>gy$ z%tj25jWaH{rs=*5=l3kx1|5CxK}Ys@Sjs-NG)T|ifRyZ^uyihJ+IK9!^Za=|OD?;t z`|e>AyX;DHJyf9;7J#nsWU(PWOFA#Rc1ILDRF>Dwl3 zdFKpvKc90F|HmtVeK*hTS+aC#_x^v}!43Lrbv*AZ=yUyVg}P?%Z9#SRY!dCIASu?v zS|g0BXT5F@Msd+UZN8rV>{)JEwEX%x^Ot<=W8Jsdz|zT@1fOjN)nahk*SWI>dD_K~ zii#CHx%|#+yL*;gbW!&gVr$c>SNHe4SuMEV{#F=C^v(o`cLyq_R*%O+s6O+0n8d3F zhlXxjdFG{J+^jb0XK6EgX7J2sel0OJ@NbL!>S)s+Wy!H8iO<67j`tuhLnG}rXGY&v z4@QIA&m?Bn6H@4Q-#MCh3f#2b3U4-QE4*yPD_3}F*UJ|z|JZr+mt1ktxpcYX;BABM z|8rPqF3@6gG5;-^{})}oPxpT0!hf>3aY1v|4RRki~rZ%mj>0o8+TrM>!&|e`rMk&fAos~s*ew=KfnBn-`{=dr&q7x zhn4)ddtmU^-GhDWZ@pvps@1oC>QkjVR_-3?Tg&$~{C~~5Tkja!y|QohTHUdhn^*O% zS$pdp>jv&vzk6ui`dgRZv3~vf<-dRFt^2kwT-hm7FM2KN;=m&2kz8gGfBuo{QZ z*SBTs85Ez~e)!pca^r?8{~~zgg&h}W6tB26NX||9&;V2q@!xuqQZd-)w}2L?5uyRKZofR-$|7!F)?@x6<8 z`5H>~8o$1$IXv9AYVB~+h^wJLJiKAuPyf}w`F}V6^@eRf{I}mY+NW_eGT4PRv<`}1 z{Wmaphdv8Z1AEX7LRdRESLtr|Ba9ea1wpIzeF#R(z9j5t{nEGc*5%97=2zXShZy1@ zJz4{BZFU2FYcyEhwuRH^iblH-RNQ^Gq zw|rwIX$19>U)dhZ&v8v0v4Aga-`cnRn(aZO9MttS*}iqd2fp$1;$Lp`He7qz;=8tW zU%va&YUG4!_2<1Sc5m$a)-r{KZ`tUF2kb`TmLP>;7mnaDO*{vTtx;^HfkQhyLbIZdh?_*$uls^W6+`yRQ<9 z-2*FEw;ox;@A_>eB7Vof06b=9_aPSUev=LN(ar9m^n#eQdzB`cyQ=QQHxV?r66hSi z_Ai(R1Q(~%{>~3G1ALOF`$nU#I5zZ`CTKX^knN)kEv=ShH$3MA(#AwcF{cb-Rb0>OrYW8?6&_)@TNZ z>Q%cDJ$+`(`jAa>T3NZE!a7m9!dg)}X{h&#@dhKr4w~$=5UQ@}nViXM7JZs;* zc9pegqPzdvxrpwEE?TO0(8YJn*%m~FxLL0Tp9qVM7&tcG*!PJon>RL-M%|C}bwlC9 zfAYg6H~;ddn@;}z`M1xx+BEvc8#B30m7z^Ah++Q1ixP8P%FpH`lgw1K-a$a7@qmN_ zNo-!ZMnVmbOl2of%NlP{n&;s1NT8$6#S9+Fdind6bS5qrZ?+xtcO~5=^ zy>i_hYu7NhGxoWOBC*w@tJg5;X+WyOWX*NT(>yykn5vUCcdS~s>Wv#%8_8b(S_!kA;h@!xmBOn8@TJd3z)nYT_kp0?(g!$S`emx zZ|d81{V<;={OYcoHhj8t*`1%e_9GkCFQ~uhz5T@QOQ*_xyKc&+FA&=Ny~7%I%LUUh z0KlMy16p2prMG4GU3%-y-4}Fy$PIGo#UJ~GAC>S3`&;A0yJ7lBoNV6OxAg`V22rqi z>rZdk@y7r7$-D3U>E@GbUw(2GMDWtzywwr0)(vi8y}DSf!D*9!(S={_>Yda3^$TCW z@TUI)j`>9&oiDF=_xt+87cQMIZ*%v#{LBmb=F5%P{Wo(U_AH$*KVJ8_Jb3fH`Eqh~ zpVPfHZ`pjge!Ab!=`;5u^X1m)elL&491%nK#<^S)=Up;iUW0}2;V@X-`)t>|-h*Ae zKkxmk-e2?{?0w}oQYdnwas+Y&as+Y&as+Y&as+Y&as+Y&as+Y&as+-m5m-ET&eHBy z(#oRVKkZt)Fw3d=;Ji7PrPn%=uNE!po^w&Ri|^OA{=$Vy-1^-)bC!4OLpw`r(ZciQ zEV18`Mf13E0gdy|lHPyc`+xTSW$(Z4J<R!;b z_TlT+K02{EsE-FzzKg^n0Wk7*HtV|xI1QF1UJ_RbJ`Jm*9&zUNpcEFONq&soZ$4pv z4UgbdZ^ECn|7V`ss#o{JYT`Bgn&*$|W5XjvFiVT2d}i9`PDMh1-a7x6a623zA0S5hiQ5SNuJE z4~uSK{oXZ<$fJj|j(3GO5qQPAKa!FekoVk7H11kGq?M|MNPMnHtrv-|FNJkS-bg*J zSbs^gUe`GE&^R&S!DO<+EBo~d!QfN+(FWpIA+Q(*)rMiA-wBc|krz&mo*}>^V~LH^ zYs7RP^lgr#W~C7FXt5bJnhaB;-wF0*Z(}8>6Hwpp?Eu{p3@VZepr&H)vrU38$zg{0MyIZd-((0v4Nq14sFC!0TdGM&POdH$X{1@7?2Dt4S7?TW z1Xf2^SX066WEz6;L`;r;)hh&k#j&-(P{$_X`WUQ_BD3eDL}gmZe*ZYAoHE(0$p#>pfjs)+1> z&PmUAOsOhGzaT!sz$9oi=!A*Nw6Ph;kTb5hBwpC95&^n68pRXpSVJQ@wn6Ht7g@sp zNO-$RZ6;rl-=q!zkB#sMI46uZ2!M)DCK)yl4IT!b)PiEjd}35p@2YxOLe&K0L6s3F z643^RqdfU1I@wHmDhR#K7f>OZRvxQ2%PXfzfx>cR983RzU(7TN{8 zsz^@5*Ec#uN0L$-mSSd{M*#&dikif;CYtva*;?iEXdKl7`ed3Qs)WaIkj0FMpIJtq3&^p4NrGtHH+2~KCEuGw z_L#4x|C(`?+r|X?f(kP~%b9!-m3bfOWt`9Zfk;9HGmE6>u3kC&&o-U(#XWQJwR zIumT^GuAx(9f_KPz+@!k4VtMR=0vI>cOpF8vF2q^!kDYYlqektlY5frJ?Jd{n^bMw!N|IpKt!mWnPc2 zU);k#gM$NWy_-L=;RAR6&;RtXuYG63wX6QYgBShm@}={2$3;Co^XCr^tfL6Wh86$% zq1!*b@X`%i&i_}p|GQrt|M0xDi+S_b4X$0acEhs4iKqXkfA;eY*Zl7Dw;uSt=RY)8 z*FV_PGk5Mfsv2x4EWPDW*Ps2vpKf~h;K;&1OP0<_+n+OsiUe!c3~tyNeCUnw&G&Cu z{#T#f{J;EP|6=KR=?&+dH#jh~YH-blPZz&e`ICJk8`k~x^Y{GtGlxFh-9sP%V^}k= ze)a01wUh_=!~g!yZ_WAX=3l+~*rz{tvE~2w{&83De_-$bFM9v?-gkTdtoKiQ{|E8` z{`fb5#W@K%0yzRX0yzRX0yzRX0yzRX0yzRX0yzRX0yzRL1m?}@?q0M=e-|#)-vtZw zx2H#c=g-&QdGqvl?p*zyGe>{VJ8#aMg$r~0zXf9cAx9ubAV(laAV(laAV(laAV(la zAV(laAV=Ug90A$$zn=YX@&D(2rt8A5Exz>pKVEdr!nr-q&Hwn^U(9)eAM<~51pXrt z*uQ?!`CT8psQ02f!=9@z*-C2E_EBZUTov)LI=Y3V9+H+wv5LqoN^>wvL9J0%W+xdm zN{S_$h}4$Ra^J>HpUARBcclr|)ijm*vm|^fUviApC_SUL$jutAjz%GA&zt-@3B{za zDu;>eACiBRkf^(E3IcMQ{c$DwS|VmKo|@zal58x!)N5BF?f15kour&hGKfgNQZ{T7 z)@o{|6a+P;V3H*1*OXEhx}?&;Cwa6=u1+!NzvARy{cJCQYV7@-E(#7CNc}93(KAX8 zPf+dW(ZTiWR`w07=TM;in--qmb@4^LAG`C`o^6-hKo+WBFI`1KS5V)koK(Jz*teBK zDUKO2qy>_rXUU`21S1^M98Lw*c3Kg1TH@!HWfkyma?&pYuxDz@>&<{jniaC6y`)*~ z_rTjLa&KvJ1$lMkn{)rzs(;bok>{IMwYATk*uo}<&ZPC;Y(WOwf~A=e!TW=5KM>P@5X;N5ZA8j8yM_c zxpx083lPAIdzap|v}emD*EC1tot3a&jmNi@`Ro@8!Q>Y5^AJMi(UZTP)MAp9p=MJM zjVft;7YF(VQAbu*1|Q^-^K7}sWCn^YPAnLGEzNx;a~hc-_q|SHBk9v2x#DFLBT_CS zGT@bK4thq12@jcm2o$;F^&kp-PQ2%#C?YM5x&dYKRQUls(qgt`gCcJxVkGJ+*;t9) zN^f&{%v;FPtS)QNe`pEkF3s1{dwmjY;}U$RDv?fXul8SYV$sJXpF*ZTaWI_?+jZ;v z28Mulf7o+=*OH5RFS+aEV7s+h^ph)tu`$Gx%s4+O#LT2~&v1=<_OzZQp`?2%@A@n= z*wWJlDf!EiFVY^#*+%xs(9KQ(gQc$ef;U2jB4D)LPCZnbEPJ(IYLLt z=S%vpnEBa*p8;z_s=s8gofYe$zQIBM-GB4^6ziou!IY=i4J7JL@IC>}i3s>4_2JsMaNbr zy_WWM)uY=G8#L`&A{owr=5#VzJRWoJ9;TElx^Na<>u`4ZHdXFvYP?B%B_IX3ESxX7 z;ui-Gej5PY`1=z>M}-q%6hFmalpL#FB-1tv6~M@9l> zq_{%a05q*?oM_mZzpORrKxd|_EQ8GltC+(4Y}MpOHSh))rGA4?6$7%zsVQR3Sx3ww z6GkloXmB*{Bg@)#Cv68Oco_Xe9ThT%XDw|+31gu?f@xf|k;bEzWL zx`=8bZJCwQ;;B+w60`MI0c_mFb&IC9^n<^>FV){nc7pwkZ!}LAArupcI5zK%}Z|O`u)jyXon@ee{k1LJy%?^rH`ply?XlP|L$v7 z@p@`jsf~elC`miGYY2i0X6VPP9tvPf)+HK}>1?T!3Pagvz1e!(OK1z?LMd({d)}7o zH&VV}E9brOwy`(Aj-TV*IbzF=&exm4r^chOVn^7jdXQdQdf~SO)U60QreLG2%ywJD z)$N^D4JI@K%1|$!`pA1@&qFko)B{;RDj2^ z5dC2*VHn2Z%NEfiT!(oM0EC?4GC|bGOAcY+;gM!_%)NwFr6OHWs5lNKd?=YijgMlg zxY9YR6`L9sPgp&2k6}8(`sY_7;)F)q z|G)5=F6#Y#>%u>$2Egjx-?{La-pLF9+uj>pQ~BQis`@ zkN5tI-hbBnM(+{o06x^apC9voas+Y&as+Y&as+Y&as+Y&as+Y&as+Y&as+Y&er*IU z;M6_p7FyN9^+Ojdv~Q|WxOQOhf(7<%!Ggi{1M7ws_vjn-1qTP#58b$B@qGJAvBC92 z6dSx?p53d`f@@Z-KYy;ieUL(e14BcL=h&TAHjui2i_X*64^SjZ<`3ow*xRH_W$28tMcx0 z1abs&1abs&1abs&1abs&1abs&1abs&1b%GTx`xazhC<94R)XB5D;1&QP%@ zE2F4Vg({I}<%gOS!c@7WQk~*HD%lvQ)|P5xsWVF2P@0O`f!37jW$ocRWpZp_{Zxgb z+!Z~Xb-XLQiB=^xk*T^g%|wN3YIRC|sqW?k9Z^h@QK%qXDWpVZ1M;i@mdHz*^}5EP zhbUS_xlT$JQT?V8SHmg&Xak`hBQGxK3I)?y{j3qWsm7by!XW!;HYEtlr zM~lr!g>tNn-A+m|l_?lVF|eZF@9lu>Qc&Wv)nw$+&o-$H)lgZ`V$>}05OwtGaWO~| zZ>(y?tP*civ)+I{S3eODR3=GK_$4dZCYIT_VHnk_06U^?Rh3GgR*o^KQe2BVWEy@} zGRYMs6zO`{)wAQNiXSzo!?dNEsQi#FQSFJbO!lc(RG~@HA+T6sO;Lx5%2!k>qQGNN zg&97T60NQjLmiulsb!`zk#=vxrw*Wm!D^yb=$#RpB&iNpP@#a3*rnQJ!di8YMyb-J zx=(Qx22D@}$_>D$;$d2bsSHhmD=S6U=qS(T7_I@t)zMgOTD81>?8IBZqAgC%iRNV<|_()Yv*o3TC znK7=4l}TYErj{glWHS-Y=}Eh_MB8<0iUq|unWSh_1&-XL`lRD3J}a840mZHgF@->3 zU_y;FI$@$RZPa+gkTb4WWx0exbJRe!i=!&&M8|4|VqXnvMx`ZON5b1pYBTwY{3i7g zd2ED77^SMn1p!d;Nl&|KY6j1&f@pwxRXwEmnhH@?!GdB^WdsCyb%jAyG*rsN3WPd% zsccnNF|e8|ZJSi2yZXSSF2$u zX2wyBEAc1-I3DtU<~UE_auc^V0t)%LyBog#Uu~kC>Ikj0FMpjHwmLuo=f_#87F*BRp7?Y zHm8qh0B0RPSVw5|x?kamS@iLCXi^X{oU-BgqfJO^LOfz9Mi@v=A*Lh>78)@%NOioh zUPMkrDw3RPL~BYzp_Z^yfyHq8B~)Arh%Y^97)59@L!%y`OM#Elz~Jk2AsRVf?^i&Q(7A`Q?2VZ6eC84pJt4i%rdDM6_T1Ab%TMBGwRy*!?4 z@*po2fm!Ayr;5f#hd9E>(WSyi;Fkd%O*-W>LW!P}69*KVn*=cXS(#8VG!aa%8%VC!BXH7Sy}3tkf(TB^3Wu zN7ILxb5&5}YFp=mG)*u>Xaj$kzao?Ijs|^ZT(!v{O&?R95UbY2MiLSsZGFHY<}RRSlDV+5hLw`&d`c#r(n>SHP+2_cLAU#>ay9RAq-N>?^Wj?P+t^3POihGafjWx#dnuWS6b0}#YR!n%FAq{U z7do5uCe~7wn$u-75V()>>RWk>H?ZwwpV%U(ZB5$XCY;4Rp~o<5PqQae8<7=9W;O7J zky*I{NX`b17wWa!sE36nOPticrBw7J1$^}qWqp(y^_iJ&Wrscb<~@!v#Bee*6p|af z?9vt93WhM!G>bR$btJWrr}Riz<*Wy@R#$KUfcXZTjid_PtPrR~jR}_;x-DM<{QrAj zDV(>UYt6&MYad*@jRmFmhu$^@#(EZ8m;(oP!N)Qyv`LWhsp9RcH^&t?Dd&wU0<%aF zz!}rs2>=xi7ZHDX7gL1Wm5_&Go!nri*DhZ*p0PYt_}uCWW9z^(*0I}JiAMAYGo9I3 z@T<5x=vrOu!qRVs-VItDnM=kFEr1r_Fbp7&dgHJ`=W3YoXOyKLl@NbK0kAQ#U5hP< zk=;5jC|BW`?kPU4wTZR)%e{}VqTsv_4at=<=Tl~@gM!K&10atT>=+i4-yLIN)t_K# zluR%(kE0p-k znWINESaTY%Op}Q%_ra_~6*6BBok|wNgi{h+jddHXPP5<`gdjqCS=7ZQ+BQooVW}_m z`?P#M_?mQ9O?uYK?AdBavxuhoz8d2c4=NZLSX{GDt3YzBtoT-V&+^i{3NZ^YKQT9{ z0FQ7p|G-eflG=??I%QQx-~4vKY*VR7S^SY^ggXNJB$26MkI8g^_2ZtW~7juuuI&HXJ!xX$`7oI-#++%6icfWG{h5JuFc;E4Ff0s+|{^;rB4;(u22+$oq zxp$wCx%>MNbNowtPab+$&p!FhnKyp;?(1LRM-bzNlRtQ9=7syXbo@(Sn|blBnR{M$ zl+3*J>ddQea0BE4I}|#C#keP)Kl%Fi-hK0a=zRA_duLvM2EgC_(W56`-mCk6{Q8L( zzQ`}??(m~0pV|BFkH2%`)rV(Zd-=r6FC2g3UJd!aN4fL(6VHO%$)~Z!LJ@lbyJ zi(fwR+IQ8?Q~ORF_}=lmUp?`iZ={lN&%GyJ*vp-ubo{{cDV<+=cIF8vxyQA6;*oD5 z05e~{lYd*No;do}%unuo_b1;tao`|hpLyV0GtYdPE>1l4^%GzGg2w*BgAC;OlixV` z)czAc`rfHK-#q#J<0pUe;>oWdau3Wr@MBSX;O=){|FU|&_a4`E%E5gPoOsq+JMbzZ zbn?zOPu=t2%$rXhzxN?T^!V2vn0fL3<1aiSQGDXrQ+p4deCm(}`^L+szWyxjyRK&* zeCpIwM`s@1Ct^%8>G9N|XJ)?tq!4}xDZP_^#kjo(XZC*igDK5r}ls8_#59le&jnE!VkZ3>hUL!KmL~Z!bCg#1QSQI z=7%qxy!V?z2B?4V?U_68o_Xyp9(nh*FQ3|XP_+H%?i2UE$qh3H4kNwCk36MGcjSw7 zL0|N%g|4)+9ISR6lD)9x8jlhjFq~Ln`XknHCQjRpH06v&yVO~o>Y}MvI}pX~_?)o> zaGNVhO=qG-C?1Y0vPDt*CEI#~L&Nlc{g zBRc|#mkp<8{g_I^mEq-tM&^uy-)41&zg4FM4xikIT)(D~%QNu-@6)SIS=5#Q^uVUNpS5 zZJCcBD_fLy>=*GO;?-%Vt?`l{gMqe;=iH;R*sQO@ox}VR?WnL^Y@eQ?eJU;l+BD?7 zsRKP=t)0@xvwC+L0W?tI?X4wZIS@~H0RvStVg(bhjHxqbJ9wqvyO!-IEe4{@6eOY%MeVQ+?+C^@@=h)F7+UIZCjW62Y1NO@gj~#uBTOU4l z^bn06J9^lDJ)GXBUtZzzYu5kQUANzF-(_U{h$fC5eZg)yV4tB!{XcJCAQ|!><8RiF zh}HFH?TY(LBk8YZyYW{Bf4r)gL&W7ZO&R`WQUZKN& z+IdxUs5OS0A_mS5E{zKK9MfSkBLv`1Zc7FnbD)*+ahZ1bHI)Y%V64`ik@(BK_Zh|Q zHZ2wSLlGb=acr(K98%<#ABup3V>3ss> zUjF;8-GEfKntXcpScN)x+xSxKQyF$WK#c>KU(dqxueND0Ap~WHbjV4ZQFGv!q=IHd zqHuw0;P@S5$6mnYC&wt*1NCR=1SFAJC&sgy<53eWHTZqLa3j6LF7e8^a+cPBEn}$e zKDQ9Tl{QBmq3{EwXu-HZH%Ffmv>o?B1(#_z6(YvOPjHAQPE!N0#DsO$5a@x2nR4|0 zL&N^u@_G8}osQfj0giM|X3z=QOgcmgxX_I#5KHKbk0SJaRc^aG5f9VfiA znQG(Ij9|JzI|>0>4!G~GT@Yac@+%!cQl!`D$Z^~;(S3G8bQTO~S;Nv_ zF+RhKF z0<-6HhLG1s6WqWc#BjaXSBuC0#U zFxyJjq3shy#wu7l^{B~vXq&?A&0;9_+k46E9tCVFt?3+UVL;d(4i*t$>IUjS>IX201nh(8O~AdbmA)3b|;~? z=GSJ!jsu}f!o1~H6sqQ}Yx}0t_V8^&R~CBS;kR{>7}dz^zdPmJD*T>7oE;<3T`L2 zOpN-ue9c9o#2I|%Ep9oRN8Q=gQ8?1tLv|c6Zz(w}m3HudSg(Kv8w3j6kmufIB#5tY zjxb$Z>dZ#B#o+wW@~LW9J0X}?OyfEEZGXA`DGxiBv*oG~ z08KP=y3((mVIp=xU2|*J|`sAZVNtxSlD?coTAK5LI+uK z+_{r+g)2<~nUT*~IT@Vw9g{rZdT-#s??0;&*h*}A)YSGj5vKrLt4}|h^q~=$q|@JS z&qP9MLT?Y6&*y?vpQ1K!o=Y9FOV6jEc{@AtFs_7yn>_)i`4r2`XoyI#xL)?ck&)?V zxy5uL!^gv~IA%$Jf}M#E=HdGEbL0(FarJwITNP<9jd?|^EjG3xtc&WCodR~pxvyTM z`|0P{r%_n0LSDV?Y!dMcTP4cBpxLIi?pH&i-l6-fkg)X=z)V_fdc}7hhVO=qMb0Qz zngE^J^vmd81uFZfG6+U=%D#p{%!B^t2Co+Y!SW1-d1tNcL5%FddJ_T&Qs!H<3>DBC zMT40uk{LuxYuar^-d2hU7CfcNDq5S4GQA00@IreSnSvz592GO7rqW$4ixqFFR)V?( zA%}+BOai!3^(&OXMhdhQm*YZ_rNY@lvJDr7dr$v3<&8*9fC8u z^<9pc-b`2?oYfQW9)2Kh&v8UVC@ILcegqi=xfrqO=Mb704ts^^Clxy7XtvEY-g-R3 zt%<~39WZJLMTZB~>F@H8Mbe{`oqmQrP?<3{tP45k@5H`n`=pToPhIVGu#!y^E2eE#YWd+;1XG znRpe+oj`IVWV~bHK&oeKgHeFF?@p-)+~wrKO<5QVCw}(5Y^5gs?)~h?1n*40=7l9@ zkW=q!#fgQRo^+zYNz*3=tDFB4Y?ed}okt^HBB&4Pe3&mNO&-|OWYDf-Q}^37OKcZa zV=z2X4pKY-m8y7$Goo%eRhjHFI;jGiW~^Q6JTGnEZ1kD1IQbQtVUn)B~~5m zk%~GLK1!}`oOBTIqtw354pyZMWPJKreuOeMw4HK6LHTrAxA_0=x$C<4H~%L`AV(la z;BSP$W5e?nbX|U+@A8A^Z=HU1BB&PX(}$Y`?-1vkC|7)HmlmOzYP?{%$S)|)-&7Q96ol)bcv4CX3FgV0BX~?fxL8BIp4~nP7 zbn9j9*E(pVYLSBFj$wC&GHq< zB`eCAtB|E@-6(Mx1F2apDoCCYs_!gQnxX4Hm+MX*rMjpGS?E8nSZ+qr8U%F_NabQ* zo#~(DJf{KR!~)gBW~Ek!-`JIim}1CELBVe->od$$y1O=_-(v`9aw3CC8kmxe#X7%Gn;|7o|+go5OfEdoF zb{&(*{6d&acuyR+W$1$%xvZlWU|)`%4HzjJO2gnG@r#gf90_y@?bJy~udw>CoNs0U z>%C;e#A5^=;?prvz=-w9KuCQaTI{t$^n=^gXh4*58UqO5pteYNjY-0-wDOVDz}yuG zI?-AsCAFL1#5@jgK`KP@3C>{Z>~7_&i@;Gz9DpF47qc?&m@#&QNyn`1_pVP(X#%U4 zAyY(_sl0$ZXDQoKzX=&KaM+2899(c|JdNdt(1-jORJ^NUgeYbzPeFEB)~{@4Si@E6`l|OyS`Ub>E1>^bB-61P-9CMo z7WIiJdCcv@#EL3)SjxBGyU|)8lg4k-Quv;#*Y!GL^g~e{Nlxhw;N-P_xn4Hm7A;tM zWrRmv8Q^BuG|6?^#;rFs>r+8g>LnX_!Jkyrs`ayrmlJ9Mslk4_ zHc)qx50tX;$=g^jFu25Tj*uZku@o+C4TFM|AE`gh##GAAF=L~5_4Hw28BLsvQ*32~ z`VVQP|8#I0N&SH+$35|-GJQCj5^Rpm@;ji6;H~@o19OCSuz2{x>qx-t@<-)-<8#Hpn?PF73~r=1 zNNs}#BeFp_F}o&?rV5G~1=eb#gbx|YO%V8HXQSR6L$RZ})D~EdA~zuxhs7S`$ZJ0{na(vIt^EaTJf?NLMOO1phTuoI4o* z0Ht?^xn{YXauxRML5?ck&SIIg^f9UWarzj!?!aNd2$Mkt~3+xez-){e*Op+Ox{3LS+fpFxlmdr!)C>ZOhH$392Ax*X zQ)8l4-LSCW6OQkIMMgt0?+71`#tE*emG;X+&^m?Vko{y6*+roP7ysh*e%Pie@6?fi z8Dfw)%r$8Av+zJtN!KeO;;H@rZr9v*|3=IH{H7d%9Dy8x|Ev&r^rHC-x-L7gbIqem zH&3yfZW-KU{Gc9_jS0qPP~F3NTdVYrk6jc46a+f z(o8z+3>*eB0khzMa$CqtJaqWabyfqrnQW3Vb`idV37h=8PK8ytnz_Y6d@}(jUcg|b4JJx2HQG# zDdJcg($LR#5`+-P!P*_#%}qq&m)ig#Mu1=NHL$2OxJFp)Mj=LiLlaZG?bNnl!$amY zxTWqfi!V3wDM{{9lF}ean zh)4)J2DPTD4a!(YGVwSmNsg73+ulO%*z|4I(`t*duh9%_=ARZhqFN1%8&_2zr-yZv zm41|1Xc{F7P{4VTW-7Lm)6#iej0in2DoI(R{cqnFBxCGpULTHAiKAYfJ~B3WU1{>2x3sU{eCMs{BjeMD zD&E`o%h@nK{U+5&tK8&`Pf?jn+<51O>f4XEu0Kb()1Kh%`>_C!H?4g6lSH@$u~E>9 zQ`3juImp)Qn-yBeUSpz3_m)XpyphXEgR7;?ax03k0u{@~C%q{YaKCttxX?YVo{e&^ zHu=sWkyney>i*mJ#}Lm~;F3*``-X97xKLS32h48h`1BFPNb(bUY~h=(<)JXuw_`{< z6Da0-oAUWaMNYgH6a}C;^*d(z)*MX1p6MgNI2LQbh^t@r`GtwbDBwGz zSiyv&R9%T$XXAn3Q4^4sjKBSO1JXsNeU9v76u^!{V@+=yKQ&`-g!Zv z7_j%wTOpjPn39((h@xuaev!V%Pa8GwJO75r> z`lYH7GB(arFp&X_m6$rZ$H@tbeELYzFeHeS3ahGgAWO%Z0%&nxD4>?drVrVT#d5QO z1jQwa+r9Iau8PzuU4$OPpfF!5V96NNIe?q}6fQ(AwEJ42wxop2hCEe@@f2$CO!jyT zLWJu(FTnRmpV2q(yf7X!5b?JJHDK+;QN{HtkUKs}zyLUc3c|g|8z%_B2(7(yaQaB$ z?Z?ZPdt?4PZ$yj~*P4S_ol7`r;ym5qJ>-kBvI+Ff^L8C?y z5@HNI#<@q61cUhy6CI)3HhrY7(T}}z5O%1=QiL3#Tsk{Gq;95~w|6{%*%WTYnX z>p~JSNPy0gEmhL*yr3Z$V%`XfCV(}8iLs__Qwx<;5~k|eOeoPh3GSc)uc0g+XC}o? z)u{7yq$jBSV(F}y8V2>Qa zfj8y}1a9!a6QL_eVi8l~yqMdxh5uFl8g78SOgU5FxQ)knuXB&26Xi+~7PyTBG5<<& zEqdqPri7b!NKlI;gsAKyayLd(Q%FZyvx~Bh(}(Kb7{~&cjVA7wHmf!F;Dr&kHN>G* z4f-wqf9~oo{>}f%5y%n95qMt&9^2Bhpz9+CnjiaGay1Llazoaav!t=9DJ{>U*=ihV z1=%Wk5fy zJ<2{SJ9%nOX$LIevS@!(Nk{<8Df#?(+Cm7-TVVJ=lq=q*omVaVI2fo7>2dl)|)5PJRBH6?l$PAF?RI>$H{c4!F6-pQ4 z?P2R`9FPj(9;A9oEQd;T#U3f+Jt#a3EWVsJ1l$xNTXPAopHsqYAaPm#P0wYwwo&buCWp(!R{rN69pYd>&>vzK=c~8LJWHVm2!pw)mU{6 zgMgVyN1%=?mlufKM`Qf1jXbrefDwEgE^d^4FZrPavbp<4H`}LITh}y@`YNO zSS7+kH6Ixo4`Q=nc2EctJx5T`P3g_BSI$9R*BT#6Isj5ETT|$?Y>mKT$G0k43RuNW zc%#@RDeDeR9XQW1jfjo{qt_=-qS*$M&AV4vX`iHkYQb+v2AFn&WQE4a?xJ0Jq1IJ^{D-@i;t%QMP<8sQI)>9!i zs^tKzYkQX88SJ?4k7WZuk&8Q1u>=E`23nl2^>|eIR~jrZN=ZkeRzg(aVKlCyx%h>4 z3jif~<^pkx@mNYd4ZGkF`AU&1<|B8Z%*7mOb7Izla17o`P?!mfyWLHu(?u+j0<@;v zwfi71EcdG?(+fZ^m@xx!wMrrq4%gA}3nYN4X)%Ro2v8s)Mu9$>Um&2I5Zil(aGprD zKID{vUW3(N#x@b|i9CpAB?cDubjl(NS)k8AlTFetjUc_HYMe|*%wln@f{Z~7L17BX zU_FGeSS**dkEHW|8UEEVi)Vor+8TqZ1Y#7R!C=a9Fvjs628W3U2oYzPPD#m}NUZ4< z4RJi@q*Q2OforE;7|<>#jWatn#h|D;%1?rrNIH~5g^dn+L!FHo=&UAT9BEGuX|YZ- zJDb7EUZGWqEI%qs#M0Ll1#3M^rJ-l%TOV?f6k==ypMapacE;%G-g+E}V1-!y|)9hlYfuB4LHjp9C zy9t|$$oQ6jhX}n|d*g5uQJeCd&kB}LZMB4CXL$~6cg$9_NC7(bX9q=K zuV|As+a^DI<#WA0Nt9EpA$CI1#k{lJZzpT;%C=09%vi-xWV1_yvML3bX{^rz(&%Y~ z!OF*ha|-7VD+;}}d0ksfLaVN~3_}$xsOfFXs)itl^uR>MAlp~=t|bplXuq0~rW@EU ziJ`Sd#WWe#7!?}O@++j?5H)S)pL2P%-5Ywdx1$pLl4>4gwl>~`>=dkXxjA+~9-f9# z(Qg*8b0sa?hONdTF=0&;tXRfMKP^F<2EWXzjganeXE_VbpTW|Zlj`J9aCL!Ol^F2p z1wkL{{F-e=;lXpBomojGY4u&)6tb+7Cb9Ea!7L9uokJbz5iO&b0bAS!whbe5V5OcB zi8xLj9Tdk+Y{z2~wtPRS{jL>0RxT?p#ZO=a%6|esIZ8_5tEneocA7&g)`0bDQ(*vY z^F6iaF)K6QkbEkjTJ$-ADN5ZN@HS2LPnXrI=^+C=Vv8Lwg$9zw?^;m@tT;QSU`yI+ z76@Q6oaQBv$O;6`DbbObqUsQgFZB|3oVh9A*%l|9jE?ERK@6Iqc+FJx!K!^QP$GLY z1*nNYmamGBSmh5OG6RhMzyNbo{w1B^r|F9CGWDsLGX&R&JcJ{H*s4pn>*II$hY3_@ zkb^^msq*nTk`eD4YDf+NeY;~AHnH>MK;q(=zWCjZ=vre7&n*;s8faZ#dD{)Zt=z_oWMzis%T;5vKe7mWe?lOphsrMK?Qq-zk4`# zj)PJ8B&|3Wmo8_cQ&t%M9IjH-JH0(>LIky6)F`G1t*W(Jg}8OKg*7kj%?{=pbsRlv zmnj~yEC1^Bs~j{(Z`OSQ(<cGmUV$3jmazSz#^sK`P8EibhbanhcqbW>wF)%oZ@R@tgK@@AeMLu+R4^=& zh7^yq(**w!Y=e@dSstTu1r8&*LL80=7w2IB7K#yrdQ^#1Iv!@sn8`ziND3rVXAiAe z;0bOP-qpTzA}EpF@AHgvv8WYOimLvBa7mWh(qawPi28>pawr%V)@7O06}XfBilUd0 z=^{+9d}fh>{MvDI-%sh&s`v6{8?R34D;p>9z#O1#Gc{4DzK#stF$p}394;C)yTJ^~JTOQkX z6N-D%+pN9ztK1o8$uOQ$f{ZbCZ28PekXI5LDOBIeR+Cy`#uSp$84Z4tk`?Y zhfc%e?fKK~Vmll{Yfp=?b*7_RX;)I~n57TPT&-y_nQ-Bv!|hlM+cVVOGiJ+nb_L2T zrb-6)4Pw2$7(r@;@+u@EfR(I9!YY3=yU+e;OsNJ% zKWnR$(`$Lv@hm~(__W=bRO~m>3#&L6%g#QI)~Z_do0X42i=}6w+D5#A+OpKGK4B}K zpwmR4xor8Z3UsdGQQIKbiD!fB1_o@iIo);eLKfj#l3<({SoDDqUlN5x*ec#K{oP(I zIR=1S8)2MDvZdi7 zYi#;3qe`kgfkkh?GtbNv)vTBm=!1WufaI`zZk-kg0V&gj5BwBMYXPyCnmz2lDm=lq zkl5u{34adAz zDypevG;P|97xI!Bt}-HmRw#l=Y!pZA!D8Vnr=12zq=ZDn1xx7hY_7FjPW`DGWK&

AvEvPsKhiTFzQPf(flhnZGx)A{_(e&#WVtnAZDE?};^FPWasDDi_ zv^5i(uAq-t8|WhdoVER^orKN8n!(6vqt|}8SAfkfNC_2!d52BI-Tnkrwkig~N}zZ^!@ zDHth_ZA%#genK=CB7-YIG|P1$)WJ_hPE7_KK}5IFG^yUHDzW5yQZ!{igGrxF5_{EB5GU`cPD~yoY_cSVsH9&0@V>s;sT&z9HSIYn3PAcWPTVO zBRM1R9w2B$GYWLLRY$^$>6oMRgW}VW_)RDmupcu9sB2|!B|L!tO4Hfqj-^&5Aya{& zl4v3xupv#gBx;{>zbSA{zqU$Of*t-zk!lib`0|TFzYtsoC5jp{{<<>k+RlH+}@)uhy$5iH3qH%R9eCZbj#E3q}Em%Uu z1pr`-4sdz1kvmucU9{QIbQ5Q!7u`%p=(KtwT%SRr*X4xJ-iIbKiUDFzSN(!e=cYCZ z!pfwyC2TBFmGWft$2jq5#TA)>NVMM((UyrtEuhQkAHWM>NIL(H}Jxg4Ag)+s@8S)VfM`X%T80#;rZz(@MVC z@%5Pvtu?Df@XJWU`Izoz>Swlc(7_$6)0WLFE6&2z&Bo*fqUTupwaTt-M!#vRrV-k5 zpBF_tGF!V>IyoLC-0Q5A0vFORTTR5wI^lgsnU`dmCWu=Jp;R z){C|{D?(S7RAT`3ubPAy80NQVC6F^bGvW+z?apQ9lCwby6fG)X-E`z{XVyfzk#6R+ z3+ac~9fq|6nq%y!j#J~|qSfO!dyK9Wh}I zLVME_aZe#iJEYyanlaI3hJ@`jWA3?g3(^tEz?+>A0M&|bgbxfP%L;HImqk`$5uS}% z8|-2`nFT?lc^s+=$7{6#)V%TzESb~k4Ei$rImCkNZq=|NP zoohox$myoNI+^Q^C&IcTr$kg|SpZqRKLRW)As++?RhBcsI7Co3@sG%mo*{TrvmV=* zp#wB#J1ax2XN@3?8)vSIZnol>yoeBC^32FBFpdKkY)@IDhzS~z|DmOH8QrCLe|rkg z1l|Vh5Z%OyxX#u_R`G~MSSmVrqE*yi>|#AltE}QfmTe-kEp?{1vWS(8JEnet_QU77waB82OXYSm8j@+3j# z9Q=W)Lj-^4EM*&!tC(=yj9y?>iNMPCCY^^eVKf6W{7N>3+zrdhDtB%0OBFk!a7$v~ z;_G3TipJVQ@AsznzK>$II@zY06Bgi@F1#o@^m1l^D*IQoqryahyjh}622O`scFJ1* z16JfAV^*b9Zga)WM`Fa05y+WDh=z7hF)dA9bNT`5ngI#b^xOctBfMHQ|1%R`Fl6P` z+1aEQV~OUj++Ez=0fZFx^s{hB?ir~j#ABA)W)JV?EjMchPd|%V!yBYJ>pI4OV+70) zN%^5c$CMdYfAF7;PppKjz`So-8`p@Spujn*AHzm>X5%y}jY0ORw94kD!wqkRI*`ik zD*rQ_S;B$tQ5;uR+FWJ*UC+ifY$nATb3>}pmA@fB$2ekZ#5n!VM^$2%f5+9RNL9PM z(2j*ppQ|DQdXXlJ5wh%f2y{AK!kF(AJVFLPQ>h$fK0s8zx0Rk}D|hH>OCpnj^cLBV z{ENlq>c-3VZE1X5ScX1}1OS%eVk^~b=(MVRs`H&ZWh$SCG-&Dj>F1onH?^u7^A_eW zq0t>q>661IiNg-Gv2$31Ntsc#%-;P%wAq@je8l`@vg?ji{WE%+xLs;U2N!I`uVsCt zvv{1dIvLsmLa)y&W`8cM+mVW`}dCugi2hZNf;mV*QKVZYszyZf77O(bOie^Dd-* z3_f7h3qvXk*m$8z!tfI`(ZNwu%Coc#E1p>)fzmr8eRtqT;aT|_kyl89cPTE?a^NOm z)may~wd@Ttf_}J`$6Ln&xN`fb5#>MH3}*{pf|=?8UL96NQ0%t@Cjd?bLak*SG1c^F thV&2$Q+qfKL|_s(E?2a1Sl%X5)z)$nuyYJp}zvtX@w{y-NIo2OZ8QP?oi0LWKmv>EGetuq1)AI82O7O26 z|Lp&Y@nfTXgTMJ%zpwPOB(Le!pL95Xo>x}*@;t|{oS$;MyX^C&oh1*H?BD$9;{Pam zK~X7Q^>htuL&JRo?Zc5AL(pA)WveMKeySE z{W+dRj4OO!(y-{>TvSnVL=kkM{l*pc^qg5?%S7c6_k!*m1!$tf!2#=H%J& zNFp`8GF3@KLvdl{EtUCs(%O=DL@^dTtEW?@+)L9-p7jWZB^Ngp6;<}!n18V@(=^8u z#+;FuU)ws@yx6>^m8?l(w`_<3WMj?iOf$V$URYE)06JV(p~L<>61IP3G)U2}L5lrR zBzz@mmQyrbD&166dE<@w&+ihkv)^P2T=SrCg*dKx{Tqp<{dHEW&u)*ubwiGt@u^5E zjW)hU+@gBw3U9KT?=oQx*)3Q-zG5T(KUV@5Pi-u!tgX#o{QWF$pu9}Mo7O=e?|&oI z*?P|!@s+KKw1mkpN==NDC0Rpr0HlsuJsRo4wGa!}8HBaA3|YXL&v0TnZw zFwaLo_1gE5r0MfCH=p&ceKldG z2hkY{X=l|m`fS3OGA^toX2lm&=#uUV*((JuTCY)CiCUv(*Vx;rSw%OLG#uDaSb4DO zO1fNe@T^DuExkqVz9bE8-+@7%pq|HhU;%2UMTZ|Ui~9{APAe>37hS{MF#PA+r`mHx3%`@rDviPK{XUj7=A zpFa6{VyvNIVdSJI)YUt5!i5wk`DLiXb*S6bd-%wR>-fnr$;K0E@9649E~g|H`HgSa z)OPGzaH6J4*k0Y%9#3J&FxyQ&U}VG*G>A}URU!NINmCpF4$U@SL2fWcU4C^5@}2mqDlL&t5ctiV7!Wg zI);yD6*RrO^g=;TurK=M`}8M&7OJ02)Hkjw&4a@10$bWpVr$6l@{Kh>*1Rs>d&yom zsTkWraZ|EgeM^TP8#fYD9r}4a5z!B!=+iw07TDtRhq{7$K1t!;AMAa)_UR{I`l3*M z*icmrNEO?fS)@ON0v7_5X;sN<%JTNqRqcW}@2WOBrzy`9)9J*-bf+Fq8Hw?9Vt(+9 ztFwJ@(3sQC7&`GCJQFlt<@%Z9ivaW$ic9;Qj=Y*0i;Cyp(w?4}VLA3+5YT@7$SMLJk3Lgd=UVEBzW#0h zH1hLx39w*p=3mqpWwJ5*TUj>#HWLaTpZ87})+lAurrH4d#Aa5$65YPhVvn(|2 z1+PCOO`ar>SnCzOZdmZ+iH~mse#v5?nV$pM7XHQaR(`@v@HLshYPnaCyi(niY{fwmw$m>Cwo@Q%j41< zmJYr3-J3l(e0N=TiGV^l01%-;eSD!ni;~kk2XuT*RV~$S^<1wxt|wBXdJ>`^(c6!^ zM%zc))5%mqkMcG+e(plFe!66-Yxb!>t@-xrMX9wP&z4QHmdHRZTnb!Zf04lyJQ4t-%hoIdfNrb&^Hopm7par~EU%Dxq z$f#j~9UDYeRGfdo7hn}xK|i0Ps=QkWHA7n66fX3Exc9V4V<9CVf={5VJbwIbqYyG* z%1Fr5Iu>BV!HX6a=_cnE*z`hDVh9w;Tep{O4j-a;sDy?EvLfWB+GBx|hKW5=9;7j# zS{rIhazY+_=?yRs64UHnXbF*;R%W))=0U@=rJhZ-8C`dHfl3eTq?9X$Hw(-MbV%(5k0{QhrHC@QZ7KT^Y%+AUJ^iRp*ExeEgmj) zn}-MBF$LnMj$?>ky(7eVr?WXy@lYSb6G+rH-ehb6H=AWZWWn2Qoyn z$y2bQEn10Nrp6db031@vNTB3ZMERjUHss42tkEHJ~(#kQd*2JjjQ6 zf$gn6XxCOG2B)EoPM1jkSSfnJ*I`7?K^s|rItN`HhdZYualLaeIJSN3SCZR)8SMP= zM;|-${Ch(6cTT%H2bD@_mJZS*qCw~|9^_DON3kOh%RcNItEw-yjTmM+DwiX}E{{jG z`Xgq-(2ooU&;IpmUvl&tHw8OBd1-6>wJ!qZcWX&<^9noiJ&4k%&&dlhMuz7gM<@OxbXZ85u zp`d>MscXgu9t(E8@Vm}`OZ0^5&*_Rb-`y?_d({v~X+w|Q|AFmzsovI)O&66B3RT## zBlBj;lncu7HrwUg{_|ILCoeu8Y`?fr{lAWFzd|`yZ_IL(%0(BLRnp>(g^s+6imD3X z=%q-1B&PGc>~84qNk`K zyvSPEjI{VpG_9MB$HP$wu45rDiwJqqw0!t3;9F>EvlSkONqkAdB^z(Z&kCUJN*R8y zG=Wo_Fix!%-qcnfIH5U^r@eShM6 zg8Cw+7ZeR1U<8enXkd_EX)6$JH08|&WqAz^l~oj~24fhjp;&-AtjCQ= z!d!XRG3**X+>y}lj6^$zm%3h4_nP4cZ(eG)74K{c!+l%Or1d~oVA2Qzq*Yt$W5J7- z4G~wZ)sk<~Dv=G~R<%V*duKX89@tPOTx(}-$%}T((p-Z>uF(^iw2EF((^TKx3v$;$ z7%+R^vLBaguIDDdck_LDj>Zzh@ma^+n?K?FYWW+>zUmk%d0+9D9dB}eaPxOdUsn8r z;?nZn#b?SA&OGN1M?rbI_}y41C@%h4@pDRlTDGM$Q1+pcmy}MGe8YK9*-7W=@^6$s zxcR>FzS0kt9C9|7Y%Bdr*&jK6_FJqO@|VJwj)C(MCUuEXv91F(ddFdG{RckMzdbtklC|2*aD95|&O z9MDKxReq-)ozfHY?NO{or}WNt0EXpal(Anctf@kR0TVlFSS&u4HpYz!BskWo5;Pnr ztaTy52|bPtrt?MuJ1D705{Q`5bZi{kH0`bqEA2k3v{6iK<0nIvYPmHcey1SvUrUpreBNNj|5k3(?$ykbH%9UmBLWOIQav&0& z)6+ACagy-IlaV;mp6pwZYrUs%&mPi=*_s|UqO;hx8ZzSXc*^R!ss4$^&RR~zpHl^R)SZAOON-PF|6~3=le#nLe+=O zmig@{0Lu{h!)DCr#~jVXt7fmfs@hXnwHIX{N$4}?TtAJv655bSeh>A#uyi0lw`l~T zD*vRONa}L~dJ_A^dYlQ)s05X@s38!z(l+At4UoC2hWuyW`K#Dh$i2AyXWfOnZdW1q zvGT9Bg>`LXA@`zC?60v6wbjx|SKcn#(p1P@pZs5Q!{?fP5O*ZEH)QO;Yc^(_jfLDB z$Y0(JSpKzUTcCV5cu`dg#dwv~e8+)8F1qLcI?L^4dkeX)3PpDH71dHp#a?N-u%xaK zLbfaa$}4`wP)!umD=xcju4WdM`Rgr}6;+{?R8{1!UD_(FFXT!NwBr>QaW*v-azzFu z|5|G?8=DHb?g2&hYb|*c)D?1ZBLB+k5*uzPLm-Dh4uKp3IRtVD!_N0R|J-@M^X<<2oNsWx)_Je< zCC+=Cmz=-noOh<2rt_TBaNh0=IZrr`Is2VG&JO1-&Q_<-+2m|+?snEXw>v9TAuK5O zUk-sB0yzY72;>m>?Gd=QGkD?!sc9nt2e3I4p6qcgY?_H=qt^Gt^IjLzrV@rh=df{P zFl}fCycnkEH9cX*bj_U9VtO>CVZ%yZCe6u|mV^Ufn6JjuP2$HmLLZ3sbLmnqV$5BQAgd_qU{($VNVeJQ7=g!A(TNYdb^ zjje5L^)_lo9DDT>ERS4|>!~z6RWvxOPQolV$y_Nq!u>f~>Y@VkOg#;`m@-HZTw7Fb z_-+}CCT$e?S)(`LoQ%Lvn9`s_ULx2-LLP9_=bv$XVn#AjVh4J?Zd7Ojq68N&cz&jm z$S8tDllr57irr@|s?RGqjvyWBrcBVG8RYVolGCJ}oQ8};!X%V|7BkO_I6~gFX>8r1 zn7EmWOyD6u88=|45CL4;oS>I-!Nvi?7`XrqEH0r<|=!AwsY zc#OaZhBj}eiP;2po3$k5O4lGX>O&)b&Qy)~d;~r~7ADDbJZYc_q8=HHR9hp1XDQ2Q zR3JEENTUNd@K2c1P&X78jm)6vRMYxuCyJM_AApLX-3R^}GmuJT3lY-@TokGWB9l(> zDcPmZqVb!FFjJ1x;1{IH7vTt?0(+8%HpLuZU7*3BBMCv(_%5kWA*(4Pnuhy7UyhrJ zgb`)f32h3xL6lDq9z1$KrH!9}+bK!9QuoZJfd=TabWai~QB_q)N)Ll=T4H`ii_OR3 z0|TGvnF#G}B1xbGyJXXdp|wbASeoDt<*!gZt|>Derd-CNra22OfTG4B9#B0{zDWos zNS%#<&M1_ckszf;Vv;2^Qa?%7Q^t5A9hnj8XQR5F6h1&Dq2d5!MidePQrH>^d8Ul1 zc*FohpanrZz>M2$fIbEq&~ji>LQ!;{dTAyy>q^d~Be4itGNG87BROZ)~_2I?cMreH*-QjsZ?XK5(K z#PRv_rU9dsDImcD2n{t8jbA{EC?^s__Oo!259BruDPt*#x%sHP0374s8mL24CJ>^l zlF)qo+(xQNJA?wr8}^636Yo*{6WIXh*`Y z_vB&5|A_Og&gVJDoHseE%KxqWE9LJme|34Pe5Bl0zSZ$##}^&%cf7_i=Q!nPbySu8 zqU5oglQ2LjpuPRNIj+XjMuPb?`mRA&^5Lhd>U2-wc7B-Xer&t}H6@Hv0W-%`Ho(zx>Ybz`-p+ z|9gEO`QvxFcY3V%o&)aIK&yZ0)F-0*zw|fX3;N9dw>)%PvF7Ic>Y^g|{!w3t)^aAW zbn6QyD*x%&zXkiA|A!Ah{x_f0ZnRR|*w7nj*V=m9mWIQ(zw%oj`Ao3;;m}79HF#^A zn4+qvsA=Dcz-iw|+tO{HeE*L>@P}2w-gj&&{o?~4&|Fp)uDt`zy;|Tz+tSEax6VKO z{htQAzVOh`|NK>-*xASws7B)rKDW>7T{>R*+NW=Oct`aCVZrIE4vzx~wi>R`vxTU+-0<&Spmv)=Ek5BR)ofu-X=fBQ`Ifl+wg|LyJ5 z=J}m_t@nHDJZ+w4_tNlZK7R0r@jnlC{_HKzs&{{6=MC2T8??3-uiLY9+qvjDOIGncx z_q_gVAA9l5FAEO*_#Zy;o^OxW*6}qMROj`ydbL(}&|C81@{iA64i3C0@$*k?_~=f} zDqgE@3AjC;V1eW2FaGgk3&Gy_cg}ufZtKok>wWEZQ0EH->pPD;a{8%X2D?A{)903X zzP)p&^?qlS8=toZ8#agD8os?Oc<6_Z{q_A{+EQC%5m2+uhu{%u%B>!Et0%a{*Y=99{b(TA7y01VH|_e)&g=OaGJO3OL~Qc61^0aZ zzAwx@^frWb>iy-ve&`QsDy+{du4(1x#;Y41-4XlpQrD9E^R6AQt+~#6eVx;bC;>s^ zD?h(&`{BP_>WIDIn$s^EuesKGeQkL&Ib?kG_^*EUzz>%Wz4NXgz4W|Zv((Yh4;=jYtEqH(`)~(*2&k9A7_aN>~Cucj#Vf3f99H4u=A%se01C5 z@9!*U0#v=+g9ILT@bu21kKFyziQs_?kJSD7fqk_OD+7l+;KTn~gQ3#b#6S3or-JU1 ziy!XW_q^IND?!hG#Mcw^zc!LG|gulw^)?$C;@6vaj4 zPD^tjc>B-4So*__HwN49_PyuLi|2N3w#wLC=n42e-ldWD*MxuiR}U`jEBnqn+yCrm zT9K7Q(I&)NX!Wg z{NQ(IBYE$u+r$)*!c7HUUyG-$Inc7y^{U7J=Ih7ay43u``(C;5hK2f#Oj27^v~dHn zXk+l3=B3_0{-3Y@>fbt++9J1pb>J75b`&5@F(kF1)$ex0{lDkArPqFM>CnA;-{0^3 z-p&oo0qoe&1TZ{-V8>+BdB;7y4?XiQL$|#Cp7f6VqP$|txy#cU@CI)#+xZ`^4=gP` z$G`ZC`}TfW{Qt|poag){_Wpn9{GRhk=hw0G{{{F1e8RbeegF44-|Kvb^G~qr{~G7Z zoiB1;#-9HLXTlkEPGZOZjC0gE=mRA&^5Lhd>U290EB6atQoR5!h6apYQeZ>hbXE zcJq4Ujl4EB@#=E%+SthJfdjnm-_L791F!q`@w#^}uQ%Ml>z+Nl?%vJou3fy=*YjFe z$E&9CT3gHO&Yis0)bP4v2d~xDyl&slYgHAm+qUsqS;_15*YjEdoBsU#>#pPV+G}~; zx|P>0TX?$nfd?Px&N;->wnfcKYR*)VyzmRA&|%UZKKTp56Jv~zs&y|Wd6TT=Kp(T{(pna|M$rJf49v4cgg&}UgrOG zGXK|P{$DHe|D7`buaWux4w?UZW&U3+^Z)HK|F4qy|2CQbSIYeVdYS)M$o&60ng3ra z^Z%_f|KB3>|7&Fa@09s}xy=6^GXF1=`G2X*|4U^4?~(bxTju{a%KX1r=Kq^z{$C{X z|3aDnZ<6`{Mw$N?$ozl9#*GEV`7-@)+OV-8zt}~mfCA@_C^Oe8|No+!H+^a2b2t1T z|Bv!IejQO-94Rfup(Dq=zWL4webI(Mf_QuQ$hbU%ONre-?}h^ z$if-N2-h8aN`Wb;Gzlz0)CVp(3ApSaEN~N!hVi=HewVuqmKux0C8c@QTb$LG_Y~by zcj{yJ$LAk?&)`(|g-Dz(hkbC!gdbgU7QSA%1sQk3yNT|fak%#YA3_YT9v%Kca6_7- zZ=en@t|a|^w7#Ks)(y^%bhV+E8!DEB_nh)_Q!Ii%4j`F#h2bJaHyY(rCtjT~eFjcj z@DH1%lNMY?iKY&ckP04|(P)#_kHbxHhf=KQohvv2FEGhceHVvg9smT%CS0uG-U+8% z5{%f$sGf2+ME0FvQA}%xvl2?{KwLL=bPeF>w?r2;dF3qc`a_)M51=@ZujwcyFjnk2Cp5}BmCcoFh zx*80^ER7r(v)*id&=l~ihFjkx#Q}bu;>byn(&0oIJ#XM}*_F5}B_OpMHpk)4g{Z=4 zSI``5B^>U$2)n(kjKHAP46*nC&rgWDzyznxSyBQ$LpsD$m$1fgwp6yjTft_ZjT@AD z5iE**Qk<1Vz?28G;=iQ_Gdv-zO$yfa*aGu0=nt=NFO^4evb)>^S0(^MGDRB%G_^BCid=`w_0^y-?`X zk^-tY$1W=ls3U0^wvGo@Q3HBpg|sQRUjm7|q1~aN*k+XDy^iSH%bGe{c$EXX@}Z`8 zv#Ui3BvFraZNkyE@pmOs(WFZN}mEFI5%?^@HDO(`Fiwu91ECG>aEJ9XFx9SEw5$_A4Zwj_mMyrjTZI&w6TwKHp?zzZ@&i zUN)(nW5dB|v>=0jspLh*jhi4N02G}L^IR5E=pqAQ($O3RPw~MPIhJHppeoWpG9$zS zP7|c<&b8p80|dCOF1L5_j!ozQYn-mjfue!BKDf*y7W$(X5n&x4c1P6x+4EKe=Cw*@ zmF`ZO;w3%-{L;xZ1|k@Dtko={nIbm6a9E~WG`lui<(PUZhIsk(u}{MV-Rg!FBG3-D zps&*KYHX9OQNSXrv49YEz*ORPIO%1LCEQq+Sbz&=h@Yy}M`uYAPM1~DE>Jik8zeG# zTUa$I=+?y?dc)^(w=5<$mg0a{XWiwSibm?}(A8b=%#NFP>H|qDmi1YKQ3L44kJiNC z7wo$!B`Z|KiYm@A{6L?A91h1KD;!KE()dj&L-+|x51=!%%0b8gyG?5ecU>gEZpc6(LZ94emr$4;}v|?O9oDGcUlwweDuIP;+$rx`lMRt$2GAcRh%n%IF!O-FC zy9~Hyv!x(t1lWu)5*QzkBOhWnnn1^bPy~qffUW=o&_>N1mvJbX)I3;#-ef`~8sEmO zVG53WgL6Hc)m@YD_=mfu>?55b0Cp5m616VA{VS^fRRZwGU=`-!8t}qQPDxhO^hg+4=xzRbTi(J9aSE~ z0(`+~n{>(;eutrAB*+PvXY&f>Ur4F=D-45!co!Eq95yg|fC~D_BhLf&7Gh0^!a@Ys zL!QmSxh%y)2@IU3&~i4p;sfWlA{CN=(+ z2@>M1u+x^`(528kobTzP z{WIcDxPUkDS^+n>v6TS{oD45eUdsLd#^QgYcA} zeyIF%+51ahS^k9ckYi8zc-hxVj+b~Gf8qQ_=?5Gyaqe>DJ02_kr}D~D)A5WWQsO9k zX~~C6zFyYrjFf(*baz=^`P-3w?!O!YIRtVD*eqh^U)u>Q*9~yTR9LdMDN>AxcIMWc*kQF0GNppZ{qK1i8$O$YHVfkfkn*BQq z+Vi7&Q!<7H^R=%VZYVgG&pjSY;F~awi;W|M;o4;Tn2Qm^vRJ}g=k;D8*5t{CoY3Kf z#kE=7kd+3TELfXdn`Td4L62Pw76{hKW%uraf&63|llmr%;A68%Grl&PU3&_Ss!Cx( zWi(;YF=ebxRZoI&4m%FBYl@{4v(xKTtggPGFCX*h#QYVLXj(y6z6|ggsB|4_YWEc! z&rcfT82)1_(uB!n!Z>G~UrW$V);@*vEA?a(;-)3mrl?`X5dRX(8?)Gb07B~(xPwF| zu&0L&1MH&3Q)@G-W)k6N4EtSJ7FnBQJ0%0NE14!XnF-E{*GX1Il6b17-ZZ06+==Xr znYEd1W2$p$z;v}#mE;Ik)Xy~~&zs|B*jxvs>zO8!ghXR%P1x5Fl8V}b&V2p6-V{Yp z)pg!qC!EJJPNHcJivsHk+OIvrhS33UsFBZgY1 z^m#1ytj*#YGQtuDrW9i-8b2+6wQ^^`-`NpaY6qIYu1I-56`y9x@m90NdB*}F1V5D zevPH70!sI@E~{+N3VMn~qSjdn5Pi=0e~pgId9c!d5?=q0I3GY1z*jmK5!K&to^l>> zKG*4iPk*Jexcryp|62a_^3Rn2b@`u_zq$P0^2_Dt%OmBtmJgN(%f02h%daor?D&P_ zpB-O!e9rNZfgA!k1ab)E5Xd2rLm-Dh27xl1!Uk{f zMg;Xl47joba(Cc>+ZS**JNEOgYXAOG?_pn$zr2CB)eRDz)7u*;-zWF`_MK=sq6G&1 zj=hq6@7@9bK=WXr>;~Re-oQAU0bki3x!WUAHN9oKz4#ePwlWSBGerZckg8CU+WRUwYkTwQ^U>NS7XO*-p9JxwEAifip{Mcvn$V<3W_b z(j9WMV}}P(>dLAmT{Qzxx?9S&%iVT{oAd|D5U3tBS24Jxx7D$YcU9ZA`8=*xpT|)t zx0MVWiNJo2>*e

+ /// Rolls back , swallowing any exception the rollback itself + /// raises (for example when the provider has already completed the transaction after a + /// connection failure) so the exception that triggered the rollback is what propagates. + /// + private static async Task RollbackQuietlyAsync(DbTransaction transaction) + { + try + { + await transaction.RollbackAsync(); + } + catch + { + // Ignore: the original exception (rethrown by the caller) is what matters here. + } + } + /// /// Composes a joined row's , , /// , and fragments into a

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 z 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 F{{x*{4~hT) diff --git a/web/backend/Database/Database.Seed/Sqlite/PipelineSeedDataReader.cs b/web/backend/Database/Database.Seed/Sqlite/PipelineSeedDataReader.cs index a896f07e..7f426bdb 100644 --- a/web/backend/Database/Database.Seed/Sqlite/PipelineSeedDataReader.cs +++ b/web/backend/Database/Database.Seed/Sqlite/PipelineSeedDataReader.cs @@ -54,7 +54,7 @@ public sealed class PipelineSeedDataReader { const string sql = """ SELECT b.name_en, b.description_en, b.name_local, b.description_local, - ba.city_id, ba.postal_code, ba.longitude, ba.latitude + ba.city_id, ba.longitude, ba.latitude FROM breweries b JOIN brewery_addresses ba ON ba.brewery_id = b.id; """; @@ -67,9 +67,8 @@ public sealed class PipelineSeedDataReader const int nameLocalIndex = 2; const int descriptionLocalIndex = 3; const int cityIdIndex = 4; - const int postalCodeIndex = 5; - const int longitudeIndex = 6; - const int latitudeIndex = 7; + const int longitudeIndex = 5; + const int latitudeIndex = 6; List records = []; while (await reader.ReadAsync(cancellationToken)) @@ -86,7 +85,6 @@ public sealed class PipelineSeedDataReader Address = new BreweryAddress { City = cities[reader.GetInt64(cityIdIndex)], - PostalCode = reader.GetString(postalCodeIndex), Longitude = reader.GetDouble(longitudeIndex), Latitude = reader.GetDouble(latitudeIndex), }, @@ -105,7 +103,7 @@ public sealed class PipelineSeedDataReader const string sql = """ SELECT u.first_name, u.last_name, u.gender, u.username, u.bio, u.activity_weight, u.email, u.date_of_birth, - ua.city_id, ua.postal_code + ua.city_id, ua.longitude, ua.latitude FROM users u JOIN user_addresses ua ON ua.user_id = u.id; """; @@ -122,7 +120,8 @@ public sealed class PipelineSeedDataReader const int emailIndex = 6; const int dateOfBirthIndex = 7; const int cityIdIndex = 8; - const int postalCodeIndex = 9; + const int longitudeIndex = 9; + const int latitudeIndex = 10; List records = []; while (await reader.ReadAsync(cancellationToken)) @@ -143,7 +142,8 @@ public sealed class PipelineSeedDataReader Address = new UserAddress { City = cities[reader.GetInt64(cityIdIndex)], - PostalCode = reader.GetString(postalCodeIndex), + Longitude = reader.GetDouble(longitudeIndex), + Latitude = reader.GetDouble(latitudeIndex), }, } ); diff --git a/web/backend/Features/Features.Breweries/Repository/BreweryRepository.cs b/web/backend/Features/Features.Breweries/Repository/BreweryRepository.cs index 1d5b5d6d..a4053853 100644 --- a/web/backend/Features/Features.Breweries/Repository/BreweryRepository.cs +++ b/web/backend/Features/Features.Breweries/Repository/BreweryRepository.cs @@ -283,7 +283,7 @@ public class BreweryRepository(ISqlConnectionFactory connectionFactory) } catch { - await transaction.RollbackAsync(); + await RollbackQuietlyAsync(transaction); throw; } @@ -418,11 +418,28 @@ public class BreweryRepository(ISqlConnectionFactory connectionFactory) } catch { - await transaction.RollbackAsync(); + await RollbackQuietlyAsync(transaction); throw; } } + ///