diff --git a/CHANGELOG.md b/CHANGELOG.md index c61d709e..2195ce91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ## Table of Contents - [Changelog](#changelog) + - [[9.0.0] - 2025-08-15](#900---2025-08-15) - [[8.1.0] - 2025-08-18](#810---2025-08-18) - [Added](#added) - [[8.0.0] - 2025-08-13](#800---2025-08-13) @@ -34,6 +35,10 @@ All notable changes to the Transcend CLI tools will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [9.0.0] - 2025-08-15 + +FIXME + ## [8.1.0] - 2025-08-18 ### Added diff --git a/README.md b/README.md index 1c88ef7d..8f1e066e 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ A command line interface that allows you to programatically interact with the Tr - [`transcend request cron pull-identifiers`](#transcend-request-cron-pull-identifiers) - [`transcend request cron mark-identifiers-completed`](#transcend-request-cron-mark-identifiers-completed) - [`transcend consent build-xdi-sync-endpoint`](#transcend-consent-build-xdi-sync-endpoint) + - [`transcend consent configure-preference-upload`](#transcend-consent-configure-preference-upload) - [`transcend consent generate-access-tokens`](#transcend-consent-generate-access-tokens) - [`transcend consent pull-consent-metrics`](#transcend-consent-pull-consent-metrics) - [`transcend consent pull-consent-preferences`](#transcend-consent-pull-consent-preferences) @@ -1666,6 +1667,33 @@ transcend consent build-xdi-sync-endpoint \ --transcendUrl=https://api.us.transcend.io ``` +### `transcend consent configure-preference-upload` + +```txt +USAGE + transcend consent configure-preference-upload (--auth value) [--sombraAuth value] [--transcendUrl value] (--directory value) [--schemaFilePath value] (--partition value) + transcend consent configure-preference-upload --help + +Interactively configure the column mapping for preference CSV uploads. + +Scans ALL CSV files in the given directory to discover every column header +and every unique value per column, then walks through an interactive editor +to build the full mapping config (identifiers, ignored columns, timestamp, +purposes/preferences and their value mappings). + +The resulting config JSON is reused by 'upload-preferences' so subsequent +uploads run fully non-interactively. + +FLAGS + --auth The Transcend API key. Requires scopes: "View Preference Store Settings", "View Identity Verification Settings" + [--sombraAuth] The Sombra internal key, use for additional authentication when self-hosting Sombra + [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io] + --directory Path to the directory of CSV files to scan for column headers and unique values + [--schemaFilePath] Path to the config JSON file. Defaults to /../preference-upload-schema.json + --partition The partition key for the preference store + -h --help Print help information and exit +``` + ### `transcend consent generate-access-tokens` ```txt @@ -2182,33 +2210,53 @@ transcend consent upload-data-flows-from-csv \ ```txt USAGE - transcend consent upload-preferences (--auth value) (--partition value) [--sombraAuth value] [--transcendUrl value] [--file value] [--directory value] [--dryRun] [--skipExistingRecordCheck] [--receiptFileDir value] [--skipWorkflowTriggers] [--forceTriggerWorkflows] [--skipConflictUpdates] [--isSilent] [--attributes value] [--receiptFilepath value] [--concurrency value] + transcend consent upload-preferences (--auth value) (--partition value) [--sombraAuth value] [--transcendUrl value] (--directory value) [--dryRun] [--skipExistingRecordCheck] [--receiptFileDir value] [--schemaFilePath value] [--skipWorkflowTriggers] [--forceTriggerWorkflows] [--skipConflictUpdates] [--isSilent] [--attributes value] [--receiptFilepath value] [--concurrency value] [--uploadConcurrency value] [--maxChunkSize value] [--rateLimitRetryDelay value] [--uploadLogInterval value] [--downloadIdentifierConcurrency value] [--maxRecordsToReceipt value] [--regenerate] [--chunkSizeMB value] [--viewerMode] transcend consent upload-preferences --help Upload preference management data to your Preference Store. -This command prompts you to map the shape of the CSV to the shape of the Transcend API. There is no requirement for the shape of the incoming CSV, as the script will handle the mapping process. +Requires a config file (generated by 'configure-preference-upload') that maps +CSV columns to identifiers, purposes, and preferences. If no config exists, +pass --regenerate to run the interactive configure flow first. -The script will also produce a JSON cache file that allows for the mappings to be preserved between runs. +Large files are automatically chunked into smaller pieces (controlled by +--chunkSizeMB) before uploading. + +Parallel preference uploader (Node 22+ ESM/TS) +----------------------------------------------------------------------------- +- Spawns a pool of child *processes* (not threads) to run uploads in parallel. +- Shows a live dashboard in the parent terminal with progress per worker. +- Creates per-worker log files and (optionally) opens OS terminals to tail them. +- Uses the same module as both parent and child; the child mode is toggled + by the presence of a CLI flag ('--as-child'). FLAGS - --auth The Transcend API key. Requires scopes: "Modify User Stored Preferences", "View Managed Consent Database Admin API", "View Preference Store Settings" - --partition The partition key to download consent preferences to - [--sombraAuth] The Sombra internal key, use for additional authentication when self-hosting Sombra - [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io] - [--file] Path to the CSV file to load preferences from - [--directory] Path to the directory of CSV files to load preferences from - [--dryRun] Whether to do a dry run only - will write results to receiptFilepath without updating Transcend [default = false] - [--skipExistingRecordCheck] Whether to skip the check for existing records. SHOULD ONLY BE USED FOR INITIAL UPLOAD [default = false] - [--receiptFileDir] Directory path where the response receipts should be saved [default = ./receipts] - [--skipWorkflowTriggers] Whether to skip workflow triggers when uploading to preference store [default = false] - [--forceTriggerWorkflows] Whether to force trigger workflows for existing consent records [default = false] - [--skipConflictUpdates] Whether to skip uploading of any records where the preference store and file have a hard conflict [default = false] - [--isSilent/--noIsSilent] Whether to skip sending emails in workflows [default = true] - [--attributes] Attributes to add to any DSR request if created. Comma-separated list of key:value pairs. [default = Tags:transcend-cli,Source:transcend-cli] - [--receiptFilepath] Store resulting, continuing where left off [default = ./preference-management-upload-receipts.json] - [--concurrency] The concurrency to use when uploading in parallel [default = 10] - -h --help Print help information and exit + --auth The Transcend API key. Requires scopes: "Modify User Stored Preferences", "View Managed Consent Database Admin API", "View Preference Store Settings", "View Identity Verification Settings" + --partition The partition key to download consent preferences to + [--sombraAuth] The Sombra internal key, use for additional authentication when self-hosting Sombra + [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io] + --directory Path to the directory of CSV files to load preferences from + [--dryRun] Whether to do a dry run only - will write results to receiptFilepath without updating Transcend [default = false] + [--skipExistingRecordCheck] Whether to skip the check for existing records. SHOULD ONLY BE USED FOR INITIAL UPLOAD [default = false] + [--receiptFileDir] Directory path where the response receipts should be saved. Defaults to ./receipts if a "file" is provided, or /../receipts if a "directory" is provided. + [--schemaFilePath] The path to where the schema for the file should be saved. If file is provided, it will default to ./-preference-upload-schema.json If directory is provided, it will default to /../preference-upload-schema.json + [--skipWorkflowTriggers] Whether to skip workflow triggers when uploading to preference store [default = false] + [--forceTriggerWorkflows] Whether to force trigger workflows for existing consent records [default = false] + [--skipConflictUpdates] Whether to skip uploading of any records where the preference store and file have a hard conflict [default = false] + [--isSilent/--noIsSilent] Whether to skip sending emails in workflows [default = true] + [--attributes] Attributes to add to any DSR request if created. Comma-separated list of key:value pairs. [default = Tags:transcend-cli,Source:transcend-cli] + [--receiptFilepath] Store resulting, continuing where left off [default = ./preference-management-upload-receipts.json] + [--concurrency] The number of concurrent processes to use to upload the files. When this is not set, it defaults to the number of CPU cores available on the machine. e.g. if there are 5 concurrent processes for 15 files, each parallel job would get 3 files to process. + [--uploadConcurrency] When uploading preferences to v1/preferences - this is the number of concurrent requests made at any given time by a single process.This is NOT the batch size—it's how many batch *tasks* run in parallel. The number of total concurrent requests is maxed out at concurrency * uploadConcurrency. [default = 75] + [--maxChunkSize] When uploading preferences to v1/preferences - this is the maximum number of records to put in a single request.The number of total concurrent records being put in at any one time is is maxed out at maxChunkSize * concurrency * uploadConcurrency. [default = 25] + [--rateLimitRetryDelay] When uploading preferences to v1/preferences - this is the number of milliseconds to wait before retrying a request that was rate limited. This is only used if the request is rate limited by the Transcend API. If the request fails for any other reason, it will not be retried. [default = 3000] + [--uploadLogInterval] When uploading preferences to v1/preferences - this is the number of records after which to log progress. Output will be logged to console and also to the receipt file. Setting this value lower will allow for you to more easily pick up where you left off. Setting this value higher can avoid excessive i/o operations slowing down the upload. Default is a good optimization for most cases. [default = 1000] + [--downloadIdentifierConcurrency] When downloading identifiers for the upload - this is the number of concurrent requests to make. This is only used if the records are not already cached in the preference store. [default = 30] + [--maxRecordsToReceipt] When writing out successful and pending records to the receipt file - this is the maximum number of records to write out. This is to avoid the receipt file getting too large for JSON.parse/stringify. [default = 10] + [--regenerate] Force re-generation of the schema config file before uploading. Runs the interactive configure flow even if a config already exists. [default = false] + [--chunkSizeMB] Auto-chunk threshold in MB. Any CSV file larger than this will be split into smaller files before uploading. Set to 0 to disable. [default = 10] + [--viewerMode] Run in non-interactive viewer mode (no attach UI, auto-artifacts) [default = false] + -h --help Print help information and exit ``` A sample CSV can be found [here](./examples/cli-upload-preferences-example.csv). In this example, `Sales` and `Marketing` are two custom Purposes, and `SalesCommunications` and `MarketingCommunications` are Preference Topics. During the interactive CLI prompt, you can map these columns to the slugs stored in Transcend! @@ -2220,7 +2268,7 @@ A sample CSV can be found [here](./examples/cli-upload-preferences-example.csv). ```sh transcend consent upload-preferences \ --auth="$TRANSCEND_API_KEY" \ - --file=./preferences.csv \ + --directory=./ \ --partition=4d1c5daa-90b7-4d18-aa40-f86a43d2c726 ``` @@ -2230,7 +2278,7 @@ transcend consent upload-preferences \ transcend consent upload-preferences \ --auth="$TRANSCEND_API_KEY" \ --partition=4d1c5daa-90b7-4d18-aa40-f86a43d2c726 \ - --file=./preferences.csv \ + --directory=./csvs \ --dryRun \ --skipWorkflowTriggers \ --skipConflictUpdates \ @@ -2245,7 +2293,7 @@ transcend consent upload-preferences \ transcend consent upload-preferences \ --auth="$TRANSCEND_API_KEY" \ --partition=4d1c5daa-90b7-4d18-aa40-f86a43d2c726 \ - --file=./preferences.csv \ + --directory=./folder \ --transcendUrl=https://api.us.transcend.io ``` diff --git a/package.json b/package.json index 7c99b389..75e29ba4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Transcend Inc.", "name": "@transcend-io/cli", "description": "A command line interface for programmatic operations across Transcend.", - "version": "8.36.1", + "version": "9.0.0", "homepage": "https://github.com/transcend-io/cli", "repository": { "type": "git", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46a13a9a..fc5b28b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,7 +76,7 @@ importers: version: 16.11.0 graphql-request: specifier: ^5.0.0 - version: 5.2.0(graphql@16.11.0) + version: 5.2.0(encoding@0.1.13)(graphql@16.11.0) inquirer: specifier: ^8.0.0 version: 8.2.7(@types/node@18.19.115) @@ -1570,6 +1570,9 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -2049,6 +2052,10 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} @@ -4652,9 +4659,9 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cross-fetch@3.2.0: + cross-fetch@3.2.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -4862,6 +4869,11 @@ snapshots: empathic@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -5421,10 +5433,10 @@ snapshots: graphemer@1.4.0: {} - graphql-request@5.2.0(graphql@16.11.0): + graphql-request@5.2.0(encoding@0.1.13)(graphql@16.11.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - cross-fetch: 3.2.0 + cross-fetch: 3.2.0(encoding@0.1.13) extract-files: 9.0.0 form-data: 3.0.3 graphql: 16.11.0 @@ -5491,6 +5503,11 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 @@ -6046,9 +6063,11 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 normalize-url@6.1.0: {} diff --git a/src/commands/consent/configure-preference-upload/command.ts b/src/commands/consent/configure-preference-upload/command.ts new file mode 100644 index 00000000..d4d7b541 --- /dev/null +++ b/src/commands/consent/configure-preference-upload/command.ts @@ -0,0 +1,57 @@ +import { buildCommand } from '@stricli/core'; +import { ScopeName } from '@transcend-io/privacy-types'; +import { + createAuthParameter, + createSombraAuthParameter, + createTranscendUrlParameter, +} from '../../../lib/cli/common-parameters'; + +export const configurePreferenceUploadCommand = buildCommand({ + loader: async () => { + const { configurePreferenceUpload } = await import('./impl'); + return configurePreferenceUpload; + }, + parameters: { + flags: { + auth: createAuthParameter({ + scopes: [ + ScopeName.ViewPreferenceStoreSettings, + ScopeName.ViewRequestIdentitySettings, + ], + }), + sombraAuth: createSombraAuthParameter(), + transcendUrl: createTranscendUrlParameter(), + directory: { + kind: 'parsed', + parse: String, + brief: + 'Path to the directory of CSV files to scan for column headers and unique values', + }, + schemaFilePath: { + kind: 'parsed', + parse: String, + brief: + 'Path to the config JSON file. Defaults to /../preference-upload-schema.json', + optional: true, + }, + partition: { + kind: 'parsed', + parse: String, + brief: 'The partition key for the preference store', + }, + }, + }, + docs: { + brief: + 'Interactively configure the column mapping for preference CSV uploads', + fullDescription: `Interactively configure the column mapping for preference CSV uploads. + +Scans ALL CSV files in the given directory to discover every column header +and every unique value per column, then walks through an interactive editor +to build the full mapping config (identifiers, ignored columns, timestamp, +purposes/preferences and their value mappings). + +The resulting config JSON is reused by 'upload-preferences' so subsequent +uploads run fully non-interactively.`, + }, +}); diff --git a/src/commands/consent/configure-preference-upload/impl.ts b/src/commands/consent/configure-preference-upload/impl.ts new file mode 100644 index 00000000..47049375 --- /dev/null +++ b/src/commands/consent/configure-preference-upload/impl.ts @@ -0,0 +1,317 @@ +import type { LocalContext } from '../../../context'; +import colors from 'colors'; +import * as t from 'io-ts'; +import { createReadStream } from 'node:fs'; +import { parse as csvParse } from 'csv-parse'; +import inquirer from 'inquirer'; +import { PersistedState } from '@transcend-io/persisted-state'; +import { logger } from '../../../logger'; +import { doneInputValidation } from '../../../lib/cli/done-input-validation'; +import { collectCsvFilesOrExit } from '../../../lib/helpers/collectCsvFilesOrExit'; +import { buildTranscendGraphQLClient } from '../../../lib/graphql'; +import { loadReferenceData } from '../upload-preferences/upload/loadReferenceData'; +import { computeSchemaFile } from '../upload-preferences/artifacts'; +import { + FileFormatState, + parsePreferenceIdentifiersFromCsv, + parsePreferenceFileFormatFromCsv, + parsePreferenceAndPurposeValuesFromCsv, +} from '../../../lib/preference-management'; +import { readCsv } from '../../../lib/requests'; + +export interface ConfigurePreferenceUploadFlags { + auth: string; + sombraAuth?: string; + transcendUrl: string; + directory: string; + schemaFilePath?: string; + partition: string; +} + +/** + * Scan all CSV files in a directory and collect the union of column headers + * plus all unique values per non-identifier column. Uses streaming so large + * files don't need to be held in memory. + * + * @param files - CSV file paths to scan + * @returns headers and uniqueValuesByColumn + */ +async function scanCsvFiles(files: string[]): Promise<{ + /** Union of all column headers */ + headers: string[]; + /** Map of column name to its unique values (trimmed, non-empty) */ + uniqueValuesByColumn: Record>; +}> { + const allHeaders = new Set(); + const uniqueValuesByColumn: Record> = {}; + + for (const file of files) { + await new Promise((resolve, reject) => { + const parser = createReadStream(file).pipe( + csvParse({ columns: true, skip_empty_lines: true }), + ); + parser.on('data', (row: Record) => { + for (const [col, val] of Object.entries(row)) { + allHeaders.add(col); + if (!uniqueValuesByColumn[col]) { + uniqueValuesByColumn[col] = new Set(); + } + const trimmed = (val || '').trim(); + if (trimmed) { + uniqueValuesByColumn[col].add(trimmed); + } + } + }); + parser.on('end', resolve); + parser.on('error', reject); + }); + } + + return { + headers: [...allHeaders], + uniqueValuesByColumn, + }; +} + +/** + * Build synthetic preference rows from the scanned unique values so + * the existing parse functions see every value at least once. + * + * @param headers - all column headers + * @param uniqueValuesByColumn - unique values per column + * @returns synthetic rows covering all unique values + */ +function buildSyntheticRows( + headers: string[], + uniqueValuesByColumn: Record>, +): Record[] { + const maxRows = Math.max( + 1, + ...headers.map((h) => uniqueValuesByColumn[h]?.size ?? 0), + ); + const rows: Record[] = []; + for (let i = 0; i < maxRows; i += 1) { + const row: Record = {}; + for (const h of headers) { + const vals = uniqueValuesByColumn[h] + ? [...uniqueValuesByColumn[h]] + : ['']; + row[h] = vals[i % vals.length] ?? ''; + } + rows.push(row); + } + return rows; +} + +/** + * Interactively configure the column mapping for preference CSV uploads. + * + * Scans ALL CSV files in a directory, discovers every header and unique value, + * then walks the user through mapping identifiers, ignored columns, timestamps, + * and purpose/preference value mappings. Saves the result as a reusable config. + * + * @param flags - CLI flags + */ +export async function configurePreferenceUpload( + this: LocalContext, + flags: ConfigurePreferenceUploadFlags, +): Promise { + const { auth, transcendUrl, directory, schemaFilePath } = flags; + + const files = collectCsvFilesOrExit(directory, this); + doneInputValidation(this.process.exit); + + logger.info( + colors.green( + `Scanning ${files.length} CSV file(s) for headers and unique values...`, + ), + ); + + // 1) Scan all files to discover the full column/value universe + const { headers, uniqueValuesByColumn } = await scanCsvFiles(files); + logger.info( + colors.green(`Discovered ${headers.length} columns across all files.`), + ); + + // 2) Fetch org reference data + const client = buildTranscendGraphQLClient(transcendUrl, auth); + const { purposes, preferenceTopics, identifiers } = await loadReferenceData( + client, + ); + + const allIdentifierNames = identifiers.map((id) => id.name); + logger.info( + colors.green( + `Loaded ${purposes.length} purposes, ${preferenceTopics.length} preference topics, ${identifiers.length} identifiers from org.`, + ), + ); + + // 3) Create or load persisted schema state + const schemaFile = computeSchemaFile(schemaFilePath, directory, files[0]); + const initial = { + columnToPurposeName: {}, + lastFetchedAt: new Date().toISOString(), + columnToIdentifier: {}, + } as const; + const schemaState = new PersistedState(schemaFile, FileFormatState, initial); + + // 4) Interactive: select identifier columns + const existingIdentifierCols = Object.keys( + schemaState.getValue('columnToIdentifier'), + ); + let identifierColumns: string[]; + if (existingIdentifierCols.length > 0) { + logger.info( + colors.magenta( + `Existing identifier columns: ${existingIdentifierCols.join(', ')}`, + ), + ); + const { reuse } = await inquirer.prompt<{ reuse: boolean }>([ + { + name: 'reuse', + type: 'confirm', + message: `Keep existing identifier column selection? (${existingIdentifierCols.join( + ', ', + )})`, + default: true, + }, + ]); + identifierColumns = reuse + ? existingIdentifierCols + : ( + await inquirer.prompt<{ cols: string[] }>([ + { + name: 'cols', + type: 'checkbox', + message: 'Select columns that are identifiers', + choices: headers, + validate: (v: string[]) => + v.length > 0 || 'Select at least one identifier column', + }, + ]) + ).cols; + } else { + identifierColumns = ( + await inquirer.prompt<{ cols: string[] }>([ + { + name: 'cols', + type: 'checkbox', + message: 'Select columns that are identifiers', + choices: headers, + validate: (v: string[]) => + v.length > 0 || 'Select at least one identifier column', + }, + ]) + ).cols; + } + + // 5) Map identifier columns to org identifier names (reuses existing parse logic) + // We need a small sample of real rows so the identifier parser can validate. + const sampleRows = readCsv(files[0], t.record(t.string, t.string)); + await parsePreferenceIdentifiersFromCsv(sampleRows, { + schemaState, + orgIdentifiers: identifiers, + allowedIdentifierNames: allIdentifierNames, + identifierColumns, + }); + + // 6) Interactive: select columns to ignore + const mappedSoFar = [ + ...Object.keys(schemaState.getValue('columnToIdentifier')), + ]; + const remainingForIgnore = headers.filter((h) => !mappedSoFar.includes(h)); + const existingIgnored = schemaState.getValue('columnsToIgnore') ?? []; + + let columnsToIgnore: string[]; + if (existingIgnored.length > 0) { + logger.info( + colors.magenta(`Existing ignored columns: ${existingIgnored.join(', ')}`), + ); + const { reuse } = await inquirer.prompt<{ reuse: boolean }>([ + { + name: 'reuse', + type: 'confirm', + message: `Keep existing ignored columns? (${existingIgnored.join( + ', ', + )})`, + default: true, + }, + ]); + columnsToIgnore = reuse + ? existingIgnored + : ( + await inquirer.prompt<{ cols: string[] }>([ + { + name: 'cols', + type: 'checkbox', + message: + 'Select columns to ignore (will not be mapped to purposes)', + choices: remainingForIgnore, + }, + ]) + ).cols; + } else { + columnsToIgnore = ( + await inquirer.prompt<{ cols: string[] }>([ + { + name: 'cols', + type: 'checkbox', + message: 'Select columns to ignore (will not be mapped to purposes)', + choices: remainingForIgnore, + }, + ]) + ).cols; + } + schemaState.setValue(columnsToIgnore, 'columnsToIgnore'); + + // 7) Build synthetic rows covering all unique values from every file + const syntheticRows = buildSyntheticRows(headers, uniqueValuesByColumn); + + // 8) Select timestamp column + await parsePreferenceFileFormatFromCsv(syntheticRows, schemaState); + + // 9) Map remaining columns to purposes/preferences + value mappings + await parsePreferenceAndPurposeValuesFromCsv(syntheticRows, schemaState, { + purposeSlugs: purposes.map((p) => p.trackingType), + preferenceTopics, + forceTriggerWorkflows: false, + columnsToIgnore, + }); + + // 10) Validate completeness + const identifierCols = Object.keys( + schemaState.getValue('columnToIdentifier'), + ); + const timestampCol = schemaState.getValue('timestampColumn'); + const purposeCols = Object.keys(schemaState.getValue('columnToPurposeName')); + const ignoredCols = schemaState.getValue('columnsToIgnore') ?? []; + const allMapped = new Set([ + ...identifierCols, + ...purposeCols, + ...ignoredCols, + ...(timestampCol ? [timestampCol] : []), + ]); + const unmapped = headers.filter((h) => !allMapped.has(h)); + if (unmapped.length > 0) { + logger.warn( + colors.yellow( + `Warning: the following columns are not mapped: ${unmapped.join( + ', ', + )}. ` + + 'They will cause errors during upload. Re-run this command to fix.', + ), + ); + } + + schemaState.setValue(new Date().toISOString(), 'lastFetchedAt'); + + logger.info(colors.green(`\nConfiguration saved to: ${schemaFile}`)); + logger.info( + colors.green( + ` Identifiers: ${identifierCols.join(', ')}\n` + + ` Ignored: ${ignoredCols.join(', ') || '(none)'}\n` + + ` Timestamp: ${timestampCol || '(none)'}\n` + + ` Purpose columns: ${purposeCols.join(', ')}`, + ), + ); +} diff --git a/src/commands/consent/routes.ts b/src/commands/consent/routes.ts index 1dede578..40bfb335 100644 --- a/src/commands/consent/routes.ts +++ b/src/commands/consent/routes.ts @@ -1,5 +1,6 @@ import { buildRouteMap } from '@stricli/core'; import { buildXdiSyncEndpointCommand } from './build-xdi-sync-endpoint/command'; +import { configurePreferenceUploadCommand } from './configure-preference-upload/command'; import { pullConsentMetricsCommand } from './pull-consent-metrics/command'; import { pullConsentPreferencesCommand } from './pull-consent-preferences/command'; import { updateConsentManagerCommand } from './update-consent-manager/command'; @@ -13,6 +14,7 @@ import { deletePreferenceRecordsCommand } from './delete-preference-records/comm export const consentRoutes = buildRouteMap({ routes: { 'build-xdi-sync-endpoint': buildXdiSyncEndpointCommand, + 'configure-preference-upload': configurePreferenceUploadCommand, 'generate-access-tokens': generateAccessTokensCommand, 'pull-consent-metrics': pullConsentMetricsCommand, 'pull-consent-preferences': pullConsentPreferencesCommand, diff --git a/src/commands/consent/upload-preferences/artifacts/receipts/index.ts b/src/commands/consent/upload-preferences/artifacts/receipts/index.ts index fa9c6f7d..16e82d18 100644 --- a/src/commands/consent/upload-preferences/artifacts/receipts/index.ts +++ b/src/commands/consent/upload-preferences/artifacts/receipts/index.ts @@ -1,4 +1,5 @@ export * from './readFailingUpdatesFromReceipt'; export * from './summarizeReceipt'; +export * from './receiptsState'; export * from './resolveReceiptPath'; export * from './applyReceiptSummary'; diff --git a/src/commands/consent/upload-preferences/artifacts/receipts/receiptsState.ts b/src/commands/consent/upload-preferences/artifacts/receipts/receiptsState.ts new file mode 100644 index 00000000..e8a77863 --- /dev/null +++ b/src/commands/consent/upload-preferences/artifacts/receipts/receiptsState.ts @@ -0,0 +1,155 @@ +import { PersistedState } from '@transcend-io/persisted-state'; +import { + RequestUploadReceipts, + type FailingPreferenceUpdates, + type PendingSafePreferenceUpdates, + type PendingWithConflictPreferenceUpdates, + type PreferenceUpdateMap, + type SkippedPreferenceUpdates, +} from '../../../../../lib/preference-management'; +import { + retrySamePromise, + type RetryPolicy, +} from '../../../../../lib/helpers/retrySamePromise'; + +export type PreferenceReceiptsInterface = { + /** Path to file */ + receiptsFilepath: string; + /** + * Get the successfully updated records + */ + getSuccessful(): PreferenceUpdateMap; + /** + * Get the records pending upload + */ + getPending(): PreferenceUpdateMap; + /** + * Get the failing to upload records + */ + getFailing(): FailingPreferenceUpdates; + /** + * Set the new map of successful records + */ + setSuccessful(next: PreferenceUpdateMap): Promise; + /** + * Set the new map of pending records + */ + setPending(next: PreferenceUpdateMap): Promise; + /** + * Set the new map of safe to upload records + */ + setPendingSafe(next: PendingSafePreferenceUpdates): Promise; + /** + * Set the skipped records + */ + setSkipped(next: PendingSafePreferenceUpdates): Promise; + /** + * Set the new map of conflict upload records + */ + setPendingConflict(next: PendingWithConflictPreferenceUpdates): Promise; + /** + * Set the new map of failing records + */ + setFailing(next: FailingPreferenceUpdates): Promise; + /** + * Reset the pending records + */ + resetPending(): Promise; +}; + +/** + * Build a receipts state adapter for the given file path. + * + * Retries creation of the underlying PersistedState with **exponential backoff** + * when the receipts file cannot be parsed due to a transient write (e.g., empty + * or partially written file) indicated by "Unexpected end of JSON input". + * + * @param filepath - Where to persist/read upload receipts + * @returns Receipt state port with strongly-named methods + */ +export async function makeReceiptsState( + filepath: string, +): Promise { + // Initial shape if file does not exist or is empty. + const initial = { + failingUpdates: {}, + pendingConflictUpdates: {}, + skippedUpdates: {}, + pendingSafeUpdates: {}, + successfulUpdates: {}, + pendingUpdates: {}, + lastFetchedAt: new Date().toISOString(), + } as const; + + // Retry policy: only retry on the specific JSON truncation message. + const policy: RetryPolicy = { + maxAttempts: 10, + delayMs: 500, // start small and backoff + shouldRetry: (_status, message) => + typeof message === 'string' && + /Unexpected end of JSON input/i.test(message ?? ''), + }; + + // Exponential backoff cap to avoid unbounded waits. + const MAX_DELAY_MS = 5_000; + + try { + const s = await retrySamePromise( + async () => { + // Wrap constructor in a Promise so thrown sync errors reject properly. + const result = await Promise.resolve( + new PersistedState(filepath, RequestUploadReceipts, initial), + ); + return result; + }, + policy, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (_note) => { + // Double the delay on each backoff (cap at MAX_DELAY_MS) + policy.delayMs = Math.min( + MAX_DELAY_MS, + Math.max(1, policy.delayMs * 2), + ); + // Optional local diagnostics: + // process.stderr.write(`[receiptsState] ${_note}; next delay=${policy.delayMs}ms\n`); + }, + ); + + return { + receiptsFilepath: filepath, + getSuccessful: () => s.getValue('successfulUpdates'), + getPending: () => s.getValue('pendingUpdates'), + getFailing: () => s.getValue('failingUpdates'), + async setSuccessful(v: PreferenceUpdateMap) { + await s.setValue(v, 'successfulUpdates'); + }, + async setSkipped(v: SkippedPreferenceUpdates) { + await s.setValue(v, 'skippedUpdates'); + }, + async setPending(v: PreferenceUpdateMap) { + await s.setValue(v, 'pendingUpdates'); + }, + async setPendingSafe(v: PendingSafePreferenceUpdates) { + await s.setValue(v, 'pendingSafeUpdates'); + }, + async setPendingConflict(v: PendingWithConflictPreferenceUpdates) { + await s.setValue(v, 'pendingConflictUpdates'); + }, + async setFailing(v: FailingPreferenceUpdates) { + await s.setValue(v, 'failingUpdates'); + }, + async resetPending() { + await s.setValue({}, 'pendingUpdates'); + await s.setValue({}, 'pendingSafeUpdates'); + await s.setValue({}, 'skippedUpdates'); + await s.setValue({}, 'pendingConflictUpdates'); + }, + }; + } catch (error) { + throw new Error( + `Failed to create receipts state for ${filepath}: ${ + error instanceof Error ? error.message : String(error) + }`, + ); + } +} diff --git a/src/commands/consent/upload-preferences/artifacts/receipts/tests/receiptsState.test.ts b/src/commands/consent/upload-preferences/artifacts/receipts/tests/receiptsState.test.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/commands/consent/upload-preferences/buildTaskOptions.ts b/src/commands/consent/upload-preferences/buildTaskOptions.ts new file mode 100644 index 00000000..696f1ff8 --- /dev/null +++ b/src/commands/consent/upload-preferences/buildTaskOptions.ts @@ -0,0 +1,86 @@ +// helpers/buildCommon.ts +import type { UploadPreferencesCommandFlags } from './impl'; + +/** Common options shared by upload tasks */ +export type TaskCommonOpts = Pick< + UploadPreferencesCommandFlags, + | 'auth' + | 'partition' + | 'sombraAuth' + | 'directory' + | 'transcendUrl' + | 'skipConflictUpdates' + | 'uploadConcurrency' + | 'uploadLogInterval' + | 'maxChunkSize' + | 'downloadIdentifierConcurrency' + | 'rateLimitRetryDelay' + | 'maxRecordsToReceipt' + | 'skipWorkflowTriggers' + | 'skipExistingRecordCheck' + | 'isSilent' + | 'dryRun' + | 'attributes' + | 'forceTriggerWorkflows' +> & { + schemaFile: string; + receiptsFolder: string; +}; + +/** + * Copy the options from the main command over to the spawned tasks + * + * @param flags - All flags + * @param schemaFile - Schema file + * @param receiptsFolder - Receipts folder + * @returns Common task options + */ +export function buildCommonOpts( + flags: UploadPreferencesCommandFlags, + schemaFile: string, + receiptsFolder: string, +): TaskCommonOpts { + const { + auth, + directory, + sombraAuth, + partition, + transcendUrl, + downloadIdentifierConcurrency, + skipConflictUpdates, + skipWorkflowTriggers, + skipExistingRecordCheck, + isSilent, + dryRun, + attributes, + forceTriggerWorkflows, + uploadConcurrency, + maxChunkSize, + rateLimitRetryDelay, + maxRecordsToReceipt, + uploadLogInterval, + } = flags; + + return { + schemaFile, + receiptsFolder, + auth, + directory, + downloadIdentifierConcurrency, + sombraAuth, + partition, + transcendUrl, + skipConflictUpdates, + skipWorkflowTriggers, + skipExistingRecordCheck, + isSilent, + dryRun, + attributes, + forceTriggerWorkflows, + uploadConcurrency, + maxChunkSize, + rateLimitRetryDelay, + maxRecordsToReceipt, + uploadLogInterval, + }; +} diff --git a/src/commands/consent/upload-preferences/command.ts b/src/commands/consent/upload-preferences/command.ts index ae2538e8..32eddcaf 100644 --- a/src/commands/consent/upload-preferences/command.ts +++ b/src/commands/consent/upload-preferences/command.ts @@ -18,6 +18,7 @@ export const uploadPreferencesCommand = buildCommand({ ScopeName.ManageStoredPreferences, ScopeName.ViewManagedConsentDatabaseAdminApi, ScopeName.ViewPreferenceStoreSettings, + ScopeName.ViewRequestIdentitySettings, ], }), partition: { @@ -27,17 +28,10 @@ export const uploadPreferencesCommand = buildCommand({ }, sombraAuth: createSombraAuthParameter(), transcendUrl: createTranscendUrlParameter(), - file: { - kind: 'parsed', - parse: String, - brief: 'Path to the CSV file to load preferences from', - optional: true, - }, directory: { kind: 'parsed', parse: String, brief: 'Path to the directory of CSV files to load preferences from', - optional: true, }, dryRun: { kind: 'boolean', @@ -54,8 +48,17 @@ export const uploadPreferencesCommand = buildCommand({ receiptFileDir: { kind: 'parsed', parse: String, - brief: 'Directory path where the response receipts should be saved', - default: './receipts', + brief: + 'Directory path where the response receipts should be saved. Defaults to ./receipts if a "file" is provided, or /../receipts if a "directory" is provided.', + optional: true, + }, + schemaFilePath: { + kind: 'parsed', + parse: String, + brief: + 'The path to where the schema for the file should be saved. If file is provided, it will default to ./-preference-upload-schema.json ' + + 'If directory is provided, it will default to /../preference-upload-schema.json', + optional: true, }, skipWorkflowTriggers: { kind: 'boolean', @@ -96,17 +99,105 @@ export const uploadPreferencesCommand = buildCommand({ concurrency: { kind: 'parsed', parse: numberParser, - brief: 'The concurrency to use when uploading in parallel', + brief: + 'The number of concurrent processes to use to upload the files. When this is not set, it defaults ' + + 'to the number of CPU cores available on the machine. ' + + 'e.g. if there are 5 concurrent processes for 15 files, each parallel job would get 3 files to process. ', + optional: true, + }, + uploadConcurrency: { + kind: 'parsed', + parse: numberParser, + brief: + 'When uploading preferences to v1/preferences - this is the number of concurrent requests made at any given time by a single process.' + + "This is NOT the batch size—it's how many batch *tasks* run in parallel. " + + 'The number of total concurrent requests is maxed out at concurrency * uploadConcurrency.', + default: '75', // FIXME 25 + }, + maxChunkSize: { + kind: 'parsed', + parse: numberParser, + brief: + 'When uploading preferences to v1/preferences - this is the maximum number of records to put in a single request.' + + 'The number of total concurrent records being put in at any one time is is maxed out at maxChunkSize * concurrency * uploadConcurrency.', + default: '25', + }, + rateLimitRetryDelay: { + kind: 'parsed', + parse: numberParser, + brief: + 'When uploading preferences to v1/preferences - this is the number of milliseconds to wait before retrying a request that was rate limited. ' + + 'This is only used if the request is rate limited by the Transcend API. ' + + 'If the request fails for any other reason, it will not be retried. ', + default: '3000', + }, + uploadLogInterval: { + kind: 'parsed', + parse: numberParser, + brief: + 'When uploading preferences to v1/preferences - this is the number of records after which to log progress. ' + + 'Output will be logged to console and also to the receipt file. ' + + 'Setting this value lower will allow for you to more easily pick up where you left off. ' + + 'Setting this value higher can avoid excessive i/o operations slowing down the upload. ' + + 'Default is a good optimization for most cases.', + default: '1000', + }, + downloadIdentifierConcurrency: { + kind: 'parsed', + parse: numberParser, + brief: + 'When downloading identifiers for the upload - this is the number of concurrent requests to make. ' + + 'This is only used if the records are not already cached in the preference store. ', + default: '30', + }, + maxRecordsToReceipt: { + kind: 'parsed', + parse: numberParser, + brief: + 'When writing out successful and pending records to the receipt file - this is the maximum number of records to write out. ' + + 'This is to avoid the receipt file getting too large for JSON.parse/stringify.', + default: '10', + }, + regenerate: { + kind: 'boolean', + brief: + 'Force re-generation of the schema config file before uploading. ' + + 'Runs the interactive configure flow even if a config already exists.', + default: false, + }, + chunkSizeMB: { + kind: 'parsed', + parse: numberParser, + brief: + 'Auto-chunk threshold in MB. Any CSV file larger than this will be ' + + 'split into smaller files before uploading. Set to 0 to disable.', default: '10', }, + viewerMode: { + kind: 'boolean', + brief: + 'Run in non-interactive viewer mode (no attach UI, auto-artifacts)', + default: false, + }, }, }, docs: { brief: 'Upload preference management data to your Preference Store', fullDescription: `Upload preference management data to your Preference Store. -This command prompts you to map the shape of the CSV to the shape of the Transcend API. There is no requirement for the shape of the incoming CSV, as the script will handle the mapping process. +Requires a config file (generated by 'configure-preference-upload') that maps +CSV columns to identifiers, purposes, and preferences. If no config exists, +pass --regenerate to run the interactive configure flow first. + +Large files are automatically chunked into smaller pieces (controlled by +--chunkSizeMB) before uploading. -The script will also produce a JSON cache file that allows for the mappings to be preserved between runs.`, +Parallel preference uploader (Node 22+ ESM/TS) +----------------------------------------------------------------------------- +- Spawns a pool of child *processes* (not threads) to run uploads in parallel. +- Shows a live dashboard in the parent terminal with progress per worker. +- Creates per-worker log files and (optionally) opens OS terminals to tail them. +- Uses the same module as both parent and child; the child mode is toggled + by the presence of a CLI flag ('--as-child').`, }, }); diff --git a/src/commands/consent/upload-preferences/impl.ts b/src/commands/consent/upload-preferences/impl.ts index 687f5384..5856435e 100644 --- a/src/commands/consent/upload-preferences/impl.ts +++ b/src/commands/consent/upload-preferences/impl.ts @@ -1,106 +1,197 @@ import type { LocalContext } from '../../../context'; import colors from 'colors'; - import { logger } from '../../../logger'; -import { uploadPreferenceManagementPreferencesInteractive } from '../../../lib/preference-management'; -import { splitCsvToList } from '../../../lib/requests'; -import { readdirSync } from 'node:fs'; -import { map } from '../../../lib/bluebird'; -import { basename, join } from 'node:path'; +import { join } from 'node:path'; +import { statSync, existsSync } from 'node:fs'; + import { doneInputValidation } from '../../../lib/cli/done-input-validation'; +import { collectCsvFilesOrExit } from '../../../lib/helpers/collectCsvFilesOrExit'; +import { chunkOneCsvFile } from '../../../lib/helpers/chunkOneCsvFile'; + +import { + computePoolSize, + CHILD_FLAG, + type PoolHooks, + runPool, + dashboardPlugin, + buildExportStatus, + createExtraKeyHandler, +} from '../../../lib/pooling'; + +import { runChild } from './worker'; +import { + computeReceiptsFolder, + computeSchemaFile, + ExportManager, + writeFailingUpdatesCsv, + type FailingUpdateRow, +} from './artifacts'; +import { applyReceiptSummary } from './artifacts/receipts'; +import { buildCommonOpts } from './buildTaskOptions'; +import { + AnyTotals, + isUploadModeTotals, + isCheckModeTotals, + uploadPreferencesPlugin, +} from './ui'; + +/** + * A unit of work: instructs a worker to upload (or check) a single CSV file. + */ +export type UploadPreferencesTask = { + /** Absolute path of the CSV file to process. */ + filePath: string; + /** Command/worker options shared across tasks (built from CLI flags). */ + options: ReturnType; +}; + +/** + * Per-worker progress snapshot emitted by the worker. + * This mirrors the previous IPC progress payload for this command. + */ +export type UploadPreferencesProgress = { + /** File currently being processed. */ + filePath: string; + /** New successes since the last progress message (used to compute rates). */ + successDelta?: number; + /** Cumulative successes so far for the current file. */ + successTotal?: number; + /** Optional total row count for the file (if known). */ + fileTotal?: number; +}; + +/** + * Final result for a single file. + */ +export type UploadPreferencesResult = { + /** Success flag for the file. */ + ok: boolean; + /** File this result pertains to. */ + filePath: string; + /** Optional path to the worker-generated receipt file. */ + receiptFilepath?: string; + /** Optional error string when `ok === false`. */ + error?: string; +}; + +/** + * Aggregate totals shown in the dashboard. + * This command supports two modes: + * - upload mode totals + * - check mode totals + * + * The union is already defined in `./ui` as `AnyTotals`. + */ +type Totals = AnyTotals; + +/** + * Returns the current module's path so the worker pool knows what file to re-exec. + * In Node ESM, __filename is undefined, so we fall back to argv[1]. + * + * @returns The current module's path as a string + */ +function getCurrentModulePath(): string { + if (typeof __filename !== 'undefined') { + return __filename as unknown as string; + } + return process.argv[1]; +} export interface UploadPreferencesCommandFlags { auth: string; partition: string; sombraAuth?: string; transcendUrl: string; - file?: string; - directory?: string; + directory: string; dryRun: boolean; skipExistingRecordCheck: boolean; - receiptFileDir: string; + receiptFileDir?: string; + schemaFilePath?: string; skipWorkflowTriggers: boolean; forceTriggerWorkflows: boolean; skipConflictUpdates: boolean; isSilent: boolean; attributes: string; receiptFilepath: string; - concurrency: number; + concurrency?: number; + uploadConcurrency: number; + maxChunkSize: number; + rateLimitRetryDelay: number; + uploadLogInterval: number; + downloadIdentifierConcurrency: number; + maxRecordsToReceipt: number; + regenerate: boolean; + chunkSizeMB: number; + viewerMode: boolean; } +/** + * Parent entrypoint for uploading/checking many preference CSVs in parallel. + * + * Flow: + * 1) Validate inputs & discover CSV files (exit if none). + * 2) Compute pool size from `--concurrency` or CPU heuristic. + * 3) Build `common` worker options and task queue (one task per file). + * 4) Define `PoolHooks` for task scheduling, progress, and results aggregation. + * 5) Launch the pool with `runPool`, rendering via `dashboardPlugin(uploadPreferencesPlugin)`. + * + * All log exporting / artifact work that used to be done in “viewer mode” can be handled + * in `postProcess` using the new log context from the runner. + * + * @param flags - CLI options for the run. + * @returns Promise that resolves when the pool completes. + */ export async function uploadPreferences( this: LocalContext, - { + flags: UploadPreferencesCommandFlags, +): Promise { + const { auth, partition, sombraAuth, transcendUrl, - file = '', directory, - dryRun, skipExistingRecordCheck, receiptFileDir, - skipWorkflowTriggers, - forceTriggerWorkflows, - skipConflictUpdates, - isSilent, - attributes, + schemaFilePath, concurrency, - }: UploadPreferencesCommandFlags, -): Promise { - if (!!directory && !!file) { - logger.error( - colors.red( - 'Cannot provide both a directory and a file. Please provide only one.', - ), - ); - this.process.exit(1); - } - - if (!file && !directory) { - logger.error( - colors.red( - 'A file or directory must be provided. Please provide one using --file=./preferences.csv or --directory=./preferences', - ), - ); - this.process.exit(1); - } + regenerate, + chunkSizeMB, + viewerMode, + } = flags; + /* 1) Validate & find inputs */ + let files = collectCsvFilesOrExit(directory, this); doneInputValidation(this.process.exit); - const files: string[] = []; - - if (directory) { - try { - const filesInDirectory = readdirSync(directory); - const csvFiles = filesInDirectory.filter((file) => file.endsWith('.csv')); - - if (csvFiles.length === 0) { - logger.error( - colors.red(`No CSV files found in directory: ${directory}`), - ); - this.process.exit(1); + /* 1b) Auto-chunk oversized files */ + if (chunkSizeMB > 0) { + const chunkThreshold = chunkSizeMB * 1024 * 1024; + const oversized = files.filter((f) => { + try { + return statSync(f).size > chunkThreshold; + } catch { + return false; } - - // Add full paths for each CSV file - files.push(...csvFiles.map((file) => join(directory, file))); - } catch (err) { - logger.error(colors.red(`Failed to read directory: ${directory}`)); - logger.error(colors.red((err as Error).message)); - this.process.exit(1); - } - } else { - try { - // Verify file exists and is a CSV - if (!file.endsWith('.csv')) { - logger.error(colors.red('File must be a CSV file')); - this.process.exit(1); + }); + if (oversized.length > 0) { + logger.info( + colors.yellow( + `Auto-chunking ${oversized.length} file(s) exceeding ${chunkSizeMB}MB...`, + ), + ); + for (const file of oversized) { + await chunkOneCsvFile({ + filePath: file, + outputDir: directory, + clearOutputDir: false, + chunkSizeMB, + // eslint-disable-next-line @typescript-eslint/no-empty-function + onProgress: () => {}, + }); } - files.push(file); - } catch (err) { - logger.error(colors.red(`Failed to access file: ${file}`)); - logger.error(colors.red((err as Error).message)); - this.process.exit(1); + // Re-collect after chunking (new chunk files will be in the directory) + files = collectCsvFilesOrExit(directory, this); } } @@ -109,36 +200,202 @@ export async function uploadPreferences( `Processing ${files.length} consent preferences files for partition: ${partition}`, ), ); - logger.debug(`Files to process: ${files.join(', ')}`); + logger.debug( + `Files to process:\n${files.slice(0, 10).join('\n')}\n${ + files.length > 10 ? `... and ${files.length - 10} more` : '' + }`, + ); if (skipExistingRecordCheck) { - logger.info( - colors.bgYellow( - `Skipping existing record check: ${skipExistingRecordCheck}`, - ), - ); + logger.info(colors.bgYellow('Skipping existing record check: true')); } - await map( - files, - async (filePath) => { - const fileName = basename(filePath).replace('.csv', ''); - await uploadPreferenceManagementPreferencesInteractive({ - receiptFilepath: join(receiptFileDir, `${fileName}-receipts.json`), + const receiptsFolder = computeReceiptsFolder(receiptFileDir, directory); + const schemaFile = computeSchemaFile(schemaFilePath, directory, files[0]); + + /* 1c) Auto-configure if needed */ + const configExists = existsSync(schemaFile); + if (!configExists || regenerate) { + if (!configExists && !regenerate) { + logger.error( + colors.red( + `No config file found at: ${schemaFile}\n` + + "Run 'transcend consent configure-preference-upload' to create one, " + + 'or pass --regenerate to run the interactive setup now.', + ), + ); + this.process.exit(1); + } + if (regenerate) { + logger.info(colors.yellow('Running interactive config generation...')); + const { configurePreferenceUpload } = await import( + '../configure-preference-upload/impl' + ); + await configurePreferenceUpload.call(this, { auth, sombraAuth, - file: filePath, - partition, transcendUrl, - skipConflictUpdates, - skipWorkflowTriggers, - skipExistingRecordCheck, - isSilent, - dryRun, - attributes: splitCsvToList(attributes), - forceTriggerWorkflows, + directory, + schemaFilePath, + partition, + }); + } + } + + /* 2) Pool size */ + const { poolSize, cpuCount } = computePoolSize(concurrency, files.length); + + /* 3) Build shared worker options and queue */ + const common = buildCommonOpts(flags, schemaFile, receiptsFolder); + + // FIFO queue: one task per file + const queue = files.map((filePath) => ({ + filePath, + options: common, + })); + + // Dashboard artifacts/export status (shown during renders) + // inside uploadPreferences() before runPool call: + const exportMgr = new ExportManager(receiptsFolder); + const exportStatus = buildExportStatus(receiptsFolder); + const failingUpdatesMem: FailingUpdateRow[] = []; + + /* 4) Hooks */ + const hooks: PoolHooks< + UploadPreferencesTask, + UploadPreferencesProgress, + UploadPreferencesResult, + Totals + > = { + nextTask: () => queue.shift(), + taskLabel: (t) => t.filePath, + initTotals: () => + !common.dryRun + ? ({ + mode: 'upload', + success: 0, + skipped: 0, + error: 0, + errors: {}, + } as Totals) + : ({ + mode: 'check', + totalPending: 0, + pendingConflicts: 0, + pendingSafe: 0, + skipped: 0, + } as Totals), + initSlotProgress: () => undefined, + onProgress: (totals) => totals, + onResult: (totals, res) => { + applyReceiptSummary({ + receiptsFolder: common.receiptsFolder, + filePath: res.filePath, + receiptFilepath: res.receiptFilepath, + agg: totals, + dryRun: common.dryRun, + failingUpdatesMem, }); + return { totals, ok: !!res.ok }; }, - { concurrency }, - ); + exportStatus: () => exportStatus, + /** + * Finalization after all workers exit. + * With the new runner you also receive: + * - logDir + * - logsBySlot (Map) + * - startedAt / finishedAt + * - getLogPathsForSlot(id) + * - viewerMode (boolean) + * + * @param options - Options with logDir, logsBySlot, startedAt, finishedAt, etc. + */ + postProcess: async ({ totals, logsBySlot }) => { + try { + // Persist failing updates CSV next to receipts/logDir. + const fPath = join(receiptsFolder, 'failing-updates.csv'); + await writeFailingUpdatesCsv(failingUpdatesMem, fPath); + exportStatus.failuresCsv = { + path: fPath, + savedAt: Date.now(), + exported: true, + }; + + // Save logs + await Promise.all([ + exportMgr.exportCombinedLogs(logsBySlot, 'error'), + exportMgr.exportCombinedLogs(logsBySlot, 'warn'), + exportMgr.exportCombinedLogs(logsBySlot, 'info'), + exportMgr.exportCombinedLogs(logsBySlot, 'all'), + ]); + + // Summarize totals to stdout (parity with the old implementation) + if (isUploadModeTotals(totals)) { + logger.info( + colors.green( + `All done. Success:${totals.success.toLocaleString()} ` + + `Skipped:${totals.skipped.toLocaleString()} ` + + `Error:${totals.error.toLocaleString()}`, + ), + ); + } else if (isCheckModeTotals(totals)) { + logger.info( + colors.green( + `All done. Pending:${totals.totalPending.toLocaleString()} ` + + `PendingConflicts:${totals.pendingConflicts.toLocaleString()} ` + + `PendingSafe:${totals.pendingSafe.toLocaleString()} ` + + `Skipped:${totals.skipped.toLocaleString()}`, + ), + ); + } + } catch (err: unknown) { + logger.error(colors.red(`Failed to export artifacts: ${String(err)}`)); + } + }, + }; + + /* 5) Launch the pool runner with our hooks and dashboard plugin. */ + await runPool< + UploadPreferencesTask, + UploadPreferencesProgress, + UploadPreferencesResult, + Totals + >({ + title: `Upload Preferences - ${directory}`, + baseDir: directory || receiptsFolder || process.cwd(), + childFlag: CHILD_FLAG, + childModulePath: getCurrentModulePath(), + poolSize, + cpuCount, + filesTotal: files.length, + hooks, + viewerMode, + render: (input) => dashboardPlugin(input, uploadPreferencesPlugin), + extraKeyHandler: ({ logsBySlot, repaint, setPaused }) => + createExtraKeyHandler({ + logsBySlot, + repaint, + setPaused, + exportMgr, // enables E/W/I/A + exportStatus, // keeps the exports panel updated + custom: { + F: async ({ noteExport, say }) => { + const fPath = join(receiptsFolder, 'failing-updates.csv'); + await writeFailingUpdatesCsv(failingUpdatesMem, fPath); + say(`\nWrote failing updates CSV to: ${fPath}`); + noteExport('failuresCsv', fPath); + }, + }, + }), + }); +} + +/* ------------------------------------------------------------------------------------------------- + * If invoked directly as a child process, enter worker loop + * ------------------------------------------------------------------------------------------------- */ +if (process.argv.includes(CHILD_FLAG)) { + runChild().catch((err) => { + logger.error(err); + process.exit(1); + }); } diff --git a/src/commands/consent/upload-preferences/readme.ts b/src/commands/consent/upload-preferences/readme.ts index 953bfdf5..409c1460 100644 --- a/src/commands/consent/upload-preferences/readme.ts +++ b/src/commands/consent/upload-preferences/readme.ts @@ -9,7 +9,7 @@ const examples = buildExamples( 'Upload consent preferences to partition key `4d1c5daa-90b7-4d18-aa40-f86a43d2c726`', flags: { auth: '$TRANSCEND_API_KEY', - file: './preferences.csv', + directory: './', partition: '4d1c5daa-90b7-4d18-aa40-f86a43d2c726', }, }, @@ -18,7 +18,7 @@ const examples = buildExamples( flags: { auth: '$TRANSCEND_API_KEY', partition: '4d1c5daa-90b7-4d18-aa40-f86a43d2c726', - file: './preferences.csv', + directory: './csvs', dryRun: true, skipWorkflowTriggers: true, skipConflictUpdates: true, @@ -33,7 +33,7 @@ const examples = buildExamples( flags: { auth: '$TRANSCEND_API_KEY', partition: '4d1c5daa-90b7-4d18-aa40-f86a43d2c726', - file: './preferences.csv', + directory: './folder', transcendUrl: 'https://api.us.transcend.io', }, }, diff --git a/src/commands/consent/upload-preferences/schemaState.ts b/src/commands/consent/upload-preferences/schemaState.ts new file mode 100644 index 00000000..1e7a28b1 --- /dev/null +++ b/src/commands/consent/upload-preferences/schemaState.ts @@ -0,0 +1,102 @@ +import { PersistedState } from '@transcend-io/persisted-state'; +import { + FileFormatState, + type ColumnIdentifierMap, + type ColumnMetadataMap, + type ColumnPurposeMap, +} from '../../../lib/preference-management'; +import { + retrySamePromise, + type RetryPolicy, +} from '../../../lib/helpers/retrySamePromise'; + +export interface PreferenceSchemaInterface { + /** Name of the column used as timestamp, if any */ + getTimestampColumn(): string | undefined; + /** CSV column name -> Purpose/Preference mapping */ + getColumnToPurposeName(): ColumnPurposeMap; + /** CSV column name -> Identifier mapping */ + getColumnToIdentifier(): ColumnIdentifierMap; + /** CSV column name -> Metadata key mapping */ + getColumnToMetadata(): ColumnMetadataMap | undefined; + /** CSV columns to ignore during upload */ + getColumnsToIgnore(): string[]; + /** The persisted cache */ // FIXME remove this + state: PersistedState; +} + +/** + * Build a schema state adapter holding CSV→purpose/identifier mappings. + * + * Retries creation of the underlying PersistedState with **exponential backoff** + * when the cache file cannot be parsed due to a transient write (e.g., empty or + * partially written file) indicated by "Unexpected end of JSON input". + * + * @param filepath - Path to the schema cache file + * @returns Schema state port with strongly-named methods + */ +export async function makeSchemaState( + filepath: string, +): Promise { + // Initial state used if file does not exist or is empty. + const initial = { + columnToPurposeName: {}, + lastFetchedAt: new Date().toISOString(), + columnToIdentifier: {}, + } as const; + + // Retry policy: only retry on the specific JSON truncation message. + const policy: RetryPolicy = { + maxAttempts: 5, + delayMs: 50, // start small + shouldRetry: (_status, message) => + typeof message === 'string' && + /Unexpected end of JSON input/i.test(message ?? ''), + }; + + // Exponential backoff with a reasonable cap. + const MAX_DELAY_MS = 2_000; + + try { + const state = await retrySamePromise( + async () => { + // Wrap constructor in a Promise so thrown sync errors reject properly. + const result = await Promise.resolve( + new PersistedState(filepath, FileFormatState, initial), + ); + return result; + }, + policy, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (note) => { + // Double the delay on each backoff (cap at MAX_DELAY_MS) + policy.delayMs = Math.min( + MAX_DELAY_MS, + Math.max(1, policy.delayMs * 2), + ); + // Optional: uncomment for local diagnostics + // process.stderr.write(`[schemaState] ${note}; next delay=${policy.delayMs}ms\n`); + }, + ); + + return { + state, + getTimestampColumn: (): string | undefined => + state.getValue('timestampColumn'), + getColumnToPurposeName: (): ColumnPurposeMap => + state.getValue('columnToPurposeName'), + getColumnToIdentifier: (): ColumnIdentifierMap => + state.getValue('columnToIdentifier'), + getColumnToMetadata: (): ColumnMetadataMap | undefined => + state.getValue('columnToMetadata'), + getColumnsToIgnore: (): string[] => + state.getValue('columnsToIgnore') ?? [], + }; + } catch (err) { + throw new Error( + `Failed to create schema state from ${filepath}: ${ + err instanceof Error ? err.message : String(err) + }`, + ); + } +} diff --git a/src/commands/consent/upload-preferences/upload/batchUploader.ts b/src/commands/consent/upload-preferences/upload/batchUploader.ts index edd19e6b..88ba735a 100644 --- a/src/commands/consent/upload-preferences/upload/batchUploader.ts +++ b/src/commands/consent/upload-preferences/upload/batchUploader.ts @@ -14,8 +14,6 @@ type Entry = [string, PreferenceUpdateItem]; export interface BatchUploadPreferenceOptions { /** When true - don't trigger workflow runs */ skipWorkflowTriggers: boolean; - /** Always trigger a workflow run regardless of whether a purpose changed */ - forceTriggerWorkflows: boolean; } export interface BatchUploaderDeps { @@ -76,6 +74,7 @@ export async function uploadChunkWithSplit( // 2) For retryable statuses, attempt in-place retries without splitting. const isSoftRateLimit = + // FIXME status === 400 && /slow down|please try again shortly|Throughput exceeds the current/i.test( msg, diff --git a/src/commands/consent/upload-preferences/upload/buildInteractiveUploadPlan.ts b/src/commands/consent/upload-preferences/upload/buildInteractiveUploadPlan.ts new file mode 100644 index 00000000..f88f1567 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/buildInteractiveUploadPlan.ts @@ -0,0 +1,187 @@ +import colors from 'colors'; +import * as t from 'io-ts'; +import type { Got } from 'got'; +import { logger } from '../../../../logger'; +import { parseAttributesFromString, readCsv } from '../../../../lib/requests'; +import { + loadReferenceData, + type PreferenceUploadReferenceData, +} from './loadReferenceData'; +import { type PreferenceReceiptsInterface } from '../artifacts/receipts/receiptsState'; +import { type PreferenceSchemaInterface } from '../schemaState'; +import { parsePreferenceManagementCsvWithCache } from '../../../../lib/preference-management'; +import type { + FileFormatState, + PendingSafePreferenceUpdates, + PendingWithConflictPreferenceUpdates, + SkippedPreferenceUpdates, +} from '../../../../lib/preference-management/codecs'; +import type { FormattedAttribute } from '../../../../lib/graphql/formatAttributeValues'; +import type { GraphQLClient } from 'graphql-request'; +import { limitRecords } from '../../../../lib/helpers'; +import { transformCsv } from './transform'; +import type { PreferenceUploadProgress } from './types'; + +export interface InteractiveUploadPreferencePlan { + /** CSV file path to load preference records from */ + file: string; + /** Partition key used throughout the upload */ + partition: string; + + /** Parsed "workflow attributes" (Key:Value pairs) */ + parsedAttributes: FormattedAttribute[]; + /** Reference data for transforming rows → PreferenceUpdateItem payloads */ + references: PreferenceUploadReferenceData; + /** Result sets derived entirely from validation/pre-processing */ + result: { + pendingSafeUpdates: PendingSafePreferenceUpdates; + pendingConflictUpdates: PendingWithConflictPreferenceUpdates; + skippedUpdates: SkippedPreferenceUpdates; + }; + + /** Snapshot of schema mappings to use during payload building */ + schema: Omit; +} + +/** + * Build an InteractiveUploadPreferencePlan by performing *validation-only* work. + * + * This performs *all pre-processing and validation* up front: + * - Reads the CSV + * - Validates timestamp column and identifier mappings (schema cache) + * - Maps columns to purposes/preferences + * - Loads current consent records (unless skipExistingRecordCheck=true) + * - Computes: pendingSafeUpdates / pendingConflictUpdates / skippedUpdates + * - Seeds the receipts file with snapshots of the pending sets + * + * The returned plan can be passed to `interactivePreferenceUploaderFromPlan` + * to perform the actual upload, keeping responsibilities cleanly separated. + * + * @param opts - Input options required to parse & validate the CSV + * @returns A fully-resolved plan ready to pass to the uploader + */ +export async function buildInteractiveUploadPreferencePlan({ + sombra, + client, + file, + partition, + receipts, + schema, + skipExistingRecordCheck = false, + forceTriggerWorkflows = false, + allowedIdentifierNames, + downloadIdentifierConcurrency = 30, + identifierDownloadLogInterval = 10000, + maxRecordsToReceipt = 50, + identifierColumns, + columnsToIgnore = [], + attributes = [], + nonInteractive = false, + onProgress, +}: { + /** Transcend GraphQL client */ + client: GraphQLClient; + /** Sombra instance to make requests to */ + sombra: Got; + /** CSV file to process */ + file: string; + /** Partition used to scope reads/writes */ + partition: string; + /** Receipts snapshots */ + receipts: PreferenceReceiptsInterface; + /** Schema information */ + schema: PreferenceSchemaInterface; + /** Skip the preflight existing-record check for speed (initial loads only) */ + skipExistingRecordCheck?: boolean; + /** Force workflow triggers; requires existing consent records for all rows */ + forceTriggerWorkflows?: boolean; + /** Concurrency for downloading identifiers */ + downloadIdentifierConcurrency?: number; + /** Allowed identifier names configured for the org/run */ + allowedIdentifierNames: string[]; + /** CSV columns that correspond to identifiers */ + identifierColumns: string[]; + /** CSV columns to ignore entirely */ + columnsToIgnore?: string[]; + /** Extra workflow attributes (pre-parsed Key:Value strings) */ + attributes?: string[]; + /** Interval to log when downloading identifiers */ + identifierDownloadLogInterval?: number; + /** Maximum records to write out to the receipt file */ + maxRecordsToReceipt?: number; + /** When true, throw instead of prompting (for worker processes) */ + nonInteractive?: boolean; + /** on progress callback */ + onProgress?: (info: PreferenceUploadProgress) => void; +}): Promise { + const parsedAttributes = parseAttributesFromString(attributes); + + // Informative status about prior runs (resume/diagnostics) + const failing = receipts.getFailing(); + const pending = receipts.getPending(); + logger.info( + colors.magenta( + 'Restored cache:\n' + + `${Object.values(failing).length} failing requests queued for retry\n` + + `${Object.values(pending).length} pending requests to process\n` + + `Processing file: ${file}\n`, + ), + ); + + // Build clients + reference data (purposes/topics/identifiers) + const references = await loadReferenceData(client); + + // Read in the file + logger.info(colors.magenta(`Reading in file: "${file}"`)); + const preferences = transformCsv(readCsv(file, t.record(t.string, t.string))); + logger.info(colors.magenta(`Read in ${preferences.length} rows`)); + + // Parse & validate CSV → derive safe/conflict/skipped sets (no uploading) + const parsed = await parsePreferenceManagementCsvWithCache( + preferences, + { + file, + purposeSlugs: references.purposes.map((x) => x.trackingType), + preferenceTopics: references.preferenceTopics, + sombra, + partitionKey: partition, + skipExistingRecordCheck, + forceTriggerWorkflows, + orgIdentifiers: references.identifiers, + allowedIdentifierNames, + downloadIdentifierConcurrency, + identifierColumns, + identifierDownloadLogInterval, + columnsToIgnore, + onProgress, + nonInteractive, + }, + schema.state, + ); + + // Persist small snapshots of the pending sets into receipts for resumability. + await receipts.setPendingSafe( + limitRecords(parsed.pendingSafeUpdates, maxRecordsToReceipt), + ); + await receipts.setSkipped(parsed.skippedUpdates); + await receipts.setPendingConflict(parsed.pendingConflictUpdates); + + // Return a compact, self-contained plan for the upload stage. + return { + file, + partition, + parsedAttributes, + references, + result: { + pendingSafeUpdates: parsed.pendingSafeUpdates, + pendingConflictUpdates: parsed.pendingConflictUpdates, + skippedUpdates: parsed.skippedUpdates, + }, + schema: { + timestampColumn: schema.getTimestampColumn(), + columnToPurposeName: schema.getColumnToPurposeName(), + columnToIdentifier: schema.getColumnToIdentifier(), + columnToMetadata: schema.getColumnToMetadata(), + }, + }; +} diff --git a/src/commands/consent/upload-preferences/upload/index.ts b/src/commands/consent/upload-preferences/upload/index.ts new file mode 100644 index 00000000..22d1a6e7 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/index.ts @@ -0,0 +1,6 @@ +export * from './types'; +export * from './loadReferenceData'; +export * from './buildInteractiveUploadPlan'; +export * from './batchUploader'; +export * from './transform'; +export * from './interactivePreferenceUploaderFromPlan'; diff --git a/src/commands/consent/upload-preferences/upload/interactivePreferenceUploaderFromPlan.ts b/src/commands/consent/upload-preferences/upload/interactivePreferenceUploaderFromPlan.ts new file mode 100644 index 00000000..246798e7 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/interactivePreferenceUploaderFromPlan.ts @@ -0,0 +1,367 @@ +/* eslint-disable no-param-reassign */ +import colors from 'colors'; +import Bluebird from 'bluebird'; +import { chunk, groupBy } from 'lodash-es'; +import { logger } from '../../../../logger'; +import { buildPendingUpdates } from './transform'; +import { uploadChunkWithSplit } from './batchUploader'; +import type { PreferenceUpdateItem } from '@transcend-io/privacy-types'; +import { RETRYABLE_BATCH_STATUSES } from '../../../../constants'; +import { extractErrorMessage, limitRecords } from '../../../../lib/helpers'; +import type { InteractiveUploadPreferencePlan } from './buildInteractiveUploadPlan'; +import type { PreferenceReceiptsInterface } from '../artifacts/receipts'; +import type { Got } from 'got'; +import type { PreferenceUploadProgress } from './types'; + +const { map: pMap } = Bluebird; + +/** + * Execute the upload using a pre-built InteractiveUploadPlan. + * + * This function performs *no CSV parsing or validation*. It: + * - Converts pre-validated safe/conflict sets into PreferenceUpdateItem payloads + * - Batches + uploads with retry/split semantics + * - Writes progress snapshots to receipts + * + * @param plan - Output of `buildInteractiveUploadPlan` + * @param options - Upload-only options (batch size, concurrency, etc.) + */ +export async function interactivePreferenceUploaderFromPlan( + { + partition, + parsedAttributes, + references: { purposes, preferenceTopics }, + result: { pendingSafeUpdates, pendingConflictUpdates }, + schema, + }: InteractiveUploadPreferencePlan, + { + receipts, + sombra, + dryRun = false, + isSilent = true, + skipWorkflowTriggers = false, + skipConflictUpdates = false, + forceTriggerWorkflows = false, + uploadLogInterval = 1_000, + maxChunkSize = 25, + uploadConcurrency = 20, + maxRecordsToReceipt = 50, + onProgress, + }: { + /** Receipts interface */ + receipts: PreferenceReceiptsInterface; + /** Sombra got instance */ + sombra: Got; + /** Compute-only mode: do not PUT; still writes receipts snapshots */ + dryRun?: boolean; + /** Avoid downstream visible notifications */ + isSilent?: boolean; + /** Skip workflow triggers for each update */ + skipWorkflowTriggers?: boolean; + /** Only upload safe updates (ignore conflicts entirely) */ + skipConflictUpdates?: boolean; + /** Force triggering workflows for each update (use sparingly) */ + forceTriggerWorkflows?: boolean; + /** Log/persist cadence for progress updates */ + uploadLogInterval?: number; + /** Max records in a single batch PUT to v1/preferences */ + maxChunkSize?: number; + /** Max concurrent batch tasks at once */ + uploadConcurrency?: number; + /** Maximum records to write out to the receipt file */ + maxRecordsToReceipt?: number; + /** on progress callback */ + onProgress?: (info: PreferenceUploadProgress) => void; + }, +): Promise { + // Build final payloads (pure transform; no network) + const pendingUpdates: Record = + buildPendingUpdates({ + safe: pendingSafeUpdates, + conflicts: pendingConflictUpdates, + skipConflictUpdates, + timestampColumn: schema.timestampColumn, + columnToPurposeName: schema.columnToPurposeName, + columnToIdentifier: schema.columnToIdentifier, + columnToMetadata: schema.columnToMetadata, + preferenceTopics, + purposes, + partition, + workflowAttrs: parsedAttributes, + isSilent, + skipWorkflowTriggers, + forceTriggerWorkflows, + }); + + // Seed pending uploads into receipts (first 10 expanded to keep file size small) + await receipts.setPending(limitRecords(pendingUpdates, maxRecordsToReceipt)); + + // Dry-run exits before any network calls + if (dryRun) { + logger.info( + colors.green( + `Dry run complete — ${ + Object.values(pendingUpdates).length + } pending updates. ` + + `See receipts file: ${receipts.receiptsFilepath}`, + ), + ); + return; + } + + logger.info( + colors.magenta( + `Uploading ${ + Object.values(pendingUpdates).length + } preferences to partition: ${partition}. Concurrency: ${uploadConcurrency}, Max Chunk Size: ${maxChunkSize}` + + `, Max Records to Receipt: ${maxRecordsToReceipt}`, + ), + ); + + const t0 = Date.now(); + let uploadedCount = 0; + + // reset failing + await receipts.setFailing({}); + + // Get successful and filtered entries + const successful = receipts.getSuccessful(); + const allEntries = Object.entries(pendingUpdates) as Array< + [string, PreferenceUpdateItem] + >; + const filtered = allEntries.filter(([userId]) => !successful[userId]); + const fileTotal = filtered.length; + + onProgress?.({ + successDelta: 0, + successTotal: 0, + fileTotal, + }); + + if (filtered.length === 0) { + logger.warn( + colors.yellow( + `No pending updates to upload (all ${allEntries.length} are already marked successful).`, + ), + ); + await receipts.resetPending(); + return; + } + + if (filtered.length < allEntries.length) { + logger.warn( + colors.yellow( + `Filtered ${ + allEntries.length - filtered.length + } already-successful updates. ` + + `${filtered.length} remain to upload.`, + ), + ); + } + + // Retry policy for "retry in place" statuses + const retryPolicy = { + maxAttempts: 5, + delayMs: 10_000, + shouldRetry: (status?: number) => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + !!status && RETRYABLE_BATCH_STATUSES.has(status as any), + }; + + /** + * Mark a batch as successfully uploaded. Persists progress periodically based on + * `uploadLogInterval` to throttle IO and keep receipts compact. + * + * @param entries - Entries to mark as successful + */ + const markSuccessFor = async ( + entries: Array<[string, PreferenceUpdateItem]>, + ): Promise => { + const successfulUpdates = receipts.getSuccessful(); + + for (const [userId] of entries) { + successfulUpdates[userId] = true; + delete pendingUpdates[userId]; + // Also keep the safe/conflict mirrors in sync in case of resume + delete pendingSafeUpdates[userId]; + delete pendingConflictUpdates[userId]; + } + uploadedCount += entries.length; + onProgress?.({ + successDelta: entries.length, + successTotal: uploadedCount, + fileTotal, + }); + + const shouldLog = + uploadedCount % uploadLogInterval === 0 || + Math.floor((uploadedCount - entries.length) / uploadLogInterval) < + Math.floor(uploadedCount / uploadLogInterval); + + if (shouldLog) { + logger.info( + colors.green( + `Uploaded ${uploadedCount}/${filtered.length} user preferences to partition ${partition}`, + ), + ); + await receipts.setSuccessful(successfulUpdates); + + await receipts.setPending( + limitRecords(pendingUpdates, maxRecordsToReceipt), + ); + await receipts.setPendingSafe( + limitRecords(pendingSafeUpdates, maxRecordsToReceipt), + ); + await receipts.setPendingConflict(pendingConflictUpdates); + } + }; + + /** + * Mark a single record failure with a concise, actionable error message. + * Mirrors are kept in sync to avoid reprocessing this row on resume. + * + * @param userId - User ID to mark as failed + * @param update - The update item that failed + * @param err - The error that occurred + */ + const markFailureForSingle = async ( + userId: string, + update: PreferenceUpdateItem, + err: unknown, + ): Promise => { + const msg = extractErrorMessage(err); + logger.error( + colors.red( + `Failed to upload preferences for ${userId} (partition=${partition}): ${msg}`, + ), + ); + const failing = receipts.getFailing(); + failing[userId] = { + uploadedAt: new Date().toISOString(), + update, + error: msg.includes('Identifier email did not pass validation') + ? 'Identifier email did not pass validation' + : msg, + }; + + delete pendingUpdates[userId]; + delete pendingSafeUpdates[userId]; + delete pendingConflictUpdates[userId]; + + await receipts.setFailing(failing); + }; + + /** + * Mark an entire batch as failed (used when we exhaust in-place retries for + * retryable statuses). Delegates to the single-failure handler per entry. + * + * @param entries - Entries to mark as failed + * @param err - The error that occurred + */ + const markFailureForBatch = async ( + entries: Array<[string, PreferenceUpdateItem]>, + err: unknown, + ): Promise => { + for (const [userId, update] of entries) { + await markFailureForSingle(userId, update, err); + } + }; + + const { + valid = [], + invalidAt = [], + invalidSlash = [], + } = groupBy(filtered, ([, update]) => + !update.identifiers + ? 'valid' + : update.identifiers.some( + (id) => id.name === 'email' && !id.value.includes('@'), + ) + ? 'invalidAt' + : update.identifiers.some( + (id) => id.name === 'email' && id.value.includes('/'), + ) + ? 'invalidSlash' + : 'valid', + ); + + if (invalidAt.length > 0) { + await markFailureForBatch( + invalidAt, + new Error('Invalid email format - missing @'), + ); + } + if (invalidSlash.length > 0) { + await markFailureForBatch( + invalidSlash, + new Error('Invalid email format - email contains a slash (/)'), + ); + } + + if (valid.length === 0) { + logger.warn(colors.yellow('No updates to upload after validating emails.')); + await receipts.resetPending(); + return; + } + + // Kick off uploads in chunks; each chunk may be recursively split on errors + const chunks = chunk(valid, maxChunkSize); + await pMap( + chunks, + async (currentChunk) => { + await uploadChunkWithSplit( + currentChunk, + { + // Minimal transport surface for the uploader + putBatch: async (updates, opts) => { + await sombra + .put('v1/preferences', { + json: { + records: updates, + skipWorkflowTriggers: opts.skipWorkflowTriggers, + }, + }) + .json(); + }, + retryPolicy, + options: { skipWorkflowTriggers }, + isRetryableStatus: (s) => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + !!s && RETRYABLE_BATCH_STATUSES.has(s as any), + }, + { + onSuccess: markSuccessFor, + onFailureSingle: ([userId, update], err) => + markFailureForSingle(userId, update, err), + onFailureBatch: markFailureForBatch, + }, + ); + }, + { concurrency: uploadConcurrency }, + ); + + // Finalize receipts: persist success map and clear pending mirrors + await receipts.setSuccessful(receipts.getSuccessful()); + await receipts.resetPending(); + + const elapsedSec = (Date.now() - t0) / 1000; + logger.info( + colors.green( + `Successfully uploaded ${ + Object.keys(receipts.getSuccessful()).length + } user preferences ` + + `to partition ${partition} in "${elapsedSec}" seconds!`, + ), + ); + + const remainingFailures = Object.values(receipts.getFailing()).length; + if (remainingFailures > 0) { + logger.error( + colors.red( + `There are ${remainingFailures} requests that failed to upload. ` + + `Please check the receipts file for details: ${receipts.receiptsFilepath}`, + ), + ); + } +} +/* eslint-enable no-param-reassign */ diff --git a/src/commands/consent/upload-preferences/upload/tests/batchUploader.test.ts b/src/commands/consent/upload-preferences/upload/tests/batchUploader.test.ts index 831b64ee..2b41296d 100644 --- a/src/commands/consent/upload-preferences/upload/tests/batchUploader.test.ts +++ b/src/commands/consent/upload-preferences/upload/tests/batchUploader.test.ts @@ -87,7 +87,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 3, delayMs: 10, shouldRetry: () => false }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn(() => false), }; @@ -136,7 +136,7 @@ describe('uploadChunkWithSplit', () => { delayMs: 1, shouldRetry: () => true, // retryable by default }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn((s?: number) => s === 503), }; @@ -177,7 +177,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 2, delayMs: 1, shouldRetry: () => true }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn((s?: number) => s === 429), }; @@ -226,7 +226,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 1, delayMs: 1, shouldRetry: () => false }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn(() => false), }; @@ -266,7 +266,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 1, delayMs: 1, shouldRetry: () => false }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn(() => false), }; @@ -301,7 +301,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 2, delayMs: 1, shouldRetry: () => true }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn(() => false), // not retryable by status, but soft-rate-limit triggers retry anyway }; @@ -340,7 +340,7 @@ describe('uploadChunkWithSplit', () => { const deps: BatchUploaderDeps = { putBatch, retryPolicy: { maxAttempts: 2, delayMs: 1, shouldRetry: () => true }, - options: { skipWorkflowTriggers: false, forceTriggerWorkflows: false }, + options: { skipWorkflowTriggers: false }, isRetryableStatus: vi.fn(() => false), }; diff --git a/src/commands/consent/upload-preferences/upload/transform/buildPendingUpdates.ts b/src/commands/consent/upload-preferences/upload/transform/buildPendingUpdates.ts new file mode 100644 index 00000000..64084bf3 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/transform/buildPendingUpdates.ts @@ -0,0 +1,144 @@ +/** + * Module: transform/buildPendingUpdates + * + * Pure transformation from parsed CSV rows + schema mappings into + * PreferenceUpdateItem payloads, ready for upload. + */ +import type { PreferenceUpdateItem } from '@transcend-io/privacy-types'; +import type { + PreferenceTopic, + FormattedAttribute, + Purpose, +} from '../../../../../lib/graphql'; +import { + getPreferenceIdentifiersFromRow, + getPreferenceUpdatesFromRow, + getPreferenceMetadataFromRow, + NONE_PREFERENCE_MAP, + type ColumnIdentifierMap, + type ColumnMetadataMap, + type ColumnPurposeMap, + type PendingSafePreferenceUpdates, + type PendingWithConflictPreferenceUpdates, +} from '../../../../../lib/preference-management'; + +export interface BuildPendingParams { + /** Safe updates keyed by user/primaryKey */ + safe: PendingSafePreferenceUpdates; + /** Conflict updates keyed by user/primaryKey (value.row contains row data) */ + conflicts: PendingWithConflictPreferenceUpdates; + /** Only upload safe updates (ignore conflicts entirely) */ + skipConflictUpdates: boolean; + /** Name of the column to use as the preference timestamp (if available) */ + timestampColumn?: string; + /** CSV column -> purpose/preference mapping */ + columnToPurposeName: ColumnPurposeMap; + /** CSV column -> identifier mapping */ + columnToIdentifier: ColumnIdentifierMap; + /** CSV column -> metadata key mapping (optional) */ + columnToMetadata?: ColumnMetadataMap; + /** Full set of preference topics for resolving row → preference values */ + preferenceTopics: PreferenceTopic[]; + /** Full set of purposes for resolving slugs/trackingTypes */ + purposes: Purpose[]; + /** Partition to attribute to every record */ + partition: string; + /** Static attributes injected into workflow settings */ + workflowAttrs: FormattedAttribute[]; + /** If true, downstream should avoid user-visible notifications */ + isSilent: boolean; + /** If true, skip triggering workflows downstream */ + skipWorkflowTriggers: boolean; + /** If true, force trigger workflows even if preferences haven't changed */ + forceTriggerWorkflows: boolean; +} + +/** + * Convert parsed CSV rows into a map of PreferenceUpdateItem payloads. + * + * This function is *pure* (no IO, logging or state writes) and therefore easy to test. + * + * @param params - Transformation inputs + * @returns Map of primaryKey -> PreferenceUpdateItem + */ +export function buildPendingUpdates( + params: BuildPendingParams, +): Record { + const { + safe, + conflicts, + skipConflictUpdates, + timestampColumn, + columnToPurposeName, + columnToIdentifier, + columnToMetadata, + preferenceTopics, + purposes, + partition, + workflowAttrs, + isSilent, + skipWorkflowTriggers, + forceTriggerWorkflows, + } = params; + + // If conflicts are to be included, normalize the shape to match `safe` rows. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const merged: Record = skipConflictUpdates + ? { ...safe } + : { + ...safe, + ...Object.fromEntries( + Object.entries(conflicts).map(([id, v]) => [id, v.row]), + ), + }; + + const purposeSlugs = purposes.map((x) => x.trackingType); + const out: Record = {}; + + for (const [userId, row] of Object.entries(merged)) { + // Determine timestamp used for the store + const ts = + timestampColumn === NONE_PREFERENCE_MAP || !timestampColumn + ? new Date() + : new Date(row[timestampColumn]); + + // Resolve purposes/preferences from columns using schema mappings + topics + const updates = getPreferenceUpdatesFromRow({ + row, + columnToPurposeName, + preferenceTopics, + purposeSlugs, + }); + + // Resolve identifiers per row (email, phone, userId, etc.) + const identifiers = getPreferenceIdentifiersFromRow({ + row, + columnToIdentifier, + }); + + // Resolve metadata from mapped columns (if any) + const metadata = columnToMetadata + ? getPreferenceMetadataFromRow({ row, columnToMetadata }) + : undefined; + + out[userId] = { + identifiers, + partition, + timestamp: ts.toISOString(), + purposes: Object.entries(updates).map(([purpose, value]) => ({ + ...value, + purpose, + workflowSettings: { + attributes: workflowAttrs, + isSilent, + skipWorkflowTrigger: skipWorkflowTriggers, + forceTriggerWorkflow: forceTriggerWorkflows, + }, + })), + // Only include metadata if there are values + ...(metadata && metadata.length > 0 ? { metadata } : {}), + }; + } + + return out; +} diff --git a/src/commands/consent/upload-preferences/upload/transform/index.ts b/src/commands/consent/upload-preferences/upload/transform/index.ts new file mode 100644 index 00000000..cbc30d10 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/transform/index.ts @@ -0,0 +1,2 @@ +export * from './buildPendingUpdates'; +export * from './transformCsv'; diff --git a/src/commands/consent/upload-preferences/upload/transform/transformCsv.ts b/src/commands/consent/upload-preferences/upload/transform/transformCsv.ts new file mode 100644 index 00000000..81cb3321 --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/transform/transformCsv.ts @@ -0,0 +1,91 @@ +// FIXME +import colors from 'colors'; + +import { logger } from '../../../../../logger'; + +/** + * Add Transcend ID to preferences if email_id is present + * + * @param preferences - List of preferences + * @returns The updated preferences with Transcend ID added + */ +export function transformCsv( + preferences: Record[], +): Record[] { + // Add a transcendent ID to each preference if it doesn't already exist + const disallowedEmails = (process.env.EMAIL_LIST || '') + .split(',') + .map((email) => email.trim().toLowerCase()); + + const keys = Object.keys(preferences[0]); + const isUdp = + keys.includes('email_address') && + keys.includes('person_id') && + keys.includes('member_id') && + keys.includes('birth_dt'); + if (isUdp) { + logger.info( + colors.yellow( + 'Detected UDP format. Transforming preferences to include Transcend ID.', + ), + ); + + return preferences.map((pref) => { + const email = (pref.email_address || '').toLowerCase().trim(); + const emailAddress = + !email || disallowedEmails.includes(email) ? '' : pref.email_address; + const birthDate = new Date(pref.birth_dt); + if (!!pref.birth_dt || Number.isNaN(birthDate.getTime())) { + logger.warn( + colors.yellow(`No birth date for record: ${pref.email_address}`), + ); + } + return { + ...pref, + Minor: + !pref.birth_dt || Number.isNaN(birthDate.getTime()) + ? '' + : Date.now() - birthDate.getTime() < 1000 * 60 * 60 * 24 * 365 * 18 + ? 'True' + : 'False', + email_address: emailAddress, + // preference email address over transcendID + transcendID: emailAddress + ? '' + : pref.person_id && pref.person_id !== '-2' + ? pref.person_id + : pref.member_id, + }; + }); + } + + const isAdobe = + keys.includes('hashedCostcoID') && + keys.includes('address') && + keys.includes('lastUpdatedDate'); + if (isAdobe) { + logger.info(colors.green('Pre-processing as adobe ')); + return preferences.map((pref) => { + if (!pref.lastUpdatedDate) { + logger.warn( + colors.yellow( + `Record missing lastUpdatedDate - setting to now() - ${JSON.stringify( + pref, + )}`, + ), + ); + } + return { + ...pref, + lastUpdatedDate: pref.lastUpdatedDate + ? pref.lastUpdatedDate + : new Date('08/24/2025').toISOString(), + }; + }); + } + + logger.info(colors.green('No special transformations applied.')); + + // FIXME skip the emails + return preferences; +} diff --git a/src/commands/consent/upload-preferences/upload/types.ts b/src/commands/consent/upload-preferences/upload/types.ts new file mode 100644 index 00000000..cb1e1b1f --- /dev/null +++ b/src/commands/consent/upload-preferences/upload/types.ts @@ -0,0 +1,8 @@ +export interface PreferenceUploadProgress { + /** how many records just succeeded */ + successDelta: number; + /** cumulative successes in this file */ + successTotal: number; + /** total records that will be uploaded in this file */ + fileTotal: number; +} diff --git a/src/commands/consent/upload-preferences/worker.ts b/src/commands/consent/upload-preferences/worker.ts new file mode 100644 index 00000000..aaf7ead9 --- /dev/null +++ b/src/commands/consent/upload-preferences/worker.ts @@ -0,0 +1,202 @@ +import { mkdirSync, createWriteStream } from 'node:fs'; +import { join, dirname } from 'node:path'; +import { splitCsvToList } from '../../../lib/requests'; +import { + interactivePreferenceUploaderFromPlan, + buildInteractiveUploadPreferencePlan, +} from './upload'; +import { makeSchemaState } from './schemaState'; +import { makeReceiptsState } from './artifacts/receipts/receiptsState'; +import { + buildTranscendGraphQLClient, + createSombraGotInstance, +} from '../../../lib/graphql'; +import { logger } from '../../../logger'; +import type { TaskCommonOpts } from './buildTaskOptions'; +import type { ToWorker } from '../../../lib/pooling'; +import { getFilePrefix } from './artifacts'; + +/** + * Run the child process for handling upload preferences. + * This runs in a separate CPU if possible + */ +export async function runChild(): Promise { + // Get worker ID from environment or default to 0 + const workerId = Number(process.env.WORKER_ID || '0'); + + // Determine log file path from environment or default location + const logFile = + process.env.WORKER_LOG || + join(process.cwd(), `logs/worker-${workerId}.log`); + mkdirSync(dirname(logFile), { recursive: true }); + + // Create a writable stream for logging + const logStream = createWriteStream(logFile, { flags: 'a' }); + + // Helper function to write logs with timestamp and worker ID + const log = (...args: unknown[]): void => { + const line = `[w${workerId}] ${new Date().toISOString()} ${args + .map((a) => String(a)) + .join(' ')}\n`; + logStream.write(line); + }; + + // Log that the worker is ready and send a ready message to parent + logger.info(`[w${workerId}] ready pid=${process.pid}`); + process.send?.({ type: 'ready' }); + + // Listen for messages from the parent process + process.on( + 'message', + async ( + msg: ToWorker<{ + /** File path */ + filePath: string; + /** Options */ + options: TaskCommonOpts; + }>, + ) => { + if (!msg || typeof msg !== 'object') return; + + // Handle 'task' messages to process a file + if (msg.type === 'task') { + const { filePath, options } = msg.payload; + // Compute the path for receipts file + const receiptFilepath = join( + options.receiptsFolder, + `${getFilePrefix(filePath)}-receipts.json`, + ); + try { + // Ensure receipts directory exists + mkdirSync(dirname(receiptFilepath), { recursive: true }); + logger.info(`[w${workerId}] START ${filePath}`); + log(`START ${filePath}`); + + // Construct common state objects for the task + const receipts = await makeReceiptsState(receiptFilepath); + const schema = await makeSchemaState(options.schemaFile); + const client = buildTranscendGraphQLClient( + options.transcendUrl, + options.auth, + ); + const sombra = await createSombraGotInstance( + options.transcendUrl, + options.auth, + options.sombraAuth, + ); + + // Derive identifierColumns and columnsToIgnore from config + const columnToIdentifier = schema.getColumnToIdentifier(); + const identifierColumns = Object.keys(columnToIdentifier); + const allowedIdentifierNames = [ + ...new Set(Object.values(columnToIdentifier).map((v) => v.name)), + ]; + const columnsToIgnore = + schema.state.getValue('columnsToIgnore') ?? []; + + // Step 1: Build the upload plan (validation-only, non-interactive) + const plan = await buildInteractiveUploadPreferencePlan({ + sombra, + client, + file: filePath, + partition: options.partition, + receipts, + schema, + identifierDownloadLogInterval: options.uploadLogInterval * 10, + downloadIdentifierConcurrency: + options.downloadIdentifierConcurrency, + skipExistingRecordCheck: options.skipExistingRecordCheck, + forceTriggerWorkflows: options.forceTriggerWorkflows, + allowedIdentifierNames, + maxRecordsToReceipt: options.maxRecordsToReceipt, + identifierColumns, + columnsToIgnore, + attributes: splitCsvToList(options.attributes), + nonInteractive: true, + // Report progress to parent process + onProgress: ({ successTotal, fileTotal }) => { + process.send?.({ + type: 'progress', + payload: { + filePath, + processed: successTotal, + total: fileTotal, + }, + }); + }, + }); + + // Step 2: Execute the upload using the plan + await interactivePreferenceUploaderFromPlan(plan, { + receipts, + sombra, + dryRun: options.dryRun, + isSilent: options.isSilent, + skipWorkflowTriggers: options.skipWorkflowTriggers, + skipConflictUpdates: options.skipConflictUpdates, + forceTriggerWorkflows: options.forceTriggerWorkflows, + uploadLogInterval: options.uploadLogInterval, + maxChunkSize: options.maxChunkSize, + uploadConcurrency: options.uploadConcurrency, + maxRecordsToReceipt: options.maxRecordsToReceipt, + // Report progress to parent process + onProgress: ({ successTotal, fileTotal }) => { + process.send?.({ + type: 'progress', + payload: { + filePath, + processed: successTotal, + total: fileTotal, + }, + }); + }, + }); + + // Log completion and send result to parent + logger.info(`[w${workerId}] DONE ${filePath}`); + log(`SUCCESS ${filePath}`); + + process.send?.({ + type: 'result', + payload: { ok: true, filePath, receiptFilepath }, + }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (err: any) { + // Handle errors, log them, and send failure result to parent + const e = err?.stack || err?.message || String(err); + logger.error( + `[w${workerId}] ERROR ${filePath}: ${err?.message || err}\n\n${e}`, + ); + log(`FAIL ${filePath}\n${e}`); + process.send?.({ + type: 'result', + payload: { ok: false, filePath, error: e, receiptFilepath }, + }); + } + } else if (msg.type === 'shutdown') { + // Handle shutdown message: log and exit gracefully + logger.info(`[w${workerId}] shutdown`); + log('Shutting down.'); + logStream.end(() => process.exit(0)); + } + }, + ); + + // Handle uncaught exceptions: log and exit + process.on('uncaughtException', (err) => { + logger.error(`[w${workerId}] uncaughtException: ${err?.stack || err}`); + log(`uncaughtException\n${err?.stack || err}`); + logStream.end(() => process.exit(1)); + }); + // Handle unhandled promise rejections: log and exit + process.on('unhandledRejection', (reason) => { + logger.error(`[w${workerId}] unhandledRejection: ${String(reason)}`); + log(`unhandledRejection\n${String(reason)}`); + logStream.end(() => process.exit(1)); + }); + + // Keep the process alive indefinitely + await new Promise(() => { + // Keep the process alive + }); +} diff --git a/src/lib/graphql/gqls/RequestDataSilo.ts b/src/lib/graphql/gqls/RequestDataSilo.ts index 15e15c4d..c3b323ee 100644 --- a/src/lib/graphql/gqls/RequestDataSilo.ts +++ b/src/lib/graphql/gqls/RequestDataSilo.ts @@ -20,6 +20,8 @@ export const REQUEST_DATA_SILOS = gql` ) { nodes { id + # FIXME remove + status } totalCount } diff --git a/src/lib/pooling/logRotation.ts b/src/lib/pooling/logRotation.ts index 00774b60..2121c4fb 100644 --- a/src/lib/pooling/logRotation.ts +++ b/src/lib/pooling/logRotation.ts @@ -221,6 +221,7 @@ export function initLogDir(rootDir: string): string { const logDir = join(rootDir, 'logs'); mkdirSync(logDir, { recursive: true }); + // FIXME const RESET_MODE = (process.env.RESET_LOGS as 'truncate' | 'delete') ?? 'truncate'; resetWorkerLogs(logDir, RESET_MODE); @@ -258,15 +259,17 @@ export type ExportStatusMap = { /** * Return export statuses * - * @param logDir - Log directory + * FIXME what is this for? + * + * @param receiptsFolder - Receipts directory * @returns Export map */ -export function buildExportStatus(logDir: string): ExportStatusMap { +export function buildExportStatus(receiptsFolder: string): ExportStatusMap { return { - error: { path: join(logDir, 'combined-errors.log') }, - warn: { path: join(logDir, 'combined-warns.log') }, - info: { path: join(logDir, 'combined-info.log') }, - all: { path: join(logDir, 'combined-all.log') }, - failuresCsv: { path: join(logDir, 'failing-updates.csv') }, + error: { path: join(receiptsFolder, 'combined-errors.log') }, + warn: { path: join(receiptsFolder, 'combined-warns.log') }, + info: { path: join(receiptsFolder, 'combined-info.log') }, + all: { path: join(receiptsFolder, 'combined-all.log') }, + failuresCsv: { path: join(receiptsFolder, 'failing-updates.csv') }, }; } diff --git a/src/lib/preference-management/codecs.ts b/src/lib/preference-management/codecs.ts index 62647431..0a1d1dc9 100644 --- a/src/lib/preference-management/codecs.ts +++ b/src/lib/preference-management/codecs.ts @@ -95,47 +95,30 @@ export const ColumnMetadataMap = t.record(t.string, MetadataMapping); /** Override type */ export type ColumnMetadataMap = t.TypeOf; -export const FileMetadataState = t.intersection([ +export const FileFormatState = t.intersection([ t.type({ /** * Definition of how to map each column in the CSV to * the relevant purpose and preference definitions in transcend */ - columnToPurposeName: t.record(t.string, PurposeRowMapping), + columnToPurposeName: ColumnPurposeMap, /** Last time the file was last parsed at */ lastFetchedAt: t.string, - /** - * Mapping of userId to the rows in the file that need to be uploaded - * These uploads are overwriting non-existent preferences and are safe - */ - pendingSafeUpdates: t.record(t.string, t.record(t.string, t.string)), - /** - * Mapping of userId to the rows in the file that need to be uploaded - * these records have conflicts with existing consent preferences - */ - pendingConflictUpdates: t.record( - t.string, - t.type({ - record: PreferenceQueryResponseItem, - row: t.record(t.string, t.string), - }), - ), - /** - * Mapping of userId to the rows in the file that can be skipped because - * their preferences are already in the store - */ - skippedUpdates: t.record(t.string, t.record(t.string, t.string)), + /** The column name that maps to the identifier */ + columnToIdentifier: ColumnIdentifierMap, }), t.partial({ - /** Determine which column name in file maps to consent record identifier to upload on */ - identifierColumn: t.string, /** Determine which column name in file maps to the timestamp */ - timestampColum: t.string, + timestampColumn: t.string, + /** Mapping of CSV column names to metadata keys */ + columnToMetadata: ColumnMetadataMap, + /** CSV columns that should be ignored during upload */ + columnsToIgnore: t.array(t.string), }), ]); /** Override type */ -export type FileMetadataState = t.TypeOf; +export type FileFormatState = t.TypeOf; /** * This is the type of the receipts that are stored in the file @@ -236,36 +219,25 @@ export type SkippedPreferenceUpdates = t.TypeOf< typeof SkippedPreferenceUpdates >; -/** Persist this data between runs of the script */ -export const PreferenceState = t.type({ - /** - * Store a cache of previous files read in - */ - fileMetadata: t.record(t.string, FileMetadataState), - /** - * The set of successful uploads to Transcend - * Mapping from userId to the upload metadata - */ - failingUpdates: t.record( - t.string, - t.type({ - /** Time upload ran at */ - uploadedAt: t.string, - /** Attempts to upload that resulted in an error */ - error: t.string, - /** The update body */ - update: PreferenceUpdateItem, - }), - ), - /** - * The set of pending uploads to Transcend - * Mapping from userId to the upload metadata - */ - pendingUpdates: t.record(t.string, PreferenceUpdateItem), +export const RequestUploadReceipts = t.type({ + /** Last time the file was last parsed at */ + lastFetchedAt: t.string, + /** Safe updates (no conflict with existing preferences) keyed by primaryKey */ + pendingSafeUpdates: PendingSafePreferenceUpdates, + /** Conflict updates (existing preferences differ) keyed by primaryKey */ + pendingConflictUpdates: PendingWithConflictPreferenceUpdates, + /** Skipped rows (already in store or duplicates) keyed by primaryKey */ + skippedUpdates: SkippedPreferenceUpdates, + /** Failed uploads keyed by primaryKey */ + failingUpdates: FailingPreferenceUpdates, + /** Pending uploads at time of last cache write; shrinks as processed */ + pendingUpdates: PreferenceUpdateMap, + /** Successfully processed uploads keyed by primaryKey */ + successfulUpdates: PreferenceUpdateMap, }); /** Override type */ -export type PreferenceState = t.TypeOf; +export type RequestUploadReceipts = t.TypeOf; export const DeletePreferenceRecordsInput = t.type({ /** Array of consent preference records to delete */ diff --git a/src/lib/preference-management/getPreferencesForIdentifiers.ts b/src/lib/preference-management/getPreferencesForIdentifiers.ts index 78929df4..461abdf3 100644 --- a/src/lib/preference-management/getPreferencesForIdentifiers.ts +++ b/src/lib/preference-management/getPreferencesForIdentifiers.ts @@ -1,13 +1,14 @@ import { PreferenceQueryResponseItem } from '@transcend-io/privacy-types'; import type { Got } from 'got'; import colors from 'colors'; -import cliProgress from 'cli-progress'; import { chunk } from 'lodash-es'; import { decodeCodec } from '@transcend-io/type-utils'; import { map } from '../bluebird'; import { logger } from '../../logger'; import { withPreferenceRetry } from './withPreferenceRetry'; import { ConsentPreferenceResponse } from './types'; +import type { PreferenceUploadProgress } from '../../commands/consent/upload-preferences/upload'; +import { extractErrorMessage, splitInHalf } from '../helpers'; /** * Grab the current consent preference values for a list of identifiers @@ -21,6 +22,8 @@ export async function getPreferencesForIdentifiers( { identifiers, partitionKey, + onProgress, + logInterval = 10000, skipLogging = false, concurrency = 40, }: { @@ -28,13 +31,19 @@ export async function getPreferencesForIdentifiers( identifiers: { /** The value of the identifier */ value: string; + /** The name of the identifier */ + name: string; }[]; /** The partition key to look up */ partitionKey: string; /** Whether to skip logging */ skipLogging?: boolean; - /** Concurrency for requests (default 40) */ + /** The interval to log upload progress */ + logInterval?: number; + /** Concurrency for fetching identifiers */ concurrency?: number; + /** on progress callback */ + onProgress?: (info: PreferenceUploadProgress) => void; }, ): Promise { const results: PreferenceQueryResponseItem[] = []; @@ -42,51 +51,149 @@ export async function getPreferencesForIdentifiers( // create a new progress bar instance and use shades_classic theme const t0 = new Date().getTime(); - const progressBar = new cliProgress.SingleBar( - {}, - cliProgress.Presets.shades_classic, - ); - if (!skipLogging) { - progressBar.start(identifiers.length, 0); - } let total = 0; - await map( - groupedIdentifiers, - async (group) => { - const rawResult = await withPreferenceRetry( - 'Preference Query', - () => - sombra - .post(`v1/preferences/${partitionKey}/query`, { - json: { - filter: { identifiers: group }, - limit: group.length, - }, - }) - .json(), - { - onRetry: (attempt, _err, msg) => { - logger.warn( - colors.yellow( - `[RETRY] group size=${group.length} partition=${partitionKey} attempt=${attempt}: ${msg}`, - ), - ); - }, - }, + onProgress?.({ + successDelta: 0, + successTotal: 0, + fileTotal: identifiers.length, // FIXME should be record not identifier count + }); + + /** + * Progress logger respecting `logInterval` + * + * @param delta - delta updated + */ + const maybeLogProgress = (delta: number): void => { + onProgress?.({ + successDelta: delta, + successTotal: total, + fileTotal: identifiers.length, + }); + + if (skipLogging) return; + const shouldLog = + total % logInterval === 0 || + Math.floor((total - identifiers.length) / logInterval) < + Math.floor(total / logInterval); + if (shouldLog) { + logger.info( + colors.green( + `Fetched ${total}/${identifiers.length} user preferences from partition ${partitionKey}`, + ), ); + } + }; - const result = decodeCodec(ConsentPreferenceResponse, rawResult); - results.push(...result.nodes); + /** + * Attempt a single POST for a given group with transient retries. + * Returns decoded nodes on success. + * Throws an error on terminal failure. + * If the error contains "did not pass validation", it throws that error up + * so the caller can choose to split. + * + * @param group - The group of identifiers to fetch + * @returns The decoded nodes from the response + */ + const postGroupWithRetries = async ( + group: { + /** Value of the identifier */ + value: string; + /** Name of the identifier */ + name: string; + }[], + ): Promise => { + const rawResult = await withPreferenceRetry( + 'Preference Query', + () => + sombra + .post(`v1/preferences/${partitionKey}/query`, { + json: { + filter: { identifiers: group }, + }, + }) + .json(), + { + onRetry: (attempt, _err, msg) => { + logger.warn( + colors.yellow( + `[RETRY v1/preferences/${partitionKey}/query] ` + + `group size=${group.length} partition=${partitionKey} attempt=${attempt}: ${msg}`, + ), + ); + }, + }, + ); + + const result = decodeCodec(ConsentPreferenceResponse, rawResult); + return result.nodes; + }; + + /** + * Recursively process a group: + * - Try to fetch in one go. + * - If it fails with "did not pass validation", split into halves and recurse. + * - If the group becomes a singleton and still fails validation, skip it. + * In all terminal paths (success or skip), increment `total` by the + * number of identifiers accounted for and log progress. + * + * @param group - The group of identifiers to process + */ + const processGroup = async ( + group: { + /** Value of the identifier */ + value: string; + /** Name of the identifier */ + name: string; + }[], + ): Promise => { + try { + const nodes = await postGroupWithRetries(group); + results.push(...nodes); total += group.length; - progressBar.update(total); - }, - { - concurrency, + maybeLogProgress(group.length); + } catch (err) { + const msg = extractErrorMessage(err); + + if (/did not pass validation/i.test(msg)) { + // If single, skip and count it + if (group.length === 1) { + const only = group[0]; + logger.warn( + colors.yellow( + `Skipping identifier "${only.value}" (${only.name}): ${msg}`, + ), + ); + total += 1; + maybeLogProgress(1); + return; + } + + // Otherwise, split and recurse + const [left, right] = splitInHalf(group); + logger.warn( + colors.yellow( + `Group of ${group.length} did not pass validation. Splitting into ${left.length} and ${right.length}.`, + ), + ); + await processGroup(left); + await processGroup(right); + return; + } + + // Non-validation terminal error: rethrow + throw err; + } + }; + + await map( + groupedIdentifiers, + async (group) => { + await processGroup(group); }, + { concurrency }, ); - progressBar.stop(); const t1 = new Date().getTime(); const totalTime = t1 - t0; diff --git a/src/lib/preference-management/index.ts b/src/lib/preference-management/index.ts index c6236e95..c6232766 100644 --- a/src/lib/preference-management/index.ts +++ b/src/lib/preference-management/index.ts @@ -1,4 +1,3 @@ -export * from './uploadPreferenceManagementPreferencesInteractive'; export * from './codecs'; export * from './getPreferencesForIdentifiers'; export * from './parsePreferenceManagementCsv'; @@ -6,7 +5,7 @@ export * from './getPreferenceUpdatesFromRow'; export * from './getPreferenceMetadataFromRow'; export * from './parsePreferenceManagementCsv'; export * from './parsePreferenceIdentifiersFromCsv'; -export * from './parsePreferenceTimestampsFromCsv'; +export * from './parsePreferenceFileFormatFromCsv'; export * from './parsePreferenceAndPurposeValuesFromCsv'; export * from './checkIfPendingPreferenceUpdatesAreNoOp'; export * from './checkIfPendingPreferenceUpdatesCauseConflict'; diff --git a/src/lib/preference-management/parsePreferenceAndPurposeValuesFromCsv.ts b/src/lib/preference-management/parsePreferenceAndPurposeValuesFromCsv.ts index a1765c44..d472e708 100644 --- a/src/lib/preference-management/parsePreferenceAndPurposeValuesFromCsv.ts +++ b/src/lib/preference-management/parsePreferenceAndPurposeValuesFromCsv.ts @@ -1,30 +1,31 @@ import { uniq, difference } from 'lodash-es'; import colors from 'colors'; import inquirer from 'inquirer'; -import { FileMetadataState } from './codecs'; +import { FileFormatState } from './codecs'; import { logger } from '../../logger'; import { mapSeries } from '../bluebird'; import { PreferenceTopic } from '../graphql'; import { PreferenceTopicType } from '@transcend-io/privacy-types'; import { splitCsvToList } from '../requests'; - -/* eslint-disable no-param-reassign */ +import type { PersistedState } from '@transcend-io/persisted-state'; /** * Parse out the purpose.enabled and preference values from a CSV file * * @param preferences - List of preferences - * @param currentState - The current file metadata state for parsing this list + * @param schemaState - The schema state to use for parsing the file * @param options - Options * @returns The updated file metadata state */ export async function parsePreferenceAndPurposeValuesFromCsv( preferences: Record[], - currentState: FileMetadataState, + schemaState: PersistedState, { purposeSlugs, preferenceTopics, forceTriggerWorkflows, + columnsToIgnore, + nonInteractive = false, }: { /** The purpose slugs that are allowed to be updated */ purposeSlugs: string[]; @@ -32,19 +33,25 @@ export async function parsePreferenceAndPurposeValuesFromCsv( preferenceTopics: PreferenceTopic[]; /** Force workflow triggers */ forceTriggerWorkflows: boolean; + /** Columns to ignore in the CSV file */ + columnsToIgnore: string[]; + /** When true, throw instead of prompting (for worker processes) */ + nonInteractive?: boolean; }, -): Promise { +): Promise> { // Determine columns to map const columnNames = uniq(preferences.map((x) => Object.keys(x)).flat()); // Determine the columns that could potentially be used for identifier + const timestampCol = schemaState.getValue('timestampColumn'); const otherColumns = difference(columnNames, [ - ...(currentState.identifierColumn ? [currentState.identifierColumn] : []), - ...(currentState.timestampColum ? [currentState.timestampColum] : []), + ...Object.keys(schemaState.getValue('columnToIdentifier')), + ...(timestampCol ? [timestampCol] : []), + ...columnsToIgnore, ]); if (otherColumns.length === 0) { if (forceTriggerWorkflows) { - return currentState; + return schemaState; } throw new Error('No other columns to process'); } @@ -58,10 +65,13 @@ export async function parsePreferenceAndPurposeValuesFromCsv( // Ensure all columns are accounted for await mapSeries(otherColumns, async (col) => { // Determine the unique values to map in this column - const uniqueValues = uniq(preferences.map((x) => x[col])); + const uniqueValues = uniq( + preferences.filter((x) => (x[col] || '').trim()).map((x) => x[col]), + ); // Map the column to a purpose - let purposeMapping = currentState.columnToPurposeName[col]; + const currentPurposeMapping = schemaState.getValue('columnToPurposeName'); + let purposeMapping = currentPurposeMapping[col]; if (purposeMapping) { logger.info( colors.magenta( @@ -69,6 +79,13 @@ export async function parsePreferenceAndPurposeValuesFromCsv( ), ); } else { + if (nonInteractive) { + throw new Error( + `Column "${col}" has no purpose mapping in the config. ` + + "Run 'transcend consent configure-preference-upload' to update the config.", + ); + } + const { purposeName } = await inquirer.prompt<{ /** purpose name */ purposeName: string; @@ -99,6 +116,16 @@ export async function parsePreferenceAndPurposeValuesFromCsv( ); return; } + + if (nonInteractive) { + logger.warn( + colors.yellow( + `Value "${value}" for column "${col}" has no mapping in the config. Skipping.`, + ), + ); + return; + } + // if preference is null, this column is just for the purpose if (purposeMapping.preference === null) { const { purposeValue } = await inquirer.prompt<{ @@ -199,10 +226,9 @@ export async function parsePreferenceAndPurposeValuesFromCsv( ); } }); - - currentState.columnToPurposeName[col] = purposeMapping; + currentPurposeMapping[col] = purposeMapping; + schemaState.setValue(currentPurposeMapping, 'columnToPurposeName'); }); - return currentState; + return schemaState; } -/* eslint-enable no-param-reassign */ diff --git a/src/lib/preference-management/parsePreferenceTimestampsFromCsv.ts b/src/lib/preference-management/parsePreferenceFileFormatFromCsv.ts similarity index 55% rename from src/lib/preference-management/parsePreferenceTimestampsFromCsv.ts rename to src/lib/preference-management/parsePreferenceFileFormatFromCsv.ts index 6df3ac05..47aeaa6d 100644 --- a/src/lib/preference-management/parsePreferenceTimestampsFromCsv.ts +++ b/src/lib/preference-management/parsePreferenceFileFormatFromCsv.ts @@ -1,15 +1,14 @@ import { uniq, difference } from 'lodash-es'; import colors from 'colors'; import inquirer from 'inquirer'; -import { FileMetadataState } from './codecs'; +import { FileFormatState } from './codecs'; import { logger } from '../../logger'; +import type { PersistedState } from '@transcend-io/persisted-state'; export const NONE_PREFERENCE_MAP = '[NONE]'; -/* eslint-disable no-param-reassign */ - /** - * Parse timestamps from a CSV list of preferences + * Parse timestamps and other file format mapping from a CSV list of preferences * * When timestamp is requested, this script * ensures that all rows have a valid timestamp. @@ -18,23 +17,36 @@ export const NONE_PREFERENCE_MAP = '[NONE]'; * * @param preferences - List of preferences * @param currentState - The current file metadata state for parsing this list + * @param options - Options * @returns The updated file metadata state */ -export async function parsePreferenceTimestampsFromCsv( +export async function parsePreferenceFileFormatFromCsv( preferences: Record[], - currentState: FileMetadataState, -): Promise { + currentState: PersistedState, + { + nonInteractive = false, + }: { + /** When true, throw instead of prompting */ nonInteractive?: boolean; + } = {}, +): Promise> { // Determine columns to map const columnNames = uniq(preferences.map((x) => Object.keys(x)).flat()); // Determine the columns that could potentially be used for timestamp const remainingColumnsForTimestamp = difference(columnNames, [ - ...(currentState.identifierColumn ? [currentState.identifierColumn] : []), - ...Object.keys(currentState.columnToPurposeName), + ...Object.keys(currentState.getValue('columnToIdentifier')), + ...Object.keys(currentState.getValue('columnToPurposeName')), ]); // Determine the timestamp column to work off of - if (!currentState.timestampColum) { + if (!currentState.getValue('timestampColumn')) { + if (nonInteractive) { + throw new Error( + 'No timestamp column configured. ' + + "Run 'transcend consent configure-preference-upload' to set it.", + ); + } + const { timestampName } = await inquirer.prompt<{ /** timestamp name */ timestampName: string; @@ -55,33 +67,39 @@ export async function parsePreferenceTimestampsFromCsv( choices: [...remainingColumnsForTimestamp, NONE_PREFERENCE_MAP], }, ]); - currentState.timestampColum = timestampName; + + currentState.setValue(timestampName, 'timestampColumn'); } logger.info( - colors.magenta(`Using timestamp column "${currentState.timestampColum}"`), + colors.magenta( + `Using timestamp column "${currentState.getValue('timestampColumn')}"`, + ), ); // Validate that all rows have valid timestamp - if (currentState.timestampColum !== NONE_PREFERENCE_MAP) { + if (currentState.getValue('timestampColumn') !== NONE_PREFERENCE_MAP) { const timestampColumnsMissing = preferences - .map((pref, ind) => (pref[currentState.timestampColum!] ? null : [ind])) + .map((pref, ind) => + pref[currentState.getValue('timestampColumn')!] ? null : [ind], + ) .filter((x): x is number[] => !!x) .flat(); if (timestampColumnsMissing.length > 0) { throw new Error( - `The timestamp column "${ - currentState.timestampColum - }" is missing a value for the following rows: ${timestampColumnsMissing.join( + `The timestamp column "${currentState.getValue( + 'timestampColumn', + )}" is missing a value for the following rows: ${timestampColumnsMissing.join( '\n', )}`, ); } logger.info( colors.magenta( - `The timestamp column "${currentState.timestampColum}" is present for all row`, + `The timestamp column "${currentState.getValue( + 'timestampColumn', + )}" is present for all row`, ), ); } return currentState; } -/* eslint-enable no-param-reassign */ diff --git a/src/lib/preference-management/parsePreferenceIdentifiersFromCsv.ts b/src/lib/preference-management/parsePreferenceIdentifiersFromCsv.ts index 0c65ccf2..90396c61 100644 --- a/src/lib/preference-management/parsePreferenceIdentifiersFromCsv.ts +++ b/src/lib/preference-management/parsePreferenceIdentifiersFromCsv.ts @@ -1,9 +1,19 @@ -import { uniq, groupBy, difference } from 'lodash-es'; +// groupBy +import { uniq, keyBy } from 'lodash-es'; import colors from 'colors'; import inquirer from 'inquirer'; -import { FileMetadataState } from './codecs'; +import type { + FileFormatState, + IdentifierMetadataForPreference, +} from './codecs'; import { logger } from '../../logger'; import { inquirerConfirmBoolean } from '../helpers'; +import Bluebird from 'bluebird'; +import type { Identifier } from '../graphql'; +import type { PreferenceStoreIdentifier } from '@transcend-io/privacy-types'; +import type { PersistedState } from '@transcend-io/persisted-state'; + +const { mapSeries } = Bluebird; /* eslint-disable no-param-reassign */ @@ -14,69 +24,148 @@ import { inquirerConfirmBoolean } from '../helpers'; * and that all identifiers are unique. * * @param preferences - List of preferences - * @param currentState - The current file metadata state for parsing this list + * @param options - Options * @returns The updated file metadata state */ export async function parsePreferenceIdentifiersFromCsv( preferences: Record[], - currentState: FileMetadataState, + { + schemaState, + orgIdentifiers, + allowedIdentifierNames, + identifierColumns, + nonInteractive = false, + }: { + /** The current state of the schema metadata */ + schemaState: PersistedState; + /** The list of identifiers configured for the org */ + orgIdentifiers: Identifier[]; + /** The list of identifier names that are allowed for this upload */ + allowedIdentifierNames: string[]; + /** The columns in the CSV that should be used as identifiers */ + identifierColumns: string[]; + /** When true, throw instead of prompting (for worker processes) */ + nonInteractive?: boolean; + }, ): Promise<{ /** The updated state */ - currentState: FileMetadataState; + schemaState: PersistedState; /** The updated preferences */ preferences: Record[]; }> { + const columnNames = uniq( + preferences.map((x) => Object.keys(x)).flat(), + ).filter((col) => identifierColumns.includes(col)); // Determine columns to map - const columnNames = uniq(preferences.map((x) => Object.keys(x)).flat()); + const orgIdentifiersByName = keyBy(orgIdentifiers, 'name'); + const filteredOrgIdentifiers = allowedIdentifierNames + .map((name) => orgIdentifiersByName[name]) + .filter(Boolean); + if (filteredOrgIdentifiers.length !== allowedIdentifierNames.length) { + const missingIdentifiers = allowedIdentifierNames.filter( + (name) => !orgIdentifiersByName[name], + ); + throw new Error( + `No identifier configuration found for "${missingIdentifiers.join( + '","', + )}"`, + ); + } + if (columnNames.length !== identifierColumns.length) { + const missingColumns = identifierColumns.filter( + (col) => !columnNames.includes(col), + ); + throw new Error( + `The following identifier columns are missing from the CSV: "${missingColumns.join( + '","', + )}"`, + ); + } - // Determine the columns that could potentially be used for identifier - const remainingColumnsForIdentifier = difference(columnNames, [ - ...(currentState.identifierColumn ? [currentState.identifierColumn] : []), - ...Object.keys(currentState.columnToPurposeName), - ]); + if ( + filteredOrgIdentifiers.filter( + (identifier) => identifier.isUniqueOnPreferenceStore, + ).length === 0 + ) { + throw new Error( + 'No unique identifier was provided. Please ensure that at least one ' + + 'of the allowed identifiers is configured as unique on the preference store.', + ); + } + + // Determine the columns that could potentially be used for identifiers + const currentColumnToIdentifier = schemaState.getValue('columnToIdentifier'); + await mapSeries(identifierColumns, async (col) => { + // Map the column to an identifier + const identifierMapping = currentColumnToIdentifier[col]; + if (identifierMapping) { + logger.info( + colors.magenta( + `Column "${col}" is associated with identifier "${identifierMapping.name}"`, + ), + ); + return; + } - // Determine the identifier column to work off of - if (!currentState.identifierColumn) { + if (nonInteractive) { + throw new Error( + `Column "${col}" has no identifier mapping in the config. ` + + "Run 'transcend consent configure-preference-upload' to update the config.", + ); + } + + // If the column is not mapped, ask the user to map it const { identifierName } = await inquirer.prompt<{ /** Identifier name */ identifierName: string; }>([ { name: 'identifierName', - message: - 'Choose the column that will be used as the identifier to upload consent preferences by', + message: `Choose the identifier name for column "${col}"`, type: 'list', - default: - remainingColumnsForIdentifier.find((col) => - col.toLowerCase().includes('email'), - ) || remainingColumnsForIdentifier[0], - choices: remainingColumnsForIdentifier, + // Default to the first allowed identifier name + default: allowedIdentifierNames.find((x) => x.startsWith(col)), + choices: allowedIdentifierNames, }, ]); - currentState.identifierColumn = identifierName; - } - logger.info( - colors.magenta( - `Using identifier column "${currentState.identifierColumn}"`, - ), - ); + currentColumnToIdentifier[col] = { + name: identifierName, + isUniqueOnPreferenceStore: + orgIdentifiersByName[identifierName].isUniqueOnPreferenceStore, + }; + }); + schemaState.setValue(currentColumnToIdentifier, 'columnToIdentifier'); + + const uniqueIdentifierColumns = Object.entries(currentColumnToIdentifier) + .filter( + ([, identifierMapping]) => identifierMapping.isUniqueOnPreferenceStore, + ) + .map(([col]) => col); - // Validate that the identifier column is present for all rows and unique - const identifierColumnsMissing = preferences - .map((pref, ind) => (pref[currentState.identifierColumn!] ? null : [ind])) + // Validate that the at least 1 unique identifier column is present + const uniqueIdentifierMissingIndexes = preferences + .map((pref, ind) => + uniqueIdentifierColumns.some((col) => !!pref[col]) ? null : [ind], + ) .filter((x): x is number[] => !!x) .flat(); - if (identifierColumnsMissing.length > 0) { - const msg = `The identifier column "${ - currentState.identifierColumn - }" is missing a value for the following rows: ${identifierColumnsMissing.join( + + if (uniqueIdentifierMissingIndexes.length > 0) { + const msg = ` + The following rows ${uniqueIdentifierMissingIndexes.join( ', ', - )}`; + )} do not have any unique identifier values for the columns "${uniqueIdentifierColumns.join( + '", "', + )}".`; logger.warn(colors.yellow(msg)); + if (nonInteractive) { + throw new Error(msg); + } + // Ask user if they would like to skip rows missing an identifier const skip = await inquirerConfirmBoolean({ - message: 'Would you like to skip rows missing an identifier?', + message: 'Would you like to skip rows missing unique identifiers?', }); if (!skip) { throw new Error(msg); @@ -85,54 +174,94 @@ export async function parsePreferenceIdentifiersFromCsv( // Filter out rows missing an identifier const previous = preferences.length; preferences = preferences.filter( - (pref) => pref[currentState.identifierColumn!], + (pref, index) => !uniqueIdentifierMissingIndexes.includes(index), ); logger.info( colors.yellow( - `Skipped ${previous - preferences.length} rows missing an identifier`, + `Skipped ${ + previous - preferences.length + } rows missing unique identifiers`, ), ); } logger.info( colors.magenta( - `The identifier column "${currentState.identifierColumn}" is present for all rows`, + `At least one unique identifier column is present for all ${preferences.length} rows.`, ), ); - // Validate that all identifiers are unique - const rowsByUserId = groupBy(preferences, currentState.identifierColumn); - const duplicateIdentifiers = Object.entries(rowsByUserId).filter( - ([, rows]) => rows.length > 1, - ); - if (duplicateIdentifiers.length > 0) { - const msg = `The identifier column "${ - currentState.identifierColumn - }" has duplicate values for the following rows: ${duplicateIdentifiers - .slice(0, 10) - .map(([userId, rows]) => `${userId} (${rows.length})`) - .join('\n')}`; - logger.warn(colors.yellow(msg)); + return { schemaState, preferences }; +} +/* eslint-enable no-param-reassign */ - // Ask user if they would like to take the most recent update - // for each duplicate identifier - const skip = await inquirerConfirmBoolean({ - message: 'Would you like to automatically take the latest update?', - }); - if (!skip) { - throw new Error(msg); - } - preferences = Object.entries(rowsByUserId) - .map(([, rows]) => { - const sorted = rows.sort( - (a, b) => - new Date(b[currentState.timestampColum!]).getTime() - - new Date(a[currentState.timestampColum!]).getTime(), - ); - return sorted[0]; - }) - .filter((x) => x); - } +/** + * Helper function to get the identifiers payload from a row + * + * @param options - Options + * @param options.row - The current row from CSV file + * @param options.columnToIdentifier - The column to identifier mapping metadata + * @returns The updated preferences with identifiers payload + */ +export function getPreferenceIdentifiersFromRow({ + row, + columnToIdentifier, +}: { + /** The current row from CSV file */ + row: Record; + /** The current file metadata state */ + columnToIdentifier: FileFormatState['columnToIdentifier']; +}): PreferenceStoreIdentifier[] { + const identifiers = Object.entries(columnToIdentifier) + .filter(([col]) => !!row[col]) + .map(([col, identifierMapping]) => ({ + name: identifierMapping.name, + value: row[col], + })); + // put email first if it exists + // TODO: https://linear.app/transcend/issue/PIK-285/set-precedence-of-unique-identifiers - remove email logic + return identifiers.sort( + (a, b) => + (a.name === 'email' ? -1 : 0) - (b.name === 'email' ? -1 : 0) || + a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }), + ); +} - return { currentState, preferences }; +/** + * Helper function to get unique identifier name present in a row + * + * @param options - Options + * @param options.row - The current row from CSV file + * @param options.columnToIdentifier - The column to identifier mapping metadata + * @returns The unique identifier names present in the row + */ +export function getUniquePreferenceIdentifierNamesFromRow({ + row, + columnToIdentifier, +}: { + /** The current row from CSV file */ + row: Record; + /** The current file metadata state */ + columnToIdentifier: FileFormatState['columnToIdentifier']; +}): (IdentifierMetadataForPreference & { + /** Column name */ + columnName: string; + /** Value of the identifier in the row */ + value: string; +})[] { + // TODO: https://linear.app/transcend/issue/PIK-285/set-precedence-of-unique-identifiers - remove email logic + // sort email to the front + return Object.entries(columnToIdentifier) + .sort( + ([, a], [, b]) => + (a.name === 'email' ? -1 : 0) - (b.name === 'email' ? -1 : 0) || + a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }), + ) + .filter( + ([col]) => row[col] && columnToIdentifier[col].isUniqueOnPreferenceStore, + ) + .map(([col, identifier]) => ({ + ...identifier, + columnName: col, + value: row[col], + })); } -/* eslint-enable no-param-reassign */ diff --git a/src/lib/preference-management/parsePreferenceManagementCsv.ts b/src/lib/preference-management/parsePreferenceManagementCsv.ts index b3824993..a4b18f52 100644 --- a/src/lib/preference-management/parsePreferenceManagementCsv.ts +++ b/src/lib/preference-management/parsePreferenceManagementCsv.ts @@ -1,29 +1,41 @@ import { PersistedState } from '@transcend-io/persisted-state'; import type { Got } from 'got'; import { keyBy } from 'lodash-es'; -import * as t from 'io-ts'; import colors from 'colors'; -import { FileMetadataState, PreferenceState } from './codecs'; +import { + type FileFormatState, + type PendingSafePreferenceUpdates, + type PendingWithConflictPreferenceUpdates, + type RequestUploadReceipts, + type SkippedPreferenceUpdates, +} from './codecs'; import { logger } from '../../logger'; -import { readCsv } from '../requests'; import { getPreferencesForIdentifiers } from './getPreferencesForIdentifiers'; -import { PreferenceTopic } from '../graphql'; +import { PreferenceTopic, type Identifier } from '../graphql'; import { getPreferenceUpdatesFromRow } from './getPreferenceUpdatesFromRow'; -import { parsePreferenceTimestampsFromCsv } from './parsePreferenceTimestampsFromCsv'; -import { parsePreferenceIdentifiersFromCsv } from './parsePreferenceIdentifiersFromCsv'; +import { parsePreferenceFileFormatFromCsv } from './parsePreferenceFileFormatFromCsv'; +import { + getUniquePreferenceIdentifierNamesFromRow, + parsePreferenceIdentifiersFromCsv, +} from './parsePreferenceIdentifiersFromCsv'; import { parsePreferenceAndPurposeValuesFromCsv } from './parsePreferenceAndPurposeValuesFromCsv'; import { checkIfPendingPreferenceUpdatesAreNoOp } from './checkIfPendingPreferenceUpdatesAreNoOp'; import { checkIfPendingPreferenceUpdatesCauseConflict } from './checkIfPendingPreferenceUpdatesCauseConflict'; +import type { ObjByString } from '@transcend-io/type-utils'; +import type { PreferenceQueryResponseItem } from '@transcend-io/privacy-types'; +import type { PreferenceUploadProgress } from '../../commands/consent/upload-preferences/upload'; /** * Parse a file into the cache * * + * @param rawPreferences - The preferences to parse * @param options - Options - * @param cache - The cache to store the parsed file in + * @param schemaState - The schema state to use for parsing the file * @returns The cache with the parsed file */ export async function parsePreferenceManagementCsvWithCache( + rawPreferences: Record[], { file, sombra, @@ -32,6 +44,14 @@ export async function parsePreferenceManagementCsvWithCache( partitionKey, skipExistingRecordCheck, forceTriggerWorkflows, + orgIdentifiers, + allowedIdentifierNames, + identifierColumns, + downloadIdentifierConcurrency, + identifierDownloadLogInterval, + columnsToIgnore, + onProgress, + nonInteractive = false, }: { /** File to parse */ file: string; @@ -47,97 +67,180 @@ export async function parsePreferenceManagementCsvWithCache( skipExistingRecordCheck: boolean; /** Whether to force workflow triggers */ forceTriggerWorkflows: boolean; + /** Identifiers configured for the org */ + orgIdentifiers: Identifier[]; + /** allowed identifiers names */ + allowedIdentifierNames: string[]; + /** Identifier columns on the CSV file */ + identifierColumns: string[]; + /** Columns to ignore in the CSV file */ + columnsToIgnore: string[]; + /** The interval to log upload progress */ + identifierDownloadLogInterval: number; + /** Concurrency for downloading identifiers */ + downloadIdentifierConcurrency: number; + /** on progress callback */ + onProgress?: (info: PreferenceUploadProgress) => void; + /** When true, throw instead of prompting (for worker processes) */ + nonInteractive?: boolean; }, - cache: PersistedState, -): Promise { + schemaState: PersistedState, +): Promise<{ + /** Pending saf updates */ + pendingSafeUpdates: PendingSafePreferenceUpdates; + /** Pending conflict updates */ + pendingConflictUpdates: PendingWithConflictPreferenceUpdates; + /** Skipped updates */ + skippedUpdates: SkippedPreferenceUpdates; +}> { // Start the timer const t0 = new Date().getTime(); - // Get the current metadata - const fileMetadata = cache.getValue('fileMetadata'); - - // Read in the file - logger.info(colors.magenta(`Reading in file: "${file}"`)); - let preferences = readCsv(file, t.record(t.string, t.string)); - - // start building the cache, can use previous cache as well - let currentState: FileMetadataState = { - columnToPurposeName: {}, - pendingSafeUpdates: {}, - pendingConflictUpdates: {}, - skippedUpdates: {}, - // Load in the last fetched time - ...((fileMetadata[file] || {}) as Partial), - lastFetchedAt: new Date().toISOString(), - }; - // Validate that all timestamps are present in the file - currentState = await parsePreferenceTimestampsFromCsv( - preferences, - currentState, - ); - fileMetadata[file] = currentState; - await cache.setValue(fileMetadata, 'fileMetadata'); + await parsePreferenceFileFormatFromCsv(rawPreferences, schemaState, { + nonInteractive, + }); // Validate that all identifiers are present and unique - const result = await parsePreferenceIdentifiersFromCsv( - preferences, - currentState, - ); - currentState = result.currentState; - preferences = result.preferences; - fileMetadata[file] = currentState; - await cache.setValue(fileMetadata, 'fileMetadata'); - - // Ensure all other columns are mapped to purpose and preference - // slug values - currentState = await parsePreferenceAndPurposeValuesFromCsv( - preferences, - currentState, - { - preferenceTopics, - purposeSlugs, - forceTriggerWorkflows, - }, - ); - fileMetadata[file] = currentState; - await cache.setValue(fileMetadata, 'fileMetadata'); + const result = await parsePreferenceIdentifiersFromCsv(rawPreferences, { + schemaState, + orgIdentifiers, + allowedIdentifierNames, + identifierColumns, + nonInteractive, + }); + const { preferences } = result; + + // Ensure all other columns are mapped to purpose and preference slug values + await parsePreferenceAndPurposeValuesFromCsv(preferences, schemaState, { + preferenceTopics, + purposeSlugs, + forceTriggerWorkflows, + columnsToIgnore, + nonInteractive, + }); // Grab existing preference store records - const identifiers = preferences.map( - (pref) => pref[currentState.identifierColumn!], + const currentColumnToIdentifierMap = + schemaState.getValue('columnToIdentifier'); + const currentColumnToPurposeName = schemaState.getValue( + 'columnToPurposeName', + ); + const identifiers = preferences.flatMap((pref) => + getUniquePreferenceIdentifierNamesFromRow({ + row: pref, + columnToIdentifier: currentColumnToIdentifierMap, + }), ); + const existingConsentRecords = skipExistingRecordCheck ? [] : await getPreferencesForIdentifiers(sombra, { - identifiers: identifiers.map((x) => ({ value: x })), + identifiers, + logInterval: identifierDownloadLogInterval, partitionKey, + concurrency: downloadIdentifierConcurrency, + onProgress, }); - const consentRecordByIdentifier = keyBy(existingConsentRecords, 'userId'); + + // Create a map of all unique identifiers to consent records + const uniqueIdentifiers = Object.values(currentColumnToIdentifierMap) + .filter((x) => x.isUniqueOnPreferenceStore) + .map((x) => x.name); + const consentRecordByUniqueIdentifiers = uniqueIdentifiers.reduce( + (acc, identifier) => { + const recordsWithIdentifier = existingConsentRecords.filter((record) => + (record.identifiers || []).some( + (id) => id.name === identifier && id.value, + ), + ); + acc[identifier] = keyBy( + recordsWithIdentifier, + (record) => + (record.identifiers || []).find((id) => id.name === identifier) + ?.value || '', + ); + return acc; + }, + {} as Record>, + ); // Clear out previous updates - currentState.pendingConflictUpdates = {}; - currentState.pendingSafeUpdates = {}; - currentState.skippedUpdates = {}; + const pendingConflictUpdates: RequestUploadReceipts['pendingConflictUpdates'] = + {}; + const pendingSafeUpdates: Record> = {}; + const skippedUpdates: RequestUploadReceipts['skippedUpdates'] = {}; // Process each row - preferences.forEach((pref) => { - // Grab unique Id for the user - const userId = pref[currentState.identifierColumn!]; + const seenAlready: Record = {}; + logger.log( + colors.green( + `Processing ${preferences.length} preferences with ${ + Object.keys(currentColumnToIdentifierMap).length + } identifiers and ${ + Object.keys(currentColumnToPurposeName).length + } purposes.`, + ), + ); + preferences.forEach((pref, ind) => { + // Get the userIds that could be the primary key of the consent record + const uniqueIdentifiers = getUniquePreferenceIdentifierNamesFromRow({ + row: pref, + columnToIdentifier: currentColumnToIdentifierMap, + }); // determine updates for user const pendingUpdates = getPreferenceUpdatesFromRow({ row: pref, - columnToPurposeName: currentState.columnToPurposeName, + columnToPurposeName: currentColumnToPurposeName, preferenceTopics, purposeSlugs, }); // Grab current state of the update - const currentConsentRecord = consentRecordByIdentifier[userId]; + const primaryKeyMetadata = uniqueIdentifiers[0]; + const currentConsentRecord = + consentRecordByUniqueIdentifiers[primaryKeyMetadata.name][ + primaryKeyMetadata.value + ]; + // If consent record is found use it, otherwise use the first unique identifier + let primaryKey = primaryKeyMetadata.value; + // Ensure this is unique + if (seenAlready[primaryKey]) { + if ( + !Object.entries(pref).every( + ([key, value]) => seenAlready[primaryKey][key] === value, + ) + ) { + // Show a diff of what's changed between the duplicate rows + const previous = seenAlready[primaryKey]; + const diffs = Object.entries(pref) + .filter(([key, value]) => previous[key] !== value) + .map(([key]) => key) + .join(', '); + logger.warn( + colors.yellow( + `Duplicate primary key "${primaryKey}" at index ${ind}. Diff: ${diffs}`, + ), + ); + primaryKey = `${primaryKey}___${ind}`; + } else { + skippedUpdates[`${primaryKey}___${ind}`] = pref; + logger.warn( + colors.yellow( + `Duplicate primary key found: "${primaryKey}" at index: "${ind}" but rows are identical.`, + ), + ); + return; + } + } + seenAlready[primaryKey] = pref; + if (forceTriggerWorkflows && !currentConsentRecord) { throw new Error( - `No existing consent record found for user with id: ${userId}. + `No existing consent record found for user with ids: ${uniqueIdentifiers + .map((x) => x.value) + .join(', ')}. When 'forceTriggerWorkflows' is set all the user identifiers should contain a consent record`, ); } @@ -153,7 +256,7 @@ export async function parsePreferenceManagementCsvWithCache( }) && !forceTriggerWorkflows ) { - currentState.skippedUpdates[userId] = pref; + skippedUpdates[primaryKey] = pref; return; } @@ -164,9 +267,10 @@ export async function parsePreferenceManagementCsvWithCache( currentConsentRecord, pendingUpdates, preferenceTopics, + log: false, // update this to log for debugging purposes }) ) { - currentState.pendingConflictUpdates[userId] = { + pendingConflictUpdates[primaryKey] = { row: pref, record: currentConsentRecord, }; @@ -174,16 +278,19 @@ export async function parsePreferenceManagementCsvWithCache( } // Add to pending updates - currentState.pendingSafeUpdates[userId] = pref; + pendingSafeUpdates[primaryKey] = pref; }); - // Read in the file - fileMetadata[file] = currentState; - await cache.setValue(fileMetadata, 'fileMetadata'); const t1 = new Date().getTime(); logger.info( colors.green( `Successfully pre-processed file: "${file}" in ${(t1 - t0) / 1000}s`, ), ); + + return { + pendingSafeUpdates, + pendingConflictUpdates, + skippedUpdates, + }; } diff --git a/src/lib/preference-management/tests/fetchConsentPreferencesChunked.test.ts b/src/lib/preference-management/tests/fetchConsentPreferencesChunked.test.ts index 7a1b7b53..1a41b519 100644 --- a/src/lib/preference-management/tests/fetchConsentPreferencesChunked.test.ts +++ b/src/lib/preference-management/tests/fetchConsentPreferencesChunked.test.ts @@ -51,7 +51,7 @@ const H = vi.hoisted(() => ({ AsyncGenerator >, makeIter: (pages: PreferenceQueryResponseItem[][]) => - // eslint-disable-next-line wrap-iife + // eslint-disable-next-line wrap-iife, func-names (async function* () { for (const p of pages) yield p; })(), diff --git a/src/lib/preference-management/tests/getPreferencesForIdentifiers.test.ts b/src/lib/preference-management/tests/getPreferencesForIdentifiers.test.ts index 4ddba184..6acf1500 100644 --- a/src/lib/preference-management/tests/getPreferencesForIdentifiers.test.ts +++ b/src/lib/preference-management/tests/getPreferencesForIdentifiers.test.ts @@ -93,6 +93,7 @@ describe('getPreferencesForIdentifiers', () => { // Build 250 identifiers -> 3 groups: 100, 100, 50 const identifiers = Array.from({ length: 250 }, (_, i) => ({ value: `user-${i + 1}@ex.com`, + name: 'email', })); // Fake Got client with post().json() chain that returns a result based on the requested group @@ -197,6 +198,7 @@ describe('getPreferencesForIdentifiers', () => { it('logs progress start and completion when skipLogging=false', async () => { const identifiers = Array.from({ length: 5 }, (_, i) => ({ value: `u${i + 1}`, + name: 'test-id', })); const postMock = vi.fn( diff --git a/src/lib/preference-management/uploadPreferenceManagementPreferencesInteractive.ts b/src/lib/preference-management/uploadPreferenceManagementPreferencesInteractive.ts deleted file mode 100644 index 073384b1..00000000 --- a/src/lib/preference-management/uploadPreferenceManagementPreferencesInteractive.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { - buildTranscendGraphQLClient, - createSombraGotInstance, - fetchAllPurposes, - fetchAllPreferenceTopics, -} from '../graphql'; -import colors from 'colors'; -import { map } from '../bluebird'; -import { chunk } from 'lodash-es'; -import { logger } from '../../logger'; -import cliProgress from 'cli-progress'; -import { parseAttributesFromString } from '../requests'; -import { PersistedState } from '@transcend-io/persisted-state'; -import { parsePreferenceManagementCsvWithCache } from './parsePreferenceManagementCsv'; -import { PreferenceState } from './codecs'; -import { PreferenceUpdateItem } from '@transcend-io/privacy-types'; -import { apply } from '@transcend-io/type-utils'; -import { NONE_PREFERENCE_MAP } from './parsePreferenceTimestampsFromCsv'; -import { getPreferenceUpdatesFromRow } from './getPreferenceUpdatesFromRow'; - -/** - * Upload a set of consent preferences - * - * @param options - Options - */ -export async function uploadPreferenceManagementPreferencesInteractive({ - auth, - sombraAuth, - receiptFilepath, - file, - partition, - isSilent = true, - dryRun = false, - skipWorkflowTriggers = false, - skipConflictUpdates = false, - skipExistingRecordCheck = false, - attributes = [], - transcendUrl, - forceTriggerWorkflows = false, -}: { - /** The Transcend API key */ - auth: string; - /** Sombra API key authentication */ - sombraAuth?: string; - /** Partition key */ - partition: string; - /** File where to store receipt and continue from where left off */ - receiptFilepath: string; - /** The file to process */ - file: string; - /** API URL for Transcend backend */ - transcendUrl: string; - /** Whether to do a dry run */ - dryRun?: boolean; - /** Whether to upload as isSilent */ - isSilent?: boolean; - /** Attributes string pre-parse. In format Key:Value */ - attributes?: string[]; - /** Skip workflow triggers */ - skipWorkflowTriggers?: boolean; - /** - * When true, only update preferences that do not conflict with existing - * preferences. When false, update all preferences in CSV based on timestamp. - */ - skipConflictUpdates?: boolean; - /** Whether to skip the check for existing records. SHOULD ONLY BE USED FOR INITIAL UPLOAD */ - skipExistingRecordCheck?: boolean; - /** Whether to force trigger workflows */ - forceTriggerWorkflows?: boolean; -}): Promise { - // Parse out the extra attributes to apply to all requests uploaded - const parsedAttributes = parseAttributesFromString(attributes); - - // Create a new state file to store the requests from this run - const preferenceState = new PersistedState(receiptFilepath, PreferenceState, { - fileMetadata: {}, - failingUpdates: {}, - pendingUpdates: {}, - }); - const failingRequests = preferenceState.getValue('failingUpdates'); - const pendingRequests = preferenceState.getValue('pendingUpdates'); - let fileMetadata = preferenceState.getValue('fileMetadata'); - - logger.info( - colors.magenta( - 'Restored cache, there are: \n' + - `${ - Object.values(failingRequests).length - } failing requests to be retried\n` + - `${ - Object.values(pendingRequests).length - } pending requests to be processed\n` + - `The following files are stored in cache and will be used:\n${Object.keys( - fileMetadata, - ) - .map((x) => x) - .join('\n')}\n` + - `The following file will be processed: ${file}\n`, - ), - ); - - // Create GraphQL client to connect to Transcend backend - const client = buildTranscendGraphQLClient(transcendUrl, auth); - - const [sombra, purposes, preferenceTopics] = await Promise.all([ - // Create sombra instance to communicate with - createSombraGotInstance(transcendUrl, auth, sombraAuth), - // get all purposes and topics - fetchAllPurposes(client), - fetchAllPreferenceTopics(client), - ]); - - // Process the file - await parsePreferenceManagementCsvWithCache( - { - file, - purposeSlugs: purposes.map((x) => x.trackingType), - preferenceTopics, - sombra, - partitionKey: partition, - skipExistingRecordCheck, - forceTriggerWorkflows, - }, - preferenceState, - ); - - // Construct the pending updates - const pendingUpdates: Record = {}; - fileMetadata = preferenceState.getValue('fileMetadata'); - const metadata = fileMetadata[file]; - - logger.info( - colors.magenta( - `Found ${ - Object.entries(metadata.pendingSafeUpdates).length - } safe updates in ${file}`, - ), - ); - logger.info( - colors.magenta( - `Found ${ - Object.entries(metadata.pendingConflictUpdates).length - } conflict updates in ${file}`, - ), - ); - logger.info( - colors.magenta( - `Found ${ - Object.entries(metadata.skippedUpdates).length - } skipped updates in ${file}`, - ), - ); - - // Update either safe updates only or safe + conflict - Object.entries({ - ...metadata.pendingSafeUpdates, - ...(skipConflictUpdates - ? {} - : apply(metadata.pendingConflictUpdates, ({ row }) => row)), - }).forEach(([userId, update]) => { - // Determine timestamp - const timestamp = - metadata.timestampColum === NONE_PREFERENCE_MAP - ? new Date() - : new Date(update[metadata.timestampColum!]); - - // Determine updates - const updates = getPreferenceUpdatesFromRow({ - row: update, - columnToPurposeName: metadata.columnToPurposeName, - preferenceTopics, - purposeSlugs: purposes.map((x) => x.trackingType), - }); - pendingUpdates[userId] = { - userId, - partition, - timestamp: timestamp.toISOString(), - purposes: Object.entries(updates).map(([purpose, value]) => ({ - ...value, - purpose, - workflowSettings: { - attributes: parsedAttributes, - isSilent, - skipWorkflowTrigger: skipWorkflowTriggers, - ...(forceTriggerWorkflows - ? { forceTriggerWorkflow: forceTriggerWorkflows } - : {}), - }, - })), - }; - }); - await preferenceState.setValue(pendingUpdates, 'pendingUpdates'); - await preferenceState.setValue({}, 'failingUpdates'); - - // Exist early if dry run - if (dryRun) { - logger.info( - colors.green( - `Dry run complete, exiting. ${ - Object.values(pendingUpdates).length - } pending updates. Check file: ${receiptFilepath}`, - ), - ); - return; - } - - logger.info( - colors.magenta( - `Uploading ${ - Object.values(pendingUpdates).length - } preferences to partition: ${partition}`, - ), - ); - - // Time duration - const t0 = new Date().getTime(); - - // create a new progress bar instance and use shades_classic theme - const progressBar = new cliProgress.SingleBar( - {}, - cliProgress.Presets.shades_classic, - ); - - // Build a GraphQL client - let total = 0; - const updatesToRun = Object.entries(pendingUpdates); - const chunkedUpdates = chunk(updatesToRun, skipWorkflowTriggers ? 100 : 10); - progressBar.start(updatesToRun.length, 0); - await map( - chunkedUpdates, - async (currentChunk) => { - // Make the request - try { - await sombra - .put('v1/preferences', { - json: { - records: currentChunk.map(([, update]) => update), - skipWorkflowTriggers, - }, - }) - .json(); - } catch (err) { - try { - const parsed = JSON.parse(err?.response?.body || '{}'); - if (parsed.error) { - logger.error(colors.red(`Error: ${parsed.error}`)); - } - } catch (e) { - // continue - } - logger.error( - colors.red( - `Failed to upload ${ - currentChunk.length - } user preferences to partition ${partition}: ${ - err?.response?.body || err?.message - }`, - ), - ); - const failingUpdates = preferenceState.getValue('failingUpdates'); - currentChunk.forEach(([userId, update]) => { - failingUpdates[userId] = { - uploadedAt: new Date().toISOString(), - update, - error: err?.response?.body || err?.message || 'Unknown error', - }; - }); - await preferenceState.setValue(failingUpdates, 'failingUpdates'); - } - - total += currentChunk.length; - progressBar.update(total); - }, - { - concurrency: 40, - }, - ); - - progressBar.stop(); - const t1 = new Date().getTime(); - const totalTime = t1 - t0; - logger.info( - colors.green( - `Successfully uploaded ${ - updatesToRun.length - } user preferences to partition ${partition} in "${ - totalTime / 1000 - }" seconds!`, - ), - ); -} diff --git a/src/reconcile-preference-records.ts b/src/reconcile-preference-records.ts new file mode 100644 index 00000000..022b3a35 --- /dev/null +++ b/src/reconcile-preference-records.ts @@ -0,0 +1,872 @@ +#!/usr/bin/env node +/* eslint-disable max-len */ +/* eslint-disable jsdoc/require-description,jsdoc/require-returns,jsdoc/require-param-description,@typescript-eslint/no-explicit-any,max-lines,no-continue,no-loop-func,no-param-reassign */ + +import fs from 'node:fs'; +import path from 'node:path'; + +import colors from 'colors'; +import cliProgress from 'cli-progress'; + +import { chunk, uniqBy } from 'lodash-es'; +import type { Got } from 'got'; +import type { Options as CsvParseOptions } from 'csv-parse'; +import { parse as parseCsvSync } from 'csv-parse/sync'; +import * as t from 'io-ts'; + +import { decodeCodec } from '@transcend-io/type-utils'; +import { logger } from './logger'; +import { createSombraGotInstance } from './lib/graphql'; +import { getPreferencesForIdentifiers } from './lib/preference-management'; + +import Bluebird from 'bluebird'; +// import { extractErrorMessage } from './lib/helpers'; + +const { map } = Bluebird; + +/** + * + */ +type Identifier = { + /** */ name: string /** */; + /** */ + value: string; +}; + +/** + * + */ +type PreferenceRecord = { + /** */ + identifiers?: Identifier[]; + /** */ + purposes?: Array<{ + /** */ + purpose: string; + /** */ + enabled: boolean; + /** */ + preferences?: Array<{ + /** */ + topic?: string; + /** */ + choice?: unknown; + }>; + }>; + [k: string]: unknown; +}; + +/** + * + */ +type Options = { + /** */ + in: string; + /** */ + partition: string; + /** */ + batchSize: number; + /** */ + downloadLogInterval: number; + /** */ + transcendUrl: string; + /** */ + transcendApiKey: string; + /** */ + sombraApiKey?: string; +}; + +/** + * + * @param pathToFile + * @param codec + * @param options + */ +export function readCsv( + pathToFile: string, + codec: T, + options: CsvParseOptions = {}, +): t.TypeOf[] { + const fileContent = parseCsvSync(fs.readFileSync(pathToFile, 'utf-8'), { + columns: true, + relax_column_count: true, + relax_quotes: true, + skip_empty_lines: true, + trim: true, + ...options, + }); + + const data = decodeCodec(t.array(codec), fileContent); + + const parsed = data.map((datum) => + Object.entries(datum).reduce( + (acc, [key, value]) => + Object.assign(acc, { + [key.replace(/[^a-z_.+\-A-Z -~]/g, '')]: value, + }), + {} as any, + ), + ); + + return parsed as any; +} + +const OutRowCodec = t.intersection([ + t.type({ + personID: t.string, + transcendID: t.string, + email_withheld: t.string, + }), + t.record(t.string, t.unknown), +]); + +/** + * + */ +type OutRow = t.TypeOf; + +/** + * + */ +type RowMetrics = { + /** */ + lookupBy: 'transcendID' | 'personID'; + /** */ + lookupValue: string; + + /** Total records AFTER unique-by-fingerprint */ + totalRecords: number; + + /** Total records BEFORE unique-by-fingerprint */ + totalRecordsRaw: number; + + /** */ + email: string; + /** */ + emailCount: number; + /** */ + multiEmail: boolean; + + /** */ + distinctVariants: number; + /** */ + largestVariantCount: number; + /** */ + identicalRecordCount: number; + /** */ + allIdentical: boolean; + + /** */ + isDuplicateRow: boolean; + /** */ + dupOfRowIndex: number; + + /** JSON dump of RAW records (before unique) */ + recordsJson: string; + /** */ + recordsJsonTruncated: boolean; + + /** */ + runAttempted: boolean; + /** */ + runUpdated: boolean; + /** */ + runUpdateIdentifier: 'transcendID' | 'email' | ''; + /** */ + runError: string; +}; + +/** + * + * @param record + */ +function fingerprintRecord(record: PreferenceRecord): string { + const ids = (record.identifiers ?? []) + .filter((x) => x?.name && x?.value) + .map((x) => ({ name: String(x.name), value: String(x.value) })) + .sort((a, b) => + a.name === b.name + ? a.value.localeCompare(b.value) + : a.name.localeCompare(b.name), + ); + + const purposes = (record.purposes ?? []) + .map((p) => { + const prefs = (p.preferences ?? []) + .map((pr) => ({ topic: pr.topic ?? '', choice: pr.choice ?? null })) + .sort((a, b) => String(a.topic).localeCompare(String(b.topic))); + + return { purpose: p.purpose, enabled: !!p.enabled, preferences: prefs }; + }) + .sort((a, b) => String(a.purpose).localeCompare(String(b.purpose))); + + return JSON.stringify({ identifiers: ids, purposes }); +} + +/** + * + * @param records + */ +function getUniqueEmails(records: PreferenceRecord[]): string[] { + const set = new Set(); + for (const r of records) { + for (const id of r.identifiers ?? []) { + if (id?.name === 'email' && id.value) { + const v = String(id.value).trim(); + if (v) set.add(v); + } + } + } + return Array.from(set).sort((a, b) => a.localeCompare(b)); +} + +/** + * Build lookup map with duplicates preserved. + * + * @param records + */ +function buildLookupMapAll( + records: PreferenceRecord[], +): Map { + const m = new Map(); + for (const r of records) { + for (const id of r.identifiers ?? []) { + if (!id?.name || !id?.value) continue; + const k = `${id.name}:${id.value}`; + const arr = m.get(k) ?? []; + arr.push(r); + m.set(k, arr); + } + } + return m; +} + +/** + * + * @param records + */ +function uniqueByFingerprint(records: PreferenceRecord[]): PreferenceRecord[] { + const seen = new Set(); + const out: PreferenceRecord[] = []; + for (const r of records) { + const fp = fingerprintRecord(r); + if (seen.has(fp)) continue; + seen.add(fp); + out.push(r); + } + return out; +} + +/** + * + * @param records + */ +function countRawVsUniqueByFingerprint(records: PreferenceRecord[]): { + /** */ + raw: number; + /** */ + unique: number; +} { + const seen = new Set(); + for (const r of records) seen.add(fingerprintRecord(r)); + return { raw: records.length, unique: seen.size }; +} + +/** + * Fetch preferences for NON-shared identifiers (transcendID/email) in a batch, + * caching raw results PER identifier value. + * + * IMPORTANT: Cache stores RAW arrays (not deduped). + * + * @param sombra + * @param opts + */ +async function getPreferencesForIdentifiersCachedRaw( + sombra: Got, + opts: { + /** */ + identifiers: Identifier[]; + /** */ + partitionKey: string; + /** */ + logInterval: number; + /** */ + cache: Map; + /** */ + counters: { + /** */ hit: number /** */; + /** */ + miss: number; + }; + }, +): Promise { + if (opts.identifiers.length === 0) return []; + + const toFetch: Identifier[] = []; + const fromCache: PreferenceRecord[] = []; + + for (const id of opts.identifiers) { + const k = `${id.name}:${id.value}`; + const cached = opts.cache.get(k); + if (cached) { + opts.counters.hit += 1; + fromCache.push(...cached); + } else { + opts.counters.miss += 1; + toFetch.push(id); + } + } + + if (toFetch.length === 0) return fromCache; + + const fetched = (await getPreferencesForIdentifiers(sombra, { + identifiers: toFetch, + partitionKey: opts.partitionKey, + concurrency: 50, + logInterval: opts.logInterval, + skipLogging: true, + })) as any as PreferenceRecord[]; + + // Populate cache PER identifier by scanning returned records. + // This preserves duplicates in the cached arrays. + const lookupFetched = buildLookupMapAll(fetched); + for (const id of toFetch) { + const k = `${id.name}:${id.value}`; + opts.cache.set(k, lookupFetched.get(k) ?? []); + } + + return [...fromCache, ...fetched]; +} + +/** + * Shared identifiers (personID) must be queried one-by-one. + * Cache stores RAW arrays per identifier. + * + * @param sombra + * @param opts + */ +async function getPreferencesForSharedIdentifiersOneByOneCachedRaw( + sombra: Got, + opts: { + /** */ + identifiers: Identifier[]; + /** */ + partitionKey: string; + /** */ + cache: Map; + /** */ + counters: { + /** */ hit: number /** */; + /** */ + miss: number; + }; + }, +): Promise { + if (opts.identifiers.length === 0) return []; + + const results = await map( + opts.identifiers, + async (identifier) => { + const cacheKey = `${identifier.name}:${identifier.value}`; + const cached = opts.cache.get(cacheKey); + if (cached) { + opts.counters.hit += 1; + return cached; + } + opts.counters.miss += 1; + + const recs = (await getPreferencesForIdentifiers(sombra, { + identifiers: [identifier], + partitionKey: opts.partitionKey, + concurrency: 1, + logInterval: 999999999, + skipLogging: true, + })) as any as PreferenceRecord[]; + + opts.cache.set(cacheKey, recs); + return recs; + }, + { concurrency: 25 }, + ); + + return results.flat(); +} + +/** + * + * @param sombra + * @param args + */ +async function putIdentifierOnly( + sombra: Got, + args: { + /** */ partition: string /** */; + /** */ + identifier: Identifier; + }, +): Promise { + try { + await sombra + .put('v1/preferences', { + json: { + records: [ + { + timestamp: new Date( + Date.now() - 365 * 24 * 60 * 60 * 1000, + ).toISOString(), + partition: args.partition, + identifiers: [args.identifier], + }, + ], + skipWorkflowTriggers: true, + }, + }) + .json(); + } catch (e) { + throw new Error(`Failed to put identifier: ${e?.response?.body}`); + } +} + +/** + * + * @param v + */ +function csvEscape(v: string): string { + const s = v ?? ''; + if (/[",\n\r]/.test(s)) return `"${s.replace(/"/g, '""')}"`; + return s; +} + +/** + * + * @param n + */ +function ms(n: number): string { + if (n < 1000) return `${n}ms`; + return `${(n / 1000).toFixed(2)}s`; +} + +/** + * + */ +async function main(): Promise { + const opts: Options = { + in: path.resolve('./working/costco/concerns/out.csv'), + partition: process.env.PARTITION ?? '448b3320-9d7c-499a-bc56-f0dae33c8f5c', + batchSize: Number(process.env.BATCH_SIZE ?? '500'), + downloadLogInterval: Number(process.env.DOWNLOAD_LOG_INTERVAL ?? '100'), + transcendUrl: process.env.TRANSCEND_URL ?? '', + transcendApiKey: process.env.TRANSCEND_API_KEY ?? '', + sombraApiKey: process.env.SOMBRA_API_KEY, + }; + + const runEnabled = String(process.env.RUN ?? '').toLowerCase() === 'true'; + const maxJsonChars = Number(process.env.MAX_JSON_CHARS ?? '50000'); + + if (!opts.transcendUrl || !opts.transcendApiKey) { + throw new Error( + 'Missing TRANSCEND_URL or TRANSCEND_API_KEY in environment.', + ); + } + + const t0 = Date.now(); + + logger.info(colors.green(`Reading CSV: ${opts.in}`)); + const rows = readCsv(opts.in, OutRowCodec, { columns: true }) as OutRow[]; + + const rawFile = fs.readFileSync(opts.in, 'utf-8'); + const headerLine = + rawFile.split(/\r?\n/)[0] ?? 'personID,transcendID,email_withheld'; + + const extraHeaders = [ + 'lookupBy', + 'lookupValue', + 'totalRecordsRaw', + 'totalRecords', + 'distinctVariants', + 'largestVariantCount', + 'identicalRecordCount', + 'allIdentical', + 'email', + 'emailCount', + 'multiEmail', + 'isDuplicateRow', + 'dupOfRowIndex', + 'recordsJsonTruncated', + 'recordsJson', + 'runAttempted', + 'runUpdated', + 'runUpdateIdentifier', + 'runError', + ]; + + logger.info(colors.green('Creating Sombra client...')); + const sombra = await createSombraGotInstance( + opts.transcendUrl, + opts.transcendApiKey, + opts.sombraApiKey, + ); + + // RAW caches (per identifier value) + const personIdCache = new Map(); + const transcendIdCache = new Map(); + const emailCache = new Map(); + + // duplicate-row tracking + const rowSeen = new Map(); + + const outTmp = `${opts.in}.tmp`; + const writer = fs.createWriteStream(outTmp, { encoding: 'utf8' }); + writer.write(`${headerLine},${extraHeaders.join(',')}\n`); + + const batches = chunk(rows, opts.batchSize); + logger.info( + colors.magenta( + `Processing ${rows.length} rows in ${batches.length} batches (batchSize=${opts.batchSize}) RUN=${runEnabled}`, + ), + ); + + const progressBar = new cliProgress.SingleBar( + { + format: `Rows |${colors.cyan( + '{bar}', + )}| {value}/{total} | {percentage}% | ETA {eta}s | batch {batch}/{batches}`, + }, + cliProgress.Presets.shades_classic, + ); + progressBar.start(rows.length, 0, { batch: 0, batches: batches.length }); + + let processed = 0; + let written = 0; + let dupRows = 0; + + for (let batchIndex = 0; batchIndex < batches.length; batchIndex += 1) { + const batch = batches[batchIndex]; + const batchT0 = Date.now(); + + progressBar.update(processed, { + batch: batchIndex + 1, + batches: batches.length, + }); + + // counters for cache efficiency + const cTrans = { hit: 0, miss: 0 }; + const cEmail = { hit: 0, miss: 0 }; + const cPerson = { hit: 0, miss: 0 }; + + const stage0 = Date.now(); + const transcendIDs: Identifier[] = uniqBy( + batch + .map((r) => { + const v = String((r as any).transcendID ?? '').trim(); + return v ? ({ name: 'transcendID', value: v } as Identifier) : null; + }) + .filter(Boolean) as Identifier[], + (x) => `${x.name}:${x.value}`, + ); + + const personIDs: Identifier[] = uniqBy( + batch + .map((r) => { + const v = String((r as any).personID ?? '').trim(); + return v ? ({ name: 'personID', value: v } as Identifier) : null; + }) + .filter(Boolean) as Identifier[], + (x) => `${x.name}:${x.value}`, + ); + + const emails: Identifier[] = uniqBy( + batch + .map((r) => { + const v = String((r as any).email ?? '').trim(); + return v && v.includes('@') + ? ({ name: 'email', value: v } as Identifier) + : null; + }) + .filter(Boolean) as Identifier[], + (x) => `${x.name}:${x.value}`, + ); + + const idBuildMs = Date.now() - stage0; + + // FETCH RAW (no dedupe here) + const stage1 = Date.now(); + const [recordsByTranscendRaw, recordsByPersonRaw, recordsByEmailRaw] = + await Promise.all([ + getPreferencesForIdentifiersCachedRaw(sombra, { + identifiers: transcendIDs, + partitionKey: opts.partition, + logInterval: opts.downloadLogInterval, + cache: transcendIdCache, + counters: cTrans, + }), + getPreferencesForSharedIdentifiersOneByOneCachedRaw(sombra, { + identifiers: personIDs, + partitionKey: opts.partition, + cache: personIdCache, + counters: cPerson, + }), + getPreferencesForIdentifiersCachedRaw(sombra, { + identifiers: emails, + partitionKey: opts.partition, + logInterval: opts.downloadLogInterval, + cache: emailCache, + counters: cEmail, + }), + ]); + const fetchMs = Date.now() - stage1; + + // Batch-level “how many dupes” metrics (raw vs unique-by-fingerprint) + const tCounts = countRawVsUniqueByFingerprint(recordsByTranscendRaw); + const pCounts = countRawVsUniqueByFingerprint(recordsByPersonRaw); + const eCounts = countRawVsUniqueByFingerprint(recordsByEmailRaw); + + const allRaw = [ + ...(recordsByTranscendRaw as PreferenceRecord[]), + ...(recordsByPersonRaw as PreferenceRecord[]), + ...(recordsByEmailRaw as PreferenceRecord[]), + ]; + const allCounts = countRawVsUniqueByFingerprint(allRaw); + + // Lookup map MUST preserve duplicates so per-row raw length is meaningful + const lookupMapRaw = buildLookupMapAll(allRaw); + + // ROW PROCESSING + const stage2 = Date.now(); + const results = await map( + batch, + async (r, idxInBatch) => { + const rowIndex = batchIndex * opts.batchSize + idxInBatch + 1; + + const personID = String((r as any).personID ?? '').trim(); + const transcendID = String((r as any).transcendID ?? '').trim(); + const emailWithheld = String((r as any).email_withheld ?? '').trim(); + const email = String((r as any).email ?? '').trim(); + + const lookupBy: 'transcendID' | 'personID' = transcendID + ? 'transcendID' + : 'personID'; + const lookupValue = transcendID || personID || ''; + + const rowKey = `${personID}||${transcendID}||${emailWithheld}`; + const firstSeenAt = rowSeen.get(rowKey) ?? 0; + const isDup = firstSeenAt > 0; + if (!isDup) rowSeen.set(rowKey, rowIndex); + else dupRows += 1; + + const metrics: RowMetrics = { + lookupBy, + lookupValue, + totalRecordsRaw: 0, + totalRecords: 0, + + email: '', + emailCount: 0, + multiEmail: false, + + distinctVariants: 0, + largestVariantCount: 0, + identicalRecordCount: 0, + allIdentical: false, + + isDuplicateRow: isDup, + dupOfRowIndex: isDup ? firstSeenAt : 0, + + recordsJson: '', + recordsJsonTruncated: false, + + runAttempted: false, + runUpdated: false, + runUpdateIdentifier: '', + runError: '', + }; + + if (!lookupValue) { + metrics.runError = 'Missing both transcendID and personID'; + return { personID, transcendID, emailWithheld, metrics }; + } + + // RAW matches (duplicates preserved) + const recsRaw: PreferenceRecord[] = [ + ...(transcendID + ? lookupMapRaw.get(`transcendID:${transcendID}`) ?? [] + : []), + // ...(personID ? lookupMapRaw.get(`personID:${personID}`) ?? [] : []), + ...(email && email.includes('@') + ? lookupMapRaw.get(`email:${email}`) ?? [] + : []), + ]; + + metrics.totalRecordsRaw = recsRaw.length; + + // Unique-by-fingerprint (this is where you measure “how many dupes”) + const recsUnique = uniqueByFingerprint(recsRaw); + metrics.totalRecords = recsUnique.length; + + // email source of truth from UNIQUE set + const emailsFound = getUniqueEmails(recsUnique); + metrics.emailCount = emailsFound.length; + metrics.multiEmail = emailsFound.length > 1; + metrics.email = emailsFound.length === 1 ? emailsFound[0] : ''; + + // variant stats on UNIQUE set + if (recsUnique.length > 0) { + metrics.distinctVariants = recsUnique.length; // because recsUnique is unique by fingerprint + metrics.largestVariantCount = 1; + metrics.identicalRecordCount = 1; + metrics.allIdentical = recsUnique.length === 1; + } + + // JSON dump of RAW records (pre-unique) + let json = ''; + try { + json = JSON.stringify(recsRaw); + } catch (e: any) { + json = JSON.stringify({ + error: 'Failed to stringify recsRaw', + message: e?.message ?? String(e), + }); + } + if (maxJsonChars > 0 && json.length > maxJsonChars) { + metrics.recordsJsonTruncated = true; + metrics.recordsJson = json.slice(0, maxJsonChars); + } else { + metrics.recordsJson = json; + } + + if (runEnabled) { + metrics.runAttempted = true; + try { + if (transcendID) { + await putIdentifierOnly(sombra, { + partition: opts.partition, + identifier: { name: 'transcendID', value: transcendID }, + }); + metrics.runUpdated = true; + metrics.runUpdateIdentifier = 'transcendID'; + } else if (emailsFound.length === 1) { + await putIdentifierOnly(sombra, { + partition: opts.partition, + identifier: { name: 'email', value: emailsFound[0] }, + }); + metrics.runUpdated = true; + metrics.runUpdateIdentifier = 'email'; + } else if (emailsFound.length === 0) { + metrics.runError = + 'RUN enabled but no transcendID and no email found in existing records'; + } else { + metrics.runError = `RUN enabled but multiple emails found (${emailsFound.length})`; + } + } catch (err: any) { + metrics.runError = err?.message ?? String(err); + } + if (metrics.runError) { + logger.warn( + colors.yellow( + `Row ${rowIndex} update error: ${metrics.runError}`, + ), + ); + } + } + + return { personID, transcendID, emailWithheld, metrics }; + }, + { concurrency: 50 }, + ); + const processMs = Date.now() - stage2; + + // WRITE (always write 1 output row per input row) + const stage3 = Date.now(); + for (const { + personID, + transcendID, + emailWithheld, + metrics, + } of results as any) { + writer.write( + `${[ + csvEscape(personID), + csvEscape(transcendID), + csvEscape(emailWithheld), + + csvEscape(metrics.lookupBy), + csvEscape(metrics.lookupValue), + csvEscape(String(metrics.totalRecordsRaw)), + csvEscape(String(metrics.totalRecords)), + csvEscape(String(metrics.distinctVariants)), + csvEscape(String(metrics.largestVariantCount)), + csvEscape(String(metrics.identicalRecordCount)), + csvEscape(String(metrics.allIdentical)), + + csvEscape(metrics.email), + csvEscape(String(metrics.emailCount)), + csvEscape(String(metrics.multiEmail)), + + csvEscape(String(metrics.isDuplicateRow)), + csvEscape(String(metrics.dupOfRowIndex)), + + csvEscape(String(metrics.recordsJsonTruncated)), + csvEscape(metrics.recordsJson), + + csvEscape(String(metrics.runAttempted)), + csvEscape(String(metrics.runUpdated)), + csvEscape(metrics.runUpdateIdentifier), + csvEscape(metrics.runError), + ].join(',')}\n`, + ); + written += 1; + } + const writeMs = Date.now() - stage3; + + processed += batch.length; + progressBar.update(processed, { + batch: batchIndex + 1, + batches: batches.length, + }); + + const batchMs = Date.now() - batchT0; + + // This is the key log you want: raw vs unique before any dedupe. + logger.info( + colors.green( + `Batch ${batchIndex + 1}/${batches.length} rows=${ + batch.length + } written=${written} dupRows=${dupRows} ` + + `| ids: tID=${transcendIDs.length} email=${emails.length} personID=${personIDs.length} ` + + `| fetched(raw/uniq): tID=${tCounts.raw}/${tCounts.unique} ` + + `email=${eCounts.raw}/${eCounts.unique} personID=${pCounts.raw}/${pCounts.unique} ` + + `ALL=${allCounts.raw}/${allCounts.unique} ` + + `| cache(hit/miss): tID=${cTrans.hit}/${cTrans.miss} email=${cEmail.hit}/${cEmail.miss} personID=${cPerson.hit}/${cPerson.miss} ` + + `| timing: build=${ms(idBuildMs)} fetch=${ms(fetchMs)} process=${ms( + processMs, + )} write=${ms(writeMs)} total=${ms(batchMs)}`, + ), + ); + } + + progressBar.update(rows.length); + progressBar.stop(); + + await new Promise((resolve, reject) => { + writer.end(() => resolve()); + writer.on('error', reject); + }); + + fs.renameSync(outTmp, opts.in); + + const totalMs = Date.now() - t0; + logger.info( + colors.magenta( + `Done. Wrote ${written}/${rows.length} rows (dupRows=${dupRows}) to "${ + opts.in + }" in ${ms(totalMs)}.`, + ), + ); +} + +main().catch((err) => { + logger.error(colors.red(err?.stack ?? String(err))); + process.exit(1); +}); +/* eslint-enable jsdoc/require-description,jsdoc/require-returns,jsdoc/require-param-description,@typescript-eslint/no-explicit-any,max-lines,no-continue,no-loop-func,no-param-reassign */ +/* eslint-enable max-len */ diff --git a/transcend-yml-schema-v9.json b/transcend-yml-schema-v9.json new file mode 100644 index 00000000..b3fda814 --- /dev/null +++ b/transcend-yml-schema-v9.json @@ -0,0 +1,54371 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/transcend-io/cli/main/transcend-yml-schema-v9.json", + "title": "transcend.yml", + "description": "Define personal data schema and Transcend config as code with the Transcend CLI.", + "type": "object", + "properties": { + "action-items": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "type", + "collections" + ], + "properties": { + "title": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ACTION_MISSING_SILOS", + "API_KEY_STALE", + "ASSESSMENT_FORM_ASSIGNED", + "ASSESSMENT_FORM_NEEDS_REVIEW", + "REQUEST_DATA_SILO_MARKED_ACTIONABLE", + "REQUEST_DATA_SILO_FILES_NEED_REVIEW", + "COMMUNICATION_UNREAD", + "DATA_SILO_COMMUNICATION_UNREAD", + "DATA_POINT", + "DATA_POINT_MISSING_FIELDS", + "DATA_SILO_NEEDS_RECONNECT", + "DATA_SILO_NEEDS_RECONNECT_ASSIGNED", + "DATA_SILO_NOT_CONFIGURED", + "DATA_SILO_NOT_CONFIGURED_ASSIGNED", + "DATA_SILO_MISSING_IDENTIFIERS", + "LOOKUP_PROCESSES_WITH_ERRORS", + "DATA_SILOS_NEEDING_MANUAL_ENTRY", + "PROFILE_DATA_POINT_STATUS", + "REQUEST_EXPIRY", + "REQUEST_DATA_SILO_ERROR", + "REQUEST_ENRICHER_ERROR", + "REQUEST_IDENTIFIER_NEEDS_VERIFICATION", + "REQUEST_ENRICHER_PERSON_NEEDS_MANUAL_ENTRY", + "REQUEST_ACTIONABLE_STATUS", + "REQUEST_ON_HOLD", + "USER_AWAITING_NOTIFICATION", + "USER_NEEDS_CONFIGURATION", + "SOMBRA_VERSION_UPGRADE", + "SOMBRA_NEEDS_KEY_ROTATION", + "DATA_FLOW_NEEDS_REVIEW", + "DATA_FLOW_ASSIGNED_FOR_REVIEW", + "COOKIE_NEEDS_REVIEW", + "COOKIE_ASSIGNED_FOR_REVIEW", + "CONSENT_MANAGER_VERSION_UPGRADE", + "PLUGINS_WITH_ERRORS", + "ONBOARDING", + "REQUEST_ASSIGNED_TO_USER", + "BUSINESS_ENTITY_NEEDS_DOCUMENTATION", + "DATA_POINT_DATABASE_QUERY_NEEDS_APPROVAL" + ] + }, + "collections": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "properties": { + "priority": { + "type": "string", + "enum": [ + "WONT_DO", + "LOW", + "MEDIUM", + "HIGH", + "CRITICAL" + ] + }, + "customerExperienceActionItemId": { + "type": "string" + }, + "dueDate": { + "type": "string" + }, + "resolved": { + "type": "boolean" + }, + "notes": { + "type": "string" + }, + "link": { + "type": "string" + }, + "users": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "action-item-collections": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "productLine" + ], + "properties": { + "title": { + "type": "string" + }, + "productLine": { + "type": "string", + "enum": [ + "DSR_AUTOMATION", + "DATA_INVENTORY", + "CONSENT_MANAGEMENT", + "PRIVACY_CENTER", + "ADMINISTRATION", + "ASSESSMENTS", + "PATHFINDER", + "PREFERENCE_MANAGEMENT", + "PROMPT_MANAGER", + "CONTRACT_SCANNING", + "WEB_AUDITOR", + "SOMBRA", + "SILO_DISCOVERY", + "STRUCTURED_DISCOVERY", + "UNSTRUCTURED_DISCOVERY", + "DATA_LINEAGE" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "hidden": { + "type": "boolean" + } + } + } + ] + } + }, + "api-keys": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "description" + ], + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "sso-department": { + "type": "string" + }, + "sso-group": { + "type": "string" + }, + "sso-title": { + "type": "string" + }, + "users": { + "type": "array", + "items": { + "type": "string" + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "readOnly", + "fullAdmin", + "viewAllActionItems", + "manageAllActionItems", + "makeDataSubjectRequest", + "connectDataSilos", + "deployPrivacyCenter", + "manageConsentManager", + "viewConsentManager", + "manageConsentManagerDisplaySettings", + "manageConsentManagerDeveloperSettings", + "manageDataFlow", + "deployConsentManager", + "deployTestConsentManager", + "viewCustomerDataDataMapping", + "viewCustomerDataPrivacyRequests", + "manageAccessControl", + "manageApiKeys", + "manageBilling", + "manageDataMap", + "managedAssignedIntegrations", + "managedAssignedDataInventory", + "managedAssignedConsentManager", + "managedAssignedRequests", + "viewAssignedIntegrations", + "viewAssignedDataInventory", + "viewAssignedConsentManager", + "viewAssignedRequests", + "manageDataSubjectRequestSettings", + "manageEmailTemplates", + "manageOrganizationInfo", + "managePrivacyCenter", + "viewPrivacyCenter", + "manageLegalHold", + "manageRequestCompilation", + "manageRequestIdentities", + "manageRequestSecurity", + "manageSombraRootKeys", + "manageSSO", + "manageEmailDomains", + "requestApproval", + "viewApiKeys", + "viewDataFlow", + "viewDataMap", + "viewLegalHold", + "viewDataSubjectRequestSettings", + "viewEmailTemplates", + "viewEmailDomains", + "viewRequestCompilation", + "viewRequestIdentitySettings", + "viewRequests", + "viewScopes", + "viewSSO", + "viewEmployees", + "viewDataInventory", + "manageDataInventory", + "manageGlobalAttributes", + "viewGlobalAttributes", + "viewAssessments", + "manageAssessments", + "viewAssignedAssessments", + "manageAssignedAssessments", + "managePrompts", + "managePromptRuns", + "executePrompt", + "viewPromptRuns", + "viewPrompts", + "approvePrompts", + "manageAuditor", + "executeAuditor", + "viewCodeScanning", + "manageCodeScanning", + "viewPathfinder", + "managePathfinder", + "viewContractScanning", + "manageContractScanning", + "viewAuditorRuns", + "viewAuditEvents", + "manageActionItemCollections", + "viewManagedConsentDatabaseAdminApi", + "manageStoredPreferences", + "managePreferenceStoreSettings", + "viewPreferenceStoreSettings", + "managePolicies", + "viewPolicies", + "manageIntlMessages", + "viewIntlMessages", + "llmLogTransfer", + "manageWorkflows", + "viewDataSubCategories", + "manageDataSubCategories", + "generatePreferenceAccessTokens" + ] + } + } + } + } + ] + } + }, + "templates": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + } + }, + "enrichers": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "output-identifiers" + ], + "properties": { + "title": { + "type": "string" + }, + "output-identifiers": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "url": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "SOMBRA", + "email", + "phone", + "SERVER", + "PERSON", + "LEGAL_HOLD", + "AUTO_APPROVE", + "REGEX_MATCH", + "REGION_MATCH", + "DATABASE", + "LOOKER", + "WAIT_PERIOD", + "GOVERNMENT_ID", + "CUSTOM_FUNCTION" + ] + }, + "input-identifier": { + "type": "string" + }, + "testRegex": { + "type": "string" + }, + "lookerQueryTitle": { + "type": "string" + }, + "expirationDuration": { + "type": "number" + }, + "transitionRequestStatus": { + "type": "string", + "enum": [ + "CANCELED", + "ON_HOLD" + ] + }, + "phoneNumbers": { + "type": "array", + "items": { + "type": "string" + } + }, + "regionList": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + }, + "data-subjects": { + "type": "array", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "isSecret": { + "type": "boolean" + } + } + } + ] + } + }, + "privacy-actions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "AUTOMATED_DECISION_MAKING_OPT_OUT", + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT", + "CONTACT_OPT_OUT", + "SALE_OPT_OUT", + "TRACKING_OPT_OUT", + "CUSTOM_OPT_OUT", + "AUTOMATED_DECISION_MAKING_OPT_IN", + "USE_OF_SENSITIVE_INFORMATION_OPT_IN", + "SALE_OPT_IN", + "TRACKING_OPT_IN", + "CONTACT_OPT_IN", + "CUSTOM_OPT_IN", + "ACCESS", + "ERASURE", + "RECTIFICATION", + "RESTRICTION", + "BUSINESS_PURPOSE", + "PLACE_ON_LEGAL_HOLD", + "REMOVE_FROM_LEGAL_HOLD" + ] + } + } + } + } + ] + } + }, + "attributes": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "MULTI_SELECT", + "SINGLE_SELECT", + "TEXT", + "EMAIL", + "TELEPHONE", + "URL", + "ASSESSMENT" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "actionItem", + "airgapCookie", + "airgapDataFlow", + "assessmentForm", + "assessmentGroup", + "auditorRun", + "auditorSchedule", + "businessEntity", + "dataSubCategory", + "dataPoint", + "dataPointLevel", + "dataSilo", + "enricher", + "identifier", + "legalHold", + "legalMatter", + "processingActivity", + "processingPurposeSubCategory", + "prompt", + "promptGroup", + "promptRun", + "request", + "scannedObject", + "scannedObjectPath", + "subject", + "subDataPoint", + "vendor" + ] + } + }, + "values": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "color": { + "type": "string" + } + } + } + ] + } + } + } + } + ] + } + }, + "business-entities": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "address": { + "type": "string" + }, + "headquarterCountry": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "headquarterSubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + }, + "dataProtectionOfficerName": { + "type": "string" + }, + "dataProtectionOfficerEmail": { + "type": "string" + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "vendors": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "dataProcessingAgreementLink": { + "type": "string" + }, + "contactName": { + "type": "string" + }, + "contactPhone": { + "type": "string" + }, + "address": { + "type": "string" + }, + "headquarterCountry": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "headquarterSubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + }, + "websiteUrl": { + "type": "string" + }, + "businessEntity": { + "type": "string" + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "data-categories": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "category" + ], + "properties": { + "name": { + "type": "string" + }, + "category": { + "type": "string", + "enum": [ + "FINANCIAL", + "HEALTH", + "CONTACT", + "LOCATION", + "DEMOGRAPHIC", + "ID", + "ONLINE_ACTIVITY", + "USER_PROFILE", + "SOCIAL_MEDIA", + "CONNECTION", + "TRACKING", + "DEVICE", + "SURVEY", + "OTHER", + "UNSPECIFIED", + "NOT_PERSONAL_DATA", + "INTEGRATION_IDENTIFIER" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "regex": { + "type": "string" + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "processing-purposes": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "purpose" + ], + "properties": { + "name": { + "type": "string" + }, + "purpose": { + "type": "string", + "enum": [ + "ESSENTIAL", + "ADDITIONAL_FUNCTIONALITY", + "ADVERTISING", + "MARKETING", + "ANALYTICS", + "PERSONALIZATION", + "OPERATION_SECURITY", + "LEGAL", + "TRANSFER", + "SALE", + "HR", + "OTHER", + "UNSPECIFIED" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "data-subjects": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "active": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "adminDashboardDefaultSilentMode": { + "type": "boolean" + }, + "actions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "AUTOMATED_DECISION_MAKING_OPT_OUT", + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT", + "CONTACT_OPT_OUT", + "SALE_OPT_OUT", + "TRACKING_OPT_OUT", + "CUSTOM_OPT_OUT", + "AUTOMATED_DECISION_MAKING_OPT_IN", + "USE_OF_SENSITIVE_INFORMATION_OPT_IN", + "SALE_OPT_IN", + "TRACKING_OPT_IN", + "CONTACT_OPT_IN", + "CUSTOM_OPT_IN", + "ACCESS", + "ERASURE", + "RECTIFICATION", + "RESTRICTION", + "BUSINESS_PURPOSE", + "PLACE_ON_LEGAL_HOLD", + "REMOVE_FROM_LEGAL_HOLD" + ] + } + } + } + } + ] + } + }, + "actions": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AUTOMATED_DECISION_MAKING_OPT_OUT", + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT", + "CONTACT_OPT_OUT", + "SALE_OPT_OUT", + "TRACKING_OPT_OUT", + "CUSTOM_OPT_OUT", + "AUTOMATED_DECISION_MAKING_OPT_IN", + "USE_OF_SENSITIVE_INFORMATION_OPT_IN", + "SALE_OPT_IN", + "TRACKING_OPT_IN", + "CONTACT_OPT_IN", + "CUSTOM_OPT_IN", + "ACCESS", + "ERASURE", + "RECTIFICATION", + "RESTRICTION", + "BUSINESS_PURPOSE", + "PLACE_ON_LEGAL_HOLD", + "REMOVE_FROM_LEGAL_HOLD" + ] + } + } + }, + { + "type": "object", + "properties": { + "skipSecondaryIfNoFiles": { + "type": "boolean" + }, + "skipDownloadableStep": { + "type": "boolean" + }, + "requiresReview": { + "type": "boolean" + }, + "waitingPeriod": { + "type": "number" + }, + "regionDetectionMethod": { + "type": "string", + "enum": [ + "DISABLED", + "AUTO", + "FORM" + ] + }, + "regionList": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + }, + "regionBlockList": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + } + } + } + ] + } + }, + "identifiers": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "selectOptions": { + "type": "array", + "items": { + "type": "string" + } + }, + "privacyCenterVisibility": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "AUTOMATED_DECISION_MAKING_OPT_OUT", + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT", + "CONTACT_OPT_OUT", + "SALE_OPT_OUT", + "TRACKING_OPT_OUT", + "CUSTOM_OPT_OUT", + "AUTOMATED_DECISION_MAKING_OPT_IN", + "USE_OF_SENSITIVE_INFORMATION_OPT_IN", + "SALE_OPT_IN", + "TRACKING_OPT_IN", + "CONTACT_OPT_IN", + "CUSTOM_OPT_IN", + "ACCESS", + "ERASURE", + "RECTIFICATION", + "RESTRICTION", + "BUSINESS_PURPOSE", + "PLACE_ON_LEGAL_HOLD", + "REMOVE_FROM_LEGAL_HOLD" + ] + } + }, + "dataSubjects": { + "type": "array", + "items": { + "type": "string" + } + }, + "isRequiredInForm": { + "type": "boolean" + }, + "placeholder": { + "type": "string" + }, + "displayTitle": { + "type": "string" + }, + "displayDescription": { + "type": "string" + }, + "displayOrder": { + "type": "number" + }, + "isUniqueOnPreferenceStore": { + "type": "boolean" + } + } + } + ] + } + }, + "data-silos": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "integrationName" + ], + "properties": { + "title": { + "type": "string" + }, + "integrationName": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "outer-type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "url": { + "type": "string" + }, + "api-key-title": { + "type": "string" + }, + "headers": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "isSecret": { + "type": "boolean" + } + } + } + ] + } + }, + "data-subjects": { + "type": "array", + "items": { + "type": "string" + } + }, + "identity-keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "deletion-dependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "disabled": { + "type": "boolean" + }, + "datapoints": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "data-collection-tag": { + "type": "string" + }, + "privacy-action-queries": { + "type": "object", + "properties": { + "ACCESS": { + "type": "string" + }, + "ERASURE": { + "type": "string" + }, + "RECTIFICATION": { + "type": "string" + }, + "RESTRICTION": { + "type": "string" + }, + "BUSINESS_PURPOSE": { + "type": "string" + }, + "PLACE_ON_LEGAL_HOLD": { + "type": "string" + }, + "REMOVE_FROM_LEGAL_HOLD": { + "type": "string" + }, + "AUTOMATED_DECISION_MAKING_OPT_OUT": { + "type": "string" + }, + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT": { + "type": "string" + }, + "CONTACT_OPT_OUT": { + "type": "string" + }, + "SALE_OPT_OUT": { + "type": "string" + }, + "TRACKING_OPT_OUT": { + "type": "string" + }, + "CUSTOM_OPT_OUT": { + "type": "string" + }, + "AUTOMATED_DECISION_MAKING_OPT_IN": { + "type": "string" + }, + "USE_OF_SENSITIVE_INFORMATION_OPT_IN": { + "type": "string" + }, + "SALE_OPT_IN": { + "type": "string" + }, + "TRACKING_OPT_IN": { + "type": "string" + }, + "CONTACT_OPT_IN": { + "type": "string" + }, + "CUSTOM_OPT_IN": { + "type": "string" + } + } + }, + "privacy-actions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ACCESS", + "ERASURE", + "RECTIFICATION", + "RESTRICTION", + "BUSINESS_PURPOSE", + "PLACE_ON_LEGAL_HOLD", + "REMOVE_FROM_LEGAL_HOLD", + "AUTOMATED_DECISION_MAKING_OPT_OUT", + "USE_OF_SENSITIVE_INFORMATION_OPT_OUT", + "CONTACT_OPT_OUT", + "SALE_OPT_OUT", + "TRACKING_OPT_OUT", + "CUSTOM_OPT_OUT", + "AUTOMATED_DECISION_MAKING_OPT_IN", + "USE_OF_SENSITIVE_INFORMATION_OPT_IN", + "SALE_OPT_IN", + "TRACKING_OPT_IN", + "CONTACT_OPT_IN", + "CUSTOM_OPT_IN" + ] + } + }, + "fields": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "purposes": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "purpose" + ], + "properties": { + "purpose": { + "type": "string", + "enum": [ + "ESSENTIAL", + "ADDITIONAL_FUNCTIONALITY", + "ADVERTISING", + "MARKETING", + "ANALYTICS", + "PERSONALIZATION", + "OPERATION_SECURITY", + "LEGAL", + "TRANSFER", + "SALE", + "HR", + "OTHER", + "UNSPECIFIED" + ] + } + } + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] + } + }, + "categories": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "category" + ], + "properties": { + "category": { + "type": "string", + "enum": [ + "FINANCIAL", + "HEALTH", + "CONTACT", + "LOCATION", + "DEMOGRAPHIC", + "ID", + "ONLINE_ACTIVITY", + "USER_PROFILE", + "SOCIAL_MEDIA", + "CONNECTION", + "TRACKING", + "DEVICE", + "SURVEY", + "OTHER", + "UNSPECIFIED", + "NOT_PERSONAL_DATA", + "INTEGRATION_IDENTIFIER" + ] + } + } + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] + } + }, + "guessed-categories": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "category", + "status", + "confidence" + ], + "properties": { + "category": { + "allOf": [ + { + "type": "object", + "required": [ + "category" + ], + "properties": { + "category": { + "type": "string", + "enum": [ + "FINANCIAL", + "HEALTH", + "CONTACT", + "LOCATION", + "DEMOGRAPHIC", + "ID", + "ONLINE_ACTIVITY", + "USER_PROFILE", + "SOCIAL_MEDIA", + "CONNECTION", + "TRACKING", + "DEVICE", + "SURVEY", + "OTHER", + "UNSPECIFIED", + "NOT_PERSONAL_DATA", + "INTEGRATION_IDENTIFIER" + ] + } + } + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] + }, + "status": { + "type": "string", + "enum": [ + "APPROVED", + "PENDING", + "REJECTED" + ] + }, + "confidence": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "classifierVersion": { + "type": "number" + } + } + } + ] + } + }, + "access-request-visibility-enabled": { + "type": "boolean" + }, + "erasure-request-redaction-enabled": { + "type": "boolean" + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "email-settings": { + "type": "object", + "properties": { + "notify-email-address": { + "type": "string" + }, + "send-frequency": { + "type": "number" + }, + "send-type": { + "type": "string", + "enum": [ + "PER_DSR", + "CROSS_DSR" + ] + }, + "include-identifiers-attachment": { + "type": "boolean" + }, + "completion-link-type": { + "type": "string", + "enum": [ + "LOGGED_IN_USER", + "UNAUTHENTICATED_EXTERNAL_USER", + "NO_LINK_MARK_DATAPOINT_AS_RESOLVED" + ] + }, + "manual-work-retry-frequency": { + "type": "string" + } + } + }, + "country": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "countrySubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "businessEntityTitles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "data-flows": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "value", + "type" + ], + "properties": { + "value": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "HOST", + "PATH", + "QUERY_PARAM", + "REGEX", + "CSP" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "trackingPurposes": { + "type": "array", + "items": { + "type": "string" + } + }, + "service": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "LIVE", + "NEEDS_REVIEW" + ] + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "cookies": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "isRegex": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "trackingPurposes": { + "type": "array", + "items": { + "type": "string" + } + }, + "service": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "LIVE", + "NEEDS_REVIEW" + ] + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "consent-manager": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "bundleUrls": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "domains": { + "type": "array", + "items": { + "type": "string" + } + }, + "partition": { + "type": "string" + }, + "consentPrecedence": { + "type": "string", + "enum": [ + "user", + "signal" + ] + }, + "unknownRequestPolicy": { + "type": "string", + "enum": [ + "ALLOW", + "REQUIRE_FULL_CONSENT", + "BLOCK" + ] + }, + "unknownCookiePolicy": { + "type": "string", + "enum": [ + "ALLOW", + "REQUIRE_FULL_CONSENT", + "BLOCK" + ] + }, + "syncEndpoint": { + "type": "string" + }, + "telemetryPartitioning": { + "type": "string", + "enum": [ + "origin", + "path", + "url" + ] + }, + "signedIabAgreement": { + "type": "string", + "enum": [ + "yes", + "no", + "unknown" + ] + }, + "experiences": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "regions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "country": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "countrySubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + } + } + }, + "onConsentExpiry": { + "type": "string", + "enum": [ + "Prompt", + "ResetAll", + "ResetOptIns" + ] + }, + "consentExpiry": { + "type": "number" + }, + "operator": { + "type": "string", + "enum": [ + "IN", + "NOT_IN" + ] + }, + "displayPriority": { + "type": "number" + }, + "viewState": { + "type": "string", + "enum": [ + "QuickOptions", + "QuickOptions3", + "AcceptAll", + "AcceptAllRejectAllToggle", + "AcceptAllOrMoreChoices", + "AcceptOrRejectAll", + "AcceptOrRejectAllOrMoreChoices", + "AcceptOrRejectAnalytics", + "AcceptOrRejectAdvertising", + "NoticeAndDoNotSell", + "DoNotSellExplainer", + "CompleteOptionsToggles", + "PrivacyPolicyNotice", + "PrivacyPolicyNoticeWithCloseButton", + "CompleteOptions", + "CompleteOptionsInverted", + "Hidden", + "TCF_EU" + ] + }, + "purposes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "trackingType" + ], + "properties": { + "trackingType": { + "type": "string" + } + } + } + }, + "optedOutPurposes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "trackingType" + ], + "properties": { + "trackingType": { + "type": "string" + } + } + } + }, + "browserLanguages": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "om", + "ab", + "aa", + "af", + "sq", + "am", + "ar-DZ", + "ar-BH", + "ar-EG", + "ar-IQ", + "ar-JO", + "ar-KW", + "ar-LB", + "ar-LY", + "ar-MA", + "ar-OM", + "ar-QA", + "ar-SA", + "ar-SY", + "ar-TN", + "ar-AE", + "ar-YE", + "ar", + "hy", + "as", + "ay", + "az", + "ba", + "eu", + "be", + "bn", + "dz", + "bh", + "bi", + "br", + "bg-BG", + "bg", + "my", + "km", + "ca", + "zh-CN", + "zh-HK", + "zh-MO", + "zh-SG", + "zh-TW", + "zh", + "co", + "hr-HR", + "hr", + "cs-CZ", + "cs", + "da-DK", + "da", + "div", + "nl-BE", + "nl-NL", + "nl", + "en-AU", + "en-BZ", + "en-CA", + "en-IE", + "en-JM", + "en-NZ", + "en-PH", + "en-ZA", + "en-CH", + "en-TT", + "en-GB", + "en-US", + "en-ZW", + "us", + "eo", + "et", + "et-EE", + "fo", + "fa", + "fj", + "fi-FI", + "fi", + "fr-BE", + "fr-CA", + "fr-FR", + "fr-LU", + "fr-MC", + "fr-CH", + "fr", + "fy", + "mk", + "gd", + "gl", + "ka", + "de-AT", + "de-DE", + "de-LI", + "de-LU", + "de-CH", + "de", + "el-GR", + "el", + "kl", + "gn", + "gu", + "ha", + "iw", + "hi", + "hu-HU", + "hu", + "is", + "is-IS", + "in", + "ia", + "ie", + "ik", + "ga", + "ga-IE", + "it-IT", + "it-CH", + "it", + "ja", + "jw", + "kn", + "ks", + "kk", + "rw", + "ky", + "rn", + "kok", + "ko", + "ku", + "kz", + "lo", + "la", + "lv", + "lv-LV", + "ln", + "lt-LT", + "lt", + "mg", + "ms", + "ml", + "mt", + "mt-MT", + "mi", + "mr", + "mo", + "mn", + "na", + "ne", + "no", + "nb", + "nn", + "no-NO", + "nb-NO", + "nn-NO", + "oc", + "or", + "ps", + "pl-PL", + "pl", + "pt-BR", + "pt-PT", + "pt-CH", + "pt", + "pa", + "qu", + "rm", + "ro-MD", + "ro-RO", + "ro", + "ru-MD", + "ru", + "sm", + "sg", + "sa", + "sr", + "sh", + "st", + "sn", + "sd", + "si", + "ss", + "sk", + "sk-SK", + "sl", + "sl-SI", + "so", + "sb", + "es-AR", + "es-BO", + "es-CL", + "es-CO", + "es-CR", + "es-DO", + "es-EC", + "es-SV", + "es-ES", + "es-GT", + "es-HN", + "es-MX", + "es-NI", + "es-PA", + "es-PY", + "es-PE", + "es-PR", + "es-US", + "es-UY", + "es-VE", + "es", + "su", + "sx", + "sw", + "sv-FI", + "sv-SE", + "sv", + "gsw", + "gsw-LI", + "gsw-CH", + "syr", + "tl", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "uk", + "ur", + "uz", + "vi", + "vo", + "cy", + "wo", + "xh", + "yi", + "yo", + "zu" + ] + } + }, + "browserTimeZones": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/La_Rioja", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Fort_Nelson", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Monticello", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Colombo", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Hebron", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ulaanbaatar", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/Perth", + "Australia/Sydney", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis" + ] + } + } + } + } + ] + } + }, + "theme": { + "type": "object", + "properties": { + "primaryColor": { + "type": "string" + }, + "fontColor": { + "type": "string" + }, + "privacyPolicy": { + "type": "string" + }, + "prompt": { + "type": "number" + } + } + }, + "syncGroups": { + "type": "string" + } + } + }, + "prompts": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "content" + ], + "properties": { + "title": { + "type": "string" + }, + "content": { + "type": "string" + } + } + } + }, + "prompt-partials": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "content" + ], + "properties": { + "title": { + "type": "string" + }, + "content": { + "type": "string" + } + } + } + }, + "prompt-groups": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "description", + "prompts" + ], + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "prompts": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "agents": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "instructions", + "agentId", + "codeInterpreterEnabled", + "retrievalEnabled", + "large-language-model" + ], + "properties": { + "name": { + "type": "string" + }, + "instructions": { + "type": "string" + }, + "agentId": { + "type": "string" + }, + "codeInterpreterEnabled": { + "type": "boolean" + }, + "retrievalEnabled": { + "type": "boolean" + }, + "large-language-model": { + "type": "object", + "required": [ + "name", + "client" + ], + "properties": { + "name": { + "type": "string" + }, + "client": { + "type": "string", + "enum": [ + "openai", + "claude", + "llama" + ] + } + } + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "prompt": { + "type": "string" + }, + "owners": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + }, + "agent-functions": { + "type": "array", + "items": { + "type": "string" + } + }, + "agent-files": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "agent-functions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "description", + "parameters" + ], + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "parameters": { + "type": "string" + } + } + } + }, + "agent-files": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "fileId", + "size", + "purpose" + ], + "properties": { + "name": { + "type": "string" + }, + "fileId": { + "type": "string" + }, + "size": { + "type": "number" + }, + "purpose": { + "type": "string", + "enum": [ + "ASSISTANTS", + "FINE_TUNE", + "FINE_TUNE_RESULTS", + "ASSISTANTS_OUTPUT" + ] + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + } + } + } + ] + } + }, + "privacy-center": { + "type": "object", + "properties": { + "isDisabled": { + "type": "boolean" + }, + "showPrivacyRequestButton": { + "type": "boolean" + }, + "showDataPractices": { + "type": "boolean" + }, + "showPolicies": { + "type": "boolean" + }, + "showTrackingTechnologies": { + "type": "boolean" + }, + "showCookies": { + "type": "boolean" + }, + "showDataFlows": { + "type": "boolean" + }, + "showConsentManager": { + "type": "boolean" + }, + "showManageYourPrivacy": { + "type": "boolean" + }, + "showMarketingPreferences": { + "type": "boolean" + }, + "locales": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "en", + "ar", + "fr", + "es", + "de", + "it", + "ja", + "ru", + "af", + "bg", + "zh", + "hr", + "cs", + "da", + "fi", + "el", + "hi", + "hu", + "ko", + "lt", + "ms", + "mr", + "nb", + "pl", + "pt", + "ro", + "sr", + "sv", + "ta", + "th", + "tr", + "uk", + "vi", + "zu", + "he", + "nl", + "et", + "is", + "lv", + "mt", + "sk", + "sl", + "fil", + "bs", + "ca", + "eu", + "gl", + "dv", + "ur", + "sq", + "am", + "hy", + "az", + "bn", + "fa-AF", + "tl", + "ka", + "gu", + "ht", + "ha", + "ga", + "kn", + "kk", + "mk", + "ml", + "mn", + "ps", + "pa", + "si", + "so", + "sw", + "te", + "uz", + "cy", + "ar-AE", + "fr-FR", + "de-DE", + "de-AT", + "de-CH", + "it-IT", + "it-CH", + "af-ZA", + "bg-BG", + "zh-CN", + "zh-TW", + "hr-HR", + "cs-CZ", + "da-DK", + "en-GB", + "en-CA", + "en-AE", + "fi-FI", + "el-GR", + "hi-IN", + "hu-HU", + "id-ID", + "ja-JP", + "ko-KR", + "lt-LT", + "ms-MY", + "ms-SG", + "mr-IN", + "nb-NO", + "pl-PL", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "sr-Latn-RS", + "sr-Cyrl-RS", + "sv-SE", + "ta-IN", + "th-TH", + "tr-TR", + "uk-UA", + "vi-VN", + "zu-ZA", + "en-US", + "en-AU", + "fr-BE", + "fr-CA", + "fr-CH", + "en-IE", + "nl-NL", + "nl-BE", + "es-ES", + "es-AR", + "es-CR", + "es-CL", + "es-CO", + "es-MX", + "es-419", + "zh-HK", + "he-IL", + "en-NZ", + "et-EE", + "is-IS", + "lv-LV", + "mt-MT", + "sk-SK", + "sl-SL", + "fil-PH", + "sq-AL", + "sq-MK", + "sq-XK", + "am-ET", + "hy-AM", + "az-AZ", + "bn-BD", + "bn-IN", + "bs-BA", + "bs-Cyrl-BA", + "bs-Latn-BA", + "ca-ES", + "ca-AD", + "ca-FR", + "ca-IT", + "tl-PH", + "ka-GE", + "gu-IN", + "ht-HT", + "ha-NG", + "ha-NE", + "ha-GH", + "ga-IE", + "kn-IN", + "kk-KZ", + "mk-MK", + "ml-IN", + "mn-MN", + "ps-AF", + "pa-Guru-IN", + "pa-Arab-PK", + "si-LK", + "so-SO", + "so-DJ", + "so-ET", + "so-KE", + "sw-KE", + "sw-TZ", + "sw-UG", + "sw-CD", + "te-IN", + "ur-PK", + "ur-IN", + "uz-UZ", + "cy-GB", + "eu-ES", + "gl-ES" + ] + } + }, + "defaultLocale": { + "type": "string", + "enum": [ + "en", + "ar", + "fr", + "es", + "de", + "it", + "ja", + "ru", + "af", + "bg", + "zh", + "hr", + "cs", + "da", + "fi", + "el", + "hi", + "hu", + "ko", + "lt", + "ms", + "mr", + "nb", + "pl", + "pt", + "ro", + "sr", + "sv", + "ta", + "th", + "tr", + "uk", + "vi", + "zu", + "he", + "nl", + "et", + "is", + "lv", + "mt", + "sk", + "sl", + "fil", + "bs", + "ca", + "eu", + "gl", + "dv", + "ur", + "sq", + "am", + "hy", + "az", + "bn", + "fa-AF", + "tl", + "ka", + "gu", + "ht", + "ha", + "ga", + "kn", + "kk", + "mk", + "ml", + "mn", + "ps", + "pa", + "si", + "so", + "sw", + "te", + "uz", + "cy", + "ar-AE", + "fr-FR", + "de-DE", + "de-AT", + "de-CH", + "it-IT", + "it-CH", + "af-ZA", + "bg-BG", + "zh-CN", + "zh-TW", + "hr-HR", + "cs-CZ", + "da-DK", + "en-GB", + "en-CA", + "en-AE", + "fi-FI", + "el-GR", + "hi-IN", + "hu-HU", + "id-ID", + "ja-JP", + "ko-KR", + "lt-LT", + "ms-MY", + "ms-SG", + "mr-IN", + "nb-NO", + "pl-PL", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "sr-Latn-RS", + "sr-Cyrl-RS", + "sv-SE", + "ta-IN", + "th-TH", + "tr-TR", + "uk-UA", + "vi-VN", + "zu-ZA", + "en-US", + "en-AU", + "fr-BE", + "fr-CA", + "fr-CH", + "en-IE", + "nl-NL", + "nl-BE", + "es-ES", + "es-AR", + "es-CR", + "es-CL", + "es-CO", + "es-MX", + "es-419", + "zh-HK", + "he-IL", + "en-NZ", + "et-EE", + "is-IS", + "lv-LV", + "mt-MT", + "sk-SK", + "sl-SL", + "fil-PH", + "sq-AL", + "sq-MK", + "sq-XK", + "am-ET", + "hy-AM", + "az-AZ", + "bn-BD", + "bn-IN", + "bs-BA", + "bs-Cyrl-BA", + "bs-Latn-BA", + "ca-ES", + "ca-AD", + "ca-FR", + "ca-IT", + "tl-PH", + "ka-GE", + "gu-IN", + "ht-HT", + "ha-NG", + "ha-NE", + "ha-GH", + "ga-IE", + "kn-IN", + "kk-KZ", + "mk-MK", + "ml-IN", + "mn-MN", + "ps-AF", + "pa-Guru-IN", + "pa-Arab-PK", + "si-LK", + "so-SO", + "so-DJ", + "so-ET", + "so-KE", + "sw-KE", + "sw-TZ", + "sw-UG", + "sw-CD", + "te-IN", + "ur-PK", + "ur-IN", + "uz-UZ", + "cy-GB", + "eu-ES", + "gl-ES" + ] + }, + "preferBrowserDefaultLocale": { + "type": "boolean" + }, + "supportEmail": { + "type": "string" + }, + "replyToEmail": { + "type": "string" + }, + "useNoReplyEmailAddress": { + "type": "boolean" + }, + "useCustomEmailDomain": { + "type": "boolean" + }, + "transformAccessReportJsonToCsv": { + "type": "boolean" + }, + "theme": { + "type": "object", + "properties": { + "colors": { + "type": "object", + "properties": { + "primary": { + "type": "string" + }, + "secondary": { + "type": "string" + }, + "sidebarNavBg": { + "type": "string" + }, + "heroBg": { + "type": "string" + }, + "widgetBg": { + "type": "string" + }, + "textOnBg": { + "type": "string" + }, + "textLightOnBg": { + "type": "string" + }, + "textOnPrimary": { + "type": "string" + }, + "textOnSidebar": { + "type": "string" + }, + "accentOnSidebar": { + "type": "string" + }, + "textOnHero": { + "type": "string" + }, + "textOnAboutTranscend": { + "type": "string" + }, + "highlight": { + "type": "string" + }, + "tableOutline": { + "type": "string" + }, + "bgAccent": { + "type": "string" + }, + "error": { + "type": "string" + } + } + }, + "componentStyles": { + "type": "object", + "properties": { + "h1": { + "type": "string" + }, + "h2": { + "type": "string" + }, + "h3": { + "type": "string" + }, + "body": { + "type": "string" + }, + "sideMenuText": { + "type": "string" + }, + "primaryButton": { + "type": "string" + }, + "secondaryButton": { + "type": "string" + }, + "emailButton": { + "type": "string" + }, + "emailContainer": { + "type": "string" + }, + "hero": { + "type": "string" + }, + "heroBackground": { + "type": "string" + }, + "takeControlConfirmation": { + "type": "string" + } + } + }, + "textStyles": { + "type": "object", + "properties": { + "fontFamilyHeader": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "url" + ], + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "url" + ], + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + } + ] + }, + "fontFamilyBody": { + "allOf": [ + { + "type": "object", + "required": [ + "name", + "url" + ], + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "url" + ], + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + } + ] + } + } + } + } + } + } + }, + "policies": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "effectiveOn": { + "type": "string" + }, + "disableEffectiveOn": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "disabledLocales": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "en", + "ar", + "fr", + "es", + "de", + "it", + "ja", + "ru", + "af", + "bg", + "zh", + "hr", + "cs", + "da", + "fi", + "el", + "hi", + "hu", + "ko", + "lt", + "ms", + "mr", + "nb", + "pl", + "pt", + "ro", + "sr", + "sv", + "ta", + "th", + "tr", + "uk", + "vi", + "zu", + "he", + "nl", + "et", + "is", + "lv", + "mt", + "sk", + "sl", + "fil", + "bs", + "ca", + "eu", + "gl", + "dv", + "ur", + "sq", + "am", + "hy", + "az", + "bn", + "fa-AF", + "tl", + "ka", + "gu", + "ht", + "ha", + "ga", + "kn", + "kk", + "mk", + "ml", + "mn", + "ps", + "pa", + "si", + "so", + "sw", + "te", + "uz", + "cy", + "ar-AE", + "fr-FR", + "de-DE", + "de-AT", + "de-CH", + "it-IT", + "it-CH", + "af-ZA", + "bg-BG", + "zh-CN", + "zh-TW", + "hr-HR", + "cs-CZ", + "da-DK", + "en-GB", + "en-CA", + "en-AE", + "fi-FI", + "el-GR", + "hi-IN", + "hu-HU", + "id-ID", + "ja-JP", + "ko-KR", + "lt-LT", + "ms-MY", + "ms-SG", + "mr-IN", + "nb-NO", + "pl-PL", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "sr-Latn-RS", + "sr-Cyrl-RS", + "sv-SE", + "ta-IN", + "th-TH", + "tr-TR", + "uk-UA", + "vi-VN", + "zu-ZA", + "en-US", + "en-AU", + "fr-BE", + "fr-CA", + "fr-CH", + "en-IE", + "nl-NL", + "nl-BE", + "es-ES", + "es-AR", + "es-CR", + "es-CL", + "es-CO", + "es-MX", + "es-419", + "zh-HK", + "he-IL", + "en-NZ", + "et-EE", + "is-IS", + "lv-LV", + "mt-MT", + "sk-SK", + "sl-SL", + "fil-PH", + "sq-AL", + "sq-MK", + "sq-XK", + "am-ET", + "hy-AM", + "az-AZ", + "bn-BD", + "bn-IN", + "bs-BA", + "bs-Cyrl-BA", + "bs-Latn-BA", + "ca-ES", + "ca-AD", + "ca-FR", + "ca-IT", + "tl-PH", + "ka-GE", + "gu-IN", + "ht-HT", + "ha-NG", + "ha-NE", + "ha-GH", + "ga-IE", + "kn-IN", + "kk-KZ", + "mk-MK", + "ml-IN", + "mn-MN", + "ps-AF", + "pa-Guru-IN", + "pa-Arab-PK", + "si-LK", + "so-SO", + "so-DJ", + "so-ET", + "so-KE", + "sw-KE", + "sw-TZ", + "sw-UG", + "sw-CD", + "te-IN", + "ur-PK", + "ur-IN", + "uz-UZ", + "cy-GB", + "eu-ES", + "gl-ES" + ] + } + } + } + } + ] + } + }, + "messages": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "targetReactIntlId": { + "type": "string" + }, + "defaultMessage": { + "type": "string" + }, + "translations": { + "type": "object", + "properties": { + "en": { + "type": "string" + }, + "ar": { + "type": "string" + }, + "fr": { + "type": "string" + }, + "es": { + "type": "string" + }, + "de": { + "type": "string" + }, + "it": { + "type": "string" + }, + "ja": { + "type": "string" + }, + "ru": { + "type": "string" + }, + "af": { + "type": "string" + }, + "bg": { + "type": "string" + }, + "zh": { + "type": "string" + }, + "hr": { + "type": "string" + }, + "cs": { + "type": "string" + }, + "da": { + "type": "string" + }, + "fi": { + "type": "string" + }, + "el": { + "type": "string" + }, + "hi": { + "type": "string" + }, + "hu": { + "type": "string" + }, + "ko": { + "type": "string" + }, + "lt": { + "type": "string" + }, + "ms": { + "type": "string" + }, + "mr": { + "type": "string" + }, + "nb": { + "type": "string" + }, + "pl": { + "type": "string" + }, + "pt": { + "type": "string" + }, + "ro": { + "type": "string" + }, + "sr": { + "type": "string" + }, + "sv": { + "type": "string" + }, + "ta": { + "type": "string" + }, + "th": { + "type": "string" + }, + "tr": { + "type": "string" + }, + "uk": { + "type": "string" + }, + "vi": { + "type": "string" + }, + "zu": { + "type": "string" + }, + "he": { + "type": "string" + }, + "nl": { + "type": "string" + }, + "et": { + "type": "string" + }, + "is": { + "type": "string" + }, + "lv": { + "type": "string" + }, + "mt": { + "type": "string" + }, + "sk": { + "type": "string" + }, + "sl": { + "type": "string" + }, + "fil": { + "type": "string" + }, + "bs": { + "type": "string" + }, + "ca": { + "type": "string" + }, + "eu": { + "type": "string" + }, + "gl": { + "type": "string" + }, + "dv": { + "type": "string" + }, + "ur": { + "type": "string" + }, + "sq": { + "type": "string" + }, + "am": { + "type": "string" + }, + "hy": { + "type": "string" + }, + "az": { + "type": "string" + }, + "bn": { + "type": "string" + }, + "fa-AF": { + "type": "string" + }, + "tl": { + "type": "string" + }, + "ka": { + "type": "string" + }, + "gu": { + "type": "string" + }, + "ht": { + "type": "string" + }, + "ha": { + "type": "string" + }, + "ga": { + "type": "string" + }, + "kn": { + "type": "string" + }, + "kk": { + "type": "string" + }, + "mk": { + "type": "string" + }, + "ml": { + "type": "string" + }, + "mn": { + "type": "string" + }, + "ps": { + "type": "string" + }, + "pa": { + "type": "string" + }, + "si": { + "type": "string" + }, + "so": { + "type": "string" + }, + "sw": { + "type": "string" + }, + "te": { + "type": "string" + }, + "uz": { + "type": "string" + }, + "cy": { + "type": "string" + }, + "ar-AE": { + "type": "string" + }, + "fr-FR": { + "type": "string" + }, + "de-DE": { + "type": "string" + }, + "de-AT": { + "type": "string" + }, + "de-CH": { + "type": "string" + }, + "it-IT": { + "type": "string" + }, + "it-CH": { + "type": "string" + }, + "af-ZA": { + "type": "string" + }, + "bg-BG": { + "type": "string" + }, + "zh-CN": { + "type": "string" + }, + "zh-TW": { + "type": "string" + }, + "hr-HR": { + "type": "string" + }, + "cs-CZ": { + "type": "string" + }, + "da-DK": { + "type": "string" + }, + "en-GB": { + "type": "string" + }, + "en-CA": { + "type": "string" + }, + "en-AE": { + "type": "string" + }, + "fi-FI": { + "type": "string" + }, + "el-GR": { + "type": "string" + }, + "hi-IN": { + "type": "string" + }, + "hu-HU": { + "type": "string" + }, + "id-ID": { + "type": "string" + }, + "ja-JP": { + "type": "string" + }, + "ko-KR": { + "type": "string" + }, + "lt-LT": { + "type": "string" + }, + "ms-MY": { + "type": "string" + }, + "ms-SG": { + "type": "string" + }, + "mr-IN": { + "type": "string" + }, + "nb-NO": { + "type": "string" + }, + "pl-PL": { + "type": "string" + }, + "pt-BR": { + "type": "string" + }, + "pt-PT": { + "type": "string" + }, + "ro-RO": { + "type": "string" + }, + "ru-RU": { + "type": "string" + }, + "sr-Latn-RS": { + "type": "string" + }, + "sr-Cyrl-RS": { + "type": "string" + }, + "sv-SE": { + "type": "string" + }, + "ta-IN": { + "type": "string" + }, + "th-TH": { + "type": "string" + }, + "tr-TR": { + "type": "string" + }, + "uk-UA": { + "type": "string" + }, + "vi-VN": { + "type": "string" + }, + "zu-ZA": { + "type": "string" + }, + "en-US": { + "type": "string" + }, + "en-AU": { + "type": "string" + }, + "fr-BE": { + "type": "string" + }, + "fr-CA": { + "type": "string" + }, + "fr-CH": { + "type": "string" + }, + "en-IE": { + "type": "string" + }, + "nl-NL": { + "type": "string" + }, + "nl-BE": { + "type": "string" + }, + "es-ES": { + "type": "string" + }, + "es-AR": { + "type": "string" + }, + "es-CR": { + "type": "string" + }, + "es-CL": { + "type": "string" + }, + "es-CO": { + "type": "string" + }, + "es-MX": { + "type": "string" + }, + "es-419": { + "type": "string" + }, + "zh-HK": { + "type": "string" + }, + "he-IL": { + "type": "string" + }, + "en-NZ": { + "type": "string" + }, + "et-EE": { + "type": "string" + }, + "is-IS": { + "type": "string" + }, + "lv-LV": { + "type": "string" + }, + "mt-MT": { + "type": "string" + }, + "sk-SK": { + "type": "string" + }, + "sl-SL": { + "type": "string" + }, + "fil-PH": { + "type": "string" + }, + "sq-AL": { + "type": "string" + }, + "sq-MK": { + "type": "string" + }, + "sq-XK": { + "type": "string" + }, + "am-ET": { + "type": "string" + }, + "hy-AM": { + "type": "string" + }, + "az-AZ": { + "type": "string" + }, + "bn-BD": { + "type": "string" + }, + "bn-IN": { + "type": "string" + }, + "bs-BA": { + "type": "string" + }, + "bs-Cyrl-BA": { + "type": "string" + }, + "bs-Latn-BA": { + "type": "string" + }, + "ca-ES": { + "type": "string" + }, + "ca-AD": { + "type": "string" + }, + "ca-FR": { + "type": "string" + }, + "ca-IT": { + "type": "string" + }, + "tl-PH": { + "type": "string" + }, + "ka-GE": { + "type": "string" + }, + "gu-IN": { + "type": "string" + }, + "ht-HT": { + "type": "string" + }, + "ha-NG": { + "type": "string" + }, + "ha-NE": { + "type": "string" + }, + "ha-GH": { + "type": "string" + }, + "ga-IE": { + "type": "string" + }, + "kn-IN": { + "type": "string" + }, + "kk-KZ": { + "type": "string" + }, + "mk-MK": { + "type": "string" + }, + "ml-IN": { + "type": "string" + }, + "mn-MN": { + "type": "string" + }, + "ps-AF": { + "type": "string" + }, + "pa-Guru-IN": { + "type": "string" + }, + "pa-Arab-PK": { + "type": "string" + }, + "si-LK": { + "type": "string" + }, + "so-SO": { + "type": "string" + }, + "so-DJ": { + "type": "string" + }, + "so-ET": { + "type": "string" + }, + "so-KE": { + "type": "string" + }, + "sw-KE": { + "type": "string" + }, + "sw-TZ": { + "type": "string" + }, + "sw-UG": { + "type": "string" + }, + "sw-CD": { + "type": "string" + }, + "te-IN": { + "type": "string" + }, + "ur-PK": { + "type": "string" + }, + "ur-IN": { + "type": "string" + }, + "uz-UZ": { + "type": "string" + }, + "cy-GB": { + "type": "string" + }, + "eu-ES": { + "type": "string" + }, + "gl-ES": { + "type": "string" + } + } + } + } + } + ] + } + }, + "partitions": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "partition": { + "type": "string" + } + } + } + ] + } + }, + "assessment-templates": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "questions" + ], + "properties": { + "title": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "type" + ], + "properties": { + "title": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "LONG_ANSWER_TEXT", + "SHORT_ANSWER_TEXT", + "SINGLE_SELECT", + "MULTI_SELECT", + "FILE", + "DESCRIPTION" + ] + } + } + }, + { + "type": "object", + "properties": { + "sub-type": { + "type": "string", + "enum": [ + "NONE", + "CUSTOM", + "USER", + "TEAM", + "DATA_SUB_CATEGORY", + "PROCESSING_PURPOSE_SUB_CATEGORY", + "PROCESSING_ACTIVITY", + "VENDOR", + "REGION", + "BUSINESS_ENTITY", + "SAA_S_CATEGORY", + "DATA_PROCESSING_AGREEMENT_STATUS", + "DATA_PROTECTION_IMPACT_ASSESSMENT_STATUS", + "DEPRECATION_STATE", + "IDENTIFIER", + "DATA_SILO", + "RECOMMENDED_FOR_CONSENT", + "RECOMMENDED_FOR_PRIVACY", + "SUBJECT", + "RETENTION_TYPE", + "CONTROLLERSHIP", + "HAS_PERSONAL_DATA", + "ATTRIBUTE_KEY" + ] + }, + "placeholder": { + "type": "string" + }, + "description": { + "type": "string" + }, + "is-required": { + "type": "boolean" + }, + "reference-id": { + "type": "string" + }, + "display-logic": { + "allOf": [ + { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "SHOW", + "SKIP" + ] + } + } + }, + { + "type": "object", + "properties": { + "rule": { + "allOf": [ + { + "type": "object", + "required": [ + "depends-on-question-reference-id", + "comparison-operator" + ], + "properties": { + "depends-on-question-reference-id": { + "type": "string" + }, + "comparison-operator": { + "type": "string", + "enum": [ + "IS_EQUAL_TO", + "IS_NOT_EQUAL_TO", + "IS_ONE_OF", + "IS_NOT_ONE_OF", + "CONTAINS", + "IS_SHOWN", + "IS_NOT_SHOWN" + ] + } + } + }, + { + "type": "object", + "properties": { + "comparison-operands": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + }, + "nested-rule": {} + } + } + ] + }, + "risk-logic": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "comparison-operands", + "comparison-operator" + ], + "properties": { + "comparison-operands": { + "type": "array", + "items": { + "type": "string" + } + }, + "comparison-operator": { + "type": "string", + "enum": [ + "IS_EQUAL_TO", + "IS_NOT_EQUAL_TO", + "IS_ONE_OF", + "IS_NOT_ONE_OF", + "CONTAINS", + "IS_SHOWN", + "IS_NOT_SHOWN" + ] + } + } + }, + { + "type": "object", + "properties": { + "risk-level": { + "type": "string" + }, + "risk-matrix-column": { + "type": "string" + }, + "risk-matrix-row": { + "type": "string" + } + } + } + ] + } + }, + "risk-categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "risk-framework": { + "type": "string" + }, + "answer-options": { + "type": "array", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + }, + "selected-answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "allowed-mime-types": { + "type": "array", + "items": { + "type": "string" + } + }, + "allow-select-other": { + "type": "boolean" + }, + "sync-model": { + "type": "string", + "enum": [ + "dataSilo", + "subDataPoint", + "vendor", + "dataSubCategory", + "processingPurposeSubCategory", + "businessEntity", + "processingActivity" + ] + }, + "sync-column": { + "type": "string", + "enum": [ + "TITLE", + "SLUG", + "DESCRIPTION", + "HEADQUARTER_COUNTRY", + "CONNECTION_STATE", + "CONNECT_START_TIME", + "CONTACT_EMAIL", + "CONTACT_NAME", + "COUNTRY", + "COUNTRY_SUB_DIVISION", + "CREDENTIALS_REFRESH_SCHEDULED_AT", + "DATA_PROCESSING_AGREEMENT_LINK", + "DATA_PROCESSING_AGREEMENT_STATUS", + "DATA_RETENTION_NOTE", + "DEFAULT_ACCESS_REQUEST_VISIBILITY", + "DELETED_AT", + "DEPRECATION_STATE", + "EMAIL_SENDING_LOCK", + "EXPIRED_AT", + "EXTERNAL_ID", + "HAS_PERSONAL_DATA", + "HEADERS", + "IS_LIVE", + "LAST_CONNECTED_AT", + "LAST_ENABLED_AT", + "LAST_LOOKUP_PROCESS_CREATION_TIME", + "MANUAL_WORK_RETRY_FREQUENCY", + "MANUAL_WORK_RETRY_START_AT", + "NOTES", + "NOTIFY_EMAIL_ADDRESS", + "NOTIFY_WEBHOOK_URL", + "OUTER_TYPE", + "PLAINTEXT_CONTEXT", + "PROMPT_A_VENDOR_EMAIL_COMPLETION_LINK_TYPE", + "PROMPT_A_VENDOR_EMAIL_INCLUDE_IDENTIFIERS_ATTACHMENT", + "PROMPT_A_VENDOR_EMAIL_SCHEDULED_AT", + "PROMPT_A_VENDOR_EMAIL_SEND_FREQUENCY", + "PROMPT_A_VENDOR_EMAIL_SEND_TYPE", + "PROMPT_A_VENDOR_EMAIL_START_AT", + "RECOMMENDED_FOR_CONSENT", + "RECOMMENDED_FOR_PRIVACY", + "RECONNECT_FORM_ITEMS", + "SAAS_CONTEXT", + "SECRET_HEADERS", + "SUBDOMAIN", + "TYPE", + "URL", + "WEBSITE_URL", + "TRANSFER_REGIONS", + "CONTROLLERSHIPS", + "NAME", + "DATA_POINT_ID", + "ENCRYPTED_SAMPLES_S3_KEY", + "ACCESS_REQUESTED_VISIBILITY_ENABLED", + "ENSURE_REQUEST_REDACTION_ENABLED", + "LAST_CLASSIFIED_AT", + "LAST_RUN_AT", + "ERROR", + "ERROR_COUNT", + "CONTEXT", + "CONTENT_CLASSIFICATION_STATUS", + "NON_NULL_CHECK_COMPLETED", + "CONTROLLERSHIP", + "RETENTION_TYPE", + "RETENTION_PERIOD", + "SCAN_RUN_ID", + "CONTACT_PHONE", + "ADDRESS", + "HEADQUARTER_SUB_DIVISION", + "PRIVACY_POLICY_URL", + "CATEGORY", + "IS_DEFAULT", + "REGEX", + "PURPOSE", + "DATA_PROTECTION_OFFICER_EMAIL", + "DATA_PROTECTION_OFFICER_NAME", + "DATA_TYPE", + "ENCRYPTION", + "IS_PRIMARY_KEY", + "CUSTOM_SILO_CONNECTION_STRATEGY", + "SECURITY_MEASURE_DETAILS", + "STORAGE_REGIONS", + "DATA_PROTECTION_IMPACT_ASSESSMENT_LINK", + "DATA_PROTECTION_IMPACT_ASSESSMENT_STATUS", + "METADATA" + ] + }, + "attribute-key": { + "type": "string" + }, + "require-risk-evaluation": { + "type": "boolean" + }, + "require-risk-matrix-evaluation": { + "type": "boolean" + } + } + } + ] + } + } + } + }, + { + "type": "object", + "properties": { + "assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "external-assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + }, + "is-reviewed": { + "type": "boolean" + } + } + } + ] + } + }, + "description": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "DRAFT", + "PUBLISHED" + ] + }, + "source": { + "type": "string", + "enum": [ + "MANUAL", + "DATA_INVENTORY", + "IMPORT" + ] + }, + "creator": { + "type": "string" + }, + "locked": { + "type": "boolean" + }, + "parent-id": { + "type": "string" + }, + "archived": { + "type": "boolean" + }, + "created-at": { + "type": "string" + }, + "attribute-keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "retention-schedule": { + "type": "object", + "required": [ + "type", + "duration-days", + "operand" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "REQUESTS_CREATED_AT", + "ASSESSMENT_FORM_COMPLETED_AT" + ] + }, + "duration-days": { + "type": "number" + }, + "operand": { + "type": "string", + "enum": [ + "FULL_DELETE", + "PARTIAL_DELETE", + "NONE" + ] + } + } + }, + "templates": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "assessments": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "group" + ], + "properties": { + "title": { + "type": "string" + }, + "group": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "questions" + ], + "properties": { + "title": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title", + "type" + ], + "properties": { + "title": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "LONG_ANSWER_TEXT", + "SHORT_ANSWER_TEXT", + "SINGLE_SELECT", + "MULTI_SELECT", + "FILE", + "DESCRIPTION" + ] + } + } + }, + { + "type": "object", + "properties": { + "sub-type": { + "type": "string", + "enum": [ + "NONE", + "CUSTOM", + "USER", + "TEAM", + "DATA_SUB_CATEGORY", + "PROCESSING_PURPOSE_SUB_CATEGORY", + "PROCESSING_ACTIVITY", + "VENDOR", + "REGION", + "BUSINESS_ENTITY", + "SAA_S_CATEGORY", + "DATA_PROCESSING_AGREEMENT_STATUS", + "DATA_PROTECTION_IMPACT_ASSESSMENT_STATUS", + "DEPRECATION_STATE", + "IDENTIFIER", + "DATA_SILO", + "RECOMMENDED_FOR_CONSENT", + "RECOMMENDED_FOR_PRIVACY", + "SUBJECT", + "RETENTION_TYPE", + "CONTROLLERSHIP", + "HAS_PERSONAL_DATA", + "ATTRIBUTE_KEY" + ] + }, + "placeholder": { + "type": "string" + }, + "description": { + "type": "string" + }, + "is-required": { + "type": "boolean" + }, + "reference-id": { + "type": "string" + }, + "display-logic": { + "allOf": [ + { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "SHOW", + "SKIP" + ] + } + } + }, + { + "type": "object", + "properties": { + "rule": { + "allOf": [ + { + "type": "object", + "required": [ + "depends-on-question-reference-id", + "comparison-operator" + ], + "properties": { + "depends-on-question-reference-id": { + "type": "string" + }, + "comparison-operator": { + "type": "string", + "enum": [ + "IS_EQUAL_TO", + "IS_NOT_EQUAL_TO", + "IS_ONE_OF", + "IS_NOT_ONE_OF", + "CONTAINS", + "IS_SHOWN", + "IS_NOT_SHOWN" + ] + } + } + }, + { + "type": "object", + "properties": { + "comparison-operands": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + }, + "nested-rule": {} + } + } + ] + }, + "risk-logic": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "comparison-operands", + "comparison-operator" + ], + "properties": { + "comparison-operands": { + "type": "array", + "items": { + "type": "string" + } + }, + "comparison-operator": { + "type": "string", + "enum": [ + "IS_EQUAL_TO", + "IS_NOT_EQUAL_TO", + "IS_ONE_OF", + "IS_NOT_ONE_OF", + "CONTAINS", + "IS_SHOWN", + "IS_NOT_SHOWN" + ] + } + } + }, + { + "type": "object", + "properties": { + "risk-level": { + "type": "string" + }, + "risk-matrix-column": { + "type": "string" + }, + "risk-matrix-row": { + "type": "string" + } + } + } + ] + } + }, + "risk-categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "risk-framework": { + "type": "string" + }, + "answer-options": { + "type": "array", + "items": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + }, + "selected-answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "allowed-mime-types": { + "type": "array", + "items": { + "type": "string" + } + }, + "allow-select-other": { + "type": "boolean" + }, + "sync-model": { + "type": "string", + "enum": [ + "dataSilo", + "subDataPoint", + "vendor", + "dataSubCategory", + "processingPurposeSubCategory", + "businessEntity", + "processingActivity" + ] + }, + "sync-column": { + "type": "string", + "enum": [ + "TITLE", + "SLUG", + "DESCRIPTION", + "HEADQUARTER_COUNTRY", + "CONNECTION_STATE", + "CONNECT_START_TIME", + "CONTACT_EMAIL", + "CONTACT_NAME", + "COUNTRY", + "COUNTRY_SUB_DIVISION", + "CREDENTIALS_REFRESH_SCHEDULED_AT", + "DATA_PROCESSING_AGREEMENT_LINK", + "DATA_PROCESSING_AGREEMENT_STATUS", + "DATA_RETENTION_NOTE", + "DEFAULT_ACCESS_REQUEST_VISIBILITY", + "DELETED_AT", + "DEPRECATION_STATE", + "EMAIL_SENDING_LOCK", + "EXPIRED_AT", + "EXTERNAL_ID", + "HAS_PERSONAL_DATA", + "HEADERS", + "IS_LIVE", + "LAST_CONNECTED_AT", + "LAST_ENABLED_AT", + "LAST_LOOKUP_PROCESS_CREATION_TIME", + "MANUAL_WORK_RETRY_FREQUENCY", + "MANUAL_WORK_RETRY_START_AT", + "NOTES", + "NOTIFY_EMAIL_ADDRESS", + "NOTIFY_WEBHOOK_URL", + "OUTER_TYPE", + "PLAINTEXT_CONTEXT", + "PROMPT_A_VENDOR_EMAIL_COMPLETION_LINK_TYPE", + "PROMPT_A_VENDOR_EMAIL_INCLUDE_IDENTIFIERS_ATTACHMENT", + "PROMPT_A_VENDOR_EMAIL_SCHEDULED_AT", + "PROMPT_A_VENDOR_EMAIL_SEND_FREQUENCY", + "PROMPT_A_VENDOR_EMAIL_SEND_TYPE", + "PROMPT_A_VENDOR_EMAIL_START_AT", + "RECOMMENDED_FOR_CONSENT", + "RECOMMENDED_FOR_PRIVACY", + "RECONNECT_FORM_ITEMS", + "SAAS_CONTEXT", + "SECRET_HEADERS", + "SUBDOMAIN", + "TYPE", + "URL", + "WEBSITE_URL", + "TRANSFER_REGIONS", + "CONTROLLERSHIPS", + "NAME", + "DATA_POINT_ID", + "ENCRYPTED_SAMPLES_S3_KEY", + "ACCESS_REQUESTED_VISIBILITY_ENABLED", + "ENSURE_REQUEST_REDACTION_ENABLED", + "LAST_CLASSIFIED_AT", + "LAST_RUN_AT", + "ERROR", + "ERROR_COUNT", + "CONTEXT", + "CONTENT_CLASSIFICATION_STATUS", + "NON_NULL_CHECK_COMPLETED", + "CONTROLLERSHIP", + "RETENTION_TYPE", + "RETENTION_PERIOD", + "SCAN_RUN_ID", + "CONTACT_PHONE", + "ADDRESS", + "HEADQUARTER_SUB_DIVISION", + "PRIVACY_POLICY_URL", + "CATEGORY", + "IS_DEFAULT", + "REGEX", + "PURPOSE", + "DATA_PROTECTION_OFFICER_EMAIL", + "DATA_PROTECTION_OFFICER_NAME", + "DATA_TYPE", + "ENCRYPTION", + "IS_PRIMARY_KEY", + "CUSTOM_SILO_CONNECTION_STRATEGY", + "SECURITY_MEASURE_DETAILS", + "STORAGE_REGIONS", + "DATA_PROTECTION_IMPACT_ASSESSMENT_LINK", + "DATA_PROTECTION_IMPACT_ASSESSMENT_STATUS", + "METADATA" + ] + }, + "attribute-key": { + "type": "string" + }, + "require-risk-evaluation": { + "type": "boolean" + }, + "require-risk-matrix-evaluation": { + "type": "boolean" + } + } + } + ] + } + } + } + }, + { + "type": "object", + "properties": { + "assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "external-assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + }, + "is-reviewed": { + "type": "boolean" + } + } + } + ] + } + }, + "creator": { + "type": "string" + }, + "description": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "DRAFT", + "SHARED", + "IN_PROGRESS", + "IN_REVIEW", + "CHANGES_REQUESTED", + "REJECTED", + "APPROVED" + ] + }, + "assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "external-assignees": { + "type": "array", + "items": { + "type": "string" + } + }, + "reviewers": { + "type": "array", + "items": { + "type": "string" + } + }, + "locked": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "external": { + "type": "boolean" + }, + "title-is-internal": { + "type": "boolean" + }, + "due-date": { + "type": "string" + }, + "created-at": { + "type": "string" + }, + "assigned-at": { + "type": "string" + }, + "submitted-at": { + "type": "string" + }, + "approved-at": { + "type": "string" + }, + "rejected-at": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "type" + ], + "properties": { + "title": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "actionItem", + "airgapCookie", + "airgapDataFlow", + "assessmentForm", + "assessmentGroup", + "auditorRun", + "auditorSchedule", + "businessEntity", + "dataSubCategory", + "dataPoint", + "dataPointLevel", + "dataSilo", + "enricher", + "identifier", + "legalHold", + "legalMatter", + "processingActivity", + "processingPurposeSubCategory", + "prompt", + "promptGroup", + "promptRun", + "request", + "scannedObject", + "scannedObjectPath", + "subject", + "subDataPoint", + "vendor" + ] + } + } + } + }, + "rows": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "type" + ], + "properties": { + "title": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "actionItem", + "airgapCookie", + "airgapDataFlow", + "assessmentForm", + "assessmentGroup", + "auditorRun", + "auditorSchedule", + "businessEntity", + "dataSubCategory", + "dataPoint", + "dataPointLevel", + "dataSilo", + "enricher", + "identifier", + "legalHold", + "legalMatter", + "processingActivity", + "processingPurposeSubCategory", + "prompt", + "promptGroup", + "promptRun", + "request", + "scannedObject", + "scannedObjectPath", + "subject", + "subDataPoint", + "vendor" + ] + } + } + } + }, + "retention-schedule": { + "type": "object", + "required": [ + "type", + "duration-days", + "operand" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "REQUESTS_CREATED_AT", + "ASSESSMENT_FORM_COMPLETED_AT" + ] + }, + "duration-days": { + "type": "number" + }, + "operand": { + "type": "string", + "enum": [ + "FULL_DELETE", + "PARTIAL_DELETE", + "NONE" + ] + } + } + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ] + } + }, + "processing-activities": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "securityMeasureDetails": { + "type": "string" + }, + "controllerships": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CONTROLLER", + "PROCESSOR", + "JOINT_CONTROLLER" + ] + } + }, + "storageRegions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "country": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "countrySubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + } + } + }, + "transferRegions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "country": { + "type": "string", + "enum": [ + "EU", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ] + }, + "countrySubDivision": { + "type": "string", + "enum": [ + "AD-02", + "AD-03", + "AD-04", + "AD-05", + "AD-06", + "AD-07", + "AD-08", + "AE-AJ", + "AE-AZ", + "AE-DU", + "AE-FU", + "AE-RK", + "AE-SH", + "AE-UQ", + "AF-BAL", + "AF-BAM", + "AF-BDG", + "AF-BDS", + "AF-BGL", + "AF-DAY", + "AF-FRA", + "AF-FYB", + "AF-GHA", + "AF-GHO", + "AF-HEL", + "AF-HER", + "AF-JOW", + "AF-KAB", + "AF-KAN", + "AF-KAP", + "AF-KDZ", + "AF-KHO", + "AF-KNR", + "AF-LAG", + "AF-LOG", + "AF-NAN", + "AF-NIM", + "AF-NUR", + "AF-PAN", + "AF-PAR", + "AF-PIA", + "AF-PKA", + "AF-SAM", + "AF-SAR", + "AF-TAK", + "AF-URU", + "AF-WAR", + "AF-ZAB", + "AG-03", + "AG-04", + "AG-05", + "AG-06", + "AG-07", + "AG-08", + "AG-10", + "AG-11", + "AL-01", + "AL-02", + "AL-03", + "AL-04", + "AL-05", + "AL-06", + "AL-07", + "AL-08", + "AL-09", + "AL-10", + "AL-11", + "AL-12", + "AM-AG", + "AM-AR", + "AM-AV", + "AM-ER", + "AM-GR", + "AM-KT", + "AM-LO", + "AM-SH", + "AM-SU", + "AM-TV", + "AM-VD", + "AO-BGO", + "AO-BGU", + "AO-BIE", + "AO-CAB", + "AO-CCU", + "AO-CNN", + "AO-CNO", + "AO-CUS", + "AO-HUA", + "AO-HUI", + "AO-LNO", + "AO-LSU", + "AO-LUA", + "AO-MAL", + "AO-MOX", + "AO-NAM", + "AO-UIG", + "AO-ZAI", + "AR-A", + "AR-B", + "AR-C", + "AR-D", + "AR-E", + "AR-F", + "AR-G", + "AR-H", + "AR-J", + "AR-K", + "AR-L", + "AR-M", + "AR-N", + "AR-P", + "AR-Q", + "AR-R", + "AR-S", + "AR-T", + "AR-U", + "AR-V", + "AR-W", + "AR-X", + "AR-Y", + "AR-Z", + "AT-1", + "AT-2", + "AT-3", + "AT-4", + "AT-5", + "AT-6", + "AT-7", + "AT-8", + "AT-9", + "AU-ACT", + "AU-NSW", + "AU-NT", + "AU-QLD", + "AU-SA", + "AU-TAS", + "AU-VIC", + "AU-WA", + "AZ-ABS", + "AZ-AGA", + "AZ-AGC", + "AZ-AGM", + "AZ-AGS", + "AZ-AGU", + "AZ-AST", + "AZ-BA", + "AZ-BAB", + "AZ-BAL", + "AZ-BAR", + "AZ-BEY", + "AZ-BIL", + "AZ-CAB", + "AZ-CAL", + "AZ-CUL", + "AZ-DAS", + "AZ-FUZ", + "AZ-GA", + "AZ-GAD", + "AZ-GOR", + "AZ-GOY", + "AZ-GYG", + "AZ-HAC", + "AZ-IMI", + "AZ-ISM", + "AZ-KAL", + "AZ-KAN", + "AZ-KUR", + "AZ-LA", + "AZ-LAC", + "AZ-LAN", + "AZ-LER", + "AZ-MAS", + "AZ-MI", + "AZ-NA", + "AZ-NEF", + "AZ-NV", + "AZ-NX", + "AZ-OGU", + "AZ-ORD", + "AZ-QAB", + "AZ-QAX", + "AZ-QAZ", + "AZ-QBA", + "AZ-QBI", + "AZ-QOB", + "AZ-QUS", + "AZ-SA", + "AZ-SAB", + "AZ-SAD", + "AZ-SAH", + "AZ-SAK", + "AZ-SAL", + "AZ-SAR", + "AZ-SAT", + "AZ-SBN", + "AZ-SIY", + "AZ-SKR", + "AZ-SM", + "AZ-SMI", + "AZ-SMX", + "AZ-SR", + "AZ-SUS", + "AZ-TAR", + "AZ-TOV", + "AZ-UCA", + "AZ-XA", + "AZ-XAC", + "AZ-XCI", + "AZ-XIZ", + "AZ-XVD", + "AZ-YAR", + "AZ-YE", + "AZ-YEV", + "AZ-ZAN", + "AZ-ZAQ", + "AZ-ZAR", + "BA-BIH", + "BA-BRC", + "BA-SRP", + "BB-01", + "BB-02", + "BB-03", + "BB-04", + "BB-05", + "BB-06", + "BB-07", + "BB-08", + "BB-09", + "BB-10", + "BB-11", + "BD-01", + "BD-02", + "BD-03", + "BD-04", + "BD-05", + "BD-06", + "BD-07", + "BD-08", + "BD-09", + "BD-10", + "BD-11", + "BD-12", + "BD-13", + "BD-14", + "BD-15", + "BD-16", + "BD-17", + "BD-18", + "BD-19", + "BD-20", + "BD-21", + "BD-22", + "BD-23", + "BD-24", + "BD-25", + "BD-26", + "BD-27", + "BD-28", + "BD-29", + "BD-30", + "BD-31", + "BD-32", + "BD-33", + "BD-34", + "BD-35", + "BD-36", + "BD-37", + "BD-38", + "BD-39", + "BD-40", + "BD-41", + "BD-42", + "BD-43", + "BD-44", + "BD-45", + "BD-46", + "BD-47", + "BD-48", + "BD-49", + "BD-50", + "BD-51", + "BD-52", + "BD-53", + "BD-54", + "BD-55", + "BD-56", + "BD-57", + "BD-58", + "BD-59", + "BD-60", + "BD-61", + "BD-62", + "BD-63", + "BD-64", + "BD-A", + "BD-B", + "BD-C", + "BD-D", + "BD-E", + "BD-F", + "BD-G", + "BD-H", + "BE-BRU", + "BE-VAN", + "BE-VBR", + "BE-VLG", + "BE-VLI", + "BE-VOV", + "BE-VWV", + "BE-WAL", + "BE-WBR", + "BE-WHT", + "BE-WLG", + "BE-WLX", + "BE-WNA", + "BF-01", + "BF-02", + "BF-03", + "BF-04", + "BF-05", + "BF-06", + "BF-07", + "BF-08", + "BF-09", + "BF-10", + "BF-11", + "BF-12", + "BF-13", + "BF-BAL", + "BF-BAM", + "BF-BAN", + "BF-BAZ", + "BF-BGR", + "BF-BLG", + "BF-BLK", + "BF-COM", + "BF-GAN", + "BF-GNA", + "BF-GOU", + "BF-HOU", + "BF-IOB", + "BF-KAD", + "BF-KEN", + "BF-KMD", + "BF-KMP", + "BF-KOP", + "BF-KOS", + "BF-KOT", + "BF-KOW", + "BF-LER", + "BF-LOR", + "BF-MOU", + "BF-NAM", + "BF-NAO", + "BF-NAY", + "BF-NOU", + "BF-OUB", + "BF-OUD", + "BF-PAS", + "BF-PON", + "BF-SEN", + "BF-SIS", + "BF-SMT", + "BF-SNG", + "BF-SOM", + "BF-SOR", + "BF-TAP", + "BF-TUI", + "BF-YAG", + "BF-YAT", + "BF-ZIR", + "BF-ZON", + "BF-ZOU", + "BG-01", + "BG-02", + "BG-03", + "BG-04", + "BG-05", + "BG-06", + "BG-07", + "BG-08", + "BG-09", + "BG-10", + "BG-11", + "BG-12", + "BG-13", + "BG-14", + "BG-15", + "BG-16", + "BG-17", + "BG-18", + "BG-19", + "BG-20", + "BG-21", + "BG-22", + "BG-23", + "BG-24", + "BG-25", + "BG-26", + "BG-27", + "BG-28", + "BH-13", + "BH-14", + "BH-15", + "BH-17", + "BI-BB", + "BI-BL", + "BI-BM", + "BI-BR", + "BI-CA", + "BI-CI", + "BI-GI", + "BI-KI", + "BI-KR", + "BI-KY", + "BI-MA", + "BI-MU", + "BI-MW", + "BI-MY", + "BI-NG", + "BI-RM", + "BI-RT", + "BI-RY", + "BJ-AK", + "BJ-AL", + "BJ-AQ", + "BJ-BO", + "BJ-CO", + "BJ-DO", + "BJ-KO", + "BJ-LI", + "BJ-MO", + "BJ-OU", + "BJ-PL", + "BJ-ZO", + "BN-BE", + "BN-BM", + "BN-TE", + "BN-TU", + "BO-B", + "BO-C", + "BO-H", + "BO-L", + "BO-N", + "BO-O", + "BO-P", + "BO-S", + "BO-T", + "BQ-BO", + "BQ-SA", + "BQ-SE", + "BR-AC", + "BR-AL", + "BR-AM", + "BR-AP", + "BR-BA", + "BR-CE", + "BR-DF", + "BR-ES", + "BR-GO", + "BR-MA", + "BR-MG", + "BR-MS", + "BR-MT", + "BR-PA", + "BR-PB", + "BR-PE", + "BR-PI", + "BR-PR", + "BR-RJ", + "BR-RN", + "BR-RO", + "BR-RR", + "BR-RS", + "BR-SC", + "BR-SE", + "BR-SP", + "BR-TO", + "BS-AK", + "BS-BI", + "BS-BP", + "BS-BY", + "BS-CE", + "BS-CI", + "BS-CK", + "BS-CO", + "BS-CS", + "BS-EG", + "BS-EX", + "BS-FP", + "BS-GC", + "BS-HI", + "BS-HT", + "BS-IN", + "BS-LI", + "BS-MC", + "BS-MG", + "BS-MI", + "BS-NE", + "BS-NO", + "BS-NP", + "BS-NS", + "BS-RC", + "BS-RI", + "BS-SA", + "BS-SE", + "BS-SO", + "BS-SS", + "BS-SW", + "BS-WG", + "BT-11", + "BT-12", + "BT-13", + "BT-14", + "BT-15", + "BT-21", + "BT-22", + "BT-23", + "BT-24", + "BT-31", + "BT-32", + "BT-33", + "BT-34", + "BT-41", + "BT-42", + "BT-43", + "BT-44", + "BT-45", + "BT-GA", + "BT-TY", + "BW-CE", + "BW-CH", + "BW-FR", + "BW-GA", + "BW-GH", + "BW-JW", + "BW-KG", + "BW-KL", + "BW-KW", + "BW-LO", + "BW-NE", + "BW-NW", + "BW-SE", + "BW-SO", + "BW-SP", + "BW-ST", + "BY-BR", + "BY-HM", + "BY-HO", + "BY-HR", + "BY-MA", + "BY-MI", + "BY-VI", + "BZ-BZ", + "BZ-CY", + "BZ-CZL", + "BZ-OW", + "BZ-SC", + "BZ-TOL", + "CA-AB", + "CA-BC", + "CA-MB", + "CA-NB", + "CA-NL", + "CA-NS", + "CA-NT", + "CA-NU", + "CA-ON", + "CA-PE", + "CA-QC", + "CA-SK", + "CA-YT", + "CD-BC", + "CD-BU", + "CD-EQ", + "CD-HK", + "CD-HL", + "CD-HU", + "CD-IT", + "CD-KC", + "CD-KE", + "CD-KG", + "CD-KL", + "CD-KN", + "CD-KS", + "CD-LO", + "CD-LU", + "CD-MA", + "CD-MN", + "CD-MO", + "CD-NK", + "CD-NU", + "CD-SA", + "CD-SK", + "CD-SU", + "CD-TA", + "CD-TO", + "CD-TU", + "CF-AC", + "CF-BB", + "CF-BGF", + "CF-BK", + "CF-HK", + "CF-HM", + "CF-HS", + "CF-KB", + "CF-KG", + "CF-LB", + "CF-MB", + "CF-MP", + "CF-NM", + "CF-OP", + "CF-SE", + "CF-UK", + "CF-VK", + "CG-11", + "CG-12", + "CG-13", + "CG-14", + "CG-15", + "CG-16", + "CG-2", + "CG-5", + "CG-7", + "CG-8", + "CG-9", + "CG-BZV", + "CH-AG", + "CH-AI", + "CH-AR", + "CH-BE", + "CH-BL", + "CH-BS", + "CH-FR", + "CH-GE", + "CH-GL", + "CH-GR", + "CH-JU", + "CH-LU", + "CH-NE", + "CH-NW", + "CH-OW", + "CH-SG", + "CH-SH", + "CH-SO", + "CH-SZ", + "CH-TG", + "CH-TI", + "CH-UR", + "CH-VD", + "CH-VS", + "CH-ZG", + "CH-ZH", + "CI-AB", + "CI-BS", + "CI-CM", + "CI-DN", + "CI-GD", + "CI-LC", + "CI-LG", + "CI-MG", + "CI-SM", + "CI-SV", + "CI-VB", + "CI-WR", + "CI-YM", + "CI-ZZ", + "CL-AI", + "CL-AN", + "CL-AP", + "CL-AR", + "CL-AT", + "CL-BI", + "CL-CO", + "CL-LI", + "CL-LL", + "CL-LR", + "CL-MA", + "CL-ML", + "CL-NB", + "CL-RM", + "CL-TA", + "CL-VS", + "CM-AD", + "CM-CE", + "CM-EN", + "CM-ES", + "CM-LT", + "CM-NO", + "CM-NW", + "CM-OU", + "CM-SU", + "CM-SW", + "CN-AH", + "CN-BJ", + "CN-CQ", + "CN-FJ", + "CN-GD", + "CN-GS", + "CN-GX", + "CN-GZ", + "CN-HA", + "CN-HB", + "CN-HE", + "CN-HI", + "CN-HK", + "CN-HL", + "CN-HN", + "CN-JL", + "CN-JS", + "CN-JX", + "CN-LN", + "CN-MO", + "CN-NM", + "CN-NX", + "CN-QH", + "CN-SC", + "CN-SD", + "CN-SH", + "CN-SN", + "CN-SX", + "CN-TJ", + "CN-TW", + "CN-XJ", + "CN-XZ", + "CN-YN", + "CN-ZJ", + "CO-AMA", + "CO-ANT", + "CO-ARA", + "CO-ATL", + "CO-BOL", + "CO-BOY", + "CO-CAL", + "CO-CAQ", + "CO-CAS", + "CO-CAU", + "CO-CES", + "CO-CHO", + "CO-COR", + "CO-CUN", + "CO-DC", + "CO-GUA", + "CO-GUV", + "CO-HUI", + "CO-LAG", + "CO-MAG", + "CO-MET", + "CO-NAR", + "CO-NSA", + "CO-PUT", + "CO-QUI", + "CO-RIS", + "CO-SAN", + "CO-SAP", + "CO-SUC", + "CO-TOL", + "CO-VAC", + "CO-VAU", + "CO-VID", + "CR-A", + "CR-C", + "CR-G", + "CR-H", + "CR-L", + "CR-P", + "CR-SJ", + "CU-01", + "CU-03", + "CU-04", + "CU-05", + "CU-06", + "CU-07", + "CU-08", + "CU-09", + "CU-10", + "CU-11", + "CU-12", + "CU-13", + "CU-14", + "CU-15", + "CU-16", + "CU-99", + "CV-B", + "CV-BR", + "CV-BV", + "CV-CA", + "CV-CF", + "CV-CR", + "CV-MA", + "CV-MO", + "CV-PA", + "CV-PN", + "CV-PR", + "CV-RB", + "CV-RG", + "CV-RS", + "CV-S", + "CV-SD", + "CV-SF", + "CV-SL", + "CV-SM", + "CV-SO", + "CV-SS", + "CV-SV", + "CV-TA", + "CV-TS", + "CY-01", + "CY-02", + "CY-03", + "CY-04", + "CY-05", + "CY-06", + "CZ-10", + "CZ-20", + "CZ-201", + "CZ-202", + "CZ-203", + "CZ-204", + "CZ-205", + "CZ-206", + "CZ-207", + "CZ-208", + "CZ-209", + "CZ-20A", + "CZ-20B", + "CZ-20C", + "CZ-31", + "CZ-311", + "CZ-312", + "CZ-313", + "CZ-314", + "CZ-315", + "CZ-316", + "CZ-317", + "CZ-32", + "CZ-321", + "CZ-322", + "CZ-323", + "CZ-324", + "CZ-325", + "CZ-326", + "CZ-327", + "CZ-41", + "CZ-411", + "CZ-412", + "CZ-413", + "CZ-42", + "CZ-421", + "CZ-422", + "CZ-423", + "CZ-424", + "CZ-425", + "CZ-426", + "CZ-427", + "CZ-51", + "CZ-511", + "CZ-512", + "CZ-513", + "CZ-514", + "CZ-52", + "CZ-521", + "CZ-522", + "CZ-523", + "CZ-524", + "CZ-525", + "CZ-53", + "CZ-531", + "CZ-532", + "CZ-533", + "CZ-534", + "CZ-63", + "CZ-631", + "CZ-632", + "CZ-633", + "CZ-634", + "CZ-635", + "CZ-64", + "CZ-641", + "CZ-642", + "CZ-643", + "CZ-644", + "CZ-645", + "CZ-646", + "CZ-647", + "CZ-71", + "CZ-711", + "CZ-712", + "CZ-713", + "CZ-714", + "CZ-715", + "CZ-72", + "CZ-721", + "CZ-722", + "CZ-723", + "CZ-724", + "CZ-80", + "CZ-801", + "CZ-802", + "CZ-803", + "CZ-804", + "CZ-805", + "CZ-806", + "DE-BB", + "DE-BE", + "DE-BW", + "DE-BY", + "DE-HB", + "DE-HE", + "DE-HH", + "DE-MV", + "DE-NI", + "DE-NW", + "DE-RP", + "DE-SH", + "DE-SL", + "DE-SN", + "DE-ST", + "DE-TH", + "DJ-AR", + "DJ-AS", + "DJ-DI", + "DJ-DJ", + "DJ-OB", + "DJ-TA", + "DK-81", + "DK-82", + "DK-83", + "DK-84", + "DK-85", + "DM-02", + "DM-03", + "DM-04", + "DM-05", + "DM-06", + "DM-07", + "DM-08", + "DM-09", + "DM-10", + "DM-11", + "DO-01", + "DO-02", + "DO-03", + "DO-04", + "DO-05", + "DO-06", + "DO-07", + "DO-08", + "DO-09", + "DO-10", + "DO-11", + "DO-12", + "DO-13", + "DO-14", + "DO-15", + "DO-16", + "DO-17", + "DO-18", + "DO-19", + "DO-20", + "DO-21", + "DO-22", + "DO-23", + "DO-24", + "DO-25", + "DO-26", + "DO-27", + "DO-28", + "DO-29", + "DO-30", + "DO-31", + "DO-32", + "DO-33", + "DO-34", + "DO-35", + "DO-36", + "DO-37", + "DO-38", + "DO-39", + "DO-40", + "DO-41", + "DO-42", + "DZ-01", + "DZ-02", + "DZ-03", + "DZ-04", + "DZ-05", + "DZ-06", + "DZ-07", + "DZ-08", + "DZ-09", + "DZ-10", + "DZ-11", + "DZ-12", + "DZ-13", + "DZ-14", + "DZ-15", + "DZ-16", + "DZ-17", + "DZ-18", + "DZ-19", + "DZ-20", + "DZ-21", + "DZ-22", + "DZ-23", + "DZ-24", + "DZ-25", + "DZ-26", + "DZ-27", + "DZ-28", + "DZ-29", + "DZ-30", + "DZ-31", + "DZ-32", + "DZ-33", + "DZ-34", + "DZ-35", + "DZ-36", + "DZ-37", + "DZ-38", + "DZ-39", + "DZ-40", + "DZ-41", + "DZ-42", + "DZ-43", + "DZ-44", + "DZ-45", + "DZ-46", + "DZ-47", + "DZ-48", + "EC-A", + "EC-B", + "EC-C", + "EC-D", + "EC-E", + "EC-F", + "EC-G", + "EC-H", + "EC-I", + "EC-L", + "EC-M", + "EC-N", + "EC-O", + "EC-P", + "EC-R", + "EC-S", + "EC-SD", + "EC-SE", + "EC-T", + "EC-U", + "EC-W", + "EC-X", + "EC-Y", + "EC-Z", + "EE-130", + "EE-141", + "EE-142", + "EE-171", + "EE-184", + "EE-191", + "EE-198", + "EE-205", + "EE-214", + "EE-245", + "EE-247", + "EE-251", + "EE-255", + "EE-272", + "EE-283", + "EE-284", + "EE-291", + "EE-293", + "EE-296", + "EE-303", + "EE-305", + "EE-317", + "EE-321", + "EE-338", + "EE-353", + "EE-37", + "EE-39", + "EE-424", + "EE-430", + "EE-431", + "EE-432", + "EE-441", + "EE-442", + "EE-446", + "EE-45", + "EE-478", + "EE-480", + "EE-486", + "EE-50", + "EE-503", + "EE-511", + "EE-514", + "EE-52", + "EE-528", + "EE-557", + "EE-56", + "EE-567", + "EE-586", + "EE-60", + "EE-615", + "EE-618", + "EE-622", + "EE-624", + "EE-638", + "EE-64", + "EE-651", + "EE-653", + "EE-661", + "EE-663", + "EE-668", + "EE-68", + "EE-689", + "EE-698", + "EE-708", + "EE-71", + "EE-712", + "EE-714", + "EE-719", + "EE-726", + "EE-732", + "EE-735", + "EE-74", + "EE-784", + "EE-79", + "EE-792", + "EE-793", + "EE-796", + "EE-803", + "EE-809", + "EE-81", + "EE-824", + "EE-834", + "EE-84", + "EE-855", + "EE-87", + "EE-890", + "EE-897", + "EE-899", + "EE-901", + "EE-903", + "EE-907", + "EE-917", + "EE-919", + "EE-928", + "EG-ALX", + "EG-ASN", + "EG-AST", + "EG-BA", + "EG-BH", + "EG-BNS", + "EG-C", + "EG-DK", + "EG-DT", + "EG-FYM", + "EG-GH", + "EG-GZ", + "EG-IS", + "EG-JS", + "EG-KB", + "EG-KFS", + "EG-KN", + "EG-LX", + "EG-MN", + "EG-MNF", + "EG-MT", + "EG-PTS", + "EG-SHG", + "EG-SHR", + "EG-SIN", + "EG-SUZ", + "EG-WAD", + "ER-AN", + "ER-DK", + "ER-DU", + "ER-GB", + "ER-MA", + "ER-SK", + "ES-A", + "ES-AB", + "ES-AL", + "ES-AN", + "ES-AR", + "ES-AS", + "ES-AV", + "ES-B", + "ES-BA", + "ES-BI", + "ES-BU", + "ES-C", + "ES-CA", + "ES-CB", + "ES-CC", + "ES-CE", + "ES-CL", + "ES-CM", + "ES-CN", + "ES-CO", + "ES-CR", + "ES-CS", + "ES-CT", + "ES-CU", + "ES-EX", + "ES-GA", + "ES-GC", + "ES-GI", + "ES-GR", + "ES-GU", + "ES-H", + "ES-HU", + "ES-IB", + "ES-J", + "ES-L", + "ES-LE", + "ES-LO", + "ES-LU", + "ES-M", + "ES-MA", + "ES-MC", + "ES-MD", + "ES-ML", + "ES-MU", + "ES-NA", + "ES-NC", + "ES-O", + "ES-OR", + "ES-P", + "ES-PM", + "ES-PO", + "ES-PV", + "ES-RI", + "ES-S", + "ES-SA", + "ES-SE", + "ES-SG", + "ES-SO", + "ES-SS", + "ES-T", + "ES-TE", + "ES-TF", + "ES-TO", + "ES-V", + "ES-VA", + "ES-VC", + "ES-VI", + "ES-Z", + "ES-ZA", + "ET-AA", + "ET-AF", + "ET-AM", + "ET-BE", + "ET-DD", + "ET-GA", + "ET-HA", + "ET-OR", + "ET-SN", + "ET-SO", + "ET-TI", + "FI-01", + "FI-02", + "FI-03", + "FI-04", + "FI-05", + "FI-06", + "FI-07", + "FI-08", + "FI-09", + "FI-10", + "FI-11", + "FI-12", + "FI-13", + "FI-14", + "FI-15", + "FI-16", + "FI-17", + "FI-18", + "FI-19", + "FJ-01", + "FJ-02", + "FJ-03", + "FJ-04", + "FJ-05", + "FJ-06", + "FJ-07", + "FJ-08", + "FJ-09", + "FJ-10", + "FJ-11", + "FJ-12", + "FJ-13", + "FJ-14", + "FJ-C", + "FJ-E", + "FJ-N", + "FJ-R", + "FJ-W", + "FM-KSA", + "FM-PNI", + "FM-TRK", + "FM-YAP", + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-07", + "FR-08", + "FR-09", + "FR-10", + "FR-11", + "FR-12", + "FR-13", + "FR-14", + "FR-15", + "FR-16", + "FR-17", + "FR-18", + "FR-19", + "FR-20R", + "FR-21", + "FR-22", + "FR-23", + "FR-24", + "FR-25", + "FR-26", + "FR-27", + "FR-28", + "FR-29", + "FR-2A", + "FR-2B", + "FR-30", + "FR-31", + "FR-32", + "FR-33", + "FR-34", + "FR-35", + "FR-36", + "FR-37", + "FR-38", + "FR-39", + "FR-40", + "FR-41", + "FR-42", + "FR-43", + "FR-44", + "FR-45", + "FR-46", + "FR-47", + "FR-48", + "FR-49", + "FR-50", + "FR-51", + "FR-52", + "FR-53", + "FR-54", + "FR-55", + "FR-56", + "FR-57", + "FR-58", + "FR-59", + "FR-60", + "FR-61", + "FR-62", + "FR-63", + "FR-64", + "FR-65", + "FR-66", + "FR-67", + "FR-68", + "FR-69", + "FR-70", + "FR-71", + "FR-72", + "FR-73", + "FR-74", + "FR-75", + "FR-76", + "FR-77", + "FR-78", + "FR-79", + "FR-80", + "FR-81", + "FR-82", + "FR-83", + "FR-84", + "FR-85", + "FR-86", + "FR-87", + "FR-88", + "FR-89", + "FR-90", + "FR-91", + "FR-92", + "FR-93", + "FR-94", + "FR-95", + "FR-971", + "FR-972", + "FR-973", + "FR-974", + "FR-976", + "FR-ARA", + "FR-BFC", + "FR-BL", + "FR-BRE", + "FR-CP", + "FR-CVL", + "FR-GES", + "FR-GF", + "FR-GP", + "FR-HDF", + "FR-IDF", + "FR-MF", + "FR-MQ", + "FR-NAQ", + "FR-NC", + "FR-NOR", + "FR-OCC", + "FR-PAC", + "FR-PDL", + "FR-PF", + "FR-PM", + "FR-RE", + "FR-TF", + "FR-WF", + "FR-YT", + "GA-1", + "GA-2", + "GA-3", + "GA-4", + "GA-5", + "GA-6", + "GA-7", + "GA-8", + "GA-9", + "GB-ABC", + "GB-ABD", + "GB-ABE", + "GB-AGB", + "GB-AGY", + "GB-AND", + "GB-ANN", + "GB-ANS", + "GB-BAS", + "GB-BBD", + "GB-BCP", + "GB-BDF", + "GB-BDG", + "GB-BEN", + "GB-BEX", + "GB-BFS", + "GB-BGE", + "GB-BGW", + "GB-BIR", + "GB-BKM", + "GB-BNE", + "GB-BNH", + "GB-BNS", + "GB-BOL", + "GB-BPL", + "GB-BRC", + "GB-BRD", + "GB-BRY", + "GB-BST", + "GB-BUR", + "GB-CAM", + "GB-CAY", + "GB-CBF", + "GB-CCG", + "GB-CGN", + "GB-CHE", + "GB-CHW", + "GB-CLD", + "GB-CLK", + "GB-CMA", + "GB-CMD", + "GB-CMN", + "GB-CON", + "GB-COV", + "GB-CRF", + "GB-CRY", + "GB-CWY", + "GB-DAL", + "GB-DBY", + "GB-DEN", + "GB-DER", + "GB-DEV", + "GB-DGY", + "GB-DNC", + "GB-DND", + "GB-DOR", + "GB-DRS", + "GB-DUD", + "GB-DUR", + "GB-EAL", + "GB-EAW", + "GB-EAY", + "GB-EDH", + "GB-EDU", + "GB-ELN", + "GB-ELS", + "GB-ENF", + "GB-ENG", + "GB-ERW", + "GB-ERY", + "GB-ESS", + "GB-ESX", + "GB-FAL", + "GB-FIF", + "GB-FLN", + "GB-FMO", + "GB-GAT", + "GB-GBN", + "GB-GLG", + "GB-GLS", + "GB-GRE", + "GB-GWN", + "GB-HAL", + "GB-HAM", + "GB-HAV", + "GB-HCK", + "GB-HEF", + "GB-HIL", + "GB-HLD", + "GB-HMF", + "GB-HNS", + "GB-HPL", + "GB-HRT", + "GB-HRW", + "GB-HRY", + "GB-IOS", + "GB-IOW", + "GB-ISL", + "GB-IVC", + "GB-KEC", + "GB-KEN", + "GB-KHL", + "GB-KIR", + "GB-KTT", + "GB-KWL", + "GB-LAN", + "GB-LBC", + "GB-LBH", + "GB-LCE", + "GB-LDS", + "GB-LEC", + "GB-LEW", + "GB-LIN", + "GB-LIV", + "GB-LND", + "GB-LUT", + "GB-MAN", + "GB-MDB", + "GB-MDW", + "GB-MEA", + "GB-MIK", + "GB-MLN", + "GB-MON", + "GB-MRT", + "GB-MRY", + "GB-MTY", + "GB-MUL", + "GB-NAY", + "GB-NBL", + "GB-NEL", + "GB-NET", + "GB-NFK", + "GB-NGM", + "GB-NIR", + "GB-NLK", + "GB-NLN", + "GB-NMD", + "GB-NSM", + "GB-NTH", + "GB-NTL", + "GB-NTT", + "GB-NTY", + "GB-NWM", + "GB-NWP", + "GB-NYK", + "GB-OLD", + "GB-ORK", + "GB-OXF", + "GB-PEM", + "GB-PKN", + "GB-PLY", + "GB-POR", + "GB-POW", + "GB-PTE", + "GB-RCC", + "GB-RCH", + "GB-RCT", + "GB-RDB", + "GB-RDG", + "GB-RFW", + "GB-RIC", + "GB-ROT", + "GB-RUT", + "GB-SAW", + "GB-SAY", + "GB-SCB", + "GB-SCT", + "GB-SFK", + "GB-SFT", + "GB-SGC", + "GB-SHF", + "GB-SHN", + "GB-SHR", + "GB-SKP", + "GB-SLF", + "GB-SLG", + "GB-SLK", + "GB-SND", + "GB-SOL", + "GB-SOM", + "GB-SOS", + "GB-SRY", + "GB-STE", + "GB-STG", + "GB-STH", + "GB-STN", + "GB-STS", + "GB-STT", + "GB-STY", + "GB-SWA", + "GB-SWD", + "GB-SWK", + "GB-TAM", + "GB-TFW", + "GB-THR", + "GB-TOB", + "GB-TOF", + "GB-TRF", + "GB-TWH", + "GB-UKM", + "GB-VGL", + "GB-WAR", + "GB-WBK", + "GB-WDU", + "GB-WFT", + "GB-WGN", + "GB-WIL", + "GB-WKF", + "GB-WLL", + "GB-WLN", + "GB-WLS", + "GB-WLV", + "GB-WND", + "GB-WNM", + "GB-WOK", + "GB-WOR", + "GB-WRL", + "GB-WRT", + "GB-WRX", + "GB-WSM", + "GB-WSX", + "GB-YOR", + "GB-ZET", + "GD-01", + "GD-02", + "GD-03", + "GD-04", + "GD-05", + "GD-06", + "GD-10", + "GE-AB", + "GE-AJ", + "GE-GU", + "GE-IM", + "GE-KA", + "GE-KK", + "GE-MM", + "GE-RL", + "GE-SJ", + "GE-SK", + "GE-SZ", + "GE-TB", + "GH-AA", + "GH-AF", + "GH-AH", + "GH-BA", + "GH-BE", + "GH-BO", + "GH-CP", + "GH-EP", + "GH-NE", + "GH-NP", + "GH-OT", + "GH-SV", + "GH-TV", + "GH-UE", + "GH-UW", + "GH-WN", + "GH-WP", + "GL-AV", + "GL-KU", + "GL-QE", + "GL-QT", + "GL-SM", + "GM-B", + "GM-L", + "GM-M", + "GM-N", + "GM-U", + "GM-W", + "GN-B", + "GN-BE", + "GN-BF", + "GN-BK", + "GN-C", + "GN-CO", + "GN-D", + "GN-DB", + "GN-DI", + "GN-DL", + "GN-DU", + "GN-F", + "GN-FA", + "GN-FO", + "GN-FR", + "GN-GA", + "GN-GU", + "GN-K", + "GN-KA", + "GN-KB", + "GN-KD", + "GN-KE", + "GN-KN", + "GN-KO", + "GN-KS", + "GN-L", + "GN-LA", + "GN-LE", + "GN-LO", + "GN-M", + "GN-MC", + "GN-MD", + "GN-ML", + "GN-MM", + "GN-N", + "GN-NZ", + "GN-PI", + "GN-SI", + "GN-TE", + "GN-TO", + "GN-YO", + "GQ-AN", + "GQ-BN", + "GQ-BS", + "GQ-C", + "GQ-CS", + "GQ-DJ", + "GQ-I", + "GQ-KN", + "GQ-LI", + "GQ-WN", + "GR-69", + "GR-A", + "GR-B", + "GR-C", + "GR-D", + "GR-E", + "GR-F", + "GR-G", + "GR-H", + "GR-I", + "GR-J", + "GR-K", + "GR-L", + "GR-M", + "GT-AV", + "GT-BV", + "GT-CM", + "GT-CQ", + "GT-ES", + "GT-GU", + "GT-HU", + "GT-IZ", + "GT-JA", + "GT-JU", + "GT-PE", + "GT-PR", + "GT-QC", + "GT-QZ", + "GT-RE", + "GT-SA", + "GT-SM", + "GT-SO", + "GT-SR", + "GT-SU", + "GT-TO", + "GT-ZA", + "GW-BA", + "GW-BL", + "GW-BM", + "GW-BS", + "GW-CA", + "GW-GA", + "GW-L", + "GW-N", + "GW-OI", + "GW-QU", + "GW-S", + "GW-TO", + "GY-BA", + "GY-CU", + "GY-DE", + "GY-EB", + "GY-ES", + "GY-MA", + "GY-PM", + "GY-PT", + "GY-UD", + "GY-UT", + "HN-AT", + "HN-CH", + "HN-CL", + "HN-CM", + "HN-CP", + "HN-CR", + "HN-EP", + "HN-FM", + "HN-GD", + "HN-IB", + "HN-IN", + "HN-LE", + "HN-LP", + "HN-OC", + "HN-OL", + "HN-SB", + "HN-VA", + "HN-YO", + "HR-01", + "HR-02", + "HR-03", + "HR-04", + "HR-05", + "HR-06", + "HR-07", + "HR-08", + "HR-09", + "HR-10", + "HR-11", + "HR-12", + "HR-13", + "HR-14", + "HR-15", + "HR-16", + "HR-17", + "HR-18", + "HR-19", + "HR-20", + "HR-21", + "HT-AR", + "HT-CE", + "HT-GA", + "HT-ND", + "HT-NE", + "HT-NI", + "HT-NO", + "HT-OU", + "HT-SD", + "HT-SE", + "HU-BA", + "HU-BC", + "HU-BE", + "HU-BK", + "HU-BU", + "HU-BZ", + "HU-CS", + "HU-DE", + "HU-DU", + "HU-EG", + "HU-ER", + "HU-FE", + "HU-GS", + "HU-GY", + "HU-HB", + "HU-HE", + "HU-HV", + "HU-JN", + "HU-KE", + "HU-KM", + "HU-KV", + "HU-MI", + "HU-NK", + "HU-NO", + "HU-NY", + "HU-PE", + "HU-PS", + "HU-SD", + "HU-SF", + "HU-SH", + "HU-SK", + "HU-SN", + "HU-SO", + "HU-SS", + "HU-ST", + "HU-SZ", + "HU-TB", + "HU-TO", + "HU-VA", + "HU-VE", + "HU-VM", + "HU-ZA", + "HU-ZE", + "ID-AC", + "ID-BA", + "ID-BB", + "ID-BE", + "ID-BT", + "ID-GO", + "ID-JA", + "ID-JB", + "ID-JI", + "ID-JK", + "ID-JT", + "ID-JW", + "ID-KA", + "ID-KB", + "ID-KI", + "ID-KR", + "ID-KS", + "ID-KT", + "ID-KU", + "ID-LA", + "ID-MA", + "ID-ML", + "ID-MU", + "ID-NB", + "ID-NT", + "ID-NU", + "ID-PA", + "ID-PB", + "ID-PP", + "ID-RI", + "ID-SA", + "ID-SB", + "ID-SG", + "ID-SL", + "ID-SM", + "ID-SN", + "ID-SR", + "ID-SS", + "ID-ST", + "ID-SU", + "ID-YO", + "IE-C", + "IE-CE", + "IE-CN", + "IE-CO", + "IE-CW", + "IE-D", + "IE-DL", + "IE-G", + "IE-KE", + "IE-KK", + "IE-KY", + "IE-L", + "IE-LD", + "IE-LH", + "IE-LK", + "IE-LM", + "IE-LS", + "IE-M", + "IE-MH", + "IE-MN", + "IE-MO", + "IE-OY", + "IE-RN", + "IE-SO", + "IE-TA", + "IE-U", + "IE-WD", + "IE-WH", + "IE-WW", + "IE-WX", + "IL-D", + "IL-HA", + "IL-JM", + "IL-M", + "IL-TA", + "IL-Z", + "IN-AN", + "IN-AP", + "IN-AR", + "IN-AS", + "IN-BR", + "IN-CH", + "IN-CT", + "IN-DH", + "IN-DL", + "IN-GA", + "IN-GJ", + "IN-HP", + "IN-HR", + "IN-JH", + "IN-JK", + "IN-KA", + "IN-KL", + "IN-LA", + "IN-LD", + "IN-MH", + "IN-ML", + "IN-MN", + "IN-MP", + "IN-MZ", + "IN-NL", + "IN-OR", + "IN-PB", + "IN-PY", + "IN-RJ", + "IN-SK", + "IN-TG", + "IN-TN", + "IN-TR", + "IN-UP", + "IN-UT", + "IN-WB", + "IQ-AN", + "IQ-AR", + "IQ-BA", + "IQ-BB", + "IQ-BG", + "IQ-DA", + "IQ-DI", + "IQ-DQ", + "IQ-HA", + "IQ-KA", + "IQ-KI", + "IQ-MA", + "IQ-MU", + "IQ-NA", + "IQ-NI", + "IQ-QA", + "IQ-SD", + "IQ-SU", + "IQ-WA", + "IR-00", + "IR-01", + "IR-02", + "IR-03", + "IR-04", + "IR-05", + "IR-06", + "IR-07", + "IR-08", + "IR-09", + "IR-10", + "IR-11", + "IR-12", + "IR-13", + "IR-14", + "IR-15", + "IR-16", + "IR-17", + "IR-18", + "IR-19", + "IR-20", + "IR-21", + "IR-22", + "IR-23", + "IR-24", + "IR-25", + "IR-26", + "IR-27", + "IR-28", + "IR-29", + "IR-30", + "IS-1", + "IS-2", + "IS-3", + "IS-4", + "IS-5", + "IS-6", + "IS-7", + "IS-8", + "IS-AKH", + "IS-AKN", + "IS-AKU", + "IS-ARN", + "IS-ASA", + "IS-BFJ", + "IS-BLA", + "IS-BLO", + "IS-BOG", + "IS-BOL", + "IS-DAB", + "IS-DAV", + "IS-DJU", + "IS-EOM", + "IS-EYF", + "IS-FJD", + "IS-FJL", + "IS-FLA", + "IS-FLD", + "IS-FLR", + "IS-GAR", + "IS-GOG", + "IS-GRN", + "IS-GRU", + "IS-GRY", + "IS-HAF", + "IS-HEL", + "IS-HRG", + "IS-HRU", + "IS-HUT", + "IS-HUV", + "IS-HVA", + "IS-HVE", + "IS-ISA", + "IS-KAL", + "IS-KJO", + "IS-KOP", + "IS-LAN", + "IS-MOS", + "IS-MYR", + "IS-NOR", + "IS-RGE", + "IS-RGY", + "IS-RHH", + "IS-RKN", + "IS-RKV", + "IS-SBH", + "IS-SBT", + "IS-SDN", + "IS-SDV", + "IS-SEL", + "IS-SEY", + "IS-SFA", + "IS-SHF", + "IS-SKF", + "IS-SKG", + "IS-SKO", + "IS-SKU", + "IS-SNF", + "IS-SOG", + "IS-SOL", + "IS-SSF", + "IS-SSS", + "IS-STR", + "IS-STY", + "IS-SVG", + "IS-TAL", + "IS-THG", + "IS-TJO", + "IS-VEM", + "IS-VER", + "IS-VOP", + "IT-21", + "IT-23", + "IT-25", + "IT-32", + "IT-34", + "IT-36", + "IT-42", + "IT-45", + "IT-52", + "IT-55", + "IT-57", + "IT-62", + "IT-65", + "IT-67", + "IT-72", + "IT-75", + "IT-77", + "IT-78", + "IT-82", + "IT-88", + "IT-AG", + "IT-AL", + "IT-AN", + "IT-AP", + "IT-AQ", + "IT-AR", + "IT-AT", + "IT-AV", + "IT-BA", + "IT-BG", + "IT-BI", + "IT-BL", + "IT-BN", + "IT-BO", + "IT-BR", + "IT-BS", + "IT-BT", + "IT-BZ", + "IT-CA", + "IT-CB", + "IT-CE", + "IT-CH", + "IT-CL", + "IT-CN", + "IT-CO", + "IT-CR", + "IT-CS", + "IT-CT", + "IT-CZ", + "IT-EN", + "IT-FC", + "IT-FE", + "IT-FG", + "IT-FI", + "IT-FM", + "IT-FR", + "IT-GE", + "IT-GO", + "IT-GR", + "IT-IM", + "IT-IS", + "IT-KR", + "IT-LC", + "IT-LE", + "IT-LI", + "IT-LO", + "IT-LT", + "IT-LU", + "IT-MB", + "IT-MC", + "IT-ME", + "IT-MI", + "IT-MN", + "IT-MO", + "IT-MS", + "IT-MT", + "IT-NA", + "IT-NO", + "IT-NU", + "IT-OR", + "IT-PA", + "IT-PC", + "IT-PD", + "IT-PE", + "IT-PG", + "IT-PI", + "IT-PN", + "IT-PO", + "IT-PR", + "IT-PT", + "IT-PU", + "IT-PV", + "IT-PZ", + "IT-RA", + "IT-RC", + "IT-RE", + "IT-RG", + "IT-RI", + "IT-RM", + "IT-RN", + "IT-RO", + "IT-SA", + "IT-SI", + "IT-SO", + "IT-SP", + "IT-SR", + "IT-SS", + "IT-SU", + "IT-SV", + "IT-TA", + "IT-TE", + "IT-TN", + "IT-TO", + "IT-TP", + "IT-TR", + "IT-TS", + "IT-TV", + "IT-UD", + "IT-VA", + "IT-VB", + "IT-VC", + "IT-VE", + "IT-VI", + "IT-VR", + "IT-VT", + "IT-VV", + "JM-01", + "JM-02", + "JM-03", + "JM-04", + "JM-05", + "JM-06", + "JM-07", + "JM-08", + "JM-09", + "JM-10", + "JM-11", + "JM-12", + "JM-13", + "JM-14", + "JO-AJ", + "JO-AM", + "JO-AQ", + "JO-AT", + "JO-AZ", + "JO-BA", + "JO-IR", + "JO-JA", + "JO-KA", + "JO-MA", + "JO-MD", + "JO-MN", + "JP-01", + "JP-02", + "JP-03", + "JP-04", + "JP-05", + "JP-06", + "JP-07", + "JP-08", + "JP-09", + "JP-10", + "JP-11", + "JP-12", + "JP-13", + "JP-14", + "JP-15", + "JP-16", + "JP-17", + "JP-18", + "JP-19", + "JP-20", + "JP-21", + "JP-22", + "JP-23", + "JP-24", + "JP-25", + "JP-26", + "JP-27", + "JP-28", + "JP-29", + "JP-30", + "JP-31", + "JP-32", + "JP-33", + "JP-34", + "JP-35", + "JP-36", + "JP-37", + "JP-38", + "JP-39", + "JP-40", + "JP-41", + "JP-42", + "JP-43", + "JP-44", + "JP-45", + "JP-46", + "JP-47", + "KE-01", + "KE-02", + "KE-03", + "KE-04", + "KE-05", + "KE-06", + "KE-07", + "KE-08", + "KE-09", + "KE-10", + "KE-11", + "KE-12", + "KE-13", + "KE-14", + "KE-15", + "KE-16", + "KE-17", + "KE-18", + "KE-19", + "KE-20", + "KE-21", + "KE-22", + "KE-23", + "KE-24", + "KE-25", + "KE-26", + "KE-27", + "KE-28", + "KE-29", + "KE-30", + "KE-31", + "KE-32", + "KE-33", + "KE-34", + "KE-35", + "KE-36", + "KE-37", + "KE-38", + "KE-39", + "KE-40", + "KE-41", + "KE-42", + "KE-43", + "KE-44", + "KE-45", + "KE-46", + "KE-47", + "KG-B", + "KG-C", + "KG-GB", + "KG-GO", + "KG-J", + "KG-N", + "KG-O", + "KG-T", + "KG-Y", + "KH-1", + "KH-10", + "KH-11", + "KH-12", + "KH-13", + "KH-14", + "KH-15", + "KH-16", + "KH-17", + "KH-18", + "KH-19", + "KH-2", + "KH-20", + "KH-21", + "KH-22", + "KH-23", + "KH-24", + "KH-25", + "KH-3", + "KH-4", + "KH-5", + "KH-6", + "KH-7", + "KH-8", + "KH-9", + "KI-G", + "KI-L", + "KI-P", + "KM-A", + "KM-G", + "KM-M", + "KN-01", + "KN-02", + "KN-03", + "KN-04", + "KN-05", + "KN-06", + "KN-07", + "KN-08", + "KN-09", + "KN-10", + "KN-11", + "KN-12", + "KN-13", + "KN-15", + "KN-K", + "KN-N", + "KP-01", + "KP-02", + "KP-03", + "KP-04", + "KP-05", + "KP-06", + "KP-07", + "KP-08", + "KP-09", + "KP-10", + "KP-13", + "KP-14", + "KR-11", + "KR-26", + "KR-27", + "KR-28", + "KR-29", + "KR-30", + "KR-31", + "KR-41", + "KR-42", + "KR-43", + "KR-44", + "KR-45", + "KR-46", + "KR-47", + "KR-48", + "KR-49", + "KR-50", + "KW-AH", + "KW-FA", + "KW-HA", + "KW-JA", + "KW-KU", + "KW-MU", + "KZ-AKM", + "KZ-AKT", + "KZ-ALA", + "KZ-ALM", + "KZ-AST", + "KZ-ATY", + "KZ-KAR", + "KZ-KUS", + "KZ-KZY", + "KZ-MAN", + "KZ-PAV", + "KZ-SEV", + "KZ-SHY", + "KZ-VOS", + "KZ-YUZ", + "KZ-ZAP", + "KZ-ZHA", + "LA-AT", + "LA-BK", + "LA-BL", + "LA-CH", + "LA-HO", + "LA-KH", + "LA-LM", + "LA-LP", + "LA-OU", + "LA-PH", + "LA-SL", + "LA-SV", + "LA-VI", + "LA-VT", + "LA-XA", + "LA-XE", + "LA-XI", + "LA-XS", + "LB-AK", + "LB-AS", + "LB-BA", + "LB-BH", + "LB-BI", + "LB-JA", + "LB-JL", + "LB-NA", + "LC-01", + "LC-02", + "LC-03", + "LC-05", + "LC-06", + "LC-07", + "LC-08", + "LC-10", + "LC-11", + "LC-12", + "LI-01", + "LI-02", + "LI-03", + "LI-04", + "LI-05", + "LI-06", + "LI-07", + "LI-08", + "LI-09", + "LI-10", + "LI-11", + "LK-1", + "LK-11", + "LK-12", + "LK-13", + "LK-2", + "LK-21", + "LK-22", + "LK-23", + "LK-3", + "LK-31", + "LK-32", + "LK-33", + "LK-4", + "LK-41", + "LK-42", + "LK-43", + "LK-44", + "LK-45", + "LK-5", + "LK-51", + "LK-52", + "LK-53", + "LK-6", + "LK-61", + "LK-62", + "LK-7", + "LK-71", + "LK-72", + "LK-8", + "LK-81", + "LK-82", + "LK-9", + "LK-91", + "LK-92", + "LR-BG", + "LR-BM", + "LR-CM", + "LR-GB", + "LR-GG", + "LR-GK", + "LR-GP", + "LR-LO", + "LR-MG", + "LR-MO", + "LR-MY", + "LR-NI", + "LR-RG", + "LR-RI", + "LR-SI", + "LS-A", + "LS-B", + "LS-C", + "LS-D", + "LS-E", + "LS-F", + "LS-G", + "LS-H", + "LS-J", + "LS-K", + "LT-01", + "LT-02", + "LT-03", + "LT-04", + "LT-05", + "LT-06", + "LT-07", + "LT-08", + "LT-09", + "LT-10", + "LT-11", + "LT-12", + "LT-13", + "LT-14", + "LT-15", + "LT-16", + "LT-17", + "LT-18", + "LT-19", + "LT-20", + "LT-21", + "LT-22", + "LT-23", + "LT-24", + "LT-25", + "LT-26", + "LT-27", + "LT-28", + "LT-29", + "LT-30", + "LT-31", + "LT-32", + "LT-33", + "LT-34", + "LT-35", + "LT-36", + "LT-37", + "LT-38", + "LT-39", + "LT-40", + "LT-41", + "LT-42", + "LT-43", + "LT-44", + "LT-45", + "LT-46", + "LT-47", + "LT-48", + "LT-49", + "LT-50", + "LT-51", + "LT-52", + "LT-53", + "LT-54", + "LT-55", + "LT-56", + "LT-57", + "LT-58", + "LT-59", + "LT-60", + "LT-AL", + "LT-KL", + "LT-KU", + "LT-MR", + "LT-PN", + "LT-SA", + "LT-TA", + "LT-TE", + "LT-UT", + "LT-VL", + "LU-CA", + "LU-CL", + "LU-DI", + "LU-EC", + "LU-ES", + "LU-GR", + "LU-LU", + "LU-ME", + "LU-RD", + "LU-RM", + "LU-VD", + "LU-WI", + "LV-001", + "LV-002", + "LV-003", + "LV-004", + "LV-005", + "LV-006", + "LV-007", + "LV-008", + "LV-009", + "LV-010", + "LV-011", + "LV-012", + "LV-013", + "LV-014", + "LV-015", + "LV-016", + "LV-017", + "LV-018", + "LV-019", + "LV-020", + "LV-021", + "LV-022", + "LV-023", + "LV-024", + "LV-025", + "LV-026", + "LV-027", + "LV-028", + "LV-029", + "LV-030", + "LV-031", + "LV-032", + "LV-033", + "LV-034", + "LV-035", + "LV-036", + "LV-037", + "LV-038", + "LV-039", + "LV-040", + "LV-041", + "LV-042", + "LV-043", + "LV-044", + "LV-045", + "LV-046", + "LV-047", + "LV-048", + "LV-049", + "LV-050", + "LV-051", + "LV-052", + "LV-053", + "LV-054", + "LV-055", + "LV-056", + "LV-057", + "LV-058", + "LV-059", + "LV-060", + "LV-061", + "LV-062", + "LV-063", + "LV-064", + "LV-065", + "LV-066", + "LV-067", + "LV-068", + "LV-069", + "LV-070", + "LV-071", + "LV-072", + "LV-073", + "LV-074", + "LV-075", + "LV-076", + "LV-077", + "LV-078", + "LV-079", + "LV-080", + "LV-081", + "LV-082", + "LV-083", + "LV-084", + "LV-085", + "LV-086", + "LV-087", + "LV-088", + "LV-089", + "LV-090", + "LV-091", + "LV-092", + "LV-093", + "LV-094", + "LV-095", + "LV-096", + "LV-097", + "LV-098", + "LV-099", + "LV-100", + "LV-101", + "LV-102", + "LV-103", + "LV-104", + "LV-105", + "LV-106", + "LV-107", + "LV-108", + "LV-109", + "LV-110", + "LV-DGV", + "LV-JEL", + "LV-JKB", + "LV-JUR", + "LV-LPX", + "LV-REZ", + "LV-RIX", + "LV-VEN", + "LV-VMR", + "LY-BA", + "LY-BU", + "LY-DR", + "LY-GT", + "LY-JA", + "LY-JG", + "LY-JI", + "LY-JU", + "LY-KF", + "LY-MB", + "LY-MI", + "LY-MJ", + "LY-MQ", + "LY-NL", + "LY-NQ", + "LY-SB", + "LY-SR", + "LY-TB", + "LY-WA", + "LY-WD", + "LY-WS", + "LY-ZA", + "MA-01", + "MA-02", + "MA-03", + "MA-04", + "MA-05", + "MA-06", + "MA-07", + "MA-08", + "MA-09", + "MA-10", + "MA-11", + "MA-12", + "MA-AGD", + "MA-AOU", + "MA-ASZ", + "MA-AZI", + "MA-BEM", + "MA-BER", + "MA-BES", + "MA-BOD", + "MA-BOM", + "MA-BRR", + "MA-CAS", + "MA-CHE", + "MA-CHI", + "MA-CHT", + "MA-DRI", + "MA-ERR", + "MA-ESI", + "MA-ESM", + "MA-FAH", + "MA-FES", + "MA-FIG", + "MA-FQH", + "MA-GUE", + "MA-GUF", + "MA-HAJ", + "MA-HAO", + "MA-HOC", + "MA-IFR", + "MA-INE", + "MA-JDI", + "MA-JRA", + "MA-KEN", + "MA-KES", + "MA-KHE", + "MA-KHN", + "MA-KHO", + "MA-LAA", + "MA-LAR", + "MA-MAR", + "MA-MDF", + "MA-MED", + "MA-MEK", + "MA-MID", + "MA-MOH", + "MA-MOU", + "MA-NAD", + "MA-NOU", + "MA-OUA", + "MA-OUD", + "MA-OUJ", + "MA-OUZ", + "MA-RAB", + "MA-REH", + "MA-SAF", + "MA-SAL", + "MA-SEF", + "MA-SET", + "MA-SIB", + "MA-SIF", + "MA-SIK", + "MA-SIL", + "MA-SKH", + "MA-TAF", + "MA-TAI", + "MA-TAO", + "MA-TAR", + "MA-TAT", + "MA-TAZ", + "MA-TET", + "MA-TIN", + "MA-TIZ", + "MA-TNG", + "MA-TNT", + "MA-YUS", + "MA-ZAG", + "MC-CL", + "MC-CO", + "MC-FO", + "MC-GA", + "MC-JE", + "MC-LA", + "MC-MA", + "MC-MC", + "MC-MG", + "MC-MO", + "MC-MU", + "MC-PH", + "MC-SD", + "MC-SO", + "MC-SP", + "MC-SR", + "MC-VR", + "MD-AN", + "MD-BA", + "MD-BD", + "MD-BR", + "MD-BS", + "MD-CA", + "MD-CL", + "MD-CM", + "MD-CR", + "MD-CS", + "MD-CT", + "MD-CU", + "MD-DO", + "MD-DR", + "MD-DU", + "MD-ED", + "MD-FA", + "MD-FL", + "MD-GA", + "MD-GL", + "MD-HI", + "MD-IA", + "MD-LE", + "MD-NI", + "MD-OC", + "MD-OR", + "MD-RE", + "MD-RI", + "MD-SD", + "MD-SI", + "MD-SN", + "MD-SO", + "MD-ST", + "MD-SV", + "MD-TA", + "MD-TE", + "MD-UN", + "ME-01", + "ME-02", + "ME-03", + "ME-04", + "ME-05", + "ME-06", + "ME-07", + "ME-08", + "ME-09", + "ME-10", + "ME-11", + "ME-12", + "ME-13", + "ME-14", + "ME-15", + "ME-16", + "ME-17", + "ME-18", + "ME-19", + "ME-20", + "ME-21", + "ME-22", + "ME-23", + "ME-24", + "MG-A", + "MG-D", + "MG-F", + "MG-M", + "MG-T", + "MG-U", + "MH-ALK", + "MH-ALL", + "MH-ARN", + "MH-AUR", + "MH-EBO", + "MH-ENI", + "MH-JAB", + "MH-JAL", + "MH-KIL", + "MH-KWA", + "MH-L", + "MH-LAE", + "MH-LIB", + "MH-LIK", + "MH-MAJ", + "MH-MAL", + "MH-MEJ", + "MH-MIL", + "MH-NMK", + "MH-NMU", + "MH-RON", + "MH-T", + "MH-UJA", + "MH-UTI", + "MH-WTH", + "MH-WTJ", + "MK-101", + "MK-102", + "MK-103", + "MK-104", + "MK-105", + "MK-106", + "MK-107", + "MK-108", + "MK-109", + "MK-201", + "MK-202", + "MK-203", + "MK-204", + "MK-205", + "MK-206", + "MK-207", + "MK-208", + "MK-209", + "MK-210", + "MK-211", + "MK-301", + "MK-303", + "MK-304", + "MK-307", + "MK-308", + "MK-310", + "MK-311", + "MK-312", + "MK-313", + "MK-401", + "MK-402", + "MK-403", + "MK-404", + "MK-405", + "MK-406", + "MK-407", + "MK-408", + "MK-409", + "MK-410", + "MK-501", + "MK-502", + "MK-503", + "MK-504", + "MK-505", + "MK-506", + "MK-507", + "MK-508", + "MK-509", + "MK-601", + "MK-602", + "MK-603", + "MK-604", + "MK-605", + "MK-606", + "MK-607", + "MK-608", + "MK-609", + "MK-701", + "MK-702", + "MK-703", + "MK-704", + "MK-705", + "MK-706", + "MK-801", + "MK-802", + "MK-803", + "MK-804", + "MK-805", + "MK-806", + "MK-807", + "MK-808", + "MK-809", + "MK-810", + "MK-811", + "MK-812", + "MK-813", + "MK-814", + "MK-815", + "MK-816", + "MK-817", + "ML-1", + "ML-10", + "ML-2", + "ML-3", + "ML-4", + "ML-5", + "ML-6", + "ML-7", + "ML-8", + "ML-9", + "ML-BKO", + "MM-01", + "MM-02", + "MM-03", + "MM-04", + "MM-05", + "MM-06", + "MM-07", + "MM-11", + "MM-12", + "MM-13", + "MM-14", + "MM-15", + "MM-16", + "MM-17", + "MM-18", + "MN-035", + "MN-037", + "MN-039", + "MN-041", + "MN-043", + "MN-046", + "MN-047", + "MN-049", + "MN-051", + "MN-053", + "MN-055", + "MN-057", + "MN-059", + "MN-061", + "MN-063", + "MN-064", + "MN-065", + "MN-067", + "MN-069", + "MN-071", + "MN-073", + "MN-1", + "MR-01", + "MR-02", + "MR-03", + "MR-04", + "MR-05", + "MR-06", + "MR-07", + "MR-08", + "MR-09", + "MR-10", + "MR-11", + "MR-12", + "MR-13", + "MR-14", + "MR-15", + "MT-01", + "MT-02", + "MT-03", + "MT-04", + "MT-05", + "MT-06", + "MT-07", + "MT-08", + "MT-09", + "MT-10", + "MT-11", + "MT-12", + "MT-13", + "MT-14", + "MT-15", + "MT-16", + "MT-17", + "MT-18", + "MT-19", + "MT-20", + "MT-21", + "MT-22", + "MT-23", + "MT-24", + "MT-25", + "MT-26", + "MT-27", + "MT-28", + "MT-29", + "MT-30", + "MT-31", + "MT-32", + "MT-33", + "MT-34", + "MT-35", + "MT-36", + "MT-37", + "MT-38", + "MT-39", + "MT-40", + "MT-41", + "MT-42", + "MT-43", + "MT-44", + "MT-45", + "MT-46", + "MT-47", + "MT-48", + "MT-49", + "MT-50", + "MT-51", + "MT-52", + "MT-53", + "MT-54", + "MT-55", + "MT-56", + "MT-57", + "MT-58", + "MT-59", + "MT-60", + "MT-61", + "MT-62", + "MT-63", + "MT-64", + "MT-65", + "MT-66", + "MT-67", + "MT-68", + "MU-AG", + "MU-BL", + "MU-CC", + "MU-FL", + "MU-GP", + "MU-MO", + "MU-PA", + "MU-PL", + "MU-PW", + "MU-RO", + "MU-RR", + "MU-SA", + "MV-00", + "MV-01", + "MV-02", + "MV-03", + "MV-04", + "MV-05", + "MV-07", + "MV-08", + "MV-12", + "MV-13", + "MV-14", + "MV-17", + "MV-20", + "MV-23", + "MV-24", + "MV-25", + "MV-26", + "MV-27", + "MV-28", + "MV-29", + "MV-MLE", + "MW-BA", + "MW-BL", + "MW-C", + "MW-CK", + "MW-CR", + "MW-CT", + "MW-DE", + "MW-DO", + "MW-KR", + "MW-KS", + "MW-LI", + "MW-LK", + "MW-MC", + "MW-MG", + "MW-MH", + "MW-MU", + "MW-MW", + "MW-MZ", + "MW-N", + "MW-NB", + "MW-NE", + "MW-NI", + "MW-NK", + "MW-NS", + "MW-NU", + "MW-PH", + "MW-RU", + "MW-S", + "MW-SA", + "MW-TH", + "MW-ZO", + "MX-AGU", + "MX-BCN", + "MX-BCS", + "MX-CAM", + "MX-CHH", + "MX-CHP", + "MX-CMX", + "MX-COA", + "MX-COL", + "MX-DUR", + "MX-GRO", + "MX-GUA", + "MX-HID", + "MX-JAL", + "MX-MEX", + "MX-MIC", + "MX-MOR", + "MX-NAY", + "MX-NLE", + "MX-OAX", + "MX-PUE", + "MX-QUE", + "MX-ROO", + "MX-SIN", + "MX-SLP", + "MX-SON", + "MX-TAB", + "MX-TAM", + "MX-TLA", + "MX-VER", + "MX-YUC", + "MX-ZAC", + "MY-01", + "MY-02", + "MY-03", + "MY-04", + "MY-05", + "MY-06", + "MY-07", + "MY-08", + "MY-09", + "MY-10", + "MY-11", + "MY-12", + "MY-13", + "MY-14", + "MY-15", + "MY-16", + "MZ-A", + "MZ-B", + "MZ-G", + "MZ-I", + "MZ-L", + "MZ-MPM", + "MZ-N", + "MZ-P", + "MZ-Q", + "MZ-S", + "MZ-T", + "NA-CA", + "NA-ER", + "NA-HA", + "NA-KA", + "NA-KE", + "NA-KH", + "NA-KU", + "NA-KW", + "NA-OD", + "NA-OH", + "NA-ON", + "NA-OS", + "NA-OT", + "NA-OW", + "NE-1", + "NE-2", + "NE-3", + "NE-4", + "NE-5", + "NE-6", + "NE-7", + "NE-8", + "NG-AB", + "NG-AD", + "NG-AK", + "NG-AN", + "NG-BA", + "NG-BE", + "NG-BO", + "NG-BY", + "NG-CR", + "NG-DE", + "NG-EB", + "NG-ED", + "NG-EK", + "NG-EN", + "NG-FC", + "NG-GO", + "NG-IM", + "NG-JI", + "NG-KD", + "NG-KE", + "NG-KN", + "NG-KO", + "NG-KT", + "NG-KW", + "NG-LA", + "NG-NA", + "NG-NI", + "NG-OG", + "NG-ON", + "NG-OS", + "NG-OY", + "NG-PL", + "NG-RI", + "NG-SO", + "NG-TA", + "NG-YO", + "NG-ZA", + "NI-AN", + "NI-AS", + "NI-BO", + "NI-CA", + "NI-CI", + "NI-CO", + "NI-ES", + "NI-GR", + "NI-JI", + "NI-LE", + "NI-MD", + "NI-MN", + "NI-MS", + "NI-MT", + "NI-NS", + "NI-RI", + "NI-SJ", + "NL-AW", + "NL-BQ1", + "NL-BQ2", + "NL-BQ3", + "NL-CW", + "NL-DR", + "NL-FL", + "NL-FR", + "NL-GE", + "NL-GR", + "NL-LI", + "NL-NB", + "NL-NH", + "NL-OV", + "NL-SX", + "NL-UT", + "NL-ZE", + "NL-ZH", + "NO-03", + "NO-11", + "NO-15", + "NO-18", + "NO-21", + "NO-22", + "NO-30", + "NO-34", + "NO-38", + "NO-42", + "NO-46", + "NO-50", + "NO-54", + "NP-1", + "NP-2", + "NP-3", + "NP-4", + "NP-5", + "NP-BA", + "NP-BH", + "NP-DH", + "NP-GA", + "NP-JA", + "NP-KA", + "NP-KO", + "NP-LU", + "NP-MA", + "NP-ME", + "NP-NA", + "NP-P1", + "NP-P2", + "NP-P3", + "NP-P4", + "NP-P5", + "NP-P6", + "NP-P7", + "NP-RA", + "NP-SA", + "NP-SE", + "NR-01", + "NR-02", + "NR-03", + "NR-04", + "NR-05", + "NR-06", + "NR-07", + "NR-08", + "NR-09", + "NR-10", + "NR-11", + "NR-12", + "NR-13", + "NR-14", + "NZ-AUK", + "NZ-BOP", + "NZ-CAN", + "NZ-CIT", + "NZ-GIS", + "NZ-HKB", + "NZ-MBH", + "NZ-MWT", + "NZ-NSN", + "NZ-NTL", + "NZ-OTA", + "NZ-STL", + "NZ-TAS", + "NZ-TKI", + "NZ-WGN", + "NZ-WKO", + "NZ-WTC", + "OM-BJ", + "OM-BS", + "OM-BU", + "OM-DA", + "OM-MA", + "OM-MU", + "OM-SJ", + "OM-SS", + "OM-WU", + "OM-ZA", + "OM-ZU", + "PA-1", + "PA-10", + "PA-2", + "PA-3", + "PA-4", + "PA-5", + "PA-6", + "PA-7", + "PA-8", + "PA-9", + "PA-EM", + "PA-KY", + "PA-NB", + "PE-AMA", + "PE-ANC", + "PE-APU", + "PE-ARE", + "PE-AYA", + "PE-CAJ", + "PE-CAL", + "PE-CUS", + "PE-HUC", + "PE-HUV", + "PE-ICA", + "PE-JUN", + "PE-LAL", + "PE-LAM", + "PE-LIM", + "PE-LMA", + "PE-LOR", + "PE-MDD", + "PE-MOQ", + "PE-PAS", + "PE-PIU", + "PE-PUN", + "PE-SAM", + "PE-TAC", + "PE-TUM", + "PE-UCA", + "PG-CPK", + "PG-CPM", + "PG-EBR", + "PG-EHG", + "PG-EPW", + "PG-ESW", + "PG-GPK", + "PG-HLA", + "PG-JWK", + "PG-MBA", + "PG-MPL", + "PG-MPM", + "PG-MRL", + "PG-NCD", + "PG-NIK", + "PG-NPP", + "PG-NSB", + "PG-SAN", + "PG-SHM", + "PG-WBK", + "PG-WHM", + "PG-WPD", + "PH-00", + "PH-01", + "PH-02", + "PH-03", + "PH-05", + "PH-06", + "PH-07", + "PH-08", + "PH-09", + "PH-10", + "PH-11", + "PH-12", + "PH-13", + "PH-14", + "PH-15", + "PH-40", + "PH-41", + "PH-ABR", + "PH-AGN", + "PH-AGS", + "PH-AKL", + "PH-ALB", + "PH-ANT", + "PH-APA", + "PH-AUR", + "PH-BAN", + "PH-BAS", + "PH-BEN", + "PH-BIL", + "PH-BOH", + "PH-BTG", + "PH-BTN", + "PH-BUK", + "PH-BUL", + "PH-CAG", + "PH-CAM", + "PH-CAN", + "PH-CAP", + "PH-CAS", + "PH-CAT", + "PH-CAV", + "PH-CEB", + "PH-COM", + "PH-DAO", + "PH-DAS", + "PH-DAV", + "PH-DIN", + "PH-DVO", + "PH-EAS", + "PH-GUI", + "PH-IFU", + "PH-ILI", + "PH-ILN", + "PH-ILS", + "PH-ISA", + "PH-KAL", + "PH-LAG", + "PH-LAN", + "PH-LAS", + "PH-LEY", + "PH-LUN", + "PH-MAD", + "PH-MAG", + "PH-MAS", + "PH-MDC", + "PH-MDR", + "PH-MOU", + "PH-MSC", + "PH-MSR", + "PH-NCO", + "PH-NEC", + "PH-NER", + "PH-NSA", + "PH-NUE", + "PH-NUV", + "PH-PAM", + "PH-PAN", + "PH-PLW", + "PH-QUE", + "PH-QUI", + "PH-RIZ", + "PH-ROM", + "PH-SAR", + "PH-SCO", + "PH-SIG", + "PH-SLE", + "PH-SLU", + "PH-SOR", + "PH-SUK", + "PH-SUN", + "PH-SUR", + "PH-TAR", + "PH-TAW", + "PH-WSA", + "PH-ZAN", + "PH-ZAS", + "PH-ZMB", + "PH-ZSI", + "PK-BA", + "PK-GB", + "PK-IS", + "PK-JK", + "PK-KP", + "PK-PB", + "PK-SD", + "PK-TA", + "PL-02", + "PL-04", + "PL-06", + "PL-08", + "PL-10", + "PL-12", + "PL-14", + "PL-16", + "PL-18", + "PL-20", + "PL-22", + "PL-24", + "PL-26", + "PL-28", + "PL-30", + "PL-32", + "PS-BTH", + "PS-DEB", + "PS-GZA", + "PS-HBN", + "PS-JEM", + "PS-JEN", + "PS-JRH", + "PS-KYS", + "PS-NBS", + "PS-NGZ", + "PS-QQA", + "PS-RBH", + "PS-RFH", + "PS-SLT", + "PS-TBS", + "PS-TKM", + "PT-01", + "PT-02", + "PT-03", + "PT-04", + "PT-05", + "PT-06", + "PT-07", + "PT-08", + "PT-09", + "PT-10", + "PT-11", + "PT-12", + "PT-13", + "PT-14", + "PT-15", + "PT-16", + "PT-17", + "PT-18", + "PT-20", + "PT-30", + "PW-002", + "PW-004", + "PW-010", + "PW-050", + "PW-100", + "PW-150", + "PW-212", + "PW-214", + "PW-218", + "PW-222", + "PW-224", + "PW-226", + "PW-227", + "PW-228", + "PW-350", + "PW-370", + "PY-1", + "PY-10", + "PY-11", + "PY-12", + "PY-13", + "PY-14", + "PY-15", + "PY-16", + "PY-19", + "PY-2", + "PY-3", + "PY-4", + "PY-5", + "PY-6", + "PY-7", + "PY-8", + "PY-9", + "PY-ASU", + "QA-DA", + "QA-KH", + "QA-MS", + "QA-RA", + "QA-SH", + "QA-US", + "QA-WA", + "QA-ZA", + "RO-AB", + "RO-AG", + "RO-AR", + "RO-B", + "RO-BC", + "RO-BH", + "RO-BN", + "RO-BR", + "RO-BT", + "RO-BV", + "RO-BZ", + "RO-CJ", + "RO-CL", + "RO-CS", + "RO-CT", + "RO-CV", + "RO-DB", + "RO-DJ", + "RO-GJ", + "RO-GL", + "RO-GR", + "RO-HD", + "RO-HR", + "RO-IF", + "RO-IL", + "RO-IS", + "RO-MH", + "RO-MM", + "RO-MS", + "RO-NT", + "RO-OT", + "RO-PH", + "RO-SB", + "RO-SJ", + "RO-SM", + "RO-SV", + "RO-TL", + "RO-TM", + "RO-TR", + "RO-VL", + "RO-VN", + "RO-VS", + "RS-00", + "RS-01", + "RS-02", + "RS-03", + "RS-04", + "RS-05", + "RS-06", + "RS-07", + "RS-08", + "RS-09", + "RS-10", + "RS-11", + "RS-12", + "RS-13", + "RS-14", + "RS-15", + "RS-16", + "RS-17", + "RS-18", + "RS-19", + "RS-20", + "RS-21", + "RS-22", + "RS-23", + "RS-24", + "RS-25", + "RS-26", + "RS-27", + "RS-28", + "RS-29", + "RS-KM", + "RS-VO", + "RU-AD", + "RU-AL", + "RU-ALT", + "RU-AMU", + "RU-ARK", + "RU-AST", + "RU-BA", + "RU-BEL", + "RU-BRY", + "RU-BU", + "RU-CE", + "RU-CHE", + "RU-CHU", + "RU-CU", + "RU-DA", + "RU-IN", + "RU-IRK", + "RU-IVA", + "RU-KAM", + "RU-KB", + "RU-KC", + "RU-KDA", + "RU-KEM", + "RU-KGD", + "RU-KGN", + "RU-KHA", + "RU-KHM", + "RU-KIR", + "RU-KK", + "RU-KL", + "RU-KLU", + "RU-KO", + "RU-KOS", + "RU-KR", + "RU-KRS", + "RU-KYA", + "RU-LEN", + "RU-LIP", + "RU-MAG", + "RU-ME", + "RU-MO", + "RU-MOS", + "RU-MOW", + "RU-MUR", + "RU-NEN", + "RU-NGR", + "RU-NIZ", + "RU-NVS", + "RU-OMS", + "RU-ORE", + "RU-ORL", + "RU-PER", + "RU-PNZ", + "RU-PRI", + "RU-PSK", + "RU-ROS", + "RU-RYA", + "RU-SA", + "RU-SAK", + "RU-SAM", + "RU-SAR", + "RU-SE", + "RU-SMO", + "RU-SPE", + "RU-STA", + "RU-SVE", + "RU-TA", + "RU-TAM", + "RU-TOM", + "RU-TUL", + "RU-TVE", + "RU-TY", + "RU-TYU", + "RU-UD", + "RU-ULY", + "RU-VGG", + "RU-VLA", + "RU-VLG", + "RU-VOR", + "RU-YAN", + "RU-YAR", + "RU-YEV", + "RU-ZAB", + "RW-01", + "RW-02", + "RW-03", + "RW-04", + "RW-05", + "SA-01", + "SA-02", + "SA-03", + "SA-04", + "SA-05", + "SA-06", + "SA-07", + "SA-08", + "SA-09", + "SA-10", + "SA-11", + "SA-12", + "SA-14", + "SB-CE", + "SB-CH", + "SB-CT", + "SB-GU", + "SB-IS", + "SB-MK", + "SB-ML", + "SB-RB", + "SB-TE", + "SB-WE", + "SC-01", + "SC-02", + "SC-03", + "SC-04", + "SC-05", + "SC-06", + "SC-07", + "SC-08", + "SC-09", + "SC-10", + "SC-11", + "SC-12", + "SC-13", + "SC-14", + "SC-15", + "SC-16", + "SC-17", + "SC-18", + "SC-19", + "SC-20", + "SC-21", + "SC-22", + "SC-23", + "SC-24", + "SC-25", + "SC-26", + "SC-27", + "SD-DC", + "SD-DE", + "SD-DN", + "SD-DS", + "SD-DW", + "SD-GD", + "SD-GK", + "SD-GZ", + "SD-KA", + "SD-KH", + "SD-KN", + "SD-KS", + "SD-NB", + "SD-NO", + "SD-NR", + "SD-NW", + "SD-RS", + "SD-SI", + "SE-AB", + "SE-AC", + "SE-BD", + "SE-C", + "SE-D", + "SE-E", + "SE-F", + "SE-G", + "SE-H", + "SE-I", + "SE-K", + "SE-M", + "SE-N", + "SE-O", + "SE-S", + "SE-T", + "SE-U", + "SE-W", + "SE-X", + "SE-Y", + "SE-Z", + "SG-01", + "SG-02", + "SG-03", + "SG-04", + "SG-05", + "SH-AC", + "SH-HL", + "SH-TA", + "SI-001", + "SI-002", + "SI-003", + "SI-004", + "SI-005", + "SI-006", + "SI-007", + "SI-008", + "SI-009", + "SI-010", + "SI-011", + "SI-012", + "SI-013", + "SI-014", + "SI-015", + "SI-016", + "SI-017", + "SI-018", + "SI-019", + "SI-020", + "SI-021", + "SI-022", + "SI-023", + "SI-024", + "SI-025", + "SI-026", + "SI-027", + "SI-028", + "SI-029", + "SI-030", + "SI-031", + "SI-032", + "SI-033", + "SI-034", + "SI-035", + "SI-036", + "SI-037", + "SI-038", + "SI-039", + "SI-040", + "SI-041", + "SI-042", + "SI-043", + "SI-044", + "SI-045", + "SI-046", + "SI-047", + "SI-048", + "SI-049", + "SI-050", + "SI-051", + "SI-052", + "SI-053", + "SI-054", + "SI-055", + "SI-056", + "SI-057", + "SI-058", + "SI-059", + "SI-060", + "SI-061", + "SI-062", + "SI-063", + "SI-064", + "SI-065", + "SI-066", + "SI-067", + "SI-068", + "SI-069", + "SI-070", + "SI-071", + "SI-072", + "SI-073", + "SI-074", + "SI-075", + "SI-076", + "SI-077", + "SI-078", + "SI-079", + "SI-080", + "SI-081", + "SI-082", + "SI-083", + "SI-084", + "SI-085", + "SI-086", + "SI-087", + "SI-088", + "SI-089", + "SI-090", + "SI-091", + "SI-092", + "SI-093", + "SI-094", + "SI-095", + "SI-096", + "SI-097", + "SI-098", + "SI-099", + "SI-100", + "SI-101", + "SI-102", + "SI-103", + "SI-104", + "SI-105", + "SI-106", + "SI-107", + "SI-108", + "SI-109", + "SI-110", + "SI-111", + "SI-112", + "SI-113", + "SI-114", + "SI-115", + "SI-116", + "SI-117", + "SI-118", + "SI-119", + "SI-120", + "SI-121", + "SI-122", + "SI-123", + "SI-124", + "SI-125", + "SI-126", + "SI-127", + "SI-128", + "SI-129", + "SI-130", + "SI-131", + "SI-132", + "SI-133", + "SI-134", + "SI-135", + "SI-136", + "SI-137", + "SI-138", + "SI-139", + "SI-140", + "SI-141", + "SI-142", + "SI-143", + "SI-144", + "SI-146", + "SI-147", + "SI-148", + "SI-149", + "SI-150", + "SI-151", + "SI-152", + "SI-153", + "SI-154", + "SI-155", + "SI-156", + "SI-157", + "SI-158", + "SI-159", + "SI-160", + "SI-161", + "SI-162", + "SI-163", + "SI-164", + "SI-165", + "SI-166", + "SI-167", + "SI-168", + "SI-169", + "SI-170", + "SI-171", + "SI-172", + "SI-173", + "SI-174", + "SI-175", + "SI-176", + "SI-177", + "SI-178", + "SI-179", + "SI-180", + "SI-181", + "SI-182", + "SI-183", + "SI-184", + "SI-185", + "SI-186", + "SI-187", + "SI-188", + "SI-189", + "SI-190", + "SI-191", + "SI-192", + "SI-193", + "SI-194", + "SI-195", + "SI-196", + "SI-197", + "SI-198", + "SI-199", + "SI-200", + "SI-201", + "SI-202", + "SI-203", + "SI-204", + "SI-205", + "SI-206", + "SI-207", + "SI-208", + "SI-209", + "SI-210", + "SI-211", + "SI-212", + "SI-213", + "SK-BC", + "SK-BL", + "SK-KI", + "SK-NI", + "SK-PV", + "SK-TA", + "SK-TC", + "SK-ZI", + "SL-E", + "SL-N", + "SL-NW", + "SL-S", + "SL-W", + "SM-01", + "SM-02", + "SM-03", + "SM-04", + "SM-05", + "SM-06", + "SM-07", + "SM-08", + "SM-09", + "SN-DB", + "SN-DK", + "SN-FK", + "SN-KA", + "SN-KD", + "SN-KE", + "SN-KL", + "SN-LG", + "SN-MT", + "SN-SE", + "SN-SL", + "SN-TC", + "SN-TH", + "SN-ZG", + "SO-AW", + "SO-BK", + "SO-BN", + "SO-BR", + "SO-BY", + "SO-GA", + "SO-GE", + "SO-HI", + "SO-JD", + "SO-JH", + "SO-MU", + "SO-NU", + "SO-SA", + "SO-SD", + "SO-SH", + "SO-SO", + "SO-TO", + "SO-WO", + "SR-BR", + "SR-CM", + "SR-CR", + "SR-MA", + "SR-NI", + "SR-PM", + "SR-PR", + "SR-SA", + "SR-SI", + "SR-WA", + "SS-BN", + "SS-BW", + "SS-EC", + "SS-EE", + "SS-EW", + "SS-JG", + "SS-LK", + "SS-NU", + "SS-UY", + "SS-WR", + "ST-01", + "ST-02", + "ST-03", + "ST-04", + "ST-05", + "ST-06", + "ST-P", + "SV-AH", + "SV-CA", + "SV-CH", + "SV-CU", + "SV-LI", + "SV-MO", + "SV-PA", + "SV-SA", + "SV-SM", + "SV-SO", + "SV-SS", + "SV-SV", + "SV-UN", + "SV-US", + "SY-DI", + "SY-DR", + "SY-DY", + "SY-HA", + "SY-HI", + "SY-HL", + "SY-HM", + "SY-ID", + "SY-LA", + "SY-QU", + "SY-RA", + "SY-RD", + "SY-SU", + "SY-TA", + "SZ-HH", + "SZ-LU", + "SZ-MA", + "SZ-SH", + "TD-BA", + "TD-BG", + "TD-BO", + "TD-CB", + "TD-EE", + "TD-EO", + "TD-GR", + "TD-HL", + "TD-KA", + "TD-LC", + "TD-LO", + "TD-LR", + "TD-MA", + "TD-MC", + "TD-ME", + "TD-MO", + "TD-ND", + "TD-OD", + "TD-SA", + "TD-SI", + "TD-TA", + "TD-TI", + "TD-WF", + "TG-C", + "TG-K", + "TG-M", + "TG-P", + "TG-S", + "TH-10", + "TH-11", + "TH-12", + "TH-13", + "TH-14", + "TH-15", + "TH-16", + "TH-17", + "TH-18", + "TH-19", + "TH-20", + "TH-21", + "TH-22", + "TH-23", + "TH-24", + "TH-25", + "TH-26", + "TH-27", + "TH-30", + "TH-31", + "TH-32", + "TH-33", + "TH-34", + "TH-35", + "TH-36", + "TH-37", + "TH-38", + "TH-39", + "TH-40", + "TH-41", + "TH-42", + "TH-43", + "TH-44", + "TH-45", + "TH-46", + "TH-47", + "TH-48", + "TH-49", + "TH-50", + "TH-51", + "TH-52", + "TH-53", + "TH-54", + "TH-55", + "TH-56", + "TH-57", + "TH-58", + "TH-60", + "TH-61", + "TH-62", + "TH-63", + "TH-64", + "TH-65", + "TH-66", + "TH-67", + "TH-70", + "TH-71", + "TH-72", + "TH-73", + "TH-74", + "TH-75", + "TH-76", + "TH-77", + "TH-80", + "TH-81", + "TH-82", + "TH-83", + "TH-84", + "TH-85", + "TH-86", + "TH-90", + "TH-91", + "TH-92", + "TH-93", + "TH-94", + "TH-95", + "TH-96", + "TH-S", + "TJ-DU", + "TJ-GB", + "TJ-KT", + "TJ-RA", + "TJ-SU", + "TL-AL", + "TL-AN", + "TL-BA", + "TL-BO", + "TL-CO", + "TL-DI", + "TL-ER", + "TL-LA", + "TL-LI", + "TL-MF", + "TL-MT", + "TL-OE", + "TL-VI", + "TM-A", + "TM-B", + "TM-D", + "TM-L", + "TM-M", + "TM-S", + "TN-11", + "TN-12", + "TN-13", + "TN-14", + "TN-21", + "TN-22", + "TN-23", + "TN-31", + "TN-32", + "TN-33", + "TN-34", + "TN-41", + "TN-42", + "TN-43", + "TN-51", + "TN-52", + "TN-53", + "TN-61", + "TN-71", + "TN-72", + "TN-73", + "TN-81", + "TN-82", + "TN-83", + "TO-01", + "TO-02", + "TO-03", + "TO-04", + "TO-05", + "TR-01", + "TR-02", + "TR-03", + "TR-04", + "TR-05", + "TR-06", + "TR-07", + "TR-08", + "TR-09", + "TR-10", + "TR-11", + "TR-12", + "TR-13", + "TR-14", + "TR-15", + "TR-16", + "TR-17", + "TR-18", + "TR-19", + "TR-20", + "TR-21", + "TR-22", + "TR-23", + "TR-24", + "TR-25", + "TR-26", + "TR-27", + "TR-28", + "TR-29", + "TR-30", + "TR-31", + "TR-32", + "TR-33", + "TR-34", + "TR-35", + "TR-36", + "TR-37", + "TR-38", + "TR-39", + "TR-40", + "TR-41", + "TR-42", + "TR-43", + "TR-44", + "TR-45", + "TR-46", + "TR-47", + "TR-48", + "TR-49", + "TR-50", + "TR-51", + "TR-52", + "TR-53", + "TR-54", + "TR-55", + "TR-56", + "TR-57", + "TR-58", + "TR-59", + "TR-60", + "TR-61", + "TR-62", + "TR-63", + "TR-64", + "TR-65", + "TR-66", + "TR-67", + "TR-68", + "TR-69", + "TR-70", + "TR-71", + "TR-72", + "TR-73", + "TR-74", + "TR-75", + "TR-76", + "TR-77", + "TR-78", + "TR-79", + "TR-80", + "TR-81", + "TT-ARI", + "TT-CHA", + "TT-CTT", + "TT-DMN", + "TT-MRC", + "TT-PED", + "TT-POS", + "TT-PRT", + "TT-PTF", + "TT-SFO", + "TT-SGE", + "TT-SIP", + "TT-SJL", + "TT-TOB", + "TT-TUP", + "TV-FUN", + "TV-NIT", + "TV-NKF", + "TV-NKL", + "TV-NMA", + "TV-NMG", + "TV-NUI", + "TV-VAI", + "TW-CHA", + "TW-CYI", + "TW-CYQ", + "TW-HSQ", + "TW-HSZ", + "TW-HUA", + "TW-ILA", + "TW-KEE", + "TW-KHH", + "TW-KIN", + "TW-LIE", + "TW-MIA", + "TW-NAN", + "TW-NWT", + "TW-PEN", + "TW-PIF", + "TW-TAO", + "TW-TNN", + "TW-TPE", + "TW-TTT", + "TW-TXG", + "TW-YUN", + "TZ-01", + "TZ-02", + "TZ-03", + "TZ-04", + "TZ-05", + "TZ-06", + "TZ-07", + "TZ-08", + "TZ-09", + "TZ-10", + "TZ-11", + "TZ-12", + "TZ-13", + "TZ-14", + "TZ-15", + "TZ-16", + "TZ-17", + "TZ-18", + "TZ-19", + "TZ-20", + "TZ-21", + "TZ-22", + "TZ-23", + "TZ-24", + "TZ-25", + "TZ-26", + "TZ-27", + "TZ-28", + "TZ-29", + "TZ-30", + "TZ-31", + "UA-05", + "UA-07", + "UA-09", + "UA-12", + "UA-14", + "UA-18", + "UA-21", + "UA-23", + "UA-26", + "UA-30", + "UA-32", + "UA-35", + "UA-40", + "UA-43", + "UA-46", + "UA-48", + "UA-51", + "UA-53", + "UA-56", + "UA-59", + "UA-61", + "UA-63", + "UA-65", + "UA-68", + "UA-71", + "UA-74", + "UA-77", + "UG-101", + "UG-102", + "UG-103", + "UG-104", + "UG-105", + "UG-106", + "UG-107", + "UG-108", + "UG-109", + "UG-110", + "UG-111", + "UG-112", + "UG-113", + "UG-114", + "UG-115", + "UG-116", + "UG-117", + "UG-118", + "UG-119", + "UG-120", + "UG-121", + "UG-122", + "UG-123", + "UG-124", + "UG-125", + "UG-126", + "UG-201", + "UG-202", + "UG-203", + "UG-204", + "UG-205", + "UG-206", + "UG-207", + "UG-208", + "UG-209", + "UG-210", + "UG-211", + "UG-212", + "UG-213", + "UG-214", + "UG-215", + "UG-216", + "UG-217", + "UG-218", + "UG-219", + "UG-220", + "UG-221", + "UG-222", + "UG-223", + "UG-224", + "UG-225", + "UG-226", + "UG-227", + "UG-228", + "UG-229", + "UG-230", + "UG-231", + "UG-232", + "UG-233", + "UG-234", + "UG-235", + "UG-236", + "UG-237", + "UG-301", + "UG-302", + "UG-303", + "UG-304", + "UG-305", + "UG-306", + "UG-307", + "UG-308", + "UG-309", + "UG-310", + "UG-311", + "UG-312", + "UG-313", + "UG-314", + "UG-315", + "UG-316", + "UG-317", + "UG-318", + "UG-319", + "UG-320", + "UG-321", + "UG-322", + "UG-323", + "UG-324", + "UG-325", + "UG-326", + "UG-327", + "UG-328", + "UG-329", + "UG-330", + "UG-331", + "UG-332", + "UG-333", + "UG-334", + "UG-335", + "UG-336", + "UG-337", + "UG-401", + "UG-402", + "UG-403", + "UG-404", + "UG-405", + "UG-406", + "UG-407", + "UG-408", + "UG-409", + "UG-410", + "UG-411", + "UG-412", + "UG-413", + "UG-414", + "UG-415", + "UG-416", + "UG-417", + "UG-418", + "UG-419", + "UG-420", + "UG-421", + "UG-422", + "UG-423", + "UG-424", + "UG-425", + "UG-426", + "UG-427", + "UG-428", + "UG-429", + "UG-430", + "UG-431", + "UG-432", + "UG-433", + "UG-434", + "UG-435", + "UG-C", + "UG-E", + "UG-N", + "UG-W", + "UM-67", + "UM-71", + "UM-76", + "UM-79", + "UM-81", + "UM-84", + "UM-86", + "UM-89", + "UM-95", + "US-AK", + "US-AL", + "US-AR", + "US-AS", + "US-AZ", + "US-CA", + "US-CO", + "US-CT", + "US-DC", + "US-DE", + "US-FL", + "US-GA", + "US-GU", + "US-HI", + "US-IA", + "US-ID", + "US-IL", + "US-IN", + "US-KS", + "US-KY", + "US-LA", + "US-MA", + "US-MD", + "US-ME", + "US-MI", + "US-MN", + "US-MO", + "US-MP", + "US-MS", + "US-MT", + "US-NC", + "US-ND", + "US-NE", + "US-NH", + "US-NJ", + "US-NM", + "US-NV", + "US-NY", + "US-OH", + "US-OK", + "US-OR", + "US-PA", + "US-PR", + "US-RI", + "US-SC", + "US-SD", + "US-TN", + "US-TX", + "US-UM", + "US-UT", + "US-VA", + "US-VI", + "US-VT", + "US-WA", + "US-WI", + "US-WV", + "US-WY", + "UY-AR", + "UY-CA", + "UY-CL", + "UY-CO", + "UY-DU", + "UY-FD", + "UY-FS", + "UY-LA", + "UY-MA", + "UY-MO", + "UY-PA", + "UY-RN", + "UY-RO", + "UY-RV", + "UY-SA", + "UY-SJ", + "UY-SO", + "UY-TA", + "UY-TT", + "UZ-AN", + "UZ-BU", + "UZ-FA", + "UZ-JI", + "UZ-NG", + "UZ-NW", + "UZ-QA", + "UZ-QR", + "UZ-SA", + "UZ-SI", + "UZ-SU", + "UZ-TK", + "UZ-TO", + "UZ-XO", + "VC-01", + "VC-02", + "VC-03", + "VC-04", + "VC-05", + "VC-06", + "VE-A", + "VE-B", + "VE-C", + "VE-D", + "VE-E", + "VE-F", + "VE-G", + "VE-H", + "VE-I", + "VE-J", + "VE-K", + "VE-L", + "VE-M", + "VE-N", + "VE-O", + "VE-P", + "VE-R", + "VE-S", + "VE-T", + "VE-U", + "VE-V", + "VE-W", + "VE-X", + "VE-Y", + "VE-Z", + "VN-01", + "VN-02", + "VN-03", + "VN-04", + "VN-05", + "VN-06", + "VN-07", + "VN-09", + "VN-13", + "VN-14", + "VN-18", + "VN-20", + "VN-21", + "VN-22", + "VN-23", + "VN-24", + "VN-25", + "VN-26", + "VN-27", + "VN-28", + "VN-29", + "VN-30", + "VN-31", + "VN-32", + "VN-33", + "VN-34", + "VN-35", + "VN-36", + "VN-37", + "VN-39", + "VN-40", + "VN-41", + "VN-43", + "VN-44", + "VN-45", + "VN-46", + "VN-47", + "VN-49", + "VN-50", + "VN-51", + "VN-52", + "VN-53", + "VN-54", + "VN-55", + "VN-56", + "VN-57", + "VN-58", + "VN-59", + "VN-61", + "VN-63", + "VN-66", + "VN-67", + "VN-68", + "VN-69", + "VN-70", + "VN-71", + "VN-72", + "VN-73", + "VN-CT", + "VN-DN", + "VN-HN", + "VN-HP", + "VN-SG", + "VU-MAP", + "VU-PAM", + "VU-SAM", + "VU-SEE", + "VU-TAE", + "VU-TOB", + "WF-AL", + "WF-SG", + "WF-UV", + "WS-AA", + "WS-AL", + "WS-AT", + "WS-FA", + "WS-GE", + "WS-GI", + "WS-PA", + "WS-SA", + "WS-TU", + "WS-VF", + "WS-VS", + "YE-AB", + "YE-AD", + "YE-AM", + "YE-BA", + "YE-DA", + "YE-DH", + "YE-HD", + "YE-HJ", + "YE-HU", + "YE-IB", + "YE-JA", + "YE-LA", + "YE-MA", + "YE-MR", + "YE-MW", + "YE-RA", + "YE-SA", + "YE-SD", + "YE-SH", + "YE-SN", + "YE-SU", + "YE-TA", + "ZA-EC", + "ZA-FS", + "ZA-GP", + "ZA-KZN", + "ZA-LP", + "ZA-MP", + "ZA-NC", + "ZA-NW", + "ZA-WC", + "ZM-01", + "ZM-02", + "ZM-03", + "ZM-04", + "ZM-05", + "ZM-06", + "ZM-07", + "ZM-08", + "ZM-09", + "ZM-10", + "ZW-BU", + "ZW-HA", + "ZW-MA", + "ZW-MC", + "ZW-ME", + "ZW-MI", + "ZW-MN", + "ZW-MS", + "ZW-MV", + "ZW-MW" + ] + } + } + } + }, + "retentionType": { + "type": "string", + "enum": [ + "STATED_PERIOD", + "LIMITED", + "INDEFINITE", + "OTHER", + "UNSPECIFIED" + ] + }, + "retentionPeriod": { + "type": "number" + }, + "dataProtectionImpactAssessmentLink": { + "type": "string" + }, + "dataProtectionImpactAssessmentStatus": { + "type": "string", + "enum": [ + "LINK", + "NOT_REQUIRED", + "MISSING" + ] + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key", + "values" + ], + "properties": { + "key": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "dataSiloTitles": { + "type": "array", + "items": { + "type": "string" + } + }, + "dataSubjectTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "ownerEmails": { + "type": "array", + "items": { + "type": "string" + } + }, + "processingSubPurposes": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "purpose" + ], + "properties": { + "purpose": { + "type": "string", + "enum": [ + "ESSENTIAL", + "ADDITIONAL_FUNCTIONALITY", + "ADVERTISING", + "MARKETING", + "ANALYTICS", + "PERSONALIZATION", + "OPERATION_SECURITY", + "LEGAL", + "TRANSFER", + "SALE", + "HR", + "OTHER", + "UNSPECIFIED" + ] + } + } + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] + } + }, + "dataSubCategories": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "category" + ], + "properties": { + "category": { + "type": "string", + "enum": [ + "FINANCIAL", + "HEALTH", + "CONTACT", + "LOCATION", + "DEMOGRAPHIC", + "ID", + "ONLINE_ACTIVITY", + "USER_PROFILE", + "SOCIAL_MEDIA", + "CONNECTION", + "TRACKING", + "DEVICE", + "SURVEY", + "OTHER", + "UNSPECIFIED", + "NOT_PERSONAL_DATA", + "INTEGRATION_IDENTIFIER" + ] + } + } + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] + } + }, + "saaSCategories": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + } + }, + "purposes": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "trackingType", + "title", + "name" + ], + "properties": { + "trackingType": { + "type": "string" + }, + "title": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "is-active": { + "type": "boolean" + }, + "configurable": { + "type": "boolean" + }, + "display-order": { + "type": "number" + }, + "show-in-privacy-center": { + "type": "boolean" + }, + "show-in-consent-manager": { + "type": "boolean" + }, + "preference-topics": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "required": [ + "type", + "title", + "description" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "SELECT", + "MULTI_SELECT", + "BOOLEAN" + ] + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "default-configuration": { + "type": "string" + }, + "show-in-privacy-center": { + "type": "boolean" + }, + "options": { + "type": "array", + "items": { + "type": "object", + "required": [ + "title", + "slug" + ], + "properties": { + "title": { + "type": "string" + }, + "slug": { + "type": "string" + } + } + } + } + } + } + ] + } + }, + "auth-level": { + "type": "string", + "enum": [ + "REQUIRED", + "OPTIONAL", + "ALLOW_OPT_OUT" + ] + }, + "opt-out-signals": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "GPC", + "DNT" + ] + } + }, + "default-consent": { + "type": "string", + "enum": [ + "off", + "Auto" + ] + } + } + } + ] + } + } + } +}