@marketto/belfiore-connector-embedded
Version:
TS & JS Belfiore datasource connector: embedded dataset
1 lines • 1.39 MB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/classes/belfiore-connector.class.ts","../src/functions/generator-wrapper.function.ts","../src/index.ts","../asset/cities-countries.ts"],"sourcesContent":["import dayjs, { Dayjs } from \"dayjs\";\r\nimport {\r\n\tBelfioreAbstractConnector,\r\n\tBelfiorePlace,\r\n\tIBelfioreCity,\r\n\tIBelfioreCommonPlace,\r\n\tIBelfioreCountry,\r\n\tMultiFormatDate,\r\n} from \"@marketto/belfiore-connector\";\r\nimport generatorWrapper from \"../functions/generator-wrapper.function\";\r\nimport type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nimport type IBelfioreDbData from \"../interfaces/belfiore-db-data.interface\";\r\nimport type IBelfioreDbLicense from \"../interfaces/belfiore-db-license.interface\";\r\nimport type BelfioreConnectorConfig from \"../types/belfiore-connector-config.type\";\r\n\r\n/**\r\n * Handler for cities and countries Dataset\r\n */\r\nexport default class BelfioreConnector extends BelfioreAbstractConnector {\r\n\t/**\r\n\t * Binary find Index (works ONLY in sorted arrays)\r\n\t * @param text Unique string of values of the same length (step)\r\n\t * @param value Exact text to find\r\n\t * @param start text start index for seeking the value\r\n\t * @param end text end index for seeking the value\r\n\t * @param step length of a single value to seek properly the text string\r\n\t * @returns Found value Index or -1 if not found\r\n\t * @private\r\n\t */\r\n\tprivate binaryfindIndex(\r\n\t\tsourceString: string,\r\n\t\ttargetText: string,\r\n\t\tstart: number = 0,\r\n\t\tend: number = sourceString.length - 1\r\n\t): number {\r\n\t\tif (!sourceString.length) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\tconst rangedStart: number = Math.max(start, 0);\r\n\t\tconst rangedEnd: number = Math.min(end, sourceString.length - 1);\r\n\t\tconst currentLength: number = rangedEnd - rangedStart + 1;\r\n\t\tif (rangedStart > rangedEnd || currentLength % targetText.length) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\tconst targetIndex: number =\r\n\t\t\trangedStart +\r\n\t\t\tMath.floor(currentLength / (2 * targetText.length)) * targetText.length;\r\n\t\tconst targetValue: string = sourceString.substr(\r\n\t\t\ttargetIndex,\r\n\t\t\ttargetText.length\r\n\t\t);\r\n\t\tif (targetValue === targetText) {\r\n\t\t\treturn Math.ceil((targetIndex + 1) / targetText.length) - 1;\r\n\t\t}\r\n\t\tif (targetText > targetValue) {\r\n\t\t\treturn this.binaryfindIndex(\r\n\t\t\t\tsourceString,\r\n\t\t\t\ttargetText,\r\n\t\t\t\ttargetIndex + targetText.length,\r\n\t\t\t\trangedEnd\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn this.binaryfindIndex(\r\n\t\t\tsourceString,\r\n\t\t\ttargetText,\r\n\t\t\trangedStart,\r\n\t\t\ttargetIndex - 1\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts belfiore code into an int\r\n\t */\r\n\tprivate belfioreToInt(code: string): number {\r\n\t\tconst upperCaseCode: string = code.toUpperCase();\r\n\t\treturn (\r\n\t\t\t(upperCaseCode.charCodeAt(0) - 65) * 10 ** 3 +\r\n\t\t\tparseInt(upperCaseCode.substr(1), 10)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts int to belfiore code\r\n\t * @param code Belfiore int code\r\n\t * @returns Standard belfiore code\r\n\t */\r\n\tprivate belfioreFromInt(code: number): string {\r\n\t\tconst charIndex: number = Math.floor(code / 10 ** 3);\r\n\t\tconst char: string = String.fromCharCode(charIndex + 65);\r\n\t\tconst numValue: string = code.toString().substr(-3);\r\n\t\treturn `${char}${numValue.padStart(3, \"0\")}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Converst Base 32 number of days since 01/01/1861 to Date instance\r\n\t * @param base32daysFrom1861 Base 32 number of days from 1861-01-01\r\n\t * @returns Date instance\r\n\t */\r\n\tprivate decodeDate(base32daysFrom1861: string): Dayjs {\r\n\t\tconst italyBirthDatePastDays = parseInt(base32daysFrom1861, 32);\r\n\t\treturn dayjs(this.ITALY_KINGDOM_BIRTHDATE).add(\r\n\t\t\titalyBirthDatePastDays,\r\n\t\t\t\"days\"\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieve string at index posizion\r\n\t * @param list concatenation of names\r\n\t * @param index target name index\r\n\t * @returns index-th string\r\n\t */\r\n\tprivate static nameByIndex(list: string, index: number): string {\r\n\t\tif (typeof list !== \"string\") {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t\"[BelfioreConnector.nameByIndex] Provided list is not a string\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (!list.length) {\r\n\t\t\tthrow new Error(\"[BelfioreConnector.nameByIndex] Provided list empty\");\r\n\t\t}\r\n\t\tlet startIndex: number = 0;\r\n\t\tlet endIndex: number = list.indexOf(\"|\", startIndex + 1);\r\n\t\tlet counter: number = index;\r\n\r\n\t\twhile (counter > 0 && endIndex > startIndex) {\r\n\t\t\tcounter--;\r\n\t\t\tstartIndex = endIndex + 1;\r\n\t\t\tendIndex = list.indexOf(\"|\", startIndex + 1);\r\n\t\t}\r\n\r\n\t\tif (index < 0 || counter > 0) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t`[BelfioreConnector.nameByIndex] Provided index ${index} is out range`\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!counter && endIndex < 0) {\r\n\t\t\treturn list.substring(startIndex);\r\n\t\t}\r\n\r\n\t\treturn list.substring(startIndex, endIndex);\r\n\t}\r\n\r\n\tprivate data: IBelfioreDbData[];\r\n\tprivate licenses: IBelfioreDbLicense[];\r\n\tprivate sources: string[];\r\n\tprivate toDate: Date | undefined;\r\n\tprivate fromDate: Date | undefined;\r\n\tprivate codeMatcher: RegExp | undefined;\r\n\tprivate province: string | undefined;\r\n\r\n\tconstructor({\r\n\t\tfromDate,\r\n\t\ttoDate,\r\n\t\tcodeMatcher,\r\n\t\tdata,\r\n\t\tlicenses,\r\n\t\tprovince,\r\n\t\tsources,\r\n\t}: BelfioreConnectorConfig) {\r\n\t\tsuper();\r\n\t\tif (codeMatcher && province) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t\"Both codeMatcher and province were provided to Bolfiore, only one is allowed\"\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (toDate && !fromDate) {\r\n\t\t\tthrow new Error(\"Parameter fromDate is mandatory passing toDate\");\r\n\t\t}\r\n\r\n\t\tthis.fromDate = fromDate;\r\n\t\tthis.toDate = toDate;\r\n\t\tthis.codeMatcher = codeMatcher;\r\n\t\tthis.data = data;\r\n\t\tthis.licenses = licenses;\r\n\t\tthis.province = province;\r\n\t\tthis.sources = sources;\r\n\t}\r\n\r\n\tprivate get config(): BelfioreConnectorConfig {\r\n\t\tconst { codeMatcher, data, fromDate, licenses, sources, toDate } = this;\r\n\t\treturn {\r\n\t\t\tcodeMatcher,\r\n\t\t\tdata,\r\n\t\t\tfromDate,\r\n\t\t\tlicenses,\r\n\t\t\tsources,\r\n\t\t\ttoDate,\r\n\t\t} as BelfioreConnectorConfig;\r\n\t}\r\n\r\n\tprivate *scanDataSourceIndex(\r\n\t\tdataSource: IBelfioreDbData,\r\n\t\tmatcher?: RegExp\r\n\t): Generator {\r\n\t\tif (matcher) {\r\n\t\t\tfor (\r\n\t\t\t\tlet startIndex = 0, entryIndex = 0;\r\n\t\t\t\tstartIndex < dataSource.name.length;\r\n\t\t\t\tentryIndex++\r\n\t\t\t) {\r\n\t\t\t\tconst endIndex =\r\n\t\t\t\t\tdataSource.name.indexOf(\"|\", startIndex + 1) + 1 ||\r\n\t\t\t\t\tdataSource.name.length + 1;\r\n\t\t\t\tconst targetName = dataSource.name.substring(startIndex, endIndex - 1);\r\n\t\t\t\tif (matcher.test(targetName)) {\r\n\t\t\t\t\tyield entryIndex;\r\n\t\t\t\t}\r\n\t\t\t\t// Moving to next entry to check\r\n\t\t\t\tstartIndex = endIndex;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst dsLength = dataSource.belfioreCode.length / 3;\r\n\t\t\tfor (let index = 0; index < dsLength; index++) {\r\n\t\t\t\tyield index;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n\r\n\tprivate scanData(\r\n\t\tname?: string | RegExp\r\n\t): IGeneratorWrapper<BelfiorePlace, null, void> {\r\n\t\treturn generatorWrapper(this.scanDataGenerator(name));\r\n\t}\r\n\tprivate *scanDataGenerator(name?: string | RegExp): Generator {\r\n\t\tconst nameMatcher = typeof name === \"string\" ? new RegExp(name, \"i\") : name;\r\n\r\n\t\tfor (const sourceData of this.data) {\r\n\t\t\tconst dataSourceScan = this.scanDataSourceIndex(sourceData, nameMatcher);\r\n\t\t\tfor (\r\n\t\t\t\tlet dss = dataSourceScan.next();\r\n\t\t\t\t!dss.done;\r\n\t\t\t\tdss = dataSourceScan.next()\r\n\t\t\t) {\r\n\t\t\t\tconst index = dss.value as number;\r\n\t\t\t\tconst parsedPlace: BelfiorePlace | null = this.locationByIndex(\r\n\t\t\t\t\tsourceData,\r\n\t\t\t\t\tindex\r\n\t\t\t\t);\r\n\t\t\t\tif (parsedPlace) {\r\n\t\t\t\t\tyield parsedPlace;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieve location for the given index in the given subset\r\n\t * @param resourceData concatenation of names\r\n\t * @param index target name index\r\n\t * @returns location\r\n\t */\r\n\tprivate locationByIndex(\r\n\t\tresourceData: IBelfioreDbData,\r\n\t\tindex: number\r\n\t): BelfiorePlace | null {\r\n\t\tconst belfioreIndex = index * 3;\r\n\t\tif (resourceData.belfioreCode.length - belfioreIndex < 3) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst belFioreInt = parseInt(\r\n\t\t\tresourceData.belfioreCode.substring(belfioreIndex, belfioreIndex + 3),\r\n\t\t\t32\r\n\t\t);\r\n\t\tconst belfioreCode = this.belfioreFromInt(belFioreInt);\r\n\t\tconst code = resourceData.provinceOrCountry.substring(\r\n\t\t\tindex * 2,\r\n\t\t\tindex * 2 + 2\r\n\t\t);\r\n\t\tif (\r\n\t\t\t(this.province && this.province !== code) ||\r\n\t\t\t(this.codeMatcher && !this.codeMatcher.test(belfioreCode))\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst dateIndex = index * 4;\r\n\t\tconst creationDate = this.decodeDate(\r\n\t\t\t(resourceData.creationDate || \"\").substring(dateIndex, dateIndex + 4) ||\r\n\t\t\t\t\"0\"\r\n\t\t).startOf(\"day\");\r\n\t\tconst expirationDate = this.decodeDate(\r\n\t\t\t(resourceData.expirationDate || \"\").substring(dateIndex, dateIndex + 4) ||\r\n\t\t\t\t\"2qn13\"\r\n\t\t).endOf(\"day\");\r\n\t\tif (\r\n\t\t\t(this.fromDate &&\r\n\t\t\t\tresourceData.expirationDate &&\r\n\t\t\t\tdayjs(this.fromDate).isAfter(expirationDate, \"day\")) ||\r\n\t\t\t(this.toDate &&\r\n\t\t\t\tresourceData.creationDate &&\r\n\t\t\t\tdayjs(this.toDate).isBefore(creationDate, \"day\"))\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst name = BelfioreConnector.nameByIndex(resourceData.name, index);\r\n\t\tconst licenseIndex = parseInt(resourceData.dataSource, 32)\r\n\t\t\t.toString(2)\r\n\t\t\t.padStart((resourceData.belfioreCode.length * 2) / 3, \"0\")\r\n\t\t\t.substring(index * 2, index * 2 + 2);\r\n\t\tconst dataSource = this.licenses[parseInt(licenseIndex, 2)];\r\n\r\n\t\tconst location: IBelfioreCommonPlace = {\r\n\t\t\tbelfioreCode,\r\n\t\t\tcreationDate: creationDate.toDate(),\r\n\t\t\tdataSource,\r\n\t\t\texpirationDate: expirationDate.toDate(),\r\n\t\t\tname,\r\n\t\t};\r\n\t\tconst isCountry = belfioreCode[0] === \"Z\";\r\n\t\tif (isCountry) {\r\n\t\t\treturn {\r\n\t\t\t\t...location,\r\n\t\t\t\tiso3166: code,\r\n\t\t\t} as IBelfioreCountry;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\t...location,\r\n\t\t\tprovince: code,\r\n\t\t} as IBelfioreCity;\r\n\t}\r\n\r\n\tprivate parseProvinces(): string[] {\r\n\t\tconst provinceList = new Set<string>();\r\n\t\tfor (const sourceData of this.data) {\r\n\t\t\tconst dataSourceScan = this.scanDataSourceIndex(sourceData);\r\n\t\t\tfor (\r\n\t\t\t\tlet dss = dataSourceScan.next();\r\n\t\t\t\t!dss.done;\r\n\t\t\t\tdss = dataSourceScan.next()\r\n\t\t\t) {\r\n\t\t\t\tconst index = dss.value as number;\r\n\t\t\t\tconst province = sourceData.provinceOrCountry.substr(index * 2, 2);\r\n\t\t\t\tif (!provinceList.has(province)) {\r\n\t\t\t\t\tconst belFioreInt = parseInt(\r\n\t\t\t\t\t\tsourceData.belfioreCode.substr(index * 3, 3),\r\n\t\t\t\t\t\t32\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst belfioreCode = this.belfioreFromInt(belFioreInt);\r\n\t\t\t\t\tif (this.CITY_CODE_MATCHER.test(belfioreCode)) {\r\n\t\t\t\t\t\tif (province.trim()) {\r\n\t\t\t\t\t\t\tprovinceList.add(province);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Array.from(provinceList);\r\n\t}\r\n\r\n\t/**\r\n\t * Return belfiore places list\r\n\t */\r\n\tpublic async toArray(): Promise<BelfiorePlace[]> {\r\n\t\treturn [...this.scanData()] as BelfiorePlace[];\r\n\t}\r\n\r\n\tpublic get provinces(): Promise<string[]> {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tif (this.province) {\r\n\t\t\t\tresolve([this.province]);\r\n\t\t\t} else if (this.codeMatcher !== this.COUNTRY_CODE_MATCHER) {\r\n\t\t\t\tresolve(this.parseProvinces());\r\n\t\t\t} else {\r\n\t\t\t\tresolve([]);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * @description Search places matching given name\r\n\t */\r\n\tpublic async searchByName(name: string): Promise<BelfiorePlace[] | null> {\r\n\t\treturn name ? ([...this.scanData(name)] as BelfiorePlace[]) : null;\r\n\t}\r\n\r\n\t/**\r\n\t * @description Find place matching given name, retuns place object if provided name match only 1 result\r\n\t */\r\n\tpublic async findByName(name: string): Promise<BelfiorePlace | null> {\r\n\t\tif (!name) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst startingNameMatcher = new RegExp(`^${name}$`, \"i\");\r\n\t\treturn this.scanData(startingNameMatcher).next().value;\r\n\t}\r\n\r\n\t/**\r\n\t * @description Retrieve Place by Belfiore Code\r\n\t */\r\n\tpublic async findByCode(belfioreCode: string): Promise<BelfiorePlace | null> {\r\n\t\tif (this.BELFIORE_CODE_MATCHER.test(belfioreCode)) {\r\n\t\t\tconst base32name: string = this.belfioreToInt(belfioreCode)\r\n\t\t\t\t.toString(32)\r\n\t\t\t\t.padStart(3, \"0\");\r\n\r\n\t\t\tfor (const sourceData of this.data || []) {\r\n\t\t\t\tconst index: number = this.binaryfindIndex(\r\n\t\t\t\t\tsourceData.belfioreCode,\r\n\t\t\t\t\tbase32name\r\n\t\t\t\t);\r\n\t\t\t\tif (index >= 0) {\r\n\t\t\t\t\treturn this.locationByIndex(sourceData, index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Proxied version of Belfiore which filters results by given date\r\n\t * @param date Target date to filter places active only for the given date\r\n\t * @returns Belfiore instance filtered by active date\r\n\t * @public\r\n\t */\r\n\tpublic active(date: MultiFormatDate = new Date()): BelfioreConnector {\r\n\t\treturn new BelfioreConnector({\r\n\t\t\t...this.config,\r\n\t\t\tfromDate: Array.isArray(date)\r\n\t\t\t\t? new Date(date[0], date[1] ?? 0, date[2] ?? 1)\r\n\t\t\t\t: dayjs(date).toDate(),\r\n\t\t\ttoDate: Array.isArray(date)\r\n\t\t\t\t? new Date(date[0], date[1] ?? 0, date[2] ?? 1)\r\n\t\t\t\t: dayjs(date).toDate(),\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Proxied version of Belfiore which filters results by given date ahead\r\n\t * @param date Target date to filter places active only for the given date\r\n\t * @returns Belfiore instance filtered by active date\r\n\t * @public\r\n\t */\r\n\tpublic from(date: MultiFormatDate = new Date()): BelfioreConnector {\r\n\t\treturn new BelfioreConnector({\r\n\t\t\t...this.config,\r\n\t\t\tfromDate: Array.isArray(date)\r\n\t\t\t\t? new Date(date[0], date[1] ?? 0, date[2] ?? 1)\r\n\t\t\t\t: dayjs(date).toDate(),\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Belfiore instance filtered by the given province\r\n\t * @param code Province Code (2 A-Z char)\r\n\t * @returns Belfiore instance filtered by province code\r\n\t * @public\r\n\t */\r\n\tpublic byProvince(code: string): BelfioreConnector | undefined {\r\n\t\tif (typeof code !== \"string\" || !/^[A-Z]{2}$/u.test(code)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn new BelfioreConnector({\r\n\t\t\t...this.config,\r\n\t\t\tcodeMatcher: undefined,\r\n\t\t\tprovince: code,\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Proxied version of Belfiore which filters results by place type\r\n\t */\r\n\tpublic get cities(): BelfioreConnector | undefined {\r\n\t\tif (this.codeMatcher && this.codeMatcher !== this.CITY_CODE_MATCHER) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\treturn new BelfioreConnector({\r\n\t\t\t...this.config,\r\n\t\t\tcodeMatcher: this.CITY_CODE_MATCHER,\r\n\t\t\tprovince: undefined,\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Proxied version of Belfiore which filters results by place type\r\n\t */\r\n\tpublic get countries(): BelfioreConnector | undefined {\r\n\t\tif (\r\n\t\t\t(this.codeMatcher && this.codeMatcher !== this.COUNTRY_CODE_MATCHER) ||\r\n\t\t\tthis.province\r\n\t\t) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\treturn new BelfioreConnector({\r\n\t\t\t...this.config,\r\n\t\t\tcodeMatcher: this.COUNTRY_CODE_MATCHER,\r\n\t\t\tprovince: undefined,\r\n\t\t});\r\n\t}\r\n}\r\n","import type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nexport default function generatorWrapper<\r\n\tT = unknown,\r\n\tTReturn = any,\r\n\tTNext = unknown\r\n>(generator: Generator): IGeneratorWrapper<T, TReturn, TNext> {\r\n\tgenerator[Symbol.iterator] = () => generator;\r\n\treturn generator as IGeneratorWrapper<T, TReturn, TNext>;\r\n}\r\n","import CITIES_COUNTRIES from \"../asset/cities-countries\";\r\nimport BelfioreConnector from \"./classes/belfiore-connector.class\";\r\nimport type BelfioreConnectorConfig from \"./types/belfiore-connector-config.type\";\r\n\r\nconst belfioreConnector = new BelfioreConnector(\r\n\tCITIES_COUNTRIES as BelfioreConnectorConfig\r\n);\r\nexport default belfioreConnector;\r\nexport { BelfioreConnector, belfioreConnector };\r\nexport type * from \"@marketto/belfiore-connector\";\r\n","const CITIES_COUNTRIES = {\n \"data\": [\n {\n \"belfioreCode\": \"00200300900b00c00l00v01401a01e01v02202e02f02m02q02v03303803i03p04504604c04e04g04k04n04o05805905a06706h06j06k06l06r07n07o07q08408k08l08n09109a09j09n09s0a20ab0ag0am0at0b10b40bc0bq0bt0cb0ck0cm0co0cq0cr0d00d10d40da0dc0dq0e20e80e90el0f30fd0fi0fk0fo0fp0fu0g10gc0gv0h10h40hc0he0hf0hj0i60i70i90ij0ik0im0iq0j00jg0jj0jp0jv0k10k20k40k50k80k90ke0kj0l30l70l80la0ld0lg0ll0ln0m70mb0mj0mk0mm0mn0n80nh0ni0nm0nv0om0ot0p30p60p70p80pm0po0ps0q10q60q70q80qq0qu0r10r20r30r40r50r70r90ro0rq0s30s40s50sb0sc0sj0sl0sr0ss0su0sv0t00t50t70t80tf0tn0u60u70u90uk0up0v20v50vc0vj0vl0vu10310f10l10n10s10t11311411911a11g11i11m12112412512712812f12k13213513713b13d13f13g13j13k13q13s13v14314b14c14d14g14m14p15115215515615m15o15q15r16616816p16s16t17417517917c17f17p17t18318a18b18i18s19419619819919d19m19r19s19u19v1a01a31a41a91af1ag1as1at1ba1bp1bv1c61cd1ce1cu1de1dg1di1dj1e61e71e81ef1eg1eh1en1ev1f41fd1fe1fj1g91gb1go1h01h31h71hf1hh1hs1hv1i01i11ib1ie1im1ip1j61jk1jm1jp1k11k41k91l61lh1li1lp1lr1m01m91mb1mj1ml1mm1mn1mp1mt1n11n41na1nd1nf1nq1o11o81oe1oj1om1ot1p71p91pa1pj1ps1pv1q71qi1qs1rk1rl1s61sm1tc1ti1tl1tn1to1tv1u81ub1uh1ul1v01vd1vr20d20k20n20t21421721j21n22022c22j22k22q22s23023223723j23k23o24324424624f24g24h24k25u26926g26o27527927n27r28128m28t29e29j29m29q29u29v2a62ab2an2at2b12b22bg2bn2bp2br2bv2c22cd2ci2ck2cm2cn2cu2d02d12d32d92db2dr2en2eq2eu2f72fi2g22gc2gf2gj2gq2gu2h02h52h92ha2hb2hf2hj2hp2hu2i22ic2in2ja2jb2jf2jq2jv2k02k22k42k62ki2l02l12lb2le2lh2ls2m12m22m92ma2n22n42nd2ne2nf2nl2np2o62o92ob2oc2oe2of2og2oh2oi2ol2oo2oq2pd2pp2pq2q12q92qb2qc2qg2qi2qq2qr2r12r32r42r92rb2rc2rk2ru2s02s12s52s92sh2sl2sm2sn2sq2td2ti2tl2tq2tt2u92uh2un2uo2uv2v72vd2vj2vn2vr2vt30130230830b30c30i30j30p30q31031c31l31q31v32232432a32c32g32h32j32l32m32o32r32s32v33133533633833e33f33n33q34634c34d34f34k34o34p35335935a35b35g35h35i35k35m35u35v36a36c36i36j36l36o36u36v37537637a37b37h37o37q37u38738838938c38e38f38l38v39239339839939a39f39i39m39r39t3a13a43a53a83ac3ad3ah3al3ap3aq3b13b33b83bb3bd3be3bf3bm3bo3bp3c13c43ca3cm3cn3cp3ct3da3di3dr3ds3dt3dv3e13e53e93ef3eg3f63fb3fk3ft3fv3g03ge3gh3gi3gj3gp3gq3h03h23h43h93hb3hf3hg3hh3hq3i03i93ib3if3ig3il3ji3jj3k13k43k93ka3kb3kc3ke3kh3kr3kv3l33ls3m33mg3mj3mo3mu3n13n83nc3nn3np3nt3nu3o03o63oh3oq3p53p83pf3pu3q43qc3qf3qi3r13r33r53re3ri3s53sh3si3sl3sn3t23ti3u03u33ua3uj3ur3v93vb3vc3vd3vg3vv40340940e40g40l40n40p41141741a41c41m41n42242642e42f42g42l42n42u43643j43q43s43u44144n45145645c45j45k45l45m45n45u46546846a46e46f46k46o46s46u46v47247447b47o47r48348748948q49149f49k49o49r4a24ab4ao4aq4as4au4b14b44b74bc4bd4bk4bt4bu4cf4cj4cl4cn4cs4d44d94dd4dh4dl4dm4e84en4eo4es4f14f44f64f94fa4fm4fp4fr4fs4g14g64g84gb4gk4gn4gq4gs4gt4h14h24h34hd4hh4hi4hn4i04i44ie4ig4io4ip4ir4it4iu4iv4j64j84jd4jg4jh4jl4jn4jo4js4k34k44k54k84kj4kq4kt4ku4l04l64l74l84ld4lo4ls4lt4m24mn4mo4mq4mr4ms4mv4n04ne4nh4no4np4nt4o24o34o74oq4ov4p24pd4ph4pk4pm4pu4q74q94qe4qf4qk4qm4r44r64rp4sg4sm4sq4sr4t24t74tc4tf4tg4tp4u04u14u44u64ud4uf4ug4uj4uk4ul4un4v34v64vf50150450850n50u51751851c51h51m51p51t52152b52e52f52k52r52s52v53653b53c53j53l54454554754g54p55255555655955b55c55g55i55k55m55n55q56256j56m56r56t57557657957i58k58q58u59459h59n59s59u5aj5aq5au5b05b25b45bd5c15cl5dj5e95eg5ek5ep5ff5fh5fo5g15g35g95gd5gf5gh5gi5gk5gr5gv5he5hj5hr5ht5hu5i35i45i65id5ii5in5jd5je5jp5jr5jt5jv5k35k85k95ku5l05l25lb5lc5lf5lk5lr5lt5lv5m15m35ma5md5mq5mt5mu5mv5n45nd5nh5nj5nn5nt5o05o85o95oh5ol5ov5p85pg5pp5pq5q15q25qh5qj5ql5r05ru5s15s85sd5sh5sj5t35t45t55t75t95tc5tj5tl5to5tp5tt5u55u95uc5ue5uj5uk5uq5v05vf5vk5vq60u60v61061161461662662862b62d62n62s63463663g63t64764t65665965a65i65p65s66566766966k66l67167567767m67s67v68068168968e68m68p68r69869g69j69s6a06a46a66a86aq6b76c56c86c96cb6cg6ck6co6cq6d26d36d76d96dd6di6dl6do6dp6dq6e36e76ep6f96fd6fe6fg6fh6fk6fu6gb6gc6gj6gl6h16h76hc6hd6hi6hk6hl6hn6hq6hr6i36ia6ib6ic6ii6ij6io6ip6is6iu6j36j76jq6jt6jv6kq6l36l86lc6lg6lp6mf6ms6n06nl6ns6nv6o36og6oi6ot6p26p46p66pc6pn6q76q86qd6qk6qr6r06r16r46r86rf6rg6rh6rr6rv6s46s76s96sa6sd6se6sh6si6sk6so6sp6sq6sr6t76t86ta6tc6tk6tl6tr6tv6u16u76u86ub6uj6uk6ul6ut6uv6v36v66v96vd6vj6vm6vq6vs6vv70170270370470a70b70d70m70n70p70t71171871h71v72072772972g72h72j72m72s72t73e73f73j73q73r73s73v74074174974a74l74q75175475b75h75l75n75o75u76076l76s77577n77r78679179879f79k79q79v7a87ag7ai7am7ap7ar7b17bn7bp7bs7bu7bv7c57cb7cj7co7cr7cu7d27d37dc7dd7dg7dj7dl7dt7e07e37e87ea7ek7el7em7eo7f07f17f37f57f87fc7ff7fg7fk7g07g57gc7gh7gi7gp7gt7gv7h67h97ha7hg7hp7hs7ht7hu7i37i47i67i77ii7j07k97km7ko7kt7l97le7ln7lo7lq7lt7lv7m27m77me7mu7n17n47n57n77nb7nl7ns7nu7oa7ob7oc7oe7oi7ou7p07p47pc7pr7pu7q17q67q97qa7qd7qk7ql7qm7r17r67r77r97rc7rf7s07s47s57s67sa7se7sh7sj7sl7sn7sr7su7t47t57t87ta7tg7tv7u67uv7v17v77vk7vq80380880c80h80j80q80u80v81281381581b81f81h81l81m81q81s82182d82e82g82t83983b83f83p84e84i84k84n84p84t85385685h85q85r85v86186286386b86e86m87387b87o87u88288888a88b88q89189889b89f89k89m89p89t8a18a28a38a48a58a68ac8ad8ag8au8b38b68b88bd8bg8bo8bs8bu8bv8c38c78c88cb8ck8d88d98db8dc8df8du8ea8ei8ep8eu8f08f28f88fm8g68g98gf8gi8gr8gt8h18h48ha8ho8hq8hr8hs8hu8i08i18i28i48i58i88ig8io8ir8j78jb8je8jg8ji8k18k28k38k48k58ka8kd8ke8kr8l68lf8li8lj8lp8m18m28m48mh8mj8mo8n38n58nc8ng8no8nu8o18o78ob8oc8oj8on8or8os8otantao4aodaokaolaopap1ap3ap4ap5apbapcapdapeapkaprapsaq0aq4aq5aq7aq8aqjaqkaqnaqqaqraqtar3ar6araarfaroarqartarvas1as5ascasnaspasqasrat2at3atbatsatuau1au4au8au9av0av2av4avhavsavtb00b0bb0jb0ob0pb1fb1hb1mb1ob21b2ab2db2fb2gb2mb2nb2qb30b38b3ab3bb3db3eb3fb3gb3lb3pb3rb3ub3vb42b43b4db4pb4ub5cb5jb60b61b69b6bb6kb6pb6ub6vb73b75b7gb7ub80b8ab8eb8nb8sb8tb8ub91b97b98ba1ba3baibambaobaqbavbb2bb5bb6bbebbgbbjbbkbbtbbubc0bc1bc2bc4bc9bcbbcdbcebcfbcqbcubcvbd3bd8bdcbdebdfbdhbdlbdpbe2be5be6be9bejbekbfabfbbfcbfdbffbfgbfhbfjbfnbfobfqbg6bgabgdbgebgfbghbgibgkbgmbgobh5bhabhdbhebhgbhhbhobhvbi9bifbinbiobiubivbj3bj6bjcbjjbjlbjnbjobjvbk6bk7bkabkebkhbklbknbkqbksbkvbl5bljblobmpbn6bnabnkbnobntbo1bo2bo3bo4bo5bo6bo7bo8boebofbohbombotbp0bp2bp4bpabpbbpcbpkbpnbq3bqbbqgbqibqlbr0br1br6br7brebrkbrlbrnbrqbrtbs0bs4bsebslbsqbsvbt0bt1bt3bt6btebuuc0bc0gc0jc1coghognoguohfoi5ol2\",\n \"creationDate\": \"00of01520pa1002b0quf0lad002b002b002b002b08dr002b002b002b002b0lad0lcu0lcu0152002b027k0o1500pi00pi002b002b0lcu0lad002b002b002b0lcu002b0lad002b002b0lad002b002b002b00qa0lad0lad002b002b002b0lcu0lad0lcu002b002b002b0lcu0rpq002b002b002b002b002b002b04fq0o52002b002b0i0d0i0d002b0lad0lad0nuc002b0rd3002b16880a0e002b0o1b002b0lcu0lcu002b0lcu002b0234002b002b02tq03ii002b07qb0nrq002b002b002b0o8i002b002b06e5002b0lad0lcu02340bd9002b002b002b002b002b002b002b002b002b002b002b002b002b02gh002b0lad002b002b0lcu002b002b002b002b002b002b0mfe023400nj0lcu0lcu00mn0h4h002b0lad0oao0lp7002b002b0nvv0lad0lad002b06ub002b02340lcu0lcu002b002b002b002b0lcu002b0o280lad02lu002b002b002b0nuc0lcu002b002b002b0lad0lad002b0lad067c002b0lad002b002b002b00nj0lad002b03th029t02bl002b002b0o2b0lcu002b002b0ihi02340lad002b00of002b0lad0caj002b002b023407kl002b0lad002b0lcu002b002b002b0lad002b002b002b00of017l023402340lcu0lcu0lad002b00md00of0lad0q1v002b002b002b002b002b002b002b002b002b0lcu0lcu002b002b002b0lcu002b02340lad002b02ap002b01bu002b002b0lo602s5002b0guo060b02n6002b0234002b0lad002b07ko002b002b0lad002b002b0lad0lcu002b002b002b0b8501pf00mu002b002b002b002b002b0lad00qn0ben002b00of00mn00qa00mu0lad002b0234067u0lcu0o6g002b0lcu002b002b002b002b0lad0lcu00nc002b002b002b002b002b002b0nvh0lcu002b0lcu0a360lcu002b00l60lad00mn00nc029t002b02340lad002b002b002b002b002b002b002b002b002b0lcu002b002b02fs002b0472002b02340234002b0ocb002b0o7i00md0o15002b002b014d00of0lad002b002b00of002b01bu0lad002b00mn002b002b002b0lad0lad03ii002b0lad0234002b0o0q0lad002b0lcu002b002b0lad002b002b0234002b002b03oq002b00mn034j0lad00md002b002b0o0q0lcu002b002b00o800l600o800o800sr00mn02r9002b04jd02570lad002b00mn0nsl002b002b0lcu002b0lad002b0lcu00tn0lcu0lad002b013j0lad01og0lad0nrn0ocd002b0lad002b0lad0nt7002b002b0lcu0o1400qa00sr002b027k0nr0057i002b0nrq0lad0o1s002b0lcu002b00nu002b0lcu03dc073m0lad00mn02340lad0lad0lad002b002b002b002b0nse0lad002b0lcu002b023402340lad0lcu002b002b0o14002b002b0n2r0lad04gb0lad0lcu002b0lad0lad002b02r902ut002b002b0lad07l30lad03vn06910lad002b002b0lad002b0lad0lad00sr002b002b0lad002b0lad0lad0lcu002b002b002b023410mr002b02340lad002b002b002b04c2002b002b0lad014d0lcu00nu002b06tb0lcu0lad0234002b0b850lad002b002b002b00jl002b0lad0lad0lcu0lcu00of002b002b00l60lad0lad002b002b0lcu02lu002b002b002b0lcu002b02en002b0er7002b0lad002b00mn002b002b0234002b0234002b00o80lad002b0lad0nq6002b002b0ntf002b002b002b0lad0lad0lad0lad0lad002b002b0lad0lad0lad0lcu00sr002b0nub002b002b0lcu0lad002b0m4q002b0lcu0lcu0lcu002b0lad0234002b00js00js0lad002b0lp7002b0lcu002b02fs002b02fs0lcu002b0lcu0ctn0lad002b0lcu002b002b0lad0lad0gbf002b0m4q0lcu002b002b002b002b002b002b00of002b0lad002b002b0lad002b002b0lcu002b023404k90lad002b0lad0nqq02c30234002b002b0obk0lcu0lad0nu90133002b05qt002b031t002b002b09st0lad002b0mh5002b02c30lad002b0lad002b0lad002b002b0lad002b0lcu00mn014d0h4h08d90n7s002b0lad04ch0234002b002b080e002b002b002b0lad002b0nhk002b0o52017l0lad0lcu002b0lcu0lcu01pf002b0o1r002b002b04jd01kl0234002b0lad002b0lcu0603002b002b002b002b002b002b002b00of002b002b0s5h0lcu002b0lcu002b002b0lcu002b002b002b002b0lcu014d002b002b002b002b0lcu0lcu00mn002b0234002b0lad002b00of0o2b0lad002b02ap0lad0lcu002b002b03ii002b002b0lad0lad0ntf0lad002b002b002b0lad0lcu0lcu0lcu002b002b00q006em002b002b002b002b002b002b0lcu02340ntm0lad002b0o690lcu002b002b0lad0b4o0lad0lcu02340lcu0o01002b0m4q0o4i00mn002b0lad0lad002b0lcu0lad002b0lad0lcu002b002b0lad002b0lo60lad002b002b0b790lad0lad002b002b002b0lcu08ul002b0o1r002b0234002b002b002b002b002b0lad002b002b0lad002b002b002b00sr0lcu0lcu0lad0lad002b0nvj0lad02340lad002b002b0lcu002b002b00of00mn0lad002b002b002b0lcu002b002b002b00qn0lcu002b0lgg002b0lad002b02340lcu0lcu0lad002b002b002b002b002b0lad0o3802sg002b002b0lad0lad02340lad0lad0lcu0lcu002b0lad0lad0lad002b002b002b0lad0lad0lad002b0lad002b02340lad002b0lcu0lad0lad00sr002b002b00qa00ht0lad002b0307002b002b0234002b05mg0lad0lad0lcu0lcu0lad00kv002b002b002b0lad0lad0lcu02340234002b002b0o2t002b002b0lcu02340lad002b0eke002b0nth002b0lad002b086114ip002b0lad002b002b002b0lad02341374080e0234002b002b0lad002b002b002b0lad002b0lad0o200lad002b00nj043m03oq0a5m00sr00mu002b0nvv0lad002b002b002b0lad0lad002b013q002b00sr0lad0lad0lad002b045k0lad0ocs002b002b0lcu0lad002b00l30lcu002b0lad002b0lad0lad00pi002b0lcu00if002b0lu40lcu002b0lcu002b002b002b0lcu02bs002b002b002b002b002b002b002b002b002b002b002b0lad0lad002b0lcu0234002b002b002b002b0lad02sg0234002b002b0lcu002b002b02s90lcu0lad002b0lad002b0lad02340mg6002b002b0s51002b002b002b002b0lad002b0lad0lad0lad0lad0234002b00of002b002b002b002b002b002b002b002b00nj002b002b0lad0lcu002b014d052j002b0lad002b00lo0lcu002b002b002b002b002b00of0nof0lad0lcu00qa002b002b0lcu0lcu0lcu002b002b0lad002b06cj02en002b002b002b002b002b0ock06ub0o0i0lcu0lad002b002b002b0lcu02bs002b002b02c3002b00of0lad002b00o8002b002b002b0ob90lad04tm002b0234002b002b03cc032h002b0lad02fs0lad0lcu00sr00of002b002b002b002b002b002b002b00qa002b002b00sr0lad002b023400of002b002b002b002b0lcu002b029t002b023402vn0nuo0lad049i0lad002b0lcu00of0ni3002b0lcu002b002b002b0lcu002b002b002b002b0lad0lcu0lad0lcu0lcu0lcu002b0lcu002b002b057i0lcu002b02sg0r170nsh002b00mn0lcu0a4q002b002b0lad002b002b0in10lcu002b002b0lcu0lcu0lad0lad00l3002b002b0lad0lad0lad0lad002b0oaa0lad002b0lad0lad002b0lad0lad002b002b0lad002b002b0lcu0lad002b0oao0lcu002b0nrg0lad002b002b002b02340234002b002b002b0nuo002b002b002b07tr02340lad02bs002b002b02bs002b0234002b002b0lad01or0lad0234002b0nub00of0lcu002b0lad0lad0lad0lcu01330lad002b002b002b002b002b0lad02340lad00mu0lad002b0o0q002b0lad0lcu002b002b002b0lad002b07kh07kh0lad052j002b00mn0lad03450nuo002b0nvj0234002b0h4h00mn002b0nr5002b03ii002b002b002b023403070lcu014d00qn0lad0lad00mn0lcu0lad002b0lad0lad002b0lcu0lad002b002b002b0o37002b002b002b002b002b002b002b002b0lad002b0oc90lcu0lcu002b002b002b002b002b002b0137002b0lcu02tj0lcu0arc0lcu002b00of002b0lcu002b002b0234017l026o0o0q002b002b02340lcu0lcu002b002b0o38002b0lad0o37014d052j0lcu002b00nj0lad002b002b02bs00sr0lad0lad0lcu0nvj0lad002b0lad002b002b002b05so002b002b00qa017l00l600lo03cc0lad01v20lad002b0lad00q0046400nj0lad0np902n30lad0lcu0obh002b02bs00o800md04as02bs0lcu0234002b01pm002b00o800qa0lcu002b00pt002b0lad0lcu002b0lcu0234002b002b002b00pi00qa0lad002b002b0lcu00jl00mn002b06ub002b00pi0nhk0lcu0lad02bs013j0lad052j002b0o7g002b0234002b0o3m00of0lcu00mn0lad002b00sr00lo02ap0nvj0qhf002b00qa002b0adp0nnv0lcu00sr002b0lad0lad002b002b0lcu00nu002b00q00lcu0lad0lad002b00of002b00l60lad002b002b002b0lad00md002b002b00tn002b002b0o37002b002b0lad002b0lad0lcu002b002b0lcu0lcu002b0lcu0lcu002b0lcu002b002b0lad0lad002b0lcu002b00qa0lcu0lad002b0o50002b0lcu002b00o80lad04260lad0lcu002b002b0lad002b0v0c02h8002b0lp7002b002b0lcu0lad002b0298002b002b0lcu0lad0lcu0lad0lcu002b002b002b002b002b002b002b002b002b0lcu0lad002b002b002b002b002b002b002b002b0234002b002b0lad002b002b0lad00sr002b002b002b002b0lad0o01002b0lad0lcu0lad0o1s0lad0lad002b002b0lad0lcu002b0lad0lad0nti002b0lad0lad002b02c3002b0lad02340lcu0lad0lad0bd9002b02ut0lad002b0lad002b0lad0lcu002b0lad002b02340lad0lad0lad0lcu0lcu002b002b002b0lad002b0lad002b0nub0lad0lad002b002b0lad0lcu0lcu0lad002b002b002b0lad002b002b002b03mr002b002b002b002b002b0472002b0lad002b002b0lad002b002b002b002b00pi002b029801pn002b0o9a002b02s90lad002b0lcu02c30lad0g4u140j002b0234002b002b0lcu0234002b002b0lad0lad0lad002b014d0lcu002b0rfc0lcu002b002b002b0lcu002b08c90lad00mu002b0lad0lp70lad0ocn002b0lad0lcu002b0lad02340lad0lad0lad002b023400l6002b002b002b02340nqr002b0234002b0234002b0lad0lad0lad002b0lad002b002b002b02340lad002b0lad002b0o3h002b0820002b002b002b0o5203uv0fpn0fpn0lad002b00of00qa002b002b002b002b0lcu00q00lcu0lad002b0lcu0lcu0lcu002b0lad002b0lad0lad002b002b02fs0lad002b0bnq002b0lad002b01pm02t5002b02bs0lad0lad0lad0lad0lad0lad0lad0lad0lcu02ap002b002b0o2t002b0lcu0ns60lad002b002b002b0lad002b0lad0lcu002b002b0lcu0nuu0lad0lad0lcu002b002b002b002b002b002b002b0lad0lcu00md0lcu0lcu002b00nu002b0lad002b0lcu002b0lcu002b002b0lcu0lcu0lad002b0lcu0o9q02340nvv002b002b002b002b0lcu002b002b002b002b0lad002b0mh51fc81h730o5o1mi6000000000000000000000000\",\n \"dataSource\": \"1al\",\n \"expirationDate\": \"0nuo0o7a0utk0o201nki0o9b1nki0nsm1ofi0mfc0mci0o5o0o1r0o4f0nva0nuo0nuu0utk0o110nr11q530ucp1q320o1d0tet0o7i0nqf0o4i0o500nm90o2a0utk1obc0oca1nvv0o1d0o5e0nvj0nm60nm60o1r1n940ntf0o840och0o0r0o0q0o5p0utk0o1e0o3i0n700pa10uc40ntb0o4f0o3q0o7i0nt70o4f0o5e0ul80npg0nkr0nrq0nst0o3h0o9v0o4f0ulp0nst0utk0nup1mtn0oaf0o770udp1obc0nm10o4i0nub0nuu0o750nin0nt70ntj0mci0o110o1s1n941mia0npg0nt80oa111kj0np70np70nst0o6916co0utk1o1e1obc1nki0nse0nsf0o391pp10o8r0o8r0nrg067c0n4s0nsh0ntu0o1s0o290o1d16b00o9a1mjc0o3q0ocs0n701mia0o0i1mjc0rme0o8h0o5o0o710moh0utk0rc81obc0nuu1mtn0urg0och0nu90o5o0uu31l4l0nvk0o3h0o640o371obc0nvv0o0q0nq30nvn0no304c10ns60nsj0uls1l4l0nov0nsj0ni40nt20ul60utk0nst0nst0ntb1n940o4f0nup0o9v0n700nq41n940nu40nss0nrg0nvk0o010pq81mjc1obc0o380re10me00uv60o420nq20nqq0o140nov0o650n700ntb0o671n940o5e0nve0nve0o8g0o7i0o0f0o840o7d0o4i0tet1pp10o2t1n941nvv0o3p1mjc0o5o0occ0o5o0o8s0o420o0i1omp0ntv0utk0o201n940utk0nj50nss0o530oba0o7l0nse0nnt0oci0ntf0utk0o0d0o2c0o0q0nub19et0o1r0mfe0ntg1n940nov0nvk0o390o2a0nm80n1p1obc0nup0o3q0o3h0nrg03jv0nlc0ntf0ned1ocp0o8h0ntq1obc1omp0mff0nve1n940utk0no10nqq0o000nk50ocs0nqe1nvv0npg0oa00o521nvv0o9b0tet0o0q1obc0nst0obb1n940obv0nvj0ocn1kp81oc90o1t0v1j0rko0utk0n6h0ob80o4i1obc0o8s0utk0nr00nnv02fr02fr0qss0o7k0o3q0uc019et0nsj0utk0nub0nog0o1d0me01omp0nse0nva1obc0o381q530o4f0ntp0ntb0o5o0nnc0o2t0nuo0o5o0o0i0o0q0ntb0nu90nt10o7j1nvv0o9a0o531fsf1fsf0oaf0vqp0nu40udp0q370v1e02l004i00o0i1nvv16co06r50o0j0o1r0rc81noe0sdl0nm70o501nvv0ntf0obv0o8s0o9h0nsl1mia0oan06c60o290utk1omp1mia0utk04710nhl0o9n1obc0o371mju0omh0ouu0o7d0ocu0nm90mfc0o4i1mia0o020o1s0qhq0utk0qb90ob90oci0me00o3i0ocv1nvv0o4g0o140o370nnv0nnv0nhm1nvv0nsm1obc1nki0nqq0utk0o0i0o0r0nu40o420nva0moh0o3m0nst0oco0o3m1nvv1n940ocd0ur00ocu0oca0nvv1n940v3p0no00o280utk15mn1obc0nth0oa01oc911o30nhl0oc00uqr0p9i0uij0o7i0utk0o0f0nbk0nth0utk0mci0scc0mff0nj50nd70o4f0o030o9h0nu40o010nuo0o390v0m1n940o690utk0nva0o0e1oc90nup19et0o1d1mjc0uv60tet0nrq0utk1omp0nsj0ntg0nuu0nlr0ned0o3m0o2a0o711mia1h39083e0o7e0nvk0n2h1n940o0e0ocb0nhl0nhl0oap0ntv0ob90nuo0njf0o380nqc0o9h03mr0nvj0o3m0utk0nvj0nrq0o000nov1l4l0o8q1ocu1n940o7c1lhb0o3q1fpe0o0r0o0h1mtn0ntg0utk1o2o1mjc0n700o4i0o1t0o1s0nsf0nk50oan0no91n940o750o370tch0o1t0o0r0nuo0utk0o140scc0o8r0me00o8s0o140nva0o6h0o0g0o380nsi0ocb0mff0utk0mci1oc91mia1mia0nm90nuo0ntf0oa00o270oda0nvo1n940rpu0nva1ocb1n940o7j0mdc0uun0o7i0ntg1obc1nki0o380nue1omp1mtn0o8r1n940o010nm90o1r0o5e0o650o8r0o0q0nu40o7i0uq00mg30mg30utk1n940o2c0utk0o4f0o420o420o370nnp1n941fpe0ocp0nr10npb1mtn0nq30o750nm90o0g1mjc1obc0oco0l360o4i0nua0utk0njk0o7j0ob90utk0nvc0o380ntt0o8q0ntf0obv0utk0o0d0nq30nq30nq30ntg0nuo0o5f0o521mia1omp0o0f02tp0o8s0o2t1obc0nm10nsm1nap0nd71n940nu40o290ugc0o0s1nmd0nqf0o7i0ul80utk1n940v3g1mia0o1e0nhl0nhl0nhl0o2c1nki0ob80o650n400utk0nq41o0u1n940nuv0o9h04in0oce0o2c0o391omp0o3p0utk0o4f0o6g1obc0ntg0sdl0ntg0o5e0nss1nap0o5202fs0s0a0o0h0o200qtt0o030nrd0oba0nse0ub90o020oan0o1t0nvn0nuu0o420o110o0q0uft0o9a0nnv0nnv0o7l1q530nst0ned02s80utk1obc0oca1nvv0nmu0o011n940mfc1lhb0o841mjc0o0h0u820utk0ob80ntb1mjc1mtn0ntf0o3p0o3p0o4f0tch0o420mci0nt10nvn0obv0o0q0o0d0utk0o531n941nm10nq61n941lhb0mci0uec0mr00o3p0nov0nup19et0nq60o500o120nvc0njf1n940o140u0d0ocv0o530nt70nvc0o290o0g0utk0o420o660gbf1mia0o180o7k0rv31nvv0o1d0nvj0nrq0p4k0o000uc80o8s02sj0vqp19et0o7i0o4f1ner0gim0o9h0o1202mc0utk0uvr0mci0utk0uns1nki0mfc0o211n941mia0nf91n941nvv0ntg0utk0nth0nvv0ocv0rk40o420nvk0o0q1mjc1ocp0o9g0ntt1n940o750o180o0g0oba0o5e12641n941o0u0nsk0q3h0nun0nuo0nvj1n940nsj0o710nnc0nm10o820oa00nss0o370ntf0ntt0o010o0r1l4l0o031mju0o1t0o7i1mia0o0d0r690o8p0o6g0oc90o650o3i1ocb0o280nhl0o1s0nr01obc0nu90o0g0nss0nss0nss0nvj0oba1ocu0utk0utk0o9o0ntg1mjc0nst0o1d0o380o8s11210o2u0nrq0o1c0o4f0o290o110mdc0mdc0o3i0o4i1pp10o710ntg1omp0o0q0o7j0o0f0o7j0mff0o9g0o1s0ocq04in0nth0nnc0nvk19et0nvt0o030nog0obb0n6h0od70oa10o7q0nsj1ocu1mia0nr10o3o02u40ff70o5e0ned0utk0utk0ntg0o280no00o0r0o1d0ned0o4i0o0q1o1e1oc90nno1n7v0vpa0nqu0nue0utk0nd70o5e1obc0nrq1obc0uob1mjc0nvk0o391mia1mia02sl0o4i0nno0nrv0ocp0o4i03tg1nki0s0a0ptd0o4f0qtt0o9v0o7k0n700o0q1l4l0nip0o9b0ugc0o8r0o7i0o290o7j0o7j1ocu0nth0nvv0nov0uns1n940nmh0ob30o0q0oan1n941nki1nvv0o3o0o1s0o1c0o0r0o0r0see0rd10oca0uft1osf1n9419et0o9h0ntb1nki0utk0nst0o4i1mia0o4f0o7e03mq06kt0o0r1n940o140o710utk0oc00ntb1mia0o3h1h390utk0nin1mhd1mhd0nub0nr00rrc1pp10oa002t80oa00odd0mfe0o650o7e0m9v0mh51o1e1h730o6h0no90o3q0o7e1nvv0mfe0obv0o3q0o0h0o520nst0mci0m4q1n940ntq1obc0o710o9h0o8s0utk0n700s2e0u3k1nvv16fk0o380mci0o9n0o3n0o8s0mff0nnc0oc30o420oco0nm90ob80o520rr20nr10od70ntg0o2c0ntb0o150mg30nnc0o9g0o0i0oc90nt10o1b0me00o7j0nsk0o750utk0ntg1nki0oco0nm10nsi0nm711t10oca0utk0o7i01oq0o110nss0nss0utk0o8s1mjc1n940nsm0o8s1oc90npg0o8p02t40o6g0o0q0uld0rv30uu30o0r0m500o010nhl1mjc0utk0nlc0oa00o7i0o1t0obb0o140o9g025c0o5k1obc1nvv1noe0uue0o9n0n700nnv0m8l1nki0nnc1muk1nvv0ouu0nc60o7j0o9v0o000nu40nsf0nsl1obc1nki0o9c0o010nuv1mia0nq20o380me00o0q0o5e0nbk0ob90obu0o0f0nir0jlm0nhl0nhl048e1nvv1nki1nap0o111n941l4l1n940o4f0nsj0utk1mjc0nlr1nvv19et0o0q01of0r820utk046g1h731nki0o3h0ntg0o370o1t0utk0o420ntf0nnv0ntb0me01mia0nu90utk02c61n940uvs12520nrq0o180mmk0n700n4s0o500nuo0o2b03dc0rmr0utk0nrv0nvd0utk0nm80ned1nvv0ob80n700o520ob91mtn0p9i0o7e1mia0q9k0nvk0l7h0n2g0o650nup0nuu1n940o6g1ofi0o4f1ncm0npg0o011n940o530uob0utk0obb0uma0o7i0o1s0o1s0o3o0o8s1nap0nm90nvv1obc0uu40o2802sj0n701mjc1mi60o650nlc0n700o370nin1n940o0g0nvc0o531n940nhl0nvl0nno0nub1nki0mfc0utk0o8s0o030o5p0o5p0moh0ntq0ned0r7n0njf0ntb0ntb02te0o1t1nvv0o9g0o821omp0o3m0uc90o0f0nvt0utk0nrd1nvv1nvv0o9h0o751nvv1nvv0o1c0o1c1mia1obc0o9b0n7011dk0nun16uf1mia0ndv1obc0oa00oam120m02fs0o120o1d0nno0o2t0o8s0nrg0nhl0nss0npg0ned1omp0ocb0o0g0o9g1q4e0o8s1n940nn60nuu0mff0nnv0nof0o3o0uc81o2o0o7i0nm20nm21muk0o1s0o640obu0n2r0n460uq00utk0utk0o380oco1obc0o390o141nvv0nog0nuc0nuu0o140o0i0ocn0nqf0nrg0ntu0o380nhl0o7o0o5o1o1e0nnv0hfi0utk1nki0o530nvn0ntf0utk0nnv16fk0uls0ntg0o840uc90ntu0o1b0utk1nvv0o2b18hs04in0o021nm10nub0o9o0o840utk0um70nvl1nki0o9o0mfc0n4s0me01nki0n88051o0och0nnv0o7c0m9v0tch0nvo0o291mtn02ll0n7p1nki0o110o0f0o7e123o0o280ocb0utk0ur00ocv0nin0nua0o0q0nqq0nin0utk1oc903db0tch0fs50nua1n940o4i0n700o0i1mia0o9o0nhl0n4s0utk0o9n0obh0o010nth0o3h0n700oan06hh1iko0utk0o710ntu0nqc0oba1nki0od912e10utk0ocb1o1e0ocn0o4f0o1b0nsj112203db0nlc0o2a1iko0nsj0nhl0gic0sha1mia0np30m9v0nov0uu416fk0npb0n700o641nap1mjc0o3q0nu90o010o9h0o1t0nuv0ntp0utk0o0202c60o970utk0nuc0ned0mg30nuc0npg0nvk0o9n1obc1mia0o0i0oc30oam1h390obv0o110nof0o0f0uq11mia0nsi0o9h0o7j0nuu0o420nmu0o1e0o0h0nog1mia0nuu0o380nbk0nss0o2c0ocp0o8r0o3h0no00o420o9g1nki0utk0nuu1n9411220rf30o0i1noe0ocv0o4f1nki0o8s0utk0ocv0n700o4i0nog18gv0fs50nr10m4q1mtn02ls0nf91n940noo1mia0npb0nu40o0d0ntg0o4i1mtn0moh0nbk0ntu1obc0nua0o7i0nuo0o500ntg0nvc0utk0nfu1obc0o5g0o5g153h1obc0o2b0o650o711q530od706kt1n940o111noe0ocq0nvc0o390nsm0nvc0o730o7b11b41mia0o7e0nm80nuo0ulb0mss1n940o530n700nvj0o370nqq0o8s0o7b0ur00no11mtn0oca0o0h1kp80o390ntg0o8s0utk0o7e1n941obc02u40no20ntf0o010o8r0nuo0nvt0utk0utk0nvl0n401mia1n940o4i0o650o0g0ns60o730nt70o281n940o0r0oca0o7i0urg1l4l1l4l0o380nup0ob90utk0utk1n941pp10nvn0o3o0o8r046v0me00o370oaj0o730o290nhl0nvn0o010oaj0o380o7q0o3p0ntu1n941obc0nov0o0f0o0f0o3h0o9g1mia0o281nvv0uu61mjc0mci0o7e1noe0nu91o0u1mtn0o3h1obc0nok16o50rfc0nlr0ntf1oc91obc0nrq0o8r1n940p9i0o9a0kbv0o3i0rfc1q4e19et0ock0nse0o0q0o370ocv0o0j0o831obc0obh1n940utk0nvt0qhe0nu40oan0utk1obc0o1t0on60ocq0mfe0nuv0rhs0rpu0o010oa01obc0o8q0rp211c81mjc1oc90njf1mtn1obc0oan0oan0o1t0nt71omp0o2t0o5002641mi60o2b0nsk1n940o381mjc0nsj0o9g0oba0nrq1omp13if0fpo1mjc1mjc0o290pq80rcq0o031mia0nu41oci0nub0o0d0obg0o0g0o7e0ocp19et0o7g0ntb1obc1mtn1nvv0o0r1n9403jv0o3n0o0i0o8s0o6h0o3q0q370o8s1n94141q0mci0o4j1q530o8s0o7q1nvv16b01n941n941n940nuu0nf90nvn0o7o0ntp0uun0nrq19et0utk0o1c0nu90o380o0f1n940ocb0nvl0utk0o010nu91o0u0udc0ned0ob90o010o7c0o7c0nqr0nqs0nnc0nsf0nq20o7i0utk0o0q0utk0utk0ntf0eqa0oco0p9i0o2a0o3o0ntt0pa10nt10n700o0q0o421obc0o1b0utk11vc0nd70v3l1oci0nn01n9402t50utk0oco0o2c0o1s0nrq1n940nnp0utk1g1l1obc11ip1q531f2k1ebp1j051en61k2d1ebp\",\n \"name\": \"Abbadia Sopra Adda|Abbadia Alpina|Abbazia|Abbiateguazzone|Abetone|Acereto|Acquacanina|Acqualunga|Acquarica Del Capo|Acquate|Affori|Agaro|Agnellengo|Agnona|Agrano|Agrone|Aiba|Aidussina|Aiello In Calabria|Aizurro|Alano Di Piave|Albanova|Albaredo Arnaboldi|Albaretto Valle Di Macra|Albate|Albegno|Alber Di Sesana|Albes|Albese|Albogasio|Albogno|Albona|Alice Superiore|Alliz|Alluvioni Cambiò|Alma|Almazzago|Alone|Alzano Maggiore|Alzano Sopra|Alzate Con Linduno|Amblar|Andogno|Andonno|Andorno Cacciorna|Anfurro|Anicova Corada|Anterselva|Antignana|Antronapiana|Anzino|Apparizione|Apriano|Apuania|Ara|Aranco|Arbizzo|Arcellasco|Arcumeggia|Ardena|Bressana|Arienzo San Felice|Arischia|Arixi|Arizzano Inferiore|Arizzano Superiore|Armio|Armo|Arnago|Bondo Breguzzo|Arolo|Arsia|Artò|Arzene|Arzeno D'oneglia|Asnago|Atella Di Napoli|Auditore|Auremo Di Sopra|Aurisina|Auzate|Auzza|Avenone|Avesa|Avuglione E Vernone|Bagaggera|Baggio|Bagnaja|Bagnasco D'asti|Porretta Terme|Casciana Terme|Bagno|Baiedo|Baio Dora|Bairo Torre|Ballabio Inferiore|Ballabio Superiore|Ballarate|Balsamo|Banco|Barbana D'istria|Barbarano Vicentino|Barberino Val D'elsa|Barchi|Barco|Barcone|Bardassano|Bardello|Bardino Nuovo|Bardino Vecchio|Baresi|Bargano|Barra|Barsizza|Bartesate|Barza|Barzaniga|Barzola|Baselga Di Vezzano|Baselica Bologna|Bastida De' Dossi|Battaglia Della Bainsizza|Bauso|Bavari|Bazzano|Beaulard|Bellagio|Bellizzi Irpino|Bellombra|Belluno Veronese|Bel Prato|Berdo San Giovanni|Bergogna|Bernate Rosales|Berra|Bersezio|Bersone|Beseno|Bersezio Del Quarnaro|Bestagno|Beura|Bevilacqua-boschi|Bezzecca|Biacesa|Biegno|Bieno|Biestro|Bigarello|Biglia|Bigliana|Biglio|Binanuova|Bindo|Bisio|Bisterza|Bizzozero|Bleggio|Bleggio Inferiore|Boara Polesine|Bobbiate|Boccolo De' Tassi|Bodio|Bogliasco Pieve|Bogliuno|Bognanco Dentro|Bognanco Fuori|Bogno|Bolbeno|Bolentina|Boleto|Bollone|Bolzaneto|Bondione|Bondo|Bondo Petello|Bonzo|Bordogna|Borghetto San Nicolò|Borghetto|Borgio|Borgoforte|Borgofranco Sul Po|Borgonato|Borgo Panigale|Borgo Sant'agata|Borgounito|Boriano|Bornate|Bornato|Borsano|Borsea|Borzago|Borzoli|Bosco Valtravaglia|Boscomare|Bosentino|Bottarone|Botticino Mattina|Botticino Sera|Bottrighe|Bousson|Bovile|Bozzana|Branduzzo|Brazzano|Breccia|Bregano|Breglia|Breguzzo|Breia|Brembate Di Sotto|Brembilla|Brenno Useria|Sombreno|Brentino|Breonio|Brestovizza In Valle|Bretto|Brez|Brianzola|Briga Marittima|Brignano Del Curone|Brione|Brioni Maggiore|Brisino|Brissago|Brovello|Brovida|Brozzi|Brozzo|Bruntino|Brusaschetto|Buccinigo|Bucuie|Budagne|Buggiolo|Bugiallo|Bugnate|Buie D'istria|Bulgorello|Burano|Burgusio|Busana|Buso Sarzano|Bussana|Bussolino Gassinese|Buttogno|Campoverde|Caccia|Ca' D'andrea|Caddo|Cadegliano|Cadero Con Graglio|Ca' De' Stefani|Ca' De' Tedioli|Ca' Di David|Cadignano|Cadine|Cadrezzate|Ca' Emo|Cagliano|Cagno|Cagnò|Cajello|Cajonvico|Calavino|Cal Di Canale|Calepio|Calino|Calogna|Calolzio|Calvaruso|Camagna Di Torino|Camairago|Camarda|Camasco|Camignone|Caminata|Caminata In Tures|Camnago Volta|Camnago Faloppia|Camo|Campagnano Vedasca|Campello Monti|Campiglia Cervo|Campo Canavese|Campo|Campochiesa|Campolongo|Campolongo Sul Brenta|Camporosso In Valcanale|Campospinoso Albaredo|Campovico|Canale D'isonzo|Candeasco|Candelara|Canepa|Canevino|Canezza|Canfanaro|Canneto Di Bari|Cannitello|Canova Del Morbasco|Cansero|Cantonale|Capiago|Capiate|Capitello|Capodistria|Capolago|Caporetto|Capriate D'adda|Capriva Nel Carso|Capronno|Caramagna Ligure|Carano|Carate Lario|Carbonara Di Bari|Carbonara Di Po|Carcano|Carceri|Carciato|Carcina|Cardana|Cardezza|Carella Con Mariaga|Careno|Carezzano Superiore|Cargiago|Caridà|Carlazzo Valsolda|Camigna|Carobbio|Caronno Corbellaro|Carpaneta Con Dosimo|Carpasio|Carpignago|Carpugnino|Carrara San Giorgio|Carrara Santo Stefano|Cartari E Calderara|Carugo Arosio|Carzago Della Riviera|Casalba|Casale Cremasco|Casaleggio Castellazzo|Casalorzo Geroldi|Casalpoglio|Casanova Lanza|Casasco D'intelvi|Casez|Casirago|Casletto|Caslino Al Piano|Casnate|Casole Bruzio|Casotto|Cassago|Cassano Albese|Cassano Spinola|Cassina Mariaga|Cassine Gandine|Castagnè|Castelbello|Castel Cellesi|Castel Colonna|Casteldarne|Castel Del Monte Udinese|Castel De' Ratti|Castel Dobra|Castelfondo|Castelfranco Di Sopra|Castel Iablanizza|Castel Lambro|Castellammare Adriatico|Castellano|Castellar|Castellaro De' Giorgi|Castellavazzo|Castellengo|Castelletto Monforte|Castelletto Po|Castelletto Villa|Castello Valsolda|Castello Sopra Lecco|Castello|Castello Di Serravalle|Castellone Al Volturno|Castellonorato|Castelluccio|Castelnuovo D'istria|Castelponzone|Castelruggiero|Castel San Pietro Monferrato|Castelvecchio Di Santa Maria Maggiore|Castelvero D'asti|Castiglione D'asti|Castiglione D'intelvi|Castiglione D'ossola|Castione Veronese|Castrezzone|Cataforio|Catona|Cauria|Cavacurta|Cavaglio San Donnino|Cavaglio-spoccia|Cavallasca|Cavandone|Cave Auremiane|Caversaccio|Covelano|Cavona|Ceconico|Ceglie Del Campo|Ceglie|Celentino|Cellina|Cella Di Bobbio|Celledizzo|Cellio|Cembra|Cenate|Cenate D'argon|Cenesi|Cengles|Cenova|Centa San Nicolò|Centrisola|Cepino|Cerchiate|Cernizza Goriziana|Cernusco Montevecchia|Cerreto Castello|Cerro Lago Maggiore|Cervarolo|Lentiai|Cesello Brianza|Cesi|Cesnola|Ceto-cerveno|Ceves|Challant Saint Anselme Et Challant Saint Victor|Champlas-du-col|Cherso|Chiabrano|Chiaiano Ed Uniti|Chianchetelle|Chiapovano|Chiaravalle Milanese|Chiavazza|Chienis|Chignolo Verbano|Chirignago|Chizzola|Ciago|Ciardes|Cignano|Ciliverghe|Cima|Cimamulera|Cimbergo-paspardo|Cimego|Cinisello|Circhina|Cireggio|Ciseriis|Cismon Del Grappa|Issengo|Cittanova D'istria|Civello|Civenna|Cividate Malegno|Civiglio|Cizzago|Clana|Cloz|Clusane Sul Lago|Clusio|Cobbia|Cocquio|Cognola|Cogolo|Coimo|Coiromonte|Colbordolo|Colcavagno|Colciago|Coldrano|Col Di Rodi|Colfosco|Collagna|Segnacco|Colle In Casies|Collescipoli|Collestatte|Colli In Pusteria|Cologna|Cologna-gavazzo|Cologna In Giudicarie|Colognola Del Piano|Colombaro|Col San Giovanni|Colsano|Comairano|Comano|Comasine|Comeno|Comero|Comezzano|Comnago|Concadirame|Concei|Concenedo|Conco|Condino|Conio|Consiglio Di Rumo|Consonno|Contarina|Contra|Corciago|Coredo|Corenno Plinio|Corgnale|Corigliano Calabro|Cornale|Cornigliano Ligure|Corona|Curon|Correzzo|Cortabbio|Corte|Corti In Pusteria|Cortenedolo|Corteolona|Corteranzo|Corticelle Pieve|Cortile San Martino|Corvara In Passiria|Corzes|Cosbana Del Collio|Cossana|Due Cossani|Cossila|Cossirano|Costa D'oneglia|Costasavina|Covelo|Crana Gattugno|Cravegna|Creda|Credera|Cremezzano|Cremnago|Crenna|Crenovizza|Crescenzago|Crespano Del Grappa|Crespellano|Crespina|Cressogno|Creto|Crevenna|Crevola Sesia|Croce|Croce Di Mosso|Crocetta|Crosa|Crosara|Crusinallo|Cuccaro Monferrato|Cunevo|Cuquello|Quarazze|Curdomo|Curnasco|Cursolo|Cursolo-orasso|Cutigliano|Cuzzago|Dagnente|Daiano|Daone|Dardine|Darè|Darzo|Dasio|Degagna|Deggiano|Dercolo|Dermulo|Descla|Desenzano Al Serio|Desértes|Dezzo Di Scalve|Diano Borello|Diano Calderina|Dignano D'istria|Dimaro|Dissimo|Divaccia Grotte Del Timavo|Doccio|Dole|Dol Grande|Dol-ottelza|Domusnovas Canales|Don|Donada|Donelasco|Donigala Fenughedu|Donigala Siurgus|Dorsino|Dozio|Draguccio|Drano|Dresenza|Drezzo|Drizzona|Drusacco|Duemiglia|Duino|Dusino|Duttogliano|Elena|Elle|Ellera|Elsane|Endenna|Endine|Enguiso|Eores|Erba Incino|Erbanno|Erpelle-cosina|Ersel In Monte|Escovedu|Esino Inferiore|Esino Superiore|Esio|Esmate|Fabiasco|Fabbrica Durini|Fabbriche Di Vallico|Faedo|Faetto|Fagnano Sul Naviglio|Falesina|Fallascoso|Falmenta|Famie|Farfengo|Farra D'alpago|Favaro Veneto|Faver|Faverzano|Favogna Di Sotto|Favria-oglianico|Feletto Umberto|Felonica|Fenile|Fenils|Fertilia|Fianona|Fiera Di Primiero|Mirabello Comasco|Figline Valdarno|Figu|Finalborgo|Finale Marina|Finale Pia|Finero|Fiordimonte|Fiorenzuola Di Focara|Fisto|Fiumana|Fiume|Fiumenero|Fiumicello|Flavon|Flecchia|Fleres|Foce|Foiana|Folsogno|Fomarco|Fondo|Fondra|Fontana Del Conte|Foresto Sesia|Foresto Di Susa|Formignana|Fornero|Forni Di Val D'astico|Forno|Forno|Forno Alpi Graje|Forno Di Zoldo|Forotondo|Fossa Guazzona|Fossarmato|Fosseno|Frascata|Frassinere|Fraveggio|Frerola|Frignano Maggiore|Frontignano|Frontone-serra|Fuipiano Al Brembo|Fundres|Fusine In Valromana|Gabbioneta|Gabria|Gabrovizza|Gadesco|Gaggino|Gaiola Moiola|Galdo|Gallico|Gallina|Galluzzo|Gambugliano|Garabiolo|Gardolo Al Piano|Garegnano|Gargaro|Gattico|Gauna|Gavazzana|Gazzada|Gazzelli|Genzone|Germanedo|Germasino|Gerolanuova|Gerosa|Ghevio|Ionia|Gimino|Ginestreto|Goiaci|Gironico|Giuncugnano|Godovici|Goglione Sopra|Goglione Sotto|Goido|Golese|Goriano|Gorlaprecotto|Gornate-superiore|Gorrino|Gorzone|Gottro|Gozza|Gracova Serravalle|Graglia Piana|Granaglione|Grancona|Grandola|Grauno|Gravedona|Greco Milanese|Gressoney|Gries|Grignano|Grignano Di Polesine|Grimaldo|Grisignana|Grona|Groppo|Grotte Santo Stefano|Grumello De' Zanchi|Grumello Del Piano|Grumes|Grumo|Guardia Piemontese Terme|Gudon|Guidomandri|Gurone|Iatrinoli|Iavrè|Idresca D'isonzo|Idria|Idria Di Sotto|Imberido|Incino|Incisa In Val D'arno|Indovero|Intimiano|Intra|Introzzo|Inverso Porte|Invorio Superiore|Inzino|Ioannis|Ipplis|Irgoli Di Galtelli|Ischia|Isola Balba|Isola Comacina|Isola D'istria|Isola San Giulio|Isolella|Ivano-fracena|Jerago Con Besnate Ed Orago|Lacinigo|Laglesie San Leopoldo|San Giorgio Di Lago|Lagosta|Laino Bruzio|Lambrate|Lanischie|Lanza|Lanzo D'intelvi|Laorca|Lappago|Lardaro|Lari|Lase|Lasino|Laterina|Laudes|Laurana|Laveno|Lavina|Lazfons|Villabella|Ledine|Legos|Lemna|Lenno|Osmate|Lenzima|Lenzumo|Lessona|Levrange|Lezza|Libussina|Licignano Di Napoli|Licusati|Lieto Colle|Ligonchio|Ligosullo|Limonta|Linate Al Lambro|Lingueglietta|Linzanico|Lisanza|Lisignago|Lissago|Livemmo|Lizzana|Lizzola|Locadi|Locarno|Locate Bergamasco|Locavizza Di Aidussina|Locavizza Di Canale|Locca|Lodrone|Lomaniga|Lomaso|Lon|Longarone|Longiarù|Lorentino|Lorenzana|Lose|Loseto|Lottulo|Loveno Grumello|Loveno Sopra Menaggio|Lover|Lozzo|Lu|Lucernate|Lucinico|Lucino|Ludriano|Lugnacco|Vazia|Luico|Lumezzane Pieve|Lumezzane San Sebastiano|Lumezzane Sant'apollonio|Lundo|Lusciano E Ducenta|Lusiana|Lussingrande|Lussinpiccolo|Lutago|Luzzogno|Maccagno|Maccagno Inferiore|Maccio|Maderno|Madrano|Madruzzo|Maggianico|Magno Sopra Inzino|Magognino|Magras|Magrè|Magrè Vicentino|Maia Alta|Maia Bassa|Malborghetto|Malchina|Malgesso|Malgolo|Mallas|Malosco|Malpotremo|Malvino|Maniglia|Mantana|Manzano|Marano|Maranola|Maranza|Marassi|Marcellise|Marco|Marcorengo|Maresego|Mareta|Margone|Mariano Al Brembo|Marmorito|Maro Castello|Martina Olba|Masciago Milanese|Masi Di Vigo|Masnago|Mason Vicentino|Massa Fiscaglia|Massama|Massa Superiore|Masse Di San Martino|Masse Di Siena|Mastellina|Mattarello|Matteria|Mattuglie|Mazia|Mazzo Milanese|Mazzoleni E Falghera|Mazzunno|Meano|Meano|Mechel|Medana|Megliadino San Fidenzio|Mel|Melezet|Menarola|Mendatica Montegrosso|Mentoulles|Mercurago|Merna|Mestre|Mestriago|Meugliano|Mezzana Superiore|Mezzani|Mezzano Imer|Mezzegra|Mezzolago|Migiandone|Migliarino|Migliaro|Mignette|Millan-sarnes|Millaures|Milzanello|Minoprio|Miola|Mione|Mirabello|Mirabello Ed Uniti Di Pavia|Mizzole|Moano|Mocchie|Moerna|Moiana|Molassana|Molina|Molina Di Ledro|Molini Di Colognola|Molini Di Tures|Molino Alzano|Mollaro|Mollières|Molo Di Borbera|Montegrazie|Moltedo Superiore|Molvena|Mombello Lago Maggiore|Monasterolo Torinese|Monate|