# Copyright (C) 2012 The Libphonenumber Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Originally sourced from:
# http://www.comreg.ie/gtna/index.html
# "Charleville" and "Newcastle West" are chosen over "Rathluirc" and
# "Newcastlewest" as being the names in common everyday usage, for example the
# Wikipedia entries for both towns use the former names throughout.
# http://en.wikipedia.org/wiki/Charleville,_County_Cork,
# http://en.wikipedia.org/wiki/Newcastle_West

3531|Dublin
35321|Cork/Kinsale/Coachford
35322|Mallow
35323|Bandon
35324|Youghal
35325|Fermoy
35326|Macroom
35327|Bantry
35328|Skibbereen
35329|Kanturk
353402|Arklow
353404|Wicklow
35341|Drogheda/Ardee
35342|Dundalk/Carrickmacross/Castleblaney
35343|Longford/Granard
35344|Mullingar/Castlepollard/Tyrrellspass
35345|Naas/Kildare/Curragh
35346|Navan/Kells/Trim/Edenderry/Enfield
35347|Monaghan/Clones
35349|Cavan/Cootehill/Oldcastle/Belturbet
353504|Thurles
353505|Roscrea
35351|Waterford/Carrick-on-Suir/New Ross/Kilmacthomas
35352|Clonmel/Cahir/Killenaule
35353|Wexford/Enniscorthy/Ferns/Gorey
35356|Kilkenny/Castlecomer/Freshford
35357|Portlaoise/Abbeyleix/Tullamore/Birr
35358|Dungarvan
35359|Carlow/Muine Bheag/Athy/Baltinglass
35361|Limerick/Scariff
35362|Tipperary/Cashel
35363|Charleville
35364|Killarney/Rathmore
35365|Ennis/Ennistymon/Kilrush
35366|Tralee/Dingle/Killorglin/Cahersiveen
35367|Nenagh
35368|Listowel
35369|Newcastle West
35371|Sligo/Manorhamilton/Carrick-on-Shannon
35374|Letterkenny/Donegal/Dungloe/Buncrana
35390|Athlone/Ballinasloe/Portumna/Roscommon
35391|Galway/Gort/Loughrea
35393|Tuam
35394|Castlebar/Claremorris/Castlerea/Ballinrobe
35395|Clifden
35396|Ballina
35397|Belmullet
35398|Westport
35399|Kilronan
