diff --git a/app.go b/app.go index 44f47b5..eb21365 100644 --- a/app.go +++ b/app.go @@ -54,6 +54,7 @@ import ( "hamlog/internal/settings" "hamlog/internal/solar" "hamlog/internal/steppir" + "hamlog/internal/uls" "hamlog/internal/ultrabeam" "hamlog/internal/winkeyer" @@ -437,6 +438,7 @@ type App struct { clusterEventCh chan clusterEvent clusterDropped int64 // spots/lines dropped when the queue was full (atomic) pota *pota.Cache + uls *uls.Store // US callsign→county/grid (offline FCC ULS), lazily opened awardRefs *awardref.Repo qslTemplates *qslcard.Repo operating *operating.Repo @@ -761,6 +763,14 @@ func (a *App) startup(ctx context.Context) { } } a.settings.SetProfile(active.ID) + // US county resolver — its own local SQLite (data/uls.db), populated on demand + // by DownloadULSCounties. Opening (creating an empty store) is cheap and never + // fatal: county resolution simply stays inert until the operator downloads it. + if store, err := uls.Open(filepath.Join(a.dataDir, "uls.db")); err != nil { + applog.Printf("uls: open failed (county resolution disabled): %v", err) + } else { + a.uls = store + } a.awardRefs = awardref.NewRepo(conn) a.qslTemplates = qslcard.NewRepo(conn) a.migrateAwardDefs() // upgrade legacy award definitions (enable + new fields) @@ -1815,6 +1825,7 @@ func (a *App) AddQSO(q qso.QSO) (id int64, err error) { }() a.applyStationDefaults(&q, true) a.applyDXCCNumber(&q) + a.applyULSCounty(&q) // fill blank US county/grid from the offline ULS store a.applyClublogException(&q, false) // override entity for date-ranged DXpeditions a.refineDistrictZones(&q) // W6 → CQ3/ITU6 for zone-split countries a.applyQSLDefaults(&q) @@ -4244,7 +4255,7 @@ func freeAwardCode(code string, taken map[string]int) string { // builtinRefsVersion is bumped whenever the built-in reference data changes // (e.g. the West Malaysia 155→299 fix) so existing installs re-seed the // derived lists. Bump this after correcting BuiltinRefs / the DXCC name table. -const builtinRefsVersion = "2" +const builtinRefsVersion = "3" // seedBuiltinReferences populates the reference lists of built-in awards. // - First run (no version stored), or already up to date: seed only awards that @@ -7793,6 +7804,155 @@ func (a *App) GetSlotStats() qso.SlotStats { return st } +// --- US Counties (ULS) ----------------------------------------------------- + +// applyULSCounty fills a US QSO's blank county (and blank grid) from the offline +// ULS store. Non-US QSOs, an un-downloaded store, or already-filled fields make +// it a no-op — a value the operator or QRZ supplied is never overwritten, since +// the ZIP-derived county is only ~98% and the logged one is usually better. The +// award normalises whatever shape cnty holds, so stamping "ST,County" is safe. +func (a *App) applyULSCounty(q *qso.QSO) { + if a.uls == nil || q.DXCC == nil { + return + } + switch *q.DXCC { + case 291, 110, 6: // United States, Hawaii, Alaska + default: + return + } + haveCounty := strings.TrimSpace(q.County) != "" + haveGrid := strings.TrimSpace(q.Grid) != "" + if haveCounty && haveGrid { + return + } + loc, ok := a.uls.Resolve(q.Callsign) + if !ok { + return + } + if !haveCounty { + q.County = loc.CNTY() + if strings.TrimSpace(q.State) == "" { + q.State = loc.State + } + } + if !haveGrid && loc.Grid != "" { + q.Grid = loc.Grid + } +} + +// ULSStatusResult reports whether the county database is loaded, and how fresh. +type ULSStatusResult struct { + Count int `json:"count"` + UpdatedAt string `json:"updated_at"` // RFC3339, empty if never downloaded +} + +// ULSStatus returns the state of the offline US county database. +func (a *App) ULSStatus() ULSStatusResult { + if a.uls == nil { + return ULSStatusResult{} + } + var updated string + if t := a.uls.UpdatedAt(); !t.IsZero() { + updated = t.Format(time.RFC3339) + } + return ULSStatusResult{Count: a.uls.Count(), UpdatedAt: updated} +} + +// DownloadULSCounties downloads and (re)builds the offline US county database in +// the background, emitting "uls:progress" ({stage,pct}) and "uls:done" ({ok, +// error,count}) so the Settings panel can show progress and reuse one flow. +func (a *App) DownloadULSCounties() error { + if a.uls == nil { + return fmt.Errorf("county database unavailable") + } + go func() { + defer func() { + if r := recover(); r != nil { + applog.Printf("PANIC in DownloadULSCounties: %v\n%s", r, debug.Stack()) + wruntime.EventsEmit(a.ctx, "uls:done", map[string]any{"ok": false, "error": fmt.Sprintf("%v", r)}) + } + }() + err := a.uls.Import(a.ctx, a.dataDir, func(stage string, pct int) { + wruntime.EventsEmit(a.ctx, "uls:progress", map[string]any{"stage": stage, "pct": pct}) + }) + res := map[string]any{"ok": err == nil, "count": a.uls.Count()} + if err != nil { + applog.Printf("uls: import failed: %v", err) + res["error"] = err.Error() + } else { + applog.Printf("uls: import complete — %d callsigns", a.uls.Count()) + } + wruntime.EventsEmit(a.ctx, "uls:done", res) + }() + return nil +} + +// BackfillUSCountiesResult summarises a bulk county/grid backfill over the log. +type BackfillUSCountiesResult struct { + Scanned int `json:"scanned"` // US QSOs examined + County int `json:"county"` // QSOs that gained a county + Grid int `json:"grid"` // QSOs that gained a grid +} + +// BackfillUSCounties resolves county (and grid) for existing US QSOs that lack +// them, using the offline ULS store. It only FILLS blanks — an existing county +// is left as the operator logged it. Returns how many rows were updated. +func (a *App) BackfillUSCounties() (BackfillUSCountiesResult, error) { + var res BackfillUSCountiesResult + if a.uls == nil || a.uls.Count() == 0 { + return res, fmt.Errorf("county database not downloaded") + } + if a.qso == nil { + return res, fmt.Errorf("db not initialized") + } + rows, err := a.qso.List(a.ctx, qso.ListFilter{Limit: 1_000_000}) + if err != nil { + return res, err + } + for i := range rows { + q := &rows[i] + if q.DXCC == nil { + continue + } + switch *q.DXCC { + case 291, 110, 6: + default: + continue + } + res.Scanned++ + needCounty := strings.TrimSpace(q.County) == "" + needGrid := strings.TrimSpace(q.Grid) == "" + if !needCounty && !needGrid { + continue + } + loc, ok := a.uls.Resolve(q.Callsign) + if !ok { + continue + } + changed := false + if needCounty && loc.CNTY() != "" { + q.County = loc.CNTY() + if strings.TrimSpace(q.State) == "" { + q.State = loc.State + } + res.County++ + changed = true + } + if needGrid && loc.Grid != "" { + q.Grid = loc.Grid + res.Grid++ + changed = true + } + if changed { + if err := a.qso.Update(a.ctx, *q); err != nil { + applog.Printf("uls backfill: update qso %d failed: %v", q.ID, err) + } + } + } + a.invalidateAwardStats() // county changes affect the US Counties matrix + return res, nil +} + // DownloadConfirmations pulls confirmed QSOs from a service and updates the // matching local QSOs' received status. LoTW only for now (the canonical // confirmation system); runs in the background emitting the same diff --git a/cmd/cntygen/main.go b/cmd/cntygen/main.go new file mode 100644 index 0000000..9a30ce2 --- /dev/null +++ b/cmd/cntygen/main.go @@ -0,0 +1,81 @@ +package main + +// One-shot generator: reads the FIPS county CSV and emits +// internal/awardref/uscounties_gen.go. Not part of the build. + +import ( + "bufio" + "fmt" + "os" + "sort" + "strings" + + "hamlog/internal/award" +) + +// dxccForState maps the two US "states" that are separate DXCC entities. +func dxccForState(st string) int { + switch st { + case "AK": + return 6 + case "HI": + return 110 + default: + return 291 + } +} + +// territories we exclude — USA-CA is the 50 states (+ DC). +var skipState = map[string]bool{"PR": true, "GU": true, "VI": true, "AS": true, "MP": true, "NA": true} + +func main() { + f, err := os.Open(os.Args[1]) + if err != nil { + panic(err) + } + defer f.Close() + + type row struct{ code, name string; dxcc int } + var rows []row + seen := map[string]bool{} + sc := bufio.NewScanner(f) + sc.Scan() // header + for sc.Scan() { + line := sc.Text() + parts := strings.SplitN(line, ",", 3) + if len(parts) < 3 { + continue + } + name := strings.TrimSpace(parts[1]) + st := strings.TrimSpace(parts[2]) + if skipState[st] || len(st) != 2 || strings.EqualFold(name, "UNITED STATES") { + continue + } + // State header rows have an all-caps state NAME and state code "NA" + // (already skipped). County rows have a 2-letter state code. + code := award.USCountyKey(st, name) + if code == "" || seen[code] { + continue + } + seen[code] = true + rows = append(rows, row{code: code, name: name + ", " + st, dxcc: dxccForState(st)}) + } + sort.Slice(rows, func(i, j int) bool { return rows[i].code < rows[j].code }) + + var b strings.Builder + b.WriteString("// Code generated by cmd/cntygen from FIPS county data. DO NOT EDIT.\n") + b.WriteString("package awardref\n\n") + b.WriteString("// usCounties is the US Counties (USA-CA) reference list: one entry per county\n") + b.WriteString("// in the 50 states, keyed by the canonical \"STATE,COUNTY\" match code that\n") + b.WriteString("// award.usCountyKey produces from a QSO's state + cnty fields.\n") + fmt.Fprintf(&b, "func usCounties() []Ref {\n\treturn []Ref{\n") + for _, r := range rows { + fmt.Fprintf(&b, "\t\tref(%q, %q, %d),\n", r.code, r.name, r.dxcc) + } + b.WriteString("\t}\n}\n") + + if err := os.WriteFile(os.Args[2], []byte(b.String()), 0o644); err != nil { + panic(err) + } + fmt.Printf("wrote %d counties to %s\n", len(rows), os.Args[2]) +} diff --git a/frontend/src/components/SettingsModal.tsx b/frontend/src/components/SettingsModal.tsx index 2e82c39..21f148c 100644 --- a/frontend/src/components/SettingsModal.tsx +++ b/frontend/src/components/SettingsModal.tsx @@ -38,6 +38,7 @@ import { GetPOTAToken, SavePOTAToken, TestLoTWUpload, ListTQSLStationLocations, DownloadLoTWUsers, GetLoTWUsersStatus, + DownloadULSCounties, ULSStatus, BackfillUSCounties, ComputeStationInfo, GetUIPref, SetUIPref, GetFlexState, GetFlexBandAntennas, SaveFlexBandAntennas, @@ -175,6 +176,7 @@ type SectionId = | 'backup' | 'database' | 'autostart' + | 'uscounties' | 'awards' | 'cat' | 'rotator' @@ -223,6 +225,7 @@ function buildTree(flexAvailable: boolean, t: (k: string) => string): TreeNode[] ]}, { kind: 'item', label: t('sec.cluster'), id: 'cluster' }, { kind: 'item', label: t('sec.udp'), id: 'udp' }, + { kind: 'item', label: t('sec.uscounties'), id: 'uscounties' }, { kind: 'item', label: t('sec.database'), id: 'database' }, { kind: 'item', label: t('sec.autostart'), id: 'autostart' }, ], @@ -238,6 +241,7 @@ const SECTION_KEY: Partial> = { station: 'sec.station', profiles: 'sec.profiles', operating: 'sec.operating', confirmations: 'sec.confirmations', 'external-services': 'sec.external', lookup: 'sec.lookup', 'lists-bands': 'sec.bands', 'lists-modes': 'sec.modes', cluster: 'sec.cluster', backup: 'sec.backup', database: 'sec.database', autostart: 'sec.autostart', udp: 'sec.udp', + uscounties: 'sec.uscounties', awards: 'sec.awards', cat: 'sec.cat', rotator: 'sec.rotator', winkeyer: 'sec.winkeyer', antenna: 'sec.antenna', antgenius: 'sec.antgenius', pgxl: 'sec.pgxl', flex: 'sec.flex', audio: 'sec.audio', general: 'sec.general', email: 'sec.email', }; @@ -1010,6 +1014,34 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan catch (e: any) { setLotwTest({ ok: false, msg: String(e?.message ?? e) }); } finally { setLotwUsersBusy(false); } }; + // US Counties (offline FCC ULS) — download progress arrives via events. + const [ulsStatus, setUlsStatus] = useState<{ count: number; updated_at?: string }>({ count: 0 }); + const [ulsBusy, setUlsBusy] = useState(false); + const [ulsProgress, setUlsProgress] = useState<{ stage: string; pct: number } | null>(null); + const [ulsMsg, setUlsMsg] = useState<{ ok: boolean; text: string } | null>(null); + const [backfillBusy, setBackfillBusy] = useState(false); + const [backfillMsg, setBackfillMsg] = useState(null); + useEffect(() => { ULSStatus().then((s) => setUlsStatus(s as any)).catch(() => {}); }, []); + useEffect(() => { + const off1 = EventsOn('uls:progress', (p: any) => setUlsProgress({ stage: p?.stage ?? '', pct: p?.pct ?? 0 })); + const off2 = EventsOn('uls:done', async (r: any) => { + setUlsBusy(false); setUlsProgress(null); + setUlsMsg(r?.ok ? { ok: true, text: t('uscty.done', { n: r?.count ?? 0 }) } : { ok: false, text: r?.error || 'error' }); + try { const s = await ULSStatus(); setUlsStatus(s as any); } catch {} + }); + return () => { off1(); off2(); }; + }, []); + const downloadUls = async () => { + setUlsBusy(true); setUlsMsg(null); setUlsProgress({ stage: '', pct: 0 }); + try { await DownloadULSCounties(); } + catch (e: any) { setUlsBusy(false); setUlsProgress(null); setUlsMsg({ ok: false, text: String(e?.message ?? e) }); } + }; + const runBackfill = async () => { + setBackfillBusy(true); setBackfillMsg(null); + try { const r: any = await BackfillUSCounties(); setBackfillMsg(t('uscty.backfillDone', { c: r?.county ?? 0, g: r?.grid ?? 0, s: r?.scanned ?? 0 })); } + catch (e: any) { setBackfillMsg(String(e?.message ?? e)); } + finally { setBackfillBusy(false); } + }; const [hrdlogTest, setHrdlogTest] = useState<{ ok: boolean; msg: string } | null>(null); const [hrdlogTesting, setHrdlogTesting] = useState(false); const [eqslTest, setEqslTest] = useState<{ ok: boolean; msg: string } | null>(null); @@ -4332,6 +4364,68 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan ); } + function USCountiesPanel() { + const loaded = ulsStatus.count > 0; + return ( +
+
+

{t('uscty.title')}

+

{t('uscty.intro')}

+
+ + {/* Required-download notice */} +
+ {t('uscty.needDownload')} +
+ + {/* Status + download */} +
+
+
+
{t('uscty.dbStatus')}
+
+ {loaded + ? t('uscty.loaded', { n: ulsStatus.count.toLocaleString(), date: ulsStatus.updated_at ? new Date(ulsStatus.updated_at).toLocaleDateString() : '—' }) + : t('uscty.notLoaded')} +
+
+ +
+ + {ulsProgress && ( +
+
+ {ulsProgress.stage}{ulsProgress.pct}% +
+
+
+
+
+ )} + {ulsMsg && ( +
{ulsMsg.text}
+ )} +
+ + {/* Backfill existing QSOs */} +
+
{t('uscty.backfillTitle')}
+

{t('uscty.backfillIntro')}

+
+ + {backfillMsg && {backfillMsg}} +
+
+
+ ); + } + // Map sections to their content + icon (for placeholder). const PANELS: Record JSX.Element> = { general: GeneralPanel, @@ -4348,6 +4442,7 @@ export function SettingsModal({ onClose, onSaved, initialSection, onMainPaneChan udp: UDPIntegrationsPanelWrapper, backup: BackupPanel, database: DatabasePanel, + uscounties: USCountiesPanel, autostart: () => , awards: () => , cat: CATPanel, diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index d335b29..81b6fe8 100644 --- a/frontend/src/lib/i18n.tsx +++ b/frontend/src/lib/i18n.tsx @@ -89,7 +89,21 @@ const en: Dict = { 'sec.confirmations': 'Confirmations', 'sec.external': 'External services', 'sec.general': 'General', 'sec.email': 'E-mail (SMTP)', 'sec.lookup': 'Callsign Lookup', 'sec.bands': 'Bands', 'sec.modes': 'Modes & default RST', 'sec.cluster': 'DX Cluster', - 'sec.udp': 'UDP integrations', 'sec.database': 'Database', 'sec.autostart': 'Autostart', 'sec.backup': 'Database backup', 'station.title': 'Station Control', 'station.rotator': 'Rotator', 'station.rotatorNoRead': 'No heading read', 'station.pattern': 'Pattern', 'station.bi': 'Bi', 'station.retract': 'Retract elements', 'station.moving': 'MOVING', 'station.elements': 'Elements (mm)', 'station.read': 'Read', 'station.readLengths': 'Read current element lengths from the controller', 'station.noLengths': 'Lengths unknown — click Read to fetch them from the controller.', 'station.element': 'Element', 'station.reflector': 'Reflector', 'station.driven': 'Driven', 'station.director': 'Dir', 'station.set': 'Set', 'station.elementsHint': 'Each press lengthens/shortens the element by 2 mm (like the physical console). Verify which element responds on your antenna.', 'station.go': 'Go', 'station.stop': 'Stop', 'station.dragHint': 'Drag a widget by its card to reorder. Pick a column count to lay them out in a grid.', 'station.colsAuto': 'Auto', 'station.addDevice': 'Add device', 'station.editDevice': 'Edit device', 'station.empty': 'No relay boards yet. Add a WebSwitch 1216H or a KMTronic 8-relay board to control your station power and accessories.', 'station.online': 'Online', 'station.offline': 'Offline', 'station.edit': 'Edit', 'station.delete': 'Delete', 'station.relay': 'Relay', 'station.on': 'ON', 'station.off': 'OFF', 'station.type': 'Device type', 'station.name': 'Name', 'station.host': 'Host / IP', 'station.user': 'Username', 'station.pass': 'Password', 'station.optional': 'optional', 'station.labels': 'Relay labels', 'station.cancel': 'Cancel', 'station.save': 'Save', + 'sec.udp': 'UDP integrations', 'sec.database': 'Database', 'sec.autostart': 'Autostart', 'sec.backup': 'Database backup', 'sec.uscounties': 'US Counties', + 'uscty.title': 'US Counties (USA-CA)', + 'uscty.intro': 'Resolve a US callsign to its county and grid offline, from the FCC ULS licence database. This powers the US Counties award and county hunting — including on CW/SSB, where a spot carries only a callsign.', + 'uscty.needDownload': 'County resolution requires downloading the FCC database first (about 150 MB, stored locally). Nothing is resolved until you download it.', + 'uscty.dbStatus': 'County database', + 'uscty.loaded': '{n} callsigns · updated {date}', + 'uscty.notLoaded': 'Not downloaded yet.', + 'uscty.download': 'Download', + 'uscty.update': 'Update', + 'uscty.done': 'County database ready — {n} callsigns.', + 'uscty.backfillTitle': 'Fill existing QSOs', + 'uscty.backfillIntro': 'Resolve county (and grid) for US QSOs already in your log that are missing them. Existing values are kept — only blanks are filled.', + 'uscty.backfillRun': 'Fill missing counties', + 'uscty.backfillDone': '{s} US QSOs scanned · {c} counties, {g} grids filled.', + 'station.title': 'Station Control', 'station.rotator': 'Rotator', 'station.rotatorNoRead': 'No heading read', 'station.pattern': 'Pattern', 'station.bi': 'Bi', 'station.retract': 'Retract elements', 'station.moving': 'MOVING', 'station.elements': 'Elements (mm)', 'station.read': 'Read', 'station.readLengths': 'Read current element lengths from the controller', 'station.noLengths': 'Lengths unknown — click Read to fetch them from the controller.', 'station.element': 'Element', 'station.reflector': 'Reflector', 'station.driven': 'Driven', 'station.director': 'Dir', 'station.set': 'Set', 'station.elementsHint': 'Each press lengthens/shortens the element by 2 mm (like the physical console). Verify which element responds on your antenna.', 'station.go': 'Go', 'station.stop': 'Stop', 'station.dragHint': 'Drag a widget by its card to reorder. Pick a column count to lay them out in a grid.', 'station.colsAuto': 'Auto', 'station.addDevice': 'Add device', 'station.editDevice': 'Edit device', 'station.empty': 'No relay boards yet. Add a WebSwitch 1216H or a KMTronic 8-relay board to control your station power and accessories.', 'station.online': 'Online', 'station.offline': 'Offline', 'station.edit': 'Edit', 'station.delete': 'Delete', 'station.relay': 'Relay', 'station.on': 'ON', 'station.off': 'OFF', 'station.type': 'Device type', 'station.name': 'Name', 'station.host': 'Host / IP', 'station.user': 'Username', 'station.pass': 'Password', 'station.optional': 'optional', 'station.labels': 'Relay labels', 'station.cancel': 'Cancel', 'station.save': 'Save', 'sec.awards': 'Awards', 'sec.cat': 'CAT interface', 'sec.rotator': 'Rotator', 'sec.winkeyer': 'CW Keyer', 'sec.antenna': 'Ultrabeam / Steppir', 'sec.antgenius': 'Antenna Genius', 'sec.pgxl': 'Power Genius', 'sec.flex': 'FlexRadio', 'sec.audio': 'Audio devices', // General panel @@ -353,7 +367,21 @@ const fr: Dict = { 'sec.confirmations': 'Confirmations', 'sec.external': 'Services externes', 'sec.general': 'Général', 'sec.email': 'E-mail (SMTP)', 'sec.lookup': "Recherche d'indicatif", 'sec.bands': 'Bandes', 'sec.modes': 'Modes & RST par défaut', 'sec.cluster': 'DX Cluster', - 'sec.udp': 'Intégrations UDP', 'sec.database': 'Base de données', 'sec.autostart': 'Démarrage auto', 'sec.backup': 'Sauvegarde base', 'station.title': 'Contrôle station', 'station.rotator': 'Rotator', 'station.rotatorNoRead': 'Azimut non lu', 'station.pattern': 'Diagramme', 'station.bi': 'Bi', 'station.retract': 'Rétracter les éléments', 'station.moving': 'EN MOUVEMENT', 'station.elements': 'Éléments (mm)', 'station.read': 'Lire', 'station.readLengths': 'Lire les longueurs actuelles depuis le contrôleur', 'station.noLengths': 'Longueurs inconnues — clique sur Lire pour les récupérer depuis le contrôleur.', 'station.element': 'Élément', 'station.reflector': 'Réflecteur', 'station.driven': 'Radiateur', 'station.director': 'Dir', 'station.set': 'Régler', 'station.elementsHint': "Chaque appui allonge/raccourcit l'élément de 2 mm (comme le pupitre). Vérifie quel élément répond sur ton antenne.", 'station.go': 'Aller', 'station.stop': 'Stop', 'station.dragHint': 'Glisse une carte pour réordonner. Choisis un nombre de colonnes pour la disposition.', 'station.colsAuto': 'Auto', 'station.addDevice': 'Ajouter un appareil', 'station.editDevice': "Modifier l'appareil", 'station.empty': "Aucune carte relais. Ajoute un WebSwitch 1216H ou une carte KMTronic 8 relais pour piloter l'alimentation et les accessoires de ta station.", 'station.online': 'En ligne', 'station.offline': 'Hors ligne', 'station.edit': 'Modifier', 'station.delete': 'Supprimer', 'station.relay': 'Relais', 'station.on': 'ON', 'station.off': 'OFF', 'station.type': "Type d'appareil", 'station.name': 'Nom', 'station.host': 'Hôte / IP', 'station.user': "Nom d'utilisateur", 'station.pass': 'Mot de passe', 'station.optional': 'optionnel', 'station.labels': 'Libellés des relais', 'station.cancel': 'Annuler', 'station.save': 'Enregistrer', + 'sec.udp': 'Intégrations UDP', 'sec.database': 'Base de données', 'sec.autostart': 'Démarrage auto', 'sec.backup': 'Sauvegarde base', 'sec.uscounties': 'Comtés US', + 'uscty.title': 'Comtés US (USA-CA)', + 'uscty.intro': "Résout un indicatif US en comté et locator, hors-ligne, depuis la base de licences FCC ULS. Ça alimente le diplôme Comtés US et la chasse aux comtés — même en CW/SSB, où le spot ne porte qu'un indicatif.", + 'uscty.needDownload': "La résolution des comtés nécessite d'abord de télécharger la base FCC (environ 150 Mo, stockée en local). Rien n'est résolu tant que tu ne l'as pas téléchargée.", + 'uscty.dbStatus': 'Base des comtés', + 'uscty.loaded': '{n} indicatifs · maj {date}', + 'uscty.notLoaded': 'Pas encore téléchargée.', + 'uscty.download': 'Télécharger', + 'uscty.update': 'Mettre à jour', + 'uscty.done': 'Base des comtés prête — {n} indicatifs.', + 'uscty.backfillTitle': 'Compléter les QSO existants', + 'uscty.backfillIntro': "Résout le comté (et le locator) pour les QSO US déjà dans ton log qui n'en ont pas. Les valeurs existantes sont conservées — seuls les vides sont remplis.", + 'uscty.backfillRun': 'Remplir les comtés manquants', + 'uscty.backfillDone': '{s} QSO US analysés · {c} comtés, {g} locators remplis.', + 'station.title': 'Contrôle station', 'station.rotator': 'Rotator', 'station.rotatorNoRead': 'Azimut non lu', 'station.pattern': 'Diagramme', 'station.bi': 'Bi', 'station.retract': 'Rétracter les éléments', 'station.moving': 'EN MOUVEMENT', 'station.elements': 'Éléments (mm)', 'station.read': 'Lire', 'station.readLengths': 'Lire les longueurs actuelles depuis le contrôleur', 'station.noLengths': 'Longueurs inconnues — clique sur Lire pour les récupérer depuis le contrôleur.', 'station.element': 'Élément', 'station.reflector': 'Réflecteur', 'station.driven': 'Radiateur', 'station.director': 'Dir', 'station.set': 'Régler', 'station.elementsHint': "Chaque appui allonge/raccourcit l'élément de 2 mm (comme le pupitre). Vérifie quel élément répond sur ton antenne.", 'station.go': 'Aller', 'station.stop': 'Stop', 'station.dragHint': 'Glisse une carte pour réordonner. Choisis un nombre de colonnes pour la disposition.', 'station.colsAuto': 'Auto', 'station.addDevice': 'Ajouter un appareil', 'station.editDevice': "Modifier l'appareil", 'station.empty': "Aucune carte relais. Ajoute un WebSwitch 1216H ou une carte KMTronic 8 relais pour piloter l'alimentation et les accessoires de ta station.", 'station.online': 'En ligne', 'station.offline': 'Hors ligne', 'station.edit': 'Modifier', 'station.delete': 'Supprimer', 'station.relay': 'Relais', 'station.on': 'ON', 'station.off': 'OFF', 'station.type': "Type d'appareil", 'station.name': 'Nom', 'station.host': 'Hôte / IP', 'station.user': "Nom d'utilisateur", 'station.pass': 'Mot de passe', 'station.optional': 'optionnel', 'station.labels': 'Libellés des relais', 'station.cancel': 'Annuler', 'station.save': 'Enregistrer', 'sec.awards': 'Diplômes', 'sec.cat': 'Interface CAT', 'sec.rotator': 'Rotator', 'sec.winkeyer': 'Manipulateur CW', 'sec.antenna': 'Antenne motorisée', 'sec.antgenius': 'Antenna Genius', 'sec.pgxl': 'Power Genius', 'sec.flex': 'FlexRadio', 'sec.audio': 'Périphériques audio', 'gen.hint': 'Comportement de l\'application (enregistré immédiatement).', diff --git a/frontend/wailsjs/go/main/App.d.ts b/frontend/wailsjs/go/main/App.d.ts index 753697f..ea2ddb1 100644 --- a/frontend/wailsjs/go/main/App.d.ts +++ b/frontend/wailsjs/go/main/App.d.ts @@ -64,6 +64,8 @@ export function AwardRefsForQSOs(arg1:Array):Promise; +export function BackfillUSCounties():Promise; + export function BrowseExecutable():Promise; export function BulkUpdateField(arg1:Array,arg2:string,arg3:string):Promise; @@ -150,6 +152,8 @@ export function DownloadConfirmations(arg1:string,arg2:boolean,arg3:string):Prom export function DownloadLoTWUsers():Promise; +export function DownloadULSCounties():Promise; + export function DuplicateProfile(arg1:number,arg2:string):Promise; export function ExplainAward(arg1:string,arg2:string):Promise>; @@ -808,6 +812,8 @@ export function TestRotator(arg1:main.RotatorSettings):Promise; export function TestUltrabeam(arg1:main.UltrabeamSettings):Promise; +export function ULSStatus():Promise; + export function UltrabeamRetract():Promise; export function UnlockSecrets(arg1:string):Promise; diff --git a/frontend/wailsjs/go/main/App.js b/frontend/wailsjs/go/main/App.js index 72924be..b80ec16 100644 --- a/frontend/wailsjs/go/main/App.js +++ b/frontend/wailsjs/go/main/App.js @@ -86,6 +86,10 @@ export function AwardsFolder() { return window['go']['main']['App']['AwardsFolder'](); } +export function BackfillUSCounties() { + return window['go']['main']['App']['BackfillUSCounties'](); +} + export function BrowseExecutable() { return window['go']['main']['App']['BrowseExecutable'](); } @@ -258,6 +262,10 @@ export function DownloadLoTWUsers() { return window['go']['main']['App']['DownloadLoTWUsers'](); } +export function DownloadULSCounties() { + return window['go']['main']['App']['DownloadULSCounties'](); +} + export function DuplicateProfile(arg1, arg2) { return window['go']['main']['App']['DuplicateProfile'](arg1, arg2); } @@ -1574,6 +1582,10 @@ export function TestUltrabeam(arg1) { return window['go']['main']['App']['TestUltrabeam'](arg1); } +export function ULSStatus() { + return window['go']['main']['App']['ULSStatus'](); +} + export function UltrabeamRetract() { return window['go']['main']['App']['UltrabeamRetract'](); } diff --git a/frontend/wailsjs/go/models.ts b/frontend/wailsjs/go/models.ts index d68f23a..73e0f4e 100644 --- a/frontend/wailsjs/go/models.ts +++ b/frontend/wailsjs/go/models.ts @@ -1575,6 +1575,22 @@ export namespace main { this.to = source["to"]; } } + export class BackfillUSCountiesResult { + scanned: number; + county: number; + grid: number; + + static createFrom(source: any = {}) { + return new BackfillUSCountiesResult(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.scanned = source["scanned"]; + this.county = source["county"]; + this.grid = source["grid"]; + } + } export class BackupSettings { enabled: boolean; folder: string; @@ -2548,6 +2564,20 @@ export namespace main { this.my_pota_ref = source["my_pota_ref"]; } } + export class ULSStatusResult { + count: number; + updated_at: string; + + static createFrom(source: any = {}) { + return new ULSStatusResult(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.count = source["count"]; + this.updated_at = source["updated_at"]; + } + } export class UltrabeamSettings { enabled: boolean; type: string; diff --git a/internal/award/award.go b/internal/award/award.go index f03acee..4f8ef16 100644 --- a/internal/award/award.go +++ b/internal/award/award.go @@ -643,6 +643,59 @@ func InScope(d Def, q *qso.QSO) bool { return inScope(&d, q) } // EmissionOf maps an ADIF mode to its broad category (CW|PHONE|DIGITAL). func EmissionOf(mode string) string { return emissionOf(mode) } +// USCountyKey normalises a QSO's state + cnty into the canonical "STATE,COUNTY" +// match code used by the US Counties (USA-CA) award, so the reference list (in +// that same form) matches whatever shape the logbook holds. It is the SINGLE +// source of truth: cmd/cntygen builds the reference codes by calling it, so the +// two sides can never drift. +// +// Real logs are a mess — "MA,MIDDLESEX", bare "Middlesex" with the state in its +// own column, mixed case, county-type suffixes, the odd "0", plus the FIPS list +// abbreviating "Saint"→"St." and hyphenating "Matanuska-Susitna". The rules: +// - if cnty already carries "ST,County", split on the first comma; else take +// the state from the STATE column; +// - upper-case; drop periods and apostrophes; hyphens→space; strip a trailing +// County/Parish/Borough/Census Area/Municipality; fold Saint(e)→St(e); +// collapse whitespace; +// - require a 2-letter state and a non-empty county, else no match (""). +func USCountyKey(state, cnty string) string { + s := strings.TrimSpace(cnty) + if s == "" || s == "0" { + return "" + } + var st, co string + if i := strings.IndexByte(s, ','); i >= 0 { + st, co = strings.TrimSpace(s[:i]), strings.TrimSpace(s[i+1:]) + } else { + st, co = strings.TrimSpace(state), s + } + co = strings.ToUpper(co) + co = strings.ReplaceAll(co, ".", "") + co = strings.ReplaceAll(co, "'", "") + co = strings.ReplaceAll(co, "-", " ") + for _, suf := range []string{" COUNTY", " PARISH", " BOROUGH", " CENSUS AREA", " MUNICIPALITY"} { + if strings.HasSuffix(co, suf) { + co = strings.TrimSuffix(co, suf) + break + } + } + switch { + case strings.HasPrefix(co, "SAINTE "): + co = "STE " + co[len("SAINTE "):] + case strings.HasPrefix(co, "SAINT "): + co = "ST " + co[len("SAINT "):] + } + // Drop ALL internal spaces last: FIPS writes DeKalb/DuPage/LaSalle as one + // word, logs often split them ("De Kalb"). Removing spaces on both sides + // folds those together and can't collide two real counties in one state. + co = strings.ReplaceAll(co, " ", "") + st = strings.ToUpper(st) + if len(st) != 2 || co == "" { + return "" + } + return st + "," + co +} + // labelRef fills a worked reference's name/group from the reference list (or the // name resolver as a fallback). func labelRef(rf *Ref, d *Def, code string, rl refList, hasList bool, nameOf NameResolver) { @@ -1145,6 +1198,8 @@ func fieldRaw(field string, q *qso.QSO) string { return q.Callsign case "state": return q.State + case "us_county": + return USCountyKey(q.State, q.County) case "cont": return q.Continent case "country": diff --git a/internal/award/catalog/uscounties.json b/internal/award/catalog/uscounties.json new file mode 100644 index 0000000..a3beb63 --- /dev/null +++ b/internal/award/catalog/uscounties.json @@ -0,0 +1,29 @@ +{ + "def": { + "code": "USCOUNTIES", + "name": "US Counties (USA-CA)", + "description": "Worked US counties (CQ USA-CA). Matches the QSO's county, tolerating LoTW \"ST,County\" and bare county-name shapes.", + "valid": true, + "protected": true, + "type": "QSOFIELDS", + "field": "us_county", + "match_by": "code", + "exact_match": true, + "pattern": "", + "ref_display": "name", + "dxcc_filter": [ + 291, + 110, + 6 + ], + "confirm": [ + "lotw", + "qsl" + ], + "validate": [ + "lotw" + ], + "total": 3077, + "builtin": true + } +} diff --git a/internal/award/uscounty_test.go b/internal/award/uscounty_test.go new file mode 100644 index 0000000..8075125 --- /dev/null +++ b/internal/award/uscounty_test.go @@ -0,0 +1,27 @@ +package award + +import "testing" + +func TestUSCountyKey(t *testing.T) { + cases := []struct { + state, cnty, want string + }{ + {"MA", "MA,MIDDLESEX", "MA,MIDDLESEX"}, // LoTW "ST,County" shape + {"NJ", "Middlesex", "NJ,MIDDLESEX"}, // bare name + state column + {"TX", "Montgomery", "TX,MONTGOMERY"}, // title case + {"FL", "Saint Lucie", "FL,STLUCIE"}, // Saint→St, space dropped + {"FL", "St. Lucie", "FL,STLUCIE"}, // FIPS abbreviation, period dropped + {"AK", "Matanuska-Susitna", "AK,MATANUSKASUSITNA"}, // hyphen→space→dropped + {"IL", "De Kalb", "IL,DEKALB"}, // split name + {"IL", "DeKalb County", "IL,DEKALB"}, // suffix + one word + {"LA", "Acadia Parish", "LA,ACADIA"}, // parish suffix + {"", "Honolulu", ""}, // no state → no match + {"HI", "0", ""}, // garbage + {"HI", "", ""}, // empty + } + for _, c := range cases { + if got := USCountyKey(c.state, c.cnty); got != c.want { + t.Errorf("USCountyKey(%q,%q) = %q, want %q", c.state, c.cnty, got, c.want) + } + } +} diff --git a/internal/awardref/builtin.go b/internal/awardref/builtin.go index fd8d8f8..178dc3a 100644 --- a/internal/awardref/builtin.go +++ b/internal/awardref/builtin.go @@ -17,6 +17,7 @@ import ( // - WAC → continent code ("EU", "NA", …) // - WAS → ADIF STATE code ("AL", …) // - DDFM → "D06" (the award pattern captures the leading D) +// - USCOUNTIES → canonical "STATE,COUNTY" key (see award.usCountyKey) func BuiltinRefs(code string) ([]Ref, bool) { switch code { case "DXCC": @@ -29,6 +30,8 @@ func BuiltinRefs(code string) ([]Ref, bool) { return usStates().Refs, true case "DDFM": return frenchDepartments(), true + case "USCOUNTIES": + return usCounties(), true } return nil, false } diff --git a/internal/awardref/uscounties_gen.go b/internal/awardref/uscounties_gen.go new file mode 100644 index 0000000..223e6c6 --- /dev/null +++ b/internal/awardref/uscounties_gen.go @@ -0,0 +1,3153 @@ +// Code generated by cmd/cntygen from FIPS county data. DO NOT EDIT. +package awardref + +// usCounties is the US Counties (USA-CA) reference list: one entry per county +// in the 50 states, keyed by the canonical "STATE,COUNTY" match code that +// award.usCountyKey produces from a QSO's state + cnty fields. +func usCounties() []Ref { + return []Ref{ + ref("AK,ALEUTIANSEAST", "Aleutians East Borough, AK", 6), + ref("AK,ALEUTIANSWEST", "Aleutians West Census Area, AK", 6), + ref("AK,ANCHORAGE", "Anchorage Municipality, AK", 6), + ref("AK,BETHEL", "Bethel Census Area, AK", 6), + ref("AK,BRISTOLBAY", "Bristol Bay Borough, AK", 6), + ref("AK,DENALI", "Denali Borough, AK", 6), + ref("AK,DILLINGHAM", "Dillingham Census Area, AK", 6), + ref("AK,FAIRBANKSNORTHSTAR", "Fairbanks North Star Borough, AK", 6), + ref("AK,HAINES", "Haines Borough, AK", 6), + ref("AK,HOONAHANGOON", "Hoonah-Angoon Census Area, AK", 6), + ref("AK,JUNEAUCITYAND", "Juneau City and Borough, AK", 6), + ref("AK,KENAIPENINSULA", "Kenai Peninsula Borough, AK", 6), + ref("AK,KETCHIKANGATEWAY", "Ketchikan Gateway Borough, AK", 6), + ref("AK,KODIAKISLAND", "Kodiak Island Borough, AK", 6), + ref("AK,LAKEANDPENINSULA", "Lake and Peninsula Borough, AK", 6), + ref("AK,MATANUSKASUSITNA", "Matanuska-Susitna Borough, AK", 6), + ref("AK,NOME", "Nome Census Area, AK", 6), + ref("AK,NORTHSLOPE", "North Slope Borough, AK", 6), + ref("AK,NORTHWESTARCTIC", "Northwest Arctic Borough, AK", 6), + ref("AK,PETERSBURG", "Petersburg Borough, AK", 6), + ref("AK,PRINCEOFWALESHYDER", "Prince of Wales-Hyder Census Area, AK", 6), + ref("AK,SITKACITYAND", "Sitka City and Borough, AK", 6), + ref("AK,SKAGWAY", "Skagway Municipality, AK", 6), + ref("AK,SOUTHEASTFAIRBANKS", "Southeast Fairbanks Census Area, AK", 6), + ref("AK,VALDEZCORDOVA", "Valdez-Cordova Census Area, AK", 6), + ref("AK,WADEHAMPTON", "Wade Hampton Census Area, AK", 6), + ref("AK,WRANGELLCITYAND", "Wrangell City and Borough, AK", 6), + ref("AK,YAKUTATCITYAND", "Yakutat City and Borough, AK", 6), + ref("AK,YUKONKOYUKUK", "Yukon-Koyukuk Census Area, AK", 6), + ref("AL,AUTAUGA", "Autauga County, AL", 291), + ref("AL,BALDWIN", "Baldwin County, AL", 291), + ref("AL,BARBOUR", "Barbour County, AL", 291), + ref("AL,BIBB", "Bibb County, AL", 291), + ref("AL,BLOUNT", "Blount County, AL", 291), + ref("AL,BULLOCK", "Bullock County, AL", 291), + ref("AL,BUTLER", "Butler County, AL", 291), + ref("AL,CALHOUN", "Calhoun County, AL", 291), + ref("AL,CHAMBERS", "Chambers County, AL", 291), + ref("AL,CHEROKEE", "Cherokee County, AL", 291), + ref("AL,CHILTON", "Chilton County, AL", 291), + ref("AL,CHOCTAW", "Choctaw County, AL", 291), + ref("AL,CLARKE", "Clarke County, AL", 291), + ref("AL,CLAY", "Clay County, AL", 291), + ref("AL,CLEBURNE", "Cleburne County, AL", 291), + ref("AL,COFFEE", "Coffee County, AL", 291), + ref("AL,COLBERT", "Colbert County, AL", 291), + ref("AL,CONECUH", "Conecuh County, AL", 291), + ref("AL,COOSA", "Coosa County, AL", 291), + ref("AL,COVINGTON", "Covington County, AL", 291), + ref("AL,CRENSHAW", "Crenshaw County, AL", 291), + ref("AL,CULLMAN", "Cullman County, AL", 291), + ref("AL,DALE", "Dale County, AL", 291), + ref("AL,DALLAS", "Dallas County, AL", 291), + ref("AL,DEKALB", "DeKalb County, AL", 291), + ref("AL,ELMORE", "Elmore County, AL", 291), + ref("AL,ESCAMBIA", "Escambia County, AL", 291), + ref("AL,ETOWAH", "Etowah County, AL", 291), + ref("AL,FAYETTE", "Fayette County, AL", 291), + ref("AL,FRANKLIN", "Franklin County, AL", 291), + ref("AL,GENEVA", "Geneva County, AL", 291), + ref("AL,GREENE", "Greene County, AL", 291), + ref("AL,HALE", "Hale County, AL", 291), + ref("AL,HENRY", "Henry County, AL", 291), + ref("AL,HOUSTON", "Houston County, AL", 291), + ref("AL,JACKSON", "Jackson County, AL", 291), + ref("AL,JEFFERSON", "Jefferson County, AL", 291), + ref("AL,LAMAR", "Lamar County, AL", 291), + ref("AL,LAUDERDALE", "Lauderdale County, AL", 291), + ref("AL,LAWRENCE", "Lawrence County, AL", 291), + ref("AL,LEE", "Lee County, AL", 291), + ref("AL,LIMESTONE", "Limestone County, AL", 291), + ref("AL,LOWNDES", "Lowndes County, AL", 291), + ref("AL,MACON", "Macon County, AL", 291), + ref("AL,MADISON", "Madison County, AL", 291), + ref("AL,MARENGO", "Marengo County, AL", 291), + ref("AL,MARION", "Marion County, AL", 291), + ref("AL,MARSHALL", "Marshall County, AL", 291), + ref("AL,MOBILE", "Mobile County, AL", 291), + ref("AL,MONROE", "Monroe County, AL", 291), + ref("AL,MONTGOMERY", "Montgomery County, AL", 291), + ref("AL,MORGAN", "Morgan County, AL", 291), + ref("AL,PERRY", "Perry County, AL", 291), + ref("AL,PICKENS", "Pickens County, AL", 291), + ref("AL,PIKE", "Pike County, AL", 291), + ref("AL,RANDOLPH", "Randolph County, AL", 291), + ref("AL,RUSSELL", "Russell County, AL", 291), + ref("AL,SHELBY", "Shelby County, AL", 291), + ref("AL,STCLAIR", "St. Clair County, AL", 291), + ref("AL,SUMTER", "Sumter County, AL", 291), + ref("AL,TALLADEGA", "Talladega County, AL", 291), + ref("AL,TALLAPOOSA", "Tallapoosa County, AL", 291), + ref("AL,TUSCALOOSA", "Tuscaloosa County, AL", 291), + ref("AL,WALKER", "Walker County, AL", 291), + ref("AL,WASHINGTON", "Washington County, AL", 291), + ref("AL,WILCOX", "Wilcox County, AL", 291), + ref("AL,WINSTON", "Winston County, AL", 291), + ref("AR,ARKANSAS", "Arkansas County, AR", 291), + ref("AR,ASHLEY", "Ashley County, AR", 291), + ref("AR,BAXTER", "Baxter County, AR", 291), + ref("AR,BENTON", "Benton County, AR", 291), + ref("AR,BOONE", "Boone County, AR", 291), + ref("AR,BRADLEY", "Bradley County, AR", 291), + ref("AR,CALHOUN", "Calhoun County, AR", 291), + ref("AR,CARROLL", "Carroll County, AR", 291), + ref("AR,CHICOT", "Chicot County, AR", 291), + ref("AR,CLARK", "Clark County, AR", 291), + ref("AR,CLAY", "Clay County, AR", 291), + ref("AR,CLEBURNE", "Cleburne County, AR", 291), + ref("AR,CLEVELAND", "Cleveland County, AR", 291), + ref("AR,COLUMBIA", "Columbia County, AR", 291), + ref("AR,CONWAY", "Conway County, AR", 291), + ref("AR,CRAIGHEAD", "Craighead County, AR", 291), + ref("AR,CRAWFORD", "Crawford County, AR", 291), + ref("AR,CRITTENDEN", "Crittenden County, AR", 291), + ref("AR,CROSS", "Cross County, AR", 291), + ref("AR,DALLAS", "Dallas County, AR", 291), + ref("AR,DESHA", "Desha County, AR", 291), + ref("AR,DREW", "Drew County, AR", 291), + ref("AR,FAULKNER", "Faulkner County, AR", 291), + ref("AR,FRANKLIN", "Franklin County, AR", 291), + ref("AR,FULTON", "Fulton County, AR", 291), + ref("AR,GARLAND", "Garland County, AR", 291), + ref("AR,GRANT", "Grant County, AR", 291), + ref("AR,GREENE", "Greene County, AR", 291), + ref("AR,HEMPSTEAD", "Hempstead County, AR", 291), + ref("AR,HOTSPRING", "Hot Spring County, AR", 291), + ref("AR,HOWARD", "Howard County, AR", 291), + ref("AR,INDEPENDENCE", "Independence County, AR", 291), + ref("AR,IZARD", "Izard County, AR", 291), + ref("AR,JACKSON", "Jackson County, AR", 291), + ref("AR,JEFFERSON", "Jefferson County, AR", 291), + ref("AR,JOHNSON", "Johnson County, AR", 291), + ref("AR,LAFAYETTE", "Lafayette County, AR", 291), + ref("AR,LAWRENCE", "Lawrence County, AR", 291), + ref("AR,LEE", "Lee County, AR", 291), + ref("AR,LINCOLN", "Lincoln County, AR", 291), + ref("AR,LITTLERIVER", "Little River County, AR", 291), + ref("AR,LOGAN", "Logan County, AR", 291), + ref("AR,LONOKE", "Lonoke County, AR", 291), + ref("AR,MADISON", "Madison County, AR", 291), + ref("AR,MARION", "Marion County, AR", 291), + ref("AR,MILLER", "Miller County, AR", 291), + ref("AR,MISSISSIPPI", "Mississippi County, AR", 291), + ref("AR,MONROE", "Monroe County, AR", 291), + ref("AR,MONTGOMERY", "Montgomery County, AR", 291), + ref("AR,NEVADA", "Nevada County, AR", 291), + ref("AR,NEWTON", "Newton County, AR", 291), + ref("AR,OUACHITA", "Ouachita County, AR", 291), + ref("AR,PERRY", "Perry County, AR", 291), + ref("AR,PHILLIPS", "Phillips County, AR", 291), + ref("AR,PIKE", "Pike County, AR", 291), + ref("AR,POINSETT", "Poinsett County, AR", 291), + ref("AR,POLK", "Polk County, AR", 291), + ref("AR,POPE", "Pope County, AR", 291), + ref("AR,PRAIRIE", "Prairie County, AR", 291), + ref("AR,PULASKI", "Pulaski County, AR", 291), + ref("AR,RANDOLPH", "Randolph County, AR", 291), + ref("AR,SALINE", "Saline County, AR", 291), + ref("AR,SCOTT", "Scott County, AR", 291), + ref("AR,SEARCY", "Searcy County, AR", 291), + ref("AR,SEBASTIAN", "Sebastian County, AR", 291), + ref("AR,SEVIER", "Sevier County, AR", 291), + ref("AR,SHARP", "Sharp County, AR", 291), + ref("AR,STFRANCIS", "St. Francis County, AR", 291), + ref("AR,STONE", "Stone County, AR", 291), + ref("AR,UNION", "Union County, AR", 291), + ref("AR,VANBUREN", "Van Buren County, AR", 291), + ref("AR,WASHINGTON", "Washington County, AR", 291), + ref("AR,WHITE", "White County, AR", 291), + ref("AR,WOODRUFF", "Woodruff County, AR", 291), + ref("AR,YELL", "Yell County, AR", 291), + ref("AZ,APACHE", "Apache County, AZ", 291), + ref("AZ,COCHISE", "Cochise County, AZ", 291), + ref("AZ,COCONINO", "Coconino County, AZ", 291), + ref("AZ,GILA", "Gila County, AZ", 291), + ref("AZ,GRAHAM", "Graham County, AZ", 291), + ref("AZ,GREENLEE", "Greenlee County, AZ", 291), + ref("AZ,LAPAZ", "La Paz County, AZ", 291), + ref("AZ,MARICOPA", "Maricopa County, AZ", 291), + ref("AZ,MOHAVE", "Mohave County, AZ", 291), + ref("AZ,NAVAJO", "Navajo County, AZ", 291), + ref("AZ,PIMA", "Pima County, AZ", 291), + ref("AZ,PINAL", "Pinal County, AZ", 291), + ref("AZ,SANTACRUZ", "Santa Cruz County, AZ", 291), + ref("AZ,YAVAPAI", "Yavapai County, AZ", 291), + ref("AZ,YUMA", "Yuma County, AZ", 291), + ref("CA,ALAMEDA", "Alameda County, CA", 291), + ref("CA,ALPINE", "Alpine County, CA", 291), + ref("CA,AMADOR", "Amador County, CA", 291), + ref("CA,BUTTE", "Butte County, CA", 291), + ref("CA,CALAVERAS", "Calaveras County, CA", 291), + ref("CA,COLUSA", "Colusa County, CA", 291), + ref("CA,CONTRACOSTA", "Contra Costa County, CA", 291), + ref("CA,DELNORTE", "Del Norte County, CA", 291), + ref("CA,ELDORADO", "El Dorado County, CA", 291), + ref("CA,FRESNO", "Fresno County, CA", 291), + ref("CA,GLENN", "Glenn County, CA", 291), + ref("CA,HUMBOLDT", "Humboldt County, CA", 291), + ref("CA,IMPERIAL", "Imperial County, CA", 291), + ref("CA,INYO", "Inyo County, CA", 291), + ref("CA,KERN", "Kern County, CA", 291), + ref("CA,KINGS", "Kings County, CA", 291), + ref("CA,LAKE", "Lake County, CA", 291), + ref("CA,LASSEN", "Lassen County, CA", 291), + ref("CA,LOSANGELES", "Los Angeles County, CA", 291), + ref("CA,MADERA", "Madera County, CA", 291), + ref("CA,MARIN", "Marin County, CA", 291), + ref("CA,MARIPOSA", "Mariposa County, CA", 291), + ref("CA,MENDOCINO", "Mendocino County, CA", 291), + ref("CA,MERCED", "Merced County, CA", 291), + ref("CA,MODOC", "Modoc County, CA", 291), + ref("CA,MONO", "Mono County, CA", 291), + ref("CA,MONTEREY", "Monterey County, CA", 291), + ref("CA,NAPA", "Napa County, CA", 291), + ref("CA,NEVADA", "Nevada County, CA", 291), + ref("CA,ORANGE", "Orange County, CA", 291), + ref("CA,PLACER", "Placer County, CA", 291), + ref("CA,PLUMAS", "Plumas County, CA", 291), + ref("CA,RIVERSIDE", "Riverside County, CA", 291), + ref("CA,SACRAMENTO", "Sacramento County, CA", 291), + ref("CA,SANBENITO", "San Benito County, CA", 291), + ref("CA,SANBERNARDINO", "San Bernardino County, CA", 291), + ref("CA,SANDIEGO", "San Diego County, CA", 291), + ref("CA,SANFRANCISCO", "San Francisco County, CA", 291), + ref("CA,SANJOAQUIN", "San Joaquin County, CA", 291), + ref("CA,SANLUISOBISPO", "San Luis Obispo County, CA", 291), + ref("CA,SANMATEO", "San Mateo County, CA", 291), + ref("CA,SANTABARBARA", "Santa Barbara County, CA", 291), + ref("CA,SANTACLARA", "Santa Clara County, CA", 291), + ref("CA,SANTACRUZ", "Santa Cruz County, CA", 291), + ref("CA,SHASTA", "Shasta County, CA", 291), + ref("CA,SIERRA", "Sierra County, CA", 291), + ref("CA,SISKIYOU", "Siskiyou County, CA", 291), + ref("CA,SOLANO", "Solano County, CA", 291), + ref("CA,SONOMA", "Sonoma County, CA", 291), + ref("CA,STANISLAUS", "Stanislaus County, CA", 291), + ref("CA,SUTTER", "Sutter County, CA", 291), + ref("CA,TEHAMA", "Tehama County, CA", 291), + ref("CA,TRINITY", "Trinity County, CA", 291), + ref("CA,TULARE", "Tulare County, CA", 291), + ref("CA,TUOLUMNE", "Tuolumne County, CA", 291), + ref("CA,VENTURA", "Ventura County, CA", 291), + ref("CA,YOLO", "Yolo County, CA", 291), + ref("CA,YUBA", "Yuba County, CA", 291), + ref("CO,ADAMS", "Adams County, CO", 291), + ref("CO,ALAMOSA", "Alamosa County, CO", 291), + ref("CO,ARAPAHOE", "Arapahoe County, CO", 291), + ref("CO,ARCHULETA", "Archuleta County, CO", 291), + ref("CO,BACA", "Baca County, CO", 291), + ref("CO,BENT", "Bent County, CO", 291), + ref("CO,BOULDER", "Boulder County, CO", 291), + ref("CO,BROOMFIELD", "Broomfield County, CO", 291), + ref("CO,CHAFFEE", "Chaffee County, CO", 291), + ref("CO,CHEYENNE", "Cheyenne County, CO", 291), + ref("CO,CLEARCREEK", "Clear Creek County, CO", 291), + ref("CO,CONEJOS", "Conejos County, CO", 291), + ref("CO,COSTILLA", "Costilla County, CO", 291), + ref("CO,CROWLEY", "Crowley County, CO", 291), + ref("CO,CUSTER", "Custer County, CO", 291), + ref("CO,DELTA", "Delta County, CO", 291), + ref("CO,DENVER", "Denver County, CO", 291), + ref("CO,DOLORES", "Dolores County, CO", 291), + ref("CO,DOUGLAS", "Douglas County, CO", 291), + ref("CO,EAGLE", "Eagle County, CO", 291), + ref("CO,ELBERT", "Elbert County, CO", 291), + ref("CO,ELPASO", "El Paso County, CO", 291), + ref("CO,FREMONT", "Fremont County, CO", 291), + ref("CO,GARFIELD", "Garfield County, CO", 291), + ref("CO,GILPIN", "Gilpin County, CO", 291), + ref("CO,GRAND", "Grand County, CO", 291), + ref("CO,GUNNISON", "Gunnison County, CO", 291), + ref("CO,HINSDALE", "Hinsdale County, CO", 291), + ref("CO,HUERFANO", "Huerfano County, CO", 291), + ref("CO,JACKSON", "Jackson County, CO", 291), + ref("CO,JEFFERSON", "Jefferson County, CO", 291), + ref("CO,KIOWA", "Kiowa County, CO", 291), + ref("CO,KITCARSON", "Kit Carson County, CO", 291), + ref("CO,LAKE", "Lake County, CO", 291), + ref("CO,LAPLATA", "La Plata County, CO", 291), + ref("CO,LARIMER", "Larimer County, CO", 291), + ref("CO,LASANIMAS", "Las Animas County, CO", 291), + ref("CO,LINCOLN", "Lincoln County, CO", 291), + ref("CO,LOGAN", "Logan County, CO", 291), + ref("CO,MESA", "Mesa County, CO", 291), + ref("CO,MINERAL", "Mineral County, CO", 291), + ref("CO,MOFFAT", "Moffat County, CO", 291), + ref("CO,MONTEZUMA", "Montezuma County, CO", 291), + ref("CO,MONTROSE", "Montrose County, CO", 291), + ref("CO,MORGAN", "Morgan County, CO", 291), + ref("CO,OTERO", "Otero County, CO", 291), + ref("CO,OURAY", "Ouray County, CO", 291), + ref("CO,PARK", "Park County, CO", 291), + ref("CO,PHILLIPS", "Phillips County, CO", 291), + ref("CO,PITKIN", "Pitkin County, CO", 291), + ref("CO,PROWERS", "Prowers County, CO", 291), + ref("CO,PUEBLO", "Pueblo County, CO", 291), + ref("CO,RIOBLANCO", "Rio Blanco County, CO", 291), + ref("CO,RIOGRANDE", "Rio Grande County, CO", 291), + ref("CO,ROUTT", "Routt County, CO", 291), + ref("CO,SAGUACHE", "Saguache County, CO", 291), + ref("CO,SANJUAN", "San Juan County, CO", 291), + ref("CO,SANMIGUEL", "San Miguel County, CO", 291), + ref("CO,SEDGWICK", "Sedgwick County, CO", 291), + ref("CO,SUMMIT", "Summit County, CO", 291), + ref("CO,TELLER", "Teller County, CO", 291), + ref("CO,WASHINGTON", "Washington County, CO", 291), + ref("CO,WELD", "Weld County, CO", 291), + ref("CO,YUMA", "Yuma County, CO", 291), + ref("CT,FAIRFIELD", "Fairfield County, CT", 291), + ref("CT,HARTFORD", "Hartford County, CT", 291), + ref("CT,LITCHFIELD", "Litchfield County, CT", 291), + ref("CT,MIDDLESEX", "Middlesex County, CT", 291), + ref("CT,NEWHAVEN", "New Haven County, CT", 291), + ref("CT,NEWLONDON", "New London County, CT", 291), + ref("CT,TOLLAND", "Tolland County, CT", 291), + ref("CT,WINDHAM", "Windham County, CT", 291), + ref("DC,DISTRICTOFCOLUMBIA", "District of Columbia, DC", 291), + ref("DE,KENT", "Kent County, DE", 291), + ref("DE,NEWCASTLE", "New Castle County, DE", 291), + ref("DE,SUSSEX", "Sussex County, DE", 291), + ref("FL,ALACHUA", "Alachua County, FL", 291), + ref("FL,BAKER", "Baker County, FL", 291), + ref("FL,BAY", "Bay County, FL", 291), + ref("FL,BRADFORD", "Bradford County, FL", 291), + ref("FL,BREVARD", "Brevard County, FL", 291), + ref("FL,BROWARD", "Broward County, FL", 291), + ref("FL,CALHOUN", "Calhoun County, FL", 291), + ref("FL,CHARLOTTE", "Charlotte County, FL", 291), + ref("FL,CITRUS", "Citrus County, FL", 291), + ref("FL,CLAY", "Clay County, FL", 291), + ref("FL,COLLIER", "Collier County, FL", 291), + ref("FL,COLUMBIA", "Columbia County, FL", 291), + ref("FL,DESOTO", "DeSoto County, FL", 291), + ref("FL,DIXIE", "Dixie County, FL", 291), + ref("FL,DUVAL", "Duval County, FL", 291), + ref("FL,ESCAMBIA", "Escambia County, FL", 291), + ref("FL,FLAGLER", "Flagler County, FL", 291), + ref("FL,FRANKLIN", "Franklin County, FL", 291), + ref("FL,GADSDEN", "Gadsden County, FL", 291), + ref("FL,GILCHRIST", "Gilchrist County, FL", 291), + ref("FL,GLADES", "Glades County, FL", 291), + ref("FL,GULF", "Gulf County, FL", 291), + ref("FL,HAMILTON", "Hamilton County, FL", 291), + ref("FL,HARDEE", "Hardee County, FL", 291), + ref("FL,HENDRY", "Hendry County, FL", 291), + ref("FL,HERNANDO", "Hernando County, FL", 291), + ref("FL,HIGHLANDS", "Highlands County, FL", 291), + ref("FL,HILLSBOROUGH", "Hillsborough County, FL", 291), + ref("FL,HOLMES", "Holmes County, FL", 291), + ref("FL,INDIANRIVER", "Indian River County, FL", 291), + ref("FL,JACKSON", "Jackson County, FL", 291), + ref("FL,JEFFERSON", "Jefferson County, FL", 291), + ref("FL,LAFAYETTE", "Lafayette County, FL", 291), + ref("FL,LAKE", "Lake County, FL", 291), + ref("FL,LEE", "Lee County, FL", 291), + ref("FL,LEON", "Leon County, FL", 291), + ref("FL,LEVY", "Levy County, FL", 291), + ref("FL,LIBERTY", "Liberty County, FL", 291), + ref("FL,MADISON", "Madison County, FL", 291), + ref("FL,MANATEE", "Manatee County, FL", 291), + ref("FL,MARION", "Marion County, FL", 291), + ref("FL,MARTIN", "Martin County, FL", 291), + ref("FL,MIAMIDADE", "Miami-Dade County, FL", 291), + ref("FL,MONROE", "Monroe County, FL", 291), + ref("FL,NASSAU", "Nassau County, FL", 291), + ref("FL,OKALOOSA", "Okaloosa County, FL", 291), + ref("FL,OKEECHOBEE", "Okeechobee County, FL", 291), + ref("FL,ORANGE", "Orange County, FL", 291), + ref("FL,OSCEOLA", "Osceola County, FL", 291), + ref("FL,PALMBEACH", "Palm Beach County, FL", 291), + ref("FL,PASCO", "Pasco County, FL", 291), + ref("FL,PINELLAS", "Pinellas County, FL", 291), + ref("FL,POLK", "Polk County, FL", 291), + ref("FL,PUTNAM", "Putnam County, FL", 291), + ref("FL,SANTAROSA", "Santa Rosa County, FL", 291), + ref("FL,SARASOTA", "Sarasota County, FL", 291), + ref("FL,SEMINOLE", "Seminole County, FL", 291), + ref("FL,STJOHNS", "St. Johns County, FL", 291), + ref("FL,STLUCIE", "St. Lucie County, FL", 291), + ref("FL,SUMTER", "Sumter County, FL", 291), + ref("FL,SUWANNEE", "Suwannee County, FL", 291), + ref("FL,TAYLOR", "Taylor County, FL", 291), + ref("FL,UNION", "Union County, FL", 291), + ref("FL,VOLUSIA", "Volusia County, FL", 291), + ref("FL,WAKULLA", "Wakulla County, FL", 291), + ref("FL,WALTON", "Walton County, FL", 291), + ref("FL,WASHINGTON", "Washington County, FL", 291), + ref("GA,APPLING", "Appling County, GA", 291), + ref("GA,ATKINSON", "Atkinson County, GA", 291), + ref("GA,BACON", "Bacon County, GA", 291), + ref("GA,BAKER", "Baker County, GA", 291), + ref("GA,BALDWIN", "Baldwin County, GA", 291), + ref("GA,BANKS", "Banks County, GA", 291), + ref("GA,BARROW", "Barrow County, GA", 291), + ref("GA,BARTOW", "Bartow County, GA", 291), + ref("GA,BENHILL", "Ben Hill County, GA", 291), + ref("GA,BERRIEN", "Berrien County, GA", 291), + ref("GA,BIBB", "Bibb County, GA", 291), + ref("GA,BLECKLEY", "Bleckley County, GA", 291), + ref("GA,BRANTLEY", "Brantley County, GA", 291), + ref("GA,BROOKS", "Brooks County, GA", 291), + ref("GA,BRYAN", "Bryan County, GA", 291), + ref("GA,BULLOCH", "Bulloch County, GA", 291), + ref("GA,BURKE", "Burke County, GA", 291), + ref("GA,BUTTS", "Butts County, GA", 291), + ref("GA,CALHOUN", "Calhoun County, GA", 291), + ref("GA,CAMDEN", "Camden County, GA", 291), + ref("GA,CANDLER", "Candler County, GA", 291), + ref("GA,CARROLL", "Carroll County, GA", 291), + ref("GA,CATOOSA", "Catoosa County, GA", 291), + ref("GA,CHARLTON", "Charlton County, GA", 291), + ref("GA,CHATHAM", "Chatham County, GA", 291), + ref("GA,CHATTAHOOCHEE", "Chattahoochee County, GA", 291), + ref("GA,CHATTOOGA", "Chattooga County, GA", 291), + ref("GA,CHEROKEE", "Cherokee County, GA", 291), + ref("GA,CLARKE", "Clarke County, GA", 291), + ref("GA,CLAY", "Clay County, GA", 291), + ref("GA,CLAYTON", "Clayton County, GA", 291), + ref("GA,CLINCH", "Clinch County, GA", 291), + ref("GA,COBB", "Cobb County, GA", 291), + ref("GA,COFFEE", "Coffee County, GA", 291), + ref("GA,COLQUITT", "Colquitt County, GA", 291), + ref("GA,COLUMBIA", "Columbia County, GA", 291), + ref("GA,COOK", "Cook County, GA", 291), + ref("GA,COWETA", "Coweta County, GA", 291), + ref("GA,CRAWFORD", "Crawford County, GA", 291), + ref("GA,CRISP", "Crisp County, GA", 291), + ref("GA,DADE", "Dade County, GA", 291), + ref("GA,DAWSON", "Dawson County, GA", 291), + ref("GA,DECATUR", "Decatur County, GA", 291), + ref("GA,DEKALB", "DeKalb County, GA", 291), + ref("GA,DODGE", "Dodge County, GA", 291), + ref("GA,DOOLY", "Dooly County, GA", 291), + ref("GA,DOUGHERTY", "Dougherty County, GA", 291), + ref("GA,DOUGLAS", "Douglas County, GA", 291), + ref("GA,EARLY", "Early County, GA", 291), + ref("GA,ECHOLS", "Echols County, GA", 291), + ref("GA,EFFINGHAM", "Effingham County, GA", 291), + ref("GA,ELBERT", "Elbert County, GA", 291), + ref("GA,EMANUEL", "Emanuel County, GA", 291), + ref("GA,EVANS", "Evans County, GA", 291), + ref("GA,FANNIN", "Fannin County, GA", 291), + ref("GA,FAYETTE", "Fayette County, GA", 291), + ref("GA,FLOYD", "Floyd County, GA", 291), + ref("GA,FORSYTH", "Forsyth County, GA", 291), + ref("GA,FRANKLIN", "Franklin County, GA", 291), + ref("GA,FULTON", "Fulton County, GA", 291), + ref("GA,GILMER", "Gilmer County, GA", 291), + ref("GA,GLASCOCK", "Glascock County, GA", 291), + ref("GA,GLYNN", "Glynn County, GA", 291), + ref("GA,GORDON", "Gordon County, GA", 291), + ref("GA,GRADY", "Grady County, GA", 291), + ref("GA,GREENE", "Greene County, GA", 291), + ref("GA,GWINNETT", "Gwinnett County, GA", 291), + ref("GA,HABERSHAM", "Habersham County, GA", 291), + ref("GA,HALL", "Hall County, GA", 291), + ref("GA,HANCOCK", "Hancock County, GA", 291), + ref("GA,HARALSON", "Haralson County, GA", 291), + ref("GA,HARRIS", "Harris County, GA", 291), + ref("GA,HART", "Hart County, GA", 291), + ref("GA,HEARD", "Heard County, GA", 291), + ref("GA,HENRY", "Henry County, GA", 291), + ref("GA,HOUSTON", "Houston County, GA", 291), + ref("GA,IRWIN", "Irwin County, GA", 291), + ref("GA,JACKSON", "Jackson County, GA", 291), + ref("GA,JASPER", "Jasper County, GA", 291), + ref("GA,JEFFDAVIS", "Jeff Davis County, GA", 291), + ref("GA,JEFFERSON", "Jefferson County, GA", 291), + ref("GA,JENKINS", "Jenkins County, GA", 291), + ref("GA,JOHNSON", "Johnson County, GA", 291), + ref("GA,JONES", "Jones County, GA", 291), + ref("GA,LAMAR", "Lamar County, GA", 291), + ref("GA,LANIER", "Lanier County, GA", 291), + ref("GA,LAURENS", "Laurens County, GA", 291), + ref("GA,LEE", "Lee County, GA", 291), + ref("GA,LIBERTY", "Liberty County, GA", 291), + ref("GA,LINCOLN", "Lincoln County, GA", 291), + ref("GA,LONG", "Long County, GA", 291), + ref("GA,LOWNDES", "Lowndes County, GA", 291), + ref("GA,LUMPKIN", "Lumpkin County, GA", 291), + ref("GA,MACON", "Macon County, GA", 291), + ref("GA,MADISON", "Madison County, GA", 291), + ref("GA,MARION", "Marion County, GA", 291), + ref("GA,MCDUFFIE", "McDuffie County, GA", 291), + ref("GA,MCINTOSH", "McIntosh County, GA", 291), + ref("GA,MERIWETHER", "Meriwether County, GA", 291), + ref("GA,MILLER", "Miller County, GA", 291), + ref("GA,MITCHELL", "Mitchell County, GA", 291), + ref("GA,MONROE", "Monroe County, GA", 291), + ref("GA,MONTGOMERY", "Montgomery County, GA", 291), + ref("GA,MORGAN", "Morgan County, GA", 291), + ref("GA,MURRAY", "Murray County, GA", 291), + ref("GA,MUSCOGEE", "Muscogee County, GA", 291), + ref("GA,NEWTON", "Newton County, GA", 291), + ref("GA,OCONEE", "Oconee County, GA", 291), + ref("GA,OGLETHORPE", "Oglethorpe County, GA", 291), + ref("GA,PAULDING", "Paulding County, GA", 291), + ref("GA,PEACH", "Peach County, GA", 291), + ref("GA,PICKENS", "Pickens County, GA", 291), + ref("GA,PIERCE", "Pierce County, GA", 291), + ref("GA,PIKE", "Pike County, GA", 291), + ref("GA,POLK", "Polk County, GA", 291), + ref("GA,PULASKI", "Pulaski County, GA", 291), + ref("GA,PUTNAM", "Putnam County, GA", 291), + ref("GA,QUITMAN", "Quitman County, GA", 291), + ref("GA,RABUN", "Rabun County, GA", 291), + ref("GA,RANDOLPH", "Randolph County, GA", 291), + ref("GA,RICHMOND", "Richmond County, GA", 291), + ref("GA,ROCKDALE", "Rockdale County, GA", 291), + ref("GA,SCHLEY", "Schley County, GA", 291), + ref("GA,SCREVEN", "Screven County, GA", 291), + ref("GA,SEMINOLE", "Seminole County, GA", 291), + ref("GA,SPALDING", "Spalding County, GA", 291), + ref("GA,STEPHENS", "Stephens County, GA", 291), + ref("GA,STEWART", "Stewart County, GA", 291), + ref("GA,SUMTER", "Sumter County, GA", 291), + ref("GA,TALBOT", "Talbot County, GA", 291), + ref("GA,TALIAFERRO", "Taliaferro County, GA", 291), + ref("GA,TATTNALL", "Tattnall County, GA", 291), + ref("GA,TAYLOR", "Taylor County, GA", 291), + ref("GA,TELFAIR", "Telfair County, GA", 291), + ref("GA,TERRELL", "Terrell County, GA", 291), + ref("GA,THOMAS", "Thomas County, GA", 291), + ref("GA,TIFT", "Tift County, GA", 291), + ref("GA,TOOMBS", "Toombs County, GA", 291), + ref("GA,TOWNS", "Towns County, GA", 291), + ref("GA,TREUTLEN", "Treutlen County, GA", 291), + ref("GA,TROUP", "Troup County, GA", 291), + ref("GA,TURNER", "Turner County, GA", 291), + ref("GA,TWIGGS", "Twiggs County, GA", 291), + ref("GA,UNION", "Union County, GA", 291), + ref("GA,UPSON", "Upson County, GA", 291), + ref("GA,WALKER", "Walker County, GA", 291), + ref("GA,WALTON", "Walton County, GA", 291), + ref("GA,WARE", "Ware County, GA", 291), + ref("GA,WARREN", "Warren County, GA", 291), + ref("GA,WASHINGTON", "Washington County, GA", 291), + ref("GA,WAYNE", "Wayne County, GA", 291), + ref("GA,WEBSTER", "Webster County, GA", 291), + ref("GA,WHEELER", "Wheeler County, GA", 291), + ref("GA,WHITE", "White County, GA", 291), + ref("GA,WHITFIELD", "Whitfield County, GA", 291), + ref("GA,WILCOX", "Wilcox County, GA", 291), + ref("GA,WILKES", "Wilkes County, GA", 291), + ref("GA,WILKINSON", "Wilkinson County, GA", 291), + ref("GA,WORTH", "Worth County, GA", 291), + ref("HI,HAWAII", "Hawaii County, HI", 110), + ref("HI,HONOLULU", "Honolulu County, HI", 110), + ref("HI,KALAWAO", "Kalawao County, HI", 110), + ref("HI,KAUAI", "Kauai County, HI", 110), + ref("HI,MAUI", "Maui County, HI", 110), + ref("IA,ADAIR", "Adair County, IA", 291), + ref("IA,ADAMS", "Adams County, IA", 291), + ref("IA,ALLAMAKEE", "Allamakee County, IA", 291), + ref("IA,APPANOOSE", "Appanoose County, IA", 291), + ref("IA,AUDUBON", "Audubon County, IA", 291), + ref("IA,BENTON", "Benton County, IA", 291), + ref("IA,BLACKHAWK", "Black Hawk County, IA", 291), + ref("IA,BOONE", "Boone County, IA", 291), + ref("IA,BREMER", "Bremer County, IA", 291), + ref("IA,BUCHANAN", "Buchanan County, IA", 291), + ref("IA,BUENAVISTA", "Buena Vista County, IA", 291), + ref("IA,BUTLER", "Butler County, IA", 291), + ref("IA,CALHOUN", "Calhoun County, IA", 291), + ref("IA,CARROLL", "Carroll County, IA", 291), + ref("IA,CASS", "Cass County, IA", 291), + ref("IA,CEDAR", "Cedar County, IA", 291), + ref("IA,CERROGORDO", "Cerro Gordo County, IA", 291), + ref("IA,CHEROKEE", "Cherokee County, IA", 291), + ref("IA,CHICKASAW", "Chickasaw County, IA", 291), + ref("IA,CLARKE", "Clarke County, IA", 291), + ref("IA,CLAY", "Clay County, IA", 291), + ref("IA,CLAYTON", "Clayton County, IA", 291), + ref("IA,CLINTON", "Clinton County, IA", 291), + ref("IA,CRAWFORD", "Crawford County, IA", 291), + ref("IA,DALLAS", "Dallas County, IA", 291), + ref("IA,DAVIS", "Davis County, IA", 291), + ref("IA,DECATUR", "Decatur County, IA", 291), + ref("IA,DELAWARE", "Delaware County, IA", 291), + ref("IA,DESMOINES", "Des Moines County, IA", 291), + ref("IA,DICKINSON", "Dickinson County, IA", 291), + ref("IA,DUBUQUE", "Dubuque County, IA", 291), + ref("IA,EMMET", "Emmet County, IA", 291), + ref("IA,FAYETTE", "Fayette County, IA", 291), + ref("IA,FLOYD", "Floyd County, IA", 291), + ref("IA,FRANKLIN", "Franklin County, IA", 291), + ref("IA,FREMONT", "Fremont County, IA", 291), + ref("IA,GREENE", "Greene County, IA", 291), + ref("IA,GRUNDY", "Grundy County, IA", 291), + ref("IA,GUTHRIE", "Guthrie County, IA", 291), + ref("IA,HAMILTON", "Hamilton County, IA", 291), + ref("IA,HANCOCK", "Hancock County, IA", 291), + ref("IA,HARDIN", "Hardin County, IA", 291), + ref("IA,HARRISON", "Harrison County, IA", 291), + ref("IA,HENRY", "Henry County, IA", 291), + ref("IA,HOWARD", "Howard County, IA", 291), + ref("IA,HUMBOLDT", "Humboldt County, IA", 291), + ref("IA,IDA", "Ida County, IA", 291), + ref("IA,IOWA", "Iowa County, IA", 291), + ref("IA,JACKSON", "Jackson County, IA", 291), + ref("IA,JASPER", "Jasper County, IA", 291), + ref("IA,JEFFERSON", "Jefferson County, IA", 291), + ref("IA,JOHNSON", "Johnson County, IA", 291), + ref("IA,JONES", "Jones County, IA", 291), + ref("IA,KEOKUK", "Keokuk County, IA", 291), + ref("IA,KOSSUTH", "Kossuth County, IA", 291), + ref("IA,LEE", "Lee County, IA", 291), + ref("IA,LINN", "Linn County, IA", 291), + ref("IA,LOUISA", "Louisa County, IA", 291), + ref("IA,LUCAS", "Lucas County, IA", 291), + ref("IA,LYON", "Lyon County, IA", 291), + ref("IA,MADISON", "Madison County, IA", 291), + ref("IA,MAHASKA", "Mahaska County, IA", 291), + ref("IA,MARION", "Marion County, IA", 291), + ref("IA,MARSHALL", "Marshall County, IA", 291), + ref("IA,MILLS", "Mills County, IA", 291), + ref("IA,MITCHELL", "Mitchell County, IA", 291), + ref("IA,MONONA", "Monona County, IA", 291), + ref("IA,MONROE", "Monroe County, IA", 291), + ref("IA,MONTGOMERY", "Montgomery County, IA", 291), + ref("IA,MUSCATINE", "Muscatine County, IA", 291), + ref("IA,OBRIEN", "O'Brien County, IA", 291), + ref("IA,OSCEOLA", "Osceola County, IA", 291), + ref("IA,PAGE", "Page County, IA", 291), + ref("IA,PALOALTO", "Palo Alto County, IA", 291), + ref("IA,PLYMOUTH", "Plymouth County, IA", 291), + ref("IA,POCAHONTAS", "Pocahontas County, IA", 291), + ref("IA,POLK", "Polk County, IA", 291), + ref("IA,POTTAWATTAMIE", "Pottawattamie County, IA", 291), + ref("IA,POWESHIEK", "Poweshiek County, IA", 291), + ref("IA,RINGGOLD", "Ringgold County, IA", 291), + ref("IA,SAC", "Sac County, IA", 291), + ref("IA,SCOTT", "Scott County, IA", 291), + ref("IA,SHELBY", "Shelby County, IA", 291), + ref("IA,SIOUX", "Sioux County, IA", 291), + ref("IA,STORY", "Story County, IA", 291), + ref("IA,TAMA", "Tama County, IA", 291), + ref("IA,TAYLOR", "Taylor County, IA", 291), + ref("IA,UNION", "Union County, IA", 291), + ref("IA,VANBUREN", "Van Buren County, IA", 291), + ref("IA,WAPELLO", "Wapello County, IA", 291), + ref("IA,WARREN", "Warren County, IA", 291), + ref("IA,WASHINGTON", "Washington County, IA", 291), + ref("IA,WAYNE", "Wayne County, IA", 291), + ref("IA,WEBSTER", "Webster County, IA", 291), + ref("IA,WINNEBAGO", "Winnebago County, IA", 291), + ref("IA,WINNESHIEK", "Winneshiek County, IA", 291), + ref("IA,WOODBURY", "Woodbury County, IA", 291), + ref("IA,WORTH", "Worth County, IA", 291), + ref("IA,WRIGHT", "Wright County, IA", 291), + ref("ID,ADA", "Ada County, ID", 291), + ref("ID,ADAMS", "Adams County, ID", 291), + ref("ID,BANNOCK", "Bannock County, ID", 291), + ref("ID,BEARLAKE", "Bear Lake County, ID", 291), + ref("ID,BENEWAH", "Benewah County, ID", 291), + ref("ID,BINGHAM", "Bingham County, ID", 291), + ref("ID,BLAINE", "Blaine County, ID", 291), + ref("ID,BOISE", "Boise County, ID", 291), + ref("ID,BONNER", "Bonner County, ID", 291), + ref("ID,BONNEVILLE", "Bonneville County, ID", 291), + ref("ID,BOUNDARY", "Boundary County, ID", 291), + ref("ID,BUTTE", "Butte County, ID", 291), + ref("ID,CAMAS", "Camas County, ID", 291), + ref("ID,CANYON", "Canyon County, ID", 291), + ref("ID,CARIBOU", "Caribou County, ID", 291), + ref("ID,CASSIA", "Cassia County, ID", 291), + ref("ID,CLARK", "Clark County, ID", 291), + ref("ID,CLEARWATER", "Clearwater County, ID", 291), + ref("ID,CUSTER", "Custer County, ID", 291), + ref("ID,ELMORE", "Elmore County, ID", 291), + ref("ID,FRANKLIN", "Franklin County, ID", 291), + ref("ID,FREMONT", "Fremont County, ID", 291), + ref("ID,GEM", "Gem County, ID", 291), + ref("ID,GOODING", "Gooding County, ID", 291), + ref("ID,IDAHO", "Idaho County, ID", 291), + ref("ID,JEFFERSON", "Jefferson County, ID", 291), + ref("ID,JEROME", "Jerome County, ID", 291), + ref("ID,KOOTENAI", "Kootenai County, ID", 291), + ref("ID,LATAH", "Latah County, ID", 291), + ref("ID,LEMHI", "Lemhi County, ID", 291), + ref("ID,LEWIS", "Lewis County, ID", 291), + ref("ID,LINCOLN", "Lincoln County, ID", 291), + ref("ID,MADISON", "Madison County, ID", 291), + ref("ID,MINIDOKA", "Minidoka County, ID", 291), + ref("ID,NEZPERCE", "Nez Perce County, ID", 291), + ref("ID,ONEIDA", "Oneida County, ID", 291), + ref("ID,OWYHEE", "Owyhee County, ID", 291), + ref("ID,PAYETTE", "Payette County, ID", 291), + ref("ID,POWER", "Power County, ID", 291), + ref("ID,SHOSHONE", "Shoshone County, ID", 291), + ref("ID,TETON", "Teton County, ID", 291), + ref("ID,TWINFALLS", "Twin Falls County, ID", 291), + ref("ID,VALLEY", "Valley County, ID", 291), + ref("ID,WASHINGTON", "Washington County, ID", 291), + ref("IL,ADAMS", "Adams County, IL", 291), + ref("IL,ALEXANDER", "Alexander County, IL", 291), + ref("IL,BOND", "Bond County, IL", 291), + ref("IL,BOONE", "Boone County, IL", 291), + ref("IL,BROWN", "Brown County, IL", 291), + ref("IL,BUREAU", "Bureau County, IL", 291), + ref("IL,CALHOUN", "Calhoun County, IL", 291), + ref("IL,CARROLL", "Carroll County, IL", 291), + ref("IL,CASS", "Cass County, IL", 291), + ref("IL,CHAMPAIGN", "Champaign County, IL", 291), + ref("IL,CHRISTIAN", "Christian County, IL", 291), + ref("IL,CLARK", "Clark County, IL", 291), + ref("IL,CLAY", "Clay County, IL", 291), + ref("IL,CLINTON", "Clinton County, IL", 291), + ref("IL,COLES", "Coles County, IL", 291), + ref("IL,COOK", "Cook County, IL", 291), + ref("IL,CRAWFORD", "Crawford County, IL", 291), + ref("IL,CUMBERLAND", "Cumberland County, IL", 291), + ref("IL,DEKALB", "DeKalb County, IL", 291), + ref("IL,DEWITT", "De Witt County, IL", 291), + ref("IL,DOUGLAS", "Douglas County, IL", 291), + ref("IL,DUPAGE", "DuPage County, IL", 291), + ref("IL,EDGAR", "Edgar County, IL", 291), + ref("IL,EDWARDS", "Edwards County, IL", 291), + ref("IL,EFFINGHAM", "Effingham County, IL", 291), + ref("IL,FAYETTE", "Fayette County, IL", 291), + ref("IL,FORD", "Ford County, IL", 291), + ref("IL,FRANKLIN", "Franklin County, IL", 291), + ref("IL,FULTON", "Fulton County, IL", 291), + ref("IL,GALLATIN", "Gallatin County, IL", 291), + ref("IL,GREENE", "Greene County, IL", 291), + ref("IL,GRUNDY", "Grundy County, IL", 291), + ref("IL,HAMILTON", "Hamilton County, IL", 291), + ref("IL,HANCOCK", "Hancock County, IL", 291), + ref("IL,HARDIN", "Hardin County, IL", 291), + ref("IL,HENDERSON", "Henderson County, IL", 291), + ref("IL,HENRY", "Henry County, IL", 291), + ref("IL,IROQUOIS", "Iroquois County, IL", 291), + ref("IL,JACKSON", "Jackson County, IL", 291), + ref("IL,JASPER", "Jasper County, IL", 291), + ref("IL,JEFFERSON", "Jefferson County, IL", 291), + ref("IL,JERSEY", "Jersey County, IL", 291), + ref("IL,JODAVIESS", "Jo Daviess County, IL", 291), + ref("IL,JOHNSON", "Johnson County, IL", 291), + ref("IL,KANE", "Kane County, IL", 291), + ref("IL,KANKAKEE", "Kankakee County, IL", 291), + ref("IL,KENDALL", "Kendall County, IL", 291), + ref("IL,KNOX", "Knox County, IL", 291), + ref("IL,LAKE", "Lake County, IL", 291), + ref("IL,LASALLE", "LaSalle County, IL", 291), + ref("IL,LAWRENCE", "Lawrence County, IL", 291), + ref("IL,LEE", "Lee County, IL", 291), + ref("IL,LIVINGSTON", "Livingston County, IL", 291), + ref("IL,LOGAN", "Logan County, IL", 291), + ref("IL,MACON", "Macon County, IL", 291), + ref("IL,MACOUPIN", "Macoupin County, IL", 291), + ref("IL,MADISON", "Madison County, IL", 291), + ref("IL,MARION", "Marion County, IL", 291), + ref("IL,MARSHALL", "Marshall County, IL", 291), + ref("IL,MASON", "Mason County, IL", 291), + ref("IL,MASSAC", "Massac County, IL", 291), + ref("IL,MCDONOUGH", "McDonough County, IL", 291), + ref("IL,MCHENRY", "McHenry County, IL", 291), + ref("IL,MCLEAN", "McLean County, IL", 291), + ref("IL,MENARD", "Menard County, IL", 291), + ref("IL,MERCER", "Mercer County, IL", 291), + ref("IL,MONROE", "Monroe County, IL", 291), + ref("IL,MONTGOMERY", "Montgomery County, IL", 291), + ref("IL,MORGAN", "Morgan County, IL", 291), + ref("IL,MOULTRIE", "Moultrie County, IL", 291), + ref("IL,OGLE", "Ogle County, IL", 291), + ref("IL,PEORIA", "Peoria County, IL", 291), + ref("IL,PERRY", "Perry County, IL", 291), + ref("IL,PIATT", "Piatt County, IL", 291), + ref("IL,PIKE", "Pike County, IL", 291), + ref("IL,POPE", "Pope County, IL", 291), + ref("IL,PULASKI", "Pulaski County, IL", 291), + ref("IL,PUTNAM", "Putnam County, IL", 291), + ref("IL,RANDOLPH", "Randolph County, IL", 291), + ref("IL,RICHLAND", "Richland County, IL", 291), + ref("IL,ROCKISLAND", "Rock Island County, IL", 291), + ref("IL,SALINE", "Saline County, IL", 291), + ref("IL,SANGAMON", "Sangamon County, IL", 291), + ref("IL,SCHUYLER", "Schuyler County, IL", 291), + ref("IL,SCOTT", "Scott County, IL", 291), + ref("IL,SHELBY", "Shelby County, IL", 291), + ref("IL,STARK", "Stark County, IL", 291), + ref("IL,STCLAIR", "St. Clair County, IL", 291), + ref("IL,STEPHENSON", "Stephenson County, IL", 291), + ref("IL,TAZEWELL", "Tazewell County, IL", 291), + ref("IL,UNION", "Union County, IL", 291), + ref("IL,VERMILION", "Vermilion County, IL", 291), + ref("IL,WABASH", "Wabash County, IL", 291), + ref("IL,WARREN", "Warren County, IL", 291), + ref("IL,WASHINGTON", "Washington County, IL", 291), + ref("IL,WAYNE", "Wayne County, IL", 291), + ref("IL,WHITE", "White County, IL", 291), + ref("IL,WHITESIDE", "Whiteside County, IL", 291), + ref("IL,WILL", "Will County, IL", 291), + ref("IL,WILLIAMSON", "Williamson County, IL", 291), + ref("IL,WINNEBAGO", "Winnebago County, IL", 291), + ref("IL,WOODFORD", "Woodford County, IL", 291), + ref("IN,ADAMS", "Adams County, IN", 291), + ref("IN,ALLEN", "Allen County, IN", 291), + ref("IN,BARTHOLOMEW", "Bartholomew County, IN", 291), + ref("IN,BENTON", "Benton County, IN", 291), + ref("IN,BLACKFORD", "Blackford County, IN", 291), + ref("IN,BOONE", "Boone County, IN", 291), + ref("IN,BROWN", "Brown County, IN", 291), + ref("IN,CARROLL", "Carroll County, IN", 291), + ref("IN,CASS", "Cass County, IN", 291), + ref("IN,CLARK", "Clark County, IN", 291), + ref("IN,CLAY", "Clay County, IN", 291), + ref("IN,CLINTON", "Clinton County, IN", 291), + ref("IN,CRAWFORD", "Crawford County, IN", 291), + ref("IN,DAVIESS", "Daviess County, IN", 291), + ref("IN,DEARBORN", "Dearborn County, IN", 291), + ref("IN,DECATUR", "Decatur County, IN", 291), + ref("IN,DEKALB", "DeKalb County, IN", 291), + ref("IN,DELAWARE", "Delaware County, IN", 291), + ref("IN,DUBOIS", "Dubois County, IN", 291), + ref("IN,ELKHART", "Elkhart County, IN", 291), + ref("IN,FAYETTE", "Fayette County, IN", 291), + ref("IN,FLOYD", "Floyd County, IN", 291), + ref("IN,FOUNTAIN", "Fountain County, IN", 291), + ref("IN,FRANKLIN", "Franklin County, IN", 291), + ref("IN,FULTON", "Fulton County, IN", 291), + ref("IN,GIBSON", "Gibson County, IN", 291), + ref("IN,GRANT", "Grant County, IN", 291), + ref("IN,GREENE", "Greene County, IN", 291), + ref("IN,HAMILTON", "Hamilton County, IN", 291), + ref("IN,HANCOCK", "Hancock County, IN", 291), + ref("IN,HARRISON", "Harrison County, IN", 291), + ref("IN,HENDRICKS", "Hendricks County, IN", 291), + ref("IN,HENRY", "Henry County, IN", 291), + ref("IN,HOWARD", "Howard County, IN", 291), + ref("IN,HUNTINGTON", "Huntington County, IN", 291), + ref("IN,JACKSON", "Jackson County, IN", 291), + ref("IN,JASPER", "Jasper County, IN", 291), + ref("IN,JAY", "Jay County, IN", 291), + ref("IN,JEFFERSON", "Jefferson County, IN", 291), + ref("IN,JENNINGS", "Jennings County, IN", 291), + ref("IN,JOHNSON", "Johnson County, IN", 291), + ref("IN,KNOX", "Knox County, IN", 291), + ref("IN,KOSCIUSKO", "Kosciusko County, IN", 291), + ref("IN,LAGRANGE", "LaGrange County, IN", 291), + ref("IN,LAKE", "Lake County, IN", 291), + ref("IN,LAPORTE", "LaPorte County, IN", 291), + ref("IN,LAWRENCE", "Lawrence County, IN", 291), + ref("IN,MADISON", "Madison County, IN", 291), + ref("IN,MARION", "Marion County, IN", 291), + ref("IN,MARSHALL", "Marshall County, IN", 291), + ref("IN,MARTIN", "Martin County, IN", 291), + ref("IN,MIAMI", "Miami County, IN", 291), + ref("IN,MONROE", "Monroe County, IN", 291), + ref("IN,MONTGOMERY", "Montgomery County, IN", 291), + ref("IN,MORGAN", "Morgan County, IN", 291), + ref("IN,NEWTON", "Newton County, IN", 291), + ref("IN,NOBLE", "Noble County, IN", 291), + ref("IN,OHIO", "Ohio County, IN", 291), + ref("IN,ORANGE", "Orange County, IN", 291), + ref("IN,OWEN", "Owen County, IN", 291), + ref("IN,PARKE", "Parke County, IN", 291), + ref("IN,PERRY", "Perry County, IN", 291), + ref("IN,PIKE", "Pike County, IN", 291), + ref("IN,PORTER", "Porter County, IN", 291), + ref("IN,POSEY", "Posey County, IN", 291), + ref("IN,PULASKI", "Pulaski County, IN", 291), + ref("IN,PUTNAM", "Putnam County, IN", 291), + ref("IN,RANDOLPH", "Randolph County, IN", 291), + ref("IN,RIPLEY", "Ripley County, IN", 291), + ref("IN,RUSH", "Rush County, IN", 291), + ref("IN,SCOTT", "Scott County, IN", 291), + ref("IN,SHELBY", "Shelby County, IN", 291), + ref("IN,SPENCER", "Spencer County, IN", 291), + ref("IN,STARKE", "Starke County, IN", 291), + ref("IN,STEUBEN", "Steuben County, IN", 291), + ref("IN,STJOSEPH", "St. Joseph County, IN", 291), + ref("IN,SULLIVAN", "Sullivan County, IN", 291), + ref("IN,SWITZERLAND", "Switzerland County, IN", 291), + ref("IN,TIPPECANOE", "Tippecanoe County, IN", 291), + ref("IN,TIPTON", "Tipton County, IN", 291), + ref("IN,UNION", "Union County, IN", 291), + ref("IN,VANDERBURGH", "Vanderburgh County, IN", 291), + ref("IN,VERMILLION", "Vermillion County, IN", 291), + ref("IN,VIGO", "Vigo County, IN", 291), + ref("IN,WABASH", "Wabash County, IN", 291), + ref("IN,WARREN", "Warren County, IN", 291), + ref("IN,WARRICK", "Warrick County, IN", 291), + ref("IN,WASHINGTON", "Washington County, IN", 291), + ref("IN,WAYNE", "Wayne County, IN", 291), + ref("IN,WELLS", "Wells County, IN", 291), + ref("IN,WHITE", "White County, IN", 291), + ref("IN,WHITLEY", "Whitley County, IN", 291), + ref("KS,ALLEN", "Allen County, KS", 291), + ref("KS,ANDERSON", "Anderson County, KS", 291), + ref("KS,ATCHISON", "Atchison County, KS", 291), + ref("KS,BARBER", "Barber County, KS", 291), + ref("KS,BARTON", "Barton County, KS", 291), + ref("KS,BOURBON", "Bourbon County, KS", 291), + ref("KS,BROWN", "Brown County, KS", 291), + ref("KS,BUTLER", "Butler County, KS", 291), + ref("KS,CHASE", "Chase County, KS", 291), + ref("KS,CHAUTAUQUA", "Chautauqua County, KS", 291), + ref("KS,CHEROKEE", "Cherokee County, KS", 291), + ref("KS,CHEYENNE", "Cheyenne County, KS", 291), + ref("KS,CLARK", "Clark County, KS", 291), + ref("KS,CLAY", "Clay County, KS", 291), + ref("KS,CLOUD", "Cloud County, KS", 291), + ref("KS,COFFEY", "Coffey County, KS", 291), + ref("KS,COMANCHE", "Comanche County, KS", 291), + ref("KS,COWLEY", "Cowley County, KS", 291), + ref("KS,CRAWFORD", "Crawford County, KS", 291), + ref("KS,DECATUR", "Decatur County, KS", 291), + ref("KS,DICKINSON", "Dickinson County, KS", 291), + ref("KS,DONIPHAN", "Doniphan County, KS", 291), + ref("KS,DOUGLAS", "Douglas County, KS", 291), + ref("KS,EDWARDS", "Edwards County, KS", 291), + ref("KS,ELK", "Elk County, KS", 291), + ref("KS,ELLIS", "Ellis County, KS", 291), + ref("KS,ELLSWORTH", "Ellsworth County, KS", 291), + ref("KS,FINNEY", "Finney County, KS", 291), + ref("KS,FORD", "Ford County, KS", 291), + ref("KS,FRANKLIN", "Franklin County, KS", 291), + ref("KS,GEARY", "Geary County, KS", 291), + ref("KS,GOVE", "Gove County, KS", 291), + ref("KS,GRAHAM", "Graham County, KS", 291), + ref("KS,GRANT", "Grant County, KS", 291), + ref("KS,GRAY", "Gray County, KS", 291), + ref("KS,GREELEY", "Greeley County, KS", 291), + ref("KS,GREENWOOD", "Greenwood County, KS", 291), + ref("KS,HAMILTON", "Hamilton County, KS", 291), + ref("KS,HARPER", "Harper County, KS", 291), + ref("KS,HARVEY", "Harvey County, KS", 291), + ref("KS,HASKELL", "Haskell County, KS", 291), + ref("KS,HODGEMAN", "Hodgeman County, KS", 291), + ref("KS,JACKSON", "Jackson County, KS", 291), + ref("KS,JEFFERSON", "Jefferson County, KS", 291), + ref("KS,JEWELL", "Jewell County, KS", 291), + ref("KS,JOHNSON", "Johnson County, KS", 291), + ref("KS,KEARNY", "Kearny County, KS", 291), + ref("KS,KINGMAN", "Kingman County, KS", 291), + ref("KS,KIOWA", "Kiowa County, KS", 291), + ref("KS,LABETTE", "Labette County, KS", 291), + ref("KS,LANE", "Lane County, KS", 291), + ref("KS,LEAVENWORTH", "Leavenworth County, KS", 291), + ref("KS,LINCOLN", "Lincoln County, KS", 291), + ref("KS,LINN", "Linn County, KS", 291), + ref("KS,LOGAN", "Logan County, KS", 291), + ref("KS,LYON", "Lyon County, KS", 291), + ref("KS,MARION", "Marion County, KS", 291), + ref("KS,MARSHALL", "Marshall County, KS", 291), + ref("KS,MCPHERSON", "McPherson County, KS", 291), + ref("KS,MEADE", "Meade County, KS", 291), + ref("KS,MIAMI", "Miami County, KS", 291), + ref("KS,MITCHELL", "Mitchell County, KS", 291), + ref("KS,MONTGOMERY", "Montgomery County, KS", 291), + ref("KS,MORRIS", "Morris County, KS", 291), + ref("KS,MORTON", "Morton County, KS", 291), + ref("KS,NEMAHA", "Nemaha County, KS", 291), + ref("KS,NEOSHO", "Neosho County, KS", 291), + ref("KS,NESS", "Ness County, KS", 291), + ref("KS,NORTON", "Norton County, KS", 291), + ref("KS,OSAGE", "Osage County, KS", 291), + ref("KS,OSBORNE", "Osborne County, KS", 291), + ref("KS,OTTAWA", "Ottawa County, KS", 291), + ref("KS,PAWNEE", "Pawnee County, KS", 291), + ref("KS,PHILLIPS", "Phillips County, KS", 291), + ref("KS,POTTAWATOMIE", "Pottawatomie County, KS", 291), + ref("KS,PRATT", "Pratt County, KS", 291), + ref("KS,RAWLINS", "Rawlins County, KS", 291), + ref("KS,RENO", "Reno County, KS", 291), + ref("KS,REPUBLIC", "Republic County, KS", 291), + ref("KS,RICE", "Rice County, KS", 291), + ref("KS,RILEY", "Riley County, KS", 291), + ref("KS,ROOKS", "Rooks County, KS", 291), + ref("KS,RUSH", "Rush County, KS", 291), + ref("KS,RUSSELL", "Russell County, KS", 291), + ref("KS,SALINE", "Saline County, KS", 291), + ref("KS,SCOTT", "Scott County, KS", 291), + ref("KS,SEDGWICK", "Sedgwick County, KS", 291), + ref("KS,SEWARD", "Seward County, KS", 291), + ref("KS,SHAWNEE", "Shawnee County, KS", 291), + ref("KS,SHERIDAN", "Sheridan County, KS", 291), + ref("KS,SHERMAN", "Sherman County, KS", 291), + ref("KS,SMITH", "Smith County, KS", 291), + ref("KS,STAFFORD", "Stafford County, KS", 291), + ref("KS,STANTON", "Stanton County, KS", 291), + ref("KS,STEVENS", "Stevens County, KS", 291), + ref("KS,SUMNER", "Sumner County, KS", 291), + ref("KS,THOMAS", "Thomas County, KS", 291), + ref("KS,TREGO", "Trego County, KS", 291), + ref("KS,WABAUNSEE", "Wabaunsee County, KS", 291), + ref("KS,WALLACE", "Wallace County, KS", 291), + ref("KS,WASHINGTON", "Washington County, KS", 291), + ref("KS,WICHITA", "Wichita County, KS", 291), + ref("KS,WILSON", "Wilson County, KS", 291), + ref("KS,WOODSON", "Woodson County, KS", 291), + ref("KS,WYANDOTTE", "Wyandotte County, KS", 291), + ref("KY,ADAIR", "Adair County, KY", 291), + ref("KY,ALLEN", "Allen County, KY", 291), + ref("KY,ANDERSON", "Anderson County, KY", 291), + ref("KY,BALLARD", "Ballard County, KY", 291), + ref("KY,BARREN", "Barren County, KY", 291), + ref("KY,BATH", "Bath County, KY", 291), + ref("KY,BELL", "Bell County, KY", 291), + ref("KY,BOONE", "Boone County, KY", 291), + ref("KY,BOURBON", "Bourbon County, KY", 291), + ref("KY,BOYD", "Boyd County, KY", 291), + ref("KY,BOYLE", "Boyle County, KY", 291), + ref("KY,BRACKEN", "Bracken County, KY", 291), + ref("KY,BREATHITT", "Breathitt County, KY", 291), + ref("KY,BRECKINRIDGE", "Breckinridge County, KY", 291), + ref("KY,BULLITT", "Bullitt County, KY", 291), + ref("KY,BUTLER", "Butler County, KY", 291), + ref("KY,CALDWELL", "Caldwell County, KY", 291), + ref("KY,CALLOWAY", "Calloway County, KY", 291), + ref("KY,CAMPBELL", "Campbell County, KY", 291), + ref("KY,CARLISLE", "Carlisle County, KY", 291), + ref("KY,CARROLL", "Carroll County, KY", 291), + ref("KY,CARTER", "Carter County, KY", 291), + ref("KY,CASEY", "Casey County, KY", 291), + ref("KY,CHRISTIAN", "Christian County, KY", 291), + ref("KY,CLARK", "Clark County, KY", 291), + ref("KY,CLAY", "Clay County, KY", 291), + ref("KY,CLINTON", "Clinton County, KY", 291), + ref("KY,CRITTENDEN", "Crittenden County, KY", 291), + ref("KY,CUMBERLAND", "Cumberland County, KY", 291), + ref("KY,DAVIESS", "Daviess County, KY", 291), + ref("KY,EDMONSON", "Edmonson County, KY", 291), + ref("KY,ELLIOTT", "Elliott County, KY", 291), + ref("KY,ESTILL", "Estill County, KY", 291), + ref("KY,FAYETTE", "Fayette County, KY", 291), + ref("KY,FLEMING", "Fleming County, KY", 291), + ref("KY,FLOYD", "Floyd County, KY", 291), + ref("KY,FRANKLIN", "Franklin County, KY", 291), + ref("KY,FULTON", "Fulton County, KY", 291), + ref("KY,GALLATIN", "Gallatin County, KY", 291), + ref("KY,GARRARD", "Garrard County, KY", 291), + ref("KY,GRANT", "Grant County, KY", 291), + ref("KY,GRAVES", "Graves County, KY", 291), + ref("KY,GRAYSON", "Grayson County, KY", 291), + ref("KY,GREEN", "Green County, KY", 291), + ref("KY,GREENUP", "Greenup County, KY", 291), + ref("KY,HANCOCK", "Hancock County, KY", 291), + ref("KY,HARDIN", "Hardin County, KY", 291), + ref("KY,HARLAN", "Harlan County, KY", 291), + ref("KY,HARRISON", "Harrison County, KY", 291), + ref("KY,HART", "Hart County, KY", 291), + ref("KY,HENDERSON", "Henderson County, KY", 291), + ref("KY,HENRY", "Henry County, KY", 291), + ref("KY,HICKMAN", "Hickman County, KY", 291), + ref("KY,HOPKINS", "Hopkins County, KY", 291), + ref("KY,JACKSON", "Jackson County, KY", 291), + ref("KY,JEFFERSON", "Jefferson County, KY", 291), + ref("KY,JESSAMINE", "Jessamine County, KY", 291), + ref("KY,JOHNSON", "Johnson County, KY", 291), + ref("KY,KENTON", "Kenton County, KY", 291), + ref("KY,KNOTT", "Knott County, KY", 291), + ref("KY,KNOX", "Knox County, KY", 291), + ref("KY,LARUE", "Larue County, KY", 291), + ref("KY,LAUREL", "Laurel County, KY", 291), + ref("KY,LAWRENCE", "Lawrence County, KY", 291), + ref("KY,LEE", "Lee County, KY", 291), + ref("KY,LESLIE", "Leslie County, KY", 291), + ref("KY,LETCHER", "Letcher County, KY", 291), + ref("KY,LEWIS", "Lewis County, KY", 291), + ref("KY,LINCOLN", "Lincoln County, KY", 291), + ref("KY,LIVINGSTON", "Livingston County, KY", 291), + ref("KY,LOGAN", "Logan County, KY", 291), + ref("KY,LYON", "Lyon County, KY", 291), + ref("KY,MADISON", "Madison County, KY", 291), + ref("KY,MAGOFFIN", "Magoffin County, KY", 291), + ref("KY,MARION", "Marion County, KY", 291), + ref("KY,MARSHALL", "Marshall County, KY", 291), + ref("KY,MARTIN", "Martin County, KY", 291), + ref("KY,MASON", "Mason County, KY", 291), + ref("KY,MCCRACKEN", "McCracken County, KY", 291), + ref("KY,MCCREARY", "McCreary County, KY", 291), + ref("KY,MCLEAN", "McLean County, KY", 291), + ref("KY,MEADE", "Meade County, KY", 291), + ref("KY,MENIFEE", "Menifee County, KY", 291), + ref("KY,MERCER", "Mercer County, KY", 291), + ref("KY,METCALFE", "Metcalfe County, KY", 291), + ref("KY,MONROE", "Monroe County, KY", 291), + ref("KY,MONTGOMERY", "Montgomery County, KY", 291), + ref("KY,MORGAN", "Morgan County, KY", 291), + ref("KY,MUHLENBERG", "Muhlenberg County, KY", 291), + ref("KY,NELSON", "Nelson County, KY", 291), + ref("KY,NICHOLAS", "Nicholas County, KY", 291), + ref("KY,OHIO", "Ohio County, KY", 291), + ref("KY,OLDHAM", "Oldham County, KY", 291), + ref("KY,OWEN", "Owen County, KY", 291), + ref("KY,OWSLEY", "Owsley County, KY", 291), + ref("KY,PENDLETON", "Pendleton County, KY", 291), + ref("KY,PERRY", "Perry County, KY", 291), + ref("KY,PIKE", "Pike County, KY", 291), + ref("KY,POWELL", "Powell County, KY", 291), + ref("KY,PULASKI", "Pulaski County, KY", 291), + ref("KY,ROBERTSON", "Robertson County, KY", 291), + ref("KY,ROCKCASTLE", "Rockcastle County, KY", 291), + ref("KY,ROWAN", "Rowan County, KY", 291), + ref("KY,RUSSELL", "Russell County, KY", 291), + ref("KY,SCOTT", "Scott County, KY", 291), + ref("KY,SHELBY", "Shelby County, KY", 291), + ref("KY,SIMPSON", "Simpson County, KY", 291), + ref("KY,SPENCER", "Spencer County, KY", 291), + ref("KY,TAYLOR", "Taylor County, KY", 291), + ref("KY,TODD", "Todd County, KY", 291), + ref("KY,TRIGG", "Trigg County, KY", 291), + ref("KY,TRIMBLE", "Trimble County, KY", 291), + ref("KY,UNION", "Union County, KY", 291), + ref("KY,WARREN", "Warren County, KY", 291), + ref("KY,WASHINGTON", "Washington County, KY", 291), + ref("KY,WAYNE", "Wayne County, KY", 291), + ref("KY,WEBSTER", "Webster County, KY", 291), + ref("KY,WHITLEY", "Whitley County, KY", 291), + ref("KY,WOLFE", "Wolfe County, KY", 291), + ref("KY,WOODFORD", "Woodford County, KY", 291), + ref("LA,ACADIA", "Acadia Parish, LA", 291), + ref("LA,ALLEN", "Allen Parish, LA", 291), + ref("LA,ASCENSION", "Ascension Parish, LA", 291), + ref("LA,ASSUMPTION", "Assumption Parish, LA", 291), + ref("LA,AVOYELLES", "Avoyelles Parish, LA", 291), + ref("LA,BEAUREGARD", "Beauregard Parish, LA", 291), + ref("LA,BIENVILLE", "Bienville Parish, LA", 291), + ref("LA,BOSSIER", "Bossier Parish, LA", 291), + ref("LA,CADDO", "Caddo Parish, LA", 291), + ref("LA,CALCASIEU", "Calcasieu Parish, LA", 291), + ref("LA,CALDWELL", "Caldwell Parish, LA", 291), + ref("LA,CAMERON", "Cameron Parish, LA", 291), + ref("LA,CATAHOULA", "Catahoula Parish, LA", 291), + ref("LA,CLAIBORNE", "Claiborne Parish, LA", 291), + ref("LA,CONCORDIA", "Concordia Parish, LA", 291), + ref("LA,DESOTO", "De Soto Parish, LA", 291), + ref("LA,EASTBATONROUGE", "East Baton Rouge Parish, LA", 291), + ref("LA,EASTCARROLL", "East Carroll Parish, LA", 291), + ref("LA,EASTFELICIANA", "East Feliciana Parish, LA", 291), + ref("LA,EVANGELINE", "Evangeline Parish, LA", 291), + ref("LA,FRANKLIN", "Franklin Parish, LA", 291), + ref("LA,GRANT", "Grant Parish, LA", 291), + ref("LA,IBERIA", "Iberia Parish, LA", 291), + ref("LA,IBERVILLE", "Iberville Parish, LA", 291), + ref("LA,JACKSON", "Jackson Parish, LA", 291), + ref("LA,JEFFERSON", "Jefferson Parish, LA", 291), + ref("LA,JEFFERSONDAVIS", "Jefferson Davis Parish, LA", 291), + ref("LA,LAFAYETTE", "Lafayette Parish, LA", 291), + ref("LA,LAFOURCHE", "Lafourche Parish, LA", 291), + ref("LA,LASALLE", "La Salle Parish, LA", 291), + ref("LA,LINCOLN", "Lincoln Parish, LA", 291), + ref("LA,LIVINGSTON", "Livingston Parish, LA", 291), + ref("LA,MADISON", "Madison Parish, LA", 291), + ref("LA,MOREHOUSE", "Morehouse Parish, LA", 291), + ref("LA,NATCHITOCHES", "Natchitoches Parish, LA", 291), + ref("LA,ORLEANS", "Orleans Parish, LA", 291), + ref("LA,OUACHITA", "Ouachita Parish, LA", 291), + ref("LA,PLAQUEMINES", "Plaquemines Parish, LA", 291), + ref("LA,POINTECOUPEE", "Pointe Coupee Parish, LA", 291), + ref("LA,RAPIDES", "Rapides Parish, LA", 291), + ref("LA,REDRIVER", "Red River Parish, LA", 291), + ref("LA,RICHLAND", "Richland Parish, LA", 291), + ref("LA,SABINE", "Sabine Parish, LA", 291), + ref("LA,STBERNARD", "St. Bernard Parish, LA", 291), + ref("LA,STCHARLES", "St. Charles Parish, LA", 291), + ref("LA,STHELENA", "St. Helena Parish, LA", 291), + ref("LA,STJAMES", "St. James Parish, LA", 291), + ref("LA,STJOHNTHEBAPTIST", "St. John the Baptist Parish, LA", 291), + ref("LA,STLANDRY", "St. Landry Parish, LA", 291), + ref("LA,STMARTIN", "St. Martin Parish, LA", 291), + ref("LA,STMARY", "St. Mary Parish, LA", 291), + ref("LA,STTAMMANY", "St. Tammany Parish, LA", 291), + ref("LA,TANGIPAHOA", "Tangipahoa Parish, LA", 291), + ref("LA,TENSAS", "Tensas Parish, LA", 291), + ref("LA,TERREBONNE", "Terrebonne Parish, LA", 291), + ref("LA,UNION", "Union Parish, LA", 291), + ref("LA,VERMILION", "Vermilion Parish, LA", 291), + ref("LA,VERNON", "Vernon Parish, LA", 291), + ref("LA,WASHINGTON", "Washington Parish, LA", 291), + ref("LA,WEBSTER", "Webster Parish, LA", 291), + ref("LA,WESTBATONROUGE", "West Baton Rouge Parish, LA", 291), + ref("LA,WESTCARROLL", "West Carroll Parish, LA", 291), + ref("LA,WESTFELICIANA", "West Feliciana Parish, LA", 291), + ref("LA,WINN", "Winn Parish, LA", 291), + ref("MA,BARNSTABLE", "Barnstable County, MA", 291), + ref("MA,BERKSHIRE", "Berkshire County, MA", 291), + ref("MA,BRISTOL", "Bristol County, MA", 291), + ref("MA,DUKES", "Dukes County, MA", 291), + ref("MA,ESSEX", "Essex County, MA", 291), + ref("MA,FRANKLIN", "Franklin County, MA", 291), + ref("MA,HAMPDEN", "Hampden County, MA", 291), + ref("MA,HAMPSHIRE", "Hampshire County, MA", 291), + ref("MA,MIDDLESEX", "Middlesex County, MA", 291), + ref("MA,NANTUCKET", "Nantucket County, MA", 291), + ref("MA,NORFOLK", "Norfolk County, MA", 291), + ref("MA,PLYMOUTH", "Plymouth County, MA", 291), + ref("MA,SUFFOLK", "Suffolk County, MA", 291), + ref("MA,WORCESTER", "Worcester County, MA", 291), + ref("MD,ALLEGANY", "Allegany County, MD", 291), + ref("MD,ANNEARUNDEL", "Anne Arundel County, MD", 291), + ref("MD,BALTIMORE", "Baltimore County, MD", 291), + ref("MD,BALTIMORECITY", "Baltimore city, MD", 291), + ref("MD,CALVERT", "Calvert County, MD", 291), + ref("MD,CAROLINE", "Caroline County, MD", 291), + ref("MD,CARROLL", "Carroll County, MD", 291), + ref("MD,CECIL", "Cecil County, MD", 291), + ref("MD,CHARLES", "Charles County, MD", 291), + ref("MD,DORCHESTER", "Dorchester County, MD", 291), + ref("MD,FREDERICK", "Frederick County, MD", 291), + ref("MD,GARRETT", "Garrett County, MD", 291), + ref("MD,HARFORD", "Harford County, MD", 291), + ref("MD,HOWARD", "Howard County, MD", 291), + ref("MD,KENT", "Kent County, MD", 291), + ref("MD,MONTGOMERY", "Montgomery County, MD", 291), + ref("MD,PRINCEGEORGES", "Prince George's County, MD", 291), + ref("MD,QUEENANNES", "Queen Anne's County, MD", 291), + ref("MD,SOMERSET", "Somerset County, MD", 291), + ref("MD,STMARYS", "St. Mary's County, MD", 291), + ref("MD,TALBOT", "Talbot County, MD", 291), + ref("MD,WASHINGTON", "Washington County, MD", 291), + ref("MD,WICOMICO", "Wicomico County, MD", 291), + ref("MD,WORCESTER", "Worcester County, MD", 291), + ref("ME,ANDROSCOGGIN", "Androscoggin County, ME", 291), + ref("ME,AROOSTOOK", "Aroostook County, ME", 291), + ref("ME,CUMBERLAND", "Cumberland County, ME", 291), + ref("ME,FRANKLIN", "Franklin County, ME", 291), + ref("ME,HANCOCK", "Hancock County, ME", 291), + ref("ME,KENNEBEC", "Kennebec County, ME", 291), + ref("ME,KNOX", "Knox County, ME", 291), + ref("ME,LINCOLN", "Lincoln County, ME", 291), + ref("ME,OXFORD", "Oxford County, ME", 291), + ref("ME,PENOBSCOT", "Penobscot County, ME", 291), + ref("ME,PISCATAQUIS", "Piscataquis County, ME", 291), + ref("ME,SAGADAHOC", "Sagadahoc County, ME", 291), + ref("ME,SOMERSET", "Somerset County, ME", 291), + ref("ME,WALDO", "Waldo County, ME", 291), + ref("ME,WASHINGTON", "Washington County, ME", 291), + ref("ME,YORK", "York County, ME", 291), + ref("MI,ALCONA", "Alcona County, MI", 291), + ref("MI,ALGER", "Alger County, MI", 291), + ref("MI,ALLEGAN", "Allegan County, MI", 291), + ref("MI,ALPENA", "Alpena County, MI", 291), + ref("MI,ANTRIM", "Antrim County, MI", 291), + ref("MI,ARENAC", "Arenac County, MI", 291), + ref("MI,BARAGA", "Baraga County, MI", 291), + ref("MI,BARRY", "Barry County, MI", 291), + ref("MI,BAY", "Bay County, MI", 291), + ref("MI,BENZIE", "Benzie County, MI", 291), + ref("MI,BERRIEN", "Berrien County, MI", 291), + ref("MI,BRANCH", "Branch County, MI", 291), + ref("MI,CALHOUN", "Calhoun County, MI", 291), + ref("MI,CASS", "Cass County, MI", 291), + ref("MI,CHARLEVOIX", "Charlevoix County, MI", 291), + ref("MI,CHEBOYGAN", "Cheboygan County, MI", 291), + ref("MI,CHIPPEWA", "Chippewa County, MI", 291), + ref("MI,CLARE", "Clare County, MI", 291), + ref("MI,CLINTON", "Clinton County, MI", 291), + ref("MI,CRAWFORD", "Crawford County, MI", 291), + ref("MI,DELTA", "Delta County, MI", 291), + ref("MI,DICKINSON", "Dickinson County, MI", 291), + ref("MI,EATON", "Eaton County, MI", 291), + ref("MI,EMMET", "Emmet County, MI", 291), + ref("MI,GENESEE", "Genesee County, MI", 291), + ref("MI,GLADWIN", "Gladwin County, MI", 291), + ref("MI,GOGEBIC", "Gogebic County, MI", 291), + ref("MI,GRANDTRAVERSE", "Grand Traverse County, MI", 291), + ref("MI,GRATIOT", "Gratiot County, MI", 291), + ref("MI,HILLSDALE", "Hillsdale County, MI", 291), + ref("MI,HOUGHTON", "Houghton County, MI", 291), + ref("MI,HURON", "Huron County, MI", 291), + ref("MI,INGHAM", "Ingham County, MI", 291), + ref("MI,IONIA", "Ionia County, MI", 291), + ref("MI,IOSCO", "Iosco County, MI", 291), + ref("MI,IRON", "Iron County, MI", 291), + ref("MI,ISABELLA", "Isabella County, MI", 291), + ref("MI,JACKSON", "Jackson County, MI", 291), + ref("MI,KALAMAZOO", "Kalamazoo County, MI", 291), + ref("MI,KALKASKA", "Kalkaska County, MI", 291), + ref("MI,KENT", "Kent County, MI", 291), + ref("MI,KEWEENAW", "Keweenaw County, MI", 291), + ref("MI,LAKE", "Lake County, MI", 291), + ref("MI,LAPEER", "Lapeer County, MI", 291), + ref("MI,LEELANAU", "Leelanau County, MI", 291), + ref("MI,LENAWEE", "Lenawee County, MI", 291), + ref("MI,LIVINGSTON", "Livingston County, MI", 291), + ref("MI,LUCE", "Luce County, MI", 291), + ref("MI,MACKINAC", "Mackinac County, MI", 291), + ref("MI,MACOMB", "Macomb County, MI", 291), + ref("MI,MANISTEE", "Manistee County, MI", 291), + ref("MI,MARQUETTE", "Marquette County, MI", 291), + ref("MI,MASON", "Mason County, MI", 291), + ref("MI,MECOSTA", "Mecosta County, MI", 291), + ref("MI,MENOMINEE", "Menominee County, MI", 291), + ref("MI,MIDLAND", "Midland County, MI", 291), + ref("MI,MISSAUKEE", "Missaukee County, MI", 291), + ref("MI,MONROE", "Monroe County, MI", 291), + ref("MI,MONTCALM", "Montcalm County, MI", 291), + ref("MI,MONTMORENCY", "Montmorency County, MI", 291), + ref("MI,MUSKEGON", "Muskegon County, MI", 291), + ref("MI,NEWAYGO", "Newaygo County, MI", 291), + ref("MI,OAKLAND", "Oakland County, MI", 291), + ref("MI,OCEANA", "Oceana County, MI", 291), + ref("MI,OGEMAW", "Ogemaw County, MI", 291), + ref("MI,ONTONAGON", "Ontonagon County, MI", 291), + ref("MI,OSCEOLA", "Osceola County, MI", 291), + ref("MI,OSCODA", "Oscoda County, MI", 291), + ref("MI,OTSEGO", "Otsego County, MI", 291), + ref("MI,OTTAWA", "Ottawa County, MI", 291), + ref("MI,PRESQUEISLE", "Presque Isle County, MI", 291), + ref("MI,ROSCOMMON", "Roscommon County, MI", 291), + ref("MI,SAGINAW", "Saginaw County, MI", 291), + ref("MI,SANILAC", "Sanilac County, MI", 291), + ref("MI,SCHOOLCRAFT", "Schoolcraft County, MI", 291), + ref("MI,SHIAWASSEE", "Shiawassee County, MI", 291), + ref("MI,STCLAIR", "St. Clair County, MI", 291), + ref("MI,STJOSEPH", "St. Joseph County, MI", 291), + ref("MI,TUSCOLA", "Tuscola County, MI", 291), + ref("MI,VANBUREN", "Van Buren County, MI", 291), + ref("MI,WASHTENAW", "Washtenaw County, MI", 291), + ref("MI,WAYNE", "Wayne County, MI", 291), + ref("MI,WEXFORD", "Wexford County, MI", 291), + ref("MN,AITKIN", "Aitkin County, MN", 291), + ref("MN,ANOKA", "Anoka County, MN", 291), + ref("MN,BECKER", "Becker County, MN", 291), + ref("MN,BELTRAMI", "Beltrami County, MN", 291), + ref("MN,BENTON", "Benton County, MN", 291), + ref("MN,BIGSTONE", "Big Stone County, MN", 291), + ref("MN,BLUEEARTH", "Blue Earth County, MN", 291), + ref("MN,BROWN", "Brown County, MN", 291), + ref("MN,CARLTON", "Carlton County, MN", 291), + ref("MN,CARVER", "Carver County, MN", 291), + ref("MN,CASS", "Cass County, MN", 291), + ref("MN,CHIPPEWA", "Chippewa County, MN", 291), + ref("MN,CHISAGO", "Chisago County, MN", 291), + ref("MN,CLAY", "Clay County, MN", 291), + ref("MN,CLEARWATER", "Clearwater County, MN", 291), + ref("MN,COOK", "Cook County, MN", 291), + ref("MN,COTTONWOOD", "Cottonwood County, MN", 291), + ref("MN,CROWWING", "Crow Wing County, MN", 291), + ref("MN,DAKOTA", "Dakota County, MN", 291), + ref("MN,DODGE", "Dodge County, MN", 291), + ref("MN,DOUGLAS", "Douglas County, MN", 291), + ref("MN,FARIBAULT", "Faribault County, MN", 291), + ref("MN,FILLMORE", "Fillmore County, MN", 291), + ref("MN,FREEBORN", "Freeborn County, MN", 291), + ref("MN,GOODHUE", "Goodhue County, MN", 291), + ref("MN,GRANT", "Grant County, MN", 291), + ref("MN,HENNEPIN", "Hennepin County, MN", 291), + ref("MN,HOUSTON", "Houston County, MN", 291), + ref("MN,HUBBARD", "Hubbard County, MN", 291), + ref("MN,ISANTI", "Isanti County, MN", 291), + ref("MN,ITASCA", "Itasca County, MN", 291), + ref("MN,JACKSON", "Jackson County, MN", 291), + ref("MN,KANABEC", "Kanabec County, MN", 291), + ref("MN,KANDIYOHI", "Kandiyohi County, MN", 291), + ref("MN,KITTSON", "Kittson County, MN", 291), + ref("MN,KOOCHICHING", "Koochiching County, MN", 291), + ref("MN,LACQUIPARLE", "Lac qui Parle County, MN", 291), + ref("MN,LAKE", "Lake County, MN", 291), + ref("MN,LAKEOFTHEWOODS", "Lake of the Woods County, MN", 291), + ref("MN,LESUEUR", "Le Sueur County, MN", 291), + ref("MN,LINCOLN", "Lincoln County, MN", 291), + ref("MN,LYON", "Lyon County, MN", 291), + ref("MN,MAHNOMEN", "Mahnomen County, MN", 291), + ref("MN,MARSHALL", "Marshall County, MN", 291), + ref("MN,MARTIN", "Martin County, MN", 291), + ref("MN,MCLEOD", "McLeod County, MN", 291), + ref("MN,MEEKER", "Meeker County, MN", 291), + ref("MN,MILLELACS", "Mille Lacs County, MN", 291), + ref("MN,MORRISON", "Morrison County, MN", 291), + ref("MN,MOWER", "Mower County, MN", 291), + ref("MN,MURRAY", "Murray County, MN", 291), + ref("MN,NICOLLET", "Nicollet County, MN", 291), + ref("MN,NOBLES", "Nobles County, MN", 291), + ref("MN,NORMAN", "Norman County, MN", 291), + ref("MN,OLMSTED", "Olmsted County, MN", 291), + ref("MN,OTTERTAIL", "Otter Tail County, MN", 291), + ref("MN,PENNINGTON", "Pennington County, MN", 291), + ref("MN,PINE", "Pine County, MN", 291), + ref("MN,PIPESTONE", "Pipestone County, MN", 291), + ref("MN,POLK", "Polk County, MN", 291), + ref("MN,POPE", "Pope County, MN", 291), + ref("MN,RAMSEY", "Ramsey County, MN", 291), + ref("MN,REDLAKE", "Red Lake County, MN", 291), + ref("MN,REDWOOD", "Redwood County, MN", 291), + ref("MN,RENVILLE", "Renville County, MN", 291), + ref("MN,RICE", "Rice County, MN", 291), + ref("MN,ROCK", "Rock County, MN", 291), + ref("MN,ROSEAU", "Roseau County, MN", 291), + ref("MN,SCOTT", "Scott County, MN", 291), + ref("MN,SHERBURNE", "Sherburne County, MN", 291), + ref("MN,SIBLEY", "Sibley County, MN", 291), + ref("MN,STEARNS", "Stearns County, MN", 291), + ref("MN,STEELE", "Steele County, MN", 291), + ref("MN,STEVENS", "Stevens County, MN", 291), + ref("MN,STLOUIS", "St. Louis County, MN", 291), + ref("MN,SWIFT", "Swift County, MN", 291), + ref("MN,TODD", "Todd County, MN", 291), + ref("MN,TRAVERSE", "Traverse County, MN", 291), + ref("MN,WABASHA", "Wabasha County, MN", 291), + ref("MN,WADENA", "Wadena County, MN", 291), + ref("MN,WASECA", "Waseca County, MN", 291), + ref("MN,WASHINGTON", "Washington County, MN", 291), + ref("MN,WATONWAN", "Watonwan County, MN", 291), + ref("MN,WILKIN", "Wilkin County, MN", 291), + ref("MN,WINONA", "Winona County, MN", 291), + ref("MN,WRIGHT", "Wright County, MN", 291), + ref("MN,YELLOWMEDICINE", "Yellow Medicine County, MN", 291), + ref("MO,ADAIR", "Adair County, MO", 291), + ref("MO,ANDREW", "Andrew County, MO", 291), + ref("MO,ATCHISON", "Atchison County, MO", 291), + ref("MO,AUDRAIN", "Audrain County, MO", 291), + ref("MO,BARRY", "Barry County, MO", 291), + ref("MO,BARTON", "Barton County, MO", 291), + ref("MO,BATES", "Bates County, MO", 291), + ref("MO,BENTON", "Benton County, MO", 291), + ref("MO,BOLLINGER", "Bollinger County, MO", 291), + ref("MO,BOONE", "Boone County, MO", 291), + ref("MO,BUCHANAN", "Buchanan County, MO", 291), + ref("MO,BUTLER", "Butler County, MO", 291), + ref("MO,CALDWELL", "Caldwell County, MO", 291), + ref("MO,CALLAWAY", "Callaway County, MO", 291), + ref("MO,CAMDEN", "Camden County, MO", 291), + ref("MO,CAPEGIRARDEAU", "Cape Girardeau County, MO", 291), + ref("MO,CARROLL", "Carroll County, MO", 291), + ref("MO,CARTER", "Carter County, MO", 291), + ref("MO,CASS", "Cass County, MO", 291), + ref("MO,CEDAR", "Cedar County, MO", 291), + ref("MO,CHARITON", "Chariton County, MO", 291), + ref("MO,CHRISTIAN", "Christian County, MO", 291), + ref("MO,CLARK", "Clark County, MO", 291), + ref("MO,CLAY", "Clay County, MO", 291), + ref("MO,CLINTON", "Clinton County, MO", 291), + ref("MO,COLE", "Cole County, MO", 291), + ref("MO,COOPER", "Cooper County, MO", 291), + ref("MO,CRAWFORD", "Crawford County, MO", 291), + ref("MO,DADE", "Dade County, MO", 291), + ref("MO,DALLAS", "Dallas County, MO", 291), + ref("MO,DAVIESS", "Daviess County, MO", 291), + ref("MO,DEKALB", "DeKalb County, MO", 291), + ref("MO,DENT", "Dent County, MO", 291), + ref("MO,DOUGLAS", "Douglas County, MO", 291), + ref("MO,DUNKLIN", "Dunklin County, MO", 291), + ref("MO,FRANKLIN", "Franklin County, MO", 291), + ref("MO,GASCONADE", "Gasconade County, MO", 291), + ref("MO,GENTRY", "Gentry County, MO", 291), + ref("MO,GREENE", "Greene County, MO", 291), + ref("MO,GRUNDY", "Grundy County, MO", 291), + ref("MO,HARRISON", "Harrison County, MO", 291), + ref("MO,HENRY", "Henry County, MO", 291), + ref("MO,HICKORY", "Hickory County, MO", 291), + ref("MO,HOLT", "Holt County, MO", 291), + ref("MO,HOWARD", "Howard County, MO", 291), + ref("MO,HOWELL", "Howell County, MO", 291), + ref("MO,IRON", "Iron County, MO", 291), + ref("MO,JACKSON", "Jackson County, MO", 291), + ref("MO,JASPER", "Jasper County, MO", 291), + ref("MO,JEFFERSON", "Jefferson County, MO", 291), + ref("MO,JOHNSON", "Johnson County, MO", 291), + ref("MO,KNOX", "Knox County, MO", 291), + ref("MO,LACLEDE", "Laclede County, MO", 291), + ref("MO,LAFAYETTE", "Lafayette County, MO", 291), + ref("MO,LAWRENCE", "Lawrence County, MO", 291), + ref("MO,LEWIS", "Lewis County, MO", 291), + ref("MO,LINCOLN", "Lincoln County, MO", 291), + ref("MO,LINN", "Linn County, MO", 291), + ref("MO,LIVINGSTON", "Livingston County, MO", 291), + ref("MO,MACON", "Macon County, MO", 291), + ref("MO,MADISON", "Madison County, MO", 291), + ref("MO,MARIES", "Maries County, MO", 291), + ref("MO,MARION", "Marion County, MO", 291), + ref("MO,MCDONALD", "McDonald County, MO", 291), + ref("MO,MERCER", "Mercer County, MO", 291), + ref("MO,MILLER", "Miller County, MO", 291), + ref("MO,MISSISSIPPI", "Mississippi County, MO", 291), + ref("MO,MONITEAU", "Moniteau County, MO", 291), + ref("MO,MONROE", "Monroe County, MO", 291), + ref("MO,MONTGOMERY", "Montgomery County, MO", 291), + ref("MO,MORGAN", "Morgan County, MO", 291), + ref("MO,NEWMADRID", "New Madrid County, MO", 291), + ref("MO,NEWTON", "Newton County, MO", 291), + ref("MO,NODAWAY", "Nodaway County, MO", 291), + ref("MO,OREGON", "Oregon County, MO", 291), + ref("MO,OSAGE", "Osage County, MO", 291), + ref("MO,OZARK", "Ozark County, MO", 291), + ref("MO,PEMISCOT", "Pemiscot County, MO", 291), + ref("MO,PERRY", "Perry County, MO", 291), + ref("MO,PETTIS", "Pettis County, MO", 291), + ref("MO,PHELPS", "Phelps County, MO", 291), + ref("MO,PIKE", "Pike County, MO", 291), + ref("MO,PLATTE", "Platte County, MO", 291), + ref("MO,POLK", "Polk County, MO", 291), + ref("MO,PULASKI", "Pulaski County, MO", 291), + ref("MO,PUTNAM", "Putnam County, MO", 291), + ref("MO,RALLS", "Ralls County, MO", 291), + ref("MO,RANDOLPH", "Randolph County, MO", 291), + ref("MO,RAY", "Ray County, MO", 291), + ref("MO,REYNOLDS", "Reynolds County, MO", 291), + ref("MO,RIPLEY", "Ripley County, MO", 291), + ref("MO,SALINE", "Saline County, MO", 291), + ref("MO,SCHUYLER", "Schuyler County, MO", 291), + ref("MO,SCOTLAND", "Scotland County, MO", 291), + ref("MO,SCOTT", "Scott County, MO", 291), + ref("MO,SHANNON", "Shannon County, MO", 291), + ref("MO,SHELBY", "Shelby County, MO", 291), + ref("MO,STCHARLES", "St. Charles County, MO", 291), + ref("MO,STCLAIR", "St. Clair County, MO", 291), + ref("MO,STEGENEVIEVE", "Ste. Genevieve County, MO", 291), + ref("MO,STFRANCOIS", "St. Francois County, MO", 291), + ref("MO,STLOUIS", "St. Louis County, MO", 291), + ref("MO,STLOUISCITY", "St. Louis city, MO", 291), + ref("MO,STODDARD", "Stoddard County, MO", 291), + ref("MO,STONE", "Stone County, MO", 291), + ref("MO,SULLIVAN", "Sullivan County, MO", 291), + ref("MO,TANEY", "Taney County, MO", 291), + ref("MO,TEXAS", "Texas County, MO", 291), + ref("MO,VERNON", "Vernon County, MO", 291), + ref("MO,WARREN", "Warren County, MO", 291), + ref("MO,WASHINGTON", "Washington County, MO", 291), + ref("MO,WAYNE", "Wayne County, MO", 291), + ref("MO,WEBSTER", "Webster County, MO", 291), + ref("MO,WORTH", "Worth County, MO", 291), + ref("MO,WRIGHT", "Wright County, MO", 291), + ref("MS,ADAMS", "Adams County, MS", 291), + ref("MS,ALCORN", "Alcorn County, MS", 291), + ref("MS,AMITE", "Amite County, MS", 291), + ref("MS,ATTALA", "Attala County, MS", 291), + ref("MS,BENTON", "Benton County, MS", 291), + ref("MS,BOLIVAR", "Bolivar County, MS", 291), + ref("MS,CALHOUN", "Calhoun County, MS", 291), + ref("MS,CARROLL", "Carroll County, MS", 291), + ref("MS,CHICKASAW", "Chickasaw County, MS", 291), + ref("MS,CHOCTAW", "Choctaw County, MS", 291), + ref("MS,CLAIBORNE", "Claiborne County, MS", 291), + ref("MS,CLARKE", "Clarke County, MS", 291), + ref("MS,CLAY", "Clay County, MS", 291), + ref("MS,COAHOMA", "Coahoma County, MS", 291), + ref("MS,COPIAH", "Copiah County, MS", 291), + ref("MS,COVINGTON", "Covington County, MS", 291), + ref("MS,DESOTO", "DeSoto County, MS", 291), + ref("MS,FORREST", "Forrest County, MS", 291), + ref("MS,FRANKLIN", "Franklin County, MS", 291), + ref("MS,GEORGE", "George County, MS", 291), + ref("MS,GREENE", "Greene County, MS", 291), + ref("MS,GRENADA", "Grenada County, MS", 291), + ref("MS,HANCOCK", "Hancock County, MS", 291), + ref("MS,HARRISON", "Harrison County, MS", 291), + ref("MS,HINDS", "Hinds County, MS", 291), + ref("MS,HOLMES", "Holmes County, MS", 291), + ref("MS,HUMPHREYS", "Humphreys County, MS", 291), + ref("MS,ISSAQUENA", "Issaquena County, MS", 291), + ref("MS,ITAWAMBA", "Itawamba County, MS", 291), + ref("MS,JACKSON", "Jackson County, MS", 291), + ref("MS,JASPER", "Jasper County, MS", 291), + ref("MS,JEFFERSON", "Jefferson County, MS", 291), + ref("MS,JEFFERSONDAVIS", "Jefferson Davis County, MS", 291), + ref("MS,JONES", "Jones County, MS", 291), + ref("MS,KEMPER", "Kemper County, MS", 291), + ref("MS,LAFAYETTE", "Lafayette County, MS", 291), + ref("MS,LAMAR", "Lamar County, MS", 291), + ref("MS,LAUDERDALE", "Lauderdale County, MS", 291), + ref("MS,LAWRENCE", "Lawrence County, MS", 291), + ref("MS,LEAKE", "Leake County, MS", 291), + ref("MS,LEE", "Lee County, MS", 291), + ref("MS,LEFLORE", "Leflore County, MS", 291), + ref("MS,LINCOLN", "Lincoln County, MS", 291), + ref("MS,LOWNDES", "Lowndes County, MS", 291), + ref("MS,MADISON", "Madison County, MS", 291), + ref("MS,MARION", "Marion County, MS", 291), + ref("MS,MARSHALL", "Marshall County, MS", 291), + ref("MS,MONROE", "Monroe County, MS", 291), + ref("MS,MONTGOMERY", "Montgomery County, MS", 291), + ref("MS,NESHOBA", "Neshoba County, MS", 291), + ref("MS,NEWTON", "Newton County, MS", 291), + ref("MS,NOXUBEE", "Noxubee County, MS", 291), + ref("MS,OKTIBBEHA", "Oktibbeha County, MS", 291), + ref("MS,PANOLA", "Panola County, MS", 291), + ref("MS,PEARLRIVER", "Pearl River County, MS", 291), + ref("MS,PERRY", "Perry County, MS", 291), + ref("MS,PIKE", "Pike County, MS", 291), + ref("MS,PONTOTOC", "Pontotoc County, MS", 291), + ref("MS,PRENTISS", "Prentiss County, MS", 291), + ref("MS,QUITMAN", "Quitman County, MS", 291), + ref("MS,RANKIN", "Rankin County, MS", 291), + ref("MS,SCOTT", "Scott County, MS", 291), + ref("MS,SHARKEY", "Sharkey County, MS", 291), + ref("MS,SIMPSON", "Simpson County, MS", 291), + ref("MS,SMITH", "Smith County, MS", 291), + ref("MS,STONE", "Stone County, MS", 291), + ref("MS,SUNFLOWER", "Sunflower County, MS", 291), + ref("MS,TALLAHATCHIE", "Tallahatchie County, MS", 291), + ref("MS,TATE", "Tate County, MS", 291), + ref("MS,TIPPAH", "Tippah County, MS", 291), + ref("MS,TISHOMINGO", "Tishomingo County, MS", 291), + ref("MS,TUNICA", "Tunica County, MS", 291), + ref("MS,UNION", "Union County, MS", 291), + ref("MS,WALTHALL", "Walthall County, MS", 291), + ref("MS,WARREN", "Warren County, MS", 291), + ref("MS,WASHINGTON", "Washington County, MS", 291), + ref("MS,WAYNE", "Wayne County, MS", 291), + ref("MS,WEBSTER", "Webster County, MS", 291), + ref("MS,WILKINSON", "Wilkinson County, MS", 291), + ref("MS,WINSTON", "Winston County, MS", 291), + ref("MS,YALOBUSHA", "Yalobusha County, MS", 291), + ref("MS,YAZOO", "Yazoo County, MS", 291), + ref("MT,BEAVERHEAD", "Beaverhead County, MT", 291), + ref("MT,BIGHORN", "Big Horn County, MT", 291), + ref("MT,BLAINE", "Blaine County, MT", 291), + ref("MT,BROADWATER", "Broadwater County, MT", 291), + ref("MT,CARBON", "Carbon County, MT", 291), + ref("MT,CARTER", "Carter County, MT", 291), + ref("MT,CASCADE", "Cascade County, MT", 291), + ref("MT,CHOUTEAU", "Chouteau County, MT", 291), + ref("MT,CUSTER", "Custer County, MT", 291), + ref("MT,DANIELS", "Daniels County, MT", 291), + ref("MT,DAWSON", "Dawson County, MT", 291), + ref("MT,DEERLODGE", "Deer Lodge County, MT", 291), + ref("MT,FALLON", "Fallon County, MT", 291), + ref("MT,FERGUS", "Fergus County, MT", 291), + ref("MT,FLATHEAD", "Flathead County, MT", 291), + ref("MT,GALLATIN", "Gallatin County, MT", 291), + ref("MT,GARFIELD", "Garfield County, MT", 291), + ref("MT,GLACIER", "Glacier County, MT", 291), + ref("MT,GOLDENVALLEY", "Golden Valley County, MT", 291), + ref("MT,GRANITE", "Granite County, MT", 291), + ref("MT,HILL", "Hill County, MT", 291), + ref("MT,JEFFERSON", "Jefferson County, MT", 291), + ref("MT,JUDITHBASIN", "Judith Basin County, MT", 291), + ref("MT,LAKE", "Lake County, MT", 291), + ref("MT,LEWISANDCLARK", "Lewis and Clark County, MT", 291), + ref("MT,LIBERTY", "Liberty County, MT", 291), + ref("MT,LINCOLN", "Lincoln County, MT", 291), + ref("MT,MADISON", "Madison County, MT", 291), + ref("MT,MCCONE", "McCone County, MT", 291), + ref("MT,MEAGHER", "Meagher County, MT", 291), + ref("MT,MINERAL", "Mineral County, MT", 291), + ref("MT,MISSOULA", "Missoula County, MT", 291), + ref("MT,MUSSELSHELL", "Musselshell County, MT", 291), + ref("MT,PARK", "Park County, MT", 291), + ref("MT,PETROLEUM", "Petroleum County, MT", 291), + ref("MT,PHILLIPS", "Phillips County, MT", 291), + ref("MT,PONDERA", "Pondera County, MT", 291), + ref("MT,POWDERRIVER", "Powder River County, MT", 291), + ref("MT,POWELL", "Powell County, MT", 291), + ref("MT,PRAIRIE", "Prairie County, MT", 291), + ref("MT,RAVALLI", "Ravalli County, MT", 291), + ref("MT,RICHLAND", "Richland County, MT", 291), + ref("MT,ROOSEVELT", "Roosevelt County, MT", 291), + ref("MT,ROSEBUD", "Rosebud County, MT", 291), + ref("MT,SANDERS", "Sanders County, MT", 291), + ref("MT,SHERIDAN", "Sheridan County, MT", 291), + ref("MT,SILVERBOW", "Silver Bow County, MT", 291), + ref("MT,STILLWATER", "Stillwater County, MT", 291), + ref("MT,SWEETGRASS", "Sweet Grass County, MT", 291), + ref("MT,TETON", "Teton County, MT", 291), + ref("MT,TOOLE", "Toole County, MT", 291), + ref("MT,TREASURE", "Treasure County, MT", 291), + ref("MT,VALLEY", "Valley County, MT", 291), + ref("MT,WHEATLAND", "Wheatland County, MT", 291), + ref("MT,WIBAUX", "Wibaux County, MT", 291), + ref("MT,YELLOWSTONE", "Yellowstone County, MT", 291), + ref("NC,ALAMANCE", "Alamance County, NC", 291), + ref("NC,ALEXANDER", "Alexander County, NC", 291), + ref("NC,ALLEGHANY", "Alleghany County, NC", 291), + ref("NC,ANSON", "Anson County, NC", 291), + ref("NC,ASHE", "Ashe County, NC", 291), + ref("NC,AVERY", "Avery County, NC", 291), + ref("NC,BEAUFORT", "Beaufort County, NC", 291), + ref("NC,BERTIE", "Bertie County, NC", 291), + ref("NC,BLADEN", "Bladen County, NC", 291), + ref("NC,BRUNSWICK", "Brunswick County, NC", 291), + ref("NC,BUNCOMBE", "Buncombe County, NC", 291), + ref("NC,BURKE", "Burke County, NC", 291), + ref("NC,CABARRUS", "Cabarrus County, NC", 291), + ref("NC,CALDWELL", "Caldwell County, NC", 291), + ref("NC,CAMDEN", "Camden County, NC", 291), + ref("NC,CARTERET", "Carteret County, NC", 291), + ref("NC,CASWELL", "Caswell County, NC", 291), + ref("NC,CATAWBA", "Catawba County, NC", 291), + ref("NC,CHATHAM", "Chatham County, NC", 291), + ref("NC,CHEROKEE", "Cherokee County, NC", 291), + ref("NC,CHOWAN", "Chowan County, NC", 291), + ref("NC,CLAY", "Clay County, NC", 291), + ref("NC,CLEVELAND", "Cleveland County, NC", 291), + ref("NC,COLUMBUS", "Columbus County, NC", 291), + ref("NC,CRAVEN", "Craven County, NC", 291), + ref("NC,CUMBERLAND", "Cumberland County, NC", 291), + ref("NC,CURRITUCK", "Currituck County, NC", 291), + ref("NC,DARE", "Dare County, NC", 291), + ref("NC,DAVIDSON", "Davidson County, NC", 291), + ref("NC,DAVIE", "Davie County, NC", 291), + ref("NC,DUPLIN", "Duplin County, NC", 291), + ref("NC,DURHAM", "Durham County, NC", 291), + ref("NC,EDGECOMBE", "Edgecombe County, NC", 291), + ref("NC,FORSYTH", "Forsyth County, NC", 291), + ref("NC,FRANKLIN", "Franklin County, NC", 291), + ref("NC,GASTON", "Gaston County, NC", 291), + ref("NC,GATES", "Gates County, NC", 291), + ref("NC,GRAHAM", "Graham County, NC", 291), + ref("NC,GRANVILLE", "Granville County, NC", 291), + ref("NC,GREENE", "Greene County, NC", 291), + ref("NC,GUILFORD", "Guilford County, NC", 291), + ref("NC,HALIFAX", "Halifax County, NC", 291), + ref("NC,HARNETT", "Harnett County, NC", 291), + ref("NC,HAYWOOD", "Haywood County, NC", 291), + ref("NC,HENDERSON", "Henderson County, NC", 291), + ref("NC,HERTFORD", "Hertford County, NC", 291), + ref("NC,HOKE", "Hoke County, NC", 291), + ref("NC,HYDE", "Hyde County, NC", 291), + ref("NC,IREDELL", "Iredell County, NC", 291), + ref("NC,JACKSON", "Jackson County, NC", 291), + ref("NC,JOHNSTON", "Johnston County, NC", 291), + ref("NC,JONES", "Jones County, NC", 291), + ref("NC,LEE", "Lee County, NC", 291), + ref("NC,LENOIR", "Lenoir County, NC", 291), + ref("NC,LINCOLN", "Lincoln County, NC", 291), + ref("NC,MACON", "Macon County, NC", 291), + ref("NC,MADISON", "Madison County, NC", 291), + ref("NC,MARTIN", "Martin County, NC", 291), + ref("NC,MCDOWELL", "McDowell County, NC", 291), + ref("NC,MECKLENBURG", "Mecklenburg County, NC", 291), + ref("NC,MITCHELL", "Mitchell County, NC", 291), + ref("NC,MONTGOMERY", "Montgomery County, NC", 291), + ref("NC,MOORE", "Moore County, NC", 291), + ref("NC,NASH", "Nash County, NC", 291), + ref("NC,NEWHANOVER", "New Hanover County, NC", 291), + ref("NC,NORTHAMPTON", "Northampton County, NC", 291), + ref("NC,ONSLOW", "Onslow County, NC", 291), + ref("NC,ORANGE", "Orange County, NC", 291), + ref("NC,PAMLICO", "Pamlico County, NC", 291), + ref("NC,PASQUOTANK", "Pasquotank County, NC", 291), + ref("NC,PENDER", "Pender County, NC", 291), + ref("NC,PERQUIMANS", "Perquimans County, NC", 291), + ref("NC,PERSON", "Person County, NC", 291), + ref("NC,PITT", "Pitt County, NC", 291), + ref("NC,POLK", "Polk County, NC", 291), + ref("NC,RANDOLPH", "Randolph County, NC", 291), + ref("NC,RICHMOND", "Richmond County, NC", 291), + ref("NC,ROBESON", "Robeson County, NC", 291), + ref("NC,ROCKINGHAM", "Rockingham County, NC", 291), + ref("NC,ROWAN", "Rowan County, NC", 291), + ref("NC,RUTHERFORD", "Rutherford County, NC", 291), + ref("NC,SAMPSON", "Sampson County, NC", 291), + ref("NC,SCOTLAND", "Scotland County, NC", 291), + ref("NC,STANLY", "Stanly County, NC", 291), + ref("NC,STOKES", "Stokes County, NC", 291), + ref("NC,SURRY", "Surry County, NC", 291), + ref("NC,SWAIN", "Swain County, NC", 291), + ref("NC,TRANSYLVANIA", "Transylvania County, NC", 291), + ref("NC,TYRRELL", "Tyrrell County, NC", 291), + ref("NC,UNION", "Union County, NC", 291), + ref("NC,VANCE", "Vance County, NC", 291), + ref("NC,WAKE", "Wake County, NC", 291), + ref("NC,WARREN", "Warren County, NC", 291), + ref("NC,WASHINGTON", "Washington County, NC", 291), + ref("NC,WATAUGA", "Watauga County, NC", 291), + ref("NC,WAYNE", "Wayne County, NC", 291), + ref("NC,WILKES", "Wilkes County, NC", 291), + ref("NC,WILSON", "Wilson County, NC", 291), + ref("NC,YADKIN", "Yadkin County, NC", 291), + ref("NC,YANCEY", "Yancey County, NC", 291), + ref("ND,ADAMS", "Adams County, ND", 291), + ref("ND,BARNES", "Barnes County, ND", 291), + ref("ND,BENSON", "Benson County, ND", 291), + ref("ND,BILLINGS", "Billings County, ND", 291), + ref("ND,BOTTINEAU", "Bottineau County, ND", 291), + ref("ND,BOWMAN", "Bowman County, ND", 291), + ref("ND,BURKE", "Burke County, ND", 291), + ref("ND,BURLEIGH", "Burleigh County, ND", 291), + ref("ND,CASS", "Cass County, ND", 291), + ref("ND,CAVALIER", "Cavalier County, ND", 291), + ref("ND,DICKEY", "Dickey County, ND", 291), + ref("ND,DIVIDE", "Divide County, ND", 291), + ref("ND,DUNN", "Dunn County, ND", 291), + ref("ND,EDDY", "Eddy County, ND", 291), + ref("ND,EMMONS", "Emmons County, ND", 291), + ref("ND,FOSTER", "Foster County, ND", 291), + ref("ND,GOLDENVALLEY", "Golden Valley County, ND", 291), + ref("ND,GRANDFORKS", "Grand Forks County, ND", 291), + ref("ND,GRANT", "Grant County, ND", 291), + ref("ND,GRIGGS", "Griggs County, ND", 291), + ref("ND,HETTINGER", "Hettinger County, ND", 291), + ref("ND,KIDDER", "Kidder County, ND", 291), + ref("ND,LAMOURE", "LaMoure County, ND", 291), + ref("ND,LOGAN", "Logan County, ND", 291), + ref("ND,MCHENRY", "McHenry County, ND", 291), + ref("ND,MCINTOSH", "McIntosh County, ND", 291), + ref("ND,MCKENZIE", "McKenzie County, ND", 291), + ref("ND,MCLEAN", "McLean County, ND", 291), + ref("ND,MERCER", "Mercer County, ND", 291), + ref("ND,MORTON", "Morton County, ND", 291), + ref("ND,MOUNTRAIL", "Mountrail County, ND", 291), + ref("ND,NELSON", "Nelson County, ND", 291), + ref("ND,OLIVER", "Oliver County, ND", 291), + ref("ND,PEMBINA", "Pembina County, ND", 291), + ref("ND,PIERCE", "Pierce County, ND", 291), + ref("ND,RAMSEY", "Ramsey County, ND", 291), + ref("ND,RANSOM", "Ransom County, ND", 291), + ref("ND,RENVILLE", "Renville County, ND", 291), + ref("ND,RICHLAND", "Richland County, ND", 291), + ref("ND,ROLETTE", "Rolette County, ND", 291), + ref("ND,SARGENT", "Sargent County, ND", 291), + ref("ND,SHERIDAN", "Sheridan County, ND", 291), + ref("ND,SIOUX", "Sioux County, ND", 291), + ref("ND,SLOPE", "Slope County, ND", 291), + ref("ND,STARK", "Stark County, ND", 291), + ref("ND,STEELE", "Steele County, ND", 291), + ref("ND,STUTSMAN", "Stutsman County, ND", 291), + ref("ND,TOWNER", "Towner County, ND", 291), + ref("ND,TRAILL", "Traill County, ND", 291), + ref("ND,WALSH", "Walsh County, ND", 291), + ref("ND,WARD", "Ward County, ND", 291), + ref("ND,WELLS", "Wells County, ND", 291), + ref("ND,WILLIAMS", "Williams County, ND", 291), + ref("NE,ADAMS", "Adams County, NE", 291), + ref("NE,ANTELOPE", "Antelope County, NE", 291), + ref("NE,ARTHUR", "Arthur County, NE", 291), + ref("NE,BANNER", "Banner County, NE", 291), + ref("NE,BLAINE", "Blaine County, NE", 291), + ref("NE,BOONE", "Boone County, NE", 291), + ref("NE,BOXBUTTE", "Box Butte County, NE", 291), + ref("NE,BOYD", "Boyd County, NE", 291), + ref("NE,BROWN", "Brown County, NE", 291), + ref("NE,BUFFALO", "Buffalo County, NE", 291), + ref("NE,BURT", "Burt County, NE", 291), + ref("NE,BUTLER", "Butler County, NE", 291), + ref("NE,CASS", "Cass County, NE", 291), + ref("NE,CEDAR", "Cedar County, NE", 291), + ref("NE,CHASE", "Chase County, NE", 291), + ref("NE,CHERRY", "Cherry County, NE", 291), + ref("NE,CHEYENNE", "Cheyenne County, NE", 291), + ref("NE,CLAY", "Clay County, NE", 291), + ref("NE,COLFAX", "Colfax County, NE", 291), + ref("NE,CUMING", "Cuming County, NE", 291), + ref("NE,CUSTER", "Custer County, NE", 291), + ref("NE,DAKOTA", "Dakota County, NE", 291), + ref("NE,DAWES", "Dawes County, NE", 291), + ref("NE,DAWSON", "Dawson County, NE", 291), + ref("NE,DEUEL", "Deuel County, NE", 291), + ref("NE,DIXON", "Dixon County, NE", 291), + ref("NE,DODGE", "Dodge County, NE", 291), + ref("NE,DOUGLAS", "Douglas County, NE", 291), + ref("NE,DUNDY", "Dundy County, NE", 291), + ref("NE,FILLMORE", "Fillmore County, NE", 291), + ref("NE,FRANKLIN", "Franklin County, NE", 291), + ref("NE,FRONTIER", "Frontier County, NE", 291), + ref("NE,FURNAS", "Furnas County, NE", 291), + ref("NE,GAGE", "Gage County, NE", 291), + ref("NE,GARDEN", "Garden County, NE", 291), + ref("NE,GARFIELD", "Garfield County, NE", 291), + ref("NE,GOSPER", "Gosper County, NE", 291), + ref("NE,GRANT", "Grant County, NE", 291), + ref("NE,GREELEY", "Greeley County, NE", 291), + ref("NE,HALL", "Hall County, NE", 291), + ref("NE,HAMILTON", "Hamilton County, NE", 291), + ref("NE,HARLAN", "Harlan County, NE", 291), + ref("NE,HAYES", "Hayes County, NE", 291), + ref("NE,HITCHCOCK", "Hitchcock County, NE", 291), + ref("NE,HOLT", "Holt County, NE", 291), + ref("NE,HOOKER", "Hooker County, NE", 291), + ref("NE,HOWARD", "Howard County, NE", 291), + ref("NE,JEFFERSON", "Jefferson County, NE", 291), + ref("NE,JOHNSON", "Johnson County, NE", 291), + ref("NE,KEARNEY", "Kearney County, NE", 291), + ref("NE,KEITH", "Keith County, NE", 291), + ref("NE,KEYAPAHA", "Keya Paha County, NE", 291), + ref("NE,KIMBALL", "Kimball County, NE", 291), + ref("NE,KNOX", "Knox County, NE", 291), + ref("NE,LANCASTER", "Lancaster County, NE", 291), + ref("NE,LINCOLN", "Lincoln County, NE", 291), + ref("NE,LOGAN", "Logan County, NE", 291), + ref("NE,LOUP", "Loup County, NE", 291), + ref("NE,MADISON", "Madison County, NE", 291), + ref("NE,MCPHERSON", "McPherson County, NE", 291), + ref("NE,MERRICK", "Merrick County, NE", 291), + ref("NE,MORRILL", "Morrill County, NE", 291), + ref("NE,NANCE", "Nance County, NE", 291), + ref("NE,NEMAHA", "Nemaha County, NE", 291), + ref("NE,NUCKOLLS", "Nuckolls County, NE", 291), + ref("NE,OTOE", "Otoe County, NE", 291), + ref("NE,PAWNEE", "Pawnee County, NE", 291), + ref("NE,PERKINS", "Perkins County, NE", 291), + ref("NE,PHELPS", "Phelps County, NE", 291), + ref("NE,PIERCE", "Pierce County, NE", 291), + ref("NE,PLATTE", "Platte County, NE", 291), + ref("NE,POLK", "Polk County, NE", 291), + ref("NE,REDWILLOW", "Red Willow County, NE", 291), + ref("NE,RICHARDSON", "Richardson County, NE", 291), + ref("NE,ROCK", "Rock County, NE", 291), + ref("NE,SALINE", "Saline County, NE", 291), + ref("NE,SARPY", "Sarpy County, NE", 291), + ref("NE,SAUNDERS", "Saunders County, NE", 291), + ref("NE,SCOTTSBLUFF", "Scotts Bluff County, NE", 291), + ref("NE,SEWARD", "Seward County, NE", 291), + ref("NE,SHERIDAN", "Sheridan County, NE", 291), + ref("NE,SHERMAN", "Sherman County, NE", 291), + ref("NE,SIOUX", "Sioux County, NE", 291), + ref("NE,STANTON", "Stanton County, NE", 291), + ref("NE,THAYER", "Thayer County, NE", 291), + ref("NE,THOMAS", "Thomas County, NE", 291), + ref("NE,THURSTON", "Thurston County, NE", 291), + ref("NE,VALLEY", "Valley County, NE", 291), + ref("NE,WASHINGTON", "Washington County, NE", 291), + ref("NE,WAYNE", "Wayne County, NE", 291), + ref("NE,WEBSTER", "Webster County, NE", 291), + ref("NE,WHEELER", "Wheeler County, NE", 291), + ref("NE,YORK", "York County, NE", 291), + ref("NH,BELKNAP", "Belknap County, NH", 291), + ref("NH,CARROLL", "Carroll County, NH", 291), + ref("NH,CHESHIRE", "Cheshire County, NH", 291), + ref("NH,COOS", "Coos County, NH", 291), + ref("NH,GRAFTON", "Grafton County, NH", 291), + ref("NH,HILLSBOROUGH", "Hillsborough County, NH", 291), + ref("NH,MERRIMACK", "Merrimack County, NH", 291), + ref("NH,ROCKINGHAM", "Rockingham County, NH", 291), + ref("NH,STRAFFORD", "Strafford County, NH", 291), + ref("NH,SULLIVAN", "Sullivan County, NH", 291), + ref("NJ,ATLANTIC", "Atlantic County, NJ", 291), + ref("NJ,BERGEN", "Bergen County, NJ", 291), + ref("NJ,BURLINGTON", "Burlington County, NJ", 291), + ref("NJ,CAMDEN", "Camden County, NJ", 291), + ref("NJ,CAPEMAY", "Cape May County, NJ", 291), + ref("NJ,CUMBERLAND", "Cumberland County, NJ", 291), + ref("NJ,ESSEX", "Essex County, NJ", 291), + ref("NJ,GLOUCESTER", "Gloucester County, NJ", 291), + ref("NJ,HUDSON", "Hudson County, NJ", 291), + ref("NJ,HUNTERDON", "Hunterdon County, NJ", 291), + ref("NJ,MERCER", "Mercer County, NJ", 291), + ref("NJ,MIDDLESEX", "Middlesex County, NJ", 291), + ref("NJ,MONMOUTH", "Monmouth County, NJ", 291), + ref("NJ,MORRIS", "Morris County, NJ", 291), + ref("NJ,OCEAN", "Ocean County, NJ", 291), + ref("NJ,PASSAIC", "Passaic County, NJ", 291), + ref("NJ,SALEM", "Salem County, NJ", 291), + ref("NJ,SOMERSET", "Somerset County, NJ", 291), + ref("NJ,SUSSEX", "Sussex County, NJ", 291), + ref("NJ,UNION", "Union County, NJ", 291), + ref("NJ,WARREN", "Warren County, NJ", 291), + ref("NM,BERNALILLO", "Bernalillo County, NM", 291), + ref("NM,CATRON", "Catron County, NM", 291), + ref("NM,CHAVES", "Chaves County, NM", 291), + ref("NM,CIBOLA", "Cibola County, NM", 291), + ref("NM,COLFAX", "Colfax County, NM", 291), + ref("NM,CURRY", "Curry County, NM", 291), + ref("NM,DEBACA", "De Baca County, NM", 291), + ref("NM,DO̱AANA", "Do̱a Ana County, NM", 291), + ref("NM,EDDY", "Eddy County, NM", 291), + ref("NM,GRANT", "Grant County, NM", 291), + ref("NM,GUADALUPE", "Guadalupe County, NM", 291), + ref("NM,HARDING", "Harding County, NM", 291), + ref("NM,HIDALGO", "Hidalgo County, NM", 291), + ref("NM,LEA", "Lea County, NM", 291), + ref("NM,LINCOLN", "Lincoln County, NM", 291), + ref("NM,LOSALAMOS", "Los Alamos County, NM", 291), + ref("NM,LUNA", "Luna County, NM", 291), + ref("NM,MCKINLEY", "McKinley County, NM", 291), + ref("NM,MORA", "Mora County, NM", 291), + ref("NM,OTERO", "Otero County, NM", 291), + ref("NM,QUAY", "Quay County, NM", 291), + ref("NM,RIOARRIBA", "Rio Arriba County, NM", 291), + ref("NM,ROOSEVELT", "Roosevelt County, NM", 291), + ref("NM,SANDOVAL", "Sandoval County, NM", 291), + ref("NM,SANJUAN", "San Juan County, NM", 291), + ref("NM,SANMIGUEL", "San Miguel County, NM", 291), + ref("NM,SANTAFE", "Santa Fe County, NM", 291), + ref("NM,SIERRA", "Sierra County, NM", 291), + ref("NM,SOCORRO", "Socorro County, NM", 291), + ref("NM,TAOS", "Taos County, NM", 291), + ref("NM,TORRANCE", "Torrance County, NM", 291), + ref("NM,UNION", "Union County, NM", 291), + ref("NM,VALENCIA", "Valencia County, NM", 291), + ref("NV,CARSONCITY", "Carson City, NV", 291), + ref("NV,CHURCHILL", "Churchill County, NV", 291), + ref("NV,CLARK", "Clark County, NV", 291), + ref("NV,DOUGLAS", "Douglas County, NV", 291), + ref("NV,ELKO", "Elko County, NV", 291), + ref("NV,ESMERALDA", "Esmeralda County, NV", 291), + ref("NV,EUREKA", "Eureka County, NV", 291), + ref("NV,HUMBOLDT", "Humboldt County, NV", 291), + ref("NV,LANDER", "Lander County, NV", 291), + ref("NV,LINCOLN", "Lincoln County, NV", 291), + ref("NV,LYON", "Lyon County, NV", 291), + ref("NV,MINERAL", "Mineral County, NV", 291), + ref("NV,NYE", "Nye County, NV", 291), + ref("NV,PERSHING", "Pershing County, NV", 291), + ref("NV,STOREY", "Storey County, NV", 291), + ref("NV,WASHOE", "Washoe County, NV", 291), + ref("NV,WHITEPINE", "White Pine County, NV", 291), + ref("NY,ALBANY", "Albany County, NY", 291), + ref("NY,ALLEGANY", "Allegany County, NY", 291), + ref("NY,BRONX", "Bronx County, NY", 291), + ref("NY,BROOME", "Broome County, NY", 291), + ref("NY,CATTARAUGUS", "Cattaraugus County, NY", 291), + ref("NY,CAYUGA", "Cayuga County, NY", 291), + ref("NY,CHAUTAUQUA", "Chautauqua County, NY", 291), + ref("NY,CHEMUNG", "Chemung County, NY", 291), + ref("NY,CHENANGO", "Chenango County, NY", 291), + ref("NY,CLINTON", "Clinton County, NY", 291), + ref("NY,COLUMBIA", "Columbia County, NY", 291), + ref("NY,CORTLAND", "Cortland County, NY", 291), + ref("NY,DELAWARE", "Delaware County, NY", 291), + ref("NY,DUTCHESS", "Dutchess County, NY", 291), + ref("NY,ERIE", "Erie County, NY", 291), + ref("NY,ESSEX", "Essex County, NY", 291), + ref("NY,FRANKLIN", "Franklin County, NY", 291), + ref("NY,FULTON", "Fulton County, NY", 291), + ref("NY,GENESEE", "Genesee County, NY", 291), + ref("NY,GREENE", "Greene County, NY", 291), + ref("NY,HAMILTON", "Hamilton County, NY", 291), + ref("NY,HERKIMER", "Herkimer County, NY", 291), + ref("NY,JEFFERSON", "Jefferson County, NY", 291), + ref("NY,KINGS", "Kings County, NY", 291), + ref("NY,LEWIS", "Lewis County, NY", 291), + ref("NY,LIVINGSTON", "Livingston County, NY", 291), + ref("NY,MADISON", "Madison County, NY", 291), + ref("NY,MONROE", "Monroe County, NY", 291), + ref("NY,MONTGOMERY", "Montgomery County, NY", 291), + ref("NY,NASSAU", "Nassau County, NY", 291), + ref("NY,NEWYORK", "New York County, NY", 291), + ref("NY,NIAGARA", "Niagara County, NY", 291), + ref("NY,ONEIDA", "Oneida County, NY", 291), + ref("NY,ONONDAGA", "Onondaga County, NY", 291), + ref("NY,ONTARIO", "Ontario County, NY", 291), + ref("NY,ORANGE", "Orange County, NY", 291), + ref("NY,ORLEANS", "Orleans County, NY", 291), + ref("NY,OSWEGO", "Oswego County, NY", 291), + ref("NY,OTSEGO", "Otsego County, NY", 291), + ref("NY,PUTNAM", "Putnam County, NY", 291), + ref("NY,QUEENS", "Queens County, NY", 291), + ref("NY,RENSSELAER", "Rensselaer County, NY", 291), + ref("NY,RICHMOND", "Richmond County, NY", 291), + ref("NY,ROCKLAND", "Rockland County, NY", 291), + ref("NY,SARATOGA", "Saratoga County, NY", 291), + ref("NY,SCHENECTADY", "Schenectady County, NY", 291), + ref("NY,SCHOHARIE", "Schoharie County, NY", 291), + ref("NY,SCHUYLER", "Schuyler County, NY", 291), + ref("NY,SENECA", "Seneca County, NY", 291), + ref("NY,STEUBEN", "Steuben County, NY", 291), + ref("NY,STLAWRENCE", "St. Lawrence County, NY", 291), + ref("NY,SUFFOLK", "Suffolk County, NY", 291), + ref("NY,SULLIVAN", "Sullivan County, NY", 291), + ref("NY,TIOGA", "Tioga County, NY", 291), + ref("NY,TOMPKINS", "Tompkins County, NY", 291), + ref("NY,ULSTER", "Ulster County, NY", 291), + ref("NY,WARREN", "Warren County, NY", 291), + ref("NY,WASHINGTON", "Washington County, NY", 291), + ref("NY,WAYNE", "Wayne County, NY", 291), + ref("NY,WESTCHESTER", "Westchester County, NY", 291), + ref("NY,WYOMING", "Wyoming County, NY", 291), + ref("NY,YATES", "Yates County, NY", 291), + ref("OH,ADAMS", "Adams County, OH", 291), + ref("OH,ALLEN", "Allen County, OH", 291), + ref("OH,ASHLAND", "Ashland County, OH", 291), + ref("OH,ASHTABULA", "Ashtabula County, OH", 291), + ref("OH,ATHENS", "Athens County, OH", 291), + ref("OH,AUGLAIZE", "Auglaize County, OH", 291), + ref("OH,BELMONT", "Belmont County, OH", 291), + ref("OH,BROWN", "Brown County, OH", 291), + ref("OH,BUTLER", "Butler County, OH", 291), + ref("OH,CARROLL", "Carroll County, OH", 291), + ref("OH,CHAMPAIGN", "Champaign County, OH", 291), + ref("OH,CLARK", "Clark County, OH", 291), + ref("OH,CLERMONT", "Clermont County, OH", 291), + ref("OH,CLINTON", "Clinton County, OH", 291), + ref("OH,COLUMBIANA", "Columbiana County, OH", 291), + ref("OH,COSHOCTON", "Coshocton County, OH", 291), + ref("OH,CRAWFORD", "Crawford County, OH", 291), + ref("OH,CUYAHOGA", "Cuyahoga County, OH", 291), + ref("OH,DARKE", "Darke County, OH", 291), + ref("OH,DEFIANCE", "Defiance County, OH", 291), + ref("OH,DELAWARE", "Delaware County, OH", 291), + ref("OH,ERIE", "Erie County, OH", 291), + ref("OH,FAIRFIELD", "Fairfield County, OH", 291), + ref("OH,FAYETTE", "Fayette County, OH", 291), + ref("OH,FRANKLIN", "Franklin County, OH", 291), + ref("OH,FULTON", "Fulton County, OH", 291), + ref("OH,GALLIA", "Gallia County, OH", 291), + ref("OH,GEAUGA", "Geauga County, OH", 291), + ref("OH,GREENE", "Greene County, OH", 291), + ref("OH,GUERNSEY", "Guernsey County, OH", 291), + ref("OH,HAMILTON", "Hamilton County, OH", 291), + ref("OH,HANCOCK", "Hancock County, OH", 291), + ref("OH,HARDIN", "Hardin County, OH", 291), + ref("OH,HARRISON", "Harrison County, OH", 291), + ref("OH,HENRY", "Henry County, OH", 291), + ref("OH,HIGHLAND", "Highland County, OH", 291), + ref("OH,HOCKING", "Hocking County, OH", 291), + ref("OH,HOLMES", "Holmes County, OH", 291), + ref("OH,HURON", "Huron County, OH", 291), + ref("OH,JACKSON", "Jackson County, OH", 291), + ref("OH,JEFFERSON", "Jefferson County, OH", 291), + ref("OH,KNOX", "Knox County, OH", 291), + ref("OH,LAKE", "Lake County, OH", 291), + ref("OH,LAWRENCE", "Lawrence County, OH", 291), + ref("OH,LICKING", "Licking County, OH", 291), + ref("OH,LOGAN", "Logan County, OH", 291), + ref("OH,LORAIN", "Lorain County, OH", 291), + ref("OH,LUCAS", "Lucas County, OH", 291), + ref("OH,MADISON", "Madison County, OH", 291), + ref("OH,MAHONING", "Mahoning County, OH", 291), + ref("OH,MARION", "Marion County, OH", 291), + ref("OH,MEDINA", "Medina County, OH", 291), + ref("OH,MEIGS", "Meigs County, OH", 291), + ref("OH,MERCER", "Mercer County, OH", 291), + ref("OH,MIAMI", "Miami County, OH", 291), + ref("OH,MONROE", "Monroe County, OH", 291), + ref("OH,MONTGOMERY", "Montgomery County, OH", 291), + ref("OH,MORGAN", "Morgan County, OH", 291), + ref("OH,MORROW", "Morrow County, OH", 291), + ref("OH,MUSKINGUM", "Muskingum County, OH", 291), + ref("OH,NOBLE", "Noble County, OH", 291), + ref("OH,OTTAWA", "Ottawa County, OH", 291), + ref("OH,PAULDING", "Paulding County, OH", 291), + ref("OH,PERRY", "Perry County, OH", 291), + ref("OH,PICKAWAY", "Pickaway County, OH", 291), + ref("OH,PIKE", "Pike County, OH", 291), + ref("OH,PORTAGE", "Portage County, OH", 291), + ref("OH,PREBLE", "Preble County, OH", 291), + ref("OH,PUTNAM", "Putnam County, OH", 291), + ref("OH,RICHLAND", "Richland County, OH", 291), + ref("OH,ROSS", "Ross County, OH", 291), + ref("OH,SANDUSKY", "Sandusky County, OH", 291), + ref("OH,SCIOTO", "Scioto County, OH", 291), + ref("OH,SENECA", "Seneca County, OH", 291), + ref("OH,SHELBY", "Shelby County, OH", 291), + ref("OH,STARK", "Stark County, OH", 291), + ref("OH,SUMMIT", "Summit County, OH", 291), + ref("OH,TRUMBULL", "Trumbull County, OH", 291), + ref("OH,TUSCARAWAS", "Tuscarawas County, OH", 291), + ref("OH,UNION", "Union County, OH", 291), + ref("OH,VANWERT", "Van Wert County, OH", 291), + ref("OH,VINTON", "Vinton County, OH", 291), + ref("OH,WARREN", "Warren County, OH", 291), + ref("OH,WASHINGTON", "Washington County, OH", 291), + ref("OH,WAYNE", "Wayne County, OH", 291), + ref("OH,WILLIAMS", "Williams County, OH", 291), + ref("OH,WOOD", "Wood County, OH", 291), + ref("OH,WYANDOT", "Wyandot County, OH", 291), + ref("OK,ADAIR", "Adair County, OK", 291), + ref("OK,ALFALFA", "Alfalfa County, OK", 291), + ref("OK,ATOKA", "Atoka County, OK", 291), + ref("OK,BEAVER", "Beaver County, OK", 291), + ref("OK,BECKHAM", "Beckham County, OK", 291), + ref("OK,BLAINE", "Blaine County, OK", 291), + ref("OK,BRYAN", "Bryan County, OK", 291), + ref("OK,CADDO", "Caddo County, OK", 291), + ref("OK,CANADIAN", "Canadian County, OK", 291), + ref("OK,CARTER", "Carter County, OK", 291), + ref("OK,CHEROKEE", "Cherokee County, OK", 291), + ref("OK,CHOCTAW", "Choctaw County, OK", 291), + ref("OK,CIMARRON", "Cimarron County, OK", 291), + ref("OK,CLEVELAND", "Cleveland County, OK", 291), + ref("OK,COAL", "Coal County, OK", 291), + ref("OK,COMANCHE", "Comanche County, OK", 291), + ref("OK,COTTON", "Cotton County, OK", 291), + ref("OK,CRAIG", "Craig County, OK", 291), + ref("OK,CREEK", "Creek County, OK", 291), + ref("OK,CUSTER", "Custer County, OK", 291), + ref("OK,DELAWARE", "Delaware County, OK", 291), + ref("OK,DEWEY", "Dewey County, OK", 291), + ref("OK,ELLIS", "Ellis County, OK", 291), + ref("OK,GARFIELD", "Garfield County, OK", 291), + ref("OK,GARVIN", "Garvin County, OK", 291), + ref("OK,GRADY", "Grady County, OK", 291), + ref("OK,GRANT", "Grant County, OK", 291), + ref("OK,GREER", "Greer County, OK", 291), + ref("OK,HARMON", "Harmon County, OK", 291), + ref("OK,HARPER", "Harper County, OK", 291), + ref("OK,HASKELL", "Haskell County, OK", 291), + ref("OK,HUGHES", "Hughes County, OK", 291), + ref("OK,JACKSON", "Jackson County, OK", 291), + ref("OK,JEFFERSON", "Jefferson County, OK", 291), + ref("OK,JOHNSTON", "Johnston County, OK", 291), + ref("OK,KAY", "Kay County, OK", 291), + ref("OK,KINGFISHER", "Kingfisher County, OK", 291), + ref("OK,KIOWA", "Kiowa County, OK", 291), + ref("OK,LATIMER", "Latimer County, OK", 291), + ref("OK,LEFLORE", "Le Flore County, OK", 291), + ref("OK,LINCOLN", "Lincoln County, OK", 291), + ref("OK,LOGAN", "Logan County, OK", 291), + ref("OK,LOVE", "Love County, OK", 291), + ref("OK,MAJOR", "Major County, OK", 291), + ref("OK,MARSHALL", "Marshall County, OK", 291), + ref("OK,MAYES", "Mayes County, OK", 291), + ref("OK,MCCLAIN", "McClain County, OK", 291), + ref("OK,MCCURTAIN", "McCurtain County, OK", 291), + ref("OK,MCINTOSH", "McIntosh County, OK", 291), + ref("OK,MURRAY", "Murray County, OK", 291), + ref("OK,MUSKOGEE", "Muskogee County, OK", 291), + ref("OK,NOBLE", "Noble County, OK", 291), + ref("OK,NOWATA", "Nowata County, OK", 291), + ref("OK,OKFUSKEE", "Okfuskee County, OK", 291), + ref("OK,OKLAHOMA", "Oklahoma County, OK", 291), + ref("OK,OKMULGEE", "Okmulgee County, OK", 291), + ref("OK,OSAGE", "Osage County, OK", 291), + ref("OK,OTTAWA", "Ottawa County, OK", 291), + ref("OK,PAWNEE", "Pawnee County, OK", 291), + ref("OK,PAYNE", "Payne County, OK", 291), + ref("OK,PITTSBURG", "Pittsburg County, OK", 291), + ref("OK,PONTOTOC", "Pontotoc County, OK", 291), + ref("OK,POTTAWATOMIE", "Pottawatomie County, OK", 291), + ref("OK,PUSHMATAHA", "Pushmataha County, OK", 291), + ref("OK,ROGERMILLS", "Roger Mills County, OK", 291), + ref("OK,ROGERS", "Rogers County, OK", 291), + ref("OK,SEMINOLE", "Seminole County, OK", 291), + ref("OK,SEQUOYAH", "Sequoyah County, OK", 291), + ref("OK,STEPHENS", "Stephens County, OK", 291), + ref("OK,TEXAS", "Texas County, OK", 291), + ref("OK,TILLMAN", "Tillman County, OK", 291), + ref("OK,TULSA", "Tulsa County, OK", 291), + ref("OK,WAGONER", "Wagoner County, OK", 291), + ref("OK,WASHINGTON", "Washington County, OK", 291), + ref("OK,WASHITA", "Washita County, OK", 291), + ref("OK,WOODS", "Woods County, OK", 291), + ref("OK,WOODWARD", "Woodward County, OK", 291), + ref("OR,BAKER", "Baker County, OR", 291), + ref("OR,BENTON", "Benton County, OR", 291), + ref("OR,CLACKAMAS", "Clackamas County, OR", 291), + ref("OR,CLATSOP", "Clatsop County, OR", 291), + ref("OR,COLUMBIA", "Columbia County, OR", 291), + ref("OR,COOS", "Coos County, OR", 291), + ref("OR,CROOK", "Crook County, OR", 291), + ref("OR,CURRY", "Curry County, OR", 291), + ref("OR,DESCHUTES", "Deschutes County, OR", 291), + ref("OR,DOUGLAS", "Douglas County, OR", 291), + ref("OR,GILLIAM", "Gilliam County, OR", 291), + ref("OR,GRANT", "Grant County, OR", 291), + ref("OR,HARNEY", "Harney County, OR", 291), + ref("OR,HOODRIVER", "Hood River County, OR", 291), + ref("OR,JACKSON", "Jackson County, OR", 291), + ref("OR,JEFFERSON", "Jefferson County, OR", 291), + ref("OR,JOSEPHINE", "Josephine County, OR", 291), + ref("OR,KLAMATH", "Klamath County, OR", 291), + ref("OR,LAKE", "Lake County, OR", 291), + ref("OR,LANE", "Lane County, OR", 291), + ref("OR,LINCOLN", "Lincoln County, OR", 291), + ref("OR,LINN", "Linn County, OR", 291), + ref("OR,MALHEUR", "Malheur County, OR", 291), + ref("OR,MARION", "Marion County, OR", 291), + ref("OR,MORROW", "Morrow County, OR", 291), + ref("OR,MULTNOMAH", "Multnomah County, OR", 291), + ref("OR,POLK", "Polk County, OR", 291), + ref("OR,SHERMAN", "Sherman County, OR", 291), + ref("OR,TILLAMOOK", "Tillamook County, OR", 291), + ref("OR,UMATILLA", "Umatilla County, OR", 291), + ref("OR,UNION", "Union County, OR", 291), + ref("OR,WALLOWA", "Wallowa County, OR", 291), + ref("OR,WASCO", "Wasco County, OR", 291), + ref("OR,WASHINGTON", "Washington County, OR", 291), + ref("OR,WHEELER", "Wheeler County, OR", 291), + ref("OR,YAMHILL", "Yamhill County, OR", 291), + ref("PA,ADAMS", "Adams County, PA", 291), + ref("PA,ALLEGHENY", "Allegheny County, PA", 291), + ref("PA,ARMSTRONG", "Armstrong County, PA", 291), + ref("PA,BEAVER", "Beaver County, PA", 291), + ref("PA,BEDFORD", "Bedford County, PA", 291), + ref("PA,BERKS", "Berks County, PA", 291), + ref("PA,BLAIR", "Blair County, PA", 291), + ref("PA,BRADFORD", "Bradford County, PA", 291), + ref("PA,BUCKS", "Bucks County, PA", 291), + ref("PA,BUTLER", "Butler County, PA", 291), + ref("PA,CAMBRIA", "Cambria County, PA", 291), + ref("PA,CAMERON", "Cameron County, PA", 291), + ref("PA,CARBON", "Carbon County, PA", 291), + ref("PA,CENTRE", "Centre County, PA", 291), + ref("PA,CHESTER", "Chester County, PA", 291), + ref("PA,CLARION", "Clarion County, PA", 291), + ref("PA,CLEARFIELD", "Clearfield County, PA", 291), + ref("PA,CLINTON", "Clinton County, PA", 291), + ref("PA,COLUMBIA", "Columbia County, PA", 291), + ref("PA,CRAWFORD", "Crawford County, PA", 291), + ref("PA,CUMBERLAND", "Cumberland County, PA", 291), + ref("PA,DAUPHIN", "Dauphin County, PA", 291), + ref("PA,DELAWARE", "Delaware County, PA", 291), + ref("PA,ELK", "Elk County, PA", 291), + ref("PA,ERIE", "Erie County, PA", 291), + ref("PA,FAYETTE", "Fayette County, PA", 291), + ref("PA,FOREST", "Forest County, PA", 291), + ref("PA,FRANKLIN", "Franklin County, PA", 291), + ref("PA,FULTON", "Fulton County, PA", 291), + ref("PA,GREENE", "Greene County, PA", 291), + ref("PA,HUNTINGDON", "Huntingdon County, PA", 291), + ref("PA,INDIANA", "Indiana County, PA", 291), + ref("PA,JEFFERSON", "Jefferson County, PA", 291), + ref("PA,JUNIATA", "Juniata County, PA", 291), + ref("PA,LACKAWANNA", "Lackawanna County, PA", 291), + ref("PA,LANCASTER", "Lancaster County, PA", 291), + ref("PA,LAWRENCE", "Lawrence County, PA", 291), + ref("PA,LEBANON", "Lebanon County, PA", 291), + ref("PA,LEHIGH", "Lehigh County, PA", 291), + ref("PA,LUZERNE", "Luzerne County, PA", 291), + ref("PA,LYCOMING", "Lycoming County, PA", 291), + ref("PA,MCKEAN", "McKean County, PA", 291), + ref("PA,MERCER", "Mercer County, PA", 291), + ref("PA,MIFFLIN", "Mifflin County, PA", 291), + ref("PA,MONROE", "Monroe County, PA", 291), + ref("PA,MONTGOMERY", "Montgomery County, PA", 291), + ref("PA,MONTOUR", "Montour County, PA", 291), + ref("PA,NORTHAMPTON", "Northampton County, PA", 291), + ref("PA,NORTHUMBERLAND", "Northumberland County, PA", 291), + ref("PA,PERRY", "Perry County, PA", 291), + ref("PA,PHILADELPHIA", "Philadelphia County, PA", 291), + ref("PA,PIKE", "Pike County, PA", 291), + ref("PA,POTTER", "Potter County, PA", 291), + ref("PA,SCHUYLKILL", "Schuylkill County, PA", 291), + ref("PA,SNYDER", "Snyder County, PA", 291), + ref("PA,SOMERSET", "Somerset County, PA", 291), + ref("PA,SULLIVAN", "Sullivan County, PA", 291), + ref("PA,SUSQUEHANNA", "Susquehanna County, PA", 291), + ref("PA,TIOGA", "Tioga County, PA", 291), + ref("PA,UNION", "Union County, PA", 291), + ref("PA,VENANGO", "Venango County, PA", 291), + ref("PA,WARREN", "Warren County, PA", 291), + ref("PA,WASHINGTON", "Washington County, PA", 291), + ref("PA,WAYNE", "Wayne County, PA", 291), + ref("PA,WESTMORELAND", "Westmoreland County, PA", 291), + ref("PA,WYOMING", "Wyoming County, PA", 291), + ref("PA,YORK", "York County, PA", 291), + ref("RI,BRISTOL", "Bristol County, RI", 291), + ref("RI,KENT", "Kent County, RI", 291), + ref("RI,NEWPORT", "Newport County, RI", 291), + ref("RI,PROVIDENCE", "Providence County, RI", 291), + ref("RI,WASHINGTON", "Washington County, RI", 291), + ref("SC,ABBEVILLE", "Abbeville County, SC", 291), + ref("SC,AIKEN", "Aiken County, SC", 291), + ref("SC,ALLENDALE", "Allendale County, SC", 291), + ref("SC,ANDERSON", "Anderson County, SC", 291), + ref("SC,BAMBERG", "Bamberg County, SC", 291), + ref("SC,BARNWELL", "Barnwell County, SC", 291), + ref("SC,BEAUFORT", "Beaufort County, SC", 291), + ref("SC,BERKELEY", "Berkeley County, SC", 291), + ref("SC,CALHOUN", "Calhoun County, SC", 291), + ref("SC,CHARLESTON", "Charleston County, SC", 291), + ref("SC,CHEROKEE", "Cherokee County, SC", 291), + ref("SC,CHESTER", "Chester County, SC", 291), + ref("SC,CHESTERFIELD", "Chesterfield County, SC", 291), + ref("SC,CLARENDON", "Clarendon County, SC", 291), + ref("SC,COLLETON", "Colleton County, SC", 291), + ref("SC,DARLINGTON", "Darlington County, SC", 291), + ref("SC,DILLON", "Dillon County, SC", 291), + ref("SC,DORCHESTER", "Dorchester County, SC", 291), + ref("SC,EDGEFIELD", "Edgefield County, SC", 291), + ref("SC,FAIRFIELD", "Fairfield County, SC", 291), + ref("SC,FLORENCE", "Florence County, SC", 291), + ref("SC,GEORGETOWN", "Georgetown County, SC", 291), + ref("SC,GREENVILLE", "Greenville County, SC", 291), + ref("SC,GREENWOOD", "Greenwood County, SC", 291), + ref("SC,HAMPTON", "Hampton County, SC", 291), + ref("SC,HORRY", "Horry County, SC", 291), + ref("SC,JASPER", "Jasper County, SC", 291), + ref("SC,KERSHAW", "Kershaw County, SC", 291), + ref("SC,LANCASTER", "Lancaster County, SC", 291), + ref("SC,LAURENS", "Laurens County, SC", 291), + ref("SC,LEE", "Lee County, SC", 291), + ref("SC,LEXINGTON", "Lexington County, SC", 291), + ref("SC,MARION", "Marion County, SC", 291), + ref("SC,MARLBORO", "Marlboro County, SC", 291), + ref("SC,MCCORMICK", "McCormick County, SC", 291), + ref("SC,NEWBERRY", "Newberry County, SC", 291), + ref("SC,OCONEE", "Oconee County, SC", 291), + ref("SC,ORANGEBURG", "Orangeburg County, SC", 291), + ref("SC,PICKENS", "Pickens County, SC", 291), + ref("SC,RICHLAND", "Richland County, SC", 291), + ref("SC,SALUDA", "Saluda County, SC", 291), + ref("SC,SPARTANBURG", "Spartanburg County, SC", 291), + ref("SC,SUMTER", "Sumter County, SC", 291), + ref("SC,UNION", "Union County, SC", 291), + ref("SC,WILLIAMSBURG", "Williamsburg County, SC", 291), + ref("SC,YORK", "York County, SC", 291), + ref("SD,AURORA", "Aurora County, SD", 291), + ref("SD,BEADLE", "Beadle County, SD", 291), + ref("SD,BENNETT", "Bennett County, SD", 291), + ref("SD,BONHOMME", "Bon Homme County, SD", 291), + ref("SD,BROOKINGS", "Brookings County, SD", 291), + ref("SD,BROWN", "Brown County, SD", 291), + ref("SD,BRULE", "Brule County, SD", 291), + ref("SD,BUFFALO", "Buffalo County, SD", 291), + ref("SD,BUTTE", "Butte County, SD", 291), + ref("SD,CAMPBELL", "Campbell County, SD", 291), + ref("SD,CHARLESMIX", "Charles Mix County, SD", 291), + ref("SD,CLARK", "Clark County, SD", 291), + ref("SD,CLAY", "Clay County, SD", 291), + ref("SD,CODINGTON", "Codington County, SD", 291), + ref("SD,CORSON", "Corson County, SD", 291), + ref("SD,CUSTER", "Custer County, SD", 291), + ref("SD,DAVISON", "Davison County, SD", 291), + ref("SD,DAY", "Day County, SD", 291), + ref("SD,DEUEL", "Deuel County, SD", 291), + ref("SD,DEWEY", "Dewey County, SD", 291), + ref("SD,DOUGLAS", "Douglas County, SD", 291), + ref("SD,EDMUNDS", "Edmunds County, SD", 291), + ref("SD,FALLRIVER", "Fall River County, SD", 291), + ref("SD,FAULK", "Faulk County, SD", 291), + ref("SD,GRANT", "Grant County, SD", 291), + ref("SD,GREGORY", "Gregory County, SD", 291), + ref("SD,HAAKON", "Haakon County, SD", 291), + ref("SD,HAMLIN", "Hamlin County, SD", 291), + ref("SD,HAND", "Hand County, SD", 291), + ref("SD,HANSON", "Hanson County, SD", 291), + ref("SD,HARDING", "Harding County, SD", 291), + ref("SD,HUGHES", "Hughes County, SD", 291), + ref("SD,HUTCHINSON", "Hutchinson County, SD", 291), + ref("SD,HYDE", "Hyde County, SD", 291), + ref("SD,JACKSON", "Jackson County, SD", 291), + ref("SD,JERAULD", "Jerauld County, SD", 291), + ref("SD,JONES", "Jones County, SD", 291), + ref("SD,KINGSBURY", "Kingsbury County, SD", 291), + ref("SD,LAKE", "Lake County, SD", 291), + ref("SD,LAWRENCE", "Lawrence County, SD", 291), + ref("SD,LINCOLN", "Lincoln County, SD", 291), + ref("SD,LYMAN", "Lyman County, SD", 291), + ref("SD,MARSHALL", "Marshall County, SD", 291), + ref("SD,MCCOOK", "McCook County, SD", 291), + ref("SD,MCPHERSON", "McPherson County, SD", 291), + ref("SD,MEADE", "Meade County, SD", 291), + ref("SD,MELLETTE", "Mellette County, SD", 291), + ref("SD,MINER", "Miner County, SD", 291), + ref("SD,MINNEHAHA", "Minnehaha County, SD", 291), + ref("SD,MOODY", "Moody County, SD", 291), + ref("SD,PENNINGTON", "Pennington County, SD", 291), + ref("SD,PERKINS", "Perkins County, SD", 291), + ref("SD,POTTER", "Potter County, SD", 291), + ref("SD,ROBERTS", "Roberts County, SD", 291), + ref("SD,SANBORN", "Sanborn County, SD", 291), + ref("SD,SHANNON", "Shannon County, SD", 291), + ref("SD,SPINK", "Spink County, SD", 291), + ref("SD,STANLEY", "Stanley County, SD", 291), + ref("SD,SULLY", "Sully County, SD", 291), + ref("SD,TODD", "Todd County, SD", 291), + ref("SD,TRIPP", "Tripp County, SD", 291), + ref("SD,TURNER", "Turner County, SD", 291), + ref("SD,UNION", "Union County, SD", 291), + ref("SD,WALWORTH", "Walworth County, SD", 291), + ref("SD,YANKTON", "Yankton County, SD", 291), + ref("SD,ZIEBACH", "Ziebach County, SD", 291), + ref("TN,ANDERSON", "Anderson County, TN", 291), + ref("TN,BEDFORD", "Bedford County, TN", 291), + ref("TN,BENTON", "Benton County, TN", 291), + ref("TN,BLEDSOE", "Bledsoe County, TN", 291), + ref("TN,BLOUNT", "Blount County, TN", 291), + ref("TN,BRADLEY", "Bradley County, TN", 291), + ref("TN,CAMPBELL", "Campbell County, TN", 291), + ref("TN,CANNON", "Cannon County, TN", 291), + ref("TN,CARROLL", "Carroll County, TN", 291), + ref("TN,CARTER", "Carter County, TN", 291), + ref("TN,CHEATHAM", "Cheatham County, TN", 291), + ref("TN,CHESTER", "Chester County, TN", 291), + ref("TN,CLAIBORNE", "Claiborne County, TN", 291), + ref("TN,CLAY", "Clay County, TN", 291), + ref("TN,COCKE", "Cocke County, TN", 291), + ref("TN,COFFEE", "Coffee County, TN", 291), + ref("TN,CROCKETT", "Crockett County, TN", 291), + ref("TN,CUMBERLAND", "Cumberland County, TN", 291), + ref("TN,DAVIDSON", "Davidson County, TN", 291), + ref("TN,DECATUR", "Decatur County, TN", 291), + ref("TN,DEKALB", "DeKalb County, TN", 291), + ref("TN,DICKSON", "Dickson County, TN", 291), + ref("TN,DYER", "Dyer County, TN", 291), + ref("TN,FAYETTE", "Fayette County, TN", 291), + ref("TN,FENTRESS", "Fentress County, TN", 291), + ref("TN,FRANKLIN", "Franklin County, TN", 291), + ref("TN,GIBSON", "Gibson County, TN", 291), + ref("TN,GILES", "Giles County, TN", 291), + ref("TN,GRAINGER", "Grainger County, TN", 291), + ref("TN,GREENE", "Greene County, TN", 291), + ref("TN,GRUNDY", "Grundy County, TN", 291), + ref("TN,HAMBLEN", "Hamblen County, TN", 291), + ref("TN,HAMILTON", "Hamilton County, TN", 291), + ref("TN,HANCOCK", "Hancock County, TN", 291), + ref("TN,HARDEMAN", "Hardeman County, TN", 291), + ref("TN,HARDIN", "Hardin County, TN", 291), + ref("TN,HAWKINS", "Hawkins County, TN", 291), + ref("TN,HAYWOOD", "Haywood County, TN", 291), + ref("TN,HENDERSON", "Henderson County, TN", 291), + ref("TN,HENRY", "Henry County, TN", 291), + ref("TN,HICKMAN", "Hickman County, TN", 291), + ref("TN,HOUSTON", "Houston County, TN", 291), + ref("TN,HUMPHREYS", "Humphreys County, TN", 291), + ref("TN,JACKSON", "Jackson County, TN", 291), + ref("TN,JEFFERSON", "Jefferson County, TN", 291), + ref("TN,JOHNSON", "Johnson County, TN", 291), + ref("TN,KNOX", "Knox County, TN", 291), + ref("TN,LAKE", "Lake County, TN", 291), + ref("TN,LAUDERDALE", "Lauderdale County, TN", 291), + ref("TN,LAWRENCE", "Lawrence County, TN", 291), + ref("TN,LEWIS", "Lewis County, TN", 291), + ref("TN,LINCOLN", "Lincoln County, TN", 291), + ref("TN,LOUDON", "Loudon County, TN", 291), + ref("TN,MACON", "Macon County, TN", 291), + ref("TN,MADISON", "Madison County, TN", 291), + ref("TN,MARION", "Marion County, TN", 291), + ref("TN,MARSHALL", "Marshall County, TN", 291), + ref("TN,MAURY", "Maury County, TN", 291), + ref("TN,MCMINN", "McMinn County, TN", 291), + ref("TN,MCNAIRY", "McNairy County, TN", 291), + ref("TN,MEIGS", "Meigs County, TN", 291), + ref("TN,MONROE", "Monroe County, TN", 291), + ref("TN,MONTGOMERY", "Montgomery County, TN", 291), + ref("TN,MOORE", "Moore County, TN", 291), + ref("TN,MORGAN", "Morgan County, TN", 291), + ref("TN,OBION", "Obion County, TN", 291), + ref("TN,OVERTON", "Overton County, TN", 291), + ref("TN,PERRY", "Perry County, TN", 291), + ref("TN,PICKETT", "Pickett County, TN", 291), + ref("TN,POLK", "Polk County, TN", 291), + ref("TN,PUTNAM", "Putnam County, TN", 291), + ref("TN,RHEA", "Rhea County, TN", 291), + ref("TN,ROANE", "Roane County, TN", 291), + ref("TN,ROBERTSON", "Robertson County, TN", 291), + ref("TN,RUTHERFORD", "Rutherford County, TN", 291), + ref("TN,SCOTT", "Scott County, TN", 291), + ref("TN,SEQUATCHIE", "Sequatchie County, TN", 291), + ref("TN,SEVIER", "Sevier County, TN", 291), + ref("TN,SHELBY", "Shelby County, TN", 291), + ref("TN,SMITH", "Smith County, TN", 291), + ref("TN,STEWART", "Stewart County, TN", 291), + ref("TN,SULLIVAN", "Sullivan County, TN", 291), + ref("TN,SUMNER", "Sumner County, TN", 291), + ref("TN,TIPTON", "Tipton County, TN", 291), + ref("TN,TROUSDALE", "Trousdale County, TN", 291), + ref("TN,UNICOI", "Unicoi County, TN", 291), + ref("TN,UNION", "Union County, TN", 291), + ref("TN,VANBUREN", "Van Buren County, TN", 291), + ref("TN,WARREN", "Warren County, TN", 291), + ref("TN,WASHINGTON", "Washington County, TN", 291), + ref("TN,WAYNE", "Wayne County, TN", 291), + ref("TN,WEAKLEY", "Weakley County, TN", 291), + ref("TN,WHITE", "White County, TN", 291), + ref("TN,WILLIAMSON", "Williamson County, TN", 291), + ref("TN,WILSON", "Wilson County, TN", 291), + ref("TX,ANDERSON", "Anderson County, TX", 291), + ref("TX,ANDREWS", "Andrews County, TX", 291), + ref("TX,ANGELINA", "Angelina County, TX", 291), + ref("TX,ARANSAS", "Aransas County, TX", 291), + ref("TX,ARCHER", "Archer County, TX", 291), + ref("TX,ARMSTRONG", "Armstrong County, TX", 291), + ref("TX,ATASCOSA", "Atascosa County, TX", 291), + ref("TX,AUSTIN", "Austin County, TX", 291), + ref("TX,BAILEY", "Bailey County, TX", 291), + ref("TX,BANDERA", "Bandera County, TX", 291), + ref("TX,BASTROP", "Bastrop County, TX", 291), + ref("TX,BAYLOR", "Baylor County, TX", 291), + ref("TX,BEE", "Bee County, TX", 291), + ref("TX,BELL", "Bell County, TX", 291), + ref("TX,BEXAR", "Bexar County, TX", 291), + ref("TX,BLANCO", "Blanco County, TX", 291), + ref("TX,BORDEN", "Borden County, TX", 291), + ref("TX,BOSQUE", "Bosque County, TX", 291), + ref("TX,BOWIE", "Bowie County, TX", 291), + ref("TX,BRAZORIA", "Brazoria County, TX", 291), + ref("TX,BRAZOS", "Brazos County, TX", 291), + ref("TX,BREWSTER", "Brewster County, TX", 291), + ref("TX,BRISCOE", "Briscoe County, TX", 291), + ref("TX,BROOKS", "Brooks County, TX", 291), + ref("TX,BROWN", "Brown County, TX", 291), + ref("TX,BURLESON", "Burleson County, TX", 291), + ref("TX,BURNET", "Burnet County, TX", 291), + ref("TX,CALDWELL", "Caldwell County, TX", 291), + ref("TX,CALHOUN", "Calhoun County, TX", 291), + ref("TX,CALLAHAN", "Callahan County, TX", 291), + ref("TX,CAMERON", "Cameron County, TX", 291), + ref("TX,CAMP", "Camp County, TX", 291), + ref("TX,CARSON", "Carson County, TX", 291), + ref("TX,CASS", "Cass County, TX", 291), + ref("TX,CASTRO", "Castro County, TX", 291), + ref("TX,CHAMBERS", "Chambers County, TX", 291), + ref("TX,CHEROKEE", "Cherokee County, TX", 291), + ref("TX,CHILDRESS", "Childress County, TX", 291), + ref("TX,CLAY", "Clay County, TX", 291), + ref("TX,COCHRAN", "Cochran County, TX", 291), + ref("TX,COKE", "Coke County, TX", 291), + ref("TX,COLEMAN", "Coleman County, TX", 291), + ref("TX,COLLIN", "Collin County, TX", 291), + ref("TX,COLLINGSWORTH", "Collingsworth County, TX", 291), + ref("TX,COLORADO", "Colorado County, TX", 291), + ref("TX,COMAL", "Comal County, TX", 291), + ref("TX,COMANCHE", "Comanche County, TX", 291), + ref("TX,CONCHO", "Concho County, TX", 291), + ref("TX,COOKE", "Cooke County, TX", 291), + ref("TX,CORYELL", "Coryell County, TX", 291), + ref("TX,COTTLE", "Cottle County, TX", 291), + ref("TX,CRANE", "Crane County, TX", 291), + ref("TX,CROCKETT", "Crockett County, TX", 291), + ref("TX,CROSBY", "Crosby County, TX", 291), + ref("TX,CULBERSON", "Culberson County, TX", 291), + ref("TX,DALLAM", "Dallam County, TX", 291), + ref("TX,DALLAS", "Dallas County, TX", 291), + ref("TX,DAWSON", "Dawson County, TX", 291), + ref("TX,DEAFSMITH", "Deaf Smith County, TX", 291), + ref("TX,DELTA", "Delta County, TX", 291), + ref("TX,DENTON", "Denton County, TX", 291), + ref("TX,DEWITT", "DeWitt County, TX", 291), + ref("TX,DICKENS", "Dickens County, TX", 291), + ref("TX,DIMMIT", "Dimmit County, TX", 291), + ref("TX,DONLEY", "Donley County, TX", 291), + ref("TX,DUVAL", "Duval County, TX", 291), + ref("TX,EASTLAND", "Eastland County, TX", 291), + ref("TX,ECTOR", "Ector County, TX", 291), + ref("TX,EDWARDS", "Edwards County, TX", 291), + ref("TX,ELLIS", "Ellis County, TX", 291), + ref("TX,ELPASO", "El Paso County, TX", 291), + ref("TX,ERATH", "Erath County, TX", 291), + ref("TX,FALLS", "Falls County, TX", 291), + ref("TX,FANNIN", "Fannin County, TX", 291), + ref("TX,FAYETTE", "Fayette County, TX", 291), + ref("TX,FISHER", "Fisher County, TX", 291), + ref("TX,FLOYD", "Floyd County, TX", 291), + ref("TX,FOARD", "Foard County, TX", 291), + ref("TX,FORTBEND", "Fort Bend County, TX", 291), + ref("TX,FRANKLIN", "Franklin County, TX", 291), + ref("TX,FREESTONE", "Freestone County, TX", 291), + ref("TX,FRIO", "Frio County, TX", 291), + ref("TX,GAINES", "Gaines County, TX", 291), + ref("TX,GALVESTON", "Galveston County, TX", 291), + ref("TX,GARZA", "Garza County, TX", 291), + ref("TX,GILLESPIE", "Gillespie County, TX", 291), + ref("TX,GLASSCOCK", "Glasscock County, TX", 291), + ref("TX,GOLIAD", "Goliad County, TX", 291), + ref("TX,GONZALES", "Gonzales County, TX", 291), + ref("TX,GRAY", "Gray County, TX", 291), + ref("TX,GRAYSON", "Grayson County, TX", 291), + ref("TX,GREGG", "Gregg County, TX", 291), + ref("TX,GRIMES", "Grimes County, TX", 291), + ref("TX,GUADALUPE", "Guadalupe County, TX", 291), + ref("TX,HALE", "Hale County, TX", 291), + ref("TX,HALL", "Hall County, TX", 291), + ref("TX,HAMILTON", "Hamilton County, TX", 291), + ref("TX,HANSFORD", "Hansford County, TX", 291), + ref("TX,HARDEMAN", "Hardeman County, TX", 291), + ref("TX,HARDIN", "Hardin County, TX", 291), + ref("TX,HARRIS", "Harris County, TX", 291), + ref("TX,HARRISON", "Harrison County, TX", 291), + ref("TX,HARTLEY", "Hartley County, TX", 291), + ref("TX,HASKELL", "Haskell County, TX", 291), + ref("TX,HAYS", "Hays County, TX", 291), + ref("TX,HEMPHILL", "Hemphill County, TX", 291), + ref("TX,HENDERSON", "Henderson County, TX", 291), + ref("TX,HIDALGO", "Hidalgo County, TX", 291), + ref("TX,HILL", "Hill County, TX", 291), + ref("TX,HOCKLEY", "Hockley County, TX", 291), + ref("TX,HOOD", "Hood County, TX", 291), + ref("TX,HOPKINS", "Hopkins County, TX", 291), + ref("TX,HOUSTON", "Houston County, TX", 291), + ref("TX,HOWARD", "Howard County, TX", 291), + ref("TX,HUDSPETH", "Hudspeth County, TX", 291), + ref("TX,HUNT", "Hunt County, TX", 291), + ref("TX,HUTCHINSON", "Hutchinson County, TX", 291), + ref("TX,IRION", "Irion County, TX", 291), + ref("TX,JACK", "Jack County, TX", 291), + ref("TX,JACKSON", "Jackson County, TX", 291), + ref("TX,JASPER", "Jasper County, TX", 291), + ref("TX,JEFFDAVIS", "Jeff Davis County, TX", 291), + ref("TX,JEFFERSON", "Jefferson County, TX", 291), + ref("TX,JIMHOGG", "Jim Hogg County, TX", 291), + ref("TX,JIMWELLS", "Jim Wells County, TX", 291), + ref("TX,JOHNSON", "Johnson County, TX", 291), + ref("TX,JONES", "Jones County, TX", 291), + ref("TX,KARNES", "Karnes County, TX", 291), + ref("TX,KAUFMAN", "Kaufman County, TX", 291), + ref("TX,KENDALL", "Kendall County, TX", 291), + ref("TX,KENEDY", "Kenedy County, TX", 291), + ref("TX,KENT", "Kent County, TX", 291), + ref("TX,KERR", "Kerr County, TX", 291), + ref("TX,KIMBLE", "Kimble County, TX", 291), + ref("TX,KING", "King County, TX", 291), + ref("TX,KINNEY", "Kinney County, TX", 291), + ref("TX,KLEBERG", "Kleberg County, TX", 291), + ref("TX,KNOX", "Knox County, TX", 291), + ref("TX,LAMAR", "Lamar County, TX", 291), + ref("TX,LAMB", "Lamb County, TX", 291), + ref("TX,LAMPASAS", "Lampasas County, TX", 291), + ref("TX,LASALLE", "La Salle County, TX", 291), + ref("TX,LAVACA", "Lavaca County, TX", 291), + ref("TX,LEE", "Lee County, TX", 291), + ref("TX,LEON", "Leon County, TX", 291), + ref("TX,LIBERTY", "Liberty County, TX", 291), + ref("TX,LIMESTONE", "Limestone County, TX", 291), + ref("TX,LIPSCOMB", "Lipscomb County, TX", 291), + ref("TX,LIVEOAK", "Live Oak County, TX", 291), + ref("TX,LLANO", "Llano County, TX", 291), + ref("TX,LOVING", "Loving County, TX", 291), + ref("TX,LUBBOCK", "Lubbock County, TX", 291), + ref("TX,LYNN", "Lynn County, TX", 291), + ref("TX,MADISON", "Madison County, TX", 291), + ref("TX,MARION", "Marion County, TX", 291), + ref("TX,MARTIN", "Martin County, TX", 291), + ref("TX,MASON", "Mason County, TX", 291), + ref("TX,MATAGORDA", "Matagorda County, TX", 291), + ref("TX,MAVERICK", "Maverick County, TX", 291), + ref("TX,MCCULLOCH", "McCulloch County, TX", 291), + ref("TX,MCLENNAN", "McLennan County, TX", 291), + ref("TX,MCMULLEN", "McMullen County, TX", 291), + ref("TX,MEDINA", "Medina County, TX", 291), + ref("TX,MENARD", "Menard County, TX", 291), + ref("TX,MIDLAND", "Midland County, TX", 291), + ref("TX,MILAM", "Milam County, TX", 291), + ref("TX,MILLS", "Mills County, TX", 291), + ref("TX,MITCHELL", "Mitchell County, TX", 291), + ref("TX,MONTAGUE", "Montague County, TX", 291), + ref("TX,MONTGOMERY", "Montgomery County, TX", 291), + ref("TX,MOORE", "Moore County, TX", 291), + ref("TX,MORRIS", "Morris County, TX", 291), + ref("TX,MOTLEY", "Motley County, TX", 291), + ref("TX,NACOGDOCHES", "Nacogdoches County, TX", 291), + ref("TX,NAVARRO", "Navarro County, TX", 291), + ref("TX,NEWTON", "Newton County, TX", 291), + ref("TX,NOLAN", "Nolan County, TX", 291), + ref("TX,NUECES", "Nueces County, TX", 291), + ref("TX,OCHILTREE", "Ochiltree County, TX", 291), + ref("TX,OLDHAM", "Oldham County, TX", 291), + ref("TX,ORANGE", "Orange County, TX", 291), + ref("TX,PALOPINTO", "Palo Pinto County, TX", 291), + ref("TX,PANOLA", "Panola County, TX", 291), + ref("TX,PARKER", "Parker County, TX", 291), + ref("TX,PARMER", "Parmer County, TX", 291), + ref("TX,PECOS", "Pecos County, TX", 291), + ref("TX,POLK", "Polk County, TX", 291), + ref("TX,POTTER", "Potter County, TX", 291), + ref("TX,PRESIDIO", "Presidio County, TX", 291), + ref("TX,RAINS", "Rains County, TX", 291), + ref("TX,RANDALL", "Randall County, TX", 291), + ref("TX,REAGAN", "Reagan County, TX", 291), + ref("TX,REAL", "Real County, TX", 291), + ref("TX,REDRIVER", "Red River County, TX", 291), + ref("TX,REEVES", "Reeves County, TX", 291), + ref("TX,REFUGIO", "Refugio County, TX", 291), + ref("TX,ROBERTS", "Roberts County, TX", 291), + ref("TX,ROBERTSON", "Robertson County, TX", 291), + ref("TX,ROCKWALL", "Rockwall County, TX", 291), + ref("TX,RUNNELS", "Runnels County, TX", 291), + ref("TX,RUSK", "Rusk County, TX", 291), + ref("TX,SABINE", "Sabine County, TX", 291), + ref("TX,SANAUGUSTINE", "San Augustine County, TX", 291), + ref("TX,SANJACINTO", "San Jacinto County, TX", 291), + ref("TX,SANPATRICIO", "San Patricio County, TX", 291), + ref("TX,SANSABA", "San Saba County, TX", 291), + ref("TX,SCHLEICHER", "Schleicher County, TX", 291), + ref("TX,SCURRY", "Scurry County, TX", 291), + ref("TX,SHACKELFORD", "Shackelford County, TX", 291), + ref("TX,SHELBY", "Shelby County, TX", 291), + ref("TX,SHERMAN", "Sherman County, TX", 291), + ref("TX,SMITH", "Smith County, TX", 291), + ref("TX,SOMERVELL", "Somervell County, TX", 291), + ref("TX,STARR", "Starr County, TX", 291), + ref("TX,STEPHENS", "Stephens County, TX", 291), + ref("TX,STERLING", "Sterling County, TX", 291), + ref("TX,STONEWALL", "Stonewall County, TX", 291), + ref("TX,SUTTON", "Sutton County, TX", 291), + ref("TX,SWISHER", "Swisher County, TX", 291), + ref("TX,TARRANT", "Tarrant County, TX", 291), + ref("TX,TAYLOR", "Taylor County, TX", 291), + ref("TX,TERRELL", "Terrell County, TX", 291), + ref("TX,TERRY", "Terry County, TX", 291), + ref("TX,THROCKMORTON", "Throckmorton County, TX", 291), + ref("TX,TITUS", "Titus County, TX", 291), + ref("TX,TOMGREEN", "Tom Green County, TX", 291), + ref("TX,TRAVIS", "Travis County, TX", 291), + ref("TX,TRINITY", "Trinity County, TX", 291), + ref("TX,TYLER", "Tyler County, TX", 291), + ref("TX,UPSHUR", "Upshur County, TX", 291), + ref("TX,UPTON", "Upton County, TX", 291), + ref("TX,UVALDE", "Uvalde County, TX", 291), + ref("TX,VALVERDE", "Val Verde County, TX", 291), + ref("TX,VANZANDT", "Van Zandt County, TX", 291), + ref("TX,VICTORIA", "Victoria County, TX", 291), + ref("TX,WALKER", "Walker County, TX", 291), + ref("TX,WALLER", "Waller County, TX", 291), + ref("TX,WARD", "Ward County, TX", 291), + ref("TX,WASHINGTON", "Washington County, TX", 291), + ref("TX,WEBB", "Webb County, TX", 291), + ref("TX,WHARTON", "Wharton County, TX", 291), + ref("TX,WHEELER", "Wheeler County, TX", 291), + ref("TX,WICHITA", "Wichita County, TX", 291), + ref("TX,WILBARGER", "Wilbarger County, TX", 291), + ref("TX,WILLACY", "Willacy County, TX", 291), + ref("TX,WILLIAMSON", "Williamson County, TX", 291), + ref("TX,WILSON", "Wilson County, TX", 291), + ref("TX,WINKLER", "Winkler County, TX", 291), + ref("TX,WISE", "Wise County, TX", 291), + ref("TX,WOOD", "Wood County, TX", 291), + ref("TX,YOAKUM", "Yoakum County, TX", 291), + ref("TX,YOUNG", "Young County, TX", 291), + ref("TX,ZAPATA", "Zapata County, TX", 291), + ref("TX,ZAVALA", "Zavala County, TX", 291), + ref("UT,BEAVER", "Beaver County, UT", 291), + ref("UT,BOXELDER", "Box Elder County, UT", 291), + ref("UT,CACHE", "Cache County, UT", 291), + ref("UT,CARBON", "Carbon County, UT", 291), + ref("UT,DAGGETT", "Daggett County, UT", 291), + ref("UT,DAVIS", "Davis County, UT", 291), + ref("UT,DUCHESNE", "Duchesne County, UT", 291), + ref("UT,EMERY", "Emery County, UT", 291), + ref("UT,GARFIELD", "Garfield County, UT", 291), + ref("UT,GRAND", "Grand County, UT", 291), + ref("UT,IRON", "Iron County, UT", 291), + ref("UT,JUAB", "Juab County, UT", 291), + ref("UT,KANE", "Kane County, UT", 291), + ref("UT,MILLARD", "Millard County, UT", 291), + ref("UT,MORGAN", "Morgan County, UT", 291), + ref("UT,PIUTE", "Piute County, UT", 291), + ref("UT,RICH", "Rich County, UT", 291), + ref("UT,SALTLAKE", "Salt Lake County, UT", 291), + ref("UT,SANJUAN", "San Juan County, UT", 291), + ref("UT,SANPETE", "Sanpete County, UT", 291), + ref("UT,SEVIER", "Sevier County, UT", 291), + ref("UT,SUMMIT", "Summit County, UT", 291), + ref("UT,TOOELE", "Tooele County, UT", 291), + ref("UT,UINTAH", "Uintah County, UT", 291), + ref("UT,UTAH", "Utah County, UT", 291), + ref("UT,WASATCH", "Wasatch County, UT", 291), + ref("UT,WASHINGTON", "Washington County, UT", 291), + ref("UT,WAYNE", "Wayne County, UT", 291), + ref("UT,WEBER", "Weber County, UT", 291), + ref("VA,ACCOMACK", "Accomack County, VA", 291), + ref("VA,ALBEMARLE", "Albemarle County, VA", 291), + ref("VA,ALEXANDRIACITY", "Alexandria city, VA", 291), + ref("VA,ALLEGHANY", "Alleghany County, VA", 291), + ref("VA,AMELIA", "Amelia County, VA", 291), + ref("VA,AMHERST", "Amherst County, VA", 291), + ref("VA,APPOMATTOX", "Appomattox County, VA", 291), + ref("VA,ARLINGTON", "Arlington County, VA", 291), + ref("VA,AUGUSTA", "Augusta County, VA", 291), + ref("VA,BATH", "Bath County, VA", 291), + ref("VA,BEDFORD", "Bedford County, VA", 291), + ref("VA,BEDFORDCITY", "Bedford city, VA", 291), + ref("VA,BLAND", "Bland County, VA", 291), + ref("VA,BOTETOURT", "Botetourt County, VA", 291), + ref("VA,BRISTOLCITY", "Bristol city, VA", 291), + ref("VA,BRUNSWICK", "Brunswick County, VA", 291), + ref("VA,BUCHANAN", "Buchanan County, VA", 291), + ref("VA,BUCKINGHAM", "Buckingham County, VA", 291), + ref("VA,BUENAVISTACITY", "Buena Vista city, VA", 291), + ref("VA,CAMPBELL", "Campbell County, VA", 291), + ref("VA,CAROLINE", "Caroline County, VA", 291), + ref("VA,CARROLL", "Carroll County, VA", 291), + ref("VA,CHARLESCITY", "Charles City County, VA", 291), + ref("VA,CHARLOTTE", "Charlotte County, VA", 291), + ref("VA,CHARLOTTESVILLECITY", "Charlottesville city, VA", 291), + ref("VA,CHESAPEAKECITY", "Chesapeake city, VA", 291), + ref("VA,CHESTERFIELD", "Chesterfield County, VA", 291), + ref("VA,CLARKE", "Clarke County, VA", 291), + ref("VA,COLONIALHEIGHTSCITY", "Colonial Heights city, VA", 291), + ref("VA,COVINGTONCITY", "Covington city, VA", 291), + ref("VA,CRAIG", "Craig County, VA", 291), + ref("VA,CULPEPER", "Culpeper County, VA", 291), + ref("VA,CUMBERLAND", "Cumberland County, VA", 291), + ref("VA,DANVILLECITY", "Danville city, VA", 291), + ref("VA,DICKENSON", "Dickenson County, VA", 291), + ref("VA,DINWIDDIE", "Dinwiddie County, VA", 291), + ref("VA,EMPORIACITY", "Emporia city, VA", 291), + ref("VA,ESSEX", "Essex County, VA", 291), + ref("VA,FAIRFAX", "Fairfax County, VA", 291), + ref("VA,FAIRFAXCITY", "Fairfax city, VA", 291), + ref("VA,FALLSCHURCHCITY", "Falls Church city, VA", 291), + ref("VA,FAUQUIER", "Fauquier County, VA", 291), + ref("VA,FLOYD", "Floyd County, VA", 291), + ref("VA,FLUVANNA", "Fluvanna County, VA", 291), + ref("VA,FRANKLIN", "Franklin County, VA", 291), + ref("VA,FRANKLINCITY", "Franklin city, VA", 291), + ref("VA,FREDERICK", "Frederick County, VA", 291), + ref("VA,FREDERICKSBURGCITY", "Fredericksburg city, VA", 291), + ref("VA,GALAXCITY", "Galax city, VA", 291), + ref("VA,GILES", "Giles County, VA", 291), + ref("VA,GLOUCESTER", "Gloucester County, VA", 291), + ref("VA,GOOCHLAND", "Goochland County, VA", 291), + ref("VA,GRAYSON", "Grayson County, VA", 291), + ref("VA,GREENE", "Greene County, VA", 291), + ref("VA,GREENSVILLE", "Greensville County, VA", 291), + ref("VA,HALIFAX", "Halifax County, VA", 291), + ref("VA,HAMPTONCITY", "Hampton city, VA", 291), + ref("VA,HANOVER", "Hanover County, VA", 291), + ref("VA,HARRISONBURGCITY", "Harrisonburg city, VA", 291), + ref("VA,HENRICO", "Henrico County, VA", 291), + ref("VA,HENRY", "Henry County, VA", 291), + ref("VA,HIGHLAND", "Highland County, VA", 291), + ref("VA,HOPEWELLCITY", "Hopewell city, VA", 291), + ref("VA,ISLEOFWIGHT", "Isle of Wight County, VA", 291), + ref("VA,JAMESCITY", "James City County, VA", 291), + ref("VA,KINGANDQUEEN", "King and Queen County, VA", 291), + ref("VA,KINGGEORGE", "King George County, VA", 291), + ref("VA,KINGWILLIAM", "King William County, VA", 291), + ref("VA,LANCASTER", "Lancaster County, VA", 291), + ref("VA,LEE", "Lee County, VA", 291), + ref("VA,LEXINGTONCITY", "Lexington city, VA", 291), + ref("VA,LOUDOUN", "Loudoun County, VA", 291), + ref("VA,LOUISA", "Louisa County, VA", 291), + ref("VA,LUNENBURG", "Lunenburg County, VA", 291), + ref("VA,LYNCHBURGCITY", "Lynchburg city, VA", 291), + ref("VA,MADISON", "Madison County, VA", 291), + ref("VA,MANASSASCITY", "Manassas city, VA", 291), + ref("VA,MANASSASPARKCITY", "Manassas Park city, VA", 291), + ref("VA,MARTINSVILLECITY", "Martinsville city, VA", 291), + ref("VA,MATHEWS", "Mathews County, VA", 291), + ref("VA,MECKLENBURG", "Mecklenburg County, VA", 291), + ref("VA,MIDDLESEX", "Middlesex County, VA", 291), + ref("VA,MONTGOMERY", "Montgomery County, VA", 291), + ref("VA,NELSON", "Nelson County, VA", 291), + ref("VA,NEWKENT", "New Kent County, VA", 291), + ref("VA,NEWPORTNEWSCITY", "Newport News city, VA", 291), + ref("VA,NORFOLKCITY", "Norfolk city, VA", 291), + ref("VA,NORTHAMPTON", "Northampton County, VA", 291), + ref("VA,NORTHUMBERLAND", "Northumberland County, VA", 291), + ref("VA,NORTONCITY", "Norton city, VA", 291), + ref("VA,NOTTOWAY", "Nottoway County, VA", 291), + ref("VA,ORANGE", "Orange County, VA", 291), + ref("VA,PAGE", "Page County, VA", 291), + ref("VA,PATRICK", "Patrick County, VA", 291), + ref("VA,PETERSBURGCITY", "Petersburg city, VA", 291), + ref("VA,PITTSYLVANIA", "Pittsylvania County, VA", 291), + ref("VA,POQUOSONCITY", "Poquoson city, VA", 291), + ref("VA,PORTSMOUTHCITY", "Portsmouth city, VA", 291), + ref("VA,POWHATAN", "Powhatan County, VA", 291), + ref("VA,PRINCEEDWARD", "Prince Edward County, VA", 291), + ref("VA,PRINCEGEORGE", "Prince George County, VA", 291), + ref("VA,PRINCEWILLIAM", "Prince William County, VA", 291), + ref("VA,PULASKI", "Pulaski County, VA", 291), + ref("VA,RADFORDCITY", "Radford city, VA", 291), + ref("VA,RAPPAHANNOCK", "Rappahannock County, VA", 291), + ref("VA,RICHMOND", "Richmond County, VA", 291), + ref("VA,RICHMONDCITY", "Richmond city, VA", 291), + ref("VA,ROANOKE", "Roanoke County, VA", 291), + ref("VA,ROANOKECITY", "Roanoke city, VA", 291), + ref("VA,ROCKBRIDGE", "Rockbridge County, VA", 291), + ref("VA,ROCKINGHAM", "Rockingham County, VA", 291), + ref("VA,RUSSELL", "Russell County, VA", 291), + ref("VA,SALEMCITY", "Salem city, VA", 291), + ref("VA,SCOTT", "Scott County, VA", 291), + ref("VA,SHENANDOAH", "Shenandoah County, VA", 291), + ref("VA,SMYTH", "Smyth County, VA", 291), + ref("VA,SOUTHAMPTON", "Southampton County, VA", 291), + ref("VA,SPOTSYLVANIA", "Spotsylvania County, VA", 291), + ref("VA,STAFFORD", "Stafford County, VA", 291), + ref("VA,STAUNTONCITY", "Staunton city, VA", 291), + ref("VA,SUFFOLKCITY", "Suffolk city, VA", 291), + ref("VA,SURRY", "Surry County, VA", 291), + ref("VA,SUSSEX", "Sussex County, VA", 291), + ref("VA,TAZEWELL", "Tazewell County, VA", 291), + ref("VA,VIRGINIABEACHCITY", "Virginia Beach city, VA", 291), + ref("VA,WARREN", "Warren County, VA", 291), + ref("VA,WASHINGTON", "Washington County, VA", 291), + ref("VA,WAYNESBOROCITY", "Waynesboro city, VA", 291), + ref("VA,WESTMORELAND", "Westmoreland County, VA", 291), + ref("VA,WILLIAMSBURGCITY", "Williamsburg city, VA", 291), + ref("VA,WINCHESTERCITY", "Winchester city, VA", 291), + ref("VA,WISE", "Wise County, VA", 291), + ref("VA,WYTHE", "Wythe County, VA", 291), + ref("VA,YORK", "York County, VA", 291), + ref("VT,ADDISON", "Addison County, VT", 291), + ref("VT,BENNINGTON", "Bennington County, VT", 291), + ref("VT,CALEDONIA", "Caledonia County, VT", 291), + ref("VT,CHITTENDEN", "Chittenden County, VT", 291), + ref("VT,ESSEX", "Essex County, VT", 291), + ref("VT,FRANKLIN", "Franklin County, VT", 291), + ref("VT,GRANDISLE", "Grand Isle County, VT", 291), + ref("VT,LAMOILLE", "Lamoille County, VT", 291), + ref("VT,ORANGE", "Orange County, VT", 291), + ref("VT,ORLEANS", "Orleans County, VT", 291), + ref("VT,RUTLAND", "Rutland County, VT", 291), + ref("VT,WASHINGTON", "Washington County, VT", 291), + ref("VT,WINDHAM", "Windham County, VT", 291), + ref("VT,WINDSOR", "Windsor County, VT", 291), + ref("WA,ADAMS", "Adams County, WA", 291), + ref("WA,ASOTIN", "Asotin County, WA", 291), + ref("WA,BENTON", "Benton County, WA", 291), + ref("WA,CHELAN", "Chelan County, WA", 291), + ref("WA,CLALLAM", "Clallam County, WA", 291), + ref("WA,CLARK", "Clark County, WA", 291), + ref("WA,COLUMBIA", "Columbia County, WA", 291), + ref("WA,COWLITZ", "Cowlitz County, WA", 291), + ref("WA,DOUGLAS", "Douglas County, WA", 291), + ref("WA,FERRY", "Ferry County, WA", 291), + ref("WA,FRANKLIN", "Franklin County, WA", 291), + ref("WA,GARFIELD", "Garfield County, WA", 291), + ref("WA,GRANT", "Grant County, WA", 291), + ref("WA,GRAYSHARBOR", "Grays Harbor County, WA", 291), + ref("WA,ISLAND", "Island County, WA", 291), + ref("WA,JEFFERSON", "Jefferson County, WA", 291), + ref("WA,KING", "King County, WA", 291), + ref("WA,KITSAP", "Kitsap County, WA", 291), + ref("WA,KITTITAS", "Kittitas County, WA", 291), + ref("WA,KLICKITAT", "Klickitat County, WA", 291), + ref("WA,LEWIS", "Lewis County, WA", 291), + ref("WA,LINCOLN", "Lincoln County, WA", 291), + ref("WA,MASON", "Mason County, WA", 291), + ref("WA,OKANOGAN", "Okanogan County, WA", 291), + ref("WA,PACIFIC", "Pacific County, WA", 291), + ref("WA,PENDOREILLE", "Pend Oreille County, WA", 291), + ref("WA,PIERCE", "Pierce County, WA", 291), + ref("WA,SANJUAN", "San Juan County, WA", 291), + ref("WA,SKAGIT", "Skagit County, WA", 291), + ref("WA,SKAMANIA", "Skamania County, WA", 291), + ref("WA,SNOHOMISH", "Snohomish County, WA", 291), + ref("WA,SPOKANE", "Spokane County, WA", 291), + ref("WA,STEVENS", "Stevens County, WA", 291), + ref("WA,THURSTON", "Thurston County, WA", 291), + ref("WA,WAHKIAKUM", "Wahkiakum County, WA", 291), + ref("WA,WALLAWALLA", "Walla Walla County, WA", 291), + ref("WA,WHATCOM", "Whatcom County, WA", 291), + ref("WA,WHITMAN", "Whitman County, WA", 291), + ref("WA,YAKIMA", "Yakima County, WA", 291), + ref("WI,ADAMS", "Adams County, WI", 291), + ref("WI,ASHLAND", "Ashland County, WI", 291), + ref("WI,BARRON", "Barron County, WI", 291), + ref("WI,BAYFIELD", "Bayfield County, WI", 291), + ref("WI,BROWN", "Brown County, WI", 291), + ref("WI,BUFFALO", "Buffalo County, WI", 291), + ref("WI,BURNETT", "Burnett County, WI", 291), + ref("WI,CALUMET", "Calumet County, WI", 291), + ref("WI,CHIPPEWA", "Chippewa County, WI", 291), + ref("WI,CLARK", "Clark County, WI", 291), + ref("WI,COLUMBIA", "Columbia County, WI", 291), + ref("WI,CRAWFORD", "Crawford County, WI", 291), + ref("WI,DANE", "Dane County, WI", 291), + ref("WI,DODGE", "Dodge County, WI", 291), + ref("WI,DOOR", "Door County, WI", 291), + ref("WI,DOUGLAS", "Douglas County, WI", 291), + ref("WI,DUNN", "Dunn County, WI", 291), + ref("WI,EAUCLAIRE", "Eau Claire County, WI", 291), + ref("WI,FLORENCE", "Florence County, WI", 291), + ref("WI,FONDDULAC", "Fond du Lac County, WI", 291), + ref("WI,FOREST", "Forest County, WI", 291), + ref("WI,GRANT", "Grant County, WI", 291), + ref("WI,GREEN", "Green County, WI", 291), + ref("WI,GREENLAKE", "Green Lake County, WI", 291), + ref("WI,IOWA", "Iowa County, WI", 291), + ref("WI,IRON", "Iron County, WI", 291), + ref("WI,JACKSON", "Jackson County, WI", 291), + ref("WI,JEFFERSON", "Jefferson County, WI", 291), + ref("WI,JUNEAU", "Juneau County, WI", 291), + ref("WI,KENOSHA", "Kenosha County, WI", 291), + ref("WI,KEWAUNEE", "Kewaunee County, WI", 291), + ref("WI,LACROSSE", "La Crosse County, WI", 291), + ref("WI,LAFAYETTE", "Lafayette County, WI", 291), + ref("WI,LANGLADE", "Langlade County, WI", 291), + ref("WI,LINCOLN", "Lincoln County, WI", 291), + ref("WI,MANITOWOC", "Manitowoc County, WI", 291), + ref("WI,MARATHON", "Marathon County, WI", 291), + ref("WI,MARINETTE", "Marinette County, WI", 291), + ref("WI,MARQUETTE", "Marquette County, WI", 291), + ref("WI,MENOMINEE", "Menominee County, WI", 291), + ref("WI,MILWAUKEE", "Milwaukee County, WI", 291), + ref("WI,MONROE", "Monroe County, WI", 291), + ref("WI,OCONTO", "Oconto County, WI", 291), + ref("WI,ONEIDA", "Oneida County, WI", 291), + ref("WI,OUTAGAMIE", "Outagamie County, WI", 291), + ref("WI,OZAUKEE", "Ozaukee County, WI", 291), + ref("WI,PEPIN", "Pepin County, WI", 291), + ref("WI,PIERCE", "Pierce County, WI", 291), + ref("WI,POLK", "Polk County, WI", 291), + ref("WI,PORTAGE", "Portage County, WI", 291), + ref("WI,PRICE", "Price County, WI", 291), + ref("WI,RACINE", "Racine County, WI", 291), + ref("WI,RICHLAND", "Richland County, WI", 291), + ref("WI,ROCK", "Rock County, WI", 291), + ref("WI,RUSK", "Rusk County, WI", 291), + ref("WI,SAUK", "Sauk County, WI", 291), + ref("WI,SAWYER", "Sawyer County, WI", 291), + ref("WI,SHAWANO", "Shawano County, WI", 291), + ref("WI,SHEBOYGAN", "Sheboygan County, WI", 291), + ref("WI,STCROIX", "St. Croix County, WI", 291), + ref("WI,TAYLOR", "Taylor County, WI", 291), + ref("WI,TREMPEALEAU", "Trempealeau County, WI", 291), + ref("WI,VERNON", "Vernon County, WI", 291), + ref("WI,VILAS", "Vilas County, WI", 291), + ref("WI,WALWORTH", "Walworth County, WI", 291), + ref("WI,WASHBURN", "Washburn County, WI", 291), + ref("WI,WASHINGTON", "Washington County, WI", 291), + ref("WI,WAUKESHA", "Waukesha County, WI", 291), + ref("WI,WAUPACA", "Waupaca County, WI", 291), + ref("WI,WAUSHARA", "Waushara County, WI", 291), + ref("WI,WINNEBAGO", "Winnebago County, WI", 291), + ref("WI,WOOD", "Wood County, WI", 291), + ref("WV,BARBOUR", "Barbour County, WV", 291), + ref("WV,BERKELEY", "Berkeley County, WV", 291), + ref("WV,BOONE", "Boone County, WV", 291), + ref("WV,BRAXTON", "Braxton County, WV", 291), + ref("WV,BROOKE", "Brooke County, WV", 291), + ref("WV,CABELL", "Cabell County, WV", 291), + ref("WV,CALHOUN", "Calhoun County, WV", 291), + ref("WV,CLAY", "Clay County, WV", 291), + ref("WV,DODDRIDGE", "Doddridge County, WV", 291), + ref("WV,FAYETTE", "Fayette County, WV", 291), + ref("WV,GILMER", "Gilmer County, WV", 291), + ref("WV,GRANT", "Grant County, WV", 291), + ref("WV,GREENBRIER", "Greenbrier County, WV", 291), + ref("WV,HAMPSHIRE", "Hampshire County, WV", 291), + ref("WV,HANCOCK", "Hancock County, WV", 291), + ref("WV,HARDY", "Hardy County, WV", 291), + ref("WV,HARRISON", "Harrison County, WV", 291), + ref("WV,JACKSON", "Jackson County, WV", 291), + ref("WV,JEFFERSON", "Jefferson County, WV", 291), + ref("WV,KANAWHA", "Kanawha County, WV", 291), + ref("WV,LEWIS", "Lewis County, WV", 291), + ref("WV,LINCOLN", "Lincoln County, WV", 291), + ref("WV,LOGAN", "Logan County, WV", 291), + ref("WV,MARION", "Marion County, WV", 291), + ref("WV,MARSHALL", "Marshall County, WV", 291), + ref("WV,MASON", "Mason County, WV", 291), + ref("WV,MCDOWELL", "McDowell County, WV", 291), + ref("WV,MERCER", "Mercer County, WV", 291), + ref("WV,MINERAL", "Mineral County, WV", 291), + ref("WV,MINGO", "Mingo County, WV", 291), + ref("WV,MONONGALIA", "Monongalia County, WV", 291), + ref("WV,MONROE", "Monroe County, WV", 291), + ref("WV,MORGAN", "Morgan County, WV", 291), + ref("WV,NICHOLAS", "Nicholas County, WV", 291), + ref("WV,OHIO", "Ohio County, WV", 291), + ref("WV,PENDLETON", "Pendleton County, WV", 291), + ref("WV,PLEASANTS", "Pleasants County, WV", 291), + ref("WV,POCAHONTAS", "Pocahontas County, WV", 291), + ref("WV,PRESTON", "Preston County, WV", 291), + ref("WV,PUTNAM", "Putnam County, WV", 291), + ref("WV,RALEIGH", "Raleigh County, WV", 291), + ref("WV,RANDOLPH", "Randolph County, WV", 291), + ref("WV,RITCHIE", "Ritchie County, WV", 291), + ref("WV,ROANE", "Roane County, WV", 291), + ref("WV,SUMMERS", "Summers County, WV", 291), + ref("WV,TAYLOR", "Taylor County, WV", 291), + ref("WV,TUCKER", "Tucker County, WV", 291), + ref("WV,TYLER", "Tyler County, WV", 291), + ref("WV,UPSHUR", "Upshur County, WV", 291), + ref("WV,WAYNE", "Wayne County, WV", 291), + ref("WV,WEBSTER", "Webster County, WV", 291), + ref("WV,WETZEL", "Wetzel County, WV", 291), + ref("WV,WIRT", "Wirt County, WV", 291), + ref("WV,WOOD", "Wood County, WV", 291), + ref("WV,WYOMING", "Wyoming County, WV", 291), + ref("WY,ALBANY", "Albany County, WY", 291), + ref("WY,BIGHORN", "Big Horn County, WY", 291), + ref("WY,CAMPBELL", "Campbell County, WY", 291), + ref("WY,CARBON", "Carbon County, WY", 291), + ref("WY,CONVERSE", "Converse County, WY", 291), + ref("WY,CROOK", "Crook County, WY", 291), + ref("WY,FREMONT", "Fremont County, WY", 291), + ref("WY,GOSHEN", "Goshen County, WY", 291), + ref("WY,HOTSPRINGS", "Hot Springs County, WY", 291), + ref("WY,JOHNSON", "Johnson County, WY", 291), + ref("WY,LARAMIE", "Laramie County, WY", 291), + ref("WY,LINCOLN", "Lincoln County, WY", 291), + ref("WY,NATRONA", "Natrona County, WY", 291), + ref("WY,NIOBRARA", "Niobrara County, WY", 291), + ref("WY,PARK", "Park County, WY", 291), + ref("WY,PLATTE", "Platte County, WY", 291), + ref("WY,SHERIDAN", "Sheridan County, WY", 291), + ref("WY,SUBLETTE", "Sublette County, WY", 291), + ref("WY,SWEETWATER", "Sweetwater County, WY", 291), + ref("WY,TETON", "Teton County, WY", 291), + ref("WY,UINTA", "Uinta County, WY", 291), + ref("WY,WASHAKIE", "Washakie County, WY", 291), + ref("WY,WESTON", "Weston County, WY", 291), + } +} diff --git a/internal/uls/uls.go b/internal/uls/uls.go new file mode 100644 index 0000000..91fd8b5 --- /dev/null +++ b/internal/uls/uls.go @@ -0,0 +1,403 @@ +// Package uls resolves a US amateur callsign to its county and grid, offline, +// from the FCC ULS licence database cross-referenced with a ZIP→county/lat-lon +// table. It backs the US Counties (USA-CA) award and county hunting: an FCC +// spot or a bare CW/SSB spot carries only a callsign, and this turns that into +// a county with no per-lookup API call. +// +// Data lives in its OWN local SQLite file (data/uls.db), never in the logbook: +// it is ~800k rows of static reference data that would only bloat the log (and +// crawl over a remote MySQL link). It is downloaded on demand, not shipped. +// +// Sources, both public and free: +// - FCC ULS Amateur, full database: l_amat.zip → EN.dat (pipe-delimited). +// Fields used: [4] call_sign, [17] state, [18] zip_code. +// - GeoNames US postal codes: US.zip → US.txt (tab-delimited). +// Fields used: [1] zip, [4] state, [5] county, [9] lat, [10] lon. +// +// The county from a ZIP is the ZIP's primary county — a ZIP can straddle a line, +// so this is ~98% right for fixed stations (rovers/portables need the from-air +// grid, which arrives separately via heard_geo). Good enough to hunt with. +package uls + +import ( + "archive/zip" + "bufio" + "context" + "database/sql" + "fmt" + "io" + "math" + "net/http" + "os" + "path/filepath" + "strings" + "sync" + "time" + + _ "modernc.org/sqlite" +) + +// Default download URLs (overridable in Import for tests). +const ( + fccAmateurURL = "https://data.fcc.gov/download/pub/uls/complete/l_amat.zip" + geoNamesURL = "https://download.geonames.org/export/zip/US.zip" +) + +// Location is a resolved callsign's home county + grid. +type Location struct { + State string `json:"state"` + County string `json:"county"` // GeoNames county name (e.g. "Middlesex") + Grid string `json:"grid"` // 6-char Maidenhead from the ZIP centroid +} + +// CNTY renders the ADIF "STATE,County" form for stamping a QSO's cnty field. +func (l Location) CNTY() string { + if l.State == "" || l.County == "" { + return "" + } + return l.State + "," + l.County +} + +// Store owns the local uls.db connection. +type Store struct { + db *sql.DB + mu sync.RWMutex // guards the whole DB during a re-import (DELETE+bulk INSERT) +} + +// Open opens (creating if needed) the ULS SQLite store at path. +func Open(path string) (*Store, error) { + db, err := sql.Open("sqlite", path+"?_pragma=busy_timeout(5000)&_pragma=journal_mode(WAL)") + if err != nil { + return nil, err + } + if _, err := db.Exec(` + CREATE TABLE IF NOT EXISTS uls_callsign ( + callsign TEXT PRIMARY KEY, + state TEXT NOT NULL DEFAULT '', + county TEXT NOT NULL DEFAULT '', + grid TEXT NOT NULL DEFAULT '' + ); + CREATE TABLE IF NOT EXISTS uls_meta ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL DEFAULT '' + );`); err != nil { + db.Close() + return nil, err + } + return &Store{db: db}, nil +} + +func (s *Store) Close() error { return s.db.Close() } + +// Count returns how many callsigns are loaded. +func (s *Store) Count() int { + s.mu.RLock() + defer s.mu.RUnlock() + var n int + s.db.QueryRow(`SELECT COUNT(*) FROM uls_callsign`).Scan(&n) + return n +} + +// UpdatedAt returns when the store was last imported (zero if never). +func (s *Store) UpdatedAt() time.Time { + s.mu.RLock() + defer s.mu.RUnlock() + var v string + if err := s.db.QueryRow(`SELECT value FROM uls_meta WHERE key='updated_at'`).Scan(&v); err != nil { + return time.Time{} + } + t, _ := time.Parse(time.RFC3339, v) + return t +} + +// Resolve looks up a callsign's home county + grid. ok=false if unknown or the +// store is empty. +func (s *Store) Resolve(callsign string) (Location, bool) { + call := strings.ToUpper(strings.TrimSpace(callsign)) + if call == "" { + return Location{}, false + } + s.mu.RLock() + defer s.mu.RUnlock() + var l Location + err := s.db.QueryRow(`SELECT state, county, grid FROM uls_callsign WHERE callsign=?`, call). + Scan(&l.State, &l.County, &l.Grid) + if err != nil || l.County == "" { + return Location{}, false + } + return l, true +} + +// Progress reports import stages to the caller (0..100 within a stage). +type Progress func(stage string, pct int) + +// zipRow is one ZIP's primary county + centroid. +type zipRow struct { + state, county string + lat, lon float64 +} + +// Import downloads the FCC ULS + GeoNames data, rebuilds the callsign→county +// table, and records the timestamp. It replaces the table atomically: on any +// error the previous contents are left intact. tmpDir is where the (large) zips +// are streamed; "" uses the OS temp dir. +func (s *Store) Import(ctx context.Context, tmpDir string, prog Progress) error { + if prog == nil { + prog = func(string, int) {} + } + if tmpDir == "" { + tmpDir = os.TempDir() + } + + // 1) ZIP→county/lat-lon crosswalk (small). + prog("Downloading ZIP crosswalk", 0) + geoPath := filepath.Join(tmpDir, "opslog_geonames_us.zip") + if err := download(ctx, geoNamesURL, geoPath, nil); err != nil { + return fmt.Errorf("download GeoNames: %w", err) + } + defer os.Remove(geoPath) + prog("Parsing ZIP crosswalk", 50) + zipmap, err := parseGeoNames(geoPath) + if err != nil { + return fmt.Errorf("parse GeoNames: %w", err) + } + if len(zipmap) == 0 { + return fmt.Errorf("GeoNames crosswalk is empty") + } + + // 2) FCC ULS full amateur database (large). + prog("Downloading FCC ULS database", 0) + amatPath := filepath.Join(tmpDir, "opslog_l_amat.zip") + if err := download(ctx, fccAmateurURL, amatPath, func(pct int) { prog("Downloading FCC ULS database", pct) }); err != nil { + return fmt.Errorf("download FCC ULS: %w", err) + } + defer os.Remove(amatPath) + + // 3) Parse EN.dat, join the crosswalk, rebuild the table. + prog("Building county database", 0) + return s.rebuild(ctx, amatPath, zipmap, prog) +} + +// rebuild streams EN.dat out of the FCC zip and replaces uls_callsign in one +// transaction (old data survives a failure). +func (s *Store) rebuild(ctx context.Context, amatZip string, zipmap map[string]zipRow, prog Progress) error { + zr, err := zip.OpenReader(amatZip) + if err != nil { + return fmt.Errorf("open FCC zip: %w", err) + } + defer zr.Close() + + var en *zip.File + for _, f := range zr.File { + if strings.EqualFold(filepath.Base(f.Name), "EN.dat") { + en = f + break + } + } + if en == nil { + return fmt.Errorf("EN.dat not found in FCC zip") + } + rc, err := en.Open() + if err != nil { + return fmt.Errorf("open EN.dat: %w", err) + } + defer rc.Close() + + s.mu.Lock() + defer s.mu.Unlock() + + tx, err := s.db.BeginTx(ctx, nil) + if err != nil { + return err + } + defer tx.Rollback() + if _, err := tx.ExecContext(ctx, `DELETE FROM uls_callsign`); err != nil { + return err + } + stmt, err := tx.PrepareContext(ctx, `INSERT OR REPLACE INTO uls_callsign(callsign,state,county,grid) VALUES(?,?,?,?)`) + if err != nil { + return err + } + defer stmt.Close() + + sc := bufio.NewScanner(rc) + sc.Buffer(make([]byte, 0, 64*1024), 1024*1024) + var n, kept int + for sc.Scan() { + if ctx.Err() != nil { + return ctx.Err() + } + n++ + f := strings.Split(sc.Text(), "|") + if len(f) < 19 { + continue + } + call := strings.ToUpper(strings.TrimSpace(f[4])) + if call == "" { + continue + } + zip5 := zip5Of(f[18]) + zr, ok := zipmap[zip5] + if !ok { + continue // no crosswalk entry → can't place it + } + state := strings.ToUpper(strings.TrimSpace(f[17])) + if state == "" { + state = zr.state + } + if _, err := stmt.ExecContext(ctx, call, state, zr.county, grid6(zr.lat, zr.lon)); err != nil { + return err + } + kept++ + if kept%50000 == 0 { + prog("Building county database", int(math.Min(99, float64(kept)/8000))) + } + } + if err := sc.Err(); err != nil { + return fmt.Errorf("read EN.dat: %w", err) + } + if _, err := tx.ExecContext(ctx, `INSERT OR REPLACE INTO uls_meta(key,value) VALUES('updated_at',?)`, + time.Now().UTC().Format(time.RFC3339)); err != nil { + return err + } + if err := tx.Commit(); err != nil { + return err + } + prog("Done", 100) + return nil +} + +// parseGeoNames reads US.txt out of the GeoNames zip into a zip→row map, +// keeping the first (primary) county seen for each ZIP. +func parseGeoNames(zipPath string) (map[string]zipRow, error) { + zr, err := zip.OpenReader(zipPath) + if err != nil { + return nil, err + } + defer zr.Close() + var txt *zip.File + for _, f := range zr.File { + if strings.EqualFold(filepath.Base(f.Name), "US.txt") { + txt = f + break + } + } + if txt == nil { + return nil, fmt.Errorf("US.txt not found") + } + rc, err := txt.Open() + if err != nil { + return nil, err + } + defer rc.Close() + + out := make(map[string]zipRow, 45000) + sc := bufio.NewScanner(rc) + sc.Buffer(make([]byte, 0, 64*1024), 256*1024) + for sc.Scan() { + f := strings.Split(sc.Text(), "\t") + if len(f) < 11 { + continue + } + zip5 := strings.TrimSpace(f[1]) + if zip5 == "" { + continue + } + if _, dup := out[zip5]; dup { + continue + } + lat := parseFloat(f[9]) + lon := parseFloat(f[10]) + out[zip5] = zipRow{ + state: strings.ToUpper(strings.TrimSpace(f[4])), + county: strings.TrimSpace(f[5]), + lat: lat, + lon: lon, + } + } + return out, sc.Err() +} + +// download streams url to dest, reporting percent when the content length is +// known and prog is non-nil. +func download(ctx context.Context, url, dest string, prog func(pct int)) error { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + return err + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("%s: HTTP %d", url, resp.StatusCode) + } + f, err := os.Create(dest) + if err != nil { + return err + } + defer f.Close() + + var body io.Reader = resp.Body + if prog != nil && resp.ContentLength > 0 { + body = &progReader{r: resp.Body, total: resp.ContentLength, prog: prog} + } + _, err = io.Copy(f, body) + return err +} + +type progReader struct { + r io.Reader + total int64 + read int64 + last int + prog func(pct int) +} + +func (p *progReader) Read(b []byte) (int, error) { + n, err := p.r.Read(b) + p.read += int64(n) + if pct := int(p.read * 100 / p.total); pct != p.last { + p.last = pct + p.prog(pct) + } + return n, err +} + +func zip5Of(z string) string { + z = strings.TrimSpace(z) + if len(z) > 5 { + z = z[:5] + } + return z +} + +func parseFloat(s string) float64 { + var v float64 + fmt.Sscanf(strings.TrimSpace(s), "%g", &v) + return v +} + +// grid6 converts latitude/longitude to a 6-character Maidenhead locator. +func grid6(lat, lon float64) string { + if lat == 0 && lon == 0 { + return "" + } + lon += 180 + lat += 90 + if lon < 0 || lon >= 360 || lat < 0 || lat >= 180 { + return "" + } + f0 := int(lon / 20) + f1 := int(lat / 10) + sq0 := int(math.Mod(lon, 20) / 2) + sq1 := int(math.Mod(lat, 10) / 1) + su0 := int(math.Mod(lon, 2) / (2.0 / 24)) + su1 := int(math.Mod(lat, 1) / (1.0 / 24)) + return string([]byte{ + byte('A' + f0), byte('A' + f1), + byte('0' + sq0), byte('0' + sq1), + byte('a' + su0), byte('a' + su1), + }) +} diff --git a/internal/uls/uls_test.go b/internal/uls/uls_test.go new file mode 100644 index 0000000..e1b7bb0 --- /dev/null +++ b/internal/uls/uls_test.go @@ -0,0 +1,42 @@ +package uls + +import ( + "os" + "testing" +) + +func TestGrid6(t *testing.T) { + cases := []struct { + lat, lon float64 + want string + }{ + {38.90, -77.03, "FM18lw"}, // Washington DC + {40.71, -74.00, "FN30xr"}, // New York + {34.05, -118.24, "DM04vd"},// Los Angeles + } + for _, c := range cases { + if got := grid6(c.lat, c.lon); got[:4] != c.want[:4] { + t.Errorf("grid6(%v,%v)=%q want field/square %q", c.lat, c.lon, got, c.want[:4]) + } + } +} + +// TestParseGeoNames runs against the real GeoNames US.zip if present in the +// scratchpad (downloaded during development); skipped otherwise. +func TestParseGeoNames(t *testing.T) { + path := os.Getenv("GEONAMES_ZIP") + if path == "" { + t.Skip("set GEONAMES_ZIP to the US.zip path to run") + } + m, err := parseGeoNames(path) + if err != nil { + t.Fatal(err) + } + if len(m) < 30000 { + t.Fatalf("expected >30k ZIPs, got %d", len(m)) + } + // A known ZIP: 20500 = The White House, DC. + if r, ok := m["20500"]; !ok || r.state != "DC" { + t.Errorf("ZIP 20500 = %+v (ok=%v)", r, ok) + } +}