From cf18828cca7bc6f8981f5f5119a9aa7151103541 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Tue, 11 Mar 2008 10:38:34 +1100 Subject: [PATCH 001/270] starting bank account stuff --- extra/bank/bank.factor | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 extra/bank/bank.factor diff --git a/extra/bank/bank.factor b/extra/bank/bank.factor new file mode 100644 index 0000000000..c9228bedd5 --- /dev/null +++ b/extra/bank/bank.factor @@ -0,0 +1,33 @@ +USING: accessors calendar kernel money new-slots sequences ; +IN: bank + +MIXIN: policy +TUPLE: simple-policy interest-rate ; +INSTANCE: simple-policy policy +C: simple-policy + +GENERIC: interest-rate ( date account policy -- rate ) +M: simple-policy interest-rate 2nip interest-rate>> ; + +: daily-interest-rate ( date account policy -- rate ) + pick days-in-year >r interest-rate r> / ; + +TUPLE: account name balance transactions ; + +: ( name -- account ) + 0 V{ } clone account construct-boa ; + +TUPLE: transaction date amount description ; + +C: transaction + +: >>transaction ( account transaction -- account ) + over transactions>> push ; + +: open-account ( date opening-balance name -- account ) + >r "Account Opened" >>transaction ; + +: open-account-now ( opening-balance name -- account ) + now -rot open-account ; + + From a7acb16e2002b2f8cb9d77e3753a61aa2d5fb5c0 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Sun, 16 Mar 2008 12:41:13 +1100 Subject: [PATCH 002/270] semantic-db: committing latest changes --- extra/semantic-db/context/context.factor | 8 +-- extra/semantic-db/hierarchy/hierarchy.factor | 13 +++-- .../semantic-db/membership/membership.factor | 6 +++ extra/semantic-db/relations/relations.factor | 2 +- extra/semantic-db/semantic-db-tests.factor | 49 +++++++++---------- 5 files changed, 38 insertions(+), 40 deletions(-) create mode 100644 extra/semantic-db/membership/membership.factor diff --git a/extra/semantic-db/context/context.factor b/extra/semantic-db/context/context.factor index 777c481ebb..9d2e175b5e 100644 --- a/extra/semantic-db/context/context.factor +++ b/extra/semantic-db/context/context.factor @@ -6,11 +6,5 @@ IN: semantic-db.context : create-context* ( context-name -- context-id ) create-node* ; : create-context ( context-name -- ) create-context* drop ; -: context ( -- context-id ) - \ context get ; +SYMBOL: context -: set-context ( context-id -- ) - \ context set ; - -: with-context ( context-id quot -- ) - >r \ context r> with-variable ; diff --git a/extra/semantic-db/hierarchy/hierarchy.factor b/extra/semantic-db/hierarchy/hierarchy.factor index be0789ba5e..f180ddb5df 100644 --- a/extra/semantic-db/hierarchy/hierarchy.factor +++ b/extra/semantic-db/hierarchy/hierarchy.factor @@ -1,32 +1,31 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors db.tuples hashtables kernel new-slots +USING: accessors db.tuples hashtables kernel namespaces new-slots semantic-db semantic-db.relations sequences sequences.deep ; IN: semantic-db.hierarchy TUPLE: tree id children ; C: tree -: has-parent-relation ( -- relation-id ) - "has parent" relation-id ; +SYMBOL: has-parent-relation : parent-child* ( parent child -- arc-id ) - has-parent-relation spin create-arc* ; + has-parent-relation get spin create-arc* ; : parent-child ( parent child -- ) parent-child* drop ; : un-parent-child ( parent child -- ) - has-parent-relation spin select-tuples [ id>> delete-arc ] each ; + has-parent-relation get spin select-tuples [ id>> delete-arc ] each ; : child-arcs ( node-id -- child-arcs ) - has-parent-relation f rot select-tuples ; + has-parent-relation get f rot select-tuples ; : children ( node-id -- children ) child-arcs [ subject>> ] map ; : parent-arcs ( node-id -- parent-arcs ) - has-parent-relation swap f select-tuples ; + has-parent-relation get swap f select-tuples ; : parents ( node-id -- parents ) parent-arcs [ object>> ] map ; diff --git a/extra/semantic-db/membership/membership.factor b/extra/semantic-db/membership/membership.factor new file mode 100644 index 0000000000..c386922979 --- /dev/null +++ b/extra/semantic-db/membership/membership.factor @@ -0,0 +1,6 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors kernel new-slots semantic-db semantic-db.relations ; +IN: semantic-db.membership + + diff --git a/extra/semantic-db/relations/relations.factor b/extra/semantic-db/relations/relations.factor index 17c335c4ae..58003c9e9d 100644 --- a/extra/semantic-db/relations/relations.factor +++ b/extra/semantic-db/relations/relations.factor @@ -23,4 +23,4 @@ IN: semantic-db.relations single-int-results ?first ; : relation-id ( relation-name -- relation-id ) - context swap [ get-relation ] [ create-relation* ] ensure2 ; + context get swap [ get-relation ] [ create-relation* ] ensure2 ; diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index 257133c67f..fad2ea6332 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -24,16 +24,15 @@ delete-db test-db [ init-semantic-db - "test content" create-context* [ - [ 4 ] [ context ] unit-test - [ 5 ] [ context "is test content" create-relation* ] unit-test - [ 5 ] [ context "is test content" get-relation ] unit-test - [ 5 ] [ "is test content" relation-id ] unit-test - [ 7 ] [ "has parent" relation-id ] unit-test - [ 7 ] [ "has parent" relation-id ] unit-test - [ "has parent" ] [ "has parent" relation-id node-content ] unit-test - [ "test content" ] [ context node-content ] unit-test - ] with-context + "test content" create-context* context set + [ 4 ] [ context get ] unit-test + [ 5 ] [ context get "is test content" create-relation* ] unit-test + [ 5 ] [ context get "is test content" get-relation ] unit-test + [ 5 ] [ "is test content" relation-id ] unit-test + [ 7 ] [ "has parent" relation-id ] unit-test + [ 7 ] [ "has parent" relation-id ] unit-test + [ "has parent" ] [ "has parent" relation-id node-content ] unit-test + [ "test content" ] [ context get node-content ] unit-test ! type-type 1array [ "type" ensure-type ] unit-test ! [ { 1 2 3 } ] [ type-type select-nodes-of-type ] unit-test ! [ 1 ] [ type-type select-node-of-type ] unit-test @@ -52,21 +51,21 @@ delete-db ! test hierarchy test-db [ init-semantic-db - "family tree" create-context* [ - "adam" create-node* "adam" set - "eve" create-node* "eve" set - "bob" create-node* "bob" set - "fran" create-node* "fran" set - "charlie" create-node* "charlie" set - "gertrude" create-node* "gertrude" set - [ t ] [ "adam" get "bob" get parent-child* integer? ] unit-test - { { "eve" "bob" } { "eve" "fran" } { "bob" "gertrude" } { "bob" "fran" } { "fran" "charlie" } } [ first2 [ get ] 2apply parent-child ] each - [ { "bob" "fran" } ] [ "eve" get children [ node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "bob" get parents [ node-content ] map ] unit-test - [ "fran" { "charlie" } ] [ "fran" get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "charlie" get get-root-nodes [ node-content ] map natural-sort >array ] unit-test - [ { } ] [ "fran" get "charlie" get tuck un-parent-child parents [ node-content ] map ] unit-test - ] with-context + "family tree" create-context* context set + "has parent" relation-id has-parent-relation set + "adam" create-node* "adam" set + "eve" create-node* "eve" set + "bob" create-node* "bob" set + "fran" create-node* "fran" set + "charlie" create-node* "charlie" set + "gertrude" create-node* "gertrude" set + [ t ] [ "adam" get "bob" get parent-child* integer? ] unit-test + { { "eve" "bob" } { "eve" "fran" } { "bob" "gertrude" } { "bob" "fran" } { "fran" "charlie" } } [ first2 [ get ] 2apply parent-child ] each + [ { "bob" "fran" } ] [ "eve" get children [ node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "bob" get parents [ node-content ] map ] unit-test + [ "fran" { "charlie" } ] [ "fran" get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "charlie" get get-root-nodes [ node-content ] map natural-sort >array ] unit-test + [ { } ] [ "fran" get "charlie" get tuck un-parent-child parents [ node-content ] map ] unit-test ] with-db delete-db From 09c61d7d0a94d33c60ecd9babce043b0c70547d0 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Sun, 16 Mar 2008 13:25:27 +1100 Subject: [PATCH 003/270] new-graphs: starting a library that has directed and undirected graphs --- extra/new-graphs/new-graphs.factor | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 extra/new-graphs/new-graphs.factor diff --git a/extra/new-graphs/new-graphs.factor b/extra/new-graphs/new-graphs.factor new file mode 100644 index 0000000000..b82ed8a22d --- /dev/null +++ b/extra/new-graphs/new-graphs.factor @@ -0,0 +1,21 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors assocs kernel new-slots sequences vectors ; +IN: new-graphs + +TUPLE: graph edges ; +TUPLE: digraph ; +TUPLE: undigraph ; + +: ( -- graph ) + H{ } clone graph construct-boa H{ } clone over set-delegate ; + +: ( -- graph ) + digraph construct-empty tuck set-delegate ; + +: ( -- graph ) + undigraph construct-empty tuck set-delegate ; + +GENERIC: add-vertex ( key value graph -- ) +M: graph add-vertex ( key value digraph -- ) set-at ; + From c90c0025c7544e54bb696e686a7271f55d55f2f7 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Wed, 19 Mar 2008 21:22:15 +1100 Subject: [PATCH 004/270] semantic-db: move everything into one vocab --- extra/semantic-db/context/context.factor | 10 --- extra/semantic-db/hierarchy/hierarchy.factor | 44 --------- .../semantic-db/membership/membership.factor | 6 -- extra/semantic-db/relations/relations.factor | 26 ------ extra/semantic-db/semantic-db-tests.factor | 66 +++++++------- extra/semantic-db/semantic-db.factor | 90 +++++++++++++++---- 6 files changed, 107 insertions(+), 135 deletions(-) delete mode 100644 extra/semantic-db/context/context.factor delete mode 100644 extra/semantic-db/hierarchy/hierarchy.factor delete mode 100644 extra/semantic-db/membership/membership.factor delete mode 100644 extra/semantic-db/relations/relations.factor diff --git a/extra/semantic-db/context/context.factor b/extra/semantic-db/context/context.factor deleted file mode 100644 index 9d2e175b5e..0000000000 --- a/extra/semantic-db/context/context.factor +++ /dev/null @@ -1,10 +0,0 @@ -! Copyright (C) 2008 Alex Chapman -! See http://factorcode.org/license.txt for BSD license. -USING: kernel namespaces semantic-db ; -IN: semantic-db.context - -: create-context* ( context-name -- context-id ) create-node* ; -: create-context ( context-name -- ) create-context* drop ; - -SYMBOL: context - diff --git a/extra/semantic-db/hierarchy/hierarchy.factor b/extra/semantic-db/hierarchy/hierarchy.factor deleted file mode 100644 index f180ddb5df..0000000000 --- a/extra/semantic-db/hierarchy/hierarchy.factor +++ /dev/null @@ -1,44 +0,0 @@ -! Copyright (C) 2008 Alex Chapman -! See http://factorcode.org/license.txt for BSD license. -USING: accessors db.tuples hashtables kernel namespaces new-slots -semantic-db semantic-db.relations sequences sequences.deep ; -IN: semantic-db.hierarchy - -TUPLE: tree id children ; -C: tree - -SYMBOL: has-parent-relation - -: parent-child* ( parent child -- arc-id ) - has-parent-relation get spin create-arc* ; - -: parent-child ( parent child -- ) - parent-child* drop ; - -: un-parent-child ( parent child -- ) - has-parent-relation get spin select-tuples [ id>> delete-arc ] each ; - -: child-arcs ( node-id -- child-arcs ) - has-parent-relation get f rot select-tuples ; - -: children ( node-id -- children ) - child-arcs [ subject>> ] map ; - -: parent-arcs ( node-id -- parent-arcs ) - has-parent-relation get swap f select-tuples ; - -: parents ( node-id -- parents ) - parent-arcs [ object>> ] map ; - -: get-node-hierarchy ( node-id -- tree ) - dup children [ get-node-hierarchy ] map ; - -: (get-root-nodes) ( node-id -- root-nodes/node-id ) - dup parents dup empty? [ - drop - ] [ - nip [ (get-root-nodes) ] map - ] if ; - -: get-root-nodes ( node-id -- root-nodes ) - (get-root-nodes) flatten prune ; diff --git a/extra/semantic-db/membership/membership.factor b/extra/semantic-db/membership/membership.factor deleted file mode 100644 index c386922979..0000000000 --- a/extra/semantic-db/membership/membership.factor +++ /dev/null @@ -1,6 +0,0 @@ -! Copyright (C) 2008 Alex Chapman -! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel new-slots semantic-db semantic-db.relations ; -IN: semantic-db.membership - - diff --git a/extra/semantic-db/relations/relations.factor b/extra/semantic-db/relations/relations.factor deleted file mode 100644 index 58003c9e9d..0000000000 --- a/extra/semantic-db/relations/relations.factor +++ /dev/null @@ -1,26 +0,0 @@ -! Copyright (C) 2008 Alex Chapman -! See http://factorcode.org/license.txt for BSD license. -USING: db.types kernel namespaces semantic-db semantic-db.context -sequences.lib ; -IN: semantic-db.relations - -! relations: -! - have a context in context 'semantic-db' - -: create-relation* ( context-id relation-name -- relation-id ) - create-node* tuck has-context-relation spin create-arc ; - -: create-relation ( context-id relation-name -- ) - create-relation* drop ; - -: get-relation ( context-id relation-name -- relation-id/f ) - [ - ":name" TEXT param , - ":context" INTEGER param , - has-context-relation ":has_context" INTEGER param , - ] { } make - "select n.id from node n, arc a where n.content = :name and n.id = a.subject and a.relation = :has_context and a.object = :context" - single-int-results ?first ; - -: relation-id ( relation-name -- relation-id ) - context get swap [ get-relation ] [ create-relation* ] ensure2 ; diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index fad2ea6332..47363b8f5d 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -1,10 +1,12 @@ -USING: accessors arrays continuations db db.sqlite -db.tuples io.files kernel math namespaces semantic-db -semantic-db.context semantic-db.hierarchy -semantic-db.relations sequences sorting tools.test -tools.walker ; +USING: accessors arrays continuations db db.sqlite db.tuples io.files +kernel math namespaces semantic-db + +sequences sorting tools.test tools.walker ; IN: semantic-db.tests +SYMBOL: context +SYMBOL: has-parent-relation + : db-path "semantic-db-test.db" temp-file ; : test-db db-path sqlite-db ; : delete-db [ db-path delete-file ] ignore-errors ; @@ -13,25 +15,25 @@ delete-db test-db [ create-node-table create-arc-table - [ 1 ] [ "first node" create-node* ] unit-test - [ 2 ] [ "second node" create-node* ] unit-test - [ 3 ] [ "third node" create-node* ] unit-test - [ 4 ] [ f create-node* ] unit-test - [ 5 ] [ 1 2 3 create-arc* ] unit-test + [ 1 ] [ "first node" create-node ] unit-test + [ 2 ] [ "second node" create-node ] unit-test + [ 3 ] [ "third node" create-node ] unit-test + [ 4 ] [ f create-node ] unit-test + [ 5 ] [ 1 2 3 create-arc ] unit-test ] with-db delete-db test-db [ init-semantic-db - "test content" create-context* context set + "test content" create-context context set [ 4 ] [ context get ] unit-test - [ 5 ] [ context get "is test content" create-relation* ] unit-test - [ 5 ] [ context get "is test content" get-relation ] unit-test - [ 5 ] [ "is test content" relation-id ] unit-test - [ 7 ] [ "has parent" relation-id ] unit-test - [ 7 ] [ "has parent" relation-id ] unit-test - [ "has parent" ] [ "has parent" relation-id node-content ] unit-test + [ 5 ] [ "is test content" context get create-relation ] unit-test + [ 5 ] [ "is test content" context get get-relation ] unit-test + [ 5 ] [ "is test content" context get relation-id ] unit-test + [ 7 ] [ "has parent" context get relation-id ] unit-test + [ 7 ] [ "has parent" context get relation-id ] unit-test + [ "has parent" ] [ "has parent" context get relation-id node-content ] unit-test [ "test content" ] [ context get node-content ] unit-test ! type-type 1array [ "type" ensure-type ] unit-test ! [ { 1 2 3 } ] [ type-type select-nodes-of-type ] unit-test @@ -51,21 +53,21 @@ delete-db ! test hierarchy test-db [ init-semantic-db - "family tree" create-context* context set - "has parent" relation-id has-parent-relation set - "adam" create-node* "adam" set - "eve" create-node* "eve" set - "bob" create-node* "bob" set - "fran" create-node* "fran" set - "charlie" create-node* "charlie" set - "gertrude" create-node* "gertrude" set - [ t ] [ "adam" get "bob" get parent-child* integer? ] unit-test - { { "eve" "bob" } { "eve" "fran" } { "bob" "gertrude" } { "bob" "fran" } { "fran" "charlie" } } [ first2 [ get ] 2apply parent-child ] each - [ { "bob" "fran" } ] [ "eve" get children [ node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "bob" get parents [ node-content ] map ] unit-test - [ "fran" { "charlie" } ] [ "fran" get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "charlie" get get-root-nodes [ node-content ] map natural-sort >array ] unit-test - [ { } ] [ "fran" get "charlie" get tuck un-parent-child parents [ node-content ] map ] unit-test + "family tree" create-context context set + "has parent" context get relation-id has-parent-relation set + "adam" create-node "adam" set + "eve" create-node "eve" set + "bob" create-node "bob" set + "fran" create-node "fran" set + "charlie" create-node "charlie" set + "gertrude" create-node "gertrude" set + [ t ] [ "adam" get "bob" get has-parent-relation get parent-child integer? ] unit-test + { { "eve" "bob" } { "eve" "fran" } { "bob" "gertrude" } { "bob" "fran" } { "fran" "charlie" } } [ first2 [ get ] 2apply has-parent-relation get parent-child drop ] each + [ { "bob" "fran" } ] [ "eve" get has-parent-relation get children [ node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "bob" get has-parent-relation get parents [ node-content ] map ] unit-test + [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get get-root-nodes [ node-content ] map natural-sort >array ] unit-test + [ { } ] [ "fran" get "charlie" get tuck has-parent-relation get un-parent-child has-parent-relation get parents [ node-content ] map ] unit-test ] with-db delete-db diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index e8075c016d..340514fd11 100644 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays continuations db db.tuples db.types db.sqlite kernel math math.parser new-slots sequences ; +USING: accessors arrays continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots sequences sequences.deep sequences.lib ; IN: semantic-db TUPLE: node id content ; @@ -22,19 +22,16 @@ node "node" : delete-node ( node-id -- ) delete-tuple ; -: create-node* ( str -- node-id ) +: create-node ( str -- node-id ) dup insert-tuple id>> ; -: create-node ( str -- ) - create-node* drop ; - : node-content ( id -- str ) f swap >>id select-tuple content>> ; -TUPLE: arc id relation subject object ; +TUPLE: arc id subject object relation ; -: ( relation subject object -- arc ) - arc construct-empty swap >>object swap >>subject swap >>relation ; +: ( subject object relation -- arc ) + arc construct-empty swap >>relation swap >>object swap >>subject ; : ( id -- arc ) arc construct-empty swap >>id ; @@ -45,12 +42,9 @@ TUPLE: arc id relation subject object ; : delete-arc ( arc-id -- ) dup delete-node delete-tuple ; -: create-arc* ( relation subject object -- arc-id ) +: create-arc ( subject object relation -- arc-id ) dup insert-arc id>> ; -: create-arc ( relation subject object -- ) - create-arc* drop ; - arc "arc" { { "id" "id" INTEGER +assigned-id+ } ! foreign key to node table? @@ -59,18 +53,17 @@ arc "arc" { "object" "object" INTEGER +not-null+ } } define-persistent -: create-arc-table ( -- ) - arc create-table ; +: create-arc-table ( -- ) arc create-table ; : create-bootstrap-nodes ( -- ) - "semantic-db" create-node - "has context" create-node ; + "semantic-db" create-node drop + "has context" create-node drop ; : semantic-db-context 1 ; : has-context-relation 2 ; : create-bootstrap-arcs ( -- ) - has-context-relation has-context-relation semantic-db-context create-arc ; + has-context-relation semantic-db-context has-context-relation create-arc drop ; : init-semantic-db ( -- ) create-node-table create-arc-table create-bootstrap-nodes create-bootstrap-arcs ; @@ -87,3 +80,66 @@ arc "arc" #! quot2 ( x y -- z ) creates a new z if quot1 returns f >r >r 2dup r> call [ 2nip ] r> if* ; +: create-context ( context-name -- context-id ) create-node ; + +! relations: +! - have a context in context 'semantic-db' + +: create-relation ( relation-name context-id -- relation-id ) + [ create-node dup ] dip has-context-relation create-arc drop ; + +: get-relation ( relation-name context-id -- relation-id/f ) + [ + ":context" INTEGER param , + ":name" TEXT param , + has-context-relation ":has_context" INTEGER param , + ] { } make + "select n.id from node n, arc a where n.content = :name and n.id = a.subject and a.relation = :has_context and a.object = :context" + single-int-results ?first ; + +: relation-id ( relation-name context-id -- relation-id ) + [ get-relation ] [ create-relation ] ensure2 ; + +! hierarchy +TUPLE: tree id children ; +C: tree + +: parent-child ( parent child has-parent-relation -- arc-id ) swapd create-arc ; + +: un-parent-child ( parent child has-parent-relation -- ) + swapd select-tuples [ id>> delete-arc ] each ; + +: child-arcs ( parent-id has-parent-relation -- child-arcs ) + f -rot select-tuples ; + +: children ( node-id has-parent-relation -- children ) + child-arcs [ subject>> ] map ; + +: parent-arcs ( node-id has-parent-relation -- parent-arcs ) + f swap select-tuples ; + +: parents ( node-id has-parent-relation -- parents ) + parent-arcs [ object>> ] map ; + +: get-node-hierarchy ( node-id has-parent-relation -- tree ) + 2dup children >r [ get-node-hierarchy ] curry r> swap map ; + +: (get-root-nodes) ( node-id has-parent-relation -- root-nodes/node-id ) + 2dup parents dup empty? [ + 2drop + ] [ + >r nip [ (get-root-nodes) ] curry r> swap map + ] if ; + +: get-root-nodes ( node-id has-parent-relation -- root-nodes ) + (get-root-nodes) flatten prune ; + +! sets + +: in-set* ( set member in-set-relation -- arc-id ) swapd create-arc ; + +: in-set? ( set member in-set-relation -- ? ) + swapd select-tuples length 0 > ; + +: set-members ( set in-set-relation -- members ) + f -rot select-tuples [ id>> ] map ; From 3df71e5447c05fb6e815124ddd40af66de4ff0cf Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Fri, 21 Mar 2008 02:01:58 +1100 Subject: [PATCH 005/270] semantic-db: add RELATION: --- extra/semantic-db/semantic-db-tests.factor | 31 +++---- extra/semantic-db/semantic-db.factor | 97 ++++++++++++++++------ 2 files changed, 81 insertions(+), 47 deletions(-) diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index 47363b8f5d..0dccab330b 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -14,15 +14,13 @@ SYMBOL: has-parent-relation delete-db test-db [ - create-node-table create-arc-table + node create-table arc create-table [ 1 ] [ "first node" create-node ] unit-test [ 2 ] [ "second node" create-node ] unit-test [ 3 ] [ "third node" create-node ] unit-test [ 4 ] [ f create-node ] unit-test [ 5 ] [ 1 2 3 create-arc ] unit-test -] with-db - -delete-db +] with-db delete-db test-db [ init-semantic-db @@ -35,20 +33,7 @@ test-db [ [ 7 ] [ "has parent" context get relation-id ] unit-test [ "has parent" ] [ "has parent" context get relation-id node-content ] unit-test [ "test content" ] [ context get node-content ] unit-test - ! type-type 1array [ "type" ensure-type ] unit-test - ! [ { 1 2 3 } ] [ type-type select-nodes-of-type ] unit-test - ! [ 1 ] [ type-type select-node-of-type ] unit-test - ! [ t ] [ "content" ensure-type integer? ] unit-test - ! [ t ] [ "content" ensure-type "content" ensure-type = ] unit-test - ! [ t ] [ "content" ensure-type "first content" create-node-of-type integer? ] unit-test - ! [ t ] [ "content" ensure-type select-node-of-type integer? ] unit-test - ! [ t ] [ "content" ensure-type "first content" select-node-of-type-with-content integer? ] unit-test - ! [ t ] [ "content" ensure-type "first content" ensure-node-of-type integer? ] unit-test - ! [ t ] [ "content" ensure-type "second content" ensure-node-of-type integer? ] unit-test - ! [ 2 ] [ "content" ensure-type select-nodes-of-type length ] unit-test -] with-db - -delete-db +] with-db delete-db ! test hierarchy test-db [ @@ -68,6 +53,12 @@ test-db [ [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get get-root-nodes [ node-content ] map natural-sort >array ] unit-test [ { } ] [ "fran" get "charlie" get tuck has-parent-relation get un-parent-child has-parent-relation get parents [ node-content ] map ] unit-test -] with-db +] with-db delete-db + +RELATION: test-relation + +test-db [ + init-semantic-db + [ 5 ] [ test-relation ] unit-test +] with-db delete-db -delete-db diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 340514fd11..f73b76327b 100644 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots sequences sequences.deep sequences.lib ; +USING: accessors arrays combinators.cleave continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots parser sequences sequences.deep sequences.lib words ; IN: semantic-db TUPLE: node id content ; @@ -16,9 +16,6 @@ node "node" { "content" "content" TEXT } } define-persistent -: create-node-table ( -- ) - node create-table ; - : delete-node ( node-id -- ) delete-tuple ; @@ -45,6 +42,30 @@ TUPLE: arc id subject object relation ; : create-arc ( subject object relation -- arc-id ) dup insert-arc id>> ; +: has-arc? ( subject object relation -- ? ) + select-tuples length 0 > ; + +: select-arcs ( subject object relation -- arcs ) + select-tuples ; + +: select-arc-ids ( subject object relation -- arc-ids ) + select-arcs [ id>> ] map ; + +: select-arc-subjects ( subject object relation -- subject-ids ) + select-arcs [ subject>> ] map ; + +: select-arc-objects ( subject object relation -- object-ids ) + select-arcs [ object>> ] map ; + +: delete-arcs ( subject object relation -- ) + select-arcs [ id>> delete-arc ] each ; + +: subject-relation ( subject relation -- subject object relation ) + f swap ; + +: object-relation ( object relation -- subject object relation ) + f -rot ; + arc "arc" { { "id" "id" INTEGER +assigned-id+ } ! foreign key to node table? @@ -53,20 +74,20 @@ arc "arc" { "object" "object" INTEGER +not-null+ } } define-persistent -: create-arc-table ( -- ) arc create-table ; - : create-bootstrap-nodes ( -- ) "semantic-db" create-node drop - "has context" create-node drop ; + "has-context" create-node drop ; -: semantic-db-context 1 ; +: semantic-db-context 1 ; : has-context-relation 2 ; : create-bootstrap-arcs ( -- ) has-context-relation semantic-db-context has-context-relation create-arc drop ; : init-semantic-db ( -- ) - create-node-table create-arc-table create-bootstrap-nodes create-bootstrap-arcs ; + node create-table + arc create-table + create-bootstrap-nodes create-bootstrap-arcs ; : param ( value key type -- param ) swapd 3array ; @@ -75,13 +96,31 @@ arc "arc" f f [ do-bound-query ] with-disposal [ first string>number ] map ; +: ensure1 ( x quot1 quot2 -- y ) + #! quot1 ( x -- y/f ) tries to find an existing y + #! quot2 ( x -- y ) creates a new y if quot1 returns f + >r dupd call [ nip ] r> if* ; + : ensure2 ( x y quot1 quot2 -- z ) - #! quot1 ( x y -- z/f ) finds an existing z + #! quot1 ( x y -- z/f ) tries to find an existing z #! quot2 ( x y -- z ) creates a new z if quot1 returns f >r >r 2dup r> call [ 2nip ] r> if* ; +! contexts: +! - a node n is a context iff there exists a relation r such that r has context n : create-context ( context-name -- context-id ) create-node ; +: get-context ( context-name -- context-id/f ) + [ + ":name" TEXT param , + has-context-relation ":has_context" INTEGER param , + ] { } make + "select distinct n.id from node n, arc a where n.content = :name and a.relation = :has_context and a.object = n.id" + single-int-results ?first ; + +: context-id ( context-name -- context-id ) + [ get-context ] [ create-context ] ensure1 ; + ! relations: ! - have a context in context 'semantic-db' @@ -100,26 +139,28 @@ arc "arc" : relation-id ( relation-name context-id -- relation-id ) [ get-relation ] [ create-relation ] ensure2 ; +! RELATION: is-fooey +! - define a word is-fooey in the current vocab (foo), that when called: +! - finds or creates a node called "is-fooey" with context "foo", and returns its id +: RELATION: + CREATE-WORD dup [ word-name ] [ word-vocabulary ] bi + [ context-id relation-id ] 2curry define ; parsing + ! hierarchy TUPLE: tree id children ; C: tree -: parent-child ( parent child has-parent-relation -- arc-id ) swapd create-arc ; +: parent-child ( parent child has-parent-relation -- arc-id ) + swapd create-arc ; : un-parent-child ( parent child has-parent-relation -- ) - swapd select-tuples [ id>> delete-arc ] each ; - -: child-arcs ( parent-id has-parent-relation -- child-arcs ) - f -rot select-tuples ; + swapd delete-arcs ; : children ( node-id has-parent-relation -- children ) - child-arcs [ subject>> ] map ; - -: parent-arcs ( node-id has-parent-relation -- parent-arcs ) - f swap select-tuples ; + object-relation select-arc-subjects ; : parents ( node-id has-parent-relation -- parents ) - parent-arcs [ object>> ] map ; + subject-relation select-arc-objects ; : get-node-hierarchy ( node-id has-parent-relation -- tree ) 2dup children >r [ get-node-hierarchy ] curry r> swap map ; @@ -135,11 +176,13 @@ C: tree (get-root-nodes) flatten prune ; ! sets - -: in-set* ( set member in-set-relation -- arc-id ) swapd create-arc ; - -: in-set? ( set member in-set-relation -- ? ) - swapd select-tuples length 0 > ; - +: in-set ( member set in-set-relation -- arc-id ) create-arc ; +: in-set? ( member set in-set-relation -- ? ) has-arc? ; : set-members ( set in-set-relation -- members ) - f -rot select-tuples [ id>> ] map ; + object-relation select-arc-subjects ; + +! attributes +: has-attribute ( node value has-attribute-relation -- arc-id ) create-arc ; +: has-attribute? ( node value has-attribute-relation -- ? ) has-arc? ; +: nodes-with-attribute ( value has-attribute-relation -- node-ids ) + object-relation select-arc-subjects ; From 5d6720f9916e7d1ada9bad5b38a0802368f6edca Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Fri, 21 Mar 2008 20:36:24 -0700 Subject: [PATCH 006/270] Unit tests for COM callbacks --- extra/windows/com/com-tests.factor | 162 ++++++++++++----------------- 1 file changed, 69 insertions(+), 93 deletions(-) diff --git a/extra/windows/com/com-tests.factor b/extra/windows/com/com-tests.factor index 4a2f465fef..4c62e7adfd 100644 --- a/extra/windows/com/com-tests.factor +++ b/extra/windows/com/com-tests.factor @@ -1,93 +1,69 @@ -USING: kernel windows.com windows.com.syntax windows.ole32 -alien alien.syntax tools.test libc alien.c-types arrays.lib -namespaces arrays continuations ; -IN: windows.com.tests - -! Create some test COM interfaces - -COM-INTERFACE: ISimple IUnknown {216fb341-0eb2-44b1-8edb-60b76e353abc} - HRESULT returnOK ( ) - HRESULT returnError ( ) ; - -COM-INTERFACE: IInherited ISimple {9620ecec-8438-423b-bb14-86f835aa40dd} - int getX ( ) - void setX ( int newX ) ; - -! Implement the IInherited interface in factor using alien-callbacks - -C-STRUCT: test-implementation - { "void*" "vtbl" } - { "int" "x" } ; - -: QueryInterface-callback - "HRESULT" { "void*" "REFGUID" "void**" } "stdcall" [ nip 0 swap set-void*-nth S_OK ] - alien-callback ; -: AddRef-callback - "ULONG" { "void*" } "stdcall" [ drop 2 ] - alien-callback ; -: Release-callback - "ULONG" { "void*" } "stdcall" [ drop 1 ] - alien-callback ; -: returnOK-callback - "HRESULT" { "void*" } "stdcall" [ drop S_OK ] - alien-callback ; -: returnError-callback - "HRESULT" { "void*" } "stdcall" [ drop E_FAIL ] - alien-callback ; -: getX-callback - "int" { "void*" } "stdcall" [ test-implementation-x ] - alien-callback ; -: setX-callback - "void" { "void*" "int" } "stdcall" [ swap set-test-implementation-x ] - alien-callback ; - -SYMBOL: +test-implementation-vtbl+ -SYMBOL: +guinea-pig-implementation+ - -: (make-test-implementation) ( x imp -- imp ) - [ set-test-implementation-x ] keep - +test-implementation-vtbl+ get over set-test-implementation-vtbl ; - -: ( x -- imp ) - "test-implementation" (make-test-implementation) ; - -: ( x -- imp ) - "test-implementation" heap-size malloc (make-test-implementation) ; - -QueryInterface-callback -AddRef-callback -Release-callback -returnOK-callback -returnError-callback -getX-callback -setX-callback -7 narray >c-void*-array -dup byte-length [ - [ byte-array>memory ] keep - +test-implementation-vtbl+ set - - ! Test that the words defined by COM-INTERFACE: do their magic - - "{216fb341-0eb2-44b1-8edb-60b76e353abc}" string>guid 1array [ ISimple-iid ] unit-test - "{9620ecec-8438-423b-bb14-86f835aa40dd}" string>guid 1array [ IInherited-iid ] unit-test - "{00000000-0000-0000-C000-000000000046}" string>guid 1array [ IUnknown-iid ] unit-test - S_OK 1array [ 0 ISimple::returnOK ] unit-test - E_FAIL *long 1array [ 0 ISimple::returnError ] unit-test - 1984 1array [ 0 dup 1984 IInherited::setX IInherited::getX ] unit-test - - ! Test that the helper functions for QueryInterface, AddRef, Release work - - 0 +guinea-pig-implementation+ set - [ - +guinea-pig-implementation+ get 1array [ - +guinea-pig-implementation+ get com-add-ref - ] unit-test - - { } [ +guinea-pig-implementation+ get com-release ] unit-test - - +guinea-pig-implementation+ get 1array [ - +guinea-pig-implementation+ get IUnknown-iid com-query-interface - ] unit-test - - ] [ +guinea-pig-implementation+ get free ] [ ] cleanup -] with-malloc +USING: kernel windows.com windows.com.syntax windows.ole32 +alien alien.syntax tools.test libc alien.c-types arrays.lib +namespaces arrays continuations accessors ; +IN: windows.com.tests + +COM-INTERFACE: ISimple IUnknown {216fb341-0eb2-44b1-8edb-60b76e353abc} + HRESULT returnOK ( ) + HRESULT returnError ( ) ; + +COM-INTERFACE: IInherited ISimple {9620ecec-8438-423b-bb14-86f835aa40dd} + int getX ( ) + void setX ( int newX ) ; + +COM-INTERFACE: IUnrelated IUnknown {b06ac3f4-30e4-406b-a7cd-c29cead4552c} + int xPlus ( int y ) + int xMulAdd ( int mul, int add ) ; + +"{216fb341-0eb2-44b1-8edb-60b76e353abc}" string>guid 1array [ ISimple-iid ] unit-test +"{9620ecec-8438-423b-bb14-86f835aa40dd}" string>guid 1array [ IInherited-iid ] unit-test +"{00000000-0000-0000-C000-000000000046}" string>guid 1array [ IUnknown-iid ] unit-test + +SYMBOL: +test-vtbl+ +SYMBOL: +guinea-pig-implementation+ + +TUPLE: test-implementation x ; +C: test-implementation + +{ + { "IInherited" { + [ drop S_OK ] ! ISimple::returnOK + [ drop E_FAIL ] ! ISimple::returnError + [ x>> ] ! IInherited::getX + [ >>x drop ] ! IInherited::setX + } } + { "IUnrelated" { + [ swap x>> + ] ! IUnrelated::xPlus + [ spin x>> * + ] ! IUnrealted::xMulAdd + } } +} +dup +test-vtbl+ set [ + + 0 +test-vtbl+ get com-wrap + dup +guinea-pig-implementation+ set [ + + S_OK 1array [ +guinea-pig-implementation+ get ISimple::returnOK ] unit-test + E_FAIL *long 1array [ +guinea-pig-implementation+ get ISimple::returnError ] unit-test + 20 1array [ +guinea-pig-implementation+ get dup 20 IInherited::setX IInherited::getX ] unit-test + 420 1array [ +guinea-pig-implementation+ get 20 20 IUnrelated::xMulAdd ] unit-test + 40 1array [ +guinea-pig-implementation+ get 20 IUnrelated::xPlus ] unit-test + + +guinea-pig-implementation+ get 1array [ + +guinea-pig-implementation+ get com-add-ref + ] unit-test + + { } [ +guinea-pig-implementation+ get com-release ] unit-test + + +guinea-pig-implementation+ get 1array [ + +guinea-pig-implementation+ get IUnknown-iid com-query-interface + ] unit-test + +guinea-pig-implementation+ get 1array [ + +guinea-pig-implementation+ get ISimple-iid com-query-interface + ] unit-test + "void*" heap-size +guinea-pig-implementation+ get 1array [ + +guinea-pig-implementation+ get IUnrelated-iid com-query-interface + ] unit-test + + ] with-com-interface + +] [ free-com-vtbl ] [ ] cleanup From 43aba96e8c858617638edf8e5ff3796f24f2b4f8 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Tue, 25 Mar 2008 17:38:14 +1100 Subject: [PATCH 007/270] semantic-db: new RELATION: syntax --- extra/semantic-db/semantic-db-tests.factor | 81 +++++++++--------- extra/semantic-db/semantic-db.factor | 96 ++++++++++++++-------- 2 files changed, 102 insertions(+), 75 deletions(-) diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index 0dccab330b..7fa0ff2176 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -5,7 +5,6 @@ sequences sorting tools.test tools.walker ; IN: semantic-db.tests SYMBOL: context -SYMBOL: has-parent-relation : db-path "semantic-db-test.db" temp-file ; : test-db db-path sqlite-db ; @@ -22,43 +21,43 @@ test-db [ [ 5 ] [ 1 2 3 create-arc ] unit-test ] with-db delete-db -test-db [ - init-semantic-db - "test content" create-context context set - [ 4 ] [ context get ] unit-test - [ 5 ] [ "is test content" context get create-relation ] unit-test - [ 5 ] [ "is test content" context get get-relation ] unit-test - [ 5 ] [ "is test content" context get relation-id ] unit-test - [ 7 ] [ "has parent" context get relation-id ] unit-test - [ 7 ] [ "has parent" context get relation-id ] unit-test - [ "has parent" ] [ "has parent" context get relation-id node-content ] unit-test - [ "test content" ] [ context get node-content ] unit-test -] with-db delete-db - -! test hierarchy -test-db [ - init-semantic-db - "family tree" create-context context set - "has parent" context get relation-id has-parent-relation set - "adam" create-node "adam" set - "eve" create-node "eve" set - "bob" create-node "bob" set - "fran" create-node "fran" set - "charlie" create-node "charlie" set - "gertrude" create-node "gertrude" set - [ t ] [ "adam" get "bob" get has-parent-relation get parent-child integer? ] unit-test - { { "eve" "bob" } { "eve" "fran" } { "bob" "gertrude" } { "bob" "fran" } { "fran" "charlie" } } [ first2 [ get ] 2apply has-parent-relation get parent-child drop ] each - [ { "bob" "fran" } ] [ "eve" get has-parent-relation get children [ node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "bob" get has-parent-relation get parents [ node-content ] map ] unit-test - [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test - [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get get-root-nodes [ node-content ] map natural-sort >array ] unit-test - [ { } ] [ "fran" get "charlie" get tuck has-parent-relation get un-parent-child has-parent-relation get parents [ node-content ] map ] unit-test -] with-db delete-db - -RELATION: test-relation - -test-db [ - init-semantic-db - [ 5 ] [ test-relation ] unit-test -] with-db delete-db - + test-db [ + init-semantic-db + "test content" create-context context set + [ 4 ] [ context get ] unit-test + [ 5 ] [ "is test content" context get create-relation ] unit-test + [ 5 ] [ "is test content" context get get-relation ] unit-test + [ 5 ] [ "is test content" context get relation-id ] unit-test + [ 7 ] [ "has parent" context get relation-id ] unit-test + [ 7 ] [ "has parent" context get relation-id ] unit-test + [ "has parent" ] [ "has parent" context get relation-id node-content ] unit-test + [ "test content" ] [ context get node-content ] unit-test + ] with-db delete-db + + ! "test1" f f f f f define-relation + ! "test2" t t t t t define-relation + RELATION: test + test-db [ + init-semantic-db + [ 5 ] [ test-relation ] unit-test + ] with-db delete-db + + ! test hierarchy + RELATION: has-parent + test-db [ + init-semantic-db + "adam" create-node "adam" set + "eve" create-node "eve" set + "bob" create-node "bob" set + "fran" create-node "fran" set + "charlie" create-node "charlie" set + "gertrude" create-node "gertrude" set + [ t ] [ "bob" get "adam" get has-parent integer? ] unit-test + { { "bob" "eve" } { "fran" "eve" } { "gertrude" "bob" } { "fran" "bob" } { "charlie" "fran" } } [ first2 [ get ] 2apply has-parent drop ] each + [ { "bob" "fran" } ] [ "eve" get has-parent-relation children [ node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "bob" get has-parent-relation parents [ node-content ] map ] unit-test + [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test + [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get-root-nodes [ node-content ] map natural-sort >array ] unit-test + [ { } ] [ "charlie" get dup "fran" get !has-parent has-parent-relation parents [ node-content ] map ] unit-test + ] with-db delete-db + diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index f73b76327b..d4e2c1ed1a 100644 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays combinators.cleave continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots parser sequences sequences.deep sequences.lib words ; +USING: accessors arrays combinators combinators.cleave continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots parser sequences sequences.deep sequences.lib strings words ; IN: semantic-db TUPLE: node id content ; @@ -54,18 +54,18 @@ TUPLE: arc id subject object relation ; : select-arc-subjects ( subject object relation -- subject-ids ) select-arcs [ subject>> ] map ; +: select-subjects ( object relation -- subject-ids ) + f -rot select-arc-subjects ; + : select-arc-objects ( subject object relation -- object-ids ) select-arcs [ object>> ] map ; +: select-objects ( subject relation -- object-ids ) + f swap select-arc-objects ; + : delete-arcs ( subject object relation -- ) select-arcs [ id>> delete-arc ] each ; -: subject-relation ( subject relation -- subject object relation ) - f swap ; - -: object-relation ( object relation -- subject object relation ) - f -rot ; - arc "arc" { { "id" "id" INTEGER +assigned-id+ } ! foreign key to node table? @@ -139,28 +139,67 @@ arc "arc" : relation-id ( relation-name context-id -- relation-id ) [ get-relation ] [ create-relation ] ensure2 ; -! RELATION: is-fooey -! - define a word is-fooey in the current vocab (foo), that when called: -! - finds or creates a node called "is-fooey" with context "foo", and returns its id +TUPLE: relation-definition relate id-word unrelate related? subjects objects ; +C: relation-definition + +> ] dip default-word-name + ] if ; + +: (define-relation-word) ( id-word word-name definition -- id-word ) + >r create-in over [ execute ] curry r> compose define ; + +: define-relation-word ( relation-definition id-word given-word-name word-type definition -- relation-definition id-word ) + >r >r [ + pick swap r> choose-word-name r> (define-relation-word) + ] [ + r> r> 2drop + ] if* ; + +: define-relation-words ( relation-definition id-word -- ) + over relate>> "relate" [ create-arc ] define-relation-word + over unrelate>> "unrelate" [ delete-arcs ] define-relation-word + over related?>> "related?" [ has-arc? ] define-relation-word + over subjects>> "subjects" [ select-subjects ] define-relation-word + over objects>> "objects" [ select-objects ] define-relation-word + 2drop ; + +: define-id-word ( relation-definition id-word -- ) + [ relate>> ] dip tuck word-vocabulary + [ context-id relation-id ] 2curry define ; + +: create-id-word ( relation-definition -- id-word ) + dup id-word>> "id-word" choose-word-name create-in ; + +PRIVATE> + +: define-relation ( relation-definition -- ) + dup create-id-word 2dup define-id-word define-relation-words ; + : RELATION: - CREATE-WORD dup [ word-name ] [ word-vocabulary ] bi - [ context-id relation-id ] 2curry define ; parsing + scan t t t t t define-relation ; parsing ! hierarchy TUPLE: tree id children ; C: tree -: parent-child ( parent child has-parent-relation -- arc-id ) - swapd create-arc ; - -: un-parent-child ( parent child has-parent-relation -- ) - swapd delete-arcs ; - -: children ( node-id has-parent-relation -- children ) - object-relation select-arc-subjects ; - -: parents ( node-id has-parent-relation -- parents ) - subject-relation select-arc-objects ; +: children ( node-id has-parent-relation -- children ) select-subjects ; +: parents ( node-id has-parent-relation -- parents ) select-objects ; : get-node-hierarchy ( node-id has-parent-relation -- tree ) 2dup children >r [ get-node-hierarchy ] curry r> swap map ; @@ -175,14 +214,3 @@ C: tree : get-root-nodes ( node-id has-parent-relation -- root-nodes ) (get-root-nodes) flatten prune ; -! sets -: in-set ( member set in-set-relation -- arc-id ) create-arc ; -: in-set? ( member set in-set-relation -- ? ) has-arc? ; -: set-members ( set in-set-relation -- members ) - object-relation select-arc-subjects ; - -! attributes -: has-attribute ( node value has-attribute-relation -- arc-id ) create-arc ; -: has-attribute? ( node value has-attribute-relation -- ? ) has-arc? ; -: nodes-with-attribute ( value has-attribute-relation -- node-ids ) - object-relation select-arc-subjects ; From 18a09b54b1619e35ac3f8b9cfb309fca38fee245 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Tue, 25 Mar 2008 23:00:06 +1100 Subject: [PATCH 008/270] semantic-db: trivial change --- extra/semantic-db/semantic-db.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index d4e2c1ed1a..ee276260f3 100644 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -23,7 +23,7 @@ node "node" dup insert-tuple id>> ; : node-content ( id -- str ) - f swap >>id select-tuple content>> ; + select-tuple content>> ; TUPLE: arc id subject object relation ; From 4c449296b207fba5ba4de2125e0e6beb5ef93292 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 27 Mar 2008 11:18:32 -0500 Subject: [PATCH 009/270] Fix NetBSD FFI --- core/cpu/x86/architecture/architecture.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/cpu/x86/architecture/architecture.factor b/core/cpu/x86/architecture/architecture.factor index 49b05ea48f..f993639c05 100755 --- a/core/cpu/x86/architecture/architecture.factor +++ b/core/cpu/x86/architecture/architecture.factor @@ -156,7 +156,7 @@ M: x86-backend %unbox-small-struct ( size -- ) M: x86-backend struct-small-enough? ( size -- ? ) { 1 2 4 8 } member? - os { "linux" "solaris" } member? not and ; + os { "linux" "netbsd" "solaris" } member? not and ; M: x86-backend %return ( -- ) 0 %unwind ; From aad587d6647607042bbbed72e59cbbb67d801c46 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 27 Mar 2008 11:48:51 -0500 Subject: [PATCH 010/270] Fix deploy test --- extra/tools/deploy/deploy-tests.factor | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/extra/tools/deploy/deploy-tests.factor b/extra/tools/deploy/deploy-tests.factor index 8db34320de..5030763a3d 100755 --- a/extra/tools/deploy/deploy-tests.factor +++ b/extra/tools/deploy/deploy-tests.factor @@ -1,10 +1,11 @@ IN: tools.deploy.tests USING: tools.test system io.files kernel tools.deploy.config tools.deploy.backend math sequences io.launcher arrays -namespaces ; +namespaces continuations ; : shake-and-bake ( vocab -- ) - "." resource-path [ + [ "test.image" temp-file delete-file ] ignore-errors + "resource:" [ >r vm "test.image" temp-file r> dup deploy-config make-deploy-image From f2718f3a71fdb89d49e7a6aa46041ddecc5ff3d7 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 31 Mar 2008 12:31:46 -0700 Subject: [PATCH 011/270] Get COM wrappers working. dragdrop-listener example vocab to enable drag-and-drop on listener windows --- core/slots/slots-docs.factor | 2 +- extra/windows/com/com-docs.factor | 2 +- extra/windows/com/com-tests.factor | 44 +++++-- extra/windows/com/com.factor | 23 +++- extra/windows/com/syntax/syntax.factor | 10 +- extra/windows/com/wrapper/wrapper-docs.factor | 40 +++++++ extra/windows/com/wrapper/wrapper.factor | 111 ++++++++++++++++++ .../dragdrop-listener.factor | 70 +++++++++++ extra/windows/kernel32/kernel32.factor | 5 +- extra/windows/ole32/ole32.factor | 96 +++++++++++++-- extra/windows/shell32/shell32.factor | 14 ++- extra/windows/time/time.factor | 0 12 files changed, 386 insertions(+), 31 deletions(-) create mode 100755 extra/windows/com/wrapper/wrapper-docs.factor create mode 100755 extra/windows/com/wrapper/wrapper.factor create mode 100644 extra/windows/dragdrop-listener/dragdrop-listener.factor mode change 100755 => 100644 extra/windows/time/time.factor diff --git a/core/slots/slots-docs.factor b/core/slots/slots-docs.factor index e4bb307829..5de765313b 100755 --- a/core/slots/slots-docs.factor +++ b/core/slots/slots-docs.factor @@ -12,7 +12,7 @@ ARTICLE: "accessors" "Slot accessors" } "In addition, two utility words are defined for each distinct slot name used in the system:" { $list - { "The " { $emphasis "setter" } " is named " { $snippet "(>>" { $emphasis "slot" } ")" } " and stores a value into a slot. It has stack effect " { $snippet "( object value -- object )" } "." } + { "The " { $emphasis "setter" } " is named " { $snippet ">>" { $emphasis "slot" } } " and stores a value into a slot. It has stack effect " { $snippet "( object value -- object )" } "." } { "The " { $emphasis "changer" } " is named " { $snippet "change-" { $emphasis "slot" } } ". It applies a quotation to the current slot value and stores the result back in the slot; it has stack effect " { $snippet "( object quot -- object )" } "." } } "Since the reader and writer are generic, words can be written which do not depend on the specific class of tuple passed in, but instead work on any tuple that defines slots with certain names." diff --git a/extra/windows/com/com-docs.factor b/extra/windows/com/com-docs.factor index 901a88675f..68663b4cdb 100644 --- a/extra/windows/com/com-docs.factor +++ b/extra/windows/com/com-docs.factor @@ -4,7 +4,7 @@ IN: windows.com HELP: com-query-interface { $values { "interface" "Pointer to a COM interface implementing " { $snippet "IUnknown" } } { "iid" "An interface GUID (IID)" } { "interface'" "Pointer to a COM interface implementing the interface indicated by " { $snippet "iid" } } } -{ $description "A small wrapper around " { $link IUnknown::QueryInterface } ". Queries " { $snippet "interface" } " to see if it implements the interface indicated by " { $snippet "iid" } ". Returns a pointer to the " { $snippet "iid" } " interface if implemented, or raises an error if the object does not implement the interface.\n\nCOM memory management conventions state that the returned pointer must be immediately retained using " { $link com-add-ref } ". The pointer must then be released using " { $link com-release } " when it is no longer needed." } ; +{ $description "A small wrapper around " { $link IUnknown::QueryInterface } ". Queries " { $snippet "interface" } " to see if it implements the interface indicated by " { $snippet "iid" } ". Returns a pointer to the " { $snippet "iid" } " interface if implemented, or raises an error if the object does not implement the interface.\n\nCOM memory management conventions state that the returned pointer must be released using " { $link com-release } " when it is no longer needed." } ; HELP: com-add-ref { $values { "interface" "Pointer to a COM interface implementing " { $snippet "IUnknown" } } } diff --git a/extra/windows/com/com-tests.factor b/extra/windows/com/com-tests.factor index 4c62e7adfd..e2685db1d0 100644 --- a/extra/windows/com/com-tests.factor +++ b/extra/windows/com/com-tests.factor @@ -1,6 +1,7 @@ USING: kernel windows.com windows.com.syntax windows.ole32 alien alien.syntax tools.test libc alien.c-types arrays.lib -namespaces arrays continuations accessors ; +namespaces arrays continuations accessors math windows.com.wrapper +windows.com.wrapper.private ; IN: windows.com.tests COM-INTERFACE: ISimple IUnknown {216fb341-0eb2-44b1-8edb-60b76e353abc} @@ -18,12 +19,16 @@ COM-INTERFACE: IUnrelated IUnknown {b06ac3f4-30e4-406b-a7cd-c29cead4552c} "{216fb341-0eb2-44b1-8edb-60b76e353abc}" string>guid 1array [ ISimple-iid ] unit-test "{9620ecec-8438-423b-bb14-86f835aa40dd}" string>guid 1array [ IInherited-iid ] unit-test "{00000000-0000-0000-C000-000000000046}" string>guid 1array [ IUnknown-iid ] unit-test +"{b06ac3f4-30e4-406b-a7cd-c29cead4552c}" string>guid 1array [ IUnrelated-iid ] unit-test -SYMBOL: +test-vtbl+ +SYMBOL: +test-wrapper+ SYMBOL: +guinea-pig-implementation+ +SYMBOL: +orig-wrapped-objects+ + ++wrapped-objects+ get-global clone +orig-wrapped-objects+ set-global TUPLE: test-implementation x ; -C: test-implementation +C: test-implementation { { "IInherited" { @@ -36,17 +41,25 @@ C: test-implementation [ swap x>> + ] ! IUnrelated::xPlus [ spin x>> * + ] ! IUnrealted::xMulAdd } } -} -dup +test-vtbl+ set [ +} +dup +test-wrapper+ set [ - 0 +test-vtbl+ get com-wrap - dup +guinea-pig-implementation+ set [ + 0 swap com-wrap + dup +guinea-pig-implementation+ set [ drop S_OK 1array [ +guinea-pig-implementation+ get ISimple::returnOK ] unit-test E_FAIL *long 1array [ +guinea-pig-implementation+ get ISimple::returnError ] unit-test 20 1array [ +guinea-pig-implementation+ get dup 20 IInherited::setX IInherited::getX ] unit-test - 420 1array [ +guinea-pig-implementation+ get 20 20 IUnrelated::xMulAdd ] unit-test - 40 1array [ +guinea-pig-implementation+ get 20 IUnrelated::xPlus ] unit-test + 420 1array [ + +guinea-pig-implementation+ get + IUnrelated-iid com-query-interface + [ 20 20 IUnrelated::xMulAdd ] with-com-interface + ] unit-test + 40 1array [ + +guinea-pig-implementation+ get + IUnrelated-iid com-query-interface + [ 20 IUnrelated::xPlus ] with-com-interface + ] unit-test +guinea-pig-implementation+ get 1array [ +guinea-pig-implementation+ get com-add-ref @@ -56,14 +69,23 @@ dup +test-vtbl+ set [ +guinea-pig-implementation+ get 1array [ +guinea-pig-implementation+ get IUnknown-iid com-query-interface + dup com-release ] unit-test +guinea-pig-implementation+ get 1array [ +guinea-pig-implementation+ get ISimple-iid com-query-interface + dup com-release ] unit-test - "void*" heap-size +guinea-pig-implementation+ get 1array [ + "void*" heap-size +guinea-pig-implementation+ get + +guinea-pig-implementation+ get + 2array [ +guinea-pig-implementation+ get IUnrelated-iid com-query-interface + dup ISimple-iid com-query-interface + over com-release dup com-release ] unit-test ] with-com-interface -] [ free-com-vtbl ] [ ] cleanup +] with-disposal + +! Ensure that we freed +guinea-pig-implementation ++orig-wrapped-objects+ get-global 1array [ +wrapped-objects+ get-global ] unit-test diff --git a/extra/windows/com/com.factor b/extra/windows/com/com.factor index b78d9b5b91..4833a7412a 100644 --- a/extra/windows/com/com.factor +++ b/extra/windows/com/com.factor @@ -1,12 +1,31 @@ USING: alien alien.c-types windows.com.syntax windows.ole32 -windows.types continuations kernel ; +windows.types continuations kernel alien.syntax ; IN: windows.com +LIBRARY: ole32 + COM-INTERFACE: IUnknown f {00000000-0000-0000-C000-000000000046} HRESULT QueryInterface ( REFGUID iid, void** ppvObject ) ULONG AddRef ( ) ULONG Release ( ) ; +COM-INTERFACE: IDataObject IUnknown {0000010E-0000-0000-C000-000000000046} + HRESULT GetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium ) + HRESULT GetDataHere ( FORMATETC* pFormatetc, STGMEDIUM* pmedium ) + HRESULT QueryGetData ( FORMATETC* pFormatetc ) + HRESULT GetCanonicalFormatEtc ( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut ) + HRESULT SetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease ) + HRESULT EnumFormatEtc ( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc ) + HRESULT DAdvise ( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection ) + HRESULT DUnadvise ( DWORD pdwConnection ) + HRESULT EnumDAdvise ( IEnumSTATDATA** ppenumAdvise ) ; + +COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046} + HRESULT DragEnter ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) + HRESULT DragOver ( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) + HRESULT DragLeave ( ) + HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ; + : com-query-interface ( interface iid -- interface' ) f [ IUnknown::QueryInterface ole32-error ] keep @@ -19,4 +38,4 @@ COM-INTERFACE: IUnknown f {00000000-0000-0000-C000-000000000046} IUnknown::Release drop ; inline : with-com-interface ( interface quot -- ) - [ keep ] [ com-release ] [ ] cleanup ; inline + over [ slip ] [ com-release ] [ ] cleanup ; inline diff --git a/extra/windows/com/syntax/syntax.factor b/extra/windows/com/syntax/syntax.factor index 5884c18aee..216ca8707d 100755 --- a/extra/windows/com/syntax/syntax.factor +++ b/extra/windows/com/syntax/syntax.factor @@ -57,8 +57,12 @@ unless : (function-word) ( function interface -- word ) name>> "::" rot name>> 3append create-in ; -: all-functions ( definition -- functions ) - dup parent>> [ all-functions ] [ { } ] if* +: family-tree ( definition -- definitions ) + dup parent>> [ family-tree ] [ { } ] if* + swap add ; + +: family-tree-functions ( definition -- functions ) + dup parent>> [ family-tree-functions ] [ { } ] if* swap functions>> append ; : (define-word-for-function) ( function interface n -- ) @@ -71,7 +75,7 @@ unless [ [ (iid-word) ] [ iid>> 1quotation ] bi define ] [ name>> "com-interface" swap typedef ] [ - dup all-functions + dup family-tree-functions [ (define-word-for-function) ] with each-index ] tri ; diff --git a/extra/windows/com/wrapper/wrapper-docs.factor b/extra/windows/com/wrapper/wrapper-docs.factor new file mode 100755 index 0000000000..51a3549047 --- /dev/null +++ b/extra/windows/com/wrapper/wrapper-docs.factor @@ -0,0 +1,40 @@ +USING: help.markup help.syntax io kernel math quotations +multiline alien windows.com windows.com.syntax continuations ; +IN: windows.com.wrapper + +HELP: +{ $values { "implementations" "an assoc relating COM interface names to arrays of quotations implementing that interface" } { "wrapper" "a " { $link com-wrapper } " tuple" } } +{ $description "Constructs a " { $link com-wrapper } " tuple. Each key in the " { $snippet "implementations" } " assoc must be the name of an interface defined with " { $link POSTPONE: COM-INTERFACE: } ". The corresponding value must be an array of quotations implementing the methods of that interface in order, including those of its parent interfaces. The " { $snippet "IUnknown" } " methods (" { $link IUnknown::QueryInterface } ", " { $link IUnknown::AddRef } ", and " { $link IUnknown::Release } ") will be defined automatically and must not be specified in the array. These quotations should have stack effects mirroring those of the interface methods being implemented; for example, a method " { $snippet "void foobar ( int foo, int bar )" } " should be implemented with a quotation of effect " { $snippet "( this foo bar -- )" } ". The " { $snippet "this" } " parameter (that is, the leftmost parameter of any COM method) will be automatically converted from an alien pointer to the underlying Factor object before the quotation is invoked.\n\nThe resulting wrapper can be applied to a Factor object using the " { $link com-wrap } " word. The COM interface pointer returned by " { $snippet "com-wrap" } " can then be passed to C functions requiring a COM object as a parameter. The vtables constructed by " { $snippet "" } " are stored on the non-GC heap in order to be accessible to C functions; when the wrapper objects and its vtables are no longer needed, the object's resources must be freed using " { $link dispose } ".\n\nExample:" } +{ $code <" +COM-INTERFACE: ISimple IUnknown {216fb341-0eb2-44b1-8edb-60b76e353abc} + HRESULT returnOK ( ) + HRESULT returnError ( ) ; + +COM-INTERFACE: IInherited ISimple {9620ecec-8438-423b-bb14-86f835aa40dd} + int getX ( ) + void setX ( int newX ) ; + +COM-INTERFACE: IUnrelated IUnknown {b06ac3f4-30e4-406b-a7cd-c29cead4552c} + int xPlus ( int y ) + int xMulAdd ( int mul, int add ) ; + +{ + { "IInherited" { + [ drop S_OK ] ! ISimple::returnOK + [ drop E_FAIL ] ! ISimple::returnError + [ x>> ] ! IInherited::getX + [ >>x drop ] ! IInherited::setX + } } + { "IUnrelated" { + [ swap x>> + ] ! IUnrelated::xPlus + [ spin x>> * + ] ! IUnrealted::xMulAdd + } } +} +"> } ; + +HELP: com-wrap +{ $values { "object" "The factor object to wrap" } { "wrapper" "A " { $link com-wrapper } " object" } { "wrapped-object" "A COM object referencing " { $snippet "object" } } } +{ $description "Allocates a COM object using the implementations in the " { $snippet "wrapper" } " object for the vtables and " { $snippet "object" } " for the \"this\" parameter. The COM object is allocated on the heap with an initial reference count of 1. The object will automatically deallocate itself when its reference count reaches 0 as a result of calling " { $link IUnknown::Release } " or " { $link com-release } " on it.\n\nNote that if " { $snippet "wrapper" } " implements multiple interfaces, you cannot count on the returned COM object pointer implementing any particular interface beyond " { $snippet "IUnknown" } ". You will need to use " { $link com-query-interface } " or " { $link IUnknown::QueryInterface } " to ask the object for the particular interface you need." } ; + +HELP: com-wrapper +{ $class-description "The tuple class used to store COM wrapper information. Objects of this class should be treated as opaque by user code. A com-wrapper can be constructed using the " { $link } " constructor and applied to a Factor object using " { $link com-wrap } "." } ; diff --git a/extra/windows/com/wrapper/wrapper.factor b/extra/windows/com/wrapper/wrapper.factor new file mode 100755 index 0000000000..890674ed6d --- /dev/null +++ b/extra/windows/com/wrapper/wrapper.factor @@ -0,0 +1,111 @@ +USING: alien alien.c-types windows.com.syntax +windows.com.syntax.private windows.com continuations kernel +sequences.lib namespaces windows.ole32 libc +assocs accessors arrays sequences quotations combinators +math combinators.cleave combinators.lib words compiler.units ; +IN: windows.com.wrapper + +TUPLE: com-wrapper vtbls freed? ; + +byte-array ] % + [ + >r find-com-interface-definition family-tree + r> 1quotation [ >r iid>> r> 2array ] curry map + ] map-index concat + [ f ] add , + \ case , + "void*" heap-size + [ * rot com-add-ref 0 rot set-void*-nth S_OK ] + curry , + [ nip f 0 rot set-void*-nth E_NOINTERFACE ] , + \ if* , + ] [ ] make ; + +: (make-add-ref) ( interfaces -- quot ) + length "void*" heap-size * [ swap + 0 over ulong-nth + 1+ [ 0 rot set-ulong-nth ] keep + ] curry ; + +: (make-release) ( interfaces -- quot ) + length "void*" heap-size * [ over + 0 over ulong-nth + 1- [ 0 rot set-ulong-nth ] keep + dup zero? [ swap (free-wrapped-object) ] [ nip ] if + ] curry ; + +: (make-iunknown-methods) ( interfaces -- quots ) + [ (make-query-interface) ] + [ (make-add-ref) ] + [ (make-release) ] tri + 3array ; + +: (thunk) ( n -- quot ) + dup 0 = + [ drop [ ] ] + [ "void*" heap-size neg * [ swap ] curry ] + if ; + +: (thunked-quots) ( quots iunknown-methods thunk -- quots' ) + [ [ swap 2array ] curry map swap ] keep + [ com-unwrap ] compose [ swap 2array ] curry map append ; + +: compile-alien-callback ( return parameters abi quot -- alien ) + [ alien-callback ] 4 ncurry + [ gensym [ swap define ] keep ] with-compilation-unit + execute ; + +: (make-vtbl) ( interface-name quots iunknown-methods n -- ) + (thunk) (thunked-quots) + swap find-com-interface-definition family-tree-functions [ + { return>> parameters>> } get-slots + dup length 1- roll [ + first dup empty? + [ 2drop [ ] ] + [ swap [ ndip ] 2curry ] + if + ] [ second ] bi compose + "stdcall" swap compile-alien-callback + ] 2map >c-void*-array [ byte-length malloc ] keep + over byte-array>memory ; + +: (make-vtbls) ( implementations -- vtbls ) + dup [ first ] map (make-iunknown-methods) + [ >r >r first2 r> r> swap (make-vtbl) ] curry map-index ; + +: (malloc-wrapped-object) ( wrapper -- wrapped-object ) + vtbls>> length "void*" heap-size * + [ "ulong" heap-size + malloc ] keep + over + 1 0 rot set-ulong-nth ; + +PRIVATE> + +: ( implementations -- wrapper ) + (make-vtbls) f com-wrapper construct-boa ; + +M: com-wrapper dispose + t >>freed? + vtbls>> [ free ] each ; + +: com-wrap ( object wrapper -- wrapped-object ) + dup (malloc-wrapped-object) >r vtbls>> r> + [ [ set-void*-nth ] curry each-index ] keep + [ +wrapped-objects+ get-global set-at ] keep ; diff --git a/extra/windows/dragdrop-listener/dragdrop-listener.factor b/extra/windows/dragdrop-listener/dragdrop-listener.factor new file mode 100644 index 0000000000..a7851621ff --- /dev/null +++ b/extra/windows/dragdrop-listener/dragdrop-listener.factor @@ -0,0 +1,70 @@ +USING: windows.com windows.com.wrapper combinators.cleave +windows.kernel32 windows.ole32 windows.shell32 kernel accessors +prettyprint namespaces ui.tools.listener ui.tools.workspace +alien.c-types alien sequences math ; +IN: windows.dragdrop + +: filenames-from-hdrop ( hdrop -- filenames ) + dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files + [ + 2dup f 0 DragQueryFile 1+ ! get size of filename buffer + dup "WCHAR" + [ swap DragQueryFile drop ] keep + alien>u16-string + ] with map ; + +: filenames-from-data-object ( data-object -- filenames ) + "FORMATETC" + CF_HDROP over set-FORMATETC-cfFormat + f over set-FORMATETC-ptd + DVASPECT_CONTENT over set-FORMATETC-dwAspect + -1 over set-FORMATETC-lindex + TYMED_HGLOBAL over set-FORMATETC-tymed + "STGMEDIUM" + [ IDataObject::GetData ] keep swap succeeded? [ + dup STGMEDIUM-data + [ filenames-from-hdrop ] with-global-lock + swap ReleaseStgMedium + ] [ drop f ] if ; + +TUPLE: listener-dragdrop hWnd last-drop-effect ; + +: ( hWnd -- object ) + DROPEFFECT_NONE listener-dragdrop construct-boa ; + +SYMBOL: +listener-dragdrop-wrapper+ +{ + { "IDropTarget" { + [ ! DragEnter + >r 2drop + filenames-from-data-object + length 1 = [ DROPEFFECT_COPY ] [ DROPEFFECT_NONE ] if + dup 0 r> set-ulong-nth + >>last-drop-effect drop + S_OK + ] [ ! DragOver + >r 2drop last-drop-effect>> 0 r> set-ulong-nth + S_OK + ] [ ! DragLeave + drop S_OK + ] [ ! Drop + >r 2drop nip + filenames-from-data-object + dup length 1 = [ + first unparse [ "USE: parser " % % " run-file" % ] "" make + eval-listener + DROPEFFECT_COPY + ] [ + 2drop DROPEFFECT_NONE + ] if + 0 r> set-ulong-nth + S_OK + ] + } } +} +listener-dragdrop-wrapper+ set-global + +: dragdrop-listener-window ( -- ) + get-workspace parent>> handle>> hWnd>> + dup + +listener-dragdrop-wrapper+ get-global com-wrap + [ RegisterDragDrop ole32-error ] with-com-interface ; diff --git a/extra/windows/kernel32/kernel32.factor b/extra/windows/kernel32/kernel32.factor index 37b833cae1..5530c0871f 100644 --- a/extra/windows/kernel32/kernel32.factor +++ b/extra/windows/kernel32/kernel32.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2005, 2006 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.syntax windows.types ; +USING: alien alien.syntax kernel windows.types ; IN: windows.kernel32 : MAX_PATH 260 ; inline @@ -1564,3 +1564,6 @@ FUNCTION: BOOL WriteProcessMemory ( HANDLE hProcess, void* lpBaseAddress, void* ! FUNCTION: WriteTapemark ! FUNCTION: WTSGetActiveConsoleSessionId ! FUNCTION: ZombifyActCtx + +: with-global-lock ( HGLOBAL quot -- ) + swap [ GlobalLock swap call ] keep GlobalUnlock drop ; inline diff --git a/extra/windows/ole32/ole32.factor b/extra/windows/ole32/ole32.factor index 44ea853af0..3be442514c 100644 --- a/extra/windows/ole32/ole32.factor +++ b/extra/windows/ole32/ole32.factor @@ -1,16 +1,10 @@ USING: alien alien.syntax alien.c-types math kernel sequences -windows windows.types combinators.lib ; +windows windows.kernel32 windows.types combinators.lib ; IN: windows.ole32 LIBRARY: ole32 -C-STRUCT: GUID - { "DWORD" "part1" } - { "DWORD" "part2" } - { "DWORD" "part3" } - { "DWORD" "part4" } ; - -TYPEDEF: void* REFGUID +TYPEDEF: GUID* REFGUID TYPEDEF: void* LPUNKNOWN TYPEDEF: ushort* LPOLESTR TYPEDEF: ushort* LPCOLESTR @@ -25,6 +19,7 @@ FUNCTION: HRESULT CLSIDFromString ( LPOLESTR lpsz, REFGUID out_rguid ) ; : S_OK 0 ; inline : S_FALSE 1 ; inline +: E_NOINTERFACE HEX: 80004002 ; inline : E_FAIL HEX: 80004005 ; inline : E_INVALIDARG HEX: 80070057 ; inline @@ -40,11 +35,92 @@ FUNCTION: HRESULT CLSIDFromString ( LPOLESTR lpsz, REFGUID out_rguid ) ; : DD_DEFDRAGDELAY 200 ; inline : DD_DEFDRAGMINDIST 2 ; inline -: ole32-error ( n -- ) - dup S_OK = [ +: CF_TEXT 1 ; inline +: CF_BITMAP 2 ; inline +: CF_METAFILEPICT 3 ; inline +: CF_SYLK 4 ; inline +: CF_DIF 5 ; inline +: CF_TIFF 6 ; inline +: CF_OEMTEXT 7 ; inline +: CF_DIB 8 ; inline +: CF_PALETTE 9 ; inline +: CF_PENDATA 10 ; inline +: CF_RIFF 11 ; inline +: CF_WAVE 12 ; inline +: CF_UNICODETEXT 13 ; inline +: CF_ENHMETAFILE 14 ; inline +: CF_HDROP 15 ; inline +: CF_LOCALE 16 ; inline +: CF_MAX 17 ; inline + +: CF_OWNERDISPLAY HEX: 0080 ; inline +: CF_DSPTEXT HEX: 0081 ; inline +: CF_DSPBITMAP HEX: 0082 ; inline +: CF_DSPMETAFILEPICT HEX: 0083 ; inline +: CF_DSPENHMETAFILE HEX: 008E ; inline + +: DVASPECT_CONTENT 1 ; inline +: DVASPECT_THUMBNAIL 2 ; inline +: DVASPECT_ICON 4 ; inline +: DVASPECT_DOCPRINT 8 ; inline + +: TYMED_HGLOBAL 1 ; inline +: TYMED_FILE 2 ; inline +: TYMED_ISTREAM 4 ; inline +: TYMED_ISTORAGE 8 ; inline +: TYMED_GDI 16 ; inline +: TYMED_MFPICT 32 ; inline +: TYMED_ENHMF 64 ; inline +: TYMED_NULL 0 ; inline + +C-STRUCT: DVTARGETDEVICE + { "DWORD" "tdSize" } + { "WORD" "tdDriverNameOffset" } + { "WORD" "tdDeviceNameOffset" } + { "WORD" "tdPortNameOffset" } + { "WORD" "tdExtDevmodeOffset" } + { "BYTE[1]" "tdData" } ; + +TYPEDEF: WORD CLIPFORMAT +TYPEDEF: POINT POINTL + +C-STRUCT: FORMATETC + { "CLIPFORMAT" "cfFormat" } + { "DVTARGETDEVICE*" "ptd" } + { "DWORD" "dwAspect" } + { "LONG" "lindex" } + { "DWORD" "tymed" } ; +TYPEDEF: FORMATETC* LPFORMATETC + +C-STRUCT: STGMEDIUM + { "DWORD" "tymed" } + { "void*" "data" } + { "LPUNKNOWN" "punkForRelease" } ; +TYPEDEF: STGMEDIUM* LPSTGMEDIUM + +: COINIT_MULTITHREADED 0 ; inline +: COINIT_APARTMENTTHREADED 2 ; inline +: COINIT_DISABLE_OLE1DDE 4 ; inline +: COINIT_SPEED_OVER_MEMORY 8 ; inline + +FUNCTION: HRESULT OleInitialize ( void* reserved ) ; +FUNCTION: HRESULT CoInitializeEx ( void* reserved, DWORD dwCoInit ) ; + +FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ; +FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ; +FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ; + +: succeeded? ( hresult -- ? ) + 0 HEX: 7FFFFFFF between? ; + +: ole32-error ( hresult -- ) + dup succeeded? [ drop ] [ (win32-error-string) throw ] if ; +: ole-initialize ( -- ) + f OleInitialize ole32-error ; + : guid= ( a b -- ? ) IsEqualGUID c-bool> ; diff --git a/extra/windows/shell32/shell32.factor b/extra/windows/shell32/shell32.factor index d64fb68cb3..a5bed9daed 100644 --- a/extra/windows/shell32/shell32.factor +++ b/extra/windows/shell32/shell32.factor @@ -167,6 +167,15 @@ TYPEDEF: DWORD SHGDNF TYPEDEF: ULONG SFGAOF +C-STRUCT: DROPFILES + { "DWORD" "pFiles" } + { "POINT" "pt" } + { "BOOL" "fNC" } + { "BOOL" "fWide" } ; +TYPEDEF: DROPFILES* LPDROPFILES +TYPEDEF: DROPFILES* LPCDROPFILES +TYPEDEF: HANDLE HDROP + C-STRUCT: SHITEMID { "USHORT" "cb" } { "BYTE[1]" "abID" } ; @@ -210,5 +219,6 @@ COM-INTERFACE: IShellFolder IUnknown {000214E6-0000-0000-C000-000000000046} FUNCTION: HRESULT SHGetDesktopFolder ( IShellFolder** ppshf ) ; -FUNCTION: HRESULT StrRetToBufW ( STRRET *pstr, PCUITEMID_CHILD pidl, LPWSTR pszBuf, UINT cchBuf ) ; -: StrRetToBuf StrRetToBufW ; inline +FUNCTION: UINT DragQueryFileW ( HDROP hDrop, UINT iFile, LPWSTR lpszFile, UINT cch ) ; +: DragQueryFile DragQueryFileW ; inline + diff --git a/extra/windows/time/time.factor b/extra/windows/time/time.factor old mode 100755 new mode 100644 From 1c58671b9ed691dcd2545d5b692dd5979b4023da Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 31 Mar 2008 12:34:58 -0700 Subject: [PATCH 012/270] Metadata files for windows.com.wrapper vocab --- extra/windows/com/wrapper/authors.txt | 1 + extra/windows/com/wrapper/summary.txt | 1 + extra/windows/com/wrapper/tags.txt | 3 +++ extra/windows/com/wrapper/wrapper-docs.factor | 0 extra/windows/com/wrapper/wrapper.factor | 0 5 files changed, 5 insertions(+) create mode 100644 extra/windows/com/wrapper/authors.txt create mode 100644 extra/windows/com/wrapper/summary.txt create mode 100644 extra/windows/com/wrapper/tags.txt mode change 100755 => 100644 extra/windows/com/wrapper/wrapper-docs.factor mode change 100755 => 100644 extra/windows/com/wrapper/wrapper.factor diff --git a/extra/windows/com/wrapper/authors.txt b/extra/windows/com/wrapper/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/extra/windows/com/wrapper/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/extra/windows/com/wrapper/summary.txt b/extra/windows/com/wrapper/summary.txt new file mode 100644 index 0000000000..c43941984e --- /dev/null +++ b/extra/windows/com/wrapper/summary.txt @@ -0,0 +1 @@ +Wrap Factor objects with implementations of COM interfaces diff --git a/extra/windows/com/wrapper/tags.txt b/extra/windows/com/wrapper/tags.txt new file mode 100644 index 0000000000..ffb665dc8f --- /dev/null +++ b/extra/windows/com/wrapper/tags.txt @@ -0,0 +1,3 @@ +windows +com +bindings diff --git a/extra/windows/com/wrapper/wrapper-docs.factor b/extra/windows/com/wrapper/wrapper-docs.factor old mode 100755 new mode 100644 diff --git a/extra/windows/com/wrapper/wrapper.factor b/extra/windows/com/wrapper/wrapper.factor old mode 100755 new mode 100644 From b5be6236c5c122b796c5b2451edfd785d959febd Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 31 Mar 2008 12:56:23 -0700 Subject: [PATCH 013/270] Remove combinators.cleave references from windows.com.wrapper and dragdrop-listener --- extra/windows/com/wrapper/wrapper.factor | 2 +- extra/windows/dragdrop-listener/dragdrop-listener.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/windows/com/wrapper/wrapper.factor b/extra/windows/com/wrapper/wrapper.factor index 890674ed6d..7f63f529a6 100644 --- a/extra/windows/com/wrapper/wrapper.factor +++ b/extra/windows/com/wrapper/wrapper.factor @@ -2,7 +2,7 @@ USING: alien alien.c-types windows.com.syntax windows.com.syntax.private windows.com continuations kernel sequences.lib namespaces windows.ole32 libc assocs accessors arrays sequences quotations combinators -math combinators.cleave combinators.lib words compiler.units ; +math combinators.lib words compiler.units ; IN: windows.com.wrapper TUPLE: com-wrapper vtbls freed? ; diff --git a/extra/windows/dragdrop-listener/dragdrop-listener.factor b/extra/windows/dragdrop-listener/dragdrop-listener.factor index a7851621ff..0776d37625 100644 --- a/extra/windows/dragdrop-listener/dragdrop-listener.factor +++ b/extra/windows/dragdrop-listener/dragdrop-listener.factor @@ -1,4 +1,4 @@ -USING: windows.com windows.com.wrapper combinators.cleave +USING: windows.com windows.com.wrapper combinators windows.kernel32 windows.ole32 windows.shell32 kernel accessors prettyprint namespaces ui.tools.listener ui.tools.workspace alien.c-types alien sequences math ; From 71b58d1a2a4813f101c9977ca8621f3308223ea5 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 31 Mar 2008 13:13:16 -0700 Subject: [PATCH 014/270] Fix name of windows.dragdrop-listener vocab --- extra/windows/dragdrop-listener/dragdrop-listener.factor | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/extra/windows/dragdrop-listener/dragdrop-listener.factor b/extra/windows/dragdrop-listener/dragdrop-listener.factor index 0776d37625..8384bb1acc 100644 --- a/extra/windows/dragdrop-listener/dragdrop-listener.factor +++ b/extra/windows/dragdrop-listener/dragdrop-listener.factor @@ -2,7 +2,7 @@ USING: windows.com windows.com.wrapper combinators windows.kernel32 windows.ole32 windows.shell32 kernel accessors prettyprint namespaces ui.tools.listener ui.tools.workspace alien.c-types alien sequences math ; -IN: windows.dragdrop +IN: windows.dragdrop-listener : filenames-from-hdrop ( hdrop -- filenames ) dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files @@ -54,9 +54,7 @@ SYMBOL: +listener-dragdrop-wrapper+ first unparse [ "USE: parser " % % " run-file" % ] "" make eval-listener DROPEFFECT_COPY - ] [ - 2drop DROPEFFECT_NONE - ] if + ] [ 2drop DROPEFFECT_NONE ] if 0 r> set-ulong-nth S_OK ] From 5dd354333ff18503d54b54ab81d96acd8b18e08a Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Tue, 1 Apr 2008 12:07:02 +1100 Subject: [PATCH 015/270] semantic-db: pass around node objects instead of ids --- extra/semantic-db/semantic-db-tests.factor | 45 ++-- extra/semantic-db/semantic-db.factor | 227 +++++++++++++-------- 2 files changed, 169 insertions(+), 103 deletions(-) diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index 7fa0ff2176..ac620de4d9 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -1,7 +1,6 @@ USING: accessors arrays continuations db db.sqlite db.tuples io.files -kernel math namespaces semantic-db - -sequences sorting tools.test tools.walker ; +kernel math namespaces semantic-db sequences sorting tools.test +tools.walker ; IN: semantic-db.tests SYMBOL: context @@ -14,32 +13,34 @@ delete-db test-db [ node create-table arc create-table - [ 1 ] [ "first node" create-node ] unit-test - [ 2 ] [ "second node" create-node ] unit-test - [ 3 ] [ "third node" create-node ] unit-test - [ 4 ] [ f create-node ] unit-test - [ 5 ] [ 1 2 3 create-arc ] unit-test + [ 1 ] [ "first node" create-node id>> ] unit-test + [ 2 ] [ "second node" create-node id>> ] unit-test + [ 3 ] [ "third node" create-node id>> ] unit-test + [ 4 ] [ f create-node id>> ] unit-test + [ ] [ 1 f 2 f 3 f create-arc ] unit-test ] with-db delete-db test-db [ init-semantic-db "test content" create-context context set - [ 4 ] [ context get ] unit-test - [ 5 ] [ "is test content" context get create-relation ] unit-test - [ 5 ] [ "is test content" context get get-relation ] unit-test - [ 5 ] [ "is test content" context get relation-id ] unit-test - [ 7 ] [ "has parent" context get relation-id ] unit-test - [ 7 ] [ "has parent" context get relation-id ] unit-test - [ "has parent" ] [ "has parent" context get relation-id node-content ] unit-test + [ T{ node f 3 "test content" } ] [ context get ] unit-test + [ T{ node f 4 "is test content" } ] [ "is test content" context get create-relation ] unit-test + [ T{ node f 4 "is test content" } ] [ "is test content" context get get-relation ] unit-test + [ T{ node f 4 "is test content" } ] [ "is test content" context get ensure-relation ] unit-test + [ T{ node f 5 "has parent" } ] [ "has parent" context get ensure-relation ] unit-test + [ T{ node f 5 "has parent" } ] [ "has parent" context get ensure-relation ] unit-test + [ "has parent" ] [ "has parent" context get ensure-relation node-content ] unit-test [ "test content" ] [ context get node-content ] unit-test ] with-db delete-db - ! "test1" f f f f f define-relation + ! "test1" "test1-relation-id-word" f f f f define-relation ! "test2" t t t t t define-relation - RELATION: test + RELATION: test3 test-db [ init-semantic-db - [ 5 ] [ test-relation ] unit-test + ! [ T{ node f 3 "test1" } ] [ test1-relation-id-word ] unit-test + ! [ T{ node f 4 "test2" } ] [ test2-relation ] unit-test + [ T{ node f 4 "test3" } ] [ test3-relation ] unit-test ] with-db delete-db ! test hierarchy @@ -52,12 +53,14 @@ test-db [ "fran" create-node "fran" set "charlie" create-node "charlie" set "gertrude" create-node "gertrude" set - [ t ] [ "bob" get "adam" get has-parent integer? ] unit-test - { { "bob" "eve" } { "fran" "eve" } { "gertrude" "bob" } { "fran" "bob" } { "charlie" "fran" } } [ first2 [ get ] 2apply has-parent drop ] each + [ ] [ "bob" get "adam" get has-parent ] unit-test + { { "bob" "eve" } { "fran" "eve" } { "gertrude" "bob" } { "fran" "bob" } { "charlie" "fran" } } [ first2 [ get ] 2apply has-parent ] each [ { "bob" "fran" } ] [ "eve" get has-parent-relation children [ node-content ] map ] unit-test [ { "adam" "eve" } ] [ "bob" get has-parent-relation parents [ node-content ] map ] unit-test - [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get-node-hierarchy dup tree-id node-content swap tree-children [ tree-id node-content ] map ] unit-test + [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get-node-hierarchy dup node>> node-content swap children>> [ node>> node-content ] map ] unit-test [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get-root-nodes [ node-content ] map natural-sort >array ] unit-test [ { } ] [ "charlie" get dup "fran" get !has-parent has-parent-relation parents [ node-content ] map ] unit-test + [ { "adam" "eve" } ] [ has-parent-relation ultimate-objects node-results [ node-content ] map ] unit-test + [ { "fran" "gertrude" } ] [ has-parent-relation ultimate-subjects node-results [ node-content ] map ] unit-test ] with-db delete-db diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index ee276260f3..2500441b11 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -1,14 +1,13 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays combinators combinators.cleave continuations db db.tuples db.types db.sqlite hashtables kernel math math.parser namespaces new-slots parser sequences sequences.deep sequences.lib strings words ; +USING: accessors arrays combinators combinators.cleave combinators.lib +continuations db db.tuples db.types db.sqlite hashtables kernel math +math.parser namespaces parser sequences sequences.deep +sequences.lib strings words ; IN: semantic-db TUPLE: node id content ; -: ( content -- node ) - node construct-empty swap >>content ; - -: ( id -- node ) - node construct-empty swap >>id ; +C: node node "node" { @@ -16,15 +15,14 @@ node "node" { "content" "content" TEXT } } define-persistent -: delete-node ( node-id -- ) - delete-tuple ; +: delete-node ( node -- ) delete-tuple ; +: create-node ( content -- node ) f swap dup insert-tuple ; +: load-node ( id -- node ) f select-tuple ; -: create-node ( str -- node-id ) - dup insert-tuple id>> ; - -: node-content ( id -- str ) - select-tuple content>> ; +: node-content ( node -- content ) + dup content>> [ nip ] [ select-tuple content>> ] if* ; +! TODO: get rid of arc id and write our own sql TUPLE: arc id subject object relation ; : ( subject object relation -- arc ) @@ -33,42 +31,50 @@ TUPLE: arc id subject object relation ; : ( id -- arc ) arc construct-empty swap >>id ; -: insert-arc ( arc -- ) - f dup insert-tuple id>> >>id insert-tuple ; +: delete-arc ( arc -- ) delete-tuple ; -: delete-arc ( arc-id -- ) - dup delete-node delete-tuple ; +: create-arc ( subject object relation -- ) + [ id>> ] 3apply insert-tuple ; -: create-arc ( subject object relation -- arc-id ) - dup insert-arc id>> ; - -: has-arc? ( subject object relation -- ? ) - select-tuples length 0 > ; +: nodes>arc ( subject object relation -- arc ) + [ [ id>> ] [ f ] if* ] 3apply ; : select-arcs ( subject object relation -- arcs ) - select-tuples ; + nodes>arc select-tuples ; -: select-arc-ids ( subject object relation -- arc-ids ) - select-arcs [ id>> ] map ; +: has-arc? ( subject object relation -- ? ) + select-arcs length 0 > ; -: select-arc-subjects ( subject object relation -- subject-ids ) - select-arcs [ subject>> ] map ; +: select-arc-subjects ( subject object relation -- subjects ) + select-arcs [ subject>> f ] map ; -: select-subjects ( object relation -- subject-ids ) +: select-arc-subject ( subject object relation -- subject ) + select-arcs ?first [ subject>> f ] [ f ] if* ; + +: select-subjects ( object relation -- subjects ) f -rot select-arc-subjects ; -: select-arc-objects ( subject object relation -- object-ids ) - select-arcs [ object>> ] map ; +: select-subject ( object relation -- subject ) + f -rot select-arc-subject ; -: select-objects ( subject relation -- object-ids ) +: select-arc-objects ( subject object relation -- objects ) + select-arcs [ object>> f ] map ; + +: select-arc-object ( subject object relation -- object ) + select-arcs ?first [ object>> f ] [ f ] if* ; + +: select-objects ( subject relation -- objects ) f swap select-arc-objects ; +: select-object ( subject relation -- object ) + f swap select-arc-object ; + : delete-arcs ( subject object relation -- ) - select-arcs [ id>> delete-arc ] each ; + select-arcs [ delete-arc ] each ; arc "arc" { - { "id" "id" INTEGER +assigned-id+ } ! foreign key to node table? + { "id" "id" +native-id+ +autoincrement+ } { "relation" "relation" INTEGER +not-null+ } { "subject" "subject" INTEGER +not-null+ } { "object" "object" INTEGER +not-null+ } @@ -78,66 +84,99 @@ arc "arc" "semantic-db" create-node drop "has-context" create-node drop ; -: semantic-db-context 1 ; -: has-context-relation 2 ; +: semantic-db-context T{ node f 1 "semantic-db" } ; +: has-context-relation T{ node f 2 "has-context" } ; : create-bootstrap-arcs ( -- ) - has-context-relation semantic-db-context has-context-relation create-arc drop ; + has-context-relation semantic-db-context has-context-relation create-arc ; : init-semantic-db ( -- ) - node create-table - arc create-table + node create-table arc create-table create-bootstrap-nodes create-bootstrap-arcs ; -: param ( value key type -- param ) - swapd 3array ; +: param ( value key type -- param ) swapd 3array ; -: single-int-results ( bindings sql -- array ) - f f [ do-bound-query ] with-disposal - [ first string>number ] map ; +! db utilities +: results ( bindings sql -- array ) + f f [ do-bound-query ] with-disposal ; -: ensure1 ( x quot1 quot2 -- y ) - #! quot1 ( x -- y/f ) tries to find an existing y - #! quot2 ( x -- y ) creates a new y if quot1 returns f - >r dupd call [ nip ] r> if* ; +: node-result ( result -- node ) + dup first string>number swap second ; -: ensure2 ( x y quot1 quot2 -- z ) - #! quot1 ( x y -- z/f ) tries to find an existing z - #! quot2 ( x y -- z ) creates a new z if quot1 returns f - >r >r 2dup r> call [ 2nip ] r> if* ; +: ?1node-result ( results -- node ) + ?first [ node-result ] [ f ] if* ; + +: node-results ( results -- nodes ) + [ node-result ] map ; + +: subjects-with-cor ( content object relation -- sql-results ) + [ id>> ] 2apply + [ + ":relation" INTEGER param , + ":object" INTEGER param , + ":content" TEXT param , + ] { } make + "select n.id, n.content from node n, arc a where n.content = :content and n.id = a.subject and a.relation = :relation and a.object = :object" results ; + +: objects-with-csr ( content subject relation -- sql-results ) + [ id>> ] 2apply + [ + ":relation" INTEGER param , + ":subject" INTEGER param , + ":content" TEXT param , + ] { } make + "select n.id, n.content from node n, arc a where n.content = :content and n.id = a.object and a.relation = :relation and a.subject = :subject" results ; + +: (with-relation) ( content relation -- bindings sql ) + id>> [ ":relation" INTEGER param , ":content" TEXT param , ] { } make + "select distinct n.id, n.content from node n, arc a where n.content = :content and a.relation = :relation" ; + +: subjects-with-relation ( content relation -- sql-results ) + (with-relation) " and a.object = n.id" append results ; + +: objects-with-relation ( content relation -- sql-results ) + (with-relation) " and a.subject = n.id" append results ; + +: (ultimate) ( relation b a -- sql-results ) + [ + "select distinct n.id, n.content from node n, arc a where a.relation = :relation and n.id = a." % % " and n.id not in (select b." % % " from arc b where b.relation = :relation)" % + ] "" make [ id>> ":relation" INTEGER param 1array ] dip results ; + +: ultimate-objects ( relation -- sql-results ) + "subject" "object" (ultimate) ; + +: ultimate-subjects ( relation -- sql-results ) + "object" "subject" (ultimate) ; ! contexts: ! - a node n is a context iff there exists a relation r such that r has context n -: create-context ( context-name -- context-id ) create-node ; +: create-context ( context-name -- context ) create-node ; -: get-context ( context-name -- context-id/f ) - [ - ":name" TEXT param , - has-context-relation ":has_context" INTEGER param , - ] { } make - "select distinct n.id from node n, arc a where n.content = :name and a.relation = :has_context and a.object = n.id" - single-int-results ?first ; +: get-context ( context-name -- context/f ) + has-context-relation subjects-with-relation ?1node-result ; -: context-id ( context-name -- context-id ) - [ get-context ] [ create-context ] ensure1 ; +: ensure-context ( context-name -- context ) + dup get-context [ + nip + ] [ + create-context + ] if* ; ! relations: ! - have a context in context 'semantic-db' -: create-relation ( relation-name context-id -- relation-id ) - [ create-node dup ] dip has-context-relation create-arc drop ; +: create-relation ( relation-name context -- relation ) + [ create-node dup ] dip has-context-relation create-arc ; -: get-relation ( relation-name context-id -- relation-id/f ) - [ - ":context" INTEGER param , - ":name" TEXT param , - has-context-relation ":has_context" INTEGER param , - ] { } make - "select n.id from node n, arc a where n.content = :name and n.id = a.subject and a.relation = :has_context and a.object = :context" - single-int-results ?first ; +: get-relation ( relation-name context -- relation/f ) + has-context-relation subjects-with-cor ?1node-result ; -: relation-id ( relation-name context-id -- relation-id ) - [ get-relation ] [ create-relation ] ensure2 ; +: ensure-relation ( relation-name context -- relation ) + 2dup get-relation [ + 2nip + ] [ + create-relation + ] if* ; TUPLE: relation-definition relate id-word unrelate related? subjects objects ; C: relation-definition @@ -181,7 +220,7 @@ C: relation-definition : define-id-word ( relation-definition id-word -- ) [ relate>> ] dip tuck word-vocabulary - [ context-id relation-id ] 2curry define ; + [ ensure-context ensure-relation ] 2curry define ; : create-id-word ( relation-definition -- id-word ) dup id-word>> "id-word" choose-word-name create-in ; @@ -195,22 +234,46 @@ PRIVATE> scan t t t t t define-relation ; parsing ! hierarchy -TUPLE: tree id children ; -C: tree +TUPLE: node-tree node children ; +C: node-tree -: children ( node-id has-parent-relation -- children ) select-subjects ; -: parents ( node-id has-parent-relation -- parents ) select-objects ; +: children ( node has-parent-relation -- children ) select-subjects ; +: parents ( node has-parent-relation -- parents ) select-objects ; -: get-node-hierarchy ( node-id has-parent-relation -- tree ) - 2dup children >r [ get-node-hierarchy ] curry r> swap map ; +: get-node-tree ( node child-selector -- node-tree ) + 2dup call >r [ get-node-tree ] curry r> swap map ; -: (get-root-nodes) ( node-id has-parent-relation -- root-nodes/node-id ) +! : get-node-tree ( node has-parent-relation -- node-tree ) +! 2dup children >r [ get-node-tree ] curry r> swap map ; +: get-node-tree-s ( node has-parent-relation -- tree ) + [ select-subjects ] curry get-node-tree ; + +: get-node-tree-o ( node has-child-relation -- tree ) + [ select-objects ] curry get-node-tree ; + +: (get-node-chain) ( node next-selector seq -- seq ) + pick [ + over push >r [ call ] keep r> (get-node-chain) + ] [ + 2nip + ] if* ; + +: get-node-chain ( node next-selector -- seq ) + V{ } clone (get-node-chain) ; + +: get-node-chain-o ( node relation -- seq ) + [ select-object ] curry get-node-chain ; + +: get-node-chain-s ( node relation -- seq ) + [ select-subject ] curry get-node-chain ; + +: (get-root-nodes) ( node has-parent-relation -- root-nodes/node ) 2dup parents dup empty? [ 2drop ] [ >r nip [ (get-root-nodes) ] curry r> swap map ] if ; -: get-root-nodes ( node-id has-parent-relation -- root-nodes ) +: get-root-nodes ( node has-parent-relation -- root-nodes ) (get-root-nodes) flatten prune ; From e8abcf8d8583c917ba85790d21f775778f7d716e Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Tue, 1 Apr 2008 13:41:03 +1100 Subject: [PATCH 016/270] semantic-db: change 2apply to bi@ --- extra/semantic-db/semantic-db-tests.factor | 4 ++-- extra/semantic-db/semantic-db.factor | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extra/semantic-db/semantic-db-tests.factor b/extra/semantic-db/semantic-db-tests.factor index ac620de4d9..8fec6d5cbb 100644 --- a/extra/semantic-db/semantic-db-tests.factor +++ b/extra/semantic-db/semantic-db-tests.factor @@ -54,10 +54,10 @@ test-db [ "charlie" create-node "charlie" set "gertrude" create-node "gertrude" set [ ] [ "bob" get "adam" get has-parent ] unit-test - { { "bob" "eve" } { "fran" "eve" } { "gertrude" "bob" } { "fran" "bob" } { "charlie" "fran" } } [ first2 [ get ] 2apply has-parent ] each + { { "bob" "eve" } { "fran" "eve" } { "gertrude" "bob" } { "fran" "bob" } { "charlie" "fran" } } [ first2 [ get ] bi@ has-parent ] each [ { "bob" "fran" } ] [ "eve" get has-parent-relation children [ node-content ] map ] unit-test [ { "adam" "eve" } ] [ "bob" get has-parent-relation parents [ node-content ] map ] unit-test - [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get-node-hierarchy dup node>> node-content swap children>> [ node>> node-content ] map ] unit-test + [ "fran" { "charlie" } ] [ "fran" get has-parent-relation get-node-tree-s dup node>> node-content swap children>> [ node>> node-content ] map ] unit-test [ { "adam" "eve" } ] [ "charlie" get has-parent-relation get-root-nodes [ node-content ] map natural-sort >array ] unit-test [ { } ] [ "charlie" get dup "fran" get !has-parent has-parent-relation parents [ node-content ] map ] unit-test [ { "adam" "eve" } ] [ has-parent-relation ultimate-objects node-results [ node-content ] map ] unit-test diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 2500441b11..b33d795c9c 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -110,7 +110,7 @@ arc "arc" [ node-result ] map ; : subjects-with-cor ( content object relation -- sql-results ) - [ id>> ] 2apply + [ id>> ] bi@ [ ":relation" INTEGER param , ":object" INTEGER param , @@ -119,7 +119,7 @@ arc "arc" "select n.id, n.content from node n, arc a where n.content = :content and n.id = a.subject and a.relation = :relation and a.object = :object" results ; : objects-with-csr ( content subject relation -- sql-results ) - [ id>> ] 2apply + [ id>> ] bi@ [ ":relation" INTEGER param , ":subject" INTEGER param , From 21e30d86815a813aed7c099867e619e368910b64 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Wed, 9 Apr 2008 09:22:12 +1000 Subject: [PATCH 017/270] semantic-db: add node= --- extra/semantic-db/semantic-db.factor | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index b33d795c9c..2ac667a94c 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -22,6 +22,8 @@ node "node" : node-content ( node -- content ) dup content>> [ nip ] [ select-tuple content>> ] if* ; +: node= ( node node -- ? ) [ id>> ] bi@ = ; + ! TODO: get rid of arc id and write our own sql TUPLE: arc id subject object relation ; From 7a748b23c8021db06fa2f563b612be70be268333 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Wed, 9 Apr 2008 09:23:33 +1000 Subject: [PATCH 018/270] initial work on tangle --- extra/tangle/html/html-tests.factor | 7 ++++ extra/tangle/html/html.factor | 33 +++++++++++++++++++ extra/tangle/menu/menu.factor | 22 +++++++++++++ extra/tangle/page/page.factor | 23 +++++++++++++ extra/tangle/path/path.factor | 51 +++++++++++++++++++++++++++++ extra/tangle/tangle-tests.factor | 26 +++++++++++++++ extra/tangle/tangle.factor | 49 +++++++++++++++++++++++++++ 7 files changed, 211 insertions(+) create mode 100644 extra/tangle/html/html-tests.factor create mode 100644 extra/tangle/html/html.factor create mode 100644 extra/tangle/menu/menu.factor create mode 100644 extra/tangle/page/page.factor create mode 100644 extra/tangle/path/path.factor create mode 100644 extra/tangle/tangle-tests.factor create mode 100644 extra/tangle/tangle.factor diff --git a/extra/tangle/html/html-tests.factor b/extra/tangle/html/html-tests.factor new file mode 100644 index 0000000000..8e7d8c24e1 --- /dev/null +++ b/extra/tangle/html/html-tests.factor @@ -0,0 +1,7 @@ +USING: html kernel semantic-db tangle.html tools.test ; +IN: tangle.html.tests + +[ "test" ] [ "test" >html ] unit-test +[ "
  • An Item
" ] [ { "An Item" } >html ] unit-test +[ "
  • One
  • Two
  • Three, ah ah ah
" ] [ { "One" "Two" "Three, ah ah ah" } >html ] unit-test +[ "some link" ] [ "foo/bar" "some link" >html ] unit-test diff --git a/extra/tangle/html/html.factor b/extra/tangle/html/html.factor new file mode 100644 index 0000000000..9c55b66528 --- /dev/null +++ b/extra/tangle/html/html.factor @@ -0,0 +1,33 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors html html.elements io io.streams.string kernel namespaces semantic-db sequences strings tangle.path ; +IN: tangle.html + +TUPLE: element attributes ; + +TUPLE: ulist < element items ; +: ( items -- element ) + H{ } clone swap ulist construct-boa ; + +TUPLE: link < element href text ; +: ( href text -- element ) + H{ } clone -rot link construct-boa ; + +GENERIC: >html ( element -- str ) + +M: string >html ( str -- str ) ; + +M: link >html ( link -- str ) + [ > =href a> text>> write ] with-string-writer ; + +M: node >html ( node -- str ) + dup node>path [ + swap node-content >html + ] [ + node-content + ] if* ; + +M: ulist >html ( ulist -- str ) + [ +
    items>> [
  • >html write
  • ] each
+ ] with-string-writer ; diff --git a/extra/tangle/menu/menu.factor b/extra/tangle/menu/menu.factor new file mode 100644 index 0000000000..9740acee1c --- /dev/null +++ b/extra/tangle/menu/menu.factor @@ -0,0 +1,22 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors kernel semantic-db sequences tangle.html ; +IN: tangle.menu + +RELATION: subitem-of +RELATION: before + +: get-menus ( -- nodes ) + subitem-of-relation ultimate-objects node-results ; + +: get-menu ( name -- node ) + get-menus [ node-content = ] with find nip ; + +: ensure-menu ( name -- node ) + dup get-menu [ nip ] [ create-node ] if* ; + +: load-menu ( name -- menu ) + get-menu subitem-of-relation get-node-tree-s ; + +: menu>ulist ( menu -- str ) children>> ; +: menu>html ( menu -- str ) menu>ulist >html ; diff --git a/extra/tangle/page/page.factor b/extra/tangle/page/page.factor new file mode 100644 index 0000000000..db3d58d5f3 --- /dev/null +++ b/extra/tangle/page/page.factor @@ -0,0 +1,23 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors kernel semantic-db sequences sequences.lib ; +IN: tangle.page + +RELATION: has-abbreviation +RELATION: has-content +RELATION: has-subsection +RELATION: before +RELATION: authored-by +RELATION: authored-on + +TUPLE: page name abbreviation author created content ; +C: page + +: load-page-content ( node -- content ) + has-content-objects [ node-content ] map concat ; + +: load-page ( node -- page ) + dup [ has-abbreviation-objects ?first ] keep + [ authored-by-objects ?first ] keep + [ authored-on-objects ?first ] keep + load-page-content ; diff --git a/extra/tangle/path/path.factor b/extra/tangle/path/path.factor new file mode 100644 index 0000000000..e7cf3de967 --- /dev/null +++ b/extra/tangle/path/path.factor @@ -0,0 +1,51 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: kernel semantic-db sequences sequences.lib splitting ; +IN: tangle.path + +RELATION: has-filename +RELATION: in-directory + +: create-root ( -- node ) "" create-node ; + +: get-root ( -- node ) + in-directory-relation ultimate-objects ?1node-result ; + +: ensure-root ( -- node ) get-root [ create-root ] unless* ; + +: create-file ( parent name -- node ) + create-node swap dupd in-directory ; + +: files-in-directory ( node -- nodes ) in-directory-subjects ; + +: file-in-directory ( name node -- node ) + in-directory-relation subjects-with-cor ?1node-result ; + +: parent-directory ( file-node -- dir-node ) + in-directory-objects ?first ; + +: (path>node) ( node name -- node ) + swap [ file-in-directory ] [ drop f ] if* ; + +USE: tools.walker +: path>node ( path -- node ) + "/" split ensure-root swap [ (path>node) ] each ; + +: (node>path) ( root seq node -- seq ) + pick over node= [ + drop nip + ] [ + dup node-content pick push + parent-directory [ + (node>path) + ] [ + 2drop f + ] if* + ] if ; + +: node>path* ( root node -- path ) + V{ } clone swap (node>path) dup empty? + [ drop f ] [ "/" join ] if ; + +: node>path ( node -- path ) + ensure-root swap node>path* ; diff --git a/extra/tangle/tangle-tests.factor b/extra/tangle/tangle-tests.factor new file mode 100644 index 0000000000..7b78e07473 --- /dev/null +++ b/extra/tangle/tangle-tests.factor @@ -0,0 +1,26 @@ +USING: accessors arrays continuations db db.sqlite io.files kernel semantic-db sequences tangle tangle.html tangle.menu tangle.page tangle.path tools.test tools.walker tuple-syntax ; +IN: tangle.tests + +: db-path "tangle-test.db" temp-file ; +: test-db db-path sqlite-db ; +: delete-db [ db-path delete-file ] ignore-errors ; + +: test-tangle ( -- ) + ensure-root "foo" create-file "bar" create-file "pluck_eggs" create-file + "How to Pluck Eggs" create-node swap has-filename + "Main Menu" ensure-menu "home" create-node swap subitem-of ; + +test-db [ + init-semantic-db test-tangle + [ "pluck_eggs" ] [ "foo/bar/pluck_eggs" path>node [ node-content ] when* ] unit-test + [ "How to Pluck Eggs" ] [ "foo/bar/pluck_eggs" path>node [ has-filename-subjects first node-content ] when* ] unit-test + [ "foo/bar/pluck_eggs" ] [ "foo/bar/pluck_eggs" path>node node>path ] unit-test + [ f ] [ TUPLE{ node id: 666 content: "some content" } parent-directory ] unit-test + [ f ] [ TUPLE{ node id: 666 content: "some content" } node>path ] unit-test + [ "Main Menu" ] [ "Main Menu" ensure-menu node-content ] unit-test + [ t ] [ "Main Menu" ensure-menu "Main Menu" ensure-menu node= ] unit-test + [ "Main Menu" { "home" } ] [ "Main Menu" load-menu dup node>> node-content swap children>> [ node>> node-content ] map >array ] unit-test + [ { "home" } ] [ "Main Menu" load-menu menu>ulist items>> [ node>> node-content ] map >array ] unit-test + [ f ] [ TUPLE{ node id: 666 content: "node text" } node>path ] unit-test + [ "node text" ] [ TUPLE{ node id: 666 content: "node text" } >html ] unit-test +] with-db delete-db diff --git a/extra/tangle/tangle.factor b/extra/tangle/tangle.factor new file mode 100644 index 0000000000..cbd3b94058 --- /dev/null +++ b/extra/tangle/tangle.factor @@ -0,0 +1,49 @@ +! Copyright (C) 2008 Alex Chapman +! See http://factorcode.org/license.txt for BSD license. +USING: accessors assocs db db.sqlite db.postgresql http.server io kernel namespaces semantic-db sequences strings ; +IN: tangle + +GENERIC: render* ( content templater -- output ) +GENERIC: render ( content templater -- ) + +TUPLE: echo-template ; +C: echo-template + +M: echo-template render* drop ; +! METHOD: render* { string echo-template } drop ; +M: object render render* write ; + +TUPLE: tangle db templater ; +C: tangle + +TUPLE: sqlite-tangle ; +TUPLE: postgres-tangle ; + +: make-tangle ( db templater type -- tangle ) + construct-empty [ ] dip tuck set-delegate ; + +: ( db templater -- tangle ) sqlite-tangle make-tangle ; +: ( db templater -- tangle ) postgres-tangle make-tangle ; + +: with-tangle ( tangle quot -- ) + [ db>> ] dip with-db ; + +: init-db ( tangle -- tangle ) + dup [ init-semantic-db ] with-tangle ; + +GENERIC# new-db 1 ( tangle obj -- tangle ) +M: sqlite-tangle new-db ( tangle filename -- tangle ) + sqlite-db >>db init-db ; +M: postgres-tangle new-db ( tangle args -- tangle ) + postgresql-db >>db init-db ; + +TUPLE: node-responder tangle ; +C: node-responder + +M: node-responder call-responder ( path responder -- response ) + "text/plain" nip request-params + [ "node-id" swap at* [ >>body ] [ drop ] if ] when* nip ; + +: test-tangle ( -- ) + f f main-responder set ; + From 14426af0c35c0e9650524b03e0ca0fb6cdc3cdca Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Wed, 9 Apr 2008 17:38:04 +1000 Subject: [PATCH 019/270] adding bank account simulator --- extra/bank/bank-tests.factor | 34 ++++++++++++++++ extra/bank/bank.factor | 76 ++++++++++++++++++++++++++---------- 2 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 extra/bank/bank-tests.factor diff --git a/extra/bank/bank-tests.factor b/extra/bank/bank-tests.factor new file mode 100644 index 0000000000..2aa31f1e85 --- /dev/null +++ b/extra/bank/bank-tests.factor @@ -0,0 +1,34 @@ +USING: accessors arrays bank calendar kernel math math.functions namespaces tools.test tools.walker ; +IN: bank.tests + +SYMBOL: my-account +[ + "Alex's Take Over the World Fund" 0.07 1 2007 11 1 6101.94 open-account my-account set + [ 6137 ] [ my-account get 2007 12 2 process-to-date balance>> round >integer ] unit-test + [ 6137 ] [ my-account get 2007 12 2 process-to-date balance>> round >integer ] unit-test +] with-scope + +[ + "Petty Cash" 0.07 1 2006 12 1 10962.18 open-account my-account set + [ 11027 ] [ my-account get 2007 1 2 process-to-date balance>> round >integer ] unit-test +] with-scope + +[ + "Saving to buy a pony" 0.0725 1 2008 3 3 11106.24 open-account my-account set + [ 8416 ] [ + my-account get [ + 2008 3 11 -750 "Need to buy food" , + 2008 3 25 -500 "Going to a party" , + 2008 4 8 -800 "Losing interest in the pony..." , + 2008 4 8 -700 "Buying a rocking horse" , + ] { } make inserting-transactions balance>> round >integer + ] unit-test +] with-scope + +[ + [ 6781 ] [ + "..." 0.07 1 2007 4 10 4398.50 open-account + 2007 10 26 2000 "..." 1array inserting-transactions + 2008 4 10 process-to-date dup balance>> swap unpaid-interest>> + round >integer + ] unit-test +] with-scope diff --git a/extra/bank/bank.factor b/extra/bank/bank.factor index c9228bedd5..0ea4bae2b3 100644 --- a/extra/bank/bank.factor +++ b/extra/bank/bank.factor @@ -1,33 +1,69 @@ -USING: accessors calendar kernel money new-slots sequences ; +USING: accessors calendar kernel math money sequences ; IN: bank -MIXIN: policy -TUPLE: simple-policy interest-rate ; -INSTANCE: simple-policy policy -C: simple-policy +TUPLE: account name interest-rate interest-payment-day opening-date transactions unpaid-interest interest-last-paid ; -GENERIC: interest-rate ( date account policy -- rate ) -M: simple-policy interest-rate 2nip interest-rate>> ; - -: daily-interest-rate ( date account policy -- rate ) - pick days-in-year >r interest-rate r> / ; - -TUPLE: account name balance transactions ; - -: ( name -- account ) - 0 V{ } clone account construct-boa ; +: ( name interest-rate interest-payment-day opening-date -- account ) + V{ } clone 0 pick account construct-boa ; TUPLE: transaction date amount description ; - C: transaction : >>transaction ( account transaction -- account ) over transactions>> push ; -: open-account ( date opening-balance name -- account ) - >r "Account Opened" >>transaction ; +: total ( transactions -- balance ) + 0 [ amount>> + ] reduce ; -: open-account-now ( opening-balance name -- account ) - now -rot open-account ; +: balance>> ( account -- balance ) transactions>> total ; +: open-account ( name interest-rate interest-payment-day opening-date opening-balance -- account ) + >r [ ] keep r> "Account Opened" >>transaction ; +: daily-rate ( yearly-rate day -- daily-rate ) + days-in-year / ; + +: daily-rate>> ( account date -- rate ) + [ interest-rate>> ] dip daily-rate ; + +: before? ( date date -- ? ) <=> 0 < ; + +: transactions-on-date ( account date -- transactions ) + [ before? ] curry subset ; + +: balance-on-date ( account date -- balance ) + transactions-on-date total ; + +: pay-interest ( account date -- ) + over unpaid-interest>> "Interest Credit" + >>transaction 0 >>unpaid-interest drop ; + +: interest-payment-day? ( account date -- ? ) + day>> swap interest-payment-day>> = ; + +: ?pay-interest ( account date -- ) + 2dup interest-payment-day? [ pay-interest ] [ 2drop ] if ; + +: unpaid-interest+ ( account amount -- account ) + over unpaid-interest>> + >>unpaid-interest ; + +: accumulate-interest ( account date -- ) + [ dupd daily-rate>> over balance>> * unpaid-interest+ ] keep + >>interest-last-paid drop ; + +: process-day ( account date -- ) + 2dup accumulate-interest ?pay-interest ; + +: each-day ( quot start end -- ) + 2dup before? [ + >r dup >r over >r swap call r> r> 1 days time+ r> each-day + ] [ + 3drop + ] if ; + +: process-to-date ( account date -- account ) + over interest-last-paid>> 1 days time+ + [ dupd process-day ] spin each-day ; + +: inserting-transactions ( account transactions -- account ) + [ [ date>> process-to-date ] keep >>transaction ] each ; From d2d2c5d84fbf6eaa2c5150067fd19dc8f6a314c6 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 10 Apr 2008 20:00:04 -0500 Subject: [PATCH 020/270] fix using in hardware-info --- extra/hardware-info/windows/windows.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/hardware-info/windows/windows.factor b/extra/hardware-info/windows/windows.factor index 10474c09f7..3162496974 100755 --- a/extra/hardware-info/windows/windows.factor +++ b/extra/hardware-info/windows/windows.factor @@ -1,7 +1,7 @@ USING: alien alien.c-types kernel libc math namespaces windows windows.kernel32 windows.advapi32 words combinators vocabs.loader hardware-info.backend -system ; +system alien.strings ; IN: hardware-info.windows : system-info ( -- SYSTEM_INFO ) From 8a0909d84923ce59a47e5322e449eb1c149d2768 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 10 Apr 2008 20:09:36 -0500 Subject: [PATCH 021/270] fix ffi test int ffi test 36 point 5 --- core/alien/compiler/compiler-tests.factor | 750 +++++++++++----------- vm/ffi_test.c | 2 +- 2 files changed, 376 insertions(+), 376 deletions(-) diff --git a/core/alien/compiler/compiler-tests.factor b/core/alien/compiler/compiler-tests.factor index 3d0f36e415..57bf163443 100755 --- a/core/alien/compiler/compiler-tests.factor +++ b/core/alien/compiler/compiler-tests.factor @@ -1,375 +1,375 @@ -IN: alien.compiler.tests -USING: alien alien.c-types alien.syntax compiler kernel -namespaces namespaces tools.test sequences inference words -arrays parser quotations continuations inference.backend effects -namespaces.private io io.streams.string memory system threads -tools.test math ; - -FUNCTION: void ffi_test_0 ; -[ ] [ ffi_test_0 ] unit-test - -FUNCTION: int ffi_test_1 ; -[ 3 ] [ ffi_test_1 ] unit-test - -FUNCTION: int ffi_test_2 int x int y ; -[ 5 ] [ 2 3 ffi_test_2 ] unit-test -[ "hi" 3 ffi_test_2 ] must-fail - -FUNCTION: int ffi_test_3 int x int y int z int t ; -[ 25 ] [ 2 3 4 5 ffi_test_3 ] unit-test - -FUNCTION: float ffi_test_4 ; -[ 1.5 ] [ ffi_test_4 ] unit-test - -FUNCTION: double ffi_test_5 ; -[ 1.5 ] [ ffi_test_5 ] unit-test - -FUNCTION: int ffi_test_9 int a int b int c int d int e int f int g ; -[ 28 ] [ 1 2 3 4 5 6 7 ffi_test_9 ] unit-test -[ "a" 2 3 4 5 6 7 ffi_test_9 ] must-fail -[ 1 2 3 4 5 6 "a" ffi_test_9 ] must-fail - -C-STRUCT: foo - { "int" "x" } - { "int" "y" } -; - -: make-foo ( x y -- foo ) - "foo" [ set-foo-y ] keep [ set-foo-x ] keep ; - -FUNCTION: int ffi_test_11 int a foo b int c ; - -[ 14 ] [ 1 2 3 make-foo 4 ffi_test_11 ] unit-test - -FUNCTION: int ffi_test_13 int a int b int c int d int e int f int g int h int i int j int k ; - -[ 66 ] [ 1 2 3 4 5 6 7 8 9 10 11 ffi_test_13 ] unit-test - -FUNCTION: foo ffi_test_14 int x int y ; - -[ 11 6 ] [ 11 6 ffi_test_14 dup foo-x swap foo-y ] unit-test - -FUNCTION: char* ffi_test_15 char* x char* y ; - -[ "foo" ] [ "xy" "zt" ffi_test_15 ] unit-test -[ "bar" ] [ "xy" "xy" ffi_test_15 ] unit-test -[ 1 2 ffi_test_15 ] must-fail - -C-STRUCT: bar - { "long" "x" } - { "long" "y" } - { "long" "z" } -; - -FUNCTION: bar ffi_test_16 long x long y long z ; - -[ 11 6 -7 ] [ - 11 6 -7 ffi_test_16 dup bar-x over bar-y rot bar-z -] unit-test - -C-STRUCT: tiny - { "int" "x" } -; - -FUNCTION: tiny ffi_test_17 int x ; - -[ 11 ] [ 11 ffi_test_17 tiny-x ] unit-test - -[ [ alien-indirect ] infer ] [ inference-error? ] must-fail-with - -: indirect-test-1 - "int" { } "cdecl" alien-indirect ; - -{ 1 1 } [ indirect-test-1 ] must-infer-as - -[ 3 ] [ "ffi_test_1" f dlsym indirect-test-1 ] unit-test - -[ -1 indirect-test-1 ] must-fail - -: indirect-test-2 - "int" { "int" "int" } "cdecl" alien-indirect gc ; - -{ 3 1 } [ indirect-test-2 ] must-infer-as - -[ 5 ] -[ 2 3 "ffi_test_2" f dlsym indirect-test-2 ] -unit-test - -: indirect-test-3 - "int" { "int" "int" "int" "int" } "stdcall" alien-indirect - gc ; - -<< "f-stdcall" f "stdcall" add-library >> - -[ f ] [ "f-stdcall" load-library ] unit-test -[ "stdcall" ] [ "f-stdcall" library library-abi ] unit-test - -: ffi_test_18 ( w x y z -- int ) - "int" "f-stdcall" "ffi_test_18" { "int" "int" "int" "int" } - alien-invoke gc ; - -[ 25 ] [ 2 3 4 5 ffi_test_18 ] unit-test - -: ffi_test_19 ( x y z -- bar ) - "bar" "f-stdcall" "ffi_test_19" { "long" "long" "long" } - alien-invoke gc ; - -[ 11 6 -7 ] [ - 11 6 -7 ffi_test_19 dup bar-x over bar-y rot bar-z -] unit-test - -FUNCTION: double ffi_test_6 float x float y ; -[ 6.0 ] [ 3.0 2.0 ffi_test_6 ] unit-test -[ "a" "b" ffi_test_6 ] must-fail - -FUNCTION: double ffi_test_7 double x double y ; -[ 6.0 ] [ 3.0 2.0 ffi_test_7 ] unit-test - -FUNCTION: double ffi_test_8 double x float y double z float t int w ; -[ 19.0 ] [ 3.0 2.0 1.0 6.0 7 ffi_test_8 ] unit-test - -FUNCTION: int ffi_test_10 int a int b double c int d float e int f int g int h ; -[ -34 ] [ 1 2 3.0 4 5.0 6 7 8 ffi_test_10 ] unit-test - -FUNCTION: void ffi_test_20 double x1, double x2, double x3, - double y1, double y2, double y3, - double z1, double z2, double z3 ; - -[ ] [ 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ffi_test_20 ] unit-test - -! Make sure XT doesn't get clobbered in stack frame - -: ffi_test_31 - "void" - f "ffi_test_31" - { "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" } - alien-invoke gc 3 ; - -[ 3 ] [ 42 [ ] each ffi_test_31 ] unit-test - -FUNCTION: longlong ffi_test_21 long x long y ; - -[ 121932631112635269 ] -[ 123456789 987654321 ffi_test_21 ] unit-test - -FUNCTION: long ffi_test_22 long x longlong y longlong z ; - -[ 987655432 ] -[ 1111 121932631112635269 123456789 ffi_test_22 ] unit-test - -[ 1111 f 123456789 ffi_test_22 ] must-fail - -C-STRUCT: rect - { "float" "x" } - { "float" "y" } - { "float" "w" } - { "float" "h" } -; - -: - "rect" - [ set-rect-h ] keep - [ set-rect-w ] keep - [ set-rect-y ] keep - [ set-rect-x ] keep ; - -FUNCTION: int ffi_test_12 int a int b rect c int d int e int f ; - -[ 45 ] [ 1 2 3.0 4.0 5.0 6.0 7 8 9 ffi_test_12 ] unit-test - -[ 1 2 { 1 2 3 } 7 8 9 ffi_test_12 ] must-fail - -FUNCTION: float ffi_test_23 ( float[3] x, float[3] y ) ; - -[ 32.0 ] [ { 1.0 2.0 3.0 } >c-float-array { 4.0 5.0 6.0 } >c-float-array ffi_test_23 ] unit-test - -! Test odd-size structs -C-STRUCT: test-struct-1 { { "char" 1 } "x" } ; - -FUNCTION: test-struct-1 ffi_test_24 ; - -[ B{ 1 } ] [ ffi_test_24 ] unit-test - -C-STRUCT: test-struct-2 { { "char" 2 } "x" } ; - -FUNCTION: test-struct-2 ffi_test_25 ; - -[ B{ 1 2 } ] [ ffi_test_25 ] unit-test - -C-STRUCT: test-struct-3 { { "char" 3 } "x" } ; - -FUNCTION: test-struct-3 ffi_test_26 ; - -[ B{ 1 2 3 } ] [ ffi_test_26 ] unit-test - -C-STRUCT: test-struct-4 { { "char" 4 } "x" } ; - -FUNCTION: test-struct-4 ffi_test_27 ; - -[ B{ 1 2 3 4 } ] [ ffi_test_27 ] unit-test - -C-STRUCT: test-struct-5 { { "char" 5 } "x" } ; - -FUNCTION: test-struct-5 ffi_test_28 ; - -[ B{ 1 2 3 4 5 } ] [ ffi_test_28 ] unit-test - -C-STRUCT: test-struct-6 { { "char" 6 } "x" } ; - -FUNCTION: test-struct-6 ffi_test_29 ; - -[ B{ 1 2 3 4 5 6 } ] [ ffi_test_29 ] unit-test - -C-STRUCT: test-struct-7 { { "char" 7 } "x" } ; - -FUNCTION: test-struct-7 ffi_test_30 ; - -[ B{ 1 2 3 4 5 6 7 } ] [ ffi_test_30 ] unit-test - -C-STRUCT: test-struct-8 { "double" "x" } { "double" "y" } ; - -FUNCTION: double ffi_test_32 test-struct-8 x int y ; - -[ 9.0 ] [ - "test-struct-8" - 1.0 over set-test-struct-8-x - 2.0 over set-test-struct-8-y - 3 ffi_test_32 -] unit-test - -C-STRUCT: test-struct-9 { "float" "x" } { "float" "y" } ; - -FUNCTION: double ffi_test_33 test-struct-9 x int y ; - -[ 9.0 ] [ - "test-struct-9" - 1.0 over set-test-struct-9-x - 2.0 over set-test-struct-9-y - 3 ffi_test_33 -] unit-test - -C-STRUCT: test-struct-10 { "float" "x" } { "int" "y" } ; - -FUNCTION: double ffi_test_34 test-struct-10 x int y ; - -[ 9.0 ] [ - "test-struct-10" - 1.0 over set-test-struct-10-x - 2 over set-test-struct-10-y - 3 ffi_test_34 -] unit-test - -C-STRUCT: test-struct-11 { "int" "x" } { "int" "y" } ; - -FUNCTION: double ffi_test_35 test-struct-11 x int y ; - -[ 9.0 ] [ - "test-struct-11" - 1 over set-test-struct-11-x - 2 over set-test-struct-11-y - 3 ffi_test_35 -] unit-test - -C-STRUCT: test-struct-12 { "int" "a" } { "double" "x" } ; - -: make-struct-12 - "test-struct-12" - [ set-test-struct-12-x ] keep ; - -FUNCTION: double ffi_test_36 ( test-struct-12 x ) ; - -[ 1.23456 ] [ 1.23456 make-struct-12 ffi_test_36 ] unit-test - -FUNCTION: ulonglong ffi_test_38 ( ulonglong x, ulonglong y ) ; - -[ t ] [ 31 2^ 32 2^ ffi_test_38 63 2^ = ] unit-test - -! Test callbacks - -: callback-1 "void" { } "cdecl" [ ] alien-callback ; - -[ 0 1 ] [ [ callback-1 ] infer dup effect-in swap effect-out ] unit-test - -[ t ] [ callback-1 alien? ] unit-test - -: callback_test_1 "void" { } "cdecl" alien-indirect ; - -[ ] [ callback-1 callback_test_1 ] unit-test - -: callback-2 "void" { } "cdecl" [ [ 5 throw ] ignore-errors ] alien-callback ; - -[ ] [ callback-2 callback_test_1 ] unit-test - -: callback-3 "void" { } "cdecl" [ 5 "x" set ] alien-callback ; - -[ t ] [ - namestack* - 3 "x" set callback-3 callback_test_1 - namestack* eq? -] unit-test - -[ 5 ] [ - [ - 3 "x" set callback-3 callback_test_1 "x" get - ] with-scope -] unit-test - -: callback-4 - "void" { } "cdecl" [ "Hello world" write ] alien-callback - gc ; - -[ "Hello world" ] [ - [ callback-4 callback_test_1 ] with-string-writer -] unit-test - -: callback-5 - "void" { } "cdecl" [ gc ] alien-callback ; - -[ "testing" ] [ - "testing" callback-5 callback_test_1 -] unit-test - -: callback-5a - "void" { } "cdecl" [ 8000000 f drop ] alien-callback ; - -! Hack; if we're on ARM, we probably don't have much RAM, so -! skip this test. -! cpu "arm" = [ -! [ "testing" ] [ -! "testing" callback-5a callback_test_1 -! ] unit-test -! ] unless - -: callback-6 - "void" { } "cdecl" [ [ continue ] callcc0 ] alien-callback ; - -[ 1 2 3 ] [ callback-6 callback_test_1 1 2 3 ] unit-test - -: callback-7 - "void" { } "cdecl" [ 1000 sleep ] alien-callback ; - -[ 1 2 3 ] [ callback-7 callback_test_1 1 2 3 ] unit-test - -[ f ] [ namespace global eq? ] unit-test - -: callback-8 - "void" { } "cdecl" [ - [ continue ] callcc0 - ] alien-callback ; - -[ ] [ callback-8 callback_test_1 ] unit-test - -: callback-9 - "int" { "int" "int" "int" } "cdecl" [ - + + 1+ - ] alien-callback ; - -FUNCTION: void ffi_test_36_point_5 ( ) ; - -[ ] [ ffi_test_36_point_5 ] unit-test - -FUNCTION: int ffi_test_37 ( void* func ) ; - -[ 1 ] [ callback-9 ffi_test_37 ] unit-test - -[ 7 ] [ callback-9 ffi_test_37 ] unit-test +IN: alien.compiler.tests +USING: alien alien.c-types alien.syntax compiler kernel +namespaces namespaces tools.test sequences inference words +arrays parser quotations continuations inference.backend effects +namespaces.private io io.streams.string memory system threads +tools.test math ; + +FUNCTION: void ffi_test_0 ; +[ ] [ ffi_test_0 ] unit-test + +FUNCTION: int ffi_test_1 ; +[ 3 ] [ ffi_test_1 ] unit-test + +FUNCTION: int ffi_test_2 int x int y ; +[ 5 ] [ 2 3 ffi_test_2 ] unit-test +[ "hi" 3 ffi_test_2 ] must-fail + +FUNCTION: int ffi_test_3 int x int y int z int t ; +[ 25 ] [ 2 3 4 5 ffi_test_3 ] unit-test + +FUNCTION: float ffi_test_4 ; +[ 1.5 ] [ ffi_test_4 ] unit-test + +FUNCTION: double ffi_test_5 ; +[ 1.5 ] [ ffi_test_5 ] unit-test + +FUNCTION: int ffi_test_9 int a int b int c int d int e int f int g ; +[ 28 ] [ 1 2 3 4 5 6 7 ffi_test_9 ] unit-test +[ "a" 2 3 4 5 6 7 ffi_test_9 ] must-fail +[ 1 2 3 4 5 6 "a" ffi_test_9 ] must-fail + +C-STRUCT: foo + { "int" "x" } + { "int" "y" } +; + +: make-foo ( x y -- foo ) + "foo" [ set-foo-y ] keep [ set-foo-x ] keep ; + +FUNCTION: int ffi_test_11 int a foo b int c ; + +[ 14 ] [ 1 2 3 make-foo 4 ffi_test_11 ] unit-test + +FUNCTION: int ffi_test_13 int a int b int c int d int e int f int g int h int i int j int k ; + +[ 66 ] [ 1 2 3 4 5 6 7 8 9 10 11 ffi_test_13 ] unit-test + +FUNCTION: foo ffi_test_14 int x int y ; + +[ 11 6 ] [ 11 6 ffi_test_14 dup foo-x swap foo-y ] unit-test + +FUNCTION: char* ffi_test_15 char* x char* y ; + +[ "foo" ] [ "xy" "zt" ffi_test_15 ] unit-test +[ "bar" ] [ "xy" "xy" ffi_test_15 ] unit-test +[ 1 2 ffi_test_15 ] must-fail + +C-STRUCT: bar + { "long" "x" } + { "long" "y" } + { "long" "z" } +; + +FUNCTION: bar ffi_test_16 long x long y long z ; + +[ 11 6 -7 ] [ + 11 6 -7 ffi_test_16 dup bar-x over bar-y rot bar-z +] unit-test + +C-STRUCT: tiny + { "int" "x" } +; + +FUNCTION: tiny ffi_test_17 int x ; + +[ 11 ] [ 11 ffi_test_17 tiny-x ] unit-test + +[ [ alien-indirect ] infer ] [ inference-error? ] must-fail-with + +: indirect-test-1 + "int" { } "cdecl" alien-indirect ; + +{ 1 1 } [ indirect-test-1 ] must-infer-as + +[ 3 ] [ "ffi_test_1" f dlsym indirect-test-1 ] unit-test + +[ -1 indirect-test-1 ] must-fail + +: indirect-test-2 + "int" { "int" "int" } "cdecl" alien-indirect gc ; + +{ 3 1 } [ indirect-test-2 ] must-infer-as + +[ 5 ] +[ 2 3 "ffi_test_2" f dlsym indirect-test-2 ] +unit-test + +: indirect-test-3 + "int" { "int" "int" "int" "int" } "stdcall" alien-indirect + gc ; + +<< "f-stdcall" f "stdcall" add-library >> + +[ f ] [ "f-stdcall" load-library ] unit-test +[ "stdcall" ] [ "f-stdcall" library library-abi ] unit-test + +: ffi_test_18 ( w x y z -- int ) + "int" "f-stdcall" "ffi_test_18" { "int" "int" "int" "int" } + alien-invoke gc ; + +[ 25 ] [ 2 3 4 5 ffi_test_18 ] unit-test + +: ffi_test_19 ( x y z -- bar ) + "bar" "f-stdcall" "ffi_test_19" { "long" "long" "long" } + alien-invoke gc ; + +[ 11 6 -7 ] [ + 11 6 -7 ffi_test_19 dup bar-x over bar-y rot bar-z +] unit-test + +FUNCTION: double ffi_test_6 float x float y ; +[ 6.0 ] [ 3.0 2.0 ffi_test_6 ] unit-test +[ "a" "b" ffi_test_6 ] must-fail + +FUNCTION: double ffi_test_7 double x double y ; +[ 6.0 ] [ 3.0 2.0 ffi_test_7 ] unit-test + +FUNCTION: double ffi_test_8 double x float y double z float t int w ; +[ 19.0 ] [ 3.0 2.0 1.0 6.0 7 ffi_test_8 ] unit-test + +FUNCTION: int ffi_test_10 int a int b double c int d float e int f int g int h ; +[ -34 ] [ 1 2 3.0 4 5.0 6 7 8 ffi_test_10 ] unit-test + +FUNCTION: void ffi_test_20 double x1, double x2, double x3, + double y1, double y2, double y3, + double z1, double z2, double z3 ; + +[ ] [ 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ffi_test_20 ] unit-test + +! Make sure XT doesn't get clobbered in stack frame + +: ffi_test_31 + "void" + f "ffi_test_31" + { "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" } + alien-invoke gc 3 ; + +[ 3 ] [ 42 [ ] each ffi_test_31 ] unit-test + +FUNCTION: longlong ffi_test_21 long x long y ; + +[ 121932631112635269 ] +[ 123456789 987654321 ffi_test_21 ] unit-test + +FUNCTION: long ffi_test_22 long x longlong y longlong z ; + +[ 987655432 ] +[ 1111 121932631112635269 123456789 ffi_test_22 ] unit-test + +[ 1111 f 123456789 ffi_test_22 ] must-fail + +C-STRUCT: rect + { "float" "x" } + { "float" "y" } + { "float" "w" } + { "float" "h" } +; + +: + "rect" + [ set-rect-h ] keep + [ set-rect-w ] keep + [ set-rect-y ] keep + [ set-rect-x ] keep ; + +FUNCTION: int ffi_test_12 int a int b rect c int d int e int f ; + +[ 45 ] [ 1 2 3.0 4.0 5.0 6.0 7 8 9 ffi_test_12 ] unit-test + +[ 1 2 { 1 2 3 } 7 8 9 ffi_test_12 ] must-fail + +FUNCTION: float ffi_test_23 ( float[3] x, float[3] y ) ; + +[ 32.0 ] [ { 1.0 2.0 3.0 } >c-float-array { 4.0 5.0 6.0 } >c-float-array ffi_test_23 ] unit-test + +! Test odd-size structs +C-STRUCT: test-struct-1 { { "char" 1 } "x" } ; + +FUNCTION: test-struct-1 ffi_test_24 ; + +[ B{ 1 } ] [ ffi_test_24 ] unit-test + +C-STRUCT: test-struct-2 { { "char" 2 } "x" } ; + +FUNCTION: test-struct-2 ffi_test_25 ; + +[ B{ 1 2 } ] [ ffi_test_25 ] unit-test + +C-STRUCT: test-struct-3 { { "char" 3 } "x" } ; + +FUNCTION: test-struct-3 ffi_test_26 ; + +[ B{ 1 2 3 } ] [ ffi_test_26 ] unit-test + +C-STRUCT: test-struct-4 { { "char" 4 } "x" } ; + +FUNCTION: test-struct-4 ffi_test_27 ; + +[ B{ 1 2 3 4 } ] [ ffi_test_27 ] unit-test + +C-STRUCT: test-struct-5 { { "char" 5 } "x" } ; + +FUNCTION: test-struct-5 ffi_test_28 ; + +[ B{ 1 2 3 4 5 } ] [ ffi_test_28 ] unit-test + +C-STRUCT: test-struct-6 { { "char" 6 } "x" } ; + +FUNCTION: test-struct-6 ffi_test_29 ; + +[ B{ 1 2 3 4 5 6 } ] [ ffi_test_29 ] unit-test + +C-STRUCT: test-struct-7 { { "char" 7 } "x" } ; + +FUNCTION: test-struct-7 ffi_test_30 ; + +[ B{ 1 2 3 4 5 6 7 } ] [ ffi_test_30 ] unit-test + +C-STRUCT: test-struct-8 { "double" "x" } { "double" "y" } ; + +FUNCTION: double ffi_test_32 test-struct-8 x int y ; + +[ 9.0 ] [ + "test-struct-8" + 1.0 over set-test-struct-8-x + 2.0 over set-test-struct-8-y + 3 ffi_test_32 +] unit-test + +C-STRUCT: test-struct-9 { "float" "x" } { "float" "y" } ; + +FUNCTION: double ffi_test_33 test-struct-9 x int y ; + +[ 9.0 ] [ + "test-struct-9" + 1.0 over set-test-struct-9-x + 2.0 over set-test-struct-9-y + 3 ffi_test_33 +] unit-test + +C-STRUCT: test-struct-10 { "float" "x" } { "int" "y" } ; + +FUNCTION: double ffi_test_34 test-struct-10 x int y ; + +[ 9.0 ] [ + "test-struct-10" + 1.0 over set-test-struct-10-x + 2 over set-test-struct-10-y + 3 ffi_test_34 +] unit-test + +C-STRUCT: test-struct-11 { "int" "x" } { "int" "y" } ; + +FUNCTION: double ffi_test_35 test-struct-11 x int y ; + +[ 9.0 ] [ + "test-struct-11" + 1 over set-test-struct-11-x + 2 over set-test-struct-11-y + 3 ffi_test_35 +] unit-test + +C-STRUCT: test-struct-12 { "int" "a" } { "double" "x" } ; + +: make-struct-12 + "test-struct-12" + [ set-test-struct-12-x ] keep ; + +FUNCTION: double ffi_test_36 ( test-struct-12 x ) ; + +[ 1.23456 ] [ 1.23456 make-struct-12 ffi_test_36 ] unit-test + +FUNCTION: ulonglong ffi_test_38 ( ulonglong x, ulonglong y ) ; + +[ t ] [ 31 2^ 32 2^ ffi_test_38 63 2^ = ] unit-test + +! Test callbacks + +: callback-1 "void" { } "cdecl" [ ] alien-callback ; + +[ 0 1 ] [ [ callback-1 ] infer dup effect-in swap effect-out ] unit-test + +[ t ] [ callback-1 alien? ] unit-test + +: callback_test_1 "void" { } "cdecl" alien-indirect ; + +[ ] [ callback-1 callback_test_1 ] unit-test + +: callback-2 "void" { } "cdecl" [ [ 5 throw ] ignore-errors ] alien-callback ; + +[ ] [ callback-2 callback_test_1 ] unit-test + +: callback-3 "void" { } "cdecl" [ 5 "x" set ] alien-callback ; + +[ t ] [ + namestack* + 3 "x" set callback-3 callback_test_1 + namestack* eq? +] unit-test + +[ 5 ] [ + [ + 3 "x" set callback-3 callback_test_1 "x" get + ] with-scope +] unit-test + +: callback-4 + "void" { } "cdecl" [ "Hello world" write ] alien-callback + gc ; + +[ "Hello world" ] [ + [ callback-4 callback_test_1 ] with-string-writer +] unit-test + +: callback-5 + "void" { } "cdecl" [ gc ] alien-callback ; + +[ "testing" ] [ + "testing" callback-5 callback_test_1 +] unit-test + +: callback-5a + "void" { } "cdecl" [ 8000000 f drop ] alien-callback ; + +! Hack; if we're on ARM, we probably don't have much RAM, so +! skip this test. +! cpu "arm" = [ +! [ "testing" ] [ +! "testing" callback-5a callback_test_1 +! ] unit-test +! ] unless + +: callback-6 + "void" { } "cdecl" [ [ continue ] callcc0 ] alien-callback ; + +[ 1 2 3 ] [ callback-6 callback_test_1 1 2 3 ] unit-test + +: callback-7 + "void" { } "cdecl" [ 1000 sleep ] alien-callback ; + +[ 1 2 3 ] [ callback-7 callback_test_1 1 2 3 ] unit-test + +[ f ] [ namespace global eq? ] unit-test + +: callback-8 + "void" { } "cdecl" [ + [ continue ] callcc0 + ] alien-callback ; + +[ ] [ callback-8 callback_test_1 ] unit-test + +: callback-9 + "int" { "int" "int" "int" } "cdecl" [ + + + 1+ + ] alien-callback ; + +FUNCTION: void int_ffi_test_36_point_5 ( ) ; + +[ ] [ int_ffi_test_36_point_5 ] unit-test + +FUNCTION: int ffi_test_37 ( void* func ) ; + +[ 1 ] [ callback-9 ffi_test_37 ] unit-test + +[ 7 ] [ callback-9 ffi_test_37 ] unit-test diff --git a/vm/ffi_test.c b/vm/ffi_test.c index b2cbf9b6b5..4293a6bbae 100755 --- a/vm/ffi_test.c +++ b/vm/ffi_test.c @@ -253,7 +253,7 @@ double ffi_test_36(struct test_struct_12 x) static int global_var; -void ffi_test_36_point_5(void) +void int_ffi_test_36_point_5(void) { printf("int_ffi_test_36_point_5\n"); global_var = 0; From b2e90f62c0c88ca915848463d86165dc4f26e8ed Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 15 Apr 2008 20:36:58 -0700 Subject: [PATCH 022/270] Modernize some code in the bunny demo --- extra/bunny/bunny.factor | 35 ++++++------- extra/bunny/outlined/outlined.factor | 16 +++--- extra/opengl/demo-support/demo-support.factor | 50 ++++++++++++------- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/extra/bunny/bunny.factor b/extra/bunny/bunny.factor index 43b9edcd00..6efa739677 100755 --- a/extra/bunny/bunny.factor +++ b/extra/bunny/bunny.factor @@ -4,7 +4,7 @@ opengl.glu shuffle http.client vectors namespaces ui.gadgets ui.gadgets.canvas ui.render ui splitting combinators tools.time system combinators.lib float-arrays continuations opengl.demo-support multiline ui.gestures bunny.fixed-pipeline -bunny.cel-shaded bunny.outlined bunny.model ; +bunny.cel-shaded bunny.outlined bunny.model accessors ; IN: bunny TUPLE: bunny-gadget model geom draw-seq draw-n ; @@ -17,34 +17,29 @@ TUPLE: bunny-gadget model geom draw-seq draw-n ; } bunny-gadget construct ; : bunny-gadget-draw ( gadget -- draw ) - { bunny-gadget-draw-n bunny-gadget-draw-seq } + { draw-n>> draw-seq>> } get-slots nth ; : bunny-gadget-next-draw ( gadget -- ) - dup { bunny-gadget-draw-seq bunny-gadget-draw-n } + dup { draw-seq>> draw-n>> } get-slots 1+ swap length mod - swap [ set-bunny-gadget-draw-n ] keep relayout-1 ; + >>draw-n relayout-1 ; M: bunny-gadget graft* ( gadget -- ) GL_DEPTH_TEST glEnable - dup bunny-gadget-model - over { - [ ] - [ ] - [ ] - } map-call-with [ ] subset - 0 - roll { - set-bunny-gadget-geom - set-bunny-gadget-draw-seq - set-bunny-gadget-draw-n - } set-slots ; + dup model>> >>geom + dup + [ ] + [ ] + [ ] tri 3array + [ ] subset >>draw-seq + 0 >>draw-n + drop ; M: bunny-gadget ungraft* ( gadget -- ) - { bunny-gadget-geom bunny-gadget-draw-seq } get-slots - [ [ dispose ] when* ] each - [ dispose ] when* ; + [ geom>> [ dispose ] when* ] + [ draw-seq>> [ [ dispose ] when* ] each ] bi ; M: bunny-gadget draw-gadget* ( gadget -- ) 0.15 0.15 0.15 1.0 glClearColor @@ -52,7 +47,7 @@ M: bunny-gadget draw-gadget* ( gadget -- ) dup demo-gadget-set-matrices GL_MODELVIEW glMatrixMode 0.02 -0.105 0.0 glTranslatef - { bunny-gadget-geom bunny-gadget-draw } get-slots + { geom>> bunny-gadget-draw } get-slots draw-bunny ; M: bunny-gadget pref-dim* ( gadget -- dim ) diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor index 6a2f54cceb..85202e4185 100755 --- a/extra/bunny/outlined/outlined.factor +++ b/extra/bunny/outlined/outlined.factor @@ -183,8 +183,7 @@ TUPLE: bunny-outlined dup bunny-outlined-gadget rect-dim over bunny-outlined-framebuffer-dim over = - [ 2drop ] - [ + [ 2drop ] [ swap dup dispose-framebuffer >r dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) swap dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) @@ -228,12 +227,11 @@ TUPLE: bunny-outlined } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] with-gl-program ; M: bunny-outlined draw-bunny - dup remake-framebuffer-if-needed - [ (pass1) ] keep (pass2) ; + [ remake-framebuffer-if-needed ] + [ (pass1) ] + [ (pass2) ] tri ; M: bunny-outlined dispose - { - [ bunny-outlined-pass1-program [ delete-gl-program ] when* ] - [ bunny-outlined-pass2-program [ delete-gl-program ] when* ] - [ dispose-framebuffer ] - } cleave ; + [ bunny-outlined-pass1-program [ delete-gl-program ] when* ] + [ bunny-outlined-pass2-program [ delete-gl-program ] when* ] + [ dispose-framebuffer ] tri diff --git a/extra/opengl/demo-support/demo-support.factor b/extra/opengl/demo-support/demo-support.factor index 84515305c8..524567b5bd 100755 --- a/extra/opengl/demo-support/demo-support.factor +++ b/extra/opengl/demo-support/demo-support.factor @@ -2,13 +2,9 @@ USING: arrays combinators.lib kernel math math.functions math.vectors namespaces opengl opengl.gl sequences ui ui.gadgets ui.gestures ui.render ; IN: opengl.demo-support -: NEAR-PLANE 1.0 64.0 / ; inline -: FAR-PLANE 4.0 ; inline : FOV 2.0 sqrt 1+ ; inline : MOUSE-MOTION-SCALE 0.5 ; inline -: MOUSE-DISTANCE-SCALE 1.0 64.0 / ; inline : KEY-ROTATE-STEP 1.0 ; inline -: KEY-DISTANCE-STEP 1.0 64.0 / ; inline : DIMS { 640 480 } ; inline : FOV-RATIO ( -- fov ) DIMS dup first2 min v/n ; @@ -21,6 +17,17 @@ TUPLE: demo-gadget yaw pitch distance ; demo-gadget construct-gadget [ { set-demo-gadget-yaw set-demo-gadget-pitch set-demo-gadget-distance } set-slots ] keep ; +GENERIC: far-plane ( gadget -- z ) +GENERIC: near-plane ( gadget -- z ) +GENERIC: distance-step ( gadget -- dz ) + +M: demo-gadget far-plane ( gadget -- z ) + drop 4.0 ; +M: demo-gadget near-plane ( gadget -- z ) + drop 1.0 64.0 / ; +M: demo-gadget distance-step ( gadget -- dz ) + drop 1.0 64.0 / ; + : yaw-demo-gadget ( yaw gadget -- ) [ [ demo-gadget-yaw + ] keep set-demo-gadget-yaw ] keep relayout-1 ; @@ -36,21 +43,26 @@ M: demo-gadget pref-dim* ( gadget -- dim ) : -+ ( x -- -x x ) dup neg swap ; -: demo-gadget-frustum ( -- -x x -y y near far ) - FOV-RATIO NEAR-PLANE FOV / v*n - first2 [ -+ ] bi@ NEAR-PLANE FAR-PLANE ; +: demo-gadget-frustum ( gadget -- -x x -y y near far ) + [ near-plane ] [ far-plane ] bi [ + drop FOV-RATIO swap FOV / v*n + first2 [ -+ ] bi@ + ] 2keep ; : demo-gadget-set-matrices ( gadget -- ) - GL_PROJECTION glMatrixMode - glLoadIdentity - demo-gadget-frustum glFrustum GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear - GL_MODELVIEW glMatrixMode - glLoadIdentity - [ >r 0.0 0.0 r> demo-gadget-distance neg glTranslatef ] - [ demo-gadget-pitch 1.0 0.0 0.0 glRotatef ] - [ demo-gadget-yaw 0.0 1.0 0.0 glRotatef ] - tri ; + [ + GL_PROJECTION glMatrixMode + glLoadIdentity + demo-gadget-frustum glFrustum + ] [ + GL_MODELVIEW glMatrixMode + glLoadIdentity + [ >r 0.0 0.0 r> demo-gadget-distance neg glTranslatef ] + [ demo-gadget-pitch 1.0 0.0 0.0 glRotatef ] + [ demo-gadget-yaw 0.0 1.0 0.0 glRotatef ] + tri + ] bi ; : reset-last-drag-rel ( -- ) { 0 0 } last-drag-loc set-global ; @@ -65,11 +77,11 @@ demo-gadget H{ { T{ key-down f f "RIGHT" } [ KEY-ROTATE-STEP swap yaw-demo-gadget ] } { T{ key-down f f "DOWN" } [ KEY-ROTATE-STEP neg swap pitch-demo-gadget ] } { T{ key-down f f "UP" } [ KEY-ROTATE-STEP swap pitch-demo-gadget ] } - { T{ key-down f f "=" } [ KEY-DISTANCE-STEP neg swap zoom-demo-gadget ] } - { T{ key-down f f "-" } [ KEY-DISTANCE-STEP swap zoom-demo-gadget ] } + { T{ key-down f f "=" } [ dup distance-step neg swap zoom-demo-gadget ] } + { T{ key-down f f "-" } [ dup distance-step swap zoom-demo-gadget ] } { T{ button-down f f 1 } [ drop reset-last-drag-rel ] } { T{ drag f 1 } [ drag-yaw-pitch rot [ pitch-demo-gadget ] keep yaw-demo-gadget ] } - { T{ mouse-scroll } [ scroll-direction get second MOUSE-DISTANCE-SCALE * swap zoom-demo-gadget ] } + { T{ mouse-scroll } [ scroll-direction get second over distance-step * swap zoom-demo-gadget ] } } set-gestures From 7a9f379944698ac8a67658b03f8cd907df84bbf2 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 15 Apr 2008 20:37:34 -0700 Subject: [PATCH 023/270] Add spheres demo --- extra/spheres/spheres.factor | 233 +++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 extra/spheres/spheres.factor diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor new file mode 100644 index 0000000000..d8ecb2da98 --- /dev/null +++ b/extra/spheres/spheres.factor @@ -0,0 +1,233 @@ +USING: kernel opengl.demo-support opengl.gl opengl.shaders opengl.framebuffers +opengl multiline ui.gadgets accessors sequences ui.render ui math +arrays.lib combinators ; +IN: spheres + +STRING: plane-vertex-shader +varying vec3 object_position; +void +main() +{ + object_position = gl_Vertex.xyz; + gl_Position = ftransform(); +} +; + +STRING: plane-fragment-shader +varying vec3 object_position; +void +main() +{ + float distance_factor = (gl_FragCoord.z * 0.5 + 0.5); + distance_factor = pow(distance_factor, 500.0)*0.5; + + gl_FragColor = fract((floor(0.125*object_position.x)+floor(0.125*object_position.z)) * 0.5) == 0.0 + ? vec4(1.0, 1.0 - distance_factor, 1.0 - distance_factor, 1.0) + : vec4(1.0, distance_factor, distance_factor, 1.0); +} +; + +STRING: sphere-vertex-shader +attribute vec3 center; +attribute float radius; +attribute vec4 surface_color; +varying float vradius; +varying vec3 sphere_position; +varying vec4 world_position, vcolor; + +void +main() +{ + world_position = gl_ModelViewMatrix * vec4(center, 1); + sphere_position = gl_Vertex.xyz; + + gl_Position = gl_ProjectionMatrix * (world_position + vec4(sphere_position * radius, 0)); + + vcolor = surface_color; + vradius = radius; +} +; + +STRING: sphere-fragment-shader +uniform vec3 light_position; +varying float vradius; +varying vec3 sphere_position; +varying vec4 world_position, vcolor; + +vec4 ambient = vec4(0.3, 0.2, 0.2, 1.0); +vec4 diffuse = vec4(0.7, 0.8, 0.8, 1.0); + +vec4 +light(vec3 point, vec3 normal) +{ + vec3 transformed_light_position = (gl_ModelViewMatrix * vec4(light_position, 1)).xyz; + vec3 direction = normalize(transformed_light_position - point); + float d = max(0.0, dot(normal, direction)); + + return ambient * vcolor + diffuse * vec4(d * vcolor.rgb, vcolor.a); +} + +void +main() +{ + float radius = length(sphere_position); + if(radius > 1.0) discard; + + vec3 surface = sphere_position + vec3(0.0, 0.0, sqrt(1.0 - radius*radius)); + vec4 world_surface = world_position + vec4(surface * vradius, 0); + vec4 transformed_surface = gl_ProjectionMatrix * world_surface; + + gl_FragDepth = (transformed_surface.z/transformed_surface.w + 1.0) * 0.5; + gl_FragColor = light(world_surface.xyz, surface); +} +; + +TUPLE: spheres-gadget + plane-program sphere-program + reflection-framebuffer reflection-depthbuffer + reflection-texture ; + +: ( -- gadget ) + 0.0 0.0 20.0 + { set-delegate } spheres-gadget construct ; + +M: spheres-gadget near-plane ( gadget -- z ) + drop 1.0 ; +M: spheres-gadget far-plane ( gadget -- z ) + drop 512.0 ; +M: spheres-gadget distance-step ( gadget -- dz ) + drop 0.5 ; + +: (make-reflection-texture) ( -- texture ) + gen-texture [ + GL_TEXTURE_CUBE_MAP swap glBindTexture + GL_TEXTURE_CUBE_MAP GL_TEXTURE_MAG_FILTER GL_LINEAR glTexParameteri + GL_TEXTURE_CUBE_MAP GL_TEXTURE_MIN_FILTER GL_LINEAR glTexParameteri + GL_TEXTURE_CUBE_MAP_POSITIVE_X + GL_TEXTURE_CUBE_MAP_POSITIVE_Y + GL_TEXTURE_CUBE_MAP_POSITIVE_Z + GL_TEXTURE_CUBE_MAP_NEGATIVE_X + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 6 narray + [ 0 GL_RGBA8 1024 1024 0 GL_RGBA GL_UNSIGNED_BYTE f glTexImage2D ] + each + ] keep ; + +: (make-reflection-depthbuffer) ( -- depthbuffer ) + gen-renderbuffer [ + GL_RENDERBUFFER_EXT swap glBindRenderbufferEXT + GL_RENDERBUFFER_EXT GL_DEPTH_COMPONENT32 1024 1024 glRenderbufferStorageEXT + ] keep ; + +: (make-reflection-framebuffer) ( depthbuffer -- framebuffer ) + gen-framebuffer dup [ + swap >r + GL_FRAMEBUFFER_EXT GL_DEPTH_ATTACHMENT_EXT GL_RENDERBUFFER_EXT r> + glFramebufferRenderbufferEXT + ] with-framebuffer ; + +M: spheres-gadget graft* ( gadget -- ) + plane-vertex-shader plane-fragment-shader + >>plane-program + sphere-vertex-shader sphere-fragment-shader + >>sphere-program + (make-reflection-texture) >>reflection-texture + (make-reflection-depthbuffer) [ >>reflection-depthbuffer ] keep + (make-reflection-framebuffer) >>reflection-framebuffer + drop ; + +M: spheres-gadget ungraft* ( gadget -- ) + { + [ reflection-framebuffer>> [ delete-framebuffer ] when* ] + [ reflection-depthbuffer>> [ delete-renderbuffer ] when* ] + [ reflection-texture>> [ delete-texture ] when* ] + [ sphere-program>> [ delete-gl-program ] when* ] + [ plane-program>> [ delete-gl-program ] when* ] + } cleave ; + +M: spheres-gadget pref-dim* ( gadget -- dim ) + drop { 640 480 } ; + +: (draw-sphere) ( program center radius surfacecolor -- ) + roll + [ [ "center" glGetAttribLocation swap first3 glVertexAttrib3f ] curry ] + [ [ "radius" glGetAttribLocation swap glVertexAttrib1f ] curry ] + [ [ "surface_color" glGetAttribLocation swap first4 glVertexAttrib4f ] curry ] + tri tri* + { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ; + +: sphere-scene ( gadget -- ) + GL_DEPTH_BUFFER_BIT GL_COLOR_BUFFER_BIT bitor + glClear + [ + sphere-program>> dup { + { "light_position" [ 0.0 0.0 100.0 glUniform3f ] } + } [ + [ { 0.0 0.0 0.0 } 4.0 { 1.0 1.0 0.0 1.0 } (draw-sphere) ] + [ { 7.0 0.0 0.0 } 1.0 { 1.0 0.0 0.0 1.0 } (draw-sphere) ] + [ { -7.0 0.0 0.0 } 1.0 { 0.0 1.0 0.0 1.0 } (draw-sphere) ] tri + ] with-gl-program + ] [ + plane-program>> { } [ + GL_QUADS [ + -1000.0 -30.0 1000.0 glVertex3f + -1000.0 -30.0 -1000.0 glVertex3f + 1000.0 -30.0 -1000.0 glVertex3f + 1000.0 -30.0 1000.0 glVertex3f + ] do-state + ] with-gl-program + ] bi ; + +: reflection-frustum ( gadget -- -x x -y y near far ) + [ near-plane ] [ far-plane ] bi [ + drop dup [ -+ ] bi@ + ] 2keep ; + +: (reflection-face) ( gadget face -- ) + swap reflection-texture>> >r >r + GL_FRAMEBUFFER_EXT + GL_COLOR_ATTACHMENT0_EXT + r> r> 0 glFramebufferTexture2DEXT ; + +M: spheres-gadget draw-gadget* ( gadget -- ) + GL_DEPTH_TEST glEnable + 0.15 0.15 1.0 1.0 glClearColor { + [ + GL_PROJECTION glMatrixMode + glLoadIdentity + reflection-frustum glFrustum + GL_MODELVIEW glMatrixMode + glLoadIdentity + glPushMatrix + ] + [ + dup reflection-framebuffer>> [ { + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z (reflection-face) ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_X (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_Z (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_X (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_Y (reflection-face) + glPopMatrix glPushMatrix + 90.0 1.0 0.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y (reflection-face) + glPopMatrix + -90.0 1.0 0.0 0.0 glRotatef ] + [ sphere-scene ] + } cleave ] with-framebuffer + ] + [ demo-gadget-set-matrices ] + [ sphere-scene ] + } cleave ; + +: spheres-window ( -- ) + [ "Spheres" open-window ] with-ui ; + +MAIN: spheres-window From b26eadc5ea12599ebe4ed3b2bb370ebe34b774dd Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 15 Apr 2008 20:39:12 -0700 Subject: [PATCH 024/270] Metadata for spheres vocab --- extra/spheres/authors.txt | 1 + extra/spheres/summary.txt | 1 + extra/spheres/tags.txt | 2 ++ 3 files changed, 4 insertions(+) create mode 100644 extra/spheres/authors.txt create mode 100644 extra/spheres/summary.txt create mode 100644 extra/spheres/tags.txt diff --git a/extra/spheres/authors.txt b/extra/spheres/authors.txt new file mode 100644 index 0000000000..f13c9c1e77 --- /dev/null +++ b/extra/spheres/authors.txt @@ -0,0 +1 @@ +Joe Groff diff --git a/extra/spheres/summary.txt b/extra/spheres/summary.txt new file mode 100644 index 0000000000..fd97091e33 --- /dev/null +++ b/extra/spheres/summary.txt @@ -0,0 +1 @@ +Draw pixel-perfect spheres using GLSL shaders \ No newline at end of file diff --git a/extra/spheres/tags.txt b/extra/spheres/tags.txt new file mode 100644 index 0000000000..2e6040bd16 --- /dev/null +++ b/extra/spheres/tags.txt @@ -0,0 +1,2 @@ +opengl +glsl From 60025d45c37e6b744852723b4cd5b0709defa394 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Wed, 16 Apr 2008 21:06:13 -0700 Subject: [PATCH 025/270] Add environment mapping to spheres demo. Modernize more code in bunny and demo-support --- extra/bunny/outlined/outlined.factor | 2 +- extra/opengl/demo-support/demo-support.factor | 23 ++- extra/spheres/spheres.factor | 151 ++++++++++++------ 3 files changed, 112 insertions(+), 64 deletions(-) diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor index 85202e4185..9c4e8b22a2 100755 --- a/extra/bunny/outlined/outlined.factor +++ b/extra/bunny/outlined/outlined.factor @@ -234,4 +234,4 @@ M: bunny-outlined draw-bunny M: bunny-outlined dispose [ bunny-outlined-pass1-program [ delete-gl-program ] when* ] [ bunny-outlined-pass2-program [ delete-gl-program ] when* ] - [ dispose-framebuffer ] tri + [ dispose-framebuffer ] tri ; diff --git a/extra/opengl/demo-support/demo-support.factor b/extra/opengl/demo-support/demo-support.factor index 524567b5bd..adc30e6f0f 100755 --- a/extra/opengl/demo-support/demo-support.factor +++ b/extra/opengl/demo-support/demo-support.factor @@ -1,13 +1,10 @@ USING: arrays combinators.lib kernel math math.functions math.vectors namespaces - opengl opengl.gl sequences ui ui.gadgets ui.gestures ui.render ; + opengl opengl.gl sequences ui ui.gadgets ui.gestures ui.render accessors ; IN: opengl.demo-support : FOV 2.0 sqrt 1+ ; inline : MOUSE-MOTION-SCALE 0.5 ; inline : KEY-ROTATE-STEP 1.0 ; inline -: DIMS { 640 480 } ; inline - -: FOV-RATIO ( -- fov ) DIMS dup first2 min v/n ; SYMBOL: last-drag-loc @@ -15,7 +12,7 @@ TUPLE: demo-gadget yaw pitch distance ; : ( yaw pitch distance -- gadget ) demo-gadget construct-gadget - [ { set-demo-gadget-yaw set-demo-gadget-pitch set-demo-gadget-distance } set-slots ] keep ; + [ { (>>yaw) (>>pitch) (>>distance) } set-slots ] keep ; GENERIC: far-plane ( gadget -- z ) GENERIC: near-plane ( gadget -- z ) @@ -28,6 +25,8 @@ M: demo-gadget near-plane ( gadget -- z ) M: demo-gadget distance-step ( gadget -- dz ) drop 1.0 64.0 / ; +: fov-ratio ( gadget -- fov ) dim>> dup first2 min v/n ; + : yaw-demo-gadget ( yaw gadget -- ) [ [ demo-gadget-yaw + ] keep set-demo-gadget-yaw ] keep relayout-1 ; @@ -38,16 +37,16 @@ M: demo-gadget distance-step ( gadget -- dz ) [ [ demo-gadget-distance + ] keep set-demo-gadget-distance ] keep relayout-1 ; M: demo-gadget pref-dim* ( gadget -- dim ) - drop DIMS ; + drop { 640 480 } ; : -+ ( x -- -x x ) dup neg swap ; : demo-gadget-frustum ( gadget -- -x x -y y near far ) - [ near-plane ] [ far-plane ] bi [ - drop FOV-RATIO swap FOV / v*n + [ near-plane ] [ far-plane ] [ fov-ratio ] tri [ + nip swap FOV / v*n first2 [ -+ ] bi@ - ] 2keep ; + ] 3keep drop ; : demo-gadget-set-matrices ( gadget -- ) GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear @@ -58,9 +57,9 @@ M: demo-gadget pref-dim* ( gadget -- dim ) ] [ GL_MODELVIEW glMatrixMode glLoadIdentity - [ >r 0.0 0.0 r> demo-gadget-distance neg glTranslatef ] - [ demo-gadget-pitch 1.0 0.0 0.0 glRotatef ] - [ demo-gadget-yaw 0.0 1.0 0.0 glRotatef ] + [ >r 0.0 0.0 r> distance>> neg glTranslatef ] + [ pitch>> 1.0 0.0 0.0 glRotatef ] + [ yaw>> 0.0 1.0 0.0 glRotatef ] tri ] bi ; diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor index d8ecb2da98..6f1a7c7508 100644 --- a/extra/spheres/spheres.factor +++ b/extra/spheres/spheres.factor @@ -1,6 +1,6 @@ USING: kernel opengl.demo-support opengl.gl opengl.shaders opengl.framebuffers opengl multiline ui.gadgets accessors sequences ui.render ui math -arrays.lib combinators ; +arrays arrays.lib combinators ; IN: spheres STRING: plane-vertex-shader @@ -48,17 +48,15 @@ main() } ; -STRING: sphere-fragment-shader +STRING: sphere-solid-color-fragment-shader uniform vec3 light_position; -varying float vradius; -varying vec3 sphere_position; -varying vec4 world_position, vcolor; +varying vec4 vcolor; -vec4 ambient = vec4(0.3, 0.2, 0.2, 1.0); -vec4 diffuse = vec4(0.7, 0.8, 0.8, 1.0); +const vec4 ambient = vec4(0.25, 0.2, 0.25, 1.0); +const vec4 diffuse = vec4(0.75, 0.8, 0.75, 1.0); vec4 -light(vec3 point, vec3 normal) +sphere_color(vec3 point, vec3 normal) { vec3 transformed_light_position = (gl_ModelViewMatrix * vec4(light_position, 1)).xyz; vec3 direction = normalize(transformed_light_position - point); @@ -66,6 +64,25 @@ light(vec3 point, vec3 normal) return ambient * vcolor + diffuse * vec4(d * vcolor.rgb, vcolor.a); } +; + +STRING: sphere-texture-fragment-shader +uniform samplerCube surface_texture; + +vec4 +sphere_color(vec3 point, vec3 normal) +{ + vec3 reflect = reflect(normalize(point), normal); + return textureCube(surface_texture, reflect * gl_NormalMatrix); +} +; + +STRING: sphere-main-fragment-shader +varying float vradius; +varying vec3 sphere_position; +varying vec4 world_position; + +vec4 sphere_color(vec3 point, vec3 normal); void main() @@ -78,12 +95,12 @@ main() vec4 transformed_surface = gl_ProjectionMatrix * world_surface; gl_FragDepth = (transformed_surface.z/transformed_surface.w + 1.0) * 0.5; - gl_FragColor = light(world_surface.xyz, surface); + gl_FragColor = sphere_color(world_surface.xyz, surface); } ; TUPLE: spheres-gadget - plane-program sphere-program + plane-program solid-sphere-program texture-sphere-program reflection-framebuffer reflection-depthbuffer reflection-texture ; @@ -98,6 +115,9 @@ M: spheres-gadget far-plane ( gadget -- z ) M: spheres-gadget distance-step ( gadget -- dz ) drop 0.5 ; +: (reflection-dim) ( -- w h ) + 1024 1024 ; + : (make-reflection-texture) ( -- texture ) gen-texture [ GL_TEXTURE_CUBE_MAP swap glBindTexture @@ -109,14 +129,14 @@ M: spheres-gadget distance-step ( gadget -- dz ) GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 6 narray - [ 0 GL_RGBA8 1024 1024 0 GL_RGBA GL_UNSIGNED_BYTE f glTexImage2D ] + [ 0 GL_RGBA8 (reflection-dim) 0 GL_RGBA GL_UNSIGNED_BYTE f glTexImage2D ] each ] keep ; : (make-reflection-depthbuffer) ( -- depthbuffer ) gen-renderbuffer [ GL_RENDERBUFFER_EXT swap glBindRenderbufferEXT - GL_RENDERBUFFER_EXT GL_DEPTH_COMPONENT32 1024 1024 glRenderbufferStorageEXT + GL_RENDERBUFFER_EXT GL_DEPTH_COMPONENT32 (reflection-dim) glRenderbufferStorageEXT ] keep ; : (make-reflection-framebuffer) ( depthbuffer -- framebuffer ) @@ -126,11 +146,23 @@ M: spheres-gadget distance-step ( gadget -- dz ) glFramebufferRenderbufferEXT ] with-framebuffer ; +: (plane-program) ( -- program ) + plane-vertex-shader plane-fragment-shader ; +: (solid-sphere-program) ( -- program ) + sphere-vertex-shader check-gl-shader + sphere-solid-color-fragment-shader check-gl-shader + sphere-main-fragment-shader check-gl-shader + 3array check-gl-program ; +: (texture-sphere-program) ( -- program ) + sphere-vertex-shader check-gl-shader + sphere-texture-fragment-shader check-gl-shader + sphere-main-fragment-shader check-gl-shader + 3array check-gl-program ; + M: spheres-gadget graft* ( gadget -- ) - plane-vertex-shader plane-fragment-shader - >>plane-program - sphere-vertex-shader sphere-fragment-shader - >>sphere-program + (plane-program) >>plane-program + (solid-sphere-program) >>solid-sphere-program + (texture-sphere-program) >>texture-sphere-program (make-reflection-texture) >>reflection-texture (make-reflection-depthbuffer) [ >>reflection-depthbuffer ] keep (make-reflection-framebuffer) >>reflection-framebuffer @@ -141,7 +173,8 @@ M: spheres-gadget ungraft* ( gadget -- ) [ reflection-framebuffer>> [ delete-framebuffer ] when* ] [ reflection-depthbuffer>> [ delete-renderbuffer ] when* ] [ reflection-texture>> [ delete-texture ] when* ] - [ sphere-program>> [ delete-gl-program ] when* ] + [ solid-sphere-program>> [ delete-gl-program ] when* ] + [ texture-sphere-program>> [ delete-gl-program ] when* ] [ plane-program>> [ delete-gl-program ] when* ] } cleave ; @@ -157,15 +190,19 @@ M: spheres-gadget pref-dim* ( gadget -- dim ) { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ; : sphere-scene ( gadget -- ) - GL_DEPTH_BUFFER_BIT GL_COLOR_BUFFER_BIT bitor - glClear + GL_DEPTH_BUFFER_BIT GL_COLOR_BUFFER_BIT bitor glClear [ - sphere-program>> dup { + solid-sphere-program>> dup { { "light_position" [ 0.0 0.0 100.0 glUniform3f ] } } [ - [ { 0.0 0.0 0.0 } 4.0 { 1.0 1.0 0.0 1.0 } (draw-sphere) ] - [ { 7.0 0.0 0.0 } 1.0 { 1.0 0.0 0.0 1.0 } (draw-sphere) ] - [ { -7.0 0.0 0.0 } 1.0 { 0.0 1.0 0.0 1.0 } (draw-sphere) ] tri + { + [ { 7.0 0.0 0.0 } 1.0 { 1.0 0.0 0.0 1.0 } (draw-sphere) ] + [ { -7.0 0.0 0.0 } 1.0 { 0.0 1.0 0.0 1.0 } (draw-sphere) ] + [ { 0.0 0.0 7.0 } 1.0 { 0.0 0.0 1.0 1.0 } (draw-sphere) ] + [ { 0.0 0.0 -7.0 } 1.0 { 1.0 1.0 0.0 1.0 } (draw-sphere) ] + [ { 0.0 7.0 0.0 } 1.0 { 1.0 0.0 1.0 1.0 } (draw-sphere) ] + [ { 0.0 -7.0 0.0 } 1.0 { 0.0 1.0 1.0 1.0 } (draw-sphere) ] + } cleave ] with-gl-program ] [ plane-program>> { } [ @@ -187,44 +224,56 @@ M: spheres-gadget pref-dim* ( gadget -- dim ) swap reflection-texture>> >r >r GL_FRAMEBUFFER_EXT GL_COLOR_ATTACHMENT0_EXT - r> r> 0 glFramebufferTexture2DEXT ; + r> r> 0 glFramebufferTexture2DEXT + check-framebuffer ; -M: spheres-gadget draw-gadget* ( gadget -- ) - GL_DEPTH_TEST glEnable - 0.15 0.15 1.0 1.0 glClearColor { +: (draw-reflection-texture) ( gadget -- ) + dup reflection-framebuffer>> [ { + [ drop 0 0 (reflection-dim) glViewport ] [ GL_PROJECTION glMatrixMode glLoadIdentity reflection-frustum glFrustum GL_MODELVIEW glMatrixMode glLoadIdentity - glPushMatrix - ] - [ - dup reflection-framebuffer>> [ { - [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z (reflection-face) ] - [ sphere-scene ] - [ GL_TEXTURE_CUBE_MAP_NEGATIVE_X (reflection-face) - 90.0 0.0 1.0 0.0 glRotatef ] - [ sphere-scene ] - [ GL_TEXTURE_CUBE_MAP_POSITIVE_Z (reflection-face) - 90.0 0.0 1.0 0.0 glRotatef ] - [ sphere-scene ] - [ GL_TEXTURE_CUBE_MAP_POSITIVE_X (reflection-face) - 90.0 0.0 1.0 0.0 glRotatef ] - [ sphere-scene ] - [ GL_TEXTURE_CUBE_MAP_POSITIVE_Y (reflection-face) - glPopMatrix glPushMatrix - 90.0 1.0 0.0 0.0 glRotatef ] - [ sphere-scene ] - [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y (reflection-face) - glPopMatrix - -90.0 1.0 0.0 0.0 glRotatef ] - [ sphere-scene ] - } cleave ] with-framebuffer + 180.0 0.0 0.0 1.0 glRotatef ] + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z (reflection-face) ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_X (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_Z (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef glPushMatrix ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_X (reflection-face) + 90.0 0.0 1.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y (reflection-face) + glPopMatrix glPushMatrix -90.0 1.0 0.0 0.0 glRotatef ] + [ sphere-scene ] + [ GL_TEXTURE_CUBE_MAP_POSITIVE_Y (reflection-face) + glPopMatrix 90.0 1.0 0.0 0.0 glRotatef ] + [ sphere-scene ] + [ dim>> 0 0 rot first2 glViewport ] + } cleave ] with-framebuffer ; + +M: spheres-gadget draw-gadget* ( gadget -- ) + GL_DEPTH_TEST glEnable + GL_SCISSOR_TEST glDisable + 0.15 0.15 1.0 1.0 glClearColor { + [ (draw-reflection-texture) ] [ demo-gadget-set-matrices ] [ sphere-scene ] + [ + { texture-sphere-program>> reflection-texture>> } get-slots + GL_TEXTURE_CUBE_MAP GL_TEXTURE0 bind-texture-unit + dup { + { "surface_texture" [ 0 glUniform1i ] } + } [ + { 0.0 0.0 0.0 } 4.0 { 1.0 0.0 0.0 1.0 } (draw-sphere) + ] with-gl-program + ] } cleave ; : spheres-window ( -- ) From 4823509dfd2c0b0ce153e6d8a497977e0fd7a86e Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Thu, 17 Apr 2008 22:39:25 -0500 Subject: [PATCH 026/270] Delegate changes for crossreferencing; removing mimic (not enough unit tests) --- extra/delegate/delegate-docs.factor | 19 +--- extra/delegate/delegate-tests.factor | 10 +-- extra/delegate/delegate.factor | 126 +++++++++++++-------------- 3 files changed, 67 insertions(+), 88 deletions(-) diff --git a/extra/delegate/delegate-docs.factor b/extra/delegate/delegate-docs.factor index f123c3a802..e6a2ad7bf4 100644 --- a/extra/delegate/delegate-docs.factor +++ b/extra/delegate/delegate-docs.factor @@ -24,30 +24,17 @@ HELP: CONSULT: { define-consult POSTPONE: CONSULT: } related-words -HELP: define-mimic -{ $values { "group" "a protocol, generic word or tuple class" } { "mimicker" "a class" } { "mimicked" "a class" } } -{ $description "For the generic words in the group, the given mimicker copies the methods of the mimicked. This only works for the methods that have already been defined when the word is called." } -{ $notes "Usually, " { $link POSTPONE: MIMIC: } " should be used instead. This is only for runtime use." } ; - -HELP: MIMIC: -{ $syntax "MIMIC: group mimicker mimicked" } -{ $values { "group" "a protocol, generic word or tuple class" } { "mimicker" "a class" } { "mimicked" "a class" } } -{ $description "For the generic words in the group, the given mimicker copies the methods of the mimicked. This only works for the methods that have already been defined when the syntax is used. Mimicking overwrites existing methods." } ; - HELP: group-words { $values { "group" "a group" } { "words" "an array of words" } } -{ $description "Given a protocol, generic word or tuple class, this returns the corresponding generic words that this group contains." } ; +{ $description "Given a protocol or tuple class, this returns the corresponding generic words that this group contains." } ; ARTICLE: { "delegate" "intro" } "Delegation module" -"This vocabulary defines methods for consultation and mimicry, independent of the current Factor object system; it is a replacement for Factor's builtin delegation system. Fundamental to the concept of generic word groups, which can be specific protocols, generic words or tuple slot accessors. Fundamentally, a group is a word which has a method for " { $link group-words } ". To define a group as a set of words, use" +"This vocabulary defines methods for consultation and mimicry, independent of the current Factor object system; it is a replacement for Factor's builtin delegation system. Fundamental to the concept of generic word groups, which can be specific protocols, generic words or tuple slot accessors. Fundamentally, a group is a word which has a method for " { $link group-words } ". One type of group is a tuple, which consists of the slot words. To define a group as a set of words, use" { $subsection POSTPONE: PROTOCOL: } { $subsection define-protocol } "One method of object extension which this vocabulary defines is consultation. This is slightly different from the current Factor concept of delegation, in that instead of delegating for all generic words not implemented, only generic words included in a specific group are consulted. Additionally, instead of using a single hard-coded delegate slot, you can specify any quotation to execute in order to retrieve who to consult. The literal syntax and defining word are" { $subsection POSTPONE: CONSULT: } -{ $subsection define-consult } -"Another object extension mechanism is mimicry. This is the copying of methods in a group from one class to another. For certain applications, this is more appropriate than delegation, as it avoids the slicing problem. It is inappropriate for tuple slots, however. The literal syntax and defining word are" -{ $subsection POSTPONE: MIMIC: } -{ $subsection define-mimic } ; +{ $subsection define-consult } ; IN: delegate ABOUT: { "delegate" "intro" } diff --git a/extra/delegate/delegate-tests.factor b/extra/delegate/delegate-tests.factor index 497a6c5120..7f633ed4a4 100644 --- a/extra/delegate/delegate-tests.factor +++ b/extra/delegate/delegate-tests.factor @@ -2,11 +2,6 @@ USING: delegate kernel arrays tools.test words math definitions compiler.units parser generic prettyprint io.streams.string ; IN: delegate.tests -DEFER: example -[ 1 ] [ \ example 1 "prop" set-word-prop \ example "prop" word-prop ] unit-test -[ ] [ \ example "prop" [ 1+ ] change-word-prop ] unit-test -[ 2 ] [ \ example "prop" word-prop ] unit-test - TUPLE: hello this that ; C: hello @@ -30,18 +25,17 @@ GENERIC: bing ( c -- d ) PROTOCOL: bee bing ; CONSULT: hello goodbye goodbye-those ; M: hello bing hello-test ; -MIMIC: bee goodbye hello [ 1 { t 1 0 } ] [ 1 0 [ foo ] [ bar ] bi ] unit-test [ { t 1 0 } ] [ 1 0 bing ] unit-test [ 1 ] [ 1 0 f foo ] unit-test [ { t 1 0 } ] [ 1 0 f bar ] unit-test -[ { f 1 0 } ] [ f 1 0 bing ] unit-test [ 3 ] [ 1 0 2 whoa ] unit-test [ 3 ] [ 1 0 f 2 whoa ] unit-test [ ] [ 10 [ "USE: delegate IN: delegate.tests CONSULT: baz goodbye goodbye-these ;" eval ] times ] unit-test -[ V{ goodbye } ] [ baz protocol-users ] unit-test +[ H{ { goodbye [ goodbye-these ] } } ] [ baz protocol-consult ] unit-test +[ H{ } ] [ bee protocol-consult ] unit-test [ "USING: delegate ;\nIN: delegate.tests\nPROTOCOL: baz foo bar { whoa 1 } ;\n" ] [ [ baz see ] with-string-writer ] unit-test diff --git a/extra/delegate/delegate.factor b/extra/delegate/delegate.factor index f8e238b7db..59b298c242 100755 --- a/extra/delegate/delegate.factor +++ b/extra/delegate/delegate.factor @@ -1,9 +1,44 @@ ! Copyright (C) 2007 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: parser generic kernel classes words slots assocs sequences arrays -vectors definitions prettyprint combinators.lib math ; +vectors definitions prettyprint combinators.lib math hashtables ; IN: delegate +: protocol-words ( protocol -- words ) + \ protocol-words word-prop ; + +: protocol-consult ( protocol -- consulters ) + \ protocol-consult word-prop ; + +GENERIC: group-words ( group -- words ) + +M: tuple-class group-words + "slot-names" word-prop [ + [ reader-word ] [ writer-word ] bi + 2array [ 0 2array ] map + ] map concat ; + +! Consultation + +: consult-method ( word class quot -- ) + [ drop swap first create-method ] + [ nip swap first2 swapd [ ndip ] 2curry swap suffix ] 3bi define ; + +: change-word-prop ( word prop quot -- ) + rot word-props swap change-at ; inline + +: register-protocol ( group class quot -- ) + rot \ protocol-consult [ swapd ?set-at ] change-word-prop ; + +: define-consult ( group class quot -- ) + [ register-protocol ] [ + rot group-words -rot + [ consult-method ] 2curry each + ] 3bi ; + +: CONSULT: + scan-word scan-word parse-definition define-consult ; parsing + ! Protocols : cross-2each ( seq1 seq2 quot -- ) @@ -12,36 +47,46 @@ IN: delegate : forget-all-methods ( classes words -- ) [ 2array forget ] cross-2each ; -: protocol-words ( protocol -- words ) - "protocol-words" word-prop ; - : protocol-users ( protocol -- users ) - "protocol-users" word-prop ; + protocol-consult keys ; -: users-and-words ( protocol -- users words ) - [ protocol-users ] [ protocol-words ] bi ; +: lost-words ( protocol wordlist -- lost-words ) + >r protocol-words r> seq-diff ; : forget-old-definitions ( protocol new-wordlist -- ) - >r users-and-words r> - seq-diff forget-all-methods ; + values [ drop protocol-users ] [ lost-words ] 2bi + forget-all-methods ; -: define-protocol ( protocol wordlist -- ) - ! 2dup forget-old-definitions - { } like "protocol-words" set-word-prop ; +: added-words ( protocol wordlist -- added-words ) + swap protocol-words seq-diff ; + +: add-new-definitions ( protocol wordlist -- ) + dupd added-words >r protocol-consult >alist r> + [ first2 consult-method ] cross-2each ; + +: initialize-protocol-props ( protocol wordlist -- ) + [ drop H{ } clone \ protocol-consult set-word-prop ] + [ { } like \ protocol-words set-word-prop ] 2bi ; : fill-in-depth ( wordlist -- wordlist' ) [ dup word? [ 0 2array ] when ] map ; +: define-protocol ( protocol wordlist -- ) + fill-in-depth + [ forget-old-definitions ] + [ add-new-definitions ] + [ initialize-protocol-props ] 2tri ; + : PROTOCOL: CREATE-WORD - dup define-symbol - dup f "inline" set-word-prop - parse-definition fill-in-depth define-protocol ; parsing + [ define-symbol ] + [ f "inline" set-word-prop ] + [ parse-definition define-protocol ] tri ; parsing PREDICATE: protocol < word protocol-words ; ! Subclass of symbol? M: protocol forget* - [ users-and-words forget-all-methods ] [ call-next-method ] bi ; + [ f forget-old-definitions ] [ call-next-method ] bi ; : show-words ( wordlist' -- wordlist ) [ dup second zero? [ first ] when ] map ; @@ -52,51 +97,4 @@ M: protocol definer drop \ PROTOCOL: \ ; ; M: protocol synopsis* word-synopsis ; ! Necessary? -GENERIC: group-words ( group -- words ) - -M: protocol group-words - "protocol-words" word-prop ; - -M: tuple-class group-words - "slot-names" word-prop [ - [ reader-word ] [ writer-word ] bi - 2array [ 0 2array ] map - ] map concat ; - -! Consultation - -: define-consult-method ( word class quot -- ) - [ drop swap first create-method ] - [ nip swap first2 swapd [ ndip ] 2curry swap suffix ] 3bi define ; - -: change-word-prop ( word prop quot -- ) - >r swap word-props r> change-at ; inline - -: add ( item vector/f -- vector ) - 2dup member? [ nip ] [ ?push ] if ; - -: use-protocol ( class group -- ) - "protocol-users" [ add ] change-word-prop ; - -: define-consult ( group class quot -- ) - swapd >r 2dup use-protocol group-words swap r> - [ define-consult-method ] 2curry each ; - -: CONSULT: - scan-word scan-word parse-definition define-consult ; parsing - -! Mimic still needs to be updated - -: mimic-method ( mimicker mimicked generic -- ) - tuck method - [ [ create-method-in ] [ word-def ] bi* define ] - [ 2drop ] if* ; - -: define-mimic ( group mimicker mimicked -- ) - [ drop swap use-protocol ] [ - rot group-words -rot - [ rot first mimic-method ] 2curry each - ] 3bi ; - -: MIMIC: - scan-word scan-word scan-word define-mimic ; parsing +M: protocol group-words protocol-words ; From f7bb19724d5402c3f983817a4d25b239f2f93d25 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 21 Apr 2008 16:55:27 -0500 Subject: [PATCH 027/270] fix semantic-db --- extra/semantic-db/semantic-db.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 2de0e1c67e..279ebcf922 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -76,7 +76,7 @@ arc "arc" create-node-table create-arc-table create-bootstrap-nodes create-bootstrap-arcs ; : param ( value key type -- param ) - swapd 3array ; + swapd ; : single-int-results ( bindings sql -- array ) f f [ do-bound-query ] with-disposal From 92d54db84f792a70054ac43c65ccf613397ed30d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 21 Apr 2008 17:02:12 -0500 Subject: [PATCH 028/270] add primary key to modifiers slot in sqlite table --- extra/db/sqlite/sqlite.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 2175b69f35..9ec8892add 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -163,9 +163,9 @@ M: sqlite-db bind% ( spec -- ) M: sqlite-db persistent-table ( -- assoc ) H{ - { +native-id+ { "integer primary key" "integer primary key" f } } + { +native-id+ { "integer primary key" "integer primary key" "primary key" } } { +assigned-id+ { f f "primary key" } } - { +random-id+ { "integer primary key" "integer primary key" f } } + { +random-id+ { "integer primary key" "integer primary key" "primary key" } } { INTEGER { "integer" "integer" "primary key" } } { BIG-INTEGER { "bigint" "bigint" } } { SIGNED-BIG-INTEGER { "bigint" "bigint" } } From b0c2ce40dc5bc1912b09c628ec97550c8ee748d7 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 21 Apr 2008 18:30:07 -0500 Subject: [PATCH 029/270] Fix load error --- extra/unix/linux/ifreq/ifreq.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/unix/linux/ifreq/ifreq.factor b/extra/unix/linux/ifreq/ifreq.factor index a6cb90ba06..d688153bd0 100755 --- a/extra/unix/linux/ifreq/ifreq.factor +++ b/extra/unix/linux/ifreq/ifreq.factor @@ -55,7 +55,7 @@ IN: unix.linux.ifreq : set-if-metric ( name metric -- ) "struct-ifreq" - rot string>char-alien over set-struct-ifreq-ifr-ifrn + rot ascii string>alien over set-struct-ifreq-ifr-ifrn swap over set-struct-ifreq-ifr-ifru AF_INET SOCK_DGRAM 0 socket SIOCSIFMETRIC rot ioctl drop ; \ No newline at end of file From 0ae1862805dbaf14ab2c4e3193a778f46c84c649 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 21 Apr 2008 18:31:16 -0500 Subject: [PATCH 030/270] Fix Windows bootstrap --- extra/windows/shell32/shell32.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/windows/shell32/shell32.factor b/extra/windows/shell32/shell32.factor index 81ecc35b5f..a9035eeeaf 100644 --- a/extra/windows/shell32/shell32.factor +++ b/extra/windows/shell32/shell32.factor @@ -1,4 +1,4 @@ -USING: alien alien.c-types alien.syntax combinators +USING: alien alien.c-types alien.strings alien.syntax combinators kernel windows windows.user32 windows.ole32 windows.com windows.com.syntax io.files ; IN: windows.shell32 From d03d2280851fa55bc596238e2b11336b6ce47445 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 21 Apr 2008 19:04:17 -0500 Subject: [PATCH 031/270] Third time lucky --- extra/windows/winsock/winsock.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/windows/winsock/winsock.factor b/extra/windows/winsock/winsock.factor index b9f8739a19..39d11b562b 100644 --- a/extra/windows/winsock/winsock.factor +++ b/extra/windows/winsock/winsock.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2006 Mackenzie Straight, Doug Coleman. -USING: alien alien.c-types alien.syntax arrays byte-arrays -kernel math sequences windows.types windows.kernel32 +USING: alien alien.c-types alien.strings alien.syntax arrays +byte-arrays kernel math sequences windows.types windows.kernel32 windows.errors structs windows math.bitfields ; IN: windows.winsock From 18fa6fd115d82ca751dfa5b6213266003bed8ccc Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 21 Apr 2008 19:20:18 -0500 Subject: [PATCH 032/270] Arggh --- extra/io/windows/nt/files/files.factor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/io/windows/nt/files/files.factor b/extra/io/windows/nt/files/files.factor index 32126443f4..c9f17147d3 100755 --- a/extra/io/windows/nt/files/files.factor +++ b/extra/io/windows/nt/files/files.factor @@ -1,9 +1,9 @@ USING: continuations destructors io.buffers io.files io.backend io.timeouts io.nonblocking io.windows io.windows.nt.backend kernel libc math threads windows windows.kernel32 system -alien.c-types alien.arrays sequences combinators combinators.lib -sequences.lib ascii splitting alien strings assocs namespaces -io.files.private accessors ; +alien.c-types alien.arrays alien.strings sequences combinators +combinators.lib sequences.lib ascii splitting alien strings +assocs namespaces io.files.private accessors ; IN: io.windows.nt.files M: winnt cwd From e68f0848c25b80344a0b2a2785953b461ca67a40 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 21 Apr 2008 20:18:39 -0700 Subject: [PATCH 033/270] Fix texture wrapping artifacts in sphere shader --- extra/spheres/spheres.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor index 6f1a7c7508..3975307280 100644 --- a/extra/spheres/spheres.factor +++ b/extra/spheres/spheres.factor @@ -123,6 +123,9 @@ M: spheres-gadget distance-step ( gadget -- dz ) GL_TEXTURE_CUBE_MAP swap glBindTexture GL_TEXTURE_CUBE_MAP GL_TEXTURE_MAG_FILTER GL_LINEAR glTexParameteri GL_TEXTURE_CUBE_MAP GL_TEXTURE_MIN_FILTER GL_LINEAR glTexParameteri + GL_TEXTURE_CUBE_MAP GL_TEXTURE_WRAP_S GL_CLAMP glTexParameteri + GL_TEXTURE_CUBE_MAP GL_TEXTURE_WRAP_T GL_CLAMP glTexParameteri + GL_TEXTURE_CUBE_MAP GL_TEXTURE_WRAP_R GL_CLAMP glTexParameteri GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Z From 07b91613e466f7fcea594dc1d46e9679cb161db8 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 21 Apr 2008 21:14:38 -0700 Subject: [PATCH 034/270] Modernize the bunny demo code --- extra/bunny/bunny.factor | 2 +- extra/bunny/cel-shaded/cel-shaded.factor | 9 +- .../fixed-pipeline/fixed-pipeline.factor | 2 +- extra/bunny/model/model.factor | 22 ++--- extra/bunny/outlined/outlined.factor | 82 ++++++++++--------- 5 files changed, 61 insertions(+), 56 deletions(-) diff --git a/extra/bunny/bunny.factor b/extra/bunny/bunny.factor index 6efa739677..5c2404ec84 100755 --- a/extra/bunny/bunny.factor +++ b/extra/bunny/bunny.factor @@ -13,7 +13,7 @@ TUPLE: bunny-gadget model geom draw-seq draw-n ; 0.0 0.0 0.375 maybe-download read-model { set-delegate - set-bunny-gadget-model + (>>model) } bunny-gadget construct ; : bunny-gadget-draw ( gadget -- draw ) diff --git a/extra/bunny/cel-shaded/cel-shaded.factor b/extra/bunny/cel-shaded/cel-shaded.factor index d4f0b7612d..08bea0515b 100644 --- a/extra/bunny/cel-shaded/cel-shaded.factor +++ b/extra/bunny/cel-shaded/cel-shaded.factor @@ -1,5 +1,5 @@ USING: arrays bunny.model continuations kernel multiline opengl opengl.shaders - opengl.capabilities opengl.gl sequences sequences.lib ; + opengl.capabilities opengl.gl sequences sequences.lib accessors ; IN: bunny.cel-shaded STRING: vertex-shader-source @@ -68,11 +68,12 @@ TUPLE: bunny-cel-shaded program ; : ( gadget -- draw ) drop cel-shading-supported? [ + bunny-cel-shaded new vertex-shader-source check-gl-shader cel-shaded-fragment-shader-lib-source check-gl-shader cel-shaded-fragment-shader-main-source check-gl-shader 3array check-gl-program - { set-bunny-cel-shaded-program } bunny-cel-shaded construct + >>program ] [ f ] if ; : (draw-cel-shaded-bunny) ( geom program -- ) @@ -85,8 +86,8 @@ TUPLE: bunny-cel-shaded program ; } [ bunny-geom ] with-gl-program ; M: bunny-cel-shaded draw-bunny - bunny-cel-shaded-program (draw-cel-shaded-bunny) ; + program>> (draw-cel-shaded-bunny) ; M: bunny-cel-shaded dispose - bunny-cel-shaded-program delete-gl-program ; + program>> delete-gl-program ; diff --git a/extra/bunny/fixed-pipeline/fixed-pipeline.factor b/extra/bunny/fixed-pipeline/fixed-pipeline.factor index f3fb68e515..bf0fc45f0f 100644 --- a/extra/bunny/fixed-pipeline/fixed-pipeline.factor +++ b/extra/bunny/fixed-pipeline/fixed-pipeline.factor @@ -6,7 +6,7 @@ TUPLE: bunny-fixed-pipeline ; : ( gadget -- draw ) drop - { } bunny-fixed-pipeline construct ; + bunny-fixed-pipeline new ; M: bunny-fixed-pipeline draw-bunny drop diff --git a/extra/bunny/model/model.factor b/extra/bunny/model/model.factor index 897a30c417..9598b8b03b 100755 --- a/extra/bunny/model/model.factor +++ b/extra/bunny/model/model.factor @@ -2,7 +2,7 @@ USING: alien alien.c-types arrays sequences math math.vectors math.matrices math.parser io io.files kernel opengl opengl.gl opengl.glu io.encodings.ascii opengl.capabilities shuffle http.client vectors splitting tools.time system combinators -float-arrays continuations namespaces sequences.lib ; +float-arrays continuations namespaces sequences.lib accessors ; IN: bunny.model : numbers ( str -- seq ) @@ -85,24 +85,24 @@ M: bunny-dlist bunny-geom bunny-dlist-list glCallList ; M: bunny-buffers bunny-geom - dup { - bunny-buffers-array - bunny-buffers-element-array - } get-slots [ + dup { array>> element-array>> } get-slots [ { GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [ GL_DOUBLE 0 0 buffer-offset glNormalPointer - dup bunny-buffers-nv "double" heap-size * buffer-offset - 3 GL_DOUBLE 0 roll glVertexPointer - bunny-buffers-ni - GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements + [ + nv>> "double" heap-size * buffer-offset + 3 GL_DOUBLE 0 roll glVertexPointer + ] [ + ni>> + GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements + ] bi ] all-enabled-client-state ] with-array-element-buffers ; M: bunny-dlist dispose - bunny-dlist-list delete-dlist ; + list>> delete-dlist ; M: bunny-buffers dispose - { bunny-buffers-array bunny-buffers-element-array } get-slots + { array>> element-array>> } get-slots delete-gl-buffer delete-gl-buffer ; : ( model -- geom ) diff --git a/extra/bunny/outlined/outlined.factor b/extra/bunny/outlined/outlined.factor index 9c4e8b22a2..fef57d95d2 100755 --- a/extra/bunny/outlined/outlined.factor +++ b/extra/bunny/outlined/outlined.factor @@ -1,6 +1,7 @@ USING: arrays bunny.model bunny.cel-shaded continuations kernel math multiline opengl opengl.shaders opengl.framebuffers -opengl.gl opengl.capabilities sequences ui.gadgets combinators ; +opengl.gl opengl.capabilities sequences ui.gadgets combinators +accessors ; IN: bunny.outlined STRING: outlined-pass1-fragment-shader-main-source @@ -139,9 +140,9 @@ TUPLE: bunny-outlined : ( gadget -- draw ) outlining-supported? [ pass1-program pass2-program { - set-bunny-outlined-gadget - set-bunny-outlined-pass1-program - set-bunny-outlined-pass2-program + (>>gadget) + (>>pass1-program) + (>>pass2-program) } bunny-outlined construct ] [ drop f ] if ; @@ -169,34 +170,33 @@ TUPLE: bunny-outlined ] with-framebuffer ; : dispose-framebuffer ( draw -- ) - dup bunny-outlined-framebuffer-dim [ + dup framebuffer-dim>> [ { - [ bunny-outlined-framebuffer [ delete-framebuffer ] when* ] - [ bunny-outlined-color-texture [ delete-texture ] when* ] - [ bunny-outlined-normal-texture [ delete-texture ] when* ] - [ bunny-outlined-depth-texture [ delete-texture ] when* ] - [ f swap set-bunny-outlined-framebuffer-dim ] + [ framebuffer>> [ delete-framebuffer ] when* ] + [ color-texture>> [ delete-texture ] when* ] + [ normal-texture>> [ delete-texture ] when* ] + [ depth-texture>> [ delete-texture ] when* ] + [ f >>framebuffer-dim drop ] } cleave ] [ drop ] if ; : remake-framebuffer-if-needed ( draw -- ) - dup bunny-outlined-gadget rect-dim - over bunny-outlined-framebuffer-dim + dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi over = [ 2drop ] [ - swap dup dispose-framebuffer >r - dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) - swap dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) - swap dup GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture) - swap >r - [ (make-framebuffer) ] 3keep - r> r> { - set-bunny-outlined-framebuffer - set-bunny-outlined-color-texture - set-bunny-outlined-normal-texture - set-bunny-outlined-depth-texture - set-bunny-outlined-framebuffer-dim - } set-slots + [ dup dispose-framebuffer dup ] dip { + [ + GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) + [ >>color-texture drop ] keep + ] [ + GL_RGBA16F_ARB GL_RGBA (framebuffer-texture) + [ >>normal-texture drop ] keep + ] [ + GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture) + [ >>depth-texture drop ] keep + ] + } 2cleave + (make-framebuffer) >>framebuffer drop ] if ; : clear-framebuffer ( -- ) @@ -208,23 +208,27 @@ TUPLE: bunny-outlined GL_COLOR_BUFFER_BIT glClear ; : (pass1) ( geom draw -- ) - dup bunny-outlined-framebuffer [ + dup framebuffer>> [ clear-framebuffer { GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers - bunny-outlined-pass1-program (draw-cel-shaded-bunny) + pass1-program>> (draw-cel-shaded-bunny) ] with-framebuffer ; : (pass2) ( draw -- ) - init-matrices - dup bunny-outlined-color-texture GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit - dup bunny-outlined-normal-texture GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit - dup bunny-outlined-depth-texture GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit - bunny-outlined-pass2-program { - { "colormap" [ 0 glUniform1i ] } - { "normalmap" [ 1 glUniform1i ] } - { "depthmap" [ 2 glUniform1i ] } - { "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] } - } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] with-gl-program ; + init-matrices { + [ color-texture>> GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit ] + [ normal-texture>> GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit ] + [ depth-texture>> GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit ] + [ + pass2-program>> { + { "colormap" [ 0 glUniform1i ] } + { "normalmap" [ 1 glUniform1i ] } + { "depthmap" [ 2 glUniform1i ] } + { "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] } + } [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] + with-gl-program + ] + } cleave ; M: bunny-outlined draw-bunny [ remake-framebuffer-if-needed ] @@ -232,6 +236,6 @@ M: bunny-outlined draw-bunny [ (pass2) ] tri ; M: bunny-outlined dispose - [ bunny-outlined-pass1-program [ delete-gl-program ] when* ] - [ bunny-outlined-pass2-program [ delete-gl-program ] when* ] + [ pass1-program>> [ delete-gl-program ] when* ] + [ pass2-program>> [ delete-gl-program ] when* ] [ dispose-framebuffer ] tri ; From 03c4b6ee854eed4e60782a395d05e4ba950094fd Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 21 Apr 2008 21:50:35 -0700 Subject: [PATCH 035/270] Minor adjustments to spheres demo --- extra/spheres/spheres.factor | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/extra/spheres/spheres.factor b/extra/spheres/spheres.factor index 3975307280..9d06987bcd 100644 --- a/extra/spheres/spheres.factor +++ b/extra/spheres/spheres.factor @@ -105,7 +105,7 @@ TUPLE: spheres-gadget reflection-texture ; : ( -- gadget ) - 0.0 0.0 20.0 + 20.0 10.0 20.0 { set-delegate } spheres-gadget construct ; M: spheres-gadget near-plane ( gadget -- z ) @@ -116,7 +116,7 @@ M: spheres-gadget distance-step ( gadget -- dz ) drop 0.5 ; : (reflection-dim) ( -- w h ) - 1024 1024 ; + 512 512 ; : (make-reflection-texture) ( -- texture ) gen-texture [ @@ -268,10 +268,9 @@ M: spheres-gadget draw-gadget* ( gadget -- ) [ (draw-reflection-texture) ] [ demo-gadget-set-matrices ] [ sphere-scene ] + [ reflection-texture>> GL_TEXTURE_CUBE_MAP GL_TEXTURE0 bind-texture-unit ] [ - { texture-sphere-program>> reflection-texture>> } get-slots - GL_TEXTURE_CUBE_MAP GL_TEXTURE0 bind-texture-unit - dup { + texture-sphere-program>> dup { { "surface_texture" [ 0 glUniform1i ] } } [ { 0.0 0.0 0.0 } 4.0 { 1.0 0.0 0.0 1.0 } (draw-sphere) From 757115bc6449c97abe3d5f9020a4625c8f04a226 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Mon, 21 Apr 2008 23:39:54 -0700 Subject: [PATCH 036/270] Update implementation of sigma to use compose --- extra/sequences/lib/lib.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index 62cd0adce1..b186ee7777 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -52,7 +52,7 @@ MACRO: firstn ( n -- ) ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : sigma ( seq quot -- n ) - [ rot slip + ] curry 0 swap reduce ; inline + [ + ] compose 0 swap reduce ; inline : count ( seq quot -- n ) [ 1 0 ? ] compose sigma ; inline From 4fdfb97a4db4c7cc3416603ba7ad42c05c5625c3 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Mon, 21 Apr 2008 23:40:13 -0700 Subject: [PATCH 037/270] Add project-euler.190 --- extra/project-euler/190/190.factor | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 extra/project-euler/190/190.factor diff --git a/extra/project-euler/190/190.factor b/extra/project-euler/190/190.factor new file mode 100644 index 0000000000..6fc15c9f30 --- /dev/null +++ b/extra/project-euler/190/190.factor @@ -0,0 +1,48 @@ +! Copyright (c) 2008 Eric Mertens +! See http://factorcode.org/license.txt for BSD license. +USING: kernel sequences sequences.lib math math.functions math.ranges locals ; +IN: project-euler.190 + +! PROBLEM +! ------- + +! http://projecteuler.net/index.php?section=problems&id=190 + +! Let Sm = (x1, x2, ... , xm) be the m-tuple of positive real numbers +! with x1 + x2 + ... + xm = m for which Pm = x1 * x22 * ... * xmm is +! maximised. + +! For example, it can be verified that [P10] = 4112 ([ ] is the integer +! part function). + +! Find Σ[Pm] for 2 ≤ m ≤ 15. + +! SOLUTION +! -------- + +! Pm = x1 * x2^2 * x3^3 * ... * xm^m +! fm = x1 + x2 + x3 + ... + xm - m = 0 +! Gm === Pm - L * fm +! dG/dx_i = 0 = i * Pm / xi - L +! xi = i * Pm / L + +! Sum(i=1 to m) xi = m +! Sum(i=1 to m) i * Pm / L = m +! Pm / L * Sum(i=1 to m) i = m +! Pm / L * m*(m+1)/2 = m +! Pm / L = 2 / (m+1) + +! xi = i * (2 / (m+1)) = 2*i/(m+1) + + + +:: P_m ( m -- P_m ) + m [1,b] [| i | 2 i * m 1+ / i ^ ] PI ; + +: euler190 ( -- n ) + 2 15 [a,b] [ P_m truncate ] sigma ; From 206609242e707b005f44a9c6cd83c88c4907835e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 14:37:26 -0500 Subject: [PATCH 038/270] Add support for chunked encoding, and set connection: close on http requests --- extra/http/client/client.factor | 39 ++++++++++++++++++++++++++------- extra/http/http.factor | 19 ++++++++-------- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/extra/http/client/client.factor b/extra/http/client/client.factor index e4bbf0279f..1c42b174d4 100755 --- a/extra/http/client/client.factor +++ b/extra/http/client/client.factor @@ -3,7 +3,7 @@ USING: assocs http kernel math math.parser namespaces sequences io io.sockets io.streams.string io.files io.timeouts strings splitting calendar continuations accessors vectors -io.encodings.8-bit io.encodings.binary fry ; +io.encodings.8-bit io.encodings.binary fry debugger ; IN: http.client DEFER: http-request @@ -61,20 +61,43 @@ PRIVATE> ] close-on-error ] with-variable ; +: read-chunks ( -- ) + readln ";" split1 drop hex> + dup { f 0 } member? [ drop ] [ read % read-chunks ] if ; + +: do-chunked-encoding ( response stream -- response stream/string ) + over "transfer-encoding" header "chunked" = [ + [ [ read-chunks ] "" make ] with-stream + ] when ; + : ( url -- request ) request-with-url "GET" >>method ; -: http-get-stream ( url -- response stream ) - http-request ; +: string-or-contents ( stream/string -- string ) + dup string? [ contents ] unless ; + +: http-get-stream ( url -- response stream/string ) + http-request do-chunked-encoding ; : success? ( code -- ? ) 200 = ; -: check-response ( response -- ) - code>> success? - [ "HTTP download failed" throw ] unless ; +ERROR: download-failed response body ; + +M: download-failed error. + "HTTP download failed:" print nl + [ + response>> + write-response-code + write-response-message nl + drop + ] + [ body>> write ] bi ; + +: check-response ( response string -- string ) + over code>> success? [ nip ] [ download-failed ] if ; : http-get ( url -- string ) - http-get-stream contents swap check-response ; + http-get-stream string-or-contents check-response ; : download-name ( url -- name ) file-name "?" split1 drop "/" ?tail drop ; @@ -95,4 +118,4 @@ PRIVATE> swap >>post-data-type ; : http-post ( content-type content url -- response string ) - http-request contents ; + http-request do-chunked-encoding string-or-contents ; diff --git a/extra/http/http.factor b/extra/http/http.factor index 9e31855e53..926336cae1 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -175,13 +175,17 @@ post-data post-data-type cookies ; +: set-header ( request/response value key -- request/response ) + pick header>> set-at ; + : request new "1.1" >>version http-port >>port H{ } clone >>header H{ } clone >>query - V{ } clone >>cookies ; + V{ } clone >>cookies + "close" "connection" set-header ; : query-param ( request key -- value ) swap query>> at ; @@ -330,9 +334,6 @@ SYMBOL: max-post-request tri ] with-string-writer ; -: set-header ( request/response value key -- request/response ) - pick header>> set-at ; - GENERIC: write-response ( response -- ) GENERIC: write-full-response ( request response -- ) @@ -347,11 +348,11 @@ body ; : response new - "1.1" >>version - H{ } clone >>header - "close" "connection" set-header - now timestamp>http-string "date" set-header - V{ } clone >>cookies ; + "1.1" >>version + H{ } clone >>header + "close" "connection" set-header + now timestamp>http-string "date" set-header + V{ } clone >>cookies ; : read-response-version " \t" read-until From cdb31b48139231121ada8c4a2535d63ec92383f8 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 15:37:49 -0500 Subject: [PATCH 039/270] Fix host: header in http.client and add redirection limit --- extra/http/client/client-tests.factor | 8 +++---- extra/http/client/client.factor | 30 +++++++++++++++++++-------- extra/http/http-tests.factor | 10 +++++++-- extra/http/http.factor | 12 ++++++++--- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/extra/http/client/client-tests.factor b/extra/http/client/client-tests.factor index 0f684f782a..1d947b99e5 100755 --- a/extra/http/client/client-tests.factor +++ b/extra/http/client/client-tests.factor @@ -6,9 +6,9 @@ tuple-syntax namespaces ; [ "/" "localhost" 8888 ] [ "http://localhost:8888" parse-url ] unit-test [ "foo.txt" ] [ "http://www.paulgraham.com/foo.txt" download-name ] unit-test -[ "foo.txt" ] [ "http://www.arcsucks.com/foo.txt?xxx" download-name ] unit-test -[ "foo.txt" ] [ "http://www.arcsucks.com/foo.txt/" download-name ] unit-test -[ "www.arcsucks.com" ] [ "http://www.arcsucks.com////" download-name ] unit-test +[ "foo.txt" ] [ "http://www.arc.com/foo.txt?xxx" download-name ] unit-test +[ "foo.txt" ] [ "http://www.arc.com/foo.txt/" download-name ] unit-test +[ "www.arc.com" ] [ "http://www.arc.com////" download-name ] unit-test [ TUPLE{ request @@ -18,7 +18,7 @@ tuple-syntax namespaces ; port: 80 version: "1.1" cookies: V{ } - header: H{ } + header: H{ { "connection" "close" } } } ] [ [ diff --git a/extra/http/client/client.factor b/extra/http/client/client.factor index 1c42b174d4..ac5d220a52 100755 --- a/extra/http/client/client.factor +++ b/extra/http/client/client.factor @@ -3,9 +3,17 @@ USING: assocs http kernel math math.parser namespaces sequences io io.sockets io.streams.string io.files io.timeouts strings splitting calendar continuations accessors vectors -io.encodings.8-bit io.encodings.binary fry debugger ; +io.encodings.8-bit io.encodings.binary fry debugger inspector ; IN: http.client +: max-redirects 10 ; + +ERROR: too-many-redirects ; + +M: too-many-redirects summary + drop + [ "Redirection limit of " % max-redirects # " exceeded" % ] "" make ; + DEFER: http-request > "location" swap at - dup "http://" head? [ - absolute-redirect + redirects inc + redirects get max-redirects < [ + header>> "location" swap at + dup "http://" head? [ + absolute-redirect + ] [ + relative-redirect + ] if "GET" >>method http-request ] [ - relative-redirect - ] if "GET" >>method http-request + too-many-redirects + ] if ] [ stdio get ] if ; -: request-addr ( request -- addr ) - dup host>> swap port>> ; - : close-on-error ( stream quot -- ) '[ , with-stream* ] [ ] pick '[ , dispose ] cleanup ; inline diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index d1ffce721d..9302045624 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -143,6 +143,9 @@ io.encodings.ascii ; "extra/http/test" resource-path >>default "nested" add-responder + + [ "redirect-loop" f ] >>display + "redirect-loop" add-responder main-responder set [ 1237 httpd ] "HTTPD test" spawn drop @@ -160,10 +163,13 @@ io.encodings.ascii ; "GET nested HTTP/1.0\r\n" write flush "\r\n" write flush readln drop - read-header USE: prettyprint - ] with-stream dup . "location" swap at "/" head? + read-header + ] with-stream "location" swap at "/" head? ] unit-test +[ "http://localhost:1237/redirect-loop" http-get ] +[ too-many-redirects? ] must-fail-with + [ "Goodbye" ] [ "http://localhost:1237/quit" http-get ] unit-test diff --git a/extra/http/http.factor b/extra/http/http.factor index 926336cae1..5e90962b27 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: fry hashtables io io.streams.string kernel math sets namespaces math.parser assocs sequences strings splitting ascii -io.encodings.utf8 io.encodings.string namespaces unicode.case -combinators vectors sorting accessors calendar +io.encodings.utf8 io.encodings.string io.sockets namespaces +unicode.case combinators vectors sorting accessors calendar calendar.format quotations arrays combinators.lib byte-arrays ; IN: http @@ -299,9 +299,15 @@ SYMBOL: max-post-request "application/x-www-form-urlencoded" >>post-data-type ] if ; +: request-addr ( request -- addr ) + [ host>> ] [ port>> ] bi ; + +: request-host ( request -- string ) + [ host>> ] [ drop ":" ] [ port>> number>string ] tri 3append ; + : write-request-header ( request -- request ) dup header>> >hashtable - over host>> [ "host" pick set-at ] when* + over host>> [ over request-host "host" pick set-at ] when over post-data>> [ length "content-length" pick set-at ] when* over post-data-type>> [ "content-type" pick set-at ] when* over cookies>> f like [ unparse-cookies "cookie" pick set-at ] when* From f1113b7c2a1136fb81ab6e2c3be64430d5daed74 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 16:29:10 -0500 Subject: [PATCH 040/270] Fix case bug --- core/combinators/combinators.factor | 2 +- core/optimizer/known-words/known-words.factor | 3 ++- core/optimizer/optimizer-tests.factor | 17 ++++++++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/combinators/combinators.factor b/core/combinators/combinators.factor index e3d0f88680..da98a78736 100755 --- a/core/combinators/combinators.factor +++ b/core/combinators/combinators.factor @@ -150,7 +150,7 @@ M: hashtable hashcode* drop ] [ dup length 4 <= - over keys [ word? ] contains? or + over keys [ [ word? ] [ wrapper? ] bi or ] contains? or [ linear-case-quot ] [ diff --git a/core/optimizer/known-words/known-words.factor b/core/optimizer/known-words/known-words.factor index 91d0c1c0de..6e1aacff44 100755 --- a/core/optimizer/known-words/known-words.factor +++ b/core/optimizer/known-words/known-words.factor @@ -60,7 +60,8 @@ sequences.private combinators ; [ value-literal sequence? ] [ drop f ] if ; : member-quot ( seq -- newquot ) - [ [ t ] ] { } map>assoc [ drop f ] suffix [ nip case ] curry ; + [ literalize [ t ] ] { } map>assoc + [ drop f ] suffix [ nip case ] curry ; : expand-member ( #call -- ) dup node-in-d peek value-literal member-quot f splice-quot ; diff --git a/core/optimizer/optimizer-tests.factor b/core/optimizer/optimizer-tests.factor index 14dcd62c61..6f4ae2c1d5 100755 --- a/core/optimizer/optimizer-tests.factor +++ b/core/optimizer/optimizer-tests.factor @@ -1,9 +1,9 @@ USING: arrays compiler.units generic hashtables inference kernel -kernel.private math optimizer prettyprint sequences sbufs -strings tools.test vectors words sequences.private quotations -optimizer.backend classes classes.algebra inference.dataflow -classes.tuple.private continuations growable optimizer.inlining -namespaces hints ; +kernel.private math optimizer generator prettyprint sequences +sbufs strings tools.test vectors words sequences.private +quotations optimizer.backend classes classes.algebra +inference.dataflow classes.tuple.private continuations growable +optimizer.inlining namespaces hints ; IN: optimizer.tests [ H{ { 1 5 } { 3 4 } { 2 5 } } ] [ @@ -349,3 +349,10 @@ USE: sequences.private 1 2 3.0 3 counter-example ; [ 2 4 6.0 0 ] [ counter-example' ] unit-test + +: member-test { + - * / /i } member? ; + +\ member-test must-infer +[ ] [ \ member-test word-dataflow optimize 2drop ] unit-test +[ t ] [ \ + member-test ] unit-test +[ f ] [ \ append member-test ] unit-test From decdaf1e32f94a7830b90ae1b5a39c0910ea9a12 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 16:29:20 -0500 Subject: [PATCH 041/270] Recursive fry --- extra/fry/fry-tests.factor | 4 ++++ extra/fry/fry.factor | 39 +++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/extra/fry/fry-tests.factor b/extra/fry/fry-tests.factor index 4d2c9fe1c8..7586e254b2 100755 --- a/extra/fry/fry-tests.factor +++ b/extra/fry/fry-tests.factor @@ -44,3 +44,7 @@ sequences ; : funny-dip '[ @ _ ] call ; inline [ "hi" 3 ] [ "h" "i" 3 [ append ] funny-dip ] unit-test + +[ { 1 2 3 } ] [ + 3 1 '[ , [ , + ] map ] call +] unit-test diff --git a/extra/fry/fry.factor b/extra/fry/fry.factor index 6c20aac7f2..7621af6899 100755 --- a/extra/fry/fry.factor +++ b/extra/fry/fry.factor @@ -9,41 +9,54 @@ IN: fry : @ "Only valid inside a fry" throw ; : _ "Only valid inside a fry" throw ; -DEFER: (fry) +DEFER: (shallow-fry) -: ((fry)) ( accum quot adder -- result ) - >r [ ] swap (fry) r> +: ((shallow-fry)) ( accum quot adder -- result ) + >r [ ] swap (shallow-fry) r> append swap dup empty? [ drop ] [ [ swap compose ] curry append ] if ; inline -: (fry) ( accum quot -- result ) +: (shallow-fry) ( accum quot -- result ) dup empty? [ drop 1quotation ] [ unclip { - { \ , [ [ curry ] ((fry)) ] } - { \ @ [ [ compose ] ((fry)) ] } + { \ , [ [ curry ] ((shallow-fry)) ] } + { \ @ [ [ compose ] ((shallow-fry)) ] } ! to avoid confusion, remove if fry goes core - { \ namespaces:, [ [ curry ] ((fry)) ] } + { \ namespaces:, [ [ curry ] ((shallow-fry)) ] } - [ swap >r suffix r> (fry) ] + [ swap >r suffix r> (shallow-fry) ] } case ] if ; -: trivial-fry ( quot -- quot' ) [ ] swap (fry) ; +: shallow-fry ( quot -- quot' ) [ ] swap (shallow-fry) ; -: fry ( quot -- quot' ) +: deep-fry ( quot -- quot' ) { _ } last-split1 [ [ - trivial-fry % + shallow-fry % [ >r ] % - fry % + deep-fry % [ [ dip ] curry r> compose ] % ] [ ] make ] [ - trivial-fry + shallow-fry ] if* ; +: fry ( quot -- quot' ) + [ + [ + dup callable? [ + [ + [ { , namespaces:, @ } member? ] subset length + \ , % + ] + [ deep-fry % ] bi + ] [ namespaces:, ] if + ] each + ] [ ] make deep-fry ; + : '[ \ ] parse-until fry over push-all ; parsing From ec54529923a977a3a5b2b4b9649d12d9eeadde58 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 22 Apr 2008 18:06:50 -0500 Subject: [PATCH 042/270] use sqlite_prepare instead of sqlite_prepare_v2 --- extra/db/sqlite/ffi/ffi.factor | 1 + extra/db/sqlite/lib/lib.factor | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/db/sqlite/ffi/ffi.factor b/extra/db/sqlite/ffi/ffi.factor index 4b5a019fca..b443f53e78 100755 --- a/extra/db/sqlite/ffi/ffi.factor +++ b/extra/db/sqlite/ffi/ffi.factor @@ -108,6 +108,7 @@ LIBRARY: sqlite FUNCTION: int sqlite3_open ( char* filename, void* ppDb ) ; FUNCTION: int sqlite3_close ( sqlite3* pDb ) ; FUNCTION: char* sqlite3_errmsg ( sqlite3* pDb ) ; +FUNCTION: int sqlite3_prepare ( sqlite3* pDb, char* zSql, int nBytes, void* ppStmt, void* pzTail ) ; FUNCTION: int sqlite3_prepare_v2 ( sqlite3* pDb, char* zSql, int nBytes, void* ppStmt, void* pzTail ) ; FUNCTION: int sqlite3_finalize ( sqlite3_stmt* pStmt ) ; FUNCTION: int sqlite3_reset ( sqlite3_stmt* pStmt ) ; diff --git a/extra/db/sqlite/lib/lib.factor b/extra/db/sqlite/lib/lib.factor index b6078fc983..e5562700c9 100755 --- a/extra/db/sqlite/lib/lib.factor +++ b/extra/db/sqlite/lib/lib.factor @@ -33,7 +33,7 @@ IN: db.sqlite.lib : sqlite-prepare ( db sql -- handle ) dup length "void*" "void*" - [ sqlite3_prepare_v2 sqlite-check-result ] 2keep + [ sqlite3_prepare sqlite-check-result ] 2keep drop *void* ; : sqlite-bind-parameter-index ( handle name -- index ) From 5bd3068fb08939fe8466db2fa0e86e8144389231 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 22 Apr 2008 19:44:25 -0500 Subject: [PATCH 043/270] remove printf --- extra/db/sqlite/sqlite.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 9ec8892add..2407613eca 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -124,7 +124,7 @@ M: sqlite-db create-sql-statement ( class -- statement ) dup type>> lookup-create-type 0% modifiers 0% ] interleave ");" 0% - ] query-make dup sql>> . ; + ] query-make ; M: sqlite-db drop-sql-statement ( class -- statement ) [ "drop table " 0% 0% ";" 0% drop ] query-make ; From 6afa62b57cee77dae0c62ed4f192204127b3d402 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 20:19:54 -0500 Subject: [PATCH 044/270] Add RFC822 date parser --- extra/calendar/calendar-tests.factor | 4 + extra/calendar/calendar.factor | 35 +++--- extra/calendar/format/format-tests.factor | 33 ++++-- extra/calendar/format/format.factor | 100 +++++++++++++----- .../{blog-summary.xml => blog-admin-link.xml} | 0 .../{mini-planet.xml => postings-summary.xml} | 0 6 files changed, 124 insertions(+), 48 deletions(-) rename extra/webapps/planet/{blog-summary.xml => blog-admin-link.xml} (100%) rename extra/webapps/planet/{mini-planet.xml => postings-summary.xml} (100%) diff --git a/extra/calendar/calendar-tests.factor b/extra/calendar/calendar-tests.factor index e49d3ad894..c05d4f60eb 100755 --- a/extra/calendar/calendar-tests.factor +++ b/extra/calendar/calendar-tests.factor @@ -2,6 +2,10 @@ USING: arrays calendar kernel math sequences tools.test continuations system ; IN: calendar.tests +\ time+ must-infer +\ time* must-infer +\ time- must-infer + [ f ] [ 2004 12 32 0 0 0 instant valid-timestamp? ] unit-test [ f ] [ 2004 2 30 0 0 0 instant valid-timestamp? ] unit-test [ f ] [ 2003 2 29 0 0 0 instant valid-timestamp? ] unit-test diff --git a/extra/calendar/calendar.factor b/extra/calendar/calendar.factor index 8dcb4af7f1..2f93bf8218 100755 --- a/extra/calendar/calendar.factor +++ b/extra/calendar/calendar.factor @@ -211,12 +211,14 @@ M: duration time+ #! Uses average month/year length since dt loses calendar #! data 0 swap - [ year>> + ] keep - [ month>> months-per-year / + ] keep - [ day>> days-per-year / + ] keep - [ hour>> hours-per-year / + ] keep - [ minute>> minutes-per-year / + ] keep - second>> seconds-per-year / + ; + { + [ year>> + ] + [ month>> months-per-year / + ] + [ day>> days-per-year / + ] + [ hour>> hours-per-year / + ] + [ minute>> minutes-per-year / + ] + [ second>> seconds-per-year / + ] + } cleave ; M: duration <=> [ dt>years ] compare ; @@ -252,14 +254,21 @@ M: timestamp time- #! Exact calendar-time difference (time-) seconds ; +: time* ( obj1 obj2 -- obj3 ) + dup real? [ swap ] when + dup real? [ * ] [ + { + [ year>> * ] + [ month>> * ] + [ day>> * ] + [ hour>> * ] + [ minute>> * ] + [ second>> * ] + } 2cleave + ] if ; + : before ( dt -- -dt ) - [ year>> neg ] keep - [ month>> neg ] keep - [ day>> neg ] keep - [ hour>> neg ] keep - [ minute>> neg ] keep - second>> neg - ; + -1 time* ; M: duration time- before time+ ; diff --git a/extra/calendar/format/format-tests.factor b/extra/calendar/format/format-tests.factor index 88bd0733c0..1ba892bef3 100755 --- a/extra/calendar/format/format-tests.factor +++ b/extra/calendar/format/format-tests.factor @@ -1,26 +1,45 @@ -USING: calendar.format calendar kernel tools.test -io.streams.string ; +USING: calendar.format calendar kernel math tools.test +io.streams.string accessors io ; IN: calendar.format.tests [ 0 ] [ - "Z" [ read-rfc3339-gmt-offset ] with-string-reader + "Z" [ read1 read-rfc3339-gmt-offset ] with-string-reader dt>hours ] unit-test [ 1 ] [ - "+01" [ read-rfc3339-gmt-offset ] with-string-reader + "+01" [ read1 read-rfc3339-gmt-offset ] with-string-reader dt>hours ] unit-test [ -1 ] [ - "-01" [ read-rfc3339-gmt-offset ] with-string-reader + "-01" [ read1 read-rfc3339-gmt-offset ] with-string-reader dt>hours ] unit-test [ -1-1/2 ] [ - "-01:30" [ read-rfc3339-gmt-offset ] with-string-reader + "-01:30" [ read1 read-rfc3339-gmt-offset ] with-string-reader dt>hours ] unit-test [ 1+1/2 ] [ - "+01:30" [ read-rfc3339-gmt-offset ] with-string-reader + "+01:30" [ read1 read-rfc3339-gmt-offset ] with-string-reader dt>hours ] unit-test [ ] [ now timestamp>rfc3339 drop ] unit-test [ ] [ now timestamp>rfc822 drop ] unit-test + +[ 8/1000 -4 ] [ + "2008-04-19T04:56:00.008-04:00" rfc3339>timestamp + [ second>> ] [ gmt-offset>> hour>> ] bi +] unit-test + +[ T{ duration f 0 0 0 0 0 0 } ] [ + "GMT" parse-rfc822-gmt-offset +] unit-test + +[ T{ duration f 0 0 0 -5 0 0 } ] [ + "-0500" parse-rfc822-gmt-offset +] unit-test + +[ T{ timestamp f 2008 4 22 14 36 12 T{ duration f 0 0 0 0 0 0 } } ] [ + "Tue, 22 Apr 2008 14:36:12 GMT" rfc822>timestamp +] unit-test + +[ t ] [ now dup timestamp>rfc822 rfc822>timestamp time- 1 seconds before? ] unit-test diff --git a/extra/calendar/format/format.factor b/extra/calendar/format/format.factor index 26ed873fd3..7bdaea70b5 100755 --- a/extra/calendar/format/format.factor +++ b/extra/calendar/format/format.factor @@ -1,5 +1,6 @@ USING: math math.parser kernel sequences io calendar -accessors arrays io.streams.string combinators accessors ; +accessors arrays io.streams.string splitting +combinators accessors debugger ; IN: calendar.format GENERIC: day. ( obj -- ) @@ -58,11 +59,11 @@ M: timestamp year. ( timestamp -- ) [ hour>> write-00 ] [ minute>> write-00 ] bi ; : write-gmt-offset ( gmt-offset -- ) - dup instant <=> { - { [ dup 0 = ] [ 2drop "GMT" write ] } - { [ dup 0 < ] [ drop "-" write before (write-gmt-offset) ] } - { [ dup 0 > ] [ drop "+" write (write-gmt-offset) ] } - } cond ; + dup instant <=> sgn { + { 0 [ drop "GMT" write ] } + { -1 [ "-" write before (write-gmt-offset) ] } + { 1 [ "+" write (write-gmt-offset) ] } + } case ; : timestamp>rfc822 ( timestamp -- str ) #! RFC822 timestamp format @@ -83,20 +84,22 @@ M: timestamp year. ( timestamp -- ) [ minute>> write-00 ] bi ; : write-rfc3339-gmt-offset ( duration -- ) - dup instant <=> { - { [ dup 0 = ] [ 2drop "Z" write ] } - { [ dup 0 < ] [ drop CHAR: - write1 before (write-rfc3339-gmt-offset) ] } - { [ dup 0 > ] [ drop CHAR: + write1 (write-rfc3339-gmt-offset) ] } - } cond ; + dup instant <=> sgn { + { 0 [ drop "Z" write ] } + { -1 [ CHAR: - write1 before (write-rfc3339-gmt-offset) ] } + { 1 [ CHAR: + write1 (write-rfc3339-gmt-offset) ] } + } case ; : (timestamp>rfc3339) ( timestamp -- ) - dup year>> number>string write CHAR: - write1 - dup month>> write-00 CHAR: - write1 - dup day>> write-00 CHAR: T write1 - dup hour>> write-00 CHAR: : write1 - dup minute>> write-00 CHAR: : write1 - dup second>> >fixnum write-00 - gmt-offset>> write-rfc3339-gmt-offset ; + { + [ year>> number>string write CHAR: - write1 ] + [ month>> write-00 CHAR: - write1 ] + [ day>> write-00 CHAR: T write1 ] + [ hour>> write-00 CHAR: : write1 ] + [ minute>> write-00 CHAR: : write1 ] + [ second>> >fixnum write-00 ] + [ gmt-offset>> write-rfc3339-gmt-offset ] + } cleave ; : timestamp>rfc3339 ( timestamp -- str ) [ (timestamp>rfc3339) ] with-string-writer ; @@ -106,14 +109,20 @@ M: timestamp year. ( timestamp -- ) : read-00 2 read string>number ; +: read-000 3 read string>number ; + : read-0000 4 read string>number ; -: read-rfc3339-gmt-offset ( -- n ) - read1 dup CHAR: Z = [ drop 0 ] [ - { { CHAR: + [ 1 ] } { CHAR: - [ -1 ] } } case - read-00 - read1 { { CHAR: : [ read-00 ] } { f [ 0 ] } } case - 60 / + * +: signed-gmt-offset ( dt ch -- dt' ) + { { CHAR: + [ 1 ] } { CHAR: - [ -1 ] } } case time* ; + +: read-rfc3339-gmt-offset ( ch -- dt ) + dup CHAR: Z = [ drop instant ] [ + >r + read-00 hours + read1 { { CHAR: : [ read-00 ] } { f [ 0 ] } } case minutes + time+ + r> signed-gmt-offset ] if ; : read-ymd ( -- y m d ) @@ -126,26 +135,61 @@ M: timestamp year. ( timestamp -- ) read-ymd "Tt" expect read-hms - read-rfc3339-gmt-offset ! timezone + read1 { { CHAR: . [ read-000 1000 / + read1 ] } [ ] } case + read-rfc3339-gmt-offset ; : rfc3339>timestamp ( str -- timestamp ) [ (rfc3339>timestamp) ] with-string-reader ; +ERROR: invalid-rfc822-date ; + +: check-rfc822-date ( obj/f -- obj ) [ invalid-rfc822-date ] unless* ; + +: read-token ( seps -- token ) + [ read-until ] keep member? check-rfc822-date drop ; + +: read-sp ( -- token ) " " read-token ; + +: checked-number ( str -- n ) + string>number check-rfc822-date ; + +: parse-rfc822-gmt-offset ( string -- dt ) + dup "GMT" = [ drop instant ] [ + unclip >r + 2 cut [ string>number ] bi@ [ hours ] [ minutes ] bi* time+ + r> signed-gmt-offset + ] if ; + +: (rfc822>timestamp) ( -- timestamp ) + timestamp new + "," read-token day-abbreviations3 member? check-rfc822-date drop + read1 CHAR: \s assert= + read-sp checked-number >>day + read-sp month-abbreviations index check-rfc822-date >>month + read-sp checked-number >>year + ":" read-token checked-number >>hour + ":" read-token checked-number >>minute + " " read-token checked-number >>second + readln parse-rfc822-gmt-offset >>gmt-offset ; + +: rfc822>timestamp ( str -- timestamp ) + [ (rfc822>timestamp) ] with-string-reader ; + : (ymdhms>timestamp) ( -- timestamp ) - read-ymd " " expect read-hms 0 ; + read-ymd " " expect read-hms instant ; : ymdhms>timestamp ( str -- timestamp ) [ (ymdhms>timestamp) ] with-string-reader ; : (hms>timestamp) ( -- timestamp ) - f f f read-hms f ; + f f f read-hms instant ; : hms>timestamp ( str -- timestamp ) [ (hms>timestamp) ] with-string-reader ; : (ymd>timestamp) ( -- timestamp ) - read-ymd f f f f ; + read-ymd f f f instant ; : ymd>timestamp ( str -- timestamp ) [ (ymd>timestamp) ] with-string-reader ; diff --git a/extra/webapps/planet/blog-summary.xml b/extra/webapps/planet/blog-admin-link.xml similarity index 100% rename from extra/webapps/planet/blog-summary.xml rename to extra/webapps/planet/blog-admin-link.xml diff --git a/extra/webapps/planet/mini-planet.xml b/extra/webapps/planet/postings-summary.xml similarity index 100% rename from extra/webapps/planet/mini-planet.xml rename to extra/webapps/planet/postings-summary.xml From bfa34122f3ac2eb429b33dd340dfebfaa4badff1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 20:23:49 -0500 Subject: [PATCH 045/270] Fix chunked encoding --- extra/http/client/client.factor | 4 +-- extra/http/http.factor | 43 +++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/extra/http/client/client.factor b/extra/http/client/client.factor index ac5d220a52..8879a76a5c 100755 --- a/extra/http/client/client.factor +++ b/extra/http/client/client.factor @@ -74,8 +74,8 @@ PRIVATE> ] with-variable ; : read-chunks ( -- ) - readln ";" split1 drop hex> - dup { f 0 } member? [ drop ] [ read % read-chunks ] if ; + read-crlf ";" split1 drop hex> dup { f 0 } member? + [ drop ] [ read % read-crlf "" assert= read-chunks ] if ; : do-chunked-encoding ( response stream -- response stream/string ) over "transfer-encoding" header "chunked" = [ diff --git a/extra/http/http.factor b/extra/http/http.factor index 5e90962b27..4aaab2205e 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -1,10 +1,18 @@ ! Copyright (C) 2003, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: fry hashtables io io.streams.string kernel math sets -namespaces math.parser assocs sequences strings splitting ascii -io.encodings.utf8 io.encodings.string io.sockets namespaces -unicode.case combinators vectors sorting accessors calendar -calendar.format quotations arrays combinators.lib byte-arrays ; +USING: accessors kernel combinators math namespaces + +assocs sequences splitting sorting sets debugger +strings vectors hashtables quotations arrays byte-arrays +math.parser calendar calendar.format + +io io.streams.string io.encodings.utf8 io.encodings.string +io.sockets + +unicode.case unicode.categories qualified ; + +EXCLUDE: fry => , ; + IN: http : http-port 80 ; inline @@ -13,11 +21,12 @@ IN: http #! In a URL, can this character be used without #! URL-encoding? { - [ dup letter? ] - [ dup LETTER? ] - [ dup digit? ] - [ dup "/_-.:" member? ] - } || nip ; foldable + { [ dup letter? ] [ t ] } + { [ dup LETTER? ] [ t ] } + { [ dup digit? ] [ t ] } + { [ dup "/_-.:" member? ] [ t ] } + [ f ] + } cond nip ; foldable : push-utf8 ( ch -- ) 1string utf8 encode @@ -75,8 +84,16 @@ IN: http ] if ] if ; +: read-lf ( -- string ) + "\n" read-until CHAR: \n assert= ; + +: read-crlf ( -- string ) + "\r" read-until + CHAR: \r assert= + read1 CHAR: \n assert= ; + : read-header-line ( -- ) - readln dup + read-crlf dup empty? [ drop ] [ header-line read-header-line ] if ; : read-header ( -- assoc ) @@ -224,7 +241,7 @@ cookies ; dup { "1.0" "1.1" } member? [ "Bad version" throw ] unless ; : read-request-version ( request -- request ) - readln [ CHAR: \s = ] left-trim + read-crlf [ CHAR: \s = ] left-trim parse-version >>version ; @@ -372,7 +389,7 @@ body ; >>code ; : read-response-message - readln >>message ; + read-crlf >>message ; : read-response-header read-header >>header From f9ce5dd6c38ecbe1cd93af780a97e96e17a0ead4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 20:23:54 -0500 Subject: [PATCH 046/270] Fix RSS2.0 support --- extra/rss/rss.factor | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/extra/rss/rss.factor b/extra/rss/rss.factor index 2e735d2f06..5fc688967a 100644 --- a/extra/rss/rss.factor +++ b/extra/rss/rss.factor @@ -23,7 +23,7 @@ C: entry [ "link" tag-named children>string ] keep [ "description" tag-named children>string ] keep f "date" "http://purl.org/dc/elements/1.1/" - tag-named dup [ children>string rfc3339>timestamp ] when + tag-named dup [ children>string rfc822>timestamp ] when ; : rss1.0 ( xml -- feed ) @@ -39,7 +39,7 @@ C: entry [ "link" tag-named ] keep [ "guid" tag-named dupd ? children>string ] keep [ "description" tag-named children>string ] keep - "pubDate" tag-named children>string rfc3339>timestamp ; + "pubDate" tag-named children>string rfc822>timestamp ; : rss2.0 ( xml -- feed ) "channel" tag-named @@ -71,16 +71,12 @@ C: entry { "feed" [ atom1.0 ] } } case ; -: read-feed ( stream -- feed ) - [ read-xml ] with-html-entities xml>feed ; +: read-feed ( string -- feed ) + [ string>xml xml>feed ] with-html-entities ; : download-feed ( url -- feed ) #! Retrieve an news syndication file, return as a feed tuple. - http-get-stream swap code>> success? [ - read-feed - ] [ - dispose "Error retrieving newsfeed file" throw - ] if ; + http-get read-feed ; ! Atom generation : simple-tag, ( content name -- ) From 138cff4d47f9fd9e63d358e436592c53141d683c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 22 Apr 2008 21:06:24 -0500 Subject: [PATCH 047/270] stack effects for recusive words --- extra/windows/windows.factor | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extra/windows/windows.factor b/extra/windows/windows.factor index 0e555ed7e9..3e7520d406 100644 --- a/extra/windows/windows.factor +++ b/extra/windows/windows.factor @@ -30,10 +30,10 @@ FUNCTION: void* error_message ( DWORD id ) ; : win32-error ( -- ) GetLastError (win32-error) ; -: win32-error=0/f { 0 f } member? [ win32-error ] when ; -: win32-error>0 0 > [ win32-error ] when ; -: win32-error<0 0 < [ win32-error ] when ; -: win32-error<>0 zero? [ win32-error ] unless ; +: win32-error=0/f ( n -- ) { 0 f } member? [ win32-error ] when ; +: win32-error>0 ( n -- ) 0 > [ win32-error ] when ; +: win32-error<0 ( n -- ) 0 < [ win32-error ] when ; +: win32-error<>0 ( n -- ) zero? [ win32-error ] unless ; : invalid-handle? ( handle -- ) INVALID_HANDLE_VALUE = [ From 6e89f7b085bd2ec63948296344ff7f89375169a3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 22 Apr 2008 21:08:27 -0500 Subject: [PATCH 048/270] Working on planet factor rewrite --- extra/http/server/auth/login/login.factor | 2 +- .../server/boilerplate/boilerplate.factor | 2 +- .../http/server/components/components.factor | 29 +++++- extra/http/server/forms/forms.factor | 2 +- extra/http/server/server.factor | 29 +++--- .../http/server/templating/chloe/chloe.factor | 3 +- .../http/server/templating/fhtml/fhtml.factor | 2 +- .../http/server/templating/templating.factor | 17 +++- .../factor-website/factor-website.factor | 38 ++++++++ .../{planet => factor-website}/page.xml | 35 ++++--- extra/webapps/planet/admin.xml | 13 +++ extra/webapps/planet/entry.xml | 14 ++- extra/webapps/planet/planet.factor | 96 +++++++++++-------- extra/webapps/planet/planet.xml | 42 ++++---- extra/webapps/planet/postings.xml | 19 ++++ extra/webapps/todo/page.xml | 45 --------- extra/webapps/todo/todo.css | 16 ---- extra/webapps/todo/todo.factor | 34 +------ 18 files changed, 236 insertions(+), 202 deletions(-) create mode 100644 extra/webapps/factor-website/factor-website.factor rename extra/webapps/{planet => factor-website}/page.xml (89%) create mode 100644 extra/webapps/planet/admin.xml create mode 100644 extra/webapps/planet/postings.xml delete mode 100644 extra/webapps/todo/page.xml diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index b0cc0c21d1..7593f217f7 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -363,7 +363,7 @@ M: login call-responder ( path responder -- response ) : ( responder -- auth ) login new-dispatcher - swap >>default + swap >>default "login" add-responder "logout" add-responder no-users >>users ; diff --git a/extra/http/server/boilerplate/boilerplate.factor b/extra/http/server/boilerplate/boilerplate.factor index 6c62452ec2..eabcefeb7f 100644 --- a/extra/http/server/boilerplate/boilerplate.factor +++ b/extra/http/server/boilerplate/boilerplate.factor @@ -48,7 +48,7 @@ SYMBOL: next-template : call-next-template ( -- ) next-template get write ; -M: f call-template drop call-next-template ; +M: f call-template* drop call-next-template ; : with-boilerplate ( body template -- ) [ diff --git a/extra/http/server/components/components.factor b/extra/http/server/components/components.factor index bdcdd95c71..331231dfb3 100755 --- a/extra/http/server/components/components.factor +++ b/extra/http/server/components/components.factor @@ -280,6 +280,22 @@ TUPLE: date < string ; M: date component-string drop timestamp>string ; +! Link components + +GENERIC: link-title ( obj -- string ) +GENERIC: link-href ( obj -- url ) + +SINGLETON: link-renderer + +M: link-renderer render-view* + drop link-title write ; + +TUPLE: link < string ; + +: ( id -- component ) + link new-string + link-renderer >>renderer ; + ! List components SYMBOL: +plain+ SYMBOL: +ordered+ @@ -289,17 +305,20 @@ TUPLE: list-renderer component type ; C: list-renderer -: render-plain-list ( seq quot component -- ) - swap '[ , @ ] each ; inline +: render-plain-list ( seq component quot -- ) + '[ , component>> renderer>> @ ] each ; inline + +: render-li-list ( seq component quot -- ) + '[
  • @
  • ] render-plain-list ; inline : render-ordered-list ( seq quot component -- ) - swap
      '[
    1. , @
    2. ] each
    ; inline +
      render-li-list
    ; inline : render-unordered-list ( seq quot component -- ) - swap
      '[
    • , @
    • ] each
    ; inline +
      render-li-list
    ; inline : render-list ( value renderer quot -- ) - swap [ component>> ] [ type>> ] bi { + over type>> { { +plain+ [ render-plain-list ] } { +ordered+ [ render-ordered-list ] } { +unordered+ [ render-unordered-list ] } diff --git a/extra/http/server/forms/forms.factor b/extra/http/server/forms/forms.factor index f45bf6ec65..60f3da25b6 100644 --- a/extra/http/server/forms/forms.factor +++ b/extra/http/server/forms/forms.factor @@ -78,4 +78,4 @@ M: form render-view* dup view-template>> render-form ; M: form render-edit* - dup edit-template>> render-form ; + nip dup edit-template>> render-form ; diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index db03645a24..d3bd6c6bbe 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -160,23 +160,30 @@ drop SYMBOL: development-mode +: http-error. ( error -- ) + "Internal server error" [ + development-mode get [ + [ print-error nl :c ] with-html-stream + ] [ + 500 "Internal server error" + trivial-response-body + ] if + ] simple-page ; + : <500> ( error -- response ) 500 "Internal server error" - swap '[ - , "Internal server error" [ - development-mode get [ - [ print-error nl :c ] with-html-stream - ] [ - 500 "Internal server error" - trivial-response-body - ] if - ] simple-page - ] >>body ; + swap '[ , http-error. ] >>body ; : do-response ( response -- ) dup write-response request get method>> "HEAD" = - [ drop ] [ write-response-body ] if ; + [ drop ] [ + '[ + , write-response-body + ] [ + http-error. + ] recover + ] if ; LOG: httpd-hit NOTICE diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor index 8142c5e3b7..685988dfaf 100644 --- a/extra/http/server/templating/chloe/chloe.factor +++ b/extra/http/server/templating/chloe/chloe.factor @@ -153,6 +153,7 @@ SYMBOL: tags { "form" [ form-tag ] } { "error" [ error-tag ] } { "if" [ if-tag ] } + { "comment" [ drop ] } { "call-next-template" [ drop call-next-template ] } [ "Unknown chloe tag: " swap append throw ] } case ; @@ -189,7 +190,7 @@ SYMBOL: tags ] if ] with-scope ; -M: chloe call-template +M: chloe call-template* path>> utf8 read-xml process-chloe ; INSTANCE: chloe template diff --git a/extra/http/server/templating/fhtml/fhtml.factor b/extra/http/server/templating/fhtml/fhtml.factor index 1cba4b9b2e..2cc053a0ca 100755 --- a/extra/http/server/templating/fhtml/fhtml.factor +++ b/extra/http/server/templating/fhtml/fhtml.factor @@ -76,7 +76,7 @@ TUPLE: fhtml path ; C: fhtml -M: fhtml call-template ( filename -- ) +M: fhtml call-template* ( filename -- ) '[ , path>> [ "quiet" on diff --git a/extra/http/server/templating/templating.factor b/extra/http/server/templating/templating.factor index f69dd9bfe0..610ec78fed 100644 --- a/extra/http/server/templating/templating.factor +++ b/extra/http/server/templating/templating.factor @@ -1,10 +1,21 @@ -USING: accessors kernel fry io.encodings.utf8 io.files -http http.server ; +USING: accessors kernel fry io io.encodings.utf8 io.files +http http.server debugger prettyprint continuations ; IN: http.server.templating MIXIN: template -GENERIC: call-template ( template -- ) +GENERIC: call-template* ( template -- ) + +ERROR: template-error template error ; + +M: template-error error. + "Error while processing template " write + [ template>> pprint ":" print nl ] + [ error>> error. ] + bi ; + +: call-template ( template -- ) + [ call-template* ] [ template-error ] recover ; M: template write-response-body* call-template ; diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor new file mode 100644 index 0000000000..3483d4321e --- /dev/null +++ b/extra/webapps/factor-website/factor-website.factor @@ -0,0 +1,38 @@ +! Copyright (c) 2008 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +USING: accessors kernel sequences io.files io.sockets +db.sqlite smtp namespaces db +http.server.db +http.server.sessions +http.server.auth.login +http.server.auth.providers.db +http.server.sessions.storage.db +http.server.boilerplate +http.server.templating.chloe ; +IN: webapps.factor-website + +: factor-template ( path -- template ) + "resource:extra/webapps/factor-website/" swap ".xml" 3append ; + +: test-db "todo.db" resource-path sqlite-db ; + +: ( responder -- responder' ) + + users-in-db >>users + allow-registration + allow-password-recovery + allow-edit-profile + + "page" factor-template >>template + + sessions-in-db >>sessions + test-db ; + +: init-factor-website ( -- ) + "factorcode.org" 25 smtp-server set-global + "todo@factorcode.org" lost-password-from set-global + + test-db [ + init-sessions-table + init-users-table + ] with-db ; diff --git a/extra/webapps/planet/page.xml b/extra/webapps/factor-website/page.xml similarity index 89% rename from extra/webapps/planet/page.xml rename to extra/webapps/factor-website/page.xml index 1278c8174c..d929042320 100644 --- a/extra/webapps/planet/page.xml +++ b/extra/webapps/factor-website/page.xml @@ -10,52 +10,49 @@ - - + body, button { + font:9pt "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; + color:#444; + } + .link-button { padding: 0px; background: none; border: none; } - .inline { - display: inline; - } - - body, button { - font:9pt "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; - color:#444; - } - a, .link { color: #222; border-bottom:1px dotted #666; text-decoration:none; } - h1 a { - border: none; - } - a:hover, .link:hover { border-bottom:1px solid #66a; } .error { color: #a00; } - + .field-label { text-align: right; } + + .inline { + display: inline; + } + + .navbar { + background-color: #eee; + padding: 5px; + border: 1px solid #ccc; + } - -

    - diff --git a/extra/webapps/planet/admin.xml b/extra/webapps/planet/admin.xml new file mode 100644 index 0000000000..1a18cad94b --- /dev/null +++ b/extra/webapps/planet/admin.xml @@ -0,0 +1,13 @@ + + + + + Planet Factor Administration + + + +

    + Add Blog | Update +

    + +
    diff --git a/extra/webapps/planet/entry.xml b/extra/webapps/planet/entry.xml index a9383d16f2..bc89af3263 100644 --- a/extra/webapps/planet/entry.xml +++ b/extra/webapps/planet/entry.xml @@ -2,8 +2,16 @@ -

    -

    -

    +

    + +

    + +

    + +

    + +

    + +

    diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 966bcc1d0b..464e2bbfb3 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors sequences sorting locals math -calendar alarms logging concurrency.combinators +calendar alarms logging concurrency.combinators namespaces db.types db.tuples db rss xml.writer http.server @@ -10,11 +10,22 @@ http.server.forms http.server.actions http.server.boilerplate http.server.templating.chloe -http.server.components ; +http.server.components +http.server.auth.login +webapps.factor-website ; IN: webapps.planet +TUPLE: planet-factor < dispatcher postings ; + +: planet-template ( name -- template ) + "resource:extra/webapps/planet/" swap ".xml" 3append ; + TUPLE: blog id name www-url atom-url ; +M: blog link-title name>> ; + +M: blog link-href www-url>> ; + blog "BLOGS" { { "id" "ID" INTEGER +native-id+ } @@ -29,8 +40,8 @@ blog "BLOGS" blog new swap >>id ; -: planet-template ( name -- template ) - "resource:extra/webapps/planet/" swap ".xml" 3append ; +: blogroll ( -- seq ) + f select-tuples [ [ name>> ] compare ] sort ; : ( -- form ) "entry"
    @@ -44,7 +55,7 @@ blog "BLOGS" "blog" "edit-blog" planet-template >>edit-template "view-blog" planet-template >>view-template - "blog-summary" planet-template >>summary-template + "blog-admin-link" planet-template >>summary-template "id" hidden >>renderer add-field @@ -60,15 +71,27 @@ blog "BLOGS" : ( -- form ) "planet-factor" - "planet" planet-template >>view-template - "mini-planet" planet-template >>summary-template + "postings" planet-template >>view-template + "postings-summary" planet-template >>summary-template "postings" +plain+ add-field + "blogroll" "blog" +unordered+ add-field ; + +: ( -- form ) + "admin" + "admin" planet-template >>view-template "blogroll" +unordered+ add-field ; -: blogroll ( -- seq ) - f select-tuples [ [ name>> ] compare ] sort ; +:: ( planet -- action ) + [let | form [ ] | + + [ + blank-values -TUPLE: planet-factor < dispatcher postings ; + blogroll "blogroll" set-value + + form view-form + ] >>display + ] ; :: ( planet -- action ) [let | form [ ] | @@ -90,7 +113,7 @@ TUPLE: planet-factor < dispatcher postings ; feed new "[ planet-factor ]" >>title "http://planet.factorcode.org" >>link - planet postings>> 30 safe-head >>entries ; + planet postings>> 16 safe-head >>entries ; :: ( planet -- action ) @@ -117,7 +140,8 @@ TUPLE: planet-factor < dispatcher postings ; : update-cached-postings ( planet -- ) "webapps.planet" [ - blogroll fetch-blogroll sort-entries >>postings drop + blogroll fetch-blogroll sort-entries 8 safe-head + >>postings drop ] with-logging ; :: ( planet -- action ) @@ -127,16 +151,11 @@ TUPLE: planet-factor < dispatcher postings ; "" f ] >>display ; -: start-update-task ( planet -- ) - [ update-cached-postings ] curry 10 minutes every drop ; - -:: ( -- responder ) +:: ( planet-factor -- responder ) [let | blog-form [ ] blog-ctor [ [ ] ] | - planet-factor new-dispatcher - dup >>default - dup "feed.xml" add-responder - dup "update" add-responder + + planet-factor >>default ! Administrative CRUD blog-ctor "" "delete-blog" add-responder @@ -144,30 +163,25 @@ TUPLE: planet-factor < dispatcher postings ; blog-form blog-ctor "view-blog" "edit-blog" add-responder ] ; -USING: namespaces io.files io.sockets -db.sqlite smtp -http.server.db -http.server.sessions -http.server.auth.login -http.server.auth.providers.db -http.server.sessions.storage.db ; - -: test-db "planet.db" resource-path sqlite-db ; - -: ( -- responder ) - +: ( -- responder ) + planet-factor new-dispatcher + dup >>default + dup "feed.xml" add-responder + dup "update" add-responder + dup "admin" add-responder - "page" planet-template >>template - ! - ! sessions-in-db >>sessions - test-db ; + "planet" planet-template >>template ; + +: ( -- responder ) + ; + +: start-update-task ( planet -- ) + [ update-cached-postings ] curry 10 minutes every drop ; : init-planet ( -- ) - ! test-db [ - ! init-blog-table - ! init-users-table - ! init-sessions-table - ! ] with-db + test-db [ + init-blog-table + ] with-db "planet" add-responder diff --git a/extra/webapps/planet/planet.xml b/extra/webapps/planet/planet.xml index dc762fafc6..772f81906d 100644 --- a/extra/webapps/planet/planet.xml +++ b/extra/webapps/planet/planet.xml @@ -2,36 +2,30 @@ - Planet Factor - + - + - - - + - -
    -

    - planet-factor is an Atom feed aggregator that collects the - contents of Factor-related blogs. It was inspired by - Planet Lisp. -

    -

    - - Syndicate -

    + | Admin -

    Blogroll

    + + + | Edit Profile + - + + | + + + - Admin: Add Blog - | - Update -
    +

    + +
    diff --git a/extra/webapps/planet/postings.xml b/extra/webapps/planet/postings.xml new file mode 100644 index 0000000000..f59a4f61b8 --- /dev/null +++ b/extra/webapps/planet/postings.xml @@ -0,0 +1,19 @@ + + + + + Planet Factor + + + + + + + +
    +

    Blogroll

    + + +
    + +
    diff --git a/extra/webapps/todo/page.xml b/extra/webapps/todo/page.xml deleted file mode 100644 index f40c79d299..0000000000 --- a/extra/webapps/todo/page.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - body, button { - font:9pt "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; - color:#444; - } - - a, .link { - color: #222; - border-bottom:1px dotted #666; - text-decoration:none; - } - - a:hover, .link:hover { - border-bottom:1px solid #66a; - } - - .error { color: #a00; } - - .field-label { - text-align: right; - } - - - - - - - - - - - - diff --git a/extra/webapps/todo/todo.css b/extra/webapps/todo/todo.css index c2e8a7fd79..2520a56128 100644 --- a/extra/webapps/todo/todo.css +++ b/extra/webapps/todo/todo.css @@ -10,22 +10,6 @@ color: #000000; } -.link-button { - padding: 0px; - background: none; - border: none; -} - -.navbar { - background-color: #eeeeee; - padding: 5px; - border: 1px solid #ccc; -} - -.inline { - display: inline; -} - pre { font-size: 75%; } diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index 917b9bf7a7..08555b92ed 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -1,12 +1,13 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel locals sequences +USING: accessors kernel locals sequences namespaces db db.types db.tuples http.server.components http.server.components.farkup http.server.forms http.server.templating.chloe http.server.boilerplate http.server.crud http.server.auth http.server.actions http.server.db -http.server ; +http.server +webapps.factor-website ; IN: webapps.todo TUPLE: todo uid id priority summary description ; @@ -71,37 +72,10 @@ TUPLE: todo-responder < dispatcher ; "todo" todo-template >>template ] ; -! What follows below is somewhat akin to a 'deployment descriptor' -! for the todo application. The can be integrated -! into an existing web app that provides session management and -! login facilities, or can be used to run a -! self-contained todo instance. -USING: namespaces io.files io.sockets -db.sqlite smtp -http.server.sessions -http.server.auth.login -http.server.auth.providers.db -http.server.sessions.storage.db ; - -: test-db "todo.db" resource-path sqlite-db ; - : ( -- responder ) - - - users-in-db >>users - allow-registration - allow-password-recovery - allow-edit-profile - - "page" todo-template >>template - - sessions-in-db >>sessions - test-db ; + ; : init-todo ( -- ) - "factorcode.org" 25 smtp-server set-global - "todo@factorcode.org" lost-password-from set-global - test-db [ init-todo-table init-users-table From 6a0dc9f02451015d909f8941594a27250f89b4b6 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 23 Apr 2008 00:07:26 -0500 Subject: [PATCH 049/270] fix unit tests --- extra/db/tuples/tuples-tests.factor | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 1c900edc68..32562a4ae8 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -80,9 +80,9 @@ SYMBOL: person4 "teddy" 10 3.14 - T{ timestamp f 2008 3 5 16 24 11 0 } - T{ timestamp f 2008 11 22 f f f f } - T{ timestamp f f f f 12 34 56 f } + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 f f f T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } B{ 115 116 111 114 101 105 110 97 98 108 111 98 } } ] [ T{ person f 3 } select-tuple ] unit-test @@ -96,9 +96,9 @@ SYMBOL: person4 "eddie" 10 3.14 - T{ timestamp f 2008 3 5 16 24 11 0 } - T{ timestamp f 2008 11 22 f f f f } - T{ timestamp f f f f 12 34 56 f } + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 f f f T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } f H{ { 1 2 } { 3 4 } { 5 "lol" } } } From 2045f44ced34a546d215c872cda542171014a6dc Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 00:08:49 -0500 Subject: [PATCH 050/270] Fix RSS unit tests --- extra/rss/rss-tests.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/rss/rss-tests.factor b/extra/rss/rss-tests.factor index 7523d0509f..252defe99b 100755 --- a/extra/rss/rss-tests.factor +++ b/extra/rss/rss-tests.factor @@ -5,7 +5,7 @@ IN: rss.tests : load-news-file ( filename -- feed ) #! Load an news syndication file and process it, returning #! it as an feed tuple. - utf8 read-feed ; + utf8 file-contents read-feed ; [ T{ feed @@ -36,7 +36,7 @@ IN: rss.tests "http://example.org/2005/04/02/atom" "\n
    \n

    [Update: The Atom draft is finished.]

    \n
    \n " - T{ timestamp f 2003 12 13 8 29 29 -4 } + T{ timestamp f 2003 12 13 8 29 29 T{ duration f 0 0 0 -4 0 0 } } } } } ] [ "extra/rss/atom.xml" resource-path load-news-file ] unit-test From 2f2d31a623785b936e7fc7b18fc72af34ab0792e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 00:53:42 -0500 Subject: [PATCH 051/270] Fix HTTP unit tests --- extra/http/http-tests.factor | 15 +++++++++------ extra/http/http.factor | 3 +-- extra/http/server/actions/actions-tests.factor | 10 +++++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 9302045624..3a50630335 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -24,6 +24,8 @@ IN: http.tests [ "/bar" ] [ "http://foo.com/bar" url>path ] unit-test [ "/bar" ] [ "/bar" url>path ] unit-test +: lf>crlf "\n" split "\r\n" join ; + STRING: read-request-test-1 GET http://foo/bar HTTP/1.1 Some-Header: 1 @@ -45,7 +47,7 @@ blah cookies: V{ } } ] [ - read-request-test-1 [ + read-request-test-1 lf>crlf [ read-request ] with-string-reader ] unit-test @@ -59,7 +61,7 @@ blah ; read-request-test-1' 1array [ - read-request-test-1 + read-request-test-1 lf>crlf [ read-request ] with-string-reader [ write-request ] with-string-writer ! normalize crlf @@ -69,6 +71,7 @@ read-request-test-1' 1array [ STRING: read-request-test-2 HEAD http://foo/bar HTTP/1.1 Host: www.sex.com + ; [ @@ -83,7 +86,7 @@ Host: www.sex.com cookies: V{ } } ] [ - read-request-test-2 [ + read-request-test-2 lf>crlf [ read-request ] with-string-reader ] unit-test @@ -104,7 +107,7 @@ blah cookies: V{ } } ] [ - read-response-test-1 + read-response-test-1 lf>crlf [ read-response ] with-string-reader ] unit-test @@ -117,7 +120,7 @@ content-type: text/html ; read-response-test-1' 1array [ - read-response-test-1 + read-response-test-1 lf>crlf [ read-response ] with-string-reader [ write-response ] with-string-writer ! normalize crlf @@ -162,7 +165,7 @@ io.encodings.ascii ; "localhost" 1237 ascii [ "GET nested HTTP/1.0\r\n" write flush "\r\n" write flush - readln drop + read-crlf drop read-header ] with-stream "location" swap at "/" head? ] unit-test diff --git a/extra/http/http.factor b/extra/http/http.factor index 4aaab2205e..3e81fccd24 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -89,8 +89,7 @@ IN: http : read-crlf ( -- string ) "\r" read-until - CHAR: \r assert= - read1 CHAR: \n assert= ; + [ CHAR: \r assert= read1 CHAR: \n assert= ] when* ; : read-header-line ( -- ) read-crlf dup diff --git a/extra/http/server/actions/actions-tests.factor b/extra/http/server/actions/actions-tests.factor index ebf8e8770b..90e632d7f5 100755 --- a/extra/http/server/actions/actions-tests.factor +++ b/extra/http/server/actions/actions-tests.factor @@ -1,7 +1,7 @@ IN: http.server.actions.tests USING: http.server.actions http.server.validators tools.test math math.parser multiline namespaces http -io.streams.string http.server sequences accessors ; +io.streams.string http.server sequences splitting accessors ; [ "a" [ v-number ] { { "a" "123" } } validate-param @@ -13,6 +13,8 @@ io.streams.string http.server sequences accessors ; { { "a" [ v-number ] } { "b" [ v-number ] } } >>get-params "action-1" set +: lf>crlf "\n" split "\r\n" join ; + STRING: action-request-test-1 GET http://foo/bar?a=12&b=13 HTTP/1.1 @@ -20,7 +22,8 @@ blah ; [ 25 ] [ - action-request-test-1 [ read-request ] with-string-reader + action-request-test-1 lf>crlf + [ read-request ] with-string-reader request set "/blah" "action-1" get call-responder @@ -40,7 +43,8 @@ xxx=4 ; [ "/blahXXXX" ] [ - action-request-test-2 [ read-request ] with-string-reader + action-request-test-2 lf>crlf + [ read-request ] with-string-reader request set "/blah" "action-2" get call-responder From 3be7f29b25c5a939521b0f1b61de480237dd921c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 00:54:41 -0500 Subject: [PATCH 052/270] Fix todo load error --- extra/webapps/todo/todo.factor | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index 08555b92ed..97af356dc5 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -6,6 +6,7 @@ http.server.components http.server.components.farkup http.server.forms http.server.templating.chloe http.server.boilerplate http.server.crud http.server.auth http.server.actions http.server.db +http.server.auth.login http.server webapps.factor-website ; IN: webapps.todo @@ -78,8 +79,6 @@ TUPLE: todo-responder < dispatcher ; : init-todo ( -- ) test-db [ init-todo-table - init-users-table - init-sessions-table ] with-db From 04e9b1c37fb0c72f06e86e1ba2a42ae8e56a6ea2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 01:31:32 -0500 Subject: [PATCH 053/270] Fix Cocoa UI bug --- extra/ui/cocoa/views/views.factor | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/extra/ui/cocoa/views/views.factor b/extra/ui/cocoa/views/views.factor index 5b975f40de..442eda90ef 100755 --- a/extra/ui/cocoa/views/views.factor +++ b/extra/ui/cocoa/views/views.factor @@ -126,6 +126,13 @@ CLASS: { { +name+ "FactorView" } { +protocols+ { "NSTextInput" } } } + +! Rendering +! Rendering +{ "drawRect:" "void" { "id" "SEL" "id" "NSRect" } + [ 3drop window relayout-1 ] +} + ! Events { "acceptsFirstMouse:" "bool" { "id" "SEL" "id" } [ 3drop 1 ] From 3a69c972980251af21c731f771d0e61625593bb9 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 01:42:30 -0500 Subject: [PATCH 054/270] https:// is absolute --- extra/http/client/client.factor | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/extra/http/client/client.factor b/extra/http/client/client.factor index 8879a76a5c..cc356ca8e3 100755 --- a/extra/http/client/client.factor +++ b/extra/http/client/client.factor @@ -39,13 +39,16 @@ DEFER: http-request SYMBOL: redirects +: absolute-url? ( url -- ? ) + [ "http://" head? ] [ "https://" head? ] bi or ; + : do-redirect ( response -- response stream ) dup response-code 300 399 between? [ stdio get dispose redirects inc redirects get max-redirects < [ header>> "location" swap at - dup "http://" head? [ + dup absolute-url? [ absolute-redirect ] [ relative-redirect @@ -116,8 +119,12 @@ M: download-failed error. : download-to ( url file -- ) #! Downloads the contents of a URL to a file. - swap http-get-stream swap check-response - [ swap latin1 stream-copy ] with-disposal ; + swap http-get-stream check-response + dup string? [ + latin1 [ write ] with-file-writer + ] [ + [ swap latin1 stream-copy ] with-disposal + ] if ; : download ( url -- ) dup download-name download-to ; From f9659ecc7c412eaf986d14fd19b6d29c6de3d230 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Tue, 22 Apr 2008 23:45:30 -0700 Subject: [PATCH 055/270] Add sequences.lib.replicate --- extra/sequences/lib/lib.factor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index b186ee7777..c648660d66 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -131,6 +131,10 @@ MACRO: firstn ( n -- ) [ find drop [ head-slice ] when* ] curry [ dup ] swap compose keep like ; +: replicate ( seq quot -- newseq ) + #! quot: ( -- obj ) + [ drop ] swap compose map ; + ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Date: Wed, 23 Apr 2008 02:46:21 -0500 Subject: [PATCH 056/270] use sqlite_prepare_v2 (freebsd64 now has this symbol too) --- extra/db/sqlite/lib/lib.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/db/sqlite/lib/lib.factor b/extra/db/sqlite/lib/lib.factor index e5562700c9..b6078fc983 100755 --- a/extra/db/sqlite/lib/lib.factor +++ b/extra/db/sqlite/lib/lib.factor @@ -33,7 +33,7 @@ IN: db.sqlite.lib : sqlite-prepare ( db sql -- handle ) dup length "void*" "void*" - [ sqlite3_prepare sqlite-check-result ] 2keep + [ sqlite3_prepare_v2 sqlite-check-result ] 2keep drop *void* ; : sqlite-bind-parameter-index ( handle name -- index ) From df41c8b68f44a04209ef484a8f689f358266159c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 02:46:35 -0500 Subject: [PATCH 057/270] Fix documentation --- core/alien/strings/strings-docs.factor | 4 ++-- core/alien/strings/strings.factor | 2 +- extra/bit-vectors/bit-vectors-docs.factor | 4 ++-- extra/byte-vectors/byte-vectors-docs.factor | 2 +- extra/columns/columns-docs.factor | 2 +- extra/float-vectors/float-vectors-docs.factor | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/core/alien/strings/strings-docs.factor b/core/alien/strings/strings-docs.factor index 0dbb4ffd38..27b0122ebe 100644 --- a/core/alien/strings/strings-docs.factor +++ b/core/alien/strings/strings-docs.factor @@ -3,14 +3,14 @@ debugger ; IN: alien.strings HELP: string>alien -{ $values { "string" string } { "encoding" "an encoding descriptor" } { "array" byte-array } } +{ $values { "string" string } { "encoding" "an encoding descriptor" } { "byte-array" byte-array } } { $description "Encodes a string together with a trailing null code point using the given encoding, and stores the resulting bytes in a freshly-allocated byte array." } { $errors "Throws an error if the string contains null characters, or characters not representable in the given encoding." } ; { string>alien alien>string malloc-string } related-words HELP: alien>string -{ $values { "c-ptr" c-ptr } { "encoding" "an encoding descriptor" } { "string" string } } +{ $values { "c-ptr" c-ptr } { "encoding" "an encoding descriptor" } { "string/f" "a string or " { $link f } } } { $description "Reads a null-terminated C string from the specified address with the given encoding." } ; HELP: malloc-string diff --git a/core/alien/strings/strings.factor b/core/alien/strings/strings.factor index 463fc11e0d..d69d8e9e8e 100644 --- a/core/alien/strings/strings.factor +++ b/core/alien/strings/strings.factor @@ -6,7 +6,7 @@ io.streams.byte-array io.streams.memory io.encodings.utf8 io.encodings.utf16 system alien strings cpu.architecture ; IN: alien.strings -GENERIC# alien>string 1 ( alien encoding -- string/f ) +GENERIC# alien>string 1 ( c-ptr encoding -- string/f ) M: c-ptr alien>string >r r> diff --git a/extra/bit-vectors/bit-vectors-docs.factor b/extra/bit-vectors/bit-vectors-docs.factor index 9ceb2df342..41f32b4cdb 100755 --- a/extra/bit-vectors/bit-vectors-docs.factor +++ b/extra/bit-vectors/bit-vectors-docs.factor @@ -3,7 +3,7 @@ bit-vectors.private combinators ; IN: bit-vectors ARTICLE: "bit-vectors" "Bit vectors" -"A bit vector is a resizable mutable sequence of bits. The literal syntax is covered in " { $link "syntax-bit-vectors" } ". Bit vector words are found in the " { $vocab-link "bit-vectors" } " vocabulary." +"A bit vector is a resizable mutable sequence of bits. Bit vector words are found in the " { $vocab-link "bit-vectors" } " vocabulary." $nl "Bit vectors form a class:" { $subsection bit-vector } @@ -19,7 +19,7 @@ $nl ABOUT: "bit-vectors" HELP: bit-vector -{ $description "The class of resizable bit vectors. See " { $link "syntax-bit-vectors" } " for syntax and " { $link "bit-vectors" } " for general information." } ; +{ $description "The class of resizable bit vectors. See " { $link "bit-vectors" } " for information." } ; HELP: { $values { "n" "a positive integer specifying initial capacity" } { "bit-vector" bit-vector } } diff --git a/extra/byte-vectors/byte-vectors-docs.factor b/extra/byte-vectors/byte-vectors-docs.factor index f34bc20219..139cbab822 100755 --- a/extra/byte-vectors/byte-vectors-docs.factor +++ b/extra/byte-vectors/byte-vectors-docs.factor @@ -19,7 +19,7 @@ $nl ABOUT: "byte-vectors" HELP: byte-vector -{ $description "The class of resizable byte vectors. See " { $link "syntax-byte-vectors" } " for syntax and " { $link "byte-vectors" } " for general information." } ; +{ $description "The class of resizable byte vectors. See " { $link "byte-vectors" } " for information." } ; HELP: { $values { "n" "a positive integer specifying initial capacity" } { "byte-vector" byte-vector } } diff --git a/extra/columns/columns-docs.factor b/extra/columns/columns-docs.factor index 6b2adce9d9..a2f0cccf3b 100644 --- a/extra/columns/columns-docs.factor +++ b/extra/columns/columns-docs.factor @@ -14,7 +14,7 @@ HELP: ( seq n -- column ) { $description "Outputs a new virtual sequence which presents a fixed column of a matrix represented as a sequence of rows." "The " { $snippet "i" } "th element of a column is the " { $snippet "n" } "th element of the " { $snippet "i" } "th element of" { $snippet "seq" } ". Every element of " { $snippet "seq" } " must be a sequence, and all sequences must have equal length." } { $examples { $example - "USING: arrays prettyprint sequences ;" + "USING: arrays prettyprint columns ;" "{ { 1 2 3 } { 4 5 6 } { 7 8 9 } } 0 >array ." "{ 1 4 7 }" } diff --git a/extra/float-vectors/float-vectors-docs.factor b/extra/float-vectors/float-vectors-docs.factor index 8d25da54be..5e06f05a2b 100755 --- a/extra/float-vectors/float-vectors-docs.factor +++ b/extra/float-vectors/float-vectors-docs.factor @@ -3,7 +3,7 @@ float-vectors.private combinators ; IN: float-vectors ARTICLE: "float-vectors" "Float vectors" -"A float vector is a resizable mutable sequence of unsigned floats. The literal syntax is covered in " { $link "syntax-float-vectors" } ". Float vector words are found in the " { $vocab-link "float-vectors" } " vocabulary." +"A float vector is a resizable mutable sequence of unsigned floats. Float vector words are found in the " { $vocab-link "float-vectors" } " vocabulary." $nl "Float vectors form a class:" { $subsection float-vector } @@ -19,7 +19,7 @@ $nl ABOUT: "float-vectors" HELP: float-vector -{ $description "The class of resizable float vectors. See " { $link "syntax-float-vectors" } " for syntax and " { $link "float-vectors" } " for general information." } ; +{ $description "The class of resizable float vectors. See " { $link "float-vectors" } " for information." } ; HELP: { $values { "n" "a positive integer specifying initial capacity" } { "float-vector" float-vector } } From ca1484b94c72b372081483c0e00485ddc1cde38a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 23 Apr 2008 17:07:37 -0500 Subject: [PATCH 058/270] fix ffi test --- core/alien/compiler/compiler-tests.factor | 4 ++-- vm/ffi_test.c | 4 ++-- vm/ffi_test.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/alien/compiler/compiler-tests.factor b/core/alien/compiler/compiler-tests.factor index 57bf163443..5d847e364f 100755 --- a/core/alien/compiler/compiler-tests.factor +++ b/core/alien/compiler/compiler-tests.factor @@ -364,9 +364,9 @@ FUNCTION: ulonglong ffi_test_38 ( ulonglong x, ulonglong y ) ; + + 1+ ] alien-callback ; -FUNCTION: void int_ffi_test_36_point_5 ( ) ; +FUNCTION: void ffi_test_36_point_5 ( ) ; -[ ] [ int_ffi_test_36_point_5 ] unit-test +[ ] [ ffi_test_36_point_5 ] unit-test FUNCTION: int ffi_test_37 ( void* func ) ; diff --git a/vm/ffi_test.c b/vm/ffi_test.c index 4293a6bbae..5cdfbb2a9e 100755 --- a/vm/ffi_test.c +++ b/vm/ffi_test.c @@ -253,9 +253,9 @@ double ffi_test_36(struct test_struct_12 x) static int global_var; -void int_ffi_test_36_point_5(void) +void ffi_test_36_point_5(void) { - printf("int_ffi_test_36_point_5\n"); + printf("ffi_test_36_point_5\n"); global_var = 0; } diff --git a/vm/ffi_test.h b/vm/ffi_test.h index d455d999b1..0f51092d25 100755 --- a/vm/ffi_test.h +++ b/vm/ffi_test.h @@ -62,7 +62,7 @@ struct test_struct_12 { int a; double x; }; DLLEXPORT double ffi_test_36(struct test_struct_12 x); -DLLEXPORT void int_ffi_test_36_point_5(void); +DLLEXPORT void ffi_test_36_point_5(void); DLLEXPORT int ffi_test_37(int (*f)(int, int, int)); From d9efbb550dde98f29a2b1f7f042e2e606de2af96 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 23 Apr 2008 19:40:17 -0500 Subject: [PATCH 059/270] Fix db inference --- extra/db/db-tests.factor | 1 + extra/db/db.factor | 1 + extra/db/tuples/tuples-tests.factor | 5 ++++- extra/db/tuples/tuples.factor | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/extra/db/db-tests.factor b/extra/db/db-tests.factor index 9c32f9e326..0d95e3aea7 100755 --- a/extra/db/db-tests.factor +++ b/extra/db/db-tests.factor @@ -3,3 +3,4 @@ USING: tools.test db kernel ; { 1 0 } [ [ drop ] query-each ] must-infer-as { 1 1 } [ [ ] query-map ] must-infer-as +{ 2 0 } [ [ ] with-db ] must-infer-as diff --git a/extra/db/db.factor b/extra/db/db.factor index 82193ed467..91128a7ffb 100755 --- a/extra/db/db.factor +++ b/extra/db/db.factor @@ -131,6 +131,7 @@ M: nonthrowable execute-statement* ( statement type -- ) : with-db ( db seq quot -- ) >r make-db db-open db r> [ db get swap [ drop ] swap compose with-disposal ] curry with-variable ; + inline : default-query ( query -- result-set ) query-results [ [ sql-row ] query-map ] with-disposal ; diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 32562a4ae8..557241f3c9 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -40,7 +40,7 @@ SYMBOL: person4 [ 1 ] [ person1 get person-the-id ] unit-test - 200 person1 get set-person-the-number + [ ] [ 200 person1 get set-person-the-number ] unit-test [ ] [ person1 get update-tuple ] unit-test @@ -363,3 +363,6 @@ TUPLE: does-not-persist ; \ delete-tuple must-infer \ select-tuple must-infer \ define-persistent must-infer +\ ensure-table must-infer +\ create-table must-infer +\ drop-table must-infer diff --git a/extra/db/tuples/tuples.factor b/extra/db/tuples/tuples.factor index fd4cfb906f..ce2236d23b 100755 --- a/extra/db/tuples/tuples.factor +++ b/extra/db/tuples/tuples.factor @@ -105,7 +105,7 @@ M: retryable execute-statement* ( statement type -- ) [ with-disposal ] curry each ] [ with-disposal - ] if ; + ] if ; inline : create-table ( class -- ) create-sql-statement [ execute-statement ] with-disposals ; From 358bbab86171e248dc202018333a9cbd6e8f5759 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 23 Apr 2008 22:23:22 -0500 Subject: [PATCH 060/270] fix timestamps in db --- extra/db/postgresql/lib/lib.factor | 15 ++++++++++----- extra/db/sqlite/lib/lib.factor | 8 ++++---- extra/db/tuples/tuples-tests.factor | 25 +++++++++++++++++++++---- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/extra/db/postgresql/lib/lib.factor b/extra/db/postgresql/lib/lib.factor index d270e6f40d..436d701803 100755 --- a/extra/db/postgresql/lib/lib.factor +++ b/extra/db/postgresql/lib/lib.factor @@ -69,6 +69,11 @@ M: postgresql-result-null summary ( obj -- str ) : malloc-byte-array/length [ malloc-byte-array dup free-always ] [ length ] bi ; +: default-param-value + number>string* dup [ + utf8 malloc-string dup free-always + ] when 0 ; + : param-values ( statement -- seq seq2 ) [ bind-params>> ] [ in-params>> ] bi [ @@ -77,11 +82,11 @@ M: postgresql-result-null summary ( obj -- str ) dup [ object>bytes malloc-byte-array/length ] [ 0 ] if ] } { BLOB [ dup [ malloc-byte-array/length ] [ 0 ] if ] } - [ - drop number>string* dup [ - utf8 malloc-string dup free-always - ] when 0 - ] + { DATE [ dup [ timestamp>ymd ] when default-param-value ] } + { TIME [ dup [ timestamp>hms ] when default-param-value ] } + { DATETIME [ dup [ timestamp>ymdhms ] when default-param-value ] } + { TIMESTAMP [ dup [ timestamp>ymdhms ] when default-param-value ] } + [ drop default-param-value ] } case 2array ] 2map flip dup empty? [ drop f f diff --git a/extra/db/sqlite/lib/lib.factor b/extra/db/sqlite/lib/lib.factor index b6078fc983..9f29b9e6fb 100755 --- a/extra/db/sqlite/lib/lib.factor +++ b/extra/db/sqlite/lib/lib.factor @@ -97,10 +97,10 @@ IN: db.sqlite.lib { TEXT [ sqlite-bind-text-by-name ] } { VARCHAR [ sqlite-bind-text-by-name ] } { DOUBLE [ sqlite-bind-double-by-name ] } - { DATE [ sqlite-bind-text-by-name ] } - { TIME [ sqlite-bind-text-by-name ] } - { DATETIME [ sqlite-bind-text-by-name ] } - { TIMESTAMP [ sqlite-bind-text-by-name ] } + { DATE [ timestamp>ymd sqlite-bind-text-by-name ] } + { TIME [ timestamp>hms sqlite-bind-text-by-name ] } + { DATETIME [ timestamp>ymdhms sqlite-bind-text-by-name ] } + { TIMESTAMP [ timestamp>ymdhms sqlite-bind-text-by-name ] } { BLOB [ sqlite-bind-blob-by-name ] } { FACTOR-BLOB [ object>bytes diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 32562a4ae8..b166bdc28c 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -121,8 +121,16 @@ SYMBOL: person4 } define-persistent "billy" 10 3.14 f f f f f person1 set "johnny" 10 3.14 f f f f f person2 set - "teddy" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" B{ 115 116 111 114 101 105 110 97 98 108 111 98 } f person3 set - "eddie" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; + "teddy" 10 3.14 + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } + B{ 115 116 111 114 101 105 110 97 98 108 111 98 } f person3 set + "eddie" 10 3.14 + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } + f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; : assigned-person-schema ( -- ) person "PERSON" @@ -139,8 +147,17 @@ SYMBOL: person4 } define-persistent 1 "billy" 10 3.14 f f f f f person1 set 2 "johnny" 10 3.14 f f f f f person2 set - 3 "teddy" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" B{ 115 116 111 114 101 105 110 97 98 108 111 98 } f person3 set - 4 "eddie" 10 3.14 "2008-03-05 16:24:11" "2008-11-22" "12:34:56" f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; + 3 "teddy" 10 3.14 + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } + B{ 115 116 111 114 101 105 110 97 98 108 111 98 } + f person3 set + 4 "eddie" 10 3.14 + T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } + T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } + f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; TUPLE: paste n summary author channel mode contents timestamp annotations ; TUPLE: annotation n paste-id summary author mode contents ; From 857ecda0eb1454d95b2997b4d9f82d921291b220 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 24 Apr 2008 02:48:48 -0500 Subject: [PATCH 061/270] Improve error messages for mirrors --- core/debugger/debugger.factor | 6 +++++- core/mirrors/mirrors-docs.factor | 4 ---- core/mirrors/mirrors-tests.factor | 14 +++++++++++++- core/mirrors/mirrors.factor | 29 ++++++++++++++--------------- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/core/debugger/debugger.factor b/core/debugger/debugger.factor index 827a5c4e8d..f2740a63a9 100755 --- a/core/debugger/debugger.factor +++ b/core/debugger/debugger.factor @@ -6,7 +6,7 @@ strings io.styles vectors words system splitting math.parser classes.tuple continuations continuations.private combinators generic.math io.streams.duplex classes.builtin classes compiler.units generic.standard vocabs threads threads.private -init kernel.private libc io.encodings accessors ; +init kernel.private libc io.encodings mirrors accessors ; IN: debugger GENERIC: error. ( error -- ) @@ -289,6 +289,10 @@ M: encode-error summary drop "Character encoding error" ; M: decode-error summary drop "Character decoding error" ; +M: no-such-slot summary drop "No such slot" ; + +M: immutable-slot summary drop "Slot is immutable" ; + } } ; -HELP: >mirror< -{ $values { "mirror" mirror } { "obj" object } { "slots" "a sequence of " { $link slot-spec } " instances" } } -{ $description "Pushes the object being viewed in the mirror together with its slots." } ; - HELP: make-mirror { $values { "obj" object } { "assoc" assoc } } { $description "Creates an assoc which reflects the internal structure of the object." } ; diff --git a/core/mirrors/mirrors-tests.factor b/core/mirrors/mirrors-tests.factor index 11e5772000..45970c8bae 100755 --- a/core/mirrors/mirrors-tests.factor +++ b/core/mirrors/mirrors-tests.factor @@ -1,4 +1,4 @@ -USING: mirrors tools.test assocs kernel arrays ; +USING: mirrors tools.test assocs kernel arrays accessors ; IN: mirrors.tests TUPLE: foo bar baz ; @@ -14,3 +14,15 @@ C: foo [ 3 ] [ 3 "baz" 1 2 [ set-at ] keep foo-baz ] unit-test + +[ 3 "hi" 1 2 set-at ] [ + [ no-such-slot? ] + [ name>> "hi" = ] + [ object>> foo? ] tri and and +] must-fail-with + +[ 3 "numerator" 1/2 set-at ] [ + [ immutable-slot? ] + [ name>> "numerator" = ] + [ object>> 1/2 = ] tri and and +] must-fail-with diff --git a/core/mirrors/mirrors.factor b/core/mirrors/mirrors.factor index 02afaf07fc..0a49163075 100755 --- a/core/mirrors/mirrors.factor +++ b/core/mirrors/mirrors.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: assocs hashtables kernel sequences generic words arrays classes slots slots.private classes.tuple math vectors -quotations sorting prettyprint ; +quotations sorting prettyprint accessors ; IN: mirrors : all-slots ( class -- slots ) @@ -16,33 +16,32 @@ TUPLE: mirror object slots ; : ( object -- mirror ) dup object-slots mirror boa ; -: >mirror< ( mirror -- obj slots ) - dup mirror-object swap mirror-slots ; +ERROR: no-such-slot object name ; -: mirror@ ( slot-name mirror -- obj slot-spec ) - >mirror< swapd slot-named ; +ERROR: immutable-slot object name ; M: mirror at* - mirror@ dup [ slot-spec-offset slot t ] [ 2drop f f ] if ; + [ nip object>> ] [ slots>> slot-named ] 2bi + dup [ offset>> slot t ] [ 2drop f f ] if ; M: mirror set-at ( val key mirror -- ) - mirror@ dup [ - dup slot-spec-writer [ - slot-spec-offset set-slot + [ nip object>> ] [ drop ] [ slots>> slot-named ] 2tri dup [ + dup writer>> [ + nip offset>> set-slot ] [ - "Immutable slot" throw + drop immutable-slot ] if ] [ - "No such slot" throw + drop no-such-slot ] if ; M: mirror delete-at ( key mirror -- ) f -rot set-at ; M: mirror >alist ( mirror -- alist ) - >mirror< - [ [ slot-spec-offset slot ] with map ] keep - [ slot-spec-name ] map swap zip ; + [ slots>> [ name>> ] map ] + [ [ object>> ] [ slots>> ] bi [ offset>> slot ] with map ] bi + zip ; M: mirror assoc-size mirror-slots length ; @@ -50,7 +49,7 @@ INSTANCE: mirror assoc : sort-assoc ( assoc -- alist ) >alist - [ dup first unparse-short swap ] { } map>assoc + [ [ first unparse-short ] keep ] { } map>assoc sort-keys values ; GENERIC: make-mirror ( obj -- assoc ) From 916ed96ffb81b052ad9cdcbb41e982a64664c0ae Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Tue, 22 Apr 2008 01:44:50 -0700 Subject: [PATCH 062/270] Add project-euler.151 --- extra/project-euler/151/151.factor | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 extra/project-euler/151/151.factor diff --git a/extra/project-euler/151/151.factor b/extra/project-euler/151/151.factor new file mode 100644 index 0000000000..85aad116b4 --- /dev/null +++ b/extra/project-euler/151/151.factor @@ -0,0 +1,40 @@ +! Copyright (c) 2008 Eric Mertens +! See http://factorcode.org/license.txt for BSD license. +USING: sequences combinators kernel sequences.lib math assocs namespaces ; +IN: project-euler.151 + +SYMBOL: table + +: (pick-sheet) ( seq i -- newseq ) + [ + <=> sgn + { + { -1 [ ] } + { 0 [ 1- ] } + { 1 [ 1+ ] } + } case + ] curry map-index ; + +DEFER: (euler151) + +: pick-sheet ( seq i -- res ) + 2dup swap nth dup zero? [ + 3drop 0 + ] [ + [ (pick-sheet) (euler151) ] dip * + ] if ; + +: (euler151) ( x -- y ) + table get [ { + { { 0 0 0 1 } [ 0 ] } + { { 0 0 1 0 } [ { 0 0 0 1 } (euler151) 1+ ] } + { { 0 1 0 0 } [ { 0 0 1 1 } (euler151) 1+ ] } + { { 1 0 0 0 } [ { 0 1 1 1 } (euler151) 1+ ] } + [ [ dup length [ pick-sheet ] with map sum ] [ sum ] bi / ] + } case ] cache ; + +: euler151 ( -- n ) + [ + H{ } clone table set + { 1 1 1 1 } (euler151) + ] with-scope ; From 57a15fb363f5f03c8f49e033879bb755763d9299 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Tue, 22 Apr 2008 01:45:29 -0700 Subject: [PATCH 063/270] Add project-euler.100 --- extra/project-euler/100/100.factor | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 extra/project-euler/100/100.factor diff --git a/extra/project-euler/100/100.factor b/extra/project-euler/100/100.factor new file mode 100644 index 0000000000..d2d396a0e1 --- /dev/null +++ b/extra/project-euler/100/100.factor @@ -0,0 +1,7 @@ +USING: kernel sequences math.functions math ; +IN: project-euler.100 + +: euler100 ( -- n ) + 1 1 + [ dup dup 1- * 2 * 10 24 ^ <= ] + [ tuck 6 * swap - 2 - ] [ ] while nip ; From 6fa498f5cb2d653583f32cb932120bfb0ee8b60c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 24 Apr 2008 14:49:31 -0500 Subject: [PATCH 064/270] Add 'short' word --- extra/sequences/lib/lib.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index b186ee7777..40768e58e2 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -236,3 +236,6 @@ PRIVATE> : remove-nth ( seq n -- seq' ) cut-slice 1 tail-slice append ; + +: short ( seq n -- seq n' ) + over length min ; inline From b1016e6ea5355cb867c5f1a2af22c16916aca15f Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 24 Apr 2008 19:46:52 -0500 Subject: [PATCH 065/270] and mmaped-file use normalize-path now --- extra/io/monitors/monitors.factor | 2 +- extra/io/unix/mmap/mmap.factor | 4 ++-- extra/io/windows/mmap/mmap.factor | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/extra/io/monitors/monitors.factor b/extra/io/monitors/monitors.factor index 863c8fc95c..fb404f24f5 100755 --- a/extra/io/monitors/monitors.factor +++ b/extra/io/monitors/monitors.factor @@ -39,7 +39,7 @@ M: monitor set-timeout (>>timeout) ; HOOK: (monitor) io-backend ( path recursive? mailbox -- monitor ) : ( path recursive? -- monitor ) - (monitor) ; + >r normalize-path r> (monitor) ; : next-change ( monitor -- path changed ) [ queue>> ] [ timeout ] bi mailbox-get-timeout first2 ; diff --git a/extra/io/unix/mmap/mmap.factor b/extra/io/unix/mmap/mmap.factor index 2815a49cd3..332c1927c8 100755 --- a/extra/io/unix/mmap/mmap.factor +++ b/extra/io/unix/mmap/mmap.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: alien io io.files kernel math system unix io.unix.backend -io.mmap ; +io.mmap io.backend ; IN: io.unix.mmap : open-r/w ( path -- fd ) O_RDWR file-mode open dup io-error ; @@ -11,7 +11,7 @@ IN: io.unix.mmap over MAP_FAILED = [ close (io-error) ] when ; M: unix ( path length -- obj ) - swap >r + swap normalize-path >r dup PROT_READ PROT_WRITE bitor MAP_FILE MAP_SHARED bitor r> mmap-open f mapped-file boa ; diff --git a/extra/io/windows/mmap/mmap.factor b/extra/io/windows/mmap/mmap.factor index 0164ed1697..96b68d5a6d 100755 --- a/extra/io/windows/mmap/mmap.factor +++ b/extra/io/windows/mmap/mmap.factor @@ -61,6 +61,7 @@ M: wince with-privileges nip call ; : mmap-open ( path access-mode create-mode flProtect access -- handle handle address ) + >r >r >r >r normalize-path r> r> r> r> { "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [ >r >r 0 open-file dup f r> 0 0 f CreateFileMapping [ win32-error=0/f ] keep From e5575e0dc076979eba0aba6c0873b7d1a4b70751 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 24 Apr 2008 20:13:18 -0500 Subject: [PATCH 066/270] use host-name if smtp-host symbol not set --- extra/smtp/smtp.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/smtp/smtp.factor b/extra/smtp/smtp.factor index d565117e5f..4d548738d2 100755 --- a/extra/smtp/smtp.factor +++ b/extra/smtp/smtp.factor @@ -131,7 +131,7 @@ M: email clone "-" % millis # "@" % - smtp-domain get % + smtp-domain get [ host-name ] unless* % ">" % ] "" make ; From 9318726fc23c78a9248480285583f7dd2be5a4ee Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 24 Apr 2008 20:16:45 -0500 Subject: [PATCH 067/270] use normalize-path in mmap tests --- extra/io/mmap/mmap-tests.factor | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/extra/io/mmap/mmap-tests.factor b/extra/io/mmap/mmap-tests.factor index a00f7cd92b..da3ed38688 100755 --- a/extra/io/mmap/mmap-tests.factor +++ b/extra/io/mmap/mmap-tests.factor @@ -2,9 +2,11 @@ USING: io io.mmap io.files kernel tools.test continuations sequences io.encodings.ascii accessors ; IN: io.mmap.tests -[ "mmap-test-file.txt" resource-path delete-file ] ignore-errors -[ ] [ "12345" "mmap-test-file.txt" resource-path ascii set-file-contents ] unit-test -[ ] [ "mmap-test-file.txt" resource-path dup file-info size>> [ CHAR: 2 0 pick set-nth drop ] with-mapped-file ] unit-test -[ 5 ] [ "mmap-test-file.txt" resource-path dup file-info size>> [ length ] with-mapped-file ] unit-test -[ "22345" ] [ "mmap-test-file.txt" resource-path ascii file-contents ] unit-test -[ "mmap-test-file.txt" resource-path delete-file ] ignore-errors +[ "resource:mmap-test-file.txt" delete-file ] ignore-errors +[ ] [ "12345" "resource:mmap-test-file.txt" ascii set-file-contents ] unit-test +[ ] [ "resource:mmap-test-file.txt" dup file-info size>> [ CHAR: 2 0 pick set-nth drop ] with-mapped-file ] unit-test +[ 5 ] [ "resource:mmap-test-file.txt" dup file-info size>> [ length ] with-mapped-file ] unit-test +[ "22345" ] [ "resource:mmap-test-file.txt" ascii file-contents ] unit-test +[ "resource:mmap-test-file.txt" delete-file ] ignore-errors + + From ad0139ac0c847421474a3808ed309bef6561a059 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 00:23:49 -0500 Subject: [PATCH 068/270] default vocab is now f when parsing files --- core/parser/parser-docs.factor | 16 +++++++++++----- core/parser/parser.factor | 17 ++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/core/parser/parser-docs.factor b/core/parser/parser-docs.factor index 23363c30ad..b69985fb1d 100755 --- a/core/parser/parser-docs.factor +++ b/core/parser/parser-docs.factor @@ -51,9 +51,11 @@ ARTICLE: "vocabulary-search-errors" "Word lookup errors" ARTICLE: "vocabulary-search" "Vocabulary search path" "When the parser reads a token, it attempts to look up a word named by that token. The lookup is performed by searching each vocabulary in the search path, in order." $nl -"For a source file the vocabulary search path starts off with two vocabularies:" -{ $code "syntax\nscratchpad" } -"The " { $vocab-link "syntax" } " vocabulary consists of a set of parsing words for reading Factor data and defining new words. The " { $vocab-link "scratchpad" } " vocabulary is the default vocabulary for new word definitions." +"For a source file the vocabulary search path starts off with one vocabulary:" +{ $code "syntax" } +"The " { $vocab-link "syntax" } " vocabulary consists of a set of parsing words for reading Factor data and defining new words." +$nl +"In the listener, the " { $vocab-link "scratchpad" } " is the default vocabulary for new word definitions. However, when loading source files, there is no default vocabulary. Defining words before declaring a vocabulary with " { $link POSTPONE: IN: } " results in an error." $nl "At the interactive listener, the default search path contains many more vocabularies. Details on the default search path and parser invocation are found in " { $link "parser" } "." $nl @@ -294,6 +296,10 @@ HELP: use HELP: in { $var-description "A variable holding the name of the current vocabulary for new definitions." } ; +HELP: current-vocab +{ $values { "str" "a vocabulary" } } +{ $description "Returns the vocabulary stored in the " { $link in } " symbol. Throws an error if the current vocabulary is " { $link f } "." } ; + HELP: (use+) { $values { "vocab" "an assoc mapping strings to words" } } { $description "Adds an assoc at the front of the search path." } @@ -323,7 +329,7 @@ HELP: set-in $parsing-note ; HELP: create-in -{ $values { "string" "a word name" } { "word" "a new word" } } +{ $values { "str" "a word name" } { "word" "a new word" } } { $description "Creates a word in the current vocabulary. Until re-defined, the word throws an error when invoked." } $parsing-note ; @@ -451,7 +457,7 @@ HELP: bootstrap-syntax HELP: with-file-vocabs { $values { "quot" quotation } } -{ $description "Calls the quotation in a scope with the initial the vocabulary search path for parsing a file. This consists of the " { $snippet "syntax" } " vocabulary together with the " { $snippet "scratchpad" } " vocabulary." } ; +{ $description "Calls the quotation in a scope with the initial the vocabulary search path for parsing a file. This consists of just the " { $snippet "syntax" } " vocabulary." } ; HELP: parse-fresh { $values { "lines" "a sequence of strings" } { "quot" quotation } } diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 7639ebaa69..961fa89d8f 100755 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -233,8 +233,16 @@ PREDICATE: unexpected-eof < unexpected : parse-tokens ( end -- seq ) 100 swap (parse-tokens) >array ; -: create-in ( string -- word ) - in get create dup set-word dup save-location ; +ERROR: no-current-vocab ; + +M: no-current-vocab summary ( obj -- ) + drop "Current vocabulary is f, use IN:" ; + +: current-vocab ( -- str ) + in get [ no-current-vocab ] unless* ; + +: create-in ( str -- word ) + current-vocab create dup set-word dup save-location ; : CREATE ( -- word ) scan create-in ; @@ -243,7 +251,7 @@ PREDICATE: unexpected-eof < unexpected : CREATE-WORD ( -- word ) CREATE dup reset-generic ; : create-class-in ( word -- word ) - in get create + current-vocab create dup save-class-location dup predicate-word dup set-word save-location ; @@ -440,8 +448,7 @@ SYMBOL: bootstrap-syntax : with-file-vocabs ( quot -- ) [ - "scratchpad" in set - { "syntax" "scratchpad" } set-use + f in set { "syntax" } set-use bootstrap-syntax get [ use get push ] when* call ] with-scope ; inline From b440bda681762dfca5f0eeea84121d62decb5a36 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 00:25:37 -0500 Subject: [PATCH 069/270] error message --- extra/math/miller-rabin/miller-rabin.factor | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extra/math/miller-rabin/miller-rabin.factor b/extra/math/miller-rabin/miller-rabin.factor index 7835277b9b..a1f90d74c9 100755 --- a/extra/math/miller-rabin/miller-rabin.factor +++ b/extra/math/miller-rabin/miller-rabin.factor @@ -1,4 +1,4 @@ -USING: combinators combinators.lib io locals kernel math +eSING: combinators combinators.lib io locals kernel math math.functions math.ranges namespaces random sequences hashtables sets ; IN: math.miller-rabin @@ -76,7 +76,9 @@ TUPLE: miller-rabin-bounds ; : find-relative-prime ( n -- p ) dup random find-relative-prime* ; +ERROR: too-few-primes ; + : unique-primes ( numbits n -- seq ) #! generate two primes - over 5 < [ "not enough primes below 5 bits" throw ] when + over 5 < [ too-few-primes ] when [ [ drop random-prime ] with map ] [ all-unique? ] generate ; From 13c2e444a8d53dcd42d8e49be369a240adb95337 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 00:59:44 -0500 Subject: [PATCH 070/270] normalize-path on windows file monitor --- extra/io/monitors/monitors.factor | 2 +- extra/io/windows/nt/monitors/monitors.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/io/monitors/monitors.factor b/extra/io/monitors/monitors.factor index fb404f24f5..863c8fc95c 100755 --- a/extra/io/monitors/monitors.factor +++ b/extra/io/monitors/monitors.factor @@ -39,7 +39,7 @@ M: monitor set-timeout (>>timeout) ; HOOK: (monitor) io-backend ( path recursive? mailbox -- monitor ) : ( path recursive? -- monitor ) - >r normalize-path r> (monitor) ; + (monitor) ; : next-change ( monitor -- path changed ) [ queue>> ] [ timeout ] bi mailbox-get-timeout first2 ; diff --git a/extra/io/windows/nt/monitors/monitors.factor b/extra/io/windows/nt/monitors/monitors.factor index 4c2277acb9..2397d207b9 100755 --- a/extra/io/windows/nt/monitors/monitors.factor +++ b/extra/io/windows/nt/monitors/monitors.factor @@ -98,7 +98,7 @@ TUPLE: win32-monitor < monitor port ; M:: winnt (monitor) ( path recursive? mailbox -- monitor ) [ - path mailbox win32-monitor new-monitor + path normalize-path mailbox win32-monitor new-monitor path open-directory \ win32-monitor-port recursive? >>recursive >>port From 9e3cab4327d61741a3e4b9a50393da1690644a8d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 01:10:40 -0500 Subject: [PATCH 071/270] move normalize-path to (mapped-file) is now the hook --- extra/io/mmap/mmap.factor | 5 ++++- extra/io/unix/mmap/mmap.factor | 4 ++-- extra/io/windows/mmap/mmap.factor | 3 +-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/extra/io/mmap/mmap.factor b/extra/io/mmap/mmap.factor index 59246115cf..a07443783c 100755 --- a/extra/io/mmap/mmap.factor +++ b/extra/io/mmap/mmap.factor @@ -21,7 +21,10 @@ M: mapped-file set-nth-unsafe INSTANCE: mapped-file sequence -HOOK: io-backend ( path length -- mmap ) +HOOK: (mapped-file) io-backend ( path length -- mmap ) + +: ( path length -- mmap ) + >r normalize-path r> (mapped-file) ; HOOK: close-mapped-file io-backend ( mmap -- ) diff --git a/extra/io/unix/mmap/mmap.factor b/extra/io/unix/mmap/mmap.factor index 332c1927c8..72ff107f8f 100755 --- a/extra/io/unix/mmap/mmap.factor +++ b/extra/io/unix/mmap/mmap.factor @@ -10,8 +10,8 @@ IN: io.unix.mmap >r f -roll r> open-r/w [ 0 mmap ] keep over MAP_FAILED = [ close (io-error) ] when ; -M: unix ( path length -- obj ) - swap normalize-path >r +M: unix (mapped-file) ( path length -- obj ) + swap >r dup PROT_READ PROT_WRITE bitor MAP_FILE MAP_SHARED bitor r> mmap-open f mapped-file boa ; diff --git a/extra/io/windows/mmap/mmap.factor b/extra/io/windows/mmap/mmap.factor index 96b68d5a6d..dc29405b12 100755 --- a/extra/io/windows/mmap/mmap.factor +++ b/extra/io/windows/mmap/mmap.factor @@ -61,7 +61,6 @@ M: wince with-privileges nip call ; : mmap-open ( path access-mode create-mode flProtect access -- handle handle address ) - >r >r >r >r normalize-path r> r> r> r> { "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [ >r >r 0 open-file dup f r> 0 0 f CreateFileMapping [ win32-error=0/f ] keep @@ -71,7 +70,7 @@ M: wince with-privileges dup close-later ] with-privileges ; -M: windows ( path length -- mmap ) +M: windows (mapped-file) ( path length -- mmap ) [ swap GENERIC_WRITE GENERIC_READ bitor From c56cf86793f080aa0728e15b4f67c12fecebfc88 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Thu, 24 Apr 2008 23:11:21 -0700 Subject: [PATCH 072/270] make sequences.lib.replicate inline --- extra/sequences/lib/lib.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index fe2c660d54..e534a204b1 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -133,7 +133,7 @@ MACRO: firstn ( n -- ) : replicate ( seq quot -- newseq ) #! quot: ( -- obj ) - [ drop ] swap compose map ; + [ drop ] swap compose map ; inline ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! From 9f97ae2b0c348304be99b08191b8bd2d3ddf047a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 01:54:42 -0500 Subject: [PATCH 073/270] add unit test for parser --- core/parser/parser-tests.factor | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/parser/parser-tests.factor b/core/parser/parser-tests.factor index ab193e1c02..20d51f3461 100755 --- a/core/parser/parser-tests.factor +++ b/core/parser/parser-tests.factor @@ -3,6 +3,7 @@ io.streams.string namespaces classes effects source-files assocs sequences strings io.files definitions continuations sorting classes.tuple compiler.units debugger vocabs vocabs.loader accessors ; + IN: parser.tests [ @@ -429,3 +430,5 @@ must-fail-with [ "USE: this-better-not-exist" eval ] must-fail + +[ ": foo ;" eval ] [ error>> no-current-vocab? ] must-fail-with From a9c9f268220e2c86cce26511baa142acea338a95 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 01:55:24 -0500 Subject: [PATCH 074/270] remove extra using --- extra/io/unix/mmap/mmap.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/io/unix/mmap/mmap.factor b/extra/io/unix/mmap/mmap.factor index 72ff107f8f..ada1f94d87 100755 --- a/extra/io/unix/mmap/mmap.factor +++ b/extra/io/unix/mmap/mmap.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: alien io io.files kernel math system unix io.unix.backend -io.mmap io.backend ; +io.mmap ; IN: io.unix.mmap : open-r/w ( path -- fd ) O_RDWR file-mode open dup io-error ; From a8e8b0533901a75f33d87f5495d9383b74d41ebf Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 25 Apr 2008 03:23:47 -0500 Subject: [PATCH 075/270] Improved HTTP server dispatcher --- extra/http/http-tests.factor | 62 ++++- .../http/server/actions/actions-tests.factor | 26 +- extra/http/server/actions/actions.factor | 21 +- extra/http/server/auth/login/login.factor | 16 +- .../server/callbacks/callbacks-tests.factor | 8 +- extra/http/server/components/code/code.factor | 18 ++ .../http/server/components/components.factor | 23 ++ extra/http/server/server-tests.factor | 82 +++++- extra/http/server/server.factor | 75 ++++-- .../server/sessions/sessions-tests.factor | 10 +- extra/http/server/static/static.factor | 32 +-- .../http/server/templating/chloe/chloe.factor | 3 +- .../factor-website/factor-website.factor | 51 +++- extra/webapps/factor-website/page.xml | 14 + extra/webapps/pastebin/annotation.xml | 23 ++ extra/webapps/pastebin/authors.txt | 1 + extra/webapps/pastebin/new-annotation.xml | 25 ++ extra/webapps/pastebin/new-paste.xml | 23 ++ extra/webapps/pastebin/paste-list.xml | 15 ++ extra/webapps/pastebin/paste-summary.xml | 11 + extra/webapps/pastebin/paste.xml | 27 ++ extra/webapps/pastebin/pastebin.css | 7 + extra/webapps/pastebin/pastebin.factor | 253 ++++++++++++++++++ extra/webapps/pastebin/pastebin.xml | 29 ++ extra/webapps/planet/admin.xml | 3 +- extra/webapps/planet/blog-admin-link.xml | 2 +- extra/webapps/planet/edit-blog.xml | 10 +- extra/webapps/planet/planet.factor | 45 +--- extra/webapps/planet/planet.xml | 13 +- extra/webapps/planet/view-blog.xml | 41 --- extra/webapps/todo/edit-todo.xml | 10 +- extra/webapps/todo/todo-summary.xml | 4 +- extra/webapps/todo/todo.css | 12 - extra/webapps/todo/todo.factor | 25 +- extra/webapps/todo/todo.xml | 10 +- extra/webapps/todo/view-todo.xml | 4 +- 36 files changed, 783 insertions(+), 251 deletions(-) create mode 100644 extra/http/server/components/code/code.factor create mode 100644 extra/webapps/pastebin/annotation.xml create mode 100755 extra/webapps/pastebin/authors.txt create mode 100644 extra/webapps/pastebin/new-annotation.xml create mode 100644 extra/webapps/pastebin/new-paste.xml create mode 100644 extra/webapps/pastebin/paste-list.xml create mode 100644 extra/webapps/pastebin/paste-summary.xml create mode 100644 extra/webapps/pastebin/paste.xml create mode 100644 extra/webapps/pastebin/pastebin.css create mode 100644 extra/webapps/pastebin/pastebin.factor create mode 100644 extra/webapps/pastebin/pastebin.xml delete mode 100644 extra/webapps/planet/view-blog.xml diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 3a50630335..473bc964d3 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -133,16 +133,20 @@ read-response-test-1' 1array [ ] unit-test ! Live-fire exercise -USING: http.server http.server.static http.server.actions -http.client io.server io.files io accessors namespaces threads +USING: http.server http.server.static http.server.sessions +http.server.actions http.server.auth.login http.client +io.server io.files io accessors namespaces threads io.encodings.ascii ; +: add-quit-action + + [ stop-server "text/html" [ "Goodbye" write ] >>body ] >>display + "quit" add-responder ; + [ ] [ [ - - [ stop-server "text/html" [ "Goodbye" write ] >>body ] >>display - "quit" add-responder + add-quit-action "extra/http/test" resource-path >>default "nested" add-responder @@ -176,3 +180,51 @@ io.encodings.ascii ; [ "Goodbye" ] [ "http://localhost:1237/quit" http-get ] unit-test + +! Dispatcher bugs +[ ] [ + [ + + + + "" add-responder + add-quit-action + + "a" add-main-responder + "d" add-responder + main-responder set + + [ 1237 httpd ] "HTTPD test" spawn drop + ] with-scope +] unit-test + +[ ] [ 1000 sleep ] unit-test + +: 404? [ download-failed? ] [ response>> code>> 404 = ] bi and ; + +! This should give a 404 not an infinite redirect loop +[ "http://localhost:1237/d/blah" http-get ] [ 404? ] must-fail-with + +! This should give a 404 not an infinite redirect loop +[ "http://localhost:1237/blah/" http-get ] [ 404? ] must-fail-with + +[ "Goodbye" ] [ "http://localhost:1237/quit" http-get ] unit-test + +[ ] [ + [ + + [ "text/plain" [ "Hi" write ] >>body ] >>display + + "" add-responder + add-quit-action + main-responder set + + [ 1237 httpd ] "HTTPD test" spawn drop + ] with-scope +] unit-test + +[ ] [ 1000 sleep ] unit-test + +[ "Hi" ] [ "http://localhost:1237/" http-get ] unit-test + +[ "Goodbye" ] [ "http://localhost:1237/quit" http-get ] unit-test diff --git a/extra/http/server/actions/actions-tests.factor b/extra/http/server/actions/actions-tests.factor index 90e632d7f5..615077821a 100755 --- a/extra/http/server/actions/actions-tests.factor +++ b/extra/http/server/actions/actions-tests.factor @@ -1,7 +1,7 @@ -IN: http.server.actions.tests USING: http.server.actions http.server.validators tools.test math math.parser multiline namespaces http io.streams.string http.server sequences splitting accessors ; +IN: http.server.actions.tests [ "a" [ v-number ] { { "a" "123" } } validate-param @@ -25,27 +25,5 @@ blah action-request-test-1 lf>crlf [ read-request ] with-string-reader request set - "/blah" - "action-1" get call-responder -] unit-test - - - [ +append-path get "xxx" get "X" concat append ] >>submit - { { +append-path [ ] } { "xxx" [ v-number ] } } >>post-params -"action-2" set - -STRING: action-request-test-2 -POST http://foo/bar/baz HTTP/1.1 -content-length: 5 -content-type: application/x-www-form-urlencoded - -xxx=4 -; - -[ "/blahXXXX" ] [ - action-request-test-2 lf>crlf - [ read-request ] with-string-reader - request set - "/blah" - "action-2" get call-responder + { } "action-1" get call-responder ] unit-test diff --git a/extra/http/server/actions/actions.factor b/extra/http/server/actions/actions.factor index 2b2aaea6a8..bfcbd20cca 100755 --- a/extra/http/server/actions/actions.factor +++ b/extra/http/server/actions/actions.factor @@ -5,7 +5,7 @@ http.server http.server.validators http hashtables namespaces fry continuations locals ; IN: http.server.actions -SYMBOL: +append-path +SYMBOL: +path+ SYMBOL: params @@ -39,12 +39,15 @@ TUPLE: action init display submit get-params post-params ; M: action call-responder ( path action -- response ) '[ - , , - [ +append-path associate request-params assoc-union params set ] - [ action set ] bi* - request get method>> { - { "GET" [ handle-get ] } - { "HEAD" [ handle-get ] } - { "POST" [ handle-post ] } - } case + , [ CHAR: / = ] right-trim empty? [ + , action set + request-params params set + request get method>> { + { "GET" [ handle-get ] } + { "HEAD" [ handle-get ] } + { "POST" [ handle-post ] } + } case + ] [ + <404> + ] if ] with-exit-continuation ; diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 7593f217f7..1b6ceeb51b 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -60,7 +60,7 @@ M: user-saver dispose : successful-login ( user -- response ) logged-in-user sset - post-login-url sget "" or f + post-login-url sget "$login" or f f post-login-url sset ; :: ( -- action ) @@ -162,10 +162,12 @@ SYMBOL: previous-page [ blank-values + logged-in-user sget - dup username>> "username" set-value - dup realname>> "realname" set-value - dup email>> "email" set-value + [ username>> "username" set-value ] + [ realname>> "realname" set-value ] + [ email>> "email" set-value ] + tri ] >>init [ form edit-form ] >>display @@ -190,6 +192,8 @@ SYMBOL: previous-page "realname" value >>realname "email" value >>email + drop + user-profile-changed? on previous-page sget f @@ -329,7 +333,7 @@ SYMBOL: lost-password-from [ f logged-in-user sset - "login" f + "$login/login" f ] >>submit ; ! ! ! Authentication logic @@ -340,7 +344,7 @@ C: protected : show-login-page ( -- response ) request get request-url post-login-url sset - "login" f ; + "$login/login" f ; M: protected call-responder ( path responder -- response ) logged-in-user sget dup [ diff --git a/extra/http/server/callbacks/callbacks-tests.factor b/extra/http/server/callbacks/callbacks-tests.factor index 4cad097cf5..498f120cd8 100755 --- a/extra/http/server/callbacks/callbacks-tests.factor +++ b/extra/http/server/callbacks/callbacks-tests.factor @@ -8,7 +8,7 @@ splitting kernel hashtables continuations ; "GET" >>method request set [ exit-continuation set - "xxx" + { } [ [ "hello" print 123 ] show-final ] >>display call-responder @@ -31,7 +31,7 @@ splitting kernel hashtables continuations ; [ exit-continuation set "GET" >>method request set - "" "r" get call-responder + { } "r" get call-responder ] callcc1 body>> first @@ -44,7 +44,7 @@ splitting kernel hashtables continuations ; [ exit-continuation set - "/" + { } "r" get call-responder ] callcc1 @@ -57,7 +57,7 @@ splitting kernel hashtables continuations ; [ exit-continuation set - "/" + { } "r" get call-responder ] callcc1 ] unit-test diff --git a/extra/http/server/components/code/code.factor b/extra/http/server/components/code/code.factor new file mode 100644 index 0000000000..90b70c7bcc --- /dev/null +++ b/extra/http/server/components/code/code.factor @@ -0,0 +1,18 @@ +! Copyright (C) 2008 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +USING: splitting kernel io sequences xmode.code2html accessors +http.server.components ; +IN: http.server.components.code + +TUPLE: code-renderer < text-renderer mode ; + +: ( mode -- renderer ) + code-renderer new-text-renderer + swap >>mode ; + +M: code-renderer render-view* + [ string-lines ] [ mode>> value ] bi* htmlize-lines ; + +: ( id mode -- component ) + swap + swap >>renderer ; diff --git a/extra/http/server/components/components.factor b/extra/http/server/components/components.factor index 331231dfb3..f0e7955947 100755 --- a/extra/http/server/components/components.factor +++ b/extra/http/server/components/components.factor @@ -336,3 +336,26 @@ TUPLE: list < component ; list swap new-component ; M: list component-string drop ; + +! Choice +TUPLE: choice-renderer choices ; + +C: choice-renderer + +M: choice-renderer render-view* + drop write ; + +M: choice-renderer render-edit* + ; + +TUPLE: choice < string ; + +: ( id choices -- component ) + swap choice new-string + swap >>renderer ; diff --git a/extra/http/server/server-tests.factor b/extra/http/server/server-tests.factor index 346a31f30f..84e873d001 100755 --- a/extra/http/server/server-tests.factor +++ b/extra/http/server/server-tests.factor @@ -1,7 +1,9 @@ USING: http.server tools.test kernel namespaces accessors -io http math sequences assocs ; +io http math sequences assocs arrays classes words ; IN: http.server.tests +\ find-responder must-infer + [ "www.apple.com" >>host @@ -29,7 +31,9 @@ M: mock-responder call-responder "text/plain" ; : check-dispatch ( tag path -- ? ) + H{ } clone base-paths set over off + split-path main-responder get call-responder write-response get ; @@ -44,11 +48,11 @@ M: mock-responder call-responder main-responder set [ "foo" ] [ - "foo" main-responder get find-responder path>> nip + { "foo" } main-responder get find-responder path>> nip ] unit-test [ "bar" ] [ - "bar" main-responder get find-responder path>> nip + { "bar" } main-responder get find-responder path>> nip ] unit-test [ t ] [ "foo" "foo" check-dispatch ] unit-test @@ -60,14 +64,6 @@ M: mock-responder call-responder [ t ] [ "123" "baz/123" check-dispatch ] unit-test [ t ] [ "123" "baz///123" check-dispatch ] unit-test - [ t ] [ - - "baz" >>path - request set - "baz" main-responder get call-responder - dup code>> 300 399 between? >r - header>> "location" swap at "baz/" tail? r> and - ] unit-test ] with-scope [ @@ -77,3 +73,67 @@ M: mock-responder call-responder [ "/default" ] [ "/default" main-responder get find-responder drop ] unit-test ] with-scope + +! Make sure path for default responder isn't chopped +TUPLE: path-check-responder ; + +C: path-check-responder + +M: path-check-responder call-responder + drop + "text/plain" swap >array >>body ; + +[ { "c" } ] [ + H{ } clone base-paths set + + { "b" "c" } + + + >>default + "b" add-responder + call-responder + body>> +] unit-test + +! Test that "" dispatcher works with default>> +[ ] [ + + "" "" add-responder + "bar" "bar" add-responder + "baz" >>default + main-responder set + + [ t ] [ "" "" check-dispatch ] unit-test + [ f ] [ "" "quux" check-dispatch ] unit-test + [ t ] [ "baz" "quux" check-dispatch ] unit-test + [ f ] [ "foo" "bar" check-dispatch ] unit-test + [ t ] [ "bar" "bar" check-dispatch ] unit-test + [ t ] [ "baz" "xxx" check-dispatch ] unit-test +] unit-test + +TUPLE: funny-dispatcher < dispatcher ; + +: funny-dispatcher new-dispatcher ; + +TUPLE: base-path-check-responder ; + +C: base-path-check-responder + +M: base-path-check-responder call-responder + 2drop + "$funny-dispatcher" resolve-base-path + "text/plain" swap >>body ; + +[ ] [ + + + + "c" add-responder + "b" add-responder + "a" add-responder + main-responder set +] unit-test + +[ "/a/b/" ] [ + "a/b/c" split-path main-responder get call-responder body>> +] unit-test diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index d3bd6c6bbe..88a748d949 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -4,9 +4,11 @@ USING: assocs kernel namespaces io io.timeouts strings splitting threads http sequences prettyprint io.server logging calendar html.elements accessors math.parser combinators.lib tools.vocabs debugger html continuations random combinators -destructors io.encodings.8-bit fry ; +destructors io.encodings.8-bit fry classes words ; IN: http.server +! path is a sequence of path component strings + GENERIC: call-responder ( path responder -- response ) : request-params ( -- assoc ) @@ -52,13 +54,39 @@ SYMBOL: 404-responder [ <404> ] 404-responder set-global +SYMBOL: base-paths + +: invert-slice ( slice -- slice' ) + dup slice? [ + [ seq>> ] [ from>> ] bi head-slice + ] [ + drop { } + ] if ; + +: add-base-path ( path dispatcher -- ) + [ invert-slice ] [ class word-name ] bi* + base-paths get set-at ; + SYMBOL: link-hook : modify-query ( query -- query ) link-hook get [ ] or call ; +: base-path ( string -- path ) + dup base-paths get at + [ ] [ "No such responder: " swap append throw ] ?if ; + +: resolve-base-path ( string -- string' ) + "$" ?head [ + [ + "/" split1 >r + base-path [ "/" % % ] each "/" % + r> % + ] "" make + ] when ; + : link>string ( url query -- url' ) - modify-query (link>string) ; + [ resolve-base-path ] [ modify-query ] bi* (link>string) ; : write-link ( url query -- ) link>string write ; @@ -71,8 +99,9 @@ SYMBOL: form-hook : absolute-redirect ( to query -- url ) #! Same host. request get clone - swap [ >>query ] when* - swap url-encode >>path + swap [ >>query ] when* + swap url-encode >>path + [ modify-query ] change-query request-url ; : replace-last-component ( path with -- path' ) @@ -82,13 +111,14 @@ SYMBOL: form-hook request get clone swap [ >>query ] when* swap [ '[ , replace-last-component ] change-path ] when* - dup query>> modify-query >>query + [ modify-query ] change-query request-url ; : derive-url ( to query -- url ) { { [ over "http://" head? ] [ link>string ] } { [ over "/" head? ] [ absolute-redirect ] } + { [ over "$" head? ] [ >r resolve-base-path r> derive-url ] } [ relative-redirect ] } cond ; @@ -113,22 +143,17 @@ TUPLE: dispatcher default responders ; : ( -- dispatcher ) dispatcher new-dispatcher ; -: split-path ( path -- rest first ) - [ CHAR: / = ] left-trim "/" split1 swap ; - : find-responder ( path dispatcher -- path responder ) - over split-path pick responders>> at* - [ >r >r 2drop r> r> ] [ 2drop default>> ] if ; - -: redirect-with-/ ( -- response ) - request get path>> "/" append f ; + over empty? [ + "" over responders>> at* + [ nip ] [ drop default>> ] if + ] [ + over first over responders>> at* + [ >r drop 1 tail-slice r> ] [ drop default>> ] if + ] if ; M: dispatcher call-responder ( path dispatcher -- response ) - over [ - find-responder call-responder - ] [ - 2drop redirect-with-/ - ] if ; + [ add-base-path ] [ find-responder call-responder ] 2bi ; TUPLE: vhost-dispatcher default responders ; @@ -142,15 +167,13 @@ TUPLE: vhost-dispatcher default responders ; M: vhost-dispatcher call-responder ( path dispatcher -- response ) find-vhost call-responder ; -: set-main ( dispatcher name -- dispatcher ) - '[ , f ] - >>default ; - : add-responder ( dispatcher responder path -- dispatcher ) pick responders>> set-at ; : add-main-responder ( dispatcher responder path -- dispatcher ) - [ add-responder ] keep set-main ; + [ add-responder drop ] + [ drop "" add-responder drop ] + [ 2drop ] 3tri ; SYMBOL: main-responder @@ -197,11 +220,15 @@ SYMBOL: exit-continuation : with-exit-continuation ( quot -- ) '[ exit-continuation set @ ] callcc1 exit-continuation off ; +: split-path ( string -- path ) + "/" split [ empty? not ] subset ; + : do-request ( request -- response ) [ + H{ } clone base-paths set [ log-request ] [ request set ] - [ path>> main-responder get call-responder ] tri + [ path>> split-path main-responder get call-responder ] tri [ <404> ] unless* ] [ [ \ do-request log-error ] diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index 26e6927d7c..02dee1f7e0 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -61,7 +61,7 @@ M: foo call-responder "GET" >>method request set - "/etc" "manager" get call-responder + { "etc" } "manager" get call-responder response set ] unit-test @@ -76,7 +76,7 @@ M: foo call-responder "id" get session-id-key set-query-param "/" >>path request set - "/" "manager" get call-responder + { } "manager" get call-responder [ write-response-body drop ] with-string-writer ] with-destructors ; @@ -96,7 +96,7 @@ M: foo call-responder "GET" >>method "/" >>path request set - "/etc" "manager" get call-responder response set + { "etc" } "manager" get call-responder response set [ "1" ] [ [ response get write-response-body drop ] with-string-writer ] unit-test response get ] with-destructors @@ -111,7 +111,7 @@ response set "cookies" get >>cookies "/" >>path request set - "/" "manager" get call-responder + { } "manager" get call-responder [ write-response-body drop ] with-string-writer ] with-destructors ; @@ -134,7 +134,7 @@ response set request set [ - "/" + { } call-responder ] with-destructors response set ] unit-test diff --git a/extra/http/server/static/static.factor b/extra/http/server/static/static.factor index 2d4a97c3c0..1605144b61 100755 --- a/extra/http/server/static/static.factor +++ b/extra/http/server/static/static.factor @@ -69,32 +69,24 @@ TUPLE: file-responder root hook special ; swap '[ , directory. ] >>body ; : find-index ( filename -- path ) - { "index.html" "index.fhtml" } [ append-path ] with map - [ exists? ] find nip ; + "index.html" append-path dup exists? [ drop f ] unless ; : serve-directory ( filename -- response ) - dup "/" tail? [ - dup find-index - [ serve-file ] [ list-directory ] ?if + request get path>> "/" tail? [ + dup + find-index [ serve-file ] [ list-directory ] ?if ] [ - drop request get redirect-with-/ + drop + request get path>> "/" append f ] if ; : serve-object ( filename -- response ) - serving-path dup exists? [ - dup directory? [ serve-directory ] [ serve-file ] if - ] [ - drop <404> - ] if ; + serving-path dup exists? + [ dup directory? [ serve-directory ] [ serve-file ] if ] + [ drop <404> ] + if ; M: file-responder call-responder ( path responder -- response ) file-responder set - dup [ - ".." over subseq? [ - drop <400> - ] [ - serve-object - ] if - ] [ - drop redirect-with-/ - ] if ; + ".." over member? + [ drop <400> ] [ "/" join serve-object ] if ; diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor index 685988dfaf..3793604929 100644 --- a/extra/http/server/templating/chloe/chloe.factor +++ b/extra/http/server/templating/chloe/chloe.factor @@ -104,7 +104,8 @@ SYMBOL: tags : form-start-tag ( tag -- ) hidden-form-field ; diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor index 3483d4321e..d78fd4b6c2 100644 --- a/extra/webapps/factor-website/factor-website.factor +++ b/extra/webapps/factor-website/factor-website.factor @@ -1,21 +1,25 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel sequences io.files io.sockets -db.sqlite smtp namespaces db +USING: accessors kernel sequences assocs io.files io.sockets +namespaces db db.sqlite smtp +http.server http.server.db http.server.sessions http.server.auth.login http.server.auth.providers.db http.server.sessions.storage.db http.server.boilerplate -http.server.templating.chloe ; +http.server.templating.chloe +webapps.pastebin +webapps.planet +webapps.todo ; IN: webapps.factor-website +: test-db "test.db" resource-path sqlite-db ; + : factor-template ( path -- template ) "resource:extra/webapps/factor-website/" swap ".xml" 3append ; -: test-db "todo.db" resource-path sqlite-db ; - : ( responder -- responder' ) users-in-db >>users @@ -28,11 +32,40 @@ IN: webapps.factor-website sessions-in-db >>sessions test-db ; +: ( -- responder ) + ; + +: ( -- responder ) + ; + +: ( -- responder ) + ; + +: init-factor-db ( -- ) + test-db [ + init-users-table + init-sessions-table + + init-pastes-table + init-annotations-table + + init-blog-table + + init-todo-table + ] with-db ; + +: ( -- responder ) + + "todo" add-responder + "pastebin" add-responder + "planet" add-responder ; + : init-factor-website ( -- ) "factorcode.org" 25 smtp-server set-global "todo@factorcode.org" lost-password-from set-global - test-db [ - init-sessions-table - init-users-table - ] with-db ; + init-factor-db + + main-responder set-global + + "planet" main-responder get responders>> at start-update-task ; diff --git a/extra/webapps/factor-website/page.xml b/extra/webapps/factor-website/page.xml index d929042320..2f67b5e857 100644 --- a/extra/webapps/factor-website/page.xml +++ b/extra/webapps/factor-website/page.xml @@ -10,6 +10,8 @@ + + body, button { font:9pt "Lucida Grande", "Lucida Sans Unicode", verdana, geneva, sans-serif; @@ -47,6 +49,18 @@ padding: 5px; border: 1px solid #ccc; } + + .big-field-label { + vertical-align: top; + } + + .description { + border: 1px dashed #ccc; + background-color: #f5f5f5; + padding: 5px; + font-size: 150%; + color: #000000; + } diff --git a/extra/webapps/pastebin/annotation.xml b/extra/webapps/pastebin/annotation.xml new file mode 100644 index 0000000000..af6a835a64 --- /dev/null +++ b/extra/webapps/pastebin/annotation.xml @@ -0,0 +1,23 @@ + + + + +

    Annotation:

    + + + + + +
    Author:
    Mode:
    Date:
    + +
    + +
    + + + + + + + +
    diff --git a/extra/webapps/pastebin/authors.txt b/extra/webapps/pastebin/authors.txt new file mode 100755 index 0000000000..1901f27a24 --- /dev/null +++ b/extra/webapps/pastebin/authors.txt @@ -0,0 +1 @@ +Slava Pestov diff --git a/extra/webapps/pastebin/new-annotation.xml b/extra/webapps/pastebin/new-annotation.xml new file mode 100644 index 0000000000..4afc5cfec5 --- /dev/null +++ b/extra/webapps/pastebin/new-annotation.xml @@ -0,0 +1,25 @@ + + + + + New Annotation + + + + + + + + + + + + + + +
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Leave the captcha blank. Spam-bots will fill it indiscriminantly, so their attempts to register will be blocked.
    + + +
    + +
    diff --git a/extra/webapps/pastebin/new-paste.xml b/extra/webapps/pastebin/new-paste.xml new file mode 100644 index 0000000000..4b2b4a46ce --- /dev/null +++ b/extra/webapps/pastebin/new-paste.xml @@ -0,0 +1,23 @@ + + + + + New Paste + + + + + + + + + + + + + +
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Leave the captcha blank. Spam-bots will fill it indiscriminantly, so their attempts to register will be blocked.
    + + +
    +
    diff --git a/extra/webapps/pastebin/paste-list.xml b/extra/webapps/pastebin/paste-list.xml new file mode 100644 index 0000000000..12b926c7d1 --- /dev/null +++ b/extra/webapps/pastebin/paste-list.xml @@ -0,0 +1,15 @@ + + + + + Pastebin + + + + + + + +
    Summary:Paste by:Date:
    + +
    diff --git a/extra/webapps/pastebin/paste-summary.xml b/extra/webapps/pastebin/paste-summary.xml new file mode 100644 index 0000000000..952d0de73d --- /dev/null +++ b/extra/webapps/pastebin/paste-summary.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/extra/webapps/pastebin/paste.xml b/extra/webapps/pastebin/paste.xml new file mode 100644 index 0000000000..89d1891221 --- /dev/null +++ b/extra/webapps/pastebin/paste.xml @@ -0,0 +1,27 @@ + + + + + Pastebin + +

    Paste:

    + + + + + +
    Author:
    Mode:
    Date:
    + +
    + +
    + + + + + + | + Annotate + + +
    diff --git a/extra/webapps/pastebin/pastebin.css b/extra/webapps/pastebin/pastebin.css new file mode 100644 index 0000000000..16814770a2 --- /dev/null +++ b/extra/webapps/pastebin/pastebin.css @@ -0,0 +1,7 @@ +pre.code { + border:1px dashed #ccc; + background-color:#f5f5f5; + padding:5px; + font-size:150%; + color:#000000; +} diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor new file mode 100644 index 0000000000..4fa8f55ca8 --- /dev/null +++ b/extra/webapps/pastebin/pastebin.factor @@ -0,0 +1,253 @@ +USING: namespaces assocs sorting sequences kernel accessors +hashtables sequences.lib locals db.types db.tuples db +calendar calendar.format rss xml.writer +xmode.catalog +http.server +http.server.crud +http.server.actions +http.server.components +http.server.components.code +http.server.templating.chloe +http.server.boilerplate +http.server.validators +http.server.forms ; +IN: webapps.pastebin + +: ( id -- component ) + modes keys natural-sort ; + +: pastebin-template ( name -- template ) + "resource:extra/webapps/pastebin/" swap ".xml" 3append ; + +TUPLE: paste id summary author mode date contents annotations captcha ; + +paste "PASTE" +{ + { "id" "ID" INTEGER +native-id+ } + { "summary" "SUMMARY" { VARCHAR 256 } +not-null+ } + { "author" "AUTHOR" { VARCHAR 256 } +not-null+ } + { "mode" "MODE" { VARCHAR 256 } +not-null+ } + { "date" "DATE" DATETIME +not-null+ } + { "contents" "CONTENTS" TEXT +not-null+ } +} define-persistent + +: ( id -- paste ) + paste new + swap >>id ; + +: pastes ( -- pastes ) + f select-tuples ; + +TUPLE: annotation aid id summary author mode contents date captcha ; + +annotation "ANNOTATION" +{ + { "aid" "AID" INTEGER +native-id+ } + { "id" "ID" INTEGER +not-null+ } + { "summary" "SUMMARY" { VARCHAR 256 } +not-null+ } + { "author" "AUTHOR" { VARCHAR 256 } +not-null+ } + { "mode" "MODE" { VARCHAR 256 } +not-null+ } + { "date" "DATE" DATETIME +not-null+ } + { "contents" "CONTENTS" TEXT +not-null+ } +} define-persistent + +: ( id aid -- annotation ) + annotation new + swap >>aid + swap >>id ; + +: fetch-annotations ( paste -- paste ) + dup annotations>> [ + dup id>> f select-tuples >>annotations + ] unless ; + +: ( -- form ) + "paste" + "id" + hidden >>renderer + add-field + "aid" + hidden >>renderer + add-field + "annotation" pastebin-template >>view-template + "summary" add-field + "author" add-field + "mode" add-field + "contents" "mode" add-field + "date" add-field ; + +: ( -- form ) + "paste" + "new-annotation" pastebin-template >>edit-template + "id" + hidden >>renderer + t >>required add-field + "summary" + t >>required add-field + "author" + t >>required + add-field + "mode" + "factor" >>default + t >>required + add-field + "contents" "mode" + t >>required add-field + "captcha" add-field ; + +: ( -- form ) + "paste" + "paste" pastebin-template >>view-template + "paste-summary" pastebin-template >>summary-template + "id" + hidden >>renderer add-field + "summary" add-field + "author" add-field + "mode" add-field + "date" add-field + "contents" "mode" add-field + "annotations" +plain+ add-field ; + +: ( -- form ) + "paste" + "new-paste" pastebin-template >>edit-template + "summary" + t >>required add-field + "author" + t >>required add-field + "mode" + "factor" >>default + t >>required + add-field + "contents" "mode" + t >>required add-field + "captcha" add-field ; + +: ( -- form ) + "pastebin" + "paste-list" pastebin-template >>view-template + "pastes" +plain+ add-field ; + +:: ( -- action ) + [let | form [ ] | + + [ + blank-values + + pastes "pastes" set-value + + form view-form + ] >>display + ] ; + +:: ( form ctor next -- action ) + + { { "id" [ v-number ] } } >>get-params + + [ + "id" get f ctor call + + from-tuple form set-defaults + ] >>init + + [ form edit-form ] >>display + + [ + f f ctor call from-tuple + + form validate-form + + values-tuple insert-tuple + + "id" value next + ] >>submit ; + +: pastebin-feed-entries ( -- entries ) + pastes 20 short head [ + [ summary>> ] + [ "$pastebin/view-paste" swap id>> "id" associate link>string ] + [ date>> ] tri + f swap + ] map ; + +: pastebin-feed ( -- feed ) + feed new + "Factor Pastebin" >>title + "http://paste.factorcode.org" >>link + pastebin-feed-entries >>entries ; + +: ( -- action ) + + [ + "text/xml" + [ pastebin-feed feed>xml write-xml ] >>body + ] >>display ; + +:: ( form ctor -- action ) + + { { "id" [ v-number ] } } >>get-params + + [ "id" get ctor call select-tuple fetch-annotations from-tuple ] >>init + + [ form view-form ] >>display ; + +:: ( ctor next -- action ) + + { { "id" [ v-number ] } } >>post-params + + [ + "id" get ctor call delete-tuple + + "id" get f select-tuples [ delete-tuple ] each + + next f + ] >>submit ; + +:: ( ctor next -- action ) + + { { "id" [ v-number ] } { "aid" [ v-number ] } } >>post-params + + [ + "id" get "aid" get ctor call delete-tuple + + "id" get next + ] >>submit ; + +:: ( form ctor next -- action ) + + [ + f ctor call from-tuple + + form set-defaults + ] >>init + + [ form edit-form ] >>display + + [ + f ctor call from-tuple + + form validate-form + + values-tuple insert-tuple + + "id" value next + ] >>submit ; + +TUPLE: pastebin < dispatcher ; + +: ( -- responder ) + pastebin new-dispatcher + "list" add-main-responder + "feed.xml" add-responder + [ ] "view-paste" add-responder + [ ] "$pastebin/list" "delete-paste" add-responder + [ ] "$pastebin/view-paste" "delete-annotation" add-responder + [ ] "$pastebin/view-paste" add-responder + [ now >>date ] "$pastebin/view-paste" "new-paste" add-responder + [ now >>date ] "$pastebin/view-paste" "annotate" add-responder + + "pastebin" pastebin-template >>template ; + +: init-pastes-table paste ensure-table ; + +: init-annotations-table annotation ensure-table ; diff --git a/extra/webapps/pastebin/pastebin.xml b/extra/webapps/pastebin/pastebin.xml new file mode 100644 index 0000000000..2d335fe9ce --- /dev/null +++ b/extra/webapps/pastebin/pastebin.xml @@ -0,0 +1,29 @@ + + + + + + + + + + +

    + + + +
    diff --git a/extra/webapps/planet/admin.xml b/extra/webapps/planet/admin.xml index 1a18cad94b..3bd406ee38 100644 --- a/extra/webapps/planet/admin.xml +++ b/extra/webapps/planet/admin.xml @@ -7,7 +7,8 @@

    - Add Blog | Update + Add Blog + | Update

    diff --git a/extra/webapps/planet/blog-admin-link.xml b/extra/webapps/planet/blog-admin-link.xml index 712db4ba0d..a92af8dd1d 100644 --- a/extra/webapps/planet/blog-admin-link.xml +++ b/extra/webapps/planet/blog-admin-link.xml @@ -2,6 +2,6 @@ - + diff --git a/extra/webapps/planet/edit-blog.xml b/extra/webapps/planet/edit-blog.xml index 890b23dcce..83273540a5 100644 --- a/extra/webapps/planet/edit-blog.xml +++ b/extra/webapps/planet/edit-blog.xml @@ -4,7 +4,7 @@ Edit Blog - + @@ -21,8 +21,8 @@ - Atom feed: - + Feed: + @@ -31,9 +31,7 @@ - View - | - + diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 464e2bbfb3..3cd35be5fb 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors sequences sorting locals math calendar alarms logging concurrency.combinators namespaces -db.types db.tuples db +sequences.lib db.types db.tuples db rss xml.writer http.server http.server.crud @@ -11,8 +11,7 @@ http.server.actions http.server.boilerplate http.server.templating.chloe http.server.components -http.server.auth.login -webapps.factor-website ; +http.server.auth.login ; IN: webapps.planet TUPLE: planet-factor < dispatcher postings ; @@ -20,7 +19,7 @@ TUPLE: planet-factor < dispatcher postings ; : planet-template ( name -- template ) "resource:extra/webapps/planet/" swap ".xml" 3append ; -TUPLE: blog id name www-url atom-url ; +TUPLE: blog id name www-url feed-url ; M: blog link-title name>> ; @@ -31,7 +30,7 @@ blog "BLOGS" { "id" "ID" INTEGER +native-id+ } { "name" "NAME" { VARCHAR 256 } +not-null+ } { "www-url" "WWWURL" { VARCHAR 256 } +not-null+ } - { "atom-url" "ATOMURL" { VARCHAR 256 } +not-null+ } + { "feed-url" "FEEDURL" { VARCHAR 256 } +not-null+ } } define-persistent : init-blog-table blog ensure-table ; @@ -54,7 +53,6 @@ blog "BLOGS" : ( -- form ) "blog" "edit-blog" planet-template >>edit-template - "view-blog" planet-template >>view-template "blog-admin-link" planet-template >>summary-template "id" hidden >>renderer @@ -65,7 +63,7 @@ blog "BLOGS" "www-url" t >>required add-field - "atom-url" + "feed-url" t >>required add-field ; @@ -106,14 +104,11 @@ blog "BLOGS" ] >>display ] ; -: safe-head ( seq n -- seq' ) - over length min head ; - :: planet-feed ( planet -- feed ) feed new - "[ planet-factor ]" >>title + "Planet Factor" >>title "http://planet.factorcode.org" >>link - planet postings>> 16 safe-head >>entries ; + planet postings>> 16 short head >>entries ; :: ( planet -- action ) @@ -132,7 +127,7 @@ blog "BLOGS" : fetch-blogroll ( blogroll -- entries ) dup - [ atom-url>> fetch-feed ] parallel-map + [ feed-url>> fetch-feed ] parallel-map [ >r name>> r> [ ] with map ] 2map concat ; : sort-entries ( entries -- entries' ) @@ -140,7 +135,7 @@ blog "BLOGS" : update-cached-postings ( planet -- ) "webapps.planet" [ - blogroll fetch-blogroll sort-entries 8 safe-head + blogroll fetch-blogroll sort-entries 8 short head >>postings drop ] with-logging ; @@ -157,32 +152,20 @@ blog "BLOGS" planet-factor >>default + planet-factor "update" add-responder + ! Administrative CRUD - blog-ctor "" "delete-blog" add-responder - blog-form blog-ctor "view-blog" add-responder - blog-form blog-ctor "view-blog" "edit-blog" add-responder + blog-ctor "$planet-factor/admin" "delete-blog" add-responder + blog-form blog-ctor "$planet-factor/admin" "edit-blog" add-responder ] ; : ( -- responder ) planet-factor new-dispatcher - dup >>default + dup "list" add-main-responder dup "feed.xml" add-responder - dup "update" add-responder dup "admin" add-responder "planet" planet-template >>template ; - -: ( -- responder ) - ; : start-update-task ( planet -- ) [ update-cached-postings ] curry 10 minutes every drop ; - -: init-planet ( -- ) - test-db [ - init-blog-table - ] with-db - - - "planet" add-responder - main-responder set-global ; diff --git a/extra/webapps/planet/planet.xml b/extra/webapps/planet/planet.xml index 772f81906d..c96a143246 100644 --- a/extra/webapps/planet/planet.xml +++ b/extra/webapps/planet/planet.xml @@ -3,22 +3,21 @@ - + - Edit + Edit | - + From 3ea844b9f2b257842c0839c77c1417000e3e48f7 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 25 Apr 2008 03:23:56 -0500 Subject: [PATCH 076/270] Better error message --- core/debugger/debugger.factor | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/debugger/debugger.factor b/core/debugger/debugger.factor index f2740a63a9..8360019646 100755 --- a/core/debugger/debugger.factor +++ b/core/debugger/debugger.factor @@ -293,6 +293,8 @@ M: no-such-slot summary drop "No such slot" ; M: immutable-slot summary drop "Slot is immutable" ; +M: bad-create summary drop "Bad parameters to create" ; + Date: Fri, 25 Apr 2008 15:56:15 -0500 Subject: [PATCH 077/270] fix typo --- extra/math/miller-rabin/miller-rabin.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/math/miller-rabin/miller-rabin.factor b/extra/math/miller-rabin/miller-rabin.factor index a1f90d74c9..c668806fc2 100755 --- a/extra/math/miller-rabin/miller-rabin.factor +++ b/extra/math/miller-rabin/miller-rabin.factor @@ -1,4 +1,4 @@ -eSING: combinators combinators.lib io locals kernel math +USING: combinators combinators.lib io locals kernel math math.functions math.ranges namespaces random sequences hashtables sets ; IN: math.miller-rabin From 15402ed1b4c876dbe5d3fc465e87292a79f670f4 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 25 Apr 2008 23:12:44 -0500 Subject: [PATCH 078/270] core changes: index* -> index-from last-index* -> last-index-from 1 tail -> rest 1 tail-slice -> rest-slice subset -> filter prepose find* -> find-from find-last* -> find-last-from before, after generic, < for integers make between? work for timestamps --- core/alien/syntax/syntax.factor | 2 +- core/assocs/assocs-docs.factor | 4 +- core/assocs/assocs-tests.factor | 4 +- core/assocs/assocs.factor | 8 +- core/bootstrap/compiler/compiler.factor | 4 +- core/bootstrap/image/image.factor | 2 +- core/bootstrap/primitives.factor | 2 +- core/bootstrap/stage2.factor | 4 +- core/classes/algebra/algebra.factor | 4 +- core/classes/classes.factor | 2 +- core/classes/mixin/mixin.factor | 2 +- core/classes/tuple/tuple.factor | 2 +- core/combinators/combinators.factor | 4 +- core/command-line/command-line.factor | 2 +- core/compiler/errors/errors.factor | 2 +- core/compiler/tests/intrinsics.factor | 4 +- core/compiler/tests/stack-trace.factor | 4 +- core/compiler/units/units.factor | 4 +- core/cpu/x86/64/64.factor | 2 +- core/cpu/x86/architecture/architecture.factor | 3 +- core/cpu/x86/assembler/assembler.factor | 2 +- core/debugger/debugger.factor | 3 +- core/definitions/definitions-tests.factor | 2 +- core/dlists/dlists.factor | 2 +- core/generator/fixup/fixup.factor | 2 +- core/generator/registers/registers.factor | 6 +- core/generic/generic-tests.factor | 8 +- core/generic/generic.factor | 4 +- core/generic/math/math.factor | 2 +- core/generic/standard/engines/engines.factor | 4 +- core/hashtables/hashtables-tests.factor | 2 +- core/heaps/heaps-docs.factor | 3 +- core/heaps/heaps.factor | 2 +- core/inference/backend/backend.factor | 6 +- core/inference/class/class.factor | 2 +- core/inference/dataflow/dataflow.factor | 2 +- core/inspector/inspector.factor | 2 +- core/io/files/files-tests.factor | 4 +- core/io/files/files.factor | 6 +- core/io/streams/string/string.factor | 2 +- core/kernel/kernel-docs.factor | 23 +----- core/kernel/kernel.factor | 7 +- core/layouts/layouts.factor | 2 +- core/math/intervals/intervals-docs.factor | 2 +- core/math/intervals/intervals-tests.factor | 4 +- core/math/intervals/intervals.factor | 2 +- core/math/math-docs.factor | 39 --------- core/math/math.factor | 22 +---- core/optimizer/backend/backend.factor | 2 +- core/optimizer/control/control.factor | 4 +- core/optimizer/def-use/def-use.factor | 4 +- core/optimizer/math/partial/partial.factor | 4 +- .../specializers/specializers.factor | 2 +- core/parser/parser.factor | 12 +-- core/prettyprint/backend/backend.factor | 2 +- core/prettyprint/prettyprint.factor | 2 +- core/prettyprint/sections/sections.factor | 4 +- core/quotations/quotations.factor | 6 +- core/sequences/sequences-docs.factor | 45 +++++++---- core/sequences/sequences-tests.factor | 21 +++-- core/sequences/sequences.factor | 80 ++++++++++--------- core/sets/sets.factor | 4 +- core/slots/deprecated/deprecated.factor | 2 +- core/sorting/sorting-docs.factor | 5 +- core/sorting/sorting.factor | 2 +- core/source-files/source-files.factor | 2 +- core/splitting/splitting.factor | 4 +- core/strings/strings-tests.factor | 2 + core/threads/threads.factor | 5 +- core/vocabs/vocabs.factor | 4 +- core/words/words-tests.factor | 4 +- core/words/words.factor | 11 +-- 72 files changed, 205 insertions(+), 260 deletions(-) diff --git a/core/alien/syntax/syntax.factor b/core/alien/syntax/syntax.factor index f0f495cac9..b2e819f8fb 100755 --- a/core/alien/syntax/syntax.factor +++ b/core/alien/syntax/syntax.factor @@ -40,7 +40,7 @@ PRIVATE> : FUNCTION: scan "c-library" get scan ";" parse-tokens - [ "()" subseq? not ] subset + [ "()" subseq? not ] filter define-function ; parsing : TYPEDEF: diff --git a/core/assocs/assocs-docs.factor b/core/assocs/assocs-docs.factor index 863fdaecb3..f06cc70613 100755 --- a/core/assocs/assocs-docs.factor +++ b/core/assocs/assocs-docs.factor @@ -96,7 +96,7 @@ $nl { $subsection assoc-each } { $subsection assoc-map } { $subsection assoc-push-if } -{ $subsection assoc-subset } +{ $subsection assoc-filter } { $subsection assoc-contains? } { $subsection assoc-all? } "Three additional combinators:" @@ -203,7 +203,7 @@ HELP: assoc-push-if { $values { "accum" "a resizable mutable sequence" } { "quot" "a quotation with stack effect " { $snippet "( key value -- ? )" } } { "key" object } { "value" object } } { $description "If the quotation yields true when applied to the key/value pair, adds the key/value pair at the end of " { $snippet "accum" } "." } ; -HELP: assoc-subset +HELP: assoc-filter { $values { "assoc" assoc } { "quot" "a quotation with stack effect " { $snippet "( key value -- ? )" } } { "subassoc" "a new assoc" } } { $description "Outputs an assoc of the same type as " { $snippet "assoc" } " consisting of all entries for which the predicate quotation yields true." } ; diff --git a/core/assocs/assocs-tests.factor b/core/assocs/assocs-tests.factor index 76f484006d..19e323bdae 100755 --- a/core/assocs/assocs-tests.factor +++ b/core/assocs/assocs-tests.factor @@ -30,10 +30,10 @@ continuations ; [ t ] [ H{ { 1 1 } { 2 2 } } [ = ] assoc-all? ] unit-test [ f ] [ H{ { 1 2 } { 2 2 } } [ = ] assoc-all? ] unit-test -[ H{ } ] [ H{ { t f } { f t } } [ 2drop f ] assoc-subset ] unit-test +[ H{ } ] [ H{ { t f } { f t } } [ 2drop f ] assoc-filter ] unit-test [ H{ { 3 4 } { 4 5 } { 6 7 } } ] [ H{ { 1 2 } { 2 3 } { 3 4 } { 4 5 } { 6 7 } } - [ drop 3 >= ] assoc-subset + [ drop 3 >= ] assoc-filter ] unit-test [ 21 ] [ diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor index 4a6ecae4fe..a58dfea900 100755 --- a/core/assocs/assocs.factor +++ b/core/assocs/assocs.factor @@ -50,7 +50,7 @@ M: assoc assoc-find : assoc-pusher ( quot -- quot' accum ) V{ } clone [ [ assoc-push-if ] 2curry ] keep ; inline -: assoc-subset ( assoc quot -- subassoc ) +: assoc-filter ( assoc quot -- subassoc ) over >r assoc-pusher >r assoc-each r> r> assoc-like ; inline : assoc-contains? ( assoc quot -- ? ) @@ -110,7 +110,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc ) ] { } assoc>map hashcode* ; : assoc-intersect ( assoc1 assoc2 -- intersection ) - swap [ nip key? ] curry assoc-subset ; + swap [ nip key? ] curry assoc-filter ; : update ( assoc1 assoc2 -- ) swap [ swapd set-at ] curry assoc-each ; @@ -120,10 +120,10 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc ) [ rot update ] keep [ swap update ] keep ; : assoc-diff ( assoc1 assoc2 -- diff ) - swap [ nip key? not ] curry assoc-subset ; + swap [ nip key? not ] curry assoc-filter ; : remove-all ( assoc seq -- subseq ) - swap [ key? not ] curry subset ; + swap [ key? not ] curry filter ; : (substitute) [ dupd at* [ nip ] [ drop ] if ] curry ; inline diff --git a/core/bootstrap/compiler/compiler.factor b/core/bootstrap/compiler/compiler.factor index da3c634ebd..a19ffe742e 100755 --- a/core/bootstrap/compiler/compiler.factor +++ b/core/bootstrap/compiler/compiler.factor @@ -5,7 +5,7 @@ namespaces parser kernel kernel.private classes classes.private arrays hashtables vectors classes.tuple sbufs inference.dataflow hashtables.private sequences.private math classes.tuple.private growable namespaces.private assocs words generator command-line -vocabs io prettyprint libc compiler.units ; +vocabs io prettyprint libc compiler.units math.order ; IN: bootstrap.compiler ! Don't bring this in when deploying, since it will store a @@ -74,6 +74,6 @@ nl malloc calloc free memcpy } compile -vocabs [ words [ compiled? not ] subset compile "." write flush ] each +vocabs [ words [ compiled? not ] filter compile "." write flush ] each " done" print flush diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor index 05d48af2e8..46ed34c35c 100755 --- a/core/bootstrap/image/image.factor +++ b/core/bootstrap/image/image.factor @@ -8,7 +8,7 @@ splitting growable classes classes.builtin classes.tuple classes.tuple.private words.private io.binary io.files vocabs vocabs.loader source-files definitions debugger float-arrays quotations.private sequences.private combinators -io.encodings.binary ; +io.encodings.binary math.order ; IN: bootstrap.image : my-arch ( -- arch ) diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index dd3a4adf8b..bcd75e9854 100755 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -157,7 +157,7 @@ num-types get f builtins set ! Catch-all class for providing a default method. "object" "kernel" create -[ f builtins get [ ] subset union-class define-class ] +[ f builtins get [ ] filter union-class define-class ] [ [ drop t ] "predicate" set-word-prop ] bi diff --git a/core/bootstrap/stage2.factor b/core/bootstrap/stage2.factor index dfd2e4be6f..8e16417ca6 100755 --- a/core/bootstrap/stage2.factor +++ b/core/bootstrap/stage2.factor @@ -23,12 +23,12 @@ SYMBOL: bootstrap-time : load-components ( -- ) "exclude" "include" - [ get-global " " split [ empty? not ] subset ] bi@ + [ get-global " " split [ empty? not ] filter ] bi@ diff [ "bootstrap." prepend require ] each ; : count-words ( pred -- ) - all-words swap subset length number>string write ; + all-words swap filter length number>string write ; : print-report ( time -- ) 1000 /i diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor index f2941e3cef..6a286e3204 100755 --- a/core/classes/algebra/algebra.factor +++ b/core/classes/algebra/algebra.factor @@ -183,7 +183,7 @@ C: anonymous-complement : largest-class ( seq -- n elt ) dup [ [ 2dup class< >r swap class< not r> and ] - with subset empty? + with filter empty? ] curry find [ "Topological sort failed" throw ] unless* ; : sort-classes ( seq -- newseq ) @@ -193,7 +193,7 @@ C: anonymous-complement [ ] unfold nip ; : min-class ( class seq -- class/f ) - over [ classes-intersect? ] curry subset + over [ classes-intersect? ] curry filter dup empty? [ 2drop f ] [ tuck [ class< ] with all? [ peek ] [ drop f ] if ] if ; diff --git a/core/classes/classes.factor b/core/classes/classes.factor index 4f43b86f64..c998a1b155 100755 --- a/core/classes/classes.factor +++ b/core/classes/classes.factor @@ -33,7 +33,7 @@ PREDICATE: class < word PREDICATE: tuple-class < class "metaclass" word-prop tuple-class eq? ; -: classes ( -- seq ) all-words [ class? ] subset ; +: classes ( -- seq ) all-words [ class? ] filter ; : predicate-word ( word -- predicate ) [ word-name "?" append ] keep word-vocabulary create ; diff --git a/core/classes/mixin/mixin.factor b/core/classes/mixin/mixin.factor index 33b0fc32fa..ca2547bacf 100755 --- a/core/classes/mixin/mixin.factor +++ b/core/classes/mixin/mixin.factor @@ -31,7 +31,7 @@ TUPLE: check-mixin-class mixin ; >r >r check-mixin-class 2dup members memq? r> r> if ; inline : change-mixin-class ( class mixin quot -- ) - [ members swap bootstrap-word ] swap compose keep + [ members swap bootstrap-word ] prepose keep swap redefine-mixin-class ; inline : add-mixin-instance ( class mixin -- ) diff --git a/core/classes/tuple/tuple.factor b/core/classes/tuple/tuple.factor index c14205e1d9..8bcf023131 100755 --- a/core/classes/tuple/tuple.factor +++ b/core/classes/tuple/tuple.factor @@ -166,7 +166,7 @@ M: tuple-class update-class 3tri ; : subclasses ( class -- classes ) - class-usages keys [ tuple-class? ] subset ; + class-usages keys [ tuple-class? ] filter ; : each-subclass ( class quot -- ) >r subclasses r> each ; inline diff --git a/core/combinators/combinators.factor b/core/combinators/combinators.factor index da98a78736..d33edfab30 100755 --- a/core/combinators/combinators.factor +++ b/core/combinators/combinators.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: combinators USING: arrays sequences sequences.private math.private kernel kernel.private math assocs quotations vectors -hashtables sorting words sets ; +hashtables sorting words sets math.order ; +IN: combinators : cleave ( x seq -- ) [ call ] with each ; diff --git a/core/command-line/command-line.factor b/core/command-line/command-line.factor index 246bf2dabe..f4aef6292d 100644 --- a/core/command-line/command-line.factor +++ b/core/command-line/command-line.factor @@ -54,7 +54,7 @@ SYMBOL: main-vocab-hook "none" "run" set-global ; : parse-command-line ( -- ) - cli-args [ cli-arg ] subset + cli-args [ cli-arg ] filter "script" get [ script-mode ] when ignore-cli-args? [ drop ] [ [ run-file ] each ] if "e" get [ eval ] when* ; diff --git a/core/compiler/errors/errors.factor b/core/compiler/errors/errors.factor index b7b599e5a9..e7dc5156e4 100755 --- a/core/compiler/errors/errors.factor +++ b/core/compiler/errors/errors.factor @@ -27,7 +27,7 @@ SYMBOL: with-compiler-errors? : errors-of-type ( type -- assoc ) compiler-errors get-global swap [ >r nip compiler-error-type r> eq? ] curry - assoc-subset ; + assoc-filter ; : compiler-errors. ( type -- ) errors-of-type >alist sort-keys diff --git a/core/compiler/tests/intrinsics.factor b/core/compiler/tests/intrinsics.factor index 7d473871fe..6fb6afe0c6 100755 --- a/core/compiler/tests/intrinsics.factor +++ b/core/compiler/tests/intrinsics.factor @@ -1,11 +1,11 @@ -IN: compiler.tests USING: arrays compiler.units kernel kernel.private math math.constants math.private sequences strings tools.test words continuations sequences.private hashtables.private byte-arrays strings.private system random layouts vectors.private -sbufs.private strings.private slots.private alien +sbufs.private strings.private slots.private alien math.order alien.accessors alien.c-types alien.syntax alien.strings namespaces libc sequences.private io.encodings.ascii ; +IN: compiler.tests ! Make sure that intrinsic ops compile to correct code. [ ] [ 1 [ drop ] compile-call ] unit-test diff --git a/core/compiler/tests/stack-trace.factor b/core/compiler/tests/stack-trace.factor index f54ac62204..9ee774d81d 100755 --- a/core/compiler/tests/stack-trace.factor +++ b/core/compiler/tests/stack-trace.factor @@ -13,11 +13,11 @@ words splitting sorting ; [ baz ] [ 3 = ] must-fail-with [ t ] [ symbolic-stack-trace - [ word? ] subset + [ word? ] filter { baz bar foo throw } tail? ] unit-test -: bleh [ 3 + ] map [ 0 > ] subset ; +: bleh [ 3 + ] map [ 0 > ] filter ; : stack-trace-contains? symbolic-stack-trace memq? ; diff --git a/core/compiler/units/units.factor b/core/compiler/units/units.factor index 65e57a8912..a31cd8de16 100755 --- a/core/compiler/units/units.factor +++ b/core/compiler/units/units.factor @@ -53,7 +53,7 @@ GENERIC: definitions-changed ( assoc obj -- ) [ definitions-changed ] with each ; : changed-vocabs ( assoc -- vocabs ) - [ drop word? ] assoc-subset + [ drop word? ] assoc-filter [ drop word-vocabulary dup [ vocab ] when dup ] assoc-map ; : updated-definitions ( -- assoc ) @@ -73,7 +73,7 @@ SYMBOL: outdated-tuples SYMBOL: update-tuples-hook : call-recompile-hook ( -- ) - changed-definitions get keys [ word? ] subset + changed-definitions get keys [ word? ] filter compiled-usages recompile-hook get call ; : call-update-tuples-hook ( -- ) diff --git a/core/cpu/x86/64/64.factor b/core/cpu/x86/64/64.factor index d79ce58d88..5f396e7751 100755 --- a/core/cpu/x86/64/64.factor +++ b/core/cpu/x86/64/64.factor @@ -181,7 +181,7 @@ stack-params "__stack_value" c-type set-c-type-reg-class >> : split-struct ( pairs -- seq ) [ [ 8 mod zero? [ t , ] when , ] assoc-each - ] { } make { t } split [ empty? not ] subset ; + ] { } make { t } split [ empty? not ] filter ; : flatten-large-struct ( type -- ) heap-size cell align diff --git a/core/cpu/x86/architecture/architecture.factor b/core/cpu/x86/architecture/architecture.factor index 7e7ff8a334..f0ca47a1ba 100755 --- a/core/cpu/x86/architecture/architecture.factor +++ b/core/cpu/x86/architecture/architecture.factor @@ -3,7 +3,8 @@ USING: alien alien.c-types alien.compiler arrays cpu.x86.assembler cpu.architecture kernel kernel.private math memory namespaces sequences words generator generator.registers -generator.fixup system layouts combinators compiler.constants ; +generator.fixup system layouts combinators compiler.constants +math.order ; IN: cpu.x86.architecture HOOK: ds-reg cpu diff --git a/core/cpu/x86/assembler/assembler.factor b/core/cpu/x86/assembler/assembler.factor index 3ad7d4f7b5..cabd81dad6 100755 --- a/core/cpu/x86/assembler/assembler.factor +++ b/core/cpu/x86/assembler/assembler.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays generator.fixup io.binary kernel combinators kernel.private math namespaces parser sequences -words system layouts ; +words system layouts math.order ; IN: cpu.x86.assembler ! A postfix assembler for x86 and AMD64. diff --git a/core/debugger/debugger.factor b/core/debugger/debugger.factor index 8360019646..9492304628 100755 --- a/core/debugger/debugger.factor +++ b/core/debugger/debugger.factor @@ -6,7 +6,8 @@ strings io.styles vectors words system splitting math.parser classes.tuple continuations continuations.private combinators generic.math io.streams.duplex classes.builtin classes compiler.units generic.standard vocabs threads threads.private -init kernel.private libc io.encodings mirrors accessors ; +init kernel.private libc io.encodings mirrors accessors +math.order ; IN: debugger GENERIC: error. ( error -- ) diff --git a/core/definitions/definitions-tests.factor b/core/definitions/definitions-tests.factor index b20d81ec7c..b2d265a2e3 100755 --- a/core/definitions/definitions-tests.factor +++ b/core/definitions/definitions-tests.factor @@ -1,6 +1,6 @@ -IN: definitions.tests USING: tools.test generic kernel definitions sequences compiler.units words ; +IN: definitions.tests GENERIC: some-generic ( a -- b ) diff --git a/core/dlists/dlists.factor b/core/dlists/dlists.factor index e79907f11f..d9aa6b1c19 100755 --- a/core/dlists/dlists.factor +++ b/core/dlists/dlists.factor @@ -153,7 +153,7 @@ PRIVATE> drop ; : dlist-each ( dlist quot -- ) - [ obj>> ] swap compose dlist-each-node ; inline + [ obj>> ] prepose dlist-each-node ; inline : dlist-slurp ( dlist quot -- ) over dlist-empty? diff --git a/core/generator/fixup/fixup.factor b/core/generator/fixup/fixup.factor index ad6cd3051c..06895cd8ac 100755 --- a/core/generator/fixup/fixup.factor +++ b/core/generator/fixup/fixup.factor @@ -3,7 +3,7 @@ USING: arrays generic assocs hashtables kernel kernel.private math namespaces sequences words quotations strings alien.strings layouts system combinators -math.bitfields words.private cpu.architecture ; +math.bitfields words.private cpu.architecture math.order ; IN: generator.fixup : no-stack-frame -1 ; inline diff --git a/core/generator/registers/registers.factor b/core/generator/registers/registers.factor index 6a1d9ec0f4..4753f18c9a 100755 --- a/core/generator/registers/registers.factor +++ b/core/generator/registers/registers.factor @@ -4,7 +4,7 @@ USING: arrays assocs classes classes.private classes.algebra combinators cpu.architecture generator.fixup hashtables kernel layouts math namespaces quotations sequences system vectors words effects alien byte-arrays bit-arrays float-arrays -accessors sets ; +accessors sets math.order ; IN: generator.registers SYMBOL: +input+ @@ -314,7 +314,7 @@ M: phantom-retainstack finalize-height : (live-locs) ( phantom -- seq ) #! Discard locs which haven't moved [ phantom-locs* ] [ stack>> ] bi zip - [ live-loc? ] assoc-subset + [ live-loc? ] assoc-filter values ; : live-locs ( -- seq ) @@ -484,7 +484,7 @@ M: loc lazy-store : substitute-vregs ( values vregs -- ) [ vreg-substitution ] 2map - [ substitute-vreg? ] assoc-subset >hashtable + [ substitute-vreg? ] assoc-filter >hashtable [ >r stack>> r> substitute-here ] curry each-phantom ; : set-operand ( value var -- ) diff --git a/core/generic/generic-tests.factor b/core/generic/generic-tests.factor index bbd7186a11..600f422274 100755 --- a/core/generic/generic-tests.factor +++ b/core/generic/generic-tests.factor @@ -143,7 +143,7 @@ GENERIC: generic-forget-test-1 M: integer generic-forget-test-1 / ; [ t ] [ - \ / usage [ word? ] subset + \ / usage [ word? ] filter [ word-name "generic-forget-test-1/integer" = ] contains? ] unit-test @@ -152,7 +152,7 @@ M: integer generic-forget-test-1 / ; ] unit-test [ f ] [ - \ / usage [ word? ] subset + \ / usage [ word? ] filter [ word-name "generic-forget-test-1/integer" = ] contains? ] unit-test @@ -161,7 +161,7 @@ GENERIC: generic-forget-test-2 M: sequence generic-forget-test-2 = ; [ t ] [ - \ = usage [ word? ] subset + \ = usage [ word? ] filter [ word-name "generic-forget-test-2/sequence" = ] contains? ] unit-test @@ -170,7 +170,7 @@ M: sequence generic-forget-test-2 = ; ] unit-test [ f ] [ - \ = usage [ word? ] subset + \ = usage [ word? ] filter [ word-name "generic-forget-test-2/sequence" = ] contains? ] unit-test diff --git a/core/generic/generic.factor b/core/generic/generic.factor index 6c59d76d07..82bab475b3 100755 --- a/core/generic/generic.factor +++ b/core/generic/generic.factor @@ -35,7 +35,7 @@ PREDICATE: method-spec < pair GENERIC: effective-method ( ... generic -- method ) : next-method-class ( class generic -- class/f ) - order [ class< ] with subset reverse dup length 1 = + order [ class< ] with filter reverse dup length 1 = [ drop f ] [ second ] if ; : next-method ( class generic -- class/f ) @@ -137,7 +137,7 @@ M: method-body forget* all-words [ "methods" word-prop keys swap [ key? ] curry contains? - ] with subset ; + ] with filter ; : implementors ( class -- seq ) dup associate implementors* ; diff --git a/core/generic/math/math.factor b/core/generic/math/math.factor index 884ab8027e..d71749804b 100755 --- a/core/generic/math/math.factor +++ b/core/generic/math/math.factor @@ -3,7 +3,7 @@ USING: arrays generic hashtables kernel kernel.private math namespaces sequences words quotations layouts combinators sequences.private classes classes.builtin classes.algebra -definitions ; +definitions math.order ; IN: generic.math PREDICATE: math-class < class diff --git a/core/generic/standard/engines/engines.factor b/core/generic/standard/engines/engines.factor index 1f0b80e016..c09f1abfd4 100644 --- a/core/generic/standard/engines/engines.factor +++ b/core/generic/standard/engines/engines.factor @@ -26,8 +26,8 @@ M: method-body engine>quot 1quotation ; alist>quot ; : split-methods ( assoc class -- first second ) - [ [ nip class< not ] curry assoc-subset ] - [ [ nip class< ] curry assoc-subset ] 2bi ; + [ [ nip class< not ] curry assoc-filter ] + [ [ nip class< ] curry assoc-filter ] 2bi ; : convert-methods ( assoc class word -- assoc' ) over >r >r split-methods dup assoc-empty? [ diff --git a/core/hashtables/hashtables-tests.factor b/core/hashtables/hashtables-tests.factor index f4e76aa68e..4e80ed1f6e 100755 --- a/core/hashtables/hashtables-tests.factor +++ b/core/hashtables/hashtables-tests.factor @@ -10,7 +10,7 @@ continuations ; [ ] [ 1000 [ dup sq ] H{ } map>assoc "testhash" set ] unit-test [ V{ } ] -[ 1000 [ dup sq swap "testhash" get at = not ] subset ] +[ 1000 [ dup sq swap "testhash" get at = not ] filter ] unit-test [ t ] diff --git a/core/heaps/heaps-docs.factor b/core/heaps/heaps-docs.factor index f9224eafeb..d1003ac2f8 100755 --- a/core/heaps/heaps-docs.factor +++ b/core/heaps/heaps-docs.factor @@ -1,4 +1,5 @@ -USING: heaps.private help.markup help.syntax kernel math assocs ; +USING: heaps.private help.markup help.syntax kernel math assocs +math.order ; IN: heaps ARTICLE: "heaps" "Heaps" diff --git a/core/heaps/heaps.factor b/core/heaps/heaps.factor index 02a8b8d88b..54eb93a201 100755 --- a/core/heaps/heaps.factor +++ b/core/heaps/heaps.factor @@ -2,7 +2,7 @@ ! Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel math sequences arrays assocs sequences.private -growable accessors ; +growable accessors math.order ; IN: heaps MIXIN: priority-queue diff --git a/core/inference/backend/backend.factor b/core/inference/backend/backend.factor index f60748a5ac..2e1a69e407 100755 --- a/core/inference/backend/backend.factor +++ b/core/inference/backend/backend.factor @@ -4,7 +4,7 @@ USING: inference.dataflow inference.state arrays generic io io.streams.string kernel math namespaces parser prettyprint sequences strings vectors words quotations effects classes continuations debugger assocs combinators compiler.errors -generic.standard.engines.tuple accessors ; +generic.standard.engines.tuple accessors math.order ; IN: inference.backend : recursive-label ( word -- label/f ) @@ -261,7 +261,7 @@ TUPLE: cannot-unify-specials ; : balanced? ( in out -- ? ) [ dup [ length - ] [ 2drop f ] if ] 2map - [ ] subset all-equal? ; + [ ] filter all-equal? ; TUPLE: unbalanced-branches-error quots in out ; @@ -281,7 +281,7 @@ TUPLE: unbalanced-branches-error quots in out ; 2dup balanced? [ over supremum -rot [ >r dupd r> unify-inputs ] 2map - [ ] subset unify-stacks + [ ] filter unify-stacks rot drop ] [ unbalanced-branches-error diff --git a/core/inference/class/class.factor b/core/inference/class/class.factor index 6d5b708f34..9d0c55afeb 100755 --- a/core/inference/class/class.factor +++ b/core/inference/class/class.factor @@ -153,7 +153,7 @@ M: pair constraint-satisfied? first constraint-satisfied? ; : extract-keys ( seq assoc -- newassoc ) - [ dupd at ] curry H{ } map>assoc [ nip ] assoc-subset f assoc-like ; + [ dupd at ] curry H{ } map>assoc [ nip ] assoc-filter f assoc-like ; : annotate-node ( node -- ) #! Annotate the node with the currently-inferred set of diff --git a/core/inference/dataflow/dataflow.factor b/core/inference/dataflow/dataflow.factor index bb66a5386c..d7e3e78308 100755 --- a/core/inference/dataflow/dataflow.factor +++ b/core/inference/dataflow/dataflow.factor @@ -300,7 +300,7 @@ SYMBOL: node-stack dup in-d>> first node-class ; : active-children ( node -- seq ) - children>> [ last-node ] map [ #terminate? not ] subset ; + children>> [ last-node ] map [ #terminate? not ] filter ; DEFER: #tail? diff --git a/core/inspector/inspector.factor b/core/inspector/inspector.factor index c9bfbfad54..0ab016b0fa 100755 --- a/core/inspector/inspector.factor +++ b/core/inspector/inspector.factor @@ -96,7 +96,7 @@ SYMBOL: +editable+ : namestack. ( seq -- ) [ - [ global eq? not ] subset + [ global eq? not ] filter [ keys ] map concat prune ] keep [ dupd assoc-stack ] curry H{ } map>assoc describe ; diff --git a/core/io/files/files-tests.factor b/core/io/files/files-tests.factor index 5efbb9496d..a463fd2e40 100755 --- a/core/io/files/files-tests.factor +++ b/core/io/files/files-tests.factor @@ -135,13 +135,13 @@ strings accessors io.encodings.utf8 ; [ { { "kernel" t } } ] [ "core" resource-path [ - "." directory [ first "kernel" = ] subset + "." directory [ first "kernel" = ] filter ] with-directory ] unit-test [ { { "kernel" t } } ] [ "resource:core" [ - "." directory [ first "kernel" = ] subset + "." directory [ first "kernel" = ] filter ] with-directory ] unit-test diff --git a/core/io/files/files.factor b/core/io/files/files.factor index 061e6386da..7fa2080661 100755 --- a/core/io/files/files.factor +++ b/core/io/files/files.factor @@ -3,7 +3,7 @@ USING: io.backend io.files.private io hashtables kernel math memory namespaces sequences strings assocs arrays definitions system combinators splitting sbufs continuations io.encodings -io.encodings.binary init accessors ; +io.encodings.binary init accessors math.order ; IN: io.files HOOK: (file-reader) io-backend ( path -- stream ) @@ -54,7 +54,7 @@ HOOK: (file-appender) io-backend ( path -- stream ) [ path-separator? ] left-trim ; : last-path-separator ( path -- n ? ) - [ length 1- ] keep [ path-separator? ] find-last* ; + [ length 1- ] keep [ path-separator? ] find-last-from ; HOOK: root-directory? io-backend ( path -- ? ) @@ -232,7 +232,7 @@ HOOK: make-directory io-backend ( path -- ) dup string? [ tuck append-path directory? 2array ] [ nip ] if ] with map - [ first { "." ".." } member? not ] subset ; + [ first { "." ".." } member? not ] filter ; : directory ( path -- seq ) normalize-directory dup (directory) fixup-directory ; diff --git a/core/io/streams/string/string.factor b/core/io/streams/string/string.factor index b7ff37a971..531d0401b2 100755 --- a/core/io/streams/string/string.factor +++ b/core/io/streams/string/string.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: io kernel math namespaces sequences sbufs strings generic splitting growable continuations io.streams.plain -io.encodings io.encodings.private ; +io.encodings io.encodings.private math.order ; IN: io.streams.string M: growable dispose drop ; diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor index 4578e2a93f..a3209ea42c 100755 --- a/core/kernel/kernel-docs.factor +++ b/core/kernel/kernel-docs.factor @@ -1,7 +1,7 @@ USING: generic help.markup help.syntax math memory namespaces sequences kernel.private layouts sorting classes kernel.private vectors combinators quotations strings words -assocs arrays ; +assocs arrays math.order ; IN: kernel ARTICLE: "shuffle-words" "Shuffle words" @@ -393,29 +393,8 @@ HELP: identity-tuple { $unchecked-example "T{ foo } dup clone = ." "f" } } ; -HELP: <=> -{ $values { "obj1" object } { "obj2" object } { "n" real } } -{ $contract - "Compares two objects using an intrinsic total order, for example, the natural order for real numbers and lexicographic order for strings." - $nl - "The output value is one of the following:" - { $list - { "positive - indicating that " { $snippet "obj1" } " follows " { $snippet "obj2" } } - { "zero - indicating that " { $snippet "obj1" } " is equal to " { $snippet "obj2" } } - { "negative - indicating that " { $snippet "obj1" } " precedes " { $snippet "obj2" } } - } - "The default implementation treats the two objects as sequences, and recursively compares their elements. So no extra work is required to compare sequences lexicographically." -} ; - { <=> compare natural-sort sort-keys sort-values } related-words -HELP: compare -{ $values { "obj1" object } { "obj2" object } { "quot" "a quotation with stack effect " { $snippet "( obj -- newobj )" } } { "n" integer } } -{ $description "Compares the results of applying the quotation to both objects via " { $link <=> } "." } -{ $examples - { $example "USING: kernel prettyprint sequences ;" "\"hello\" \"hi\" [ length ] compare ." "3" } -} ; - HELP: clone { $values { "obj" object } { "cloned" "a new object" } } { $contract "Outputs a new object equal to the given object. This is not guaranteed to actually copy the object; it does nothing with immutable objects, and does not copy words either. However, sequences and tuples can be cloned to obtain a shallow copy of the original." } ; diff --git a/core/kernel/kernel.factor b/core/kernel/kernel.factor index 95f0d60720..a72e25b9e0 100755 --- a/core/kernel/kernel.factor +++ b/core/kernel/kernel.factor @@ -133,8 +133,6 @@ M: identity-tuple equal? 2drop f ; : = ( obj1 obj2 -- ? ) 2dup eq? [ 2drop t ] [ equal? ] if ; inline -GENERIC: <=> ( obj1 obj2 -- n ) - GENERIC: clone ( obj -- cloned ) M: object clone ; @@ -158,6 +156,9 @@ M: callstack clone (clone) ; : with ( param obj quot -- obj curry ) swapd [ swapd call ] 2curry ; inline +: prepose ( quot1 quot2 -- curry ) + swap compose ; inline + : 3compose ( quot1 quot2 quot3 -- curry ) compose compose ; inline @@ -176,8 +177,6 @@ M: callstack clone (clone) ; : either? ( x y quot -- ? ) bi@ or ; inline -: compare ( obj1 obj2 quot -- n ) bi@ <=> ; inline - : most ( x y quot -- z ) >r 2dup r> call [ drop ] [ nip ] if ; inline diff --git a/core/layouts/layouts.factor b/core/layouts/layouts.factor index 879862c926..19fe03202c 100755 --- a/core/layouts/layouts.factor +++ b/core/layouts/layouts.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: namespaces math words kernel assocs classes -kernel.private ; +math.order kernel.private ; IN: layouts SYMBOL: tag-mask diff --git a/core/math/intervals/intervals-docs.factor b/core/math/intervals/intervals-docs.factor index 7eb20090ab..59fb0df18e 100644 --- a/core/math/intervals/intervals-docs.factor +++ b/core/math/intervals/intervals-docs.factor @@ -1,4 +1,4 @@ -USING: help.markup help.syntax math ; +USING: help.markup help.syntax math math.order ; IN: math.intervals ARTICLE: "math-intervals-new" "Creating intervals" diff --git a/core/math/intervals/intervals-tests.factor b/core/math/intervals/intervals-tests.factor index 5204d7d45a..ba728e67c0 100755 --- a/core/math/intervals/intervals-tests.factor +++ b/core/math/intervals/intervals-tests.factor @@ -1,5 +1,5 @@ -USING: math.intervals kernel sequences words math arrays -prettyprint tools.test random vocabs combinators ; +USING: math.intervals kernel sequences words math math.order +arrays prettyprint tools.test random vocabs combinators ; IN: math.intervals.tests [ T{ interval f { 1 t } { 2 t } } ] [ 1 2 [a,b] ] unit-test diff --git a/core/math/intervals/intervals.factor b/core/math/intervals/intervals.factor index 77d60e67f8..324d628fd1 100755 --- a/core/math/intervals/intervals.factor +++ b/core/math/intervals/intervals.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. ! Based on Slate's src/unfinished/interval.slate by Brian Rice. -USING: kernel sequences arrays math combinators ; +USING: kernel sequences arrays math combinators math.order ; IN: math.intervals TUPLE: interval from to ; diff --git a/core/math/math-docs.factor b/core/math/math-docs.factor index c8a763b5f7..b15f09e49d 100755 --- a/core/math/math-docs.factor +++ b/core/math/math-docs.factor @@ -79,28 +79,6 @@ HELP: >= { $values { "x" real } { "y" real } { "?" "a boolean" } } { $description "Tests if " { $snippet "x" } " is greater than or equal to " { $snippet "y" } "." } ; -HELP: before? -{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } -{ $description "Tests if " { $snippet "obj1" } " comes before " { $snippet "obj2" } " using an intrinsic total order." } -{ $notes "Implemented using " { $link <=> } "." } ; - -HELP: after? -{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } -{ $description "Tests if " { $snippet "obj1" } " comes after " { $snippet "obj2" } " using an intrinsic total order." } -{ $notes "Implemented using " { $link <=> } "." } ; - -HELP: before=? -{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } -{ $description "Tests if " { $snippet "obj1" } " comes before or equals " { $snippet "obj2" } " using an intrinsic total order." } -{ $notes "Implemented using " { $link <=> } "." } ; - -HELP: after=? -{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } -{ $description "Tests if " { $snippet "obj1" } " comes after or equals " { $snippet "obj2" } " using an intrinsic total order." } -{ $notes "Implemented using " { $link <=> } "." } ; - -{ before? after? before=? after=? } related-words - HELP: + { $values { "x" number } { "y" number } { "z" number } } @@ -275,19 +253,6 @@ HELP: recip { $description "Computes a number's multiplicative inverse." } { $errors "Throws an error if " { $snippet "x" } " is the integer 0." } ; -HELP: max -{ $values { "x" real } { "y" real } { "z" real } } -{ $description "Outputs the greatest of two real numbers." } ; - -HELP: min -{ $values { "x" real } { "y" real } { "z" real } } -{ $description "Outputs the smallest of two real numbers." } ; - -HELP: between? -{ $values { "x" real } { "y" real } { "z" real } { "?" "a boolean" } } -{ $description "Tests if " { $snippet "x" } " is in the interval " { $snippet "[y,z]" } "." } -{ $notes "As per the closed interval notation, the end-points are included in the interval." } ; - HELP: rem { $values { "x" integer } { "y" integer } { "z" integer } } { $description @@ -333,10 +298,6 @@ HELP: times { $description "Calls the quotation " { $snippet "n" } " times." } { $notes "If you need to pass the current index to the quotation, use " { $link each } "." } ; -HELP: [-] -{ $values { "x" real } { "y" real } { "z" real } } -{ $description "Subtracts " { $snippet "y" } " from " { $snippet "x" } ". If the result is less than zero, outputs zero." } ; - HELP: fp-nan? { $values { "x" real } { "?" "a boolean" } } { $description "Tests if " { $snippet "x" } " is an IEEE Not-a-Number value. While " { $snippet "x" } " can be any real number, this word will only ever yield true if " { $snippet "x" } " is a " { $link float } "." } ; diff --git a/core/math/math.factor b/core/math/math.factor index 14cbe68351..a35e4926bc 100755 --- a/core/math/math.factor +++ b/core/math/math.factor @@ -17,11 +17,6 @@ MATH: <= ( x y -- ? ) foldable MATH: > ( x y -- ? ) foldable MATH: >= ( x y -- ? ) foldable -: after? ( obj1 obj2 -- ? ) <=> 0 > ; inline -: before? ( obj1 obj2 -- ? ) <=> 0 < ; inline -: after=? ( obj1 obj2 -- ? ) <=> 0 >= ; inline -: before=? ( obj1 obj2 -- ? ) <=> 0 <= ; inline - MATH: + ( x y -- z ) foldable MATH: - ( x y -- z ) foldable MATH: * ( x y -- z ) foldable @@ -61,23 +56,14 @@ M: object zero? drop f ; : sq ( x -- y ) dup * ; inline : neg ( x -- -x ) 0 swap - ; inline : recip ( x -- y ) 1 swap / ; inline +: sgn ( x -- n ) dup 0 < [ drop -1 ] [ 0 > 1 0 ? ] if ; inline : ?1+ [ 1+ ] [ 0 ] if* ; inline : /f ( x y -- z ) >r >float r> >float float/f ; inline -: max ( x y -- z ) [ > ] most ; inline -: min ( x y -- z ) [ < ] most ; inline - -: between? ( x y z -- ? ) - pick >= [ >= ] [ 2drop f ] if ; inline - : rem ( x y -- z ) tuck mod over + swap mod ; foldable -: sgn ( x -- n ) dup 0 < [ drop -1 ] [ 0 > 1 0 ? ] if ; inline - -: [-] ( x y -- z ) - 0 max ; inline - : 2^ ( n -- 2^n ) 1 swap shift ; inline : even? ( n -- ? ) 1 bitand zero? ; @@ -96,13 +82,9 @@ M: number equal? number= ; M: real hashcode* nip >fixnum ; -M: real <=> - ; - ! real and sequence overlap. we disambiguate: M: integer hashcode* nip >fixnum ; -M: integer <=> - ; - GENERIC: fp-nan? ( x -- ? ) M: object fp-nan? @@ -161,7 +143,7 @@ PRIVATE> iterate-prep (each-integer) ; inline : times ( n quot -- ) - [ drop ] swap compose each-integer ; inline + [ drop ] prepose each-integer ; inline : find-integer ( n quot -- i ) iterate-prep (find-integer) ; inline diff --git a/core/optimizer/backend/backend.factor b/core/optimizer/backend/backend.factor index 9630f9dc70..9b70ccdd9d 100755 --- a/core/optimizer/backend/backend.factor +++ b/core/optimizer/backend/backend.factor @@ -87,7 +87,7 @@ M: node optimize-node* drop t f ; : compute-value-substitutions ( #call/#merge #return/#values -- assoc ) [ out-d>> ] [ in-d>> ] bi* 2array unify-lengths flip - [ = not ] assoc-subset >hashtable ; + [ = not ] assoc-filter >hashtable ; : cleanup-inlining ( #return/#values -- newnode changed? ) dup node-successor [ diff --git a/core/optimizer/control/control.factor b/core/optimizer/control/control.factor index 976156db77..de7aec2bb1 100755 --- a/core/optimizer/control/control.factor +++ b/core/optimizer/control/control.factor @@ -75,7 +75,7 @@ USE: prettyprint M: #call-label collect-label-info* node-param label-info get at node-stack get over third tail - [ [ #label? ] subset [ node-param ] map ] keep + [ [ #label? ] filter [ node-param ] map ] keep [ node-successor #tail? ] all? 2array swap second push ; @@ -91,7 +91,7 @@ SYMBOL: potential-loops : remove-non-tail-calls ( -- ) label-info get - [ nip second [ second ] all? ] assoc-subset + [ nip second [ second ] all? ] assoc-filter [ first ] assoc-map potential-loops set ; diff --git a/core/optimizer/def-use/def-use.factor b/core/optimizer/def-use/def-use.factor index 66bffd9767..a2e9f88135 100755 --- a/core/optimizer/def-use/def-use.factor +++ b/core/optimizer/def-use/def-use.factor @@ -56,7 +56,7 @@ UNION: #killable : purge-invariants ( stacks -- seq ) #! Output a sequence of values which are not present in the #! same position in each sequence of the stacks sequence. - unify-lengths flip [ all-eq? not ] subset concat ; + unify-lengths flip [ all-eq? not ] filter concat ; M: #label node-def-use [ @@ -75,7 +75,7 @@ M: #branch node-def-use dup branch-def-use (node-def-use) ; : compute-dead-literals ( -- values ) - def-use get [ >r value? r> empty? and ] assoc-subset ; + def-use get [ >r value? r> empty? and ] assoc-filter ; DEFER: kill-nodes SYMBOL: dead-literals diff --git a/core/optimizer/math/partial/partial.factor b/core/optimizer/math/partial/partial.factor index bbe1d0a83f..8b5e25deb1 100644 --- a/core/optimizer/math/partial/partial.factor +++ b/core/optimizer/math/partial/partial.factor @@ -85,7 +85,7 @@ PREDICATE: math-partial < word : define-math-ops ( op -- ) { fixnum bignum float } [ [ dup 3array ] [ swap method ] 2bi ] with { } map>assoc - [ nip ] assoc-subset + [ nip ] assoc-filter [ word-def peek ] assoc-map % ; SYMBOL: math-ops @@ -155,7 +155,7 @@ SYMBOL: fast-math-ops [ drop math-class-max swap specific-method >boolean ] if ; : (derived-ops) ( word assoc -- words ) - swap [ rot first eq? nip ] curry assoc-subset values ; + swap [ rot first eq? nip ] curry assoc-filter values ; : derived-ops ( word -- words ) [ 1array ] diff --git a/core/optimizer/specializers/specializers.factor b/core/optimizer/specializers/specializers.factor index b33a9e8fc2..c3702e9805 100755 --- a/core/optimizer/specializers/specializers.factor +++ b/core/optimizer/specializers/specializers.factor @@ -12,7 +12,7 @@ IN: optimizer.specializers : make-specializer ( classes -- quot ) dup length [ (picker) 2array ] 2map - [ drop object eq? not ] assoc-subset + [ drop object eq? not ] assoc-filter dup empty? [ drop [ t ] ] [ [ (make-specializer) ] { } assoc>map unclip [ swap [ f ] \ if 3array append [ ] like ] reduce diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 961fa89d8f..1cfe6d63d9 100755 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -63,7 +63,7 @@ t parser-notes set-global : skip ( i seq ? -- n ) over >r - [ swap CHAR: \s eq? xor ] curry find* drop + [ swap CHAR: \s eq? xor ] curry find-from drop [ r> drop ] [ r> length ] if* ; : change-lexer-column ( lexer quot -- ) @@ -207,7 +207,7 @@ SYMBOL: in : add-use ( seq -- ) [ use+ ] each ; : set-use ( seq -- ) - [ vocab-words ] map [ ] subset >vector use set ; + [ vocab-words ] map [ ] filter >vector use set ; : check-vocab-string ( name -- name ) dup string? @@ -270,7 +270,7 @@ M: no-word-error summary : no-word ( name -- newword ) dup no-word-error boa - swap words-named [ forward-reference? not ] subset + swap words-named [ forward-reference? not ] filter word-restarts throw-restarts dup word-vocabulary (use+) ; @@ -278,7 +278,7 @@ M: no-word-error summary dup forward-reference? [ drop use get - [ at ] with map [ ] subset + [ at ] with map [ ] filter [ forward-reference? not ] find nip ] [ nip @@ -516,7 +516,7 @@ SYMBOL: interactive-vocabs assoc-diff [ drop where dup [ first ] when file get source-file-path = - ] assoc-subset keys ; + ] assoc-filter keys ; : removed-definitions ( -- assoc1 assoc2 ) new-definitions old-definitions @@ -531,7 +531,7 @@ SYMBOL: interactive-vocabs : reset-removed-classes ( -- ) removed-classes - filter-moved [ class? ] subset [ reset-class ] each ; + filter-moved [ class? ] filter [ reset-class ] each ; : fix-class-words ( -- ) #! If a class word had a compound definition which was diff --git a/core/prettyprint/backend/backend.factor b/core/prettyprint/backend/backend.factor index c9933d5be2..e13a991e2b 100755 --- a/core/prettyprint/backend/backend.factor +++ b/core/prettyprint/backend/backend.factor @@ -3,7 +3,7 @@ USING: arrays byte-arrays bit-arrays generic hashtables io assocs kernel math namespaces sequences strings sbufs io.styles vectors words prettyprint.config prettyprint.sections quotations -io io.files math.parser effects classes.tuple +io io.files math.parser effects classes.tuple math.order classes.tuple.private classes float-arrays ; IN: prettyprint.backend diff --git a/core/prettyprint/prettyprint.factor b/core/prettyprint/prettyprint.factor index 981c8dcfd0..4974e1df3c 100755 --- a/core/prettyprint/prettyprint.factor +++ b/core/prettyprint/prettyprint.factor @@ -45,7 +45,7 @@ sets ; ] if ; : vocabs. ( in use -- ) - dupd remove [ { "syntax" "scratchpad" } member? not ] subset + dupd remove [ { "syntax" "scratchpad" } member? not ] filter use. in. ; : with-use ( obj quot -- ) diff --git a/core/prettyprint/sections/sections.factor b/core/prettyprint/sections/sections.factor index 803f6e2459..5f32539115 100644 --- a/core/prettyprint/sections/sections.factor +++ b/core/prettyprint/sections/sections.factor @@ -171,7 +171,7 @@ M: block section-fits? ( section -- ? ) line-limit? [ drop t ] [ call-next-method ] if ; : pprint-sections ( block advancer -- ) - swap sections>> [ line-break? not ] subset + swap sections>> [ line-break? not ] filter unclip pprint-section [ dup rot call pprint-section ] with each ; inline @@ -310,7 +310,7 @@ M: f section-end-group? drop f ; 2dup 1+ swap ?nth next set swap nth dup split-before dup , split-after ] with each - ] { } make { t } split [ empty? not ] subset ; + ] { } make { t } split [ empty? not ] filter ; : break-group? ( seq -- ? ) [ first section-fits? ] [ peek section-fits? not ] bi and ; diff --git a/core/quotations/quotations.factor b/core/quotations/quotations.factor index c0f15a9388..2a0f5d289f 100755 --- a/core/quotations/quotations.factor +++ b/core/quotations/quotations.factor @@ -50,14 +50,14 @@ M: curry nth INSTANCE: curry immutable-sequence M: compose length - dup compose-first length - swap compose-second length + ; + [ compose-first length ] + [ compose-second length ] bi + ; M: compose nth 2dup compose-first length < [ compose-first ] [ - [ compose-first length - ] keep compose-second + [ compose-first length - ] [ compose-second ] bi ] if nth ; INSTANCE: compose immutable-sequence diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index 0dea0f43d9..2a2fcf29cd 100755 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -1,5 +1,5 @@ -USING: arrays bit-arrays help.markup help.syntax -sequences.private vectors strings sbufs kernel math ; +USING: arrays bit-arrays help.markup help.syntax math +sequences.private vectors strings sbufs kernel math.order ; IN: sequences ARTICLE: "sequences-unsafe" "Unsafe sequence operations" @@ -92,6 +92,7 @@ ARTICLE: "sequences-slices" "Subsequences and slices" { $subsection subseq } { $subsection head } { $subsection tail } +{ $subsection rest } { $subsection head* } { $subsection tail* } "Taking a sequence apart into a head and a tail:" @@ -105,6 +106,7 @@ ARTICLE: "sequences-slices" "Subsequences and slices" { $subsection } { $subsection head-slice } { $subsection tail-slice } +{ $subsection rest-slice } { $subsection head-slice* } { $subsection tail-slice* } "Taking a sequence apart into a head and a tail:" @@ -127,7 +129,7 @@ ARTICLE: "sequences-combinators" "Sequence combinators" { $subsection unfold } "Filtering:" { $subsection push-if } -{ $subsection subset } ; +{ $subsection filter } ; ARTICLE: "sequences-tests" "Testing sequences" "Testing for an empty sequence:" @@ -153,17 +155,17 @@ ARTICLE: "sequences-tests" "Testing sequences" ARTICLE: "sequences-search" "Searching sequences" "Finding the index of an element:" { $subsection index } -{ $subsection index* } +{ $subsection index-from } { $subsection last-index } -{ $subsection last-index* } +{ $subsection last-index-from } "Finding the start of a subsequence:" { $subsection start } { $subsection start* } "Finding the index of an element satisfying a predicate:" { $subsection find } -{ $subsection find* } +{ $subsection find-from } { $subsection find-last } -{ $subsection find-last* } ; +{ $subsection find-last-from } ; ARTICLE: "sequences-destructive" "Destructive operations" "These words modify their input, instead of creating a new sequence." @@ -500,9 +502,9 @@ HELP: find { $snippet "( elt -- ? )" } } { "i" "the index of the first match, or f" } { "elt" "the first matching element, or " { $link f } } } -{ $description "A simpler variant of " { $link find* } " where the starting index is 0." } ; +{ $description "A simpler variant of " { $link find-from } " where the starting index is 0." } ; -HELP: find* +HELP: find-from { $values { "n" "a starting index" } { "seq" sequence } { "quot" "a quotation with stack effect " @@ -513,9 +515,9 @@ HELP: find* HELP: find-last { $values { "seq" sequence } { "quot" "a quotation with stack effect " { $snippet "( elt -- ? )" } } { "i" "the index of the first match, or f" } { "elt" "the first matching element, or " { $link f } } } -{ $description "A simpler variant of " { $link find-last* } " where the starting index is one less than the length of the sequence." } ; +{ $description "A simpler variant of " { $link find-last-from } " where the starting index is one less than the length of the sequence." } ; -HELP: find-last* +HELP: find-last-from { $values { "n" "a starting index" } { "seq" sequence } { "quot" "a quotation with stack effect " { $snippet "( elt -- ? )" } } { "i" "the index of the first match, or f" } { "elt" "the first matching element, or " { $link f } } } { $description "Applies the quotation to each element of the sequence in reverse order, until it outputs a true value or the start of the sequence is reached. If the quotation yields a true value for some sequence element, the word outputs the element index and the element itself. Otherwise, the word outputs an index of f and " { $link f } " as the element." } ; @@ -530,9 +532,9 @@ HELP: all? HELP: push-if { $values { "elt" object } { "quot" "a quotation with stack effect " { $snippet "( elt -- ? )" } } { "accum" "a resizable mutable sequence" } } { $description "Adds the element at the end of the sequence if the quotation yields a true value." } -{ $notes "This word is a factor of " { $link subset } "." } ; +{ $notes "This word is a factor of " { $link filter } "." } ; -HELP: subset +HELP: filter { $values { "seq" sequence } { "quot" "a quotation with stack effect " { $snippet "( elt -- ? )" } } { "subseq" "a new sequence" } } { $description "Applies the quotation to each element in turn, and outputs a new sequence containing the elements of the original sequence for which the quotation output a true value." } ; @@ -562,9 +564,9 @@ HELP: index { $values { "obj" object } { "seq" sequence } { "n" "an index" } } { $description "Outputs the index of the first element in the sequence equal to " { $snippet "obj" } ". If no element is found, outputs " { $link f } "." } ; -{ index index* last-index last-index* member? memq? } related-words +{ index index-from last-index last-index-from member? memq? } related-words -HELP: index* +HELP: index-from { $values { "obj" object } { "i" "a start index" } { "seq" sequence } { "n" "an index" } } { $description "Outputs the index of the first element in the sequence equal to " { $snippet "obj" } ", starting the search from the " { $snippet "i" } "th element. If no element is found, outputs " { $link f } "." } ; @@ -572,7 +574,7 @@ HELP: last-index { $values { "obj" object } { "seq" sequence } { "n" "an index" } } { $description "Outputs the index of the last element in the sequence equal to " { $snippet "obj" } "; the sequence is traversed back to front. If no element is found, outputs " { $link f } "." } ; -HELP: last-index* +HELP: last-index-from { $values { "obj" object } { "i" "a start index" } { "seq" sequence } { "n" "an index" } } { $description "Outputs the index of the last element in the sequence equal to " { $snippet "obj" } ", traversing the sequence backwards starting from the " { $snippet "i" } "th element and finishing at the first. If no element is found, outputs " { $link f } "." } ; @@ -834,6 +836,12 @@ HELP: tail-slice { $description "Outputs a virtual sequence sharing storage with all elements from the " { $snippet "n" } "th index until the end of the input sequence." } { $errors "Throws an error if the index is out of bounds." } ; +HELP: rest-slice +{ $values { "seq" sequence } { "slice" "a slice" } } +{ $description "Outputs a virtual sequence sharing storage with all elements from the 1st index until the end of the input sequence." } +{ $notes "Equivalent to " { $snippet "1 tail" } } +{ $errors "Throws an error if the index is out of bounds." } ; + HELP: head-slice* { $values { "seq" sequence } { "n" "a non-negative integer" } { "slice" "a slice" } } { $description "Outputs a virtual sequence sharing storage with all elements of " { $snippet "seq" } " until the " { $snippet "n" } "th element from the end. In other words, it outputs a sequence of the first " { $snippet "l-n" } " elements of the input sequence, where " { $snippet "l" } " is its length." } @@ -854,6 +862,11 @@ HELP: tail { $description "Outputs a new sequence consisting of the input sequence with the first n items removed." } { $errors "Throws an error if the index is out of bounds." } ; +HELP: rest +{ $values { "seq" sequence } { "tailseq" "a new sequence" } } +{ $description "Outputs a new sequence consisting of the input sequence with the first item removed." } +{ $errors "Throws an error on an empty sequence." } ; + HELP: head* { $values { "seq" sequence } { "n" "a non-negative integer" } { "headseq" "a new sequence" } } { $description "Outputs a new sequence consisting of all elements of " { $snippet "seq" } " until the " { $snippet "n" } "th element from the end. In other words, it outputs a sequence of the first " { $snippet "l-n" } " elements of the input sequence, where " { $snippet "l" } " is its length." } diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index 100184798c..2479c125a2 100755 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -27,7 +27,7 @@ IN: sequences.tests [ "hello world" "aeiou" [ member? ] curry find ] unit-test [ 4 CHAR: o ] -[ 3 "hello world" "aeiou" [ member? ] curry find* ] unit-test +[ 3 "hello world" "aeiou" [ member? ] curry find-from ] unit-test [ f ] [ 3 [ ] member? ] unit-test [ f ] [ 3 [ 1 2 ] member? ] unit-test @@ -39,18 +39,18 @@ IN: sequences.tests [ 4 ] [ CHAR: x "tuvwxyz" >vector index ] unit-test -[ f ] [ CHAR: x 5 "tuvwxyz" >vector index* ] unit-test +[ f ] [ CHAR: x 5 "tuvwxyz" >vector index-from ] unit-test -[ f ] [ CHAR: a 0 "tuvwxyz" >vector index* ] unit-test +[ f ] [ CHAR: a 0 "tuvwxyz" >vector index-from ] unit-test [ f ] [ [ "Hello" { } 0.75 ] [ string? ] all? ] unit-test [ t ] [ [ ] [ ] all? ] unit-test [ t ] [ [ "hi" t 0.5 ] [ ] all? ] unit-test -[ [ 1 2 3 ] ] [ [ 1 4 2 5 3 6 ] [ 4 < ] subset ] unit-test -[ { 4 2 6 } ] [ { 1 4 2 5 3 6 } [ 2 mod 0 = ] subset ] unit-test +[ [ 1 2 3 ] ] [ [ 1 4 2 5 3 6 ] [ 4 < ] filter ] unit-test +[ { 4 2 6 } ] [ { 1 4 2 5 3 6 } [ 2 mod 0 = ] filter ] unit-test -[ [ 3 ] ] [ [ 1 2 3 ] 2 [ swap < ] curry subset ] unit-test +[ [ 3 ] ] [ [ 1 2 3 ] 2 [ swap < ] curry filter ] unit-test [ "hello world how are you" ] [ { "hello" "world" "how" "are" "you" } " " join ] @@ -169,9 +169,9 @@ unit-test [ 3 "a" ] [ { "a" "b" "c" "a" "d" } [ "a" = ] find-last ] unit-test -[ f f ] [ 100 { 1 2 3 } [ 1 = ] find* ] unit-test -[ f f ] [ 100 { 1 2 3 } [ 1 = ] find-last* ] unit-test -[ f f ] [ -1 { 1 2 3 } [ 1 = ] find* ] unit-test +[ f f ] [ 100 { 1 2 3 } [ 1 = ] find-from ] unit-test +[ f f ] [ 100 { 1 2 3 } [ 1 = ] find-last-from ] unit-test +[ f f ] [ -1 { 1 2 3 } [ 1 = ] find-from ] unit-test [ 0 ] [ { "a" "b" "c" } { "A" "B" "C" } mismatch ] unit-test @@ -187,9 +187,6 @@ unit-test [ V{ "a" "b" } V{ } ] [ { "X" "a" "b" } { "X" } drop-prefix [ >vector ] bi@ ] unit-test -[ -1 ] [ "ab" "abc" <=> ] unit-test -[ 1 ] [ "abc" "ab" <=> ] unit-test - [ 1 4 9 16 16 V{ f 1 4 9 16 } ] [ V{ } clone "cache-test" set 1 "cache-test" get [ sq ] cache-nth diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 924d9a05cb..798a3ed1ed 100755 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2005, 2008 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. +USING: kernel kernel.private slots.private math math.private +math.order ; IN: sequences -USING: kernel kernel.private slots.private math math.private ; MIXIN: sequence @@ -36,7 +37,7 @@ M: sequence lengthen 2dup length > [ set-length ] [ 2drop ] if ; : set-third ( third seq -- ) 2 swap set-nth ; inline : set-fourth ( fourth seq -- ) 3 swap set-nth ; inline -: push ( elt seq -- ) dup length swap set-nth ; +: push ( elt seq -- ) [ length ] [ set-nth ] bi ; : bounds-check? ( n seq -- ? ) length 1- 0 swap between? ; inline @@ -100,13 +101,13 @@ M: integer nth-unsafe drop ; INSTANCE: integer immutable-sequence : first2-unsafe - [ 0 swap nth-unsafe ] keep 1 swap nth-unsafe ; inline + [ 0 swap nth-unsafe 1 ] [ nth-unsafe ] bi ; inline : first3-unsafe - [ first2-unsafe ] keep 2 swap nth-unsafe ; inline + [ first2-unsafe 2 ] [ nth-unsafe ] bi ; inline : first4-unsafe - [ first3-unsafe ] keep 3 swap nth-unsafe ; inline + [ first3-unsafe 3 ] [ nth-unsafe ] bi ; inline : exchange-unsafe ( m n seq -- ) [ tuck nth-unsafe >r nth-unsafe r> ] 3keep tuck @@ -179,7 +180,7 @@ M: reversed length reversed-seq length ; INSTANCE: reversed virtual-sequence -: reverse ( seq -- newseq ) [ ] keep like ; +: reverse ( seq -- newseq ) [ ] [ like ] bi ; ! A slice of another sequence. TUPLE: slice from to seq ; @@ -201,7 +202,7 @@ ERROR: slice-error reason ; M: slice virtual-seq slice-seq ; -M: slice virtual@ [ slice-from + ] keep slice-seq ; +M: slice virtual@ [ slice-from + ] [ slice-seq ] bi ; M: slice length dup slice-to swap slice-from - ; @@ -209,6 +210,8 @@ M: slice length dup slice-to swap slice-from - ; : tail-slice ( seq n -- slice ) (tail) ; +: rest-slice ( seq -- slice ) 1 tail-slice ; + : head-slice* ( seq n -- slice ) from-end head-slice ; : tail-slice* ( seq n -- slice ) from-end tail-slice ; @@ -248,12 +251,14 @@ INSTANCE: repetition immutable-sequence PRIVATE> : subseq ( from to seq -- subseq ) - [ check-slice prepare-subseq (copy) ] keep like ; + [ check-slice prepare-subseq (copy) ] [ like ] bi ; : head ( seq n -- headseq ) (head) subseq ; : tail ( seq n -- tailseq ) (tail) subseq ; +: rest ( seq -- seq' ) 1 tail ; + : head* ( seq n -- headseq ) from-end head ; : tail* ( seq n -- tailseq ) from-end tail ; @@ -267,11 +272,12 @@ M: sequence clone-like M: immutable-sequence clone-like like ; -: push-all ( src dest -- ) [ length ] keep copy ; +: push-all ( src dest -- ) [ length ] [ copy ] bi ; : ((append)) ( seq1 seq2 accum -- accum ) - [ >r over length r> copy ] keep - [ 0 swap copy ] keep ; inline + [ >r over length r> copy ] + [ 0 swap copy ] + [ ] tri ; inline : (append) ( seq1 seq2 exemplar -- newseq ) >r over length over length + r> @@ -279,8 +285,8 @@ M: immutable-sequence clone-like like ; : (3append) ( seq1 seq2 seq3 exemplar -- newseq ) >r pick length pick length pick length + + r> [ - [ >r pick length pick length + r> copy ] keep - ((append)) + [ >r pick length pick length + r> copy ] + [ ((append)) ] bi ] new-like ; inline : append ( seq1 seq2 -- newseq ) over (append) ; @@ -323,7 +329,7 @@ M: immutable-sequence clone-like like ; : (find) ( seq quot quot' -- i elt ) pick >r >r (each) r> call r> finish-find ; inline -: (find*) ( n seq quot quot' -- i elt ) +: (find-from) ( n seq quot quot' -- i elt ) >r >r 2dup bounds-check? [ r> r> (find) ] [ @@ -332,7 +338,7 @@ M: immutable-sequence clone-like like ; : (monotonic) ( seq quot -- ? ) [ 2dup nth-unsafe rot 1+ rot nth-unsafe ] - swap compose curry ; inline + prepose curry ; inline : (interleave) ( n elt between quot -- ) roll zero? [ nip ] [ swapd 2slip ] if call ; inline @@ -373,14 +379,14 @@ PRIVATE> : 2all? ( seq1 seq2 quot -- ? ) (2each) all-integers? ; inline -: find* ( n seq quot -- i elt ) - [ (find-integer) ] (find*) ; inline +: find-from ( n seq quot -- i elt ) + [ (find-integer) ] (find-from) ; inline : find ( seq quot -- i elt ) [ find-integer ] (find) ; inline -: find-last* ( n seq quot -- i elt ) - [ nip find-last-integer ] (find*) ; inline +: find-last-from ( n seq quot -- i elt ) + [ nip find-last-integer ] (find-from) ; inline : find-last ( seq quot -- i elt ) [ >r 1- r> find-last-integer ] (find) ; inline @@ -394,7 +400,7 @@ PRIVATE> : pusher ( quot -- quot accum ) V{ } clone [ [ push-if ] 2curry ] keep ; inline -: subset ( seq quot -- subseq ) +: filter ( seq quot -- subseq ) over >r pusher >r each r> r> like ; inline : monotonic? ( seq quot -- ? ) @@ -414,14 +420,14 @@ PRIVATE> : index ( obj seq -- n ) [ = ] with find drop ; -: index* ( obj i seq -- n ) - rot [ = ] curry find* drop ; +: index-from ( obj i seq -- n ) + rot [ = ] curry find-from drop ; : last-index ( obj seq -- n ) [ = ] with find-last drop ; -: last-index* ( obj i seq -- n ) - rot [ = ] curry find-last* drop ; +: last-index-from ( obj i seq -- n ) + rot [ = ] curry find-last-from drop ; : contains? ( seq quot -- ? ) find drop >boolean ; inline @@ -433,7 +439,7 @@ PRIVATE> [ eq? ] with contains? ; : remove ( obj seq -- newseq ) - [ = not ] with subset ; + [ = not ] with filter ; : cache-nth ( i seq quot -- elt ) 2over ?nth dup [ @@ -472,7 +478,7 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; : move ( to from seq -- ) 2over number= - [ 3drop ] [ [ nth swap ] keep set-nth ] if ; inline + [ 3drop ] [ [ nth swap ] [ set-nth ] bi ] if ; inline : (delete) ( elt store scan seq -- elt store scan seq ) 2dup length < [ @@ -497,9 +503,9 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; [ 0 swap copy ] keep ] new-like ; -: peek ( seq -- elt ) dup length 1- swap nth ; +: peek ( seq -- elt ) [ length 1- ] [ nth ] bi ; -: pop* ( seq -- ) dup length 1- swap set-length ; +: pop* ( seq -- ) [ length 1- ] [ set-length ] bi ; : move-backward ( shift from to seq -- ) 2over number= [ @@ -519,7 +525,7 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; : (open-slice) ( shift from to seq ? -- ) [ - >r >r 1- r> 1- r> move-forward + >r [ 1- ] bi@ r> move-forward ] [ >r >r over - r> r> move-backward ] if ; @@ -544,7 +550,7 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; copy ; : pop ( seq -- elt ) - dup length 1- swap [ nth ] 2keep set-length ; + [ length 1- ] [ [ nth ] [ set-length ] 2bi ] bi ; : all-equal? ( seq -- ? ) [ = ] monotonic? ; @@ -609,7 +615,7 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; ] if ; : cut-slice ( seq n -- before after ) - [ head-slice ] 2keep tail-slice ; + [ head-slice ] [ tail-slice ] 2bi ; : midpoint@ ( seq -- n ) length 2/ ; inline @@ -634,10 +640,10 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ; ] if ; inline : cut ( seq n -- before after ) - [ head ] 2keep tail ; + [ head ] [ tail ] 2bi ; : cut* ( seq n -- before after ) - [ head* ] 2keep tail* ; + [ head* ] [ tail* ] 2bi ; : start* ( subseq seq n -- i ) pick length pick length swap - 1+ - [ (start) ] find* + [ (start) ] find-from swap >r 3drop r> ; : start ( subseq seq -- i ) 0 start* ; inline @@ -662,10 +668,10 @@ PRIVATE> tuck tail-slice >r tail-slice r> ; : unclip ( seq -- rest first ) - dup 1 tail swap first ; + [ rest ] [ first ] bi ; : unclip-slice ( seq -- rest first ) - dup 1 tail-slice swap first ; + [ rest-slice ] [ first ] bi ; : ( seq -- slice ) dup slice? [ { } like ] when 0 over length rot ; @@ -680,7 +686,7 @@ PRIVATE> [ 1+ head ] [ 0 head ] if* ; inline : trim ( seq quot -- newseq ) - [ left-trim ] keep right-trim ; inline + [ left-trim ] [ right-trim ] bi ; inline : sum ( seq -- n ) 0 [ + ] binary-reduce ; : product ( seq -- n ) 1 [ * ] binary-reduce ; diff --git a/core/sets/sets.factor b/core/sets/sets.factor index 31c39c6105..71a7d77903 100644 --- a/core/sets/sets.factor +++ b/core/sets/sets.factor @@ -22,10 +22,10 @@ IN: sets dup length [ (all-unique?) ] curry all? ; : intersect ( seq1 seq2 -- newseq ) - unique [ key? ] curry subset ; + unique [ key? ] curry filter ; : diff ( seq1 seq2 -- newseq ) - swap unique [ key? not ] curry subset ; + swap unique [ key? not ] curry filter ; : union ( seq1 seq2 -- newseq ) append prune ; diff --git a/core/slots/deprecated/deprecated.factor b/core/slots/deprecated/deprecated.factor index 2ec8f3d0d1..90f468a185 100755 --- a/core/slots/deprecated/deprecated.factor +++ b/core/slots/deprecated/deprecated.factor @@ -86,7 +86,7 @@ PREDICATE: slot-writer < word "writing" word-prop >boolean ; { [ over string? ] [ >r dupd r> short-slot ] } { [ over array? ] [ long-slot ] } } cond - ] 2map [ ] subset nip ; + ] 2map [ ] filter nip ; : slot-of-reader ( reader specs -- spec/f ) [ slot-spec-reader eq? ] with find nip ; diff --git a/core/sorting/sorting-docs.factor b/core/sorting/sorting-docs.factor index 4fa5c7974d..3da6ea6bd6 100644 --- a/core/sorting/sorting-docs.factor +++ b/core/sorting/sorting-docs.factor @@ -1,5 +1,6 @@ -USING: sorting help.markup help.syntax kernel words math -sequences ; +USING: help.markup help.syntax kernel words math +sequences math.order ; +IN: sorting ARTICLE: "sequences-sorting" "Sorting and binary search" "Sorting and binary search combinators all take comparator quotations with stack effect " { $snippet "( elt1 elt2 -- n )" } " that order the two given elements and output a value whose sign denotes the result:" diff --git a/core/sorting/sorting.factor b/core/sorting/sorting.factor index 5f81b17187..6aafe2ded1 100755 --- a/core/sorting/sorting.factor +++ b/core/sorting/sorting.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays kernel math sequences vectors +USING: arrays kernel math sequences vectors math.order sequences sequences.private growable ; IN: sorting diff --git a/core/source-files/source-files.factor b/core/source-files/source-files.factor index 5703b631f4..5ef2d46790 100755 --- a/core/source-files/source-files.factor +++ b/core/source-files/source-files.factor @@ -19,7 +19,7 @@ uses definitions ; : (xref-source) ( source-file -- pathname uses ) dup source-file-path - swap source-file-uses [ crossref? ] subset ; + swap source-file-uses [ crossref? ] filter ; : xref-source ( source-file -- ) (xref-source) crossref get add-vertex ; diff --git a/core/splitting/splitting.factor b/core/splitting/splitting.factor index f840ca15ad..eb10b9fe4a 100755 --- a/core/splitting/splitting.factor +++ b/core/splitting/splitting.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel math namespaces strings arrays vectors sequences -sets ; +sets math.order ; IN: splitting TUPLE: groups seq n sliced? ; @@ -61,7 +61,7 @@ INSTANCE: groups sequence dup [ swap ] when ; : (split) ( separators n seq -- ) - 3dup rot [ member? ] curry find* drop + 3dup rot [ member? ] curry find-from drop [ [ swap subseq , ] 2keep 1+ swap (split) ] [ swap dup zero? [ drop ] [ tail ] if , drop ] if* ; inline diff --git a/core/strings/strings-tests.factor b/core/strings/strings-tests.factor index 961c8cdf6e..028759c9f9 100755 --- a/core/strings/strings-tests.factor +++ b/core/strings/strings-tests.factor @@ -31,6 +31,8 @@ IN: strings.tests [ t ] [ "abc" "abd" before? ] unit-test [ t ] [ "z" "abd" after? ] unit-test +[ t ] [ "abc" "abd" min ] unit-test +[ t ] [ "z" "abd" max ] unit-test [ 0 10 "hello" subseq ] must-fail diff --git a/core/threads/threads.factor b/core/threads/threads.factor index 2f9c3a73de..8b89cd5732 100755 --- a/core/threads/threads.factor +++ b/core/threads/threads.factor @@ -1,10 +1,11 @@ ! Copyright (C) 2004, 2008 Slava Pestov. ! Copyright (C) 2005 Mackenzie Straight. ! See http://factorcode.org/license.txt for BSD license. -IN: threads USING: arrays hashtables heaps kernel kernel.private math namespaces sequences vectors continuations continuations.private -dlists assocs system combinators init boxes accessors ; +dlists assocs system combinators init boxes accessors +math.order ; +IN: threads SYMBOL: initial-thread diff --git a/core/vocabs/vocabs.factor b/core/vocabs/vocabs.factor index 24a00189e4..edd82b2596 100755 --- a/core/vocabs/vocabs.factor +++ b/core/vocabs/vocabs.factor @@ -76,14 +76,14 @@ SYMBOL: load-vocab-hook ! ( name -- ) : words-named ( str -- seq ) dictionary get values [ vocab-words at ] with map - [ ] subset ; + [ ] filter ; : child-vocab? ( prefix name -- ? ) 2dup = pick empty? or [ 2drop t ] [ swap CHAR: . suffix head? ] if ; : child-vocabs ( vocab -- seq ) - vocab-name vocabs [ child-vocab? ] with subset ; + vocab-name vocabs [ child-vocab? ] with filter ; TUPLE: vocab-link name ; diff --git a/core/words/words-tests.factor b/core/words/words-tests.factor index 694e54cf96..2a164ab11d 100755 --- a/core/words/words-tests.factor +++ b/core/words/words-tests.factor @@ -68,7 +68,7 @@ FORGET: another-forgotten : foe fee ; : fie foe ; -[ t ] [ \ fee usage [ word? ] subset empty? ] unit-test +[ t ] [ \ fee usage [ word? ] filter empty? ] unit-test [ t ] [ \ foe usage empty? ] unit-test [ f ] [ \ foe crossref get key? ] unit-test @@ -80,7 +80,7 @@ FORGET: foe ] unit-test [ t ] [ - \ * usage [ word? ] subset [ crossref? ] all? + \ * usage [ word? ] filter [ crossref? ] all? ] unit-test DEFER: calls-a-gensym diff --git a/core/words/words.factor b/core/words/words.factor index 3466544eef..138b1ef928 100755 --- a/core/words/words.factor +++ b/core/words/words.factor @@ -2,7 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays definitions graphs assocs kernel kernel.private slots.private math namespaces sequences strings vectors sbufs -quotations assocs hashtables sorting words.private vocabs ; +quotations assocs hashtables sorting words.private vocabs +math.order ; IN: words : word ( -- word ) \ word get-global ; @@ -101,7 +102,7 @@ SYMBOL: compiled-crossref compiled-crossref global [ H{ } assoc-like ] change-at : compiled-xref ( word dependencies -- ) - [ drop compiled-crossref? ] assoc-subset + [ drop compiled-crossref? ] assoc-filter 2dup "compiled-uses" set-word-prop compiled-crossref get add-vertex* ; @@ -121,7 +122,7 @@ SYMBOL: +called+ : compiled-usages ( words -- seq ) [ [ dup ] H{ } map>assoc dup ] keep [ - compiled-usage [ nip +inlined+ eq? ] assoc-subset update + compiled-usage [ nip +inlined+ eq? ] assoc-filter update ] with each keys ; Date: Fri, 25 Apr 2008 23:17:08 -0500 Subject: [PATCH 079/270] extra changes: index* -> index-from last-index* -> last-index-from 1 tail -> rest 1 tail-slice -> rest-slice subset -> filter prepose find* -> find-from find-last* -> find-last-from before, after generic, < for integers make between? work for timestamps --- extra/alarms/alarms.factor | 2 +- extra/ascii/ascii-tests.factor | 3 +- extra/ascii/ascii.factor | 2 +- extra/benchmark/dispatch1/dispatch1.factor | 2 +- extra/benchmark/dispatch5/dispatch5.factor | 2 +- extra/bitfields/bitfields.factor | 2 +- extra/boids/boids.factor | 6 +-- extra/bootstrap/help/help.factor | 2 +- extra/builder/benchmark/benchmark.factor | 4 +- extra/bunny/bunny.factor | 2 +- extra/bunny/model/model.factor | 2 +- extra/calendar/calendar.factor | 2 +- extra/calendar/format/format.factor | 2 +- extra/classes/tuple/lib/lib.factor | 2 +- extra/cocoa/messages/messages.factor | 2 +- .../combinators/combinators-docs.factor | 6 +-- .../combinators/combinators-tests.factor | 4 +- .../combinators/combinators.factor | 2 +- .../core-foundation/fsevents/fsevents.factor | 2 +- extra/db/db.factor | 2 +- extra/db/queries/queries.factor | 2 +- extra/db/types/types.factor | 8 ++-- extra/documents/documents.factor | 6 +-- extra/factory/commands/commands.factor | 4 +- extra/factory/factory.factor | 2 +- extra/faq/faq.factor | 4 +- extra/fry/fry.factor | 4 +- extra/hardware-info/linux/linux.factor | 4 +- extra/help/cookbook/cookbook.factor | 2 +- extra/help/handbook/handbook.factor | 4 +- extra/help/help.factor | 6 +-- extra/help/lint/lint.factor | 12 +++--- extra/help/tutorial/tutorial.factor | 8 ++-- extra/html/parser/analyzer/analyzer.factor | 30 ++++++------- extra/http/server/server.factor | 2 +- .../templating/chloe/chloe-tests.factor | 2 +- .../http/server/templating/chloe/chloe.factor | 2 +- extra/io/buffers/buffers.factor | 4 +- extra/io/encodings/8-bit/8-bit.factor | 2 +- extra/io/nonblocking/nonblocking.factor | 2 +- extra/io/sockets/impl/impl.factor | 2 +- extra/io/unix/select/select.factor | 2 +- extra/koszul/koszul.factor | 8 ++-- extra/lazy-lists/examples/examples.factor | 2 +- extra/lazy-lists/lazy-lists-docs.factor | 6 +-- extra/lazy-lists/lazy-lists.factor | 42 +++++++++---------- extra/logging/logging.factor | 4 +- extra/logging/server/server.factor | 2 +- extra/math/complex/complex-tests.factor | 4 +- extra/math/functions/functions-docs.factor | 2 +- extra/math/functions/functions-tests.factor | 4 +- extra/math/functions/functions.factor | 2 +- .../matrices/elimination/elimination.factor | 4 +- extra/math/ranges/ranges.factor | 2 +- extra/math/ratios/ratios-tests.factor | 4 +- extra/math/vectors/vectors.factor | 2 +- extra/maze/maze.factor | 2 +- extra/memoize/memoize-tests.factor | 1 + extra/models/models.factor | 2 +- extra/multi-methods/multi-methods.factor | 8 ++-- extra/newfx/newfx.factor | 2 +- extra/opengl/gl/extensions/extensions.factor | 2 +- extra/openssl/openssl-tests.factor | 2 +- extra/optimizer/report/report.factor | 4 +- .../parser-combinators.factor | 2 +- extra/peg/ebnf/ebnf.factor | 2 +- extra/peg/peg.factor | 2 +- extra/peg/search/search.factor | 4 +- .../porter-stemmer-tests.factor | 2 +- extra/project-euler/001/001.factor | 2 +- extra/project-euler/002/002.factor | 4 +- extra/project-euler/004/004.factor | 2 +- extra/project-euler/022/022.factor | 2 +- extra/project-euler/023/023.factor | 2 +- extra/project-euler/026/026.factor | 2 +- extra/project-euler/027/027.factor | 4 +- extra/project-euler/030/030.factor | 2 +- extra/project-euler/032/032.factor | 4 +- extra/project-euler/033/033.factor | 4 +- extra/project-euler/034/034.factor | 2 +- extra/project-euler/035/035.factor | 2 +- extra/project-euler/036/036.factor | 2 +- extra/project-euler/037/037.factor | 2 +- extra/project-euler/038/038.factor | 2 +- extra/project-euler/042/042.factor | 2 +- extra/project-euler/043/043.factor | 8 ++-- extra/project-euler/044/044.factor | 2 +- extra/project-euler/079/079.factor | 2 +- extra/project-euler/150/150.factor | 2 +- extra/regexp/regexp.factor | 2 +- extra/reports/optimizer/optimizer.factor | 4 +- extra/sequences/deep/deep-docs.factor | 2 +- extra/sequences/deep/deep-tests.factor | 6 +-- extra/sequences/deep/deep.factor | 12 +++--- extra/sequences/lib/lib.factor | 12 +++--- extra/shufflers/shufflers-tests.factor | 1 + extra/smtp/smtp-tests.factor | 2 +- extra/tetris/board/board.factor | 2 +- extra/tools/annotations/annotations.factor | 2 +- extra/tools/completion/completion.factor | 8 ++-- extra/tools/deploy/shaker/shaker.factor | 6 +-- extra/tools/memory/memory-docs.factor | 2 +- extra/tools/profiler/profiler.factor | 6 +-- extra/tools/test/test.factor | 2 +- extra/tools/threads/threads.factor | 4 +- extra/tools/vocabs/browser/browser.factor | 6 +-- extra/tools/vocabs/vocabs.factor | 14 +++---- extra/ui/commands/commands.factor | 2 +- extra/ui/gadgets/editors/editors.factor | 3 +- extra/ui/gadgets/lists/lists.factor | 2 +- extra/ui/gadgets/packs/packs.factor | 2 +- extra/ui/gadgets/paragraphs/paragraphs.factor | 2 +- extra/ui/gadgets/sliders/sliders.factor | 2 +- extra/ui/gadgets/tracks/tracks.factor | 2 +- extra/ui/gestures/gestures.factor | 2 +- extra/ui/operations/operations.factor | 2 +- extra/ui/render/render.factor | 2 +- extra/ui/tools/interactor/interactor.factor | 2 +- extra/ui/tools/tools-tests.factor | 2 +- extra/ui/ui.factor | 2 +- extra/unicode/breaks/breaks.factor | 2 +- extra/unicode/data/data.factor | 17 ++++---- extra/unicode/normalize/normalize.factor | 6 +-- extra/unicode/syntax/syntax.factor | 11 ++--- extra/windows/com/syntax/syntax.factor | 2 +- extra/windows/messages/messages.factor | 2 +- extra/wrap/wrap.factor | 2 +- extra/x/widgets/wm/root/root.factor | 4 +- .../unmapped-frames-menu.factor | 2 +- extra/x/widgets/wm/workspace/workspace.factor | 2 +- extra/xml/tests/test.factor | 2 +- extra/xml/utilities/utilities.factor | 10 ++--- extra/xml/writer/writer.factor | 2 +- extra/xml/xml.factor | 2 +- extra/xmode/keyword-map/keyword-map.factor | 2 +- extra/xmode/utilities/utilities-tests.factor | 2 +- extra/xmode/utilities/utilities.factor | 6 +-- 137 files changed, 272 insertions(+), 268 deletions(-) diff --git a/extra/alarms/alarms.factor b/extra/alarms/alarms.factor index bd1f02c44c..ddc1d34121 100755 --- a/extra/alarms/alarms.factor +++ b/extra/alarms/alarms.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays calendar combinators generic init kernel math namespaces sequences heaps boxes threads debugger quotations -assocs ; +assocs math.order ; IN: alarms TUPLE: alarm quot time interval entry ; diff --git a/extra/ascii/ascii-tests.factor b/extra/ascii/ascii-tests.factor index b2b13b1d78..7dacce734b 100644 --- a/extra/ascii/ascii-tests.factor +++ b/extra/ascii/ascii-tests.factor @@ -1,5 +1,5 @@ -IN: ascii.tests USING: ascii tools.test sequences kernel math ; +IN: ascii.tests [ t ] [ CHAR: a letter? ] unit-test [ f ] [ CHAR: A letter? ] unit-test @@ -8,7 +8,6 @@ USING: ascii tools.test sequences kernel math ; [ t ] [ CHAR: 0 digit? ] unit-test [ f ] [ CHAR: x digit? ] unit-test - [ 4 ] [ 0 "There are Four Upper Case characters" [ LETTER? [ 1+ ] when ] each diff --git a/extra/ascii/ascii.factor b/extra/ascii/ascii.factor index e4a365cd1b..30b801a950 100755 --- a/extra/ascii/ascii.factor +++ b/extra/ascii/ascii.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: sequences math kernel ; +USING: kernel math math.order sequences ; IN: ascii : blank? ( ch -- ? ) " \t\n\r" member? ; inline diff --git a/extra/benchmark/dispatch1/dispatch1.factor b/extra/benchmark/dispatch1/dispatch1.factor index 3317348f45..1c8701f73f 100644 --- a/extra/benchmark/dispatch1/dispatch1.factor +++ b/extra/benchmark/dispatch1/dispatch1.factor @@ -65,7 +65,7 @@ TUPLE: x30 ; M: x30 g ; : my-classes ( -- seq ) - "benchmark.dispatch1" words [ tuple-class? ] subset ; + "benchmark.dispatch1" words [ tuple-class? ] filter ; : a-bunch-of-objects ( -- seq ) my-classes [ new ] map ; diff --git a/extra/benchmark/dispatch5/dispatch5.factor b/extra/benchmark/dispatch5/dispatch5.factor index a2f096695b..727d288765 100755 --- a/extra/benchmark/dispatch5/dispatch5.factor +++ b/extra/benchmark/dispatch5/dispatch5.factor @@ -65,7 +65,7 @@ TUPLE: x30 ; INSTANCE: x30 g : my-classes ( -- seq ) - "benchmark.dispatch5" words [ tuple-class? ] subset ; + "benchmark.dispatch5" words [ tuple-class? ] filter ; : a-bunch-of-objects ( -- seq ) my-classes [ new ] map ; diff --git a/extra/bitfields/bitfields.factor b/extra/bitfields/bitfields.factor index fca0568adf..7fcec00e98 100644 --- a/extra/bitfields/bitfields.factor +++ b/extra/bitfields/bitfields.factor @@ -93,7 +93,7 @@ M: check< summary drop "Number exceeds upper bound" ; >r keys r> define-slots ; : filter-pad ( slots -- slots ) - [ drop padding-name? not ] assoc-subset ; + [ drop padding-name? not ] assoc-filter ; : define-bitfield ( classname slots -- ) [ diff --git a/extra/boids/boids.factor b/extra/boids/boids.factor index 4ea20629c1..91e5e5fe22 100644 --- a/extra/boids/boids.factor +++ b/extra/boids/boids.factor @@ -116,7 +116,7 @@ over boid-vel -rot relative-position angle-between ; <--&& ; : cohesion-neighborhood ( self -- boids ) - boids> [ within-cohesion-neighborhood? ] with subset ; + boids> [ within-cohesion-neighborhood? ] with filter ; : cohesion-force ( self -- force ) dup cohesion-neighborhood @@ -136,7 +136,7 @@ over boid-vel -rot relative-position angle-between ; <--&& ; : separation-neighborhood ( self -- boids ) - boids> [ within-separation-neighborhood? ] with subset ; + boids> [ within-separation-neighborhood? ] with filter ; : separation-force ( self -- force ) dup separation-neighborhood @@ -156,7 +156,7 @@ over boid-vel -rot relative-position angle-between ; <--&& ; : alignment-neighborhood ( self -- boids ) -boids> [ within-alignment-neighborhood? ] with subset ; +boids> [ within-alignment-neighborhood? ] with filter ; : alignment-force ( self -- force ) alignment-neighborhood diff --git a/extra/bootstrap/help/help.factor b/extra/bootstrap/help/help.factor index 4326fcf61b..9dd4fd04b2 100755 --- a/extra/bootstrap/help/help.factor +++ b/extra/bootstrap/help/help.factor @@ -11,7 +11,7 @@ IN: bootstrap.help [ drop ] load-vocab-hook [ vocabs - [ vocab-docs-loaded? not ] subset + [ vocab-docs-loaded? not ] filter [ load-docs ] each ] with-variable ; diff --git a/extra/builder/benchmark/benchmark.factor b/extra/builder/benchmark/benchmark.factor index 9e5e932831..afe277d30b 100644 --- a/extra/builder/benchmark/benchmark.factor +++ b/extra/builder/benchmark/benchmark.factor @@ -5,9 +5,9 @@ USING: kernel continuations arrays assocs sequences sorting math IN: builder.benchmark ! : passing-benchmarks ( table -- table ) -! [ second first2 number? swap number? and ] subset ; +! [ second first2 number? swap number? and ] filter ; -: passing-benchmarks ( table -- table ) [ second number? ] subset ; +: passing-benchmarks ( table -- table ) [ second number? ] filter ; ! : simplify-table ( table -- table ) [ first2 second 2array ] map ; diff --git a/extra/bunny/bunny.factor b/extra/bunny/bunny.factor index 43b9edcd00..ae34923c64 100755 --- a/extra/bunny/bunny.factor +++ b/extra/bunny/bunny.factor @@ -33,7 +33,7 @@ M: bunny-gadget graft* ( gadget -- ) [ ] [ ] [ ] - } map-call-with [ ] subset + } map-call-with [ ] filter 0 roll { set-bunny-gadget-geom diff --git a/extra/bunny/model/model.factor b/extra/bunny/model/model.factor index 897a30c417..2af7a17560 100755 --- a/extra/bunny/model/model.factor +++ b/extra/bunny/model/model.factor @@ -6,7 +6,7 @@ float-arrays continuations namespaces sequences.lib ; IN: bunny.model : numbers ( str -- seq ) - " " split [ string>number ] map [ ] subset ; + " " split [ string>number ] map [ ] filter ; : (parse-model) ( vs is -- vs is ) readln [ diff --git a/extra/calendar/calendar.factor b/extra/calendar/calendar.factor index 2f93bf8218..0e21876fe9 100755 --- a/extra/calendar/calendar.factor +++ b/extra/calendar/calendar.factor @@ -3,7 +3,7 @@ USING: arrays kernel math math.functions namespaces sequences strings system vocabs.loader calendar.backend threads -accessors combinators locals classes.tuple ; +accessors combinators locals classes.tuple math.order ; IN: calendar TUPLE: timestamp year month day hour minute second gmt-offset ; diff --git a/extra/calendar/format/format.factor b/extra/calendar/format/format.factor index 7bdaea70b5..33cc8c63fe 100755 --- a/extra/calendar/format/format.factor +++ b/extra/calendar/format/format.factor @@ -1,5 +1,5 @@ USING: math math.parser kernel sequences io calendar -accessors arrays io.streams.string splitting +accessors arrays io.streams.string splitting math.order combinators accessors debugger ; IN: calendar.format diff --git a/extra/classes/tuple/lib/lib.factor b/extra/classes/tuple/lib/lib.factor index 38104a45db..d48addecc3 100755 --- a/extra/classes/tuple/lib/lib.factor +++ b/extra/classes/tuple/lib/lib.factor @@ -11,7 +11,7 @@ MACRO: >tuple< ( class -- ) MACRO: >tuple*< ( class -- ) all-slots - [ slot-spec-name "*" tail? ] subset + [ slot-spec-name "*" tail? ] filter reader-slots ; diff --git a/extra/cocoa/messages/messages.factor b/extra/cocoa/messages/messages.factor index df3f84d451..f917e20bc4 100755 --- a/extra/cocoa/messages/messages.factor +++ b/extra/cocoa/messages/messages.factor @@ -142,7 +142,7 @@ H{ } assoc-union alien>objc-types set-global : objc-struct-type ( i string -- ctype ) - 2dup CHAR: = -rot index* swap subseq + 2dup CHAR: = -rot index-from swap subseq dup c-types get key? [ "Warning: no such C type: " write dup print drop "void*" diff --git a/extra/concurrency/combinators/combinators-docs.factor b/extra/concurrency/combinators/combinators-docs.factor index 0db235d9e6..bbf8fb0f5f 100755 --- a/extra/concurrency/combinators/combinators-docs.factor +++ b/extra/concurrency/combinators/combinators-docs.factor @@ -11,15 +11,15 @@ HELP: parallel-each { $description "Spawns a new thread for applying " { $snippet "quot" } " to every element of " { $snippet "seq" } ", blocking until all quotations complete." } { $errors "Throws an error if one of the iterations throws an error." } ; -HELP: parallel-subset +HELP: parallel-filter { $values { "seq" sequence } { "quot" "a quotation with stack effect " { $snippet "( elt -- ? )" } } { "newseq" sequence } } { $description "Spawns a new thread for applying " { $snippet "quot" } " to every element of " { $snippet "seq" } ", collecting the elements for which the quotation yielded a true value." } { $errors "Throws an error if one of the iterations throws an error." } ; ARTICLE: "concurrency.combinators" "Concurrent combinators" -"The " { $vocab-link "concurrency.combinators" } " vocabulary provides concurrent variants of " { $link each } ", " { $link map } " and " { $link subset } ":" +"The " { $vocab-link "concurrency.combinators" } " vocabulary provides concurrent variants of " { $link each } ", " { $link map } " and " { $link filter } ":" { $subsection parallel-each } { $subsection parallel-map } -{ $subsection parallel-subset } ; +{ $subsection parallel-filter } ; ABOUT: "concurrency.combinators" diff --git a/extra/concurrency/combinators/combinators-tests.factor b/extra/concurrency/combinators/combinators-tests.factor index 731a740983..3381cba5e8 100755 --- a/extra/concurrency/combinators/combinators-tests.factor +++ b/extra/concurrency/combinators/combinators-tests.factor @@ -4,7 +4,7 @@ concurrency.mailboxes threads sequences accessors ; [ [ drop ] parallel-each ] must-infer [ [ ] parallel-map ] must-infer -[ [ ] parallel-subset ] must-infer +[ [ ] parallel-filter ] must-infer [ { 1 4 9 } ] [ { 1 2 3 } [ sq ] parallel-map ] unit-test @@ -14,7 +14,7 @@ concurrency.mailboxes threads sequences accessors ; [ error>> "Even" = ] must-fail-with [ V{ 0 3 6 9 } ] -[ 10 [ 3 mod zero? ] parallel-subset ] unit-test +[ 10 [ 3 mod zero? ] parallel-filter ] unit-test [ 10 ] [ diff --git a/extra/concurrency/combinators/combinators.factor b/extra/concurrency/combinators/combinators.factor index 76c3cfa77d..3c4101e381 100755 --- a/extra/concurrency/combinators/combinators.factor +++ b/extra/concurrency/combinators/combinators.factor @@ -13,5 +13,5 @@ IN: concurrency.combinators [ [ >r curry r> spawn-stage ] 2curry each ] keep await ; inline -: parallel-subset ( seq quot -- newseq ) +: parallel-filter ( seq quot -- newseq ) over >r pusher >r each r> r> like ; inline diff --git a/extra/core-foundation/fsevents/fsevents.factor b/extra/core-foundation/fsevents/fsevents.factor index 67a4e59d04..4698aa45ae 100644 --- a/extra/core-foundation/fsevents/fsevents.factor +++ b/extra/core-foundation/fsevents/fsevents.factor @@ -153,7 +153,7 @@ SYMBOL: event-stream-callbacks [ event-stream-callbacks global - [ [ drop expired? not ] assoc-subset H{ } assoc-like ] change-at + [ [ drop expired? not ] assoc-filter H{ } assoc-like ] change-at ] "core-foundation" add-init-hook : add-event-source-callback ( quot -- id ) diff --git a/extra/db/db.factor b/extra/db/db.factor index 91128a7ffb..42a2b4bcb0 100755 --- a/extra/db/db.factor +++ b/extra/db/db.factor @@ -130,7 +130,7 @@ M: nonthrowable execute-statement* ( statement type -- ) : with-db ( db seq quot -- ) >r make-db db-open db r> - [ db get swap [ drop ] swap compose with-disposal ] curry with-variable ; + [ db get swap [ drop ] prepose with-disposal ] curry with-variable ; inline : default-query ( query -- result-set ) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index c9fd9a38a4..41b2d01b28 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -95,6 +95,6 @@ M: db ( tuple class -- statement ) " from " 0% 0% dupd - [ slot-name>> swap get-slot-named ] with subset + [ slot-name>> swap get-slot-named ] with filter dup empty? [ 2drop ] [ where-clause ] if ";" 0% ] query-make ; diff --git a/extra/db/types/types.factor b/extra/db/types/types.factor index 110a8a388a..887293ef94 100755 --- a/extra/db/types/types.factor +++ b/extra/db/types/types.factor @@ -83,13 +83,13 @@ FACTOR-BLOB NULL ; dup number? [ number>string ] when ; : maybe-remove-id ( specs -- obj ) - [ +native-id+? not ] subset ; + [ +native-id+? not ] filter ; : remove-relations ( specs -- newcolumns ) - [ relation? not ] subset ; + [ relation? not ] filter ; : remove-id ( specs -- obj ) - [ primary-key>> not ] subset ; + [ primary-key>> not ] filter ; ! SQLite Types: http://www.sqlite.org/datatype3.html ! NULL INTEGER REAL TEXT BLOB @@ -152,7 +152,7 @@ HOOK: bind# db ( spec obj -- ) tuck offset-of-slot set-slot ; : tuple>filled-slots ( tuple -- alist ) - [ nip ] assoc-subset ; + [ nip ] assoc-filter ; : tuple>params ( specs tuple -- obj ) [ diff --git a/extra/documents/documents.factor b/extra/documents/documents.factor index 4fa4ed3c09..435a0aca55 100755 --- a/extra/documents/documents.factor +++ b/extra/documents/documents.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2006, 2007 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: arrays io kernel math models namespaces sequences strings -splitting combinators unicode.categories ; +splitting combinators unicode.categories math.order ; IN: documents : +col ( loc n -- newloc ) >r first2 r> + 2array ; @@ -184,10 +184,10 @@ M: one-char-elt next-elt 2drop ; [ >r blank? r> xor ] curry ; inline : (prev-word) ( ? col str -- col ) - rot break-detector find-last* drop ?1+ ; + rot break-detector find-last-from drop ?1+ ; : (next-word) ( ? col str -- col ) - [ rot break-detector find* drop ] keep + [ rot break-detector find-from drop ] keep over not [ nip length ] [ drop ] if ; TUPLE: one-word-elt ; diff --git a/extra/factory/commands/commands.factor b/extra/factory/commands/commands.factor index 5b0c575771..6bf5ee8d4f 100644 --- a/extra/factory/commands/commands.factor +++ b/extra/factory/commands/commands.factor @@ -35,7 +35,7 @@ pointer-window up-till-frame dup is? [ ] [ drop f ] if ; wm-root> <- children - [ <- mapped? ] subset + [ <- mapped? ] filter [ check-window-table ] map reverse @@ -64,7 +64,7 @@ drop ! wm-root> ! <- children -! [ <- mapped? ] subset +! [ <- mapped? ] filter ! [ check-window-table ] map ! reverse diff --git a/extra/factory/factory.factor b/extra/factory/factory.factor index ca534f12c1..6faf334fc3 100644 --- a/extra/factory/factory.factor +++ b/extra/factory/factory.factor @@ -13,7 +13,7 @@ IN: factory ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : manage-windows ( -- ) -dpy get $default-root <- children [ <- mapped? ] subset +dpy get $default-root <- children [ <- mapped? ] filter [ $id new* drop ] each ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/extra/faq/faq.factor b/extra/faq/faq.factor index 1022a02d7e..8c1a0e034c 100644 --- a/extra/faq/faq.factor +++ b/extra/faq/faq.factor @@ -16,7 +16,7 @@ TUPLE: q/a question answer ; C: q/a : li>q/a ( li -- q/a ) - [ "br" tag-named*? not ] subset + [ "br" tag-named*? not ] filter [ "strong" tag-named*? ] find-after >r tag-children r> ; @@ -39,7 +39,7 @@ C: question-list : xml>question-list ( list -- question-list ) [ "title" swap at ] keep - tag-children [ tag? ] subset [ xml>q/a ] map + tag-children [ tag? ] filter [ xml>q/a ] map ; : question-list>xml ( question-list -- list ) diff --git a/extra/fry/fry.factor b/extra/fry/fry.factor index 7621af6899..1b9e2dc82b 100755 --- a/extra/fry/fry.factor +++ b/extra/fry/fry.factor @@ -14,7 +14,7 @@ DEFER: (shallow-fry) : ((shallow-fry)) ( accum quot adder -- result ) >r [ ] swap (shallow-fry) r> append swap dup empty? [ drop ] [ - [ swap compose ] curry append + [ prepose ] curry append ] if ; inline : (shallow-fry) ( accum quot -- result ) @@ -51,7 +51,7 @@ DEFER: (shallow-fry) [ dup callable? [ [ - [ { , namespaces:, @ } member? ] subset length + [ { , namespaces:, @ } member? ] filter length \ , % ] [ deep-fry % ] bi diff --git a/extra/hardware-info/linux/linux.factor b/extra/hardware-info/linux/linux.factor index de7b3f40a5..5d9ca6eaa7 100644 --- a/extra/hardware-info/linux/linux.factor +++ b/extra/hardware-info/linux/linux.factor @@ -7,7 +7,7 @@ IN: hardware-info.linux : uname ( -- seq ) 65536 "char" [ (uname) io-error ] keep - "\0" split [ empty? not ] subset [ >string ] map + "\0" split [ empty? not ] filter [ >string ] map 6 "" pad-right ; : sysname ( -- string ) uname first ; @@ -18,4 +18,4 @@ IN: hardware-info.linux : domainname ( -- string ) uname 5 swap nth ; : kernel-version ( -- seq ) - release ".-" split [ ] subset 5 "" pad-right ; + release ".-" split [ ] filter 5 "" pad-right ; diff --git a/extra/help/cookbook/cookbook.factor b/extra/help/cookbook/cookbook.factor index 9b21bf7fff..995b8540f5 100755 --- a/extra/help/cookbook/cookbook.factor +++ b/extra/help/cookbook/cookbook.factor @@ -111,7 +111,7 @@ $nl "You can create a new array, only containing elements which satisfy some condition:" { $example ": negative? ( n -- ? ) 0 < ;" - "{ -12 10 16 0 -1 -3 -9 } [ negative? ] subset ." + "{ -12 10 16 0 -1 -3 -9 } [ negative? ] filter ." "{ -12 -1 -3 -9 }" } { $references diff --git a/extra/help/handbook/handbook.factor b/extra/help/handbook/handbook.factor index 15e3b8be1d..7babaec7f6 100755 --- a/extra/help/handbook/handbook.factor +++ b/extra/help/handbook/handbook.factor @@ -228,13 +228,13 @@ ARTICLE: "article-index" "Article index" { $index [ articles get keys ] } ; ARTICLE: "primitive-index" "Primitive index" -{ $index [ all-words [ primitive? ] subset ] } ; +{ $index [ all-words [ primitive? ] filter ] } ; ARTICLE: "error-index" "Error index" { $index [ all-errors ] } ; ARTICLE: "type-index" "Type index" -{ $index [ builtins get [ ] subset ] } ; +{ $index [ builtins get [ ] filter ] } ; ARTICLE: "class-index" "Class index" { $index [ classes ] } ; diff --git a/extra/help/help.factor b/extra/help/help.factor index e0b2709932..2d56251392 100755 --- a/extra/help/help.factor +++ b/extra/help/help.factor @@ -29,7 +29,7 @@ M: predicate word-help* drop \ $predicate ; : all-articles ( -- seq ) articles get keys - all-words [ word-help ] subset append ; + all-words [ word-help ] filter append ; : xref-help ( -- ) all-articles [ xref-article ] each ; @@ -41,7 +41,7 @@ M: predicate word-help* drop \ $predicate ; [ dup article-title ] { } map>assoc sort-values keys ; : all-errors ( -- seq ) - all-words [ error? ] subset sort-articles ; + all-words [ error? ] filter sort-articles ; M: word article-name word-name ; @@ -135,7 +135,7 @@ M: word set-article-parent swap "help-parent" set-word-prop ; ":vars - list all variables at error time" print ; : :help ( -- ) - error get delegates [ error-help ] map [ ] subset + error get delegates [ error-help ] map [ ] filter { { [ dup empty? ] [ (:help-none) ] } { [ dup length 1 = ] [ first help ] } diff --git a/extra/help/lint/lint.factor b/extra/help/lint/lint.factor index 28af93f295..99c1798314 100755 --- a/extra/help/lint/lint.factor +++ b/extra/help/lint/lint.factor @@ -75,7 +75,7 @@ IN: help.lint [ help ] with-string-writer drop ; : all-word-help ( words -- seq ) - [ word-help ] subset ; + [ word-help ] filter ; TUPLE: help-error topic ; @@ -131,7 +131,7 @@ M: help-error error. articles get keys "group-articles" set child-vocabs [ dup check-vocab ] { } map>assoc - [ nip empty? not ] assoc-subset + [ nip empty? not ] assoc-filter ] with-scope ; : typos. ( assoc -- ) @@ -150,12 +150,12 @@ M: help-error error. : help-lint-all ( -- ) "" help-lint ; : unlinked-words ( words -- seq ) - all-word-help [ article-parent not ] subset ; + all-word-help [ article-parent not ] filter ; : linked-undocumented-words ( -- seq ) all-words - [ word-help not ] subset - [ article-parent ] subset - [ "predicating" word-prop not ] subset ; + [ word-help not ] filter + [ article-parent ] filter + [ "predicating" word-prop not ] filter ; MAIN: help-lint diff --git a/extra/help/tutorial/tutorial.factor b/extra/help/tutorial/tutorial.factor index f01840d927..fffcda69b6 100755 --- a/extra/help/tutorial/tutorial.factor +++ b/extra/help/tutorial/tutorial.factor @@ -123,8 +123,8 @@ $nl { $code "\"A man, a plan, a canal: Panama.\"" } "Now, place a quotation containing " { $link Letter? } " on the stack; quoting code places it on the stack instead of executing it immediately:" { $code "[ Letter? ]" } -"Finally, pass the string and the quotation to the " { $link subset } " word:" -{ $code "subset" } +"Finally, pass the string and the quotation to the " { $link filter } " word:" +{ $code "filter" } "Now the stack should contain the following string:" { "\"AmanaplanacanalPanama\"" } "This is almost what we want; we just need to convert the string to lower case now. This can be done by calling " { $link >lower } "; the " { $snippet ">" } " prefix is a naming convention for conversion operations, and should be read as ``to'':" @@ -132,9 +132,9 @@ $nl "Finally, let's print the top of the stack and discard it:" { $code "." } "This will output " { $snippet "amanaplanacanalpanama" } ". This string is in the form that we want, and we evaluated the following code to get it into this form:" -{ $code "[ Letter? ] subset >lower" } +{ $code "[ Letter? ] filter >lower" } "This code starts with a string on the stack, removes non-alphabetical characters, and converts the result to lower case, leaving a new string on the stack. We put this code in a new word, and add the new word to " { $snippet "palindrome.factor" } ":" -{ $code ": normalize ( str -- newstr ) [ Letter? ] subset >lower ;" } +{ $code ": normalize ( str -- newstr ) [ Letter? ] filter >lower ;" } "You will need to add " { $vocab-link "unicode.categories" } " to the vocabulary search path, so that " { $link Letter? } " can be used in the source file." $nl "We modify " { $snippet "palindrome?" } " to first apply " { $snippet "normalize" } " to its input:" diff --git a/extra/html/parser/analyzer/analyzer.factor b/extra/html/parser/analyzer/analyzer.factor index 1a60390f64..afe83d180a 100755 --- a/extra/html/parser/analyzer/analyzer.factor +++ b/extra/html/parser/analyzer/analyzer.factor @@ -11,7 +11,7 @@ IN: html.parser.analyzer (find-relative) ; : (find-all) ( n seq quot -- ) - 2dup >r >r find* [ + 2dup >r >r find-from [ dupd 2array , 1+ r> r> (find-all) ] [ r> r> 3drop @@ -21,7 +21,7 @@ IN: html.parser.analyzer [ 0 -rot (find-all) ] { } make ; : (find-nth) ( offset seq quot n count -- obj ) - >r >r [ find* ] 2keep 4 npick [ + >r >r [ find-from ] 2keep 4 npick [ r> r> 1+ 2dup <= [ 4drop ] [ @@ -46,7 +46,7 @@ IN: html.parser.analyzer ] [ drop t ] if - ] subset ; + ] filter ; : trim-text ( vector -- vector' ) [ @@ -57,14 +57,14 @@ IN: html.parser.analyzer ] map ; : find-by-id ( id vector -- vector ) - [ tag-attributes "id" swap at = ] with subset ; + [ tag-attributes "id" swap at = ] with filter ; : find-by-class ( id vector -- vector ) - [ tag-attributes "class" swap at = ] with subset ; + [ tag-attributes "class" swap at = ] with filter ; : find-by-name ( str vector -- vector ) >r >lower r> - [ tag-name = ] with subset ; + [ tag-name = ] with filter ; : find-first-name ( str vector -- i/f tag/f ) >r >lower r> @@ -76,13 +76,13 @@ IN: html.parser.analyzer : find-by-attribute-key ( key vector -- vector ) >r >lower r> - [ tag-attributes at ] with subset - [ ] subset ; + [ tag-attributes at ] with filter + [ ] filter ; : find-by-attribute-key-value ( value key vector -- vector ) >r >lower r> - [ tag-attributes at over = ] with subset nip - [ ] subset ; + [ tag-attributes at over = ] with filter nip + [ ] filter ; : find-first-attribute-key-value ( value key vector -- i/f tag/f ) >r >lower r> @@ -109,12 +109,12 @@ IN: html.parser.analyzer tag-attributes [ "href" swap at ] [ f ] if* ; : find-links ( vector -- vector ) - [ tag-name "a" = ] subset - [ tag-link ] subset ; + [ tag-name "a" = ] filter + [ tag-link ] filter ; : find-by-text ( seq quot -- tag ) - [ dup tag-name text = ] swap compose find drop ; + [ dup tag-name text = ] prepose find drop ; : find-opening-tags-by-name ( name seq -- seq ) [ [ tag-name = ] keep tag-closing? not and ] with find-all ; @@ -125,11 +125,11 @@ IN: html.parser.analyzer : query>assoc* ( str -- hash ) "?" split1 nip query>assoc ; -! clear "http://fark.com" http-get parse-html find-links [ "go.pl" swap start ] subset [ "=" split peek ] map +! clear "http://fark.com" http-get parse-html find-links [ "go.pl" swap start ] filter [ "=" split peek ] map ! clear "http://www.sailwx.info/shiptrack/cruiseships.phtml" http-get parse-html remove-blank-text ! "a" over find-opening-tags-by-name -! [ nip "shipposition.phtml?call=GBTT" swap href-contains? ] assoc-subset +! [ nip "shipposition.phtml?call=GBTT" swap href-contains? ] assoc-filter ! first first 8 + over nth ! tag-attributes "href" swap at query>assoc* ! "lat" over at "lon" rot at diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index 88a748d949..848d878c5b 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -221,7 +221,7 @@ SYMBOL: exit-continuation '[ exit-continuation set @ ] callcc1 exit-continuation off ; : split-path ( string -- path ) - "/" split [ empty? not ] subset ; + "/" split [ empty? not ] filter ; : do-request ( request -- response ) [ diff --git a/extra/http/server/templating/chloe/chloe-tests.factor b/extra/http/server/templating/chloe/chloe-tests.factor index f517af4a12..cb8b56e002 100644 --- a/extra/http/server/templating/chloe/chloe-tests.factor +++ b/extra/http/server/templating/chloe/chloe-tests.factor @@ -30,7 +30,7 @@ must-fail-with ] unit-test : run-template - with-string-writer [ "\r\n\t" member? not ] subset + with-string-writer [ "\r\n\t" member? not ] filter "?>" split1 nip ; inline : test-template ( name -- template ) diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor index 3793604929..5714ccbfe3 100644 --- a/extra/http/server/templating/chloe/chloe.factor +++ b/extra/http/server/templating/chloe/chloe.factor @@ -105,7 +105,7 @@ SYMBOL: tags hidden-form-field ; diff --git a/extra/io/buffers/buffers.factor b/extra/io/buffers/buffers.factor index a901475544..d5b917246a 100755 --- a/extra/io/buffers/buffers.factor +++ b/extra/io/buffers/buffers.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2004, 2005 Mackenzie Straight. ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: io.buffers USING: alien alien.accessors alien.c-types alien.syntax kernel kernel.private libc math sequences byte-arrays strings hints -accessors ; +accessors math.order ; +IN: io.buffers TUPLE: buffer size ptr fill pos ; diff --git a/extra/io/encodings/8-bit/8-bit.factor b/extra/io/encodings/8-bit/8-bit.factor index dc6e52d67e..3fbb3908e2 100755 --- a/extra/io/encodings/8-bit/8-bit.factor +++ b/extra/io/encodings/8-bit/8-bit.factor @@ -39,7 +39,7 @@ IN: io.encodings.8-bit : process-contents ( lines -- assoc ) [ "#" split1 drop ] map - [ empty? not ] subset + [ empty? not ] filter [ "\t" split 2 head [ 2 tail-if hex> ] map ] map ; : byte>ch ( assoc -- array ) diff --git a/extra/io/nonblocking/nonblocking.factor b/extra/io/nonblocking/nonblocking.factor index 0bf7a6ccec..fc8ade5758 100755 --- a/extra/io/nonblocking/nonblocking.factor +++ b/extra/io/nonblocking/nonblocking.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2008 Slava Pestov, Doug Coleman ! See http://factorcode.org/license.txt for BSD license. USING: math kernel io sequences io.buffers io.timeouts generic -byte-vectors system io.streams.duplex io.encodings +byte-vectors system io.streams.duplex io.encodings math.order io.backend continuations debugger classes byte-arrays namespaces splitting dlists assocs io.encodings.binary inspector accessors ; IN: io.nonblocking diff --git a/extra/io/sockets/impl/impl.factor b/extra/io/sockets/impl/impl.factor index 2a376e18c2..fa82080259 100755 --- a/extra/io/sockets/impl/impl.factor +++ b/extra/io/sockets/impl/impl.factor @@ -103,7 +103,7 @@ M: f parse-sockaddr nip ; : parse-addrinfo-list ( addrinfo -- seq ) [ addrinfo-next ] follow [ addrinfo>addrspec ] map - [ ] subset ; + [ ] filter ; : prepare-resolve-host ( host serv passive? -- host' serv' flags ) #! If the port is a number, we resolve for 'http' then diff --git a/extra/io/unix/select/select.factor b/extra/io/unix/select/select.factor index 9413556d4f..74b7136823 100755 --- a/extra/io/unix/select/select.factor +++ b/extra/io/unix/select/select.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: alien.c-types kernel io.nonblocking io.unix.backend bit-arrays sequences assocs unix math namespaces structs -accessors ; +accessors math.order ; IN: io.unix.select TUPLE: select-mx < mx read-fdset write-fdset ; diff --git a/extra/koszul/koszul.factor b/extra/koszul/koszul.factor index b079cec42c..7e24d873a2 100755 --- a/extra/koszul/koszul.factor +++ b/extra/koszul/koszul.factor @@ -19,7 +19,7 @@ IN: koszul } cond ; : canonicalize - [ nip zero? not ] assoc-subset ; + [ nip zero? not ] assoc-filter ; SYMBOL: terms @@ -71,7 +71,7 @@ SYMBOL: terms [ natural-sort ] keep [ index ] curry map ; : (inversions) ( n seq -- n ) - [ > ] with subset length ; + [ > ] with filter length ; : inversions ( seq -- n ) 0 swap [ length ] keep [ @@ -148,7 +148,7 @@ DEFER: (d) : nth-basis-elt ( generators n -- elt ) over length [ 3dup bit? [ nth ] [ 2drop f ] if - ] map [ ] subset 2nip ; + ] map [ ] filter 2nip ; : basis ( generators -- seq ) natural-sort dup length 2^ [ nth-basis-elt ] with map ; @@ -279,7 +279,7 @@ DEFER: (d) : bigraded-laplacian ( u-generators z-generators quot -- seq ) >r [ basis graded ] bi@ tensor bigraded-triples r> - [ [ first3 ] swap compose map ] curry map ; inline + [ [ first3 ] prepose map ] curry map ; inline : bigraded-laplacian-betti ( u-generators z-generators -- seq ) [ laplacian-betti ] bigraded-laplacian ; diff --git a/extra/lazy-lists/examples/examples.factor b/extra/lazy-lists/examples/examples.factor index 2f7646aab1..844ae31085 100644 --- a/extra/lazy-lists/examples/examples.factor +++ b/extra/lazy-lists/examples/examples.factor @@ -8,7 +8,7 @@ IN: lazy-lists.examples : naturals 0 lfrom ; : positives 1 lfrom ; : evens 0 [ 2 + ] lfrom-by ; -: odds 1 lfrom [ 2 mod 1 = ] lsubset ; +: odds 1 lfrom [ 2 mod 1 = ] lfilter ; : powers-of-2 1 [ 2 * ] lfrom-by ; : ones 1 [ ] lfrom-by ; : squares naturals [ dup * ] lmap ; diff --git a/extra/lazy-lists/lazy-lists-docs.factor b/extra/lazy-lists/lazy-lists-docs.factor index ebacea03d8..b240b3fbc2 100644 --- a/extra/lazy-lists/lazy-lists-docs.factor +++ b/extra/lazy-lists/lazy-lists-docs.factor @@ -82,7 +82,7 @@ HELP: uncons { $values { "cons" "a cons object" } { "car" "the head of the list" } { "cdr" "the tail of the list" } } { $description "Put the head and tail of the list on the stack." } ; -{ leach lreduce lmap lmap-with ltake lsubset lappend lfrom lfrom-by lconcat lcartesian-product lcartesian-product* lcomp lcomp* lmerge lreduce lwhile luntil } related-words +{ leach lreduce lmap lmap-with ltake lfilter lappend lfrom lfrom-by lconcat lcartesian-product lcartesian-product* lcomp lcomp* lmerge lreduce lwhile luntil } related-words HELP: leach { $values { "list" "a cons object" } { "quot" "a quotation with stack effect ( obj -- )" } } @@ -104,9 +104,9 @@ HELP: ltake { $values { "n" "a non negative integer" } { "list" "a cons object" } { "result" "resulting cons object" } } { $description "Outputs a lazy list containing the first n items in the list. This is done a lazy manner. No evaluation of the list elements occurs initially but a " { $link } " object is returned which conforms to the list protocol. Calling " { $link car } ", " { $link cdr } " or " { $link nil? } " on this will evaluate elements as required." } ; -HELP: lsubset +HELP: lfilter { $values { "list" "a cons object" } { "quot" "a quotation with stack effect ( -- X )" } { "result" "resulting cons object" } } -{ $description "Perform a similar functionality to that of the " { $link subset } " word, but in a lazy manner. No evaluation of the list elements occurs initially but a " { $link } " object is returned which conforms to the list protocol. Calling " { $link car } ", " { $link cdr } " or " { $link nil? } " on this will evaluate elements as required." } ; +{ $description "Perform a similar functionality to that of the " { $link filter } " word, but in a lazy manner. No evaluation of the list elements occurs initially but a " { $link } " object is returned which conforms to the list protocol. Calling " { $link car } ", " { $link cdr } " or " { $link nil? } " on this will evaluate elements as required." } ; HELP: lwhile { $values { "list" "a cons object" } { "quot" "a quotation with stack effect ( X -- bool )" } { "result" "resulting cons object" } } diff --git a/extra/lazy-lists/lazy-lists.factor b/extra/lazy-lists/lazy-lists.factor index b87a1e5f2e..6db82ed2c1 100644 --- a/extra/lazy-lists/lazy-lists.factor +++ b/extra/lazy-lists/lazy-lists.factor @@ -201,37 +201,37 @@ M: lazy-while cdr ( lazy-while -- cdr ) M: lazy-while nil? ( lazy-while -- bool ) [ car ] keep lazy-while-quot call not ; -TUPLE: lazy-subset cons quot ; +TUPLE: lazy-filter cons quot ; -C: lazy-subset +C: lazy-filter -: lsubset ( list quot -- result ) - over nil? [ 2drop nil ] [ ] if ; +: lfilter ( list quot -- result ) + over nil? [ 2drop nil ] [ ] if ; -: car-subset? ( lazy-subset -- ? ) - [ lazy-subset-cons car ] keep - lazy-subset-quot call ; +: car-filter? ( lazy-filter -- ? ) + [ lazy-filter-cons car ] keep + lazy-filter-quot call ; -: skip ( lazy-subset -- ) - [ lazy-subset-cons cdr ] keep - set-lazy-subset-cons ; +: skip ( lazy-filter -- ) + [ lazy-filter-cons cdr ] keep + set-lazy-filter-cons ; -M: lazy-subset car ( lazy-subset -- car ) - dup car-subset? [ lazy-subset-cons ] [ dup skip ] if car ; +M: lazy-filter car ( lazy-filter -- car ) + dup car-filter? [ lazy-filter-cons ] [ dup skip ] if car ; -M: lazy-subset cdr ( lazy-subset -- cdr ) - dup car-subset? [ - [ lazy-subset-cons cdr ] keep - lazy-subset-quot lsubset +M: lazy-filter cdr ( lazy-filter -- cdr ) + dup car-filter? [ + [ lazy-filter-cons cdr ] keep + lazy-filter-quot lfilter ] [ dup skip cdr ] if ; -M: lazy-subset nil? ( lazy-subset -- bool ) - dup lazy-subset-cons nil? [ +M: lazy-filter nil? ( lazy-filter -- bool ) + dup lazy-filter-cons nil? [ drop t ] [ - dup car-subset? [ + dup car-filter? [ drop f ] [ dup skip nil? @@ -373,7 +373,7 @@ M: lazy-concat nil? ( lazy-concat -- bool ) [ lcartesian-product* ] dip lmap ; : lcomp* ( list guards quot -- result ) - [ [ lcartesian-product* ] dip [ lsubset ] each ] dip lmap ; + [ [ lcartesian-product* ] dip [ lfilter ] each ] dip lmap ; DEFER: lmerge @@ -442,4 +442,4 @@ INSTANCE: lazy-from-by list INSTANCE: lazy-zip list INSTANCE: lazy-while list INSTANCE: lazy-until list -INSTANCE: lazy-subset list +INSTANCE: lazy-filter list diff --git a/extra/logging/logging.factor b/extra/logging/logging.factor index 664337c3d3..f54ab05bbd 100755 --- a/extra/logging/logging.factor +++ b/extra/logging/logging.factor @@ -72,7 +72,7 @@ PRIVATE> >r >r dup r> r> 2curry annotate ; : call-logging-quot ( quot word level -- quot' ) - "called" -rot [ log-message ] 3curry swap compose ; + "called" -rot [ log-message ] 3curry prepose ; : add-logging ( word level -- ) [ call-logging-quot ] (define-logging) ; @@ -88,7 +88,7 @@ PRIVATE> : input# stack-effect effect-in length ; : input-logging-quot ( quot word level -- quot' ) - over input# -rot [ log-stack ] 3curry swap compose ; + over input# -rot [ log-stack ] 3curry prepose ; : add-input-logging ( word level -- ) [ input-logging-quot ] (define-logging) ; diff --git a/extra/logging/server/server.factor b/extra/logging/server/server.factor index c6aee034cc..9da2bec927 100755 --- a/extra/logging/server/server.factor +++ b/extra/logging/server/server.factor @@ -37,7 +37,7 @@ SYMBOL: log-files write bl write ": " write print ; : write-message ( msg word-name level -- ) - rot [ empty? not ] subset { + rot [ empty? not ] filter { { [ dup empty? ] [ 3drop ] } { [ dup length 1 = ] [ first -rot f (write-message) ] } [ diff --git a/extra/math/complex/complex-tests.factor b/extra/math/complex/complex-tests.factor index 9174ac9988..063871ce5b 100755 --- a/extra/math/complex/complex-tests.factor +++ b/extra/math/complex/complex-tests.factor @@ -1,5 +1,5 @@ -USING: kernel math math.constants math.functions tools.test -prettyprint ; +USING: kernel math math.constants math.functions math.order +tools.test prettyprint ; IN: math.complex.tests [ 1 C{ 0 1 } rect> ] must-fail diff --git a/extra/math/functions/functions-docs.factor b/extra/math/functions/functions-docs.factor index 35471653dc..c023258105 100755 --- a/extra/math/functions/functions-docs.factor +++ b/extra/math/functions/functions-docs.factor @@ -1,4 +1,4 @@ -USING: help.markup help.syntax kernel math +USING: help.markup help.syntax kernel math math.order sequences quotations math.functions.private ; IN: math.functions diff --git a/extra/math/functions/functions-tests.factor b/extra/math/functions/functions-tests.factor index 8c71eb545b..c9215d8de7 100755 --- a/extra/math/functions/functions-tests.factor +++ b/extra/math/functions/functions-tests.factor @@ -1,5 +1,5 @@ -USING: kernel math math.constants math.functions math.private -math.libm tools.test ; +USING: kernel math math.constants math.functions math.order +math.private math.libm tools.test ; IN: math.functions.tests [ t ] [ 4 4 .00000001 ~ ] unit-test diff --git a/extra/math/functions/functions.factor b/extra/math/functions/functions.factor index 632939ff71..481b58bb92 100755 --- a/extra/math/functions/functions.factor +++ b/extra/math/functions/functions.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2004, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: math kernel math.constants math.private -math.libm combinators ; +math.libm combinators math.order ; IN: math.functions r find* drop r> length or ; inline + over >r find-from drop r> length or ; inline : first-col ( row# -- n ) #! First non-zero column @@ -69,7 +69,7 @@ SYMBOL: matrix : echelon ( matrix -- matrix' ) [ 0 0 (echelon) ] with-matrix ; -: nonzero-rows [ [ zero? ] all? not ] subset ; +: nonzero-rows [ [ zero? ] all? not ] filter ; : null/rank ( matrix -- null rank ) echelon dup length swap nonzero-rows length [ - ] keep ; diff --git a/extra/math/ranges/ranges.factor b/extra/math/ranges/ranges.factor index cc7d0758e5..eb26232969 100755 --- a/extra/math/ranges/ranges.factor +++ b/extra/math/ranges/ranges.factor @@ -1,4 +1,4 @@ -USING: kernel layouts math namespaces sequences +USING: kernel layouts math math.order namespaces sequences sequences.private accessors ; IN: math.ranges diff --git a/extra/math/ratios/ratios-tests.factor b/extra/math/ratios/ratios-tests.factor index 75572d8415..28801fa2e9 100755 --- a/extra/math/ratios/ratios-tests.factor +++ b/extra/math/ratios/ratios-tests.factor @@ -1,5 +1,5 @@ -USING: kernel math math.parser math.ratios math.functions -tools.test ; +USING: kernel math math.order math.parser math.ratios +math.functions tools.test ; IN: math.ratios.tests [ 1 2 ] [ 1/2 >fraction ] unit-test diff --git a/extra/math/vectors/vectors.factor b/extra/math/vectors/vectors.factor index 51efd33d45..9c9015d242 100755 --- a/extra/math/vectors/vectors.factor +++ b/extra/math/vectors/vectors.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel sequences math math.functions hints -float-arrays ; +float-arrays math.order ; IN: math.vectors : vneg ( u -- v ) [ neg ] map ; diff --git a/extra/maze/maze.factor b/extra/maze/maze.factor index 5d7bb9a1a2..fa25dbd17c 100644 --- a/extra/maze/maze.factor +++ b/extra/maze/maze.factor @@ -17,7 +17,7 @@ SYMBOL: visited : choices ( cell -- seq ) { { -1 0 } { 1 0 } { 0 -1 } { 0 1 } } [ v+ ] with map - [ unvisited? ] subset ; + [ unvisited? ] filter ; : random-neighbour ( cell -- newcell ) choices random ; diff --git a/extra/memoize/memoize-tests.factor b/extra/memoize/memoize-tests.factor index dbd2d3a16a..3ce0abd7d9 100644 --- a/extra/memoize/memoize-tests.factor +++ b/extra/memoize/memoize-tests.factor @@ -1,6 +1,7 @@ ! Copyright (C) 2007 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. USING: math kernel memoize tools.test parser ; +IN: memoize.tests MEMO: fib ( m -- n ) dup 1 <= [ drop 1 ] [ dup 1 - fib swap 2 - fib + ] if ; diff --git a/extra/models/models.factor b/extra/models/models.factor index 58335de3d1..7a0b4b532a 100755 --- a/extra/models/models.factor +++ b/extra/models/models.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: generic kernel math sequences arrays assocs alarms -calendar ; +calendar math.order ; IN: models TUPLE: model < identity-tuple diff --git a/extra/multi-methods/multi-methods.factor b/extra/multi-methods/multi-methods.factor index dd6fc7dfff..1c6473216e 100755 --- a/extra/multi-methods/multi-methods.factor +++ b/extra/multi-methods/multi-methods.factor @@ -19,12 +19,12 @@ SYMBOL: total : canonicalize-specializer-1 ( specializer -- specializer' ) [ - [ class? ] subset + [ class? ] filter [ length [ 1+ neg ] map ] keep zip [ length args [ max ] change ] keep ] [ - [ pair? ] subset + [ pair? ] filter [ keys [ hooks get push-new ] each ] keep ] bi append ; @@ -73,7 +73,7 @@ SYMBOL: total ! Part II: Topologically sorting specializers : maximal-element ( seq quot -- n elt ) dupd [ - swapd [ call 0 < ] 2curry subset empty? + swapd [ call 0 < ] 2curry filter empty? ] 2curry find [ "Topological sort failed" throw ] unless* ; inline @@ -111,7 +111,7 @@ SYMBOL: total : multi-predicate ( classes -- quot ) dup length [ picker 2array ] 2map - [ drop object eq? not ] assoc-subset + [ drop object eq? not ] assoc-filter dup empty? [ drop [ t ] ] [ [ (multi-predicate) ] { } assoc>map unclip [ swap [ f ] \ if 3array append [ ] like ] reduce diff --git a/extra/newfx/newfx.factor b/extra/newfx/newfx.factor index 3e5f66eb6f..2b2f916aea 100644 --- a/extra/newfx/newfx.factor +++ b/extra/newfx/newfx.factor @@ -143,7 +143,7 @@ METHOD: as-mutate { object object assoc } set-at ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: subset-of ( quot seq -- seq ) swap subset ; +: filter-of ( quot seq -- seq ) swap filter ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/extra/opengl/gl/extensions/extensions.factor b/extra/opengl/gl/extensions/extensions.factor index 739ad203a1..8f2eee9459 100644 --- a/extra/opengl/gl/extensions/extensions.factor +++ b/extra/opengl/gl/extensions/extensions.factor @@ -43,6 +43,6 @@ reset-gl-function-number-counter scan drop "}" parse-tokens swap prefix gl-function-number [ gl-function-pointer ] 2curry swap - ";" parse-tokens [ "()" subseq? not ] subset + ";" parse-tokens [ "()" subseq? not ] filter define-indirect ; parsing diff --git a/extra/openssl/openssl-tests.factor b/extra/openssl/openssl-tests.factor index 5825ca7270..f42c611fc0 100755 --- a/extra/openssl/openssl-tests.factor +++ b/extra/openssl/openssl-tests.factor @@ -84,7 +84,7 @@ verify-load-locations ] unit-test ! SYMBOL: ssl ! ! : is-set ( seq -- newseq ) -! >alist [ nip ] assoc-subset >hashtable keys ; +! >alist [ nip ] assoc-filter >hashtable keys ; ! ! ! 1234 server-socket sock set ! "127.0.0.1" 1234 SOCK_STREAM server-fd sock set diff --git a/extra/optimizer/report/report.factor b/extra/optimizer/report/report.factor index feaace9808..5cf2d5129e 100755 --- a/extra/optimizer/report/report.factor +++ b/extra/optimizer/report/report.factor @@ -8,7 +8,7 @@ optimizer math ; [ r> 1+ count-optimization-passes ] [ drop r> ] if ; : results - [ [ second ] swap compose compare ] curry sort 20 tail* + [ [ second ] prepose compare ] curry sort 20 tail* print standard-table-style [ @@ -16,7 +16,7 @@ optimizer math ; ] tabular-output ; : optimizer-report - all-words [ compiled? ] subset + all-words [ compiled? ] filter [ dup [ word-dataflow nip 1 count-optimization-passes diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor index 40620295c6..b710d9d481 100755 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -200,7 +200,7 @@ M: just-parser parse ( input parser -- result ) #! from the results anything where the remaining #! input to be parsed is not empty. So ensures a #! fully parsed input string. - just-parser-p1 parse [ parse-result-unparsed empty? ] lsubset ; + just-parser-p1 parse [ parse-result-unparsed empty? ] lfilter ; TUPLE: apply-parser p1 quot ; diff --git a/extra/peg/ebnf/ebnf.factor b/extra/peg/ebnf/ebnf.factor index 8bf0475da5..57851812ef 100644 --- a/extra/peg/ebnf/ebnf.factor +++ b/extra/peg/ebnf/ebnf.factor @@ -285,7 +285,7 @@ M: ebnf-optional (transform) ( ast -- parser ) GENERIC: build-locals ( code ast -- code ) M: ebnf-sequence build-locals ( code ast -- code ) - elements>> dup [ ebnf-var? ] subset empty? [ + elements>> dup [ ebnf-var? ] filter empty? [ drop ] [ [ diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 858d062c68..3922fc9f86 100755 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007, 2008 Chris Double. ! See http://factorcode.org/license.txt for BSD license. USING: kernel sequences strings fry namespaces math assocs shuffle - vectors arrays math.parser + vectors arrays math.parser math.order unicode.categories compiler.units parser words quotations effects memoize accessors locals effects splitting ; IN: peg diff --git a/extra/peg/search/search.factor b/extra/peg/search/search.factor index 21a111f6f7..3da676dcb2 100755 --- a/extra/peg/search/search.factor +++ b/extra/peg/search/search.factor @@ -17,14 +17,14 @@ MEMO: any-char-parser ( -- parser ) : search ( string parser -- seq ) any-char-parser [ drop f ] action 2array choice repeat0 parse dup [ - parse-result-ast [ ] subset + parse-result-ast [ ] filter ] [ drop { } ] if ; : (replace) ( string parser -- seq ) - any-char-parser 2array choice repeat0 parse parse-result-ast [ ] subset ; + any-char-parser 2array choice repeat0 parse parse-result-ast [ ] filter ; : replace ( string parser -- result ) [ (replace) [ tree-write ] each ] with-string-writer ; diff --git a/extra/porter-stemmer/porter-stemmer-tests.factor b/extra/porter-stemmer/porter-stemmer-tests.factor index da0658f94d..32386fed2b 100644 --- a/extra/porter-stemmer/porter-stemmer-tests.factor +++ b/extra/porter-stemmer/porter-stemmer-tests.factor @@ -62,5 +62,5 @@ io.files io.encodings.utf8 ; "extra/porter-stemmer/test/voc.txt" resource-lines [ stem ] map "extra/porter-stemmer/test/output.txt" resource-lines - [ 2array ] 2map [ first2 = not ] subset + [ 2array ] 2map [ first2 = not ] filter ] unit-test diff --git a/extra/project-euler/001/001.factor b/extra/project-euler/001/001.factor index 7d77e86fec..843f8b87ba 100644 --- a/extra/project-euler/001/001.factor +++ b/extra/project-euler/001/001.factor @@ -30,7 +30,7 @@ IN: project-euler.001 ! ------------------- : euler001a ( -- answer ) - 1000 [ dup 5 mod swap 3 mod [ zero? ] either? ] subset sum ; + 1000 [ dup 5 mod swap 3 mod [ zero? ] either? ] filter sum ; ! [ euler001a ] 100 ave-time ! 0 ms run / 0 ms GC ave time - 100 trials diff --git a/extra/project-euler/002/002.factor b/extra/project-euler/002/002.factor index b660ed0958..c2def03ace 100644 --- a/extra/project-euler/002/002.factor +++ b/extra/project-euler/002/002.factor @@ -30,7 +30,7 @@ PRIVATE> V{ 0 } clone 1 rot (fib-upto) ; : euler002 ( -- answer ) - 1000000 fib-upto [ even? ] subset sum ; + 1000000 fib-upto [ even? ] filter sum ; ! [ euler002 ] 100 ave-time ! 0 ms run / 0 ms GC ave time - 100 trials @@ -44,7 +44,7 @@ PRIVATE> 1 head-slice* { 0 1 } prepend ; : euler002a ( -- answer ) - 1000000 fib-upto* [ even? ] subset sum ; + 1000000 fib-upto* [ even? ] filter sum ; ! [ euler002a ] 100 ave-time ! 0 ms run / 0 ms GC ave time - 100 trials diff --git a/extra/project-euler/004/004.factor b/extra/project-euler/004/004.factor index b2146b4aea..1f268f1500 100644 --- a/extra/project-euler/004/004.factor +++ b/extra/project-euler/004/004.factor @@ -21,7 +21,7 @@ IN: project-euler.004 append ; : abundants-upto ( n -- seq ) - [1,b] [ abundant? ] subset ; + [1,b] [ abundant? ] filter ; : possible-sums ( seq -- seq ) dup { } -rot [ diff --git a/extra/project-euler/026/026.factor b/extra/project-euler/026/026.factor index f1f546ec1c..8cbf20d0bf 100644 --- a/extra/project-euler/026/026.factor +++ b/extra/project-euler/026/026.factor @@ -34,7 +34,7 @@ IN: project-euler.026 : euler030 ( -- answer ) - 325537 [ dup sum-fifth-powers = ] subset sum 1- ; + 325537 [ dup sum-fifth-powers = ] filter sum 1- ; ! [ euler030 ] 100 ave-time ! 2537 ms run / 125 ms GC ave time - 100 trials diff --git a/extra/project-euler/032/032.factor b/extra/project-euler/032/032.factor index 7b24004df6..68b42ca442 100755 --- a/extra/project-euler/032/032.factor +++ b/extra/project-euler/032/032.factor @@ -46,7 +46,7 @@ IN: project-euler.032 PRIVATE> : euler032 ( -- answer ) - source-032 [ valid? ] subset products prune sum ; + source-032 [ valid? ] filter products prune sum ; ! [ euler032 ] 10 ave-time ! 23922 ms run / 1505 ms GC ave time - 10 trials @@ -70,7 +70,7 @@ PRIVATE> PRIVATE> : euler032a ( -- answer ) - source-032a [ mmp ] map [ pandigital? ] subset products prune sum ; + source-032a [ mmp ] map [ pandigital? ] filter products prune sum ; ! [ euler032a ] 100 ave-time ! 5978 ms run / 327 ms GC ave time - 100 trials diff --git a/extra/project-euler/033/033.factor b/extra/project-euler/033/033.factor index 35b1c87e7a..8cb0dc45c3 100644 --- a/extra/project-euler/033/033.factor +++ b/extra/project-euler/033/033.factor @@ -30,7 +30,7 @@ IN: project-euler.033 diff --git a/extra/project-euler/034/034.factor b/extra/project-euler/034/034.factor index c15d722266..cf73ee828b 100644 --- a/extra/project-euler/034/034.factor +++ b/extra/project-euler/034/034.factor @@ -39,7 +39,7 @@ IN: project-euler.034 PRIVATE> : euler034 ( -- answer ) - 3 2000000 [a,b] [ factorion? ] subset sum ; + 3 2000000 [a,b] [ factorion? ] filter sum ; ! [ euler034 ] 10 ave-time ! 15089 ms run / 725 ms GC ave time - 10 trials diff --git a/extra/project-euler/035/035.factor b/extra/project-euler/035/035.factor index c362e1e1a5..53cee7c0ff 100755 --- a/extra/project-euler/035/035.factor +++ b/extra/project-euler/035/035.factor @@ -50,7 +50,7 @@ IN: project-euler.035 PRIVATE> : euler035 ( -- answer ) - source-035 [ possible? ] subset [ circular? ] count ; + source-035 [ possible? ] filter [ circular? ] count ; ! [ euler035 ] 100 ave-time ! 904 ms run / 86 ms GC ave time - 100 trials diff --git a/extra/project-euler/036/036.factor b/extra/project-euler/036/036.factor index 3ca1c73f39..153901ce6d 100644 --- a/extra/project-euler/036/036.factor +++ b/extra/project-euler/036/036.factor @@ -32,7 +32,7 @@ IN: project-euler.036 PRIVATE> : euler036 ( -- answer ) - 1 1000000 2 [ both-bases? ] subset sum ; + 1 1000000 2 [ both-bases? ] filter sum ; ! [ euler036 ] 100 ave-time ! 3891 ms run / 173 ms GC ave time - 100 trials diff --git a/extra/project-euler/037/037.factor b/extra/project-euler/037/037.factor index 66b1665037..a5bc0581e6 100755 --- a/extra/project-euler/037/037.factor +++ b/extra/project-euler/037/037.factor @@ -44,7 +44,7 @@ IN: project-euler.037 PRIVATE> : euler037 ( -- answer ) - 23 1000000 primes-between [ r-trunc? ] subset [ l-trunc? ] subset sum ; + 23 1000000 primes-between [ r-trunc? ] filter [ l-trunc? ] filter sum ; ! [ euler037 ] 100 ave-time ! 768 ms run / 9 ms GC ave time - 100 trials diff --git a/extra/project-euler/038/038.factor b/extra/project-euler/038/038.factor index 2369db25fb..78e3848a33 100755 --- a/extra/project-euler/038/038.factor +++ b/extra/project-euler/038/038.factor @@ -47,7 +47,7 @@ IN: project-euler.038 PRIVATE> : euler038 ( -- answer ) - 9123 9876 [a,b] [ concat-product ] map [ pandigital? ] subset supremum ; + 9123 9876 [a,b] [ concat-product ] map [ pandigital? ] filter supremum ; ! [ euler038 ] 100 ave-time ! 37 ms run / 1 ms GC ave time - 100 trials diff --git a/extra/project-euler/042/042.factor b/extra/project-euler/042/042.factor index a87722debc..1fda8a402a 100644 --- a/extra/project-euler/042/042.factor +++ b/extra/project-euler/042/042.factor @@ -31,7 +31,7 @@ IN: project-euler.042 : source-042 ( -- seq ) "extra/project-euler/042/words.txt" resource-path - ascii file-contents [ quotable? ] subset "," split ; + ascii file-contents [ quotable? ] filter "," split ; : (triangle-upto) ( limit n -- ) 2dup nth-triangle > [ diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index 0d1eb00bfa..a607931083 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -53,7 +53,7 @@ PRIVATE> : euler043 ( -- answer ) 1234567890 number>digits all-permutations - [ interesting? ] subset [ 10 digits>integer ] map sum ; + [ interesting? ] filter [ 10 digits>integer ] map sum ; ! [ euler043 ] time ! 125196 ms run / 19548 ms GC time @@ -70,20 +70,20 @@ PRIVATE> [ number>digits 3 0 pad-left ] map [ all-unique? ] subset ; + 1000 over [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ; : overlap? ( seq -- ? ) dup first 2 tail* swap second 2 head = ; : clean ( seq -- seq ) - [ unclip 1 head prefix concat ] map [ all-unique? ] subset ; + [ unclip 1 head prefix concat ] map [ all-unique? ] filter ; : add-missing-digit ( seq -- seq ) dup natural-sort 10 diff first prefix ; : interesting-pandigitals ( -- seq ) 17 candidates { 13 11 7 5 3 2 } [ - candidates swap cartesian-product [ overlap? ] subset clean + candidates swap cartesian-product [ overlap? ] filter clean ] each [ add-missing-digit ] map ; PRIVATE> diff --git a/extra/project-euler/044/044.factor b/extra/project-euler/044/044.factor index bc8aec8bde..eaa6bf96ef 100644 --- a/extra/project-euler/044/044.factor +++ b/extra/project-euler/044/044.factor @@ -37,7 +37,7 @@ PRIVATE> : euler044 ( -- answer ) 2500 [1,b] [ nth-pentagonal ] map dup cartesian-product - [ first2 sum-and-diff? ] subset [ first2 - abs ] map infimum ; + [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ; ! [ euler044 ] 10 ave-time ! 8924 ms run / 2872 ms GC ave time - 10 trials diff --git a/extra/project-euler/079/079.factor b/extra/project-euler/079/079.factor index 452a64af44..65162cc519 100644 --- a/extra/project-euler/079/079.factor +++ b/extra/project-euler/079/079.factor @@ -39,7 +39,7 @@ IN: project-euler.079 dup empty? [ "Topological sort failed" throw ] [ first ] if ; : remove-source ( seq elt -- seq ) - [ swap member? not ] curry subset ; + [ swap member? not ] curry filter ; : (topological-sort) ( seq -- ) dup length 1 > [ diff --git a/extra/project-euler/150/150.factor b/extra/project-euler/150/150.factor index c96c1ebc73..c8bd28a3a9 100644 --- a/extra/project-euler/150/150.factor +++ b/extra/project-euler/150/150.factor @@ -17,7 +17,7 @@ IN: project-euler.150 0 0 rot [ (partial-sum-infimum) ] each drop ; inline : generate ( n quot -- seq ) - [ drop ] swap compose map ; inline + [ drop ] prepose map ; inline : map-infimum ( seq quot -- min ) [ min ] compose 0 swap reduce ; inline diff --git a/extra/regexp/regexp.factor b/extra/regexp/regexp.factor index d517db09fe..e3709e360f 100755 --- a/extra/regexp/regexp.factor +++ b/extra/regexp/regexp.factor @@ -291,7 +291,7 @@ TUPLE: regexp source parser ignore-case? ; : parse-regexp ( accum end -- accum ) lexer get dup skip-blank - [ [ index* dup 1+ swap ] 2keep swapd subseq swap ] change-lexer-column + [ [ index-from dup 1+ swap ] 2keep swapd subseq swap ] change-lexer-column lexer get dup still-parsing-line? [ (parse-token) parse-options ] [ drop f ] if parsed ; diff --git a/extra/reports/optimizer/optimizer.factor b/extra/reports/optimizer/optimizer.factor index f38d1d808b..a4018254d3 100755 --- a/extra/reports/optimizer/optimizer.factor +++ b/extra/reports/optimizer/optimizer.factor @@ -8,7 +8,7 @@ IN: report.optimizer [ r> 1+ count-optimization-passes ] [ drop r> ] if ; : results - [ [ second ] swap compose compare ] curry sort 20 tail* + [ [ second ] prepose compare ] curry sort 20 tail* print standard-table-style [ @@ -16,7 +16,7 @@ IN: report.optimizer ] tabular-output ; inline : optimizer-measurements ( -- alist ) - all-words [ compiled? ] subset + all-words [ compiled? ] filter [ dup [ word-dataflow nip 1 count-optimization-passes diff --git a/extra/sequences/deep/deep-docs.factor b/extra/sequences/deep/deep-docs.factor index b98dbfc50f..3dc560f46d 100644 --- a/extra/sequences/deep/deep-docs.factor +++ b/extra/sequences/deep/deep-docs.factor @@ -9,7 +9,7 @@ HELP: deep-map { $values { "obj" "an object" } { "quot" "a quotation ( elt -- newelt )" } { "newobj" "the mapped object" } } { $description "Execute a quotation on each nested element of an object and its children, in preorder. That is, the result of the execution of the quotation on the outer is used to map the inner elements." } ; -HELP: deep-subset +HELP: deep-filter { $values { "obj" "an object" } { "quot" "a quotation ( elt -- ? )" } { "seq" "a sequence" } } { $description "Creates a sequence of sub-nodes in the object which satisfy the given quotation, in preorder. This includes the object itself, if it passes the quotation." } ; diff --git a/extra/sequences/deep/deep-tests.factor b/extra/sequences/deep/deep-tests.factor index 9629d569cb..395086e202 100755 --- a/extra/sequences/deep/deep-tests.factor +++ b/extra/sequences/deep/deep-tests.factor @@ -4,11 +4,11 @@ IN: sequences.deep.tests [ [ "hello" 3 4 swap ] ] [ [ { "hello" V{ 3 4 } } swap ] flatten ] unit-test -[ "foo" t ] [ { { "foo" } "bar" } [ string? ] deep-find* ] unit-test +[ "foo" t ] [ { { "foo" } "bar" } [ string? ] deep-find-from ] unit-test -[ f f ] [ { { "foo" } "bar" } [ number? ] deep-find* ] unit-test +[ f f ] [ { { "foo" } "bar" } [ number? ] deep-find-from ] unit-test -[ { { "foo" } "bar" } t ] [ { { "foo" } "bar" } [ array? ] deep-find* ] unit-test +[ { { "foo" } "bar" } t ] [ { { "foo" } "bar" } [ array? ] deep-find-from ] unit-test : change-something ( seq -- newseq ) dup array? [ "hi" suffix ] [ "hello" append ] if ; diff --git a/extra/sequences/deep/deep.factor b/extra/sequences/deep/deep.factor index 27b875bd8f..c0e516e471 100644 --- a/extra/sequences/deep/deep.factor +++ b/extra/sequences/deep/deep.factor @@ -18,21 +18,21 @@ IN: sequences.deep [ call ] keep over branch? [ [ deep-map ] curry map ] [ drop ] if ; inline -: deep-subset ( obj quot -- seq ) +: deep-filter ( obj quot -- seq ) over >r pusher >r deep-each r> r> dup branch? [ like ] [ drop ] if ; inline -: deep-find* ( obj quot -- elt ? ) +: deep-find-from ( obj quot -- elt ? ) [ call ] 2keep rot [ drop t ] [ over branch? [ - f -rot [ >r nip r> deep-find* ] curry find drop >boolean + f -rot [ >r nip r> deep-find-from ] curry find drop >boolean ] [ 2drop f f ] if ] if ; inline -: deep-find ( obj quot -- elt ) deep-find* drop ; inline +: deep-find ( obj quot -- elt ) deep-find-from drop ; inline -: deep-contains? ( obj quot -- ? ) deep-find* nip ; inline +: deep-contains? ( obj quot -- ? ) deep-find-from nip ; inline : deep-all? ( obj quot -- ? ) [ not ] compose deep-contains? not ; inline @@ -43,4 +43,4 @@ IN: sequences.deep ] curry change-each ] [ 2drop ] if ; inline : flatten ( obj -- seq ) - [ branch? not ] deep-subset ; + [ branch? not ] deep-filter ; diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index e534a204b1..b8e2717a71 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -4,7 +4,7 @@ USING: combinators.lib kernel sequences math namespaces assocs random sequences.private shuffle math.functions mirrors arrays math.parser math.private sorting strings ascii macros -assocs.lib quotations hashtables ; +assocs.lib quotations hashtables math.order ; IN: sequences.lib : each-withn ( seq quot n -- ) nwith each ; inline @@ -45,7 +45,7 @@ MACRO: firstn ( n -- ) >r dup length dup [ / ] curry - [ 1+ ] swap compose + [ 1+ ] prepose r> compose 2each ; inline @@ -129,11 +129,11 @@ MACRO: firstn ( n -- ) : take-while ( seq quot -- newseq ) [ not ] compose [ find drop [ head-slice ] when* ] curry - [ dup ] swap compose keep like ; + [ dup ] prepose keep like ; : replicate ( seq quot -- newseq ) #! quot: ( -- obj ) - [ drop ] swap compose map ; inline + [ drop ] prepose map ; inline ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -159,7 +159,7 @@ PRIVATE> : switches ( seq1 seq -- subseq ) ! seq1 is a sequence of ones and zeroes - >r [ length ] keep [ nth 1 = ] curry subset r> + >r [ length ] keep [ nth 1 = ] curry filter r> [ nth ] curry { } map-as ; : power-set ( seq -- subsets ) @@ -216,7 +216,7 @@ USE: continuations >r dup length swap r> [ = [ ] [ drop f ] if ] curry 2map - [ ] subset ; + [ ] filter ; > >alist sort-keys [ drop { "Date" "Message-Id" } member? not - ] assoc-subset + ] assoc-filter over to>> rot from>> ] unit-test diff --git a/extra/tetris/board/board.factor b/extra/tetris/board/board.factor index 532978e359..3e4548078c 100644 --- a/extra/tetris/board/board.factor +++ b/extra/tetris/board/board.factor @@ -47,7 +47,7 @@ TUPLE: board width height rows ; ] if ; : remove-full-rows ( board -- ) - dup board-rows [ row-not-full? ] subset swap set-board-rows ; + dup board-rows [ row-not-full? ] filter swap set-board-rows ; : check-rows ( board -- n ) #! remove full rows, then add blank ones at the top, returning the number diff --git a/extra/tools/annotations/annotations.factor b/extra/tools/annotations/annotations.factor index ef710ea57d..d6016f280c 100755 --- a/extra/tools/annotations/annotations.factor +++ b/extra/tools/annotations/annotations.factor @@ -61,7 +61,7 @@ M: word reset "--- Entering: " write swap . "--- Variable values:" print [ dup get ] H{ } map>assoc describe - ] 2curry swap compose ; + ] 2curry prepose ; : watch-vars ( word vars -- ) dupd [ (watch-vars) ] 2curry annotate ; diff --git a/extra/tools/completion/completion.factor b/extra/tools/completion/completion.factor index b9c37c0656..4bb6d6142f 100755 --- a/extra/tools/completion/completion.factor +++ b/extra/tools/completion/completion.factor @@ -1,12 +1,12 @@ ! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: tools.completion USING: kernel arrays sequences math namespaces strings io vectors words assocs combinators sorting unicode.case -unicode.categories ; +unicode.categories math.order ; +IN: tools.completion : (fuzzy) ( accum ch i full -- accum i ? ) - index* + index-from [ [ swap push ] 2keep 1+ t ] [ @@ -52,7 +52,7 @@ unicode.categories ; : rank-completions ( results -- newresults ) sort-keys [ 0 [ first max ] reduce 3 /f ] keep - [ first < ] with subset + [ first < ] with filter [ second ] map ; : complete ( full short -- score ) diff --git a/extra/tools/deploy/shaker/shaker.factor b/extra/tools/deploy/shaker/shaker.factor index 82e2652c01..b8ecf87989 100755 --- a/extra/tools/deploy/shaker/shaker.factor +++ b/extra/tools/deploy/shaker/shaker.factor @@ -73,7 +73,7 @@ IN: tools.deploy.shaker [ [ word-props swap - '[ , nip member? ] assoc-subset + '[ , nip member? ] assoc-filter f assoc-like ] keep set-word-props ] with each ; @@ -201,8 +201,8 @@ IN: tools.deploy.shaker strip-globals? [ "Stripping globals" show global swap - '[ drop , member? not ] assoc-subset - [ drop string? not ] assoc-subset ! strip CLI args + '[ drop , member? not ] assoc-filter + [ drop string? not ] assoc-filter ! strip CLI args dup keys unparse show 21 setenv ] [ drop ] if ; diff --git a/extra/tools/memory/memory-docs.factor b/extra/tools/memory/memory-docs.factor index 28c219ee4d..821a6ca7f5 100755 --- a/extra/tools/memory/memory-docs.factor +++ b/extra/tools/memory/memory-docs.factor @@ -9,7 +9,7 @@ ARTICLE: "tools.memory" "Object memory tools" "You can query memory status:" { $subsection data-room } { $subsection code-room } -"There are a pair of combinators, analogous to " { $link each } " and " { $link subset } ", which operate on the entire collection of objects in the object heap:" +"There are a pair of combinators, analogous to " { $link each } " and " { $link filter } ", which operate on the entire collection of objects in the object heap:" { $subsection each-object } { $subsection instances } "You can check an object's the heap memory usage:" diff --git a/extra/tools/profiler/profiler.factor b/extra/tools/profiler/profiler.factor index 467fcc14f4..6a5fce6281 100755 --- a/extra/tools/profiler/profiler.factor +++ b/extra/tools/profiler/profiler.factor @@ -39,7 +39,7 @@ M: method-body (profile.) ] with-row ; : counters. ( assoc -- ) - [ second 0 > ] subset sort-values + [ second 0 > ] filter sort-values standard-table-style [ [ counter. ] assoc-each ] tabular-output ; @@ -58,13 +58,13 @@ M: method-body (profile.) "Call counts for words which call " write dup pprint ":" print - usage [ word? ] subset counters counters. ; + usage [ word? ] filter counters counters. ; : vocabs-profile. ( -- ) "Call counts for all vocabularies:" print vocabs [ dup words - [ "predicating" word-prop not ] subset + [ "predicating" word-prop not ] filter [ profile-counter ] map sum ] { } map>assoc counters. ; diff --git a/extra/tools/test/test.factor b/extra/tools/test/test.factor index 031b3c3af8..854ef7af0e 100755 --- a/extra/tools/test/test.factor +++ b/extra/tools/test/test.factor @@ -85,7 +85,7 @@ SYMBOL: this-test : run-tests ( prefix -- failures ) child-vocabs dup empty? [ drop f ] [ [ dup run-test ] { } map>assoc - [ second empty? not ] subset + [ second empty? not ] filter ] if ; : test ( prefix -- ) diff --git a/extra/tools/threads/threads.factor b/extra/tools/threads/threads.factor index 060377d127..2bd38cf304 100755 --- a/extra/tools/threads/threads.factor +++ b/extra/tools/threads/threads.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: tools.threads USING: threads kernel prettyprint prettyprint.config io io.styles sequences assocs namespaces sorting boxes -heaps.private system math math.parser ; +heaps.private system math math.parser math.order ; +IN: tools.threads : thread. ( thread -- ) dup thread-id pprint-cell diff --git a/extra/tools/vocabs/browser/browser.factor b/extra/tools/vocabs/browser/browser.factor index db1edbeb61..2b28e158df 100755 --- a/extra/tools/vocabs/browser/browser.factor +++ b/extra/tools/vocabs/browser/browser.factor @@ -105,8 +105,8 @@ C: vocab-author : vocab-xref ( vocab quot -- vocabs ) >r dup vocab-name swap words r> map - [ [ word? ] subset [ word-vocabulary ] map ] map>set - remove [ ] subset [ vocab ] map ; inline + [ [ word? ] filter [ word-vocabulary ] map ] map>set + remove [ ] filter [ vocab ] map ; inline : vocab-uses ( vocab -- vocabs ) [ uses ] vocab-xref ; @@ -143,7 +143,7 @@ C: vocab-author : keyed-vocabs ( str quot -- seq ) all-vocabs [ swap >r - [ >r 2dup r> swap call member? ] subset + [ >r 2dup r> swap call member? ] filter r> swap ] assoc-map 2nip ; inline diff --git a/extra/tools/vocabs/vocabs.factor b/extra/tools/vocabs/vocabs.factor index 40e79ee014..2a5213c70d 100755 --- a/extra/tools/vocabs/vocabs.factor +++ b/extra/tools/vocabs/vocabs.factor @@ -15,7 +15,7 @@ IN: tools.vocabs dup vocab-dir "tests" append-path vocab-append-path dup [ dup exists? [ dup directory keys - [ ".factor" tail? ] subset + [ ".factor" tail? ] filter [ append-path ] with map ] [ drop f ] if ] [ drop f ] if ; @@ -90,7 +90,7 @@ SYMBOL: changed-vocabs changed-vocabs get dup [ key? ] [ 2drop t ] if ; : filter-changed ( vocabs -- vocabs' ) - [ changed-vocab? ] subset ; + [ changed-vocab? ] filter ; SYMBOL: modified-sources SYMBOL: modified-docs @@ -208,7 +208,7 @@ M: vocab-link summary vocab-summary ; dup vocab-authors-path set-vocab-file-contents ; : subdirs ( dir -- dirs ) - directory [ second ] subset keys natural-sort ; + directory [ second ] filter keys natural-sort ; : (all-child-vocabs) ( root name -- vocabs ) [ vocab-dir append-path subdirs ] keep @@ -260,7 +260,7 @@ MEMO: all-vocabs-seq ( -- seq ) } cond nip ; : filter-dangerous ( seq -- seq' ) - [ vocab-name dangerous? not ] subset ; + [ vocab-name dangerous? not ] filter ; : try-everything ( -- failures ) all-vocabs-seq @@ -273,10 +273,10 @@ MEMO: all-vocabs-seq ( -- seq ) : unrooted-child-vocabs ( prefix -- seq ) dup empty? [ CHAR: . suffix ] unless vocabs - [ find-vocab-root not ] subset + [ find-vocab-root not ] filter [ vocab-name swap ?head CHAR: . rot member? not and - ] with subset + ] with filter [ vocab ] map ; : all-child-vocabs ( prefix -- assoc ) @@ -288,7 +288,7 @@ MEMO: all-vocabs-seq ( -- seq ) : all-child-vocabs-seq ( prefix -- assoc ) vocab-roots get swap [ dupd (all-child-vocabs) - [ vocab-dir? ] with subset + [ vocab-dir? ] with filter ] curry map concat ; : map>set ( seq quot -- ) diff --git a/extra/ui/commands/commands.factor b/extra/ui/commands/commands.factor index c7db687dc3..9d6775159a 100755 --- a/extra/ui/commands/commands.factor +++ b/extra/ui/commands/commands.factor @@ -37,7 +37,7 @@ GENERIC: command-word ( command -- word ) : command-gestures ( class -- hash ) commands values [ [ - [ first ] subset + [ first ] filter [ [ invoke-command ] curry swap set ] assoc-each ] each ] H{ } make-assoc ; diff --git a/extra/ui/gadgets/editors/editors.factor b/extra/ui/gadgets/editors/editors.factor index b3ecad6aed..c4a808bb2d 100755 --- a/extra/ui/gadgets/editors/editors.factor +++ b/extra/ui/gadgets/editors/editors.factor @@ -4,7 +4,8 @@ USING: arrays documents ui.clipboards ui.commands ui.gadgets ui.gadgets.borders ui.gadgets.buttons ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.theme ui.render ui.gestures io kernel math models namespaces opengl opengl.gl sequences strings -io.styles math.vectors sorting colors combinators assocs ; +io.styles math.vectors sorting colors combinators assocs +math.order ; IN: ui.gadgets.editors TUPLE: editor diff --git a/extra/ui/gadgets/lists/lists.factor b/extra/ui/gadgets/lists/lists.factor index 9213c3886f..fd5234ab03 100755 --- a/extra/ui/gadgets/lists/lists.factor +++ b/extra/ui/gadgets/lists/lists.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: ui.commands ui.gestures ui.render ui.gadgets ui.gadgets.labels ui.gadgets.scrollers -kernel sequences models opengl math namespaces +kernel sequences models opengl math math.order namespaces ui.gadgets.presentations ui.gadgets.viewports ui.gadgets.packs math.vectors classes.tuple ; IN: ui.gadgets.lists diff --git a/extra/ui/gadgets/packs/packs.factor b/extra/ui/gadgets/packs/packs.factor index 09ef3218b4..c6f437583e 100755 --- a/extra/ui/gadgets/packs/packs.factor +++ b/extra/ui/gadgets/packs/packs.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: sequences ui.gadgets kernel math math.functions -math.vectors namespaces ; +math.vectors namespaces math.order ; IN: ui.gadgets.packs TUPLE: pack align fill gap ; diff --git a/extra/ui/gadgets/paragraphs/paragraphs.factor b/extra/ui/gadgets/paragraphs/paragraphs.factor index 7576bce568..9f375d0126 100644 --- a/extra/ui/gadgets/paragraphs/paragraphs.factor +++ b/extra/ui/gadgets/paragraphs/paragraphs.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: arrays ui.gadgets ui.gadgets.labels ui.render kernel math -namespaces sequences ; +namespaces sequences math.order ; IN: ui.gadgets.paragraphs ! A word break gadget diff --git a/extra/ui/gadgets/sliders/sliders.factor b/extra/ui/gadgets/sliders/sliders.factor index a420f59047..4d2c423445 100755 --- a/extra/ui/gadgets/sliders/sliders.factor +++ b/extra/ui/gadgets/sliders/sliders.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays ui.gestures ui.gadgets ui.gadgets.buttons -ui.gadgets.frames ui.gadgets.grids +ui.gadgets.frames ui.gadgets.grids math.order ui.gadgets.theme ui.render kernel math namespaces sequences vectors models math.vectors math.functions quotations colors ; IN: ui.gadgets.sliders diff --git a/extra/ui/gadgets/tracks/tracks.factor b/extra/ui/gadgets/tracks/tracks.factor index d8caf54ad2..56a0fbc3ee 100644 --- a/extra/ui/gadgets/tracks/tracks.factor +++ b/extra/ui/gadgets/tracks/tracks.factor @@ -8,7 +8,7 @@ TUPLE: track sizes ; : normalized-sizes ( track -- seq ) track-sizes - [ [ ] subset sum ] keep [ dup [ over / ] when ] map nip ; + [ [ ] filter sum ] keep [ dup [ over / ] when ] map nip ; : ( orientation -- track ) V{ } clone diff --git a/extra/ui/gestures/gestures.factor b/extra/ui/gestures/gestures.factor index ed0f38b743..0970bd6027 100755 --- a/extra/ui/gestures/gestures.factor +++ b/extra/ui/gestures/gestures.factor @@ -172,7 +172,7 @@ SYMBOL: drag-timer ] if ; : modifier ( mod modifiers -- seq ) - [ second swap bitand 0 > ] with subset + [ second swap bitand 0 > ] with filter 0 prune dup empty? [ drop f ] [ >array ] if ; : drag-loc ( -- loc ) diff --git a/extra/ui/operations/operations.factor b/extra/ui/operations/operations.factor index 26200ea96f..ac414b2cb9 100755 --- a/extra/ui/operations/operations.factor +++ b/extra/ui/operations/operations.factor @@ -37,7 +37,7 @@ M: operation command-word operation-command command-word ; SYMBOL: operations : object-operations ( obj -- operations ) - operations get [ operation-predicate call ] with subset ; + operations get [ operation-predicate call ] with filter ; : find-operation ( obj quot -- command ) >r object-operations r> find-last nip ; inline diff --git a/extra/ui/render/render.factor b/extra/ui/render/render.factor index cacd0a8d3a..d33a789fe7 100644 --- a/extra/ui/render/render.factor +++ b/extra/ui/render/render.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: alien arrays hashtables io kernel math namespaces opengl opengl.gl opengl.glu sequences strings io.styles vectors -combinators math.vectors ui.gadgets colors ; +combinators math.vectors ui.gadgets colors math.order ; IN: ui.render SYMBOL: clip diff --git a/extra/ui/tools/interactor/interactor.factor b/extra/ui/tools/interactor/interactor.factor index 3837ce2de1..6c8b77d1f2 100755 --- a/extra/ui/tools/interactor/interactor.factor +++ b/extra/ui/tools/interactor/interactor.factor @@ -7,7 +7,7 @@ sequences strings threads listener classes.tuple ui.commands ui.gadgets ui.gadgets.editors ui.gadgets.presentations ui.gadgets.worlds ui.gestures definitions boxes calendar concurrency.flags ui.tools.workspace -accessors ; +accessors math.order ; IN: ui.tools.interactor TUPLE: interactor history output flag thread help ; diff --git a/extra/ui/tools/tools-tests.factor b/extra/ui/tools/tools-tests.factor index 279737466f..6d22083096 100755 --- a/extra/ui/tools/tools-tests.factor +++ b/extra/ui/tools/tools-tests.factor @@ -17,7 +17,7 @@ IN: ui.tools.tests [ ] [ "w" get com-scroll-down ] unit-test [ t ] [ "w" get workspace-book gadget-children - [ tool-scroller ] map [ ] subset [ scroller? ] all? + [ tool-scroller ] map [ ] filter [ scroller? ] all? ] unit-test [ ] [ "w" get hide-popup ] unit-test [ ] [ "w" get show-popup ] unit-test diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index 946fe283aa..12565235ab 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -26,7 +26,7 @@ SYMBOL: windows [ [ length 1- dup 1- ] keep exchange ] [ drop ] if ; : unregister-window ( handle -- ) - windows global [ [ first = not ] with subset ] change-at ; + windows global [ [ first = not ] with filter ] change-at ; : raised-window ( world -- ) windows get-global [ second eq? ] with find drop diff --git a/extra/unicode/breaks/breaks.factor b/extra/unicode/breaks/breaks.factor index ee3c8729c4..5ab997470a 100644 --- a/extra/unicode/breaks/breaks.factor +++ b/extra/unicode/breaks/breaks.factor @@ -25,7 +25,7 @@ CATEGORY: grapheme-control Zl Zp Cc Cf ; : process-other-extend ( lines -- set ) [ "#" split1 drop ";" split1 drop trim-blank ] map - [ empty? not ] subset + [ empty? not ] filter [ ".." split1 [ dup ] unless* [ hex> ] bi@ [a,b] ] map concat [ dup ] H{ } map>assoc ; diff --git a/extra/unicode/data/data.factor b/extra/unicode/data/data.factor index 58d836464c..0c7100d35c 100755 --- a/extra/unicode/data/data.factor +++ b/extra/unicode/data/data.factor @@ -1,6 +1,7 @@ USING: assocs math kernel sequences io.files hashtables -quotations splitting arrays math.parser hash2 -byte-arrays words namespaces words compiler.units parser io.encodings.ascii ; +quotations splitting arrays math.parser hash2 math.order +byte-arrays words namespaces words compiler.units parser +io.encodings.ascii ; IN: unicode.data << @@ -25,7 +26,7 @@ IN: unicode.data : (process-data) ( index data -- newdata ) [ [ nth ] keep first swap 2array ] with map - [ second empty? not ] subset + [ second empty? not ] filter [ >r hex> r> ] assoc-map ; : process-data ( index data -- hash ) @@ -48,9 +49,9 @@ IN: unicode.data [ " " split [ hex> ] map ] assoc-map ; : process-canonical ( data -- hash2 hash ) - (process-decomposed) [ first* ] subset + (process-decomposed) [ first* ] filter [ - [ second length 2 = ] subset + [ second length 2 = ] filter ! using 1009 as the size, the maximum load is 4 [ first2 first2 rot 3array ] map 1009 alist>hash2 ] keep @@ -64,7 +65,7 @@ IN: unicode.data : process-combining ( data -- hash ) 3 swap (process-data) [ string>number ] assoc-map - [ nip zero? not ] assoc-subset + [ nip zero? not ] assoc-filter >hashtable ; : categories ( -- names ) @@ -96,7 +97,7 @@ IN: unicode.data ] assoc-map >hashtable ; : multihex ( hexstring -- string ) - " " split [ hex> ] map [ ] subset ; + " " split [ hex> ] map [ ] filter ; TUPLE: code-point lower title upper ; @@ -128,7 +129,7 @@ VALUE: special-casing ! Special casing data : load-special-casing ( -- special-casing ) "extra/unicode/SpecialCasing.txt" resource-path data - [ length 5 = ] subset + [ length 5 = ] filter [ [ set-code-point ] each ] H{ } make-assoc ; load-data diff --git a/extra/unicode/normalize/normalize.factor b/extra/unicode/normalize/normalize.factor index 34c329b55c..c463c0f727 100644 --- a/extra/unicode/normalize/normalize.factor +++ b/extra/unicode/normalize/normalize.factor @@ -51,11 +51,11 @@ IN: unicode.normalize [ >r >r 2dup r> r> insert ] 2each 2drop ; inline : reorder-slice ( string start -- slice done? ) - 2dup swap [ non-starter? not ] find* drop + 2dup swap [ non-starter? not ] find-from drop [ [ over length ] unless* rot ] keep not ; : reorder-next ( string i -- new-i done? ) - over [ non-starter? ] find* drop [ + over [ non-starter? ] find-from drop [ reorder-slice >r dup [ combining-class ] insertion-sort slice-to r> ] [ length t ] if* ; @@ -67,7 +67,7 @@ IN: unicode.normalize 0 reorder-loop ; : reorder-back ( string i -- ) - over [ non-starter? not ] find-last* drop ?1+ reorder-next 2drop ; + over [ non-starter? not ] find-last-from drop ?1+ reorder-next 2drop ; : decompose ( string quot -- decomposed ) ! When there are 8 and 32-bit strings, this'll be diff --git a/extra/unicode/syntax/syntax.factor b/extra/unicode/syntax/syntax.factor index 4dc91a73c2..b5ba25db4e 100755 --- a/extra/unicode/syntax/syntax.factor +++ b/extra/unicode/syntax/syntax.factor @@ -1,5 +1,6 @@ -USING: unicode.data kernel math sequences parser bit-arrays namespaces -sequences.private arrays quotations classes.predicate assocs ; +USING: unicode.data kernel math sequences parser bit-arrays +namespaces sequences.private arrays quotations assocs +classes.predicate math.order ; IN: unicode.syntax ! Character classes (categories) @@ -27,8 +28,8 @@ IN: unicode.syntax : [category] ( categories -- quot ) [ - [ [ categories member? not ] subset as-string ] keep - [ categories member? ] subset >category-array + [ [ categories member? not ] filter as-string ] keep + [ categories member? ] filter >category-array [ dup category# ] % , [ nth-unsafe [ drop t ] ] % \ member? 2array >quotation , \ if , @@ -41,7 +42,7 @@ IN: unicode.syntax CREATE ";" parse-tokens define-category ; parsing : seq-minus ( seq1 seq2 -- diff ) - [ member? not ] curry subset ; + [ member? not ] curry filter ; : CATEGORY-NOT: CREATE ";" parse-tokens diff --git a/extra/windows/com/syntax/syntax.factor b/extra/windows/com/syntax/syntax.factor index acd3848f10..14ce1acda6 100755 --- a/extra/windows/com/syntax/syntax.factor +++ b/extra/windows/com/syntax/syntax.factor @@ -46,7 +46,7 @@ unless : parse-com-functions ( -- functions ) ";" parse-tokens { ")" } split - [ empty? not ] subset + [ empty? not ] filter [ (parse-com-function) ] map ; : (iid-word) ( definition -- word ) diff --git a/extra/windows/messages/messages.factor b/extra/windows/messages/messages.factor index 3b0db96d63..4c20d0fb42 100644 --- a/extra/windows/messages/messages.factor +++ b/extra/windows/messages/messages.factor @@ -7,7 +7,7 @@ IN: windows.messages SYMBOL: windows-messages "windows.messages" words -[ word-name "windows-message" head? not ] subset +[ word-name "windows-message" head? not ] filter [ dup execute swap ] { } map>assoc windows-messages set-global diff --git a/extra/wrap/wrap.factor b/extra/wrap/wrap.factor index a2ca25ce6e..4e2e092642 100644 --- a/extra/wrap/wrap.factor +++ b/extra/wrap/wrap.factor @@ -8,7 +8,7 @@ IN: wrap SYMBOL: width : line-chunks ( string -- words-lines ) - "\n" split [ " \t" split [ empty? not ] subset ] map ; + "\n" split [ " \t" split [ empty? not ] filter ] map ; : (split-chunk) ( words -- ) -1 over [ length + 1+ dup width get > ] find drop nip diff --git a/extra/x/widgets/wm/root/root.factor b/extra/x/widgets/wm/root/root.factor index 2f6882304f..ff18862d05 100755 --- a/extra/x/widgets/wm/root/root.factor +++ b/extra/x/widgets/wm/root/root.factor @@ -37,7 +37,7 @@ dup >r $id dpy get $window-table at r> or ; : circulate-focus ( -- ) dpy get $default-root <- children -[ find-in-table ] map [ <- mapped? ] subset dup length 1 > +[ find-in-table ] map [ <- mapped? ] filter dup length 1 > [ reverse dup first <- lower drop second <- raise dup is? [ $child ] [ ] if @@ -48,7 +48,7 @@ if ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : managed? ( id -- ? ) -dpy get $window-table values [ is? ] subset [ $id ] map member? ; +dpy get $window-table values [ is? ] filter [ $id ] map member? ; : event>keyname ( event -- keyname ) lookup-keysym keysym>name ; diff --git a/extra/x/widgets/wm/unmapped-frames-menu/unmapped-frames-menu.factor b/extra/x/widgets/wm/unmapped-frames-menu/unmapped-frames-menu.factor index e1b3c5dd82..214d45da6c 100644 --- a/extra/x/widgets/wm/unmapped-frames-menu/unmapped-frames-menu.factor +++ b/extra/x/widgets/wm/unmapped-frames-menu/unmapped-frames-menu.factor @@ -24,7 +24,7 @@ VAR: unmapped-frames-menu : unmapped-frames ( -- seq ) dpy get $window-table values -[ is? ] subset [ <- mapped? not ] subset ; +[ is? ] filter [ <- mapped? not ] filter ; { diff --git a/extra/x/widgets/wm/workspace/workspace.factor b/extra/x/widgets/wm/workspace/workspace.factor index f456c060f9..104021706f 100644 --- a/extra/x/widgets/wm/workspace/workspace.factor +++ b/extra/x/widgets/wm/workspace/workspace.factor @@ -18,7 +18,7 @@ VAR: current-workspace : add-workspace ( -- ) { } clone workspaces> push ; : mapped-windows ( -- seq ) -dpy get $default-root <- children [ <- mapped? ] subset ; +dpy get $default-root <- children [ <- mapped? ] filter ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/extra/xml/tests/test.factor b/extra/xml/tests/test.factor index 72ab7b1340..d85345b3c7 100644 --- a/extra/xml/tests/test.factor +++ b/extra/xml/tests/test.factor @@ -36,7 +36,7 @@ SYMBOL: xml-file ] unit-test [ "abcd" ] [ "
    abcd
    " string>xml - [ string? ] deep-subset concat + [ string? ] deep-filter concat ] unit-test [ "foo" ] [ "foo" string>xml diff --git a/extra/xml/utilities/utilities.factor b/extra/xml/utilities/utilities.factor index ed0773bd6f..87a0242412 100755 --- a/extra/xml/utilities/utilities.factor +++ b/extra/xml/utilities/utilities.factor @@ -54,7 +54,7 @@ M: process-missing error. concat ; : children-tags ( tag -- sequence ) - tag-children [ tag? ] subset ; + tag-children [ tag? ] filter ; : first-child-tag ( tag -- tag ) tag-children [ tag? ] find nip ; @@ -73,7 +73,7 @@ M: process-missing error. assure-name [ swap tag-named? ] curry deep-find ; : deep-tags-named ( tag name/string -- tags-seq ) - tags@ [ swap tag-named? ] curry deep-subset ; + tags@ [ swap tag-named? ] curry deep-filter ; : tag-named ( tag name/string -- matching-tag ) ! like get-name-tag but only looks at direct children, @@ -81,7 +81,7 @@ M: process-missing error. assure-name swap [ tag-named? ] with find nip ; : tags-named ( tag name/string -- tags-seq ) - tags@ swap [ tag-named? ] with subset ; + tags@ swap [ tag-named? ] with filter ; : tag-with-attr? ( elem attr-value attr-name -- ? ) rot dup tag? [ at = ] [ 3drop f ] if ; @@ -90,13 +90,13 @@ M: process-missing error. assure-name [ tag-with-attr? ] 2curry find nip ; : tags-with-attr ( tag attr-value attr-name -- tags-seq ) - tags@ [ tag-with-attr? ] 2curry subset tag-children ; + tags@ [ tag-with-attr? ] 2curry filter tag-children ; : deep-tag-with-attr ( tag attr-value attr-name -- matching-tag ) assure-name [ tag-with-attr? ] 2curry deep-find ; : deep-tags-with-attr ( tag attr-value attr-name -- tags-seq ) - tags@ [ tag-with-attr? ] 2curry deep-subset ; + tags@ [ tag-with-attr? ] 2curry deep-filter ; : get-id ( tag id -- elem ) ! elem=tag.getElementById(id) "id" deep-tag-with-attr ; diff --git a/extra/xml/writer/writer.factor b/extra/xml/writer/writer.factor index 44c92006a0..41e5422830 100644 --- a/extra/xml/writer/writer.factor +++ b/extra/xml/writer/writer.factor @@ -34,7 +34,7 @@ SYMBOL: indenter : ?filter-children ( children -- no-whitespace ) xml-pprint? get [ [ dup string? [ trim-whitespace ] when ] map - [ dup empty? swap string? and not ] subset + [ dup empty? swap string? and not ] filter ] when ; : print-name ( name -- ) diff --git a/extra/xml/xml.factor b/extra/xml/xml.factor index 61ef27b72e..a75c5396f0 100644 --- a/extra/xml/xml.factor +++ b/extra/xml/xml.factor @@ -72,7 +72,7 @@ M: closer process reset-prolog init-xml-stack init-ns-stack ; : assert-blanks ( seq pre? -- ) - swap [ string? ] subset + swap [ string? ] filter [ dup [ blank? ] all? [ drop ] [ swap
     throw ] if
    diff --git a/extra/xmode/keyword-map/keyword-map.factor b/extra/xmode/keyword-map/keyword-map.factor
    index a6ef34a1f9..f786209865 100644
    --- a/extra/xmode/keyword-map/keyword-map.factor
    +++ b/extra/xmode/keyword-map/keyword-map.factor
    @@ -26,7 +26,7 @@ M: keyword-map clear-assoc
     M: keyword-map >alist delegate >alist ;
     
     : (keyword-map-no-word-sep)
    -    keys concat [ alpha? not ] subset prune natural-sort ;
    +    keys concat [ alpha? not ] filter prune natural-sort ;
     
     : keyword-map-no-word-sep* ( keyword-map -- str )
         dup keyword-map-no-word-sep [ ] [
    diff --git a/extra/xmode/utilities/utilities-tests.factor b/extra/xmode/utilities/utilities-tests.factor
    index 57a8a5ac16..99689d8819 100755
    --- a/extra/xmode/utilities/utilities-tests.factor
    +++ b/extra/xmode/utilities/utilities-tests.factor
    @@ -35,7 +35,7 @@ TAGS>
             { { "type" >upper set-company-type } }
             init-from-tag dup
         ] keep
    -    tag-children [ tag? ] subset
    +    tag-children [ tag? ] filter
         [ parse-employee-tag ] with each ;
     
     [
    diff --git a/extra/xmode/utilities/utilities.factor b/extra/xmode/utilities/utilities.factor
    index f7c8606420..db59465b7b 100644
    --- a/extra/xmode/utilities/utilities.factor
    +++ b/extra/xmode/utilities/utilities.factor
    @@ -4,7 +4,7 @@ IN: xmode.utilities
     
     : implies >r not r> or ; inline
     
    -: child-tags ( tag -- seq ) tag-children [ tag? ] subset ;
    +: child-tags ( tag -- seq ) tag-children [ tag? ] filter ;
     
     : map-find ( seq quot -- result elt )
         f -rot
    @@ -13,7 +13,7 @@ IN: xmode.utilities
     
     : tag-init-form ( spec -- quot )
         {
    -        { [ dup quotation? ] [ [ object get tag get ] swap compose ] }
    +        { [ dup quotation? ] [ [ object get tag get ] prepose ] }
             { [ dup length 2 = ] [
                 first2 [
                     >r >r tag get children>string
    @@ -29,7 +29,7 @@ IN: xmode.utilities
         } cond ;
     
     : with-tag-initializer ( tag obj quot -- )
    -    [ object set tag set ] swap compose with-scope ; inline
    +    [ object set tag set ] prepose with-scope ; inline
     
     MACRO: (init-from-tag) ( specs -- )
         [ tag-init-form ] map concat [ ] like
    
    From 714b0ebc94529f2c6048a157b17ccca60907b843 Mon Sep 17 00:00:00 2001
    From: Doug Coleman 
    Date: Sat, 26 Apr 2008 00:59:03 -0500
    Subject: [PATCH 080/270] move shufflers to unmaintained  - unit test fails
     because of "in" vocab weirdness
    
    ---
     unmaintained/shufflers/authors.txt            |  1 +
     unmaintained/shufflers/shufflers-docs.factor  | 13 +++++++
     unmaintained/shufflers/shufflers-tests.factor |  8 +++++
     unmaintained/shufflers/shufflers.factor       | 36 +++++++++++++++++++
     unmaintained/shufflers/summary.txt            |  1 +
     unmaintained/shufflers/tags.txt               |  1 +
     6 files changed, 60 insertions(+)
     create mode 100644 unmaintained/shufflers/authors.txt
     create mode 100644 unmaintained/shufflers/shufflers-docs.factor
     create mode 100644 unmaintained/shufflers/shufflers-tests.factor
     create mode 100644 unmaintained/shufflers/shufflers.factor
     create mode 100644 unmaintained/shufflers/summary.txt
     create mode 100644 unmaintained/shufflers/tags.txt
    
    diff --git a/unmaintained/shufflers/authors.txt b/unmaintained/shufflers/authors.txt
    new file mode 100644
    index 0000000000..f990dd0ed2
    --- /dev/null
    +++ b/unmaintained/shufflers/authors.txt
    @@ -0,0 +1 @@
    +Daniel Ehrenberg
    diff --git a/unmaintained/shufflers/shufflers-docs.factor b/unmaintained/shufflers/shufflers-docs.factor
    new file mode 100644
    index 0000000000..ac372534ae
    --- /dev/null
    +++ b/unmaintained/shufflers/shufflers-docs.factor
    @@ -0,0 +1,13 @@
    +USING: help.syntax help.markup ;
    +IN: shufflers
    +
    +HELP: SHUFFLE:
    +{ $syntax "SHUFFLE: alphabet #" }
    +{ $values { "alphabet" "an alphabet of unique letters" } { "#" "the maximum length" } }
    +{ $description "Defines stack shufflers of the form abc-bcba where 'abc' describes the inputs and 'bcba' describes the outputs. Given a stack of 1 2 3, this returns 2 3 2 1. The stack shufflers defined are put in the current vocab with the suffix '.shuffle' appended." }
    +{ $examples
    +"SHUFFLE: abcd 6\n"
    +": 4drop abcd- ;\n"
    +": 2over abcd-abcdab ;\n"
    +": 2swap abcd-cdab ;\n"
    +": 3dup abc-abcabc ;\n" } ;
    diff --git a/unmaintained/shufflers/shufflers-tests.factor b/unmaintained/shufflers/shufflers-tests.factor
    new file mode 100644
    index 0000000000..753f35b2e6
    --- /dev/null
    +++ b/unmaintained/shufflers/shufflers-tests.factor
    @@ -0,0 +1,8 @@
    +USING: shufflers tools.test ;
    +IN: shufflers.tests
    +
    +SHUFFLE: abcd 4
    +[ ] [ 1 2 3 4 abcd- ] unit-test
    +[ 1 2 1 2 ] [ 1 2 3 abc-abab ] unit-test
    +[ 4 3 2 1 ] [ 1 2 3 4 abcd-dcba ] unit-test
    +[ 1 1 1 1 ] [ 1 a-aaaa ] unit-test
    diff --git a/unmaintained/shufflers/shufflers.factor b/unmaintained/shufflers/shufflers.factor
    new file mode 100644
    index 0000000000..b11668a53e
    --- /dev/null
    +++ b/unmaintained/shufflers/shufflers.factor
    @@ -0,0 +1,36 @@
    +USING: kernel sequences words math math.functions arrays 
    +shuffle quotations parser math.parser strings namespaces 
    +splitting effects sequences.lib ;
    +IN: shufflers
    +
    +: shuffle>string ( names shuffle -- string )
    +    swap [ [ nth ] curry map ] curry map
    +    first2 "-" swap 3append >string ;
    +
    +: make-shuffles ( max-out max-in -- shuffles )
    +    [ 1+ dup rot strings [ 2array ] with map ]
    +    with map concat ;
    +
    +: shuffle>quot ( shuffle -- quot )
    +    [
    +        first2 2dup [ - ] with map
    +        reverse [ , \ npick , \ >r , ] each
    +        swap , \ ndrop , length [ \ r> , ] times
    +    ] [ ] make ;
    +
    +: put-effect ( word -- )
    +    dup word-name "-" split1
    +    [ >array [ 1string ] map ] bi@
    +     "declared-effect" set-word-prop ;
    +
    +: in-shuffle ( -- ) in get ".shuffle" append set-in ;
    +: out-shuffle ( -- ) in get ".shuffle" ?tail drop set-in ;
    +
    +: define-shuffles ( names max-out -- )
    +    in-shuffle over length make-shuffles [
    +        [ shuffle>string create-in ] keep
    +        shuffle>quot dupd define put-effect
    +    ] with each out-shuffle ;
    +
    +: SHUFFLE:
    +    scan scan string>number define-shuffles ; parsing
    diff --git a/unmaintained/shufflers/summary.txt b/unmaintained/shufflers/summary.txt
    new file mode 100644
    index 0000000000..37b87be410
    --- /dev/null
    +++ b/unmaintained/shufflers/summary.txt
    @@ -0,0 +1 @@
    +Arbitrary stack shuffling operators of the form abc-cbab
    diff --git a/unmaintained/shufflers/tags.txt b/unmaintained/shufflers/tags.txt
    new file mode 100644
    index 0000000000..f4274299b1
    --- /dev/null
    +++ b/unmaintained/shufflers/tags.txt
    @@ -0,0 +1 @@
    +extensions
    
    From ca77a729d8f3e57231407e473b3a0ca8cf8ed657 Mon Sep 17 00:00:00 2001
    From: Slava Pestov 
    Date: Sat, 26 Apr 2008 01:44:45 -0500
    Subject: [PATCH 081/270] Clean up session persistence
    
    ---
     extra/http/http-tests.factor                  |  25 +-
     .../server/sessions/sessions-tests.factor     | 225 ++++++++++--------
     extra/http/server/sessions/sessions.factor    | 100 ++++----
     .../sessions/storage/assoc/assoc.factor       |  37 ---
     .../sessions/storage/db/db-tests.factor       |  24 --
     .../http/server/sessions/storage/db/db.factor |  41 +---
     .../server/sessions/storage/null/null.factor  |  16 ++
     .../server/sessions/storage/storage.factor    |   6 +-
     8 files changed, 235 insertions(+), 239 deletions(-)
     delete mode 100755 extra/http/server/sessions/storage/assoc/assoc.factor
     delete mode 100755 extra/http/server/sessions/storage/db/db-tests.factor
     create mode 100644 extra/http/server/sessions/storage/null/null.factor
    
    diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor
    index 473bc964d3..553b4f2cda 100755
    --- a/extra/http/http-tests.factor
    +++ b/extra/http/http-tests.factor
    @@ -1,6 +1,6 @@
     USING: http tools.test multiline tuple-syntax
     io.streams.string kernel arrays splitting sequences
    -assocs io.sockets ;
    +assocs io.sockets db db.sqlite ;
     IN: http.tests
     
     [ "hello%20world" ] [ "hello world" url-encode ] unit-test
    @@ -134,15 +134,22 @@ read-response-test-1' 1array [
     
     ! Live-fire exercise
     USING: http.server http.server.static http.server.sessions
    -http.server.actions http.server.auth.login http.client
    -io.server io.files io accessors namespaces threads
    -io.encodings.ascii ;
    +http.server.sessions.storage.db http.server.actions
    +http.server.auth.login http.server.db http.client
    +io.server io.files io io.encodings.ascii
    +accessors namespaces threads ;
     
     : add-quit-action
         
             [ stop-server "text/html"  [ "Goodbye" write ] >>body ] >>display
         "quit" add-responder ;
     
    +: test-db "test.db" temp-file sqlite-db ;
    +
    +test-db [
    +    init-sessions-table
    +] with-db
    +
     [ ] [
         [
             
    @@ -187,11 +194,14 @@ io.encodings.ascii ;
             
                  
                 
    -             "" add-responder
    +            
    +                sessions-in-db >>sessions
    +            "" add-responder
                 add-quit-action
                 
                      "a" add-main-responder
                 "d" add-responder
    +        test-db 
             main-responder set
     
             [ 1237 httpd ] "HTTPD test" spawn drop
    @@ -214,9 +224,12 @@ io.encodings.ascii ;
         [
             
                  [ "text/plain"  [ "Hi" write ] >>body ] >>display
    -             
    +            
    +            
    +                sessions-in-db >>sessions
                 "" add-responder
                 add-quit-action
    +        test-db 
             main-responder set
     
             [ 1237 httpd ] "HTTPD test" spawn drop
    diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor
    index 02dee1f7e0..4d8c93ef67 100755
    --- a/extra/http/server/sessions/sessions-tests.factor
    +++ b/extra/http/server/sessions/sessions-tests.factor
    @@ -1,12 +1,14 @@
     IN: http.server.sessions.tests
     USING: tools.test http http.server.sessions
    -http.server.sessions.storage http.server.sessions.storage.assoc
    +http.server.sessions.storage http.server.sessions.storage.db
     http.server.actions http.server math namespaces kernel accessors
    -prettyprint io.streams.string splitting destructors sequences ;
    +prettyprint io.streams.string io.files splitting destructors
    +sequences db db.sqlite ;
     
    -[ H{ } ] [ H{ } add-session-id ] unit-test
    -
    -: with-session \ session swap with-variable ; inline
    +: with-session
    +    [
    +        >r [ save-session-after ] [ \ session set ] bi r> call
    +    ] with-destructors ; inline
     
     TUPLE: foo ;
     
    @@ -19,56 +21,6 @@ M: foo call-responder
         "x" [ 1+ ] schange
         "text/html"  [ "x" sget pprint ] >>body ;
     
    -[
    -    "123" session-id set
    -    H{ } clone session set
    -    session-changed? off
    -
    -    [ H{ { "factorsessid" "123" } } ] [ H{ } add-session-id ] unit-test
    -
    -    [ ] [ 3 "x" sset ] unit-test
    -    
    -    [ 9 ] [ "x" sget sq ] unit-test
    -    
    -    [ ] [ "x" [ 1- ] schange ] unit-test
    -    
    -    [ 4 ] [ "x" sget sq ] unit-test
    -
    -    [ t ] [ session-changed? get ] unit-test
    -] with-scope
    -
    -[ t ] [ f  url-sessions? ] unit-test
    -[ t ] [ f  cookie-sessions? ] unit-test
    -
    -[ ] [
    -     
    -         >>sessions
    -    "manager" set
    -] unit-test
    -
    -[ { 5 0 } ] [
    -    [
    -        "manager" get begin-session drop
    -        dup "manager" get sessions>> get-session [ 5 "a" sset ] with-session
    -        dup "manager" get sessions>> get-session [ "a" sget , ] with-session
    -        dup "manager" get sessions>> get-session [ "x" sget , ] with-session
    -        "manager" get sessions>> get-session
    -        "manager" get sessions>> delete-session
    -    ] { } make
    -] unit-test
    -
    -[ ] [
    -    
    -        "GET" >>method
    -    request set
    -    { "etc" } "manager" get call-responder
    -    response set
    -] unit-test
    -
    -[ 307 ] [ response get code>> ] unit-test
    -
    -[ ] [ response get "location" header "=" split1 nip "id" set ] unit-test
    -
     : url-responder-mock-test
         [
             
    @@ -76,34 +28,10 @@ M: foo call-responder
                 "id" get session-id-key set-query-param
                 "/" >>path
             request set
    -        { } "manager" get call-responder
    +        { } session-manager get call-responder
             [ write-response-body drop ] with-string-writer
         ] with-destructors ;
     
    -[ "1" ] [ url-responder-mock-test ] unit-test
    -[ "2" ] [ url-responder-mock-test ] unit-test
    -[ "3" ] [ url-responder-mock-test ] unit-test
    -[ "4" ] [ url-responder-mock-test ] unit-test
    -
    -[ ] [
    -     
    -         >>sessions
    -    "manager" set
    -] unit-test
    -
    -[
    -    
    -    "GET" >>method
    -    "/" >>path
    -    request set
    -    { "etc" } "manager" get call-responder response set
    -    [ "1" ] [ [ response get write-response-body drop ] with-string-writer ] unit-test
    -    response get
    -] with-destructors
    -response set
    -
    -[ ] [ response get cookies>> "cookies" set ] unit-test
    -
     : cookie-responder-mock-test
         [
             
    @@ -111,35 +39,134 @@ response set
                 "cookies" get >>cookies
                 "/" >>path
             request set
    -        { } "manager" get call-responder
    +        { } session-manager get call-responder
             [ write-response-body drop ] with-string-writer
         ] with-destructors ;
     
    -[ "2" ] [ cookie-responder-mock-test ] unit-test
    -[ "3" ] [ cookie-responder-mock-test ] unit-test
    -[ "4" ] [ cookie-responder-mock-test ] unit-test
    -
     : 
         
             [
                 "text/plain"  exit-with
             ] >>display ;
     
    -[
    -    [ ] [
    -        
    -            "GET" >>method
    -            "id" get session-id-key set-query-param
    -            "/" >>path
    -        request set
    +"auth-test.db" temp-file sqlite-db [
     
    -        [
    -            { }  
    -            call-responder
    -        ] with-destructors response set
    +    [
    +        empty-session
    +            123 >>id session set
    +        session-changed? off
    +
    +        [ H{ { "factorsessid" 123 } } ] [ H{ } add-session-id ] unit-test
    +
    +        [ ] [ 3 "x" sset ] unit-test
    +
    +        [ 9 ] [ "x" sget sq ] unit-test
    +
    +        [ ] [ "x" [ 1- ] schange ] unit-test
    +
    +        [ 4 ] [ "x" sget sq ] unit-test
    +
    +        [ t ] [ session-changed? get ] unit-test
    +    ] with-scope
    +
    +    [ t ] [ f  url-sessions? ] unit-test
    +    [ t ] [ f  cookie-sessions? ] unit-test
    +
    +    [ ] [
    +         
    +            sessions-in-db >>sessions
    +        session-manager set
         ] unit-test
     
    -    [ "text/plain" ] [ response get "content-type" header ] unit-test
    +    [ t ] [
    +        session-manager get begin-session id>>
    +        session-manager get sessions>> get-session session?
    +    ] unit-test
     
    -    [ f ] [ response get cookies>> empty? ] unit-test
    -] with-scope
    +    [ { 5 0 } ] [
    +        [
    +            session-manager get begin-session
    +            dup [ 5 "a" sset ] with-session
    +            dup [ "a" sget , ] with-session
    +            dup [ "x" sget , ] with-session
    +            id>> session-manager get sessions>> delete-session
    +        ] { } make
    +    ] unit-test
    +
    +    [ 0 ] [
    +        session-manager get begin-session id>>
    +        session-manager get sessions>> get-session [ "x" sget ] with-session
    +    ] unit-test
    +
    +    [ { 5 0 } ] [
    +        [
    +            session-manager get begin-session id>>
    +            dup session-manager get sessions>> get-session [ 5 "a" sset ] with-session
    +            dup session-manager get sessions>> get-session [ "a" sget , ] with-session
    +            dup session-manager get sessions>> get-session [ "x" sget , ] with-session
    +            session-manager get sessions>> delete-session
    +        ] { } make
    +    ] unit-test
    +
    +    [ ] [
    +        [
    +            
    +            "GET" >>method
    +            request set
    +            { "etc" } session-manager get call-responder
    +        ] with-destructors
    +        response set
    +    ] unit-test
    +
    +    [ 307 ] [ response get code>> ] unit-test
    +
    +    [ ] [ response get "location" header "=" split1 nip "id" set ] unit-test
    +
    +    [ "1" ] [ url-responder-mock-test ] unit-test
    +    [ "2" ] [ url-responder-mock-test ] unit-test
    +    [ "3" ] [ url-responder-mock-test ] unit-test
    +    [ "4" ] [ url-responder-mock-test ] unit-test
    +
    +    [ ] [
    +         
    +            sessions-in-db >>sessions
    +        session-manager set
    +    ] unit-test
    +
    +    [
    +        
    +        "GET" >>method
    +        "/" >>path
    +        request set
    +        { "etc" } session-manager get call-responder response set
    +        [ "1" ] [ [ response get write-response-body drop ] with-string-writer ] unit-test
    +        response get
    +    ] with-destructors
    +    response set
    +
    +    [ ] [ response get cookies>> "cookies" set ] unit-test
    +
    +    [ "2" ] [ cookie-responder-mock-test ] unit-test
    +    [ "3" ] [ cookie-responder-mock-test ] unit-test
    +    [ "4" ] [ cookie-responder-mock-test ] unit-test
    +
    +    [
    +        [ ] [
    +            
    +                "GET" >>method
    +                "id" get session-id-key set-query-param
    +                "/" >>path
    +            request set
    +
    +            [
    +                { }  
    +                    sessions-in-db >>sessions
    +                call-responder
    +            ] with-destructors response set
    +        ] unit-test
    +
    +        [ "text/plain" ] [ response get "content-type" header ] unit-test
    +
    +        [ f ] [ response get cookies>> empty? ] unit-test
    +    ] with-scope
    +] with-db
    diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor
    index 9e4f538583..5d0113b225 100755
    --- a/extra/http/server/sessions/sessions.factor
    +++ b/extra/http/server/sessions/sessions.factor
    @@ -1,16 +1,25 @@
     ! Copyright (C) 2008 Doug Coleman, Slava Pestov.
     ! See http://factorcode.org/license.txt for BSD license.
    -USING: assocs calendar kernel math.parser namespaces random
    -accessors http http.server
    -http.server.sessions.storage http.server.sessions.storage.assoc
    -quotations hashtables sequences fry html.elements symbols
    -continuations destructors ;
    +USING: assocs kernel math.parser namespaces random
    +accessors quotations hashtables sequences continuations
    +fry calendar destructors
    +http
    +http.server
    +http.server.sessions.storage
    +http.server.sessions.storage.null
    +html.elements ;
     IN: http.server.sessions
     
     ! ! ! ! ! !
     ! WARNING: this session manager is vulnerable to XSRF attacks
     ! ! ! ! ! !
     
    +TUPLE: session id user-agent client-addr namespace ;
    +
    +:  ( id -- session )
    +    session new
    +        swap >>id ;
    +
     GENERIC: init-session* ( responder -- )
     
     M: object init-session* drop ;
    @@ -19,59 +28,65 @@ TUPLE: session-manager responder sessions ;
     
     : new-session-manager ( responder class -- responder' )
         new
    -         >>sessions
    +        null-sessions >>sessions
             swap >>responder ; inline
     
    -SYMBOLS: session session-id session-changed? ;
    +SYMBOL: session-changed?
     
     : sget ( key -- value )
    -    session get at ;
    +    session get namespace>> at ;
     
     : sset ( value key -- )
    -    session get set-at
    +    session get namespace>> set-at
         session-changed? on ;
     
     : schange ( key quot -- )
    -    session get swap change-at
    +    session get namespace>> swap change-at
         session-changed? on ; inline
     
     : sessions session-manager get sessions>> ;
     
     : managed-responder session-manager get responder>> ;
     
    -: init-session ( managed -- session )
    -    H{ } clone [ session [ init-session* ] with-variable ] keep ;
    +: init-session ( session managed -- )
    +    >r session r> '[ , init-session* ] with-variable ;
     
    -: begin-session ( responder -- id session )
    -    [ responder>> init-session ] [ sessions>> ] bi
    -    [ new-session ] [ drop ] 2bi ;
    +: empty-session ( -- session )
    +    f 
    +        "" >>user-agent
    +        "" >>client-addr
    +        H{ } clone >>namespace ;
    +
    +: begin-session ( responder -- session )
    +    >r empty-session r>
    +    [ responder>> init-session ]
    +    [ sessions>> new-session ]
    +    [ drop ]
    +    2tri ;
     
     ! Destructor
    -TUPLE: session-saver id session ;
    +TUPLE: session-saver session ;
     
     C:  session-saver
     
     M: session-saver dispose
    -    session-changed? get [
    -        [ session>> ] [ id>> ] bi
    -        sessions update-session
    -    ] [ drop ] if ;
    +    session-changed? get
    +    [ session>> sessions update-session ] [ drop ] if ;
     
    -: save-session-after ( id session -- )
    +: save-session-after ( session -- )
          add-always-destructor ;
     
    -: call-responder/session ( path responder id session -- response )
    -    [ save-session-after ]
    -    [ [ session-id set ] [ session set ] bi* ] 2bi
    +: call-responder/session ( path responder session -- response )
    +    [ save-session-after ] [ session set ] bi
         [ session-manager set ] [ responder>> call-responder ] bi ;
     
     TUPLE: null-sessions < session-manager ;
     
    -: 
    +:  ( responder -- manager )
         null-sessions new-session-manager ;
     
     M: null-sessions call-responder ( path responder -- response )
    -    H{ } clone f call-responder/session ;
    +     call-responder/session ;
     
     TUPLE: url-sessions < session-manager ;
     
    @@ -80,42 +95,43 @@ TUPLE: url-sessions < session-manager ;
     
     : session-id-key "factorsessid" ;
     
    -: current-url-session ( responder -- id/f session/f )
    -    [ request-params session-id-key swap at ] [ sessions>> ] bi*
    -    [ drop ] [ get-session ] 2bi ;
    +: current-url-session ( responder -- session/f )
    +    >r request-params session-id-key swap at string>number
    +    r> sessions>> get-session ;
     
     : add-session-id ( query -- query' )
    -    session-id get [ session-id-key associate assoc-union ] when* ;
    +    session get [ id>> session-id-key associate assoc-union ] when* ;
     
     : session-form-field ( -- )
         > =value
         input/> ;
     
    -: new-url-session ( responder -- response )
    -    [ f ] [ begin-session drop session-id-key associate ] bi*
    +: new-url-session ( path responder -- response )
    +    [ drop f ] [ begin-session id>> session-id-key associate ] bi*
          ;
     
     M: url-sessions call-responder ( path responder -- response )
         [ add-session-id ] link-hook set
         [ session-form-field ] form-hook set
    -    dup current-url-session dup [
    +    dup current-url-session [
             call-responder/session
         ] [
    -        2drop nip new-url-session
    -    ] if ;
    +        new-url-session
    +    ] if* ;
     
     TUPLE: cookie-sessions < session-manager ;
     
     :  ( responder -- responder' )
         cookie-sessions new-session-manager ;
     
    -: current-cookie-session ( responder -- id namespace/f )
    +: current-cookie-session ( responder -- session/f )
         request get session-id-key get-cookie dup
    -    [ value>> dup rot sessions>> get-session ] [ 2drop f f ] if ;
    +    [ value>> string>number swap sessions>> get-session ]
    +    [ 2drop f ] if ;
     
     :  ( id -- cookie )
         session-id-key  ;
    @@ -123,12 +139,12 @@ TUPLE: cookie-sessions < session-manager ;
     : call-responder/new-session ( path responder -- response )
         dup begin-session
         [ call-responder/session ]
    -    [ drop  ] 2bi
    +    [ id>> number>string  ] bi
         put-cookie ;
     
     M: cookie-sessions call-responder ( path responder -- response )
    -    dup current-cookie-session dup [
    +    dup current-cookie-session [
             call-responder/session
         ] [
    -        2drop call-responder/new-session
    -    ] if ;
    +        call-responder/new-session
    +    ] if* ;
    diff --git a/extra/http/server/sessions/storage/assoc/assoc.factor b/extra/http/server/sessions/storage/assoc/assoc.factor
    deleted file mode 100755
    index 6e4a84d646..0000000000
    --- a/extra/http/server/sessions/storage/assoc/assoc.factor
    +++ /dev/null
    @@ -1,37 +0,0 @@
    -! Copyright (C) 2008 Slava Pestov.
    -! See http://factorcode.org/license.txt for BSD license.
    -USING: assocs assocs.lib accessors http.server.sessions.storage
    -alarms kernel fry http.server ;
    -IN: http.server.sessions.storage.assoc
    -
    -TUPLE: sessions-in-memory sessions alarms ;
    -
    -:  ( -- storage )
    -    H{ } clone H{ } clone sessions-in-memory boa ;
    -
    -: cancel-session-timeout ( id storage -- )
    -    alarms>> at [ cancel-alarm ] when* ;
    -
    -: touch-session ( id storage -- )
    -    [ cancel-session-timeout ]
    -    [ '[ , , delete-session ] timeout later ]
    -    [ alarms>> set-at ]
    -    2tri ;
    -
    -M: sessions-in-memory get-session ( id storage -- namespace )
    -    [ sessions>> at ] [ touch-session ] 2bi ;
    -
    -M: sessions-in-memory update-session ( namespace id storage -- )
    -    [ sessions>> set-at ]
    -    [ touch-session ]
    -    2bi ;
    -
    -M: sessions-in-memory delete-session ( id storage -- )
    -    [ sessions>> delete-at ]
    -    [ cancel-session-timeout ]
    -    2bi ;
    -
    -M: sessions-in-memory new-session ( namespace storage -- id )
    -    [ sessions>> set-at-unique ]
    -    [ [ touch-session ] [ drop ] 2bi ]
    -    bi ;
    diff --git a/extra/http/server/sessions/storage/db/db-tests.factor b/extra/http/server/sessions/storage/db/db-tests.factor
    deleted file mode 100755
    index 4e6ae8a9b4..0000000000
    --- a/extra/http/server/sessions/storage/db/db-tests.factor
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -IN: http.server.sessions.storage.db
    -USING: http.server.sessions.storage
    -http.server.sessions.storage.db namespaces io.files
    -db.sqlite db accessors math tools.test kernel assocs
    -sequences ;
    -
    -sessions-in-db "storage" set
    -
    -"auth-test.db" temp-file sqlite-db [
    -    [ ] [ init-sessions-table ] unit-test
    -
    -    [ f ] [ H{ } "storage" get new-session empty? ] unit-test
    -
    -    H{ } "storage" get new-session "id" set
    -
    -    "id" get "storage" get get-session "session" set
    -    "a" "b" "session" get set-at
    -
    -    "session" get "id" get "storage" get update-session
    -
    -    [ H{ { "b" "a" } } ] [
    -        "id" get "storage" get get-session
    -    ] unit-test
    -] with-db
    diff --git a/extra/http/server/sessions/storage/db/db.factor b/extra/http/server/sessions/storage/db/db.factor
    index 0245db15b0..bddb783c97 100755
    --- a/extra/http/server/sessions/storage/db/db.factor
    +++ b/extra/http/server/sessions/storage/db/db.factor
    @@ -1,46 +1,31 @@
     ! Copyright (C) 2008 Slava Pestov.
     ! See http://factorcode.org/license.txt for BSD license.
    -USING: assocs accessors http.server.sessions.storage
    -alarms kernel http.server db.tuples db.types math.parser
    -classes.singleton ;
    +USING: assocs accessors kernel http.server.sessions.storage
    +http.server.sessions http.server db.tuples db.types math.parser
    +classes.singleton random ;
     IN: http.server.sessions.storage.db
     
     SINGLETON: sessions-in-db
     
    -TUPLE: session id namespace ;
    -
     session "SESSIONS"
     {
    +    ! { "id" "ID" +random-id+ system-random-generator }
         { "id" "ID" INTEGER +native-id+ }
    +    { "user-agent" "USERAGENT" { VARCHAR 256 } +not-null+ }
    +    { "client-addr" "CLIENTADDR" { VARCHAR 256 } +not-null+ }
         { "namespace" "NAMESPACE" FACTOR-BLOB }
     } define-persistent
     
     : init-sessions-table session ensure-table ;
     
    -:  ( id -- session )
    -    session new
    -        swap dup [ string>number ] when >>id ;
    +M: sessions-in-db get-session ( id storage -- session/f )
    +    drop dup [  select-tuple ] when ;
     
    -M: sessions-in-db get-session ( id storage -- namespace/f )
    -    drop
    -    dup [
    -        
    -        select-tuple dup [ namespace>> ] when
    -    ] when ;
    -
    -M: sessions-in-db update-session ( namespace id storage -- )
    -    drop
    -    
    -        swap >>namespace
    -    update-tuple ;
    +M: sessions-in-db update-session ( session storage -- )
    +    drop update-tuple ;
     
     M: sessions-in-db delete-session ( id storage -- )
    -    drop
    -    
    -    delete-tuple ;
    +    drop  delete-tuple ;
     
    -M: sessions-in-db new-session ( namespace storage -- id )
    -    drop
    -    f 
    -        swap >>namespace
    -    [ insert-tuple ] [ id>> number>string ] bi ;
    +M: sessions-in-db new-session ( session storage -- )
    +    drop insert-tuple ;
    diff --git a/extra/http/server/sessions/storage/null/null.factor b/extra/http/server/sessions/storage/null/null.factor
    new file mode 100644
    index 0000000000..e915d57f83
    --- /dev/null
    +++ b/extra/http/server/sessions/storage/null/null.factor
    @@ -0,0 +1,16 @@
    +! Copyright (C) 2008 Slava Pestov.
    +! See http://factorcode.org/license.txt for BSD license.
    +USING: kernel http.server.sessions.storage ;
    +IN: http.server.sessions.storage.null
    +
    +SINGLETON: null-sessions
    +
    +: null-sessions-error "No session storage installed" throw ;
    +
    +M: null-sessions get-session null-sessions-error ;
    +
    +M: null-sessions update-session null-sessions-error ;
    +
    +M: null-sessions delete-session null-sessions-error ;
    +
    +M: null-sessions new-session null-sessions-error ;
    diff --git a/extra/http/server/sessions/storage/storage.factor b/extra/http/server/sessions/storage/storage.factor
    index df96c815c7..97d869e60a 100755
    --- a/extra/http/server/sessions/storage/storage.factor
    +++ b/extra/http/server/sessions/storage/storage.factor
    @@ -5,10 +5,10 @@ IN: http.server.sessions.storage
     
     : timeout 20 minutes ;
     
    -GENERIC: get-session ( id storage -- namespace )
    +GENERIC: get-session ( id storage -- session )
     
    -GENERIC: update-session ( namespace id storage -- )
    +GENERIC: update-session ( session storage -- )
     
     GENERIC: delete-session ( id storage -- )
     
    -GENERIC: new-session ( namespace storage -- id )
    +GENERIC: new-session ( session storage -- )
    
    From e264537a1a558d08e377ea470997ff03ba4d085b Mon Sep 17 00:00:00 2001
    From: Doug Coleman 
    Date: Sat, 26 Apr 2008 02:01:06 -0500
    Subject: [PATCH 082/270] reverse the arguments of diff, assoc-diff fix lots of
     usings fix help-lint
    
    ---
     core/assocs/assocs-docs.factor                       |  2 +-
     core/assocs/assocs.factor                            |  2 +-
     core/bootstrap/image/image.factor                    |  2 +-
     core/bootstrap/stage2.factor                         |  2 +-
     core/classes/classes-docs.factor                     |  4 ++--
     core/classes/singleton/singleton-docs.factor         |  2 +-
     core/classes/tuple/tuple-docs.factor                 |  1 +
     core/classes/tuple/tuple-tests.factor                |  4 ++--
     core/dlists/dlists-tests.factor                      |  2 +-
     core/generator/registers/registers.factor            |  2 +-
     .../standard/engines/predicate/predicate.factor      |  4 ++--
     core/heaps/heaps-tests.factor                        |  2 +-
     core/inference/class/class-tests.factor              |  2 +-
     core/io/files/files.factor                           |  4 ++--
     core/mirrors/mirrors-docs.factor                     |  1 +
     core/namespaces/namespaces-docs.factor               |  2 +-
     core/namespaces/namespaces-tests.factor              |  2 +-
     core/parser/parser.factor                            |  6 +++---
     core/prettyprint/prettyprint-docs.factor             | 12 ++++++++++--
     core/sequences/sequences.factor                      |  2 +-
     core/sets/sets-docs.factor                           |  4 ++--
     core/sets/sets-tests.factor                          |  2 +-
     core/sets/sets.factor                                |  2 +-
     core/sorting/sorting-tests.factor                    |  4 ++--
     core/strings/strings-tests.factor                    |  2 +-
     core/syntax/syntax-docs.factor                       |  5 +++--
     core/words/words-docs.factor                         |  2 +-
     27 files changed, 46 insertions(+), 35 deletions(-)
    
    diff --git a/core/assocs/assocs-docs.factor b/core/assocs/assocs-docs.factor
    index f06cc70613..de62ccd878 100755
    --- a/core/assocs/assocs-docs.factor
    +++ b/core/assocs/assocs-docs.factor
    @@ -281,7 +281,7 @@ HELP: assoc-union
     
     HELP: assoc-diff
     { $values { "assoc1" assoc } { "assoc2" assoc } { "diff" "a new assoc" } }
    -{ $description "Outputs an assoc consisting of all entries from " { $snippet "assoc2" } " whose key is not contained in " { $snippet "assoc1" } "." } 
    +{ $description "Outputs an assoc consisting of all entries from " { $snippet "assoc1" } " whose key is not contained in " { $snippet "assoc2" } "." } 
     ;
     HELP: remove-all
     { $values { "assoc" assoc } { "seq" "a sequence" } { "subseq" "a new sequence" } }
    diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor
    index a58dfea900..e68c311836 100755
    --- a/core/assocs/assocs.factor
    +++ b/core/assocs/assocs.factor
    @@ -120,7 +120,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
         [ rot update ] keep [ swap update ] keep ;
     
     : assoc-diff ( assoc1 assoc2 -- diff )
    -    swap [ nip key? not ] curry assoc-filter ;
    +    [ nip key? not ] curry assoc-filter ;
     
     : remove-all ( assoc seq -- subseq )
         swap [ key? not ] curry filter ;
    diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor
    index 46ed34c35c..5d8bbf3f77 100755
    --- a/core/bootstrap/image/image.factor
    +++ b/core/bootstrap/image/image.factor
    @@ -305,7 +305,7 @@ M: float-array ' float-array emit-dummy-array ;
     
     ! Tuples
     : (emit-tuple) ( tuple -- pointer )
    -    [ tuple>array 1 tail-slice ]
    +    [ tuple>array rest-slice ]
         [ class transfer-word tuple-layout ] bi prefix [ ' ] map
         tuple type-number dup [ emit-seq ] emit-object ;
     
    diff --git a/core/bootstrap/stage2.factor b/core/bootstrap/stage2.factor
    index 8e16417ca6..8e4108866f 100755
    --- a/core/bootstrap/stage2.factor
    +++ b/core/bootstrap/stage2.factor
    @@ -22,7 +22,7 @@ SYMBOL: bootstrap-time
         xref-sources ;
     
     : load-components ( -- )
    -    "exclude" "include"
    +    "include" "exclude"
         [ get-global " " split [ empty? not ] filter ] bi@
         diff
         [ "bootstrap." prepend require ] each ;
    diff --git a/core/classes/classes-docs.factor b/core/classes/classes-docs.factor
    index dd3782e877..5971ffd9fa 100755
    --- a/core/classes/classes-docs.factor
    +++ b/core/classes/classes-docs.factor
    @@ -55,7 +55,7 @@ HELP: class
     { $values { "object" object } { "class" class } }
     { $description "Outputs an object's canonical class. While an object may be an instance of more than one class, the canonical class is either its built-in class, or if the object is a tuple, its tuple class." }
     { $class-description "The class of all class words." }
    -{ $examples { $example "USING: classes prettyprint ;" "1.0 class ." "float" } { $example "USING: classes prettyprint ;" "TUPLE: point x y z ;\nT{ point f 1 2 3 } class ." "point" } } ;
    +{ $examples { $example "USING: classes prettyprint ;" "1.0 class ." "float" } { $example "USING: classes prettyprint ;" "IN: scratchpad" "TUPLE: point x y z ;\nT{ point f 1 2 3 } class ." "point" } } ;
     
     HELP: classes
     { $values { "seq" "a sequence of class words" } }
    @@ -63,7 +63,7 @@ HELP: classes
     
     HELP: tuple-class
     { $class-description "The class of tuple class words." }
    -{ $examples { $example "USING: classes prettyprint ;" "TUPLE: name title first last ;" "name tuple-class? ." "t" } } ;
    +{ $examples { $example "USING: classes prettyprint ;" "IN: scratchpad" "TUPLE: name title first last ;" "name tuple-class? ." "t" } } ;
     
     HELP: update-map
     { $var-description "Hashtable mapping each class to a set of classes defined in terms of this class. The " { $link define-class } " word uses this information to update generic words when classes are redefined." } ;
    diff --git a/core/classes/singleton/singleton-docs.factor b/core/classes/singleton/singleton-docs.factor
    index a8dae809ec..f647b006d9 100644
    --- a/core/classes/singleton/singleton-docs.factor
    +++ b/core/classes/singleton/singleton-docs.factor
    @@ -18,7 +18,7 @@ HELP: SINGLETON:
         "Defines a new singleton class. The class word itself is the sole instance of the singleton class."
     }
     { $examples
    -    { $example "USING: classes.singleton kernel io ;" "SINGLETON: foo\nGENERIC: bar ( obj -- )\nM: foo bar drop \"a foo!\" print ;\nfoo bar" "a foo!" }
    +    { $example "USING: classes.singleton kernel io ;" "IN: scratchpad" "SINGLETON: foo\nGENERIC: bar ( obj -- )\nM: foo bar drop \"a foo!\" print ;\nfoo bar" "a foo!" }
     } ;
     
     HELP: define-singleton-class
    diff --git a/core/classes/tuple/tuple-docs.factor b/core/classes/tuple/tuple-docs.factor
    index cdfdee9717..9f8ce83240 100755
    --- a/core/classes/tuple/tuple-docs.factor
    +++ b/core/classes/tuple/tuple-docs.factor
    @@ -341,6 +341,7 @@ HELP: new
     { $examples
         { $example
             "USING: kernel prettyprint ;"
    +        "IN: scratchpad"
             "TUPLE: employee number name department ;"
             "employee new ."
             "T{ employee f f f f }"
    diff --git a/core/classes/tuple/tuple-tests.factor b/core/classes/tuple/tuple-tests.factor
    index 2932187152..41776c4eec 100755
    --- a/core/classes/tuple/tuple-tests.factor
    +++ b/core/classes/tuple/tuple-tests.factor
    @@ -4,7 +4,7 @@ namespaces quotations sequences.private classes continuations
     generic.standard effects classes.tuple classes.tuple.private
     arrays vectors strings compiler.units accessors classes.algebra
     calendar prettyprint io.streams.string splitting inspector
    -columns ;
    +columns math.order ;
     IN: classes.tuple.tests
     
     TUPLE: rect x y w h ;
    @@ -88,7 +88,7 @@ C:  empty
     [ t length ] [ object>> t eq? ] must-fail-with
     
     [ "" ]
    -[ "TUPLE: constructor-test ; C:  constructor-test" eval word word-name ] unit-test
    +[ "IN: classes.tuple.test TUPLE: constructor-test ; C:  constructor-test" eval word word-name ] unit-test
     
     TUPLE: size-test a b c d ;
     
    diff --git a/core/dlists/dlists-tests.factor b/core/dlists/dlists-tests.factor
    index b0fe2a1157..3bf324664f 100755
    --- a/core/dlists/dlists-tests.factor
    +++ b/core/dlists/dlists-tests.factor
    @@ -79,7 +79,7 @@ IN: dlists.tests
             [ dlist-push-all ] keep
             [ dlist-delete-all ] keep
             dlist>array
    -    ] 2keep diff assert-same-elements
    +    ] 2keep swap diff assert-same-elements
     ] unit-test
     
     [ ] [
    diff --git a/core/generator/registers/registers.factor b/core/generator/registers/registers.factor
    index 4753f18c9a..e0fd7bd457 100755
    --- a/core/generator/registers/registers.factor
    +++ b/core/generator/registers/registers.factor
    @@ -372,7 +372,7 @@ M: value (lazy-load)
     : (compute-free-vregs) ( used class -- vector )
         #! Find all vregs in 'class' which are not in 'used'.
         [ vregs length reverse ] keep
    -    [  ] curry map diff
    +    [  ] curry map swap diff
         >vector ;
     
     : compute-free-vregs ( -- )
    diff --git a/core/generic/standard/engines/predicate/predicate.factor b/core/generic/standard/engines/predicate/predicate.factor
    index 5335074dea..e4643b2f3d 100644
    --- a/core/generic/standard/engines/predicate/predicate.factor
    +++ b/core/generic/standard/engines/predicate/predicate.factor
    @@ -17,8 +17,8 @@ C:  predicate-dispatch-engine
         {
             { [ dup empty? ] [ drop [ "Unreachable" throw ] { } ] }
             { [ dup length 1 = ] [ first second { } ] }
    -        { [ dup keep-going? ] [ 1 tail-slice prune-redundant-predicates ] }
    -        [ [ first second ] [ 1 tail-slice ] bi ]
    +        { [ dup keep-going? ] [ rest-slice prune-redundant-predicates ] }
    +        [ [ first second ] [ rest-slice ] bi ]
         } cond ;
     
     : sort-methods ( assoc -- assoc' )
    diff --git a/core/heaps/heaps-tests.factor b/core/heaps/heaps-tests.factor
    index b22d8818c1..d55b547b8f 100755
    --- a/core/heaps/heaps-tests.factor
    +++ b/core/heaps/heaps-tests.factor
    @@ -3,7 +3,7 @@
     
     USING: arrays kernel math namespaces tools.test
     heaps heaps.private math.parser random assocs sequences sorting
    -accessors ;
    +accessors math.order ;
     IN: heaps.tests
     
     [  heap-pop ] must-fail
    diff --git a/core/inference/class/class-tests.factor b/core/inference/class/class-tests.factor
    index 0c4ff82798..e6ce2cfa0b 100755
    --- a/core/inference/class/class-tests.factor
    +++ b/core/inference/class/class-tests.factor
    @@ -5,7 +5,7 @@ sequences words inference.class quotations alien
     alien.c-types strings sbufs sequences.private
     slots.private combinators definitions compiler.units
     system layouts vectors optimizer.math.partial accessors
    -optimizer.inlining ;
    +optimizer.inlining math.order ;
     
     [ t ] [ T{ literal-constraint f 1 2 } T{ literal-constraint f 1 2 } equal? ] unit-test
     
    diff --git a/core/io/files/files.factor b/core/io/files/files.factor
    index 7fa2080661..576307b589 100755
    --- a/core/io/files/files.factor
    +++ b/core/io/files/files.factor
    @@ -92,7 +92,7 @@ ERROR: no-parent-directory path ;
     : append-path-empty ( path1 path2 -- path' )
         {
             { [ dup head.? ] [
    -            1 tail left-trim-separators append-path-empty
    +            rest left-trim-separators append-path-empty
             ] }
             { [ dup head..? ] [ drop no-parent-directory ] }
             [ nip ]
    @@ -122,7 +122,7 @@ PRIVATE>
             { [ over empty? ] [ append-path-empty ] }
             { [ dup empty? ] [ drop ] }
             { [ dup absolute-path? ] [ nip ] }
    -        { [ dup head.? ] [ 1 tail left-trim-separators append-path ] }
    +        { [ dup head.? ] [ rest left-trim-separators append-path ] }
             { [ dup head..? ] [
                 2 tail left-trim-separators
                 >r parent-directory r> append-path
    diff --git a/core/mirrors/mirrors-docs.factor b/core/mirrors/mirrors-docs.factor
    index e3ebfefa5f..60de841568 100755
    --- a/core/mirrors/mirrors-docs.factor
    +++ b/core/mirrors/mirrors-docs.factor
    @@ -30,6 +30,7 @@ HELP: 
     { $examples
         { $example
             "USING: assocs mirrors prettyprint ;"
    +        "IN: scratchpad"
             "TUPLE: circle center radius ;"
             "C:  circle"
             "{ 100 50 } 15   >alist ."
    diff --git a/core/namespaces/namespaces-docs.factor b/core/namespaces/namespaces-docs.factor
    index 971477cd4d..1da3bc45db 100755
    --- a/core/namespaces/namespaces-docs.factor
    +++ b/core/namespaces/namespaces-docs.factor
    @@ -87,7 +87,7 @@ HELP: +@
     { $description "Adds " { $snippet "n" } " to the value of the variable. A variable value of " { $link f } " is interpreted as being zero." }
     { $side-effects "variable" }
     { $examples
    -    { $example "USING: namespaces prettyprint ;" "SYMBOL: foo\n1 foo +@\n10 foo +@\nfoo get ." "11" }
    +    { $example "USING: namespaces prettyprint ;" "IN: scratchpad" "SYMBOL: foo\n1 foo +@\n10 foo +@\nfoo get ." "11" }
     } ;
     
     HELP: inc
    diff --git a/core/namespaces/namespaces-tests.factor b/core/namespaces/namespaces-tests.factor
    index 8dc065c04a..4c11e2389f 100644
    --- a/core/namespaces/namespaces-tests.factor
    +++ b/core/namespaces/namespaces-tests.factor
    @@ -1,5 +1,5 @@
    -IN: namespaces.tests
     USING: kernel namespaces tools.test words ;
    +IN: namespaces.tests
     
     H{ } clone "test-namespace" set
     
    diff --git a/core/parser/parser.factor b/core/parser/parser.factor
    index 1cfe6d63d9..3f42980cf2 100755
    --- a/core/parser/parser.factor
    +++ b/core/parser/parser.factor
    @@ -132,7 +132,7 @@ name>char-hook global [
         "{" ?head-slice [
             CHAR: } over index cut-slice
             >r >string name>char-hook get call r>
    -        1 tail-slice
    +        rest-slice
         ] [
             6 cut-slice >r hex> r>
         ] if ;
    @@ -146,7 +146,7 @@ name>char-hook global [
     
     : (parse-string) ( str -- m )
         dup [ "\"\\" member? ] find dup [
    -        >r cut-slice >r % r> 1 tail-slice r>
    +        >r cut-slice >r % r> rest-slice r>
             dup CHAR: " = [
                 drop slice-from
             ] [
    @@ -513,7 +513,7 @@ SYMBOL: interactive-vocabs
         ] if ;
     
     : filter-moved ( assoc1 assoc2 -- seq )
    -    assoc-diff [
    +    swap assoc-diff [
             drop where dup [ first ] when
             file get source-file-path =
         ] assoc-filter keys ;
    diff --git a/core/prettyprint/prettyprint-docs.factor b/core/prettyprint/prettyprint-docs.factor
    index 7cc141be22..2933c8ee6f 100755
    --- a/core/prettyprint/prettyprint-docs.factor
    +++ b/core/prettyprint/prettyprint-docs.factor
    @@ -242,8 +242,16 @@ HELP: definer
     { $values { "defspec" "a definition specifier" } { "start" word } { "end" "a word or " { $link f } } }
     { $contract "Outputs the parsing words which delimit the definition." }
     { $examples
    -    { $example "USING: definitions prettyprint ;" ": foo ; \\ foo definer . ." ";\nPOSTPONE: :" }
    -    { $example "USING: definitions prettyprint ;" "SYMBOL: foo \\ foo definer . ." "f\nPOSTPONE: SYMBOL:" }
    +    { $example "USING: definitions prettyprint ;"
    +               "IN: scratchpad"
    +               ": foo ; \\ foo definer . ."
    +               ";\nPOSTPONE: :"
    +    }
    +    { $example "USING: definitions prettyprint ;"
    +               "IN: scratchpad"
    +               "SYMBOL: foo \\ foo definer . ."
    +               "f\nPOSTPONE: SYMBOL:"
    +    }
     }
     { $notes "This word is used in the implementation of " { $link see } "." } ;
     
    diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor
    index 798a3ed1ed..a63e6d2835 100755
    --- a/core/sequences/sequences.factor
    +++ b/core/sequences/sequences.factor
    @@ -257,7 +257,7 @@ PRIVATE>
     
     : tail ( seq n -- tailseq ) (tail) subseq ;
     
    -: rest ( seq -- seq' ) 1 tail ;
    +: rest ( seq -- tailseq ) 1 tail ;
     
     : head* ( seq n -- headseq ) from-end head ;
     
    diff --git a/core/sets/sets-docs.factor b/core/sets/sets-docs.factor
    index 8b6859260d..55ef3ccddd 100644
    --- a/core/sets/sets-docs.factor
    +++ b/core/sets/sets-docs.factor
    @@ -39,9 +39,9 @@ HELP: all-unique?
     
     HELP: diff
     { $values { "seq1" sequence } { "seq2" sequence } { "newseq" sequence } }
    -{ $description "Outputs a sequence consisting of elements present in " { $snippet "seq2" } " but not " { $snippet "seq1" } ", comparing elements for equality." 
    +{ $description "Outputs a sequence consisting of elements present in " { $snippet "seq1" } " but not " { $snippet "seq2" } ", comparing elements for equality." 
     } { $examples
    -    { $example "USING: sets prettyprint ;" "{ 1 2 3 } { 2 3 4 } diff ." "{ 4 }" }
    +    { $example "USING: sets prettyprint ;" "{ 1 2 3 } { 2 3 4 } diff ." "{ 1 }" }
     } ;
     
     HELP: intersect
    diff --git a/core/sets/sets-tests.factor b/core/sets/sets-tests.factor
    index 4f8c8cd103..86ee100da5 100644
    --- a/core/sets/sets-tests.factor
    +++ b/core/sets/sets-tests.factor
    @@ -11,7 +11,7 @@ IN: sets.tests
     [ { 2 3 } ] [ { 1 2 3 } { 2 3 4 } intersect ] unit-test
     
     [ { } ] [ { } { } diff ] unit-test
    -[ { 4 } ] [ { 1 2 3 } { 2 3 4 } diff ] unit-test
    +[ { 1 } ] [ { 1 2 3 } { 2 3 4 } diff ] unit-test
     
     [ V{ } ] [ { } { } union ] unit-test
     [ V{ 1 2 3 4 } ] [ { 1 2 3 } { 2 3 4 } union ] unit-test
    diff --git a/core/sets/sets.factor b/core/sets/sets.factor
    index 71a7d77903..78a92155fc 100644
    --- a/core/sets/sets.factor
    +++ b/core/sets/sets.factor
    @@ -25,7 +25,7 @@ IN: sets
         unique [ key? ] curry filter ;
     
     : diff ( seq1 seq2 -- newseq )
    -    swap unique [ key? not ] curry filter ;
    +    unique [ key? not ] curry filter ;
     
     : union ( seq1 seq2 -- newseq )
         append prune ;
    diff --git a/core/sorting/sorting-tests.factor b/core/sorting/sorting-tests.factor
    index 732aeb045d..441867af66 100755
    --- a/core/sorting/sorting-tests.factor
    +++ b/core/sorting/sorting-tests.factor
    @@ -1,5 +1,5 @@
    -USING: sorting sequences kernel math random tools.test
    -vectors ;
    +USING: sorting sequences kernel math math.order random
    +tools.test vectors ;
     IN: sorting.tests
     
     [ [ ] ] [ [ ] natural-sort ] unit-test
    diff --git a/core/strings/strings-tests.factor b/core/strings/strings-tests.factor
    index 028759c9f9..6d01e19585 100755
    --- a/core/strings/strings-tests.factor
    +++ b/core/strings/strings-tests.factor
    @@ -1,4 +1,4 @@
    -USING: continuations kernel math namespaces strings
    +USING: continuations kernel math math.order namespaces strings
     strings.private sbufs tools.test sequences vectors arrays memory
     prettyprint io.streams.null ;
     IN: strings.tests
    diff --git a/core/syntax/syntax-docs.factor b/core/syntax/syntax-docs.factor
    index a2d15d2981..b72ed9a2cb 100755
    --- a/core/syntax/syntax-docs.factor
    +++ b/core/syntax/syntax-docs.factor
    @@ -190,7 +190,7 @@ HELP: delimiter
     HELP: parsing
     { $syntax ": foo ... ; parsing" }
     { $description "Declares the most recently defined word as a parsing word." }
    -{ $examples "In the below example, the " { $snippet "world" } " word is never called, however its body references a parsing word which executes immediately:" { $example "USE: io" "<< : hello \"Hello parser!\" print ; parsing >>\n: world hello ;" "Hello parser!" } } ;
    +{ $examples "In the below example, the " { $snippet "world" } " word is never called, however its body references a parsing word which executes immediately:" { $example "USE: io" "IN: scratchpad" "<< : hello \"Hello parser!\" print ; parsing >>\n: world hello ;" "Hello parser!" } } ;
     
     HELP: inline
     { $syntax ": foo ... ; inline" }
    @@ -338,7 +338,7 @@ HELP: SYMBOL:
     { $syntax "SYMBOL: word" }
     { $values { "word" "a new word to define" } }
     { $description "Defines a new symbol word in the current vocabulary. Symbols push themselves on the stack when executed, and are used to identify variables (see " { $link "namespaces" } ") as well as for storing crufties in word properties (see " { $link "word-props" } ")." }
    -{ $examples { $example "USE: prettyprint" "SYMBOL: foo\nfoo ." "foo" } } ;
    +{ $examples { $example "USE: prettyprint" "IN: scratchpad" "SYMBOL: foo\nfoo ." "foo" } } ;
     
     { define-symbol POSTPONE: SYMBOL: } related-words
     
    @@ -472,6 +472,7 @@ HELP: HOOK:
     { $examples
         { $example
             "USING: io namespaces ;"
    +        "IN: scratchpad"
             "SYMBOL: transport"
             "TUPLE: land-transport ;"
             "TUPLE: air-transport ;"
    diff --git a/core/words/words-docs.factor b/core/words/words-docs.factor
    index f259378f7e..07df0ba4e3 100755
    --- a/core/words/words-docs.factor
    +++ b/core/words/words-docs.factor
    @@ -197,7 +197,7 @@ HELP: execute ( word -- )
     { $values { "word" word } }
     { $description "Executes a word." }
     { $examples
    -    { $example "USING: kernel io words ;" ": twice dup execute execute ;\n: hello \"Hello\" print ;\n\\ hello twice" "Hello\nHello" }
    +    { $example "USING: kernel io words ;" "IN: scratchpad" ": twice dup execute execute ;\n: hello \"Hello\" print ;\n\\ hello twice" "Hello\nHello" }
     } ;
     
     HELP: word-props ( word -- props )
    
    From 4d0ba8c3c1c0739303ecb87de52a9cd348253f1d Mon Sep 17 00:00:00 2001
    From: Doug Coleman 
    Date: Sat, 26 Apr 2008 02:01:43 -0500
    Subject: [PATCH 083/270] reverse args for assoc-diff, diff fix lots of usings
     fix help lint
    
    ---
     extra/bunny/model/model.factor                |  2 +-
     extra/calendar/calendar-tests.factor          |  2 +-
     extra/classes/tuple/lib/lib-docs.factor       |  2 ++
     extra/classes/tuple/lib/lib.factor            |  2 +-
     extra/cpu/8080/emulator/emulator.factor       |  2 +-
     extra/crypto/sha1/sha1.factor                 |  2 +-
     extra/delegate/delegate.factor                |  2 +-
     extra/faq/faq.factor                          |  2 +-
     extra/help/crossref/crossref.factor           |  2 +-
     extra/help/lint/lint.factor                   |  6 ++--
     extra/help/markup/markup.factor               |  2 +-
     extra/html/parser/analyzer/analyzer.factor    |  2 +-
     extra/html/parser/utils/utils.factor          |  2 +-
     extra/http/client/client.factor               |  2 +-
     extra/http/server/server.factor               |  2 +-
     extra/inverse/inverse.factor                  |  4 +--
     extra/irc/irc.factor                          |  4 +--
     extra/jamshred/tunnel/tunnel.factor           |  2 +-
     extra/koszul/koszul.factor                    |  2 +-
     extra/locals/locals-docs.factor               |  4 +++
     extra/locals/locals.factor                    |  2 +-
     extra/logging/analysis/analysis.factor        |  2 +-
     extra/logging/server/server.factor            |  2 +-
     extra/match/match-docs.factor                 |  1 +
     extra/match/match.factor                      |  4 +--
     extra/math/matrices/matrices.factor           |  2 +-
     extra/math/polynomials/polynomials.factor     |  2 +-
     extra/memoize/memoize-tests.factor            |  2 +-
     extra/multiline/multiline.factor              |  2 +-
     extra/opengl/capabilities/capabilities.factor |  4 +--
     extra/opengl/demo-support/demo-support.factor |  5 +--
     extra/optimizer/debugger/debugger.factor      |  2 +-
     .../parser-combinators.factor                 |  2 +-
     extra/peg/parsers/parsers.factor              |  2 +-
     extra/peg/peg.factor                          |  2 +-
     extra/project-euler/023/023.factor            |  5 +--
     extra/project-euler/035/035.factor            |  2 +-
     extra/project-euler/043/043.factor            |  2 +-
     extra/project-euler/079/079.factor            |  4 +--
     extra/project-euler/common/common.factor      |  6 ++--
     extra/qualified/qualified.factor              |  2 +-
     extra/random-weighted/random-weighted.factor  |  2 +-
     .../mersenne-twister-tests.factor             |  2 +-
     extra/sequences/lib/lib.factor                |  4 +--
     extra/serialize/serialize.factor              |  2 +-
     extra/shufflers/authors.txt                   |  1 -
     extra/shufflers/shufflers-docs.factor         | 13 -------
     extra/shufflers/shufflers-tests.factor        |  8 -----
     extra/shufflers/shufflers.factor              | 36 -------------------
     extra/shufflers/summary.txt                   |  1 -
     extra/shufflers/tags.txt                      |  1 -
     extra/symbols/symbols-docs.factor             |  2 +-
     extra/tools/deploy/shaker/shaker.factor       |  2 +-
     extra/tools/vocabs/vocabs.factor              |  2 +-
     extra/ui/commands/commands-docs.factor        |  2 ++
     extra/ui/commands/commands.factor             |  2 +-
     extra/ui/traverse/traverse.factor             |  2 +-
     extra/unicode/data/data.factor                |  2 +-
     extra/xml/tokenize/tokenize.factor            |  2 +-
     extra/xml/xml.factor                          |  4 +--
     60 files changed, 74 insertions(+), 123 deletions(-)
     delete mode 100644 extra/shufflers/authors.txt
     delete mode 100644 extra/shufflers/shufflers-docs.factor
     delete mode 100644 extra/shufflers/shufflers-tests.factor
     delete mode 100644 extra/shufflers/shufflers.factor
     delete mode 100644 extra/shufflers/summary.txt
     delete mode 100644 extra/shufflers/tags.txt
    
    diff --git a/extra/bunny/model/model.factor b/extra/bunny/model/model.factor
    index 2af7a17560..8d05b14a20 100755
    --- a/extra/bunny/model/model.factor
    +++ b/extra/bunny/model/model.factor
    @@ -12,7 +12,7 @@ IN: bunny.model
         readln [
             numbers {
                 { [ dup length 5 = ] [ 3 head pick push ] }
    -            { [ dup first 3 = ] [ 1 tail over push ] }
    +            { [ dup first 3 = ] [ rest over push ] }
                 [ drop ]
             } cond (parse-model)
         ] when* ;
    diff --git a/extra/calendar/calendar-tests.factor b/extra/calendar/calendar-tests.factor
    index c05d4f60eb..d4cddb6081 100755
    --- a/extra/calendar/calendar-tests.factor
    +++ b/extra/calendar/calendar-tests.factor
    @@ -1,5 +1,5 @@
     USING: arrays calendar kernel math sequences tools.test
    -continuations system ;
    +continuations system math.order ;
     IN: calendar.tests
     
     \ time+ must-infer
    diff --git a/extra/classes/tuple/lib/lib-docs.factor b/extra/classes/tuple/lib/lib-docs.factor
    index 34dd181d3b..0c4c11e46f 100644
    --- a/extra/classes/tuple/lib/lib-docs.factor
    +++ b/extra/classes/tuple/lib/lib-docs.factor
    @@ -6,6 +6,7 @@ HELP: >tuple<
     { $description "Explodes the tuple so that tuple slots are on the stack in the order listed in the tuple." }
     { $example
         "USING: kernel prettyprint classes.tuple.lib ;"
    +    "IN: scratchpad"
         "TUPLE: foo a b c ;"
         "1 2 3 \\ foo boa \\ foo >tuple< .s"
         "1\n2\n3"
    @@ -18,6 +19,7 @@ HELP: >tuple*<
     { $description "Explodes the tuple so that tuple slots ending with '*' are on the stack in the order listed in the tuple." }
     { $example
         "USING: kernel prettyprint classes.tuple.lib ;"
    +    "IN: scratchpad"
         "TUPLE: foo a bb* ccc dddd* ;"
         "1 2 3 4 \\ foo boa \\ foo >tuple*< .s"
         "2\n4"
    diff --git a/extra/classes/tuple/lib/lib.factor b/extra/classes/tuple/lib/lib.factor
    index d48addecc3..10261a1df7 100755
    --- a/extra/classes/tuple/lib/lib.factor
    +++ b/extra/classes/tuple/lib/lib.factor
    @@ -7,7 +7,7 @@ IN: classes.tuple.lib
         [ slot-spec-reader ] map [ get-slots ] curry ;
     
     MACRO: >tuple< ( class -- )
    -    all-slots 1 tail-slice reader-slots ;
    +    all-slots rest-slice reader-slots ;
     
     MACRO: >tuple*< ( class -- )
         all-slots
    diff --git a/extra/cpu/8080/emulator/emulator.factor b/extra/cpu/8080/emulator/emulator.factor
    index ecc998e99c..f1af0ef15e 100755
    --- a/extra/cpu/8080/emulator/emulator.factor
    +++ b/extra/cpu/8080/emulator/emulator.factor
    @@ -573,7 +573,7 @@ SYMBOL: $4
       #! $1, $2, etc with the relevant item from the 
       #! given index.
       dup quotation? over [ ] = not and [ ! vector tree
    -    dup first swap 1 tail ! vector car cdr
    +    dup first swap rest ! vector car cdr
         >r dupd replace-patterns ! vector v R: cdr
         swap r> replace-patterns >r 1quotation r> append
       ] [ ! vector value
    diff --git a/extra/crypto/sha1/sha1.factor b/extra/crypto/sha1/sha1.factor
    index 37e92db60f..3a74d1f5db 100755
    --- a/extra/crypto/sha1/sha1.factor
    +++ b/extra/crypto/sha1/sha1.factor
    @@ -123,6 +123,6 @@ SYMBOLS: h0 h1 h2 h3 h4 A B C D E w K ;
     
     : byte-array>sha1-interleave ( string -- seq )
         [ zero? ] left-trim
    -    dup length odd? [ 1 tail ] when
    +    dup length odd? [ rest ] when
         seq>2seq [ byte-array>sha1 ] bi@
         2seq>seq ;
    diff --git a/extra/delegate/delegate.factor b/extra/delegate/delegate.factor
    index 506d7175b6..0ae8592e66 100755
    --- a/extra/delegate/delegate.factor
    +++ b/extra/delegate/delegate.factor
    @@ -23,7 +23,7 @@ IN: delegate
     
     : forget-old-definitions ( protocol new-wordlist -- )
         >r users-and-words r>
    -    diff forget-all-methods ;
    +    swap diff forget-all-methods ;
     
     : define-protocol ( protocol wordlist -- )
         ! 2dup forget-old-definitions
    diff --git a/extra/faq/faq.factor b/extra/faq/faq.factor
    index 8c1a0e034c..3cb17cf08b 100644
    --- a/extra/faq/faq.factor
    +++ b/extra/faq/faq.factor
    @@ -85,7 +85,7 @@ C:  faq
     : toc, ( faq -- )
         "div" { { "style" "background-color: #eee; margin-left: 30%; margin-right: 30%; width: auto; padding: 5px; margin-top: 1em; margin-bottom: 1em" } } [
             "strong" [ "The big questions" , ] tag, br,
    -        faq-lists 1 tail dup length [ toc-link, ] 2each
    +        faq-lists rest dup length [ toc-link, ] 2each
         ] tag*, ;
     
     : faq-sections, ( question-lists -- )
    diff --git a/extra/help/crossref/crossref.factor b/extra/help/crossref/crossref.factor
    index 0b17461a99..54ede93aa1 100644
    --- a/extra/help/crossref/crossref.factor
    +++ b/extra/help/crossref/crossref.factor
    @@ -14,7 +14,7 @@ M: link uses
         collect-elements [ \ f or ] map ;
     
     : help-path ( topic -- seq )
    -    [ article-parent ] follow 1 tail ;
    +    [ article-parent ] follow rest ;
     
     : set-article-parents ( parent article -- )
         article-children [ set-article-parent ] with each ;
    diff --git a/extra/help/lint/lint.factor b/extra/help/lint/lint.factor
    index 99c1798314..fc4b7f6f25 100755
    --- a/extra/help/lint/lint.factor
    +++ b/extra/help/lint/lint.factor
    @@ -9,7 +9,7 @@ macros combinators.lib sequences.lib math sets ;
     IN: help.lint
     
     : check-example ( element -- )
    -    1 tail [
    +    rest [
             1 head* "\n" join 1vector
             [
                 use [ clone ] change
    @@ -23,7 +23,7 @@ IN: help.lint
     
     : extract-values ( element -- seq )
         \ $values swap elements dup empty? [
    -        first 1 tail [ first ] map prune natural-sort
    +        first rest [ first ] map prune natural-sort
         ] unless ;
     
     : effect-values ( word -- seq )
    @@ -59,7 +59,7 @@ IN: help.lint
     
     : check-see-also ( word element -- )
         nip \ $see-also swap elements [
    -        1 tail dup prune [ length ] bi@ assert=
    +        rest dup prune [ length ] bi@ assert=
         ] each ;
     
     : vocab-exists? ( name -- ? )
    diff --git a/extra/help/markup/markup.factor b/extra/help/markup/markup.factor
    index 2e2b34ebfd..378dd1e2fe 100755
    --- a/extra/help/markup/markup.factor
    +++ b/extra/help/markup/markup.factor
    @@ -311,7 +311,7 @@ M: array elements*
         [
             swap [
                 elements [
    -                1 tail [ dup set ] each
    +                rest [ dup set ] each
                 ] each
             ] curry each
         ] H{ } make-assoc keys ;
    diff --git a/extra/html/parser/analyzer/analyzer.factor b/extra/html/parser/analyzer/analyzer.factor
    index afe83d180a..160b95ab1d 100755
    --- a/extra/html/parser/analyzer/analyzer.factor
    +++ b/extra/html/parser/analyzer/analyzer.factor
    @@ -99,7 +99,7 @@ IN: html.parser.analyzer
         
     : find-between ( i/f tag/f vector -- vector )
         find-between* dup length 3 >= [
    -        [ 1 tail-slice 1 head-slice* ] keep like
    +        [ rest-slice 1 head-slice* ] keep like
         ] when ;
     
     : find-between-first ( string vector -- vector' )
    diff --git a/extra/html/parser/utils/utils.factor b/extra/html/parser/utils/utils.factor
    index b574799b38..0ae75e41fd 100644
    --- a/extra/html/parser/utils/utils.factor
    +++ b/extra/html/parser/utils/utils.factor
    @@ -36,7 +36,7 @@ IN: html.parser.utils
         dup quoted? [ quote ] unless ;
     
     : unquote ( str -- newstr )
    -    dup quoted? [ 1 head-slice* 1 tail-slice >string ] when ;
    +    dup quoted? [ 1 head-slice* rest-slice >string ] when ;
     
     : quote? ( ch -- ? ) "'\"" member? ;
     
    diff --git a/extra/http/client/client.factor b/extra/http/client/client.factor
    index cc356ca8e3..7762b01843 100755
    --- a/extra/http/client/client.factor
    +++ b/extra/http/client/client.factor
    @@ -2,7 +2,7 @@
     ! See http://factorcode.org/license.txt for BSD license.
     USING: assocs http kernel math math.parser namespaces sequences
     io io.sockets io.streams.string io.files io.timeouts strings
    -splitting calendar continuations accessors vectors
    +splitting calendar continuations accessors vectors math.order
     io.encodings.8-bit io.encodings.binary fry debugger inspector ;
     IN: http.client
     
    diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor
    index 848d878c5b..7c88a608e5 100755
    --- a/extra/http/server/server.factor
    +++ b/extra/http/server/server.factor
    @@ -149,7 +149,7 @@ TUPLE: dispatcher default responders ;
             [ nip ] [ drop default>> ] if
         ] [
             over first over responders>> at*
    -        [ >r drop 1 tail-slice r> ] [ drop default>> ] if
    +        [ >r drop rest-slice r> ] [ drop default>> ] if
         ] if ;
     
     M: dispatcher call-responder ( path dispatcher -- response )
    diff --git a/extra/inverse/inverse.factor b/extra/inverse/inverse.factor
    index 7a2856e311..265675f8df 100755
    --- a/extra/inverse/inverse.factor
    +++ b/extra/inverse/inverse.factor
    @@ -204,7 +204,7 @@ DEFER: _
         "predicate" word-prop [ dupd call assure ] curry ;
     
     : slot-readers ( class -- quot )
    -    all-slots 1 tail ! tail gets rid of delegate
    +    all-slots rest ! tail gets rid of delegate
         [ slot-spec-reader 1quotation [ keep ] curry ] map concat
         [ ] like [ drop ] compose ;
     
    @@ -218,7 +218,7 @@ DEFER: _
     
     : empty-inverse ( class -- quot )
         deconstruct-pred
    -    [ tuple>array 1 tail [ ] contains? [ fail ] when ]
    +    [ tuple>array rest [ ] contains? [ fail ] when ]
         compose ;
     
     \ new 1 [ ?wrapped empty-inverse ] define-pop-inverse
    diff --git a/extra/irc/irc.factor b/extra/irc/irc.factor
    index 4dda206c7b..1db17278ad 100755
    --- a/extra/irc/irc.factor
    +++ b/extra/irc/irc.factor
    @@ -9,7 +9,7 @@ IN: irc
     ! utils
     : split-at-first ( seq separators -- before after )
         dupd '[ , member? ] find
    -        [ cut 1 tail ]
    +        [ cut rest ]
             [ swap ]
         if ;
     
    @@ -101,7 +101,7 @@ SYMBOL: irc-client
     : irc-client> ( -- irc-client ) irc-client get ;
     : irc-stream> ( -- stream ) irc-client> stream>> ;
     
    -: remove-heading-: ( seq -- seq ) dup ":" head? [ 1 tail ] when ;
    +: remove-heading-: ( seq -- seq ) dup ":" head? [ rest ] when ;
     
     : parse-name ( string -- string )
         remove-heading-: "!" split-at-first drop ;
    diff --git a/extra/jamshred/tunnel/tunnel.factor b/extra/jamshred/tunnel/tunnel.factor
    index d5ee7f3ebc..c3f6b37fb8 100755
    --- a/extra/jamshred/tunnel/tunnel.factor
    +++ b/extra/jamshred/tunnel/tunnel.factor
    @@ -84,7 +84,7 @@ TUPLE: segment number color radius ;
         pick >r nearer-segment dup r> = ;
     
     : find-nearest-segment ( oint segments -- segment )
    -    dup first swap 1 tail-slice rot [ (find-nearest-segment) ] curry
    +    dup first swap rest-slice rot [ (find-nearest-segment) ] curry
         find 2drop ;
         
     : nearest-segment-forward ( segments oint start -- segment )
    diff --git a/extra/koszul/koszul.factor b/extra/koszul/koszul.factor
    index 7e24d873a2..b4a0934e41 100755
    --- a/extra/koszul/koszul.factor
    +++ b/extra/koszul/koszul.factor
    @@ -203,7 +203,7 @@ DEFER: (d)
         [ basis graded ] bi@ tensor bigraded-ker/im-d
         [ [ [ first ] map ] map ] keep
         [ [ second ] map 2 head* { 0 0 } prepend ] map
    -    1 tail dup first length 0  suffix
    +    rest dup first length 0  suffix
         [ v- ] 2map ;
     
     ! Laplacian
    diff --git a/extra/locals/locals-docs.factor b/extra/locals/locals-docs.factor
    index 372a567550..cac27d5296 100644
    --- a/extra/locals/locals-docs.factor
    +++ b/extra/locals/locals-docs.factor
    @@ -16,6 +16,7 @@ HELP: [|
     { $examples
         { $example
             "USING: kernel locals math prettyprint ;"
    +        "IN: scratchpad"
             ":: adder ( n -- quot ) [| m | m n + ] ;"
             "3 5 adder call ."
             "8"
    @@ -29,6 +30,7 @@ HELP: [let
     { $examples
         { $example
             "USING: kernel locals math math.functions prettyprint sequences ;"
    +        "IN: scratchpad"
             ":: frobnicate ( n seq -- newseq )"
             "    [let | n' [ n 6 * ] |"
             "        seq [ n' gcd nip ] map ] ;"
    @@ -44,6 +46,7 @@ HELP: [let*
     { $examples
         { $example
             "USING: kernel locals math math.functions prettyprint sequences ;"
    +        "IN: scratchpad"
             ":: frobnicate ( n seq -- newseq )"
             "    [let* | a [ n 3 + ]"
             "            b [ a 4 * ] |"
    @@ -62,6 +65,7 @@ HELP: [wlet
     { $examples
         { $example
             "USING: locals math prettyprint sequences ;"
    +        "IN: scratchpad"
             ":: quuxify ( n seq -- newseq )"
             "    [wlet | add-n [| m | m n + ] |"
             "        seq [ add-n ] map ] ;"
    diff --git a/extra/locals/locals.factor b/extra/locals/locals.factor
    index be73f1db88..9b5640f3d8 100755
    --- a/extra/locals/locals.factor
    +++ b/extra/locals/locals.factor
    @@ -130,7 +130,7 @@ M: object free-vars* drop ;
     M: quotation free-vars* [ add-if-free ] each ;
     
     M: lambda free-vars*
    -    [ vars>> ] [ body>> ] bi free-vars diff % ;
    +    [ vars>> ] [ body>> ] bi free-vars swap diff % ;
     
     GENERIC: lambda-rewrite* ( obj -- )
     
    diff --git a/extra/logging/analysis/analysis.factor b/extra/logging/analysis/analysis.factor
    index e2c77377ac..cd1429ac53 100755
    --- a/extra/logging/analysis/analysis.factor
    +++ b/extra/logging/analysis/analysis.factor
    @@ -14,7 +14,7 @@ SYMBOL: message-histogram
         dup second CRITICAL eq? [ dup errors get push ] when
         1 over third word-histogram get at+
         dup third word-names get member? [
    -        1 over 1 tail message-histogram get at+
    +        1 over rest message-histogram get at+
         ] when
         drop ;
     
    diff --git a/extra/logging/server/server.factor b/extra/logging/server/server.factor
    index 9da2bec927..7601d1cc2e 100755
    --- a/extra/logging/server/server.factor
    +++ b/extra/logging/server/server.factor
    @@ -42,7 +42,7 @@ SYMBOL: log-files
             { [ dup length 1 = ] [ first -rot f (write-message) ] }
             [
                 [ first -rot f (write-message) ] 3keep
    -            1 tail -rot [ t (write-message) ] 2curry each
    +            rest -rot [ t (write-message) ] 2curry each
             ]
         } cond ;
     
    diff --git a/extra/match/match-docs.factor b/extra/match/match-docs.factor
    index 4ac59bb0cc..2e23721e93 100644
    --- a/extra/match/match-docs.factor
    +++ b/extra/match/match-docs.factor
    @@ -42,6 +42,7 @@ HELP: match-replace
     { $examples
       { $example
           "USING: match prettyprint ;"
    +      "IN: scratchpad"
           "MATCH-VARS: ?a ?b ;"
           "{ 1 2 } { ?a ?b } { ?b ?a } match-replace ." 
           "{ 2 1 }"
    diff --git a/extra/match/match.factor b/extra/match/match.factor
    index e559ebc60d..c5a063ab98 100755
    --- a/extra/match/match.factor
    +++ b/extra/match/match.factor
    @@ -67,13 +67,13 @@ MACRO: match-cond ( assoc -- )
         [ replace-patterns ] bind ;
     
     : ?1-tail ( seq -- tail/f )
    -    dup length zero? not [ 1 tail ] [ drop f ] if ;
    +    dup length zero? not [ rest ] [ drop f ] if ;
     
     : (match-first) ( seq pattern-seq -- bindings leftover/f )
         2dup [ length ] bi@ < [ 2drop f f ]
         [
             2dup length head over match
    -        [ nip swap ?1-tail ] [ >r 1 tail r> (match-first) ] if*
    +        [ nip swap ?1-tail ] [ >r rest r> (match-first) ] if*
         ] if ;
         
     : match-first ( seq pattern-seq -- bindings )
    diff --git a/extra/math/matrices/matrices.factor b/extra/math/matrices/matrices.factor
    index 327bf76552..294cd6278a 100755
    --- a/extra/math/matrices/matrices.factor
    +++ b/extra/math/matrices/matrices.factor
    @@ -1,7 +1,7 @@
     ! Copyright (C) 2005, 2008 Slava Pestov.
     ! See http://factorcode.org/license.txt for BSD license.
     USING: arrays kernel sequences math math.functions
    -math.vectors ;
    +math.vectors math.order ;
     IN: math.matrices
     
     ! Matrices
    diff --git a/extra/math/polynomials/polynomials.factor b/extra/math/polynomials/polynomials.factor
    index 0b0d3520ef..c66f0c3fe3 100644
    --- a/extra/math/polynomials/polynomials.factor
    +++ b/extra/math/polynomials/polynomials.factor
    @@ -58,7 +58,7 @@ PRIVATE>
         2dup /-last
         2dup , n*p swapd
         p- >vector
    -    dup pop* swap 1 tail-slice ;
    +    dup pop* swap rest-slice ;
     
     PRIVATE>
     
    diff --git a/extra/memoize/memoize-tests.factor b/extra/memoize/memoize-tests.factor
    index 3ce0abd7d9..43428efbe0 100644
    --- a/extra/memoize/memoize-tests.factor
    +++ b/extra/memoize/memoize-tests.factor
    @@ -8,4 +8,4 @@ MEMO: fib ( m -- n )
     
     [ 89 ] [ 10 fib ] unit-test
     
    -[ "USING: kernel math memoize ; MEMO: x ( a b c d e -- f g h i j ) >r >r >r >r 1+ r> r> r> r> ;" eval ] must-fail
    +[ "USING: kernel math memoize ; IN: memoize.tests MEMO: x ( a b c d e -- f g h i j ) >r >r >r >r 1+ r> r> r> r> ;" eval ] must-fail
    diff --git a/extra/multiline/multiline.factor b/extra/multiline/multiline.factor
    index 079f484274..e140c5227c 100755
    --- a/extra/multiline/multiline.factor
    +++ b/extra/multiline/multiline.factor
    @@ -34,7 +34,7 @@ IN: multiline
         [
             lexer get lexer-column swap (parse-multiline-string)
             lexer get set-lexer-column
    -    ] "" make 1 tail 1 head* ;
    +    ] "" make rest 1 head* ;
     
     : <"
         "\">" parse-multiline-string parsed ; parsing
    diff --git a/extra/opengl/capabilities/capabilities.factor b/extra/opengl/capabilities/capabilities.factor
    index 6802d15378..d658235cf6 100755
    --- a/extra/opengl/capabilities/capabilities.factor
    +++ b/extra/opengl/capabilities/capabilities.factor
    @@ -1,7 +1,7 @@
     ! Copyright (C) 2008 Joe Groff.
     ! See http://factorcode.org/license.txt for BSD license.
     USING: kernel namespaces sequences splitting opengl.gl
    -continuations math.parser math arrays sets ;
    +continuations math.parser math arrays sets math.order ;
     IN: opengl.capabilities
     
     : (require-gl) ( thing require-quot make-error-quot -- )
    @@ -15,7 +15,7 @@ IN: opengl.capabilities
     : has-gl-extensions? ( extensions -- ? )
         gl-extensions swap [ over member? ] all? nip ;
     : (make-gl-extensions-error) ( required-extensions -- )
    -    gl-extensions swap diff
    +    gl-extensions diff
         "Required OpenGL extensions not supported:\n" %
         [ "    " % % "\n" % ] each ;
     : require-gl-extensions ( extensions -- )
    diff --git a/extra/opengl/demo-support/demo-support.factor b/extra/opengl/demo-support/demo-support.factor
    index 84515305c8..460558db8b 100755
    --- a/extra/opengl/demo-support/demo-support.factor
    +++ b/extra/opengl/demo-support/demo-support.factor
    @@ -1,5 +1,6 @@
    -USING: arrays combinators.lib kernel math math.functions math.vectors namespaces
    -       opengl opengl.gl sequences ui ui.gadgets ui.gestures ui.render ;
    +USING: arrays combinators.lib kernel math math.functions
    +math.order math.vectors namespaces opengl opengl.gl sequences ui
    +ui.gadgets ui.gestures ui.render ;
     IN: opengl.demo-support
     
     : NEAR-PLANE 1.0 64.0 / ; inline
    diff --git a/extra/optimizer/debugger/debugger.factor b/extra/optimizer/debugger/debugger.factor
    index 3ae0c94b12..fa35534439 100755
    --- a/extra/optimizer/debugger/debugger.factor
    +++ b/extra/optimizer/debugger/debugger.factor
    @@ -38,7 +38,7 @@ M: comment pprint*
             " --" %
             " " over node-out-d values%
             " r: " swap node-out-r values%
    -    ] "" make 1 tail ;
    +    ] "" make rest ;
     
     MACRO: match-choose ( alist -- )
         [ [ ] curry ] assoc-map [ match-cond ] curry ;
    diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor
    index b710d9d481..9537a0c88c 100755
    --- a/extra/parser-combinators/parser-combinators.factor
    +++ b/extra/parser-combinators/parser-combinators.factor
    @@ -177,7 +177,7 @@ M: or-parser parse ( input parser1 -- list )
         #! Return a new string without any leading whitespace
         #! from the original string.
         dup empty? [
    -        dup first blank? [ 1 tail-slice left-trim-slice ] when
    +        dup first blank? [ rest-slice left-trim-slice ] when
         ] unless ;
     
     TUPLE: sp-parser p1 ;
    diff --git a/extra/peg/parsers/parsers.factor b/extra/peg/parsers/parsers.factor
    index da7f678f2d..784e6c064c 100755
    --- a/extra/peg/parsers/parsers.factor
    +++ b/extra/peg/parsers/parsers.factor
    @@ -107,7 +107,7 @@ MEMO: pack ( begin body end -- parser )
       #! range of characters from the first to the second,
       #! inclusive.
       dup first CHAR: ^ = [
    -    1 tail (range-pattern) [ member? not ] curry satisfy 
    +    rest (range-pattern) [ member? not ] curry satisfy 
       ] [
         (range-pattern) [ member? ] curry satisfy
       ] if ;
    diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor
    index 3922fc9f86..b420574a3b 100755
    --- a/extra/peg/peg.factor
    +++ b/extra/peg/peg.factor
    @@ -448,7 +448,7 @@ M: action-parser (compile) ( parser -- quot )
       #! Return a new string without any leading whitespace
       #! from the original string.
       dup empty? [
    -    dup first blank? [ 1 tail-slice left-trim-slice ] when
    +    dup first blank? [ rest-slice left-trim-slice ] when
       ] unless ;
     
     TUPLE: sp-parser p1 ;
    diff --git a/extra/project-euler/023/023.factor b/extra/project-euler/023/023.factor
    index 5d468a71c8..6b38a2b6ac 100644
    --- a/extra/project-euler/023/023.factor
    +++ b/extra/project-euler/023/023.factor
    @@ -45,13 +45,14 @@ IN: project-euler.023
     : possible-sums ( seq -- seq )
         dup { } -rot [
             dupd [ + ] curry map
    -        rot append prune swap 1 tail
    +        rot append prune swap rest
         ] each drop natural-sort ;
     
     PRIVATE>
     
     : euler023 ( -- answer )
    -    20161 abundants-upto possible-sums source-023 diff sum ;
    +    source-023
    +    20161 abundants-upto possible-sums diff sum ;
     
     ! TODO: solution is still too slow, although it takes under 1 minute
     
    diff --git a/extra/project-euler/035/035.factor b/extra/project-euler/035/035.factor
    index 53cee7c0ff..cec9bc6957 100755
    --- a/extra/project-euler/035/035.factor
    +++ b/extra/project-euler/035/035.factor
    @@ -28,7 +28,7 @@ IN: project-euler.035
     
     : possible? ( seq -- ? )
         dup length 1 > [
    -        dup { 0 2 4 5 6 8 } swap diff =
    +        dup { 0 2 4 5 6 8 } diff =
         ] [
             drop t
         ] if ;
    diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor
    index a607931083..41e378e531 100644
    --- a/extra/project-euler/043/043.factor
    +++ b/extra/project-euler/043/043.factor
    @@ -79,7 +79,7 @@ PRIVATE>
         [ unclip 1 head prefix concat ] map [ all-unique? ] filter ;
     
     : add-missing-digit ( seq -- seq )
    -    dup natural-sort 10 diff first prefix ;
    +    dup natural-sort 10 swap diff first prefix ;
     
     : interesting-pandigitals ( -- seq )
         17 candidates { 13 11 7 5 3 2 } [
    diff --git a/extra/project-euler/079/079.factor b/extra/project-euler/079/079.factor
    index 65162cc519..3674804b0c 100644
    --- a/extra/project-euler/079/079.factor
    +++ b/extra/project-euler/079/079.factor
    @@ -35,7 +35,7 @@ IN: project-euler.079
         ] { } make ;
     
     : find-source ( seq -- elt )
    -    dup values swap keys [ prune ] bi@ diff
    +    [ keys ] [ values ] bi diff prune
         dup empty? [ "Topological sort failed" throw ] [ first ] if ;
     
     : remove-source ( seq elt -- seq )
    @@ -52,7 +52,7 @@ PRIVATE>
     
     : topological-sort ( seq -- seq )
         [ [ (topological-sort) ] { } make ] keep
    -    concat prune dupd diff append ;
    +    concat prune over diff append ;
     
     : euler079 ( -- answer )
         source-079 >edges topological-sort 10 digits>integer ;
    diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor
    index 5829f66c01..19cf4010c3 100644
    --- a/extra/project-euler/common/common.factor
    +++ b/extra/project-euler/common/common.factor
    @@ -40,10 +40,10 @@ IN: project-euler.common
     
     ! Propagate one row into the upper one
     : propagate ( bottom top -- newtop )
    -    [ over 1 tail rot first2 max rot + ] map nip ;
    +    [ over rest rot first2 max rot + ] map nip ;
     
     : shift-3rd ( seq obj obj -- seq obj obj )
    -    rot 1 tail -rot ;
    +    rot rest -rot ;
     
     : (sum-divisors) ( n -- sum )
         dup sqrt >fixnum [1,b] [
    @@ -95,7 +95,7 @@ PRIVATE>
     ! Not strictly needed, but it is nice to be able to dump the triangle after the
     ! propagation
     : propagate-all ( triangle -- newtriangle )
    -    reverse [ first dup ] keep 1 tail [ propagate dup ] map nip reverse swap suffix ;
    +    reverse [ first dup ] keep rest [ propagate dup ] map nip reverse swap suffix ;
     
     : sum-divisors ( n -- sum )
         dup 4 < [ { 0 1 3 4 } nth ] [ (sum-divisors) ] if ;
    diff --git a/extra/qualified/qualified.factor b/extra/qualified/qualified.factor
    index 730388ade0..e48714bc44 100644
    --- a/extra/qualified/qualified.factor
    +++ b/extra/qualified/qualified.factor
    @@ -23,7 +23,7 @@ IN: qualified
         ] curry map zip ;
     
     : partial-vocab-ignoring ( words name -- assoc )
    -    [ vocab-words keys diff ] keep partial-vocab ;
    +    [ vocab-words keys swap diff ] keep partial-vocab ;
     
     : EXCLUDE:
         #! Syntax: EXCLUDE: vocab => words ... ;
    diff --git a/extra/random-weighted/random-weighted.factor b/extra/random-weighted/random-weighted.factor
    index 476fc083a7..59cc15cba6 100644
    --- a/extra/random-weighted/random-weighted.factor
    +++ b/extra/random-weighted/random-weighted.factor
    @@ -7,7 +7,7 @@ IN: random-weighted
     : probabilities ( weights -- probabilities ) dup sum v/n ;
     
     : layers ( probabilities -- layers )
    -dup length 1+ [ head ] with map 1 tail [ sum ] map ;
    +dup length 1+ [ head ] with map rest [ sum ] map ;
     
     : random-weighted ( weights -- elt )
     probabilities layers [ 1000 * ] map 1000 random [ > ] curry find drop ;
    diff --git a/extra/random/mersenne-twister/mersenne-twister-tests.factor b/extra/random/mersenne-twister/mersenne-twister-tests.factor
    index 703a0c16e4..d25ceacdb1 100755
    --- a/extra/random/mersenne-twister/mersenne-twister-tests.factor
    +++ b/extra/random/mersenne-twister/mersenne-twister-tests.factor
    @@ -1,5 +1,5 @@
     USING: kernel math random namespaces random.mersenne-twister
    -sequences tools.test ;
    +sequences tools.test math.order ;
     IN: random.mersenne-twister.tests
     
     : check-random ( max -- ? )
    diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor
    index b8e2717a71..ad5a40ed6d 100755
    --- a/extra/sequences/lib/lib.factor
    +++ b/extra/sequences/lib/lib.factor
    @@ -117,7 +117,7 @@ MACRO: firstn ( n -- )
     
     : split-around ( seq quot -- before elem after )
         dupd find over [ "Element not found" throw ] unless
    -    >r cut 1 tail r> swap ; inline
    +    >r cut rest r> swap ; inline
     
     : (map-until) ( quot pred -- quot )
         [ dup ] swap 3compose
    @@ -239,7 +239,7 @@ PRIVATE>
         zip >hashtable substitute ;
     
     : remove-nth ( seq n -- seq' )
    -    cut-slice 1 tail-slice append ;
    +    cut-slice rest-slice append ;
     
     : short ( seq n -- seq n' )
         over length min ; inline
    diff --git a/extra/serialize/serialize.factor b/extra/serialize/serialize.factor
    index bb69a8a41c..3bfd4c349b 100755
    --- a/extra/serialize/serialize.factor
    +++ b/extra/serialize/serialize.factor
    @@ -111,7 +111,7 @@ M: tuple (serialize) ( obj -- )
             CHAR: T write1
             [ class (serialize) ]
             [ add-object ]
    -        [ tuple>array 1 tail (serialize) ]
    +        [ tuple>array rest (serialize) ]
             tri
         ] serialize-shared ;
     
    diff --git a/extra/shufflers/authors.txt b/extra/shufflers/authors.txt
    deleted file mode 100644
    index f990dd0ed2..0000000000
    --- a/extra/shufflers/authors.txt
    +++ /dev/null
    @@ -1 +0,0 @@
    -Daniel Ehrenberg
    diff --git a/extra/shufflers/shufflers-docs.factor b/extra/shufflers/shufflers-docs.factor
    deleted file mode 100644
    index ac372534ae..0000000000
    --- a/extra/shufflers/shufflers-docs.factor
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -USING: help.syntax help.markup ;
    -IN: shufflers
    -
    -HELP: SHUFFLE:
    -{ $syntax "SHUFFLE: alphabet #" }
    -{ $values { "alphabet" "an alphabet of unique letters" } { "#" "the maximum length" } }
    -{ $description "Defines stack shufflers of the form abc-bcba where 'abc' describes the inputs and 'bcba' describes the outputs. Given a stack of 1 2 3, this returns 2 3 2 1. The stack shufflers defined are put in the current vocab with the suffix '.shuffle' appended." }
    -{ $examples
    -"SHUFFLE: abcd 6\n"
    -": 4drop abcd- ;\n"
    -": 2over abcd-abcdab ;\n"
    -": 2swap abcd-cdab ;\n"
    -": 3dup abc-abcabc ;\n" } ;
    diff --git a/extra/shufflers/shufflers-tests.factor b/extra/shufflers/shufflers-tests.factor
    deleted file mode 100644
    index 753f35b2e6..0000000000
    --- a/extra/shufflers/shufflers-tests.factor
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -USING: shufflers tools.test ;
    -IN: shufflers.tests
    -
    -SHUFFLE: abcd 4
    -[ ] [ 1 2 3 4 abcd- ] unit-test
    -[ 1 2 1 2 ] [ 1 2 3 abc-abab ] unit-test
    -[ 4 3 2 1 ] [ 1 2 3 4 abcd-dcba ] unit-test
    -[ 1 1 1 1 ] [ 1 a-aaaa ] unit-test
    diff --git a/extra/shufflers/shufflers.factor b/extra/shufflers/shufflers.factor
    deleted file mode 100644
    index b11668a53e..0000000000
    --- a/extra/shufflers/shufflers.factor
    +++ /dev/null
    @@ -1,36 +0,0 @@
    -USING: kernel sequences words math math.functions arrays 
    -shuffle quotations parser math.parser strings namespaces 
    -splitting effects sequences.lib ;
    -IN: shufflers
    -
    -: shuffle>string ( names shuffle -- string )
    -    swap [ [ nth ] curry map ] curry map
    -    first2 "-" swap 3append >string ;
    -
    -: make-shuffles ( max-out max-in -- shuffles )
    -    [ 1+ dup rot strings [ 2array ] with map ]
    -    with map concat ;
    -
    -: shuffle>quot ( shuffle -- quot )
    -    [
    -        first2 2dup [ - ] with map
    -        reverse [ , \ npick , \ >r , ] each
    -        swap , \ ndrop , length [ \ r> , ] times
    -    ] [ ] make ;
    -
    -: put-effect ( word -- )
    -    dup word-name "-" split1
    -    [ >array [ 1string ] map ] bi@
    -     "declared-effect" set-word-prop ;
    -
    -: in-shuffle ( -- ) in get ".shuffle" append set-in ;
    -: out-shuffle ( -- ) in get ".shuffle" ?tail drop set-in ;
    -
    -: define-shuffles ( names max-out -- )
    -    in-shuffle over length make-shuffles [
    -        [ shuffle>string create-in ] keep
    -        shuffle>quot dupd define put-effect
    -    ] with each out-shuffle ;
    -
    -: SHUFFLE:
    -    scan scan string>number define-shuffles ; parsing
    diff --git a/extra/shufflers/summary.txt b/extra/shufflers/summary.txt
    deleted file mode 100644
    index 37b87be410..0000000000
    --- a/extra/shufflers/summary.txt
    +++ /dev/null
    @@ -1 +0,0 @@
    -Arbitrary stack shuffling operators of the form abc-cbab
    diff --git a/extra/shufflers/tags.txt b/extra/shufflers/tags.txt
    deleted file mode 100644
    index f4274299b1..0000000000
    --- a/extra/shufflers/tags.txt
    +++ /dev/null
    @@ -1 +0,0 @@
    -extensions
    diff --git a/extra/symbols/symbols-docs.factor b/extra/symbols/symbols-docs.factor
    index f542948970..9f79b71365 100644
    --- a/extra/symbols/symbols-docs.factor
    +++ b/extra/symbols/symbols-docs.factor
    @@ -5,5 +5,5 @@ HELP: SYMBOLS:
     { $syntax "SYMBOLS: words... ;" }
     { $values { "words" "a sequence of new words to define" } }
     { $description "Creates a new word for every token until the ';'." }
    -{ $examples { $example "USING: prettyprint symbols ;" "SYMBOLS: foo bar baz ;\nfoo . bar . baz ." "foo\nbar\nbaz" } }
    +{ $examples { $example "USING: prettyprint symbols ;" "IN: scratchpad" "SYMBOLS: foo bar baz ;\nfoo . bar . baz ." "foo\nbar\nbaz" } }
     { $see-also POSTPONE: SYMBOL: } ;
    diff --git a/extra/tools/deploy/shaker/shaker.factor b/extra/tools/deploy/shaker/shaker.factor
    index b8ecf87989..f95b83467a 100755
    --- a/extra/tools/deploy/shaker/shaker.factor
    +++ b/extra/tools/deploy/shaker/shaker.factor
    @@ -104,7 +104,7 @@ IN: tools.deploy.shaker
         set-global ;
     
     : strip-vocab-globals ( except names -- words )
    -    [ child-vocabs [ words ] map concat ] map concat diff ;
    +    [ child-vocabs [ words ] map concat ] map concat swap diff ;
     
     : stripped-globals ( -- seq )
         [
    diff --git a/extra/tools/vocabs/vocabs.factor b/extra/tools/vocabs/vocabs.factor
    index 2a5213c70d..e265f233e3 100755
    --- a/extra/tools/vocabs/vocabs.factor
    +++ b/extra/tools/vocabs/vocabs.factor
    @@ -127,7 +127,7 @@ SYMBOL: modified-docs
                 modified-sources get
                 modified-docs get
             ]
    -        [ modified-sources get modified-docs get append swap diff ] bi
    +        [ modified-docs get modified-sources get append diff ] bi
         ] with-scope ;
     
     : do-refresh ( modified-sources modified-docs unchanged -- )
    diff --git a/extra/ui/commands/commands-docs.factor b/extra/ui/commands/commands-docs.factor
    index ed524148e3..5ff0752c19 100644
    --- a/extra/ui/commands/commands-docs.factor
    +++ b/extra/ui/commands/commands-docs.factor
    @@ -47,6 +47,7 @@ HELP: command-name
     { $examples
         { $example
             "USING: io ui.commands ;"
    +        "IN: scratchpad"
             ": com-my-command ;"
             "\\ com-my-command command-name write"
             "My Command"
    @@ -105,6 +106,7 @@ HELP: command-string
     { $examples
         { $example
             "USING: io ui.commands ui.gestures ;"
    +        "IN: scratchpad"
             ": com-my-command ;"
             "T{ key-down f { C+ } \"s\" } \\ com-my-command command-string write"
             "My Command (C+s)"
    diff --git a/extra/ui/commands/commands.factor b/extra/ui/commands/commands.factor
    index 9d6775159a..f341595969 100755
    --- a/extra/ui/commands/commands.factor
    +++ b/extra/ui/commands/commands.factor
    @@ -56,7 +56,7 @@ GENERIC: command-word ( command -- word )
     M: word command-name ( word -- str )
         word-name
         "com-" ?head drop
    -    dup first Letter? [ 1 tail ] unless
    +    dup first Letter? [ rest ] unless
         (command-name) ;
     
     M: word command-description ( word -- str )
    diff --git a/extra/ui/traverse/traverse.factor b/extra/ui/traverse/traverse.factor
    index e3aff92109..85b2266159 100644
    --- a/extra/ui/traverse/traverse.factor
    +++ b/extra/ui/traverse/traverse.factor
    @@ -60,7 +60,7 @@ DEFER: (gadget-subtree)
     
     : traverse-child ( frompath topath gadget -- )
         dup -roll [
    -        >r >r 1 tail-slice r> r> traverse-step (gadget-subtree)
    +        >r >r rest-slice r> r> traverse-step (gadget-subtree)
         ] make-node ;
     
     : (gadget-subtree) ( frompath topath gadget -- )
    diff --git a/extra/unicode/data/data.factor b/extra/unicode/data/data.factor
    index 0c7100d35c..5e1d30d529 100755
    --- a/extra/unicode/data/data.factor
    +++ b/extra/unicode/data/data.factor
    @@ -59,7 +59,7 @@ IN: unicode.data
     
     : process-compat ( data -- hash )
         (process-decomposed)
    -    [ dup first* [ first2 1 tail 2array ] unless ] map
    +    [ dup first* [ first2 rest 2array ] unless ] map
         >hashtable chain-decomposed ;
     
     : process-combining ( data -- hash )
    diff --git a/extra/xml/tokenize/tokenize.factor b/extra/xml/tokenize/tokenize.factor
    index 5ba151c213..b4ff3a4ce9 100644
    --- a/extra/xml/tokenize/tokenize.factor
    +++ b/extra/xml/tokenize/tokenize.factor
    @@ -162,7 +162,7 @@ SYMBOL: ns-stack
             T{ name f "" "version" f }
             T{ name f "" "encoding" f }
             T{ name f "" "standalone" f }
    -    } swap diff
    +    } diff
         dup empty? [ drop ] [  throw ] if ; 
     
     : good-version ( version -- version )
    diff --git a/extra/xml/xml.factor b/extra/xml/xml.factor
    index a75c5396f0..2d7c8c8ff8 100644
    --- a/extra/xml/xml.factor
    +++ b/extra/xml/xml.factor
    @@ -12,7 +12,7 @@ IN: xml
     SYMBOL: xml-stack
     
     :  ( -- unclosed )
    -    xml-stack get 1 tail-slice [ first opener-name ] map
    +    xml-stack get rest-slice [ first opener-name ] map
         { set-unclosed-tags } unclosed construct ;
     
     : add-child ( object -- )
    @@ -93,7 +93,7 @@ M: closer process
     
     : make-xml-doc ( prolog seq -- xml-doc )
         dup [ tag? ] find
    -    >r assure-tags cut 1 tail
    +    >r assure-tags cut rest
         no-pre/post no-post-tags
         r> swap  ;
     
    
    From 42bc93f66ecd585ecdda5de089304b0f61f95336 Mon Sep 17 00:00:00 2001
    From: Slava Pestov 
    Date: Sat, 26 Apr 2008 05:49:41 -0500
    Subject: [PATCH 084/270] Start page flow code
    
    ---
     extra/http/server/auth/login/login.factor     | 14 ++---
     .../server/boilerplate/boilerplate.factor     |  3 +
     extra/http/server/db/db.factor                |  4 +-
     extra/http/server/flows/flows.factor          | 50 +++++++++++++++++
     extra/http/server/server.factor               | 13 ++++-
     .../server/sessions/sessions-tests.factor     |  6 +-
     extra/http/server/sessions/sessions.factor    | 56 ++++++++++---------
     .../http/server/sessions/storage/db/db.factor | 17 ++++--
     .../server/sessions/storage/storage.factor    |  2 -
     .../http/server/templating/chloe/chloe.factor | 34 ++++++++---
     .../factor-website/factor-website.factor      | 46 +++++++--------
     extra/webapps/pastebin/pastebin.xml           |  2 +-
     extra/webapps/planet/entry-summary.xml        |  2 +-
     extra/webapps/planet/entry.xml                |  4 +-
     extra/webapps/planet/planet.factor            |  8 ++-
     extra/webapps/planet/planet.xml               |  2 +-
     extra/webapps/todo/todo.xml                   |  2 +-
     17 files changed, 178 insertions(+), 87 deletions(-)
     create mode 100644 extra/http/server/flows/flows.factor
    
    diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor
    index 1b6ceeb51b..413e0a3cf4 100755
    --- a/extra/http/server/auth/login/login.factor
    +++ b/extra/http/server/auth/login/login.factor
    @@ -13,6 +13,7 @@ http.server.auth.providers
     http.server.auth.providers.null
     http.server.actions
     http.server.components
    +http.server.flows
     http.server.forms
     http.server.sessions
     http.server.boilerplate
    @@ -22,7 +23,6 @@ http.server.validators ;
     IN: http.server.auth.login
     QUALIFIED: smtp
     
    -SYMBOL: post-login-url
     SYMBOL: login-failed?
     
     TUPLE: login < dispatcher users ;
    @@ -60,8 +60,7 @@ M: user-saver dispose
     
     : successful-login ( user -- response )
         logged-in-user sset
    -    post-login-url sget "$login" or f 
    -    f post-login-url sset ;
    +    "$login" end-flow ;
     
     ::  ( -- action )
         [let | form [  ] |
    @@ -155,8 +154,6 @@ SYMBOL: user-exists?
             "verify-password"  add-field
             "email"  add-field ;
     
    -SYMBOL: previous-page
    -
     ::  ( -- action )
         [let | form [  ] |
             
    @@ -196,7 +193,7 @@ SYMBOL: previous-page
     
                     user-profile-changed? on
     
    -                previous-page sget f 
    +                "$login" end-flow
                 ] >>submit
         ] ;
     
    @@ -342,14 +339,15 @@ TUPLE: protected responder ;
     
     C:  protected
     
    +M: protected init-session* responder>> init-session* ;
    +
     : show-login-page ( -- response )
    -    request get request-url post-login-url sset
    +    begin-flow
         "$login/login" f  ;
     
     M: protected call-responder ( path responder -- response )
         logged-in-user sget dup [
             save-user-after
    -        request get request-url previous-page sset
             responder>> call-responder
         ] [
             3drop
    diff --git a/extra/http/server/boilerplate/boilerplate.factor b/extra/http/server/boilerplate/boilerplate.factor
    index eabcefeb7f..bfa79e1a4e 100644
    --- a/extra/http/server/boilerplate/boilerplate.factor
    +++ b/extra/http/server/boilerplate/boilerplate.factor
    @@ -5,6 +5,7 @@ io io.streams.string arrays
     html.elements
     http
     http.server
    +http.server.sessions
     http.server.templating ;
     IN: http.server.boilerplate
     
    @@ -12,6 +13,8 @@ TUPLE: boilerplate responder template ;
     
     :  f boilerplate boa ;
     
    +M: boilerplate init-session* responder>> init-session* ;
    +
     SYMBOL: title
     
     : set-title ( string -- )
    diff --git a/extra/http/server/db/db.factor b/extra/http/server/db/db.factor
    index a8b929bc98..0e08705fa8 100755
    --- a/extra/http/server/db/db.factor
    +++ b/extra/http/server/db/db.factor
    @@ -1,11 +1,13 @@
     ! Copyright (C) 2008 Slava Pestov.
     ! See http://factorcode.org/license.txt for BSD license.
    -USING: db http.server kernel accessors
    +USING: db http.server http.server.sessions kernel accessors
     continuations namespaces destructors ;
     IN: http.server.db
     
     TUPLE: db-persistence responder db params ;
     
    +M: db-persistence init-session* responder>> init-session* ;
    +
     C:  db-persistence
     
     : connect-db ( db-persistence -- )
    diff --git a/extra/http/server/flows/flows.factor b/extra/http/server/flows/flows.factor
    new file mode 100644
    index 0000000000..f6e8d051ce
    --- /dev/null
    +++ b/extra/http/server/flows/flows.factor
    @@ -0,0 +1,50 @@
    +! Copyright (C) 2008 Slava Pestov.
    +! See http://factorcode.org/license.txt for BSD license.
    +USING: accessors namespaces sequences arrays kernel
    +assocs assocs.lib hashtables math.parser
    +html.elements http http.server http.server.sessions ;
    +IN: http.server.flows
    +
    +TUPLE: flows responder ;
    +
    +C:  flows
    +
    +: begin-flow* ( -- id )
    +    request get [ path>> ] [ query>> ] bi 2array
    +    flows sget set-at-unique
    +    session-changed ;
    +
    +: end-flow* ( default id -- response )
    +    flows sget at [ first2 ] [ f ] ?if  ;
    +
    +SYMBOL: flow-id
    +
    +: flow-id-key "factorflowid" ;
    +
    +: begin-flow ( -- )
    +    begin-flow* flow-id set ;
    +
    +: end-flow ( default -- response )
    +    flow-id get end-flow* ;
    +
    +: add-flow-id ( query -- query' )
    +    flow-id get [ flow-id-key associate assoc-union ] when* ;
    +
    +: flow-form-field ( -- )
    +    flow-id get [
    +        
    +    ] when* ;
    +
    +M: flows call-responder
    +    [ add-flow-id ] add-link-hook
    +    [ flow-form-field ] add-form-hook
    +    flow-id-key request-params at flow-id set
    +    responder>> call-responder ;
    +
    +M: flows init-session*
    +    H{ } clone flows sset
    +    responder>> init-session* ;
    diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor
    index 88a748d949..e51cb70de5 100755
    --- a/extra/http/server/server.factor
    +++ b/extra/http/server/server.factor
    @@ -69,8 +69,11 @@ SYMBOL: base-paths
     
     SYMBOL: link-hook
     
    +: add-link-hook ( quot -- )
    +    link-hook [ compose ] change ; inline
    +
     : modify-query ( query -- query )
    -    link-hook get [ ] or call ;
    +    link-hook get call ;
     
     : base-path ( string -- path )
         dup base-paths get at
    @@ -93,8 +96,11 @@ SYMBOL: link-hook
     
     SYMBOL: form-hook
     
    +: add-form-hook ( quot -- )
    +    form-hook [ compose ] change ;
    +
     : hidden-form-field ( -- )
    -    form-hook get [ ] or call ;
    +    form-hook get call ;
     
     : absolute-redirect ( to query -- url )
         #! Same host.
    @@ -226,6 +232,9 @@ SYMBOL: exit-continuation
     : do-request ( request -- response )
         [
             H{ } clone base-paths set
    +        [ ] link-hook set
    +        [ ] form-hook set
    +
             [ log-request ]
             [ request set ]
             [ path>> split-path main-responder get call-responder ] tri
    diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor
    index 4d8c93ef67..85adf7e69f 100755
    --- a/extra/http/server/sessions/sessions-tests.factor
    +++ b/extra/http/server/sessions/sessions-tests.factor
    @@ -3,7 +3,7 @@ USING: tools.test http http.server.sessions
     http.server.sessions.storage http.server.sessions.storage.db
     http.server.actions http.server math namespaces kernel accessors
     prettyprint io.streams.string io.files splitting destructors
    -sequences db db.sqlite ;
    +sequences db db.sqlite continuations ;
     
     : with-session
         [
    @@ -49,8 +49,12 @@ M: foo call-responder
                 "text/plain"  exit-with
             ] >>display ;
     
    +[ "auth-test.db" temp-file sqlite-db delete-file ] ignore-errors
    +
     "auth-test.db" temp-file sqlite-db [
     
    +    init-sessions-table
    +
         [
             empty-session
                 123 >>id session set
    diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor
    index 5d0113b225..96d1c3beca 100755
    --- a/extra/http/server/sessions/sessions.factor
    +++ b/extra/http/server/sessions/sessions.factor
    @@ -10,11 +10,7 @@ http.server.sessions.storage.null
     html.elements ;
     IN: http.server.sessions
     
    -! ! ! ! ! !
    -! WARNING: this session manager is vulnerable to XSRF attacks
    -! ! ! ! ! !
    -
    -TUPLE: session id user-agent client-addr namespace ;
    +TUPLE: session id expiry namespace changed? ;
     
     :  ( id -- session )
         session new
    @@ -24,6 +20,8 @@ GENERIC: init-session* ( responder -- )
     
     M: object init-session* drop ;
     
    +M: dispatcher init-session* default>> init-session* ;
    +
     TUPLE: session-manager responder sessions ;
     
     : new-session-manager ( responder class -- responder' )
    @@ -31,18 +29,23 @@ TUPLE: session-manager responder sessions ;
             null-sessions >>sessions
             swap >>responder ; inline
     
    -SYMBOL: session-changed?
    +: (session-changed) ( session -- )
    +    t >>changed? drop ;
    +
    +: session-changed ( -- )
    +    session get (session-changed) ;
     
     : sget ( key -- value )
         session get namespace>> at ;
     
     : sset ( value key -- )
    -    session get namespace>> set-at
    -    session-changed? on ;
    +    session get
    +    [ namespace>> set-at ] [ (session-changed) ] bi ;
     
     : schange ( key quot -- )
    -    session get namespace>> swap change-at
    -    session-changed? on ; inline
    +    session get
    +    [ namespace>> swap change-at ] keep
    +    (session-changed) ; inline
     
     : sessions session-manager get sessions>> ;
     
    @@ -51,11 +54,18 @@ SYMBOL: session-changed?
     : init-session ( session managed -- )
         >r session r> '[ , init-session* ] with-variable ;
     
    +: timeout 20 minutes ;
    +
    +: cutoff-time ( -- time )
    +    now timeout time+ timestamp>millis ;
    +
    +: touch-session ( session -- )
    +    cutoff-time >>expiry drop ;
    +
     : empty-session ( -- session )
         f 
    -        "" >>user-agent
    -        "" >>client-addr
    -        H{ } clone >>namespace ;
    +        H{ } clone >>namespace
    +        dup touch-session ;
     
     : begin-session ( responder -- session )
         >r empty-session r>
    @@ -70,8 +80,9 @@ TUPLE: session-saver session ;
     C:  session-saver
     
     M: session-saver dispose
    -    session-changed? get
    -    [ session>> sessions update-session ] [ drop ] if ;
    +    session>> dup changed?>> [
    +        [ touch-session ] [ sessions update-session ] bi
    +    ] [ drop ] if ;
     
     : save-session-after ( session -- )
          add-always-destructor ;
    @@ -80,14 +91,6 @@ M: session-saver dispose
         [ save-session-after ] [ session set ] bi
         [ session-manager set ] [ responder>> call-responder ] bi ;
     
    -TUPLE: null-sessions < session-manager ;
    -
    -:  ( responder -- manager )
    -    null-sessions new-session-manager ;
    -
    -M: null-sessions call-responder ( path responder -- response )
    -     call-responder/session ;
    -
     TUPLE: url-sessions < session-manager ;
     
     :  ( responder -- responder' )
    @@ -105,9 +108,8 @@ TUPLE: url-sessions < session-manager ;
     : session-form-field ( -- )
         > =value
    +        session get id>> number>string =value
         input/> ;
     
     : new-url-session ( path responder -- response )
    @@ -115,8 +117,8 @@ TUPLE: url-sessions < session-manager ;
          ;
     
     M: url-sessions call-responder ( path responder -- response )
    -    [ add-session-id ] link-hook set
    -    [ session-form-field ] form-hook set
    +    [ add-session-id ] add-link-hook
    +    [ session-form-field ] add-form-hook
         dup current-url-session [
             call-responder/session
         ] [
    diff --git a/extra/http/server/sessions/storage/db/db.factor b/extra/http/server/sessions/storage/db/db.factor
    index bddb783c97..637d86670f 100755
    --- a/extra/http/server/sessions/storage/db/db.factor
    +++ b/extra/http/server/sessions/storage/db/db.factor
    @@ -1,8 +1,8 @@
     ! Copyright (C) 2008 Slava Pestov.
     ! See http://factorcode.org/license.txt for BSD license.
     USING: assocs accessors kernel http.server.sessions.storage
    -http.server.sessions http.server db.tuples db.types math.parser
    -classes.singleton random ;
    +http.server.sessions http.server db db.tuples db.types math.parser
    +math.intervals fry random calendar sequences alarms ;
     IN: http.server.sessions.storage.db
     
     SINGLETON: sessions-in-db
    @@ -11,8 +11,7 @@ session "SESSIONS"
     {
         ! { "id" "ID" +random-id+ system-random-generator }
         { "id" "ID" INTEGER +native-id+ }
    -    { "user-agent" "USERAGENT" { VARCHAR 256 } +not-null+ }
    -    { "client-addr" "CLIENTADDR" { VARCHAR 256 } +not-null+ }
    +    { "expiry" "EXPIRY" BIG-INTEGER +not-null+ }
         { "namespace" "NAMESPACE" FACTOR-BLOB }
     } define-persistent
     
    @@ -29,3 +28,13 @@ M: sessions-in-db delete-session ( id storage -- )
     
     M: sessions-in-db new-session ( session storage -- )
         drop insert-tuple ;
    +
    +: expired-sessions ( -- session )
    +    f 
    +    USE: math now timestamp>millis [ 60 60 * 1000 * - ] keep [a,b] >>expiry
    +    select-tuples ;
    +
    +: start-expiring-sessions ( db seq -- )
    +    '[
    +        , , [ expired-sessions [ delete-tuple ] each ] with-db
    +    ] 5 minutes every drop ;
    diff --git a/extra/http/server/sessions/storage/storage.factor b/extra/http/server/sessions/storage/storage.factor
    index 97d869e60a..c605600f7b 100755
    --- a/extra/http/server/sessions/storage/storage.factor
    +++ b/extra/http/server/sessions/storage/storage.factor
    @@ -3,8 +3,6 @@
     USING: calendar ;
     IN: http.server.sessions.storage
     
    -: timeout 20 minutes ;
    -
     GENERIC: get-session ( id storage -- session )
     
     GENERIC: update-session ( session storage -- )
    diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor
    index 3793604929..99d6376fe8 100644
    --- a/extra/http/server/templating/chloe/chloe.factor
    +++ b/extra/http/server/templating/chloe/chloe.factor
    @@ -4,6 +4,7 @@ io io.files io.encodings.utf8 html.elements unicode.case
     tuple-syntax xml xml.data xml.writer xml.utilities
     http.server
     http.server.auth
    +http.server.flows
     http.server.components
     http.server.sessions
     http.server.templating
    @@ -83,14 +84,33 @@ SYMBOL: tags
         dup empty?
         [ drop f ] [ "," split [ dup value ] H{ } map>assoc ] if ;
     
    +: a-flow-attr ( tag -- )
    +    "flow" optional-attr {
    +        { "none" [ flow-id off ] }
    +        { "begin" [ begin-flow ] }
    +        { "current" [ ] }
    +        { f [ ] }
    +    } case ;
    +
    +: a-session-attr ( tag -- )
    +    "session" optional-attr {
    +        { "none" [ session off flow-id off ] }
    +        { "current" [ ] }
    +        { f [ ] }
    +    } case ;
    +
     : a-start-tag ( tag -- )
    -    string =href
    -    a> ;
    +    [
    +        string =href
    +        a>
    +    ] with-scope ;
     
     : process-tag-children ( tag -- )
         [ process-template ] each ;
    diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor
    index d78fd4b6c2..d6ddeb32bb 100644
    --- a/extra/webapps/factor-website/factor-website.factor
    +++ b/extra/webapps/factor-website/factor-website.factor
    @@ -4,6 +4,7 @@ USING: accessors kernel sequences assocs io.files io.sockets
     namespaces db db.sqlite smtp
     http.server
     http.server.db
    +http.server.flows
     http.server.sessions
     http.server.auth.login
     http.server.auth.providers.db
    @@ -20,27 +21,6 @@ IN: webapps.factor-website
     : factor-template ( path -- template )
         "resource:extra/webapps/factor-website/" swap ".xml" 3append  ;
     
    -:  ( responder -- responder' )
    -    
    -        users-in-db >>users
    -        allow-registration
    -        allow-password-recovery
    -        allow-edit-profile
    -    
    -        "page" factor-template >>template
    -    
    -        sessions-in-db >>sessions
    -    test-db  ;
    -
    -:  ( -- responder )
    -      ;
    -
    -:  ( -- responder )
    -      ;
    -
    -:  ( -- responder )
    -       ;
    -
     : init-factor-db ( -- )
         test-db [
             init-users-table
    @@ -56,9 +36,20 @@ IN: webapps.factor-website
     
     :  ( -- responder )
         
    -         "todo" add-responder
    -         "pastebin" add-responder
    -         "planet" add-responder ;
    +         "todo" add-responder
    +         "pastebin" add-responder
    +         "planet" add-responder
    +    
    +        users-in-db >>users
    +        allow-registration
    +        allow-password-recovery
    +        allow-edit-profile
    +    
    +        "page" factor-template >>template
    +    
    +    
    +        sessions-in-db >>sessions
    +    test-db  ;
     
     : init-factor-website ( -- )
         "factorcode.org" 25  smtp-server set-global
    @@ -66,6 +57,9 @@ IN: webapps.factor-website
     
         init-factor-db
     
    -     main-responder set-global
    +     main-responder set-global ;
     
    -    "planet" main-responder get responders>> at start-update-task ;
    +: start-factor-website
    +    test-db start-expiring-sessions
    +    "planet" main-responder get responders>> at test-db start-update-task
    +    8812 httpd ;
    diff --git a/extra/webapps/pastebin/pastebin.xml b/extra/webapps/pastebin/pastebin.xml
    index 2d335fe9ce..6b49162637 100644
    --- a/extra/webapps/pastebin/pastebin.xml
    +++ b/extra/webapps/pastebin/pastebin.xml
    @@ -13,7 +13,7 @@
     
     		
     		
    -			| Edit Profile
    +			| Edit Profile
     		
     
     		
    diff --git a/extra/webapps/planet/entry-summary.xml b/extra/webapps/planet/entry-summary.xml
    index a87703252c..905795373b 100644
    --- a/extra/webapps/planet/entry-summary.xml
    +++ b/extra/webapps/planet/entry-summary.xml
    @@ -4,7 +4,7 @@
     
     	


    - Read More... + Read More...

    diff --git a/extra/webapps/planet/entry.xml b/extra/webapps/planet/entry.xml index bc89af3263..0e52c191a5 100644 --- a/extra/webapps/planet/entry.xml +++ b/extra/webapps/planet/entry.xml @@ -3,7 +3,7 @@

    - +

    @@ -11,7 +11,7 @@

    - +

    diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 3cd35be5fb..752db18ee7 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors sequences sorting locals math calendar alarms logging concurrency.combinators namespaces -sequences.lib db.types db.tuples db +sequences.lib db.types db.tuples db fry rss xml.writer http.server http.server.crud @@ -167,5 +167,7 @@ blog "BLOGS" "planet" planet-template >>template ; -: start-update-task ( planet -- ) - [ update-cached-postings ] curry 10 minutes every drop ; +: start-update-task ( planet db seq -- ) + '[ + , , , [ update-cached-postings ] with-db + ] 10 minutes every drop ; diff --git a/extra/webapps/planet/planet.xml b/extra/webapps/planet/planet.xml index c96a143246..328be84544 100644 --- a/extra/webapps/planet/planet.xml +++ b/extra/webapps/planet/planet.xml @@ -14,7 +14,7 @@ - | Edit Profile + | Edit Profile diff --git a/extra/webapps/todo/todo.xml b/extra/webapps/todo/todo.xml index 70bbb1250b..4e307b7cae 100644 --- a/extra/webapps/todo/todo.xml +++ b/extra/webapps/todo/todo.xml @@ -9,7 +9,7 @@ | Add Item - | Edit Profile + | Edit Profile From d44d5aba34de733b7e92255f62fddad535570a83 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 26 Apr 2008 05:49:53 -0500 Subject: [PATCH 085/270] Smaller random ids --- extra/assocs/lib/lib.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/assocs/lib/lib.factor b/extra/assocs/lib/lib.factor index 92fb9aac81..247be44bad 100755 --- a/extra/assocs/lib/lib.factor +++ b/extra/assocs/lib/lib.factor @@ -38,7 +38,7 @@ IN: assocs.lib : insert ( value variable -- ) namespace insert-at ; : generate-key ( assoc -- str ) - >r 256 random-bits >hex r> + >r 32 random-bits >hex r> 2dup key? [ nip generate-key ] [ drop ] if ; : set-at-unique ( value assoc -- key ) From 14b78f348e3b59062f65b56c14507533900d4375 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 26 Apr 2008 05:49:59 -0500 Subject: [PATCH 086/270] Better error message --- extra/serialize/serialize.factor | 1 + 1 file changed, 1 insertion(+) diff --git a/extra/serialize/serialize.factor b/extra/serialize/serialize.factor index bb69a8a41c..27126f49eb 100755 --- a/extra/serialize/serialize.factor +++ b/extra/serialize/serialize.factor @@ -230,6 +230,7 @@ SYMBOL: deserialized : deserialize-word ( -- word ) (deserialize) (deserialize) 2dup lookup dup [ 2nip ] [ + drop "Unknown word: " -rot 2array unparse append throw ] if ; From 439c138aa5aef1c76f8fc17eccfe598523187e85 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 11:03:41 -0500 Subject: [PATCH 087/270] fix load errors --- extra/benchmark/binary-trees/binary-trees.factor | 2 +- extra/benchmark/mandel/mandel.factor | 2 +- extra/boids/boids.factor | 1 + extra/bubble-chamber/particle/muon/colors/colors.factor | 2 +- extra/gap-buffer/gap-buffer.factor | 3 ++- extra/html/html.factor | 2 +- extra/json/reader/reader.factor | 2 +- extra/koszul/koszul.factor | 2 +- extra/levenshtein/levenshtein.factor | 3 ++- extra/lsys/tortoise/graphics/graphics.factor | 2 +- extra/lsys/ui/ui.factor | 5 +++-- extra/math/combinatorics/combinatorics-docs.factor | 2 +- extra/math/combinatorics/combinatorics.factor | 3 ++- extra/math/polynomials/polynomials.factor | 2 +- extra/math/primes/primes.factor | 2 +- extra/maze/maze.factor | 3 ++- extra/multi-methods/multi-methods.factor | 2 +- extra/ogg/player/player.factor | 2 +- extra/optimizer/report/report.factor | 4 ++-- extra/processing/gallery/trails/trails.factor | 4 ++-- extra/project-euler/019/019.factor | 2 +- extra/project-euler/076/076.factor | 3 ++- extra/project-euler/117/117.factor | 2 +- extra/project-euler/134/134.factor | 4 ++-- extra/project-euler/150/150.factor | 3 ++- extra/project-euler/151/151.factor | 3 ++- extra/project-euler/common/common.factor | 4 ++-- extra/regexp/regexp.factor | 2 +- extra/regexp2/regexp2.factor | 2 +- extra/reports/noise/noise.factor | 2 +- extra/reports/optimizer/optimizer.factor | 2 +- extra/roman/roman.factor | 2 +- extra/rss/rss.factor | 4 ++-- extra/taxes/taxes.factor | 2 +- extra/trees/avl/avl.factor | 3 ++- extra/trees/splay/splay.factor | 2 +- extra/trees/trees.factor | 2 +- extra/webapps/planet/planet.factor | 2 +- extra/wrap/wrap.factor | 2 +- extra/x11/events/events.factor | 3 ++- extra/xml-rpc/xml-rpc.factor | 4 ++-- extra/xml/char-classes/char-classes.factor | 2 +- extra/yahoo/yahoo.factor | 2 +- 43 files changed, 60 insertions(+), 49 deletions(-) diff --git a/extra/benchmark/binary-trees/binary-trees.factor b/extra/benchmark/binary-trees/binary-trees.factor index be4620bff6..6e63877989 100644 --- a/extra/benchmark/binary-trees/binary-trees.factor +++ b/extra/benchmark/binary-trees/binary-trees.factor @@ -1,5 +1,5 @@ USING: kernel math accessors prettyprint io locals sequences -math.ranges ; +math.ranges math.order ; IN: benchmark.binary-trees TUPLE: tree-node item left right ; diff --git a/extra/benchmark/mandel/mandel.factor b/extra/benchmark/mandel/mandel.factor index b890fdc8e8..b9b139d7e3 100755 --- a/extra/benchmark/mandel/mandel.factor +++ b/extra/benchmark/mandel/mandel.factor @@ -1,5 +1,5 @@ IN: benchmark.mandel -USING: arrays io kernel math namespaces sequences +USING: arrays io kernel math math.order namespaces sequences byte-arrays byte-vectors math.functions math.parser io.files colors.hsv io.encodings.binary ; diff --git a/extra/boids/boids.factor b/extra/boids/boids.factor index 91e5e5fe22..40ce7adb35 100644 --- a/extra/boids/boids.factor +++ b/extra/boids/boids.factor @@ -3,6 +3,7 @@ USING: kernel namespaces math math.constants math.functions + math.order math.vectors math.trig combinators arrays sequences random vars diff --git a/extra/bubble-chamber/particle/muon/colors/colors.factor b/extra/bubble-chamber/particle/muon/colors/colors.factor index ab72f65b4b..e68fff5efd 100644 --- a/extra/bubble-chamber/particle/muon/colors/colors.factor +++ b/extra/bubble-chamber/particle/muon/colors/colors.factor @@ -1,5 +1,5 @@ -USING: kernel sequences math math.constants accessors +USING: kernel sequences math math.constants math.order accessors processing processing.color ; diff --git a/extra/gap-buffer/gap-buffer.factor b/extra/gap-buffer/gap-buffer.factor index d3b946afe9..55a1276dd4 100644 --- a/extra/gap-buffer/gap-buffer.factor +++ b/extra/gap-buffer/gap-buffer.factor @@ -4,7 +4,8 @@ ! gap buffer -- largely influenced by Strandh and Villeneuve's Flexichain ! for a good introduction see: ! http://p-cos.net/lisp-ecoop/submissions/StrandhVilleneuveMoore.pdf -USING: kernel arrays sequences sequences.private circular math math.functions generic ; +USING: kernel arrays sequences sequences.private circular math +math.order math.functions generic ; IN: gap-buffer ! gap-start -- the first element of the gap diff --git a/extra/html/html.factor b/extra/html/html.factor index 5c82b7f038..f0ae424760 100755 --- a/extra/html/html.factor +++ b/extra/html/html.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2004, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: generic assocs help http io io.styles io.files continuations -io.streams.string kernel math math.parser namespaces +io.streams.string kernel math math.order math.parser namespaces quotations assocs sequences strings words html.elements xml.entities sbufs continuations ; IN: html diff --git a/extra/json/reader/reader.factor b/extra/json/reader/reader.factor index b136012433..17c1b272df 100755 --- a/extra/json/reader/reader.factor +++ b/extra/json/reader/reader.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2006 Chris Double. ! See http://factorcode.org/license.txt for BSD license. USING: kernel parser-combinators namespaces sequences promises strings - assocs math math.parser math.vectors math.functions + assocs math math.parser math.vectors math.functions math.order lazy-lists hashtables ascii ; IN: json.reader diff --git a/extra/koszul/koszul.factor b/extra/koszul/koszul.factor index b4a0934e41..e9de82ebb6 100755 --- a/extra/koszul/koszul.factor +++ b/extra/koszul/koszul.factor @@ -3,7 +3,7 @@ USING: arrays assocs hashtables assocs io kernel math math.vectors math.matrices math.matrices.elimination namespaces parser prettyprint sequences words combinators math.parser -splitting sorting shuffle symbols sets ; +splitting sorting shuffle symbols sets math.order ; IN: koszul ! Utilities diff --git a/extra/levenshtein/levenshtein.factor b/extra/levenshtein/levenshtein.factor index 98b376593c..07731bfb84 100644 --- a/extra/levenshtein/levenshtein.factor +++ b/extra/levenshtein/levenshtein.factor @@ -1,6 +1,7 @@ ! Copyright (C) 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays help io kernel math namespaces sequences ; +USING: arrays help io kernel math namespaces sequences +math.order ; IN: levenshtein : ( m n -- matrix ) diff --git a/extra/lsys/tortoise/graphics/graphics.factor b/extra/lsys/tortoise/graphics/graphics.factor index 87536476ee..d75915ae8e 100644 --- a/extra/lsys/tortoise/graphics/graphics.factor +++ b/extra/lsys/tortoise/graphics/graphics.factor @@ -1,5 +1,5 @@ -USING: kernel math vectors sequences opengl.gl math.vectors +USING: kernel math vectors sequences opengl.gl math.vectors math.order math.matrices vars opengl self pos ori turtle lsys.tortoise lsys.strings.interpret ; diff --git a/extra/lsys/ui/ui.factor b/extra/lsys/ui/ui.factor index c8d103a084..c3b9190c3c 100644 --- a/extra/lsys/ui/ui.factor +++ b/extra/lsys/ui/ui.factor @@ -1,5 +1,6 @@ -USING: kernel namespaces threads math math.vectors quotations sequences +USING: kernel namespaces threads math math.order math.vectors + quotations sequences opengl opengl.gl colors @@ -495,4 +496,4 @@ make-pile 1 over set-pack-fill "L-system scenes" open-window ; : lsys-window* ( -- ) [ lsys-controller lsys-viewer ] with-ui ; -MAIN: lsys-window* \ No newline at end of file +MAIN: lsys-window* diff --git a/extra/math/combinatorics/combinatorics-docs.factor b/extra/math/combinatorics/combinatorics-docs.factor index 355898a8bd..514c808ee0 100644 --- a/extra/math/combinatorics/combinatorics-docs.factor +++ b/extra/math/combinatorics/combinatorics-docs.factor @@ -1,4 +1,4 @@ -USING: help.markup help.syntax kernel math sequences ; +USING: help.markup help.syntax kernel math math.order sequences ; IN: math.combinatorics HELP: factorial diff --git a/extra/math/combinatorics/combinatorics.factor b/extra/math/combinatorics/combinatorics.factor index 487d9828ea..3376ea640b 100644 --- a/extra/math/combinatorics/combinatorics.factor +++ b/extra/math/combinatorics/combinatorics.factor @@ -1,6 +1,7 @@ ! Copyright (c) 2007, 2008 Slava Pestov, Doug Coleman, Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs kernel math math.ranges mirrors namespaces sequences sorting ; +USING: assocs kernel math math.order math.ranges mirrors +namespaces sequences sorting ; IN: math.combinatorics r optimize-1 diff --git a/extra/processing/gallery/trails/trails.factor b/extra/processing/gallery/trails/trails.factor index dc191bc439..5abe23bb90 100644 --- a/extra/processing/gallery/trails/trails.factor +++ b/extra/processing/gallery/trails/trails.factor @@ -1,5 +1,5 @@ -USING: kernel arrays sequences math qualified +USING: kernel arrays sequences math math.order qualified sequences.lib circular processing ui newfx ; IN: processing.gallery.trails @@ -44,4 +44,4 @@ IN: processing.gallery.trails : go ( -- ) [ go* ] with-ui ; -MAIN: go \ No newline at end of file +MAIN: go diff --git a/extra/project-euler/019/019.factor b/extra/project-euler/019/019.factor index a2c3ebcd1f..5006301c2b 100644 --- a/extra/project-euler/019/019.factor +++ b/extra/project-euler/019/019.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007 Samuel Tardieu, Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: calendar combinators kernel math math.ranges namespaces sequences - sequences.lib ; + sequences.lib math.order ; IN: project-euler.019 ! http://projecteuler.net/index.php?section=problems&id=19 diff --git a/extra/project-euler/076/076.factor b/extra/project-euler/076/076.factor index b09a2742c3..782d6d0429 100644 --- a/extra/project-euler/076/076.factor +++ b/extra/project-euler/076/076.factor @@ -1,6 +1,7 @@ ! Copyright (c) 2008 Eric Mertens ! See http://factorcode.org/license.txt for BSD license. -USING: arrays assocs combinators kernel math sequences math.ranges locals ; +USING: arrays assocs combinators kernel math sequences +math.order math.ranges locals ; IN: project-euler.076 ! http://projecteuler.net/index.php?section=problems&id=76 diff --git a/extra/project-euler/117/117.factor b/extra/project-euler/117/117.factor index 5056560a85..3a05261710 100644 --- a/extra/project-euler/117/117.factor +++ b/extra/project-euler/117/117.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Eric Mertens ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math splitting sequences ; +USING: kernel math math.order splitting sequences ; IN: project-euler.117 diff --git a/extra/project-euler/134/134.factor b/extra/project-euler/134/134.factor index fb7fdebd51..11af1960ed 100644 --- a/extra/project-euler/134/134.factor +++ b/extra/project-euler/134/134.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2007 Samuel Tardieu. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays kernel lazy-lists math.algebra math math.functions math.primes - math.ranges project-euler.common sequences ; +USING: arrays kernel lazy-lists math.algebra math math.functions + math.order math.primes math.ranges project-euler.common sequences ; IN: project-euler.134 ! http://projecteuler.net/index.php?section=problems&id=134 diff --git a/extra/project-euler/150/150.factor b/extra/project-euler/150/150.factor index c8bd28a3a9..8c93d4f7e6 100644 --- a/extra/project-euler/150/150.factor +++ b/extra/project-euler/150/150.factor @@ -1,6 +1,7 @@ ! Copyright (c) 2008 Eric Mertens ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math sequences sequences.private locals hints ; +USING: kernel math math.order sequences sequences.private +locals hints ; IN: project-euler.150 Date: Sat, 26 Apr 2008 11:06:46 -0500 Subject: [PATCH 088/270] fix using --- core/cpu/ppc/assembler/assembler.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/cpu/ppc/assembler/assembler.factor b/core/cpu/ppc/assembler/assembler.factor index 628022698f..e85e03bf9c 100755 --- a/core/cpu/ppc/assembler/assembler.factor +++ b/core/cpu/ppc/assembler/assembler.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: cpu.ppc.assembler USING: generator.fixup generic kernel math memory namespaces -words math.bitfields io.binary ; +words math.bitfields math.order io.binary ; +IN: cpu.ppc.assembler ! See the Motorola or IBM documentation for details. The opcode ! names are standard, and the operand order is the same as in From 658ec32b6749a7eebfac6434793f94eab895f3a1 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 11:28:08 -0500 Subject: [PATCH 089/270] rearrange IN: add using --- core/command-line/command-line.factor | 2 +- core/cpu/ppc/architecture/architecture.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/command-line/command-line.factor b/core/command-line/command-line.factor index f4aef6292d..84020abca0 100644 --- a/core/command-line/command-line.factor +++ b/core/command-line/command-line.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2003, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: command-line USING: init continuations debugger hashtables io kernel kernel.private namespaces parser sequences strings system splitting io.files ; +IN: command-line : run-bootstrap-init ( -- ) "user-init" get [ diff --git a/core/cpu/ppc/architecture/architecture.factor b/core/cpu/ppc/architecture/architecture.factor index 1799411021..70345b1e96 100755 --- a/core/cpu/ppc/architecture/architecture.factor +++ b/core/cpu/ppc/architecture/architecture.factor @@ -4,7 +4,7 @@ USING: alien.c-types cpu.ppc.assembler cpu.architecture generic kernel kernel.private math memory namespaces sequences words assocs generator generator.registers generator.fixup system layouts classes words.private alien combinators -compiler.constants ; +compiler.constants math.order ; IN: cpu.ppc.architecture ! PowerPC register assignments From 0b72829d079e079924bf43bec31fb0e785c0ce70 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 12:55:10 -0500 Subject: [PATCH 090/270] add >string on byte-array for string comparison use ERROR: --- extra/graphics/bitmap/bitmap.factor | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/extra/graphics/bitmap/bitmap.factor b/extra/graphics/bitmap/bitmap.factor index 861894c8f4..893fd0d6cf 100755 --- a/extra/graphics/bitmap/bitmap.factor +++ b/extra/graphics/bitmap/bitmap.factor @@ -25,10 +25,14 @@ TUPLE: bitmap magic size reserved offset header-length width { 1 [ "1bit" throw ] } } case ; +ERROR: bitmap-magic ; + +M: bitmap-magic summary + drop "First two bytes of bitmap stream must be 'BM'" ; + : parse-file-header ( bitmap -- ) - 2 read [ over set-bitmap-magic ] keep "BM" = [ - "BITMAPFILEHEADER: First two bytes must be BM" throw - ] unless + 2 read >string dup "BM" = [ bitmap-magic ] unless + [ over set-bitmap-magic ] keep 4 read le> over set-bitmap-size 4 read le> over set-bitmap-reserved 4 read le> swap set-bitmap-offset ; From 2b1d5789a6e4065e9ff1a0a430df3e7857bad15d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 13:01:11 -0500 Subject: [PATCH 091/270] fix bitmap parsing, fix tests --- extra/graphics/bitmap/bitmap.factor | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/extra/graphics/bitmap/bitmap.factor b/extra/graphics/bitmap/bitmap.factor index 893fd0d6cf..d9cc310454 100755 --- a/extra/graphics/bitmap/bitmap.factor +++ b/extra/graphics/bitmap/bitmap.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2007 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien arrays byte-arrays combinators -graphics.viewer io io.binary io.files kernel libc math -math.functions namespaces opengl opengl.gl prettyprint +USING: alien arrays byte-arrays combinators inspector +io.backend graphics.viewer io io.binary io.files kernel libc +math math.functions namespaces opengl opengl.gl prettyprint sequences strings ui ui.gadgets.panes io.encodings.binary ; IN: graphics.bitmap @@ -32,7 +32,7 @@ M: bitmap-magic summary : parse-file-header ( bitmap -- ) 2 read >string dup "BM" = [ bitmap-magic ] unless - [ over set-bitmap-magic ] keep + over set-bitmap-magic 4 read le> over set-bitmap-size 4 read le> over set-bitmap-reserved 4 read le> swap set-bitmap-offset ; @@ -63,7 +63,7 @@ M: bitmap-magic summary dup color-index-length read swap set-bitmap-color-index ; : load-bitmap ( path -- bitmap ) - binary [ + normalize-path binary [ T{ bitmap } clone dup parse-file-header dup parse-bitmap-header @@ -121,16 +121,14 @@ M: bitmap height ( bitmap -- ) bitmap-height ; load-bitmap [ "bitmap" open-window ] keep ; : test-bitmap24 ( -- ) - "extra/graphics/bitmap/test-data/thiswayup24.bmp" resource-path bitmap. ; + "resource:extra/graphics/bitmap/test-images/thiswayup24.bmp" bitmap. ; : test-bitmap8 ( -- ) - "extra/graphics/bitmap/test-data/rgb8bit.bmp" resource-path bitmap. ; + "resource:extra/graphics/bitmap/test-images/rgb8bit.bmp" bitmap. ; : test-bitmap4 ( -- ) - "extra/graphics/bitmap/test-data/rgb4bit.bmp" resource-path - load-bitmap ; - ! bitmap. ; + "resource:extra/graphics/bitmap/test-images/rgb4bit.bmp" bitmap. ; : test-bitmap1 ( -- ) - "extra/graphics/bitmap/test-data/1bit.bmp" resource-path bitmap. ; + "resource:extra/graphics/bitmap/test-images/1bit.bmp" bitmap. ; From 7b9a757076d610b52688d44cb3100e1e6baadb44 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 13:04:10 -0500 Subject: [PATCH 092/270] keep gadget on stack, fix stack effect --- extra/graphics/bitmap/bitmap.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/graphics/bitmap/bitmap.factor b/extra/graphics/bitmap/bitmap.factor index d9cc310454..611319e28b 100755 --- a/extra/graphics/bitmap/bitmap.factor +++ b/extra/graphics/bitmap/bitmap.factor @@ -117,8 +117,8 @@ M: bitmap height ( bitmap -- ) bitmap-height ; : bitmap. ( path -- ) load-bitmap gadget. ; -: bitmap-window ( path -- ) - load-bitmap [ "bitmap" open-window ] keep ; +: bitmap-window ( path -- gadget ) + load-bitmap [ "bitmap" open-window ] keep ; : test-bitmap24 ( -- ) "resource:extra/graphics/bitmap/test-images/thiswayup24.bmp" bitmap. ; From 60fb68d1de99f7e9728b305a2c24ba2749c00ad8 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 18:44:28 -0500 Subject: [PATCH 093/270] rename state-parser:rest to take-rest --- extra/calendar/calendar-tests.factor | 6 +++++- extra/calendar/format/format-tests.factor | 2 +- extra/multi-methods/tests/topological-sort.factor | 3 ++- extra/state-parser/state-parser-tests.factor | 12 ++++++------ extra/state-parser/state-parser.factor | 2 +- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/extra/calendar/calendar-tests.factor b/extra/calendar/calendar-tests.factor index d4cddb6081..e2a2bc7e66 100755 --- a/extra/calendar/calendar-tests.factor +++ b/extra/calendar/calendar-tests.factor @@ -1,5 +1,5 @@ USING: arrays calendar kernel math sequences tools.test -continuations system math.order ; +continuations system math.order threads ; IN: calendar.tests \ time+ must-infer @@ -163,3 +163,7 @@ IN: calendar.tests [ t ] [ 5 months checktime+ ] unit-test [ t ] [ 5 years checktime+ ] unit-test + +[ t ] [ now 50 milliseconds sleep now before? ] unit-test +[ t ] [ now 50 milliseconds sleep now swap after? ] unit-test +[ t ] [ now 50 milliseconds sleep now 50 milliseconds sleep now swapd between? ] unit-test diff --git a/extra/calendar/format/format-tests.factor b/extra/calendar/format/format-tests.factor index 1ba892bef3..2eef21a013 100755 --- a/extra/calendar/format/format-tests.factor +++ b/extra/calendar/format/format-tests.factor @@ -1,5 +1,5 @@ USING: calendar.format calendar kernel math tools.test -io.streams.string accessors io ; +io.streams.string accessors io math.order ; IN: calendar.format.tests [ 0 ] [ diff --git a/extra/multi-methods/tests/topological-sort.factor b/extra/multi-methods/tests/topological-sort.factor index ed8bece4ba..cea7022759 100644 --- a/extra/multi-methods/tests/topological-sort.factor +++ b/extra/multi-methods/tests/topological-sort.factor @@ -1,5 +1,6 @@ +USING: kernel multi-methods tools.test math arrays sequences +math.order ; IN: multi-methods.tests -USING: kernel multi-methods tools.test math arrays sequences ; [ { 1 2 3 4 5 6 } ] [ { 6 4 5 1 3 2 } [ <=> ] topological-sort diff --git a/extra/state-parser/state-parser-tests.factor b/extra/state-parser/state-parser-tests.factor index 4e1ecaddfc..e0b274b3e6 100755 --- a/extra/state-parser/state-parser-tests.factor +++ b/extra/state-parser/state-parser-tests.factor @@ -1,8 +1,8 @@ USING: tools.test state-parser kernel io strings ascii ; -[ "hello" ] [ "hello" [ rest ] string-parse ] unit-test -[ 2 4 ] [ "12\n123" [ rest drop get-line get-column ] string-parse ] unit-test -[ "hi" " how are you?" ] [ "hi how are you?" [ [ get-char blank? ] take-until rest ] string-parse ] unit-test -[ "foo" ";bar" ] [ "foo;bar" [ CHAR: ; take-char rest ] string-parse ] unit-test -[ "foo " " bar" ] [ "foo and bar" [ "and" take-string rest ] string-parse ] unit-test -[ "baz" ] [ " \n\t baz" [ pass-blank rest ] string-parse ] unit-test +[ "hello" ] [ "hello" [ take-rest ] string-parse ] unit-test +[ 2 4 ] [ "12\n123" [ take-rest drop get-line get-column ] string-parse ] unit-test +[ "hi" " how are you?" ] [ "hi how are you?" [ [ get-char blank? ] take-until take-rest ] string-parse ] unit-test +[ "foo" ";bar" ] [ "foo;bar" [ CHAR: ; take-char take-rest ] string-parse ] unit-test +[ "foo " " bar" ] [ "foo and bar" [ "and" take-string take-rest ] string-parse ] unit-test +[ "baz" ] [ " \n\t baz" [ pass-blank take-rest ] string-parse ] unit-test diff --git a/extra/state-parser/state-parser.factor b/extra/state-parser/state-parser.factor index 6a3bf1d552..96ad4ca0b4 100644 --- a/extra/state-parser/state-parser.factor +++ b/extra/state-parser/state-parser.factor @@ -99,7 +99,7 @@ SYMBOL: prolog-data dup slip swap dup [ get-char , ] unless ] skip-until ] "" make nip ; inline -: rest ( -- string ) +: take-rest ( -- string ) [ f ] take-until ; : take-char ( ch -- string ) From 93aa8669c40abf2c6265dcc372885ea48ba962b7 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 18:44:51 -0500 Subject: [PATCH 094/270] fix load error --- extra/db/sql/sql.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/db/sql/sql.factor b/extra/db/sql/sql.factor index 4561424a9d..184c45f8b1 100755 --- a/extra/db/sql/sql.factor +++ b/extra/db/sql/sql.factor @@ -1,4 +1,4 @@ -USING: kernel parser quotations classes.tuple words +USING: kernel parser quotations classes.tuple words math.order namespaces.lib namespaces sequences arrays combinators prettyprint strings math.parser sequences.lib math symbols ; USE: tools.walker From 550b83278a10b9123a6577d96a759b74e0b724ad Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 18:45:03 -0500 Subject: [PATCH 095/270] fix unit test --- core/strings/strings-tests.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/strings/strings-tests.factor b/core/strings/strings-tests.factor index 6d01e19585..44e1d8859f 100755 --- a/core/strings/strings-tests.factor +++ b/core/strings/strings-tests.factor @@ -31,8 +31,8 @@ IN: strings.tests [ t ] [ "abc" "abd" before? ] unit-test [ t ] [ "z" "abd" after? ] unit-test -[ t ] [ "abc" "abd" min ] unit-test -[ t ] [ "z" "abd" max ] unit-test +[ "abc" ] [ "abc" "abd" min ] unit-test +[ "z" ] [ "z" "abd" max ] unit-test [ 0 10 "hello" subseq ] must-fail From 6ee115901a99d6c5a4325dcdd7bde48e5ef501f0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 26 Apr 2008 18:55:26 -0500 Subject: [PATCH 096/270] Better error message --- core/parser/parser.factor | 5 +++++ core/syntax/syntax.factor | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 961fa89d8f..55dd8220db 100755 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -345,6 +345,11 @@ M: invalid-slot-name summary [ >r tuple parse-tuple-slots r> prefix ] } case 3dup check-slot-shadowing ; +ERROR: not-in-a-method-error ; + +M: not-in-a-method-error summary + drop "call-next-method can only be called in a method definition" ; + ERROR: staging-violation word ; M: staging-violation summary diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor index 566f5471f4..b2f063ddf1 100755 --- a/core/syntax/syntax.factor +++ b/core/syntax/syntax.factor @@ -189,8 +189,12 @@ IN: bootstrap.syntax ] define-syntax "call-next-method" [ - current-class get literalize parsed - current-generic get literalize parsed - \ (call-next-method) parsed + current-class get current-generic get + 2dup [ word? ] both? [ + [ literalize parsed ] bi@ + \ (call-next-method) parsed + ] [ + not-in-a-method-error + ] if ] define-syntax ] with-compilation-unit From 7d16edcc79642d90bad7ed49362d114d854b69c2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 26 Apr 2008 18:56:51 -0500 Subject: [PATCH 097/270] Merge URL and cookie session managers, clean up some code --- extra/http/http-tests.factor | 4 +- extra/http/server/auth/auth.factor | 12 ++- extra/http/server/auth/basic/basic.factor | 4 +- extra/http/server/auth/login/login.factor | 11 +-- .../server/boilerplate/boilerplate.factor | 6 +- extra/http/server/db/db.factor | 6 +- extra/http/server/flows/flows.factor | 6 +- extra/http/server/server-tests.factor | 2 + extra/http/server/server.factor | 5 + .../server/sessions/sessions-tests.factor | 41 ++------ extra/http/server/sessions/sessions.factor | 93 +++++++------------ extra/webapps/pastebin/pastebin.factor | 5 +- extra/webapps/todo/todo.factor | 1 + 13 files changed, 80 insertions(+), 116 deletions(-) diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 553b4f2cda..a9e539c2a5 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -194,7 +194,7 @@ test-db [ - + sessions-in-db >>sessions "" add-responder add-quit-action @@ -225,7 +225,7 @@ test-db [ [ "text/plain" [ "Hi" write ] >>body ] >>display - + sessions-in-db >>sessions "" add-responder add-quit-action diff --git a/extra/http/server/auth/auth.factor b/extra/http/server/auth/auth.factor index 69a3c76c2b..6b5a426102 100755 --- a/extra/http/server/auth/auth.factor +++ b/extra/http/server/auth/auth.factor @@ -1,7 +1,9 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: http.server.sessions accessors -http.server.auth.providers assocs namespaces kernel ; +USING: accessors assocs namespaces kernel +http.server +http.server.sessions +http.server.auth.providers ; IN: http.server.auth SYMBOL: logged-in-user @@ -11,6 +13,12 @@ GENERIC: init-user-profile ( responder -- ) M: object init-user-profile drop ; +M: dispatcher init-user-profile + default>> init-user-profile ; + +M: filter-responder init-user-profile + responder>> init-user-profile ; + : uid ( -- string ) logged-in-user sget username>> ; : profile ( -- assoc ) logged-in-user sget profile>> ; diff --git a/extra/http/server/auth/basic/basic.factor b/extra/http/server/auth/basic/basic.factor index 04c0e62d07..62625e116b 100755 --- a/extra/http/server/auth/basic/basic.factor +++ b/extra/http/server/auth/basic/basic.factor @@ -6,7 +6,7 @@ http.server.auth.providers http.server.auth.providers.null http sequences ; IN: http.server.auth.basic -TUPLE: basic-auth responder realm provider ; +TUPLE: basic-auth < filter-responder realm provider ; C: basic-auth @@ -38,4 +38,4 @@ C: basic-auth M: basic-auth call-responder ( request path responder -- response ) pick over logged-in? - [ responder>> call-responder ] [ 2nip realm>> <401> ] if ; + [ call-next-method ] [ 2nip realm>> <401> ] if ; diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 413e0a3cf4..5f58f51adb 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -138,7 +138,7 @@ SYMBOL: user-exists? successful-login - login get default>> responder>> init-user-profile + login get init-user-profile ] >>submit ] ; @@ -177,7 +177,8 @@ SYMBOL: user-exists? logged-in-user sget - "password" value empty? [ + { "password" "new-password" "verify-password" } + [ value empty? ] all? [ same-password-twice "password" value uid users check-login @@ -335,12 +336,10 @@ SYMBOL: lost-password-from ! ! ! Authentication logic -TUPLE: protected responder ; +TUPLE: protected < filter-responder ; C: protected -M: protected init-session* responder>> init-session* ; - : show-login-page ( -- response ) begin-flow "$login/login" f ; @@ -348,7 +347,7 @@ M: protected init-session* responder>> init-session* ; M: protected call-responder ( path responder -- response ) logged-in-user sget dup [ save-user-after - responder>> call-responder + call-next-method ] [ 3drop request get method>> { "GET" "HEAD" } member? diff --git a/extra/http/server/boilerplate/boilerplate.factor b/extra/http/server/boilerplate/boilerplate.factor index bfa79e1a4e..fbe027cc05 100644 --- a/extra/http/server/boilerplate/boilerplate.factor +++ b/extra/http/server/boilerplate/boilerplate.factor @@ -9,12 +9,10 @@ http.server.sessions http.server.templating ; IN: http.server.boilerplate -TUPLE: boilerplate responder template ; +TUPLE: boilerplate < filter-responder template ; : f boilerplate boa ; -M: boilerplate init-session* responder>> init-session* ; - SYMBOL: title : set-title ( string -- ) @@ -71,7 +69,7 @@ M: f call-template* drop call-next-template ; ] with-scope ; inline M: boilerplate call-responder - tuck responder>> call-responder + tuck call-next-method dup "content-type" header "text/html" = [ clone swap template>> [ [ with-boilerplate ] 2curry ] curry change-body diff --git a/extra/http/server/db/db.factor b/extra/http/server/db/db.factor index 0e08705fa8..221608fc91 100755 --- a/extra/http/server/db/db.factor +++ b/extra/http/server/db/db.factor @@ -4,9 +4,7 @@ USING: db http.server http.server.sessions kernel accessors continuations namespaces destructors ; IN: http.server.db -TUPLE: db-persistence responder db params ; - -M: db-persistence init-session* responder>> init-session* ; +TUPLE: db-persistence < filter-responder db params ; C: db-persistence @@ -15,4 +13,4 @@ C: db-persistence [ db set ] [ add-always-destructor ] bi ; M: db-persistence call-responder - [ connect-db ] [ responder>> call-responder ] bi ; + [ connect-db ] [ call-next-method ] bi ; diff --git a/extra/http/server/flows/flows.factor b/extra/http/server/flows/flows.factor index f6e8d051ce..14ac1d8d79 100644 --- a/extra/http/server/flows/flows.factor +++ b/extra/http/server/flows/flows.factor @@ -5,7 +5,7 @@ assocs assocs.lib hashtables math.parser html.elements http http.server http.server.sessions ; IN: http.server.flows -TUPLE: flows responder ; +TUPLE: flows < filter-responder ; C: flows @@ -43,8 +43,8 @@ M: flows call-responder [ add-flow-id ] add-link-hook [ flow-form-field ] add-form-hook flow-id-key request-params at flow-id set - responder>> call-responder ; + call-next-method ; M: flows init-session* H{ } clone flows sset - responder>> init-session* ; + call-next-method ; diff --git a/extra/http/server/server-tests.factor b/extra/http/server/server-tests.factor index 84e873d001..2048164884 100755 --- a/extra/http/server/server-tests.factor +++ b/extra/http/server/server-tests.factor @@ -11,6 +11,8 @@ IN: http.server.tests { { "a" "b" } } >>query request set + [ ] link-hook set + [ "http://www.apple.com:80/xxx/bar?a=b" ] [ f f derive-url ] unit-test [ "http://www.apple.com:80/xxx/baz?a=b" ] [ "baz" f derive-url ] unit-test [ "http://www.apple.com:80/xxx/baz?c=d" ] [ "baz" { { "c" "d" } } derive-url ] unit-test diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index e51cb70de5..13ed36ec65 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -181,6 +181,11 @@ M: vhost-dispatcher call-responder ( path dispatcher -- response ) [ drop "" add-responder drop ] [ 2drop ] 3tri ; +TUPLE: filter-responder responder ; + +M: filter-responder call-responder + responder>> call-responder ; + SYMBOL: main-responder main-responder global diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index 85adf7e69f..4ff26c3a8f 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -32,7 +32,7 @@ M: foo call-responder [ write-response-body drop ] with-string-writer ] with-destructors ; -: cookie-responder-mock-test +: session-manager-mock-test [ "GET" >>method @@ -58,9 +58,6 @@ M: foo call-responder [ empty-session 123 >>id session set - session-changed? off - - [ H{ { "factorsessid" 123 } } ] [ H{ } add-session-id ] unit-test [ ] [ 3 "x" sset ] unit-test @@ -70,14 +67,11 @@ M: foo call-responder [ 4 ] [ "x" sget sq ] unit-test - [ t ] [ session-changed? get ] unit-test + [ t ] [ session get changed?>> ] unit-test ] with-scope - [ t ] [ f url-sessions? ] unit-test - [ t ] [ f cookie-sessions? ] unit-test - [ ] [ - + sessions-in-db >>sessions session-manager set ] unit-test @@ -113,26 +107,7 @@ M: foo call-responder ] unit-test [ ] [ - [ - - "GET" >>method - request set - { "etc" } session-manager get call-responder - ] with-destructors - response set - ] unit-test - - [ 307 ] [ response get code>> ] unit-test - - [ ] [ response get "location" header "=" split1 nip "id" set ] unit-test - - [ "1" ] [ url-responder-mock-test ] unit-test - [ "2" ] [ url-responder-mock-test ] unit-test - [ "3" ] [ url-responder-mock-test ] unit-test - [ "4" ] [ url-responder-mock-test ] unit-test - - [ ] [ - + sessions-in-db >>sessions session-manager set ] unit-test @@ -150,9 +125,9 @@ M: foo call-responder [ ] [ response get cookies>> "cookies" set ] unit-test - [ "2" ] [ cookie-responder-mock-test ] unit-test - [ "3" ] [ cookie-responder-mock-test ] unit-test - [ "4" ] [ cookie-responder-mock-test ] unit-test + [ "2" ] [ session-manager-mock-test ] unit-test + [ "3" ] [ session-manager-mock-test ] unit-test + [ "4" ] [ session-manager-mock-test ] unit-test [ [ ] [ @@ -163,7 +138,7 @@ M: foo call-responder request set [ - { } + { } sessions-in-db >>sessions call-responder ] with-destructors response set diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor index 96d1c3beca..d2c1d90e0a 100755 --- a/extra/http/server/sessions/sessions.factor +++ b/extra/http/server/sessions/sessions.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: assocs kernel math.parser namespaces random accessors quotations hashtables sequences continuations -fry calendar destructors +fry calendar combinators destructors http http.server http.server.sessions.storage @@ -22,12 +22,12 @@ M: object init-session* drop ; M: dispatcher init-session* default>> init-session* ; -TUPLE: session-manager responder sessions ; +M: filter-responder init-session* responder>> init-session* ; -: new-session-manager ( responder class -- responder' ) - new - null-sessions >>sessions - swap >>responder ; inline +TUPLE: session-manager < filter-responder sessions ; + +: ( responder -- responder' ) + null-sessions session-manager boa ; : (session-changed) ( session -- ) t >>changed? drop ; @@ -49,8 +49,6 @@ TUPLE: session-manager responder sessions ; : sessions session-manager get sessions>> ; -: managed-responder session-manager get responder>> ; - : init-session ( session managed -- ) >r session r> '[ , init-session* ] with-variable ; @@ -69,7 +67,7 @@ TUPLE: session-manager responder sessions ; : begin-session ( responder -- session ) >r empty-session r> - [ responder>> init-session ] + [ init-session ] [ sessions>> new-session ] [ drop ] 2tri ; @@ -87,23 +85,37 @@ M: session-saver dispose : save-session-after ( session -- ) add-always-destructor ; -: call-responder/session ( path responder session -- response ) - [ save-session-after ] [ session set ] bi +: existing-session ( path responder session -- response ) + [ session set ] [ save-session-after ] bi [ session-manager set ] [ responder>> call-responder ] bi ; -TUPLE: url-sessions < session-manager ; - -: ( responder -- responder' ) - url-sessions new-session-manager ; - : session-id-key "factorsessid" ; -: current-url-session ( responder -- session/f ) - >r request-params session-id-key swap at string>number - r> sessions>> get-session ; +: cookie-session-id ( -- id/f ) + request get session-id-key get-cookie + dup [ value>> string>number ] when ; -: add-session-id ( query -- query' ) - session get [ id>> session-id-key associate assoc-union ] when* ; +: post-session-id ( -- id/f ) + session-id-key request get post-data>> at string>number ; + +: request-session-id ( -- id/f ) + request get method>> { + { "GET" [ cookie-session-id ] } + { "HEAD" [ cookie-session-id ] } + { "POST" [ post-session-id ] } + } case ; + +: request-session ( responder -- session/f ) + >r request-session-id r> sessions>> get-session ; + +: ( id -- cookie ) + session-id-key ; + +: new-session ( path responder -- response ) + dup begin-session + [ existing-session ] + [ id>> number>string ] bi + put-cookie ; : session-form-field ( -- ) > number>string =value input/> ; -: new-url-session ( path responder -- response ) - [ drop f ] [ begin-session id>> session-id-key associate ] bi* - ; - -M: url-sessions call-responder ( path responder -- response ) - [ add-session-id ] add-link-hook +M: session-manager call-responder ( path responder -- response ) [ session-form-field ] add-form-hook - dup current-url-session [ - call-responder/session - ] [ - new-url-session - ] if* ; - -TUPLE: cookie-sessions < session-manager ; - -: ( responder -- responder' ) - cookie-sessions new-session-manager ; - -: current-cookie-session ( responder -- session/f ) - request get session-id-key get-cookie dup - [ value>> string>number swap sessions>> get-session ] - [ 2drop f ] if ; - -: ( id -- cookie ) - session-id-key ; - -: call-responder/new-session ( path responder -- response ) - dup begin-session - [ call-responder/session ] - [ id>> number>string ] bi - put-cookie ; - -M: cookie-sessions call-responder ( path responder -- response ) - dup current-cookie-session [ - call-responder/session - ] [ - call-responder/new-session - ] if* ; + dup request-session [ existing-session ] [ new-session ] if* ; diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor index 4fa8f55ca8..07b3e9c02d 100644 --- a/extra/webapps/pastebin/pastebin.factor +++ b/extra/webapps/pastebin/pastebin.factor @@ -8,6 +8,7 @@ http.server.actions http.server.components http.server.components.code http.server.templating.chloe +http.server.auth.login http.server.boilerplate http.server.validators http.server.forms ; @@ -240,8 +241,8 @@ TUPLE: pastebin < dispatcher ; "list" add-main-responder "feed.xml" add-responder [ ] "view-paste" add-responder - [ ] "$pastebin/list" "delete-paste" add-responder - [ ] "$pastebin/view-paste" "delete-annotation" add-responder + [ ] "$pastebin/list" "delete-paste" add-responder + [ ] "$pastebin/view-paste" "delete-annotation" add-responder [ ] "$pastebin/view-paste" add-responder [ now >>date ] "$pastebin/view-paste" "new-paste" add-responder [ now >>date ] "$pastebin/view-paste" "annotate" add-responder diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index bb4a4b9cd2..5c60b37f82 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -70,4 +70,5 @@ TUPLE: todo-list < dispatcher ; ctor "$todo-list/list" "delete" add-responder "todo" todo-template >>template + ] ; From 081d71727a7592c52b8adfbcaef90c6d74555c5e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 26 Apr 2008 23:41:18 -0500 Subject: [PATCH 098/270] fix load error --- extra/state-parser/state-parser-docs.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/state-parser/state-parser-docs.factor b/extra/state-parser/state-parser-docs.factor index 7ef2869452..cac0e30175 100644 --- a/extra/state-parser/state-parser-docs.factor +++ b/extra/state-parser/state-parser-docs.factor @@ -13,7 +13,7 @@ ARTICLE: { "state-parser" "main" } "State-based parsing" { $subsection next } { $subsection state-parse } { $subsection get-char } - { $subsection rest } + { $subsection take-rest } { $subsection string-parse } { $subsection expect } { $subsection expect-string } @@ -23,7 +23,7 @@ HELP: get-char { $values { "char" "the current character" } } { $description "Accesses the current character of the stream that is being parsed" } ; -HELP: rest +HELP: take-rest { $values { "string" "the rest of the parser input" } } { $description "Exausts the stream of the parser input and returns a string representing the rest of the input" } ; From 6980050a83685bc3b50cad71da21c63105f0a1b3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 01:46:38 -0500 Subject: [PATCH 099/270] Add MEMO:: --- extra/locals/locals.factor | 4 +++- extra/memoize/memoize.factor | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/extra/locals/locals.factor b/extra/locals/locals.factor index be73f1db88..068f5d9a36 100755 --- a/extra/locals/locals.factor +++ b/extra/locals/locals.factor @@ -5,7 +5,7 @@ inference.transforms parser words quotations debugger macros arrays macros splitting combinators prettyprint.backend definitions prettyprint hashtables prettyprint.sections sets sequences.private effects generic compiler.units accessors -locals.backend ; +locals.backend memoize ; IN: locals ! Inspired by @@ -298,6 +298,8 @@ MACRO: with-locals ( form -- quot ) lambda-rewrite ; : MACRO:: (::) define-macro ; parsing +: MEMO:: (::) define-memoized ; parsing + Date: Sun, 27 Apr 2008 01:49:05 -0500 Subject: [PATCH 100/270] Documentation for MEMO:: --- extra/locals/locals-docs.factor | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/extra/locals/locals-docs.factor b/extra/locals/locals-docs.factor index 372a567550..a022b92a88 100644 --- a/extra/locals/locals-docs.factor +++ b/extra/locals/locals-docs.factor @@ -1,4 +1,5 @@ -USING: help.syntax help.markup kernel macros prettyprint ; +USING: help.syntax help.markup kernel macros prettyprint +memoize ; IN: locals Date: Sun, 27 Apr 2008 03:09:00 -0500 Subject: [PATCH 101/270] Improved cookie support, and better session manager taking advantage of it --- extra/calendar/format/format-tests.factor | 7 + extra/calendar/format/format.factor | 186 +++++++++++------- .../format/macros/macros-tests.factor | 14 ++ extra/calendar/format/macros/macros.factor | 19 ++ extra/http/http-tests.factor | 2 +- extra/http/http.factor | 18 +- .../http/server/actions/actions-tests.factor | 1 + extra/http/server/actions/actions.factor | 17 +- extra/http/server/auth/basic/basic.factor | 2 +- extra/http/server/auth/login/edit-profile.xml | 18 +- extra/http/server/auth/login/login.factor | 12 +- extra/http/server/auth/login/login.xml | 12 +- extra/http/server/auth/login/recover-1.xml | 8 +- extra/http/server/auth/login/recover-3.xml | 12 +- extra/http/server/auth/login/recover-4.xml | 2 +- extra/http/server/auth/login/register.xml | 18 +- .../server/boilerplate/boilerplate.factor | 2 +- extra/http/server/callbacks/callbacks.factor | 2 +- extra/http/server/crud/crud.factor | 4 +- extra/http/server/db/db.factor | 2 +- extra/http/server/flows/flows.factor | 22 ++- extra/http/server/server-tests.factor | 6 +- extra/http/server/server.factor | 35 ++-- .../server/sessions/sessions-tests.factor | 15 +- extra/http/server/sessions/sessions.factor | 54 ++--- .../http/server/sessions/storage/db/db.factor | 4 +- extra/http/server/static/static.factor | 4 +- .../http/server/templating/chloe/chloe.factor | 44 +++-- .../factor-website/factor-website.factor | 2 +- extra/webapps/factor-website/page.xml | 2 +- extra/webapps/pastebin/annotation.xml | 16 +- extra/webapps/pastebin/new-annotation.xml | 14 +- extra/webapps/pastebin/new-paste.xml | 12 +- extra/webapps/pastebin/paste-list.xml | 2 +- extra/webapps/pastebin/paste-summary.xml | 6 +- extra/webapps/pastebin/paste.xml | 20 +- extra/webapps/pastebin/pastebin.factor | 2 +- extra/webapps/pastebin/pastebin.xml | 27 +-- extra/webapps/planet/admin.xml | 6 +- extra/webapps/planet/blog-admin-link.xml | 2 +- extra/webapps/planet/edit-blog.xml | 14 +- extra/webapps/planet/entry-summary.xml | 4 +- extra/webapps/planet/entry.xml | 6 +- extra/webapps/planet/planet.factor | 5 +- extra/webapps/planet/planet.xml | 22 +-- extra/webapps/planet/postings-summary.xml | 2 +- extra/webapps/planet/postings.xml | 4 +- extra/webapps/todo/todo-list.xml | 2 +- extra/webapps/todo/todo-summary.xml | 8 +- extra/webapps/todo/todo.xml | 10 +- extra/webapps/todo/view-todo.xml | 8 +- 51 files changed, 441 insertions(+), 297 deletions(-) create mode 100644 extra/calendar/format/macros/macros-tests.factor create mode 100644 extra/calendar/format/macros/macros.factor diff --git a/extra/calendar/format/format-tests.factor b/extra/calendar/format/format-tests.factor index 1ba892bef3..0d072f27f6 100755 --- a/extra/calendar/format/format-tests.factor +++ b/extra/calendar/format/format-tests.factor @@ -43,3 +43,10 @@ IN: calendar.format.tests ] unit-test [ t ] [ now dup timestamp>rfc822 rfc822>timestamp time- 1 seconds before? ] unit-test + +[ t ] [ now dup timestamp>cookie-string cookie-string>timestamp time- 1 seconds before? ] unit-test + +[ "Sun, 4 May 2008 07:00:00" ] [ + "Sun May 04 07:00:00 2008 GMT" cookie-string>timestamp + timestamp>string +] unit-test diff --git a/extra/calendar/format/format.factor b/extra/calendar/format/format.factor index 7bdaea70b5..af536c2585 100755 --- a/extra/calendar/format/format.factor +++ b/extra/calendar/format/format.factor @@ -1,8 +1,50 @@ -USING: math math.parser kernel sequences io calendar +USING: math math.parser kernel sequences io accessors arrays io.streams.string splitting -combinators accessors debugger ; +combinators accessors debugger +calendar calendar.format.macros ; IN: calendar.format +: pad-00 number>string 2 CHAR: 0 pad-left ; + +: pad-0000 number>string 4 CHAR: 0 pad-left ; + +: pad-00000 number>string 5 CHAR: 0 pad-left ; + +: write-00 pad-00 write ; + +: write-0000 pad-0000 write ; + +: write-00000 pad-00000 write ; + +: hh hour>> write-00 ; + +: mm minute>> write-00 ; + +: ss second>> >integer write-00 ; + +: D day>> number>string write ; + +: DD day>> write-00 ; + +: DAY day-of-week day-abbreviations3 nth write ; + +: MM month>> write-00 ; + +: MONTH month>> month-abbreviations nth write ; + +: YYYY year>> write-0000 ; + +: YYYYY year>> write-00000 ; + +: expect ( str -- ) + read1 swap member? [ "Parse error" throw ] unless ; + +: read-00 2 read string>number ; + +: read-000 3 read string>number ; + +: read-0000 4 read string>number ; + GENERIC: day. ( obj -- ) M: integer day. ( n -- ) @@ -25,7 +67,7 @@ M: array month. ( pair -- ) ] with each nl ; M: timestamp month. ( timestamp -- ) - { year>> month>> } get-slots 2array month. ; + [ year>> ] [ month>> ] bi 2array month. ; GENERIC: year. ( obj -- ) @@ -35,28 +77,14 @@ M: integer year. ( n -- ) M: timestamp year. ( timestamp -- ) year>> year. ; -: pad-00 number>string 2 CHAR: 0 pad-left ; - -: pad-0000 number>string 4 CHAR: 0 pad-left ; - -: write-00 pad-00 write ; - -: write-0000 pad-0000 write ; - : (timestamp>string) ( timestamp -- ) - dup day-of-week day-abbreviations3 nth write ", " write - dup day>> number>string write bl - dup month>> month-abbreviations nth write bl - dup year>> number>string write bl - dup hour>> write-00 ":" write - dup minute>> write-00 ":" write - second>> >integer write-00 ; + { DAY ", " D " " MONTH " " YYYY " " hh ":" mm ":" ss } formatted ; : timestamp>string ( timestamp -- str ) [ (timestamp>string) ] with-string-writer ; : (write-gmt-offset) ( duration -- ) - [ hour>> write-00 ] [ minute>> write-00 ] bi ; + [ hh ] [ mm ] bi ; : write-gmt-offset ( gmt-offset -- ) dup instant <=> sgn { @@ -69,9 +97,9 @@ M: timestamp year. ( timestamp -- ) #! RFC822 timestamp format #! Example: Tue, 15 Nov 1994 08:12:31 +0200 [ - dup (timestamp>string) - " " write - gmt-offset>> write-gmt-offset + [ (timestamp>string) " " write ] + [ gmt-offset>> write-gmt-offset ] + bi ] with-string-writer ; : timestamp>http-string ( timestamp -- str ) @@ -79,40 +107,32 @@ M: timestamp year. ( timestamp -- ) #! Example: Tue, 15 Nov 1994 08:12:31 GMT >gmt timestamp>rfc822 ; +: (timestamp>cookie-string) ( timestamp -- ) + >gmt + { DAY ", " DD "-" MONTH "-" YYYY " " hh ":" mm ":" ss " GMT" } formatted ; + +: timestamp>cookie-string ( timestamp -- str ) + [ (timestamp>cookie-string) ] with-string-writer ; + : (write-rfc3339-gmt-offset) ( duration -- ) - [ hour>> write-00 CHAR: : write1 ] - [ minute>> write-00 ] bi ; + [ hh ":" write ] [ mm ] bi ; : write-rfc3339-gmt-offset ( duration -- ) dup instant <=> sgn { { 0 [ drop "Z" write ] } - { -1 [ CHAR: - write1 before (write-rfc3339-gmt-offset) ] } - { 1 [ CHAR: + write1 (write-rfc3339-gmt-offset) ] } + { -1 [ "-" write before (write-rfc3339-gmt-offset) ] } + { 1 [ "+" write (write-rfc3339-gmt-offset) ] } } case ; : (timestamp>rfc3339) ( timestamp -- ) { - [ year>> number>string write CHAR: - write1 ] - [ month>> write-00 CHAR: - write1 ] - [ day>> write-00 CHAR: T write1 ] - [ hour>> write-00 CHAR: : write1 ] - [ minute>> write-00 CHAR: : write1 ] - [ second>> >fixnum write-00 ] + YYYY "-" MM "-" DD "T" hh ":" mm ":" ss [ gmt-offset>> write-rfc3339-gmt-offset ] - } cleave ; + } formatted ; : timestamp>rfc3339 ( timestamp -- str ) [ (timestamp>rfc3339) ] with-string-writer ; -: expect ( str -- ) - read1 swap member? [ "Parse error" throw ] unless ; - -: read-00 2 read string>number ; - -: read-000 3 read string>number ; - -: read-0000 4 read string>number ; - : signed-gmt-offset ( dt ch -- dt' ) { { CHAR: + [ 1 ] } { CHAR: - [ -1 ] } } case time* ; @@ -142,17 +162,18 @@ M: timestamp year. ( timestamp -- ) : rfc3339>timestamp ( str -- timestamp ) [ (rfc3339>timestamp) ] with-string-reader ; -ERROR: invalid-rfc822-date ; +ERROR: invalid-timestamp-format ; -: check-rfc822-date ( obj/f -- obj ) [ invalid-rfc822-date ] unless* ; +: check-timestamp ( obj/f -- obj ) + [ invalid-timestamp-format ] unless* ; : read-token ( seps -- token ) - [ read-until ] keep member? check-rfc822-date drop ; + [ read-until ] keep member? check-timestamp drop ; : read-sp ( -- token ) " " read-token ; : checked-number ( str -- n ) - string>number check-rfc822-date ; + string>number check-timestamp ; : parse-rfc822-gmt-offset ( string -- dt ) dup "GMT" = [ drop instant ] [ @@ -163,10 +184,10 @@ ERROR: invalid-rfc822-date ; : (rfc822>timestamp) ( -- timestamp ) timestamp new - "," read-token day-abbreviations3 member? check-rfc822-date drop + "," read-token day-abbreviations3 member? check-timestamp drop read1 CHAR: \s assert= read-sp checked-number >>day - read-sp month-abbreviations index check-rfc822-date >>month + read-sp month-abbreviations index check-timestamp >>month read-sp checked-number >>year ":" read-token checked-number >>hour ":" read-token checked-number >>minute @@ -176,6 +197,42 @@ ERROR: invalid-rfc822-date ; : rfc822>timestamp ( str -- timestamp ) [ (rfc822>timestamp) ] with-string-reader ; +: (cookie-string>timestamp-1) ( -- timestamp ) + timestamp new + "," read-token day-abbreviations3 member? check-timestamp drop + read1 CHAR: \s assert= + "-" read-token checked-number >>day + "-" read-token month-abbreviations index check-timestamp >>month + read-sp checked-number >>year + ":" read-token checked-number >>hour + ":" read-token checked-number >>minute + " " read-token checked-number >>second + readln parse-rfc822-gmt-offset >>gmt-offset ; + +: cookie-string>timestamp-1 ( str -- timestamp ) + [ (cookie-string>timestamp-1) ] with-string-reader ; + +: (cookie-string>timestamp-2) ( -- timestamp ) + timestamp new + read-sp day-abbreviations3 member? check-timestamp drop + read-sp month-abbreviations index check-timestamp >>month + read-sp checked-number >>day + ":" read-token checked-number >>hour + ":" read-token checked-number >>minute + " " read-token checked-number >>second + read-sp checked-number >>year + readln parse-rfc822-gmt-offset >>gmt-offset ; + +: cookie-string>timestamp-2 ( str -- timestamp ) + [ (cookie-string>timestamp-2) ] with-string-reader ; + +: cookie-string>timestamp ( str -- timestamp ) + { + [ cookie-string>timestamp-1 ] + [ cookie-string>timestamp-2 ] + [ rfc822>timestamp ] + } attempt-all-quots ; + : (ymdhms>timestamp) ( -- timestamp ) read-ymd " " expect read-hms instant ; @@ -195,41 +252,30 @@ ERROR: invalid-rfc822-date ; [ (ymd>timestamp) ] with-string-reader ; : (timestamp>ymd) ( timestamp -- ) - dup timestamp-year write-0000 - "-" write - dup timestamp-month write-00 - "-" write - timestamp-day write-00 ; + { YYYY "-" MM "-" DD } formatted ; : timestamp>ymd ( timestamp -- str ) [ (timestamp>ymd) ] with-string-writer ; : (timestamp>hms) - dup timestamp-hour write-00 - ":" write - dup timestamp-minute write-00 - ":" write - timestamp-second >integer write-00 ; + { hh ":" mm ":" ss } formatted ; : timestamp>hms ( timestamp -- str ) [ (timestamp>hms) ] with-string-writer ; : timestamp>ymdhms ( timestamp -- str ) - >gmt [ - dup (timestamp>ymd) - " " write - (timestamp>hms) + >gmt + { (timestamp>ymd) " " (timestamp>hms) } formatted ] with-string-writer ; : file-time-string ( timestamp -- string ) [ - [ month>> month-abbreviations nth write ] keep bl - [ day>> number>string 2 32 pad-left write ] keep bl - dup now [ year>> ] bi@ = [ - [ hour>> write-00 ] keep ":" write - minute>> write-00 - ] [ - year>> number>string 5 32 pad-left write - ] if + { + MONTH " " DD " " + [ + dup now [ year>> ] bi@ = + [ [ hh ":" write ] [ mm ] bi ] [ YYYYY ] if + ] + } formatted ] with-string-writer ; diff --git a/extra/calendar/format/macros/macros-tests.factor b/extra/calendar/format/macros/macros-tests.factor new file mode 100644 index 0000000000..91a8f80894 --- /dev/null +++ b/extra/calendar/format/macros/macros-tests.factor @@ -0,0 +1,14 @@ +USING: tools.test kernel ; +IN: calendar.format.macros + +[ 2 ] [ { [ 2 ] } attempt-all-quots ] unit-test + +[ 2 ] [ { [ 1 throw ] [ 2 ] } attempt-all-quots ] unit-test + +[ { [ 1 throw ] } attempt-all-quots ] [ 1 = ] must-fail-with + +: compiled-test-1 { [ 1 throw ] [ 2 ] } attempt-all-quots ; + +\ compiled-test-1 must-infer + +[ 2 ] [ compiled-test-1 ] unit-test diff --git a/extra/calendar/format/macros/macros.factor b/extra/calendar/format/macros/macros.factor new file mode 100644 index 0000000000..6d6dd3ae23 --- /dev/null +++ b/extra/calendar/format/macros/macros.factor @@ -0,0 +1,19 @@ +USING: macros kernel words quotations io sequences combinators +continuations ; +IN: calendar.format.macros + +MACRO: formatted ( spec -- ) + [ + { + { [ dup word? ] [ 1quotation ] } + { [ dup quotation? ] [ ] } + [ [ nip write ] curry [ ] like ] + } cond + ] map [ cleave ] curry ; + +MACRO: attempt-all-quots ( quots -- ) + dup length 1 = [ first ] [ + unclip swap + [ nip attempt-all-quots ] curry + [ recover ] 2curry + ] if ; diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index a9e539c2a5..e624f56573 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -158,7 +158,7 @@ test-db [ "extra/http/test" resource-path >>default "nested" add-responder - [ "redirect-loop" f ] >>display + [ "redirect-loop" f ] >>display "redirect-loop" add-responder main-responder set diff --git a/extra/http/http.factor b/extra/http/http.factor index 3e81fccd24..99a48e58d8 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -135,11 +135,12 @@ IN: http ] { } assoc>map "&" join ; -TUPLE: cookie name value path domain expires http-only ; +TUPLE: cookie name value path domain expires max-age http-only ; : ( value name -- cookie ) cookie new - swap >>name swap >>value ; + swap >>name + swap >>value ; : parse-cookies ( string -- seq ) [ @@ -147,7 +148,8 @@ TUPLE: cookie name value path domain expires http-only ; ";" split [ [ blank? ] trim "=" split1 swap >lower { - { "expires" [ >>expires ] } + { "expires" [ cookie-string>timestamp >>expires ] } + { "max-age" [ string>number seconds ] } { "domain" [ >>domain ] } { "path" [ >>path ] } { "httponly" [ drop t >>http-only ] } @@ -163,7 +165,14 @@ TUPLE: cookie name value path domain expires http-only ; { { f [ drop ] } { t [ , ] } - [ "=" swap 3append , ] + [ + { + { [ dup timestamp? ] [ timestamp>cookie-string ] } + { [ dup duration? ] [ dt>seconds number>string ] } + [ ] + } cond + "=" swap 3append , + ] } case ; : unparse-cookie ( cookie -- strings ) @@ -172,6 +181,7 @@ TUPLE: cookie name value path domain expires http-only ; "path" over path>> (unparse-cookie) "domain" over domain>> (unparse-cookie) "expires" over expires>> (unparse-cookie) + "max-age" over max-age>> (unparse-cookie) "httponly" over http-only>> (unparse-cookie) drop ] { } make ; diff --git a/extra/http/server/actions/actions-tests.factor b/extra/http/server/actions/actions-tests.factor index 615077821a..5aa761603f 100755 --- a/extra/http/server/actions/actions-tests.factor +++ b/extra/http/server/actions/actions-tests.factor @@ -22,6 +22,7 @@ blah ; [ 25 ] [ + init-request action-request-test-1 lf>crlf [ read-request ] with-string-reader request set diff --git a/extra/http/server/actions/actions.factor b/extra/http/server/actions/actions.factor index bfcbd20cca..6e1aac9627 100755 --- a/extra/http/server/actions/actions.factor +++ b/extra/http/server/actions/actions.factor @@ -37,16 +37,19 @@ TUPLE: action init display submit get-params post-params ; : validation-failed ( -- * ) action get display>> call exit-with ; -M: action call-responder ( path action -- response ) +M: action call-responder* ( path action -- response ) '[ , [ CHAR: / = ] right-trim empty? [ , action set - request-params params set - request get method>> { - { "GET" [ handle-get ] } - { "HEAD" [ handle-get ] } - { "POST" [ handle-post ] } - } case + request get + [ request-params params set ] + [ + method>> { + { "GET" [ handle-get ] } + { "HEAD" [ handle-get ] } + { "POST" [ handle-post ] } + } case + ] bi ] [ <404> ] if diff --git a/extra/http/server/auth/basic/basic.factor b/extra/http/server/auth/basic/basic.factor index 62625e116b..daf6e30eae 100755 --- a/extra/http/server/auth/basic/basic.factor +++ b/extra/http/server/auth/basic/basic.factor @@ -36,6 +36,6 @@ C: basic-auth : logged-in? ( request responder -- ? ) provider>> swap "authorization" header authorization-ok? ; -M: basic-auth call-responder ( request path responder -- response ) +M: basic-auth call-responder* ( request path responder -- response ) pick over logged-in? [ call-next-method ] [ 2nip realm>> <401> ] if ; diff --git a/extra/http/server/auth/login/edit-profile.xml b/extra/http/server/auth/login/edit-profile.xml index 86a4e86551..c19b18c947 100644 --- a/extra/http/server/auth/login/edit-profile.xml +++ b/extra/http/server/auth/login/edit-profile.xml @@ -4,18 +4,18 @@ Edit Profile - + - + - + @@ -25,7 +25,7 @@ - + @@ -35,12 +35,12 @@ - + - + @@ -50,7 +50,7 @@ - + @@ -63,11 +63,11 @@

    - + invalid password - + passwords do not match

    diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 5f58f51adb..716996dc5a 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -331,7 +331,7 @@ SYMBOL: lost-password-from [ f logged-in-user sset - "$login/login" f + "$login/login" end-flow ] >>submit ; ! ! ! Authentication logic @@ -342,19 +342,17 @@ C: protected : show-login-page ( -- response ) begin-flow - "$login/login" f ; + "$login/login" f ; -M: protected call-responder ( path responder -- response ) +M: protected call-responder* ( path responder -- response ) logged-in-user sget dup [ save-user-after call-next-method ] [ - 3drop - request get method>> { "GET" "HEAD" } member? - [ show-login-page ] [ <400> ] if + 3drop show-login-page ] if ; -M: login call-responder ( path responder -- response ) +M: login call-responder* ( path responder -- response ) dup login set call-next-method ; diff --git a/extra/http/server/auth/login/login.xml b/extra/http/server/auth/login/login.xml index 2f16c09d8d..0524d0889f 100644 --- a/extra/http/server/auth/login/login.xml +++ b/extra/http/server/auth/login/login.xml @@ -4,18 +4,18 @@ Login - +
    User name:
    Real name:
    Current password:
    New password:
    Verify:
    E-mail:
    - + - +
    User name:
    Password:
    @@ -24,7 +24,7 @@ - + invalid username or password

    @@ -33,11 +33,11 @@

    - Register + Register | - Recover Password + Recover Password

    diff --git a/extra/http/server/auth/login/recover-1.xml b/extra/http/server/auth/login/recover-1.xml index dd3a60f1d1..7c72181c10 100644 --- a/extra/http/server/auth/login/recover-1.xml +++ b/extra/http/server/auth/login/recover-1.xml @@ -6,23 +6,23 @@

    Enter the username and e-mail address you used to register for this site, and you will receive a link for activating a new password.

    - + - + - + - + diff --git a/extra/http/server/auth/login/recover-3.xml b/extra/http/server/auth/login/recover-3.xml index 115c2cea21..61ef0aef86 100644 --- a/extra/http/server/auth/login/recover-3.xml +++ b/extra/http/server/auth/login/recover-3.xml @@ -6,21 +6,21 @@

    Choose a new password for your account.

    - +
    User name:
    E-mail:
    Captcha:
    - - + + - + - + @@ -33,7 +33,7 @@

    - + passwords do not match

    diff --git a/extra/http/server/auth/login/recover-4.xml b/extra/http/server/auth/login/recover-4.xml index 3c10869fbd..f5d02fa858 100755 --- a/extra/http/server/auth/login/recover-4.xml +++ b/extra/http/server/auth/login/recover-4.xml @@ -4,6 +4,6 @@ Recover lost password: step 4 of 4 -

    Your password has been reset. You may now log in.

    +

    Your password has been reset. You may now log in.

    diff --git a/extra/http/server/auth/login/register.xml b/extra/http/server/auth/login/register.xml index 1bacf71801..19917002b5 100644 --- a/extra/http/server/auth/login/register.xml +++ b/extra/http/server/auth/login/register.xml @@ -4,18 +4,18 @@ New User Registration - +
    Password:
    Verify password:
    - + - + @@ -25,12 +25,12 @@ - + - + @@ -40,7 +40,7 @@ - + @@ -50,7 +50,7 @@ - + @@ -64,11 +64,11 @@ - + username taken - + passwords do not match diff --git a/extra/http/server/boilerplate/boilerplate.factor b/extra/http/server/boilerplate/boilerplate.factor index fbe027cc05..1dc5effbe2 100644 --- a/extra/http/server/boilerplate/boilerplate.factor +++ b/extra/http/server/boilerplate/boilerplate.factor @@ -68,7 +68,7 @@ M: f call-template* drop call-next-template ; bi* ] with-scope ; inline -M: boilerplate call-responder +M: boilerplate call-responder* tuck call-next-method dup "content-type" header "text/html" = [ clone swap template>> diff --git a/extra/http/server/callbacks/callbacks.factor b/extra/http/server/callbacks/callbacks.factor index 42213d015f..5325ee3b55 100755 --- a/extra/http/server/callbacks/callbacks.factor +++ b/extra/http/server/callbacks/callbacks.factor @@ -96,7 +96,7 @@ SYMBOL: current-show : resuming-callback ( responder request -- id ) cont-id query-param swap callbacks>> at ; -M: callback-responder call-responder ( path responder -- response ) +M: callback-responder call-responder* ( path responder -- response ) '[ , , diff --git a/extra/http/server/crud/crud.factor b/extra/http/server/crud/crud.factor index 65de881adb..90af25df5b 100755 --- a/extra/http/server/crud/crud.factor +++ b/extra/http/server/crud/crud.factor @@ -18,7 +18,7 @@ IN: http.server.crud [ form view-form ] >>display ; : ( id next -- response ) - swap number>string "id" associate ; + swap number>string "id" associate ; :: ( form ctor next -- action ) @@ -53,7 +53,7 @@ IN: http.server.crud [ "id" get ctor call delete-tuple - next f + next f ] >>submit ; :: ( form ctor -- action ) diff --git a/extra/http/server/db/db.factor b/extra/http/server/db/db.factor index 221608fc91..047af3f4ac 100755 --- a/extra/http/server/db/db.factor +++ b/extra/http/server/db/db.factor @@ -12,5 +12,5 @@ C: db-persistence [ db>> ] [ params>> ] bi make-db db-open [ db set ] [ add-always-destructor ] bi ; -M: db-persistence call-responder +M: db-persistence call-responder* [ connect-db ] [ call-next-method ] bi ; diff --git a/extra/http/server/flows/flows.factor b/extra/http/server/flows/flows.factor index 14ac1d8d79..7a9b362111 100644 --- a/extra/http/server/flows/flows.factor +++ b/extra/http/server/flows/flows.factor @@ -10,12 +10,25 @@ TUPLE: flows < filter-responder ; C: flows : begin-flow* ( -- id ) - request get [ path>> ] [ query>> ] bi 2array + request get + [ path>> ] [ request-params ] [ method>> ] tri 3array flows sget set-at-unique session-changed ; +: end-flow-post ( path params -- response ) + request [ + clone + "POST" >>method + swap >>post-data + swap >>path + ] change + request get path>> split-path + flows get responder>> call-responder ; + : end-flow* ( default id -- response ) - flows sget at [ first2 ] [ f ] ?if ; + flows sget at + [ first3 "POST" = [ end-flow-post ] [ ] if ] + [ f ] ?if ; SYMBOL: flow-id @@ -39,10 +52,11 @@ SYMBOL: flow-id input/> ] when* ; -M: flows call-responder +M: flows call-responder* + dup flows set [ add-flow-id ] add-link-hook [ flow-form-field ] add-form-hook - flow-id-key request-params at flow-id set + flow-id-key request get request-params at flow-id set call-next-method ; M: flows init-session* diff --git a/extra/http/server/server-tests.factor b/extra/http/server/server-tests.factor index 2048164884..a5dffbc58b 100755 --- a/extra/http/server/server-tests.factor +++ b/extra/http/server/server-tests.factor @@ -27,7 +27,7 @@ TUPLE: mock-responder path ; C: mock-responder -M: mock-responder call-responder +M: mock-responder call-responder* nip path>> on "text/plain" ; @@ -81,7 +81,7 @@ TUPLE: path-check-responder ; C: path-check-responder -M: path-check-responder call-responder +M: path-check-responder call-responder* drop "text/plain" swap >array >>body ; @@ -121,7 +121,7 @@ TUPLE: base-path-check-responder ; C: base-path-check-responder -M: base-path-check-responder call-responder +M: base-path-check-responder call-responder* 2drop "$funny-dispatcher" resolve-base-path "text/plain" swap >>body ; diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index 13ed36ec65..6c128b3d83 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -9,10 +9,10 @@ IN: http.server ! path is a sequence of path component strings -GENERIC: call-responder ( path responder -- response ) +GENERIC: call-responder* ( path responder -- response ) -: request-params ( -- assoc ) - request get dup method>> { +: request-params ( request -- assoc ) + dup method>> { { "GET" [ query>> ] } { "HEAD" [ query>> ] } { "POST" [ post-data>> ] } @@ -28,7 +28,7 @@ TUPLE: trivial-responder response ; C: trivial-responder -M: trivial-responder call-responder nip response>> call ; +M: trivial-responder call-responder* nip response>> call ; : trivial-response-body ( code message -- ) @@ -67,6 +67,9 @@ SYMBOL: base-paths [ invert-slice ] [ class word-name ] bi* base-paths get set-at ; +: call-responder ( path responder -- response ) + [ add-base-path ] [ call-responder* ] 2bi ; + SYMBOL: link-hook : add-link-hook ( quot -- ) @@ -139,6 +142,10 @@ SYMBOL: form-hook : ( to query -- response ) 307 "Temporary Redirect" ; +: ( to query -- response ) + request get method>> "POST" = + [ ] [ ] if ; + TUPLE: dispatcher default responders ; : new-dispatcher ( class -- dispatcher ) @@ -158,8 +165,8 @@ TUPLE: dispatcher default responders ; [ >r drop 1 tail-slice r> ] [ drop default>> ] if ] if ; -M: dispatcher call-responder ( path dispatcher -- response ) - [ add-base-path ] [ find-responder call-responder ] 2bi ; +M: dispatcher call-responder* ( path dispatcher -- response ) + find-responder call-responder ; TUPLE: vhost-dispatcher default responders ; @@ -170,7 +177,7 @@ TUPLE: vhost-dispatcher default responders ; request get host>> over responders>> at* [ nip ] [ drop default>> ] if ; -M: vhost-dispatcher call-responder ( path dispatcher -- response ) +M: vhost-dispatcher call-responder* ( path dispatcher -- response ) find-vhost call-responder ; : add-responder ( dispatcher responder path -- dispatcher ) @@ -183,7 +190,7 @@ M: vhost-dispatcher call-responder ( path dispatcher -- response ) TUPLE: filter-responder responder ; -M: filter-responder call-responder +M: filter-responder call-responder* responder>> call-responder ; SYMBOL: main-responder @@ -234,14 +241,16 @@ SYMBOL: exit-continuation : split-path ( string -- path ) "/" split [ empty? not ] subset ; +: init-request ( -- ) + H{ } clone base-paths set + [ ] link-hook set + [ ] form-hook set ; + : do-request ( request -- response ) [ - H{ } clone base-paths set - [ ] link-hook set - [ ] form-hook set - - [ log-request ] + init-request [ request set ] + [ log-request ] [ path>> split-path main-responder get call-responder ] tri [ <404> ] unless* ] [ diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index 4ff26c3a8f..548f3dc00b 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -16,7 +16,7 @@ C: foo M: foo init-session* drop 0 "x" sset ; -M: foo call-responder +M: foo call-responder* 2drop "x" [ 1+ ] schange "text/html" [ "x" sget pprint ] >>body ; @@ -53,8 +53,15 @@ M: foo call-responder "auth-test.db" temp-file sqlite-db [ + init-request init-sessions-table + [ ] [ + + sessions-in-db >>sessions + session-manager set + ] unit-test + [ empty-session 123 >>id session set @@ -70,12 +77,6 @@ M: foo call-responder [ t ] [ session get changed?>> ] unit-test ] with-scope - [ ] [ - - sessions-in-db >>sessions - session-manager set - ] unit-test - [ t ] [ session-manager get begin-session id>> session-manager get sessions>> get-session session? diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor index d2c1d90e0a..df2a5bbd28 100755 --- a/extra/http/server/sessions/sessions.factor +++ b/extra/http/server/sessions/sessions.factor @@ -10,7 +10,7 @@ http.server.sessions.storage.null html.elements ; IN: http.server.sessions -TUPLE: session id expiry namespace changed? ; +TUPLE: session id expires namespace changed? ; : ( id -- session ) session new @@ -24,10 +24,13 @@ M: dispatcher init-session* default>> init-session* ; M: filter-responder init-session* responder>> init-session* ; -TUPLE: session-manager < filter-responder sessions ; +TUPLE: session-manager < filter-responder sessions timeout domain ; : ( responder -- responder' ) - null-sessions session-manager boa ; + session-manager new + swap >>responder + null-sessions >>sessions + 20 minutes >>timeout ; : (session-changed) ( session -- ) t >>changed? drop ; @@ -47,18 +50,14 @@ TUPLE: session-manager < filter-responder sessions ; [ namespace>> swap change-at ] keep (session-changed) ; inline -: sessions session-manager get sessions>> ; - : init-session ( session managed -- ) >r session r> '[ , init-session* ] with-variable ; -: timeout 20 minutes ; - : cutoff-time ( -- time ) - now timeout time+ timestamp>millis ; + session-manager get timeout>> from-now timestamp>millis ; : touch-session ( session -- ) - cutoff-time >>expiry drop ; + cutoff-time >>expires drop ; : empty-session ( -- session ) f @@ -73,21 +72,24 @@ TUPLE: session-manager < filter-responder sessions ; 2tri ; ! Destructor -TUPLE: session-saver session ; +TUPLE: session-saver manager session ; C: session-saver M: session-saver dispose - session>> dup changed?>> [ - [ touch-session ] [ sessions update-session ] bi - ] [ drop ] if ; + [ session>> ] [ manager>> sessions>> ] bi + over changed?>> [ + [ drop touch-session ] [ update-session ] 2bi + ] [ 2drop ] if ; -: save-session-after ( session -- ) +: save-session-after ( manager session -- ) add-always-destructor ; -: existing-session ( path responder session -- response ) - [ session set ] [ save-session-after ] bi - [ session-manager set ] [ responder>> call-responder ] bi ; +: existing-session ( path manager session -- response ) + [ nip session set ] + [ save-session-after ] + [ drop responder>> ] 2tri + call-responder ; : session-id-key "factorsessid" ; @@ -109,13 +111,13 @@ M: session-saver dispose >r request-session-id r> sessions>> get-session ; : ( id -- cookie ) - session-id-key ; + session-id-key + "$session-manager" resolve-base-path >>path + session-manager get timeout>> from-now >>expires + session-manager get domain>> >>domain ; -: new-session ( path responder -- response ) - dup begin-session - [ existing-session ] - [ id>> number>string ] bi - put-cookie ; +: put-session-cookie ( response -- response' ) + session get id>> number>string put-cookie ; : session-form-field ( -- ) > number>string =value input/> ; -M: session-manager call-responder ( path responder -- response ) +M: session-manager call-responder* ( path responder -- response ) [ session-form-field ] add-form-hook - dup request-session [ existing-session ] [ new-session ] if* ; + dup session-manager set + dup request-session [ dup begin-session ] unless* + existing-session put-session-cookie ; diff --git a/extra/http/server/sessions/storage/db/db.factor b/extra/http/server/sessions/storage/db/db.factor index 637d86670f..58a0130b36 100755 --- a/extra/http/server/sessions/storage/db/db.factor +++ b/extra/http/server/sessions/storage/db/db.factor @@ -11,7 +11,7 @@ session "SESSIONS" { ! { "id" "ID" +random-id+ system-random-generator } { "id" "ID" INTEGER +native-id+ } - { "expiry" "EXPIRY" BIG-INTEGER +not-null+ } + { "expires" "EXPIRES" BIG-INTEGER +not-null+ } { "namespace" "NAMESPACE" FACTOR-BLOB } } define-persistent @@ -31,7 +31,7 @@ M: sessions-in-db new-session ( session storage -- ) : expired-sessions ( -- session ) f - USE: math now timestamp>millis [ 60 60 * 1000 * - ] keep [a,b] >>expiry + USE: math now timestamp>millis [ 60 60 * 1000 * - ] keep [a,b] >>expires select-tuples ; : start-expiring-sessions ( db seq -- ) diff --git a/extra/http/server/static/static.factor b/extra/http/server/static/static.factor index 1605144b61..af6018fbdc 100755 --- a/extra/http/server/static/static.factor +++ b/extra/http/server/static/static.factor @@ -77,7 +77,7 @@ TUPLE: file-responder root hook special ; find-index [ serve-file ] [ list-directory ] ?if ] [ drop - request get path>> "/" append f + request get path>> "/" append f ] if ; : serve-object ( filename -- response ) @@ -86,7 +86,7 @@ TUPLE: file-responder root hook special ; [ drop <404> ] if ; -M: file-responder call-responder ( path responder -- response ) +M: file-responder call-responder* ( path responder -- response ) file-responder set ".." over member? [ drop <400> ] [ "/" join serve-object ] if ; diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor index 99d6376fe8..622cfe900f 100644 --- a/extra/http/server/templating/chloe/chloe.factor +++ b/extra/http/server/templating/chloe/chloe.factor @@ -1,5 +1,5 @@ USING: accessors kernel sequences combinators kernel namespaces -classes.tuple assocs splitting words arrays +classes.tuple assocs splitting words arrays memoize io io.files io.encodings.utf8 html.elements unicode.case tuple-syntax xml xml.data xml.writer xml.utilities http.server @@ -19,23 +19,31 @@ C: chloe DEFER: process-template -: chloe-ns TUPLE{ name url: "http://factorcode.org/chloe/1.0" } ; +: chloe-ns "http://factorcode.org/chloe/1.0" ; inline + +: filter-chloe-attrs ( assoc -- assoc' ) + [ drop name-url chloe-ns = not ] assoc-subset ; : chloe-tag? ( tag -- ? ) { { [ dup tag? not ] [ f ] } - { [ dup chloe-ns names-match? not ] [ f ] } + { [ dup url>> chloe-ns = not ] [ f ] } [ t ] } cond nip ; SYMBOL: tags +MEMO: chloe-name ( string -- name ) + name new + swap >>tag + chloe-ns >>url ; + : required-attr ( tag name -- value ) - dup rot at* + dup chloe-name rot at* [ nip ] [ drop " attribute is required" append throw ] if ; : optional-attr ( tag name -- value ) - swap at ; + chloe-name swap at ; : write-title-tag ( tag -- ) drop @@ -84,7 +92,7 @@ SYMBOL: tags dup empty? [ drop f ] [ "," split [ dup value ] H{ } map>assoc ] if ; -: a-flow-attr ( tag -- ) +: flow-attr ( tag -- ) "flow" optional-attr { { "none" [ flow-id off ] } { "begin" [ begin-flow ] } @@ -92,7 +100,7 @@ SYMBOL: tags { f [ ] } } case ; -: a-session-attr ( tag -- ) +: session-attr ( tag -- ) "session" optional-attr { { "none" [ session off flow-id off ] } { "current" [ ] } @@ -102,8 +110,8 @@ SYMBOL: tags : a-start-tag ( tag -- ) [ - hidden-form-field ; + [ + + hidden-form-field + ] with-scope ; : form-tag ( tag -- ) [ form-start-tag ] diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor index d6ddeb32bb..0c7b95525e 100644 --- a/extra/webapps/factor-website/factor-website.factor +++ b/extra/webapps/factor-website/factor-website.factor @@ -47,7 +47,7 @@ IN: webapps.factor-website "page" factor-template >>template - + sessions-in-db >>sessions test-db ; diff --git a/extra/webapps/factor-website/page.xml b/extra/webapps/factor-website/page.xml index 2f67b5e857..3e2f43845a 100644 --- a/extra/webapps/factor-website/page.xml +++ b/extra/webapps/factor-website/page.xml @@ -10,7 +10,7 @@ - + body, button { diff --git a/extra/webapps/pastebin/annotation.xml b/extra/webapps/pastebin/annotation.xml index af6a835a64..e5a95d8908 100644 --- a/extra/webapps/pastebin/annotation.xml +++ b/extra/webapps/pastebin/annotation.xml @@ -2,21 +2,21 @@ -

    Annotation:

    +

    Annotation:

    User name:
    Real name:
    Password:
    Verify:
    E-mail:
    Captcha:
    - - - + + +
    Author:
    Mode:
    Date:
    Author:
    Mode:
    Date:
    - +
    - - - + + + diff --git a/extra/webapps/pastebin/new-annotation.xml b/extra/webapps/pastebin/new-annotation.xml index 4afc5cfec5..ad7152d209 100644 --- a/extra/webapps/pastebin/new-annotation.xml +++ b/extra/webapps/pastebin/new-annotation.xml @@ -4,15 +4,15 @@ New Annotation - - + + - - - - - + + + + + diff --git a/extra/webapps/pastebin/new-paste.xml b/extra/webapps/pastebin/new-paste.xml index 4b2b4a46ce..86daf09aeb 100644 --- a/extra/webapps/pastebin/new-paste.xml +++ b/extra/webapps/pastebin/new-paste.xml @@ -4,14 +4,14 @@ New Paste - +
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Leave the captcha blank. Spam-bots will fill it indiscriminantly, so their attempts to register will be blocked.
    - - - - - + + + + + diff --git a/extra/webapps/pastebin/paste-list.xml b/extra/webapps/pastebin/paste-list.xml index 12b926c7d1..c91aa6fc42 100644 --- a/extra/webapps/pastebin/paste-list.xml +++ b/extra/webapps/pastebin/paste-list.xml @@ -9,7 +9,7 @@ - +
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Summary:
    Author:
    Mode:
    Description:
    Captcha:
    Leave the captcha blank. Spam-bots will fill it indiscriminantly, so their attempts to register will be blocked.Paste by: Date:
    diff --git a/extra/webapps/pastebin/paste-summary.xml b/extra/webapps/pastebin/paste-summary.xml index 952d0de73d..eca46e254d 100644 --- a/extra/webapps/pastebin/paste-summary.xml +++ b/extra/webapps/pastebin/paste-summary.xml @@ -3,9 +3,9 @@ - - - + + + diff --git a/extra/webapps/pastebin/paste.xml b/extra/webapps/pastebin/paste.xml index 89d1891221..9db60bfcc3 100644 --- a/extra/webapps/pastebin/paste.xml +++ b/extra/webapps/pastebin/paste.xml @@ -4,24 +4,22 @@ Pastebin -

    Paste:

    +

    Paste:

    - - - + + +
    Author:
    Mode:
    Date:
    Author:
    Mode:
    Date:
    -
    - -
    +
    - - + + | - Annotate + Annotate - + diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor index 07b3e9c02d..9301b14353 100644 --- a/extra/webapps/pastebin/pastebin.factor +++ b/extra/webapps/pastebin/pastebin.factor @@ -242,7 +242,7 @@ TUPLE: pastebin < dispatcher ; "feed.xml" add-responder [ ] "view-paste" add-responder [ ] "$pastebin/list" "delete-paste" add-responder - [ ] "$pastebin/view-paste" "delete-annotation" add-responder + [ ] "$pastebin/view-paste" "delete-annotation" add-responder [ ] "$pastebin/view-paste" add-responder [ now >>date ] "$pastebin/view-paste" "new-paste" add-responder [ now >>date ] "$pastebin/view-paste" "annotate" add-responder diff --git a/extra/webapps/pastebin/pastebin.xml b/extra/webapps/pastebin/pastebin.xml index 6b49162637..99fede727e 100644 --- a/extra/webapps/pastebin/pastebin.xml +++ b/extra/webapps/pastebin/pastebin.xml @@ -2,24 +2,27 @@ - + - +

    diff --git a/extra/webapps/planet/admin.xml b/extra/webapps/planet/admin.xml index 3bd406ee38..c79fe2efd1 100644 --- a/extra/webapps/planet/admin.xml +++ b/extra/webapps/planet/admin.xml @@ -4,11 +4,11 @@ Planet Factor Administration - +

    - Add Blog - | Update + Add Blog + | Update

    diff --git a/extra/webapps/planet/blog-admin-link.xml b/extra/webapps/planet/blog-admin-link.xml index a92af8dd1d..8d6c890643 100644 --- a/extra/webapps/planet/blog-admin-link.xml +++ b/extra/webapps/planet/blog-admin-link.xml @@ -2,6 +2,6 @@ - + diff --git a/extra/webapps/planet/edit-blog.xml b/extra/webapps/planet/edit-blog.xml index 83273540a5..b2eab2b0b4 100644 --- a/extra/webapps/planet/edit-blog.xml +++ b/extra/webapps/planet/edit-blog.xml @@ -4,25 +4,25 @@ Edit Blog - + - + - + - + - +
    Blog name:
    Home page:
    Feed:
    @@ -31,8 +31,8 @@
    - - + + diff --git a/extra/webapps/planet/entry-summary.xml b/extra/webapps/planet/entry-summary.xml index 905795373b..741b123456 100644 --- a/extra/webapps/planet/entry-summary.xml +++ b/extra/webapps/planet/entry-summary.xml @@ -3,8 +3,8 @@

    -
    - Read More... +
    + Read More...

    diff --git a/extra/webapps/planet/entry.xml b/extra/webapps/planet/entry.xml index 0e52c191a5..5e43717384 100644 --- a/extra/webapps/planet/entry.xml +++ b/extra/webapps/planet/entry.xml @@ -3,15 +3,15 @@

    - +

    - +

    - +

    diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 752db18ee7..2acff094c3 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -169,5 +169,8 @@ blog "BLOGS" : start-update-task ( planet db seq -- ) '[ - , , , [ update-cached-postings ] with-db + , , , [ + dup filter-responder? [ responder>> ] when + update-cached-postings + ] with-db ] 10 minutes every drop ; diff --git a/extra/webapps/planet/planet.xml b/extra/webapps/planet/planet.xml index 328be84544..fdbfe6d841 100644 --- a/extra/webapps/planet/planet.xml +++ b/extra/webapps/planet/planet.xml @@ -8,19 +8,19 @@

    diff --git a/extra/webapps/planet/postings-summary.xml b/extra/webapps/planet/postings-summary.xml index 950191e4c3..765c3a8006 100644 --- a/extra/webapps/planet/postings-summary.xml +++ b/extra/webapps/planet/postings-summary.xml @@ -2,6 +2,6 @@ - + diff --git a/extra/webapps/planet/postings.xml b/extra/webapps/planet/postings.xml index f59a4f61b8..c2c73d7e89 100644 --- a/extra/webapps/planet/postings.xml +++ b/extra/webapps/planet/postings.xml @@ -6,12 +6,12 @@ - +

    Blogroll

    - +
    diff --git a/extra/webapps/todo/todo-list.xml b/extra/webapps/todo/todo-list.xml index 1887fccdc1..66abeafc86 100644 --- a/extra/webapps/todo/todo-list.xml +++ b/extra/webapps/todo/todo-list.xml @@ -6,7 +6,7 @@ - +
    SummaryPriorityViewEdit
    diff --git a/extra/webapps/todo/todo-summary.xml b/extra/webapps/todo/todo-summary.xml index 008b0acaf5..056c9cab0a 100644 --- a/extra/webapps/todo/todo-summary.xml +++ b/extra/webapps/todo/todo-summary.xml @@ -4,16 +4,16 @@ - + - + - View + View - Edit + Edit diff --git a/extra/webapps/todo/todo.xml b/extra/webapps/todo/todo.xml index 4e307b7cae..ff58b27df2 100644 --- a/extra/webapps/todo/todo.xml +++ b/extra/webapps/todo/todo.xml @@ -5,14 +5,14 @@ diff --git a/extra/webapps/todo/view-todo.xml b/extra/webapps/todo/view-todo.xml index e8c2fd3983..f77396c73c 100644 --- a/extra/webapps/todo/view-todo.xml +++ b/extra/webapps/todo/view-todo.xml @@ -10,13 +10,13 @@
    - +
    - Edit + Edit | - - + + From 7a7d7be3240d51a7c7a11bc7994c5097427a7bd6 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 03:15:31 -0500 Subject: [PATCH 102/270] Fix typo in documentation --- core/words/words-docs.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/words/words-docs.factor b/core/words/words-docs.factor index f259378f7e..069a8615ac 100755 --- a/core/words/words-docs.factor +++ b/core/words/words-docs.factor @@ -278,7 +278,7 @@ HELP: reset-generic $low-level-note { $side-effects "word" } ; -HELP: +HELP: ( name vocab -- word ) { $values { "name" string } { "vocab" string } { "word" word } } { $description "Allocates an uninterned word with the specified name and vocabulary, and a blank word property hashtable. User code should call " { $link gensym } " to create uninterned words and " { $link create } " to create interned words." } ; @@ -300,7 +300,7 @@ HELP: word HELP: set-word { $values { "word" word } } -{ $description "Sets the recently defined word. Usually you would call " { $link save-location } " on a newly-defined word instead, which will in turn call this word." } ; +{ $description "Sets the recently defined word." } ; HELP: lookup { $values { "name" string } { "vocab" string } { "word" "a word or " { $link f } } } From 517671fad00035ca4b272d1128849974229e55be Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 03:16:12 -0500 Subject: [PATCH 103/270] Thread refactoring work in progress --- core/threads/threads-tests.factor | 16 +++- core/threads/threads.factor | 71 ++++++++++-------- .../tools/interactor/interactor-tests.factor | 18 ++++- extra/ui/tools/interactor/interactor.factor | 75 ++++++++++--------- extra/ui/tools/listener/listener-tests.factor | 23 +++++- extra/ui/tools/listener/listener.factor | 61 +++++++-------- 6 files changed, 159 insertions(+), 105 deletions(-) diff --git a/core/threads/threads-tests.factor b/core/threads/threads-tests.factor index 0ac607f0ed..0e33ccd94c 100755 --- a/core/threads/threads-tests.factor +++ b/core/threads/threads-tests.factor @@ -1,5 +1,6 @@ USING: namespaces io tools.test threads kernel -concurrency.combinators math ; +concurrency.combinators concurrency.promises locals math +words ; IN: threads.tests 3 "x" set @@ -27,3 +28,16 @@ yield "i" tget ] parallel-map ] unit-test + +[ [ 3 throw ] "A" suspend ] [ 3 = ] must-fail-with + +:: spawn-namespace-test ( -- ) + [let | p [ ] g [ gensym ] | + [ + g "x" set + [ "x" get p fulfill ] "B" spawn drop + ] with-scope + p ?promise g eq? + ] ; + +[ t ] [ spawn-namespace-test ] unit-test diff --git a/core/threads/threads.factor b/core/threads/threads.factor index 2f9c3a73de..fc3915e462 100755 --- a/core/threads/threads.factor +++ b/core/threads/threads.factor @@ -90,6 +90,8 @@ PRIVATE> [ sleep-queue heap-peek nip millis [-] ] } cond ; +DEFER: stop + [ ] while drop ; +: start ( namestack thread -- ) + [ + set-self + set-namestack + V{ } set-catchstack + { } set-retainstack + { } set-datastack + self quot>> [ call stop ] call-clear + ] 2 (throw) ; + +DEFER: next + +: no-runnable-threads ( -- * ) + ! We should never be in a state where the only threads + ! are sleeping; the I/O wait thread is always runnable. + ! However, if it dies, we handle this case + ! semi-gracefully. + ! + ! And if sleep-time outputs f, there are no sleeping + ! threads either... so WTF. + sleep-time [ die 0 ] unless* (sleep) next ; + +: (next) ( arg thread -- * ) + f >>state + dup set-self + dup continuation>> ?box + [ nip continue-with ] [ drop start ] if ; + : next ( -- * ) expire-sleep-loop run-queue dup dlist-empty? [ - ! We should never be in a state where the only threads - ! are sleeping; the I/O wait thread is always runnable. - ! However, if it dies, we handle this case - ! semi-gracefully. - ! - ! And if sleep-time outputs f, there are no sleeping - ! threads either... so WTF. - drop sleep-time [ die 0 ] unless* (sleep) next + drop no-runnable-threads ] [ - pop-back - dup array? [ first2 ] [ f swap ] if dup set-self - f >>state - continuation>> box> - continue-with + pop-back dup array? [ first2 ] [ f swap ] if (next) ] if ; PRIVATE> : stop ( -- ) - self dup exit-handler>> call - unregister-thread next ; + self [ exit-handler>> call ] [ unregister-thread ] bi next ; : suspend ( quot state -- obj ) [ - self continuation>> >box - self (>>state) - self swap call next + >r + >r self swap call + r> self (>>state) + r> self continuation>> >box + next ] callcc1 2nip ; inline : yield ( -- ) [ resume ] f suspend drop ; @@ -165,16 +185,7 @@ M: real sleep ] when drop ; : (spawn) ( thread -- ) - [ - resume-now [ - dup set-self - dup register-thread - V{ } set-catchstack - { } set-retainstack - >r { } set-datastack r> - quot>> [ call stop ] call-clear - ] 1 (throw) - ] "spawn" suspend 2drop ; + [ register-thread ] [ namestack swap resume-with ] bi ; : spawn ( quot name -- thread ) [ (spawn) ] keep ; @@ -183,8 +194,8 @@ M: real sleep >r [ [ ] [ ] while ] curry r> spawn ; : in-thread ( quot -- ) - >r datastack namestack r> - [ >r set-namestack set-datastack r> call ] 3curry + >r datastack r> + [ >r set-datastack r> call ] 2curry "Thread" spawn drop ; GENERIC: error-in-thread ( error thread -- ) diff --git a/extra/ui/tools/interactor/interactor-tests.factor b/extra/ui/tools/interactor/interactor-tests.factor index 99c005451d..509543a20a 100755 --- a/extra/ui/tools/interactor/interactor-tests.factor +++ b/extra/ui/tools/interactor/interactor-tests.factor @@ -1,11 +1,11 @@ IN: ui.tools.interactor.tests USING: ui.tools.interactor ui.gadgets.panes namespaces ui.gadgets.editors concurrency.promises threads listener -tools.test kernel calendar parser ; +tools.test kernel calendar parser accessors ; + +\ must-infer [ - \ must-infer - [ ] [ "interactor" set ] unit-test [ ] [ "[ 1 2 3" "interactor" get set-editor-string ] unit-test @@ -13,6 +13,7 @@ tools.test kernel calendar parser ; [ ] [ "promise" set ] unit-test [ + self "interactor" get (>>thread) "interactor" get stream-read-quot "promise" get fulfill ] "Interactor test" spawn drop @@ -27,3 +28,14 @@ tools.test kernel calendar parser ; [ [ [ 1 2 3 ] ] ] [ "promise" get 5 seconds ?promise-timeout ] unit-test ] with-interactive-vocabs + +! Hang +[ ] [ "interactor" set ] unit-test + +[ ] [ [ "interactor" get stream-read-quot drop ] "A" spawn drop ] unit-test + +[ ] [ [ "interactor" get stream-read-quot drop ] "B" spawn drop ] unit-test + +[ ] [ 1000 sleep ] unit-test + +[ ] [ "interactor" get interactor-eof ] unit-test diff --git a/extra/ui/tools/interactor/interactor.factor b/extra/ui/tools/interactor/interactor.factor index 3837ce2de1..734f6cb4b8 100755 --- a/extra/ui/tools/interactor/interactor.factor +++ b/extra/ui/tools/interactor/interactor.factor @@ -1,53 +1,53 @@ ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays assocs combinators continuations documents - hashtables io io.styles kernel math -math.vectors models namespaces parser prettyprint quotations -sequences strings threads listener -classes.tuple ui.commands ui.gadgets ui.gadgets.editors -ui.gadgets.presentations ui.gadgets.worlds ui.gestures -definitions boxes calendar concurrency.flags ui.tools.workspace -accessors ; +hashtables io io.styles kernel math math.vectors models +namespaces parser prettyprint quotations sequences strings +threads listener classes.tuple ui.commands ui.gadgets +ui.gadgets.editors ui.gadgets.presentations ui.gadgets.worlds +ui.gestures definitions calendar concurrency.flags +ui.tools.workspace accessors ; IN: ui.tools.interactor -TUPLE: interactor history output flag thread help ; +! If waiting is t, we're waiting for user input, and invoking +! evaluate-input resumes the thread. +TUPLE: interactor output history flag thread waiting help ; + +: register-self ( interactor -- ) + self >>thread drop ; : interactor-continuation ( interactor -- continuation ) - interactor-thread box-value - thread-continuation box-value ; + thread>> continuation>> value>> ; : interactor-busy? ( interactor -- ? ) - interactor-thread box-full? not ; + #! We're busy if there's no thread to resume. + [ waiting>> ] + [ thread>> dup [ thread-registered? ] when ] + bi and not ; : interactor-use ( interactor -- seq ) dup interactor-busy? [ drop f ] [ use swap - interactor-continuation continuation-name + interactor-continuation name>> assoc-stack ] if ; -: init-caret-help ( interactor -- ) - dup editor-caret 1/3 seconds - swap set-interactor-help ; - -: init-interactor-history ( interactor -- ) - V{ } clone swap set-interactor-history ; - -: init-interactor-state ( interactor -- ) - over set-interactor-flag - swap set-interactor-thread ; +: ( interactor -- model ) + editor-caret 1/3 seconds ; : ( output -- gadget ) interactor construct-editor - tuck set-interactor-output - dup init-interactor-history - dup init-interactor-state - dup init-caret-help ; + V{ } clone >>history + >>flag + dup >>help + swap >>output ; M: interactor graft* - dup delegate graft* - dup interactor-help add-connection ; + [ delegate graft* ] [ dup help>> add-connection ] bi ; + +M: interactor ungraft* + [ dup help>> remove-connection ] [ delegate ungraft ] bi ; : word-at-loc ( loc interactor -- word ) over [ @@ -58,7 +58,7 @@ M: interactor graft* ] if ; M: interactor model-changed - 2dup interactor-help eq? [ + 2dup help>> eq? [ swap model-value over word-at-loc swap show-summary ] [ delegate model-changed @@ -69,7 +69,7 @@ M: interactor model-changed [ H{ { font-style bold } } format ] with-nesting ; : interactor-input. ( string interactor -- ) - interactor-output [ + output>> [ dup string? [ dup write-input nl ] [ short. ] if ] with-stream* ; @@ -77,7 +77,7 @@ M: interactor model-changed over empty? [ 2drop ] [ interactor-history push-new ] if ; : interactor-continue ( obj interactor -- ) - interactor-thread box> resume-with ; + thread>> resume-with ; : clear-input ( interactor -- ) gadget-model clear-doc ; @@ -99,10 +99,12 @@ M: interactor model-changed ] unless drop ; : interactor-yield ( interactor -- obj ) - [ - [ interactor-thread >box ] keep - interactor-flag raise-flag - ] curry "input" suspend ; + dup thread>> self eq? [ + t >>waiting + [ [ flag>> raise-flag ] curry "input" suspend ] keep + f >>waiting + drop + ] [ drop f ] if ; M: interactor stream-readln [ interactor-yield ] keep interactor-finish @@ -161,7 +163,8 @@ M: interactor stream-read-quot } cond ; M: interactor pref-dim* - 0 over line-height 4 * 2array swap delegate pref-dim* vmax ; + [ line-height 4 * 0 swap 2array ] [ delegate pref-dim* ] bi + vmax ; interactor "interactor" f { { T{ key-down f f "RET" } evaluate-input } diff --git a/extra/ui/tools/listener/listener-tests.factor b/extra/ui/tools/listener/listener-tests.factor index cc218533d8..2fae62a8fc 100755 --- a/extra/ui/tools/listener/listener-tests.factor +++ b/extra/ui/tools/listener/listener-tests.factor @@ -2,7 +2,7 @@ USING: continuations documents ui.tools.interactor ui.tools.listener hashtables kernel namespaces parser sequences tools.test ui.commands ui.gadgets ui.gadgets.editors ui.gadgets.panes vocabs words tools.test.ui slots.private -threads arrays generic ; +threads arrays generic threads accessors listener ; IN: ui.tools.listener.tests [ f ] [ "word" source-editor command-map empty? ] unit-test @@ -15,7 +15,7 @@ IN: ui.tools.listener.tests [ "dup" ] [ \ dup word-completion-string ] unit-test - + [ "equal?" ] [ \ array \ equal? method word-completion-string ] unit-test @@ -28,9 +28,26 @@ IN: ui.tools.listener.tests [ ] [ "i" get [ { "SYMBOL:" } parse-lines ] [ go-to-error ] recover ] unit-test - + [ t ] [ "i" get gadget-model doc-end "i" get editor-caret* = ] unit-test + + ! Race condition discovered by SimonRC + [ ] [ + [ + "listener" get input>> + [ stream-read-quot drop ] + [ stream-read-quot drop ] bi + ] "OH, HAI" spawn drop + ] unit-test + + [ ] [ "listener" get clear-output ] unit-test + + [ ] [ "listener" get restart-listener ] unit-test + + [ ] [ 1000 sleep ] unit-test + + [ ] [ "listener" get com-end ] unit-test ] with-grafted-gadget diff --git a/extra/ui/tools/listener/listener.factor b/extra/ui/tools/listener/listener.factor index d96270075f..9057e1c4bd 100755 --- a/extra/ui/tools/listener/listener.factor +++ b/extra/ui/tools/listener/listener.factor @@ -16,13 +16,11 @@ TUPLE: listener-gadget input output stack ; g-> set-listener-gadget-output "Output" 1 track, ; -: listener-stream ( listener -- stream ) - dup listener-gadget-input - swap listener-gadget-output - ; +: ( listener -- stream ) + [ input>> ] [ output>> ] bi ; : ( listener -- gadget ) - listener-gadget-output ; + output>> ; : listener-input, ( -- ) g g-> set-listener-gadget-input @@ -34,31 +32,29 @@ TUPLE: listener-gadget input output stack ; "cookbook" ($link) "." print nl ; M: listener-gadget focusable-child* - listener-gadget-input ; + input>> ; M: listener-gadget call-tool* ( input listener -- ) - >r input-string r> listener-gadget-input set-editor-string ; + >r string>> r> input>> set-editor-string ; M: listener-gadget tool-scroller - listener-gadget-output find-scroller ; + output>> find-scroller ; : wait-for-listener ( listener -- ) #! Wait for the listener to start. - listener-gadget-input interactor-flag wait-for-flag ; + input>> flag>> wait-for-flag ; : workspace-busy? ( workspace -- ? ) - workspace-listener listener-gadget-input interactor-busy? ; + listener>> input>> interactor-busy? ; : listener-input ( string -- ) - get-workspace - workspace-listener - listener-gadget-input set-editor-string ; + get-workspace listener>> input>> set-editor-string ; : (call-listener) ( quot listener -- ) - listener-gadget-input interactor-call ; + input>> interactor-call ; : call-listener ( quot -- ) - [ workspace-busy? not ] get-workspace* workspace-listener + [ workspace-busy? not ] get-workspace* listener>> [ dup wait-for-listener (call-listener) ] 2curry "Listener call" spawn drop ; @@ -70,8 +66,7 @@ M: listener-operation invoke-command ( target command -- ) : eval-listener ( string -- ) get-workspace - workspace-listener - listener-gadget-input [ set-editor-string ] keep + listener>> input>> [ set-editor-string ] keep evaluate-input ; : listener-run-files ( seq -- ) @@ -82,10 +77,10 @@ M: listener-operation invoke-command ( target command -- ) ] if ; : com-end ( listener -- ) - listener-gadget-input interactor-eof ; + input>> interactor-eof ; : clear-output ( listener -- ) - listener-gadget-output pane-clear ; + output>> pane-clear ; \ clear-output H{ { +listener+ t } } define-command @@ -148,22 +143,27 @@ M: stack-display tool-scroller swap show-tool inspect-object ; : listener-thread ( listener -- ) - dup listener-stream [ - dup [ ui-listener-hook ] curry listener-hook set - dup [ ui-error-hook ] curry error-hook set - [ ui-inspector-hook ] curry inspector-hook set + dup [ + [ [ ui-listener-hook ] curry listener-hook set ] + [ [ ui-error-hook ] curry error-hook set ] + [ [ ui-inspector-hook ] curry inspector-hook set ] tri welcome. listener ] with-stream* ; : start-listener-thread ( listener -- ) - [ listener-thread ] curry "Listener" spawn drop ; + [ + [ input>> register-self ] [ listener-thread ] bi + ] curry "Listener" spawn drop ; : restart-listener ( listener -- ) #! Returns when listener is ready to receive input. - dup com-end dup clear-output - dup start-listener-thread - wait-for-listener ; + { + [ com-end ] + [ clear-output ] + [ start-listener-thread ] + [ wait-for-listener ] + } cleave ; : init-listener ( listener -- ) f swap set-listener-gadget-stack ; @@ -189,10 +189,7 @@ M: listener-gadget handle-gesture* ( gadget gesture delegate -- ? ) [ default-gesture-handler ] [ 3drop f ] if ; M: listener-gadget graft* - dup delegate graft* - dup listener-gadget-input interactor-thread ?box 2drop - restart-listener ; + [ delegate graft* ] [ restart-listener ] bi ; M: listener-gadget ungraft* - dup com-end - delegate ungraft* ; + [ com-end ] [ delegate ungraft* ] bi ; From e48755e5aa27cb22c12ee5145f9e1902c8e15ddf Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 04:27:04 -0500 Subject: [PATCH 104/270] Fixes --- extra/http/http.factor | 2 +- extra/http/server/templating/chloe/chloe.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/http/http.factor b/extra/http/http.factor index 99a48e58d8..3402b42ca7 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -149,7 +149,7 @@ TUPLE: cookie name value path domain expires max-age http-only ; ";" split [ [ blank? ] trim "=" split1 swap >lower { { "expires" [ cookie-string>timestamp >>expires ] } - { "max-age" [ string>number seconds ] } + { "max-age" [ string>number seconds >>max-age ] } { "domain" [ >>domain ] } { "path" [ >>path ] } { "httponly" [ drop t >>http-only ] } diff --git a/extra/http/server/templating/chloe/chloe.factor b/extra/http/server/templating/chloe/chloe.factor index 622cfe900f..a8a456cdb2 100644 --- a/extra/http/server/templating/chloe/chloe.factor +++ b/extra/http/server/templating/chloe/chloe.factor @@ -22,7 +22,7 @@ DEFER: process-template : chloe-ns "http://factorcode.org/chloe/1.0" ; inline : filter-chloe-attrs ( assoc -- assoc' ) - [ drop name-url chloe-ns = not ] assoc-subset ; + [ drop name-url chloe-ns = not ] assoc-filter ; : chloe-tag? ( tag -- ? ) { From 173d064567f112ee8f7f2a821799a059b088649e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 04:51:33 -0500 Subject: [PATCH 105/270] Unit tests pass --- extra/http/server/sessions/sessions-tests.factor | 5 ++++- extra/http/server/templating/chloe/chloe-tests.factor | 8 -------- extra/http/server/templating/chloe/test/test4.xml | 2 +- extra/http/server/templating/chloe/test/test5.xml | 2 +- extra/http/server/templating/chloe/test/test6.xml | 2 +- extra/http/server/templating/chloe/test/test7.xml | 2 +- 6 files changed, 8 insertions(+), 13 deletions(-) diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index 548f3dc00b..c95ff30069 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -7,7 +7,10 @@ sequences db db.sqlite continuations ; : with-session [ - >r [ save-session-after ] [ \ session set ] bi r> call + >r + [ session-manager get swap save-session-after ] + [ \ session set ] bi + r> call ] with-destructors ; inline TUPLE: foo ; diff --git a/extra/http/server/templating/chloe/chloe-tests.factor b/extra/http/server/templating/chloe/chloe-tests.factor index cb8b56e002..61f72a2f14 100644 --- a/extra/http/server/templating/chloe/chloe-tests.factor +++ b/extra/http/server/templating/chloe/chloe-tests.factor @@ -4,14 +4,6 @@ io.streams.string kernel sequences ascii boxes namespaces xml splitting ; IN: http.server.templating.chloe.tests -[ "foo" ] -[ "
    blah" string>xml "href" required-attr ] -unit-test - -[ "blah" string>xml "href" required-attr ] -[ "href attribute is required" = ] -must-fail-with - [ f ] [ f parse-query-attr ] unit-test [ f ] [ "" parse-query-attr ] unit-test diff --git a/extra/http/server/templating/chloe/test/test4.xml b/extra/http/server/templating/chloe/test/test4.xml index 0381bcc27a..dd9b232d73 100644 --- a/extra/http/server/templating/chloe/test/test4.xml +++ b/extra/http/server/templating/chloe/test/test4.xml @@ -2,7 +2,7 @@ - + True diff --git a/extra/http/server/templating/chloe/test/test5.xml b/extra/http/server/templating/chloe/test/test5.xml index d74a5e5368..3bd39e45bd 100644 --- a/extra/http/server/templating/chloe/test/test5.xml +++ b/extra/http/server/templating/chloe/test/test5.xml @@ -2,7 +2,7 @@ - + True diff --git a/extra/http/server/templating/chloe/test/test6.xml b/extra/http/server/templating/chloe/test/test6.xml index 5b6a71cf6b..56234a5f0d 100644 --- a/extra/http/server/templating/chloe/test/test6.xml +++ b/extra/http/server/templating/chloe/test/test6.xml @@ -2,7 +2,7 @@ - + True diff --git a/extra/http/server/templating/chloe/test/test7.xml b/extra/http/server/templating/chloe/test/test7.xml index 4381b5cec4..a4f8e06e7d 100644 --- a/extra/http/server/templating/chloe/test/test7.xml +++ b/extra/http/server/templating/chloe/test/test7.xml @@ -2,7 +2,7 @@ - + True From 5ad8aab2b993438fddb6672e1de5363c2b8492f0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 06:37:02 -0500 Subject: [PATCH 106/270] Fix unit tests --- extra/http/server/callbacks/callbacks-tests.factor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extra/http/server/callbacks/callbacks-tests.factor b/extra/http/server/callbacks/callbacks-tests.factor index 498f120cd8..cca5942328 100755 --- a/extra/http/server/callbacks/callbacks-tests.factor +++ b/extra/http/server/callbacks/callbacks-tests.factor @@ -5,6 +5,8 @@ splitting kernel hashtables continuations ; [ 123 ] [ [ + init-request + "GET" >>method request set [ exit-continuation set @@ -17,6 +19,8 @@ splitting kernel hashtables continuations ; ] unit-test [ + init-request + [ [ "hello" print From 524e3ea762a83ddee9f53ccc82ab850e54e2de66 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 06:42:12 -0500 Subject: [PATCH 107/270] Fix PPC backend load error --- core/cpu/ppc/assembler/assembler.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/cpu/ppc/assembler/assembler.factor b/core/cpu/ppc/assembler/assembler.factor index e85e03bf9c..6dce09a1ef 100755 --- a/core/cpu/ppc/assembler/assembler.factor +++ b/core/cpu/ppc/assembler/assembler.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: generator.fixup generic kernel math memory namespaces -words math.bitfields math.order io.binary ; +USING: generator.fixup generic kernel math math.order memory +namespaces words math.bitfields math.order io.binary ; IN: cpu.ppc.assembler ! See the Motorola or IBM documentation for details. The opcode From 31308a7fb2252b33cbb180224b39010ce3692bd6 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 06:42:53 -0500 Subject: [PATCH 108/270] Oops --- core/cpu/ppc/assembler/assembler.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/cpu/ppc/assembler/assembler.factor b/core/cpu/ppc/assembler/assembler.factor index 6dce09a1ef..b1d7016eff 100755 --- a/core/cpu/ppc/assembler/assembler.factor +++ b/core/cpu/ppc/assembler/assembler.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: generator.fixup generic kernel math math.order memory -namespaces words math.bitfields math.order io.binary ; +USING: generator.fixup generic kernel memory namespaces +words math math.bitfields math.order io.binary ; IN: cpu.ppc.assembler ! See the Motorola or IBM documentation for details. The opcode From c88cf361e7c94ff163439cbe9014eecaed67ba4a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 27 Apr 2008 06:46:01 -0500 Subject: [PATCH 109/270] Fix promises help lint --- extra/promises/promises-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/promises/promises-docs.factor b/extra/promises/promises-docs.factor index ade3357f34..c482df0d15 100755 --- a/extra/promises/promises-docs.factor +++ b/extra/promises/promises-docs.factor @@ -29,6 +29,6 @@ HELP: LAZY: { $values { "word" "a new word to define" } { "definition" "a word definition" } } { $description "Creates a lazy word in the current vocabulary. When executed the word will return a " { $link promise } " that when forced, executes the word definition. Any values on the stack that are required by the word definition are captured along with the promise." } { $examples - { $example "USING: math prettyprint promises ;" "LAZY: my-add ( a b -- c ) + ;" "1 2 my-add force ." "3" } + { $example "USING: arrays sequences prettyprint promises ;" "IN: scratchpad" "LAZY: zeroes ( -- pair ) 0 zeroes 2array ;" "zeroes force second force first ." "0" } } { $see-also force promise-with promise-with2 } ; From bd548d542347aceb76fda026bed71c2234e13ea4 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Sun, 27 Apr 2008 22:36:42 +1000 Subject: [PATCH 110/270] add openal.waves to generate tones, and code to play morse code --- extra/morse/morse-docs.factor | 4 ++ extra/morse/morse-tests.factor | 2 + extra/morse/morse.factor | 69 +++++++++++++++++++++++---- extra/openal/openal.factor | 8 +++- extra/openal/waves/waves-tests.factor | 5 ++ extra/openal/waves/waves.factor | 53 ++++++++++++++++++++ 6 files changed, 130 insertions(+), 11 deletions(-) create mode 100644 extra/openal/waves/waves-tests.factor create mode 100644 extra/openal/waves/waves.factor diff --git a/extra/morse/morse-docs.factor b/extra/morse/morse-docs.factor index c11ba23db7..31fc7f34c2 100644 --- a/extra/morse/morse-docs.factor +++ b/extra/morse/morse-docs.factor @@ -23,3 +23,7 @@ HELP: morse> { $values { "str" "A string of morse code, in which the character '.' represents dots, '-' dashes, ' ' spaces between letters, and ' / ' spaces between words." } { "str" "The ASCII translation of the given string" } } { $description "Translates morse code into ASCII text" } { $see-also >morse morse>ch } ; + +HELP: play-as-morse +{ $values { "str" "A string of ascii characters which can be translated into morse code" } { "unit-length" "The length of a dot" } } +{ $description "Plays a string as morse code" } diff --git a/extra/morse/morse-tests.factor b/extra/morse/morse-tests.factor index 97efe1afb4..c87fa483e3 100644 --- a/extra/morse/morse-tests.factor +++ b/extra/morse/morse-tests.factor @@ -9,3 +9,5 @@ USING: arrays morse strings tools.test ; [ "-- --- .-. ... . / -.-. --- -.. ." ] [ "morse code" >morse ] unit-test [ "morse code" ] [ "-- --- .-. ... . / -.-. --- -.. ." morse> ] unit-test [ "hello, world!" ] [ "Hello, World!" >morse morse> ] unit-test +[ ] [ "sos" 0.075 play-as-morse ] unit-test +[ ] [ "Factor rocks!" 0.05 play-as-morse ] unit-test diff --git a/extra/morse/morse.factor b/extra/morse/morse.factor index f493951ed5..d0b9e4003a 100644 --- a/extra/morse/morse.factor +++ b/extra/morse/morse.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2007 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: assocs hashtables kernel lazy-lists namespaces openal -parser-combinators promises sequences strings unicode.case ; +USING: assocs combinators hashtables kernel lazy-lists math namespaces +openal openal.waves parser-combinators promises sequences strings symbols +unicode.case ; IN: morse <+> ; @@ -123,3 +124,51 @@ PRIVATE> ] map >string ] map [ [ CHAR: \s , ] [ % ] interleave ] "" make ; +r 8 22000 880 r> send-buffer* ; + +: silent-buffer ( seconds -- id ) + 8 22000 rot send-buffer* ; + +: make-buffers ( unit-length -- ) + { + [ sine-buffer dot-buffer set ] + [ 3 * sine-buffer dash-buffer set ] + [ silent-buffer intra-char-gap-buffer set ] + [ 3 * silent-buffer letter-gap-buffer set ] + } cleave ; + +: playing-morse ( quot unit-length -- ) + [ + init-openal 1 gen-sources first source set make-buffers + call + source get source-play + ] with-scope ; + +: play-char ( ch -- ) + [ intra-char-gap ] [ + { + { dot-char [ dot ] } + { dash-char [ dash ] } + { word-gap-char [ intra-char-gap ] } + } case + ] interleave ; + +PRIVATE> + +: play-as-morse ( str unit-length -- ) + [ + [ letter-gap ] [ ch>morse play-char ] interleave + ] swap playing-morse ; + diff --git a/extra/openal/openal.factor b/extra/openal/openal.factor index ff67a30ea3..c0a79d8353 100644 --- a/extra/openal/openal.factor +++ b/extra/openal/openal.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel alien system combinators alien.syntax namespaces +USING: kernel arrays alien system combinators alien.syntax namespaces alien.c-types sequences vocabs.loader shuffle combinators.lib openal.backend ; IN: openal @@ -266,6 +266,12 @@ os macosx? "openal.macosx" "openal.other" ? require gen-buffer dup rot load-wav-file [ alBufferData ] 4keep alutUnloadWAV ; +: queue-buffers ( source buffers -- ) + [ length ] [ >c-uint-array ] bi alSourceQueueBuffers ; + +: queue-buffer ( source buffer -- ) + 1array queue-buffers ; + : set-source-param ( source param value -- ) alSourcei ; diff --git a/extra/openal/waves/waves-tests.factor b/extra/openal/waves/waves-tests.factor new file mode 100644 index 0000000000..b295283aac --- /dev/null +++ b/extra/openal/waves/waves-tests.factor @@ -0,0 +1,5 @@ +USING: kernel openal openal.waves sequences tools.test ; +IN: openal.waves.tests + + +[ ] [ 8 22000 440 1 play-sine-wave ] unit-test diff --git a/extra/openal/waves/waves.factor b/extra/openal/waves/waves.factor new file mode 100644 index 0000000000..abe9f8fb69 --- /dev/null +++ b/extra/openal/waves/waves.factor @@ -0,0 +1,53 @@ +USING: accessors alien.c-types combinators kernel locals math +math.constants math.functions math.ranges openal sequences ; +IN: openal.waves + +TUPLE: buffer bits channels sample-freq seq id ; + +: ( bits sample-freq seq -- buffer ) + ! defaults to 1 channel + 1 -rot gen-buffer buffer boa ; + +: buffer-format ( buffer -- format ) + dup buffer-channels 1 = swap buffer-bits 8 = [ + AL_FORMAT_MONO8 AL_FORMAT_STEREO8 + ] [ + AL_FORMAT_MONO16 AL_FORMAT_STEREO16 + ] if ? ; + +: buffer-data ( buffer -- data size ) + #! 8 bit data is integers between 0 and 255, + #! 16 bit data is integers between -32768 and 32768 + #! size is in bytes + [ seq>> ] [ bits>> ] bi 8 = [ + [ 128 * >integer 128 + ] map [ >c-uchar-array ] [ length ] bi + ] [ + [ 32768 * >integer ] map [ >c-short-array ] [ length 2 * ] bi + ] if ; + +: send-buffer ( buffer -- ) + { [ id>> ] [ buffer-format ] [ buffer-data ] [ sample-freq>> ] } cleave + alBufferData ; + +: send-buffer* ( buffer -- id ) + [ send-buffer ] [ id>> ] bi ; + +: (sine-wave-seq) ( samples/wave n-samples -- seq ) + pi 2 * rot / [ * sin ] curry map ; + +: sine-wave-seq ( sample-freq freq seconds -- seq ) + pick * >integer [ / ] dip (sine-wave-seq) ; + +: ( bits sample-freq freq seconds -- buffer ) + >r dupd r> sine-wave-seq ; + +: ( bits sample-freq seconds -- buffer ) + dupd * >integer [ drop 0 ] map ; + +: play-sine-wave ( bits sample-freq freq seconds -- ) + init-openal + send-buffer* + 1 gen-sources first + [ AL_BUFFER rot set-source-param ] [ source-play ] bi + check-error ; + From b4f761965535fadd970cfe88f5b7cfa9b66044d4 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 17:03:21 -0500 Subject: [PATCH 111/270] add math.order --- core/math/order/order-docs.factor | 63 ++++++++++++++++++++++++++++++ core/math/order/order-tests.factor | 6 +++ core/math/order/order.factor | 34 ++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 core/math/order/order-docs.factor create mode 100644 core/math/order/order-tests.factor create mode 100644 core/math/order/order.factor diff --git a/core/math/order/order-docs.factor b/core/math/order/order-docs.factor new file mode 100644 index 0000000000..029d41efa8 --- /dev/null +++ b/core/math/order/order-docs.factor @@ -0,0 +1,63 @@ +USING: help.markup help.syntax kernel math sequences quotations +math.private ; +IN: math.order + +HELP: <=> +{ $values { "obj1" object } { "obj2" object } { "n" real } } +{ $contract + "Compares two objects using an intrinsic total order, for example, the natural order for real numbers and lexicographic order for strings." + $nl + "The output value is one of the following:" + { $list + { "positive - indicating that " { $snippet "obj1" } " follows " { $snippet "obj2" } } + { "zero - indicating that " { $snippet "obj1" } " is equal to " { $snippet "obj2" } } + { "negative - indicating that " { $snippet "obj1" } " precedes " { $snippet "obj2" } } + } + "The default implementation treats the two objects as sequences, and recursively compares their elements. So no extra work is required to compare sequences lexicographically." +} ; + +HELP: compare +{ $values { "obj1" object } { "obj2" object } { "quot" "a quotation with stack effect " { $snippet "( obj -- newobj )" } } { "n" integer } } +{ $description "Compares the results of applying the quotation to both objects via " { $link <=> } "." } +{ $examples { $example "USING: kernel math.order prettyprint sequences ;" "\"hello\" \"hi\" [ length ] compare ." "3" } +} ; + +HELP: max +{ $values { "x" real } { "y" real } { "z" real } } +{ $description "Outputs the greatest of two real numbers." } ; + +HELP: min +{ $values { "x" real } { "y" real } { "z" real } } +{ $description "Outputs the smallest of two real numbers." } ; + +HELP: between? +{ $values { "x" real } { "y" real } { "z" real } { "?" "a boolean" } } +{ $description "Tests if " { $snippet "x" } " is in the interval " { $snippet "[y,z]" } "." } +{ $notes "As per the closed interval notation, the end-points are included in the interval." } ; + +HELP: before? +{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } +{ $description "Tests if " { $snippet "obj1" } " comes before " { $snippet "obj2" } " using an intrinsic total order." } +{ $notes "Implemented using " { $link <=> } "." } ; + +HELP: after? +{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } +{ $description "Tests if " { $snippet "obj1" } " comes after " { $snippet "obj2" } " using an intrinsic total order." } +{ $notes "Implemented using " { $link <=> } "." } ; + +HELP: before=? +{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } +{ $description "Tests if " { $snippet "obj1" } " comes before or equals " { $snippet "obj2" } " using an intrinsic total order." } +{ $notes "Implemented using " { $link <=> } "." } ; + +HELP: after=? +{ $values { "obj1" "an object" } { "obj2" "an object" } { "?" "a boolean" } } +{ $description "Tests if " { $snippet "obj1" } " comes after or equals " { $snippet "obj2" } " using an intrinsic total order." } +{ $notes "Implemented using " { $link <=> } "." } ; + +{ before? after? before=? after=? } related-words + +HELP: [-] +{ $values { "x" real } { "y" real } { "z" real } } +{ $description "Subtracts " { $snippet "y" } " from " { $snippet "x" } ". If the result is less than zero, outputs zero." } ; + diff --git a/core/math/order/order-tests.factor b/core/math/order/order-tests.factor new file mode 100644 index 0000000000..6dbaf29e7c --- /dev/null +++ b/core/math/order/order-tests.factor @@ -0,0 +1,6 @@ +USING: kernel math.order tools.test ; +IN: math.order.tests + +[ -1 ] [ "ab" "abc" <=> ] unit-test +[ 1 ] [ "abc" "ab" <=> ] unit-test + diff --git a/core/math/order/order.factor b/core/math/order/order.factor new file mode 100644 index 0000000000..eb781d1967 --- /dev/null +++ b/core/math/order/order.factor @@ -0,0 +1,34 @@ +! Copyright (C) 2008 Slava Pestov, Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel math ; +IN: math.order + +GENERIC: <=> ( obj1 obj2 -- n ) + +M: real <=> - ; +M: integer <=> - ; + +GENERIC: before? ( obj1 obj2 -- ? ) +GENERIC: after? ( obj1 obj2 -- ? ) +GENERIC: before=? ( obj1 obj2 -- ? ) +GENERIC: after=? ( obj1 obj2 -- ? ) + +M: object before? ( obj1 obj2 -- ? ) <=> 0 < ; +M: object after? ( obj1 obj2 -- ? ) <=> 0 > ; +M: object before=? ( obj1 obj2 -- ? ) <=> 0 <= ; +M: object after=? ( obj1 obj2 -- ? ) <=> 0 >= ; + +M: real before? ( obj1 obj2 -- ? ) < ; +M: real after? ( obj1 obj2 -- ? ) > ; +M: real before=? ( obj1 obj2 -- ? ) <= ; +M: real after=? ( obj1 obj2 -- ? ) >= ; + +: min ( x y -- z ) [ before? ] most ; inline +: max ( x y -- z ) [ after? ] most ; inline + +: between? ( x y z -- ? ) + pick after=? [ after=? ] [ 2drop f ] if ; inline + +: [-] ( x y -- z ) - 0 max ; inline + +: compare ( obj1 obj2 quot -- n ) bi@ <=> ; inline From 32814ffce529ec02e18bb1f2e0e5eea3547c8f07 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 18:57:46 -0500 Subject: [PATCH 112/270] <=> outputs +lt+ +eq+ +gt+ --- core/debugger/debugger.factor | 8 ++++---- core/generic/math/math.factor | 2 +- core/heaps/heaps.factor | 6 +++--- core/inference/backend/backend.factor | 2 +- core/math/order/order-docs.factor | 19 ++++++++++++++----- core/math/order/order-tests.factor | 7 +++++-- core/math/order/order.factor | 18 ++++++++++++------ core/sorting/sorting.factor | 2 +- extra/sequences/lib/lib.factor | 4 ++-- 9 files changed, 43 insertions(+), 25 deletions(-) diff --git a/core/debugger/debugger.factor b/core/debugger/debugger.factor index 9492304628..34fcf8e6bc 100755 --- a/core/debugger/debugger.factor +++ b/core/debugger/debugger.factor @@ -97,10 +97,10 @@ M: relative-overflow summary : assert-depth ( quot -- ) >r datastack r> swap slip >r datastack r> - 2dup [ length ] compare sgn { - { -1 [ trim-datastacks nip relative-underflow ] } - { 0 [ 2drop ] } - { 1 [ trim-datastacks drop relative-overflow ] } + 2dup [ length ] compare { + { +lt+ [ trim-datastacks nip relative-underflow ] } + { +eq+ [ 2drop ] } + { +gt+ [ trim-datastacks drop relative-overflow ] } } case ; inline : expired-error. ( obj -- ) diff --git a/core/generic/math/math.factor b/core/generic/math/math.factor index d71749804b..90590fe565 100755 --- a/core/generic/math/math.factor +++ b/core/generic/math/math.factor @@ -23,7 +23,7 @@ PREDICATE: math-class < class } cond ; : math-class-max ( class class -- class ) - [ [ math-precedence ] compare 0 > ] most ; + [ [ math-precedence ] compare +gt+ eq? ] most ; : (math-upgrade) ( max class -- quot ) dupd = [ drop [ ] ] [ "coercer" word-prop [ ] or ] if ; diff --git a/core/heaps/heaps.factor b/core/heaps/heaps.factor index 54eb93a201..57f0e0ac72 100755 --- a/core/heaps/heaps.factor +++ b/core/heaps/heaps.factor @@ -92,11 +92,11 @@ M: priority-queue heap-size ( heap -- n ) GENERIC: heap-compare ( pair1 pair2 heap -- ? ) -: (heap-compare) drop [ entry-key ] compare 0 ; inline +: (heap-compare) drop [ entry-key ] compare ; inline -M: min-heap heap-compare (heap-compare) > ; +M: min-heap heap-compare (heap-compare) +gt+ eq? ; -M: max-heap heap-compare (heap-compare) < ; +M: max-heap heap-compare (heap-compare) +lt+ eq? ; : heap-bounds-check? ( m heap -- ? ) heap-size >= ; inline diff --git a/core/inference/backend/backend.factor b/core/inference/backend/backend.factor index 2e1a69e407..5896429ccf 100755 --- a/core/inference/backend/backend.factor +++ b/core/inference/backend/backend.factor @@ -60,7 +60,7 @@ M: object value-literal \ literal-expected inference-warning ; : value-vector ( n -- vector ) [ drop ] V{ } map-as ; : add-inputs ( seq stack -- n stack ) - tuck [ length ] compare dup 0 > + tuck [ length ] bi@ - dup 0 > [ dup value-vector [ swapd push-all ] keep ] [ drop 0 swap ] if ; diff --git a/core/math/order/order-docs.factor b/core/math/order/order-docs.factor index 029d41efa8..42a8d8123f 100644 --- a/core/math/order/order-docs.factor +++ b/core/math/order/order-docs.factor @@ -9,17 +9,26 @@ HELP: <=> $nl "The output value is one of the following:" { $list - { "positive - indicating that " { $snippet "obj1" } " follows " { $snippet "obj2" } } - { "zero - indicating that " { $snippet "obj1" } " is equal to " { $snippet "obj2" } } - { "negative - indicating that " { $snippet "obj1" } " precedes " { $snippet "obj2" } } + { { $link +lt+ } " - indicating that " { $snippet "obj1" } " precedes " { $snippet "obj2" } } + { { $link +eq+ } " - indicating that " { $snippet "obj1" } " is equal to " { $snippet "obj2" } } + { { $link +gt+ } " - indicating that " { $snippet "obj1" } " follows " { $snippet "obj2" } } } "The default implementation treats the two objects as sequences, and recursively compares their elements. So no extra work is required to compare sequences lexicographically." } ; +HELP: +lt+ +{ $description "Returned by " { $link <=> } " when the first object is strictly less than the second object." } ; + +HELP: +eq+ +{ $description "Returned by " { $link <=> } " when the first object is equal to the second object." } ; + +HELP: +gt+ +{ $description "Returned by " { $link <=> } " when the first object is strictly greater than the second object." } ; + HELP: compare -{ $values { "obj1" object } { "obj2" object } { "quot" "a quotation with stack effect " { $snippet "( obj -- newobj )" } } { "n" integer } } +{ $values { "obj1" object } { "obj2" object } { "quot" "a quotation with stack effect " { $snippet "( obj -- newobj )" } } { "symbol" "a comparison symbol, +lt+, +eq+, or +gt+" } } { $description "Compares the results of applying the quotation to both objects via " { $link <=> } "." } -{ $examples { $example "USING: kernel math.order prettyprint sequences ;" "\"hello\" \"hi\" [ length ] compare ." "3" } +{ $examples { $example "USING: kernel math.order prettyprint sequences ;" "\"hello\" \"hi\" [ length ] compare ." "+gt+" } } ; HELP: max diff --git a/core/math/order/order-tests.factor b/core/math/order/order-tests.factor index 6dbaf29e7c..665537be5d 100644 --- a/core/math/order/order-tests.factor +++ b/core/math/order/order-tests.factor @@ -1,6 +1,9 @@ USING: kernel math.order tools.test ; IN: math.order.tests -[ -1 ] [ "ab" "abc" <=> ] unit-test -[ 1 ] [ "abc" "ab" <=> ] unit-test +[ +lt+ ] [ "ab" "abc" <=> ] unit-test +[ +gt+ ] [ "abc" "ab" <=> ] unit-test +[ +lt+ ] [ 3 4 <=> ] unit-test +[ +eq+ ] [ 4 4 <=> ] unit-test +[ +gt+ ] [ 4 3 <=> ] unit-test diff --git a/core/math/order/order.factor b/core/math/order/order.factor index eb781d1967..1262d89ee0 100644 --- a/core/math/order/order.factor +++ b/core/math/order/order.factor @@ -3,20 +3,26 @@ USING: kernel math ; IN: math.order +SYMBOL: +lt+ +SYMBOL: +eq+ +SYMBOL: +gt+ + GENERIC: <=> ( obj1 obj2 -- n ) -M: real <=> - ; -M: integer <=> - ; +: (<=>) - dup 0 < [ drop +lt+ ] [ zero? +eq+ +gt+ ? ] if ; + +M: real <=> (<=>) ; +M: integer <=> (<=>) ; GENERIC: before? ( obj1 obj2 -- ? ) GENERIC: after? ( obj1 obj2 -- ? ) GENERIC: before=? ( obj1 obj2 -- ? ) GENERIC: after=? ( obj1 obj2 -- ? ) -M: object before? ( obj1 obj2 -- ? ) <=> 0 < ; -M: object after? ( obj1 obj2 -- ? ) <=> 0 > ; -M: object before=? ( obj1 obj2 -- ? ) <=> 0 <= ; -M: object after=? ( obj1 obj2 -- ? ) <=> 0 >= ; +M: object before? ( obj1 obj2 -- ? ) <=> +lt+ eq? ; +M: object after? ( obj1 obj2 -- ? ) <=> +gt+ eq? ; +M: object before=? ( obj1 obj2 -- ? ) <=> +gt+ eq? not ; +M: object after=? ( obj1 obj2 -- ? ) <=> +lt+ eq? not ; M: real before? ( obj1 obj2 -- ? ) < ; M: real after? ( obj1 obj2 -- ? ) > ; diff --git a/core/sorting/sorting.factor b/core/sorting/sorting.factor index 6aafe2ded1..fa8d50ea0e 100755 --- a/core/sorting/sorting.factor +++ b/core/sorting/sorting.factor @@ -17,7 +17,7 @@ DEFER: sort dup slice-from 1+ swap set-slice-from ; inline : smallest ( iter1 iter2 quot -- elt ) - >r over this over this r> call 0 < + >r over this over this r> call +lt+ eq? -rot ? [ this ] keep next ; inline : (merge) ( iter1 iter2 quot accum -- ) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index ad5a40ed6d..0dc5601cd0 100755 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -66,9 +66,9 @@ MACRO: firstn ( n -- ) ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: higher ( a b quot -- c ) [ compare 0 > ] curry most ; inline +: higher ( a b quot -- c ) [ compare +gt+ eq? ] curry most ; inline -: lower ( a b quot -- c ) [ compare 0 < ] curry most ; inline +: lower ( a b quot -- c ) [ compare +lt+ eq? ] curry most ; inline ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! From 89df7fd1042879c5a7cb682e6757f293abe448c2 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 27 Apr 2008 18:48:39 -0700 Subject: [PATCH 113/270] Add missing USING: accessors vocab to demo-support --- extra/opengl/demo-support/demo-support.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/opengl/demo-support/demo-support.factor b/extra/opengl/demo-support/demo-support.factor index e98dcbce32..88531a70bc 100755 --- a/extra/opengl/demo-support/demo-support.factor +++ b/extra/opengl/demo-support/demo-support.factor @@ -1,6 +1,6 @@ USING: arrays combinators.lib kernel math math.functions math.order math.vectors namespaces opengl opengl.gl sequences ui -ui.gadgets ui.gestures ui.render ; +ui.gadgets ui.gestures ui.render accessors ; IN: opengl.demo-support : FOV 2.0 sqrt 1+ ; inline From 21c50fefe0d8f2584ff06ddcdcb30ebcd58c61fc Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 12:17:08 +1000 Subject: [PATCH 114/270] fix morse-docs, and add authors.txt --- extra/morse/authors.txt | 1 + extra/morse/morse-docs.factor | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 extra/morse/authors.txt diff --git a/extra/morse/authors.txt b/extra/morse/authors.txt new file mode 100644 index 0000000000..e9c193bac7 --- /dev/null +++ b/extra/morse/authors.txt @@ -0,0 +1 @@ +Alex Chapman diff --git a/extra/morse/morse-docs.factor b/extra/morse/morse-docs.factor index 31fc7f34c2..f31b741c85 100644 --- a/extra/morse/morse-docs.factor +++ b/extra/morse/morse-docs.factor @@ -26,4 +26,4 @@ HELP: morse> HELP: play-as-morse { $values { "str" "A string of ascii characters which can be translated into morse code" } { "unit-length" "The length of a dot" } } -{ $description "Plays a string as morse code" } +{ $description "Plays a string as morse code" } ; From 47abbfc4c6d1f6189d2f175d6869dd60243b73f3 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 22:44:30 -0500 Subject: [PATCH 115/270] fix calendar for <=> change --- extra/calendar/calendar-tests.factor | 8 ++++---- extra/calendar/format/format.factor | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/extra/calendar/calendar-tests.factor b/extra/calendar/calendar-tests.factor index e2a2bc7e66..7d9716ae1a 100755 --- a/extra/calendar/calendar-tests.factor +++ b/extra/calendar/calendar-tests.factor @@ -131,16 +131,16 @@ IN: calendar.tests [ t ] [ 2004 1 1 23 0 0 9+1/2 hours >gmt 2004 1 1 13 30 0 instant = ] unit-test -[ 0 ] [ 2004 1 1 13 30 0 instant +[ +eq+ ] [ 2004 1 1 13 30 0 instant 2004 1 1 12 30 0 -1 hours <=> ] unit-test -[ 1 ] [ 2004 1 1 13 30 0 instant +[ +gt+ ] [ 2004 1 1 13 30 0 instant 2004 1 1 12 30 0 instant <=> ] unit-test -[ -1 ] [ 2004 1 1 12 30 0 instant +[ +lt+ ] [ 2004 1 1 12 30 0 instant 2004 1 1 13 30 0 instant <=> ] unit-test -[ 1 ] [ 2005 1 1 12 30 0 instant +[ +gt+ ] [ 2005 1 1 12 30 0 instant 2004 1 1 13 30 0 instant <=> ] unit-test [ t ] [ now timestamp>millis millis - 1000 < ] unit-test diff --git a/extra/calendar/format/format.factor b/extra/calendar/format/format.factor index 26daaddc40..91a034f8bd 100755 --- a/extra/calendar/format/format.factor +++ b/extra/calendar/format/format.factor @@ -87,10 +87,10 @@ M: timestamp year. ( timestamp -- ) [ hh ] [ mm ] bi ; : write-gmt-offset ( gmt-offset -- ) - dup instant <=> sgn { - { 0 [ drop "GMT" write ] } - { -1 [ "-" write before (write-gmt-offset) ] } - { 1 [ "+" write (write-gmt-offset) ] } + dup instant <=> { + { +eq+ [ drop "GMT" write ] } + { +lt+ [ "-" write before (write-gmt-offset) ] } + { +gt+ [ "+" write (write-gmt-offset) ] } } case ; : timestamp>rfc822 ( timestamp -- str ) @@ -118,10 +118,10 @@ M: timestamp year. ( timestamp -- ) [ hh ":" write ] [ mm ] bi ; : write-rfc3339-gmt-offset ( duration -- ) - dup instant <=> sgn { - { 0 [ drop "Z" write ] } - { -1 [ "-" write before (write-rfc3339-gmt-offset) ] } - { 1 [ "+" write (write-rfc3339-gmt-offset) ] } + dup instant <=> { + { +eq+ [ drop "Z" write ] } + { +lt+ [ "-" write before (write-rfc3339-gmt-offset) ] } + { +gt+ [ "+" write (write-rfc3339-gmt-offset) ] } } case ; : (timestamp>rfc3339) ( timestamp -- ) From 0d8ddd2a3c155d5a10d78987b67cab9fc2121534 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 22:44:42 -0500 Subject: [PATCH 116/270] fix multi-methods for <=> --- extra/multi-methods/multi-methods.factor | 16 ++++++++-------- .../multi-methods/tests/topological-sort.factor | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/extra/multi-methods/multi-methods.factor b/extra/multi-methods/multi-methods.factor index 07d110b01a..d5a698f5f8 100755 --- a/extra/multi-methods/multi-methods.factor +++ b/extra/multi-methods/multi-methods.factor @@ -73,7 +73,7 @@ SYMBOL: total ! Part II: Topologically sorting specializers : maximal-element ( seq quot -- n elt ) dupd [ - swapd [ call 0 < ] 2curry filter empty? + swapd [ call +lt+ = ] 2curry filter empty? ] 2curry find [ "Topological sort failed" throw ] unless* ; inline @@ -82,16 +82,16 @@ SYMBOL: total [ dupd maximal-element >r over delete-nth r> ] curry [ ] unfold nip ; inline -: classes< ( seq1 seq2 -- -1/0/1 ) +: classes< ( seq1 seq2 -- lt/eq/gt ) [ { - { [ 2dup eq? ] [ 0 ] } - { [ 2dup [ class< ] 2keep swap class< and ] [ 0 ] } - { [ 2dup class< ] [ -1 ] } - { [ 2dup swap class< ] [ 1 ] } - [ 0 ] + { [ 2dup eq? ] [ +eq+ ] } + { [ 2dup [ class< ] 2keep swap class< and ] [ +eq+ ] } + { [ 2dup class< ] [ +lt+ ] } + { [ 2dup swap class< ] [ +gt+ ] } + [ +eq+ ] } cond 2nip - ] 2map [ zero? not ] find nip 0 or ; + ] 2map [ zero? not ] find nip +eq+ or ; : sort-methods ( alist -- alist' ) [ [ first ] bi@ classes< ] topological-sort ; diff --git a/extra/multi-methods/tests/topological-sort.factor b/extra/multi-methods/tests/topological-sort.factor index cea7022759..f1618374ef 100644 --- a/extra/multi-methods/tests/topological-sort.factor +++ b/extra/multi-methods/tests/topological-sort.factor @@ -6,14 +6,14 @@ IN: multi-methods.tests { 6 4 5 1 3 2 } [ <=> ] topological-sort ] unit-test -[ -1 ] [ +[ +lt+ ] [ { fixnum array } { number sequence } classes< ] unit-test -[ 0 ] [ +[ +eq+ ] [ { number sequence } { number sequence } classes< ] unit-test -[ 1 ] [ +[ +gt+ ] [ { object object } { number sequence } classes< ] unit-test From aa0daed072ca418bad4e47526c00edea6dce9481 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 13:44:46 +1000 Subject: [PATCH 117/270] update tangle and semantic-db for latest changes to factor --- extra/semantic-db/authors.txt | 1 + extra/semantic-db/semantic-db.factor | 6 +++--- extra/tangle/authors.txt | 1 + extra/tangle/html/html.factor | 4 ++-- extra/tangle/tangle.factor | 8 ++++---- 5 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 extra/semantic-db/authors.txt create mode 100644 extra/tangle/authors.txt diff --git a/extra/semantic-db/authors.txt b/extra/semantic-db/authors.txt new file mode 100644 index 0000000000..e9c193bac7 --- /dev/null +++ b/extra/semantic-db/authors.txt @@ -0,0 +1 @@ +Alex Chapman diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 51bd94d61c..2451d73acb 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays combinators combinators.cleave combinators.lib -continuations db db.tuples db.types db.sqlite hashtables kernel math -math.parser namespaces parser sequences sequences.deep +continuations db db.tuples db.types db.sqlite kernel math +math.parser namespaces parser sets sequences sequences.deep sequences.lib strings words ; IN: semantic-db @@ -28,7 +28,7 @@ node "node" TUPLE: arc id subject object relation ; : ( subject object relation -- arc ) - arc construct-empty swap >>relation swap >>object swap >>subject ; + arc new swap >>relation swap >>object swap >>subject ; : ( id -- arc ) arc new swap >>id ; diff --git a/extra/tangle/authors.txt b/extra/tangle/authors.txt new file mode 100644 index 0000000000..e9c193bac7 --- /dev/null +++ b/extra/tangle/authors.txt @@ -0,0 +1 @@ +Alex Chapman diff --git a/extra/tangle/html/html.factor b/extra/tangle/html/html.factor index 9c55b66528..fc604f4d46 100644 --- a/extra/tangle/html/html.factor +++ b/extra/tangle/html/html.factor @@ -7,11 +7,11 @@ TUPLE: element attributes ; TUPLE: ulist < element items ; : ( items -- element ) - H{ } clone swap ulist construct-boa ; + H{ } clone swap ulist boa ; TUPLE: link < element href text ; : ( href text -- element ) - H{ } clone -rot link construct-boa ; + H{ } clone -rot link boa ; GENERIC: >html ( element -- str ) diff --git a/extra/tangle/tangle.factor b/extra/tangle/tangle.factor index cbd3b94058..c6a1faa27b 100644 --- a/extra/tangle/tangle.factor +++ b/extra/tangle/tangle.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs db db.sqlite db.postgresql http.server io kernel namespaces semantic-db sequences strings ; +USING: accessors assocs db db.sqlite db.postgresql http.server http.server.actions io kernel namespaces semantic-db sequences strings ; IN: tangle GENERIC: render* ( content templater -- output ) @@ -20,7 +20,7 @@ TUPLE: sqlite-tangle ; TUPLE: postgres-tangle ; : make-tangle ( db templater type -- tangle ) - construct-empty [ ] dip tuck set-delegate ; + new [ ] dip tuck set-delegate ; : ( db templater -- tangle ) sqlite-tangle make-tangle ; : ( db templater -- tangle ) postgres-tangle make-tangle ; @@ -40,8 +40,8 @@ M: postgres-tangle new-db ( tangle args -- tangle ) TUPLE: node-responder tangle ; C: node-responder -M: node-responder call-responder ( path responder -- response ) - "text/plain" nip request-params +M: node-responder call-responder* ( path responder -- response ) + "text/plain" nip params get [ "node-id" swap at* [ >>body ] [ drop ] if ] when* nip ; : test-tangle ( -- ) From 23608c219f02a83c07cebfff06a535e0a3a5131e Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 14:21:48 +1000 Subject: [PATCH 118/270] update factor.vim for latest changes to vocabs --- extra/bank/authors.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 extra/bank/authors.txt diff --git a/extra/bank/authors.txt b/extra/bank/authors.txt new file mode 100644 index 0000000000..e9c193bac7 --- /dev/null +++ b/extra/bank/authors.txt @@ -0,0 +1 @@ +Alex Chapman From ffd3ae635d644a260e4c8c4ca73646836b1d2577 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 14:23:16 +1000 Subject: [PATCH 119/270] update factor.vim (not sure what happened with that last commit) --- misc/factor.vim | 14 +++++++------- misc/factor.vim.fgen | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/misc/factor.vim b/misc/factor.vim index 93ce3d6bd5..d1c46cee0b 100644 --- a/misc/factor.vim +++ b/misc/factor.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: factor " Maintainer: Alex Chapman -" Last Change: 2007 Jan 18 +" Last Change: 2008 Apr 28 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -48,17 +48,17 @@ syn keyword factorCompileDirective inline foldable parsing " kernel vocab keywords -syn keyword factorKeyword or construct-delegate set-slots tuck while wrapper nip hashcode wrapper? both? callstack>array die dupd set-delegate callstack callstack? 3dup pick curry build >boolean ?if clone eq? = ? swapd call-clear 2over 2keep 3keep construct general-t clear 2dup when not tuple? 3compose dup call object wrapped unless* if* 2apply >r curry-quot drop when* retainstack -rot delegate with 3slip construct-boa slip compose-first compose-second 3drop construct-empty either? curry? datastack compare curry-obj over 3curry roll throw swap and 2nip set-retainstack (clone) hashcode* get-slots compose spin if <=> unless compose? tuple keep 2curry object? equal? set-datastack 2slip 2drop most null r> set-callstack dip xor rot -roll -syn keyword factorKeyword assoc? assoc-clone-like delete-any assoc= delete-at* new-assoc subassoc? assoc-size map>assoc union search-alist assoc-like key? update at* assoc-empty? at+ set-at assoc-all? assoc-hashcode intersect change-at assoc-each assoc-subset values rename-at value-at (assoc-stack) at cache assoc>map assoc-contains? assoc assoc-map assoc-pusher diff (assoc>map) assoc-push-if remove-all >alist (substitute) substitute-here clear-assoc assoc-stack substitute delete-at assoc-find keys -syn keyword factorKeyword case dispatch-case-quot with-datastack alist>quot dispatch-case hash-case-table hash-case-quot no-cond no-case? cond distribute-buckets (distribute-buckets) contiguous-range? cond>quot no-cond? no-case recursive-hashcode linear-case-quot hash-dispatch-quot case>quot -syn keyword factorKeyword byte-array>bignum sgn >bignum number= each-integer next-power-of-2 before? imaginary-part mod recip float>bits rational >float number? 2^ bignum? integer fixnum? after? fixnum before=? bignum sq neg denominator [-] (all-integers?) times find-last-integer (each-integer) bit? * + - / >= bitand find-integer complex < real > log2 integer? max number bits>double double>bits bitor 2/ zero? rem all-integers? (find-integer) real-part align bits>float float? shift between? float 1+ 1- min fp-nan? ratio? bitxor even? ratio <= /mod >integer odd? rational? bitnot real? >fixnum complex? (next-power-of-2) /i numerator after=? /f -syn keyword factorKeyword slice-to append left-trim clone-like 3sequence set-column-seq map-as reversed pad-left cut* nth sequence slice? tail-slice empty? tail* member? unclip virtual-sequence? set-length last-index* drop-prefix bounds-error? set-slice-seq set-column-col seq-diff map start open-slice midpoint@ add* set-immutable-seq move-forward fourth delete set-slice-to all-eq? monotonic? set-reversed-seq like delete-nth first4 repetition-len (open-slice) column? reverse slice padding virtual@ repetition? index 4sequence max-length set-second first2 first3 (3append) supremum unclip-slice index* move-backward tail 3append sequence-hashcode-step right-trim reversed-seq pad-right concat find* set-slice-from flip sum find-last* immutable? 2sequence delete-all start* immutable-sequence? (append) check-slice column-seq sequence? head set-slice-error-reason reduce set-bounds-error-index reverse-here sequence= halves collapse-slice interleave 2map binary-reduce virtual-seq slice-error? product bounds-check? bounds-check immutable find column remove ((append)) set-fourth peek contains? reversed? shorter? push-new find-last head-slice pop* immutable-seq tail-slice* accumulate each pusher all-equal? new-resizable cut-slice head-slice* 2reverse-each pop memq? set-nth ?nth second change-each join set-repetition-len all? virtual-sequence set-repetition-elt subseq? immutable-sequence slice-error-reason new-like length last-index seq-intersect push-if 2all? lengthen column-col joined-length copy set-bounds-error-seq cache-nth move third first slice-from repetition-elt tail? set-first bounds-error add bounds-error-seq bounds-error-index unfold exchange slice-seq cut 2reduce change-nth min-length set-third (delete) push-all head? delete-slice sum-lengths new 2each head* infimum subset slice-error subseq replace-slice repetition push trim sequence-hashcode mismatch +syn keyword factorKeyword or construct-delegate set-slots tuck 2bi 2tri while wrapper nip bi* wrapper? hashcode callstack>array both? die set-delegate dupd callstack callstack? 3dup tri@ pick curry build prepose 3bi >boolean ?if clone eq? tri* ? = swapd call-clear 2over 2keep 3keep construct clear 2dup when not tuple? 3compose dup 2bi* call object bi@ wrapped unless* if* >r curry-quot drop when* retainstack -rot 2bi@ delegate boa with 3slip slip compose-first compose-second 3drop either? bi curry? datastack curry-obj over 3curry roll throw swap and 2nip set-retainstack (clone) hashcode* get-slots compose spin if 3tri unless compose? tuple keep 2curry equal? set-datastack 2slip tri 2drop most identity-tuple? null r> new set-callstack dip xor rot -roll identity-tuple +syn keyword factorKeyword assoc? assoc-clone-like delete-any assoc= delete-at* new-assoc subassoc? assoc-size map>assoc search-alist assoc-like key? assoc-intersect update assoc-union at* assoc-empty? at+ set-enum-seq set-at assoc-all? assoc-hashcode change-at assoc-each assoc-diff zip values value-at rename-at (assoc-stack) enum? at cache assoc>map assoc-contains? assoc assoc-map assoc-pusher (assoc>map) enum assoc-push-if remove-all >alist (substitute) substitute-here clear-assoc assoc-stack substitute assoc-filter delete-at assoc-find enum-seq keys +syn keyword factorKeyword case dispatch-case-quot with-datastack no-cond no-case? 3cleave>quot (distribute-buckets) contiguous-range? 2cleave cond>quot no-cond? cleave>quot no-case recursive-hashcode case>quot 3cleave alist>quot dispatch-case hash-case-table hash-case-quot case-find cond cleave distribute-buckets 2cleave>quot linear-case-quot spread spread>quot hash-dispatch-quot +syn keyword factorKeyword byte-array>bignum sgn >bignum number= each-integer next-power-of-2 ?1+ imaginary-part mod recip float>bits rational >float number? 2^ bignum? integer fixnum? neg fixnum sq bignum (all-integers?) times denominator find-last-integer (each-integer) bit? * + power-of-2? - / >= bitand find-integer complex < real > log2 integer? number bits>double double>bits bitor 2/ zero? rem all-integers? (find-integer) real-part align bits>float float? shift float 1+ 1- fp-nan? ratio? bitxor even? ratio <= /mod >integer odd? rational? bitnot real? >fixnum complex? (next-power-of-2) /i numerator /f +syn keyword factorKeyword slice-to append left-trim find-last-from clone-like 3sequence map-as last-index-from reversed index-from pad-left cut* nth sequence slice? tail-slice empty? tail* find-from member? virtual-sequence? unclip set-length drop-prefix bounds-error? set-slice-seq map start open-slice midpoint@ set-immutable-seq move-forward rest-slice prepend fourth delete set-slice-to new-sequence follow all-eq? monotonic? set-reversed-seq like delete-nth first4 repetition-len (open-slice) reverse slice padding virtual@ repetition? index 4sequence max-length set-second first2 first3 (3append) supremum unclip-slice move-backward tail 3append sequence-hashcode-step right-trim reversed-seq pad-right suffix concat set-slice-from flip filter sum immutable? 2sequence delete-all start* immutable-sequence? (append) check-slice sequence? head set-slice-error-reason reduce set-bounds-error-index reverse-here sequence= halves collapse-slice interleave 2map binary-reduce virtual-seq slice-error? product bounds-check? bounds-check immutable find remove ((append)) set-fourth peek contains? reversed? shorter? push-new find-last head-slice pop* immutable-seq tail-slice* accumulate each pusher all-equal? new-resizable cut-slice head-slice* 2reverse-each pop memq? set-nth ?nth second change-each join set-repetition-len all? virtual-sequence set-repetition-elt subseq? immutable-sequence slice-error-reason new-like length last-index push-if 2all? lengthen joined-length copy set-bounds-error-seq cache-nth move third first slice-from repetition-elt tail? set-first prefix bounds-error bounds-error-seq bounds-error-index unfold exchange slice-seq cut 2reduce change-nth min-length set-third (delete) push-all head? delete-slice rest sum-lengths 2each head* infimum sequence-hashcode slice-error subseq replace-slice repetition push trim mismatch syn keyword factorKeyword global +@ set-namestack with-variable on set bind dec namestack get get-global change init-namespaces with-scope off set-global namespace % make , inc counter building make-assoc syn keyword factorKeyword 3array >array 4array pair? array pair 2array 1array resize-array array? syn keyword factorKeyword readln stream-read-until stream-read-partial stderr with-stream read with-stream* print contents make-span-stream write1 stream-write1 stream-format make-block-stream stream-copy with-cell stream-write format with-row stream-print stream-read with-nesting (stream-copy) bl write-object nl stream-nl write stdio flush read-until tabular-output make-cell-stream write-cell stream-flush read1 lines stream-read1 stream-write-table with-style stream-readln syn keyword factorKeyword resize-string >string 1string string string? syn keyword factorKeyword vector? ?push vector >vector 1vector -syn keyword factorKeyword rethrow-restarts restarts recover set-restart-name set-continuation-name condition-continuation ifcc continuation-name set-restart-continuation ignore-errors continuation-retain continue restart-continuation with-disposal set-continuation-catch restart-obj error thread-error-hook set-continuation-retain continuation rethrow callcc1 callcc0 condition continuation? continuation-call continuation-data set-condition-restarts set-catchstack >continuation< error-continuation cleanup restart? compute-restarts condition? error-thread set-continuation-call set-condition-continuation set-restart-obj dispose set-continuation-data throw-restarts catchstack continue-with attempt-all restart restart-name continuation-catch condition-restarts +syn keyword factorKeyword rethrow-restarts restarts recover set-restart-name set-continuation-name condition-continuation ifcc continuation-name condition-error set-restart-continuation ignore-errors continuation-retain continue restart-continuation with-disposal set-continuation-catch set-condition-error restart-obj error thread-error-hook set-continuation-retain continuation rethrow callcc1 callcc0 condition continuation? continuation-call continuation-data set-condition-restarts set-catchstack >continuation< error-continuation cleanup restart? compute-restarts condition? error-thread set-continuation-call set-condition-continuation set-restart-obj dispose set-continuation-data throw-restarts catchstack continue-with attempt-all restart restart-name continuation-catch condition-restarts syn cluster factorReal contains=factorInt,factorFloat,factorRatio,factorBinary,factorHex,factorOctal diff --git a/misc/factor.vim.fgen b/misc/factor.vim.fgen index 7bcba78cde..b0d61b8dd0 100644 --- a/misc/factor.vim.fgen +++ b/misc/factor.vim.fgen @@ -2,7 +2,7 @@ %>" Vim syntax file " Language: factor " Maintainer: Alex Chapman -" Last Change: 2007 Jan 18 +" Last Change: 2008 Apr 28 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded From 09c21f077bffeb3315d77136212d5bc97a595538 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 23:23:51 -0500 Subject: [PATCH 120/270] add invert-comparison word --- core/kernel/kernel-docs.factor | 1 + core/math/order/order-docs.factor | 7 +++++++ core/math/order/order.factor | 3 +++ 3 files changed, 11 insertions(+) diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor index a3209ea42c..6862232f2d 100755 --- a/core/kernel/kernel-docs.factor +++ b/core/kernel/kernel-docs.factor @@ -254,6 +254,7 @@ $nl "Some types of objects also have an intrinsic order allowing sorting using " { $link natural-sort } ":" { $subsection <=> } { $subsection compare } +{ $subsection invert-comparison } "Utilities for comparing objects:" { $subsection after? } { $subsection before? } diff --git a/core/math/order/order-docs.factor b/core/math/order/order-docs.factor index 42a8d8123f..b761959a83 100644 --- a/core/math/order/order-docs.factor +++ b/core/math/order/order-docs.factor @@ -25,6 +25,13 @@ HELP: +eq+ HELP: +gt+ { $description "Returned by " { $link <=> } " when the first object is strictly greater than the second object." } ; +HELP: invert-comparison +{ $values { "symbol" "a comparison symbol, +lt+, +eq+, or +gt+" } + { "new-symbol" "a comparison symbol, +lt+, +eq+, or +gt+" } } +{ $description "Invert the comparison symbol returned by " { $link <=> } ". The output for the symbol " { $snippet "+eq+" } " is itself." } +{ $examples + { $example "USING: math.order prettyprint ;" "+lt+ invert-comparison ." "+gt+" } } ; + HELP: compare { $values { "obj1" object } { "obj2" object } { "quot" "a quotation with stack effect " { $snippet "( obj -- newobj )" } } { "symbol" "a comparison symbol, +lt+, +eq+, or +gt+" } } { $description "Compares the results of applying the quotation to both objects via " { $link <=> } "." } diff --git a/core/math/order/order.factor b/core/math/order/order.factor index 1262d89ee0..36624f5ca9 100644 --- a/core/math/order/order.factor +++ b/core/math/order/order.factor @@ -11,6 +11,9 @@ GENERIC: <=> ( obj1 obj2 -- n ) : (<=>) - dup 0 < [ drop +lt+ ] [ zero? +eq+ +gt+ ? ] if ; +: invert-comparison ( symbol -- new-symbol ) + dup +lt+ eq? [ drop +gt+ ] [ +eq+ eq? +eq+ +lt+ ? ] if ; + M: real <=> (<=>) ; M: integer <=> (<=>) ; From e0639d05471bfb985ebefeef2eab9ffb666b2ef8 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 27 Apr 2008 23:23:59 -0500 Subject: [PATCH 121/270] fix trees for <=> a bit of refactoring to use new accessors, i hope wrunt doesn't mind --- extra/trees/trees.factor | 72 ++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/extra/trees/trees.factor b/extra/trees/trees.factor index 89443dec8e..f0826137ea 100755 --- a/extra/trees/trees.factor +++ b/extra/trees/trees.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel generic math sequences arrays io namespaces prettyprint.private kernel.private assocs random combinators -parser prettyprint.backend math.order ; +parser prettyprint.backend math.order accessors ; IN: trees MIXIN: tree-mixin @@ -25,19 +25,14 @@ TUPLE: node key value left right ; SYMBOL: current-side -: left -1 ; inline -: right 1 ; inline +: go-left? ( -- ? ) current-side get +lt+ eq? ; -: go-left? ( -- ? ) current-side get left = ; +: inc-count ( tree -- ) [ 1+ ] change-count drop ; -: inc-count ( tree -- ) - dup tree-count 1+ swap set-tree-count ; - -: dec-count ( tree -- ) - dup tree-count 1- swap set-tree-count ; +: dec-count ( tree -- ) [ 1- ] change-count drop ; : node-link@ ( node ? -- node ) - go-left? xor [ node-left ] [ node-right ] if ; + go-left? xor [ left>> ] [ right>> ] if ; : set-node-link@ ( left parent ? -- ) go-left? xor [ set-node-left ] [ set-node-right ] if ; @@ -47,24 +42,21 @@ SYMBOL: current-side : set-node+link ( child node -- ) t set-node-link@ ; : with-side ( side quot -- ) [ swap current-side set call ] with-scope ; inline -: with-other-side ( quot -- ) current-side get neg swap with-side ; inline -: go-left ( quot -- ) left swap with-side ; inline -: go-right ( quot -- ) right swap with-side ; inline +: with-other-side ( quot -- ) + current-side get invert-comparison swap with-side ; inline +: go-left ( quot -- ) +lt+ swap with-side ; inline +: go-right ( quot -- ) +gt+ swap with-side ; inline : change-root ( tree quot -- ) - swap [ tree-root swap call ] keep set-tree-root ; inline + swap [ root>> swap call ] keep set-tree-root ; inline : leaf? ( node -- ? ) - dup node-left swap node-right or not ; + [ left>> ] [ right>> ] bi or not ; -: key-side ( k1 k2 -- side ) - #! side is -1 if k1 < k2, 0 if they are equal, or 1 if k1 > k2 - <=> sgn ; - -: random-side ( -- side ) left right 2array random ; +: random-side ( -- side ) +lt+ +gt+ 2array random ; : choose-branch ( key node -- key node-left/right ) - 2dup node-key key-side [ node-link ] with-side ; + 2dup node-key <=> [ node-link ] with-side ; : node-at* ( key node -- value ? ) [ @@ -76,11 +68,11 @@ SYMBOL: current-side ] [ drop f f ] if* ; M: tree at* ( key tree -- value ? ) - tree-root node-at* ; + root>> node-at* ; : node-set ( value key node -- node ) - 2dup node-key key-side dup zero? [ - drop nip [ set-node-value ] keep + 2dup key>> <=> dup +eq+ eq? [ + drop nip swap >>value ] [ [ [ node-link [ node-set ] [ swap ] if* ] keep @@ -93,12 +85,12 @@ M: tree set-at ( value key tree -- ) : valid-node? ( node -- ? ) [ - dup dup node-left [ node-key swap node-key before? ] when* >r - dup dup node-right [ node-key swap node-key after? ] when* r> and swap - dup node-left valid-node? swap node-right valid-node? and and + dup dup left>> [ node-key swap node-key before? ] when* >r + dup dup right>> [ node-key swap node-key after? ] when* r> and swap + dup left>> valid-node? swap right>> valid-node? and and ] [ t ] if* ; -: valid-tree? ( tree -- ? ) tree-root valid-node? ; +: valid-tree? ( tree -- ? ) root>> valid-node? ; : tree-call ( node call -- ) >r [ node-key ] keep node-value r> call ; inline @@ -107,20 +99,20 @@ M: tree set-at ( value key tree -- ) { { [ over not ] [ 2drop f f f ] } { [ [ - >r node-left r> find-node + >r left>> r> find-node ] 2keep rot ] [ 2drop t ] } { [ >r 2nip r> [ tree-call ] 2keep rot ] [ drop [ node-key ] keep node-value t ] } - [ >r node-right r> find-node ] + [ >r right>> r> find-node ] } cond ; inline M: tree-mixin assoc-find ( tree quot -- key value ? ) - >r tree-root r> find-node ; + >r root>> r> find-node ; M: tree-mixin clear-assoc - 0 over set-tree-count - f swap set-tree-root ; + 0 >>count + f >>root drop ; : copy-node-contents ( new old -- ) dup node-key pick set-node-key node-value swap set-node-value ; @@ -158,22 +150,22 @@ DEFER: delete-node : delete-node ( node -- node ) #! delete this node, returning its replacement - dup node-left [ - dup node-right [ + dup left>> [ + dup right>> [ delete-node-with-two-children ] [ - node-left ! left but no right + left>> ! left but no right ] if ] [ - dup node-right [ - node-right ! right but not left + dup right>> [ + right>> ! right but not left ] [ drop f ! no children ] if ] if ; : delete-bst-node ( key node -- node ) - 2dup node-key key-side dup zero? [ + 2dup node-key <=> dup +eq+ eq? [ drop nip delete-node ] [ [ tuck node-link delete-bst-node over set-node-link ] with-side @@ -197,7 +189,7 @@ M: tree-mixin assoc-like drop dup tree? [ >tree ] unless ; M: tree pprint-delims drop \ TREE{ \ } ; -M: tree-mixin assoc-size tree-count ; +M: tree-mixin assoc-size count>> ; M: tree-mixin clone dup assoc-clone-like ; M: tree-mixin >pprint-sequence >alist ; M: tree-mixin pprint-narrow? drop t ; From 4300eeaa89b342e5b6e97d66e03f4f1a8874dfae Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 14:24:30 +1000 Subject: [PATCH 122/270] bank account simulator --- extra/bank/bank.factor | 6 +++--- extra/bank/summary.txt | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 extra/bank/summary.txt diff --git a/extra/bank/bank.factor b/extra/bank/bank.factor index 0ea4bae2b3..35d1337afc 100644 --- a/extra/bank/bank.factor +++ b/extra/bank/bank.factor @@ -1,10 +1,10 @@ -USING: accessors calendar kernel math money sequences ; +USING: accessors calendar kernel math math.order money sequences ; IN: bank TUPLE: account name interest-rate interest-payment-day opening-date transactions unpaid-interest interest-last-paid ; : ( name interest-rate interest-payment-day opening-date -- account ) - V{ } clone 0 pick account construct-boa ; + V{ } clone 0 pick account boa ; TUPLE: transaction date amount description ; C: transaction @@ -29,7 +29,7 @@ C: transaction : before? ( date date -- ? ) <=> 0 < ; : transactions-on-date ( account date -- transactions ) - [ before? ] curry subset ; + [ before? ] curry filter ; : balance-on-date ( account date -- balance ) transactions-on-date total ; diff --git a/extra/bank/summary.txt b/extra/bank/summary.txt new file mode 100644 index 0000000000..efd88787a5 --- /dev/null +++ b/extra/bank/summary.txt @@ -0,0 +1 @@ +Bank account simulator for compound interest calculated daily and paid monthly From 19022db77fc214627f619a09ab9738c7e9b78167 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Mon, 28 Apr 2008 14:30:49 +1000 Subject: [PATCH 123/270] deleting unfinished code from this branch --- extra/new-graphs/new-graphs.factor | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 extra/new-graphs/new-graphs.factor diff --git a/extra/new-graphs/new-graphs.factor b/extra/new-graphs/new-graphs.factor deleted file mode 100644 index b82ed8a22d..0000000000 --- a/extra/new-graphs/new-graphs.factor +++ /dev/null @@ -1,21 +0,0 @@ -! Copyright (C) 2008 Alex Chapman -! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs kernel new-slots sequences vectors ; -IN: new-graphs - -TUPLE: graph edges ; -TUPLE: digraph ; -TUPLE: undigraph ; - -: ( -- graph ) - H{ } clone graph construct-boa H{ } clone over set-delegate ; - -: ( -- graph ) - digraph construct-empty tuck set-delegate ; - -: ( -- graph ) - undigraph construct-empty tuck set-delegate ; - -GENERIC: add-vertex ( key value graph -- ) -M: graph add-vertex ( key value digraph -- ) set-at ; - From 688202ea1fb847b4a7239e7e3623cf8566e7f3f0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 10:11:26 -0500 Subject: [PATCH 124/270] fix bootstrap --- core/kernel/kernel-docs.factor | 1 - 1 file changed, 1 deletion(-) diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor index 6862232f2d..a3209ea42c 100755 --- a/core/kernel/kernel-docs.factor +++ b/core/kernel/kernel-docs.factor @@ -254,7 +254,6 @@ $nl "Some types of objects also have an intrinsic order allowing sorting using " { $link natural-sort } ":" { $subsection <=> } { $subsection compare } -{ $subsection invert-comparison } "Utilities for comparing objects:" { $subsection after? } { $subsection before? } From 61ffc2efe6dcdb4408264e33be3f0cc010b37709 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 10:36:41 -0500 Subject: [PATCH 125/270] better fix is a new boot image. --- core/kernel/kernel-docs.factor | 1 + 1 file changed, 1 insertion(+) diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor index a3209ea42c..6862232f2d 100755 --- a/core/kernel/kernel-docs.factor +++ b/core/kernel/kernel-docs.factor @@ -254,6 +254,7 @@ $nl "Some types of objects also have an intrinsic order allowing sorting using " { $link natural-sort } ":" { $subsection <=> } { $subsection compare } +{ $subsection invert-comparison } "Utilities for comparing objects:" { $subsection after? } { $subsection before? } From 5c1d60edf39c57f98305f8e296067c9fb3aa5770 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Thu, 17 Apr 2008 21:29:04 +0100 Subject: [PATCH 126/270] Basic CSV Parser --- extra/csv/authors.txt | 1 + extra/csv/csv-docs.factor | 14 +++++++++ extra/csv/csv-tests.factor | 60 ++++++++++++++++++++++++++++++++++++++ extra/csv/csv.factor | 59 +++++++++++++++++++++++++++++++++++++ extra/csv/summary.txt | 1 + 5 files changed, 135 insertions(+) create mode 100644 extra/csv/authors.txt create mode 100644 extra/csv/csv-docs.factor create mode 100644 extra/csv/csv-tests.factor create mode 100644 extra/csv/csv.factor create mode 100644 extra/csv/summary.txt diff --git a/extra/csv/authors.txt b/extra/csv/authors.txt new file mode 100644 index 0000000000..0be42b2faa --- /dev/null +++ b/extra/csv/authors.txt @@ -0,0 +1 @@ +Phil Dawes diff --git a/extra/csv/csv-docs.factor b/extra/csv/csv-docs.factor new file mode 100644 index 0000000000..c16ed46522 --- /dev/null +++ b/extra/csv/csv-docs.factor @@ -0,0 +1,14 @@ +USING: help.syntax help.markup kernel prettyprint sequences ; +IN: csv + +HELP: csv +{ $values { "stream" "a stream" } + { "rows" "an array of arrays of fields" } } +{ $description "parses a csv stream into an array of row arrays" +} ; + +HELP: csv-row +{ $values { "stream" "a stream" } + { "row" "an array of fields" } } +{ $description "parses a row from a csv stream" +} ; diff --git a/extra/csv/csv-tests.factor b/extra/csv/csv-tests.factor new file mode 100644 index 0000000000..bf70ed3009 --- /dev/null +++ b/extra/csv/csv-tests.factor @@ -0,0 +1,60 @@ +USING: io.streams.string csv tools.test shuffle ; + +! I like to name my unit tests +: named-unit-test ( name output input -- ) + nipd unit-test ; inline + +! tests nicked from the wikipedia csv article +! http://en.wikipedia.org/wiki/Comma-separated_values + +"Fields are separated by commas" +[ { { "1997" "Ford" "E350" } } ] +[ "1997,Ford,E350" csv ] named-unit-test + +"ignores whitespace before and after elements. n.b.specifically prohibited by RFC 4180, which states, 'Spaces are considered part of a field and should not be ignored.'" +[ { { "1997" "Ford" "E350" } } ] +[ "1997, Ford , E350" csv ] named-unit-test + +"keeps spaces in quotes" +[ { { "1997" "Ford" "E350" "Super, luxurious truck" } } ] +[ "1997,Ford,E350,\"Super, luxurious truck\"" csv ] named-unit-test + +"double quotes mean escaped in quotes" +[ { { "1997" "Ford" "E350" "Super \"luxurious\" truck" } } ] +[ "1997,Ford,E350,\"Super \"\"luxurious\"\" truck\"" + csv ] named-unit-test + +"Fields with embedded line breaks must be delimited by double-quote characters." +[ { { "1997" "Ford" "E350" "Go get one now\nthey are going fast" } } ] +[ "1997,Ford,E350,\"Go get one now\nthey are going fast\"" + csv ] named-unit-test + +"Fields with leading or trailing spaces must be delimited by double-quote characters. (See comment about leading and trailing spaces above)" +[ { { "1997" "Ford" "E350" " Super luxurious truck " } } ] +[ "1997,Ford,E350,\" Super luxurious truck \"" + csv ] unit-test + +"Fields may always be delimited by double-quote characters, whether necessary or not." +[ { { "1997" "Ford" "E350" } } ] +[ "\"1997\",\"Ford\",\"E350\"" csv ] named-unit-test + +"The first record in a csv file may contain column names in each of the fields." +[ { { "Year" "Make" "Model" } + { "1997" "Ford" "E350" } + { "2000" "Mercury" "Cougar" } } ] +[ "Year,Make,Model\n1997,Ford,E350\n2000,Mercury,Cougar" + csv ] named-unit-test + + + +! !!!!!!!! other tests + +[ { { "Phil Dawes" } } ] +[ "\"Phil Dawes\"" csv ] unit-test + +[ { { "1" "2" "3" } { "4" "5" "6" } } ] +[ "1,2,3\n4,5,6\n" csv ] unit-test + +"trims leading and trailing whitespace - n.b. this isn't really conformant, but lots of csv seems to assume this" +[ { { "foo yeah" "bah" "baz" } } ] +[ " foo yeah , bah ,baz\n" csv ] named-unit-test diff --git a/extra/csv/csv.factor b/extra/csv/csv.factor new file mode 100644 index 0000000000..ff95be2ead --- /dev/null +++ b/extra/csv/csv.factor @@ -0,0 +1,59 @@ +! Copyright (C) 2007, 2008 Phil Dawes +! See http://factorcode.org/license.txt for BSD license. + +! Simple CSV Parser +! Phil Dawes phil@phildawes.net + +USING: kernel sequences io namespaces combinators ; +IN: csv + +DEFER: quoted-field + +: not-quoted-field ( -- endchar ) + ",\"\n" read-until ! " + dup + { { CHAR: " [ drop drop quoted-field ] } ! " + { CHAR: , [ swap % ] } + { CHAR: \n [ swap % ] } + { f [ swap % ] } ! eof + } case ; + +: maybe-escaped-quote ( -- endchar ) + read1 + dup + { { CHAR: " [ , quoted-field ] } ! " is an escaped quote + { CHAR: \s [ drop not-quoted-field ] } + { CHAR: \t [ drop not-quoted-field ] } + [ drop ] + } case ; + +! trims whitespace from either end of string +: trim-whitespace ( str -- str ) + [ "\s\t" member? ] trim ; inline + +: quoted-field ( -- endchar ) + "\"" read-until ! " + drop % maybe-escaped-quote ; + +: field ( -- sep string ) + [ not-quoted-field ] "" make trim-whitespace ; + +: (row) ( -- sep ) + field , + dup CHAR: , = [ drop (row) ] when ; + +: row ( -- eof? array[string] ) + [ (row) ] { } make ; + +: append-if-row-not-empty ( row -- ) + dup { "" } = [ drop ] [ , ] if ; + +: (csv) ( -- ) + row append-if-row-not-empty + [ (csv) ] when ; + +: csv-row ( stream -- row ) + [ row nip ] with-stream ; + +: csv ( stream -- rows ) + [ [ (csv) ] { } make ] with-stream ; diff --git a/extra/csv/summary.txt b/extra/csv/summary.txt new file mode 100644 index 0000000000..503cc1b38d --- /dev/null +++ b/extra/csv/summary.txt @@ -0,0 +1 @@ +CSV parser From 02d95144d9a1526883f921ff1d247cb2b9f00284 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Thu, 24 Apr 2008 09:25:19 +0100 Subject: [PATCH 127/270] Added vocab monitors for all vocab-roots (not just files under resource-path) N.B. monitors are initialized on startup so additional vocab-roots need to be saved in image --- extra/tools/vocabs/monitor/monitor.factor | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/extra/tools/vocabs/monitor/monitor.factor b/extra/tools/vocabs/monitor/monitor.factor index ab5e8c66b7..563cd04e3e 100755 --- a/extra/tools/vocabs/monitor/monitor.factor +++ b/extra/tools/vocabs/monitor/monitor.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: threads io.files io.monitors init kernel vocabs vocabs.loader tools.vocabs namespaces continuations -sequences splitting assocs command-line ; +sequences splitting assocs command-line concurrency.messaging io.backend sets ; IN: tools.vocabs.monitor : vocab-dir>vocab-name ( path -- vocab ) @@ -22,17 +22,20 @@ IN: tools.vocabs.monitor : path>vocab ( path -- vocab ) chop-vocab-root path>vocab-name vocab-dir>vocab-name ; -: monitor-loop ( monitor -- ) +: monitor-loop ( -- ) #! On OS X, monitors give us the full path, so we chop it #! off if its there. - dup next-change drop path>vocab changed-vocab + receive first path>vocab changed-vocab reset-cache monitor-loop ; +: add-monitor-for-path ( path -- ) + normalize-path dup exists? [ t my-mailbox (monitor) ] when drop ; + : monitor-thread ( -- ) [ [ - "" resource-path t + vocab-roots get prune [ add-monitor-for-path ] each H{ } clone changed-vocabs set-global vocabs [ changed-vocab ] each From bd654f86210890f00344db6a3da2c2635c1b1a81 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 14:42:42 -0500 Subject: [PATCH 128/270] revert some changes in trees --- extra/trees/trees.factor | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/extra/trees/trees.factor b/extra/trees/trees.factor index f0826137ea..3cad81e447 100755 --- a/extra/trees/trees.factor +++ b/extra/trees/trees.factor @@ -25,7 +25,17 @@ TUPLE: node key value left right ; SYMBOL: current-side -: go-left? ( -- ? ) current-side get +lt+ eq? ; +: left ( -- symbol ) -1 ; inline +: right ( -- symbol ) 1 ; inline + +: key-side ( k1 k2 -- n ) + <=> { + { +lt+ [ -1 ] } + { +eq+ [ 0 ] } + { +gt+ [ 1 ] } + } case ; + +: go-left? ( -- ? ) current-side get left eq? ; : inc-count ( tree -- ) [ 1+ ] change-count drop ; @@ -43,9 +53,9 @@ SYMBOL: current-side : with-side ( side quot -- ) [ swap current-side set call ] with-scope ; inline : with-other-side ( quot -- ) - current-side get invert-comparison swap with-side ; inline -: go-left ( quot -- ) +lt+ swap with-side ; inline -: go-right ( quot -- ) +gt+ swap with-side ; inline + current-side get neg swap with-side ; inline +: go-left ( quot -- ) left swap with-side ; inline +: go-right ( quot -- ) right swap with-side ; inline : change-root ( tree quot -- ) swap [ root>> swap call ] keep set-tree-root ; inline @@ -53,10 +63,10 @@ SYMBOL: current-side : leaf? ( node -- ? ) [ left>> ] [ right>> ] bi or not ; -: random-side ( -- side ) +lt+ +gt+ 2array random ; +: random-side ( -- side ) left right 2array random ; : choose-branch ( key node -- key node-left/right ) - 2dup node-key <=> [ node-link ] with-side ; + 2dup node-key key-side [ node-link ] with-side ; : node-at* ( key node -- value ? ) [ @@ -71,7 +81,7 @@ M: tree at* ( key tree -- value ? ) root>> node-at* ; : node-set ( value key node -- node ) - 2dup key>> <=> dup +eq+ eq? [ + 2dup key>> key-side dup 0 eq? [ drop nip swap >>value ] [ [ @@ -165,7 +175,7 @@ DEFER: delete-node ] if ; : delete-bst-node ( key node -- node ) - 2dup node-key <=> dup +eq+ eq? [ + 2dup node-key key-side dup 0 eq? [ drop nip delete-node ] [ [ tuck node-link delete-bst-node over set-node-link ] with-side From 4b3fd628a766ce3fddcadf878aa6537e7fea8138 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 14:48:37 -0500 Subject: [PATCH 129/270] make splay trees work --- extra/trees/splay/splay.factor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/trees/splay/splay.factor b/extra/trees/splay/splay.factor index f2e3f9645f..8931db3a10 100644 --- a/extra/trees/splay/splay.factor +++ b/extra/trees/splay/splay.factor @@ -30,13 +30,13 @@ INSTANCE: splay tree-mixin drop dup node-right swapd r> swap ; : cmp ( key node -- obj node -1/0/1 ) - 2dup node-key <=> ; + 2dup node-key key-side ; : lcmp ( key node -- obj node -1/0/1 ) - 2dup node-left node-key <=> ; + 2dup node-left node-key key-side ; : rcmp ( key node -- obj node -1/0/1 ) - 2dup node-right node-key <=> ; + 2dup node-right node-key key-side ; DEFER: (splay) From 1f7be9945b5e0ade605c3a9eafed9d3360986307 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 28 Apr 2008 14:52:03 -0500 Subject: [PATCH 130/270] Cleanup erg's cleanup --- core/kernel/kernel-docs.factor | 16 +++------------- core/math/order/order-docs.factor | 23 +++++++++++++++++++---- core/math/order/order.factor | 6 ++++-- core/sorting/sorting-docs.factor | 2 ++ extra/help/handbook/handbook.factor | 1 + 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/core/kernel/kernel-docs.factor b/core/kernel/kernel-docs.factor index 6862232f2d..0ef8919713 100755 --- a/core/kernel/kernel-docs.factor +++ b/core/kernel/kernel-docs.factor @@ -1,5 +1,5 @@ USING: generic help.markup help.syntax math memory -namespaces sequences kernel.private layouts sorting classes +namespaces sequences kernel.private layouts classes kernel.private vectors combinators quotations strings words assocs arrays math.order ; IN: kernel @@ -241,7 +241,7 @@ ARTICLE: "conditionals" "Conditionals and logic" "See " { $link "combinators" } " for forms which abstract away common patterns involving multiple nested branches." { $see-also "booleans" "bitwise-arithmetic" both? either? } ; -ARTICLE: "equality" "Equality and comparison testing" +ARTICLE: "equality" "Equality" "There are two distinct notions of ``sameness'' when it comes to objects. You can test if two references point to the same object (" { $emphasis "identity comparison" } "), or you can test if two objects are equal in a domain-specific sense, usually by being instances of the same class, and having equal slot values (" { $emphasis "value comparison" } "). Both notions of equality are equality relations in the mathematical sense." $nl "Identity comparison:" @@ -250,16 +250,8 @@ $nl { $subsection = } "Custom value comparison methods:" { $subsection equal? } +"Utility class:" { $subsection identity-tuple } -"Some types of objects also have an intrinsic order allowing sorting using " { $link natural-sort } ":" -{ $subsection <=> } -{ $subsection compare } -{ $subsection invert-comparison } -"Utilities for comparing objects:" -{ $subsection after? } -{ $subsection before? } -{ $subsection after=? } -{ $subsection before=? } "An object can be cloned; the clone has distinct identity but equal value:" { $subsection clone } ; @@ -394,8 +386,6 @@ HELP: identity-tuple { $unchecked-example "T{ foo } dup clone = ." "f" } } ; -{ <=> compare natural-sort sort-keys sort-values } related-words - HELP: clone { $values { "obj" object } { "cloned" "a new object" } } { $contract "Outputs a new object equal to the given object. This is not guaranteed to actually copy the object; it does nothing with immutable objects, and does not copy words either. However, sequences and tuples can be cloned to obtain a shallow copy of the original." } ; diff --git a/core/math/order/order-docs.factor b/core/math/order/order-docs.factor index b761959a83..98ff1920fa 100644 --- a/core/math/order/order-docs.factor +++ b/core/math/order/order-docs.factor @@ -1,9 +1,9 @@ -USING: help.markup help.syntax kernel math sequences quotations -math.private ; +USING: help.markup help.syntax kernel math quotations +math.private words ; IN: math.order HELP: <=> -{ $values { "obj1" object } { "obj2" object } { "n" real } } +{ $values { "obj1" object } { "obj2" object } { "symbol" symbol } } { $contract "Compares two objects using an intrinsic total order, for example, the natural order for real numbers and lexicographic order for strings." $nl @@ -13,7 +13,6 @@ HELP: <=> { { $link +eq+ } " - indicating that " { $snippet "obj1" } " is equal to " { $snippet "obj2" } } { { $link +gt+ } " - indicating that " { $snippet "obj1" } " follows " { $snippet "obj2" } } } - "The default implementation treats the two objects as sequences, and recursively compares their elements. So no extra work is required to compare sequences lexicographically." } ; HELP: +lt+ @@ -77,3 +76,19 @@ HELP: [-] { $values { "x" real } { "y" real } { "z" real } } { $description "Subtracts " { $snippet "y" } " from " { $snippet "x" } ". If the result is less than zero, outputs zero." } ; +ARTICLE: "math.order" "Ordered objects" +"Some classes have an intrinsic order amongst instances:" +{ $subsection <=> } +{ $subsection compare } +{ $subsection invert-comparison } +"The above words return one of the following symbols:" +{ $subsection +lt+ } +{ $subsection +eq+ } +{ $subsection +gt+ } +"Utilities for comparing objects:" +{ $subsection after? } +{ $subsection before? } +{ $subsection after=? } +{ $subsection before=? } ; + +ABOUT: "math.order" diff --git a/core/math/order/order.factor b/core/math/order/order.factor index 36624f5ca9..aa597bbaad 100644 --- a/core/math/order/order.factor +++ b/core/math/order/order.factor @@ -7,11 +7,13 @@ SYMBOL: +lt+ SYMBOL: +eq+ SYMBOL: +gt+ -GENERIC: <=> ( obj1 obj2 -- n ) +GENERIC: <=> ( obj1 obj2 -- symbol ) -: (<=>) - dup 0 < [ drop +lt+ ] [ zero? +eq+ +gt+ ? ] if ; +: (<=>) ( a b -- symbol ) + 2dup < [ 2drop +lt+ ] [ number= +eq+ +gt+ ? ] if ; inline : invert-comparison ( symbol -- new-symbol ) + #! Can't use case, index or nth here dup +lt+ eq? [ drop +gt+ ] [ +eq+ eq? +eq+ +lt+ ? ] if ; M: real <=> (<=>) ; diff --git a/core/sorting/sorting-docs.factor b/core/sorting/sorting-docs.factor index 3da6ea6bd6..5827a711c8 100644 --- a/core/sorting/sorting-docs.factor +++ b/core/sorting/sorting-docs.factor @@ -62,3 +62,5 @@ HELP: binsearch* { $description "Variant of " { $link binsearch } " which outputs the found element rather than its index in the sequence." $nl "Outputs " { $link f } " if the sequence is empty. If the sequence has at least one element, this word always outputs a sequence element." } ; + +{ <=> compare natural-sort sort-keys sort-values } related-words diff --git a/extra/help/handbook/handbook.factor b/extra/help/handbook/handbook.factor index 7babaec7f6..ce875b32d1 100755 --- a/extra/help/handbook/handbook.factor +++ b/extra/help/handbook/handbook.factor @@ -104,6 +104,7 @@ $nl ARTICLE: "objects" "Objects" "An " { $emphasis "object" } " is any datum which may be identified. All values are objects in Factor. Each object carries type information, and types are checked at runtime; Factor is dynamically typed." { $subsection "equality" } +{ $subsection "math.order" } { $subsection "classes" } { $subsection "tuples" } { $subsection "generic" } From 594d57d5cc42db184aaabaecdf8a7822c0c8cfa4 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 15:17:47 -0500 Subject: [PATCH 131/270] fix docs --- core/math/order/order.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/math/order/order.factor b/core/math/order/order.factor index 36624f5ca9..b1820daa8d 100644 --- a/core/math/order/order.factor +++ b/core/math/order/order.factor @@ -40,4 +40,4 @@ M: real after=? ( obj1 obj2 -- ? ) >= ; : [-] ( x y -- z ) - 0 max ; inline -: compare ( obj1 obj2 quot -- n ) bi@ <=> ; inline +: compare ( obj1 obj2 quot -- symbol ) bi@ <=> ; inline From 0a99342f2b0065266d4c3ef5083e80369d498f11 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 16:30:11 -0500 Subject: [PATCH 132/270] fix bootstrap errors on windows --- extra/windows/com/syntax/syntax.factor | 184 ++++++++--------- extra/windows/ole32/ole32.factor | 271 +++++++++++++------------ 2 files changed, 228 insertions(+), 227 deletions(-) diff --git a/extra/windows/com/syntax/syntax.factor b/extra/windows/com/syntax/syntax.factor index 5921235638..b3c803be2d 100755 --- a/extra/windows/com/syntax/syntax.factor +++ b/extra/windows/com/syntax/syntax.factor @@ -1,92 +1,92 @@ -USING: alien alien.c-types kernel windows.ole32 combinators.lib -parser splitting sequences.lib sequences namespaces assocs -quotations shuffle accessors words macros alien.syntax fry ; -IN: windows.com.syntax - - com-interface-definition - -TUPLE: com-function-definition name return parameters ; -C: com-function-definition - -SYMBOL: +com-interface-definitions+ -+com-interface-definitions+ get-global -[ H{ } +com-interface-definitions+ set-global ] -unless - -: find-com-interface-definition ( name -- definition ) - dup "f" = [ drop f ] [ - dup +com-interface-definitions+ get-global at* - [ nip ] - [ swap " COM interface hasn't been defined" append throw ] - if - ] if ; - -: save-com-interface-definition ( definition -- ) - dup name>> +com-interface-definitions+ get-global set-at ; - -: (parse-com-function) ( tokens -- definition ) - [ second ] - [ first ] - [ 3 tail 2 group [ first ] map "void*" prefix ] - tri - ; - -: parse-com-functions ( -- functions ) - ";" parse-tokens { ")" } split - [ empty? not ] filter - [ (parse-com-function) ] map ; - -: (iid-word) ( definition -- word ) - name>> "-iid" append create-in ; - -: (function-word) ( function interface -- word ) - name>> "::" rot name>> 3append create-in ; - -: family-tree ( definition -- definitions ) - dup parent>> [ family-tree ] [ { } ] if* - swap add ; - -: family-tree-functions ( definition -- functions ) - dup parent>> [ family-tree-functions ] [ { } ] if* - swap functions>> append ; - -: (define-word-for-function) ( function interface n -- ) - -rot [ (function-word) swap ] 2keep drop - { return>> parameters>> } get-slots - [ com-invoke ] 3curry - define ; - -: define-words-for-com-interface ( definition -- ) - [ [ (iid-word) ] [ iid>> 1quotation ] bi define ] - [ name>> "com-interface" swap typedef ] - [ - dup family-tree-functions - [ (define-word-for-function) ] with each-index - ] - tri ; - -PRIVATE> - -: COM-INTERFACE: - scan - scan find-com-interface-definition - scan string>guid - parse-com-functions - - dup save-com-interface-definition - define-words-for-com-interface - ; parsing - +USING: alien alien.c-types kernel windows.ole32 combinators.lib +parser splitting sequences.lib sequences namespaces assocs +quotations shuffle accessors words macros alien.syntax fry ; +IN: windows.com.syntax + + com-interface-definition + +TUPLE: com-function-definition name return parameters ; +C: com-function-definition + +SYMBOL: +com-interface-definitions+ ++com-interface-definitions+ get-global +[ H{ } +com-interface-definitions+ set-global ] +unless + +: find-com-interface-definition ( name -- definition ) + dup "f" = [ drop f ] [ + dup +com-interface-definitions+ get-global at* + [ nip ] + [ swap " COM interface hasn't been defined" append throw ] + if + ] if ; + +: save-com-interface-definition ( definition -- ) + dup name>> +com-interface-definitions+ get-global set-at ; + +: (parse-com-function) ( tokens -- definition ) + [ second ] + [ first ] + [ 3 tail 2 group [ first ] map "void*" prefix ] + tri + ; + +: parse-com-functions ( -- functions ) + ";" parse-tokens { ")" } split + [ empty? not ] filter + [ (parse-com-function) ] map ; + +: (iid-word) ( definition -- word ) + name>> "-iid" append create-in ; + +: (function-word) ( function interface -- word ) + name>> "::" rot name>> 3append create-in ; + +: family-tree ( definition -- definitions ) + dup parent>> [ family-tree ] [ { } ] if* + swap suffix ; + +: family-tree-functions ( definition -- functions ) + dup parent>> [ family-tree-functions ] [ { } ] if* + swap functions>> append ; + +: (define-word-for-function) ( function interface n -- ) + -rot [ (function-word) swap ] 2keep drop + { return>> parameters>> } get-slots + [ com-invoke ] 3curry + define ; + +: define-words-for-com-interface ( definition -- ) + [ [ (iid-word) ] [ iid>> 1quotation ] bi define ] + [ name>> "com-interface" swap typedef ] + [ + dup family-tree-functions + [ (define-word-for-function) ] with each-index + ] + tri ; + +PRIVATE> + +: COM-INTERFACE: + scan + scan find-com-interface-definition + scan string>guid + parse-com-functions + + dup save-com-interface-definition + define-words-for-com-interface + ; parsing + diff --git a/extra/windows/ole32/ole32.factor b/extra/windows/ole32/ole32.factor index ae3dafbc9f..a71a569f16 100644 --- a/extra/windows/ole32/ole32.factor +++ b/extra/windows/ole32/ole32.factor @@ -1,135 +1,136 @@ -USING: alien alien.syntax alien.c-types alien.strings math -kernel sequences windows windows.types combinators.lib ; -IN: windows.ole32 - -LIBRARY: ole32 - -TYPEDEF: GUID* REFGUID -TYPEDEF: void* LPUNKNOWN -TYPEDEF: wchar_t* LPOLESTR -TYPEDEF: wchar_t* LPCOLESTR - -TYPEDEF: REFGUID REFIID -TYPEDEF: REFGUID REFCLSID - -FUNCTION: HRESULT CoCreateInstance ( REFGUID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFGUID riid, LPUNKNOWN out_ppv ) ; -FUNCTION: BOOL IsEqualGUID ( REFGUID rguid1, REFGUID rguid2 ) ; -FUNCTION: int StringFromGUID2 ( REFGUID rguid, LPOLESTR lpsz, int cchMax ) ; -FUNCTION: HRESULT CLSIDFromString ( LPOLESTR lpsz, REFGUID out_rguid ) ; - -: S_OK 0 ; inline -: S_FALSE 1 ; inline -: E_NOINTERFACE HEX: 80004002 ; inline -: E_FAIL HEX: 80004005 ; inline -: E_INVALIDARG HEX: 80070057 ; inline - -: MK_ALT HEX: 20 ; inline -: DROPEFFECT_NONE 0 ; inline -: DROPEFFECT_COPY 1 ; inline -: DROPEFFECT_MOVE 2 ; inline -: DROPEFFECT_LINK 4 ; inline -: DROPEFFECT_SCROLL HEX: 80000000 ; inline -: DD_DEFSCROLLINSET 11 ; inline -: DD_DEFSCROLLDELAY 50 ; inline -: DD_DEFSCROLLINTERVAL 50 ; inline -: DD_DEFDRAGDELAY 200 ; inline -: DD_DEFDRAGMINDIST 2 ; inline - -: CF_TEXT 1 ; inline -: CF_BITMAP 2 ; inline -: CF_METAFILEPICT 3 ; inline -: CF_SYLK 4 ; inline -: CF_DIF 5 ; inline -: CF_TIFF 6 ; inline -: CF_OEMTEXT 7 ; inline -: CF_DIB 8 ; inline -: CF_PALETTE 9 ; inline -: CF_PENDATA 10 ; inline -: CF_RIFF 11 ; inline -: CF_WAVE 12 ; inline -: CF_UNICODETEXT 13 ; inline -: CF_ENHMETAFILE 14 ; inline -: CF_HDROP 15 ; inline -: CF_LOCALE 16 ; inline -: CF_MAX 17 ; inline - -: CF_OWNERDISPLAY HEX: 0080 ; inline -: CF_DSPTEXT HEX: 0081 ; inline -: CF_DSPBITMAP HEX: 0082 ; inline -: CF_DSPMETAFILEPICT HEX: 0083 ; inline -: CF_DSPENHMETAFILE HEX: 008E ; inline - -: DVASPECT_CONTENT 1 ; inline -: DVASPECT_THUMBNAIL 2 ; inline -: DVASPECT_ICON 4 ; inline -: DVASPECT_DOCPRINT 8 ; inline - -: TYMED_HGLOBAL 1 ; inline -: TYMED_FILE 2 ; inline -: TYMED_ISTREAM 4 ; inline -: TYMED_ISTORAGE 8 ; inline -: TYMED_GDI 16 ; inline -: TYMED_MFPICT 32 ; inline -: TYMED_ENHMF 64 ; inline -: TYMED_NULL 0 ; inline - -C-STRUCT: DVTARGETDEVICE - { "DWORD" "tdSize" } - { "WORD" "tdDriverNameOffset" } - { "WORD" "tdDeviceNameOffset" } - { "WORD" "tdPortNameOffset" } - { "WORD" "tdExtDevmodeOffset" } - { "BYTE[1]" "tdData" } ; - -TYPEDEF: WORD CLIPFORMAT -TYPEDEF: POINT POINTL - -C-STRUCT: FORMATETC - { "CLIPFORMAT" "cfFormat" } - { "DVTARGETDEVICE*" "ptd" } - { "DWORD" "dwAspect" } - { "LONG" "lindex" } - { "DWORD" "tymed" } ; -TYPEDEF: FORMATETC* LPFORMATETC - -C-STRUCT: STGMEDIUM - { "DWORD" "tymed" } - { "void*" "data" } - { "LPUNKNOWN" "punkForRelease" } ; -TYPEDEF: STGMEDIUM* LPSTGMEDIUM - -: COINIT_MULTITHREADED 0 ; inline -: COINIT_APARTMENTTHREADED 2 ; inline -: COINIT_DISABLE_OLE1DDE 4 ; inline -: COINIT_SPEED_OVER_MEMORY 8 ; inline - -FUNCTION: HRESULT OleInitialize ( void* reserved ) ; -FUNCTION: HRESULT CoInitializeEx ( void* reserved, DWORD dwCoInit ) ; - -FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ; -FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ; -FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ; - -: succeeded? ( hresult -- ? ) - 0 HEX: 7FFFFFFF between? ; - -: ole32-error ( hresult -- ) - dup succeeded? [ - drop - ] [ (win32-error-string) throw ] if ; - -: ole-initialize ( -- ) - f OleInitialize ole32-error ; - -: guid= ( a b -- ? ) - IsEqualGUID c-bool> ; - -: GUID-STRING-LENGTH - "{01234567-89ab-cdef-0123-456789abcdef}" length ; inline - -: string>guid ( string -- guid ) - utf16n string>alien "GUID" [ CLSIDFromString ole32-error ] keep ; -: guid>string ( guid -- string ) - GUID-STRING-LENGTH 1+ [ "ushort" ] keep - [ StringFromGUID2 drop ] { 2 } multikeep utf16n alien>string ; - +USING: alien alien.syntax alien.c-types alien.strings math +kernel sequences windows windows.types combinators.lib +math.order ; +IN: windows.ole32 + +LIBRARY: ole32 + +TYPEDEF: GUID* REFGUID +TYPEDEF: void* LPUNKNOWN +TYPEDEF: wchar_t* LPOLESTR +TYPEDEF: wchar_t* LPCOLESTR + +TYPEDEF: REFGUID REFIID +TYPEDEF: REFGUID REFCLSID + +FUNCTION: HRESULT CoCreateInstance ( REFGUID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFGUID riid, LPUNKNOWN out_ppv ) ; +FUNCTION: BOOL IsEqualGUID ( REFGUID rguid1, REFGUID rguid2 ) ; +FUNCTION: int StringFromGUID2 ( REFGUID rguid, LPOLESTR lpsz, int cchMax ) ; +FUNCTION: HRESULT CLSIDFromString ( LPOLESTR lpsz, REFGUID out_rguid ) ; + +: S_OK 0 ; inline +: S_FALSE 1 ; inline +: E_NOINTERFACE HEX: 80004002 ; inline +: E_FAIL HEX: 80004005 ; inline +: E_INVALIDARG HEX: 80070057 ; inline + +: MK_ALT HEX: 20 ; inline +: DROPEFFECT_NONE 0 ; inline +: DROPEFFECT_COPY 1 ; inline +: DROPEFFECT_MOVE 2 ; inline +: DROPEFFECT_LINK 4 ; inline +: DROPEFFECT_SCROLL HEX: 80000000 ; inline +: DD_DEFSCROLLINSET 11 ; inline +: DD_DEFSCROLLDELAY 50 ; inline +: DD_DEFSCROLLINTERVAL 50 ; inline +: DD_DEFDRAGDELAY 200 ; inline +: DD_DEFDRAGMINDIST 2 ; inline + +: CF_TEXT 1 ; inline +: CF_BITMAP 2 ; inline +: CF_METAFILEPICT 3 ; inline +: CF_SYLK 4 ; inline +: CF_DIF 5 ; inline +: CF_TIFF 6 ; inline +: CF_OEMTEXT 7 ; inline +: CF_DIB 8 ; inline +: CF_PALETTE 9 ; inline +: CF_PENDATA 10 ; inline +: CF_RIFF 11 ; inline +: CF_WAVE 12 ; inline +: CF_UNICODETEXT 13 ; inline +: CF_ENHMETAFILE 14 ; inline +: CF_HDROP 15 ; inline +: CF_LOCALE 16 ; inline +: CF_MAX 17 ; inline + +: CF_OWNERDISPLAY HEX: 0080 ; inline +: CF_DSPTEXT HEX: 0081 ; inline +: CF_DSPBITMAP HEX: 0082 ; inline +: CF_DSPMETAFILEPICT HEX: 0083 ; inline +: CF_DSPENHMETAFILE HEX: 008E ; inline + +: DVASPECT_CONTENT 1 ; inline +: DVASPECT_THUMBNAIL 2 ; inline +: DVASPECT_ICON 4 ; inline +: DVASPECT_DOCPRINT 8 ; inline + +: TYMED_HGLOBAL 1 ; inline +: TYMED_FILE 2 ; inline +: TYMED_ISTREAM 4 ; inline +: TYMED_ISTORAGE 8 ; inline +: TYMED_GDI 16 ; inline +: TYMED_MFPICT 32 ; inline +: TYMED_ENHMF 64 ; inline +: TYMED_NULL 0 ; inline + +C-STRUCT: DVTARGETDEVICE + { "DWORD" "tdSize" } + { "WORD" "tdDriverNameOffset" } + { "WORD" "tdDeviceNameOffset" } + { "WORD" "tdPortNameOffset" } + { "WORD" "tdExtDevmodeOffset" } + { "BYTE[1]" "tdData" } ; + +TYPEDEF: WORD CLIPFORMAT +TYPEDEF: POINT POINTL + +C-STRUCT: FORMATETC + { "CLIPFORMAT" "cfFormat" } + { "DVTARGETDEVICE*" "ptd" } + { "DWORD" "dwAspect" } + { "LONG" "lindex" } + { "DWORD" "tymed" } ; +TYPEDEF: FORMATETC* LPFORMATETC + +C-STRUCT: STGMEDIUM + { "DWORD" "tymed" } + { "void*" "data" } + { "LPUNKNOWN" "punkForRelease" } ; +TYPEDEF: STGMEDIUM* LPSTGMEDIUM + +: COINIT_MULTITHREADED 0 ; inline +: COINIT_APARTMENTTHREADED 2 ; inline +: COINIT_DISABLE_OLE1DDE 4 ; inline +: COINIT_SPEED_OVER_MEMORY 8 ; inline + +FUNCTION: HRESULT OleInitialize ( void* reserved ) ; +FUNCTION: HRESULT CoInitializeEx ( void* reserved, DWORD dwCoInit ) ; + +FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ; +FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ; +FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ; + +: succeeded? ( hresult -- ? ) + 0 HEX: 7FFFFFFF between? ; + +: ole32-error ( hresult -- ) + dup succeeded? [ + drop + ] [ (win32-error-string) throw ] if ; + +: ole-initialize ( -- ) + f OleInitialize ole32-error ; + +: guid= ( a b -- ? ) + IsEqualGUID c-bool> ; + +: GUID-STRING-LENGTH + "{01234567-89ab-cdef-0123-456789abcdef}" length ; inline + +: string>guid ( string -- guid ) + utf16n string>alien "GUID" [ CLSIDFromString ole32-error ] keep ; +: guid>string ( guid -- string ) + GUID-STRING-LENGTH 1+ [ "ushort" ] keep + [ StringFromGUID2 drop ] { 2 } multikeep utf16n alien>string ; + From 618e10a6b2240fb8a92c11c9673b9eb284418584 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 16:48:55 -0500 Subject: [PATCH 133/270] refactor db: native-id -> db-assigned-id assigned-id -> user-assigned-id --- extra/db/db.factor | 1 - extra/db/postgresql/lib/lib.factor | 2 +- extra/db/postgresql/postgresql.factor | 15 +++++----- extra/db/sqlite/lib/lib.factor | 4 +-- extra/db/sqlite/sqlite.factor | 14 ++++----- extra/db/tuples/tuples-tests.factor | 42 +++++++++++++-------------- extra/db/tuples/tuples.factor | 18 ++++++------ extra/db/types/types.factor | 21 +++++++------- 8 files changed, 58 insertions(+), 59 deletions(-) diff --git a/extra/db/db.factor b/extra/db/db.factor index 42a2b4bcb0..237d8698a6 100755 --- a/extra/db/db.factor +++ b/extra/db/db.factor @@ -35,7 +35,6 @@ HOOK: db-close db ( handle -- ) handle>> db-close ] with-variable ; -! TUPLE: sql sql in-params out-params ; TUPLE: statement handle sql in-params out-params bind-params bound? type ; TUPLE: simple-statement < statement ; TUPLE: prepared-statement < statement ; diff --git a/extra/db/postgresql/lib/lib.factor b/extra/db/postgresql/lib/lib.factor index 436d701803..8b0026b6e5 100755 --- a/extra/db/postgresql/lib/lib.factor +++ b/extra/db/postgresql/lib/lib.factor @@ -154,7 +154,7 @@ M: postgresql-malloc-destructor dispose ( obj -- ) : postgresql-column-typed ( handle row column type -- obj ) dup array? [ first ] when { - { +native-id+ [ pq-get-number ] } + { +db-assigned-id+ [ pq-get-number ] } { +random-id+ [ pq-get-number ] } { INTEGER [ pq-get-number ] } { BIG-INTEGER [ pq-get-number ] } diff --git a/extra/db/postgresql/postgresql.factor b/extra/db/postgresql/postgresql.factor index 687146af11..e728f2f011 100755 --- a/extra/db/postgresql/postgresql.factor +++ b/extra/db/postgresql/postgresql.factor @@ -6,6 +6,7 @@ sequences debugger db db.postgresql.lib db.postgresql.ffi db.tuples db.types tools.annotations math.ranges combinators sequences.lib classes locals words tools.walker namespaces.lib accessors random db.queries ; +USE: tools.walker IN: db.postgresql TUPLE: postgresql-db < db @@ -48,7 +49,7 @@ M: literal-bind postgresql-bind-conversion ( tuple literal-bind -- obj ) nip value>> ; M: generator-bind postgresql-bind-conversion ( tuple generate-bind -- obj ) - nip singleton>> eval-generator ; + nip generator-singleton>> eval-generator ; M: postgresql-statement bind-tuple ( tuple statement -- ) tuck in-params>> @@ -158,7 +159,7 @@ M: postgresql-db bind# ( spec obj -- ) M: postgresql-db create-sql-statement ( class -- seq ) [ [ create-table-sql , ] keep - dup db-columns find-primary-key native-id? + dup db-columns find-primary-key db-assigned-id-spec? [ create-function-sql , ] [ drop ] if ] { } make ; @@ -179,11 +180,11 @@ M: postgresql-db create-sql-statement ( class -- seq ) M: postgresql-db drop-sql-statement ( class -- seq ) [ [ drop-table-sql , ] keep - dup db-columns find-primary-key native-id? + dup db-columns find-primary-key db-assigned-id-spec? [ drop-function-sql , ] [ drop ] if ] { } make ; -M: postgresql-db ( class -- statement ) +M: postgresql-db ( class -- statement ) [ "select add_" 0% 0% "(" 0% @@ -193,7 +194,7 @@ M: postgresql-db ( class -- statement ) ");" 0% ] query-make ; -M: postgresql-db ( class -- statement ) +M: postgresql-db ( class -- statement ) [ "insert into " 0% 0% "(" 0% @@ -219,8 +220,8 @@ M: postgresql-db insert-tuple* ( tuple statement -- ) M: postgresql-db persistent-table ( -- hashtable ) H{ - { +native-id+ { "integer" "serial primary key" f } } - { +assigned-id+ { f f "primary key" } } + { +db-assigned-id+ { "integer" "serial primary key" f } } + { +user-assigned-id+ { f f "primary key" } } { +random-id+ { "bigint" "bigint primary key" f } } { TEXT { "text" "text" f } } { VARCHAR { "varchar" "varchar" f } } diff --git a/extra/db/sqlite/lib/lib.factor b/extra/db/sqlite/lib/lib.factor index 9f29b9e6fb..f25ec12d1b 100755 --- a/extra/db/sqlite/lib/lib.factor +++ b/extra/db/sqlite/lib/lib.factor @@ -106,7 +106,7 @@ IN: db.sqlite.lib object>bytes sqlite-bind-blob-by-name ] } - { +native-id+ [ sqlite-bind-int-by-name ] } + { +db-assigned-id+ [ sqlite-bind-int-by-name ] } { +random-id+ [ sqlite-bind-int64-by-name ] } { NULL [ sqlite-bind-null-by-name ] } [ no-sql-type ] @@ -132,7 +132,7 @@ IN: db.sqlite.lib : sqlite-column-typed ( handle index type -- obj ) dup array? [ first ] when { - { +native-id+ [ sqlite3_column_int64 ] } + { +db-assigned-id+ [ sqlite3_column_int64 ] } { +random-id+ [ sqlite3-column-uint64 ] } { INTEGER [ sqlite3_column_int ] } { BIG-INTEGER [ sqlite3_column_int64 ] } diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 2407613eca..6297f89d8e 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -79,7 +79,7 @@ M: literal-bind sqlite-bind-conversion ( tuple literal-bind -- array ) ; M: generator-bind sqlite-bind-conversion ( tuple generate-bind -- array ) - nip [ key>> ] [ singleton>> eval-generator ] [ type>> ] tri + nip [ key>> ] [ generator-singleton>> eval-generator ] [ type>> ] tri ; M: sqlite-statement bind-tuple ( tuple statement -- ) @@ -129,11 +129,11 @@ M: sqlite-db create-sql-statement ( class -- statement ) M: sqlite-db drop-sql-statement ( class -- statement ) [ "drop table " 0% 0% ";" 0% drop ] query-make ; -M: sqlite-db ( tuple -- statement ) +M: sqlite-db ( tuple -- statement ) [ "insert into " 0% 0% "(" 0% - maybe-remove-id + remove-db-assigned-id dup [ ", " 0% ] [ column-name>> 0% ] interleave ") values(" 0% [ ", " 0% ] [ @@ -149,8 +149,8 @@ M: sqlite-db ( tuple -- statement ) ");" 0% ] query-make ; -M: sqlite-db ( tuple -- statement ) - ; +M: sqlite-db ( tuple -- statement ) + ; M: sqlite-db bind# ( spec obj -- ) >r @@ -163,8 +163,8 @@ M: sqlite-db bind% ( spec -- ) M: sqlite-db persistent-table ( -- assoc ) H{ - { +native-id+ { "integer primary key" "integer primary key" "primary key" } } - { +assigned-id+ { f f "primary key" } } + { +db-assigned-id+ { "integer primary key" "integer primary key" "primary key" } } + { +user-assigned-id+ { f f "primary key" } } { +random-id+ { "integer primary key" "integer primary key" "primary key" } } { INTEGER { "integer" "integer" "primary key" } } { BIG-INTEGER { "bigint" "bigint" } } diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 066bf1ce96..7b22a3c594 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -21,7 +21,7 @@ ts date time blob factor-blob ; set-person-factor-blob } person construct ; -: ( id name age real ts date time blob factor-blob -- person ) +: ( id name age real ts date time blob factor-blob -- person ) [ set-person-the-id ] keep ; SYMBOL: person1 @@ -106,10 +106,10 @@ SYMBOL: person4 [ ] [ person drop-table ] unit-test ; -: native-person-schema ( -- ) +: db-assigned-person-schema ( -- ) person "PERSON" { - { "the-id" "ID" +native-id+ } + { "the-id" "ID" +db-assigned-id+ } { "the-name" "NAME" { VARCHAR 256 } +not-null+ } { "the-number" "AGE" INTEGER { +default+ 0 } } { "the-real" "REAL" DOUBLE { +default+ 0.3 } } @@ -132,10 +132,10 @@ SYMBOL: person4 T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; -: assigned-person-schema ( -- ) +: user-assigned-person-schema ( -- ) person "PERSON" { - { "the-id" "ID" INTEGER +assigned-id+ } + { "the-id" "ID" INTEGER +user-assigned-id+ } { "the-name" "NAME" { VARCHAR 256 } +not-null+ } { "the-number" "AGE" INTEGER { +default+ 0 } } { "the-real" "REAL" DOUBLE { +default+ 0.3 } } @@ -145,27 +145,27 @@ SYMBOL: person4 { "blob" "B" BLOB } { "factor-blob" "FB" FACTOR-BLOB } } define-persistent - 1 "billy" 10 3.14 f f f f f person1 set - 2 "johnny" 10 3.14 f f f f f person2 set + 1 "billy" 10 3.14 f f f f f person1 set + 2 "johnny" 10 3.14 f f f f f person2 set 3 "teddy" 10 3.14 T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } B{ 115 116 111 114 101 105 110 97 98 108 111 98 } - f person3 set + f person3 set 4 "eddie" 10 3.14 T{ timestamp f 2008 3 5 16 24 11 T{ duration f 0 0 0 0 0 0 } } T{ timestamp f 2008 11 22 0 0 0 T{ duration f 0 0 0 0 0 0 } } T{ timestamp f f f f 12 34 56 T{ duration f 0 0 0 0 0 0 } } - f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; + f H{ { 1 2 } { 3 4 } { 5 "lol" } } person4 set ; TUPLE: paste n summary author channel mode contents timestamp annotations ; TUPLE: annotation n paste-id summary author mode contents ; -: native-paste-schema ( -- ) +: db-assigned-paste-schema ( -- ) paste "PASTE" { - { "n" "ID" +native-id+ } + { "n" "ID" +db-assigned-id+ } { "summary" "SUMMARY" TEXT } { "author" "AUTHOR" TEXT } { "channel" "CHANNEL" TEXT } @@ -177,7 +177,7 @@ TUPLE: annotation n paste-id summary author mode contents ; annotation "ANNOTATION" { - { "n" "ID" +native-id+ } + { "n" "ID" +db-assigned-id+ } { "paste-id" "PASTE_ID" INTEGER { +foreign-id+ paste "n" } } { "summary" "SUMMARY" TEXT } { "author" "AUTHOR" TEXT } @@ -210,7 +210,7 @@ TUPLE: serialize-me id data ; : test-serialize ( -- ) serialize-me "SERIALIZED" { - { "id" "ID" +native-id+ } + { "id" "ID" +db-assigned-id+ } { "data" "DATA" FACTOR-BLOB } } define-persistent [ serialize-me drop-table ] [ drop ] recover @@ -226,7 +226,7 @@ TUPLE: exam id name score ; : test-intervals ( -- ) exam "EXAM" { - { "id" "ID" +native-id+ } + { "id" "ID" +db-assigned-id+ } { "name" "NAME" TEXT } { "score" "SCORE" INTEGER } } define-persistent @@ -304,7 +304,7 @@ TUPLE: bignum-test id m n o ; : test-bignum bignum-test "BIGNUM_TEST" { - { "id" "ID" +native-id+ } + { "id" "ID" +db-assigned-id+ } { "m" "M" BIG-INTEGER } { "n" "N" UNSIGNED-BIG-INTEGER } { "o" "O" SIGNED-BIG-INTEGER } @@ -345,17 +345,17 @@ C: secret T{ secret } select-tuples length 3 = ] unit-test ; -[ native-person-schema test-tuples ] test-sqlite -[ assigned-person-schema test-tuples ] test-sqlite -[ assigned-person-schema test-repeated-insert ] test-sqlite +[ db-assigned-person-schema test-tuples ] test-sqlite +[ user-assigned-person-schema test-tuples ] test-sqlite +[ user-assigned-person-schema test-repeated-insert ] test-sqlite [ test-bignum ] test-sqlite [ test-serialize ] test-sqlite [ test-intervals ] test-sqlite [ test-random-id ] test-sqlite -[ native-person-schema test-tuples ] test-postgresql -[ assigned-person-schema test-tuples ] test-postgresql -[ assigned-person-schema test-repeated-insert ] test-postgresql +[ db-assigned-person-schema test-tuples ] test-postgresql +[ user-assigned-person-schema test-tuples ] test-postgresql +[ user-assigned-person-schema test-repeated-insert ] test-postgresql [ test-bignum ] test-postgresql [ test-serialize ] test-postgresql [ test-intervals ] test-postgresql diff --git a/extra/db/tuples/tuples.factor b/extra/db/tuples/tuples.factor index ce2236d23b..e14b4f79d4 100755 --- a/extra/db/tuples/tuples.factor +++ b/extra/db/tuples/tuples.factor @@ -37,8 +37,8 @@ SYMBOL: sql-counter HOOK: create-sql-statement db ( class -- obj ) HOOK: drop-sql-statement db ( class -- obj ) -HOOK: db ( class -- obj ) -HOOK: db ( class -- obj ) +HOOK: db ( class -- obj ) +HOOK: db ( class -- obj ) HOOK: db ( class -- obj ) HOOK: db ( class -- obj ) @@ -65,7 +65,7 @@ SINGLETON: retryable [ bind-params>> ] [ in-params>> ] bi [ dup generator-bind? [ - singleton>> eval-generator >>value + generator-singleton>> eval-generator >>value ] [ drop ] if @@ -119,19 +119,19 @@ M: retryable execute-statement* ( statement type -- ) [ execute-statement ] with-disposals ] [ create-table ] bi ; -: insert-native ( tuple -- ) +: insert-db-assigned-statement ( tuple -- ) dup class - db get db-insert-statements [ ] cache + db get db-insert-statements [ ] cache [ bind-tuple ] 2keep insert-tuple* ; -: insert-nonnative ( tuple -- ) +: insert-user-assigned-statement ( tuple -- ) dup class - db get db-insert-statements [ ] cache + db get db-insert-statements [ ] cache [ bind-tuple ] keep execute-statement ; : insert-tuple ( tuple -- ) - dup class db-columns find-primary-key nonnative-id? - [ insert-nonnative ] [ insert-native ] if ; + dup class db-columns find-primary-key db-assigned-id-spec? + [ insert-db-assigned-statement ] [ insert-user-assigned-statement ] if ; : update-tuple ( tuple -- ) dup class diff --git a/extra/db/types/types.factor b/extra/db/types/types.factor index 887293ef94..e11d246643 100755 --- a/extra/db/types/types.factor +++ b/extra/db/types/types.factor @@ -15,18 +15,17 @@ TUPLE: sql-spec class slot-name column-name type primary-key modifiers ; TUPLE: literal-bind key type value ; C: literal-bind -TUPLE: generator-bind key singleton type ; +TUPLE: generator-bind key generator-singleton type ; C: generator-bind SINGLETON: random-id-generator TUPLE: low-level-binding value ; C: low-level-binding -SINGLETON: +native-id+ -SINGLETON: +assigned-id+ +SINGLETON: +db-assigned-id+ +SINGLETON: +user-assigned-id+ SINGLETON: +random-id+ -UNION: +primary-key+ +native-id+ +assigned-id+ +random-id+ ; -UNION: +nonnative-id+ +random-id+ +assigned-id+ ; +UNION: +primary-key+ +db-assigned-id+ +user-assigned-id+ +random-id+ ; SYMBOLS: +autoincrement+ +serial+ +unique+ +default+ +null+ +not-null+ +foreign-id+ +has-many+ ; @@ -43,11 +42,11 @@ SYMBOLS: +autoincrement+ +serial+ +unique+ +default+ +null+ +not-null+ : primary-key? ( spec -- ? ) primary-key>> +primary-key+? ; -: native-id? ( spec -- ? ) - primary-key>> +native-id+? ; +: db-assigned-id-spec? ( spec -- ? ) + primary-key>> +db-assigned-id+? ; -: nonnative-id? ( spec -- ? ) - primary-key>> +nonnative-id+? ; +: assigned-id-spec? ( spec -- ? ) + primary-key>> +user-assigned-id+? ; : normalize-spec ( spec -- ) dup type>> dup +primary-key+? [ @@ -82,8 +81,8 @@ FACTOR-BLOB NULL ; : number>string* ( n/str -- str ) dup number? [ number>string ] when ; -: maybe-remove-id ( specs -- obj ) - [ +native-id+? not ] filter ; +: remove-db-assigned-id ( specs -- obj ) + [ +db-assigned-id+? not ] filter ; : remove-relations ( specs -- newcolumns ) [ relation? not ] filter ; From 1c2d252ffd7c230e99c587a4a6657675a24882ea Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 17:17:19 -0500 Subject: [PATCH 134/270] fix randomly generated ids --- extra/db/postgresql/postgresql.factor | 9 ++++++--- extra/db/sqlite/sqlite.factor | 9 ++++++--- extra/db/tuples/tuples-tests.factor | 4 ++-- extra/db/types/types.factor | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/extra/db/postgresql/postgresql.factor b/extra/db/postgresql/postgresql.factor index e728f2f011..9f747082c6 100755 --- a/extra/db/postgresql/postgresql.factor +++ b/extra/db/postgresql/postgresql.factor @@ -49,7 +49,8 @@ M: literal-bind postgresql-bind-conversion ( tuple literal-bind -- obj ) nip value>> ; M: generator-bind postgresql-bind-conversion ( tuple generate-bind -- obj ) - nip generator-singleton>> eval-generator ; + dup generator-singleton>> eval-generator + [ swap slot-name>> rot set-slot-named ] [ ] bi ; M: postgresql-statement bind-tuple ( tuple statement -- ) tuck in-params>> @@ -205,8 +206,10 @@ M: postgresql-db ( class -- statement ) [ ", " 0% ] [ dup type>> +random-id+ = [ [ - drop bind-name% - f random-id-generator + bind-name% + slot-name>> + f + random-id-generator ] [ type>> ] bi 1, ] [ bind% diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor index 6297f89d8e..4aaa9668f0 100755 --- a/extra/db/sqlite/sqlite.factor +++ b/extra/db/sqlite/sqlite.factor @@ -79,8 +79,10 @@ M: literal-bind sqlite-bind-conversion ( tuple literal-bind -- array ) ; M: generator-bind sqlite-bind-conversion ( tuple generate-bind -- array ) - nip [ key>> ] [ generator-singleton>> eval-generator ] [ type>> ] tri - ; + tuck + [ generator-singleton>> eval-generator tuck ] [ slot-name>> ] bi + rot set-slot-named + >r [ key>> ] [ type>> ] bi r> swap ; M: sqlite-statement bind-tuple ( tuple statement -- ) [ @@ -138,10 +140,11 @@ M: sqlite-db ( tuple -- statement ) ") values(" 0% [ ", " 0% ] [ dup type>> +random-id+ = [ + [ slot-name>> ] [ column-name>> ":" prepend dup 0% random-id-generator - ] [ type>> ] bi 1, + ] [ type>> ] tri 1, ] [ bind% ] if diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 7b22a3c594..f5f229bfd2 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -330,7 +330,7 @@ C: secret [ ] [ secret ensure-table ] unit-test - [ ] [ f "kilroy was here" insert-tuple ] unit-test + [ t ] [ f "kilroy was here" [ insert-tuple ] keep n>> integer? ] unit-test [ ] [ f "kilroy was here2" insert-tuple ] unit-test @@ -342,7 +342,7 @@ C: secret ] unit-test [ t ] [ - T{ secret } select-tuples length 3 = + T{ secret } select-tuples dup . length 3 = ] unit-test ; [ db-assigned-person-schema test-tuples ] test-sqlite diff --git a/extra/db/types/types.factor b/extra/db/types/types.factor index e11d246643..8328bd7626 100755 --- a/extra/db/types/types.factor +++ b/extra/db/types/types.factor @@ -15,7 +15,7 @@ TUPLE: sql-spec class slot-name column-name type primary-key modifiers ; TUPLE: literal-bind key type value ; C: literal-bind -TUPLE: generator-bind key generator-singleton type ; +TUPLE: generator-bind slot-name key generator-singleton type ; C: generator-bind SINGLETON: random-id-generator From 2d93f850299563ac4f38649c81c06686774c0e22 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 17:35:45 -0500 Subject: [PATCH 135/270] delete-tuple now takes an object as a template --- extra/db/queries/queries.factor | 16 ++++++++-------- extra/db/tuples/tuples.factor | 13 ++++--------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index 41b2d01b28..7f3eaff84c 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -35,14 +35,6 @@ M: db ( class -- statement ) where-primary-key% ] query-make ; -M: db ( specs table -- sql ) - [ - "delete from " 0% 0% - " where " 0% - find-primary-key - dup column-name>> 0% " = " 0% bind% - ] query-make ; - M: random-id-generator eval-generator ( singleton -- obj ) drop system-random-generator get [ @@ -87,6 +79,14 @@ M: string where ( spec obj -- ) object-where ; 2dup slot-name>> swap get-slot-named where ] interleave drop ; +M: db ( tuple table -- sql ) + [ + "delete from " 0% 0% + dupd + [ slot-name>> swap get-slot-named ] with filter + dup empty? [ 2drop ] [ where-clause ] if ";" 0% + ] query-make ; + M: db ( tuple class -- statement ) [ "select " 0% diff --git a/extra/db/tuples/tuples.factor b/extra/db/tuples/tuples.factor index e14b4f79d4..afea61fc90 100755 --- a/extra/db/tuples/tuples.factor +++ b/extra/db/tuples/tuples.factor @@ -39,13 +39,8 @@ HOOK: drop-sql-statement db ( class -- obj ) HOOK: db ( class -- obj ) HOOK: db ( class -- obj ) - HOOK: db ( class -- obj ) -HOOK: db ( class -- obj ) - -HOOK: db ( class -- obj ) -HOOK: db ( class -- obj ) - +HOOK: db ( tuple class -- obj ) HOOK: db ( tuple class -- tuple ) HOOK: insert-tuple* db ( tuple statement -- ) @@ -139,9 +134,9 @@ M: retryable execute-statement* ( statement type -- ) [ bind-tuple ] keep execute-statement ; : delete-tuple ( tuple -- ) - dup class - db get db-delete-statements [ ] cache - [ bind-tuple ] keep execute-statement ; + dup dup class [ + [ bind-tuple ] keep execute-statement + ] with-disposal ; : select-tuples ( tuple -- tuples ) dup dup class [ From dadb4c4060d072ab1149749c610586a262e6022c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 17:38:12 -0500 Subject: [PATCH 136/270] native-id -> db-assigned-id --- extra/http/server/sessions/storage/db/db.factor | 2 +- extra/semantic-db/semantic-db.factor | 2 +- extra/webapps/pastebin/pastebin.factor | 4 ++-- extra/webapps/planet/planet.factor | 2 +- extra/webapps/todo/todo.factor | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/extra/http/server/sessions/storage/db/db.factor b/extra/http/server/sessions/storage/db/db.factor index 58a0130b36..0d8ad84985 100755 --- a/extra/http/server/sessions/storage/db/db.factor +++ b/extra/http/server/sessions/storage/db/db.factor @@ -10,7 +10,7 @@ SINGLETON: sessions-in-db session "SESSIONS" { ! { "id" "ID" +random-id+ system-random-generator } - { "id" "ID" INTEGER +native-id+ } + { "id" "ID" INTEGER +db-assigned-id+ } { "expires" "EXPIRES" BIG-INTEGER +not-null+ } { "namespace" "NAMESPACE" FACTOR-BLOB } } define-persistent diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 279ebcf922..4591f6bf08 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -12,7 +12,7 @@ TUPLE: node id content ; node "node" { - { "id" "id" +native-id+ +autoincrement+ } + { "id" "id" +db-assigned-id+ +autoincrement+ } { "content" "content" TEXT } } define-persistent diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor index 9301b14353..616da67eee 100644 --- a/extra/webapps/pastebin/pastebin.factor +++ b/extra/webapps/pastebin/pastebin.factor @@ -24,7 +24,7 @@ TUPLE: paste id summary author mode date contents annotations captcha ; paste "PASTE" { - { "id" "ID" INTEGER +native-id+ } + { "id" "ID" INTEGER +db-assigned-id+ } { "summary" "SUMMARY" { VARCHAR 256 } +not-null+ } { "author" "AUTHOR" { VARCHAR 256 } +not-null+ } { "mode" "MODE" { VARCHAR 256 } +not-null+ } @@ -43,7 +43,7 @@ TUPLE: annotation aid id summary author mode contents date captcha ; annotation "ANNOTATION" { - { "aid" "AID" INTEGER +native-id+ } + { "aid" "AID" INTEGER +db-assigned-id+ } { "id" "ID" INTEGER +not-null+ } { "summary" "SUMMARY" { VARCHAR 256 } +not-null+ } { "author" "AUTHOR" { VARCHAR 256 } +not-null+ } diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 0e9601461c..d3260e1c70 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -27,7 +27,7 @@ M: blog link-href www-url>> ; blog "BLOGS" { - { "id" "ID" INTEGER +native-id+ } + { "id" "ID" INTEGER +db-assigned-id+ } { "name" "NAME" { VARCHAR 256 } +not-null+ } { "www-url" "WWWURL" { VARCHAR 256 } +not-null+ } { "feed-url" "FEEDURL" { VARCHAR 256 } +not-null+ } diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index 5c60b37f82..d04c8d97bd 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -15,7 +15,7 @@ TUPLE: todo uid id priority summary description ; todo "TODO" { { "uid" "UID" { VARCHAR 256 } +not-null+ } - { "id" "ID" +native-id+ } + { "id" "ID" +db-assigned-id+ } { "priority" "PRIORITY" INTEGER +not-null+ } { "summary" "SUMMARY" { VARCHAR 256 } +not-null+ } { "description" "DESCRIPTION" { VARCHAR 256 } } From e486683d96236e1d37cd4d128529accd0142dfed Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 18:09:13 -0500 Subject: [PATCH 137/270] fix binsearch and thus math.primes --- core/sorting/sorting-tests.factor | 14 +++++++------- core/sorting/sorting.factor | 6 +++--- extra/ui/gadgets/gadgets.factor | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/sorting/sorting-tests.factor b/core/sorting/sorting-tests.factor index 441867af66..a56c41b620 100755 --- a/core/sorting/sorting-tests.factor +++ b/core/sorting/sorting-tests.factor @@ -19,10 +19,10 @@ unit-test [ 3 ] [ { 1 2 3 4 } midpoint ] unit-test -[ f ] [ 3 { } [ - ] binsearch ] unit-test -[ 0 ] [ 3 { 3 } [ - ] binsearch ] unit-test -[ 1 ] [ 2 { 1 2 3 } [ - ] binsearch ] unit-test -[ 3 ] [ 4 { 1 2 3 4 5 6 } [ - ] binsearch ] unit-test -[ 1 ] [ 3.5 { 1 2 3 4 5 6 7 8 } [ - ] binsearch ] unit-test -[ 3 ] [ 5.5 { 1 2 3 4 5 6 7 8 } [ - ] binsearch ] unit-test -[ 10 ] [ 10 20 >vector [ - ] binsearch ] unit-test +[ f ] [ 3 { } [ <=> ] binsearch ] unit-test +[ 0 ] [ 3 { 3 } [ <=> ] binsearch ] unit-test +[ 1 ] [ 2 { 1 2 3 } [ <=> ] binsearch ] unit-test +[ 3 ] [ 4 { 1 2 3 4 5 6 } [ <=> ] binsearch ] unit-test +[ 2 ] [ 3.5 { 1 2 3 4 5 6 7 8 } [ <=> ] binsearch ] unit-test +[ 4 ] [ 5.5 { 1 2 3 4 5 6 7 8 } [ <=> ] binsearch ] unit-test +[ 10 ] [ 10 20 >vector [ <=> ] binsearch ] unit-test diff --git a/core/sorting/sorting.factor b/core/sorting/sorting.factor index fa8d50ea0e..dac1c08e46 100755 --- a/core/sorting/sorting.factor +++ b/core/sorting/sorting.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel math sequences vectors math.order -sequences sequences.private growable ; +sequences sequences.private growable math.order ; IN: sorting DEFER: sort @@ -58,13 +58,13 @@ PRIVATE> [ midpoint@ ] keep nth-unsafe ; inline : partition ( seq n -- slice ) - 1 < swap halves ? ; inline + +gt+ eq? not swap halves ? ; inline : (binsearch) ( elt quot seq -- i ) dup length 1 <= [ slice-from 2nip ] [ - [ midpoint swap call ] 3keep roll dup zero? + [ midpoint swap call ] 3keep roll dup +eq+ eq? [ drop dup slice-from swap midpoint@ + 2nip ] [ partition (binsearch) ] if ] if ; inline diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor index 15c174d52e..411552cc32 100755 --- a/extra/ui/gadgets/gadgets.factor +++ b/extra/ui/gadgets/gadgets.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays hashtables kernel models math namespaces sequences quotations math.vectors combinators sorting vectors dlists -models threads concurrency.flags ; +models threads concurrency.flags math.order ; IN: ui.gadgets SYMBOL: ui-notify-flag @@ -106,7 +106,7 @@ GENERIC: children-on ( rect/point gadget -- seq ) M: gadget children-on nip gadget-children ; : (fast-children-on) ( dim axis gadgets -- i ) - swapd [ rect-loc v- over v. ] binsearch nip ; + swapd [ rect-loc v- over v. 0 <=> ] binsearch nip ; : fast-children-on ( rect axis children -- from to ) 3dup From 93bf51eb68f2beb0e472821cc1843e46991d1e31 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 18:21:45 -0500 Subject: [PATCH 138/270] ensure-table just does [ create-table ] curry ignore-errors recreate-table is the old ensure-table --- extra/db/sql/sql.factor | 1 - extra/db/sqlite/lib/lib.factor | 2 +- extra/db/tuples/tuples-tests.factor | 8 ++++---- extra/db/tuples/tuples.factor | 7 +++++-- extra/db/types/types.factor | 4 ++-- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/extra/db/sql/sql.factor b/extra/db/sql/sql.factor index 184c45f8b1..82c6e370bd 100755 --- a/extra/db/sql/sql.factor +++ b/extra/db/sql/sql.factor @@ -1,7 +1,6 @@ USING: kernel parser quotations classes.tuple words math.order namespaces.lib namespaces sequences arrays combinators prettyprint strings math.parser sequences.lib math symbols ; -USE: tools.walker IN: db.sql SYMBOLS: insert update delete select distinct columns from as diff --git a/extra/db/sqlite/lib/lib.factor b/extra/db/sqlite/lib/lib.factor index f25ec12d1b..e92c4bbd8a 100755 --- a/extra/db/sqlite/lib/lib.factor +++ b/extra/db/sqlite/lib/lib.factor @@ -4,7 +4,7 @@ USING: alien.c-types arrays assocs kernel math math.parser namespaces sequences db.sqlite.ffi db combinators continuations db.types calendar.format serialize io.streams.byte-array byte-arrays io.encodings.binary -tools.walker io.backend ; +io.backend ; IN: db.sqlite.lib : sqlite-error ( n -- * ) diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index f5f229bfd2..5fbf8a58d4 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: io.files kernel tools.test db db.tuples classes db.types continuations namespaces math math.ranges -prettyprint tools.walker calendar sequences db.sqlite -math.intervals db.postgresql accessors random math.bitfields.lib ; +prettyprint calendar sequences db.sqlite math.intervals +db.postgresql accessors random math.bitfields.lib ; IN: db.tuples.tests TUPLE: person the-id the-name the-number the-real @@ -328,7 +328,7 @@ C: secret { "message" "MESSAGE" TEXT } } define-persistent - [ ] [ secret ensure-table ] unit-test + [ ] [ secret recreate-table ] unit-test [ t ] [ f "kilroy was here" [ insert-tuple ] keep n>> integer? ] unit-test @@ -342,7 +342,7 @@ C: secret ] unit-test [ t ] [ - T{ secret } select-tuples dup . length 3 = + T{ secret } select-tuples length 3 = ] unit-test ; [ db-assigned-person-schema test-tuples ] test-sqlite diff --git a/extra/db/tuples/tuples.factor b/extra/db/tuples/tuples.factor index afea61fc90..835b4b45d3 100755 --- a/extra/db/tuples/tuples.factor +++ b/extra/db/tuples/tuples.factor @@ -3,7 +3,7 @@ USING: arrays assocs classes db kernel namespaces classes.tuple words sequences slots math accessors math.parser io prettyprint db.types continuations -mirrors sequences.lib tools.walker combinators.lib ; +mirrors sequences.lib combinators.lib ; IN: db.tuples : define-persistent ( class table columns -- ) @@ -108,12 +108,15 @@ M: retryable execute-statement* ( statement type -- ) : drop-table ( class -- ) drop-sql-statement [ execute-statement ] with-disposals ; -: ensure-table ( class -- ) +: recreate-table ( class -- ) [ drop-sql-statement make-nonthrowable [ execute-statement ] with-disposals ] [ create-table ] bi ; +: ensure-table ( class -- ) + [ create-table ] curry ignore-errors ; + : insert-db-assigned-statement ( tuple -- ) dup class db get db-insert-statements [ ] cache diff --git a/extra/db/types/types.factor b/extra/db/types/types.factor index 8328bd7626..8dbf6786bc 100755 --- a/extra/db/types/types.factor +++ b/extra/db/types/types.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays assocs db kernel math math.parser sequences continuations sequences.deep sequences.lib -words namespaces tools.walker slots slots.private classes -mirrors classes.tuple combinators calendar.format symbols +words namespaces slots slots.private classes mirrors +classes.tuple combinators calendar.format symbols classes.singleton accessors quotations random ; IN: db.types From d213150834625716c528788ee7c5efe5663adec9 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 18:41:53 -0500 Subject: [PATCH 139/270] fix unit test --- extra/db/tuples/tuples-tests.factor | 1 + 1 file changed, 1 insertion(+) diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 5fbf8a58d4..81a402ee5d 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -30,6 +30,7 @@ SYMBOL: person3 SYMBOL: person4 : test-tuples ( -- ) + [ ] [ person recreate-table ] unit-test [ ] [ person ensure-table ] unit-test [ ] [ person drop-table ] unit-test [ ] [ person create-table ] unit-test From 7319dd5165a02a70db3ef995e48374ddbaa95247 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 29 Apr 2008 12:37:26 +1200 Subject: [PATCH 140/270] Add ~ grouping operator to ignore whitespace between elements in group --- extra/peg/ebnf/ebnf-tests.factor | 28 ++++++++++++++++++++++++++++ extra/peg/ebnf/ebnf.factor | 27 +++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/extra/peg/ebnf/ebnf-tests.factor b/extra/peg/ebnf/ebnf-tests.factor index 0292a88ad9..1545b175b2 100644 --- a/extra/peg/ebnf/ebnf-tests.factor +++ b/extra/peg/ebnf/ebnf-tests.factor @@ -297,3 +297,31 @@ main = Primary ] unit-test 'ebnf' compile must-infer + +{ V{ V{ "a" "b" } "c" } } [ + "abc" [EBNF a="a" "b" foo=(a "c") EBNF] call parse-result-ast +] unit-test + +{ f } [ + "a bc" [EBNF a="a" "b" foo=(a "c") EBNF] call +] unit-test + +{ f } [ + "ab c" [EBNF a="a" "b" foo=(a "c") EBNF] call +] unit-test + +{ f } [ + "a b c" [EBNF a="a" "b" foo=(a "c") EBNF] call +] unit-test + +{ V{ V{ "a" "b" } "c" } } [ + "abc" [EBNF a="a" "b" foo=(a "c")~ EBNF] call parse-result-ast +] unit-test + +{ V{ V{ "a" "b" } "c" } } [ + "ab c" [EBNF a="a" "b" foo=(a "c")~ EBNF] call parse-result-ast +] unit-test + +{ f } [ + "a bc" [EBNF a="a" "b" foo=(a "c")~ EBNF] call +] unit-test diff --git a/extra/peg/ebnf/ebnf.factor b/extra/peg/ebnf/ebnf.factor index 57851812ef..ac731a1628 100644 --- a/extra/peg/ebnf/ebnf.factor +++ b/extra/peg/ebnf/ebnf.factor @@ -17,6 +17,7 @@ TUPLE: ebnf-sequence elements ; TUPLE: ebnf-repeat0 group ; TUPLE: ebnf-repeat1 group ; TUPLE: ebnf-optional group ; +TUPLE: ebnf-whitespace group ; TUPLE: ebnf-rule symbol elements ; TUPLE: ebnf-action parser code ; TUPLE: ebnf-var parser name ; @@ -34,6 +35,7 @@ C: ebnf-sequence C: ebnf-repeat0 C: ebnf-repeat1 C: ebnf-optional +C: ebnf-whitespace C: ebnf-rule C: ebnf-action C: ebnf-var @@ -84,6 +86,7 @@ C: ebnf [ dup CHAR: + = ] [ dup CHAR: ? = ] [ dup CHAR: : = ] + [ dup CHAR: ~ = ] } || not nip ] satisfy repeat1 [ >string ] action ; @@ -144,6 +147,7 @@ DEFER: 'choice' "*" token sp ensure-not , "+" token sp ensure-not , "?" token sp ensure-not , + "~" token sp ensure-not , ] seq* hide grouped ; : 'repeat0' ( -- parser ) @@ -155,6 +159,9 @@ DEFER: 'choice' : 'optional' ( -- parser ) [ ] "?" syntax grouped ; +: 'whitespace' ( -- parser ) + [ ] "~" syntax grouped ; + : 'factor-code' ( -- parser ) [ "]]" token ensure-not , @@ -191,6 +198,7 @@ DEFER: 'choice' 'repeat0' sp , 'repeat1' sp , 'optional' sp , + 'whitespace' sp , ] choice* ; : 'action' ( -- parser ) @@ -238,9 +246,15 @@ GENERIC: (transform) ( ast -- parser ) SYMBOL: parser SYMBOL: main +SYMBOL: ignore-ws : transform ( ast -- object ) - H{ } clone dup dup [ parser set swap (transform) main set ] bind ; + H{ } clone dup dup [ + f ignore-ws set + parser set + swap (transform) + main set + ] bind ; M: ebnf (transform) ( ast -- parser ) rules>> [ (transform) ] map peek ; @@ -252,7 +266,13 @@ M: ebnf-rule (transform) ( ast -- parser ) ] keep ; M: ebnf-sequence (transform) ( ast -- parser ) - elements>> [ (transform) ] map seq [ dup length 1 = [ first ] when ] action ; + #! If ignore-ws is set then each element of the sequence + #! ignores leading whitespace. This is not inherited by + #! subelements of the sequence. + elements>> [ + f ignore-ws [ (transform) ] with-variable + ignore-ws get [ sp ] when + ] map seq [ dup length 1 = [ first ] when ] action ; M: ebnf-choice (transform) ( ast -- parser ) options>> [ (transform) ] map choice ; @@ -282,6 +302,9 @@ M: ebnf-repeat1 (transform) ( ast -- parser ) M: ebnf-optional (transform) ( ast -- parser ) transform-group optional ; +M: ebnf-whitespace (transform) ( ast -- parser ) + t ignore-ws [ transform-group ] with-variable ; + GENERIC: build-locals ( code ast -- code ) M: ebnf-sequence build-locals ( code ast -- code ) From b092a4f9d5d6ad3f8cefe848d5742884f0e9b605 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 19:41:35 -0500 Subject: [PATCH 141/270] add support for infinity to intervals --- extra/db/queries/queries.factor | 33 +++++++++++++++++++++++------ extra/db/tuples/tuples-tests.factor | 29 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index 7f3eaff84c..9ee44ffeed 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -44,19 +44,38 @@ M: random-id-generator eval-generator ( singleton -- obj ) : interval-comparison ( ? str -- str ) "from" = " >" " <" ? swap [ "= " append ] when ; +: fp-infinity? ( float -- ? ) + dup float? [ + double>bits -52 shift 11 2^ 1- [ bitand ] keep = + ] [ + drop f + ] if ; + : where-interval ( spec obj from/to -- ) - pick column-name>> 0% - >r first2 r> interval-comparison 0% - bind# ; + over first fp-infinity? [ + 3drop + ] [ + pick column-name>> 0% + >r first2 r> interval-comparison 0% + bind# + ] if ; : in-parens ( quot -- ) "(" 0% call ")" 0% ; inline M: interval where ( spec obj -- ) - [ - [ from>> "from" where-interval " and " 0% ] - [ to>> "to" where-interval ] 2bi - ] in-parens ; + dup [ from>> ] [ to>> ] bi + [ first fp-infinity? ] bi@ and [ + 2drop + " 1 = 1 " 0% ! dummy + ] [ + [ + [ from>> "from" where-interval ] [ + nip [ from>> ] [ to>> ] bi + [ first fp-infinity? ] bi@ or [ " and " 0% ] unless + ] [ to>> "to" where-interval ] 2tri + ] in-parens + ] if ; M: sequence where ( spec obj -- ) [ diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 81a402ee5d..2b73b5c4fe 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -293,6 +293,35 @@ TUPLE: exam id name score ; } ] [ T{ exam f T{ range f 1 3 1 } } select-tuples + ] unit-test + + [ + { + T{ exam f 2 "Stan" 80 } + T{ exam f 3 "Kenny" 60 } + T{ exam f 4 "Cartman" 41 } + } + ] [ + T{ exam f T{ interval f { 2 t } { 1.0/0.0 f } } } select-tuples + ] unit-test + + [ + { + T{ exam f 1 "Kyle" 100 } + } + ] [ + T{ exam f T{ interval f { -1.0/0.0 t } { 2 f } } } select-tuples + ] unit-test + + [ + { + T{ exam f 1 "Kyle" 100 } + T{ exam f 2 "Stan" 80 } + T{ exam f 3 "Kenny" 60 } + T{ exam f 4 "Cartman" 41 } + } + ] [ + T{ exam f T{ interval f { -1.0/0.0 t } { 1/0. f } } } select-tuples ] unit-test ; TUPLE: bignum-test id m n o ; From e26648002911fd6e2a2ee7bf24ea47d23b2752fa Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 20:01:32 -0500 Subject: [PATCH 142/270] beginning to refactor --- extra/db/queries/queries.factor | 2 ++ extra/db/tuples/tuples-tests.factor | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index 9ee44ffeed..cbbd8fd9a0 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -6,6 +6,8 @@ math.bitfields.lib namespaces.lib db db.tuples db.types math.intervals ; IN: db.queries +TUPLE: query tuple order group having ; + GENERIC: where ( specs obj -- ) : maybe-make-retryable ( statement -- statement ) diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 2b73b5c4fe..8e6b9bfbe4 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -322,6 +322,17 @@ TUPLE: exam id name score ; } ] [ T{ exam f T{ interval f { -1.0/0.0 t } { 1/0. f } } } select-tuples + ] unit-test + + [ + { + T{ exam f 1 "Kyle" 100 } + T{ exam f 2 "Stan" 80 } + T{ exam f 3 "Kenny" 60 } + T{ exam f 4 "Cartman" 41 } + } + ] [ + T{ exam } select-tuples ] unit-test ; TUPLE: bignum-test id m n o ; From 913da8f2ea201e33b13b1a0fba98691c88f3cfe3 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 28 Apr 2008 20:27:37 -0500 Subject: [PATCH 143/270] refactor where-clause --- extra/db/queries/queries.factor | 58 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index cbbd8fd9a0..43ca4f369c 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -6,8 +6,6 @@ math.bitfields.lib namespaces.lib db db.tuples db.types math.intervals ; IN: db.queries -TUPLE: query tuple order group having ; - GENERIC: where ( specs obj -- ) : maybe-make-retryable ( statement -- statement ) @@ -17,7 +15,7 @@ GENERIC: where ( specs obj -- ) : query-make ( class quot -- ) >r sql-props r> - [ 0 sql-counter rot with-variable ] { "" { } { } } nmake + [ 0 sql-counter rot with-variable ";" 0% ] { "" { } { } } nmake maybe-make-retryable ; inline M: db begin-transaction ( -- ) "BEGIN" sql-command ; @@ -53,6 +51,16 @@ M: random-id-generator eval-generator ( singleton -- obj ) drop f ] if ; +: (infinite-interval?) ( interval -- ?1 ?2 ) + [ from>> ] [ to>> ] bi + [ first fp-infinity? ] bi@ ; + +: double-infinite-interval? ( obj -- ? ) + dup interval? [ (infinite-interval?) and ] [ drop f ] if ; + +: infinite-interval? ( obj -- ? ) + dup interval? [ (infinite-interval?) or ] [ drop f ] if ; + : where-interval ( spec obj from/to -- ) over first fp-infinity? [ 3drop @@ -66,18 +74,11 @@ M: random-id-generator eval-generator ( singleton -- obj ) "(" 0% call ")" 0% ; inline M: interval where ( spec obj -- ) - dup [ from>> ] [ to>> ] bi - [ first fp-infinity? ] bi@ and [ - 2drop - " 1 = 1 " 0% ! dummy - ] [ - [ - [ from>> "from" where-interval ] [ - nip [ from>> ] [ to>> ] bi - [ first fp-infinity? ] bi@ or [ " and " 0% ] unless - ] [ to>> "to" where-interval ] 2tri - ] in-parens - ] if ; + [ + [ from>> "from" where-interval ] [ + nip infinite-interval? [ " and " 0% ] unless + ] [ to>> "to" where-interval ] 2tri + ] in-parens ; M: sequence where ( spec obj -- ) [ @@ -93,19 +94,28 @@ M: integer where ( spec obj -- ) object-where ; M: string where ( spec obj -- ) object-where ; +: filter-slots ( tuple specs -- specs' ) + [ + slot-name>> swap get-slot-named + dup double-infinite-interval? [ drop f ] when + ] with filter ; + : where-clause ( tuple specs -- ) - " where " 0% [ - " and " 0% + dupd filter-slots + dup empty? [ + 2drop ] [ - 2dup slot-name>> swap get-slot-named where - ] interleave drop ; + " where " 0% [ + " and " 0% + ] [ + 2dup slot-name>> swap get-slot-named where + ] interleave drop + ] if ; M: db ( tuple table -- sql ) [ "delete from " 0% 0% - dupd - [ slot-name>> swap get-slot-named ] with filter - dup empty? [ 2drop ] [ where-clause ] if ";" 0% + where-clause ] query-make ; M: db ( tuple class -- statement ) @@ -115,7 +125,5 @@ M: db ( tuple class -- statement ) [ dup column-name>> 0% 2, ] interleave " from " 0% 0% - dupd - [ slot-name>> swap get-slot-named ] with filter - dup empty? [ 2drop ] [ where-clause ] if ";" 0% + where-clause ] query-make ; From c671ccce996b131d9d78668ffa355f0a6bad4dc2 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 29 Apr 2008 14:15:05 +1200 Subject: [PATCH 144/270] { ... } whitespace grouping --- extra/peg/ebnf/ebnf-tests.factor | 65 +++++++++++++++++++++++++------- extra/peg/ebnf/ebnf.factor | 17 +++++---- extra/peg/pl0/pl0.factor | 62 ++++++++---------------------- 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/extra/peg/ebnf/ebnf-tests.factor b/extra/peg/ebnf/ebnf-tests.factor index 1545b175b2..e202360a4b 100644 --- a/extra/peg/ebnf/ebnf-tests.factor +++ b/extra/peg/ebnf/ebnf-tests.factor @@ -51,13 +51,15 @@ IN: peg.ebnf.tests T{ ebnf-sequence f V{ T{ ebnf-non-terminal f "one" } - T{ ebnf-choice f - V{ T{ ebnf-non-terminal f "two" } T{ ebnf-non-terminal f "three" } } + T{ ebnf-whitespace f + T{ ebnf-choice f + V{ T{ ebnf-non-terminal f "two" } T{ ebnf-non-terminal f "three" } } + } } } } } [ - "one (two | three)" 'choice' parse parse-result-ast + "one {two | three}" 'choice' parse parse-result-ast ] unit-test { @@ -302,26 +304,63 @@ main = Primary "abc" [EBNF a="a" "b" foo=(a "c") EBNF] call parse-result-ast ] unit-test +{ V{ V{ "a" "b" } "c" } } [ + "abc" [EBNF a="a" "b" foo={a "c"} EBNF] call parse-result-ast +] unit-test + +{ V{ V{ "a" "b" } "c" } } [ + "abc" [EBNF a="a" "b" foo=a "c" EBNF] call parse-result-ast +] unit-test + { f } [ "a bc" [EBNF a="a" "b" foo=(a "c") EBNF] call ] unit-test +{ f } [ + "a bc" [EBNF a="a" "b" foo=a "c" EBNF] call +] unit-test + +{ f } [ + "a bc" [EBNF a="a" "b" foo={a "c"} EBNF] call +] unit-test + +{ f } [ + "ab c" [EBNF a="a" "b" foo=a "c" EBNF] call +] unit-test + +{ V{ V{ "a" "b" } "c" } } [ + "ab c" [EBNF a="a" "b" foo={a "c"} EBNF] call parse-result-ast +] unit-test + { f } [ "ab c" [EBNF a="a" "b" foo=(a "c") EBNF] call ] unit-test { f } [ - "a b c" [EBNF a="a" "b" foo=(a "c") EBNF] call -] unit-test - -{ V{ V{ "a" "b" } "c" } } [ - "abc" [EBNF a="a" "b" foo=(a "c")~ EBNF] call parse-result-ast -] unit-test - -{ V{ V{ "a" "b" } "c" } } [ - "ab c" [EBNF a="a" "b" foo=(a "c")~ EBNF] call parse-result-ast + "a b c" [EBNF a="a" "b" foo=a "c" EBNF] call ] unit-test { f } [ - "a bc" [EBNF a="a" "b" foo=(a "c")~ EBNF] call + "a b c" [EBNF a="a" "b" foo=(a "c") EBNF] call ] unit-test + +{ f } [ + "a b c" [EBNF a="a" "b" foo={a "c"} EBNF] call +] unit-test + +{ V{ V{ V{ "a" "b" } "c" } V{ V{ "a" "b" } "c" } } } [ + "ab cab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call parse-result-ast +] unit-test + +{ V{ } } [ + "ab cab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call parse-result-ast +] unit-test + +{ V{ V{ V{ "a" "b" } "c" } V{ V{ "a" "b" } "c" } } } [ + "ab c ab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call parse-result-ast +] unit-test + +{ V{ } } [ + "ab c ab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call parse-result-ast +] unit-test + diff --git a/extra/peg/ebnf/ebnf.factor b/extra/peg/ebnf/ebnf.factor index ac731a1628..0ee7bf515f 100644 --- a/extra/peg/ebnf/ebnf.factor +++ b/extra/peg/ebnf/ebnf.factor @@ -137,9 +137,15 @@ DEFER: 'choice' #! Parse a group of choices, with a suffix indicating #! the type of group (repeat0, repeat1, etc) and #! an quot that is the action that produces the AST. - "(" [ 'choice' sp ] delay ")" syntax-pack - swap 2seq - [ first ] rot compose action ; + 2dup + [ + "(" [ 'choice' sp ] delay ")" syntax-pack + swap 2seq + [ first ] rot compose action , + "{" [ 'choice' sp ] delay "}" syntax-pack + swap 2seq + [ first ] rot compose action , + ] choice* ; : 'group' ( -- parser ) #! A grouping with no suffix. Used for precedence. @@ -147,7 +153,6 @@ DEFER: 'choice' "*" token sp ensure-not , "+" token sp ensure-not , "?" token sp ensure-not , - "~" token sp ensure-not , ] seq* hide grouped ; : 'repeat0' ( -- parser ) @@ -159,9 +164,6 @@ DEFER: 'choice' : 'optional' ( -- parser ) [ ] "?" syntax grouped ; -: 'whitespace' ( -- parser ) - [ ] "~" syntax grouped ; - : 'factor-code' ( -- parser ) [ "]]" token ensure-not , @@ -198,7 +200,6 @@ DEFER: 'choice' 'repeat0' sp , 'repeat1' sp , 'optional' sp , - 'whitespace' sp , ] choice* ; : 'action' ( -- parser ) diff --git a/extra/peg/pl0/pl0.factor b/extra/peg/pl0/pl0.factor index 1b97814ca7..eff923dc01 100644 --- a/extra/peg/pl0/pl0.factor +++ b/extra/peg/pl0/pl0.factor @@ -7,52 +7,22 @@ IN: peg.pl0 #! Grammar for PL/0 based on http://en.wikipedia.org/wiki/PL/0 EBNF: pl0 -_ = (" " | "\t" | "\n")* => [[ drop ignore ]] -BEGIN = "BEGIN" _ -CALL = "CALL" _ -CONST = "CONST" _ -DO = "DO" _ -END = "END" _ -IF = "IF" _ -THEN = "THEN" _ -ODD = "ODD" _ -PROCEDURE = "PROCEDURE" _ -VAR = "VAR" _ -WHILE = "WHILE" _ -EQ = "=" _ -LTEQ = "<=" _ -LT = "<" _ -GT = ">" _ -GTEQ = ">=" _ -NEQ = "#" _ -COMMA = "," _ -SEMICOLON = ";" _ -ASSIGN = ":=" _ - -ADD = "+" _ -SUBTRACT = "-" _ -MULTIPLY = "*" _ -DIVIDE = "/" _ - -LPAREN = "(" _ -RPAREN = ")" _ - -block = ( CONST ident EQ number ( COMMA ident EQ number )* SEMICOLON )? - ( VAR ident ( COMMA ident )* SEMICOLON )? - ( PROCEDURE ident SEMICOLON ( block SEMICOLON )? )* statement -statement = ( ident ASSIGN expression - | CALL ident - | BEGIN statement ( SEMICOLON statement )* END - | IF condition THEN statement - | WHILE condition DO statement )? -condition = ODD expression - | expression (EQ | NEQ | LTEQ | LT | GTEQ | GT) expression -expression = (ADD | SUBTRACT)? term ( (ADD | SUBTRACT) term )* _ -term = factor ( (MULTIPLY | DIVIDE) factor )* -factor = ident | number | LPAREN expression RPAREN -ident = (([a-zA-Z])+) _ => [[ >string ]] +block = { "CONST" ident "=" number { "," ident "=" number }* ";" }? + { "VAR" ident { "," ident }* ";" }? + { "PROCEDURE" ident ";" { block ";" }? }* statement +statement = { ident ":=" expression + | "CALL" ident + | "BEGIN" statement { ";" statement }* "END" + | "IF" condition "THEN" statement + | "WHILE" condition "DO" statement }? +condition = { "ODD" expression } + | { expression ("=" | "#" | "<=" | "<" | ">=" | ">") expression } +expression = {"+" | "-"}? term { {"+" | "-"} term }* +term = factor { {"*" | "/"} factor }* +factor = ident | number | "(" expression ")" +ident = (([a-zA-Z])+) => [[ >string ]] digit = ([0-9]) => [[ digit> ]] -number = ((digit)+) _ => [[ 10 digits>integer ]] -program = _ block "." +number = (digit)+ => [[ 10 digits>integer ]] +program = { block "." } ;EBNF From e1f82caf83e254ee8ea564daecec61d30484bd0a Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 29 Apr 2008 14:19:14 +1200 Subject: [PATCH 145/270] Use accessors in places for peg --- extra/peg/ebnf/ebnf-tests.factor | 107 ++++++++++++++++--------------- extra/peg/expr/expr.factor | 4 +- extra/peg/peg-tests.factor | 49 +++++++------- extra/peg/pl0/pl0-tests.factor | 25 ++++---- 4 files changed, 94 insertions(+), 91 deletions(-) diff --git a/extra/peg/ebnf/ebnf-tests.factor b/extra/peg/ebnf/ebnf-tests.factor index e202360a4b..faaa63f4bd 100644 --- a/extra/peg/ebnf/ebnf-tests.factor +++ b/extra/peg/ebnf/ebnf-tests.factor @@ -1,15 +1,16 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. ! -USING: kernel tools.test peg peg.ebnf words math math.parser sequences ; +USING: kernel tools.test peg peg.ebnf words math math.parser + sequences accessors ; IN: peg.ebnf.tests { T{ ebnf-non-terminal f "abc" } } [ - "abc" 'non-terminal' parse parse-result-ast + "abc" 'non-terminal' parse ast>> ] unit-test { T{ ebnf-terminal f "55" } } [ - "'55'" 'terminal' parse parse-result-ast + "'55'" 'terminal' parse ast>> ] unit-test { @@ -20,7 +21,7 @@ IN: peg.ebnf.tests } } } [ - "digit = '1' | '2'" 'rule' parse parse-result-ast + "digit = '1' | '2'" 'rule' parse ast>> ] unit-test { @@ -31,7 +32,7 @@ IN: peg.ebnf.tests } } } [ - "digit = '1' '2'" 'rule' parse parse-result-ast + "digit = '1' '2'" 'rule' parse ast>> ] unit-test { @@ -44,7 +45,7 @@ IN: peg.ebnf.tests } } } [ - "one two | three" 'choice' parse parse-result-ast + "one two | three" 'choice' parse ast>> ] unit-test { @@ -59,7 +60,7 @@ IN: peg.ebnf.tests } } } [ - "one {two | three}" 'choice' parse parse-result-ast + "one {two | three}" 'choice' parse ast>> ] unit-test { @@ -79,7 +80,7 @@ IN: peg.ebnf.tests } } } [ - "one ((two | three) four)*" 'choice' parse parse-result-ast + "one ((two | three) four)*" 'choice' parse ast>> ] unit-test { @@ -91,43 +92,43 @@ IN: peg.ebnf.tests } } } [ - "one ( two )? three" 'choice' parse parse-result-ast + "one ( two )? three" 'choice' parse ast>> ] unit-test { "foo" } [ - "\"foo\"" 'identifier' parse parse-result-ast + "\"foo\"" 'identifier' parse ast>> ] unit-test { "foo" } [ - "'foo'" 'identifier' parse parse-result-ast + "'foo'" 'identifier' parse ast>> ] unit-test { "foo" } [ - "foo" 'non-terminal' parse parse-result-ast ebnf-non-terminal-symbol + "foo" 'non-terminal' parse ast>> ebnf-non-terminal-symbol ] unit-test { "foo" } [ - "foo]" 'non-terminal' parse parse-result-ast ebnf-non-terminal-symbol + "foo]" 'non-terminal' parse ast>> ebnf-non-terminal-symbol ] unit-test { V{ "a" "b" } } [ - "ab" [EBNF foo='a' 'b' EBNF] call parse-result-ast + "ab" [EBNF foo='a' 'b' EBNF] call ast>> ] unit-test { V{ 1 "b" } } [ - "ab" [EBNF foo=('a')[[ drop 1 ]] 'b' EBNF] call parse-result-ast + "ab" [EBNF foo=('a')[[ drop 1 ]] 'b' EBNF] call ast>> ] unit-test { V{ 1 2 } } [ - "ab" [EBNF foo=('a') [[ drop 1 ]] ('b') [[ drop 2 ]] EBNF] call parse-result-ast + "ab" [EBNF foo=('a') [[ drop 1 ]] ('b') [[ drop 2 ]] EBNF] call ast>> ] unit-test { CHAR: A } [ - "A" [EBNF foo=[A-Z] EBNF] call parse-result-ast + "A" [EBNF foo=[A-Z] EBNF] call ast>> ] unit-test { CHAR: Z } [ - "Z" [EBNF foo=[A-Z] EBNF] call parse-result-ast + "Z" [EBNF foo=[A-Z] EBNF] call ast>> ] unit-test { f } [ @@ -135,7 +136,7 @@ IN: peg.ebnf.tests ] unit-test { CHAR: 0 } [ - "0" [EBNF foo=[^A-Z] EBNF] call parse-result-ast + "0" [EBNF foo=[^A-Z] EBNF] call ast>> ] unit-test { f } [ @@ -147,31 +148,31 @@ IN: peg.ebnf.tests ] unit-test { V{ "1" "+" "foo" } } [ - "1+1" [EBNF foo='1' '+' '1' [[ drop "foo" ]] EBNF] call parse-result-ast + "1+1" [EBNF foo='1' '+' '1' [[ drop "foo" ]] EBNF] call ast>> ] unit-test { "foo" } [ - "1+1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] EBNF] call parse-result-ast + "1+1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] EBNF] call ast>> ] unit-test { "foo" } [ - "1+1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] | '1' '-' '1' => [[ drop "bar" ]] EBNF] call parse-result-ast + "1+1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] | '1' '-' '1' => [[ drop "bar" ]] EBNF] call ast>> ] unit-test { "bar" } [ - "1-1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] | '1' '-' '1' => [[ drop "bar" ]] EBNF] call parse-result-ast + "1-1" [EBNF foo='1' '+' '1' => [[ drop "foo" ]] | '1' '-' '1' => [[ drop "bar" ]] EBNF] call ast>> ] unit-test { 6 } [ - "4+2" [EBNF num=[0-9] => [[ digit> ]] foo=num:x '+' num:y => [[ drop x y + ]] EBNF] call parse-result-ast + "4+2" [EBNF num=[0-9] => [[ digit> ]] foo=num:x '+' num:y => [[ drop x y + ]] EBNF] call ast>> ] unit-test { 6 } [ - "4+2" [EBNF foo=[0-9]:x '+' [0-9]:y => [[ drop x digit> y digit> + ]] EBNF] call parse-result-ast + "4+2" [EBNF foo=[0-9]:x '+' [0-9]:y => [[ drop x digit> y digit> + ]] EBNF] call ast>> ] unit-test { 10 } [ - { 1 2 3 4 } [EBNF num=. ?[ number? ]? list=list:x num:y => [[ drop x y + ]] | num EBNF] call parse-result-ast + { 1 2 3 4 } [EBNF num=. ?[ number? ]? list=list:x num:y => [[ drop x y + ]] | num EBNF] call ast>> ] unit-test { f } [ @@ -179,7 +180,7 @@ IN: peg.ebnf.tests ] unit-test { 3 } [ - { 1 2 "a" 4 } [EBNF num=. ?[ number? ]? list=list:x num:y => [[ drop x y + ]] | num EBNF] call parse-result-ast + { 1 2 "a" 4 } [EBNF num=. ?[ number? ]? list=list:x num:y => [[ drop x y + ]] | num EBNF] call ast>> ] unit-test { f } [ @@ -187,44 +188,44 @@ IN: peg.ebnf.tests ] unit-test { V{ "a" " " "b" } } [ - "a b" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call parse-result-ast + "a b" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call ast>> ] unit-test { V{ "a" "\t" "b" } } [ - "a\tb" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call parse-result-ast + "a\tb" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call ast>> ] unit-test { V{ "a" "\n" "b" } } [ - "a\nb" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call parse-result-ast + "a\nb" [EBNF -=" " | "\t" | "\n" foo="a" - "b" EBNF] call ast>> ] unit-test { V{ "a" f "b" } } [ - "ab" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call parse-result-ast + "ab" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call ast>> ] unit-test { V{ "a" " " "b" } } [ - "a b" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call parse-result-ast + "a b" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call ast>> ] unit-test { V{ "a" "\t" "b" } } [ - "a\tb" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call parse-result-ast + "a\tb" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call ast>> ] unit-test { V{ "a" "\n" "b" } } [ - "a\nb" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call parse-result-ast + "a\nb" [EBNF -=" " | "\t" | "\n" foo="a" (-)? "b" EBNF] call ast>> ] unit-test { V{ "a" "b" } } [ - "ab" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call parse-result-ast + "ab" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call ast>> ] unit-test { V{ "a" "b" } } [ - "a\tb" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call parse-result-ast + "a\tb" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call ast>> ] unit-test { V{ "a" "b" } } [ - "a\nb" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call parse-result-ast + "a\nb" [EBNF -=(" " | "\t" | "\n")? => [[ drop ignore ]] foo="a" - "b" EBNF] call ast>> ] unit-test { f } [ @@ -234,19 +235,19 @@ IN: peg.ebnf.tests { V{ V{ 49 } "+" V{ 49 } } } [ #! Test direct left recursion. #! Using packrat, so first part of expr fails, causing 2nd choice to be used - "1+1" [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call parse-result-ast + "1+1" [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call ast>> ] unit-test { V{ V{ V{ 49 } "+" V{ 49 } } "+" V{ 49 } } } [ #! Test direct left recursion. #! Using packrat, so first part of expr fails, causing 2nd choice to be used - "1+1+1" [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call parse-result-ast + "1+1+1" [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call ast>> ] unit-test { V{ V{ V{ 49 } "+" V{ 49 } } "+" V{ 49 } } } [ #! Test indirect left recursion. #! Using packrat, so first part of expr fails, causing 2nd choice to be used - "1+1+1" [EBNF num=([0-9])+ x=expr expr=x "+" num | num EBNF] call parse-result-ast + "1+1+1" [EBNF num=([0-9])+ x=expr expr=x "+" num | num EBNF] call ast>> ] unit-test { t } [ @@ -279,37 +280,37 @@ main = Primary ;EBNF { "this" } [ - "this" primary parse-result-ast + "this" primary ast>> ] unit-test { V{ "this" "." "x" } } [ - "this.x" primary parse-result-ast + "this.x" primary ast>> ] unit-test { V{ V{ "this" "." "x" } "." "y" } } [ - "this.x.y" primary parse-result-ast + "this.x.y" primary ast>> ] unit-test { V{ V{ "this" "." "x" } "." "m" "(" ")" } } [ - "this.x.m()" primary parse-result-ast + "this.x.m()" primary ast>> ] unit-test { V{ V{ V{ "x" "[" "i" "]" } "[" "j" "]" } "." "y" } } [ - "x[i][j].y" primary parse-result-ast + "x[i][j].y" primary ast>> ] unit-test 'ebnf' compile must-infer { V{ V{ "a" "b" } "c" } } [ - "abc" [EBNF a="a" "b" foo=(a "c") EBNF] call parse-result-ast + "abc" [EBNF a="a" "b" foo=(a "c") EBNF] call ast>> ] unit-test { V{ V{ "a" "b" } "c" } } [ - "abc" [EBNF a="a" "b" foo={a "c"} EBNF] call parse-result-ast + "abc" [EBNF a="a" "b" foo={a "c"} EBNF] call ast>> ] unit-test { V{ V{ "a" "b" } "c" } } [ - "abc" [EBNF a="a" "b" foo=a "c" EBNF] call parse-result-ast + "abc" [EBNF a="a" "b" foo=a "c" EBNF] call ast>> ] unit-test { f } [ @@ -329,7 +330,7 @@ main = Primary ] unit-test { V{ V{ "a" "b" } "c" } } [ - "ab c" [EBNF a="a" "b" foo={a "c"} EBNF] call parse-result-ast + "ab c" [EBNF a="a" "b" foo={a "c"} EBNF] call ast>> ] unit-test { f } [ @@ -349,18 +350,18 @@ main = Primary ] unit-test { V{ V{ V{ "a" "b" } "c" } V{ V{ "a" "b" } "c" } } } [ - "ab cab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call parse-result-ast + "ab cab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call ast>> ] unit-test { V{ } } [ - "ab cab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call parse-result-ast + "ab cab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call ast>> ] unit-test { V{ V{ V{ "a" "b" } "c" } V{ V{ "a" "b" } "c" } } } [ - "ab c ab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call parse-result-ast + "ab c ab c" [EBNF a="a" "b" foo={a "c"}* EBNF] call ast>> ] unit-test { V{ } } [ - "ab c ab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call parse-result-ast + "ab c ab c" [EBNF a="a" "b" foo=(a "c")* EBNF] call ast>> ] unit-test diff --git a/extra/peg/expr/expr.factor b/extra/peg/expr/expr.factor index e16d9db0a7..e2df60ea9a 100644 --- a/extra/peg/expr/expr.factor +++ b/extra/peg/expr/expr.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Chris Double. ! See http://factorcode.org/license.txt for BSD license. USING: kernel arrays strings math.parser sequences -peg peg.ebnf peg.parsers memoize math ; +peg peg.ebnf peg.parsers memoize math accessors ; IN: peg.expr EBNF: expr @@ -20,5 +20,5 @@ exp = exp "+" fac => [[ first3 nip + ]] ;EBNF : eval-expr ( string -- number ) - expr parse-result-ast ; + expr ast>> ; diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index fcec33f7c2..1beeb51678 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. ! -USING: kernel tools.test strings namespaces arrays sequences peg peg.private accessors words math ; +USING: kernel tools.test strings namespaces arrays sequences + peg peg.private accessors words math accessors ; IN: peg.tests { f } [ @@ -10,7 +11,7 @@ IN: peg.tests { "begin" "end" } [ "beginend" "begin" token parse - { parse-result-ast parse-result-remaining } get-slots + { ast>> remaining>> } get-slots >string ] unit-test @@ -23,11 +24,11 @@ IN: peg.tests ] unit-test { CHAR: a } [ - "abcd" CHAR: a CHAR: z range parse parse-result-ast + "abcd" CHAR: a CHAR: z range parse ast>> ] unit-test { CHAR: z } [ - "zbcd" CHAR: a CHAR: z range parse parse-result-ast + "zbcd" CHAR: a CHAR: z range parse ast>> ] unit-test { f } [ @@ -35,15 +36,15 @@ IN: peg.tests ] unit-test { V{ "g" "o" } } [ - "good" "g" token "o" token 2array seq parse parse-result-ast + "good" "g" token "o" token 2array seq parse ast>> ] unit-test { "a" } [ - "abcd" "a" token "b" token 2array choice parse parse-result-ast + "abcd" "a" token "b" token 2array choice parse ast>> ] unit-test { "b" } [ - "bbcd" "a" token "b" token 2array choice parse parse-result-ast + "bbcd" "a" token "b" token 2array choice parse ast>> ] unit-test { f } [ @@ -55,15 +56,15 @@ IN: peg.tests ] unit-test { 0 } [ - "" "a" token repeat0 parse parse-result-ast length + "" "a" token repeat0 parse ast>> length ] unit-test { 0 } [ - "b" "a" token repeat0 parse parse-result-ast length + "b" "a" token repeat0 parse ast>> length ] unit-test { V{ "a" "a" "a" } } [ - "aaab" "a" token repeat0 parse parse-result-ast + "aaab" "a" token repeat0 parse ast>> ] unit-test { f } [ @@ -75,15 +76,15 @@ IN: peg.tests ] unit-test { V{ "a" "a" "a" } } [ - "aaab" "a" token repeat1 parse parse-result-ast + "aaab" "a" token repeat1 parse ast>> ] unit-test { V{ "a" "b" } } [ - "ab" "a" token optional "b" token 2array seq parse parse-result-ast + "ab" "a" token optional "b" token 2array seq parse ast>> ] unit-test { V{ f "b" } } [ - "b" "a" token optional "b" token 2array seq parse parse-result-ast + "b" "a" token optional "b" token 2array seq parse ast>> ] unit-test { f } [ @@ -91,7 +92,7 @@ IN: peg.tests ] unit-test { V{ CHAR: a CHAR: b } } [ - "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast + "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse ast>> ] unit-test { f } [ @@ -123,11 +124,11 @@ IN: peg.tests ] unit-test { 1 } [ - "a" "a" token [ drop 1 ] action parse parse-result-ast + "a" "a" token [ drop 1 ] action parse ast>> ] unit-test { V{ 1 1 } } [ - "aa" "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast + "aa" "a" token [ drop 1 ] action dup 2array seq parse ast>> ] unit-test { f } [ @@ -139,19 +140,19 @@ IN: peg.tests ] unit-test { CHAR: a } [ - "a" [ CHAR: a = ] satisfy parse parse-result-ast + "a" [ CHAR: a = ] satisfy parse ast>> ] unit-test { "a" } [ - " a" "a" token sp parse parse-result-ast + " a" "a" token sp parse ast>> ] unit-test { "a" } [ - "a" "a" token sp parse parse-result-ast + "a" "a" token sp parse ast>> ] unit-test { V{ "a" } } [ - "[a]" "[" token hide "a" token "]" token hide 3array seq parse parse-result-ast + "[a]" "[" token hide "a" token "]" token hide 3array seq parse ast>> ] unit-test { f } [ @@ -164,8 +165,8 @@ IN: peg.tests [ "1" token , "-" token , "1" token , ] seq* , [ "1" token , "+" token , "1" token , ] seq* , ] choice* - "1-1" over parse parse-result-ast swap - "1+1" swap parse parse-result-ast + "1-1" over parse ast>> swap + "1+1" swap parse ast>> ] unit-test : expr ( -- parser ) @@ -174,7 +175,7 @@ IN: peg.tests [ expr ] delay "+" token "1" token 3seq "1" token 2choice ; { V{ V{ "1" "+" "1" } "+" "1" } } [ - "1+1+1" expr parse parse-result-ast + "1+1+1" expr parse ast>> ] unit-test { t } [ @@ -189,6 +190,6 @@ IN: peg.tests ] unit-test { CHAR: B } [ - "B" [ drop t ] satisfy [ 66 >= ] semantic parse parse-result-ast + "B" [ drop t ] satisfy [ 66 >= ] semantic parse ast>> ] unit-test diff --git a/extra/peg/pl0/pl0-tests.factor b/extra/peg/pl0/pl0-tests.factor index 88993c354b..e1d97bdef9 100644 --- a/extra/peg/pl0/pl0-tests.factor +++ b/extra/peg/pl0/pl0-tests.factor @@ -1,43 +1,44 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. ! -USING: kernel tools.test peg peg.ebnf peg.pl0 multiline sequences ; +USING: kernel tools.test peg peg.ebnf peg.pl0 + multiline sequences accessors ; IN: peg.pl0.tests { t } [ - "CONST foo = 1;" "block" \ pl0 rule parse parse-result-remaining empty? + "CONST foo = 1;" "block" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "VAR foo;" "block" \ pl0 rule parse parse-result-remaining empty? + "VAR foo;" "block" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "VAR foo,bar , baz;" "block" \ pl0 rule parse parse-result-remaining empty? + "VAR foo,bar , baz;" "block" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty? + "foo := 5" "statement" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "BEGIN foo := 5 END" "statement" \ pl0 rule parse parse-result-remaining empty? + "BEGIN foo := 5 END" "statement" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "IF 1=1 THEN foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty? + "IF 1=1 THEN foo := 5" "statement" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty? + "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule parse parse-result-remaining empty? + "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ - "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule parse parse-result-remaining empty? + "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule parse remaining>> empty? ] unit-test { t } [ @@ -57,7 +58,7 @@ BEGIN x := x + 1; END END. -"> pl0 parse-result-remaining empty? +"> pl0 remaining>> empty? ] unit-test { f } [ @@ -123,5 +124,5 @@ BEGIN y := 36; CALL gcd; END. - "> pl0 parse-result-remaining empty? + "> pl0 remaining>> empty? ] unit-test \ No newline at end of file From 1083f36e6ea15ab15a1f2559fac4c17610eac3fa Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 28 Apr 2008 21:25:59 -0500 Subject: [PATCH 146/270] Fix stage1 bootstrap bug, overly-eager object merging --- core/bootstrap/image/image.factor | 68 +++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor index 5d8bbf3f77..949d30c1d3 100755 --- a/core/bootstrap/image/image.factor +++ b/core/bootstrap/image/image.factor @@ -8,7 +8,7 @@ splitting growable classes classes.builtin classes.tuple classes.tuple.private words.private io.binary io.files vocabs vocabs.loader source-files definitions debugger float-arrays quotations.private sequences.private combinators -io.encodings.binary math.order ; +io.encodings.binary math.order accessors ; IN: bootstrap.image : my-arch ( -- arch ) @@ -31,6 +31,39 @@ IN: bootstrap.image id + +M: id hashcode* obj>> hashcode* ; + +M: id equal? + over id? [ + [ obj>> ] bi@ + [ = ] [ + dup number? [ + [ class ] bi@ = + ] [ + 2drop t + ] if + ] 2bi and + ] [ + 2drop f + ] if ; + +SYMBOL: objects + +: (objects) objects get ; inline + +: lookup-object ( obj -- n/f ) (objects) at ; + +: put-object ( n obj -- ) (objects) set-at ; + +: cache-object ( obj quot -- value ) + >r (objects) r> [ obj>> ] prepose cache ; inline + ! Constants : image-magic HEX: 0f0e0d0c ; inline @@ -61,9 +94,6 @@ IN: bootstrap.image ! The image being constructed; a vector of word-size integers SYMBOL: image -! Object cache -SYMBOL: objects - ! Image output format SYMBOL: big-endian @@ -187,7 +217,9 @@ GENERIC: ' ( obj -- ptr ) 2tri ; M: bignum ' - bignum tag-number dup [ emit-bignum ] emit-object ; + [ + bignum tag-number dup [ emit-bignum ] emit-object + ] cache-object ; ! Fixnums @@ -202,9 +234,11 @@ M: fixnum ' ! Floats M: float ' - float tag-number dup [ - align-here double>bits emit-64 - ] emit-object ; + [ + float tag-number dup [ + align-here double>bits emit-64 + ] emit-object + ] cache-object ; ! Special objects @@ -243,7 +277,7 @@ M: f ' ] bi \ word type-number object tag-number [ emit-seq ] emit-object - ] keep objects get set-at ; + ] keep put-object ; : word-error ( word msg -- * ) [ % dup word-vocabulary % " " % word-name % ] "" make throw ; @@ -252,7 +286,7 @@ M: f ' [ target-word ] keep or ; : fixup-word ( word -- offset ) - transfer-word dup objects get at + transfer-word dup lookup-object [ ] [ "Not in image: " word-error ] ?if ; : fixup-words ( -- ) @@ -286,7 +320,7 @@ M: wrapper ' M: string ' #! We pool strings so that each string is only written once #! to the image - objects get [ emit-string ] cache ; + [ emit-string ] cache-object ; : assert-empty ( seq -- ) length 0 assert= ; @@ -311,12 +345,12 @@ M: float-array ' float-array emit-dummy-array ; : emit-tuple ( tuple -- pointer ) dup class word-name "tombstone" = - [ objects get [ (emit-tuple) ] cache ] [ (emit-tuple) ] if ; + [ [ (emit-tuple) ] cache-object ] [ (emit-tuple) ] if ; M: tuple ' emit-tuple ; M: tuple-layout ' - objects get [ + [ [ { [ layout-hashcode , ] @@ -328,12 +362,12 @@ M: tuple-layout ' ] { } make [ ' ] map \ tuple-layout type-number object tag-number [ emit-seq ] emit-object - ] cache ; + ] cache-object ; M: tombstone ' delegate "((tombstone))" "((empty))" ? "hashtables.private" lookup - word-def first objects get [ emit-tuple ] cache ; + word-def first [ emit-tuple ] cache-object ; ! Arrays M: array ' @@ -343,7 +377,7 @@ M: array ' ! Quotations M: quotation ' - objects get [ + [ quotation-array ' quotation type-number object tag-number [ emit ! array @@ -351,7 +385,7 @@ M: quotation ' 0 emit ! xt 0 emit ! code ] emit-object - ] cache ; + ] cache-object ; ! End of the image From 08af497255701566e75cc1ea35db58f55f3b9518 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 28 Apr 2008 21:26:31 -0500 Subject: [PATCH 147/270] Fix /f for large integers --- core/bootstrap/compiler/compiler.factor | 18 ++++---- core/math/floats/floats.factor | 5 +- core/math/integers/integers-tests.factor | 26 +++++++++++ core/math/integers/integers.factor | 58 +++++++++++++++++++++++- core/math/math.factor | 10 ++-- extra/math/functions/functions.factor | 4 -- extra/math/ratios/ratios.factor | 1 + 7 files changed, 101 insertions(+), 21 deletions(-) diff --git a/core/bootstrap/compiler/compiler.factor b/core/bootstrap/compiler/compiler.factor index a19ffe742e..7ad1c6978b 100755 --- a/core/bootstrap/compiler/compiler.factor +++ b/core/bootstrap/compiler/compiler.factor @@ -18,6 +18,8 @@ IN: bootstrap.compiler enable-compiler +: compile-uncompiled [ compiled? not ] filter compile ; + nl "Compiling..." write flush @@ -42,38 +44,38 @@ nl find-pair-next namestack* bitand bitor bitxor bitnot -} compile +} compile-uncompiled "." write flush { - + 1+ 1- 2/ < <= > >= shift min -} compile + + 1+ 1- 2/ < <= > >= shift +} compile-uncompiled "." write flush { new-sequence nth push pop peek -} compile +} compile-uncompiled "." write flush { hashcode* = get set -} compile +} compile-uncompiled "." write flush { . lines -} compile +} compile-uncompiled "." write flush { malloc calloc free memcpy -} compile +} compile-uncompiled -vocabs [ words [ compiled? not ] filter compile "." write flush ] each +vocabs [ words compile-uncompiled "." write flush ] each " done" print flush diff --git a/core/math/floats/floats.factor b/core/math/floats/floats.factor index 30abd9cad6..5cd6f067a9 100755 --- a/core/math/floats/floats.factor +++ b/core/math/floats/floats.factor @@ -6,8 +6,6 @@ IN: math.floats.private M: fixnum >float fixnum>float ; M: bignum >float bignum>float ; -M: float zero? dup 0.0 float= swap -0.0 float= or ; - M: float >fixnum float>fixnum ; M: float >bignum float>bignum ; M: float >float ; @@ -22,4 +20,7 @@ M: float + float+ ; M: float - float- ; M: float * float* ; M: float / float/f ; +M: float /f float/f ; M: float mod float-mod ; + +M: real abs dup 0 < [ neg ] when ; diff --git a/core/math/integers/integers-tests.factor b/core/math/integers/integers-tests.factor index fe8e5bddc8..93567ee71a 100755 --- a/core/math/integers/integers-tests.factor +++ b/core/math/integers/integers-tests.factor @@ -191,3 +191,29 @@ unit-test [ f ] [ -128 power-of-2? ] unit-test [ f ] [ 0 power-of-2? ] unit-test [ t ] [ 1 power-of-2? ] unit-test + +[ 5. ] [ 5 1 ratio>float ] unit-test +[ 4. ] [ 4 1 ratio>float ] unit-test +[ 2. ] [ 2 1 ratio>float ] unit-test +[ .5 ] [ 1 2 ratio>float ] unit-test +[ .75 ] [ 3 4 ratio>float ] unit-test +[ 1. ] [ 2000 2^ 2000 2^ 1+ ratio>float ] unit-test +[ -1. ] [ 2000 2^ neg 2000 2^ 1+ ratio>float ] unit-test +[ 0.4 ] [ 6 15 ratio>float ] unit-test + +[ HEX: 3fe553522d230931 ] +[ 61967020039 92984792073 ratio>float double>bits ] unit-test + +: random-integer + 32 random-bits + 1 random zero? [ neg ] when + 1 random zero? [ >bignum ] when ; + +[ t ] [ + 1000 [ + drop + random-integer + random-integer + [ >float / ] [ ratio>float ] 2bi 0.1 ~ + ] all? +] unit-test diff --git a/core/math/integers/integers.factor b/core/math/integers/integers.factor index 70a6d2e087..60b32140f7 100755 --- a/core/math/integers/integers.factor +++ b/core/math/integers/integers.factor @@ -1,4 +1,5 @@ ! Copyright (C) 2004, 2007 Slava Pestov. +! Copyright (C) 2008, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: kernel kernel.private sequences sequences.private math math.private combinators ; @@ -22,6 +23,8 @@ M: fixnum + fixnum+ ; M: fixnum - fixnum- ; M: fixnum * fixnum* ; M: fixnum /i fixnum/i ; +M: fixnum /f >r >float r> >float float/f ; + M: fixnum mod fixnum-mod ; M: fixnum /mod fixnum/mod ; @@ -67,4 +70,57 @@ M: bignum bitnot bignum-bitnot ; M: bignum bit? bignum-bit? ; M: bignum (log2) bignum-log2 ; -M: integer zero? 0 number= ; +! Converting ratios to floats. Based on FLOAT-RATIO from +! sbcl/src/code/float.lisp, which has the following license: + +! "The software is in the public domain and is +! provided with absolutely no warranty." + +! First step: pre-scaling +: twos ( x -- y ) dup 1- bitxor log2 ; inline + +: scale-denonimator ( den -- scaled-den scale' ) + dup twos neg [ shift ] keep ; inline + +: pre-scale ( num den -- scale shifted-num scaled-den ) + 2dup [ log2 ] bi@ - + tuck [ neg 54 + shift ] [ >r scale-denonimator r> + ] 2bi* + -rot ; inline + +! Second step: loop +: shift-mantissa ( scale mantissa -- scale' mantissa' ) + [ 1+ ] [ 2/ ] bi* ; inline + +: /f-loop ( scale mantissa den -- scale' fraction-and-guard rem ) + [ 2dup /i log2 53 > ] + [ >r shift-mantissa r> ] + [ ] while /mod ; inline + +! Third step: post-scaling +: unscaled-float ( mantissa -- n ) + 52 2^ 1- bitand 1022 52 shift bitor bits>double ; inline + +: scale-float ( scale mantissa -- float' ) + >r dup 0 < [ neg 2^ recip ] [ 2^ ] if r> * ; inline + +: post-scale ( scale mantissa -- n ) + 2/ dup log2 52 > [ shift-mantissa ] when + unscaled-float scale-float ; inline + +! Main word +: /f-abs ( m n -- f ) + over zero? [ + 2drop 0 >float + ] [ + dup zero? [ + 2drop 1 >float 0 >float / + ] [ + pre-scale + /f-loop over odd? + [ zero? [ 1+ ] unless ] [ drop ] if + post-scale + ] if + ] if ; inline + +M: bignum /f ( m n -- f ) + [ [ abs ] bi@ /f-abs ] [ [ 0 < ] bi@ xor ] 2bi [ neg ] when ; diff --git a/core/math/math.factor b/core/math/math.factor index a35e4926bc..d5040757d4 100755 --- a/core/math/math.factor +++ b/core/math/math.factor @@ -21,6 +21,7 @@ MATH: + ( x y -- z ) foldable MATH: - ( x y -- z ) foldable MATH: * ( x y -- z ) foldable MATH: / ( x y -- z ) foldable +MATH: /f ( x y -- z ) foldable MATH: /i ( x y -- z ) foldable MATH: mod ( x y -- z ) foldable @@ -33,6 +34,8 @@ GENERIC# shift 1 ( x n -- y ) foldable GENERIC: bitnot ( x -- y ) foldable GENERIC# bit? 1 ( x n -- ? ) foldable +GENERIC: abs ( x -- y ) foldable + (log2) ] if ; foldable -GENERIC: zero? ( x -- ? ) foldable - -M: object zero? drop f ; - +: zero? ( x -- ? ) 0 number= ; inline : 1+ ( x -- y ) 1 + ; inline : 1- ( x -- y ) 1 - ; inline : 2/ ( x -- y ) -1 shift ; inline @@ -60,8 +60,6 @@ M: object zero? drop f ; : ?1+ [ 1+ ] [ 0 ] if* ; inline -: /f ( x y -- z ) >r >float r> >float float/f ; inline - : rem ( x y -- z ) tuck mod over + swap mod ; foldable : 2^ ( n -- 2^n ) 1 swap shift ; inline diff --git a/extra/math/functions/functions.factor b/extra/math/functions/functions.factor index 481b58bb92..bce93fbb11 100755 --- a/extra/math/functions/functions.factor +++ b/extra/math/functions/functions.factor @@ -80,10 +80,6 @@ M: integer (^) -rot (^mod) ] if ; foldable -GENERIC: abs ( x -- y ) foldable - -M: real abs dup 0 < [ neg ] when ; - GENERIC: absq ( x -- y ) foldable M: real absq sq ; diff --git a/extra/math/ratios/ratios.factor b/extra/math/ratios/ratios.factor index 3c430111ff..43cbc3fc10 100755 --- a/extra/math/ratios/ratios.factor +++ b/extra/math/ratios/ratios.factor @@ -47,5 +47,6 @@ M: ratio - 2dup scale - -rot ratio+d / ; M: ratio * 2>fraction * >r * r> / ; M: ratio / scale / ; M: ratio /i scale /i ; +M: ratio /f scale /f ; M: ratio mod 2dup >r >r /i r> r> rot * - ; M: ratio /mod [ /i ] 2keep mod ; From 9e02c533b832057cb45ae33436a98d609deb7151 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 28 Apr 2008 21:26:37 -0500 Subject: [PATCH 148/270] Fix help bug reported --- extra/help/help-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/help/help-docs.factor b/extra/help/help-docs.factor index 1d2af5fb39..d4981751e2 100755 --- a/extra/help/help-docs.factor +++ b/extra/help/help-docs.factor @@ -113,7 +113,7 @@ ARTICLE: "help" "Help system" "The help system maintains documentation written in a simple markup language, along with cross-referencing and search. Documentation can either exist as free-standing " { $emphasis "articles" } " or be associated with words." { $subsection "browsing-help" } { $subsection "writing-help" } -{ $subsection "help.lint" } +{ $vocab-subsection "Help lint tool" "help.lint" } { $subsection "help-impl" } ; IN: help From f7a39798188741a1b54cb0015a45e8fc00aebf6c Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 28 Apr 2008 23:32:55 -0500 Subject: [PATCH 149/270] builder.release.branch: per platform directories for clean images --- extra/builder/release/branch/branch.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/builder/release/branch/branch.factor b/extra/builder/release/branch/branch.factor index 6218a2ea90..6b1266bb45 100644 --- a/extra/builder/release/branch/branch.factor +++ b/extra/builder/release/branch/branch.factor @@ -21,7 +21,7 @@ IN: builder.release.branch { "scp" my-boot-image-name - "factorcode.org:/var/www/factorcode.org/newsite/images/clean" + { "factorcode.org:/var/www/factorcode.org/newsite/images/clean/" platform } } to-strings try-process ; From 2453621588f671889c00da486175566ae1008802 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 29 Apr 2008 00:43:58 -0500 Subject: [PATCH 150/270] fix load errors --- extra/http/server/auth/providers/db/db.factor | 2 +- extra/semantic-db/semantic-db.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/http/server/auth/providers/db/db.factor b/extra/http/server/auth/providers/db/db.factor index deab40e8d4..dba91791f6 100755 --- a/extra/http/server/auth/providers/db/db.factor +++ b/extra/http/server/auth/providers/db/db.factor @@ -7,7 +7,7 @@ IN: http.server.auth.providers.db user "USERS" { - { "username" "USERNAME" { VARCHAR 256 } +assigned-id+ } + { "username" "USERNAME" { VARCHAR 256 } +user-assigned-id+ } { "realname" "REALNAME" { VARCHAR 256 } } { "password" "PASSWORD" { VARCHAR 256 } +not-null+ } { "email" "EMAIL" { VARCHAR 256 } } diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 4591f6bf08..3ecda97584 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -53,7 +53,7 @@ TUPLE: arc id relation subject object ; arc "arc" { - { "id" "id" INTEGER +assigned-id+ } ! foreign key to node table? + { "id" "id" INTEGER +user-assigned-id+ } ! foreign key to node table? { "relation" "relation" INTEGER +not-null+ } { "subject" "subject" INTEGER +not-null+ } { "object" "object" INTEGER +not-null+ } From 5901107f6628557ccf5e7365f3d554e2319a3fee Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 01:49:06 -0500 Subject: [PATCH 151/270] Bootstrap fix --- core/alien/compiler/compiler.factor | 10 ++++----- core/bootstrap/image/image-tests.factor | 19 ++++++++++++++++- core/bootstrap/image/image.factor | 28 ++++++++++++++----------- core/math/integers/integers.factor | 4 ++-- 4 files changed, 41 insertions(+), 20 deletions(-) diff --git a/core/alien/compiler/compiler.factor b/core/alien/compiler/compiler.factor index 3de4c61291..08b52367b0 100755 --- a/core/alien/compiler/compiler.factor +++ b/core/alien/compiler/compiler.factor @@ -270,7 +270,7 @@ M: no-such-symbol compiler-error-type pop-literal nip >>library pop-literal nip >>return ! Quotation which coerces parameters to required types - dup param-prep-quot f infer-quot + dup param-prep-quot recursive-state get infer-quot ! Set ABI dup library>> library [ abi>> ] [ "cdecl" ] if* >>abi ! Add node to IR @@ -278,7 +278,7 @@ M: no-such-symbol compiler-error-type ! Magic #: consume exactly the number of inputs dup 0 alien-invoke-stack ! Quotation which coerces return value to required type - return-prep-quot f infer-quot + return-prep-quot recursive-state get infer-quot ] "infer" set-word-prop M: #alien-invoke generate-node @@ -306,13 +306,13 @@ M: alien-indirect-error summary pop-parameters >>parameters pop-literal nip >>return ! Quotation which coerces parameters to required types - dup param-prep-quot [ dip ] curry f infer-quot + dup param-prep-quot [ dip ] curry recursive-state get infer-quot ! Add node to IR dup node, ! Magic #: consume the function pointer, too dup 1 alien-invoke-stack ! Quotation which coerces return value to required type - return-prep-quot f infer-quot + return-prep-quot recursive-state get infer-quot ] "infer" set-word-prop M: #alien-indirect generate-node @@ -345,7 +345,7 @@ M: alien-callback-error summary : callback-bottom ( node -- ) xt>> [ word-xt drop ] curry - f infer-quot ; + recursive-state get infer-quot ; \ alien-callback [ 4 ensure-values diff --git a/core/bootstrap/image/image-tests.factor b/core/bootstrap/image/image-tests.factor index ae5c66a45c..c432a47ea4 100755 --- a/core/bootstrap/image/image-tests.factor +++ b/core/bootstrap/image/image-tests.factor @@ -1,5 +1,22 @@ IN: bootstrap.image.tests -USING: bootstrap.image bootstrap.image.private tools.test ; +USING: bootstrap.image bootstrap.image.private tools.test +kernel math ; \ ' must-infer \ write-image must-infer + +[ f ] [ { 1 2 3 } [ 1 2 3 ] eql? ] unit-test + +[ t ] [ [ 1 2 3 ] [ 1 2 3 ] eql? ] unit-test + +[ f ] [ [ 2drop 0 ] [ 2drop 0.0 ] eql? ] unit-test + +[ t ] [ [ 2drop 0 ] [ 2drop 0 ] eql? ] unit-test + +[ f ] [ \ + [ 2drop 0 ] eql? ] unit-test + +[ f ] [ 3 [ 0 1 2 ] eql? ] unit-test + +[ f ] [ 3 3.0 eql? ] unit-test + +[ t ] [ 4.0 4.0 eql? ] unit-test diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor index 949d30c1d3..b3be0c41e7 100755 --- a/core/bootstrap/image/image.factor +++ b/core/bootstrap/image/image.factor @@ -39,19 +39,23 @@ C: id M: id hashcode* obj>> hashcode* ; +GENERIC: (eql?) ( obj1 obj2 -- ? ) + +: eql? ( obj1 obj2 -- ? ) + [ (eql?) ] [ [ class ] bi@ = ] 2bi and ; + +M: integer (eql?) = ; + +M: sequence (eql?) + over sequence? [ + 2dup [ length ] bi@ = + [ [ eql? ] 2all? ] [ 2drop f ] if + ] [ 2drop f ] if ; + +M: object (eql?) = ; + M: id equal? - over id? [ - [ obj>> ] bi@ - [ = ] [ - dup number? [ - [ class ] bi@ = - ] [ - 2drop t - ] if - ] 2bi and - ] [ - 2drop f - ] if ; + over id? [ [ obj>> ] bi@ eql? ] [ 2drop f ] if ; SYMBOL: objects diff --git a/core/math/integers/integers.factor b/core/math/integers/integers.factor index 60b32140f7..6563a1cd11 100755 --- a/core/math/integers/integers.factor +++ b/core/math/integers/integers.factor @@ -110,10 +110,10 @@ M: bignum (log2) bignum-log2 ; ! Main word : /f-abs ( m n -- f ) over zero? [ - 2drop 0 >float + 2drop 0.0 ] [ dup zero? [ - 2drop 1 >float 0 >float / + 2drop 1.0/0.0 ] [ pre-scale /f-loop over odd? From d146601fdb3e46a0a7d9ed525269bf640d4d8f62 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 02:59:14 -0500 Subject: [PATCH 152/270] Fix locals docs --- extra/locals/locals-docs.factor | 8 +- extra/zip-codes/zipcode.csv | 43205 ++++++++++++++++++++++++++++++ 2 files changed, 43210 insertions(+), 3 deletions(-) create mode 100644 extra/zip-codes/zipcode.csv diff --git a/extra/locals/locals-docs.factor b/extra/locals/locals-docs.factor index 18d9ec868e..96485825ff 100644 --- a/extra/locals/locals-docs.factor +++ b/extra/locals/locals-docs.factor @@ -120,9 +120,11 @@ $nl "Another limitation is that closure conversion does not descend into arrays, hashtables or other types of literals. For example, the following does not work:" { $code ":: bad-cond-usage ( a -- ... )" - " { [ a 0 < ] [ ... ] }" - " { [ a 0 > ] [ ... ] }" - " { [ a 0 = ] [ ... ] } ;" + " {" + " { [ a 0 < ] [ ... ] }" + " { [ a 0 > ] [ ... ] }" + " { [ a 0 = ] [ ... ] }" + " } cond ;" } ; ARTICLE: "locals" "Local variables and lexical closures" diff --git a/extra/zip-codes/zipcode.csv b/extra/zip-codes/zipcode.csv new file mode 100644 index 0000000000..e6a1645c8b --- /dev/null +++ b/extra/zip-codes/zipcode.csv @@ -0,0 +1,43205 @@ +"zip","city","state","latitude","longitude","timezone","dst" +"00210","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00211","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00212","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00213","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00214","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00215","Portsmouth","NH","43.005895","-71.013202","-5","1" +"00501","Holtsville","NY","40.922326","-72.637078","-5","1" +"00544","Holtsville","NY","40.922326","-72.637078","-5","1" +"00601","Adjuntas","PR","18.180103","-66.74947","-4","0" +"00602","Aguada","PR","18.363285","-67.18024","-4","0" +"00603","Aguadilla","PR","18.448619","-67.13422","-4","0" +"00604","Aguadilla","PR","18.498987","-67.13699","-4","0" +"00605","Aguadilla","PR","18.465162","-67.141486","-4","0" +"00606","Maricao","PR","18.182151","-66.9588","-4","0" +"00607","Aguas Buenas","PR","18.256995","-66.104657","-4","0" + +"00609","Aibonito","PR","18.142002","-66.273278","-4","0" +"00610","Anasco","PR","18.288319","-67.13604","-4","0" +"00611","Angeles","PR","18.279531","-66.80217","-4","0" +"00612","Arecibo","PR","18.449732","-66.69879","-4","0" +"00613","Arecibo","PR","18.458093","-66.732732","-4","0" +"00614","Arecibo","PR","18.429675","-66.674506","-4","0" +"00615","Arroyo","PR","17.96977","-66.061459","-4","0" +"00616","Bajadero","PR","18.426748","-66.67669","-4","0" +"00617","Barceloneta","PR","18.455499","-66.55575","-4","0" +"00618","Barranquitas","PR","18.185463","-66.305827","-4","0" +"00622","Boqueron","PR","18.003125","-67.16745","-4","0" +"00623","Cabo Rojo","PR","18.08643","-67.15222","-4","0" +"00624","Penuelas","PR","18.055399","-66.72602","-4","0" +"00625","Caguas","PR","18.232109","-66.039087","-4","0" +"00626","Caguas","PR","18.235003","-66.037318","-4","0" +"00627","Camuy","PR","18.435246","-66.85644","-4","0" + +"00631","Castaner","PR","18.186739","-66.85174","-4","0" +"00633","Cayey","PR","18.194527","-66.183467","-4","0" +"00634","Cayey","PR","18.111528","-66.177083","-4","0" +"00635","Ceiba","PR","18.262902","-65.646529","-4","0" +"00636","Rosario","PR","18.113284","-67.039706","-4","0" +"00637","Sabana Grande","PR","18.073078","-66.94864","-4","0" +"00638","Ciales","PR","18.308139","-66.49835","-4","0" +"00639","Cidra","PR","18.176094","-66.158728","-4","0" +"00640","Coamo","PR","18.077197","-66.359104","-4","0" +"00641","Utuado","PR","18.268896","-66.70519","-4","0" + +"00643","Corozal","PR","18.341254","-66.315194","-4","0" +"00644","Coto Laurel","PR","18.049577","-66.55218","-4","0" +"00645","Culebra","PR","18.308508","-65.304732","-4","0" +"00646","Dorado","PR","18.442798","-66.27689","-4","0" +"00647","Ensenada","PR","17.964529","-66.93993","-4","0" +"00648","Fajardo","PR","18.333038","-65.656182","-4","0" +"00650","Florida","PR","18.363331","-66.56773","-4","0" +"00652","Garrochales","PR","18.457453","-66.61217","-4","0" +"00653","Guanica","PR","17.992112","-66.90097","-4","0" +"00654","Jobos","PR","17.979518","-66.117219","-4","0" +"00655","Olimpo","PR","17.976371","-66.116795","-4","0" +"00656","Guayanilla","PR","18.038866","-66.79168","-4","0" +"00658","Gurabo","PR","18.254137","-65.973605","-4","0" +"00659","Hatillo","PR","18.432956","-66.80039","-4","0" +"00660","Hormigueros","PR","18.139108","-67.12085","-4","0" +"00661","Humacao","PR","18.150829","-65.826595","-4","0" +"00662","Isabela","PR","18.478855","-67.01973","-4","0" +"00664","Jayuya","PR","18.212565","-66.59243","-4","0" +"00665","Ponce","PR","18.044224","-66.502103","-4","0" +"00666","Juncos","PR","18.228952","-65.921356","-4","0" +"00667","Lajas","PR","18.017819","-67.04226","-4","0" +"00669","Lares","PR","18.288418","-66.87503","-4","0" +"00670","Las Marias","PR","18.241343","-66.97604","-4","0" +"00671","Las Piedras","PR","18.1789","-65.869939","-4","0" + + +"00674","Manati","PR","18.426137","-66.48697","-4","0" +"00676","Moca","PR","18.37956","-67.08424","-4","0" +"00677","Rincon","PR","18.336121","-67.23675","-4","0" +"00678","Quebradillas","PR","18.442334","-66.93275","-4","0" +"00680","Mayaguez","PR","18.205232","-67.12655","-4","0" +"00681","Mayaguez","PR","18.219023","-67.508068","-4","0" +"00682","Mayaguez","PR","18.208402","-67.15428","-4","0" +"00683","San German","PR","18.092807","-67.04524","-4","0" +"00685","San Sebastian","PR","18.332595","-66.98104","-4","0" +"00687","Morovis","PR","18.31708","-66.41528","-4","0" +"00688","Sabana Hoyos","PR","18.40415","-66.61348","-4","0" +"00690","San Antonio","PR","18.495369","-67.09867","-4","0" +"00692","Vega Alta","PR","18.419666","-66.33186","-4","0" +"00693","Vega Baja","PR","18.440667","-66.3921","-4","0" +"00694","Vega Baja","PR","18.443109","-66.398302","-4","0" +"00698","Yauco","PR","18.06547","-66.85587","-4","0" + +"00703","Aguas Buenas","PR","18.246205","-66.12827","-4","0" +"00704","Aguirre","PR","17.970112","-66.22291","-4","0" +"00705","Aibonito","PR","18.12942","-66.26541","-4","0" +"00707","Maunabo","PR","18.014505","-65.91018","-4","0" + + +"00714","Arroyo","PR","17.987288","-66.05552","-4","0" +"00715","Mercedita","PR","18.003492","-66.55868","-4","0" +"00716","Ponce","PR","17.999066","-66.59965","-4","0" +"00717","Ponce","PR","18.004303","-66.61374","-4","0" +"00718","Naguabo","PR","18.22048","-65.74293","-4","0" +"00719","Naranjito","PR","18.294571","-66.25098","-4","0" +"00720","Orocovis","PR","18.217827","-66.42265","-4","0" +"00721","Palmer","PR","18.364161","-65.778288","-4","0" +"00723","Patillas","PR","18.023196","-66.0131","-4","0" + +"00725","Caguas","PR","18.233927","-66.04502","-4","0" +"00726","Caguas","PR","18.212965","-66.058033","-4","0" +"00728","Ponce","PR","18.013353","-66.65218","-4","0" +"00729","Canovanas","PR","18.35615","-65.89089","-4","0" +"00730","Ponce","PR","18.022626","-66.61727","-4","0" +"00731","Ponce","PR","18.077329","-66.61192","-4","0" +"00732","Ponce","PR","18.021781","-66.613742","-4","0" +"00733","Ponce","PR","18.019331","-66.619165","-4","0" +"00734","Ponce","PR","17.999499","-66.643934","-4","0" +"00735","Ceiba","PR","18.258444","-65.65987","-4","0" +"00736","Cayey","PR","18.112895","-66.15377","-4","0" +"00737","Cayey","PR","18.102967","-66.139274","-4","0" +"00738","Fajardo","PR","18.32265","-65.66116","-4","0" +"00739","Cidra","PR","18.16984","-66.16271","-4","0" +"00740","Puerto Real","PR","18.331711","-65.62761","-4","0" +"00741","Punta Santiago","PR","18.160755","-65.75765","-4","0" +"00742","Roosevelt Roads","PR","18.264872","-65.594769","-4","0" + +"00744","Rio Blanco","PR","18.206329","-65.743058","-4","0" +"00745","Rio Grande","PR","18.366213","-65.82277","-4","0" +"00747","Lluveras","PR","18.069474","-66.952589","-4","0" +"00748","Fajardo","PR","18.326732","-65.652484","-4","0" +"00751","Salinas","PR","17.993803","-66.26534","-4","0" +"00752","San Antonio","PR","18.493745","-67.097726","-4","0" + +"00754","San Lorenzo","PR","18.15633","-65.96831","-4","0" + +"00757","Santa Isabel","PR","17.98631","-66.39457","-4","0" + +"00761","Utuado","PR","18.265445","-66.702364","-4","0" +"00762","Vega Alta","PR","18.420218","-66.324284","-4","0" +"00763","Monserrate","PR","18.452175","-66.399836","-4","0" +"00764","Vega Baja","PR","18.452084","-66.397138","-4","0" +"00765","Vieques","PR","18.125664","-65.45603","-4","0" +"00766","Villalba","PR","18.126023","-66.48208","-4","0" +"00767","Yabucoa","PR","18.072752","-65.89703","-4","0" +"00768","Yauco","PR","18.030715","-66.856181","-4","0" +"00769","Coamo","PR","18.092813","-66.3611","-4","0" +"00771","Las Piedras","PR","18.18744","-65.87088","-4","0" +"00772","Loiza","PR","18.427674","-65.87605","-4","0" +"00773","Luquillo","PR","18.361344","-65.72133","-4","0" +"00775","Culebra","PR","18.311149","-65.29257","-4","0" +"00777","Juncos","PR","18.224088","-65.91316","-4","0" +"00778","Gurabo","PR","18.258628","-65.97791","-4","0" +"00780","Coto Laurel","PR","18.068538","-66.55939","-4","0" +"00782","Comerio","PR","18.223348","-66.2267","-4","0" +"00783","Corozal","PR","18.304874","-66.32305","-4","0" +"00784","Guayama","PR","17.984137","-66.12779","-4","0" +"00785","Guayama","PR","18.018822","-66.795603","-4","0" +"00786","La Plata","PR","18.128092","-66.268717","-4","0" +"00791","Humacao","PR","18.147257","-65.82269","-4","0" +"00792","Humacao","PR","18.138029","-65.788499","-4","0" +"00794","Barranquitas","PR","18.204294","-66.31058","-4","0" +"00795","Juana Diaz","PR","18.036253","-66.50289","-4","0" +"00801","St Thomas","VI","18.322285","-64.963715","-4","0" +"00802","St Thomas","VI","18.322285","-64.963715","-4","0" +"00803","St Thomas","VI","18.322285","-64.963715","-4","0" +"00804","St Thomas","VI","18.322285","-64.963715","-4","0" +"00805","St Thomas","VI","18.322285","-64.963715","-4","0" +"00820","Christiansted","VI","17.734211","-64.734694","-4","0" +"00821","Christiansted","VI","17.734211","-64.734694","-4","0" +"00822","Christiansted","VI","17.734211","-64.734694","-4","0" +"00823","Christiansted","VI","17.734211","-64.734694","-4","0" +"00824","Christiansted","VI","17.734211","-64.734694","-4","0" +"00830","St John","VI","18.32816","-64.740737","-4","0" +"00831","St John","VI","18.32816","-64.740737","-4","0" +"00840","Frederiksted","VI","17.734211","-64.734694","-4","0" +"00841","Frederiksted","VI","17.734211","-64.734694","-4","0" +"00850","Kingshill","VI","17.734211","-64.734694","-4","0" +"00851","Kingshill","VI","17.734211","-64.734694","-4","0" +"00901","San Juan","PR","18.465426","-66.10786","-4","0" +"00902","San Juan","PR","18.410462","-66.060533","-4","0" +"00906","San Juan","PR","18.46454","-66.10079","-4","0" +"00907","San Juan","PR","18.451131","-66.07798","-4","0" +"00908","San Juan","PR","18.410462","-66.060533","-4","0" +"00909","San Juan","PR","18.442282","-66.06764","-4","0" +"00910","San Juan","PR","18.410462","-66.060533","-4","0" +"00911","San Juan","PR","18.45009","-66.0577","-4","0" +"00912","San Juan","PR","18.445946","-66.05928","-4","0" +"00913","San Juan","PR","18.450907","-66.04256","-4","0" +"00914","San Juan","PR","18.410462","-66.060533","-4","0" +"00915","San Juan","PR","18.436995","-66.04888","-4","0" +"00916","San Juan","PR","18.410462","-66.060533","-4","0" +"00917","San Juan","PR","18.422263","-66.0513","-4","0" +"00918","San Juan","PR","18.417668","-66.06494","-4","0" +"00919","San Juan","PR","18.410462","-66.060533","-4","0" +"00920","San Juan","PR","18.41242","-66.09069","-4","0" +"00921","San Juan","PR","18.394019","-66.08633","-4","0" +"00922","San Juan","PR","18.410462","-66.060533","-4","0" +"00923","San Juan","PR","18.410681","-66.03806","-4","0" +"00924","San Juan","PR","18.401917","-66.01194","-4","0" +"00925","San Juan","PR","18.400006","-66.05028","-4","0" +"00926","San Juan","PR","18.361363","-66.0562","-4","0" +"00927","San Juan","PR","18.39184","-66.06867","-4","0" +"00928","San Juan","PR","18.410462","-66.060533","-4","0" +"00929","San Juan","PR","18.410462","-66.060533","-4","0" +"00930","San Juan","PR","18.410462","-66.060533","-4","0" +"00931","San Juan","PR","18.410462","-66.060533","-4","0" +"00933","San Juan","PR","18.410462","-66.060533","-4","0" +"00934","Fort Buchanan","PR","18.413511","-66.12198","-4","0" +"00935","San Juan","PR","18.410462","-66.060533","-4","0" +"00936","San Juan","PR","18.410462","-66.060533","-4","0" +"00937","San Juan","PR","18.410462","-66.060533","-4","0" +"00938","San Juan","PR","18.410462","-66.060533","-4","0" +"00939","San Juan","PR","18.410462","-66.060533","-4","0" +"00940","San Juan","PR","18.410462","-66.060533","-4","0" +"00949","Toa Baja","PR","18.433173","-66.2042","-4","0" +"00950","Toa Baja","PR","18.457761","-66.196503","-4","0" +"00951","Toa Baja","PR","18.457761","-66.196503","-4","0" +"00952","Sabana Seca","PR","18.429218","-66.18014","-4","0" +"00953","Toa Alta","PR","18.36802","-66.23414","-4","0" +"00954","Toa Alta","PR","18.358939","-66.258108","-4","0" +"00955","San Juan","PR","18.410462","-66.060533","-4","0" +"00956","Bayamon","PR","18.34216","-66.16643","-4","0" +"00957","Bayamon","PR","18.369674","-66.18669","-4","0" +"00958","Bayamon","PR","18.34487","-66.166014","-4","0" +"00959","Bayamon","PR","18.387063","-66.15943","-4","0" +"00960","Bayamon","PR","18.34487","-66.166014","-4","0" +"00961","Bayamon","PR","18.412462","-66.16033","-4","0" +"00962","Catano","PR","18.437683","-66.13847","-4","0" +"00963","Catano","PR","18.443217","-66.139293","-4","0" +"00965","Guaynabo","PR","18.431453","-66.11703","-4","0" +"00966","Guaynabo","PR","18.398507","-66.11522","-4","0" +"00968","Guaynabo","PR","18.408479","-66.1025","-4","0" +"00969","Guaynabo","PR","18.366981","-66.10889","-4","0" +"00970","Guaynabo","PR","18.359143","-66.112295","-4","0" +"00971","Guaynabo","PR","18.329688","-66.11876","-4","0" +"00975","San Juan","PR","18.410462","-66.060533","-4","0" +"00976","Trujillo Alto","PR","18.346767","-66.00561","-4","0" +"00977","Trujillo Alto","PR","18.337004","-65.990099","-4","0" +"00978","St Just","PR","18.337004","-65.990099","-4","0" +"00979","Carolina","PR","18.431885","-66.0127","-4","0" +"00981","Carolina","PR","18.410462","-66.060533","-4","0" +"00982","Carolina","PR","18.409345","-65.99313","-4","0" +"00983","Carolina","PR","18.414408","-65.97582","-4","0" +"00984","Carolina","PR","18.393355","-65.972495","-4","0" +"00985","Carolina","PR","18.374896","-65.94691","-4","0" +"00986","Carolina","PR","18.393355","-65.972495","-4","0" +"00987","Carolina","PR","18.372228","-65.96275","-4","0" +"00988","Carolina","PR","18.393355","-65.972495","-4","0" +"01001","Agawam","MA","42.07061","-72.62029","-5","1" +"01002","Amherst","MA","42.377651","-72.50323","-5","1" +"01003","Amherst","MA","42.369562","-72.63599","-5","1" +"01004","Amherst","MA","42.384494","-72.513183","-5","1" +"01005","Barre","MA","42.412094","-72.10443","-5","1" +"01007","Belchertown","MA","42.278424","-72.411","-5","1" +"01008","Blandford","MA","42.174313","-72.94828","-5","1" +"01009","Bondsville","MA","42.206092","-72.340486","-5","1" +"01010","Brimfield","MA","42.126038","-72.20552","-5","1" +"01011","Chester","MA","42.271442","-73.01958","-5","1" +"01012","Chesterfield","MA","42.390836","-72.84356","-5","1" +"01013","Chicopee","MA","42.161492","-72.60316","-5","1" +"01014","Chicopee","MA","42.170731","-72.604842","-5","1" +"01020","Chicopee","MA","42.175992","-72.57265","-5","1" +"01021","Chicopee","MA","42.170731","-72.604842","-5","1" +"01022","Chicopee","MA","42.196666","-72.55606","-5","1" +"01026","Cummington","MA","42.465041","-72.91813","-5","1" +"01027","Easthampton","MA","42.27279","-72.68677","-5","1" +"01028","East Longmeadow","MA","42.066795","-72.5102","-5","1" +"01029","East Otis","MA","42.175896","-73.04204","-5","1" +"01030","Feeding Hills","MA","42.070774","-72.67248","-5","1" +"01031","Gilbertville","MA","42.33071","-72.18833","-5","1" +"01032","Goshen","MA","42.45792","-72.81551","-5","1" +"01033","Granby","MA","42.254563","-72.51831","-5","1" +"01034","Granville","MA","42.086224","-72.94464","-5","1" +"01035","Hadley","MA","42.35549","-72.5733","-5","1" +"01036","Hampden","MA","42.064703","-72.41735","-5","1" +"01037","Hardwick","MA","42.374202","-72.19524","-5","1" +"01038","Hatfield","MA","42.375155","-72.60832","-5","1" +"01039","Haydenville","MA","42.381475","-72.69259","-5","1" +"01040","Holyoke","MA","42.201891","-72.6242","-5","1" +"01041","Holyoke","MA","42.170731","-72.604842","-5","1" +"01050","Huntington","MA","42.290209","-72.87942","-5","1" +"01053","Leeds","MA","42.353105","-72.70206","-5","1" +"01054","Leverett","MA","42.479839","-72.49879","-5","1" +"01056","Ludlow","MA","42.174893","-72.47068","-5","1" +"01057","Monson","MA","42.089269","-72.317","-5","1" +"01059","North Amherst","MA","42.369562","-72.63599","-5","1" +"01060","Northampton","MA","42.324539","-72.63561","-5","1" +"01061","Northampton","MA","42.369562","-72.63599","-5","1" +"01062","Florence","MA","42.324232","-72.67915","-5","1" +"01063","Northampton","MA","42.317939","-72.640234","-5","1" +"01066","North Hatfield","MA","42.406697","-72.633901","-5","1" +"01068","Oakham","MA","42.349769","-72.04413","-5","1" +"01069","Palmer","MA","42.176401","-72.32646","-5","1" +"01070","Plainfield","MA","42.515853","-72.91661","-5","1" +"01071","Russell","MA","42.165931","-72.85153","-5","1" +"01072","Shutesbury","MA","42.486027","-72.42208","-5","1" +"01073","Southampton","MA","42.223885","-72.72777","-5","1" +"01074","South Barre","MA","42.375998","-72.149388","-5","1" +"01075","South Hadley","MA","42.234891","-72.58243","-5","1" +"01077","Southwick","MA","42.05283","-72.76966","-5","1" +"01079","Thorndike","MA","42.192892","-72.329574","-5","1" +"01080","Three Rivers","MA","42.180563","-72.36518","-5","1" +"01081","Wales","MA","42.058024","-72.22517","-5","1" +"01082","Ware","MA","42.270611","-72.26067","-5","1" +"01083","Warren","MA","42.20468","-72.20259","-5","1" +"01084","West Chesterfield","MA","42.379807","-72.89043","-5","1" +"01085","Westfield","MA","42.133642","-72.75029","-5","1" +"01086","Westfield","MA","42.173428","-72.847964","-5","1" +"01088","West Hatfield","MA","42.388831","-72.6321","-5","1" +"01089","West Springfield","MA","42.112793","-72.64066","-5","1" +"01090","West Springfield","MA","42.170731","-72.604842","-5","1" +"01092","West Warren","MA","42.210777","-72.23904","-5","1" +"01093","Whately","MA","42.442673","-72.652511","-5","1" +"01094","Wheelwright","MA","42.358201","-72.140846","-5","1" +"01095","Wilbraham","MA","42.12531","-72.44057","-5","1" +"01096","Williamsburg","MA","42.415236","-72.78271","-5","1" +"01097","Woronoco","MA","42.161743","-72.845912","-5","1" +"01098","Worthington","MA","42.399054","-72.93871","-5","1" +"01101","Springfield","MA","42.170731","-72.604842","-5","1" +"01102","Springfield","MA","42.170731","-72.604842","-5","1" +"01103","Springfield","MA","42.103294","-72.59112","-5","1" +"01104","Springfield","MA","42.130343","-72.57338","-5","1" +"01105","Springfield","MA","42.096644","-72.5798","-5","1" +"01106","Longmeadow","MA","42.050395","-72.5712","-5","1" +"01107","Springfield","MA","42.120193","-72.6061","-5","1" +"01108","Springfield","MA","42.084094","-72.55523","-5","1" +"01109","Springfield","MA","42.116277","-72.55031","-5","1" +"01111","Springfield","MA","42.170731","-72.604842","-5","1" +"01114","Springfield","MA","42.170731","-72.604842","-5","1" +"01115","Springfield","MA","42.102894","-72.591633","-5","1" +"01116","Longmeadow","MA","42.170731","-72.604842","-5","1" +"01118","Springfield","MA","42.093144","-72.5291","-5","1" +"01119","Springfield","MA","42.128442","-72.50932","-5","1" +"01128","Springfield","MA","42.095344","-72.48857","-5","1" +"01129","Springfield","MA","42.121031","-72.4896","-5","1" +"01133","Springfield","MA","42.170731","-72.604842","-5","1" +"01138","Springfield","MA","42.170731","-72.604842","-5","1" +"01139","Springfield","MA","42.170731","-72.604842","-5","1" +"01144","Springfield","MA","42.101796","-72.59151","-5","1" +"01151","Indian Orchard","MA","42.153926","-72.50531","-5","1" +"01152","Springfield","MA","42.170731","-72.604842","-5","1" +"01199","Springfield","MA","42.119943","-72.604983","-5","1" +"01201","Pittsfield","MA","42.45384","-73.254","-5","1" +"01202","Pittsfield","MA","42.3929","-73.228483","-5","1" +"01203","Pittsfield","MA","42.3929","-73.228483","-5","1" +"01220","Adams","MA","42.619727","-73.11842","-5","1" +"01222","Ashley Falls","MA","42.057496","-73.32177","-5","1" +"01223","Becket","MA","42.314449","-73.09335","-5","1" +"01224","Berkshire","MA","42.3929","-73.228483","-5","1" +"01225","Cheshire","MA","42.551731","-73.1653","-5","1" +"01226","Dalton","MA","42.476575","-73.11547","-5","1" +"01227","Dalton","MA","42.516145","-73.092852","-5","1" +"01229","Glendale","MA","42.279292","-73.343545","-5","1" +"01230","Great Barrington","MA","42.189715","-73.35249","-5","1" +"01231","Sheffield","MA","42.153001","-73.298131","-5","1" +"01235","Hinsdale","MA","42.433661","-73.09278","-5","1" +"01236","Housatonic","MA","42.266874","-73.36236","-5","1" +"01237","Lanesboro","MA","42.557346","-73.24364","-5","1" +"01238","Lee","MA","42.299263","-73.2327","-5","1" +"01240","Lenox","MA","42.36237","-73.27683","-5","1" +"01242","Lenox Dale","MA","42.336557","-73.24599","-5","1" +"01243","Middlefield","MA","42.356088","-73.010448","-5","1" +"01244","Mill River","MA","42.139104","-73.20312","-5","1" +"01245","Monterey","MA","42.180659","-73.20849","-5","1" +"01247","North Adams","MA","42.696064","-73.10145","-5","1" +"01252","North Egremont","MA","42.198648","-73.446234","-5","1" +"01253","Otis","MA","42.198403","-73.10205","-5","1" +"01254","Richmond","MA","42.374711","-73.36336","-5","1" +"01255","Sandisfield","MA","42.088973","-73.12444","-5","1" +"01256","Savoy","MA","42.592506","-73.01123","-5","1" +"01257","Sheffield","MA","42.102694","-73.36591","-5","1" +"01258","South Egremont","MA","42.103122","-73.45734","-5","1" +"01259","Southfield","MA","42.0645","-73.24674","-5","1" +"01260","South Lee","MA","42.286586","-73.313274","-5","1" +"01262","Stockbridge","MA","42.283216","-73.31423","-5","1" +"01263","Stockbridge","MA","42.3929","-73.228483","-5","1" +"01264","Tyringham","MA","42.224905","-73.20394","-5","1" +"01266","West Stockbridge","MA","42.328535","-73.36407","-5","1" +"01267","Williamstown","MA","42.689962","-73.22355","-5","1" +"01270","Windsor","MA","42.443726","-73.116127","-5","1" +"01301","Greenfield","MA","42.605524","-72.60098","-5","1" +"01302","Greenfield","MA","42.522178","-72.624164","-5","1" +"01330","Ashfield","MA","42.521131","-72.81116","-5","1" +"01331","Athol","MA","42.579931","-72.20836","-5","1" +"01337","Bernardston","MA","42.678023","-72.55569","-5","1" +"01338","Buckland","MA","42.569498","-72.802","-5","1" +"01339","Charlemont","MA","42.626858","-72.87939","-5","1" +"01340","Colrain","MA","42.673371","-72.73104","-5","1" +"01341","Conway","MA","42.508313","-72.70403","-5","1" +"01342","Deerfield","MA","42.542322","-72.6091","-5","1" +"01343","Drury","MA","42.642666","-72.986231","-5","1" +"01344","Erving","MA","42.607051","-72.41396","-5","1" +"01346","Heath","MA","42.669255","-72.80494","-5","1" +"01347","Lake Pleasant","MA","42.556558","-72.518104","-5","1" +"01349","Turners Falls","MA","42.5737","-72.50525","-5","1" +"01350","Monroe Bridge","MA","42.712257","-72.97629","-5","1" +"01351","Montague","MA","42.534976","-72.52522","-5","1" +"01354","Northfield","MA","42.522178","-72.624164","-5","1" +"01355","New Salem","MA","42.485899","-72.33345","-5","1" +"01360","Northfield","MA","42.682285","-72.45649","-5","1" +"01364","Orange","MA","42.599614","-72.29263","-5","1" +"01366","Petersham","MA","42.474718","-72.21226","-5","1" +"01367","Rowe","MA","42.694883","-72.90962","-5","1" +"01368","Royalston","MA","42.671012","-72.16999","-5","1" +"01369","Shattuckville","MA","42.522178","-72.624164","-5","1" +"01370","Shelburne Falls","MA","42.603447","-72.72754","-5","1" +"01373","South Deerfield","MA","42.472734","-72.62452","-5","1" +"01374","Charlemont","MA","42.636459","-72.798742","-5","1" +"01375","Sunderland","MA","42.449978","-72.56302","-5","1" +"01376","Turners Falls","MA","42.609425","-72.54438","-5","1" +"01378","Warwick","MA","42.667152","-72.32729","-5","1" +"01379","Wendell","MA","42.547274","-72.41724","-5","1" +"01380","Wendell Depot","MA","42.594455","-72.36314","-5","1" +"01393","Whately","MA","42.459814","-72.593626","-5","1" +"01420","Fitchburg","MA","42.578689","-71.80338","-5","1" +"01427","Westborough","MA","42.286575","-71.585753","-5","1" +"01430","Ashburnham","MA","42.658768","-71.93287","-5","1" +"01431","Ashby","MA","42.672005","-71.8137","-5","1" +"01432","Ayer","MA","42.549821","-71.59136","-5","1" +"01436","Baldwinville","MA","42.608903","-72.08021","-5","1" +"01438","East Templeton","MA","42.563367","-72.03498","-5","1" +"01440","Gardner","MA","42.575355","-71.99183","-5","1" +"01441","Gardner","MA","42.364807","-71.896868","-5","1" +"01450","Groton","MA","42.609887","-71.55722","-5","1" +"01451","Harvard","MA","42.505928","-71.5888","-5","1" +"01452","Hubbardston","MA","42.477515","-71.99654","-5","1" +"01453","Leominster","MA","42.526523","-71.75358","-5","1" +"01460","Littleton","MA","42.540052","-71.49085","-5","1" +"01462","Lunenburg","MA","42.582839","-71.72051","-5","1" +"01463","Pepperell","MA","42.665686","-71.5929","-5","1" +"01464","Shirley","MA","42.559289","-71.64555","-5","1" +"01467","Still River","MA","42.488666","-71.62412","-5","1" +"01468","Templeton","MA","42.557796","-72.06824","-5","1" +"01469","Townsend","MA","42.658738","-71.69204","-5","1" +"01470","Groton","MA","42.446396","-71.459405","-5","1" +"01471","Groton","MA","42.446396","-71.459405","-5","1" +"01472","West Groton","MA","42.446396","-71.459405","-5","1" +"01473","Westminster","MA","42.544622","-71.9021","-5","1" +"01474","West Townsend","MA","42.669408","-71.74578","-5","1" +"01475","Winchendon","MA","42.675441","-72.0467","-5","1" +"01477","Winchendon Springs","MA","42.364807","-71.896868","-5","1" +"01501","Auburn","MA","42.20361","-71.83843","-5","1" +"01503","Berlin","MA","42.380562","-71.62665","-5","1" +"01504","Blackstone","MA","42.028147","-71.52999","-5","1" +"01505","Boylston","MA","42.338392","-71.73026","-5","1" +"01506","Brookfield","MA","42.200374","-72.09787","-5","1" +"01507","Charlton","MA","42.135142","-71.96961","-5","1" +"01508","Charlton City","MA","42.109748","-72.079455","-5","1" +"01509","Charlton Depot","MA","42.364807","-71.896868","-5","1" +"01510","Clinton","MA","42.418836","-71.68482","-5","1" +"01515","East Brookfield","MA","42.212777","-72.05311","-5","1" +"01516","Douglas","MA","42.061437","-71.72887","-5","1" +"01517","East Princeton","MA","42.364807","-71.896868","-5","1" +"01518","Fiskdale","MA","42.12515","-72.12393","-5","1" +"01519","Grafton","MA","42.201674","-71.68771","-5","1" +"01520","Holden","MA","42.338962","-71.84434","-5","1" +"01521","Holland","MA","42.054676","-72.16137","-5","1" +"01522","Jefferson","MA","42.369658","-71.87418","-5","1" +"01523","Lancaster","MA","42.473131","-71.67946","-5","1" +"01524","Leicester","MA","42.238942","-71.91908","-5","1" +"01525","Linwood","MA","42.364807","-71.896868","-5","1" +"01526","Manchaug","MA","42.364807","-71.896868","-5","1" +"01527","Millbury","MA","42.196144","-71.76272","-5","1" +"01529","Millville","MA","42.036396","-71.57798","-5","1" +"01531","New Braintree","MA","42.317121","-72.12248","-5","1" +"01532","Northborough","MA","42.321917","-71.64692","-5","1" +"01534","Northbridge","MA","42.140741","-71.64376","-5","1" +"01535","North Brookfield","MA","42.267274","-72.07823","-5","1" +"01536","North Grafton","MA","42.231444","-71.70523","-5","1" +"01537","North Oxford","MA","42.170846","-71.88989","-5","1" +"01538","North Uxbridge","MA","42.364807","-71.896868","-5","1" +"01540","Oxford","MA","42.117527","-71.8657","-5","1" +"01541","Princeton","MA","42.451569","-71.882","-5","1" +"01542","Rochdale","MA","42.194793","-71.90651","-5","1" +"01543","Rutland","MA","42.380877","-71.96427","-5","1" +"01545","Shrewsbury","MA","42.286643","-71.72502","-5","1" +"01546","Shrewsbury","MA","42.364807","-71.896868","-5","1" +"01550","Southbridge","MA","42.070827","-72.03533","-5","1" +"01560","South Grafton","MA","42.177462","-71.69382","-5","1" +"01561","South Lancaster","MA","42.443539","-71.686137","-5","1" +"01562","Spencer","MA","42.247212","-71.99227","-5","1" +"01564","Sterling","MA","42.436875","-71.77333","-5","1" +"01566","Sturbridge","MA","42.104581","-72.08584","-5","1" +"01568","Upton","MA","42.17382","-71.60971","-5","1" +"01569","Uxbridge","MA","42.064978","-71.62992","-5","1" +"01570","Webster","MA","42.047728","-71.86108","-5","1" +"01571","Dudley","MA","42.049864","-71.9173","-5","1" +"01580","Westborough","MA","42.364807","-71.896868","-5","1" +"01581","Westborough","MA","42.269845","-71.61408","-5","1" +"01582","Westborough","MA","42.364807","-71.896868","-5","1" +"01583","West Boylston","MA","42.359842","-71.787","-5","1" +"01585","West Brookfield","MA","42.242965","-72.16734","-5","1" +"01586","West Millbury","MA","42.364807","-71.896868","-5","1" +"01588","Whitinsville","MA","42.114195","-71.67225","-5","1" +"01590","Sutton","MA","42.131028","-71.75121","-5","1" +"01601","Worcester","MA","42.265275","-71.879415","-5","1" +"01602","Worcester","MA","42.272359","-71.84482","-5","1" +"01603","Worcester","MA","42.240526","-71.83776","-5","1" +"01604","Worcester","MA","42.255393","-71.77459","-5","1" +"01605","Worcester","MA","42.286543","-71.78846","-5","1" +"01606","Worcester","MA","42.311342","-71.79531","-5","1" +"01607","Worcester","MA","42.229543","-71.79501","-5","1" +"01608","Worcester","MA","42.261343","-71.80173","-5","1" +"01609","Worcester","MA","42.271743","-71.81348","-5","1" +"01610","Worcester","MA","42.248493","-71.80793","-5","1" +"01611","Cherry Valley","MA","42.238449","-71.87139","-5","1" +"01612","Paxton","MA","42.307591","-71.91929","-5","1" +"01613","Worcester","MA","42.293316","-71.801971","-5","1" +"01614","Worcester","MA","42.364807","-71.896868","-5","1" +"01615","Worcester","MA","42.364807","-71.896868","-5","1" +"01634","Tolland","MA","42.069484","-72.999433","-5","1" +"01653","Worcester","MA","42.364807","-71.896868","-5","1" +"01654","Worcester","MA","42.364807","-71.896868","-5","1" +"01655","Worcester","MA","42.364807","-71.896868","-5","1" +"01701","Framingham","MA","42.318695","-71.42344","-5","1" +"01702","Framingham","MA","42.283995","-71.42161","-5","1" +"01703","Framingham","MA","42.446396","-71.459405","-5","1" +"01704","Framingham","MA","42.446396","-71.459405","-5","1" +"01705","Framingham","MA","42.446396","-71.459405","-5","1" +"01718","Village Of Nagog Woods","MA","42.519739","-71.42721","-5","1" +"01719","Boxborough","MA","42.486259","-71.51244","-5","1" +"01720","Acton","MA","42.477142","-71.4422","-5","1" +"01721","Ashland","MA","42.257956","-71.45886","-5","1" +"01730","Bedford","MA","42.496679","-71.27504","-5","1" +"01731","Hanscom AFB","MA","42.459085","-71.27556","-5","1" +"01740","Bolton","MA","42.437086","-71.61266","-5","1" +"01741","Carlisle","MA","42.5286","-71.35084","-5","1" +"01742","Concord","MA","42.457201","-71.37478","-5","1" +"01745","Fayville","MA","42.295544","-71.50468","-5","1" +"01746","Holliston","MA","42.196065","-71.43797","-5","1" +"01747","Hopedale","MA","42.125536","-71.53662","-5","1" +"01748","Hopkinton","MA","42.220447","-71.53418","-5","1" +"01749","Hudson","MA","42.389813","-71.55791","-5","1" +"01750","Natick","MA","42.273817","-71.378157","-5","1" +"01752","Marlborough","MA","42.350909","-71.54753","-5","1" +"01754","Maynard","MA","42.430781","-71.45594","-5","1" +"01756","Mendon","MA","42.092006","-71.54474","-5","1" +"01757","Milford","MA","42.149176","-71.52149","-5","1" +"01760","Natick","MA","42.290763","-71.35368","-5","1" +"01770","Sherborn","MA","42.231025","-71.37202","-5","1" +"01772","Southborough","MA","42.297643","-71.53369","-5","1" +"01773","Lincoln","MA","42.425537","-71.30316","-5","1" +"01775","Stow","MA","42.423882","-71.51086","-5","1" +"01776","Sudbury","MA","42.38532","-71.42989","-5","1" +"01778","Wayland","MA","42.345583","-71.35643","-5","1" +"01784","Woodville","MA","42.446396","-71.459405","-5","1" +"01801","Woburn","MA","42.484545","-71.15206","-5","1" +"01803","Burlington","MA","42.506362","-71.20008","-5","1" +"01805","Burlington","MA","42.446396","-71.459405","-5","1" +"01806","Woburn","MA","42.446396","-71.459405","-5","1" +"01807","Woburn","MA","42.446396","-71.459405","-5","1" +"01808","Woburn","MA","42.446396","-71.459405","-5","1" +"01810","Andover","MA","42.646942","-71.1513","-5","1" +"01812","Andover","MA","42.647191","-71.184202","-5","1" +"01813","Woburn","MA","42.446396","-71.459405","-5","1" +"01815","Woburn","MA","42.446396","-71.459405","-5","1" +"01820","Pinehurst","MA","42.540779","-71.238175","-5","1" +"01821","Billerica","MA","42.54805","-71.25054","-5","1" +"01822","Billerica","MA","42.446396","-71.459405","-5","1" +"01823","Haverhill","MA","42.800429","-71.11087","-5","1" +"01824","Chelmsford","MA","42.595491","-71.3544","-5","1" +"01826","Dracut","MA","42.677772","-71.316","-5","1" +"01827","Dunstable","MA","42.671356","-71.50292","-5","1" +"01830","Haverhill","MA","42.78519","-71.07011","-5","1" +"01831","Haverhill","MA","42.771095","-71.122054","-5","1" +"01832","Haverhill","MA","42.781357","-71.11023","-5","1" +"01833","Georgetown","MA","42.729437","-70.98291","-5","1" +"01834","Groveland","MA","42.750691","-71.02487","-5","1" +"01835","Haverhill","MA","42.757767","-71.08518","-5","1" +"01840","Lawrence","MA","42.706941","-71.16181","-5","1" +"01841","Lawrence","MA","42.71159","-71.16667","-5","1" +"01842","Lawrence","MA","42.635443","-70.879123","-5","1" +"01843","Lawrence","MA","42.691091","-71.16078","-5","1" +"01844","Methuen","MA","42.73004","-71.17935","-5","1" +"01845","North Andover","MA","42.683841","-71.11171","-5","1" +"01850","Lowell","MA","42.655791","-71.30504","-5","1" +"01851","Lowell","MA","42.630915","-71.33238","-5","1" +"01852","Lowell","MA","42.634112","-71.29849","-5","1" +"01853","Lowell","MA","42.446396","-71.459405","-5","1" +"01854","Lowell","MA","42.649758","-71.33348","-5","1" +"01856","Lowell","MA","42.641779","-71.303488","-5","1" +"01860","Merrimac","MA","42.834246","-71.00207","-5","1" +"01862","North Billerica","MA","42.573592","-71.2911","-5","1" +"01863","North Chelmsford","MA","42.634199","-71.39322","-5","1" +"01864","North Reading","MA","42.583436","-71.0982","-5","1" +"01865","Nutting Lake","MA","42.446396","-71.459405","-5","1" +"01866","Pinehurst","MA","42.446396","-71.459405","-5","1" +"01867","Reading","MA","42.52585","-71.10993","-5","1" +"01876","Tewksbury","MA","42.601684","-71.22071","-5","1" +"01879","Tyngsboro","MA","42.671589","-71.41694","-5","1" +"01880","Wakefield","MA","42.501345","-71.07132","-5","1" +"01885","West Boxford","MA","42.635443","-70.879123","-5","1" +"01886","Westford","MA","42.592086","-71.43754","-5","1" +"01887","Wilmington","MA","42.558576","-71.17031","-5","1" +"01888","Woburn","MA","42.446396","-71.459405","-5","1" +"01889","North Reading","MA","42.571633","-71.109646","-5","1" +"01890","Winchester","MA","42.451945","-71.14276","-5","1" +"01899","Andover","MA","42.635443","-70.879123","-5","1" +"01901","Lynn","MA","42.461246","-70.946743","-5","1" +"01902","Lynn","MA","42.469946","-70.94113","-5","1" +"01903","Lynn","MA","42.635443","-70.879123","-5","1" +"01904","Lynn","MA","42.490421","-70.96579","-5","1" +"01905","Lynn","MA","42.464879","-70.97411","-5","1" +"01906","Saugus","MA","42.462796","-71.0098","-5","1" +"01907","Swampscott","MA","42.474409","-70.90588","-5","1" +"01908","Nahant","MA","42.427096","-70.92809","-5","1" +"01910","Lynn","MA","42.454796","-70.974694","-5","1" +"01913","Amesbury","MA","42.854423","-70.93547","-5","1" +"01915","Beverly","MA","42.560995","-70.8757","-5","1" +"01921","Boxford","MA","42.677869","-71.00844","-5","1" +"01922","Byfield","MA","42.76087","-70.92648","-5","1" +"01923","Danvers","MA","42.569756","-70.94322","-5","1" +"01929","Essex","MA","42.631753","-70.77925","-5","1" +"01930","Gloucester","MA","42.624015","-70.67552","-5","1" +"01931","Gloucester","MA","42.635443","-70.879123","-5","1" +"01936","Hamilton","MA","42.635443","-70.879123","-5","1" +"01937","Hathorne","MA","42.635443","-70.879123","-5","1" +"01938","Ipswich","MA","42.682965","-70.84007","-5","1" +"01940","Lynnfield","MA","42.527895","-71.02834","-5","1" +"01944","Manchester","MA","42.580033","-70.76462","-5","1" +"01945","Marblehead","MA","42.497146","-70.86323","-5","1" +"01947","Salem","MA","42.642845","-70.873647","-5","1" +"01949","Middleton","MA","42.602278","-71.01356","-5","1" +"01950","Newburyport","MA","42.809891","-70.86363","-5","1" +"01951","Newbury","MA","42.780141","-70.86866","-5","1" +"01952","Salisbury","MA","42.85048","-70.86153","-5","1" +"01960","Peabody","MA","42.534045","-70.96146","-5","1" +"01961","Peabody","MA","42.635443","-70.879123","-5","1" +"01965","Prides Crossing","MA","42.558113","-70.825743","-5","1" +"01966","Rockport","MA","42.659936","-70.61727","-5","1" +"01969","Rowley","MA","42.716708","-70.90899","-5","1" +"01970","Salem","MA","42.516845","-70.8985","-5","1" +"01971","Salem","MA","42.635443","-70.879123","-5","1" +"01982","South Hamilton","MA","42.616643","-70.86513","-5","1" +"01983","Topsfield","MA","42.642471","-70.94424","-5","1" +"01984","Wenham","MA","42.600518","-70.87618","-5","1" +"01985","West Newbury","MA","42.790736","-70.97286","-5","1" +"02018","Accord","MA","41.970474","-70.701357","-5","1" +"02019","Bellingham","MA","42.075122","-71.47953","-5","1" +"02020","Brant Rock","MA","42.081825","-70.643868","-5","1" +"02021","Canton","MA","42.166776","-71.1343","-5","1" +"02025","Cohasset","MA","42.241908","-70.81223","-5","1" +"02026","Dedham","MA","42.244609","-71.16553","-5","1" +"02027","Dedham","MA","42.180048","-71.08923","-5","1" +"02029","Providence","RI","41.817398","-71.453674","-5","1" +"02030","Dover","MA","42.23888","-71.28241","-5","1" +"02031","East Mansfield","MA","41.998799","-71.200894","-5","1" +"02032","East Walpole","MA","42.153912","-71.21362","-5","1" +"02035","Foxboro","MA","42.061427","-71.24232","-5","1" +"02038","Franklin","MA","42.089104","-71.4069","-5","1" +"02040","Greenbush","MA","41.970474","-70.701357","-5","1" +"02041","Green Harbor","MA","42.069642","-70.649075","-5","1" +"02043","Hingham","MA","42.225708","-70.88764","-5","1" +"02044","Hingham","MA","41.970474","-70.701357","-5","1" +"02045","Hull","MA","42.286347","-70.87663","-5","1" +"02047","Humarock","MA","42.142836","-70.69353","-5","1" +"02048","Mansfield","MA","42.019982","-71.2191","-5","1" +"02050","Marshfield","MA","42.109763","-70.69172","-5","1" +"02051","Marshfield Hills","MA","42.151202","-70.734146","-5","1" +"02052","Medfield","MA","42.185571","-71.30476","-5","1" +"02053","Medway","MA","42.151526","-71.42315","-5","1" +"02054","Millis","MA","42.166398","-71.36178","-5","1" +"02055","Minot","MA","41.970474","-70.701357","-5","1" +"02056","Norfolk","MA","42.111836","-71.32855","-5","1" +"02059","North Marshfield","MA","41.970474","-70.701357","-5","1" +"02060","North Scituate","MA","41.970474","-70.701357","-5","1" +"02061","Norwell","MA","42.15243","-70.8205","-5","1" +"02062","Norwood","MA","42.185974","-71.20166","-5","1" +"02065","Ocean Bluff","MA","42.097219","-70.651567","-5","1" +"02066","Scituate","MA","42.205038","-70.7513","-5","1" +"02067","Sharon","MA","42.113749","-71.17923","-5","1" +"02070","Sheldonville","MA","42.180048","-71.08923","-5","1" +"02071","South Walpole","MA","42.101406","-71.27239","-5","1" +"02072","Stoughton","MA","42.125432","-71.10627","-5","1" +"02081","Walpole","MA","42.145237","-71.25375","-5","1" +"02085","Foxborough","MA","42.075995","-71.286055","-5","1" +"02090","Westwood","MA","42.212949","-71.20735","-5","1" +"02093","Wrentham","MA","42.0597","-71.34617","-5","1" +"02101","Boston","MA","42.370567","-71.026964","-5","1" +"02102","Boston","MA","42.338947","-70.919635","-5","1" +"02103","Boston","MA","42.338947","-70.919635","-5","1" +"02104","Boston","MA","42.338947","-70.919635","-5","1" +"02105","Boston","MA","42.338947","-70.919635","-5","1" +"02106","Boston","MA","42.354318","-71.073449","-5","1" +"02107","Boston","MA","42.338947","-70.919635","-5","1" +"02108","Boston","MA","42.357903","-71.06408","-5","1" +"02109","Boston","MA","42.361477","-71.05417","-5","1" +"02110","Boston","MA","42.356532","-71.05365","-5","1" +"02111","Boston","MA","42.349838","-71.06101","-5","1" +"02112","Boston","MA","42.338947","-70.919635","-5","1" +"02113","Boston","MA","42.365028","-71.05636","-5","1" +"02114","Boston","MA","42.361792","-71.06774","-5","1" +"02115","Boston","MA","42.34308","-71.09268","-5","1" +"02116","Boston","MA","42.349622","-71.07372","-5","1" +"02117","Boston","MA","42.338947","-70.919635","-5","1" +"02118","Boston","MA","42.338724","-71.07276","-5","1" +"02119","Boston","MA","42.324511","-71.08455","-5","1" +"02120","Boston","MA","42.332099","-71.09651","-5","1" +"02121","Boston","MA","42.307448","-71.08127","-5","1" +"02122","Boston","MA","42.296298","-71.05454","-5","1" +"02123","Boston","MA","42.338947","-70.919635","-5","1" +"02124","Boston","MA","42.28713","-71.07156","-5","1" +"02125","Boston","MA","42.316852","-71.05811","-5","1" +"02126","Mattapan","MA","42.272098","-71.09426","-5","1" +"02127","Boston","MA","42.33499","-71.04562","-5","1" +"02128","Boston","MA","42.378297","-71.0255","-5","1" +"02129","Charlestown","MA","42.378619","-71.06495","-5","1" +"02130","Jamaica Plain","MA","42.309998","-71.11171","-5","1" +"02131","Roslindale","MA","42.284678","-71.13052","-5","1" +"02132","West Roxbury","MA","42.279432","-71.1598","-5","1" +"02133","Boston","MA","42.338947","-70.919635","-5","1" +"02134","Allston","MA","42.355147","-71.13164","-5","1" +"02135","Brighton","MA","42.348418","-71.15349","-5","1" +"02136","Hyde Park","MA","42.252198","-71.12593","-5","1" +"02137","Readville","MA","42.338947","-70.919635","-5","1" +"02138","Cambridge","MA","42.379146","-71.12803","-5","1" +"02139","Cambridge","MA","42.364347","-71.10431","-5","1" +"02140","Cambridge","MA","42.393327","-71.12837","-5","1" +"02141","Cambridge","MA","42.370519","-71.08443","-5","1" +"02142","Cambridge","MA","42.362297","-71.08412","-5","1" +"02143","Somerville","MA","42.381929","-71.09908","-5","1" +"02144","Somerville","MA","42.399546","-71.12165","-5","1" +"02145","Somerville","MA","42.390846","-71.09225","-5","1" +"02146","Brookline","MA","42.308198","-71.088745","-5","1" +"02147","Brookline Village","MA","42.180048","-71.08923","-5","1" +"02148","Malden","MA","42.428549","-71.06059","-5","1" +"02149","Everett","MA","42.409916","-71.0522","-5","1" +"02150","Chelsea","MA","42.396382","-71.03352","-5","1" +"02151","Revere","MA","42.416247","-71.00525","-5","1" +"02152","Winthrop","MA","42.373047","-70.97803","-5","1" +"02153","Medford","MA","42.446396","-71.459405","-5","1" +"02154","Waltham","MA","42.388938","-71.2398","-5","1" +"02155","Medford","MA","42.419846","-71.10942","-5","1" +"02156","West Medford","MA","42.446396","-71.459405","-5","1" +"02157","Babson Park","MA","42.173933","-71.185494","-5","1" +"02158","Newton","MA","42.353696","-71.188149","-5","1" +"02159","Newton","MA","42.316097","-71.191248","-5","1" +"02160","Newton","MA","42.446396","-71.459405","-5","1" +"02161","Newton","MA","42.446396","-71.459405","-5","1" +"02162","Newton","MA","42.331896","-71.25405","-5","1" +"02163","Boston","MA","42.367946","-71.12056","-5","1" +"02164","Newton","MA","42.446396","-71.459405","-5","1" +"02165","Newton","MA","42.446396","-71.459405","-5","1" +"02166","Auburndale","MA","42.346146","-71.243057","-5","1" +"02167","Chestnut Hill","MA","42.320797","-71.169847","-5","1" +"02168","Waban","MA","42.446396","-71.459405","-5","1" +"02169","Quincy","MA","42.250739","-70.99593","-5","1" +"02170","Quincy","MA","42.267049","-71.01834","-5","1" +"02171","Quincy","MA","42.284498","-71.02316","-5","1" +"02172","Watertown","MA","42.372596","-71.177998","-5","1" +"02173","Lexington","MA","42.446396","-71.459405","-5","1" +"02174","Arlington","MA","42.417695","-71.167083","-5","1" +"02175","Arlington Heights","MA","42.446396","-71.459405","-5","1" +"02176","Melrose","MA","42.459045","-71.06233","-5","1" +"02177","Melrose","MA","42.446396","-71.459405","-5","1" +"02178","Belmont","MA","42.446396","-71.459405","-5","1" +"02179","Waverley","MA","42.446396","-71.459405","-5","1" +"02180","Stoneham","MA","42.480145","-71.09835","-5","1" +"02181","Wellesley","MA","42.300596","-71.27875","-5","1" +"02184","Braintree","MA","42.209555","-70.99968","-5","1" +"02185","Braintree","MA","42.180048","-71.08923","-5","1" +"02186","Milton","MA","42.253074","-71.07496","-5","1" +"02187","Milton Village","MA","42.180048","-71.08923","-5","1" +"02188","Weymouth","MA","42.212866","-70.95872","-5","1" +"02189","Weymouth","MA","42.2112","-70.93111","-5","1" +"02190","Weymouth","MA","42.1711","-70.94597","-5","1" +"02191","Weymouth","MA","42.242749","-70.94434","-5","1" +"02192","Needham","MA","42.180048","-71.08923","-5","1" +"02193","Weston","MA","42.446396","-71.459405","-5","1" +"02194","Needham","MA","42.292547","-71.225799","-5","1" +"02195","Newton","MA","42.446396","-71.459405","-5","1" +"02196","Boston","MA","42.338947","-70.919635","-5","1" +"02199","Boston","MA","42.34713","-71.08234","-5","1" +"02201","Boston","MA","42.338947","-70.919635","-5","1" +"02202","Boston","MA","42.361094","-71.061814","-5","1" +"02203","Boston","MA","42.361485","-71.060364","-5","1" +"02204","Boston","MA","42.338947","-70.919635","-5","1" +"02205","Boston","MA","42.350334","-71.053877","-5","1" +"02206","Boston","MA","42.338947","-70.919635","-5","1" +"02207","Boston","MA","42.338947","-70.919635","-5","1" +"02208","Boston","MA","42.338947","-70.919635","-5","1" +"02209","Boston","MA","42.338947","-70.919635","-5","1" +"02210","Boston","MA","42.347974","-71.04463","-5","1" +"02211","Boston","MA","42.338947","-70.919635","-5","1" +"02212","Boston","MA","42.446396","-71.459405","-5","1" +"02215","Boston","MA","42.346997","-71.10215","-5","1" +"02216","Boston","MA","42.338947","-70.919635","-5","1" +"02217","Boston","MA","42.338947","-70.919635","-5","1" +"02222","Boston","MA","42.367797","-71.06282","-5","1" +"02238","Cambridge","MA","42.446396","-71.459405","-5","1" +"02239","Cambridge","MA","42.446396","-71.459405","-5","1" +"02241","Boston","MA","42.338947","-70.919635","-5","1" +"02254","Waltham","MA","42.446396","-71.459405","-5","1" +"02258","Newton","MA","42.446396","-71.459405","-5","1" +"02266","Boston","MA","42.338947","-70.919635","-5","1" +"02269","Quincy","MA","42.180048","-71.08923","-5","1" +"02272","Watertown","MA","42.446396","-71.459405","-5","1" +"02277","Watertown","MA","42.446396","-71.459405","-5","1" +"02283","Boston","MA","42.338947","-70.919635","-5","1" +"02284","Boston","MA","42.338947","-70.919635","-5","1" +"02293","Boston","MA","42.338947","-70.919635","-5","1" +"02295","Boston","MA","42.338947","-70.919635","-5","1" +"02297","Boston","MA","42.338947","-70.919635","-5","1" +"02301","Brockton","MA","42.0794","-71.03441","-5","1" +"02302","Brockton","MA","42.08715","-71.00222","-5","1" +"02303","Brockton","MA","41.970474","-70.701357","-5","1" +"02304","Brockton","MA","41.970474","-70.701357","-5","1" +"02305","Brockton","MA","41.970474","-70.701357","-5","1" +"02322","Avon","MA","42.121932","-71.04522","-5","1" +"02324","Bridgewater","MA","41.979501","-70.97215","-5","1" +"02325","Bridgewater","MA","41.98725","-70.972786","-5","1" +"02327","Bryantville","MA","42.040708","-70.827245","-5","1" +"02330","Carver","MA","41.873697","-70.7656","-5","1" +"02331","Duxbury","MA","41.970474","-70.701357","-5","1" +"02332","Duxbury","MA","42.031371","-70.70105","-5","1" +"02333","East Bridgewater","MA","42.029083","-70.95227","-5","1" +"02334","Easton","MA","42.023528","-71.132397","-5","1" +"02337","Elmwood","MA","42.022225","-70.931588","-5","1" +"02338","Halifax","MA","41.999851","-70.85395","-5","1" +"02339","Hanover","MA","42.12867","-70.85913","-5","1" +"02341","Hanson","MA","42.059434","-70.86205","-5","1" +"02343","Holbrook","MA","42.148351","-71.01037","-5","1" +"02344","Middleboro","MA","41.970474","-70.701357","-5","1" +"02345","Manomet","MA","41.888198","-70.581029","-5","1" +"02346","Middleboro","MA","41.889582","-70.89406","-5","1" +"02347","Lakeville","MA","41.835094","-70.95973","-5","1" +"02348","Middleboro","MA","41.970474","-70.701357","-5","1" +"02349","Middleboro","MA","41.970474","-70.701357","-5","1" +"02350","Monponsett","MA","42.018525","-70.847486","-5","1" +"02351","Abington","MA","42.119534","-70.94787","-5","1" +"02355","North Carver","MA","41.916918","-70.801331","-5","1" +"02356","North Easton","MA","42.058507","-71.11309","-5","1" +"02357","North Easton","MA","42.064499","-71.087091","-5","1" +"02358","North Pembroke","MA","41.805219","-70.62642","-5","1" +"02359","Pembroke","MA","42.065554","-70.80426","-5","1" +"02360","Plymouth","MA","41.894676","-70.61999","-5","1" +"02361","Plymouth","MA","41.970474","-70.701357","-5","1" +"02362","Plymouth","MA","41.970474","-70.701357","-5","1" +"02363","Plymouth","MA","41.959094","-70.706774","-5","1" +"02364","Kingston","MA","41.993102","-70.73827","-5","1" +"02366","South Carver","MA","41.854063","-70.66088","-5","1" +"02367","Plympton","MA","41.968987","-70.80452","-5","1" +"02368","Randolph","MA","42.173417","-71.04912","-5","1" +"02369","Dennis Port","MA","41.662531","-70.14021","-5","1" +"02370","Rockland","MA","42.129513","-70.91189","-5","1" +"02375","South Easton","MA","42.029749","-71.10191","-5","1" +"02379","West Bridgewater","MA","42.02195","-71.01878","-5","1" +"02381","White Horse Beach","MA","41.931602","-70.561051","-5","1" +"02382","Whitman","MA","42.08235","-70.93734","-5","1" +"02401","Brockton","MA","42.079399","-71.03459","-5","1" +"02402","Brockton","MA","42.0863","-70.999339","-5","1" +"02403","Brockton","MA","41.970474","-70.701357","-5","1" +"02404","Brockton","MA","41.970474","-70.701357","-5","1" +"02405","Brockton","MA","41.970474","-70.701357","-5","1" +"02407","Scituate","MA","42.136086","-70.688251","-5","1" +"02420","Lexington","MA","42.452895","-71.21619","-5","1" +"02421","Lexington","MA","42.439295","-71.23553","-5","1" +"02445","Brookline","MA","42.324397","-71.13933","-5","1" +"02446","Brookline","MA","42.344747","-71.12141","-5","1" +"02447","Brookline Village","MA","42.180048","-71.08923","-5","1" +"02451","Waltham","MA","42.393029","-71.24771","-5","1" +"02452","Waltham","MA","42.392496","-71.22153","-5","1" +"02453","Waltham","MA","42.370446","-71.23563","-5","1" +"02454","Waltham","MA","42.356719","-71.250479","-5","1" +"02456","New Town","MA","42.446396","-71.459405","-5","1" +"02457","Babson Park","MA","42.180048","-71.08923","-5","1" +"02458","Newton","MA","42.354727","-71.18809","-5","1" +"02459","Newton Center","MA","42.321197","-71.193","-5","1" +"02460","Newtonville","MA","42.352996","-71.20907","-5","1" +"02461","Newton Highlands","MA","42.31883","-71.20822","-5","1" +"02462","Newton Lower Falls","MA","42.331646","-71.25761","-5","1" +"02464","Newton Upper Falls","MA","42.311997","-71.22046","-5","1" +"02465","West Newton","MA","42.351046","-71.22677","-5","1" +"02466","Auburndale","MA","42.345833","-71.24735","-5","1" +"02467","Chestnut Hill","MA","42.321997","-71.17314","-5","1" +"02468","Waban","MA","42.325247","-71.2319","-5","1" +"02471","Watertown","MA","42.446396","-71.459405","-5","1" +"02472","Watertown","MA","42.371296","-71.18196","-5","1" +"02474","Arlington","MA","42.419496","-71.15635","-5","1" +"02475","Arlington Heights","MA","42.446396","-71.459405","-5","1" +"02476","Arlington","MA","42.416745","-71.17761","-5","1" +"02477","Watertown","MA","42.446396","-71.459405","-5","1" +"02478","Belmont","MA","42.391546","-71.17471","-5","1" +"02479","Waverley","MA","42.446396","-71.459405","-5","1" +"02481","Wellesley Hills","MA","42.313329","-71.27649","-5","1" +"02482","Wellesley","MA","42.300096","-71.30336","-5","1" +"02492","Needham","MA","42.278247","-71.23388","-5","1" +"02493","Weston","MA","42.358663","-71.28831","-5","1" +"02494","Needham","MA","42.29813","-71.23154","-5","1" +"02495","Nonantum","MA","42.446396","-71.459405","-5","1" +"02532","Buzzards Bay","MA","41.751841","-70.59764","-5","1" +"02534","Cataumet","MA","41.66566","-70.616","-5","1" +"02535","Chilmark","MA","41.345578","-70.75145","-5","1" +"02536","East Falmouth","MA","41.578992","-70.5614","-5","1" +"02537","East Sandwich","MA","41.733837","-70.43754","-5","1" +"02538","East Wareham","MA","41.782915","-70.64881","-5","1" +"02539","Edgartown","MA","41.380479","-70.52453","-5","1" +"02540","Falmouth","MA","41.56105","-70.61968","-5","1" +"02541","Falmouth","MA","41.799312","-70.308662","-5","1" +"02542","Buzzards Bay","MA","41.665605","-70.52456","-5","1" +"02543","Woods Hole","MA","41.526791","-70.66505","-5","1" +"02549","Mashpee","MA","41.621779","-70.504349","-5","1" +"02551","Oak Bluffs","MA","41.453321","-70.558023","-5","1" +"02552","Menemsha","MA","41.379836","-70.643092","-5","1" +"02553","Monument Beach","MA","41.67336","-70.608047","-5","1" +"02554","Nantucket","MA","41.276758","-70.09089","-5","1" +"02556","North Falmouth","MA","41.6403","-70.63036","-5","1" +"02557","Oak Bluffs","MA","41.417376","-70.560032","-5","1" +"02558","Onset","MA","41.746424","-70.65956","-5","1" +"02559","Pocasset","MA","41.694132","-70.61706","-5","1" +"02561","Sagamore","MA","41.770254","-70.533664","-5","1" +"02562","Sagamore Beach","MA","41.793263","-70.519584","-5","1" +"02563","Sandwich","MA","41.735645","-70.48866","-5","1" +"02564","Siasconset","MA","41.273949","-70.015545","-5","1" +"02565","Silver Beach","MA","41.799312","-70.308662","-5","1" +"02567","Sagamore","MA","41.79197","-70.530852","-5","1" +"02568","Vineyard Haven","MA","41.451263","-70.60872","-5","1" +"02571","Wareham","MA","41.751554","-70.71059","-5","1" +"02573","Vineyard Haven","MA","41.379836","-70.643092","-5","1" +"02574","West Falmouth","MA","41.603946","-70.638189","-5","1" +"02575","West Tisbury","MA","41.378807","-70.66376","-5","1" +"02576","West Wareham","MA","41.776042","-70.75783","-5","1" +"02584","Nantucket","MA","41.277794","-70.046019","-5","1" +"02595","West Tisbury","MA","41.381585","-70.66351","-5","1" +"02601","Hyannis","MA","41.654741","-70.2895","-5","1" +"02625","Barnstable Town","MA","41.640528","-70.433279","-5","1" +"02630","Barnstable","MA","41.700327","-70.29568","-5","1" +"02631","Brewster","MA","41.746647","-70.07773","-5","1" +"02632","Centerville","MA","41.658718","-70.34658","-5","1" +"02633","Chatham","MA","41.686534","-69.97746","-5","1" +"02634","Centerville","MA","41.799312","-70.308662","-5","1" +"02635","Cotuit","MA","41.625037","-70.44317","-5","1" +"02636","Centerville","MA","41.799312","-70.308662","-5","1" +"02637","Cummaquid","MA","41.701438","-70.277212","-5","1" +"02638","Dennis","MA","41.736684","-70.19183","-5","1" +"02639","Dennis Port","MA","41.661115","-70.13348","-5","1" +"02641","East Dennis","MA","41.734713","-70.20467","-5","1" +"02642","Eastham","MA","41.844087","-69.98921","-5","1" +"02643","East Orleans","MA","41.784308","-69.962034","-5","1" +"02644","Forestdale","MA","41.683462","-70.51211","-5","1" +"02645","Harwich","MA","41.707332","-70.05679","-5","1" +"02646","Harwich Port","MA","41.669219","-70.07419","-5","1" +"02647","Hyannis Port","MA","41.63275","-70.30435","-5","1" +"02648","Marstons Mills","MA","41.667689","-70.4168","-5","1" +"02649","Mashpee","MA","41.613743","-70.48754","-5","1" +"02650","North Chatham","MA","41.702265","-69.96958","-5","1" +"02651","North Eastham","MA","41.824264","-69.98176","-5","1" +"02652","North Truro","MA","42.02889","-70.07938","-5","1" +"02653","Orleans","MA","41.777647","-69.97312","-5","1" +"02654","Nantucket","MA","41.543967","-69.987203","-5","1" +"02655","Osterville","MA","41.632935","-70.38693","-5","1" +"02657","Provincetown","MA","42.053355","-70.18947","-5","1" +"02659","South Chatham","MA","41.678628","-70.02495","-5","1" +"02660","South Dennis","MA","41.712338","-70.16165","-5","1" +"02661","South Harwich","MA","41.675799","-70.0396","-5","1" +"02662","South Orleans","MA","41.756694","-69.984123","-5","1" +"02663","South Wellfleet","MA","41.800531","-70.076776","-5","1" +"02664","South Yarmouth","MA","41.670981","-70.19797","-5","1" +"02666","Truro","MA","41.992804","-70.05427","-5","1" +"02667","Wellfleet","MA","41.922412","-70.01484","-5","1" +"02668","West Barnstable","MA","41.70631","-70.37048","-5","1" +"02669","West Chatham","MA","41.673635","-69.99494","-5","1" +"02670","West Dennis","MA","41.659749","-70.17089","-5","1" +"02671","West Harwich","MA","41.665589","-70.11152","-5","1" +"02672","West Hyannisport","MA","41.636077","-70.31962","-5","1" +"02673","West Yarmouth","MA","41.656883","-70.23726","-5","1" +"02675","Yarmouth Port","MA","41.703205","-70.22395","-5","1" +"02702","Assonet","MA","41.792192","-71.06446","-5","1" +"02703","Attleboro","MA","41.928099","-71.31456","-5","1" +"02712","Chartley","MA","41.756214","-71.067062","-5","1" +"02713","Cuttyhunk","MA","41.429673","-70.8954","-5","1" +"02714","Dartmouth","MA","41.756214","-71.067062","-5","1" +"02715","Dighton","MA","41.811514","-71.13633","-5","1" +"02717","East Freetown","MA","41.765934","-70.95332","-5","1" +"02718","East Taunton","MA","41.876249","-71.01827","-5","1" +"02719","Fairhaven","MA","41.634152","-70.8814","-5","1" +"02720","Fall River","MA","41.716952","-71.13986","-5","1" +"02721","Fall River","MA","41.685452","-71.15425","-5","1" +"02722","Fall River","MA","41.756214","-71.067062","-5","1" +"02723","Fall River","MA","41.691369","-71.13234","-5","1" +"02724","Fall River","MA","41.684152","-71.17436","-5","1" +"02725","Somerset","MA","41.721652","-71.17482","-5","1" +"02726","Somerset","MA","41.754828","-71.14894","-5","1" +"02735","Easton","MA","41.999346","-71.113582","-5","1" +"02738","Marion","MA","41.706599","-70.75086","-5","1" +"02739","Mattapoisett","MA","41.654776","-70.80087","-5","1" +"02740","New Bedford","MA","41.634754","-70.93752","-5","1" +"02741","New Bedford","MA","41.756214","-71.067062","-5","1" +"02742","New Bedford","MA","41.619557","-70.956346","-5","1" +"02743","Acushnet","MA","41.697015","-70.91019","-5","1" +"02744","New Bedford","MA","41.610754","-70.91453","-5","1" +"02745","New Bedford","MA","41.692806","-70.93264","-5","1" +"02746","New Bedford","MA","41.659336","-70.93347","-5","1" +"02747","North Dartmouth","MA","41.637916","-70.99076","-5","1" +"02748","South Dartmouth","MA","41.59156","-70.9494","-5","1" +"02760","North Attleboro","MA","41.975495","-71.33086","-5","1" +"02761","North Attleboro","MA","41.756214","-71.067062","-5","1" +"02762","Plainville","MA","42.011848","-71.32392","-5","1" +"02763","Attleboro Falls","MA","41.967949","-71.31024","-5","1" +"02764","North Dighton","MA","41.851557","-71.15125","-5","1" +"02766","Norton","MA","41.969185","-71.1854","-5","1" +"02767","Raynham","MA","41.934586","-71.04905","-5","1" +"02768","Raynham Center","MA","41.756214","-71.067062","-5","1" +"02769","Rehoboth","MA","41.835067","-71.26115","-5","1" +"02770","Rochester","MA","41.760783","-70.83848","-5","1" +"02771","Seekonk","MA","41.84345","-71.32343","-5","1" +"02777","Swansea","MA","41.741551","-71.21433","-5","1" +"02779","Berkley","MA","41.825252","-71.07799","-5","1" +"02780","Taunton","MA","41.904888","-71.10288","-5","1" +"02781","Westport","MA","41.522877","-71.069344","-5","1" +"02783","Taunton","MA","41.756214","-71.067062","-5","1" +"02789","South Kingstown","RI","41.487831","-71.457592","-5","1" +"02790","Westport","MA","41.602517","-71.08904","-5","1" +"02791","Westport Point","MA","41.519104","-71.085137","-5","1" +"02801","Adamsville","RI","41.530131","-71.284066","-5","1" +"02802","Albion","RI","41.954098","-71.462053","-5","1" +"02804","Ashaway","RI","41.430068","-71.78101","-5","1" +"02805","Foster","RI","41.830469","-71.711713","-5","1" +"02806","Barrington","RI","41.746834","-71.32031","-5","1" +"02807","Block Island","RI","41.171389","-71.58358","-5","1" +"02808","Bradford","RI","41.402009","-71.74785","-5","1" +"02809","Bristol","RI","41.6842","-71.26866","-5","1" +"02812","Carolina","RI","41.46603","-71.66408","-5","1" +"02813","Charlestown","RI","41.385256","-71.66813","-5","1" +"02814","Chepachet","RI","41.896002","-71.70335","-5","1" +"02815","Clayville","RI","41.777861","-71.67009","-5","1" +"02816","Coventry","RI","41.69105","-71.57462","-5","1" +"02817","West Greenwich","RI","41.625874","-71.67023","-5","1" +"02818","East Greenwich","RI","41.649733","-71.46815","-5","1" +"02822","Exeter","RI","41.563937","-71.60547","-5","1" +"02823","Fiskeville","RI","41.7312","-71.546756","-5","1" +"02824","Forestdale","RI","42.000248","-71.563057","-5","1" +"02825","Foster","RI","41.785151","-71.72021","-5","1" +"02826","Glendale","RI","41.982417","-71.600848","-5","1" +"02827","Greene","RI","41.695419","-71.74472","-5","1" +"02828","Greenville","RI","41.870799","-71.5539","-5","1" +"02829","Harmony","RI","41.879298","-71.589357","-5","1" +"02830","Harrisville","RI","41.976659","-71.64969","-5","1" +"02831","Hope","RI","41.73865","-71.57482","-5","1" +"02832","Hope Valley","RI","41.511414","-71.72737","-5","1" +"02833","Hopkinton","RI","41.470822","-71.77722","-5","1" +"02835","Jamestown","RI","41.520312","-71.3718","-5","1" +"02836","Kenyon","RI","41.448844","-71.62145","-5","1" +"02837","Little Compton","RI","41.518038","-71.16548","-5","1" +"02838","Manville","RI","41.968698","-71.47503","-5","1" +"02839","Mapleville","RI","41.948108","-71.64003","-5","1" +"02840","Newport","RI","41.488002","-71.31262","-5","1" +"02841","Newport","RI","41.498977","-71.299004","-5","1" +"02842","Middletown","RI","41.511739","-71.28658","-5","1" +"02852","North Kingstown","RI","41.589701","-71.454","-5","1" +"02854","North Kingstown","RI","41.375317","-71.64393","-5","1" +"02857","North Scituate","RI","41.83902","-71.6257","-5","1" +"02858","Oakland","RI","41.96186","-71.64661","-5","1" +"02859","Pascoag","RI","41.964896","-71.72311","-5","1" +"02860","Pawtucket","RI","41.872099","-71.39007","-5","1" +"02861","Pawtucket","RI","41.881632","-71.35583","-5","1" +"02862","Pawtucket","RI","41.86125","-71.369099","-5","1" +"02863","Central Falls","RI","41.889863","-71.3926","-5","1" +"02864","Cumberland","RI","41.949099","-71.41181","-5","1" +"02865","Lincoln","RI","41.905666","-71.43023","-5","1" +"02871","Portsmouth","RI","41.603929","-71.26099","-5","1" +"02872","Prudence Island","RI","41.707119","-71.286834","-5","1" +"02873","Rockville","RI","41.519922","-71.774023","-5","1" +"02874","Saunderstown","RI","41.515135","-71.45692","-5","1" +"02875","Shannock","RI","41.447642","-71.63877","-5","1" +"02876","Slatersville","RI","41.998398","-71.576307","-5","1" +"02877","Slocum","RI","41.5289","-71.529854","-5","1" +"02878","Tiverton","RI","41.629413","-71.18724","-5","1" +"02879","Wakefield","RI","41.423601","-71.52322","-5","1" +"02880","Wakefield","RI","41.375317","-71.64393","-5","1" +"02881","Kingston","RI","41.481001","-71.52689","-5","1" +"02882","Narragansett","RI","41.432452","-71.46352","-5","1" +"02883","Peace Dale","RI","41.375317","-71.64393","-5","1" +"02885","Warren","RI","41.726184","-71.27049","-5","1" +"02886","Warwick","RI","41.705478","-71.45119","-5","1" +"02887","Warwick","RI","41.682455","-71.557732","-5","1" +"02888","Warwick","RI","41.74805","-71.40982","-5","1" +"02889","Warwick","RI","41.706814","-71.3911","-5","1" +"02891","Westerly","RI","41.354881","-71.80387","-5","1" +"02892","West Kingston","RI","41.50155","-71.58465","-5","1" +"02893","West Warwick","RI","41.70375","-71.51857","-5","1" +"02894","Wood River Junction","RI","41.444078","-71.69556","-5","1" +"02895","Woonsocket","RI","42.001731","-71.50722","-5","1" +"02896","North Smithfield","RI","41.988166","-71.55188","-5","1" +"02898","Wyoming","RI","41.51495","-71.68484","-5","1" +"02901","Providence","RI","41.82275","-71.414451","-5","1" +"02902","Providence","RI","41.81835","-71.424851","-5","1" +"02903","Providence","RI","41.8208","-71.41306","-5","1" +"02904","Providence","RI","41.859199","-71.43142","-5","1" +"02905","Providence","RI","41.7883","-71.40431","-5","1" +"02906","Providence","RI","41.83635","-71.39427","-5","1" +"02907","Providence","RI","41.79855","-71.42449","-5","1" +"02908","Providence","RI","41.839296","-71.43802","-5","1" +"02909","Providence","RI","41.8191","-71.44775","-5","1" +"02910","Cranston","RI","41.776867","-71.43672","-5","1" +"02911","North Providence","RI","41.853699","-71.47354","-5","1" +"02912","Providence","RI","41.826737","-71.397699","-5","1" +"02914","East Providence","RI","41.8124","-71.36834","-5","1" +"02915","Riverside","RI","41.7695","-71.35564","-5","1" +"02916","Rumford","RI","41.84325","-71.35391","-5","1" +"02917","Smithfield","RI","41.894499","-71.51646","-5","1" +"02918","Providence","RI","41.841499","-71.440352","-5","1" +"02919","Johnston","RI","41.825132","-71.49468","-5","1" +"02920","Cranston","RI","41.7715","-71.46485","-5","1" +"02921","Cranston","RI","41.76435","-71.50972","-5","1" +"02940","Providence","RI","41.871766","-71.558518","-5","1" +"03004","Fremont","NH","43.001762","-71.154866","-5","1" +"03030","Nashua","NH","42.749988","-71.46431","-5","1" +"03031","Amherst","NH","42.854886","-71.6082","-5","1" +"03032","Auburn","NH","43.000345","-71.35141","-5","1" +"03033","Brookline","NH","42.742587","-71.66605","-5","1" +"03034","Candia","NH","43.048372","-71.3078","-5","1" +"03036","Chester","NH","42.967823","-71.23453","-5","1" +"03037","Deerfield","NH","43.141746","-71.2488","-5","1" +"03038","Derry","NH","42.886486","-71.30019","-5","1" +"03040","East Candia","NH","43.005895","-71.013202","-5","1" +"03041","East Derry","NH","43.005895","-71.013202","-5","1" +"03042","Epping","NH","43.045076","-71.07095","-5","1" +"03043","Francestown","NH","42.976901","-71.81007","-5","1" +"03044","Fremont","NH","42.986119","-71.12524","-5","1" +"03045","Goffstown","NH","43.037495","-71.57023","-5","1" +"03046","Dunbarton","NH","43.102146","-71.602132","-5","1" +"03047","Greenfield","NH","42.935709","-71.86645","-5","1" +"03048","Greenville","NH","42.747024","-71.77591","-5","1" +"03049","Hollis","NH","42.739909","-71.58044","-5","1" +"03051","Hudson","NH","42.759821","-71.42079","-5","1" +"03052","Litchfield","NH","42.85059","-71.45379","-5","1" +"03053","Londonderry","NH","42.880481","-71.38205","-5","1" +"03054","Merrimack","NH","42.858053","-71.51216","-5","1" +"03055","Milford","NH","42.831686","-71.66743","-5","1" +"03057","Mont Vernon","NH","42.899434","-71.68057","-5","1" +"03058","Sharon","NH","42.798995","-71.950759","-5","1" +"03060","Nashua","NH","42.748888","-71.46492","-5","1" +"03061","Nashua","NH","42.952124","-71.653939","-5","1" +"03062","Nashua","NH","42.724822","-71.49238","-5","1" +"03063","Nashua","NH","42.770738","-71.51047","-5","1" +"03064","Nashua","NH","42.774171","-71.47306","-5","1" +"03070","New Boston","NH","42.978267","-71.69414","-5","1" +"03071","New Ipswich","NH","42.753726","-71.86706","-5","1" +"03073","North Salem","NH","43.005895","-71.013202","-5","1" +"03076","Pelham","NH","42.734182","-71.32359","-5","1" +"03077","Raymond","NH","43.031491","-71.19598","-5","1" +"03079","Salem","NH","42.792456","-71.21316","-5","1" +"03082","Lyndeborough","NH","42.902259","-71.78452","-5","1" +"03084","Temple","NH","42.81949","-71.85063","-5","1" +"03086","Wilton","NH","42.830184","-71.78177","-5","1" +"03087","Windham","NH","42.805194","-71.29878","-5","1" +"03091","Berwick","ME","43.319125","-70.818318","-5","1" +"03097","Ogunquit","ME","43.269137","-70.598303","-5","1" +"03101","Manchester","NH","42.989984","-71.46376","-5","1" +"03102","Manchester","NH","42.990684","-71.4868","-5","1" +"03103","Manchester","NH","42.967684","-71.44828","-5","1" +"03104","Manchester","NH","43.006033","-71.44716","-5","1" +"03105","Manchester","NH","42.952124","-71.653939","-5","1" +"03106","Hooksett","NH","43.058785","-71.44412","-5","1" +"03107","Manchester","NH","42.952124","-71.653939","-5","1" +"03108","Manchester","NH","42.952124","-71.653939","-5","1" +"03109","Manchester","NH","42.972584","-71.41349","-5","1" +"03110","Bedford","NH","42.942551","-71.51993","-5","1" +"03111","Manchester","NH","42.952124","-71.653939","-5","1" +"03215","Waterville Valley","NH","43.951304","-71.50336","-5","1" +"03216","Andover","NH","43.444702","-71.78401","-5","1" +"03217","Ashland","NH","43.705061","-71.62778","-5","1" +"03218","Barnstead","NH","43.338347","-71.29305","-5","1" +"03220","Belmont","NH","43.459555","-71.47352","-5","1" +"03221","Bradford","NH","43.256053","-71.95405","-5","1" +"03222","Bristol","NH","43.615799","-71.75006","-5","1" +"03223","Campton","NH","43.887682","-71.65161","-5","1" +"03224","Canterbury","NH","43.346137","-71.54434","-5","1" +"03225","Center Barnstead","NH","43.354005","-71.22819","-5","1" +"03226","Center Harbor","NH","43.721094","-71.49652","-5","1" +"03227","Center Sandwich","NH","43.802936","-71.45126","-5","1" +"03229","Contoocook","NH","43.204192","-71.70711","-5","1" +"03230","Danbury","NH","43.506405","-71.87281","-5","1" +"03231","East Andover","NH","43.466172","-71.736518","-5","1" +"03232","East Hebron","NH","43.967542","-71.840883","-5","1" +"03233","Elkins","NH","43.423484","-71.93648","-5","1" +"03234","Epsom","NH","43.228594","-71.3611","-5","1" +"03235","Franklin","NH","43.444456","-71.66034","-5","1" +"03237","Gilmanton","NH","43.42975","-71.37517","-5","1" +"03238","Glencliff","NH","43.967542","-71.840883","-5","1" +"03240","Grafton","NH","43.568328","-71.96422","-5","1" +"03241","Hebron","NH","43.713794","-71.80642","-5","1" +"03242","Henniker","NH","43.173469","-71.81722","-5","1" +"03243","Hill","NH","43.521669","-71.73815","-5","1" +"03244","Hillsboro","NH","43.119417","-71.92108","-5","1" +"03245","Holderness","NH","43.737831","-71.604406","-5","1" +"03246","Laconia","NH","43.557153","-71.43842","-5","1" +"03247","Laconia","NH","43.588972","-71.445452","-5","1" +"03249","Laconia","NH","43.555878","-71.398521","-5","1" +"03251","Lincoln","NH","44.051981","-71.6606","-5","1" +"03252","Lochmere","NH","43.468562","-71.537145","-5","1" +"03253","Meredith","NH","43.644559","-71.50488","-5","1" +"03254","Moultonborough","NH","43.712184","-71.39299","-5","1" +"03255","Newbury","NH","43.32582","-72.02654","-5","1" +"03256","New Hampton","NH","43.60768","-71.64372","-5","1" +"03257","New London","NH","43.418863","-72.00004","-5","1" +"03258","Chichester","NH","43.255881","-71.397599","-5","1" +"03259","North Sandwich","NH","43.880005","-71.39475","-5","1" +"03260","North Sutton","NH","43.356838","-71.9255","-5","1" +"03261","Northwood","NH","43.216633","-71.2079","-5","1" +"03262","North Woodstock","NH","44.0285","-71.68701","-5","1" +"03263","Pittsfield","NH","43.30368","-71.3215","-5","1" +"03264","Plymouth","NH","43.753837","-71.64503","-5","1" +"03266","Rumney","NH","43.806365","-71.87952","-5","1" +"03268","Salisbury","NH","43.388571","-71.74199","-5","1" +"03269","Sanbornton","NH","43.523175","-71.5876","-5","1" +"03270","New Boston","NH","43.203614","-71.550864","-5","1" +"03272","South Newbury","NH","43.310279","-71.662928","-5","1" +"03273","South Sutton","NH","43.317257","-71.92709","-5","1" +"03274","Stinson Lake","NH","43.967542","-71.840883","-5","1" +"03275","Suncook","NH","43.152469","-71.43654","-5","1" +"03276","Tilton","NH","43.446729","-71.5785","-5","1" +"03278","Warner","NH","43.283838","-71.82537","-5","1" +"03279","Warren","NH","43.938224","-71.88853","-5","1" +"03280","Washington","NH","43.173046","-72.09755","-5","1" +"03281","Weare","NH","43.080986","-71.72329","-5","1" +"03282","Wentworth","NH","43.874357","-71.91765","-5","1" +"03284","Springfield","NH","43.501755","-72.01296","-5","1" +"03287","Wilmot","NH","43.430018","-71.90457","-5","1" +"03289","Winnisquam","NH","43.496372","-71.519728","-5","1" +"03290","Nottingham","NH","43.115874","-71.11081","-5","1" +"03291","West Nottingham","NH","43.179984","-71.1392","-5","1" +"03293","Woodstock","NH","43.967542","-71.840883","-5","1" +"03298","Tilton","NH","43.524872","-71.445841","-5","1" +"03299","Tilton","NH","43.524872","-71.445841","-5","1" +"03301","Concord","NH","43.213705","-71.53774","-5","1" +"03302","Concord","NH","43.310279","-71.662928","-5","1" +"03303","Concord","NH","43.283796","-71.63832","-5","1" +"03304","Bow","NH","43.144614","-71.53576","-5","1" +"03305","Concord","NH","43.2134","-71.517151","-5","1" +"03307","Loudon","NH","43.31773","-71.4534","-5","1" +"03342","Bennington","NH","43.01428","-71.881017","-5","1" +"03386","Tamworth","NH","43.89715","-71.30915","-5","1" +"03431","Keene","NH","42.946418","-72.28616","-5","1" +"03435","Keene","NH","42.947098","-72.243029","-5","1" +"03438","Harrisville","NH","42.921791","-72.00547","-5","1" +"03440","Antrim","NH","43.060424","-71.95068","-5","1" +"03441","Ashuelot","NH","42.791069","-72.4352","-5","1" +"03442","Bennington","NH","43.005429","-71.91635","-5","1" +"03443","Chesterfield","NH","42.871815","-72.47163","-5","1" +"03444","Dublin","NH","42.899874","-72.06334","-5","1" +"03445","Sullivan","NH","43.009728","-72.19383","-5","1" +"03446","Swanzey","NH","42.870578","-72.29978","-5","1" +"03447","Fitzwilliam","NH","42.754744","-72.14838","-5","1" +"03448","Gilsum","NH","43.055293","-72.26149","-5","1" +"03449","Hancock","NH","42.975105","-71.98913","-5","1" +"03450","Harrisville","NH","42.941175","-72.06043","-5","1" +"03451","Hinsdale","NH","42.797633","-72.49518","-5","1" +"03452","Jaffrey","NH","42.827096","-72.03418","-5","1" +"03455","Marlborough","NH","42.932177","-72.16219","-5","1" +"03456","Marlow","NH","43.125523","-72.21382","-5","1" +"03457","Munsonville","NH","43.025227","-72.14365","-5","1" +"03458","Peterborough","NH","42.884919","-71.95133","-5","1" +"03461","Rindge","NH","42.749835","-72.01034","-5","1" +"03462","Spofford","NH","42.913966","-72.41522","-5","1" +"03464","Stoddard","NH","43.078658","-72.0959","-5","1" +"03465","Troy","NH","42.822155","-72.17618","-5","1" +"03466","West Chesterfield","NH","42.899338","-72.51629","-5","1" +"03467","Westmoreland","NH","42.971069","-72.42512","-5","1" +"03468","West Peterborough","NH","42.890804","-71.933396","-5","1" +"03469","West Swanzey","NH","42.87341","-72.31509","-5","1" +"03470","Winchester","NH","42.775629","-72.33893","-5","1" +"03477","Fitzwilliam","NH","42.74513","-72.150882","-5","1" +"03552","Pittsburg","NH","45.085717","-71.345714","-5","1" +"03561","Littleton","NH","44.313606","-71.79751","-5","1" +"03570","Berlin","NH","44.463337","-71.19092","-5","1" +"03572","Goshen","NH","43.28616","-72.148784","-5","1" +"03574","Bethlehem","NH","44.28177","-71.69225","-5","1" +"03575","Bretton Woods","NH","44.695648","-71.387387","-5","1" +"03576","Colebrook","NH","44.893888","-71.44766","-5","1" +"03578","Landaff","NH","44.101208","-71.854211","-5","1" +"03579","Errol","NH","44.789296","-71.15394","-5","1" +"03580","Franconia","NH","44.200124","-71.69959","-5","1" +"03581","Gorham","NH","44.386557","-71.16273","-5","1" +"03582","Groveton","NH","44.610605","-71.48147","-5","1" +"03583","Jefferson","NH","44.376866","-71.46436","-5","1" +"03584","Lancaster","NH","44.483756","-71.54999","-5","1" +"03585","Lisbon","NH","44.225864","-71.87371","-5","1" +"03587","Meadows","NH","44.695648","-71.387387","-5","1" +"03588","Milan","NH","44.608332","-71.24335","-5","1" +"03589","Mount Washington","NH","44.695648","-71.387387","-5","1" +"03590","North Stratford","NH","44.719769","-71.59395","-5","1" +"03592","Pittsburg","NH","45.085547","-71.30724","-5","1" +"03595","Twin Mountain","NH","44.271516","-71.51746","-5","1" +"03597","West Stewartstown","NH","44.695648","-71.387387","-5","1" +"03598","Whitefield","NH","44.378771","-71.62248","-5","1" +"03601","Acworth","NH","43.242719","-72.30269","-5","1" +"03602","Alstead","NH","43.142384","-72.32575","-5","1" +"03603","Charlestown","NH","43.249468","-72.39026","-5","1" +"03604","Drewsville","NH","42.947098","-72.243029","-5","1" +"03605","Lempster","NH","43.231807","-72.17556","-5","1" +"03607","South Acworth","NH","43.195329","-72.26894","-5","1" +"03608","Walpole","NH","43.075411","-72.41902","-5","1" +"03609","North Walpole","NH","43.142254","-72.4483","-5","1" +"03638","Freedom","NH","43.822389","-71.092797","-5","1" +"03648","Enfield","NH","43.630276","-72.135352","-5","1" +"03678","Lyme","NH","43.827375","-72.139036","-5","1" +"03688","Lebanon","ME","43.341381","-70.955693","-5","1" +"03733","Newport","NH","43.38807","-72.243666","-5","1" +"03740","Bath","NH","44.114163","-71.948852","-5","1" +"03741","Canaan","NH","43.659172","-72.01333","-5","1" +"03743","Claremont","NH","43.374562","-72.34152","-5","1" +"03745","Cornish","NH","43.476337","-72.33337","-5","1" +"03746","Cornish Flat","NH","43.364504","-72.193966","-5","1" +"03747","Enfield","NH","43.581769","-72.097366","-5","1" +"03748","Enfield","NH","43.614847","-72.12058","-5","1" +"03749","Enfield Center","NH","43.579573","-72.08541","-5","1" +"03750","Etna","NH","43.701003","-72.20056","-5","1" +"03751","Georges Mills","NH","43.437503","-72.07185","-5","1" +"03752","Goshen","NH","43.304058","-72.13525","-5","1" +"03753","Grantham","NH","43.516383","-72.12954","-5","1" +"03754","Guild","NH","43.365618","-72.125562","-5","1" +"03755","Hanover","NH","43.719756","-72.2507","-5","1" +"03756","Lebanon","NH","43.967542","-71.840883","-5","1" +"03757","Sunapee","NH","43.444147","-72.088709","-5","1" +"03765","Haverhill","NH","44.037125","-72.05658","-5","1" +"03766","Lebanon","NH","43.642945","-72.24403","-5","1" +"03768","Lyme","NH","43.823864","-72.13297","-5","1" +"03769","Lyme Center","NH","43.786267","-72.120468","-5","1" +"03770","Meriden","NH","43.525462","-72.28072","-5","1" +"03771","Monroe","NH","44.281722","-72.02789","-5","1" +"03773","Newport","NH","43.358339","-72.18321","-5","1" +"03774","North Haverhill","NH","44.08541","-71.9943","-5","1" +"03777","Orford","NH","43.908925","-72.07831","-5","1" +"03779","Piermont","NH","43.976427","-72.04409","-5","1" +"03780","Pike","NH","44.029684","-71.98612","-5","1" +"03781","Plainfield","NH","43.53357","-72.30353","-5","1" +"03782","Sunapee","NH","43.381133","-72.09028","-5","1" +"03784","West Lebanon","NH","43.649781","-72.30594","-5","1" +"03785","Woodsville","NH","44.133215","-71.96306","-5","1" +"03801","Portsmouth","NH","43.070188","-70.77684","-5","1" +"03802","Portsmouth","NH","43.005895","-71.013202","-5","1" +"03803","Portsmouth","NH","42.92703","-71.444752","-5","1" +"03804","Portsmouth","NH","43.005895","-71.013202","-5","1" +"03805","Rollinsford","NH","43.285282","-70.930684","-5","1" +"03809","Alton","NH","43.478364","-71.22377","-5","1" +"03810","Alton Bay","NH","43.478917","-71.28776","-5","1" +"03811","Atkinson","NH","42.836245","-71.16246","-5","1" +"03812","Bartlett","NH","44.081906","-71.29729","-5","1" +"03813","Center Conway","NH","44.041089","-71.0627","-5","1" +"03814","Center Ossipee","NH","43.767878","-71.12926","-5","1" +"03815","Center Strafford","NH","43.256254","-71.10317","-5","1" +"03816","Center Tuftonboro","NH","43.685171","-71.28404","-5","1" +"03817","Chocorua","NH","43.878112","-71.22069","-5","1" +"03818","Conway","NH","43.966958","-71.15892","-5","1" +"03819","Danville","NH","42.927682","-71.12034","-5","1" +"03820","Dover","NH","43.190984","-70.88787","-5","1" +"03821","Dover","NH","43.326734","-71.028427","-5","1" +"03822","Dover","NH","43.326734","-71.028427","-5","1" +"03824","Durham","NH","43.128085","-70.96035","-5","1" +"03825","Barrington","NH","43.208136","-71.04356","-5","1" +"03826","East Hampstead","NH","42.890357","-71.12296","-5","1" +"03827","East Kingston","NH","42.91574","-70.98459","-5","1" +"03830","East Wakefield","NH","43.640621","-70.98935","-5","1" +"03832","Eaton Center","NH","43.907045","-71.04716","-5","1" +"03833","Exeter","NH","42.973783","-70.97665","-5","1" +"03835","Farmington","NH","43.395688","-71.06217","-5","1" +"03836","Freedom","NH","43.814201","-71.0803","-5","1" +"03837","Gilmanton Iron Works","NH","43.435913","-71.32971","-5","1" +"03838","Glen","NH","44.116958","-71.20354","-5","1" +"03839","Rochester","NH","43.267581","-70.98552","-5","1" +"03840","Greenland","NH","43.038279","-70.84714","-5","1" +"03841","Hampstead","NH","42.880837","-71.18252","-5","1" +"03842","Hampton","NH","42.93569","-70.82514","-5","1" +"03843","Hampton","NH","43.005895","-71.013202","-5","1" +"03844","Hampton Falls","NH","42.923946","-70.88666","-5","1" +"03845","Intervale","NH","44.086488","-71.13865","-5","1" +"03846","Jackson","NH","44.166268","-71.18089","-5","1" +"03847","Kearsarge","NH","43.883871","-71.257726","-5","1" +"03848","Kingston","NH","42.923643","-71.06236","-5","1" +"03849","Madison","NH","43.930805","-71.14311","-5","1" +"03850","Melvin Village","NH","43.707657","-71.301681","-5","1" +"03851","Milton","NH","43.422942","-71.011369","-5","1" +"03852","Milton Mills","NH","43.500126","-70.96931","-5","1" +"03853","Mirror Lake","NH","43.642398","-71.28614","-5","1" +"03854","New Castle","NH","43.068338","-70.72353","-5","1" +"03855","New Durham","NH","43.443682","-71.14628","-5","1" +"03856","Newfields","NH","43.03833","-70.95076","-5","1" +"03857","Newmarket","NH","43.072738","-70.94336","-5","1" +"03858","Newton","NH","42.871322","-71.04807","-5","1" +"03859","Newton Junction","NH","42.861915","-71.04002","-5","1" +"03860","North Conway","NH","44.035684","-71.13084","-5","1" +"03862","North Hampton","NH","42.97778","-70.83055","-5","1" +"03864","Ossipee","NH","43.672636","-71.10266","-5","1" +"03865","Plaistow","NH","42.837189","-71.09445","-5","1" +"03866","Rochester","NH","43.41176","-71.027303","-5","1" +"03867","Rochester","NH","43.304163","-70.99816","-5","1" +"03868","Rochester","NH","43.340581","-70.96311","-5","1" +"03869","Rollinsford","NH","43.221234","-70.83207","-5","1" +"03870","Rye","NH","43.000003","-70.76517","-5","1" +"03871","Rye Beach","NH","42.980639","-70.771896","-5","1" +"03872","Sanbornville","NH","43.564008","-71.03405","-5","1" +"03873","Sandown","NH","42.929588","-71.18444","-5","1" +"03874","Seabrook","NH","42.88439","-70.85466","-5","1" +"03875","Silver Lake","NH","43.868287","-71.18267","-5","1" +"03878","Somersworth","NH","43.253783","-70.87549","-5","1" +"03882","South Effingham","NH","43.721239","-71.00006","-5","1" +"03883","South Tamworth","NH","43.828696","-71.32104","-5","1" +"03884","Strafford","NH","43.257919","-71.17701","-5","1" +"03885","Stratham","NH","43.015756","-70.90192","-5","1" +"03886","Tamworth","NH","43.857079","-71.25988","-5","1" +"03887","Union","NH","43.448064","-71.02823","-5","1" +"03890","West Ossipee","NH","43.811782","-71.194586","-5","1" +"03891","Danville","NH","42.906495","-71.140537","-5","1" +"03894","Wolfeboro","NH","43.596233","-71.19552","-5","1" +"03896","Wolfeboro Falls","NH","43.589157","-71.218894","-5","1" +"03897","Wonalancet","NH","43.908738","-71.34507","-5","1" +"03901","Berwick","ME","43.29016","-70.84559","-5","1" +"03902","Cape Neddick","ME","43.216251","-70.62856","-5","1" +"03903","Eliot","ME","43.135435","-70.79348","-5","1" +"03904","Kittery","ME","43.101538","-70.73611","-5","1" +"03905","Kittery Point","ME","43.08512","-70.69607","-5","1" +"03906","North Berwick","ME","43.327517","-70.7646","-5","1" +"03907","Ogunquit","ME","43.247931","-70.59952","-5","1" +"03908","South Berwick","ME","43.234782","-70.77876","-5","1" +"03909","York","ME","43.159537","-70.65239","-5","1" +"03910","York Beach","ME","43.211674","-70.73201","-5","1" +"03911","York Harbor","ME","43.155465","-70.635702","-5","1" +"04001","Acton","ME","43.548123","-70.93189","-5","1" +"04002","Alfred","ME","43.490939","-70.6884","-5","1" +"04003","Bailey Island","ME","43.730791","-69.99448","-5","1" +"04004","Bar Mills","ME","43.365658","-70.604379","-5","1" +"04005","Biddeford","ME","43.480704","-70.45871","-5","1" +"04006","Biddeford Pool","ME","43.436049","-70.3598","-5","1" +"04007","Biddeford","ME","43.45813","-70.505301","-5","1" +"04008","Bowdoinham","ME","44.023057","-69.88369","-5","1" +"04009","Bridgton","ME","44.059192","-70.72552","-5","1" +"04010","Brownfield","ME","43.938741","-70.90049","-5","1" +"04011","Brunswick","ME","43.8992","-69.95894","-5","1" +"04013","Bustins Island","ME","44.408078","-70.470703","-5","1" +"04014","Cape Porpoise","ME","43.365658","-70.604379","-5","1" +"04015","Casco","ME","43.952597","-70.51377","-5","1" +"04016","Center Lovell","ME","44.180965","-70.891727","-5","1" +"04017","Chebeague Island","ME","43.736628","-70.11522","-5","1" +"04019","Cliff Island","ME","43.696875","-70.09448","-5","1" +"04020","Cornish","ME","43.773606","-70.80878","-5","1" +"04021","Cumberland Center","ME","43.798251","-70.26554","-5","1" +"04022","Denmark","ME","43.969","-70.78804","-5","1" +"04024","East Baldwin","ME","43.823849","-70.68482","-5","1" +"04027","Lebanon","ME","43.403349","-70.91719","-5","1" +"04028","East Parsonfield","ME","43.732391","-70.845114","-5","1" +"04029","Sebago","ME","43.887356","-70.67755","-5","1" +"04030","East Waterboro","ME","43.585861","-70.6793","-5","1" +"04031","Raymond","ME","43.916912","-70.43911","-5","1" +"04032","Freeport","ME","43.843778","-70.10172","-5","1" +"04033","Freeport","ME","44.408078","-70.470703","-5","1" +"04034","Freeport","ME","44.408078","-70.470703","-5","1" +"04037","Fryeburg","ME","44.050856","-70.95648","-5","1" +"04038","Gorham","ME","43.697118","-70.46301","-5","1" +"04039","Gray","ME","43.879576","-70.3533","-5","1" +"04040","Harrison","ME","44.103892","-70.65327","-5","1" +"04041","Hiram","ME","43.871738","-70.83391","-5","1" +"04042","Hollis Center","ME","43.611238","-70.63265","-5","1" +"04043","Kennebunk","ME","43.38551","-70.54707","-5","1" +"04046","Kennebunkport","ME","43.399494","-70.4769","-5","1" +"04047","Parsonsfield","ME","43.755002","-70.8983","-5","1" +"04048","Limerick","ME","43.682791","-70.77178","-5","1" +"04049","Limington","ME","43.733814","-70.70263","-5","1" +"04050","Long Island","ME","43.692683","-70.15475","-5","1" +"04051","Lovell","ME","44.172276","-70.87231","-5","1" +"04053","Merepoint","ME","44.408078","-70.470703","-5","1" +"04054","Moody","ME","43.276341","-70.597752","-5","1" +"04055","Naples","ME","43.959974","-70.60312","-5","1" +"04056","Newfield","ME","43.658378","-70.868871","-5","1" +"04057","North Bridgton","ME","44.408078","-70.470703","-5","1" +"04061","North Waterboro","ME","43.643195","-70.73033","-5","1" +"04062","Windham","ME","43.810673","-70.41697","-5","1" +"04063","Ocean Park","ME","43.504889","-70.385703","-5","1" +"04064","Old Orchard Beach","ME","43.514864","-70.3856","-5","1" +"04065","Ellsworth","ME","44.540983","-68.423297","-5","1" +"04066","Orrs Island","ME","43.763403","-69.97038","-5","1" +"04068","Porter","ME","43.833831","-70.93094","-5","1" +"04069","Pownal","ME","43.912616","-70.17893","-5","1" +"04070","Scarborough","ME","43.576983","-70.273642","-5","1" +"04071","Raymond","ME","43.917206","-70.47233","-5","1" +"04072","Saco","ME","43.527322","-70.45171","-5","1" +"04073","Sanford","ME","43.426792","-70.75245","-5","1" +"04074","Scarborough","ME","43.583224","-70.35268","-5","1" +"04075","Sebago Lake","ME","43.796053","-70.552183","-5","1" +"04076","Shapleigh","ME","43.553076","-70.84515","-5","1" +"04077","South Casco","ME","43.910029","-70.524524","-5","1" +"04078","South Freeport","ME","43.820774","-70.120781","-5","1" +"04079","Harpswell","ME","43.797398","-69.95217","-5","1" +"04081","South Waterford","ME","44.566156","-70.661557","-5","1" +"04082","South Windham","ME","44.408078","-70.470703","-5","1" +"04083","Springvale","ME","43.467037","-70.80275","-5","1" +"04084","Standish","ME","43.761599","-70.56433","-5","1" +"04085","Steep Falls","ME","43.770432","-70.63812","-5","1" +"04086","Topsham","ME","43.94674","-69.96163","-5","1" +"04087","Waterboro","ME","43.56066","-70.75497","-5","1" +"04088","Waterford","ME","44.190761","-70.70757","-5","1" +"04090","Wells","ME","43.320211","-70.61178","-5","1" +"04091","West Baldwin","ME","43.824885","-70.75038","-5","1" +"04092","Westbrook","ME","43.682148","-70.35823","-5","1" +"04093","West Buxton","ME","43.660386","-70.57492","-5","1" +"04094","West Kennebunk","ME","43.406101","-70.573255","-5","1" +"04095","West Newfield","ME","43.642631","-70.91218","-5","1" +"04096","Yarmouth","ME","43.801773","-70.17932","-5","1" +"04097","North Yarmouth","ME","43.842797","-70.22985","-5","1" +"04098","Westbrook","ME","44.408078","-70.470703","-5","1" +"04101","Portland","ME","43.660525","-70.25862","-5","1" +"04102","Portland","ME","43.658632","-70.2911","-5","1" +"04103","Portland","ME","43.685882","-70.2903","-5","1" +"04104","Portland","ME","43.84649","-70.464839","-5","1" +"04105","Falmouth","ME","43.736732","-70.26027","-5","1" +"04106","South Portland","ME","43.631549","-70.27272","-5","1" +"04107","Cape Elizabeth","ME","43.604739","-70.22617","-5","1" +"04108","Peaks Island","ME","43.665177","-70.19475","-5","1" +"04109","Portland","ME","43.678339","-70.198742","-5","1" +"04110","Cumberland Foreside","ME","43.760369","-70.19681","-5","1" +"04112","Portland","ME","44.408078","-70.470703","-5","1" +"04116","South Portland","ME","44.408078","-70.470703","-5","1" +"04122","Portland","ME","44.408078","-70.470703","-5","1" +"04123","Portland","ME","44.408078","-70.470703","-5","1" +"04124","Portland","ME","44.408078","-70.470703","-5","1" +"04210","Auburn","ME","44.089173","-70.24143","-5","1" +"04211","Auburn","ME","44.197009","-70.239485","-5","1" +"04212","Auburn","ME","44.197009","-70.239485","-5","1" +"04216","Andover","ME","44.661894","-70.79952","-5","1" +"04217","Bethel","ME","44.372129","-70.8175","-5","1" +"04219","Bryant Pond","ME","44.386951","-70.63082","-5","1" +"04220","Buckfield","ME","44.295264","-70.3671","-5","1" +"04221","Canton","ME","44.423658","-70.31378","-5","1" +"04222","Durham","ME","43.972505","-70.12291","-5","1" +"04223","Danville","ME","44.023873","-70.285748","-5","1" +"04224","Dixfield","ME","44.555583","-70.41383","-5","1" +"04225","Dryden","ME","44.602705","-70.22651","-5","1" +"04226","East Andover","ME","44.614134","-70.69882","-5","1" +"04227","East Dixfield","ME","44.579135","-70.326337","-5","1" +"04228","East Livermore","ME","44.400997","-70.13383","-5","1" +"04230","East Poland","ME","44.062672","-70.327049","-5","1" +"04231","Stoneham","ME","44.261562","-70.87044","-5","1" +"04234","East Wilton","ME","44.617509","-70.182012","-5","1" +"04236","Greene","ME","44.194404","-70.14181","-5","1" +"04237","Hanover","ME","44.49281","-70.7356","-5","1" +"04238","Hebron","ME","44.197418","-70.36975","-5","1" +"04239","Jay","ME","44.516475","-70.21933","-5","1" +"04240","Lewiston","ME","44.094773","-70.19141","-5","1" +"04241","Lewiston","ME","44.197009","-70.239485","-5","1" +"04243","Lewiston","ME","44.197009","-70.239485","-5","1" +"04250","Lisbon","ME","44.027509","-70.1097","-5","1" +"04252","Lisbon Falls","ME","44.009827","-70.05631","-5","1" +"04253","Livermore","ME","44.408579","-70.22452","-5","1" +"04254","Livermore Falls","ME","44.470961","-70.17486","-5","1" +"04255","Locke Mills","ME","44.35976","-70.67231","-5","1" +"04256","Mechanic Falls","ME","44.10472","-70.39197","-5","1" +"04257","Mexico","ME","44.556984","-70.53351","-5","1" +"04258","Minot","ME","44.154921","-70.33319","-5","1" +"04259","Monmouth","ME","44.231811","-69.99897","-5","1" +"04260","New Gloucester","ME","43.957375","-70.29488","-5","1" +"04261","Newry","ME","44.570532","-70.87599","-5","1" +"04262","North Jay","ME","45.063384","-70.381639","-5","1" +"04263","Leeds","ME","44.283844","-70.11254","-5","1" +"04265","North Monmouth","ME","44.281993","-70.04027","-5","1" +"04266","North Turner","ME","44.357987","-70.255783","-5","1" +"04267","North Waterford","ME","44.566156","-70.661557","-5","1" +"04268","Norway","ME","44.223589","-70.58366","-5","1" +"04270","Oxford","ME","44.114612","-70.50506","-5","1" +"04271","Paris","ME","44.264111","-70.498513","-5","1" +"04273","Hanover","ME","44.498193","-70.697022","-5","1" +"04274","Poland","ME","44.049157","-70.39077","-5","1" +"04275","Roxbury","ME","44.727073","-70.6478","-5","1" +"04276","Rumford","ME","44.53599","-70.56609","-5","1" +"04278","Rumford Center","ME","44.377031","-70.568041","-5","1" +"04279","Rumford","ME","44.56421","-70.715864","-5","1" +"04280","Sabattus","ME","44.119007","-70.07568","-5","1" +"04281","South Paris","ME","44.235141","-70.50508","-5","1" +"04282","Turner","ME","44.266842","-70.24563","-5","1" +"04283","Turner Center","ME","44.197009","-70.239485","-5","1" +"04284","Wayne","ME","44.349542","-70.05698","-5","1" +"04285","Weld","ME","44.697077","-70.43275","-5","1" +"04286","West Bethel","ME","44.40205","-70.860094","-5","1" +"04287","Bowdoin","ME","44.048154","-69.96847","-5","1" +"04288","West Minot","ME","44.197009","-70.239485","-5","1" +"04289","West Paris","ME","44.325285","-70.52451","-5","1" +"04290","Peru","ME","44.494624","-70.43726","-5","1" +"04291","West Poland","ME","44.040857","-70.453006","-5","1" +"04292","Sumner","ME","44.38382","-70.43533","-5","1" +"04294","Wilton","ME","44.602261","-70.22906","-5","1" +"04321","Stoneham","ME","44.209214","-70.818045","-5","1" +"04327","Richmond","ME","44.09156","-69.804077","-5","1" +"04330","Augusta","ME","44.344406","-69.76345","-5","1" +"04332","Augusta","ME","44.414056","-69.751913","-5","1" +"04333","Augusta","ME","44.414056","-69.751913","-5","1" +"04336","Augusta","ME","44.315693","-69.818009","-5","1" +"04338","Augusta","ME","44.414056","-69.751913","-5","1" +"04341","Coopers Mills","ME","44.258771","-69.551024","-5","1" +"04342","Dresden","ME","44.07685","-69.75012","-5","1" +"04343","East Winthrop","ME","44.414056","-69.751913","-5","1" +"04344","Farmingdale","ME","44.26043","-69.80122","-5","1" +"04345","Gardiner","ME","44.211491","-69.80866","-5","1" +"04346","Randolph","ME","44.234914","-69.75722","-5","1" +"04347","Hallowell","ME","44.286802","-69.79788","-5","1" +"04348","Jefferson","ME","44.212785","-69.4971","-5","1" +"04349","Kents Hill","ME","44.42977","-70.06456","-5","1" +"04350","Litchfield","ME","44.174052","-69.93363","-5","1" +"04351","Manchester","ME","44.306955","-69.87518","-5","1" +"04352","Mount Vernon","ME","44.46599","-69.96073","-5","1" +"04353","Whitefield","ME","44.209878","-69.60427","-5","1" +"04354","Palermo","ME","44.384901","-69.4136","-5","1" +"04355","Readfield","ME","44.376802","-69.96353","-5","1" +"04357","Richmond","ME","44.117232","-69.82947","-5","1" +"04358","South China","ME","44.428911","-69.52679","-5","1" +"04359","South Gardiner","ME","44.183266","-69.777196","-5","1" +"04360","Vienna","ME","44.548458","-69.985","-5","1" +"04363","Windsor","ME","44.300247","-69.5744","-5","1" +"04364","Winthrop","ME","44.31842","-69.95997","-5","1" +"04401","Bangor","ME","44.81777","-68.78952","-5","1" +"04402","Bangor","ME","45.519867","-68.647416","-5","1" +"04406","Abbot","ME","45.221933","-69.49039","-5","1" +"04408","Aurora","ME","44.87332","-68.23311","-5","1" +"04410","Bradford","ME","45.088295","-68.90997","-5","1" +"04411","Bradley","ME","44.911733","-68.621","-5","1" +"04412","Brewer","ME","44.78696","-68.7547","-5","1" +"04413","Brookton","ME","45.53866","-67.75295","-5","1" +"04414","Brownville","ME","45.369216","-69.03431","-5","1" +"04415","Brownville Junction","ME","45.351184","-69.058062","-5","1" +"04416","Bucksport","ME","44.609813","-68.78303","-5","1" +"04417","Burlington","ME","45.264114","-68.42087","-5","1" +"04418","Cardville","ME","45.110336","-68.62103","-5","1" +"04419","Carmel","ME","44.7896","-69.00587","-5","1" +"04420","Castine","ME","44.412968","-68.798047","-5","1" +"04421","Castine","ME","44.405928","-68.79341","-5","1" +"04422","Charleston","ME","45.060941","-69.03527","-5","1" +"04423","Costigan","ME","45.01895","-68.48987","-5","1" +"04424","Danforth","ME","45.679453","-67.86208","-5","1" +"04426","Dover Foxcroft","ME","45.195052","-69.18861","-5","1" +"04427","Corinth","ME","44.979986","-69.00746","-5","1" +"04428","Eddington","ME","44.798289","-68.5694","-5","1" +"04429","Holden","ME","44.700606","-68.59682","-5","1" +"04430","East Millinocket","ME","45.631824","-68.58178","-5","1" +"04431","East Orland","ME","44.56801","-68.68116","-5","1" +"04434","Etna","ME","44.802184","-69.14212","-5","1" +"04435","Exeter","ME","44.961913","-69.12214","-5","1" +"04438","Frankfort","ME","44.61165","-68.91965","-5","1" +"04441","Greenville","ME","45.517693","-69.5223","-5","1" +"04442","Greenville Junction","ME","45.479835","-69.62773","-5","1" +"04443","Guilford","ME","45.245781","-69.37191","-5","1" +"04444","Hampden","ME","44.735745","-68.92518","-5","1" +"04448","Howland","ME","45.241091","-68.67025","-5","1" +"04449","Hudson","ME","44.999621","-68.88431","-5","1" +"04450","Kenduskeag","ME","44.921758","-68.93125","-5","1" +"04451","Kingman","ME","45.548818","-68.20841","-5","1" +"04453","Lagrange","ME","45.184949","-68.78881","-5","1" +"04454","Lambert Lake","ME","45.002969","-67.495548","-5","1" +"04455","Lee","ME","45.333971","-68.29313","-5","1" +"04456","Levant","ME","44.876282","-68.98712","-5","1" +"04457","Lincoln","ME","45.368934","-68.48354","-5","1" +"04459","Mattawamkeag","ME","45.518535","-68.33623","-5","1" +"04460","Medway","ME","45.638612","-68.52012","-5","1" +"04461","Milford","ME","44.956776","-68.62199","-5","1" +"04462","Millinocket","ME","45.646916","-68.74801","-5","1" +"04463","Milo","ME","45.241618","-68.95101","-5","1" +"04464","Monson","ME","45.303916","-69.51368","-5","1" +"04465","Cary","ME","45.961338","-67.824005","-5","1" +"04467","Olamon","ME","45.519867","-68.647416","-5","1" +"04468","Old Town","ME","44.951551","-68.67889","-5","1" +"04469","Orono","ME","45.002798","-68.63343","-5","1" +"04471","Orient","ME","45.909516","-67.85856","-5","1" +"04472","Orland","ME","44.560479","-68.69084","-5","1" +"04473","Orono","ME","44.889249","-68.68177","-5","1" +"04474","Orrington","ME","44.721393","-68.78905","-5","1" +"04475","Passadumkeag","ME","45.191812","-68.58953","-5","1" +"04476","Penobscot","ME","44.444707","-68.73576","-5","1" +"04478","Rockwood","ME","45.704599","-69.80879","-5","1" +"04479","Sangerville","ME","45.129817","-69.32571","-5","1" +"04481","Sebec","ME","45.792364","-69.30463","-5","1" +"04485","Shirley Mills","ME","45.792364","-69.30463","-5","1" +"04487","Springfield","ME","45.386188","-68.08163","-5","1" +"04488","Stetson","ME","44.891869","-69.1108","-5","1" +"04489","Stillwater","ME","44.922368","-68.686796","-5","1" +"04490","Topsfield","ME","45.426462","-67.76009","-5","1" +"04491","Vanceboro","ME","45.002969","-67.495548","-5","1" +"04492","Waite","ME","45.002969","-67.495548","-5","1" +"04493","West Enfield","ME","45.247401","-68.51819","-5","1" +"04495","Winn","ME","45.484389","-68.37662","-5","1" +"04496","Winterport","ME","44.657697","-68.8957","-5","1" +"04497","Wytopitlock","ME","45.733543","-68.05875","-5","1" +"04530","Bath","ME","43.900651","-69.83405","-5","1" +"04535","Alna","ME","44.084989","-69.62535","-5","1" +"04536","Bayville","ME","44.021333","-69.523263","-5","1" +"04537","Boothbay","ME","43.907812","-69.64608","-5","1" +"04538","Boothbay Harbor","ME","43.85424","-69.63217","-5","1" +"04539","Bristol","ME","43.965125","-69.50529","-5","1" +"04541","Chamberlain","ME","43.885681","-69.4795","-5","1" +"04543","Damariscotta","ME","44.036533","-69.48841","-5","1" +"04544","East Boothbay","ME","43.832642","-69.58903","-5","1" +"04546","Georgetown","ME","43.767018","-69.749812","-5","1" +"04547","Friendship","ME","43.983665","-69.33885","-5","1" +"04548","Georgetown","ME","43.810548","-69.74325","-5","1" +"04549","Isle Of Springs","ME","44.021333","-69.523263","-5","1" +"04551","Bremen","ME","43.999618","-69.43738","-5","1" +"04552","Newagen","ME","44.021333","-69.523263","-5","1" +"04553","Newcastle","ME","44.048714","-69.54335","-5","1" +"04554","New Harbor","ME","43.863028","-69.51314","-5","1" +"04555","Nobleboro","ME","44.096194","-69.47857","-5","1" +"04556","Edgecomb","ME","43.973476","-69.63516","-5","1" +"04557","Richmond","ME","44.090471","-69.803936","-5","1" +"04558","Pemaquid","ME","43.893848","-69.52041","-5","1" +"04562","Phippsburg","ME","43.793136","-69.81778","-5","1" +"04563","Cushing","ME","43.993356","-69.26819","-5","1" +"04564","Round Pond","ME","43.937468","-69.45721","-5","1" +"04565","Sebasco Estates","ME","43.773312","-69.863461","-5","1" +"04567","Small Point","ME","43.900856","-69.859541","-5","1" +"04568","South Bristol","ME","43.863902","-69.55874","-5","1" +"04570","Squirrel Island","ME","44.021333","-69.523263","-5","1" +"04571","Trevett","ME","43.88261","-69.680144","-5","1" +"04572","Waldoboro","ME","44.10637","-69.37177","-5","1" +"04573","Walpole","ME","43.949672","-69.55133","-5","1" +"04574","Washington","ME","44.274007","-69.38896","-5","1" +"04575","West Boothbay Harbor","ME","43.854534","-69.660795","-5","1" +"04576","Southport","ME","43.823008","-69.66661","-5","1" +"04578","Wiscasset","ME","43.974367","-69.68366","-5","1" +"04579","Woolwich","ME","43.949901","-69.78298","-5","1" +"04600","Winter Harbor","ME","44.396951","-68.081184","-5","1" +"04605","Ellsworth","ME","44.614885","-68.43626","-5","1" +"04606","Addison","ME","44.556073","-67.70122","-5","1" +"04607","Gouldsboro","ME","44.49569","-68.09467","-5","1" +"04609","Bar Harbor","ME","44.402596","-68.26204","-5","1" +"04611","Beals","ME","44.507801","-67.6025","-5","1" +"04612","Bernard","ME","44.247391","-68.37104","-5","1" +"04613","Birch Harbor","ME","44.378868","-68.02915","-5","1" +"04614","Blue Hill","ME","44.413056","-68.58156","-5","1" +"04615","Blue Hill Falls","ME","44.354477","-68.54781","-5","1" +"04616","Brooklin","ME","44.275325","-68.55956","-5","1" +"04617","Brooksville","ME","44.363587","-68.74399","-5","1" +"04619","Calais","ME","45.166045","-67.24243","-5","1" +"04621","Eastport","ME","44.904789","-66.990529","-5","1" +"04622","Cherryfield","ME","44.686731","-67.99166","-5","1" +"04623","Columbia Falls","ME","44.695493","-67.7395","-5","1" +"04624","Corea","ME","44.428044","-67.98828","-5","1" +"04625","Cranberry Isles","ME","44.248715","-68.25991","-5","1" +"04626","Cutler","ME","44.673285","-67.23946","-5","1" +"04627","Deer Isle","ME","44.221142","-68.66894","-5","1" +"04628","Dennysville","ME","44.894562","-67.2324","-5","1" +"04629","East Blue Hill","ME","44.414095","-68.51313","-5","1" +"04630","East Machias","ME","44.753992","-67.3786","-5","1" +"04631","Eastport","ME","44.913741","-67.00391","-5","1" +"04634","Franklin","ME","44.617844","-68.23546","-5","1" +"04635","Frenchboro","ME","44.124476","-68.34995","-5","1" +"04637","Grand Lake Stream","ME","45.185635","-67.601026","-5","1" +"04640","Hancock","ME","44.524526","-68.28298","-5","1" +"04642","Harborside","ME","44.322421","-68.80933","-5","1" +"04643","Harrington","ME","44.599134","-67.82533","-5","1" +"04644","Hulls Cove","ME","44.641873","-68.391481","-5","1" +"04645","Isle Au Haut","ME","44.058801","-68.61685","-5","1" +"04646","Islesford","ME","44.258201","-68.2277","-5","1" +"04648","Jonesboro","ME","44.663206","-67.59538","-5","1" +"04649","Jonesport","ME","44.554662","-67.57808","-5","1" +"04650","Little Deer Isle","ME","44.286462","-68.71098","-5","1" +"04652","Lubec","ME","44.818733","-67.04996","-5","1" +"04653","Bass Harbor","ME","44.248615","-68.3521","-5","1" +"04654","Machias","ME","44.802637","-67.54727","-5","1" +"04655","Machiasport","ME","44.632707","-67.39416","-5","1" +"04656","Manset","ME","44.641873","-68.391481","-5","1" +"04657","Meddybemps","ME","44.971091","-67.38549","-5","1" +"04658","Milbridge","ME","44.512003","-67.87827","-5","1" +"04660","Mount Desert","ME","44.34629","-68.34317","-5","1" +"04662","Northeast Harbor","ME","44.291076","-68.28143","-5","1" +"04664","Sullivan","ME","44.528094","-68.22333","-5","1" +"04665","Otter Creek","ME","44.641873","-68.391481","-5","1" +"04666","Pembroke","ME","44.975116","-67.1946","-5","1" +"04667","Perry","ME","44.972969","-67.08697","-5","1" +"04668","Princeton","ME","45.188555","-67.59063","-5","1" +"04669","Prospect Harbor","ME","44.408699","-68.01142","-5","1" +"04671","Robbinston","ME","45.076626","-67.14057","-5","1" +"04672","Salsbury Cove","ME","44.430435","-68.2849","-5","1" +"04673","Sargentville","ME","44.305681","-68.67842","-5","1" +"04674","Seal Cove","ME","44.295719","-68.40092","-5","1" +"04675","Seal Harbor","ME","44.298106","-68.24075","-5","1" +"04676","Sedgwick","ME","44.333099","-68.65693","-5","1" +"04677","Sorrento","ME","44.482607","-68.18185","-5","1" +"04679","Southwest Harbor","ME","44.278453","-68.32186","-5","1" +"04680","Steuben","ME","44.510306","-67.94879","-5","1" +"04681","Stonington","ME","44.168214","-68.66405","-5","1" +"04683","Sunset","ME","44.214927","-68.7769","-5","1" +"04684","Surry","ME","44.490635","-68.50085","-5","1" +"04685","Swans Island","ME","44.161589","-68.44607","-5","1" +"04686","Wesley","ME","45.002969","-67.495548","-5","1" +"04690","West Tremont","ME","44.641873","-68.391481","-5","1" +"04691","Whiting","ME","44.790082","-67.24789","-5","1" +"04693","Winter Harbor","ME","44.384841","-68.09458","-5","1" +"04694","Baileyville","ME","45.116525","-67.42484","-5","1" +"04724","Poland","ME","43.995965","-70.41037","-5","1" +"04730","Houlton","ME","46.12672","-67.87798","-5","1" +"04732","Ashland","ME","46.64005","-68.42804","-5","1" +"04733","Benedicta","ME","45.810781","-68.39974","-5","1" +"04734","Blaine","ME","46.516166","-68.886826","-5","1" +"04735","Bridgewater","ME","46.421799","-67.89417","-5","1" +"04736","Caribou","ME","46.878869","-68.01128","-5","1" +"04737","Clayton Lake","ME","46.516166","-68.886826","-5","1" +"04738","Crouseville","ME","46.516166","-68.886826","-5","1" +"04739","Eagle Lake","ME","47.042226","-68.61588","-5","1" +"04740","Easton","ME","46.657001","-67.86338","-5","1" +"04741","Estcourt Station","ME","46.516166","-68.886826","-5","1" +"04742","Fort Fairfield","ME","46.774757","-67.85012","-5","1" +"04743","Fort Kent","ME","47.209541","-68.57238","-5","1" +"04744","Fort Kent Mills","ME","46.516166","-68.886826","-5","1" +"04745","Frenchville","ME","47.285196","-68.38716","-5","1" +"04746","Grand Isle","ME","47.281126","-68.14277","-5","1" +"04747","Island Falls","ME","46.004523","-68.27004","-5","1" +"04750","Limestone","ME","46.936616","-67.86471","-5","1" +"04751","Limestone","ME","46.892918","-67.9643","-5","1" +"04752","Ashland","ME","46.602477","-68.410131","-5","1" +"04756","Madawaska","ME","47.345936","-68.32256","-5","1" +"04757","Mapleton","ME","46.68619","-68.147","-5","1" +"04758","Mars Hill","ME","46.512409","-67.86655","-5","1" +"04759","Masardis","ME","46.497891","-68.37251","-5","1" +"04760","Monticello","ME","46.311845","-67.85518","-5","1" +"04761","New Limerick","ME","46.100442","-68.003376","-5","1" +"04762","New Sweden","ME","46.953804","-68.1204","-5","1" +"04763","Oakfield","ME","46.104734","-68.11398","-5","1" +"04764","Oxbow","ME","46.416656","-68.47646","-5","1" +"04765","Patten","ME","46.024219","-68.49241","-5","1" +"04766","Perham","ME","46.869762","-68.2929","-5","1" +"04768","Portage","ME","46.778192","-68.4992","-5","1" +"04769","Presque Isle","ME","46.679321","-68.00216","-5","1" +"04770","Quimby","ME","46.516166","-68.886826","-5","1" +"04772","Saint Agatha","ME","47.241717","-68.33931","-5","1" +"04773","Saint David","ME","47.281953","-68.23959","-5","1" +"04774","Saint Francis","ME","47.119796","-69.00258","-5","1" +"04775","Sheridan","ME","46.516166","-68.886826","-5","1" +"04776","Sherman Mills","ME","45.864106","-68.33986","-5","1" +"04777","Sherman Station","ME","45.880436","-68.45173","-5","1" +"04779","Sinclair","ME","47.165256","-68.27288","-5","1" +"04780","Smyrna Mills","ME","46.164163","-68.23232","-5","1" +"04781","Soldier Pond","ME","47.163149","-68.58915","-5","1" +"04782","Stacyville","ME","45.519867","-68.647416","-5","1" +"04783","Stockholm","ME","47.049301","-68.20823","-5","1" +"04785","Van Buren","ME","47.14685","-67.94718","-5","1" +"04786","Washburn","ME","46.78551","-68.16871","-5","1" +"04787","Westfield","ME","46.574691","-67.96531","-5","1" +"04788","Winterville","ME","46.516166","-68.886826","-5","1" +"04840","Camden","ME","44.210119","-69.113626","-5","1" +"04841","Rockland","ME","44.108735","-69.11366","-5","1" +"04842","Owls Head","ME","44.086989","-69.104234","-5","1" +"04843","Camden","ME","44.218159","-69.08184","-5","1" +"04846","Glen Cove","ME","44.131005","-69.091111","-5","1" +"04847","Hope","ME","44.232721","-69.19254","-5","1" +"04848","Islesboro","ME","44.305981","-68.90883","-5","1" +"04849","Lincolnville","ME","44.325944","-69.03065","-5","1" +"04850","Lincolnville Center","ME","44.478694","-69.149559","-5","1" +"04851","Matinicus","ME","43.856129","-68.88847","-5","1" +"04852","Monhegan","ME","43.764862","-69.32016","-5","1" +"04853","North Haven","ME","44.154189","-68.8781","-5","1" +"04854","Owls Head","ME","44.065748","-69.07536","-5","1" +"04855","Port Clyde","ME","44.032196","-69.148017","-5","1" +"04856","Rockport","ME","44.180867","-69.09812","-5","1" +"04857","Saint George","ME","44.008875","-69.20629","-5","1" +"04858","South Thomaston","ME","44.024605","-69.12781","-5","1" +"04859","Spruce Head","ME","43.999827","-69.15608","-5","1" +"04860","Tenants Harbor","ME","43.9464","-69.23524","-5","1" +"04861","Thomaston","ME","44.082602","-69.17598","-5","1" +"04862","Union","ME","44.240765","-69.27048","-5","1" +"04863","Vinalhaven","ME","44.061051","-68.83819","-5","1" +"04864","Warren","ME","44.135936","-69.24907","-5","1" +"04865","West Rockport","ME","44.192369","-69.121139","-5","1" +"04901","Waterville","ME","44.554965","-69.61297","-5","1" +"04903","Waterville","ME","44.549225","-69.713178","-5","1" +"04910","Albion","ME","44.513491","-69.43496","-5","1" +"04911","Anson","ME","44.78029","-69.93424","-5","1" +"04912","Athens","ME","44.949136","-69.64968","-5","1" +"04915","Belfast","ME","44.445295","-69.02257","-5","1" +"04917","Belgrade","ME","44.493133","-69.83348","-5","1" +"04918","Belgrade Lakes","ME","44.414056","-69.751913","-5","1" +"04920","Bingham","ME","45.07952","-69.84723","-5","1" +"04921","Brooks","ME","44.554501","-69.12604","-5","1" +"04922","Burnham","ME","44.667844","-69.37398","-5","1" +"04923","Cambridge","ME","45.031691","-69.44672","-5","1" +"04924","Canaan","ME","44.765617","-69.55694","-5","1" +"04925","Caratunk","ME","45.249363","-69.9433","-5","1" +"04926","China","ME","44.391167","-69.538257","-5","1" +"04927","Clinton","ME","44.659486","-69.53064","-5","1" +"04928","Corinna","ME","44.949001","-69.27327","-5","1" +"04929","Detroit","ME","44.785927","-69.30376","-5","1" +"04930","Dexter","ME","45.023476","-69.29725","-5","1" +"04932","Dixmont","ME","44.689677","-69.1248","-5","1" +"04933","East Newport","ME","45.519867","-68.647416","-5","1" +"04935","East Vassalboro","ME","44.414056","-69.751913","-5","1" +"04936","Eustis","ME","45.325768","-70.54062","-5","1" +"04937","Fairfield","ME","44.603329","-69.63627","-5","1" +"04938","Farmington","ME","44.66776","-70.12362","-5","1" +"04939","Garland","ME","45.046491","-69.14747","-5","1" +"04940","Farmington Falls","ME","44.622563","-70.075178","-5","1" +"04941","Freedom","ME","44.466012","-69.31337","-5","1" +"04942","Harmony","ME","44.985047","-69.56523","-5","1" +"04943","Hartland","ME","44.861365","-69.49934","-5","1" +"04944","Hinckley","ME","44.684737","-69.6425","-5","1" +"04945","Jackman","ME","45.587713","-70.27257","-5","1" +"04947","Kingfield","ME","45.018122","-70.2669","-5","1" +"04949","Liberty","ME","44.371109","-69.32744","-5","1" +"04950","Madison","ME","44.819206","-69.82782","-5","1" +"04951","Monroe","ME","44.599607","-69.04542","-5","1" +"04952","Morrill","ME","44.417725","-69.15196","-5","1" +"04953","Newport","ME","44.85549","-69.26397","-5","1" +"04954","New Portland","ME","44.904101","-70.10453","-5","1" +"04955","New Sharon","ME","44.638255","-70.01525","-5","1" +"04956","New Vineyard","ME","44.79781","-70.12443","-5","1" +"04957","Norridgewock","ME","44.700173","-69.82554","-5","1" +"04958","North Anson","ME","44.926344","-69.93521","-5","1" +"04961","North New Portland","ME","45.056328","-70.08652","-5","1" +"04962","North Vassalboro","ME","44.464439","-69.61699","-5","1" +"04963","Oakland","ME","44.560495","-69.76938","-5","1" +"04964","Oquossoc","ME","44.924121","-70.76786","-5","1" +"04965","Palmyra","ME","44.845899","-69.36775","-5","1" +"04966","Phillips","ME","44.840352","-70.37235","-5","1" +"04967","Pittsfield","ME","44.774328","-69.40616","-5","1" +"04969","Plymouth","ME","44.767975","-69.21191","-5","1" +"04970","Rangeley","ME","44.966701","-70.6576","-5","1" +"04971","Saint Albans","ME","44.927382","-69.38752","-5","1" +"04972","Sandy Point","ME","44.478694","-69.149559","-5","1" +"04973","Searsmont","ME","44.369557","-69.1882","-5","1" +"04974","Searsport","ME","44.500622","-68.92829","-5","1" +"04975","Shawmut","ME","44.624515","-69.586852","-5","1" +"04976","Skowhegan","ME","44.782568","-69.69212","-5","1" +"04978","Smithfield","ME","44.624821","-69.81117","-5","1" +"04979","Solon","ME","44.940536","-69.80759","-5","1" +"04981","Stockton Springs","ME","44.499082","-68.85667","-5","1" +"04982","Stratton","ME","45.137607","-70.44606","-5","1" +"04983","Strong","ME","44.822625","-70.21778","-5","1" +"04984","Temple","ME","44.688292","-70.23773","-5","1" +"04985","West Forks","ME","45.380034","-69.90892","-5","1" +"04986","Thorndike","ME","44.555643","-69.23241","-5","1" +"04987","Troy","ME","44.678838","-69.26918","-5","1" +"04988","Unity","ME","44.60509","-69.33022","-5","1" +"04989","Vassalboro","ME","44.398851","-69.65181","-5","1" +"04992","West Farmington","ME","44.662822","-70.153049","-5","1" +"05001","White River Junction","VT","43.662892","-72.36825","-5","1" +"05009","White River Junction","VT","43.592039","-72.588407","-5","1" +"05030","Ascutney","VT","43.410672","-72.429777","-5","1" +"05031","Barnard","VT","43.735816","-72.6026","-5","1" +"05032","Bethel","VT","43.811958","-72.64493","-5","1" +"05033","Bradford","VT","43.994064","-72.15534","-5","1" +"05034","Bridgewater","VT","43.577762","-72.61789","-5","1" +"05035","Bridgewater Corners","VT","43.608849","-72.6799","-5","1" +"05036","Brookfield","VT","44.02591","-72.58502","-5","1" +"05037","Brownsville","VT","43.461468","-72.48743","-5","1" +"05038","Chelsea","VT","43.989583","-72.46276","-5","1" +"05039","Corinth","VT","44.026521","-72.29347","-5","1" +"05040","East Corinth","VT","44.070771","-72.21275","-5","1" +"05041","East Randolph","VT","43.966821","-72.54784","-5","1" +"05042","East Ryegate","VT","44.213499","-72.08037","-5","1" +"05043","East Thetford","VT","43.795686","-72.21325","-5","1" +"05045","Fairlee","VT","43.919887","-72.20655","-5","1" +"05046","Groton","VT","44.254302","-72.22669","-5","1" +"05047","Hartford","VT","43.672103","-72.355539","-5","1" +"05048","Hartland","VT","43.566105","-72.39941","-5","1" +"05049","Hartland Four Corners","VT","43.592039","-72.588407","-5","1" +"05050","McIndoe Falls","VT","44.46239","-72.135804","-5","1" +"05051","Newbury","VT","44.075132","-72.07174","-5","1" +"05052","North Hartland","VT","43.598261","-72.351","-5","1" +"05053","North Pomfret","VT","43.714887","-72.49886","-5","1" +"05054","North Thetford","VT","43.852619","-72.18798","-5","1" +"05055","Norwich","VT","43.735335","-72.29086","-5","1" +"05056","Plymouth","VT","43.531612","-72.72179","-5","1" +"05058","Post Mills","VT","43.884626","-72.26075","-5","1" +"05059","Quechee","VT","43.649153","-72.42943","-5","1" +"05060","Randolph","VT","43.954353","-72.66916","-5","1" +"05061","Randolph Center","VT","43.928369","-72.5731","-5","1" +"05062","Reading","VT","43.485715","-72.5536","-5","1" +"05065","Sharon","VT","43.775807","-72.42387","-5","1" +"05067","South Pomfret","VT","43.687515","-72.54272","-5","1" +"05068","South Royalton","VT","43.808623","-72.53208","-5","1" +"05069","South Ryegate","VT","44.168111","-72.14245","-5","1" +"05070","South Strafford","VT","43.830375","-72.36228","-5","1" +"05071","South Woodstock","VT","43.568095","-72.55327","-5","1" +"05072","Strafford","VT","43.890244","-72.39364","-5","1" +"05073","Taftsville","VT","43.625216","-72.47756","-5","1" +"05074","Thetford","VT","43.815621","-72.22275","-5","1" +"05075","Thetford Center","VT","43.83178","-72.27125","-5","1" +"05076","East Corinth","VT","44.128666","-72.2345","-5","1" +"05077","Tunbridge","VT","43.897183","-72.4848","-5","1" +"05079","Vershire","VT","43.948258","-72.32092","-5","1" +"05080","Hartford","VT","43.716375","-72.403244","-5","1" +"05081","Wells River","VT","44.135828","-72.09061","-5","1" +"05083","West Fairlee","VT","43.910089","-72.26637","-5","1" +"05084","West Hartford","VT","43.720826","-72.43372","-5","1" +"05085","West Newbury","VT","44.062646","-72.13946","-5","1" +"05086","West Topsham","VT","44.116731","-72.31915","-5","1" +"05088","Wilder","VT","43.676947","-72.3082","-5","1" +"05089","Windsor","VT","43.486791","-72.42611","-5","1" +"05091","Woodstock","VT","43.631076","-72.53739","-5","1" +"05101","Bellows Falls","VT","43.156451","-72.4729","-5","1" +"05124","Cavendish","VT","43.441399","-72.533124","-5","1" +"05141","Cambridgeport","VT","42.99467","-72.720362","-5","1" +"05142","Cavendish","VT","43.40422","-72.59048","-5","1" +"05143","Chester","VT","43.26449","-72.61831","-5","1" +"05144","Chester Depot","VT","43.592039","-72.588407","-5","1" +"05146","Grafton","VT","43.186044","-72.61661","-5","1" +"05148","Londonderry","VT","43.238921","-72.80106","-5","1" +"05149","Ludlow","VT","43.416827","-72.70416","-5","1" +"05150","North Springfield","VT","43.334787","-72.53053","-5","1" +"05151","Perkinsville","VT","43.380411","-72.49397","-5","1" +"05152","Peru","VT","43.24283","-72.88309","-5","1" +"05153","Proctorsville","VT","43.439302","-72.63738","-5","1" +"05154","Saxtons River","VT","43.139961","-72.50844","-5","1" +"05155","South Londonderry","VT","43.158484","-72.84497","-5","1" +"05156","Springfield","VT","43.300126","-72.47767","-5","1" +"05158","Westminster","VT","43.093695","-72.45054","-5","1" +"05159","Westminster Station","VT","43.093972","-72.456492","-5","1" +"05161","Weston","VT","43.303613","-72.79134","-5","1" +"05201","Bennington","VT","42.882231","-73.17873","-5","1" +"05210","Woodford","VT","42.886696","-73.012715","-5","1" +"05219","Barnet","VT","44.352579","-72.031815","-5","1" +"05233","Sudbury","VT","43.761499","-73.187699","-5","1" +"05250","Arlington","VT","43.106492","-73.17405","-5","1" +"05251","Dorset","VT","43.266886","-73.11308","-5","1" +"05252","East Arlington","VT","43.065891","-73.07824","-5","1" +"05253","East Dorset","VT","43.243449","-73.00758","-5","1" +"05254","Manchester","VT","43.162074","-73.07155","-5","1" +"05255","Manchester Center","VT","43.172699","-73.05261","-5","1" +"05257","North Bennington","VT","42.936801","-73.24838","-5","1" +"05260","North Pownal","VT","42.797636","-73.25716","-5","1" +"05261","Pownal","VT","42.776384","-73.21395","-5","1" +"05262","Shaftsbury","VT","42.977018","-73.16602","-5","1" +"05267","Sutton","VT","44.6877","-72.011815","-5","1" +"05286","Craftsbury","VT","44.627698","-72.434398","-5","1" +"05301","Brattleboro","VT","42.849957","-72.62328","-5","1" +"05302","Brattleboro","VT","42.99467","-72.720362","-5","1" +"05303","Brattleboro","VT","42.99467","-72.720362","-5","1" +"05304","Brattleboro","VT","42.99467","-72.720362","-5","1" +"05340","Bondville","VT","43.15601","-72.91347","-5","1" +"05341","East Dover","VT","42.952754","-72.79694","-5","1" +"05342","Jacksonville","VT","42.781648","-72.80609","-5","1" +"05343","Jamaica","VT","43.103191","-72.7925","-5","1" +"05344","Marlboro","VT","42.851149","-72.74073","-5","1" +"05345","Newfane","VT","43.003271","-72.65777","-5","1" +"05346","Putney","VT","43.02419","-72.51725","-5","1" +"05350","Readsboro","VT","42.779542","-72.96146","-5","1" +"05351","South Newfane","VT","42.934798","-72.75062","-5","1" +"05352","Readsboro","VT","42.765401","-73.06025","-5","1" +"05353","Townshend","VT","43.04943","-72.66643","-5","1" +"05354","Vernon","VT","42.768143","-72.51835","-5","1" +"05355","Wardsboro","VT","43.034152","-72.80748","-5","1" +"05356","West Dover","VT","42.952974","-72.87237","-5","1" +"05357","West Dummerston","VT","42.957233","-72.62408","-5","1" +"05358","West Halifax","VT","42.77448","-72.71702","-5","1" +"05359","West Townshend","VT","43.149377","-72.72492","-5","1" +"05360","West Wardsboro","VT","43.028157","-72.87914","-5","1" +"05361","Whitingham","VT","42.782281","-72.86962","-5","1" +"05362","Williamsville","VT","42.9445","-72.69222","-5","1" +"05363","Wilmington","VT","42.886921","-72.86457","-5","1" +"05364","Westminster","VT","43.061436","-72.51888","-5","1" +"05401","Burlington","VT","44.484038","-73.22126","-5","1" +"05402","Burlington","VT","44.442117","-73.082525","-5","1" +"05403","South Burlington","VT","44.451941","-73.17941","-5","1" +"05404","Winooski","VT","44.494999","-73.18259","-5","1" +"05405","Burlington","VT","44.442117","-73.082525","-5","1" +"05406","Burlington","VT","44.442117","-73.082525","-5","1" +"05407","South Burlington","VT","44.442117","-73.082525","-5","1" +"05418","Fletcher","VT","44.738007","-72.87814","-5","1" +"05433","Lincoln","VT","44.039878","-73.015358","-5","1" +"05439","Colchester","VT","44.49518","-73.165092","-5","1" +"05440","Alburg","VT","44.966836","-73.27028","-5","1" +"05441","Bakersfield","VT","44.772886","-72.78854","-5","1" +"05442","Belvidere Center","VT","44.755398","-72.68029","-5","1" +"05443","Bristol","VT","44.129002","-73.05258","-5","1" +"05444","Cambridge","VT","44.645649","-72.90151","-5","1" +"05445","Charlotte","VT","44.309241","-73.23504","-5","1" +"05446","Colchester","VT","44.541902","-73.19659","-5","1" +"05447","East Berkshire","VT","44.824855","-72.895849","-5","1" +"05448","East Fairfield","VT","44.751801","-72.88247","-5","1" +"05449","Colchester","VT","44.442117","-73.082525","-5","1" +"05450","Enosburg Falls","VT","44.885689","-72.78992","-5","1" +"05451","Essex","VT","44.50835","-73.050271","-5","1" +"05452","Essex Junction","VT","44.501991","-73.09376","-5","1" +"05453","Essex Junction","VT","44.442117","-73.082525","-5","1" +"05454","Fairfax","VT","44.693805","-73.04099","-5","1" +"05455","Fairfield","VT","44.801734","-72.96213","-5","1" +"05456","Ferrisburg","VT","44.204926","-73.25143","-5","1" +"05457","Franklin","VT","44.961552","-72.89351","-5","1" +"05458","Grand Isle","VT","44.712593","-73.30526","-5","1" +"05459","Highgate Center","VT","44.941617","-73.03056","-5","1" +"05460","Highgate Springs","VT","44.974765","-73.105205","-5","1" +"05461","Hinesburg","VT","44.332217","-73.09254","-5","1" +"05462","Huntington","VT","44.304004","-72.97999","-5","1" +"05463","Isle La Motte","VT","44.866344","-73.33081","-5","1" +"05464","Jeffersonville","VT","44.636283","-72.82257","-5","1" +"05465","Jericho","VT","44.486113","-72.96317","-5","1" +"05466","Jonesville","VT","44.362504","-73.019801","-5","1" +"05468","Milton","VT","44.641974","-73.13469","-5","1" +"05469","Monkton","VT","44.240375","-73.134702","-5","1" +"05470","Montgomery","VT","44.824855","-72.895849","-5","1" +"05471","Montgomery Center","VT","44.874895","-72.58798","-5","1" +"05472","New Haven","VT","44.121825","-73.166","-5","1" +"05473","North Ferrisburg","VT","44.255574","-73.22253","-5","1" +"05474","North Hero","VT","44.831101","-73.27354","-5","1" +"05476","Richford","VT","44.970417","-72.66316","-5","1" +"05477","Richmond","VT","44.392443","-72.95936","-5","1" +"05478","Saint Albans","VT","44.807555","-73.09077","-5","1" +"05479","Saint Albans","VT","44.824855","-72.895849","-5","1" +"05481","Saint Albans Bay","VT","44.824855","-72.895849","-5","1" +"05482","Shelburne","VT","44.388556","-73.22318","-5","1" +"05483","Sheldon","VT","44.884125","-72.9751","-5","1" +"05485","Sheldon Springs","VT","44.905573","-72.963154","-5","1" +"05486","South Hero","VT","44.645192","-73.31452","-5","1" +"05487","Starksboro","VT","44.224103","-73.03164","-5","1" +"05488","Swanton","VT","44.930163","-73.12099","-5","1" +"05489","Underhill","VT","44.546538","-72.92649","-5","1" +"05490","Underhill Center","VT","44.504656","-72.885253","-5","1" +"05491","Vergennes","VT","44.12753","-73.28437","-5","1" +"05492","Waterville","VT","44.708468","-72.7585","-5","1" +"05494","Westford","VT","44.608283","-73.00979","-5","1" +"05495","Williston","VT","44.44524","-73.09917","-5","1" +"05501","Andover","MA","42.647191","-71.184202","-5","1" +"05544","Andover","MA","42.647191","-71.184202","-5","1" +"05601","Montpelier","VT","44.19906","-72.559638","-5","1" +"05602","Montpelier","VT","44.265633","-72.59686","-5","1" +"05603","Montpelier","VT","44.156554","-72.655892","-5","1" +"05604","Montpelier","VT","44.259518","-72.585018","-5","1" +"05609","Montpelier","VT","44.259518","-72.585018","-5","1" +"05620","Montpelier","VT","44.259518","-72.585018","-5","1" +"05626","Waterbury","VT","44.352339","-72.779614","-5","1" +"05633","Montpelier","VT","44.259518","-72.585018","-5","1" +"05640","Adamant","VT","44.354296","-72.49053","-5","1" +"05641","Barre","VT","44.194307","-72.49443","-5","1" +"05647","Cabot","VT","44.414576","-72.28652","-5","1" +"05648","Calais","VT","44.375726","-72.49509","-5","1" +"05649","East Barre","VT","44.152477","-72.43328","-5","1" +"05650","East Calais","VT","44.403899","-72.44328","-5","1" +"05651","East Montpelier","VT","44.282269","-72.48983","-5","1" +"05652","Eden","VT","44.715079","-72.5717","-5","1" +"05653","Eden Mills","VT","44.711083","-72.50846","-5","1" +"05654","Graniteville","VT","44.140716","-72.47675","-5","1" +"05655","Hyde Park","VT","44.610931","-72.59971","-5","1" +"05656","Johnson","VT","44.645219","-72.67941","-5","1" +"05657","Lake Elmore","VT","44.541415","-72.52693","-5","1" +"05658","Marshfield","VT","44.353823","-72.34925","-5","1" +"05660","Moretown","VT","44.248198","-72.78525","-5","1" +"05661","Morrisville","VT","44.549391","-72.60332","-5","1" +"05662","Moscow","VT","44.442001","-72.718759","-5","1" +"05663","Northfield","VT","44.141056","-72.66443","-5","1" +"05664","Northfield Falls","VT","44.171238","-72.64976","-5","1" +"05665","North Hyde Park","VT","44.67307","-72.597057","-5","1" +"05666","North Montpelier","VT","44.33865","-72.44382","-5","1" +"05667","Plainfield","VT","44.295577","-72.42365","-5","1" +"05669","Roxbury","VT","44.062311","-72.74364","-5","1" +"05670","South Barre","VT","44.175744","-72.50247","-5","1" +"05671","Waterbury","VT","44.259518","-72.585018","-5","1" +"05672","Stowe","VT","44.475387","-72.70225","-5","1" +"05673","Waitsfield","VT","44.184704","-72.8367","-5","1" +"05674","Warren","VT","44.106922","-72.85816","-5","1" +"05675","Washington","VT","44.083457","-72.422","-5","1" +"05676","Waterbury","VT","44.348486","-72.77081","-5","1" +"05677","Waterbury Center","VT","44.375144","-72.71362","-5","1" +"05678","Websterville","VT","44.158979","-72.46942","-5","1" +"05679","Williamstown","VT","44.109793","-72.54155","-5","1" +"05680","Wolcott","VT","44.551056","-72.4739","-5","1" +"05681","Woodbury","VT","44.457481","-72.40659","-5","1" +"05682","Worcester","VT","44.383559","-72.55088","-5","1" +"05701","Rutland","VT","43.617302","-72.96325","-5","1" +"05702","Rutland","VT","43.412792","-72.990632","-5","1" +"05730","Belmont","VT","43.416666","-72.83445","-5","1" +"05731","Benson","VT","43.687677","-73.291868","-5","1" +"05732","Bomoseen","VT","43.644208","-73.20284","-5","1" +"05733","Brandon","VT","43.810371","-73.09998","-5","1" +"05734","Bridport","VT","43.987529","-73.35144","-5","1" +"05735","Castleton","VT","43.640503","-73.16118","-5","1" +"05736","Center Rutland","VT","43.602211","-73.01298","-5","1" +"05737","Chittenden","VT","43.735819","-72.93145","-5","1" +"05738","Cuttingsville","VT","43.507854","-72.8642","-5","1" +"05739","Danby","VT","43.341177","-73.01602","-5","1" +"05740","East Middlebury","VT","43.97153","-73.091416","-5","1" +"05741","East Poultney","VT","43.592039","-72.818121","-5","1" +"05742","East Wallingford","VT","43.441404","-72.88507","-5","1" +"05743","Fair Haven","VT","43.666758","-73.2857","-5","1" +"05744","Florence","VT","43.68805","-73.06783","-5","1" +"05745","Forest Dale","VT","43.592039","-72.818121","-5","1" +"05746","Gaysville","VT","43.785433","-72.71366","-5","1" +"05747","Granville","VT","43.999811","-72.83927","-5","1" +"05748","Hancock","VT","43.926595","-72.87143","-5","1" +"05750","Hydeville","VT","43.619787","-73.23273","-5","1" +"05751","Killington","VT","43.659839","-72.79419","-5","1" +"05752","Poultney","VT","43.225264","-73.141318","-5","1" +"05753","Middlebury","VT","44.006024","-73.172","-5","1" +"05757","Middletown Springs","VT","43.477827","-73.12311","-5","1" +"05758","Mount Holly","VT","43.452914","-72.79647","-5","1" +"05759","North Clarendon","VT","43.553904","-72.96168","-5","1" +"05760","Orwell","VT","43.801501","-73.2869","-5","1" +"05761","Pawlet","VT","43.357161","-73.13467","-5","1" +"05762","Pittsfield","VT","43.768578","-72.83138","-5","1" +"05763","Pittsford","VT","43.719898","-73.00087","-5","1" +"05764","Poultney","VT","43.521021","-73.21603","-5","1" +"05765","Proctor","VT","43.657716","-73.0328","-5","1" +"05766","Ripton","VT","43.981681","-73.0155","-5","1" +"05767","Rochester","VT","43.876046","-72.81212","-5","1" +"05768","Rupert","VT","43.026984","-73.055156","-5","1" +"05769","Salisbury","VT","43.914026","-73.10703","-5","1" +"05770","Shoreham","VT","43.892373","-73.31583","-5","1" +"05772","Stockbridge","VT","43.761779","-72.73703","-5","1" +"05773","Wallingford","VT","43.444268","-72.98732","-5","1" +"05774","Wells","VT","43.43357","-73.19578","-5","1" +"05775","West Pawlet","VT","43.365073","-73.23612","-5","1" +"05776","West Rupert","VT","43.235771","-73.2489","-5","1" +"05777","West Rutland","VT","43.574326","-73.04215","-5","1" +"05778","Whiting","VT","43.864419","-73.21148","-5","1" +"05801","White River Junction","VT","43.898246","-72.183633","-5","1" +"05819","Saint Johnsbury","VT","44.412413","-72.00996","-5","1" +"05820","Albany","VT","44.733624","-72.38308","-5","1" +"05821","Barnet","VT","44.311706","-72.10346","-5","1" +"05822","Barton","VT","44.750509","-72.16376","-5","1" +"05823","Beebe Plain","VT","45.005783","-72.138347","-5","1" +"05824","Concord","VT","44.428537","-71.87212","-5","1" +"05825","Coventry","VT","44.863351","-72.26649","-5","1" +"05826","Craftsbury","VT","44.647068","-72.3887","-5","1" +"05827","Craftsbury Common","VT","44.678879","-72.35975","-5","1" +"05828","Danville","VT","44.424043","-72.12808","-5","1" +"05829","Derby","VT","44.945925","-72.09864","-5","1" +"05830","Derby Line","VT","44.985004","-72.05857","-5","1" +"05832","East Burke","VT","44.588911","-71.92705","-5","1" +"05833","East Charleston","VT","44.82446","-71.969","-5","1" +"05836","East Hardwick","VT","44.529915","-72.26819","-5","1" +"05837","East Haven","VT","44.643171","-71.86394","-5","1" +"05838","East Saint Johnsbury","VT","44.468494","-71.930077","-5","1" +"05839","Glover","VT","44.684488","-72.20936","-5","1" +"05840","Granby","VT","44.612521","-71.71536","-5","1" +"05841","Greensboro","VT","44.599177","-72.31179","-5","1" +"05842","Greensboro Bend","VT","44.574196","-72.24333","-5","1" +"05843","Hardwick","VT","44.504593","-72.35822","-5","1" +"05845","Irasburg","VT","44.800462","-72.28964","-5","1" +"05846","Island Pond","VT","44.803005","-71.84683","-5","1" +"05847","Lowell","VT","44.799008","-72.45025","-5","1" +"05848","Lower Waterford","VT","44.382103","-71.919518","-5","1" +"05849","Lyndon","VT","44.497557","-71.950519","-5","1" +"05850","Lyndon Center","VT","44.481915","-71.988258","-5","1" +"05851","Lyndonville","VT","44.541352","-72.02686","-5","1" +"05852","Newport","VT","44.951093","-72.303696","-5","1" +"05853","Morgan","VT","44.881758","-71.96653","-5","1" +"05855","Newport","VT","44.936237","-72.19921","-5","1" +"05857","Newport Center","VT","44.944231","-72.30054","-5","1" +"05858","North Concord","VT","44.498374","-71.83773","-5","1" +"05859","North Troy","VT","44.963802","-72.41782","-5","1" +"05860","Orleans","VT","44.815511","-72.15478","-5","1" +"05861","Passumpsic","VT","44.46239","-72.135804","-5","1" +"05862","Peacham","VT","44.46239","-72.135804","-5","1" +"05863","Saint Johnsbury Center","VT","44.503403","-71.972088","-5","1" +"05864","Stannard","VT","44.562138","-72.244107","-5","1" +"05866","Sheffield","VT","44.632918","-72.13245","-5","1" +"05867","Sutton","VT","44.653046","-72.04372","-5","1" +"05868","Troy","VT","44.902837","-72.408","-5","1" +"05871","West Burke","VT","44.673586","-71.95414","-5","1" +"05872","West Charleston","VT","44.865723","-72.04647","-5","1" +"05873","West Danville","VT","44.411321","-72.2123","-5","1" +"05874","Westfield","VT","44.876447","-72.42902","-5","1" +"05875","West Glover","VT","44.722453","-72.25602","-5","1" +"05892","Derby","VT","44.91454","-72.112619","-5","1" +"05901","Averill","VT","44.680771","-71.719436","-5","1" +"05902","Beecher Falls","VT","45.008398","-71.50628","-5","1" +"05903","Canaan","VT","44.972508","-71.59275","-5","1" +"05904","Gilman","VT","44.413715","-71.70906","-5","1" +"05905","Guildhall","VT","44.682269","-71.66238","-5","1" +"05906","Lunenburg","VT","44.458803","-71.7162","-5","1" +"05907","Norton","VT","44.959647","-71.81134","-5","1" +"05928","Derby Center","VT","44.95282","-72.135369","-5","1" +"05958","Mount Holly","VT","43.476669","-72.821555","-5","1" +"06001","Avon","CT","41.789698","-72.86431","-5","1" +"06002","Bloomfield","CT","41.832798","-72.72642","-5","1" +"06006","Windsor","CT","41.879637","-72.734271","-5","1" +"06010","Bristol","CT","41.682249","-72.93365","-5","1" +"06011","Bristol","CT","41.791776","-72.718832","-5","1" +"06013","Burlington","CT","41.758415","-72.94642","-5","1" +"06016","Broad Brook","CT","41.909097","-72.54393","-5","1" +"06018","Canaan","CT","42.02351","-73.31103","-5","1" +"06019","Canton","CT","41.834247","-72.89174","-5","1" +"06020","Canton Center","CT","41.864597","-72.91003","-5","1" +"06021","Colebrook","CT","42.027797","-73.11835","-5","1" +"06022","Collinsville","CT","41.832842","-72.92526","-5","1" +"06023","East Berlin","CT","41.612748","-72.72017","-5","1" +"06024","East Canaan","CT","42.010733","-73.26877","-5","1" +"06025","East Glastonbury","CT","41.688896","-72.534482","-5","1" +"06026","East Granby","CT","41.935501","-72.72718","-5","1" +"06027","East Hartland","CT","42.002345","-72.90922","-5","1" +"06028","East Windsor Hill","CT","41.859248","-72.603033","-5","1" +"06029","Ellington","CT","41.909147","-72.45026","-5","1" +"06030","Farmington","CT","41.791776","-72.718832","-5","1" +"06031","Falls Village","CT","41.948694","-73.3296","-5","1" +"06032","Farmington","CT","41.725195","-72.83032","-5","1" +"06033","Glastonbury","CT","41.707932","-72.57085","-5","1" +"06034","Farmington","CT","41.791776","-72.718832","-5","1" +"06035","Granby","CT","41.959713","-72.79826","-5","1" +"06037","Kensington","CT","41.619048","-72.76734","-5","1" +"06039","Lakeville","CT","41.951783","-73.43722","-5","1" +"06040","Manchester","CT","41.778888","-72.52384","-5","1" +"06041","Manchester","CT","41.794681","-72.564832","-5","1" +"06043","Bolton","CT","41.771265","-72.43669","-5","1" +"06045","Manchester","CT","41.791776","-72.718832","-5","1" +"06049","Melrose","CT","41.791776","-72.718832","-5","1" +"06050","New Britain","CT","41.666049","-72.778391","-5","1" +"06051","New Britain","CT","41.666249","-72.76996","-5","1" +"06052","New Britain","CT","41.659099","-72.80129","-5","1" +"06053","New Britain","CT","41.686949","-72.7908","-5","1" +"06057","New Hartford","CT","41.852712","-73.00492","-5","1" +"06058","Norfolk","CT","41.986861","-73.19437","-5","1" +"06059","North Canton","CT","41.937513","-72.92017","-5","1" +"06060","North Granby","CT","42.012195","-72.8445","-5","1" +"06061","Pine Meadow","CT","41.874382","-72.967958","-5","1" +"06062","Plainville","CT","41.671548","-72.86294","-5","1" +"06063","Pleasant Valley","CT","41.926696","-72.96783","-5","1" +"06064","Poquonock","CT","41.791776","-72.718832","-5","1" +"06065","Riverton","CT","41.961127","-73.01859","-5","1" +"06066","Vernon Rockville","CT","41.841615","-72.46708","-5","1" +"06067","Rocky Hill","CT","41.660949","-72.66098","-5","1" +"06068","Salisbury","CT","42.014673","-73.42408","-5","1" +"06069","Sharon","CT","41.866222","-73.46331","-5","1" +"06070","Simsbury","CT","41.874064","-72.81644","-5","1" +"06071","Somers","CT","41.995851","-72.45336","-5","1" +"06072","Somersville","CT","41.976466","-72.490593","-5","1" +"06073","South Glastonbury","CT","41.660899","-72.56887","-5","1" +"06074","South Windsor","CT","41.836665","-72.56076","-5","1" +"06075","Stafford","CT","41.81152","-72.308779","-5","1" +"06076","Stafford Springs","CT","41.979871","-72.27863","-5","1" +"06077","Staffordville","CT","41.991645","-72.257735","-5","1" +"06078","Suffield","CT","41.985946","-72.63897","-5","1" +"06079","Taconic","CT","42.032012","-73.403763","-5","1" +"06080","Suffield","CT","41.948597","-72.628802","-5","1" +"06081","Tariffville","CT","41.907114","-72.76831","-5","1" +"06082","Enfield","CT","41.987238","-72.56365","-5","1" +"06083","Enfield","CT","41.791776","-72.718832","-5","1" +"06084","Tolland","CT","41.87688","-72.36806","-5","1" +"06085","Unionville","CT","41.749832","-72.8898","-5","1" +"06087","Unionville","CT","41.757616","-72.884953","-5","1" +"06088","East Windsor","CT","41.908464","-72.60547","-5","1" +"06089","Weatogue","CT","41.839731","-72.81974","-5","1" +"06090","West Granby","CT","41.953596","-72.85242","-5","1" +"06091","West Hartland","CT","42.002748","-72.98906","-5","1" +"06092","West Simsbury","CT","41.861297","-72.86055","-5","1" +"06093","West Suffield","CT","42.019907","-72.73357","-5","1" +"06094","Winchester Center","CT","41.896321","-73.146312","-5","1" +"06095","Windsor","CT","41.857303","-72.66654","-5","1" +"06096","Windsor Locks","CT","41.926997","-72.64688","-5","1" +"06098","Winsted","CT","41.925967","-73.06944","-5","1" +"06101","Hartford","CT","41.78007","-72.677099","-5","1" +"06102","Hartford","CT","41.791776","-72.718832","-5","1" +"06103","Hartford","CT","41.767049","-72.67433","-5","1" +"06104","Hartford","CT","41.791776","-72.718832","-5","1" +"06105","Hartford","CT","41.771166","-72.70255","-5","1" +"06106","Hartford","CT","41.7469","-72.69593","-5","1" +"06107","W Hartford","CT","41.75275","-72.7546","-5","1" +"06108","East Hartford","CT","41.778316","-72.62313","-5","1" +"06109","Wethersfield","CT","41.702049","-72.6747","-5","1" +"06110","W Hartford","CT","41.7313","-72.73374","-5","1" +"06111","Newington","CT","41.688899","-72.73101","-5","1" +"06112","Hartford","CT","41.793299","-72.6954","-5","1" +"06114","Hartford","CT","41.7387","-72.67889","-5","1" +"06115","Hartford","CT","41.758849","-72.679387","-5","1" +"06117","W Hartford","CT","41.791399","-72.74853","-5","1" +"06118","East Hartford","CT","41.745349","-72.60807","-5","1" +"06119","W Hartford","CT","41.76255","-72.72839","-5","1" +"06120","Hartford","CT","41.784794","-72.67378","-5","1" +"06123","Hartford","CT","41.791776","-72.718832","-5","1" +"06126","Hartford","CT","41.791776","-72.718832","-5","1" +"06127","W Hartford","CT","41.791776","-72.718832","-5","1" +"06128","East Hartford","CT","41.791776","-72.718832","-5","1" +"06129","Wethersfield","CT","41.791776","-72.718832","-5","1" +"06131","Newington","CT","41.791776","-72.718832","-5","1" +"06132","Hartford","CT","41.791776","-72.718832","-5","1" +"06133","W Hartford","CT","41.791776","-72.718832","-5","1" +"06134","Hartford","CT","41.791776","-72.718832","-5","1" +"06137","W Hartford","CT","41.791776","-72.718832","-5","1" +"06138","East Hartford","CT","41.791776","-72.718832","-5","1" +"06140","Hartford","CT","41.791776","-72.718832","-5","1" +"06141","Hartford","CT","41.791776","-72.718832","-5","1" +"06142","Hartford","CT","41.791776","-72.718832","-5","1" +"06143","Hartford","CT","41.791776","-72.718832","-5","1" +"06144","Hartford","CT","41.791776","-72.718832","-5","1" +"06145","Hartford","CT","41.791776","-72.718832","-5","1" +"06146","Hartford","CT","41.791776","-72.718832","-5","1" +"06147","Hartford","CT","41.791776","-72.718832","-5","1" +"06150","Hartford","CT","41.791776","-72.718832","-5","1" +"06151","Hartford","CT","41.791776","-72.718832","-5","1" +"06152","Hartford","CT","41.791776","-72.718832","-5","1" +"06153","Hartford","CT","41.791776","-72.718832","-5","1" +"06154","Hartford","CT","41.771499","-72.686687","-5","1" +"06155","Hartford","CT","41.76928","-72.686465","-5","1" +"06156","Hartford","CT","41.767949","-72.690687","-5","1" +"06160","Hartford","CT","41.766499","-72.693337","-5","1" +"06161","Hartford","CT","41.766049","-72.671837","-5","1" +"06167","Hartford","CT","41.791776","-72.718832","-5","1" +"06176","Hartford","CT","41.791776","-72.718832","-5","1" +"06180","Hartford","CT","41.791776","-72.718832","-5","1" +"06183","Hartford","CT","41.763849","-72.673037","-5","1" +"06199","Hartford","CT","41.927447","-72.680386","-5","1" +"06226","Willimantic","CT","41.714867","-72.20934","-5","1" +"06230","Abington","CT","41.847302","-72.02528","-5","1" +"06231","Amston","CT","41.629818","-72.36419","-5","1" +"06232","Andover","CT","41.737015","-72.37151","-5","1" +"06233","Ballouville","CT","41.831565","-72.020137","-5","1" +"06234","Brooklyn","CT","41.782474","-71.95989","-5","1" +"06235","Chaplin","CT","41.809166","-72.11274","-5","1" +"06237","Columbia","CT","41.702777","-72.29349","-5","1" +"06238","Coventry","CT","41.778651","-72.33137","-5","1" +"06239","Danielson","CT","41.799111","-71.87594","-5","1" +"06241","Dayville","CT","41.850225","-71.85749","-5","1" +"06242","Eastford","CT","41.90913","-72.09527","-5","1" +"06243","East Killingly","CT","41.844885","-71.818941","-5","1" +"06244","East Woodstock","CT","41.984327","-71.981045","-5","1" +"06245","Fabyan","CT","42.019776","-71.941669","-5","1" +"06246","Grosvenor Dale","CT","41.971116","-71.891732","-5","1" +"06247","Hampton","CT","41.767929","-72.06127","-5","1" +"06248","Hebron","CT","41.683399","-72.40144","-5","1" +"06249","Lebanon","CT","41.618403","-72.24215","-5","1" +"06250","Mansfield Center","CT","41.768455","-72.20007","-5","1" +"06251","Mansfield Depot","CT","41.799326","-72.306526","-5","1" +"06254","North Franklin","CT","41.609066","-72.14439","-5","1" +"06255","North Grosvenordale","CT","41.989579","-71.89659","-5","1" +"06256","North Windham","CT","41.758713","-72.13964","-5","1" +"06258","Pomfret","CT","41.889048","-71.968232","-5","1" +"06259","Pomfret Center","CT","41.876565","-71.98252","-5","1" +"06260","Putnam","CT","41.913816","-71.88434","-5","1" +"06262","Quinebaug","CT","42.022904","-71.94671","-5","1" +"06263","Rogers","CT","41.839051","-71.90634","-5","1" +"06264","Scotland","CT","41.693435","-72.09891","-5","1" +"06265","South Willington","CT","41.81152","-72.308779","-5","1" +"06266","South Windham","CT","41.670349","-72.16028","-5","1" +"06267","South Woodstock","CT","41.943902","-71.945253","-5","1" +"06268","Storrs Mansfield","CT","41.806041","-72.26127","-5","1" +"06269","Storrs Mansfield","CT","41.80743","-72.25025","-5","1" +"06277","Thompson","CT","41.972782","-71.83969","-5","1" +"06278","Ashford","CT","41.895108","-72.17674","-5","1" +"06279","Willington","CT","41.896875","-72.27456","-5","1" +"06280","Windham","CT","41.697765","-72.14671","-5","1" +"06281","Woodstock","CT","41.971403","-71.99872","-5","1" +"06282","Woodstock Valley","CT","41.943199","-72.0728","-5","1" +"06320","New London","CT","41.352498","-72.10338","-5","1" +"06330","Baltic","CT","41.634556","-72.06549","-5","1" +"06331","Canterbury","CT","41.697123","-72.0029","-5","1" +"06332","Central Village","CT","41.725694","-71.909019","-5","1" +"06333","East Lyme","CT","41.371913","-72.2269","-5","1" +"06334","Bozrah","CT","41.543559","-72.17684","-5","1" +"06335","Gales Ferry","CT","41.426775","-72.07227","-5","1" +"06336","Gilman","CT","41.577198","-72.20036","-5","1" +"06337","Glasgo","CT","41.559873","-71.889199","-5","1" +"06339","Ledyard","CT","41.449482","-71.98233","-5","1" +"06340","Groton","CT","41.345331","-72.04524","-5","1" +"06349","Groton","CT","41.39973","-72.090357","-5","1" +"06350","Hanover","CT","41.644546","-72.06769","-5","1" +"06351","Jewett City","CT","41.604341","-71.97599","-5","1" +"06353","Montville","CT","41.452548","-72.137471","-5","1" +"06354","Moosup","CT","41.71836","-71.87098","-5","1" +"06355","Mystic","CT","41.360798","-71.97281","-5","1" +"06357","Niantic","CT","41.319649","-72.21064","-5","1" +"06359","North Stonington","CT","41.456189","-71.86813","-5","1" +"06360","Norwich","CT","41.533848","-72.06232","-5","1" +"06365","Preston","CT","41.509586","-71.96621","-5","1" +"06370","Oakdale","CT","41.464274","-72.19551","-5","1" +"06371","Old Lyme","CT","41.339421","-72.31008","-5","1" +"06372","Old Mystic","CT","41.388216","-71.949548","-5","1" +"06373","Oneco","CT","41.678897","-71.79952","-5","1" +"06374","Plainfield","CT","41.684777","-71.91911","-5","1" +"06375","Quaker Hill","CT","41.401398","-72.11444","-5","1" +"06376","South Lyme","CT","41.294797","-72.25602","-5","1" +"06377","Sterling","CT","41.730575","-71.81845","-5","1" +"06378","Stonington","CT","41.351307","-71.91317","-5","1" +"06379","Pawcatuck","CT","41.375701","-71.84876","-5","1" +"06380","Taftville","CT","41.566298","-72.05148","-5","1" +"06382","Uncasville","CT","41.457198","-72.11459","-5","1" +"06383","Versailles","CT","41.601648","-72.04037","-5","1" +"06384","Voluntown","CT","41.5787","-71.85668","-5","1" +"06385","Waterford","CT","41.347948","-72.14762","-5","1" +"06386","Waterford","CT","41.464758","-72.127301","-5","1" +"06387","Wauregan","CT","41.744527","-71.913339","-5","1" +"06388","West Mystic","CT","41.344098","-71.976467","-5","1" +"06389","Yantic","CT","41.559648","-72.122672","-5","1" +"06390","Fishers Island","NY","41.261936","-72.00708","-5","1" +"06401","Ansonia","CT","41.34269","-73.07446","-5","1" +"06403","Beacon Falls","CT","41.432936","-73.06453","-5","1" +"06404","Botsford","CT","41.165097","-73.129186","-5","1" +"06405","Branford","CT","41.277763","-72.80542","-5","1" +"06408","Cheshire","CT","41.365709","-72.927507","-5","1" +"06409","Centerbrook","CT","41.353453","-72.41604","-5","1" +"06410","Cheshire","CT","41.507049","-72.90489","-5","1" +"06411","Cheshire","CT","41.550097","-72.922235","-5","1" +"06412","Chester","CT","41.408775","-72.47213","-5","1" +"06413","Clinton","CT","41.288599","-72.52728","-5","1" +"06414","Cobalt","CT","41.566668","-72.558055","-5","1" +"06415","Colchester","CT","41.56033","-72.33795","-5","1" +"06416","Cromwell","CT","41.612046","-72.66998","-5","1" +"06417","Deep River","CT","41.37934","-72.44578","-5","1" +"06418","Derby","CT","41.323005","-73.08433","-5","1" +"06419","Killingworth","CT","41.380594","-72.57637","-5","1" +"06420","Salem","CT","41.485469","-72.25445","-5","1" +"06422","Durham","CT","41.461639","-72.68733","-5","1" +"06423","East Haddam","CT","41.468451","-72.40615","-5","1" +"06424","East Hampton","CT","41.573008","-72.5078","-5","1" +"06426","Essex","CT","41.351598","-72.39787","-5","1" +"06430","Fairfield","CT","41.163445","-73.2629","-5","1" +"06431","Fairfield","CT","41.219093","-73.252696","-5","1" +"06432","Fairfield","CT","41.189646","-73.23576","-5","1" +"06436","Greens Farms","CT","41.308873","-73.363661","-5","1" +"06437","Guilford","CT","41.31353","-72.69791","-5","1" +"06438","Haddam","CT","41.45307","-72.50345","-5","1" +"06439","Hadlyme","CT","41.421198","-72.414095","-5","1" +"06440","Hawleyville","CT","41.308873","-73.363661","-5","1" +"06441","Higganum","CT","41.468654","-72.57956","-5","1" +"06442","Ivoryton","CT","41.345099","-72.44392","-5","1" +"06443","Madison","CT","41.298648","-72.60938","-5","1" +"06444","Marion","CT","41.791776","-72.718832","-5","1" +"06447","Marlborough","CT","41.637066","-72.46252","-5","1" +"06450","Meriden","CT","41.532048","-72.78145","-5","1" +"06451","Meriden","CT","41.536048","-72.81973","-5","1" +"06454","Meriden","CT","41.365709","-72.927507","-5","1" +"06455","Middlefield","CT","41.514383","-72.7183","-5","1" +"06456","Middle Haddam","CT","41.538017","-72.525208","-5","1" +"06457","Middletown","CT","41.553672","-72.6632","-5","1" +"06459","Middletown","CT","41.556463","-72.658179","-5","1" +"06460","Milford","CT","41.21953","-73.0554","-5","1" +"06467","Milldale","CT","41.565697","-72.903746","-5","1" +"06468","Monroe","CT","41.336046","-73.22241","-5","1" +"06469","Moodus","CT","41.506499","-72.44479","-5","1" +"06470","Newtown","CT","41.398462","-73.31474","-5","1" +"06471","North Branford","CT","41.332197","-72.77214","-5","1" +"06472","Northford","CT","41.399873","-72.77975","-5","1" +"06473","North Haven","CT","41.378447","-72.85897","-5","1" +"06474","North Westchester","CT","41.464758","-72.127301","-5","1" +"06475","Old Saybrook","CT","41.289348","-72.38285","-5","1" +"06477","Orange","CT","41.279547","-73.02541","-5","1" +"06478","Oxford","CT","41.428163","-73.12729","-5","1" +"06479","Plantsville","CT","41.575847","-72.89696","-5","1" +"06480","Portland","CT","41.588297","-72.60384","-5","1" +"06481","Rockfall","CT","41.536643","-72.69782","-5","1" +"06482","Sandy Hook","CT","41.411536","-73.24888","-5","1" +"06483","Seymour","CT","41.386584","-73.0792","-5","1" +"06484","Shelton","CT","41.306396","-73.1292","-5","1" +"06487","South Britain","CT","41.365709","-72.927507","-5","1" +"06488","Southbury","CT","41.475263","-73.22184","-5","1" +"06489","Southington","CT","41.612298","-72.87103","-5","1" +"06490","Southport","CT","41.140646","-73.28791","-5","1" +"06491","Stevenson","CT","41.386646","-73.187207","-5","1" +"06492","Wallingford","CT","41.457711","-72.81704","-5","1" +"06493","Wallingford","CT","41.365709","-72.927507","-5","1" +"06494","Wallingford","CT","41.365709","-72.927507","-5","1" +"06497","Stratford","CT","41.207146","-73.130503","-5","1" +"06498","Westbrook","CT","41.289499","-72.46087","-5","1" +"06501","New Haven","CT","41.365709","-72.927507","-5","1" +"06502","New Haven","CT","41.365709","-72.927507","-5","1" +"06503","New Haven","CT","41.365709","-72.927507","-5","1" +"06504","New Haven","CT","41.304697","-72.93561","-5","1" +"06505","New Haven","CT","41.305721","-72.779901","-5","1" +"06506","New Haven","CT","41.365709","-72.927507","-5","1" +"06507","New Haven","CT","41.365709","-72.927507","-5","1" +"06508","New Haven","CT","41.365709","-72.927507","-5","1" +"06509","New Haven","CT","41.365709","-72.927507","-5","1" +"06510","New Haven","CT","41.306197","-72.92479","-5","1" +"06511","New Haven","CT","41.317197","-72.92798","-5","1" +"06512","East Haven","CT","41.276497","-72.87412","-5","1" +"06513","New Haven","CT","41.315797","-72.8803","-5","1" +"06514","Hamden","CT","41.357947","-72.93765","-5","1" +"06515","New Haven","CT","41.327997","-72.96902","-5","1" +"06516","West Haven","CT","41.272147","-72.96496","-5","1" +"06517","Hamden","CT","41.348297","-72.90712","-5","1" +"06518","Hamden","CT","41.413114","-72.90409","-5","1" +"06519","New Haven","CT","41.295197","-72.93673","-5","1" +"06520","New Haven","CT","41.365709","-72.927507","-5","1" +"06521","New Haven","CT","41.365709","-72.927507","-5","1" +"06524","Bethany","CT","41.417896","-73.00356","-5","1" +"06525","Woodbridge","CT","41.352964","-73.01212","-5","1" +"06530","New Haven","CT","41.365709","-72.927507","-5","1" +"06531","New Haven","CT","41.365709","-72.927507","-5","1" +"06532","New Haven","CT","41.365709","-72.927507","-5","1" +"06533","New Haven","CT","41.365709","-72.927507","-5","1" +"06534","New Haven","CT","41.365709","-72.927507","-5","1" +"06535","New Haven","CT","41.365709","-72.927507","-5","1" +"06536","New Haven","CT","41.365709","-72.927507","-5","1" +"06537","New Haven","CT","41.365709","-72.927507","-5","1" +"06538","New Haven","CT","41.365709","-72.927507","-5","1" +"06540","New Haven","CT","41.299647","-72.918846","-5","1" +"06601","Bridgeport","CT","41.308873","-73.363661","-5","1" +"06602","Bridgeport","CT","41.179846","-73.189006","-5","1" +"06604","Bridgeport","CT","41.178696","-73.20004","-5","1" +"06605","Bridgeport","CT","41.163596","-73.21633","-5","1" +"06606","Bridgeport","CT","41.209496","-73.20771","-5","1" +"06607","Bridgeport","CT","41.177646","-73.16649","-5","1" +"06608","Bridgeport","CT","41.188746","-73.1813","-5","1" +"06610","Bridgeport","CT","41.202091","-73.1708","-5","1" +"06611","Trumbull","CT","41.256129","-73.21227","-5","1" +"06612","Easton","CT","41.253946","-73.28842","-5","1" +"06614","Stratford","CT","41.219246","-73.13221","-5","1" +"06615","Stratford","CT","41.175947","-73.13515","-5","1" +"06650","Bridgeport","CT","41.308873","-73.363661","-5","1" +"06673","Bridgeport","CT","41.308873","-73.363661","-5","1" +"06699","Bridgeport","CT","41.308873","-73.363661","-5","1" +"06701","Waterbury","CT","41.365709","-72.927507","-5","1" +"06702","Waterbury","CT","41.555846","-73.0431","-5","1" +"06703","Waterbury","CT","41.365709","-72.927507","-5","1" +"06704","Waterbury","CT","41.57693","-73.03488","-5","1" +"06705","Waterbury","CT","41.54903","-72.99861","-5","1" +"06706","Waterbury","CT","41.537896","-73.02827","-5","1" +"06708","Waterbury","CT","41.551601","-73.06262","-5","1" +"06710","Waterbury","CT","41.569496","-73.04484","-5","1" +"06712","Prospect","CT","41.501856","-72.97799","-5","1" +"06716","Wolcott","CT","41.594785","-72.97889","-5","1" +"06720","Waterbury","CT","41.365709","-72.927507","-5","1" +"06721","Waterbury","CT","41.365709","-72.927507","-5","1" +"06722","Waterbury","CT","41.365709","-72.927507","-5","1" +"06723","Waterbury","CT","41.365709","-72.927507","-5","1" +"06724","Waterbury","CT","41.365709","-72.927507","-5","1" +"06725","Waterbury","CT","41.365709","-72.927507","-5","1" +"06726","Waterbury","CT","41.365709","-72.927507","-5","1" +"06731","Salisbury","CT","41.933257","-73.363028","-5","1" +"06748","Oxford","CT","41.586368","-73.43657","-5","1" +"06749","Waterbury","CT","41.365709","-72.927507","-5","1" +"06750","Bantam","CT","41.721024","-73.24774","-5","1" +"06751","Bethlehem","CT","41.639235","-73.20864","-5","1" +"06752","Bridgewater","CT","41.52599","-73.36092","-5","1" +"06753","Cornwall","CT","41.828067","-73.332345","-5","1" +"06754","Cornwall Bridge","CT","41.786035","-73.35774","-5","1" +"06755","Gaylordsville","CT","41.655998","-73.47692","-5","1" +"06756","Goshen","CT","41.836049","-73.24506","-5","1" +"06757","Kent","CT","41.729239","-73.45553","-5","1" +"06758","Lakeside","CT","41.739889","-73.222981","-5","1" +"06759","Litchfield","CT","41.754255","-73.21268","-5","1" +"06762","Middlebury","CT","41.532992","-73.11555","-5","1" +"06763","Morris","CT","41.693856","-73.21056","-5","1" +"06770","Naugatuck","CT","41.493763","-73.05173","-5","1" +"06776","New Milford","CT","41.581494","-73.41313","-5","1" +"06777","New Preston Marble Dale","CT","41.697487","-73.3435","-5","1" +"06778","Northfield","CT","41.694945","-73.10942","-5","1" +"06779","Oakville","CT","41.592046","-73.08543","-5","1" +"06781","Pequabuck","CT","41.669898","-72.99145","-5","1" +"06782","Plymouth","CT","41.662281","-73.0482","-5","1" +"06783","Roxbury","CT","41.557711","-73.30816","-5","1" +"06784","Sherman","CT","41.566534","-73.4915","-5","1" +"06785","South Kent","CT","41.69971","-73.44024","-5","1" +"06786","Terryville","CT","41.676415","-73.00836","-5","1" +"06787","Thomaston","CT","41.677982","-73.08979","-5","1" +"06790","Torrington","CT","41.820274","-73.11787","-5","1" +"06791","Harwinton","CT","41.754872","-73.06927","-5","1" +"06793","Washington","CT","41.633422","-73.28946","-5","1" +"06794","Washington Depot","CT","41.644096","-73.32437","-5","1" +"06795","Watertown","CT","41.608196","-73.12099","-5","1" +"06796","West Cornwall","CT","41.875075","-73.33673","-5","1" +"06798","Woodbury","CT","41.554112","-73.20539","-5","1" +"06801","Bethel","CT","41.379978","-73.40105","-5","1" +"06804","Brookfield","CT","41.465811","-73.39982","-5","1" +"06807","Cos Cob","CT","41.047627","-73.59508","-5","1" +"06810","Danbury","CT","41.390194","-73.45441","-5","1" +"06811","Danbury","CT","41.425594","-73.47006","-5","1" +"06812","New Fairfield","CT","41.472227","-73.49673","-5","1" +"06813","Danbury","CT","41.308873","-73.363661","-5","1" +"06814","Danbury","CT","41.308873","-73.363661","-5","1" +"06815","Hamden","CT","41.390625","-72.900757","-5","1" +"06816","Danbury","CT","41.308873","-73.363661","-5","1" +"06817","Danbury","CT","41.308873","-73.363661","-5","1" +"06819","Danbury","CT","41.391956","-73.475844","-5","1" +"06820","Darien","CT","41.075663","-73.48294","-5","1" +"06824","Fairfield","CT","41.163879","-73.265744","-5","1" +"06825","Bridgeport","CT","41.191685","-73.238012","-5","1" +"06829","Georgetown","CT","41.25553","-73.427915","-5","1" +"06830","Greenwich","CT","41.03073","-73.62985","-5","1" +"06831","Greenwich","CT","41.061296","-73.65866","-5","1" +"06832","Greenwich","CT","41.308873","-73.363661","-5","1" +"06836","Greenwich","CT","41.308873","-73.363661","-5","1" +"06840","New Canaan","CT","41.150146","-73.49178","-5","1" +"06842","New Canaan","CT","41.147096","-73.495366","-5","1" +"06850","Norwalk","CT","41.124546","-73.43658","-5","1" +"06851","Norwalk","CT","41.134896","-73.4053","-5","1" +"06852","Norwalk","CT","41.308873","-73.363661","-5","1" +"06853","Norwalk","CT","41.066196","-73.43819","-5","1" +"06854","Norwalk","CT","41.092196","-73.42869","-5","1" +"06855","Norwalk","CT","41.100496","-73.39918","-5","1" +"06856","Norwalk","CT","41.111196","-73.420363","-5","1" +"06857","Norwalk","CT","41.308873","-73.363661","-5","1" +"06858","Norwalk","CT","41.110496","-73.416213","-5","1" +"06859","Norwalk","CT","41.308873","-73.363661","-5","1" +"06860","Norwalk","CT","41.308873","-73.363661","-5","1" +"06870","Old Greenwich","CT","41.033347","-73.56804","-5","1" +"06875","Redding Center","CT","41.308873","-73.363661","-5","1" +"06876","Redding Ridge","CT","41.032647","-73.583569","-5","1" +"06877","Ridgefield","CT","41.297911","-73.49178","-5","1" +"06878","Riverside","CT","41.034264","-73.5842","-5","1" +"06879","Ridgefield","CT","41.308873","-73.363661","-5","1" +"06880","Westport","CT","41.140896","-73.35178","-5","1" +"06881","Westport","CT","41.308873","-73.363661","-5","1" +"06883","Weston","CT","41.216454","-73.37308","-5","1" +"06888","Westport","CT","41.308873","-73.363661","-5","1" +"06889","Westport","CT","41.141005","-73.34689","-5","1" +"06890","Fairfield","CT","41.142754","-73.288247","-5","1" +"06896","Redding","CT","41.301007","-73.39857","-5","1" +"06897","Wilton","CT","41.201446","-73.43758","-5","1" +"06901","Stamford","CT","41.051996","-73.53903","-5","1" +"06902","Stamford","CT","41.047996","-73.53688","-5","1" +"06903","Stamford","CT","41.132096","-73.56423","-5","1" +"06904","Stamford","CT","41.308873","-73.363661","-5","1" +"06905","Stamford","CT","41.081396","-73.54506","-5","1" +"06906","Stamford","CT","41.069298","-73.52182","-5","1" +"06907","Stamford","CT","41.096846","-73.52128","-5","1" +"06910","Stamford","CT","41.039147","-73.559118","-5","1" +"06911","Stamford","CT","41.308873","-73.363661","-5","1" +"06912","Stamford","CT","41.308873","-73.363661","-5","1" +"06913","Stamford","CT","41.308873","-73.363661","-5","1" +"06914","Stamford","CT","41.308873","-73.363661","-5","1" +"06920","Stamford","CT","41.308873","-73.363661","-5","1" +"06921","Stamford","CT","41.049866","-73.53796","-5","1" +"06922","Stamford","CT","41.051551","-73.514344","-5","1" +"06925","Stamford","CT","41.308873","-73.363661","-5","1" +"06926","Stamford","CT","41.041197","-73.538567","-5","1" +"06927","Stamford","CT","41.308873","-73.363661","-5","1" +"06928","Stamford","CT","41.308873","-73.363661","-5","1" +"06993","Weston","CT","41.234395","-73.402714","-5","1" +"07001","Avenel","NJ","40.578996","-74.27987","-5","1" +"07002","Bayonne","NJ","40.666552","-74.11768","-5","1" +"07003","Bloomfield","NJ","40.803","-74.18895","-5","1" +"07004","Fairfield","NJ","40.879049","-74.29378","-5","1" +"07005","Boonton","NJ","40.912798","-74.41516","-5","1" +"07006","Caldwell","NJ","40.848999","-74.27917","-5","1" +"07007","Caldwell","NJ","40.79185","-74.245241","-5","1" +"07008","Carteret","NJ","40.582504","-74.22997","-5","1" +"07009","Cedar Grove","NJ","40.855854","-74.22898","-5","1" +"07010","Cliffside Park","NJ","40.82154","-73.98949","-5","1" +"07011","Clifton","NJ","40.879699","-74.14263","-5","1" +"07012","Clifton","NJ","40.847922","-74.1579","-5","1" +"07013","Clifton","NJ","40.868699","-74.17102","-5","1" +"07014","Clifton","NJ","40.834049","-74.13669","-5","1" +"07015","Clifton","NJ","41.011428","-74.304793","-5","1" +"07016","Cranford","NJ","40.656302","-74.30371","-5","1" +"07017","East Orange","NJ","40.770933","-74.20589","-5","1" +"07018","East Orange","NJ","40.75555","-74.21897","-5","1" +"07019","East Orange","NJ","40.79185","-74.245241","-5","1" +"07020","Edgewater","NJ","40.830733","-73.97334","-5","1" +"07021","Essex Fells","NJ","40.827499","-74.28091","-5","1" +"07022","Fairview","NJ","40.816737","-74.00082","-5","1" +"07023","Fanwood","NJ","40.641852","-74.38533","-5","1" +"07024","Fort Lee","NJ","40.849879","-73.97501","-5","1" +"07026","Garfield","NJ","40.879858","-74.10807","-5","1" +"07027","Garwood","NJ","40.650802","-74.32351","-5","1" +"07028","Glen Ridge","NJ","40.80495","-74.2047","-5","1" +"07029","Harrison","NJ","40.745951","-74.15509","-5","1" +"07030","Hoboken","NJ","40.744851","-74.03294","-5","1" +"07031","North Arlington","NJ","40.791895","-74.13254","-5","1" +"07032","Kearny","NJ","40.763051","-74.13718","-5","1" +"07033","Kenilworth","NJ","40.674652","-74.2908","-5","1" +"07034","Lake Hiawatha","NJ","40.881149","-74.38112","-5","1" +"07035","Lincoln Park","NJ","40.923233","-74.29376","-5","1" +"07036","Linden","NJ","40.633953","-74.25339","-5","1" +"07039","Livingston","NJ","40.788733","-74.32134","-5","1" +"07040","Maplewood","NJ","40.728901","-74.26821","-5","1" +"07041","Millburn","NJ","40.724168","-74.29913","-5","1" +"07042","Montclair","NJ","40.81315","-74.21576","-5","1" +"07043","Montclair","NJ","40.844199","-74.20218","-5","1" +"07044","Verona","NJ","40.832449","-74.24227","-5","1" +"07045","Montville","NJ","40.906152","-74.36742","-5","1" +"07046","Mountain Lakes","NJ","40.892021","-74.44022","-5","1" +"07047","North Bergen","NJ","40.7946","-74.01963","-5","1" +"07050","Orange","NJ","40.7683","-74.23603","-5","1" +"07051","Orange","NJ","40.79185","-74.245241","-5","1" +"07052","West Orange","NJ","40.78865","-74.25541","-5","1" +"07054","Parsippany","NJ","40.860149","-74.4171","-5","1" +"07055","Passaic","NJ","40.857384","-74.12899","-5","1" +"07057","Wallington","NJ","40.852931","-74.10925","-5","1" +"07058","Pine Brook","NJ","40.871299","-74.34331","-5","1" +"07059","Warren","NJ","40.633652","-74.5008","-5","1" +"07060","Plainfield","NJ","40.620102","-74.42481","-5","1" +"07061","Plainfield","NJ","40.665651","-74.299692","-5","1" +"07062","Plainfield","NJ","40.631252","-74.40383","-5","1" +"07063","Plainfield","NJ","40.604252","-74.44612","-5","1" +"07064","Port Reading","NJ","40.569504","-74.24774","-5","1" +"07065","Rahway","NJ","40.607103","-74.28099","-5","1" +"07066","Clark","NJ","40.620336","-74.30934","-5","1" +"07067","Colonia","NJ","40.591653","-74.31341","-5","1" +"07068","Roseland","NJ","40.821799","-74.30477","-5","1" +"07069","Watchung","NJ","40.641207","-74.443695","-5","1" +"07070","Rutherford","NJ","40.828922","-74.11064","-5","1" +"07071","Lyndhurst","NJ","40.808416","-74.12111","-5","1" +"07072","Carlstadt","NJ","40.836555","-74.08466","-5","1" +"07073","East Rutherford","NJ","40.830158","-74.09707","-5","1" +"07074","Moonachie","NJ","40.841668","-74.059","-5","1" +"07075","Wood Ridge","NJ","40.847638","-74.08754","-5","1" +"07076","Scotch Plains","NJ","40.637152","-74.37493","-5","1" +"07077","Sewaren","NJ","40.553971","-74.25938","-5","1" +"07078","Short Hills","NJ","40.73915","-74.32749","-5","1" +"07079","South Orange","NJ","40.74765","-74.25881","-5","1" +"07080","South Plainfield","NJ","40.580703","-74.41401","-5","1" +"07081","Springfield","NJ","40.701801","-74.32216","-5","1" +"07082","Towaco","NJ","40.92241","-74.34625","-5","1" +"07083","Union","NJ","40.695401","-74.26933","-5","1" +"07086","Union City","NJ","40.769796","-74.022351","-5","1" +"07087","Union City","NJ","40.767751","-74.0302","-5","1" +"07088","Vauxhall","NJ","40.718401","-74.28416","-5","1" +"07090","Westfield","NJ","40.649202","-74.34567","-5","1" +"07091","Westfield","NJ","40.665651","-74.299692","-5","1" +"07092","Mountainside","NJ","40.680301","-74.35601","-5","1" +"07093","West New York","NJ","40.7895","-74.01223","-5","1" +"07094","Secaucus","NJ","40.7885","-74.06","-5","1" +"07095","Woodbridge","NJ","40.557104","-74.28316","-5","1" +"07096","Secaucus","NJ","40.73276","-74.075485","-5","1" +"07097","Jersey City","NJ","40.73276","-74.075485","-5","1" +"07099","Kearny","NJ","40.73276","-74.075485","-5","1" +"07101","Newark","NJ","40.736101","-74.22509","-5","1" +"07102","Newark","NJ","40.735257","-74.17326","-5","1" +"07103","Newark","NJ","40.738501","-74.19507","-5","1" +"07104","Newark","NJ","40.767702","-74.16831","-5","1" +"07105","Newark","NJ","40.725801","-74.15206","-5","1" +"07106","Newark","NJ","40.742251","-74.23006","-5","1" +"07107","Newark","NJ","40.760667","-74.1879","-5","1" +"07108","Newark","NJ","40.722751","-74.2014","-5","1" +"07109","Belleville","NJ","40.7935","-74.16144","-5","1" +"07110","Nutley","NJ","40.8196","-74.15877","-5","1" +"07111","Irvington","NJ","40.725651","-74.23207","-5","1" +"07112","Newark","NJ","40.711651","-74.21303","-5","1" +"07114","Newark","NJ","40.707553","-74.17883","-5","1" +"07115","Newark","NJ","40.718772","-74.170091","-5","1" +"07175","Newark","NJ","40.79185","-74.245241","-5","1" +"07182","Newark","NJ","40.79185","-74.245241","-5","1" +"07184","Newark","NJ","40.79185","-74.245241","-5","1" +"07188","Newark","NJ","40.79185","-74.245241","-5","1" +"07189","Newark","NJ","40.79185","-74.245241","-5","1" +"07191","Newark","NJ","40.79185","-74.245241","-5","1" +"07192","Newark","NJ","40.79185","-74.245241","-5","1" +"07193","Newark","NJ","40.79185","-74.245241","-5","1" +"07194","Newark","NJ","40.79185","-74.245241","-5","1" +"07195","Newark","NJ","40.79185","-74.245241","-5","1" +"07197","Newark","NJ","40.79185","-74.245241","-5","1" +"07198","Newark","NJ","40.79185","-74.245241","-5","1" +"07199","Newark","NJ","40.79185","-74.245241","-5","1" +"07201","Elizabeth","NJ","40.669502","-74.19889","-5","1" +"07202","Elizabeth","NJ","40.652302","-74.21692","-5","1" +"07203","Roselle","NJ","40.653502","-74.26058","-5","1" +"07204","Roselle Park","NJ","40.665552","-74.26768","-5","1" +"07205","Hillside","NJ","40.695552","-74.22856","-5","1" +"07206","Elizabeth","NJ","40.653189","-74.19158","-5","1" +"07207","Elizabeth","NJ","40.665651","-74.299692","-5","1" +"07208","Elizabeth","NJ","40.673102","-74.22834","-5","1" +"07290","Bernards","NJ","40.664351","-74.573051","-5","1" +"07301","Jersey City","NJ","40.729234","-74.032506","-5","1" +"07302","Jersey City","NJ","40.721602","-74.04703","-5","1" +"07303","Jersey City","NJ","40.73276","-74.075485","-5","1" +"07304","Jersey City","NJ","40.716452","-74.07253","-5","1" +"07305","Jersey City","NJ","40.701302","-74.08843","-5","1" +"07306","Jersey City","NJ","40.733751","-74.06582","-5","1" +"07307","Jersey City","NJ","40.748001","-74.04943","-5","1" +"07308","Jersey City","NJ","40.73276","-74.075485","-5","1" +"07309","Jersey City","NJ","40.73276","-74.075485","-5","1" +"07310","Jersey City","NJ","40.731901","-74.0402","-5","1" +"07311","Jersey City","NJ","40.73235","-74.075391","-5","1" +"07399","Jersey City","NJ","40.73235","-74.075391","-5","1" +"07401","Allendale","NJ","41.031505","-74.13409","-5","1" +"07403","Bloomingdale","NJ","41.014497","-74.33021","-5","1" +"07405","Butler","NJ","40.99313","-74.35893","-5","1" +"07407","Elmwood Park","NJ","40.905639","-74.1199","-5","1" +"07410","Fair Lawn","NJ","40.933943","-74.11671","-5","1" +"07416","Franklin","NJ","41.11736","-74.58784","-5","1" +"07417","Franklin Lakes","NJ","41.010433","-74.20847","-5","1" +"07418","Glenwood","NJ","41.232344","-74.48688","-5","1" +"07419","Hamburg","NJ","41.156187","-74.57094","-5","1" +"07420","Haskell","NJ","41.026747","-74.29742","-5","1" +"07421","Hewitt","NJ","41.173445","-74.37404","-5","1" +"07422","Highland Lakes","NJ","41.180137","-74.45489","-5","1" +"07423","Ho Ho Kus","NJ","41.001695","-74.10239","-5","1" +"07424","Little Falls","NJ","40.886628","-74.21405","-5","1" +"07427","West Paterson","NJ","40.875949","-74.201489","-5","1" +"07428","McAfee","NJ","41.181052","-74.51796","-5","1" +"07430","Mahwah","NJ","41.077102","-74.16147","-5","1" +"07432","Midland Park","NJ","40.99312","-74.14286","-5","1" +"07435","Newfoundland","NJ","41.045897","-74.43677","-5","1" +"07436","Oakland","NJ","41.028884","-74.23727","-5","1" +"07438","Oak Ridge","NJ","41.029555","-74.5071","-5","1" +"07439","Ogdensburg","NJ","41.080066","-74.5972","-5","1" +"07440","Pequannock","NJ","40.946748","-74.29575","-5","1" +"07442","Pompton Lakes","NJ","40.99948","-74.28807","-5","1" +"07444","Pompton Plains","NJ","40.964548","-74.29813","-5","1" +"07446","Ramsey","NJ","41.058819","-74.14238","-5","1" +"07450","Ridgewood","NJ","40.983997","-74.11438","-5","1" +"07451","Ridgewood","NJ","40.948054","-74.083231","-5","1" +"07452","Glen Rock","NJ","40.961109","-74.12576","-5","1" +"07456","Ringwood","NJ","41.096095","-74.26012","-5","1" +"07457","Riverdale","NJ","40.990032","-74.31023","-5","1" +"07458","Saddle River","NJ","41.054568","-74.09616","-5","1" +"07460","Stockholm","NJ","41.091254","-74.52081","-5","1" +"07461","Sussex","NJ","41.229754","-74.60203","-5","1" +"07462","Vernon","NJ","41.193708","-74.5089","-5","1" +"07463","Waldwick","NJ","41.013109","-74.12231","-5","1" +"07465","Wanaque","NJ","41.052958","-74.28236","-5","1" +"07470","Wayne","NJ","40.943608","-74.25004","-5","1" +"07474","Wayne","NJ","41.011428","-74.304793","-5","1" +"07477","Wayne","NJ","41.011428","-74.304793","-5","1" +"07480","West Milford","NJ","41.102569","-74.37047","-5","1" +"07481","Wyckoff","NJ","40.998583","-74.1671","-5","1" +"07495","Mahwah","NJ","40.948054","-74.083231","-5","1" +"07498","Mahwah","NJ","40.948054","-74.083231","-5","1" +"07501","Paterson","NJ","40.912198","-74.16863","-5","1" +"07502","Paterson","NJ","40.918948","-74.1939","-5","1" +"07503","Paterson","NJ","40.896798","-74.15731","-5","1" +"07504","Paterson","NJ","40.912148","-74.14271","-5","1" +"07505","Paterson","NJ","40.916165","-74.17129","-5","1" +"07506","Hawthorne","NJ","40.957498","-74.15627","-5","1" +"07507","Hawthorne","NJ","41.011428","-74.304793","-5","1" +"07508","Haledon","NJ","40.945198","-74.18286","-5","1" +"07509","Paterson","NJ","41.011428","-74.304793","-5","1" +"07510","Paterson","NJ","41.011428","-74.304793","-5","1" +"07511","Totowa","NJ","41.011428","-74.304793","-5","1" +"07512","Totowa","NJ","40.903348","-74.21763","-5","1" +"07513","Paterson","NJ","40.906598","-74.14944","-5","1" +"07514","Paterson","NJ","40.923648","-74.14321","-5","1" +"07522","Paterson","NJ","40.925778","-74.17784","-5","1" +"07524","Paterson","NJ","40.930398","-74.15829","-5","1" +"07530","Paterson","NJ","41.011428","-74.304793","-5","1" +"07533","Paterson","NJ","41.011428","-74.304793","-5","1" +"07538","Haledon","NJ","41.011428","-74.304793","-5","1" +"07543","Paterson","NJ","41.011428","-74.304793","-5","1" +"07544","Paterson","NJ","41.011428","-74.304793","-5","1" +"07571","Totowa","NJ","40.899873","-74.23019","-5","1" +"07601","Hackensack","NJ","40.888678","-74.0488","-5","1" +"07602","Hackensack","NJ","40.948054","-74.083231","-5","1" +"07603","Bogota","NJ","40.873876","-74.02769","-5","1" +"07604","Hasbrouck Heights","NJ","40.86289","-74.07506","-5","1" +"07605","Leonia","NJ","40.862685","-73.98551","-5","1" +"07606","South Hackensack","NJ","40.863699","-74.04643","-5","1" +"07607","Maywood","NJ","40.90503","-74.06279","-5","1" +"07608","Teterboro","NJ","40.853723","-74.05987","-5","1" +"07610","Oradell","NJ","40.951348","-74.041234","-5","1" +"07620","Alpine","NJ","40.952814","-73.93064","-5","1" +"07621","Bergenfield","NJ","40.923748","-73.99879","-5","1" +"07624","Closter","NJ","40.971956","-73.96166","-5","1" +"07626","Cresskill","NJ","40.942074","-73.96504","-5","1" +"07627","Demarest","NJ","40.955603","-73.96044","-5","1" +"07628","Dumont","NJ","40.945173","-73.99342","-5","1" +"07630","Emerson","NJ","40.97514","-74.02725","-5","1" +"07631","Englewood","NJ","40.893343","-73.9758","-5","1" +"07632","Englewood Cliffs","NJ","40.883749","-73.95173","-5","1" +"07640","Harrington Park","NJ","40.989357","-73.97958","-5","1" +"07641","Haworth","NJ","40.958573","-73.98659","-5","1" +"07642","Hillsdale","NJ","41.007389","-74.04247","-5","1" +"07643","Little Ferry","NJ","40.850621","-74.04112","-5","1" +"07644","Lodi","NJ","40.877999","-74.08265","-5","1" +"07645","Montvale","NJ","41.048997","-74.04052","-5","1" +"07646","New Milford","NJ","40.936211","-74.0188","-5","1" +"07647","Northvale","NJ","41.009414","-73.94849","-5","1" +"07648","Norwood","NJ","40.994442","-73.95586","-5","1" +"07649","Oradell","NJ","40.953126","-74.03379","-5","1" +"07650","Palisades Park","NJ","40.845742","-73.99479","-5","1" +"07652","Paramus","NJ","40.947107","-74.07047","-5","1" +"07653","Paramus","NJ","40.948054","-74.083231","-5","1" +"07656","Park Ridge","NJ","41.034672","-74.04065","-5","1" +"07657","Ridgefield","NJ","40.832421","-74.00399","-5","1" +"07660","Ridgefield Park","NJ","40.856749","-74.02278","-5","1" +"07661","River Edge","NJ","40.927579","-74.03739","-5","1" +"07662","Rochelle Park","NJ","40.906553","-74.07797","-5","1" +"07663","Saddle Brook","NJ","40.904131","-74.09474","-5","1" +"07666","Teaneck","NJ","40.890964","-74.01115","-5","1" +"07670","Tenafly","NJ","40.92169","-73.96482","-5","1" +"07675","Westwood","NJ","40.99904","-74.03291","-5","1" +"07676","Ho-Ho-Kus","NJ","40.989508","-74.061302","-5","1" +"07677","Woodcliff Lake","NJ","41.025101","-74.059762","-5","1" +"07688","Teaneck","NJ","40.948054","-74.083231","-5","1" +"07701","Red Bank","NJ","40.352953","-74.07703","-5","1" +"07702","Shrewsbury","NJ","40.329128","-74.06315","-5","1" +"07703","Fort Monmouth","NJ","40.309121","-74.0486","-5","1" +"07704","Fair Haven","NJ","40.360581","-74.03738","-5","1" +"07709","Allenhurst","NJ","40.302718","-74.24928","-5","1" +"07710","Adelphia","NJ","40.302718","-74.24928","-5","1" +"07711","Allenhurst","NJ","40.236916","-74.0069","-5","1" +"07712","Asbury Park","NJ","40.232713","-74.03143","-5","1" +"07715","Belmar","NJ","40.302718","-74.24928","-5","1" +"07716","Atlantic Highlands","NJ","40.407958","-74.03483","-5","1" +"07717","Avon By The Sea","NJ","40.191809","-74.01688","-5","1" +"07718","Belford","NJ","40.415902","-74.08689","-5","1" +"07719","Belmar","NJ","40.175357","-74.04694","-5","1" +"07720","Bradley Beach","NJ","40.202113","-74.01353","-5","1" +"07721","Cliffwood","NJ","40.435961","-74.23734","-5","1" +"07722","Colts Neck","NJ","40.300226","-74.18306","-5","1" +"07723","Deal","NJ","40.250104","-74.00153","-5","1" +"07724","Eatontown","NJ","40.301979","-74.06889","-5","1" +"07726","Englishtown","NJ","40.294244","-74.34213","-5","1" +"07727","Farmingdale","NJ","40.205367","-74.15767","-5","1" +"07728","Freehold","NJ","40.241036","-74.27629","-5","1" +"07730","Hazlet","NJ","40.423298","-74.179","-5","1" +"07731","Howell","NJ","40.146597","-74.20815","-5","1" +"07732","Highlands","NJ","40.404474","-73.9904","-5","1" +"07733","Holmdel","NJ","40.384832","-74.17194","-5","1" +"07734","Keansburg","NJ","40.444407","-74.13298","-5","1" +"07735","Keyport","NJ","40.439714","-74.19374","-5","1" +"07737","Leonardo","NJ","40.416772","-74.06058","-5","1" +"07738","Lincroft","NJ","40.337374","-74.12059","-5","1" +"07739","Little Silver","NJ","40.33517","-74.04059","-5","1" +"07740","Long Branch","NJ","40.297932","-73.99097","-5","1" +"07746","Marlboro","NJ","40.316876","-74.26112","-5","1" +"07747","Matawan","NJ","40.411102","-74.23767","-5","1" +"07748","Middletown","NJ","40.410213","-74.11718","-5","1" +"07750","Monmouth Beach","NJ","40.332877","-73.97986","-5","1" +"07751","Morganville","NJ","40.361014","-74.26595","-5","1" +"07752","Navesink","NJ","40.402277","-74.027285","-5","1" +"07753","Neptune","NJ","40.208945","-74.05261","-5","1" +"07754","Neptune","NJ","40.302718","-74.24928","-5","1" +"07755","Oakhurst","NJ","40.263575","-74.02176","-5","1" +"07756","Ocean Grove","NJ","40.211982","-74.00916","-5","1" +"07757","Oceanport","NJ","40.318115","-74.01239","-5","1" +"07758","Port Monmouth","NJ","40.427561","-74.1069","-5","1" +"07760","Rumson","NJ","40.369145","-73.99576","-5","1" +"07762","Spring Lake","NJ","40.153024","-74.03372","-5","1" +"07763","Tennent","NJ","40.302718","-74.24928","-5","1" +"07764","West Long Branch","NJ","40.289985","-74.01671","-5","1" +"07765","Wickatunk","NJ","40.302718","-74.24928","-5","1" +"07777","Holmdel","NJ","40.302718","-74.24928","-5","1" +"07799","Eatontown","NJ","40.302718","-74.24928","-5","1" +"07801","Dover","NJ","40.889166","-74.55462","-5","1" +"07802","Dover","NJ","40.867331","-74.578269","-5","1" +"07803","Mine Hill","NJ","40.878785","-74.60098","-5","1" +"07806","Picatinny Arsenal","NJ","40.867331","-74.578269","-5","1" +"07819","Hardyston","NJ","41.162053","-74.580886","-5","1" +"07820","Allamuchy","NJ","40.869648","-74.849661","-5","1" +"07821","Andover","NJ","40.966308","-74.74298","-5","1" +"07822","Augusta","NJ","41.139545","-74.6993","-5","1" +"07823","Belvidere","NJ","40.82383","-75.04585","-5","1" +"07825","Blairstown","NJ","40.96035","-74.96243","-5","1" +"07826","Branchville","NJ","41.177457","-74.75904","-5","1" +"07827","Montague","NJ","41.300062","-74.76058","-5","1" +"07828","Budd Lake","NJ","40.878198","-74.73875","-5","1" +"07829","Buttzville","NJ","40.84335","-74.985914","-5","1" +"07830","Califon","NJ","40.723778","-74.81866","-5","1" +"07831","Changewater","NJ","40.739382","-74.944756","-5","1" +"07832","Columbia","NJ","40.92976","-75.06193","-5","1" +"07833","Delaware","NJ","40.895451","-75.06752","-5","1" +"07834","Denville","NJ","40.886149","-74.48704","-5","1" +"07836","Flanders","NJ","40.84405","-74.70134","-5","1" +"07837","Glasser","NJ","41.12831","-74.678956","-5","1" +"07838","Great Meadows","NJ","40.886474","-74.90089","-5","1" +"07839","Greendell","NJ","41.12831","-74.678956","-5","1" +"07840","Hackettstown","NJ","40.861748","-74.83054","-5","1" +"07841","Great Meadows-Vienna","NJ","40.863567","-74.869538","-5","1" +"07842","Hibernia","NJ","40.940301","-74.49617","-5","1" +"07843","Hopatcong","NJ","40.937206","-74.66147","-5","1" +"07844","Hope","NJ","40.919658","-74.984628","-5","1" +"07845","Ironia","NJ","40.867331","-74.578269","-5","1" +"07846","Johnsonburg","NJ","40.966266","-74.87979","-5","1" +"07847","Kenvil","NJ","40.88038","-74.62009","-5","1" +"07848","Lafayette","NJ","41.094159","-74.69036","-5","1" +"07849","Lake Hopatcong","NJ","40.963959","-74.61414","-5","1" +"07850","Landing","NJ","40.908198","-74.65749","-5","1" +"07851","Layton","NJ","41.172968","-74.88301","-5","1" +"07852","Ledgewood","NJ","40.876349","-74.65769","-5","1" +"07853","Long Valley","NJ","40.788599","-74.78295","-5","1" +"07855","Middleville","NJ","41.12831","-74.678956","-5","1" +"07856","Mount Arlington","NJ","40.919498","-74.63559","-5","1" +"07857","Netcong","NJ","40.897398","-74.70301","-5","1" +"07860","Newton","NJ","41.0714","-74.80199","-5","1" +"07863","Oxford","NJ","40.815107","-74.96802","-5","1" +"07865","Port Murray","NJ","40.783175","-74.90934","-5","1" +"07866","Rockaway","NJ","40.926798","-74.50624","-5","1" +"07869","Randolph","NJ","40.847649","-74.5748","-5","1" +"07870","Schooleys Mountain","NJ","40.810362","-74.819318","-5","1" +"07871","Sparta","NJ","41.035384","-74.63557","-5","1" +"07874","Stanhope","NJ","40.917054","-74.71053","-5","1" +"07875","Stillwater","NJ","41.043858","-74.871981","-5","1" +"07876","Succasunna","NJ","40.855549","-74.65251","-5","1" +"07877","Swartswood","NJ","41.10289","-74.850759","-5","1" +"07878","Mount Tabor","NJ","40.872866","-74.47843","-5","1" +"07879","Tranquility","NJ","40.955934","-74.788108","-5","1" +"07880","Vienna","NJ","40.864844","-74.897002","-5","1" +"07881","Wallpack Center","NJ","41.125646","-74.917711","-5","1" +"07882","Washington","NJ","40.753753","-74.99617","-5","1" +"07885","Wharton","NJ","40.913298","-74.58246","-5","1" +"07890","Branchville","NJ","41.12831","-74.678956","-5","1" +"07901","Summit","NJ","40.714501","-74.3633","-5","1" +"07902","Summit","NJ","40.665651","-74.299692","-5","1" +"07919","Hardyston","NJ","41.152239","-74.581948","-5","1" +"07920","Basking Ridge","NJ","40.6789","-74.57039","-5","1" +"07921","Bedminster","NJ","40.652301","-74.653","-5","1" +"07922","Berkeley Heights","NJ","40.675112","-74.43459","-5","1" +"07924","Bernardsville","NJ","40.72344","-74.57753","-5","1" +"07926","Brookside","NJ","40.800353","-74.571785","-5","1" +"07927","Cedar Knolls","NJ","40.821149","-74.45121","-5","1" +"07928","Chatham","NJ","40.7332","-74.39736","-5","1" +"07930","Chester","NJ","40.786549","-74.68799","-5","1" +"07931","Far Hills","NJ","40.696601","-74.63781","-5","1" +"07932","Florham Park","NJ","40.77835","-74.39009","-5","1" +"07933","Gillette","NJ","40.683934","-74.47079","-5","1" +"07934","Gladstone","NJ","40.72265","-74.67432","-5","1" +"07935","Green Village","NJ","40.739333","-74.45631","-5","1" +"07936","East Hanover","NJ","40.820012","-74.36474","-5","1" +"07938","Liberty Corner","NJ","40.655399","-74.586151","-5","1" +"07939","Lyons","NJ","40.566553","-74.599801","-5","1" +"07940","Madison","NJ","40.75875","-74.41609","-5","1" +"07945","Mendham","NJ","40.782767","-74.59529","-5","1" +"07946","Millington","NJ","40.672823","-74.52011","-5","1" +"07950","Morris Plains","NJ","40.842399","-74.48223","-5","1" +"07952","Bernardsville","NJ","40.733863","-74.585653","-5","1" +"07960","Morristown","NJ","40.79215","-74.48559","-5","1" +"07961","Morristown","NJ","40.77975","-74.442797","-5","1" +"07962","Morristown","NJ","40.867331","-74.578269","-5","1" +"07963","Morristown","NJ","40.867331","-74.578269","-5","1" +"07969","Watchung","NJ","40.631652","-74.454547","-5","1" +"07970","Mount Freedom","NJ","40.813281","-74.57267","-5","1" +"07974","New Providence","NJ","40.698268","-74.40225","-5","1" +"07976","New Vernon","NJ","40.733739","-74.48851","-5","1" +"07977","Peapack","NJ","40.707505","-74.65657","-5","1" +"07978","Pluckemin","NJ","40.642491","-74.639597","-5","1" +"07979","Pottersville","NJ","40.713675","-74.72465","-5","1" +"07980","Stirling","NJ","40.672968","-74.49171","-5","1" +"07981","Whippany","NJ","40.821482","-74.42648","-5","1" +"07983","Whippany","NJ","40.867331","-74.578269","-5","1" +"07997","Peapack and Gladstone","NJ","40.728195","-74.665549","-5","1" +"07999","Whippany","NJ","40.867331","-74.578269","-5","1" +"08001","Alloway","NJ","39.559426","-75.3631","-5","1" +"08002","Cherry Hill","NJ","39.932279","-75.02266","-5","1" +"08003","Cherry Hill","NJ","39.879713","-74.9719","-5","1" +"08004","Atco","NJ","39.769357","-74.87264","-5","1" +"08005","Barnegat","NJ","39.759581","-74.27398","-5","1" +"08006","Barnegat Light","NJ","39.75196","-74.11074","-5","1" +"08007","Barrington","NJ","39.868013","-75.05424","-5","1" +"08008","Beach Haven","NJ","39.614596","-74.2005","-5","1" +"08009","Berlin","NJ","39.779582","-74.9365","-5","1" +"08010","Beverly","NJ","40.058211","-74.91404","-5","1" +"08011","Birmingham","NJ","39.978635","-74.71323","-5","1" +"08012","Blackwood","NJ","39.784614","-75.05678","-5","1" +"08014","Bridgeport","NJ","39.803646","-75.34421","-5","1" +"08015","Browns Mills","NJ","39.960596","-74.5606","-5","1" +"08016","Burlington","NJ","40.06834","-74.84463","-5","1" +"08017","Elwood-Magnolia","NJ","39.574175","-74.719502","-5","1" +"08018","Cedar Brook","NJ","39.80237","-74.938259","-5","1" +"08019","Chatsworth","NJ","39.777314","-74.5354","-5","1" +"08020","Clarksboro","NJ","39.800958","-75.2211","-5","1" +"08021","Clementon","NJ","39.810485","-74.99574","-5","1" +"08022","Columbus","NJ","40.079952","-74.70684","-5","1" +"08023","Deepwater","NJ","39.683577","-75.48932","-5","1" +"08025","Ewan","NJ","39.701526","-75.162903","-5","1" +"08026","Gibbsboro","NJ","39.833847","-74.96899","-5","1" +"08027","Gibbstown","NJ","39.824159","-75.28187","-5","1" +"08028","Glassboro","NJ","39.700008","-75.11951","-5","1" +"08029","Glendora","NJ","39.840463","-75.0687","-5","1" +"08030","Gloucester City","NJ","39.891113","-75.11836","-5","1" +"08031","Bellmawr","NJ","39.867013","-75.09162","-5","1" +"08032","Grenloch","NJ","39.781264","-75.0609","-5","1" +"08033","Haddonfield","NJ","39.895213","-75.04019","-5","1" +"08034","Cherry Hill","NJ","39.908613","-74.99951","-5","1" +"08035","Haddon Heights","NJ","39.87913","-75.06599","-5","1" +"08036","Hainesport","NJ","39.985662","-74.83044","-5","1" +"08037","Hammonton","NJ","39.625291","-74.77705","-5","1" +"08038","Hancocks Bridge","NJ","39.481009","-75.50618","-5","1" +"08039","Harrisonville","NJ","39.685445","-75.2669","-5","1" +"08041","Jobstown","NJ","40.038339","-74.6806","-5","1" +"08042","Juliustown","NJ","40.018503","-74.66656","-5","1" +"08043","Voorhees","NJ","39.851969","-74.96128","-5","1" +"08045","Lawnside","NJ","39.866513","-75.03197","-5","1" +"08046","Willingboro","NJ","40.029011","-74.88257","-5","1" +"08048","Lumberton","NJ","39.967013","-74.80666","-5","1" +"08049","Magnolia","NJ","39.85478","-75.03671","-5","1" +"08050","Manahawkin","NJ","39.707575","-74.25933","-5","1" +"08051","Mantua","NJ","39.785785","-75.17761","-5","1" +"08052","Maple Shade","NJ","39.952212","-74.99464","-5","1" +"08053","Marlton","NJ","39.88488","-74.90416","-5","1" +"08054","Mount Laurel","NJ","39.949446","-74.90342","-5","1" +"08055","Medford","NJ","39.865272","-74.8185","-5","1" +"08056","Mickleton","NJ","39.785219","-75.25304","-5","1" +"08057","Moorestown","NJ","39.968962","-74.9489","-5","1" +"08059","Mount Ephraim","NJ","39.884263","-75.0923","-5","1" +"08060","Mount Holly","NJ","39.991562","-74.79747","-5","1" +"08061","Mount Royal","NJ","39.807684","-75.20496","-5","1" +"08062","Mullica Hill","NJ","39.716939","-75.21987","-5","1" +"08063","National Park","NJ","39.867158","-75.1802","-5","1" +"08064","New Lisbon","NJ","39.961921","-74.63687","-5","1" +"08065","Palmyra","NJ","40.00278","-75.02626","-5","1" +"08066","Paulsboro","NJ","39.833156","-75.23773","-5","1" +"08067","Pedricktown","NJ","39.740353","-75.41262","-5","1" +"08068","Pemberton","NJ","39.961183","-74.66266","-5","1" +"08069","Penns Grove","NJ","39.712593","-75.46906","-5","1" +"08070","Pennsville","NJ","39.645377","-75.51923","-5","1" +"08071","Pitman","NJ","39.730964","-75.13009","-5","1" +"08072","Quinton","NJ","39.546172","-75.41367","-5","1" +"08073","Rancocas","NJ","40.010461","-74.86762","-5","1" +"08074","Richwood","NJ","39.716194","-75.17326","-5","1" +"08075","Riverside","NJ","40.029361","-74.9541","-5","1" +"08076","Riverton","NJ","39.862433","-74.725079","-5","1" +"08077","Riverton","NJ","39.997379","-74.99805","-5","1" +"08078","Runnemede","NJ","39.850013","-75.0767","-5","1" +"08079","Salem","NJ","39.549912","-75.43943","-5","1" +"08080","Sewell","NJ","39.74953","-75.10637","-5","1" +"08081","Sicklerville","NJ","39.741385","-74.99035","-5","1" +"08083","Somerdale","NJ","39.842613","-75.02496","-5","1" +"08084","Stratford","NJ","39.829014","-75.01371","-5","1" +"08085","Swedesboro","NJ","39.753088","-75.32687","-5","1" +"08086","Thorofare","NJ","39.849156","-75.18159","-5","1" +"08087","Tuckerton","NJ","39.59899","-74.36573","-5","1" +"08088","Vincentown","NJ","39.871699","-74.70528","-5","1" +"08089","Waterford Works","NJ","39.722622","-74.8503","-5","1" +"08090","Wenonah","NJ","39.799347","-75.15202","-5","1" +"08091","West Berlin","NJ","39.807695","-74.93392","-5","1" +"08092","West Creek","NJ","39.658781","-74.28673","-5","1" +"08093","Westville","NJ","39.861413","-75.13284","-5","1" +"08094","Williamstown","NJ","39.647598","-74.95927","-5","1" +"08095","Winslow","NJ","39.656976","-74.86043","-5","1" +"08096","Woodbury","NJ","39.830313","-75.13221","-5","1" +"08097","Woodbury Heights","NJ","39.816063","-75.15321","-5","1" +"08098","Woodstown","NJ","39.637838","-75.32396","-5","1" +"08099","Bellmawr","NJ","39.779179","-74.962071","-5","1" +"08101","Camden","NJ","39.80237","-74.938259","-5","1" +"08102","Camden","NJ","39.949579","-75.118","-5","1" +"08103","Camden","NJ","39.936179","-75.11513","-5","1" +"08104","Camden","NJ","39.918663","-75.10976","-5","1" +"08105","Camden","NJ","39.949812","-75.08616","-5","1" +"08106","Audubon","NJ","39.892213","-75.07212","-5","1" +"08107","Oaklyn","NJ","39.908163","-75.08618","-5","1" +"08108","Collingswood","NJ","39.915263","-75.06401","-5","1" +"08109","Merchantville","NJ","39.949979","-75.05024","-5","1" +"08110","Pennsauken","NJ","39.966812","-75.05681","-5","1" +"08201","Absecon","NJ","39.457517","-74.50914","-5","1" +"08202","Avalon","NJ","39.092928","-74.72688","-5","1" +"08203","Brigantine","NJ","39.401801","-74.38017","-5","1" +"08204","Cape May","NJ","38.963652","-74.92319","-5","1" +"08205","Absecon","NJ","39.471263","-74.502457","-5","1" +"08210","Cape May Court House","NJ","39.081754","-74.83658","-5","1" +"08212","Cape May Point","NJ","38.936896","-74.96526","-5","1" +"08213","Cologne","NJ","39.509208","-74.608557","-5","1" +"08214","Dennisville","NJ","39.056521","-74.816619","-5","1" +"08215","Egg Harbor City","NJ","39.548049","-74.62171","-5","1" +"08217","Elwood","NJ","39.575273","-74.72103","-5","1" +"08218","Goshen","NJ","39.056521","-74.816619","-5","1" +"08219","Green Creek","NJ","39.056521","-74.816619","-5","1" +"08220","Leeds Point","NJ","39.509208","-74.608557","-5","1" +"08221","Linwood","NJ","39.348616","-74.57387","-5","1" +"08223","Marmora","NJ","39.264412","-74.64986","-5","1" +"08224","New Gretna","NJ","39.595957","-74.45628","-5","1" +"08225","Northfield","NJ","39.370083","-74.55211","-5","1" +"08226","Ocean City","NJ","39.265371","-74.59381","-5","1" +"08227","Bass River","NJ","39.588665","-74.466214","-5","1" +"08230","Ocean View","NJ","39.20877","-74.70438","-5","1" +"08231","Oceanville","NJ","39.509208","-74.608557","-5","1" +"08232","Pleasantville","NJ","39.394616","-74.52212","-5","1" +"08234","Egg Harbor Township","NJ","39.398172","-74.59667","-5","1" +"08237","Maurice River","NJ","39.258089","-74.974344","-5","1" +"08240","Pomona","NJ","39.487717","-74.554334","-5","1" +"08241","Port Republic","NJ","39.527903","-74.4917","-5","1" +"08242","Rio Grande","NJ","39.017837","-74.87515","-5","1" +"08243","Sea Isle City","NJ","39.145755","-74.69865","-5","1" +"08244","Somers Point","NJ","39.319901","-74.5999","-5","1" +"08245","South Dennis","NJ","39.176208","-74.81723","-5","1" +"08246","South Seaville","NJ","39.056521","-74.816619","-5","1" +"08247","Stone Harbor","NJ","39.051289","-74.76204","-5","1" +"08248","Strathmere","NJ","39.197394","-74.65699","-5","1" +"08250","Tuckahoe","NJ","39.056521","-74.816619","-5","1" +"08251","Villas","NJ","39.022256","-74.93616","-5","1" +"08252","Whitesboro","NJ","39.037404","-74.85749","-5","1" +"08253","Shiloh","NJ","39.458714","-75.298235","-5","1" +"08260","Wildwood","NJ","38.987556","-74.822","-5","1" +"08270","Woodbine","NJ","39.275059","-74.80041","-5","1" +"08283","Sea Isle City","NJ","39.16076","-74.696498","-5","1" +"08302","Bridgeton","NJ","39.445164","-75.24215","-5","1" +"08310","Buena","NJ","39.522686","-74.89684","-5","1" +"08311","Cedarville","NJ","39.337205","-75.18577","-5","1" +"08312","Clayton","NJ","39.655964","-75.08736","-5","1" +"08313","Deerfield Street","NJ","39.530314","-75.22901","-5","1" +"08314","Delmont","NJ","39.219301","-74.94016","-5","1" +"08315","Dividing Creek","NJ","39.273214","-75.095025","-5","1" +"08316","Dorchester","NJ","39.274714","-74.97546","-5","1" +"08317","Dorothy","NJ","39.406518","-74.82706","-5","1" +"08318","Elmer","NJ","39.553504","-75.16843","-5","1" +"08319","Estell Manor","NJ","39.376099","-74.81456","-5","1" +"08320","Fairton","NJ","39.379906","-75.221681","-5","1" +"08321","Fortescue","NJ","39.239649","-75.17225","-5","1" +"08322","Franklinville","NJ","39.618222","-75.0618","-5","1" +"08323","Greenwich","NJ","39.402763","-75.3574","-5","1" +"08324","Heislerville","NJ","39.218484","-74.99001","-5","1" +"08326","Landisville","NJ","39.524179","-74.9385","-5","1" +"08327","Leesburg","NJ","39.254836","-74.97767","-5","1" +"08328","Malaga","NJ","39.572449","-75.0543","-5","1" +"08329","Mauricetown","NJ","39.285464","-74.99687","-5","1" +"08330","Mays Landing","NJ","39.478771","-74.7581","-5","1" +"08332","Millville","NJ","39.379382","-75.03923","-5","1" +"08334","Downe","NJ","39.241686","-75.17465","-5","1" +"08340","Milmay","NJ","39.437265","-74.87926","-5","1" +"08341","Minotola","NJ","39.517539","-74.94972","-5","1" +"08342","Mizpah","NJ","39.50208","-74.833469","-5","1" +"08343","Monroeville","NJ","39.633964","-75.15643","-5","1" +"08344","Newfield","NJ","39.562763","-75.00955","-5","1" +"08345","Newport","NJ","39.28341","-75.15464","-5","1" +"08346","Newtonville","NJ","39.562719","-74.85853","-5","1" +"08347","Norma","NJ","39.499765","-75.082022","-5","1" +"08348","Port Elizabeth","NJ","39.314084","-74.97889","-5","1" +"08349","Port Norris","NJ","39.25682","-75.06683","-5","1" +"08350","Richland","NJ","39.490774","-74.87045","-5","1" +"08352","Rosenhayn","NJ","39.475565","-75.12933","-5","1" +"08353","Shiloh","NJ","39.458114","-75.29761","-5","1" +"08360","Vineland","NJ","39.492265","-75.01887","-5","1" +"08361","Vineland","NJ","39.464582","-74.96994","-5","1" +"08362","Vineland","NJ","39.271264","-75.027671","-5","1" +"08370","Riverside","NJ","39.862433","-74.725079","-5","1" +"08401","Atlantic City","NJ","39.364966","-74.43903","-5","1" +"08402","Margate City","NJ","39.329416","-74.50661","-5","1" +"08403","Longport","NJ","39.314766","-74.52675","-5","1" +"08404","Atlantic City","NJ","39.509208","-74.608557","-5","1" +"08405","Atlantic City","NJ","39.509208","-74.608557","-5","1" +"08406","Ventnor City","NJ","39.342299","-74.48192","-5","1" +"08501","Allentown","NJ","40.164556","-74.57785","-5","1" +"08502","Belle Mead","NJ","40.460137","-74.63592","-5","1" +"08504","Blawenburg","NJ","40.425369","-74.668753","-5","1" +"08505","Bordentown","NJ","40.132784","-74.71778","-5","1" +"08510","Clarksburg","NJ","40.18238","-74.42134","-5","1" +"08511","Cookstown","NJ","40.050128","-74.55611","-5","1" +"08512","Cranbury","NJ","40.306286","-74.52627","-5","1" +"08514","Cream Ridge","NJ","40.134892","-74.48688","-5","1" +"08515","Crosswicks","NJ","40.14821","-74.65125","-5","1" +"08518","Florence","NJ","40.11791","-74.8047","-5","1" +"08520","Hightstown","NJ","40.262809","-74.53246","-5","1" +"08525","Hopewell","NJ","40.386902","-74.78112","-5","1" +"08526","Imlaystown","NJ","40.162275","-74.475936","-5","1" +"08527","Jackson","NJ","40.11597","-74.32251","-5","1" +"08528","Kingston","NJ","40.377173","-74.61538","-5","1" +"08530","Lambertville","NJ","40.375039","-74.93184","-5","1" +"08533","New Egypt","NJ","40.075185","-74.48433","-5","1" +"08534","Pennington","NJ","40.32315","-74.78364","-5","1" +"08535","Perrineville","NJ","40.228497","-74.45064","-5","1" +"08536","Plainsboro","NJ","40.33371","-74.58512","-5","1" +"08540","Princeton","NJ","40.357439","-74.64922","-5","1" +"08541","Princeton","NJ","40.280531","-74.712018","-5","1" +"08542","Princeton","NJ","40.354424","-74.65943","-5","1" +"08543","Princeton","NJ","40.280531","-74.712018","-5","1" +"08544","Princeton","NJ","40.349206","-74.652811","-5","1" +"08550","Princeton Junction","NJ","40.292358","-74.60902","-5","1" +"08551","Ringoes","NJ","40.449171","-74.84979","-5","1" +"08553","Rocky Hill","NJ","40.400406","-74.63895","-5","1" +"08554","Roebling","NJ","40.113883","-74.77977","-5","1" +"08555","Roosevelt","NJ","40.22142","-74.47378","-5","1" +"08556","Rosemont","NJ","40.419965","-74.988619","-5","1" +"08557","Sergeantsville","NJ","40.563654","-74.949409","-5","1" +"08558","Skillman","NJ","40.410155","-74.70726","-5","1" +"08559","Stockton","NJ","40.435878","-74.96511","-5","1" +"08560","Titusville","NJ","40.31049","-74.85947","-5","1" +"08561","Windsor","NJ","40.242009","-74.58006","-5","1" +"08562","Wrightstown","NJ","40.062215","-74.58893","-5","1" +"08570","Cranbury","NJ","40.430006","-74.417344","-5","1" +"08601","Trenton","NJ","40.280531","-74.712018","-5","1" +"08602","Trenton","NJ","40.280531","-74.712018","-5","1" +"08603","Trenton","NJ","40.280531","-74.712018","-5","1" +"08604","Trenton","NJ","40.280531","-74.712018","-5","1" +"08605","Trenton","NJ","40.280531","-74.712018","-5","1" +"08606","Trenton","NJ","40.280531","-74.712018","-5","1" +"08607","Trenton","NJ","40.280531","-74.712018","-5","1" +"08608","Trenton","NJ","40.219158","-74.76481","-5","1" +"08609","Trenton","NJ","40.224441","-74.7421","-5","1" +"08610","Trenton","NJ","40.199859","-74.72005","-5","1" +"08611","Trenton","NJ","40.206959","-74.75136","-5","1" +"08618","Trenton","NJ","40.238258","-74.7805","-5","1" +"08619","Trenton","NJ","40.240558","-74.69588","-5","1" +"08620","Trenton","NJ","40.17296","-74.66915","-5","1" +"08625","Trenton","NJ","40.206709","-74.75643","-5","1" +"08628","Trenton","NJ","40.264708","-74.82295","-5","1" +"08629","Trenton","NJ","40.219358","-74.73334","-5","1" +"08638","Trenton","NJ","40.249908","-74.75953","-5","1" +"08640","Trenton","NJ","40.003861","-74.61775","-5","1" +"08641","Trenton","NJ","40.04492","-74.58916","-5","1" +"08645","Trenton","NJ","40.280531","-74.712018","-5","1" +"08646","Trenton","NJ","40.280531","-74.712018","-5","1" +"08647","Trenton","NJ","40.280531","-74.712018","-5","1" +"08648","Trenton","NJ","40.276782","-74.72951","-5","1" +"08650","Trenton","NJ","40.280531","-74.712018","-5","1" +"08666","Trenton","NJ","40.280531","-74.712018","-5","1" +"08677","Trenton","NJ","40.280531","-74.712018","-5","1" +"08690","Trenton","NJ","40.225409","-74.65918","-5","1" +"08691","Trenton","NJ","40.207034","-74.59364","-5","1" +"08695","Trenton","NJ","40.280531","-74.712018","-5","1" +"08701","Lakewood","NJ","40.082782","-74.2094","-5","1" +"08720","Allenwood","NJ","40.14386","-74.10286","-5","1" +"08721","Bayville","NJ","39.902851","-74.16037","-5","1" +"08722","Beachwood","NJ","39.931068","-74.19618","-5","1" +"08723","Brick","NJ","40.042479","-74.123","-5","1" +"08724","Brick","NJ","40.087794","-74.10981","-5","1" +"08730","Brielle","NJ","40.108433","-74.06226","-5","1" +"08731","Forked River","NJ","39.848035","-74.21297","-5","1" +"08732","Island Heights","NJ","39.942616","-74.14689","-5","1" +"08733","Lakehurst","NJ","40.017117","-74.30491","-5","1" +"08734","Lanoka Harbor","NJ","39.862864","-74.16624","-5","1" +"08735","Lavallette","NJ","39.982101","-74.06768","-5","1" +"08736","Manasquan","NJ","40.120261","-74.05765","-5","1" +"08738","Mantoloking","NJ","40.025258","-74.05579","-5","1" +"08739","Normandy Beach","NJ","40.000759","-74.24928","-5","1" +"08740","Ocean Gate","NJ","39.925301","-74.13488","-5","1" +"08741","Pine Beach","NJ","39.934318","-74.16773","-5","1" +"08742","Point Pleasant Beach","NJ","40.081165","-74.06003","-5","1" +"08750","Sea Girt","NJ","40.133754","-74.04123","-5","1" +"08751","Seaside Heights","NJ","39.948518","-74.0759","-5","1" +"08752","Seaside Park","NJ","39.920268","-74.07967","-5","1" +"08753","Toms River","NJ","39.974584","-74.15141","-5","1" +"08754","Toms River","NJ","40.000759","-74.24928","-5","1" +"08755","Toms River","NJ","40.010092","-74.23032","-5","1" +"08756","Toms River","NJ","39.787966","-74.191058","-5","1" +"08757","Toms River","NJ","39.975967","-74.25296","-5","1" +"08758","Waretown","NJ","39.784513","-74.22376","-5","1" +"08759","Whiting","NJ","39.943541","-74.36949","-5","1" +"08792","Berkeley","NJ","39.907488","-74.081074","-5","1" +"08801","Annandale","NJ","40.624538","-74.89118","-5","1" +"08802","Asbury","NJ","40.661172","-75.0321","-5","1" +"08803","Baptistown","NJ","40.563654","-74.949409","-5","1" +"08804","Bloomsbury","NJ","40.652484","-75.08959","-5","1" +"08805","Bound Brook","NJ","40.567953","-74.54034","-5","1" +"08807","Bridgewater","NJ","40.588097","-74.62253","-5","1" +"08808","Broadway","NJ","40.737213","-75.046926","-5","1" +"08809","Clinton","NJ","40.639546","-74.91292","-5","1" +"08810","Dayton","NJ","40.372881","-74.51363","-5","1" +"08812","Dunellen","NJ","40.594502","-74.47166","-5","1" +"08816","East Brunswick","NJ","40.434239","-74.40504","-5","1" +"08817","Edison","NJ","40.516104","-74.39754","-5","1" +"08818","Edison","NJ","40.430006","-74.417344","-5","1" +"08820","Edison","NJ","40.575503","-74.35781","-5","1" +"08821","Flagtown","NJ","40.518578","-74.68545","-5","1" +"08822","Flemington","NJ","40.515645","-74.85319","-5","1" +"08823","Franklin Park","NJ","40.439412","-74.55565","-5","1" +"08824","Kendall Park","NJ","40.423055","-74.55352","-5","1" +"08825","Frenchtown","NJ","40.509998","-75.03239","-5","1" +"08826","Glen Gardner","NJ","40.716332","-74.91405","-5","1" +"08827","Hampton","NJ","40.677404","-74.96875","-5","1" +"08828","Helmetta","NJ","40.37594","-74.41955","-5","1" +"08829","High Bridge","NJ","40.668594","-74.89241","-5","1" +"08830","Iselin","NJ","40.571504","-74.3183","-5","1" +"08831","Jamesburg","NJ","40.336508","-74.43302","-5","1" +"08832","Keasbey","NJ","40.517855","-74.30325","-5","1" +"08833","Lebanon","NJ","40.643314","-74.82345","-5","1" +"08834","Little York","NJ","40.563654","-74.949409","-5","1" +"08835","Manville","NJ","40.538903","-74.59222","-5","1" +"08836","Martinsville","NJ","40.595552","-74.55174","-5","1" +"08837","Edison","NJ","40.529355","-74.33844","-5","1" +"08840","Metuchen","NJ","40.543354","-74.3587","-5","1" +"08844","Millstone","NJ","40.502477","-74.650023","-5","1" +"08846","Middlesex","NJ","40.574552","-74.50187","-5","1" +"08848","Milford","NJ","40.587606","-75.10402","-5","1" +"08850","Milltown","NJ","40.451105","-74.43938","-5","1" +"08851","East Amwell","NJ","40.436394","-74.884741","-5","1" +"08852","Monmouth Junction","NJ","40.389428","-74.54329","-5","1" +"08853","Neshanic Station","NJ","40.51057","-74.72472","-5","1" +"08854","Piscataway","NJ","40.555355","-74.46094","-5","1" +"08855","Piscataway","NJ","40.430006","-74.417344","-5","1" +"08857","Old Bridge","NJ","40.397507","-74.3298","-5","1" +"08858","Oldwick","NJ","40.681694","-74.73624","-5","1" +"08859","Parlin","NJ","40.461851","-74.30343","-5","1" +"08861","Perth Amboy","NJ","40.520105","-74.27708","-5","1" +"08862","Perth Amboy","NJ","40.430006","-74.417344","-5","1" +"08863","Fords","NJ","40.535304","-74.31104","-5","1" +"08865","Phillipsburg","NJ","40.689123","-75.17243","-5","1" +"08867","Pittstown","NJ","40.583035","-74.96224","-5","1" +"08868","Quakertown","NJ","40.565493","-74.938931","-5","1" +"08869","Raritan","NJ","40.571302","-74.6374","-5","1" +"08870","Readington","NJ","40.563654","-74.949409","-5","1" +"08871","Sayreville","NJ","40.430006","-74.417344","-5","1" +"08872","Sayreville","NJ","40.461605","-74.3474","-5","1" +"08873","Somerset","NJ","40.505253","-74.50723","-5","1" +"08875","Somerset","NJ","40.580918","-74.711731","-5","1" +"08876","Somerville","NJ","40.545853","-74.63592","-5","1" +"08877","South River","NJ","40.430006","-74.417344","-5","1" +"08878","South Amboy","NJ","40.436865","-74.250942","-5","1" +"08879","South Amboy","NJ","40.469606","-74.27669","-5","1" +"08880","South Bound Brook","NJ","40.553803","-74.52976","-5","1" +"08882","South River","NJ","40.445006","-74.38179","-5","1" +"08884","Spotswood","NJ","40.39159","-74.39329","-5","1" +"08885","Stanton","NJ","40.576372","-74.831105","-5","1" +"08886","Stewartsville","NJ","40.694938","-75.11181","-5","1" +"08887","Three Bridges","NJ","40.525361","-74.79632","-5","1" +"08888","Whitehouse","NJ","40.619412","-74.740597","-5","1" +"08889","Whitehouse Station","NJ","40.612851","-74.76682","-5","1" +"08890","Zarephath","NJ","40.536069","-74.578872","-5","1" +"08896","Raritan","NJ","40.566553","-74.599801","-5","1" +"08899","Edison","NJ","40.520254","-74.420545","-5","1" +"08901","New Brunswick","NJ","40.488304","-74.44775","-5","1" +"08902","North Brunswick","NJ","40.453131","-74.48287","-5","1" +"08903","New Brunswick","NJ","40.513854","-74.445098","-5","1" +"08904","Highland Park","NJ","40.500254","-74.4257","-5","1" +"08905","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"08906","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"08907","New Brunswick","NJ","40.482029","-74.479547","-5","1" +"08922","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"08933","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"08988","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"08989","New Brunswick","NJ","40.430006","-74.417344","-5","1" +"10001","New York","NY","40.750742","-73.99653","-5","1" +"10002","New York","NY","40.71704","-73.987","-5","1" +"10003","New York","NY","40.732509","-73.98935","-5","1" +"10004","New York","NJ","40.699226","-74.04118","-5","1" +"10005","New York","NY","40.706019","-74.00858","-5","1" +"10006","New York","NY","40.707904","-74.01342","-5","1" +"10007","New York","NY","40.714754","-74.00721","-5","1" +"10008","New York","NY","40.780751","-73.977182","-5","1" +"10009","New York","NY","40.727093","-73.97864","-5","1" +"10010","New York","NY","40.739022","-73.98205","-5","1" +"10011","New York","NY","40.741012","-74.00012","-5","1" +"10012","New York","NY","40.72596","-73.99834","-5","1" +"10013","New York","NY","40.720666","-74.00526","-5","1" +"10014","New York","NY","40.734718","-74.00532","-5","1" +"10015","New York","NY","40.780751","-73.977182","-5","1" +"10016","New York","NY","40.74618","-73.97759","-5","1" +"10017","New York","NY","40.752159","-73.97231","-5","1" +"10018","New York","NY","40.755101","-73.99337","-5","1" +"10019","New York","NY","40.765714","-73.9856","-5","1" +"10020","New York","NY","40.758667","-73.98024","-5","1" +"10021","New York","NY","40.76842","-73.96045","-5","1" +"10022","New York","NY","40.759015","-73.96732","-5","1" +"10023","New York","NY","40.776099","-73.98285","-5","1" +"10024","New York","NY","40.786387","-73.97709","-5","1" +"10025","New York","NY","40.798502","-73.96811","-5","1" +"10026","New York","NY","40.802853","-73.95471","-5","1" +"10027","New York","NY","40.812665","-73.95499","-5","1" +"10028","New York","NY","40.776777","-73.9541","-5","1" +"10029","New York","NY","40.791586","-73.94575","-5","1" +"10030","New York","NY","40.818151","-73.94351","-5","1" +"10031","New York","NY","40.826201","-73.94879","-5","1" +"10032","New York","NY","40.840686","-73.94154","-5","1" +"10033","New York","NY","40.848764","-73.93496","-5","1" +"10034","New York","NY","40.867653","-73.92","-5","1" +"10035","New York","NY","40.802395","-73.93359","-5","1" +"10036","New York","NY","40.759511","-73.99019","-5","1" +"10037","New York","NY","40.813385","-73.93616","-5","1" +"10038","New York","NY","40.709677","-74.00365","-5","1" +"10039","New York","NY","40.826181","-73.9371","-5","1" +"10040","New York","NY","40.858704","-73.92853","-5","1" +"10041","New York","NY","40.703042","-74.01009","-5","1" +"10043","New York","NY","40.780751","-73.977182","-5","1" +"10044","New York","NY","40.762174","-73.94917","-5","1" +"10045","New York","NY","40.70859","-74.008687","-5","1" +"10046","New York","NY","40.780751","-73.977182","-5","1" +"10047","New York","NY","40.780751","-73.977182","-5","1" +"10048","New York","NY","40.712086","-74.01227","-5","1" +"10055","New York","NY","40.780751","-73.977182","-5","1" +"10060","New York","NY","40.780751","-73.977182","-5","1" +"10069","New York","NY","40.775477","-73.9905","-5","1" +"10072","New York","NY","40.780751","-73.977182","-5","1" +"10079","New York","NY","40.780751","-73.977182","-5","1" +"10080","New York","NY","40.780751","-73.977182","-5","1" +"10081","New York","NY","40.780751","-73.977182","-5","1" +"10082","New York","NY","40.780751","-73.977182","-5","1" +"10087","New York","NY","40.780751","-73.977182","-5","1" +"10090","New York","NY","40.780751","-73.977182","-5","1" +"10094","New York","NY","40.780751","-73.977182","-5","1" +"10095","New York","NY","40.748181","-73.988421","-5","1" +"10096","New York","NY","40.780751","-73.977182","-5","1" +"10098","New York","NY","40.748181","-73.988421","-5","1" +"10099","New York","NY","40.780751","-73.977182","-5","1" +"10101","New York","NY","40.780751","-73.977182","-5","1" +"10102","New York","NY","40.780751","-73.977182","-5","1" +"10103","New York","NY","40.760915","-73.97785","-5","1" +"10104","New York","NY","40.760943","-73.979908","-5","1" +"10105","New York","NY","40.762808","-73.978534","-5","1" +"10106","New York","NY","40.765243","-73.980438","-5","1" +"10107","New York","NY","40.766429","-73.982728","-5","1" +"10108","New York","NY","40.780751","-73.977182","-5","1" +"10109","New York","NY","40.780751","-73.977182","-5","1" +"10110","New York","NY","40.753987","-73.980811","-5","1" +"10111","New York","NY","40.759235","-73.97775","-5","1" +"10112","New York","NY","40.759291","-73.97979","-5","1" +"10113","New York","NY","40.780751","-73.977182","-5","1" +"10114","New York","NY","40.780751","-73.977182","-5","1" +"10115","New York","NY","40.810906","-73.96375","-5","1" +"10116","New York","NY","40.780751","-73.977182","-5","1" +"10117","New York","NY","40.780751","-73.977182","-5","1" +"10118","New York","NY","40.748998","-73.986467","-5","1" +"10119","New York","NY","40.750824","-73.99289","-5","1" +"10120","New York","NY","40.750629","-73.989426","-5","1" +"10121","New York","NY","40.74964","-73.991889","-5","1" +"10122","New York","NY","40.751757","-73.992171","-5","1" +"10123","New York","NY","40.751489","-73.990537","-5","1" +"10124","New York","NY","40.780751","-73.977182","-5","1" +"10125","New York","NY","40.780751","-73.977182","-5","1" +"10126","New York","NY","40.780751","-73.977182","-5","1" +"10128","New York","NY","40.781894","-73.95039","-5","1" +"10129","New York","NY","40.780751","-73.977182","-5","1" +"10130","New York","NY","40.780751","-73.977182","-5","1" +"10131","New York","NY","40.780751","-73.977182","-5","1" +"10132","New York","NY","40.780751","-73.977182","-5","1" +"10133","New York","NY","40.780751","-73.977182","-5","1" +"10138","New York","NY","40.780751","-73.977182","-5","1" +"10149","New York","NY","40.780751","-73.977182","-5","1" +"10150","New York","NY","40.780751","-73.977182","-5","1" +"10151","New York","NY","40.763419","-73.973971","-5","1" +"10152","New York","NY","40.758611","-73.97223","-5","1" +"10153","New York","NY","40.763742","-73.97268","-5","1" +"10154","New York","NY","40.757986","-73.97267","-5","1" +"10155","New York","NY","40.761104","-73.968036","-5","1" +"10156","New York","NY","40.780751","-73.977182","-5","1" +"10157","New York","NY","40.780751","-73.977182","-5","1" +"10158","New York","NY","40.749435","-73.9758","-5","1" +"10159","New York","NY","40.780751","-73.977182","-5","1" +"10160","New York","NY","40.780751","-73.977182","-5","1" +"10161","New York","NY","40.780751","-73.977182","-5","1" +"10162","New York","NY","40.769334","-73.94893","-5","1" +"10163","New York","NY","40.780751","-73.977182","-5","1" +"10164","New York","NY","40.780751","-73.977182","-5","1" +"10165","New York","NY","40.752354","-73.9789","-5","1" +"10166","New York","NY","40.754591","-73.976238","-5","1" +"10167","New York","NY","40.754862","-73.97495","-5","1" +"10168","New York","NY","40.751933","-73.976794","-5","1" +"10169","New York","NY","40.754463","-73.97606","-5","1" +"10170","New York","NY","40.752859","-73.97608","-5","1" +"10171","New York","NY","40.756099","-73.97401","-5","1" +"10172","New York","NY","40.755494","-73.97447","-5","1" +"10173","New York","NY","40.754302","-73.97955","-5","1" +"10174","New York","NY","40.751656","-73.97516","-5","1" +"10175","New York","NY","40.754305","-73.979782","-5","1" +"10176","New York","NY","40.75557","-73.978877","-5","1" +"10177","New York","NY","40.755345","-73.97609","-5","1" +"10178","New York","NY","40.751378","-73.978507","-5","1" +"10179","New York","NY","40.780751","-73.977182","-5","1" +"10184","New York","NY","40.780751","-73.977182","-5","1" +"10185","New York","NY","40.780751","-73.977182","-5","1" +"10196","New York","NY","40.780751","-73.977182","-5","1" +"10197","New York","NY","40.780751","-73.977182","-5","1" +"10199","New York","NY","40.750308","-74.00058","-5","1" +"10203","New York","NY","40.780751","-73.977182","-5","1" +"10211","New York","NY","40.780751","-73.977182","-5","1" +"10212","New York","NY","40.780751","-73.977182","-5","1" +"10213","New York","NY","40.780751","-73.977182","-5","1" +"10242","New York","NY","40.780751","-73.977182","-5","1" +"10249","New York","NY","40.780751","-73.977182","-5","1" +"10250","New York","NY","40.709387","-74.016529","-5","1" +"10256","New York","NY","40.780751","-73.977182","-5","1" +"10257","New York","NY","40.780751","-73.977182","-5","1" +"10258","New York","NY","40.780751","-73.977182","-5","1" +"10259","New York","NY","40.780751","-73.977182","-5","1" +"10260","New York","NY","40.780751","-73.977182","-5","1" +"10261","New York","NY","40.780751","-73.977182","-5","1" +"10265","New York","NY","40.780751","-73.977182","-5","1" +"10268","New York","NY","40.780751","-73.977182","-5","1" +"10269","New York","NY","40.780751","-73.977182","-5","1" +"10270","New York","NY","40.706925","-74.008154","-5","1" +"10271","New York","NY","40.708669","-74.01043","-5","1" +"10272","New York","NY","40.780751","-73.977182","-5","1" +"10273","New York","NY","40.780751","-73.977182","-5","1" +"10274","New York","NY","40.780751","-73.977182","-5","1" +"10275","New York","NY","40.780751","-73.977182","-5","1" +"10276","New York","NY","40.780751","-73.977182","-5","1" +"10277","New York","NY","40.780751","-73.977182","-5","1" +"10278","New York","NY","40.715721","-74.00395","-5","1" +"10279","New York","NY","40.713062","-74.00857","-5","1" +"10280","New York","NY","40.707467","-74.0178","-5","1" +"10281","New York","NY","40.714643","-74.014958","-5","1" +"10282","New York","NY","40.717179","-74.01433","-5","1" +"10285","New York","NY","40.71533","-74.016306","-5","1" +"10286","New York","NY","40.714231","-74.011895","-5","1" +"10292","New York","NY","40.780751","-73.977182","-5","1" +"10301","Staten Island","NY","40.631775","-74.09432","-5","1" +"10302","Staten Island","NY","40.631127","-74.13715","-5","1" +"10303","Staten Island","NY","40.629448","-74.16239","-5","1" +"10304","Staten Island","NY","40.60787","-74.08991","-5","1" +"10305","Staten Island","NY","40.599021","-74.07503","-5","1" +"10306","Staten Island","NY","40.569394","-74.11785","-5","1" +"10307","Staten Island","NY","40.508274","-74.24387","-5","1" +"10308","Staten Island","NY","40.551353","-74.15098","-5","1" +"10309","Staten Island","NY","40.529749","-74.21304","-5","1" +"10310","Staten Island","NY","40.63212","-74.11551","-5","1" +"10311","Staten Island","NY","40.605245","-74.179485","-5","1" +"10312","Staten Island","NY","40.543117","-74.17628","-5","1" +"10313","Staten Island","NY","40.564393","-74.146836","-5","1" +"10314","Staten Island","NY","40.606337","-74.14513","-5","1" +"10422","New York","NY","40.828279","-73.869454","-5","1" +"10451","Bronx","NY","40.819729","-73.9223","-5","1" +"10452","Bronx","NY","40.838745","-73.92234","-5","1" +"10453","Bronx","NY","40.853017","-73.91214","-5","1" +"10454","Bronx","NY","40.805968","-73.91628","-5","1" +"10455","Bronx","NY","40.815559","-73.90771","-5","1" +"10456","Bronx","NY","40.829676","-73.90856","-5","1" +"10457","Bronx","NY","40.846745","-73.89861","-5","1" +"10458","Bronx","NY","40.864166","-73.88881","-5","1" +"10459","Bronx","NY","40.825432","-73.89327","-5","1" +"10460","Bronx","NY","40.84095","-73.88036","-5","1" +"10461","Bronx","NY","40.842917","-73.83819","-5","1" +"10462","Bronx","NY","40.842173","-73.85862","-5","1" +"10463","Bronx","NY","40.881086","-73.90749","-5","1" +"10464","Bronx","NY","40.857017","-73.78903","-5","1" +"10465","Bronx","NY","40.825727","-73.81752","-5","1" +"10466","Bronx","NY","40.89095","-73.84702","-5","1" +"10467","Bronx","NY","40.872265","-73.86937","-5","1" +"10468","Bronx","NY","40.867107","-73.89916","-5","1" +"10469","Bronx","NY","40.868643","-73.84735","-5","1" +"10470","Bronx","NY","40.900629","-73.86072","-5","1" +"10471","Bronx","NY","40.900819","-73.90347","-5","1" +"10472","Bronx","NY","40.830409","-73.86845","-5","1" +"10473","Bronx","NY","40.818514","-73.85893","-5","1" +"10474","Bronx","NY","40.81321","-73.88755","-5","1" +"10475","Bronx","NY","40.878522","-73.82541","-5","1" +"10499","Bronx","NY","40.851549","-73.840908","-5","1" +"10501","Amawalk","NY","41.289939","-73.76493","-5","1" +"10502","Ardsley","NY","41.011324","-73.84152","-5","1" +"10503","Ardsley On Hudson","NY","41.024855","-73.87513","-5","1" +"10504","Armonk","NY","41.129908","-73.70352","-5","1" +"10505","Baldwin Place","NY","41.33431","-73.749244","-5","1" +"10506","Bedford","NY","41.195778","-73.62777","-5","1" +"10507","Bedford Hills","NY","41.236931","-73.69018","-5","1" +"10509","Brewster","NY","41.41362","-73.59556","-5","1" +"10510","Briarcliff Manor","NY","41.146297","-73.83311","-5","1" +"10511","Buchanan","NY","41.260283","-73.94033","-5","1" +"10512","Carmel","NY","41.444833","-73.6845","-5","1" +"10514","Chappaqua","NY","41.167455","-73.77597","-5","1" +"10516","Cold Spring","NY","41.440695","-73.9314","-5","1" +"10517","Crompond","NY","41.300561","-73.861217","-5","1" +"10518","Cross River","NY","41.269072","-73.60493","-5","1" +"10519","Croton Falls","NY","41.34598","-73.66199","-5","1" +"10520","Croton On Hudson","NY","41.215541","-73.88543","-5","1" +"10521","Croton On Hudson","NY","41.234256","-73.926165","-5","1" +"10522","Dobbs Ferry","NY","41.012729","-73.86602","-5","1" +"10523","Elmsford","NY","41.057089","-73.81658","-5","1" +"10524","Garrison","NY","41.363063","-73.92154","-5","1" +"10526","Goldens Bridge","NY","41.294561","-73.66701","-5","1" +"10527","Granite Springs","NY","41.319026","-73.7576","-5","1" +"10528","Harrison","NY","40.972667","-73.71886","-5","1" +"10530","Hartsdale","NY","41.025114","-73.80635","-5","1" +"10532","Hawthorne","NY","41.103664","-73.7958","-5","1" +"10533","Irvington","NY","41.039005","-73.8635","-5","1" +"10535","Jefferson Valley","NY","41.331173","-73.80208","-5","1" +"10536","Katonah","NY","41.265478","-73.68512","-5","1" +"10537","Lake Peekskill","NY","41.337335","-73.88689","-5","1" +"10538","Larchmont","NY","40.933089","-73.75615","-5","1" +"10540","Lincolndale","NY","41.333398","-73.724257","-5","1" +"10541","Mahopac","NY","41.372419","-73.75367","-5","1" +"10542","Mahopac Falls","NY","41.372581","-73.760132","-5","1" +"10543","Mamaroneck","NY","40.952892","-73.7346","-5","1" +"10545","Maryknoll","NY","41.119008","-73.732996","-5","1" +"10546","Millwood","NY","41.199502","-73.79269","-5","1" +"10547","Mohegan Lake","NY","41.314676","-73.85118","-5","1" +"10548","Montrose","NY","41.248359","-73.94147","-5","1" +"10549","Mount Kisco","NY","41.204027","-73.73045","-5","1" +"10550","Mount Vernon","NY","40.907607","-73.83709","-5","1" +"10551","Mount Vernon","NY","41.119008","-73.732996","-5","1" +"10552","Mount Vernon","NY","40.924195","-73.82614","-5","1" +"10553","Mount Vernon","NY","40.909288","-73.8215","-5","1" +"10557","Mount Vernon","NY","41.119008","-73.732996","-5","1" +"10558","Mount Vernon","NY","41.119008","-73.732996","-5","1" +"10559","Mount Vernon","NY","41.119008","-73.732996","-5","1" +"10560","North Salem","NY","41.32797","-73.61306","-5","1" +"10562","Ossining","NY","41.176837","-73.84741","-5","1" +"10566","Peekskill","NY","41.288258","-73.91928","-5","1" +"10567","Cortlandt Manor","NY","41.300813","-73.8908","-5","1" +"10570","Pleasantville","NY","41.132367","-73.78922","-5","1" +"10571","Pleasantville","NY","41.119008","-73.732996","-5","1" +"10572","Pleasantville","NY","41.119008","-73.732996","-5","1" +"10573","Port Chester","NY","41.010376","-73.67326","-5","1" +"10576","Pound Ridge","NY","41.212954","-73.58409","-5","1" +"10577","Purchase","NY","41.037203","-73.71588","-5","1" +"10578","Purdys","NY","41.3252","-73.66906","-5","1" +"10579","Putnam Valley","NY","41.390356","-73.8377","-5","1" +"10580","Rye","NY","40.976579","-73.69002","-5","1" +"10581","Rye","NY","41.119008","-73.732996","-5","1" +"10583","Scarsdale","NY","40.98845","-73.79716","-5","1" +"10586","Greenville","NY","40.997751","-73.820321","-5","1" +"10587","Shenorock","NY","41.328737","-73.742268","-5","1" +"10588","Shrub Oak","NY","41.330178","-73.82973","-5","1" +"10589","Somers","NY","41.331587","-73.69234","-5","1" +"10590","South Salem","NY","41.256639","-73.54076","-5","1" +"10591","Tarrytown","NY","41.080196","-73.85721","-5","1" +"10592","Tarrytown","NY","41.119008","-73.732996","-5","1" +"10594","Thornwood","NY","41.120025","-73.77687","-5","1" +"10595","Valhalla","NY","41.083848","-73.77785","-5","1" +"10596","Verplanck","NY","41.254823","-73.958727","-5","1" +"10597","Waccabuc","NY","41.289162","-73.58834","-5","1" +"10598","Yorktown Heights","NY","41.296874","-73.78934","-5","1" +"10601","White Plains","NY","41.032489","-73.76454","-5","1" +"10602","White Plains","NY","41.119008","-73.732996","-5","1" +"10603","White Plains","NY","41.053182","-73.77672","-5","1" +"10604","West Harrison","NY","41.045387","-73.74451","-5","1" +"10605","White Plains","NY","41.01002","-73.75158","-5","1" +"10606","White Plains","NY","41.024107","-73.77808","-5","1" +"10607","White Plains","NY","41.041191","-73.80953","-5","1" +"10610","White Plains","NY","41.119008","-73.732996","-5","1" +"10625","White Plains","NY","41.119008","-73.732996","-5","1" +"10629","White Plains","NY","41.119008","-73.732996","-5","1" +"10633","White Plains","NY","41.119008","-73.732996","-5","1" +"10650","White Plains","NY","41.013696","-73.705975","-5","1" +"10701","Yonkers","NY","40.943525","-73.88176","-5","1" +"10702","Yonkers","NY","41.119008","-73.732996","-5","1" +"10703","Yonkers","NY","40.956546","-73.8799","-5","1" +"10704","Yonkers","NY","40.920273","-73.8612","-5","1" +"10705","Yonkers","NY","40.917281","-73.89142","-5","1" +"10706","Hastings On Hudson","NY","40.992084","-73.8729","-5","1" +"10707","Tuckahoe","NY","40.958689","-73.82363","-5","1" +"10708","Bronxville","NY","40.939049","-73.83099","-5","1" +"10709","Eastchester","NY","40.953849","-73.81143","-5","1" +"10710","Yonkers","NY","40.96555","-73.84506","-5","1" +"10730","Woodbury","NY","41.358899","-74.122951","-5","1" +"10801","New Rochelle","NY","40.915845","-73.78643","-5","1" +"10802","New Rochelle","NY","40.948274","-73.795361","-5","1" +"10803","Pelham","NY","40.902221","-73.80717","-5","1" +"10804","Wykagyl","NY","40.946805","-73.78797","-5","1" +"10805","New Rochelle","NY","40.897783","-73.77933","-5","1" +"10901","Suffern","NY","41.125695","-74.12682","-5","1" +"10910","Arden","NY","41.386195","-74.125718","-5","1" +"10911","Bear Mountain","NY","41.160945","-74.060826","-5","1" +"10912","Bellvale","NY","41.387822","-74.354699","-5","1" +"10913","Blauvelt","NY","41.062779","-73.96016","-5","1" +"10914","Blooming Grove","NY","41.464867","-74.255646","-5","1" +"10915","Bullville","NY","41.555634","-74.328805","-5","1" +"10916","Campbell Hall","NY","41.451074","-74.24346","-5","1" +"10917","Central Valley","NY","41.322344","-74.12354","-5","1" +"10918","Chester","NY","41.35648","-74.26072","-5","1" +"10919","Circleville","NY","41.525781","-74.37907","-5","1" +"10920","Congers","NY","41.149245","-73.94287","-5","1" +"10921","Florida","NY","41.332519","-74.35931","-5","1" +"10922","Fort Montgomery","NY","41.334557","-73.99175","-5","1" +"10923","Garnerville","NY","41.204544","-74.00161","-5","1" +"10924","Goshen","NY","41.38928","-74.3337","-5","1" +"10925","Greenwood Lake","NY","41.211794","-74.29778","-5","1" +"10926","Harriman","NY","41.299334","-74.14049","-5","1" +"10927","Haverstraw","NY","41.196044","-73.96836","-5","1" +"10928","Highland Falls","NY","41.360336","-73.97293","-5","1" +"10930","Highland Mills","NY","41.35805","-74.12096","-5","1" +"10931","Hillburn","NY","41.126395","-74.16718","-5","1" +"10932","Howells","NY","41.485227","-74.484249","-5","1" +"10933","Johnson","NY","41.365286","-74.510918","-5","1" +"10940","Middletown","NY","41.449364","-74.43951","-5","1" +"10941","Middletown","NY","41.478028","-74.35844","-5","1" +"10943","Middletown","NY","41.387822","-74.354699","-5","1" +"10946","Wallkill","NY","41.507236","-74.412119","-5","1" +"10950","Monroe","NY","41.323547","-74.19531","-5","1" +"10952","Monsey","NY","41.116162","-74.07556","-5","1" +"10953","Mountainville","NY","41.409284","-74.083045","-5","1" +"10954","Nanuet","NY","41.100182","-74.0133","-5","1" +"10956","New City","NY","41.145495","-73.9949","-5","1" +"10957","Lewisboro","NY","41.308218","-73.613803","-5","1" +"10958","New Hampton","NY","41.384738","-74.41571","-5","1" +"10959","New Milford","NY","41.387822","-74.354699","-5","1" +"10960","Nyack","NY","41.089746","-73.9258","-5","1" +"10962","Orangeburg","NY","41.047996","-73.96215","-5","1" +"10963","Otisville","NY","41.475197","-74.53847","-5","1" +"10964","Palisades","NY","41.011464","-73.92585","-5","1" +"10965","Pearl River","NY","41.063329","-74.01734","-5","1" +"10968","Piermont","NY","41.040623","-73.91878","-5","1" +"10969","Pine Island","NY","41.295568","-74.48935","-5","1" +"10970","Pomona","NY","41.192394","-74.04523","-5","1" +"10973","Slate Hill","NY","41.391172","-74.47758","-5","1" +"10974","Sloatsburg","NY","41.156095","-74.19214","-5","1" +"10975","Southfields","NY","41.246428","-74.17141","-5","1" +"10976","Sparkill","NY","41.028647","-73.92817","-5","1" +"10977","Spring Valley","NY","41.116795","-74.04504","-5","1" +"10979","Sterling Forest","NY","41.182344","-74.318354","-5","1" +"10980","Stony Point","NY","41.231408","-74.01157","-5","1" +"10981","Sugar Loaf","NY","41.323172","-74.288565","-5","1" +"10982","Tallman","NY","41.160945","-74.060826","-5","1" +"10983","Tappan","NY","41.025897","-73.95118","-5","1" +"10984","Thiells","NY","41.208327","-74.02105","-5","1" +"10985","Thompson Ridge","NY","41.580793","-74.37451","-5","1" +"10986","Tomkins Cove","NY","41.271543","-73.98676","-5","1" +"10987","Tuxedo Park","NY","41.197123","-74.21069","-5","1" +"10988","Unionville","NY","41.314931","-74.550346","-5","1" +"10989","Valley Cottage","NY","41.119788","-73.94455","-5","1" +"10990","Warwick","NY","41.259896","-74.35837","-5","1" +"10992","Washingtonville","NY","41.428269","-74.16178","-5","1" +"10993","West Haverstraw","NY","41.207594","-73.97772","-5","1" +"10994","West Nyack","NY","41.097529","-73.96996","-5","1" +"10995","West Nyack","NY","41.160945","-74.060826","-5","1" +"10996","West Point","NY","41.376109","-73.9788","-5","1" +"10997","West Point","NY","41.387822","-74.354699","-5","1" +"10998","Westtown","NY","41.334034","-74.54593","-5","1" +"11001","Floral Park","NY","40.7232","-73.70475","-5","1" +"11002","Floral Park","NY","40.754757","-73.601772","-5","1" +"11003","Elmont","NY","40.700529","-73.70223","-5","1" +"11004","Glen Oaks","NY","40.742944","-73.70956","-5","1" +"11005","Floral Park","NY","40.756983","-73.7148","-5","1" +"11010","Franklin Square","NY","40.701702","-73.67562","-5","1" +"11020","Great Neck","NY","40.771082","-73.71819","-5","1" +"11021","Great Neck","NY","40.787068","-73.72577","-5","1" +"11022","Great Neck","NY","40.754757","-73.601772","-5","1" +"11023","Great Neck","NY","40.798839","-73.73352","-5","1" +"11024","Great Neck","NY","40.812887","-73.74094","-5","1" +"11025","Great Neck","NY","40.754757","-73.601772","-5","1" +"11026","Great Neck","NY","40.754757","-73.601772","-5","1" +"11027","Great Neck","NY","40.754757","-73.601772","-5","1" +"11030","Manhasset","NY","40.796752","-73.68935","-5","1" +"11040","New Hyde Park","NY","40.742901","-73.67895","-5","1" +"11041","New Hyde Park","NY","40.754757","-73.601772","-5","1" +"11042","New Hyde Park","NY","40.760128","-73.69379","-5","1" +"11043","New Hyde Park","NY","40.754757","-73.601772","-5","1" +"11044","New Hyde Park","NY","40.754757","-73.601772","-5","1" +"11050","Port Washington","NY","40.833246","-73.69309","-5","1" +"11051","Port Washington","NY","40.754757","-73.601772","-5","1" +"11052","Port Washington","NY","40.754757","-73.601772","-5","1" +"11053","Port Washington","NY","40.754757","-73.601772","-5","1" +"11054","Port Washington","NY","40.754757","-73.601772","-5","1" +"11055","Port Washington","NY","40.754757","-73.601772","-5","1" +"11096","Inwood","NY","40.618206","-73.74762","-5","1" +"11099","New Hyde Park","NY","40.754757","-73.601772","-5","1" +"11101","Long Island City","NY","40.745341","-73.93907","-5","1" +"11102","Astoria","NY","40.771286","-73.92462","-5","1" +"11103","Astoria","NY","40.762968","-73.91091","-5","1" +"11104","Sunnyside","NY","40.743796","-73.91949","-5","1" +"11105","Astoria","NY","40.774686","-73.90816","-5","1" +"11106","Astoria","NY","40.762012","-73.93147","-5","1" +"11109","Long Island City","NY","40.651378","-73.870779","-5","1" +"11120","Long Island City","NY","40.651378","-73.870779","-5","1" +"11201","Brooklyn","NY","40.695286","-73.98907","-5","1" +"11202","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11203","Brooklyn","NY","40.649059","-73.93304","-5","1" +"11204","Brooklyn","NY","40.618944","-73.98473","-5","1" +"11205","Brooklyn","NY","40.694214","-73.96529","-5","1" +"11206","Brooklyn","NY","40.702348","-73.94288","-5","1" +"11207","Brooklyn","NY","40.670874","-73.89424","-5","1" +"11208","Brooklyn","NY","40.672666","-73.87248","-5","1" +"11209","Brooklyn","NY","40.62327","-74.0295","-5","1" +"11210","Brooklyn","NY","40.627946","-73.94552","-5","1" +"11211","Brooklyn","NY","40.71209","-73.95427","-5","1" +"11212","Brooklyn","NY","40.662191","-73.91328","-5","1" +"11213","Brooklyn","NY","40.670937","-73.93459","-5","1" +"11214","Brooklyn","NY","40.598994","-73.99611","-5","1" +"11215","Brooklyn","NY","40.667508","-73.9856","-5","1" +"11216","Brooklyn","NY","40.680398","-73.94824","-5","1" +"11217","Brooklyn","NY","40.68209","-73.97783","-5","1" +"11218","Brooklyn","NY","40.644552","-73.97595","-5","1" +"11219","Brooklyn","NY","40.632449","-73.99629","-5","1" +"11220","Brooklyn","NY","40.641436","-74.01574","-5","1" +"11221","Brooklyn","NY","40.691234","-73.92637","-5","1" +"11222","Brooklyn","NY","40.726302","-73.94559","-5","1" +"11223","Brooklyn","NY","40.598142","-73.97229","-5","1" +"11224","Brooklyn","NY","40.576589","-73.99172","-5","1" +"11225","Brooklyn","NY","40.662892","-73.95509","-5","1" +"11226","Brooklyn","NY","40.645256","-73.95553","-5","1" +"11228","Brooklyn","NY","40.617563","-74.01168","-5","1" +"11229","Brooklyn","NY","40.599256","-73.94118","-5","1" +"11230","Brooklyn","NY","40.622994","-73.96427","-5","1" +"11231","Brooklyn","NY","40.6788","-74.00254","-5","1" +"11232","Brooklyn","NY","40.655481","-74.00424","-5","1" +"11233","Brooklyn","NY","40.676938","-73.91858","-5","1" +"11234","Brooklyn","NY","40.618561","-73.9216","-5","1" +"11235","Brooklyn","NY","40.583803","-73.95019","-5","1" +"11236","Brooklyn","NY","40.640527","-73.90362","-5","1" +"11237","Brooklyn","NY","40.703355","-73.91993","-5","1" +"11238","Brooklyn","NY","40.680145","-73.96257","-5","1" +"11239","Brooklyn","NY","40.645848","-73.87919","-5","1" +"11240","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11241","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11242","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11243","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11244","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11245","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11247","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11248","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11249","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11251","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11252","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11254","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11255","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11256","Brooklyn","NY","40.645099","-73.945032","-5","1" +"11286","New York","NY","40.658825","-74.004495","-5","1" +"11302","New York","NY","40.75945","-73.715016","-5","1" +"11351","Flushing","NY","40.781703","-73.831698","-5","1" +"11352","Flushing","NY","40.651378","-73.870779","-5","1" +"11353","Flushing","NY","40.651378","-73.870779","-5","1" +"11354","Flushing","NY","40.767969","-73.82496","-5","1" +"11355","Flushing","NY","40.749463","-73.81941","-5","1" +"11356","College Point","NY","40.785462","-73.84366","-5","1" +"11357","Whitestone","NY","40.784453","-73.80922","-5","1" +"11358","Flushing","NY","40.760522","-73.79612","-5","1" +"11359","Bayside","NY","40.79278","-73.776701","-5","1" +"11360","Bayside","NY","40.780386","-73.78005","-5","1" +"11361","Bayside","NY","40.763177","-73.77392","-5","1" +"11362","Little Neck","NY","40.759686","-73.73322","-5","1" +"11363","Little Neck","NY","40.772636","-73.74644","-5","1" +"11364","Oakland Gardens","NY","40.746718","-73.75994","-5","1" +"11365","Fresh Meadows","NY","40.738983","-73.79209","-5","1" +"11366","Fresh Meadows","NY","40.726137","-73.79502","-5","1" +"11367","Flushing","NY","40.728614","-73.82145","-5","1" +"11368","Corona","NY","40.747106","-73.85838","-5","1" +"11369","East Elmhurst","NY","40.762854","-73.87051","-5","1" +"11370","East Elmhurst","NY","40.763015","-73.89052","-5","1" +"11371","Flushing","NY","40.772072","-73.87509","-5","1" +"11372","Jackson Heights","NY","40.750146","-73.88433","-5","1" +"11373","Elmhurst","NY","40.736076","-73.87804","-5","1" +"11374","Rego Park","NY","40.724945","-73.8609","-5","1" +"11375","Forest Hills","NY","40.720535","-73.84582","-5","1" +"11377","Woodside","NY","40.742869","-73.90377","-5","1" +"11378","Maspeth","NY","40.724096","-73.90271","-5","1" +"11379","Middle Village","NY","40.716028","-73.87925","-5","1" +"11380","Elmhurst","NY","40.651378","-73.870779","-5","1" +"11381","Flushing","NY","40.651378","-73.870779","-5","1" +"11385","Ridgewood","NY","40.703069","-73.89285","-5","1" +"11386","Ridgewood","NY","40.651378","-73.870779","-5","1" +"11388","Flushing","NY","40.651378","-73.870779","-5","1" +"11390","Flushing","NY","40.651378","-73.870779","-5","1" +"11405","Jamaica","NY","40.651378","-73.870779","-5","1" +"11411","Cambria Heights","NY","40.693538","-73.73574","-5","1" +"11412","Saint Albans","NY","40.697188","-73.75948","-5","1" +"11413","Springfield Gardens","NY","40.670138","-73.75141","-5","1" +"11414","Howard Beach","NY","40.658188","-73.84321","-5","1" +"11415","Kew Gardens","NY","40.706903","-73.82973","-5","1" +"11416","Ozone Park","NY","40.683301","-73.8503","-5","1" +"11417","Ozone Park","NY","40.675534","-73.84476","-5","1" +"11418","Richmond Hill","NY","40.698485","-73.83365","-5","1" +"11419","South Richmond Hill","NY","40.688688","-73.82216","-5","1" +"11420","South Ozone Park","NY","40.673138","-73.81443","-5","1" +"11421","Woodhaven","NY","40.69087","-73.85828","-5","1" +"11422","Rosedale","NY","40.662538","-73.73514","-5","1" +"11423","Hollis","NY","40.714261","-73.76824","-5","1" +"11424","Jamaica","NY","40.651378","-73.870779","-5","1" +"11425","Jamaica","NY","40.651378","-73.870779","-5","1" +"11426","Bellerose","NY","40.732239","-73.72108","-5","1" +"11427","Queens Village","NY","40.728235","-73.74782","-5","1" +"11428","Queens Village","NY","40.719981","-73.74127","-5","1" +"11429","Queens Village","NY","40.708833","-73.73903","-5","1" +"11430","Jamaica","NY","40.650519","-73.79567","-5","1" +"11431","Jamaica","NY","40.686903","-73.850143","-5","1" +"11432","Jamaica","NY","40.714144","-73.79324","-5","1" +"11433","Jamaica","NY","40.696538","-73.78734","-5","1" +"11434","Jamaica","NY","40.674888","-73.7727","-5","1" +"11435","Jamaica","NY","40.700068","-73.80986","-5","1" +"11436","Jamaica","NY","40.674146","-73.79687","-5","1" +"11439","Jamaica","NY","40.722008","-73.790822","-5","1" +"11451","Jamaica","NY","40.651378","-73.870779","-5","1" +"11484","Jamaica","NY","40.651378","-73.870779","-5","1" +"11499","Jamaica","NY","40.651378","-73.870779","-5","1" +"11501","Mineola","NY","40.747188","-73.63808","-5","1" +"11507","Albertson","NY","40.769942","-73.65004","-5","1" +"11509","Atlantic Beach","NY","40.589538","-73.72915","-5","1" +"11510","Baldwin","NY","40.654112","-73.6095","-5","1" +"11514","Carle Place","NY","40.750132","-73.61328","-5","1" +"11516","Cedarhurst","NY","40.627386","-73.72852","-5","1" +"11517","New York","NY","40.679845","-73.986415","-5","1" +"11518","East Rockaway","NY","40.639575","-73.66703","-5","1" +"11520","Freeport","NY","40.653935","-73.587","-5","1" +"11530","Garden City","NY","40.725257","-73.64056","-5","1" +"11531","Garden City","NY","40.754757","-73.601772","-5","1" +"11535","Garden City","NY","40.754757","-73.601772","-5","1" +"11536","Garden City","NY","40.754757","-73.601772","-5","1" +"11542","Glen Cove","NY","40.864757","-73.62609","-5","1" +"11545","Glen Head","NY","40.823957","-73.60415","-5","1" +"11547","Glenwood Landing","NY","40.828143","-73.64401","-5","1" +"11548","Greenvale","NY","40.813187","-73.62561","-5","1" +"11549","Hempstead","NY","40.754757","-73.601772","-5","1" +"11550","Hempstead","NY","40.702271","-73.61741","-5","1" +"11551","Hempstead","NY","40.754757","-73.601772","-5","1" +"11552","West Hempstead","NY","40.6949","-73.65394","-5","1" +"11553","Uniondale","NY","40.703502","-73.59306","-5","1" +"11554","East Meadow","NY","40.7143","-73.55527","-5","1" +"11555","Uniondale","NY","40.754757","-73.601772","-5","1" +"11556","Uniondale","NY","40.754757","-73.601772","-5","1" +"11557","Hewlett","NY","40.639534","-73.69253","-5","1" +"11558","Island Park","NY","40.603159","-73.65515","-5","1" +"11559","Lawrence","NY","40.61579","-73.73126","-5","1" +"11560","Locust Valley","NY","40.881957","-73.59417","-5","1" +"11561","Long Beach","NY","40.588154","-73.66517","-5","1" +"11562","Lynbrook","NY","40.665202","-73.668274","-5","1" +"11563","Lynbrook","NY","40.656974","-73.67306","-5","1" +"11564","Lynbrook","NY","40.754757","-73.601772","-5","1" +"11565","Malverne","NY","40.675249","-73.67298","-5","1" +"11566","Merrick","NY","40.666575","-73.55475","-5","1" +"11568","Old Westbury","NY","40.787368","-73.60119","-5","1" +"11569","Point Lookout","NY","40.593996","-73.58039","-5","1" +"11570","Rockville Centre","NY","40.663935","-73.63792","-5","1" +"11571","Rockville Centre","NY","40.754757","-73.601772","-5","1" +"11572","Oceanside","NY","40.636286","-73.6374","-5","1" +"11575","Roosevelt","NY","40.679413","-73.58694","-5","1" +"11576","Roslyn","NY","40.793839","-73.65156","-5","1" +"11577","Roslyn Heights","NY","40.785642","-73.64006","-5","1" +"11579","Sea Cliff","NY","40.846388","-73.64452","-5","1" +"11580","Valley Stream","NY","40.673","-73.70346","-5","1" +"11581","Valley Stream","NY","40.651733","-73.71079","-5","1" +"11582","Valley Stream","NY","40.754757","-73.601772","-5","1" +"11583","Valley Stream","NY","40.754757","-73.601772","-5","1" +"11588","Uniondale","NY","40.754757","-73.601772","-5","1" +"11590","Westbury","NY","40.756287","-73.57536","-5","1" +"11592","Rockville Centre","NY","40.621753","-73.632673","-5","1" +"11593","Westbury","NY","40.754757","-73.601772","-5","1" +"11594","Westbury","NY","40.754757","-73.601772","-5","1" +"11595","Westbury","NY","40.754757","-73.601772","-5","1" +"11596","Williston Park","NY","40.758283","-73.64259","-5","1" +"11597","Westbury","NY","40.754757","-73.601772","-5","1" +"11598","Woodmere","NY","40.633103","-73.71404","-5","1" +"11599","Garden City","NY","40.607574","-73.742691","-5","1" +"11690","Far Rockaway","NY","40.651378","-73.870779","-5","1" +"11691","Far Rockaway","NY","40.60002","-73.75962","-5","1" +"11692","Arverne","NY","40.592939","-73.79568","-5","1" +"11693","Far Rockaway","NY","40.596959","-73.81978","-5","1" +"11694","Rockaway Park","NY","40.57649","-73.84721","-5","1" +"11695","Far Rockaway","NY","40.651378","-73.870779","-5","1" +"11696","Inwood","NY","40.651378","-73.870779","-5","1" +"11697","Breezy Point","NY","40.560167","-73.90891","-5","1" +"11701","Amityville","NY","40.6851","-73.41317","-5","1" +"11702","Babylon","NY","40.687649","-73.32549","-5","1" +"11703","North Babylon","NY","40.733398","-73.32257","-5","1" +"11704","West Babylon","NY","40.719249","-73.35829","-5","1" +"11705","Bayport","NY","40.74485","-73.055","-5","1" +"11706","Bay Shore","NY","40.729098","-73.25607","-5","1" +"11707","West Babylon","NY","40.922326","-72.637078","-5","1" +"11708","Amityville","NY","40.922326","-72.637078","-5","1" +"11709","Bayville","NY","40.907277","-73.55713","-5","1" +"11710","Bellmore","NY","40.673438","-73.53382","-5","1" +"11713","Bellport","NY","40.771447","-72.94663","-5","1" +"11714","Bethpage","NY","40.740662","-73.48631","-5","1" +"11715","Blue Point","NY","40.74897","-73.03436","-5","1" +"11716","Bohemia","NY","40.770042","-73.11376","-5","1" +"11717","Brentwood","NY","40.783954","-73.24517","-5","1" +"11718","Brightwaters","NY","40.720746","-73.26614","-5","1" +"11719","Brookhaven","NY","40.780058","-72.91566","-5","1" +"11720","Centereach","NY","40.868946","-73.08009","-5","1" +"11721","Centerport","NY","40.890598","-73.37536","-5","1" +"11722","Central Islip","NY","40.784874","-73.19924","-5","1" +"11724","Cold Spring Harbor","NY","40.865731","-73.44645","-5","1" +"11725","Commack","NY","40.841522","-73.28001","-5","1" +"11726","Copiague","NY","40.680892","-73.39609","-5","1" +"11727","Coram","NY","40.884895","-73.00501","-5","1" +"11729","Deer Park","NY","40.760698","-73.33007","-5","1" +"11730","East Islip","NY","40.72921","-73.18073","-5","1" +"11731","East Northport","NY","40.865998","-73.31796","-5","1" +"11732","East Norwich","NY","40.848766","-73.53478","-5","1" +"11733","East Setauket","NY","40.932053","-73.10666","-5","1" +"11735","Farmingdale","NY","40.725968","-73.44151","-5","1" +"11736","Farmingdale","NY","40.754757","-73.601772","-5","1" +"11737","Farmingdale","NY","40.754757","-73.601772","-5","1" +"11738","Farmingville","NY","40.83469","-73.0386","-5","1" +"11739","Great River","NY","40.922326","-72.637078","-5","1" +"11740","Greenlawn","NY","40.862565","-73.36221","-5","1" +"11741","Holbrook","NY","40.799706","-73.07485","-5","1" +"11742","Holtsville","NY","40.810606","-73.04036","-5","1" +"11743","Huntington","NY","40.867498","-73.41146","-5","1" +"11745","Smithtown","NY","40.922326","-72.637078","-5","1" +"11746","Huntington Station","NY","40.821698","-73.37553","-5","1" +"11747","Melville","NY","40.791593","-73.40543","-5","1" +"11749","Islandia","NY","40.922326","-72.637078","-5","1" +"11750","Huntington Station","NY","40.922326","-72.637078","-5","1" +"11751","Islip","NY","40.734212","-73.21416","-5","1" +"11752","Islip Terrace","NY","40.754386","-73.18326","-5","1" +"11753","Jericho","NY","40.786544","-73.53675","-5","1" +"11754","Kings Park","NY","40.888497","-73.24258","-5","1" +"11755","Lake Grove","NY","40.855402","-73.11839","-5","1" +"11756","Levittown","NY","40.724883","-73.51739","-5","1" +"11757","Lindenhurst","NY","40.690049","-73.37442","-5","1" +"11758","Massapequa","NY","40.68085","-73.46289","-5","1" +"11760","Hauppauge","NY","40.810246","-73.191789","-5","1" +"11762","Massapequa Park","NY","40.68505","-73.44681","-5","1" +"11763","Medford","NY","40.820786","-72.98375","-5","1" +"11764","Miller Place","NY","40.946506","-72.98837","-5","1" +"11765","Mill Neck","NY","40.88889","-73.55608","-5","1" +"11766","Mount Sinai","NY","40.929242","-73.01317","-5","1" +"11767","Nesconset","NY","40.842962","-73.14303","-5","1" +"11768","Northport","NY","40.905647","-73.33114","-5","1" +"11769","Oakdale","NY","40.736011","-73.1296","-5","1" +"11770","Ocean Beach","NY","40.643951","-73.16115","-5","1" +"11771","Oyster Bay","NY","40.868882","-73.52292","-5","1" +"11772","Patchogue","NY","40.770898","-73.00213","-5","1" +"11773","Syosset","NY","40.754757","-73.601772","-5","1" +"11774","Farmingdale","NY","40.754757","-73.601772","-5","1" +"11775","Melville","NY","40.922326","-72.637078","-5","1" +"11776","Port Jefferson Station","NY","40.911082","-73.04966","-5","1" +"11777","Port Jefferson","NY","40.946103","-73.06222","-5","1" +"11778","Rocky Point","NY","40.954093","-72.92884","-5","1" +"11779","Ronkonkoma","NY","40.818826","-73.1187","-5","1" +"11780","Saint James","NY","40.884394","-73.15868","-5","1" +"11782","Sayville","NY","40.739869","-73.07198","-5","1" +"11783","Seaford","NY","40.679752","-73.48959","-5","1" +"11784","Selden","NY","40.869274","-73.04254","-5","1" +"11786","Shoreham","NY","40.94993","-72.89533","-5","1" +"11787","Smithtown","NY","40.853343","-73.20777","-5","1" +"11788","Hauppauge","NY","40.819266","-73.20967","-5","1" +"11789","Sound Beach","NY","40.955586","-72.9733","-5","1" +"11790","Stony Brook","NY","40.906174","-73.12748","-5","1" +"11791","Syosset","NY","40.815215","-73.50057","-5","1" +"11792","Wading River","NY","40.953261","-72.8368","-5","1" +"11793","Wantagh","NY","40.676649","-73.51122","-5","1" +"11794","Stony Brook","NY","40.922326","-72.637078","-5","1" +"11795","West Islip","NY","40.713459","-73.3001","-5","1" +"11796","West Sayville","NY","40.731954","-73.10081","-5","1" +"11797","Woodbury","NY","40.813801","-73.46912","-5","1" +"11798","Wyandanch","NY","40.752098","-73.36516","-5","1" +"11801","Hicksville","NY","40.763355","-73.52323","-5","1" +"11802","Hicksville","NY","40.754757","-73.601772","-5","1" +"11803","Plainview","NY","40.779911","-73.47948","-5","1" +"11804","Old Bethpage","NY","40.765378","-73.45781","-5","1" +"11805","Mid Island","NY","40.922326","-72.637078","-5","1" +"11815","Hicksville","NY","40.754757","-73.601772","-5","1" +"11819","Hicksville","NY","40.754757","-73.601772","-5","1" +"11853","Jericho","NY","40.754757","-73.601772","-5","1" +"11854","Hicksville","NY","40.754757","-73.601772","-5","1" +"11855","Hicksville","NY","40.754757","-73.601772","-5","1" +"11901","Riverhead","NY","40.926595","-72.65327","-5","1" +"11930","Amagansett","NY","40.985301","-72.10411","-5","1" +"11931","Aquebogue","NY","40.922326","-72.637078","-5","1" +"11932","Bridgehampton","NY","40.939075","-72.30514","-5","1" +"11933","Calverton","NY","40.933429","-72.74646","-5","1" +"11934","Center Moriches","NY","40.797772","-72.79719","-5","1" +"11935","Cutchogue","NY","41.012868","-72.4723","-5","1" +"11937","East Hampton","NY","40.995384","-72.18564","-5","1" +"11939","East Marion","NY","41.128923","-72.34189","-5","1" +"11940","East Moriches","NY","40.806287","-72.75673","-5","1" +"11941","Eastport","NY","40.824658","-72.72356","-5","1" +"11942","East Quogue","NY","40.84867","-72.57794","-5","1" +"11944","Greenport","NY","41.103838","-72.36729","-5","1" +"11946","Hampton Bays","NY","40.875897","-72.52063","-5","1" +"11947","Jamesport","NY","40.943323","-72.57996","-5","1" +"11948","Laurel","NY","40.961916","-72.55024","-5","1" +"11949","Manorville","NY","40.855861","-72.79736","-5","1" +"11950","Mastic","NY","40.80481","-72.84664","-5","1" +"11951","Mastic Beach","NY","40.763634","-72.84554","-5","1" +"11952","Mattituck","NY","40.994649","-72.53731","-5","1" +"11953","Middle Island","NY","40.886267","-72.9552","-5","1" +"11954","Montauk","NY","41.03831","-71.9506","-5","1" +"11955","Moriches","NY","40.805789","-72.82092","-5","1" +"11956","New Suffolk","NY","40.991836","-72.47505","-5","1" +"11957","Orient","NY","41.151826","-72.27511","-5","1" +"11958","Peconic","NY","41.03687","-72.45341","-5","1" +"11959","Quogue","NY","40.825411","-72.60506","-5","1" +"11960","Remsenburg","NY","40.803923","-72.70421","-5","1" +"11961","Ridge","NY","40.89609","-72.87824","-5","1" +"11962","Sagaponack","NY","40.937683","-72.26831","-5","1" +"11963","Sag Harbor","NY","40.99628","-72.31074","-5","1" +"11964","Shelter Island","NY","41.060843","-72.33159","-5","1" +"11965","Shelter Island Heights","NY","41.07815","-72.35093","-5","1" +"11967","Shirley","NY","40.794317","-72.87181","-5","1" +"11968","Southampton","NY","40.904348","-72.40714","-5","1" +"11969","Southampton","NY","40.922326","-72.637078","-5","1" +"11970","South Jamesport","NY","40.941363","-72.57502","-5","1" +"11971","Southold","NY","41.059209","-72.42041","-5","1" +"11972","Speonk","NY","40.8204","-72.70113","-5","1" +"11973","Upton","NY","40.922326","-72.637078","-5","1" +"11975","Wainscott","NY","40.947419","-72.24505","-5","1" +"11976","Water Mill","NY","40.919693","-72.34407","-5","1" +"11977","Westhampton","NY","40.81819","-72.67835","-5","1" +"11978","Westhampton Beach","NY","40.816142","-72.63449","-5","1" +"11980","Yaphank","NY","40.832858","-72.91611","-5","1" +"12007","Alcove","NY","42.482455","-73.936671","-5","1" +"12008","Alplaus","NY","42.853043","-73.9029","-5","1" +"12009","Altamont","NY","42.698692","-74.03148","-5","1" +"12010","Amsterdam","NY","42.940644","-74.17899","-5","1" +"12015","Athens","NY","42.279649","-73.81701","-5","1" +"12016","Auriesville","NY","42.910206","-74.423606","-5","1" +"12017","Austerlitz","NY","42.323565","-73.45257","-5","1" +"12018","Averill Park","NY","42.62742","-73.53494","-5","1" +"12019","Ballston Lake","NY","42.916343","-73.86657","-5","1" +"12020","Ballston Spa","NY","43.006309","-73.8604","-5","1" +"12022","Berlin","NY","42.681107","-73.3489","-5","1" +"12023","Berne","NY","42.610306","-74.15692","-5","1" +"12024","Brainard","NY","42.494981","-73.510676","-5","1" +"12025","Broadalbin","NY","43.07681","-74.15332","-5","1" +"12027","Burnt Hills","NY","42.912175","-73.90355","-5","1" +"12028","Buskirk","NY","42.932315","-73.44521","-5","1" +"12029","Canaan","NY","42.399159","-73.42757","-5","1" +"12031","Carlisle","NY","42.770985","-74.44694","-5","1" +"12032","Caroga Lake","NY","43.158567","-74.49646","-5","1" +"12033","Castleton On Hudson","NY","42.534631","-73.71327","-5","1" +"12035","Central Bridge","NY","42.722477","-74.35064","-5","1" +"12036","Charlotteville","NY","42.546034","-74.67315","-5","1" +"12037","Chatham","NY","42.346758","-73.57852","-5","1" +"12040","Cherry Plain","NY","42.646742","-73.371611","-5","1" +"12041","Clarksville","NY","42.543326","-73.97403","-5","1" +"12042","Climax","NY","42.403719","-73.90875","-5","1" +"12043","Cobleskill","NY","42.696926","-74.52436","-5","1" +"12045","Coeymans","NY","42.474135","-73.79335","-5","1" +"12046","Coeymans Hollow","NY","42.475609","-73.92656","-5","1" +"12047","Cohoes","NY","42.773777","-73.70793","-5","1" +"12050","Columbiaville","NY","42.317154","-73.748555","-5","1" +"12051","Coxsackie","NY","42.353773","-73.82774","-5","1" +"12052","Cropseyville","NY","42.74891","-73.49405","-5","1" +"12053","Delanson","NY","42.749499","-74.18601","-5","1" +"12054","Delmar","NY","42.614979","-73.84086","-5","1" +"12055","Dormansville","NY","42.614852","-73.970812","-5","1" +"12056","Duanesburg","NY","42.767853","-74.09083","-5","1" +"12057","Eagle Bridge","NY","42.959229","-73.35236","-5","1" +"12058","Earlton","NY","42.350557","-73.91978","-5","1" +"12059","East Berne","NY","42.621933","-74.05574","-5","1" +"12060","East Chatham","NY","42.41956","-73.50412","-5","1" +"12061","East Greenbush","NY","42.593047","-73.67343","-5","1" +"12062","East Nassau","NY","42.525531","-73.50207","-5","1" +"12063","East Schodack","NY","42.559697","-73.63335","-5","1" +"12064","East Worcester","NY","42.615422","-74.6595","-5","1" +"12065","Clifton Park","NY","42.853676","-73.78445","-5","1" +"12066","Esperance","NY","42.784091","-74.3116","-5","1" +"12067","Feura Bush","NY","42.561226","-73.92528","-5","1" +"12068","Fonda","NY","42.953913","-74.37883","-5","1" +"12069","Fort Hunter","NY","42.945701","-74.263312","-5","1" +"12070","Fort Johnson","NY","42.970827","-74.24778","-5","1" +"12071","Fultonham","NY","42.565907","-74.41457","-5","1" +"12072","Fultonville","NY","42.896974","-74.37495","-5","1" +"12073","Gallupville","NY","42.592287","-74.438129","-5","1" +"12074","Galway","NY","43.068203","-74.05526","-5","1" +"12075","Ghent","NY","42.305793","-73.6514","-5","1" +"12076","Gilboa","NY","42.425405","-74.40616","-5","1" +"12077","Glenmont","NY","42.600551","-73.79621","-5","1" +"12078","Gloversville","NY","43.069562","-74.3436","-5","1" +"12081","Nassau","NY","42.59362","-73.566328","-5","1" +"12082","Grafton","NY","42.772624","-73.446834","-5","1" +"12083","Greenville","NY","42.430684","-74.03728","-5","1" +"12084","Guilderland","NY","42.698231","-73.89906","-5","1" +"12085","Guilderland Center","NY","42.694777","-73.905271","-5","1" +"12086","Hagaman","NY","42.981745","-74.14257","-5","1" +"12087","Hannacroix","NY","42.434883","-73.89271","-5","1" +"12089","Hoosick","NY","42.866666","-73.318113","-5","1" +"12090","Hoosick Falls","NY","42.888816","-73.3555","-5","1" +"12092","Howes Cave","NY","42.691779","-74.37513","-5","1" +"12093","Jefferson","NY","42.496939","-74.62813","-5","1" +"12094","Johnsonville","NY","42.899334","-73.49006","-5","1" +"12095","Johnstown","NY","43.014523","-74.38473","-5","1" +"12103","Knox","NY","42.6464","-74.130201","-5","1" +"12106","Kinderhook","NY","42.388394","-73.70726","-5","1" +"12107","Knox","NY","42.660046","-74.116812","-5","1" +"12108","Lake Pleasant","NY","43.525388","-74.40875","-5","1" +"12110","Latham","NY","42.74964","-73.76802","-5","1" +"12111","Latham","NY","42.614852","-73.970812","-5","1" +"12115","Malden Bridge","NY","42.469991","-73.58587","-5","1" +"12116","Maryland","NY","42.538589","-74.92185","-5","1" +"12117","Mayfield","NY","43.146907","-74.23466","-5","1" +"12118","Mechanicville","NY","42.915904","-73.70539","-5","1" +"12120","Medusa","NY","42.456127","-74.14059","-5","1" +"12121","Melrose","NY","42.851106","-73.61867","-5","1" +"12122","Middleburgh","NY","42.558318","-74.31458","-5","1" +"12123","Nassau","NY","42.522197","-73.60613","-5","1" +"12124","New Baltimore","NY","42.444198","-73.788241","-5","1" +"12125","New Lebanon","NY","42.474028","-73.4075","-5","1" +"12128","Newtonville","NY","42.724978","-73.764296","-5","1" +"12130","Niverville","NY","42.442592","-73.65778","-5","1" +"12131","North Blenheim","NY","42.482123","-74.45715","-5","1" +"12132","North Chatham","NY","42.466061","-73.629296","-5","1" +"12133","North Hoosick","NY","42.926121","-73.346409","-5","1" +"12134","Northville","NY","43.21892","-74.14822","-5","1" +"12136","Old Chatham","NY","42.437594","-73.55599","-5","1" +"12137","Pattersonville","NY","42.862695","-74.11759","-5","1" +"12138","Petersburg","NY","42.760049","-73.36801","-5","1" +"12139","Piseco","NY","43.40276","-74.56972","-5","1" +"12140","Poestenkill","NY","42.693228","-73.56922","-5","1" +"12141","Quaker Street","NY","42.731771","-74.185395","-5","1" +"12143","Ravena","NY","42.46915","-73.82956","-5","1" +"12144","Rensselaer","NY","42.63738","-73.72587","-5","1" +"12147","Rensselaerville","NY","42.518386","-74.15997","-5","1" +"12148","Rexford","NY","42.842133","-73.86828","-5","1" +"12149","Richmondville","NY","42.63119","-74.572","-5","1" +"12150","Rotterdam Junction","NY","42.876756","-74.05452","-5","1" +"12151","Round Lake","NY","42.932326","-73.79363","-5","1" +"12153","Sand Lake","NY","42.638579","-73.48051","-5","1" +"12154","Schaghticoke","NY","42.925765","-73.60664","-5","1" +"12155","Schenevus","NY","42.587708","-74.83536","-5","1" +"12156","Schodack Landing","NY","42.479967","-73.73647","-5","1" +"12157","Schoharie","NY","42.668825","-74.30134","-5","1" +"12158","Selkirk","NY","42.539822","-73.81545","-5","1" +"12159","Slingerlands","NY","42.646978","-73.87151","-5","1" +"12160","Sloansville","NY","42.757815","-74.34369","-5","1" +"12161","South Bethlehem","NY","42.521038","-73.851898","-5","1" +"12162","South Schodack","NY","42.513906","-73.702443","-5","1" +"12164","Speculator","NY","43.515611","-74.37431","-5","1" +"12165","Spencertown","NY","42.317959","-73.51802","-5","1" +"12166","Sprakers","NY","42.831683","-74.45667","-5","1" +"12167","Stamford","NY","42.414519","-74.59577","-5","1" +"12168","Stephentown","NY","42.552127","-73.39593","-5","1" +"12169","Stephentown","NY","42.57612","-73.44559","-5","1" +"12170","Stillwater","NY","42.975154","-73.66576","-5","1" +"12172","Stottville","NY","42.285749","-73.733532","-5","1" +"12173","Stuyvesant","NY","42.377829","-73.75943","-5","1" +"12174","Stuyvesant Falls","NY","42.343986","-73.73477","-5","1" +"12175","Summit","NY","42.559096","-74.55282","-5","1" +"12176","Surprise","NY","42.393192","-73.96763","-5","1" +"12177","Tribes Hill","NY","42.95002","-74.296985","-5","1" +"12179","Troy","NY","42.71144","-73.525561","-5","1" +"12180","Troy","NY","42.731628","-73.66465","-5","1" +"12181","Troy","NY","42.738678","-73.673862","-5","1" +"12182","Troy","NY","42.785887","-73.66221","-5","1" +"12183","Troy","NY","42.743289","-73.69482","-5","1" +"12184","Valatie","NY","42.426901","-73.66405","-5","1" +"12185","Valley Falls","NY","42.884779","-73.53703","-5","1" +"12186","Voorheesville","NY","42.638481","-73.95946","-5","1" +"12187","Warnerville","NY","42.624507","-74.46772","-5","1" +"12188","Waterford","NY","42.80535","-73.68976","-5","1" +"12189","Watervliet","NY","42.729278","-73.70913","-5","1" +"12190","Wells","NY","43.43305","-74.2901","-5","1" +"12192","West Coxsackie","NY","42.413742","-73.81773","-5","1" +"12193","Westerlo","NY","42.515818","-74.04978","-5","1" +"12194","West Fulton","NY","42.529042","-74.44937","-5","1" +"12195","West Lebanon","NY","42.479384","-73.474809","-5","1" +"12196","West Sand Lake","NY","42.631625","-73.61619","-5","1" +"12197","Worcester","NY","42.610314","-74.72401","-5","1" +"12198","Wynantskill","NY","42.685311","-73.63801","-5","1" +"12201","Albany","NY","42.614852","-73.970812","-5","1" +"12202","Albany","NY","42.640129","-73.76061","-5","1" +"12203","Albany","NY","42.678112","-73.82983","-5","1" +"12204","Albany","NY","42.683727","-73.73329","-5","1" +"12205","Albany","NY","42.713328","-73.8179","-5","1" +"12206","Albany","NY","42.669645","-73.77719","-5","1" +"12207","Albany","NY","42.653979","-73.74833","-5","1" +"12208","Albany","NY","42.654978","-73.80053","-5","1" +"12209","Albany","NY","42.640813","-73.7856","-5","1" +"12210","Albany","NY","42.656679","-73.75894","-5","1" +"12211","Albany","NY","42.705345","-73.76924","-5","1" +"12212","Albany","NY","42.716774","-73.810373","-5","1" +"12214","Albany","NY","42.614852","-73.970812","-5","1" +"12220","Albany","NY","42.614852","-73.970812","-5","1" +"12222","Albany","NY","42.692909","-73.838035","-5","1" +"12223","Albany","NY","42.614852","-73.970812","-5","1" +"12224","Albany","NY","42.614852","-73.970812","-5","1" +"12225","Albany","NY","42.614852","-73.970812","-5","1" +"12226","Albany","NY","42.614852","-73.970812","-5","1" +"12227","Albany","NY","42.614852","-73.970812","-5","1" +"12228","Albany","NY","42.614852","-73.970812","-5","1" +"12229","Albany","NY","42.614852","-73.970812","-5","1" +"12230","Albany","NY","42.614852","-73.970812","-5","1" +"12231","Albany","NY","42.614852","-73.970812","-5","1" +"12232","Albany","NY","42.614852","-73.970812","-5","1" +"12233","Albany","NY","42.614852","-73.970812","-5","1" +"12234","Albany","NY","42.614852","-73.970812","-5","1" +"12235","Albany","NY","42.614852","-73.970812","-5","1" +"12236","Albany","NY","42.614852","-73.970812","-5","1" +"12237","Albany","NY","42.614852","-73.970812","-5","1" +"12238","Albany","NY","42.614852","-73.970812","-5","1" +"12239","Albany","NY","42.614852","-73.970812","-5","1" +"12240","Albany","NY","42.614852","-73.970812","-5","1" +"12241","Albany","NY","42.614852","-73.970812","-5","1" +"12242","Albany","NY","42.614852","-73.970812","-5","1" +"12243","Albany","NY","42.614852","-73.970812","-5","1" +"12244","Albany","NY","42.614852","-73.970812","-5","1" +"12245","Albany","NY","42.614852","-73.970812","-5","1" +"12246","Albany","NY","42.647079","-73.750314","-5","1" +"12247","Albany","NY","42.614852","-73.970812","-5","1" +"12248","Albany","NY","42.614852","-73.970812","-5","1" +"12249","Albany","NY","42.614852","-73.970812","-5","1" +"12250","Albany","NY","42.614852","-73.970812","-5","1" +"12252","Albany","NY","42.614852","-73.970812","-5","1" +"12255","Albany","NY","42.614852","-73.970812","-5","1" +"12256","Albany","NY","42.614852","-73.970812","-5","1" +"12257","Albany","NY","42.614852","-73.970812","-5","1" +"12260","Albany","NY","42.614852","-73.970812","-5","1" +"12261","Albany","NY","42.614852","-73.970812","-5","1" +"12262","Albany","NY","42.614852","-73.970812","-5","1" +"12288","Albany","NY","42.614852","-73.970812","-5","1" +"12301","Schenectady","NY","42.833261","-74.058015","-5","1" +"12302","Schenectady","NY","42.862193","-73.96317","-5","1" +"12303","Schenectady","NY","42.769009","-73.93619","-5","1" +"12304","Schenectady","NY","42.779026","-73.90507","-5","1" +"12305","Schenectady","NY","42.814476","-73.94337","-5","1" +"12306","Schenectady","NY","42.793326","-73.98942","-5","1" +"12307","Schenectady","NY","42.804076","-73.93571","-5","1" +"12308","Schenectady","NY","42.820909","-73.92002","-5","1" +"12309","Schenectady","NY","42.800276","-73.88096","-5","1" +"12325","Schenectady","NY","42.833261","-74.058015","-5","1" +"12345","Schenectady","NY","42.833261","-74.058015","-5","1" +"12401","Kingston","NY","41.932315","-74.02259","-5","1" +"12402","Kingston","NY","41.878801","-74.345684","-5","1" +"12404","Accord","NY","41.811322","-74.23471","-5","1" +"12405","Acra","NY","42.320081","-74.07288","-5","1" +"12406","Arkville","NY","42.130111","-74.57574","-5","1" +"12407","Ashland","NY","42.321453","-74.33926","-5","1" +"12409","Bearsville","NY","42.061841","-74.16063","-5","1" +"12410","Big Indian","NY","42.114646","-74.4557","-5","1" +"12411","Bloomington","NY","41.87916","-74.03995","-5","1" +"12412","Boiceville","NY","42.001351","-74.2619","-5","1" +"12413","Cairo","NY","42.307982","-74.008","-5","1" +"12414","Catskill","NY","42.223002","-73.90452","-5","1" +"12416","Chichester","NY","42.105611","-74.29143","-5","1" +"12417","Connelly","NY","41.907604","-73.989254","-5","1" +"12418","Cornwallville","NY","42.357579","-74.15136","-5","1" +"12419","Cottekill","NY","41.852449","-74.10605","-5","1" +"12420","Cragsmoor","NY","41.674288","-74.37833","-5","1" +"12421","Denver","NY","42.249541","-74.54558","-5","1" +"12422","Durham","NY","42.390291","-74.20164","-5","1" +"12423","East Durham","NY","42.378679","-74.10443","-5","1" +"12424","East Jewett","NY","42.240343","-74.15932","-5","1" +"12427","Elka Park","NY","42.167622","-74.15306","-5","1" +"12428","Ellenville","NY","41.727588","-74.42061","-5","1" +"12429","Esopus","NY","41.816628","-73.97824","-5","1" +"12430","Fleischmanns","NY","42.183262","-74.52154","-5","1" +"12431","Freehold","NY","42.361838","-74.02471","-5","1" +"12432","Glasco","NY","41.949795","-74.003246","-5","1" +"12433","Glenford","NY","42.000093","-74.15946","-5","1" +"12434","Grand Gorge","NY","42.368009","-74.50137","-5","1" +"12435","Greenfield Park","NY","41.725808","-74.52106","-5","1" +"12436","Haines Falls","NY","42.19551","-74.102319","-5","1" +"12438","Halcottsville","NY","42.183045","-74.925617","-5","1" +"12439","Hensonville","NY","42.302596","-74.22711","-5","1" +"12440","High Falls","NY","41.801696","-74.14187","-5","1" +"12441","Highmount","NY","41.878801","-74.345684","-5","1" +"12442","Hunter","NY","42.222061","-74.23418","-5","1" +"12443","Hurley","NY","41.92674","-74.06797","-5","1" +"12444","Jewett","NY","42.260634","-74.27527","-5","1" +"12446","Kerhonkson","NY","41.790385","-74.30413","-5","1" +"12447","Saugerties","NY","42.039355","-74.067014","-5","1" +"12448","Lake Hill","NY","42.073259","-74.1893","-5","1" +"12449","Lake Katrine","NY","41.993639","-73.99843","-5","1" +"12450","Lanesville","NY","42.157937","-74.23034","-5","1" +"12451","Leeds","NY","42.281117","-73.94006","-5","1" +"12452","Lexington","NY","42.223407","-74.386635","-5","1" +"12453","Malden On Hudson","NY","42.098698","-73.935418","-5","1" +"12454","Maplecrest","NY","42.280261","-74.18349","-5","1" +"12455","Margaretville","NY","42.151449","-74.64261","-5","1" +"12456","Mount Marion","NY","42.034256","-73.99876","-5","1" +"12457","Mount Tremper","NY","42.038539","-74.23905","-5","1" +"12458","Napanoch","NY","41.802898","-74.40025","-5","1" +"12459","New Kingston","NY","42.227987","-74.68912","-5","1" +"12460","Oak Hill","NY","42.406464","-74.15692","-5","1" +"12461","Olivebridge","NY","41.912356","-74.24724","-5","1" +"12463","Palenville","NY","42.174411","-74.01599","-5","1" +"12464","Phoenicia","NY","42.081269","-74.32629","-5","1" +"12465","Pine Hill","NY","42.136293","-74.473639","-5","1" +"12466","Port Ewen","NY","41.905004","-73.97957","-5","1" +"12468","Prattsville","NY","42.297725","-74.40063","-5","1" +"12469","Preston Hollow","NY","42.442592","-74.24159","-5","1" +"12470","Purling","NY","42.284773","-74.02388","-5","1" +"12471","Rifton","NY","41.83962","-74.04033","-5","1" +"12472","Rosendale","NY","41.846938","-74.07602","-5","1" +"12473","Round Top","NY","42.260709","-74.03078","-5","1" +"12474","Roxbury","NY","42.285644","-74.59011","-5","1" +"12475","Ruby","NY","42.017632","-74.007868","-5","1" +"12477","Saugerties","NY","42.085634","-73.97685","-5","1" +"12480","Shandaken","NY","42.142121","-74.4065","-5","1" +"12481","Shokan","NY","41.974857","-74.20686","-5","1" +"12482","South Cairo","NY","42.270559","-73.95729","-5","1" +"12483","Spring Glen","NY","41.663895","-74.424533","-5","1" +"12484","Stone Ridge","NY","41.850294","-74.16619","-5","1" +"12485","Tannersville","NY","42.199479","-74.12514","-5","1" +"12486","Tillson","NY","41.831082","-74.07207","-5","1" +"12487","Ulster Park","NY","41.855761","-73.99207","-5","1" +"12489","Wawarsing","NY","41.757766","-74.35392","-5","1" +"12490","West Camp","NY","42.108689","-73.934577","-5","1" +"12491","West Hurley","NY","41.998199","-74.10967","-5","1" +"12492","West Kill","NY","42.209414","-74.34767","-5","1" +"12493","West Park","NY","41.805576","-73.96845","-5","1" +"12494","West Shokan","NY","41.961316","-74.27687","-5","1" +"12495","Willow","NY","42.080232","-74.24801","-5","1" +"12496","Windham","NY","42.326918","-74.24657","-5","1" +"12498","Woodstock","NY","42.037356","-74.11016","-5","1" +"12501","Amenia","NY","41.852959","-73.55727","-5","1" +"12502","Ancram","NY","42.086628","-73.6642","-5","1" +"12503","Ancramdale","NY","42.045941","-73.57792","-5","1" +"12504","Annandale On Hudson","NY","42.035434","-73.909234","-5","1" +"12506","Bangall","NY","41.759905","-73.743714","-5","1" +"12507","Barrytown","NY","42.005984","-73.92132","-5","1" +"12508","Beacon","NY","41.505993","-73.96198","-5","1" +"12509","La Grange","NY","41.643599","-73.847176","-5","1" +"12510","Billings","NY","41.759905","-73.743714","-5","1" +"12511","Castle Point","NY","41.759905","-73.743714","-5","1" +"12512","Chelsea","NY","41.552793","-73.968183","-5","1" +"12513","Claverack","NY","42.220962","-73.71182","-5","1" +"12514","Clinton Corners","NY","41.874183","-73.76727","-5","1" +"12515","Clintondale","NY","41.681096","-74.06421","-5","1" +"12516","Copake","NY","42.112895","-73.56201","-5","1" +"12517","Copake Falls","NY","42.144585","-73.51463","-5","1" +"12518","Cornwall","NY","41.434476","-74.03584","-5","1" +"12520","Cornwall On Hudson","NY","41.442589","-74.01389","-5","1" +"12521","Craryville","NY","42.176216","-73.65036","-5","1" +"12522","Dover Plains","NY","41.738853","-73.58921","-5","1" +"12523","Elizaville","NY","42.080964","-73.77856","-5","1" +"12524","Fishkill","NY","41.537232","-73.8972","-5","1" +"12525","Gardiner","NY","41.691524","-74.18764","-5","1" +"12526","Germantown","NY","42.123977","-73.86199","-5","1" +"12527","Glenham","NY","41.520249","-73.933259","-5","1" +"12528","Highland","NY","41.713682","-73.9965","-5","1" +"12529","Hillsdale","NY","42.204681","-73.54775","-5","1" +"12530","Hollowville","NY","42.210991","-73.687001","-5","1" +"12531","Holmes","NY","41.519085","-73.67241","-5","1" +"12533","Hopewell Junction","NY","41.573253","-73.79347","-5","1" +"12534","Hudson","NY","42.22948","-73.75846","-5","1" +"12537","Hughsonville","NY","41.582437","-73.936281","-5","1" +"12538","Hyde Park","NY","41.779541","-73.90155","-5","1" +"12540","Lagrangeville","NY","41.656933","-73.74539","-5","1" +"12541","Livingston","NY","42.142068","-73.757399","-5","1" +"12542","Marlboro","NY","41.603333","-73.98415","-5","1" +"12543","Maybrook","NY","41.484988","-74.2161","-5","1" +"12544","Mellenville","NY","42.259623","-73.667962","-5","1" +"12545","Millbrook","NY","41.785109","-73.68075","-5","1" +"12546","Millerton","NY","41.961002","-73.52011","-5","1" +"12547","Milton","NY","41.656805","-73.96831","-5","1" +"12548","Modena","NY","41.664239","-74.1106","-5","1" +"12549","Montgomery","NY","41.520396","-74.24712","-5","1" +"12550","Newburgh","NY","41.521593","-74.04072","-5","1" +"12551","Newburgh","NY","41.387822","-74.354699","-5","1" +"12552","Newburgh","NY","41.387822","-74.354699","-5","1" +"12553","New Windsor","NY","41.46359","-74.05975","-5","1" +"12555","Mid Hudson","NY","41.387822","-74.354699","-5","1" +"12557","Newburgh","NY","41.507368","-74.061301","-5","1" +"12561","New Paltz","NY","41.751566","-74.09475","-5","1" +"12563","Patterson","NY","41.483689","-73.57293","-5","1" +"12564","Pawling","NY","41.570328","-73.59825","-5","1" +"12565","Philmont","NY","42.24862","-73.6476","-5","1" +"12566","Pine Bush","NY","41.61134","-74.32764","-5","1" +"12567","Pine Plains","NY","41.997807","-73.66663","-5","1" +"12568","Plattekill","NY","41.641207","-74.07805","-5","1" +"12569","Pleasant Valley","NY","41.746469","-73.80414","-5","1" +"12570","Poughquag","NY","41.614667","-73.67709","-5","1" +"12571","Red Hook","NY","42.002691","-73.8442","-5","1" +"12572","Rhinebeck","NY","41.930983","-73.88271","-5","1" +"12574","Rhinecliff","NY","41.915068","-73.95173","-5","1" +"12575","Rock Tavern","NY","41.478722","-74.15626","-5","1" +"12577","Salisbury Mills","NY","41.433856","-74.11963","-5","1" +"12578","Salt Point","NY","41.803384","-73.78147","-5","1" +"12580","Staatsburg","NY","41.854465","-73.89922","-5","1" +"12581","Stanfordville","NY","41.89187","-73.69888","-5","1" +"12582","Stormville","NY","41.549525","-73.72745","-5","1" +"12583","Tivoli","NY","42.060034","-73.88393","-5","1" +"12584","Vails Gate","NY","41.464073","-74.059104","-5","1" +"12585","Verbank","NY","41.721384","-73.7162","-5","1" +"12586","Walden","NY","41.563701","-74.1755","-5","1" +"12588","Walker Valley","NY","41.878801","-74.345684","-5","1" +"12589","Wallkill","NY","41.615036","-74.15461","-5","1" +"12590","Wappingers Falls","NY","41.59466","-73.89579","-5","1" +"12592","Wassaic","NY","41.782781","-73.55792","-5","1" +"12593","West Copake","NY","42.243991","-73.641076","-5","1" +"12594","Wingdale","NY","41.646584","-73.56209","-5","1" +"12601","Poughkeepsie","NY","41.701443","-73.91922","-5","1" +"12602","Poughkeepsie","NY","41.759905","-73.743714","-5","1" +"12603","Poughkeepsie","NY","41.67086","-73.88107","-5","1" +"12604","Poughkeepsie","NY","41.759905","-73.743714","-5","1" +"12697","Moira","NY","44.776061","-74.596249","-5","1" +"12701","Monticello","NY","41.653071","-74.69748","-5","1" +"12710","Neversink","NY","41.818926","-74.521638","-5","1" +"12719","Barryville","NY","41.480326","-74.92694","-5","1" +"12720","Bethel","NY","41.66023","-74.90438","-5","1" +"12721","Bloomingburg","NY","41.564426","-74.4265","-5","1" +"12722","Burlingham","NY","41.719016","-74.755373","-5","1" +"12723","Callicoon","NY","41.769427","-75.02808","-5","1" +"12724","Callicoon Center","NY","41.858278","-74.95034","-5","1" +"12725","Claryville","NY","41.926119","-74.55675","-5","1" +"12726","Cochecton","NY","41.694153","-74.97593","-5","1" +"12727","Cochecton Center","NY","41.657225","-74.98161","-5","1" +"12729","Cuddebackville","NY","41.475235","-74.60276","-5","1" +"12732","Eldred","NY","41.545318","-74.87533","-5","1" +"12733","Fallsburg","NY","41.732505","-74.60896","-5","1" +"12734","Ferndale","NY","41.734913","-74.75013","-5","1" +"12736","Fremont Center","NY","41.848244","-75.03878","-5","1" +"12737","Glen Spey","NY","41.48397","-74.81186","-5","1" +"12738","Glen Wild","NY","41.648888","-74.57064","-5","1" +"12739","Godeffroy","NY","41.437427","-74.60322","-5","1" +"12740","Grahamsville","NY","41.85304","-74.52915","-5","1" +"12741","Hankins","NY","41.838672","-75.08718","-5","1" +"12742","Harris","NY","41.720235","-74.72901","-5","1" +"12743","Highland Lake","NY","41.53481","-74.84656","-5","1" +"12745","Hortonville","NY","41.762944","-75.030592","-5","1" +"12746","Huguenot","NY","41.436732","-74.64558","-5","1" +"12747","Hurleyville","NY","41.752458","-74.66996","-5","1" +"12748","Jeffersonville","NY","41.774223","-74.92211","-5","1" +"12749","Kauneonga Lake","NY","41.6896","-74.8272","-5","1" +"12750","Kenoza Lake","NY","41.729581","-74.961146","-5","1" +"12751","Kiamesha Lake","NY","41.679152","-74.657","-5","1" +"12752","Lake Huntington","NY","41.677243","-74.99109","-5","1" +"12754","Liberty","NY","41.798476","-74.7361","-5","1" +"12755","Ellenburg","NY","44.842975","-73.973533","-5","1" +"12756","Livingston Manor","NY","41.900542","-74.827587","-5","1" +"12758","Livingston Manor","NY","41.920201","-74.7857","-5","1" +"12759","Loch Sheldrake","NY","41.780299","-74.65618","-5","1" +"12760","Long Eddy","NY","41.901849","-75.10493","-5","1" +"12762","Mongaup Valley","NY","41.676676","-74.80674","-5","1" +"12763","Mountain Dale","NY","41.690795","-74.52273","-5","1" +"12764","Narrowsburg","NY","41.588604","-74.99385","-5","1" +"12765","Neversink","NY","41.845381","-74.61427","-5","1" +"12766","North Branch","NY","41.815316","-74.97995","-5","1" +"12767","Obernburg","NY","41.719016","-74.755373","-5","1" +"12768","Parksville","NY","41.864326","-74.72961","-5","1" +"12769","Phillipsport","NY","41.651453","-74.436159","-5","1" +"12770","Pond Eddy","NY","41.44515","-74.84003","-5","1" +"12771","Port Jervis","NY","41.374734","-74.66315","-5","1" +"12775","Rock Hill","NY","41.614218","-74.58836","-5","1" +"12776","Roscoe","NY","41.94836","-74.94475","-5","1" +"12777","Forestburgh","NY","41.562141","-74.71252","-5","1" +"12778","Smallwood","NY","41.65974","-74.812","-5","1" +"12779","South Fallsburg","NY","41.705649","-74.62985","-5","1" +"12780","Sparrow Bush","NY","41.429425","-74.72244","-5","1" +"12781","Summitville","NY","41.719016","-74.755373","-5","1" +"12782","Sundown","NY","41.881485","-74.430063","-5","1" +"12783","Swan Lake","NY","41.736523","-74.82634","-5","1" +"12784","Thompsonville","NY","41.676139","-74.6217","-5","1" +"12785","Westbrookville","NY","41.518125","-74.57566","-5","1" +"12786","White Lake","NY","41.649008","-74.85751","-5","1" +"12787","White Sulphur Springs","NY","41.80854","-74.84599","-5","1" +"12788","Woodbourne","NY","41.784477","-74.59109","-5","1" +"12789","Woodridge","NY","41.708062","-74.5698","-5","1" +"12790","Wurtsboro","NY","41.592087","-74.50677","-5","1" +"12791","Youngsville","NY","41.807694","-74.87957","-5","1" +"12792","Yulan","NY","41.522825","-74.93164","-5","1" +"12793","Bethel","NY","41.736963","-74.797524","-5","1" +"12801","Glens Falls","NY","43.312104","-73.64825","-5","1" +"12803","South Glens Falls","NY","43.288818","-73.63643","-5","1" +"12804","Queensbury","NY","43.330471","-73.67816","-5","1" +"12805","Argyle","NY","43.246117","-73.455519","-5","1" +"12807","New Baltimore","NY","42.425733","-73.899871","-5","1" +"12808","Adirondack","NY","43.758733","-73.76206","-5","1" +"12809","Argyle","NY","43.229054","-73.4674","-5","1" +"12810","Athol","NY","43.484741","-73.89151","-5","1" +"12811","Bakers Mills","NY","43.62422","-74.061201","-5","1" +"12812","Blue Mountain Lake","NY","43.865351","-74.43366","-5","1" +"12814","Bolton Landing","NY","43.582318","-73.65515","-5","1" +"12815","Brant Lake","NY","43.703484","-73.71123","-5","1" +"12816","Cambridge","NY","43.039226","-73.38557","-5","1" +"12817","Chestertown","NY","43.638919","-73.81782","-5","1" +"12819","Clemons","NY","43.583211","-73.47852","-5","1" +"12820","Cleverdale","NY","43.47181","-73.639291","-5","1" +"12821","Comstock","NY","43.461692","-73.40197","-5","1" +"12822","Corinth","NY","43.248892","-73.85172","-5","1" +"12823","Cossayuna","NY","43.178983","-73.40767","-5","1" +"12824","Diamond Point","NY","43.50964","-73.69776","-5","1" +"12825","Queensbury","NY","42.973468","-74.406393","-5","1" +"12827","Fort Ann","NY","43.414017","-73.50464","-5","1" +"12828","Fort Edward","NY","43.253125","-73.58549","-5","1" +"12830","Wilton","NY","43.12943","-73.712415","-5","1" +"12831","Gansevoort","NY","43.174566","-73.68848","-5","1" +"12832","Granville","NY","43.376197","-73.31153","-5","1" +"12833","Greenfield Center","NY","43.128878","-73.8555","-5","1" +"12834","Greenwich","NY","43.095447","-73.50177","-5","1" +"12835","Hadley","NY","43.292593","-73.978","-5","1" +"12836","Hague","NY","43.750773","-73.51881","-5","1" +"12837","Hampton","NY","43.500423","-73.26044","-5","1" +"12838","Hartford","NY","43.345875","-73.40651","-5","1" +"12839","Hudson Falls","NY","43.316622","-73.5735","-5","1" +"12841","Huletts Landing","NY","43.642332","-73.50948","-5","1" +"12842","Indian Lake","NY","43.761451","-74.26631","-5","1" +"12843","Johnsburg","NY","43.569961","-73.98345","-5","1" +"12844","Kattskill Bay","NY","43.495335","-73.62987","-5","1" +"12845","Lake George","NY","43.41928","-73.70766","-5","1" +"12846","Lake Luzerne","NY","43.329851","-73.82911","-5","1" +"12847","Long Lake","NY","43.97643","-74.56669","-5","1" +"12848","Middle Falls","NY","43.100123","-73.524554","-5","1" +"12849","Middle Granville","NY","43.433107","-73.29152","-5","1" +"12850","Middle Grove","NY","43.092312","-73.97033","-5","1" +"12851","Minerva","NY","43.841369","-74.03747","-5","1" +"12852","Newcomb","NY","43.972307","-74.15321","-5","1" +"12853","North Creek","NY","43.683067","-73.97457","-5","1" +"12854","North Granville","NY","43.452517","-73.34095","-5","1" +"12855","North Hudson","NY","43.996303","-73.72147","-5","1" +"12856","North River","NY","43.722082","-74.10546","-5","1" +"12857","Olmstedville","NY","43.795443","-73.93994","-5","1" +"12858","Paradox","NY","43.888754","-73.65812","-5","1" +"12859","Porter Corners","NY","43.182144","-73.88689","-5","1" +"12860","Pottersville","NY","43.719612","-73.81116","-5","1" +"12861","Putnam Station","NY","43.74531","-73.41569","-5","1" +"12862","Riparius","NY","43.675377","-73.932509","-5","1" +"12863","Rock City Falls","NY","43.067531","-73.93002","-5","1" +"12864","Sabael","NY","43.667618","-74.456913","-5","1" +"12865","Salem","NY","43.200351","-73.3526","-5","1" +"12866","Saratoga Springs","NY","43.080399","-73.77038","-5","1" +"12870","Schroon Lake","NY","43.835376","-73.75802","-5","1" +"12871","Schuylerville","NY","43.088919","-73.59633","-5","1" +"12872","Severance","NY","44.145678","-73.815204","-5","1" +"12873","Shushan","NY","43.11595","-73.31852","-5","1" +"12874","Silver Bay","NY","43.685475","-73.50767","-5","1" +"12877","Whitehall","NY","43.618466","-73.354596","-5","1" +"12878","Stony Creek","NY","43.426652","-73.96174","-5","1" +"12879","Newcomb","NY","44.145678","-73.815204","-5","1" +"12883","Ticonderoga","NY","43.858226","-73.45414","-5","1" +"12884","Victory Mills","NY","43.088397","-73.591652","-5","1" +"12885","Warrensburg","NY","43.538744","-73.80527","-5","1" +"12886","Wevertown","NY","43.638462","-73.91693","-5","1" +"12887","Whitehall","NY","43.547822","-73.38318","-5","1" +"12901","Plattsburgh","NY","44.693271","-73.46617","-5","1" +"12903","Plattsburgh","NY","44.683468","-73.44639","-5","1" +"12910","Altona","NY","44.879986","-73.65694","-5","1" +"12911","Keeseville","NY","44.530527","-73.46734","-5","1" +"12912","Au Sable Forks","NY","44.466008","-73.73441","-5","1" +"12913","Bloomingdale","NY","44.421547","-73.99256","-5","1" +"12914","Bombay","NY","44.927856","-74.60211","-5","1" +"12915","Brainardsville","NY","44.552725","-74.317958","-5","1" +"12916","Brushton","NY","44.830736","-74.51434","-5","1" +"12917","Burke","NY","44.915973","-74.16565","-5","1" +"12918","Cadyville","NY","44.692862","-73.66667","-5","1" +"12919","Champlain","NY","44.965887","-73.43636","-5","1" +"12920","Chateaugay","NY","44.901543","-74.06054","-5","1" +"12921","Chazy","NY","44.88821","-73.43225","-5","1" +"12922","Childwold","NY","44.224185","-74.76539","-5","1" +"12923","Churubusco","NY","44.948894","-73.96545","-5","1" +"12924","Keeseville","NY","44.706561","-73.744555","-5","1" +"12926","Constable","NY","44.953782","-74.32809","-5","1" +"12927","Cranberry Lake","NY","44.220971","-74.85053","-5","1" +"12928","Crown Point","NY","43.95037","-73.48357","-5","1" +"12929","Dannemora","NY","44.847709","-73.582317","-5","1" +"12930","Dickinson Center","NY","44.731571","-74.53485","-5","1" +"12932","Elizabethtown","NY","44.212623","-73.59542","-5","1" +"12933","Ellenburg","NY","44.881962","-73.963279","-5","1" +"12934","Ellenburg Center","NY","44.865972","-73.89584","-5","1" +"12935","Ellenburg Depot","NY","44.83218","-73.80001","-5","1" +"12936","Essex","NY","44.259479","-73.40591","-5","1" +"12937","Fort Covington","NY","44.972087","-74.48703","-5","1" +"12938","Pleasant Valley","NY","41.773053","-73.856116","-5","1" +"12939","Gabriels","NY","44.552725","-74.317958","-5","1" +"12941","Jay","NY","44.3919","-73.73028","-5","1" +"12942","Keene","NY","44.25462","-73.78934","-5","1" +"12943","Keene Valley","NY","44.171625","-73.78131","-5","1" +"12944","Keeseville","NY","44.483465","-73.4801","-5","1" +"12945","Lake Clear","NY","44.360566","-74.25801","-5","1" +"12946","Lake Placid","NY","44.292147","-73.95985","-5","1" +"12949","Lawrenceville","NY","44.746861","-74.660413","-5","1" +"12950","Lewis","NY","44.322102","-73.5404","-5","1" +"12952","Lyon Mountain","NY","44.715159","-73.91824","-5","1" +"12953","Malone","NY","44.813419","-74.2772","-5","1" +"12955","Lyon Mountain","NY","44.787489","-73.98702","-5","1" +"12956","Mineville","NY","44.088275","-73.51745","-5","1" +"12957","Moira","NY","44.833996","-74.5716","-5","1" +"12958","Mooers","NY","44.958106","-73.58022","-5","1" +"12959","Mooers Forks","NY","44.951443","-73.68023","-5","1" +"12960","Moriah","NY","44.025573","-73.51287","-5","1" +"12961","Moriah Center","NY","44.061849","-73.58384","-5","1" +"12962","Morrisonville","NY","44.711769","-73.58219","-5","1" +"12964","New Russia","NY","44.129094","-73.64792","-5","1" +"12965","Nicholville","NY","44.698253","-74.68843","-5","1" +"12966","North Bangor","NY","44.812315","-74.40784","-5","1" +"12967","North Lawrence","NY","44.784144","-74.66213","-5","1" +"12969","Owls Head","NY","44.711622","-74.09679","-5","1" +"12970","Paul Smiths","NY","44.454639","-74.28753","-5","1" +"12972","Peru","NY","44.563323","-73.52307","-5","1" +"12973","Piercefield","NY","44.234289","-74.555957","-5","1" +"12974","Port Henry","NY","44.041901","-73.46132","-5","1" +"12975","Port Kent","NY","44.526437","-73.409243","-5","1" +"12976","Rainbow Lake","NY","44.552725","-74.317958","-5","1" +"12977","Ray Brook","NY","44.145678","-73.815204","-5","1" +"12978","Redford","NY","44.664956","-73.761204","-5","1" +"12979","Rouses Point","NY","44.990606","-73.37017","-5","1" +"12980","Saint Regis Falls","NY","44.63091","-74.53721","-5","1" +"12981","Saranac","NY","44.617642","-73.81196","-5","1" +"12983","Saranac Lake","NY","44.324736","-74.16843","-5","1" +"12985","Schuyler Falls","NY","44.589583","-73.71355","-5","1" +"12986","Tupper Lake","NY","44.220344","-74.46299","-5","1" +"12987","Upper Jay","NY","44.329473","-73.79282","-5","1" +"12989","Vermontville","NY","44.519178","-74.06053","-5","1" +"12992","West Chazy","NY","44.819829","-73.51156","-5","1" +"12993","Westport","NY","44.195201","-73.47194","-5","1" +"12995","Whippleville","NY","44.805681","-74.252254","-5","1" +"12996","Willsboro","NY","44.373007","-73.40668","-5","1" +"12997","Wilmington","NY","44.145678","-73.815204","-5","1" +"12998","Witherbee","NY","44.08267","-73.530601","-5","1" +"13020","Apulia Station","NY","42.823968","-76.062425","-5","1" +"13021","Auburn","NY","42.922273","-76.55882","-5","1" +"13022","Auburn","NY","43.163364","-76.509567","-5","1" +"13024","Auburn","NY","43.163364","-76.509567","-5","1" +"13026","Aurora","NY","42.758088","-76.66998","-5","1" +"13027","Baldwinsville","NY","43.165134","-76.33901","-5","1" +"13028","Bernhards Bay","NY","43.279405","-75.93107","-5","1" +"13029","Brewerton","NY","43.225081","-76.13966","-5","1" +"13030","Bridgeport","NY","43.164297","-75.96057","-5","1" +"13031","Camillus","NY","43.039916","-76.28757","-5","1" +"13032","Canastota","NY","43.086439","-75.76484","-5","1" +"13033","Cato","NY","43.182054","-76.57176","-5","1" +"13034","Cayuga","NY","42.912846","-76.70818","-5","1" +"13035","Cazenovia","NY","42.938816","-75.83037","-5","1" +"13036","Central Square","NY","43.299689","-76.15144","-5","1" +"13037","Chittenango","NY","43.059992","-75.87116","-5","1" +"13039","Cicero","NY","43.171707","-76.09505","-5","1" +"13040","Cincinnatus","NY","42.560795","-75.93241","-5","1" +"13041","Clay","NY","43.1835","-76.18002","-5","1" +"13042","Cleveland","NY","43.252084","-75.84853","-5","1" +"13043","Clockville","NY","43.042044","-75.740848","-5","1" +"13044","Constantia","NY","43.28547","-76.00138","-5","1" +"13045","Cortland","NY","42.591109","-76.19217","-5","1" +"13051","Delphi Falls","NY","42.870698","-75.91128","-5","1" +"13052","De Ruyter","NY","42.728977","-75.86633","-5","1" +"13053","Dryden","NY","42.483348","-76.27901","-5","1" +"13054","Durhamville","NY","43.165514","-75.68091","-5","1" +"13056","East Homer","NY","42.677155","-76.105201","-5","1" +"13057","East Syracuse","NY","43.074266","-76.05538","-5","1" +"13060","Elbridge","NY","43.025843","-76.42589","-5","1" +"13061","Erieville","NY","42.859332","-75.74261","-5","1" +"13062","Etna","NY","42.484414","-76.38271","-5","1" +"13063","Fabius","NY","42.847248","-75.97818","-5","1" +"13064","Fair Haven","NY","43.431311","-76.200448","-5","1" +"13065","Fayette","NY","42.822662","-76.80197","-5","1" +"13066","Fayetteville","NY","43.028516","-76.00876","-5","1" +"13068","Freeville","NY","42.505075","-76.35283","-5","1" +"13069","Fulton","NY","43.32347","-76.40029","-5","1" +"13071","Genoa","NY","42.677418","-76.54154","-5","1" +"13072","Georgetown","NY","42.763823","-75.75188","-5","1" +"13073","Groton","NY","42.591961","-76.39345","-5","1" +"13074","Hannibal","NY","43.317683","-76.56767","-5","1" +"13076","Hastings","NY","43.354706","-76.14871","-5","1" +"13077","Homer","NY","42.680693","-76.18566","-5","1" +"13078","Jamesville","NY","42.973991","-76.07493","-5","1" +"13080","Jordan","NY","43.07446","-76.47874","-5","1" +"13081","King Ferry","NY","42.667102","-76.62939","-5","1" +"13082","Kirkville","NY","43.099547","-75.9619","-5","1" +"13083","Lacona","NY","43.647881","-76.0167","-5","1" +"13084","La Fayette","NY","42.883503","-76.10983","-5","1" +"13087","Little York","NY","42.706981","-76.156103","-5","1" +"13088","Liverpool","NY","43.105917","-76.19365","-5","1" +"13089","Liverpool","NY","43.02143","-76.197701","-5","1" +"13090","Liverpool","NY","43.152017","-76.22068","-5","1" +"13092","Locke","NY","42.643214","-76.42578","-5","1" +"13093","Lycoming","NY","43.431311","-76.200448","-5","1" +"13101","McGraw","NY","42.593363","-76.07789","-5","1" +"13102","McLean","NY","42.554215","-76.292723","-5","1" +"13103","Mallory","NY","43.339851","-76.096357","-5","1" +"13104","Manlius","NY","42.987329","-75.96763","-5","1" +"13107","Maple View","NY","43.457798","-76.153442","-5","1" +"13108","Marcellus","NY","42.979467","-76.33811","-5","1" +"13110","Marietta","NY","42.891595","-76.28318","-5","1" +"13111","Martville","NY","43.258952","-76.61441","-5","1" +"13112","Memphis","NY","43.105771","-76.41482","-5","1" +"13113","Meridian","NY","43.089111","-76.621747","-5","1" +"13114","Mexico","NY","43.468092","-76.2382","-5","1" +"13115","Minetto","NY","43.397671","-76.482365","-5","1" +"13116","Minoa","NY","43.077067","-76.00695","-5","1" +"13117","Montezuma","NY","43.002267","-76.704722","-5","1" +"13118","Moravia","NY","42.755698","-76.41226","-5","1" +"13119","Mottville","NY","42.97446","-76.440833","-5","1" +"13120","Nedrow","NY","42.950501","-76.15797","-5","1" +"13121","New Haven","NY","43.483379","-76.315044","-5","1" +"13122","New Woodstock","NY","42.837642","-75.84778","-5","1" +"13123","North Bay","NY","43.236407","-75.776918","-5","1" +"13124","North Pitcher","NY","42.639288","-75.82012","-5","1" +"13126","Oswego","NY","43.449201","-76.47992","-5","1" +"13129","Georgetown","NY","42.712735","-75.731391","-5","1" +"13131","Parish","NY","43.415157","-76.11416","-5","1" +"13132","Pennellville","NY","43.262012","-76.22912","-5","1" +"13133","Colesville","NY","42.216968","-75.724015","-5","1" +"13134","Peterboro","NY","42.968619","-75.679351","-5","1" +"13135","Phoenix","NY","43.235916","-76.31339","-5","1" +"13136","Pitcher","NY","42.607076","-75.85216","-5","1" +"13137","Plainville","NY","43.157653","-76.44698","-5","1" +"13138","Pompey","NY","42.89274","-76.026459","-5","1" +"13139","Poplar Ridge","NY","42.742057","-76.628454","-5","1" +"13140","Port Byron","NY","43.049797","-76.66055","-5","1" +"13141","Preble","NY","42.7707","-76.18642","-5","1" +"13142","Pulaski","NY","43.559926","-76.13619","-5","1" +"13143","Red Creek","NY","43.235909","-76.71545","-5","1" +"13144","Richland","NY","43.560754","-75.99069","-5","1" +"13145","Sandy Creek","NY","43.653475","-76.13214","-5","1" +"13146","Savannah","NY","43.09986","-76.75716","-5","1" +"13147","Scipio Center","NY","42.774714","-76.57045","-5","1" +"13148","Seneca Falls","NY","42.924166","-76.78366","-5","1" +"13149","Preble","NY","42.718259","-76.149045","-5","1" +"13152","Skaneateles","NY","42.897167","-76.38963","-5","1" +"13153","Skaneateles Falls","NY","42.991112","-76.451147","-5","1" +"13154","South Butler","NY","43.134425","-76.765591","-5","1" +"13155","South Otselic","NY","42.662648","-75.76265","-5","1" +"13156","Sterling","NY","43.337718","-76.6729","-5","1" +"13157","Sylvan Beach","NY","43.209147","-75.72307","-5","1" +"13158","Truxton","NY","42.717801","-75.97209","-5","1" +"13159","Tully","NY","42.802031","-76.12717","-5","1" +"13160","Union Springs","NY","42.832007","-76.66641","-5","1" +"13162","Verona Beach","NY","43.18852","-75.712551","-5","1" +"13163","Wampsville","NY","43.078461","-75.701639","-5","1" +"13164","Warners","NY","43.088699","-76.31946","-5","1" +"13165","Waterloo","NY","42.911377","-76.87027","-5","1" +"13166","Weedsport","NY","43.056292","-76.5563","-5","1" +"13167","West Monroe","NY","43.309645","-76.0552","-5","1" +"13201","Syracuse","NY","43.02143","-76.197701","-5","1" +"13202","Syracuse","NY","43.045066","-76.14994","-5","1" +"13203","Syracuse","NY","43.061116","-76.13733","-5","1" +"13204","Syracuse","NY","43.048966","-76.17536","-5","1" +"13205","Syracuse","NY","43.010916","-76.14501","-5","1" +"13206","Syracuse","NY","43.069866","-76.10724","-5","1" +"13207","Syracuse","NY","43.020116","-76.16406","-5","1" +"13208","Syracuse","NY","43.074566","-76.14747","-5","1" +"13209","Syracuse","NY","43.081324","-76.23488","-5","1" +"13210","Syracuse","NY","43.037166","-76.12653","-5","1" +"13211","Syracuse","NY","43.098917","-76.13688","-5","1" +"13212","Syracuse","NY","43.128534","-76.13931","-5","1" +"13214","Syracuse","NY","43.038099","-76.07635","-5","1" +"13215","Syracuse","NY","42.996804","-76.2177","-5","1" +"13217","Syracuse","NY","43.02143","-76.197701","-5","1" +"13218","Syracuse","NY","43.02143","-76.197701","-5","1" +"13219","Syracuse","NY","43.041566","-76.22072","-5","1" +"13220","Syracuse","NY","43.123415","-76.12823","-5","1" +"13221","Syracuse","NY","43.02143","-76.197701","-5","1" +"13224","Syracuse","NY","43.041866","-76.1032","-5","1" +"13225","Syracuse","NY","43.02143","-76.197701","-5","1" +"13244","Syracuse","NY","43.037716","-76.139646","-5","1" +"13250","Syracuse","NY","43.02143","-76.197701","-5","1" +"13251","Syracuse","NY","43.02143","-76.197701","-5","1" +"13252","Syracuse","NY","43.050966","-76.156696","-5","1" +"13260","Syracuse","NY","43.02143","-76.197701","-5","1" +"13261","Syracuse","NY","43.02143","-76.197701","-5","1" +"13290","Syracuse","NY","43.075066","-76.17411","-5","1" +"13301","Alder Creek","NY","43.419132","-75.21942","-5","1" +"13302","Altmar","NY","43.499843","-75.97716","-5","1" +"13303","Ava","NY","43.368235","-75.4688","-5","1" +"13304","Barneveld","NY","43.242724","-75.1659","-5","1" +"13305","Beaver Falls","NY","43.818705","-75.480342","-5","1" +"13308","Blossvale","NY","43.236303","-75.68087","-5","1" +"13309","Boonville","NY","43.484783","-75.33559","-5","1" +"13310","Bouckville","NY","42.88821","-75.5688","-5","1" +"13312","Brantingham","NY","43.689564","-75.27252","-5","1" +"13313","Bridgewater","NY","42.87896","-75.25569","-5","1" +"13314","Brookfield","NY","42.832184","-75.32106","-5","1" +"13315","Burlington Flats","NY","42.728271","-75.14144","-5","1" +"13316","Camden","NY","43.377083","-75.74261","-5","1" +"13317","Canajoharie","NY","42.86749","-74.57435","-5","1" +"13318","Cassville","NY","42.937739","-75.24946","-5","1" +"13319","Chadwicks","NY","43.029669","-75.27211","-5","1" +"13320","Cherry Valley","NY","42.772775","-74.7359","-5","1" +"13321","Clark Mills","NY","43.090027","-75.387088","-5","1" +"13322","Clayville","NY","42.969624","-75.22603","-5","1" +"13323","Clinton","NY","43.049536","-75.37656","-5","1" +"13324","Cold Brook","NY","43.317064","-74.97449","-5","1" +"13325","Constableville","NY","43.570028","-75.49047","-5","1" +"13326","Cooperstown","NY","42.703091","-74.91413","-5","1" +"13327","Croghan","NY","43.932489","-75.29084","-5","1" +"13328","Deansboro","NY","42.9843","-75.4224","-5","1" +"13329","Dolgeville","NY","43.11545","-74.74379","-5","1" +"13331","Eagle Bay","NY","43.822824","-74.87283","-5","1" +"13332","Earlville","NY","42.752447","-75.56997","-5","1" +"13333","East Springfield","NY","42.843048","-74.80882","-5","1" +"13334","Eaton","NY","42.83917","-75.65482","-5","1" +"13335","Edmeston","NY","42.694896","-75.24214","-5","1" +"13337","Fly Creek","NY","42.743186","-74.98164","-5","1" +"13338","Forestport","NY","43.506153","-75.07355","-5","1" +"13339","Fort Plain","NY","42.943602","-74.64717","-5","1" +"13340","Frankfort","NY","43.046471","-75.10019","-5","1" +"13341","Franklin Springs","NY","43.036802","-75.39115","-5","1" +"13342","Garrattsville","NY","42.64743","-75.17793","-5","1" +"13343","Glenfield","NY","43.743932","-75.34971","-5","1" +"13345","Greig","NY","43.818705","-75.480342","-5","1" +"13346","Hamilton","NY","42.820826","-75.54012","-5","1" +"13348","Hartwick","NY","42.708284","-75.0588","-5","1" +"13350","Herkimer","NY","43.038149","-74.9846","-5","1" +"13352","Hinckley","NY","43.328187","-75.117319","-5","1" +"13353","Hoffmeister","NY","43.392434","-74.72675","-5","1" +"13354","Holland Patent","NY","43.261526","-75.25705","-5","1" +"13355","Hubbardsville","NY","42.81488","-75.43424","-5","1" +"13357","Ilion","NY","42.992323","-75.0615","-5","1" +"13360","Inlet","NY","43.744906","-74.77476","-5","1" +"13361","Jordanville","NY","42.902922","-74.89149","-5","1" +"13362","Knoxboro","NY","42.980334","-75.518569","-5","1" +"13363","Lee Center","NY","43.311975","-75.50677","-5","1" +"13364","Leonardsville","NY","42.954541","-75.616793","-5","1" +"13365","Little Falls","NY","43.053176","-74.84685","-5","1" +"13367","Lowville","NY","43.794492","-75.46905","-5","1" +"13368","Lyons Falls","NY","43.637104","-75.3483","-5","1" +"13388","Webb","NY","43.606444","-75.103186","-5","1" +"13396","Madison","NY","42.839697","-75.544322","-5","1" +"13401","McConnellsville","NY","43.267243","-75.688223","-5","1" +"13402","Madison","NY","42.90777","-75.4988","-5","1" +"13403","Marcy","NY","43.162119","-75.28435","-5","1" +"13404","Martinsburg","NY","43.818705","-75.480342","-5","1" +"13406","Middleville","NY","43.137624","-74.947","-5","1" +"13407","Mohawk","NY","42.970099","-74.96051","-5","1" +"13408","Morrisville","NY","42.923334","-75.66314","-5","1" +"13409","Munnsville","NY","42.967906","-75.59457","-5","1" +"13410","Nelliston","NY","42.937863","-74.611711","-5","1" +"13411","New Berlin","NY","42.626177","-75.31502","-5","1" +"13413","New Hartford","NY","43.067169","-75.28767","-5","1" +"13415","New Lisbon","NY","42.590419","-75.195695","-5","1" +"13416","Newport","NY","43.178528","-74.98117","-5","1" +"13417","New York Mills","NY","43.102469","-75.29566","-5","1" +"13418","North Brookfield","NY","42.852808","-75.39938","-5","1" +"13420","Old Forge","NY","43.707331","-74.94498","-5","1" +"13421","Oneida","NY","43.079635","-75.64678","-5","1" +"13424","Oriskany","NY","43.158258","-75.34281","-5","1" +"13425","Oriskany Falls","NY","42.964774","-75.47889","-5","1" +"13426","Orwell","NY","43.562757","-75.996773","-5","1" +"13428","Palatine Bridge","NY","42.923583","-74.55536","-5","1" +"13431","Poland","NY","43.21574","-75.08534","-5","1" +"13433","Port Leyden","NY","43.580184","-75.31757","-5","1" +"13435","Prospect","NY","43.305156","-75.150183","-5","1" +"13436","Raquette Lake","NY","43.807314","-74.66771","-5","1" +"13437","Redfield","NY","43.572876","-75.81709","-5","1" +"13438","Remsen","NY","43.349682","-75.15821","-5","1" +"13439","Richfield Springs","NY","42.852372","-74.99121","-5","1" +"13440","Rome","NY","43.217069","-75.45531","-5","1" +"13441","Rome","NY","43.164312","-75.511301","-5","1" +"13442","Rome","NY","43.239274","-75.47796","-5","1" +"13444","Plymouth","NY","42.637549","-75.672508","-5","1" +"13449","Rome","NY","43.239274","-75.47796","-5","1" +"13450","Roseboom","NY","42.69983","-74.81731","-5","1" +"13452","Saint Johnsville","NY","43.021223","-74.64537","-5","1" +"13453","Williamstown","NY","43.436919","-75.881404","-5","1" +"13454","Salisbury Center","NY","43.222171","-74.80223","-5","1" +"13455","Sangerfield","NY","42.916235","-75.35448","-5","1" +"13456","Sauquoit","NY","43.005669","-75.26202","-5","1" +"13457","Schuyler Lake","NY","42.775805","-75.048502","-5","1" +"13459","Sharon Springs","NY","42.774077","-74.58404","-5","1" +"13460","Sherburne","NY","42.680051","-75.46547","-5","1" +"13461","Sherrill","NY","43.070808","-75.59912","-5","1" +"13464","Smyrna","NY","42.687757","-75.61558","-5","1" +"13465","Solsville","NY","42.954541","-75.616793","-5","1" +"13468","Springfield Center","NY","42.843002","-74.86479","-5","1" +"13469","Stittville","NY","43.220075","-75.29542","-5","1" +"13470","Stratford","NY","43.180412","-74.66524","-5","1" +"13471","Taberg","NY","43.346517","-75.60493","-5","1" +"13472","Thendara","NY","43.460951","-74.957099","-5","1" +"13473","Turin","NY","43.654278","-75.43828","-5","1" +"13475","Van Hornesville","NY","42.870799","-74.84542","-5","1" +"13476","Vernon","NY","43.079233","-75.5134","-5","1" +"13477","Vernon Center","NY","43.035057","-75.50381","-5","1" +"13478","Verona","NY","43.141727","-75.57702","-5","1" +"13479","Washington Mills","NY","43.053769","-75.271559","-5","1" +"13480","Waterville","NY","42.922823","-75.36494","-5","1" +"13482","West Burlington","NY","42.704333","-75.184913","-5","1" +"13483","Westdale","NY","43.399851","-75.82785","-5","1" +"13484","West Eaton","NY","42.854631","-75.660462","-5","1" +"13485","West Edmeston","NY","42.766057","-75.32353","-5","1" +"13486","Westernville","NY","43.338878","-75.35861","-5","1" +"13488","Westford","NY","42.680906","-74.76529","-5","1" +"13489","West Leyden","NY","43.453661","-75.52172","-5","1" +"13490","Westmoreland","NY","43.106801","-75.41944","-5","1" +"13491","West Winfield","NY","42.862696","-75.17053","-5","1" +"13492","Whitesboro","NY","43.11627","-75.31182","-5","1" +"13493","Williamstown","NY","43.421597","-75.90529","-5","1" +"13494","Woodgate","NY","43.524904","-75.142771","-5","1" +"13495","Yorkville","NY","43.110619","-75.27716","-5","1" +"13501","Utica","NY","43.087669","-75.22681","-5","1" +"13502","Utica","NY","43.114519","-75.22284","-5","1" +"13503","Utica","NY","43.101869","-75.231158","-5","1" +"13504","Utica","NY","43.136033","-75.432486","-5","1" +"13505","Utica","NY","43.087169","-75.260259","-5","1" +"13550","Herkimer","NY","43.026416","-74.982271","-5","1" +"13562","Hermon","NY","44.465307","-75.230195","-5","1" +"13578","Pharsalia","NY","42.595426","-75.757217","-5","1" +"13599","Utica","NY","43.239274","-75.47796","-5","1" +"13601","Watertown","NY","43.976735","-75.91199","-5","1" +"13602","Fort Drum","NY","44.03803","-75.75793","-5","1" +"13603","Watertown","NY","44.030204","-75.81845","-5","1" +"13605","Adams","NY","43.807654","-76.04936","-5","1" +"13606","Adams Center","NY","43.871728","-76.00793","-5","1" +"13607","Alexandria Bay","NY","44.328698","-75.93103","-5","1" +"13608","Antwerp","NY","44.243007","-75.60331","-5","1" +"13610","Rodman","NY","43.818705","-75.480342","-5","1" +"13611","Belleville","NY","43.778046","-76.125914","-5","1" +"13612","Black River","NY","44.003136","-75.77839","-5","1" +"13613","Brasher Falls","NY","44.864624","-74.75386","-5","1" +"13614","Brier Hill","NY","44.54141","-75.70576","-5","1" +"13615","Brownville","NY","44.005613","-75.98315","-5","1" +"13616","Calcium","NY","44.030831","-75.85521","-5","1" +"13617","Canton","NY","44.58249","-75.14417","-5","1" +"13618","Cape Vincent","NY","44.114183","-76.29288","-5","1" +"13619","Carthage","NY","43.981245","-75.61724","-5","1" +"13620","Castorland","NY","43.90707","-75.44761","-5","1" +"13621","Chase Mills","NY","44.850439","-75.06915","-5","1" +"13622","Chaumont","NY","44.0958","-76.11992","-5","1" +"13623","Chippewa Bay","NY","44.440171","-75.757938","-5","1" +"13624","Clayton","NY","44.230421","-76.09312","-5","1" +"13625","Colton","NY","44.537321","-74.92847","-5","1" +"13626","Copenhagen","NY","43.859025","-75.72942","-5","1" +"13627","Deer River","NY","43.818705","-75.480342","-5","1" +"13628","Deferiet","NY","43.885519","-75.798319","-5","1" +"13630","De Kalb Junction","NY","44.494708","-75.29944","-5","1" +"13631","Denmark","NY","43.818705","-75.480342","-5","1" +"13632","Depauville","NY","44.139501","-76.061552","-5","1" +"13633","De Peyster","NY","44.469527","-75.50293","-5","1" +"13634","Dexter","NY","44.015332","-76.05711","-5","1" +"13635","Edwards","NY","44.314998","-75.26149","-5","1" +"13636","Ellisburg","NY","43.75965","-76.152508","-5","1" +"13637","Evans Mills","NY","44.091494","-75.82694","-5","1" +"13638","Felts Mills","NY","44.021094","-75.76113","-5","1" +"13639","Fine","NY","44.268403","-75.13664","-5","1" +"13640","Wellesley Island","NY","44.318866","-75.99068","-5","1" +"13641","Fishers Landing","NY","44.207681","-75.914556","-5","1" +"13642","Gouverneur","NY","44.319897","-75.45537","-5","1" +"13643","Great Bend","NY","44.014698","-75.728357","-5","1" +"13645","Hailesboro","NY","44.533125","-75.192865","-5","1" +"13646","Hammond","NY","44.444242","-75.69227","-5","1" +"13647","Hannawa Falls","NY","44.608735","-74.973218","-5","1" +"13648","Harrisville","NY","44.168224","-75.29253","-5","1" +"13649","Helena","NY","44.921678","-74.706763","-5","1" +"13650","Henderson","NY","43.82212","-76.2127","-5","1" +"13651","Henderson Harbor","NY","43.870842","-76.180886","-5","1" +"13652","Hermon","NY","44.436004","-75.22228","-5","1" +"13654","Heuvelton","NY","44.563604","-75.48794","-5","1" +"13655","Hogansburg","NY","44.98184","-74.67374","-5","1" +"13656","La Fargeville","NY","44.194126","-75.95725","-5","1" +"13657","Limerick","NY","44.035703","-76.090424","-5","1" +"13658","Lisbon","NY","44.744462","-75.28123","-5","1" +"13659","Lorraine","NY","43.743998","-75.89354","-5","1" +"13660","Madrid","NY","44.758378","-75.14571","-5","1" +"13661","Mannsville","NY","43.714545","-76.10465","-5","1" +"13662","Massena","NY","44.937212","-74.87693","-5","1" +"13664","Morristown","NY","44.585561","-75.64797","-5","1" +"13665","Natural Bridge","NY","44.055436","-75.46279","-5","1" +"13666","Newton Falls","NY","44.533125","-75.192865","-5","1" +"13667","Norfolk","NY","44.823502","-74.96875","-5","1" +"13668","Norwood","NY","44.752355","-74.98906","-5","1" +"13669","Ogdensburg","NY","44.683636","-75.49024","-5","1" +"13670","Oswegatchie","NY","44.210178","-75.0697","-5","1" +"13671","Oxbow","NY","44.308475","-75.66879","-5","1" +"13672","Parishville","NY","44.4987","-74.74685","-5","1" +"13673","Philadelphia","NY","44.160785","-75.71159","-5","1" +"13674","Pierrepont Manor","NY","43.73345","-76.054313","-5","1" +"13675","Plessis","NY","44.277365","-75.84263","-5","1" +"13676","Potsdam","NY","44.651265","-74.95289","-5","1" +"13677","Pyrites","NY","44.673438","-75.082041","-5","1" +"13678","Raymondville","NY","44.828685","-74.979811","-5","1" +"13679","Redwood","NY","44.323952","-75.76895","-5","1" +"13680","Rensselaer Falls","NY","44.593588","-75.32389","-5","1" +"13681","Richville","NY","44.414762","-75.37897","-5","1" +"13682","Rodman","NY","43.842808","-75.90347","-5","1" +"13683","Rooseveltown","NY","44.533125","-75.192865","-5","1" +"13684","Russell","NY","44.353607","-75.0694","-5","1" +"13685","Sackets Harbor","NY","43.936173","-76.10295","-5","1" +"13687","South Colton","NY","44.501065","-74.86633","-5","1" +"13688","South Rutland","NY","43.951666","-75.767772","-5","1" +"13690","Star Lake","NY","44.161058","-74.99617","-5","1" +"13691","Theresa","NY","44.216969","-75.79671","-5","1" +"13692","Thousand Island Park","NY","44.289833","-76.02621","-5","1" +"13693","Three Mile Bay","NY","44.064999","-76.24023","-5","1" +"13694","Waddington","NY","44.866754","-75.17201","-5","1" +"13695","Wanakena","NY","44.140791","-74.912493","-5","1" +"13696","West Stockholm","NY","44.69563","-74.89998","-5","1" +"13697","Winthrop","NY","44.755383","-74.81213","-5","1" +"13698","Ellisburg","NY","43.775216","-76.202658","-5","1" +"13699","Potsdam","NY","44.496564","-75.072951","-5","1" +"13730","Afton","NY","42.232991","-75.53429","-5","1" +"13731","Andes","NY","42.152105","-74.78184","-5","1" +"13732","Apalachin","NY","42.059433","-76.14733","-5","1" +"13733","Bainbridge","NY","42.292692","-75.47528","-5","1" +"13734","Barton","NY","42.063671","-76.40638","-5","1" +"13736","Berkshire","NY","42.306877","-76.204","-5","1" +"13737","Bible School Park","NY","42.080494","-76.097288","-5","1" +"13738","Blodgett Mills","NY","42.567313","-76.123795","-5","1" +"13739","Bloomville","NY","42.364673","-74.78034","-5","1" +"13740","Bovina Center","NY","42.274238","-74.75464","-5","1" +"13743","Candor","NY","42.213965","-76.34099","-5","1" +"13744","Castle Creek","NY","42.250715","-75.91871","-5","1" +"13745","Chenango Bridge","NY","42.173775","-75.872839","-5","1" +"13746","Chenango Forks","NY","42.261923","-75.84463","-5","1" +"13747","Colliersville","NY","42.505122","-74.982056","-5","1" +"13748","Conklin","NY","42.0553","-75.81219","-5","1" +"13749","Corbettsville","NY","42.206745","-75.74488","-5","1" +"13750","Davenport","NY","42.473691","-74.8134","-5","1" +"13751","Davenport Center","NY","42.424859","-74.900195","-5","1" +"13752","De Lancey","NY","42.187835","-74.89418","-5","1" +"13753","Delhi","NY","42.302716","-74.91667","-5","1" +"13754","Deposit","NY","42.076427","-75.44551","-5","1" +"13755","Downsville","NY","42.086268","-75.00691","-5","1" +"13756","East Branch","NY","42.018923","-75.11339","-5","1" +"13757","East Meredith","NY","42.411895","-74.91372","-5","1" +"13758","East Pharsalia","NY","42.583518","-75.721931","-5","1" +"13760","Endicott","NY","42.113974","-76.05256","-5","1" +"13761","Endicott","NY","42.206745","-75.74488","-5","1" +"13762","Endwell","NY","42.206745","-75.74488","-5","1" +"13763","Endicott","NY","42.206745","-75.74488","-5","1" +"13766","Maine","NY","42.155346","-76.071767","-5","1" +"13774","Fishs Eddy","NY","41.965435","-75.17968","-5","1" +"13775","Franklin","NY","42.333285","-75.16086","-5","1" +"13776","Gilbertsville","NY","42.457398","-75.33434","-5","1" +"13777","Glen Aubrey","NY","42.254154","-76.01194","-5","1" +"13778","Greene","NY","42.336771","-75.75964","-5","1" +"13780","Guilford","NY","42.426583","-75.48119","-5","1" +"13782","Hamden","NY","42.18942","-74.99219","-5","1" +"13783","Hancock","NY","41.985839","-75.28214","-5","1" +"13784","Harford","NY","42.431068","-76.159312","-5","1" +"13786","Harpersfield","NY","42.445257","-74.70189","-5","1" +"13787","Harpursville","NY","42.197905","-75.65578","-5","1" +"13788","Hobart","NY","42.368357","-74.66452","-5","1" +"13790","Johnson City","NY","42.125725","-75.96686","-5","1" +"13792","Morris","NY","42.509167","-75.208242","-5","1" +"13794","Killawog","NY","42.402816","-76.036582","-5","1" +"13795","Kirkwood","NY","42.056312","-75.79275","-5","1" +"13796","Laurens","NY","42.540359","-75.14604","-5","1" +"13797","Lisle","NY","42.335102","-76.02313","-5","1" +"13801","McDonough","NY","42.504765","-75.77739","-5","1" +"13802","Maine","NY","42.255624","-76.05009","-5","1" +"13803","Marathon","NY","42.453663","-76.06983","-5","1" +"13804","Masonville","NY","42.215297","-75.35815","-5","1" +"13806","Meridale","NY","42.183045","-74.925617","-5","1" +"13807","Milford","NY","42.606209","-74.97261","-5","1" +"13808","Morris","NY","42.532969","-75.25536","-5","1" +"13809","Mount Upton","NY","42.392104","-75.41093","-5","1" +"13810","Mount Vision","NY","42.609579","-75.09464","-5","1" +"13811","Newark Valley","NY","42.222777","-76.17822","-5","1" +"13812","Nichols","NY","42.024157","-76.36558","-5","1" +"13813","Nineveh","NY","42.163814","-75.55149","-5","1" +"13814","North Norwich","NY","42.603574","-75.528221","-5","1" +"13815","Norwich","NY","42.541733","-75.52612","-5","1" +"13820","Oneonta","NY","42.469761","-75.05192","-5","1" +"13825","Otego","NY","42.417489","-75.18605","-5","1" +"13826","Ouaquaga","NY","42.112127","-75.639586","-5","1" +"13827","Owego","NY","42.120274","-76.25874","-5","1" +"13830","Oxford","NY","42.428818","-75.62459","-5","1" +"13832","Plymouth","NY","42.650584","-75.65761","-5","1" +"13833","Port Crane","NY","42.185196","-75.7763","-5","1" +"13834","Portlandville","NY","42.536475","-74.96218","-5","1" +"13835","Richford","NY","42.396659","-76.15709","-5","1" +"13837","Shinhopple","NY","42.183045","-74.925617","-5","1" +"13838","Sidney","NY","42.304177","-75.39563","-5","1" +"13839","Sidney Center","NY","42.236762","-75.25901","-5","1" +"13840","Smithboro","NY","42.039512","-76.400376","-5","1" +"13841","Smithville Flats","NY","42.419896","-75.83772","-5","1" +"13842","South Kortright","NY","42.376254","-74.72258","-5","1" +"13843","South New Berlin","NY","42.533274","-75.38008","-5","1" +"13844","South Plymouth","NY","42.603506","-75.67053","-5","1" +"13845","Tioga Center","NY","42.065842","-76.381946","-5","1" +"13846","Treadwell","NY","42.344248","-75.05323","-5","1" +"13847","Trout Creek","NY","42.183045","-74.925617","-5","1" +"13848","Tunnel","NY","42.214705","-75.727699","-5","1" +"13849","Unadilla","NY","42.343576","-75.3146","-5","1" +"13850","Vestal","NY","42.075874","-76.02837","-5","1" +"13851","Vestal","NY","42.206745","-75.74488","-5","1" +"13856","Walton","NY","42.182237","-75.14627","-5","1" +"13859","Wells Bridge","NY","42.367765","-75.24718","-5","1" +"13860","West Davenport","NY","42.183045","-74.925617","-5","1" +"13861","West Oneonta","NY","42.488953","-75.12063","-5","1" +"13862","Whitney Point","NY","42.328284","-75.95021","-5","1" +"13863","Willet","NY","42.437964","-75.89884","-5","1" +"13864","Willseyville","NY","42.298203","-76.38844","-5","1" +"13865","Windsor","NY","42.070228","-75.63584","-5","1" +"13901","Binghamton","NY","42.142575","-75.88783","-5","1" +"13902","Binghamton","NY","42.105375","-75.8876","-5","1" +"13903","Binghamton","NY","42.077258","-75.90226","-5","1" +"13904","Binghamton","NY","42.110927","-75.85223","-5","1" +"13905","Binghamton","NY","42.121443","-75.93329","-5","1" +"13942","Whitestown","NY","43.114669","-75.305811","-5","1" +"14001","Akron","NY","43.024559","-78.50414","-5","1" +"14003","Alabama","NY","42.998052","-78.184813","-5","1" +"14004","Alden","NY","42.898709","-78.51652","-5","1" +"14005","Alexander","NY","42.906765","-78.24581","-5","1" +"14006","Angola","NY","42.633375","-79.04567","-5","1" +"14008","Appleton","NY","43.318768","-78.63328","-5","1" +"14009","Arcade","NY","42.582693","-78.40069","-5","1" +"14010","Athol Springs","NY","42.768413","-78.887094","-5","1" +"14011","Attica","NY","42.844962","-78.27803","-5","1" +"14012","Barker","NY","43.337798","-78.52955","-5","1" +"14013","Basom","NY","43.074578","-78.40345","-5","1" +"14020","Batavia","NY","42.996507","-78.19279","-5","1" +"14021","Batavia","NY","42.998052","-78.184813","-5","1" +"14024","Bliss","NY","42.579516","-78.24818","-5","1" +"14025","Boston","NY","42.627312","-78.73768","-5","1" +"14026","Bowmansville","NY","42.941025","-78.68548","-5","1" +"14027","Brant","NY","42.57075","-79.030785","-5","1" +"14028","Burt","NY","43.326155","-78.71564","-5","1" +"14029","Centerville","NY","42.474283","-78.247413","-5","1" +"14030","Chaffee","NY","42.562386","-78.49087","-5","1" +"14031","Clarence","NY","42.981558","-78.61484","-5","1" +"14032","Clarence Center","NY","43.019908","-78.63497","-5","1" +"14033","Colden","NY","42.655098","-78.68472","-5","1" +"14034","Collins","NY","42.498791","-78.8835","-5","1" +"14035","Collins Center","NY","42.49064","-78.849861","-5","1" +"14036","Corfu","NY","42.974083","-78.38961","-5","1" +"14037","Cowlesville","NY","42.814667","-78.46076","-5","1" +"14038","Crittenden","NY","42.947259","-78.474444","-5","1" +"14039","Dale","NY","42.829129","-78.17657","-5","1" +"14040","Darien Center","NY","42.891116","-78.37872","-5","1" +"14041","Dayton","NY","42.408583","-78.984391","-5","1" +"14042","Delevan","NY","42.474779","-78.47303","-5","1" +"14043","Depew","NY","42.904958","-78.7006","-5","1" +"14047","Derby","NY","42.694598","-78.98151","-5","1" +"14048","Dunkirk","NY","42.479471","-79.32805","-5","1" +"14051","East Amherst","NY","43.025217","-78.70394","-5","1" +"14052","East Aurora","NY","42.770859","-78.59804","-5","1" +"14054","East Bethany","NY","42.903676","-78.13481","-5","1" +"14055","East Concord","NY","42.554206","-78.61829","-5","1" +"14056","East Pembroke","NY","42.991173","-78.312171","-5","1" +"14057","Eden","NY","42.651776","-78.87634","-5","1" +"14058","Elba","NY","43.091886","-78.15151","-5","1" +"14059","Elma","NY","42.834159","-78.64246","-5","1" +"14060","Farmersville Station","NY","42.443406","-78.32302","-5","1" +"14061","Farnham","NY","42.594627","-79.08404","-5","1" +"14062","Forestville","NY","42.450845","-79.16528","-5","1" +"14063","Fredonia","NY","42.425683","-79.3371","-5","1" +"14064","Rochester","NY","43.158013","-77.607049","-5","1" +"14065","Freedom","NY","42.483508","-78.30011","-5","1" +"14066","Gainesville","NY","42.619549","-78.16153","-5","1" +"14067","Gasport","NY","43.20258","-78.56868","-5","1" +"14068","Getzville","NY","43.02534","-78.76241","-5","1" +"14069","Glenwood","NY","42.601635","-78.64273","-5","1" +"14070","Gowanda","NY","42.453234","-78.9348","-5","1" +"14072","Grand Island","NY","43.011823","-78.95914","-5","1" +"14075","Hamburg","NY","42.734051","-78.8413","-5","1" +"14080","Holland","NY","42.640351","-78.53494","-5","1" +"14081","Irving","NY","42.573552","-79.09002","-5","1" +"14082","Java Center","NY","42.661838","-78.38309","-5","1" +"14083","Java Village","NY","42.676913","-78.44075","-5","1" +"14085","Lake View","NY","42.718308","-78.9372","-5","1" +"14086","Lancaster","NY","42.904258","-78.65519","-5","1" +"14091","Lawtons","NY","42.535917","-78.88235","-5","1" +"14092","Lewiston","NY","43.169055","-79.02426","-5","1" +"14094","Lockport","NY","43.160857","-78.68756","-5","1" +"14095","Lockport","NY","43.32684","-78.830681","-5","1" +"14098","Lyndonville","NY","43.338755","-78.3931","-5","1" +"14101","Machias","NY","42.393206","-78.52655","-5","1" +"14102","Marilla","NY","42.838643","-78.55601","-5","1" +"14103","Medina","NY","43.217155","-78.38746","-5","1" +"14105","Middleport","NY","43.199665","-78.48378","-5","1" +"14107","Model City","NY","43.32684","-78.830681","-5","1" +"14108","Newfane","NY","43.264406","-78.72634","-5","1" +"14109","Niagara University","NY","43.32684","-78.830681","-5","1" +"14110","North Boston","NY","42.768413","-78.887094","-5","1" +"14111","North Collins","NY","42.593148","-78.91498","-5","1" +"14112","North Evans","NY","42.691742","-78.992658","-5","1" +"14113","North Java","NY","42.672162","-78.33745","-5","1" +"14120","North Tonawanda","NY","43.048156","-78.86338","-5","1" +"14125","Oakfield","NY","43.077433","-78.27816","-5","1" +"14126","Olcott","NY","43.330443","-78.726661","-5","1" +"14127","Orchard Park","NY","42.759917","-78.75294","-5","1" +"14129","Perrysburg","NY","42.469165","-79.01069","-5","1" +"14130","Pike","NY","42.543108","-78.153849","-5","1" +"14131","Ransomville","NY","43.237855","-78.90884","-5","1" +"14132","Sanborn","NY","43.140056","-78.88297","-5","1" +"14133","Sandusky","NY","42.489129","-78.366991","-5","1" +"14134","Sardinia","NY","42.534854","-78.52113","-5","1" +"14135","Sheridan","NY","42.488983","-79.238997","-5","1" +"14136","Silver Creek","NY","42.535276","-79.16539","-5","1" +"14138","South Dayton","NY","42.372077","-79.05552","-5","1" +"14139","South Wales","NY","42.716919","-78.53931","-5","1" +"14140","Spring Brook","NY","42.807159","-78.667599","-5","1" +"14141","Springville","NY","42.516248","-78.68944","-5","1" +"14143","Stafford","NY","42.977828","-78.07934","-5","1" +"14144","Stella Niagara","NY","43.199494","-79.042477","-5","1" +"14145","Strykersville","NY","42.720756","-78.43429","-5","1" +"14150","Tonawanda","NY","43.001907","-78.8631","-5","1" +"14151","Tonawanda","NY","42.768413","-78.887094","-5","1" +"14166","Van Buren Point","NY","42.4511","-79.415421","-5","1" +"14167","Varysburg","NY","42.750175","-78.32283","-5","1" +"14168","Versailles","NY","42.509271","-78.999471","-5","1" +"14169","Wales Center","NY","42.767333","-78.585646","-5","1" +"14170","West Falls","NY","42.692304","-78.67147","-5","1" +"14171","West Valley","NY","42.426278","-78.6474","-5","1" +"14172","Wilson","NY","43.307288","-78.83368","-5","1" +"14173","Yorkshire","NY","42.524691","-78.475474","-5","1" +"14174","Youngstown","NY","43.247054","-79.02562","-5","1" +"14201","Buffalo","NY","42.896407","-78.88515","-5","1" +"14202","Buffalo","NY","42.886357","-78.8779","-5","1" +"14203","Buffalo","NY","42.880107","-78.8699","-5","1" +"14204","Buffalo","NY","42.884008","-78.86152","-5","1" +"14205","Buffalo","NY","42.768413","-78.887094","-5","1" +"14206","Buffalo","NY","42.880105","-78.81049","-5","1" +"14207","Buffalo","NY","42.94722","-78.89694","-5","1" +"14208","Buffalo","NY","42.914307","-78.85072","-5","1" +"14209","Buffalo","NY","42.913257","-78.86612","-5","1" +"14210","Buffalo","NY","42.866708","-78.83139","-5","1" +"14211","Buffalo","NY","42.907358","-78.82355","-5","1" +"14212","Buffalo","NY","42.894758","-78.82303","-5","1" +"14213","Buffalo","NY","42.916057","-78.8915","-5","1" +"14214","Buffalo","NY","42.941407","-78.83741","-5","1" +"14215","Buffalo","NY","42.934757","-78.8118","-5","1" +"14216","Buffalo","NY","42.949707","-78.85923","-5","1" +"14217","Buffalo","NY","42.968707","-78.8745","-5","1" +"14218","Buffalo","NY","42.821008","-78.82448","-5","1" +"14219","Buffalo","NY","42.790708","-78.82717","-5","1" +"14220","Buffalo","NY","42.845758","-78.8187","-5","1" +"14221","Buffalo","NY","42.977456","-78.73356","-5","1" +"14222","Buffalo","NY","42.917657","-78.8779","-5","1" +"14223","Buffalo","NY","42.972207","-78.84234","-5","1" +"14224","Buffalo","NY","42.836858","-78.75557","-5","1" +"14225","Buffalo","NY","42.929891","-78.75813","-5","1" +"14226","Buffalo","NY","42.968057","-78.80047","-5","1" +"14227","Buffalo","NY","42.881372","-78.74466","-5","1" +"14228","Buffalo","NY","43.023347","-78.79494","-5","1" +"14231","Buffalo","NY","42.768413","-78.887094","-5","1" +"14233","Buffalo","NY","42.768413","-78.887094","-5","1" +"14240","Buffalo","NY","42.768413","-78.887094","-5","1" +"14241","Buffalo","NY","42.938258","-78.744053","-5","1" +"14260","Buffalo","NY","42.768413","-78.887094","-5","1" +"14261","Buffalo","NY","42.768413","-78.887094","-5","1" +"14263","Buffalo","NY","42.768413","-78.887094","-5","1" +"14264","Buffalo","NY","42.885568","-78.873479","-5","1" +"14265","Buffalo","NY","42.768413","-78.887094","-5","1" +"14267","Buffalo","NY","42.768413","-78.887094","-5","1" +"14269","Buffalo","NY","42.768413","-78.887094","-5","1" +"14270","Buffalo","NY","42.768413","-78.887094","-5","1" +"14272","Buffalo","NY","42.768413","-78.887094","-5","1" +"14273","Buffalo","NY","42.75495","-78.784908","-5","1" +"14276","Buffalo","NY","42.768413","-78.887094","-5","1" +"14280","Buffalo","NY","42.768413","-78.887094","-5","1" +"14301","Niagara Falls","NY","43.096555","-79.03925","-5","1" +"14302","Niagara Falls","NY","43.32684","-78.830681","-5","1" +"14303","Niagara Falls","NY","43.086355","-79.03736","-5","1" +"14304","Niagara Falls","NY","43.091106","-78.96249","-5","1" +"14305","Niagara Falls","NY","43.115355","-79.03769","-5","1" +"14410","Adams Basin","NY","43.195261","-77.855883","-5","1" +"14411","Albion","NY","43.244034","-78.2023","-5","1" +"14413","Alton","NY","43.222735","-76.982149","-5","1" +"14414","Avon","NY","42.899233","-77.73372","-5","1" +"14415","Bellona","NY","42.757486","-77.02311","-5","1" +"14416","Bergen","NY","43.067831","-77.99024","-5","1" +"14417","Geneseo","NY","42.834813","-77.715406","-5","1" +"14418","Branchport","NY","42.605481","-77.20117","-5","1" +"14420","Brockport","NY","43.214261","-77.93937","-5","1" +"14422","Byron","NY","43.079217","-78.06371","-5","1" +"14423","Caledonia","NY","42.937589","-77.83528","-5","1" +"14424","Canandaigua","NY","42.85297","-77.29466","-5","1" +"14425","Farmington","NY","42.985007","-77.346","-5","1" +"14427","Castile","NY","42.63529","-78.05135","-5","1" +"14428","Churchville","NY","43.079181","-77.87334","-5","1" +"14429","Clarendon","NY","43.381027","-78.231338","-5","1" +"14430","Clarkson","NY","43.286024","-77.684264","-5","1" +"14432","Clifton Springs","NY","42.965372","-77.14416","-5","1" +"14433","Clyde","NY","43.07351","-76.87557","-5","1" +"14435","Conesus","NY","42.706781","-77.68103","-5","1" +"14437","Dansville","NY","42.576771","-77.71925","-5","1" +"14441","Dresden","NY","42.684588","-76.95775","-5","1" +"14443","East Bloomfield","NY","42.900966","-77.42331","-5","1" +"14445","East Rochester","NY","43.111663","-77.48709","-5","1" +"14449","East Williamson","NY","43.235369","-77.137642","-5","1" +"14450","Fairport","NY","43.091714","-77.43483","-5","1" +"14452","Fancher","NY","43.381027","-78.231338","-5","1" +"14453","Fishers","NY","43.010908","-77.47054","-5","1" +"14454","Geneseo","NY","42.798159","-77.77733","-5","1" +"14456","Geneva","NY","42.853039","-76.99394","-5","1" +"14458","Lima","NY","42.855029","-77.668326","-5","1" +"14461","Gorham","NY","42.808127","-77.287611","-5","1" +"14462","Groveland","NY","42.681361","-77.75302","-5","1" +"14463","Hall","NY","42.796578","-77.063876","-5","1" +"14464","Hamlin","NY","43.319027","-77.91991","-5","1" +"14466","Hemlock","NY","42.787276","-77.58983","-5","1" +"14467","Henrietta","NY","43.048663","-77.60843","-5","1" +"14468","Hilton","NY","43.289787","-77.79548","-5","1" +"14469","Bloomfield","NY","42.868609","-77.4509","-5","1" +"14470","Holley","NY","43.221689","-78.04393","-5","1" +"14471","Honeoye","NY","42.762059","-77.50488","-5","1" +"14472","Honeoye Falls","NY","42.964593","-77.5919","-5","1" +"14475","Ionia","NY","42.933105","-77.49687","-5","1" +"14476","Kendall","NY","43.339304","-78.02581","-5","1" +"14477","Kent","NY","43.341512","-78.14128","-5","1" +"14478","Keuka Park","NY","42.589281","-77.11824","-5","1" +"14479","Knowlesville","NY","43.241502","-78.318828","-5","1" +"14480","Lakeville","NY","42.837786","-77.70625","-5","1" +"14481","Leicester","NY","42.780121","-77.91499","-5","1" +"14482","Le Roy","NY","42.979887","-77.97053","-5","1" +"14484","Portage","NY","42.558227","-78.047214","-5","1" +"14485","Lima","NY","42.879208","-77.60183","-5","1" +"14486","Linwood","NY","42.915297","-77.949818","-5","1" +"14487","Livonia","NY","42.809908","-77.65301","-5","1" +"14488","Livonia Center","NY","42.729839","-77.773919","-5","1" +"14489","Lyons","NY","43.076715","-76.99231","-5","1" +"14502","Macedon","NY","43.08786","-77.33068","-5","1" +"14504","Manchester","NY","42.970621","-77.2298","-5","1" +"14505","Marion","NY","43.160635","-77.16948","-5","1" +"14506","Mendon","NY","42.999201","-77.50263","-5","1" +"14507","Middlesex","NY","42.702921","-77.27447","-5","1" +"14508","Morton","NY","43.381027","-78.231338","-5","1" +"14510","Mount Morris","NY","42.692608","-77.87663","-5","1" +"14511","Mumford","NY","43.002612","-77.86458","-5","1" +"14512","Naples","NY","42.628515","-77.39457","-5","1" +"14513","Newark","NY","43.052126","-77.09424","-5","1" +"14514","North Chili","NY","43.122386","-77.80347","-5","1" +"14515","North Greece","NY","43.257819","-77.735079","-5","1" +"14516","North Rose","NY","43.197378","-76.91443","-5","1" +"14517","Nunda","NY","42.589984","-77.9075","-5","1" +"14518","Oaks Corners","NY","42.931873","-77.011839","-5","1" +"14519","Ontario","NY","43.227921","-77.30097","-5","1" +"14520","Ontario Center","NY","43.348369","-77.045288","-5","1" +"14521","Ovid","NY","42.699637","-76.82964","-5","1" +"14522","Palmyra","NY","43.063858","-77.2223","-5","1" +"14525","Pavilion","NY","42.876222","-78.00056","-5","1" +"14526","Penfield","NY","43.145342","-77.45849","-5","1" +"14527","Penn Yan","NY","42.664079","-77.05664","-5","1" +"14529","Perkinsville","NY","42.535363","-77.628857","-5","1" +"14530","Perry","NY","42.724075","-78.00361","-5","1" +"14532","Phelps","NY","42.964535","-77.02486","-5","1" +"14533","Piffard","NY","42.846509","-77.88795","-5","1" +"14534","Pittsford","NY","43.071131","-77.51181","-5","1" +"14536","Portageville","NY","42.54523","-78.06929","-5","1" +"14537","Port Gibson","NY","43.033002","-77.157465","-5","1" +"14538","Pultneyville","NY","43.283582","-77.142027","-5","1" +"14539","Retsof","NY","42.834327","-77.877876","-5","1" +"14541","Romulus","NY","42.75147","-76.85353","-5","1" +"14542","Rose","NY","43.144795","-76.860779","-5","1" +"14543","Rush","NY","42.98723","-77.67433","-5","1" +"14544","Rushville","NY","42.75606","-77.24024","-5","1" +"14545","Scottsburg","NY","42.664904","-77.71275","-5","1" +"14546","Scottsville","NY","43.030313","-77.7836","-5","1" +"14547","Seneca Castle","NY","42.808127","-77.287611","-5","1" +"14548","Shortsville","NY","42.97342","-77.2434","-5","1" +"14549","Silver Lake","NY","42.692874","-78.022364","-5","1" +"14550","Silver Springs","NY","42.669499","-78.09375","-5","1" +"14551","Sodus","NY","43.226024","-77.03599","-5","1" +"14555","Sodus Point","NY","43.269332","-76.9876","-5","1" +"14556","Sonyea","NY","42.729839","-77.773919","-5","1" +"14557","South Byron","NY","43.041606","-78.057252","-5","1" +"14558","South Lima","NY","42.855409","-77.687643","-5","1" +"14559","Spencerport","NY","43.189862","-77.81809","-5","1" +"14560","Springwater","NY","42.674773","-77.58341","-5","1" +"14561","Stanley","NY","42.815171","-77.1321","-5","1" +"14563","Union Hill","NY","43.348369","-77.045288","-5","1" +"14564","Victor","NY","42.980323","-77.42022","-5","1" +"14568","Walworth","NY","43.134783","-77.28515","-5","1" +"14569","Warsaw","NY","42.739447","-78.15948","-5","1" +"14571","Waterport","NY","43.34653","-78.25412","-5","1" +"14572","Wayland","NY","42.569876","-77.57637","-5","1" +"14580","Webster","NY","43.220991","-77.45364","-5","1" +"14585","West Bloomfield","NY","42.901162","-77.54848","-5","1" +"14586","West Henrietta","NY","43.040271","-77.68215","-5","1" +"14588","Willard","NY","42.683451","-76.872442","-5","1" +"14589","Williamson","NY","43.24816","-77.18498","-5","1" +"14590","Wolcott","NY","43.234753","-76.8252","-5","1" +"14591","Wyoming","NY","42.829405","-78.08887","-5","1" +"14592","York","NY","42.875685","-77.883511","-5","1" +"14601","Rochester","NY","43.286024","-77.684264","-5","1" +"14602","Rochester","NY","43.286024","-77.684264","-5","1" +"14603","Rochester","NY","43.161613","-77.606774","-5","1" +"14604","Rochester","NY","43.156963","-77.60375","-5","1" +"14605","Rochester","NY","43.167563","-77.6012","-5","1" +"14606","Rochester","NY","43.168062","-77.68132","-5","1" +"14607","Rochester","NY","43.149863","-77.58962","-5","1" +"14608","Rochester","NY","43.155568","-77.62401","-5","1" +"14609","Rochester","NY","43.175113","-77.56272","-5","1" +"14610","Rochester","NY","43.142259","-77.54587","-5","1" +"14611","Rochester","NY","43.147563","-77.64162","-5","1" +"14612","Rochester","NY","43.256462","-77.66183","-5","1" +"14613","Rochester","NY","43.182163","-77.63794","-5","1" +"14614","Rochester","NY","43.155863","-77.61519","-5","1" +"14615","Rochester","NY","43.204695","-77.65194","-5","1" +"14616","Rochester","NY","43.232312","-77.64905","-5","1" +"14617","Rochester","NY","43.223213","-77.59721","-5","1" +"14618","Rochester","NY","43.116713","-77.55904","-5","1" +"14619","Rochester","NY","43.136363","-77.64685","-5","1" +"14620","Rochester","NY","43.132474","-77.60377","-5","1" +"14621","Rochester","NY","43.185163","-77.60368","-5","1" +"14622","Rochester","NY","43.21543","-77.55638","-5","1" +"14623","Rochester","NY","43.087613","-77.6352","-5","1" +"14624","Rochester","NY","43.127195","-77.72465","-5","1" +"14625","Rochester","NY","43.143663","-77.51114","-5","1" +"14626","Rochester","NY","43.214613","-77.70626","-5","1" +"14627","Rochester","NY","43.127513","-77.627674","-5","1" +"14638","Rochester","NY","43.286024","-77.684264","-5","1" +"14639","Rochester","NY","43.286024","-77.684264","-5","1" +"14642","Rochester","NY","43.286024","-77.684264","-5","1" +"14643","Rochester","NY","43.286024","-77.684264","-5","1" +"14644","Rochester","NY","43.286024","-77.684264","-5","1" +"14645","Rochester","NY","43.286024","-77.684264","-5","1" +"14646","Rochester","NY","43.286024","-77.684264","-5","1" +"14647","Rochester","NY","43.286024","-77.684264","-5","1" +"14649","Rochester","NY","43.286024","-77.684264","-5","1" +"14650","Rochester","NY","43.286024","-77.684264","-5","1" +"14651","Rochester","NY","43.286024","-77.684264","-5","1" +"14652","Rochester","NY","43.286024","-77.684264","-5","1" +"14653","Rochester","NY","43.286024","-77.684264","-5","1" +"14660","Rochester","NY","43.286024","-77.684264","-5","1" +"14664","Rochester","NY","43.286024","-77.684264","-5","1" +"14673","Rochester","NY","43.286024","-77.684264","-5","1" +"14683","Rochester","NY","43.286024","-77.684264","-5","1" +"14692","Rochester","NY","43.286024","-77.684264","-5","1" +"14694","Rochester","NY","43.286024","-77.684264","-5","1" +"14701","Jamestown","NY","42.09179","-79.24459","-5","1" +"14702","Jamestown","NY","42.081657","-79.294921","-5","1" +"14703","Jamestown","NY","42.342529","-79.41091","-5","1" +"14704","Jamestown","NY","42.342529","-79.41091","-5","1" +"14706","Allegany","NY","42.10143","-78.51587","-5","1" +"14707","Allentown","NY","42.073739","-78.059374","-5","1" +"14708","Alma","NY","42.016108","-78.05768","-5","1" +"14709","Angelica","NY","42.339925","-77.99413","-5","1" +"14710","Ashville","NY","42.098227","-79.40865","-5","1" +"14711","Belfast","NY","42.319654","-78.13384","-5","1" +"14712","Bemus Point","NY","42.170787","-79.37689","-5","1" +"14714","Black Creek","NY","42.279786","-78.23769","-5","1" +"14715","Bolivar","NY","42.076186","-78.14489","-5","1" +"14716","Brocton","NY","42.390802","-79.43873","-5","1" +"14717","Caneadea","NY","42.37074","-78.19335","-5","1" +"14718","Cassadaga","NY","42.343265","-79.30101","-5","1" +"14719","Cattaraugus","NY","42.329183","-78.87436","-5","1" +"14720","Celoron","NY","42.105907","-79.27912","-5","1" +"14721","Ceres","NY","41.999435","-78.27257","-5","1" +"14722","Chautauqua","NY","42.187468","-79.450523","-5","1" +"14723","Cherry Creek","NY","42.316386","-79.1364","-5","1" +"14724","Clymer","NY","42.066681","-79.66612","-5","1" +"14726","Conewango Valley","NY","42.251075","-79.03785","-5","1" +"14727","Cuba","NY","42.213216","-78.28649","-5","1" +"14728","Dewittville","NY","42.258967","-79.43348","-5","1" +"14729","East Otto","NY","42.382899","-78.72101","-5","1" +"14730","East Randolph","NY","42.174736","-78.94734","-5","1" +"14731","Ellicottville","NY","42.286037","-78.65425","-5","1" +"14732","Ellington","NY","42.229098","-79.11347","-5","1" +"14733","Falconer","NY","42.128469","-79.19126","-5","1" +"14735","Fillmore","NY","42.456047","-78.0973","-5","1" +"14736","Findley Lake","NY","42.130247","-79.74933","-5","1" +"14737","Franklinville","NY","42.335628","-78.43114","-5","1" +"14738","Frewsburg","NY","42.0385","-79.07622","-5","1" +"14739","Friendship","NY","42.192384","-78.14308","-5","1" +"14740","Gerry","NY","42.230692","-79.17185","-5","1" +"14741","Great Valley","NY","42.220602","-78.6337","-5","1" +"14742","Greenhurst","NY","42.120512","-79.30958","-5","1" +"14743","Hinsdale","NY","42.203691","-78.407","-5","1" +"14744","Houghton","NY","42.426885","-78.19509","-5","1" +"14745","Hume","NY","42.4777","-78.140343","-5","1" +"14747","Kennedy","NY","42.154315","-79.08905","-5","1" +"14748","Kill Buck","NY","42.130224","-78.64583","-5","1" +"14750","Lakewood","NY","42.098657","-79.32439","-5","1" +"14751","Leon","NY","42.298328","-79.006231","-5","1" +"14752","Lily Dale","NY","42.352416","-79.323502","-5","1" +"14753","Limestone","NY","42.035792","-78.61789","-5","1" +"14754","Little Genesee","NY","42.020028","-78.20368","-5","1" +"14755","Little Valley","NY","42.249436","-78.80282","-5","1" +"14756","Maple Springs","NY","42.19815","-79.417353","-5","1" +"14757","Mayville","NY","42.226149","-79.48396","-5","1" +"14758","Niobe","NY","42.342529","-79.41091","-5","1" +"14760","Olean","NY","42.076574","-78.42744","-5","1" +"14766","Otto","NY","42.357543","-78.807283","-5","1" +"14767","Panama","NY","42.043339","-79.51361","-5","1" +"14769","Portland","NY","42.372864","-79.47523","-5","1" +"14770","Portville","NY","42.047063","-78.30659","-5","1" +"14771","Canadice","NY","42.737181","-77.519784","-5","1" +"14772","Randolph","NY","42.160787","-78.95167","-5","1" +"14774","Richburg","NY","42.114385","-78.168055","-5","1" +"14775","Ripley","NY","42.254906","-79.69185","-5","1" +"14776","Rossburg","NY","42.260012","-78.016139","-5","1" +"14777","Rushford","NY","42.385744","-78.23754","-5","1" +"14778","Saint Bonaventure","NY","42.270112","-78.684684","-5","1" +"14779","Salamanca","NY","42.168508","-78.7297","-5","1" +"14781","Sherman","NY","42.160982","-79.59738","-5","1" +"14782","Sinclairville","NY","42.265234","-79.26035","-5","1" +"14783","Steamburg","NY","42.100539","-78.87967","-5","1" +"14784","Stockton","NY","42.326844","-79.3902","-5","1" +"14785","Stow","NY","42.155693","-79.412233","-5","1" +"14786","West Clarksville","NY","42.12267","-78.221332","-5","1" +"14787","Westfield","NY","42.327029","-79.57301","-5","1" +"14788","Westons Mills","NY","42.062125","-78.377974","-5","1" +"14801","Addison","NY","42.104389","-77.28857","-5","1" +"14802","Alfred","NY","42.255694","-77.78904","-5","1" +"14803","Alfred Station","NY","42.258793","-77.77793","-5","1" +"14804","Almond","NY","42.321173","-77.82312","-5","1" +"14805","Alpine","NY","42.366682","-76.72562","-5","1" +"14806","Andover","NY","42.157534","-77.79265","-5","1" +"14807","Arkport","NY","42.410387","-77.71394","-5","1" +"14808","Atlanta","NY","42.560553","-77.47257","-5","1" +"14809","Avoca","NY","42.419988","-77.43392","-5","1" +"14810","Bath","NY","42.351281","-77.3361","-5","1" +"14812","Beaver Dams","NY","42.286649","-76.9766","-5","1" +"14813","Belmont","NY","42.238994","-78.01907","-5","1" +"14814","Big Flats","NY","42.150834","-76.94805","-5","1" +"14815","Bradford","NY","42.383304","-77.08762","-5","1" +"14816","Breesport","NY","42.177039","-76.73437","-5","1" +"14817","Brooktondale","NY","42.368","-76.35407","-5","1" +"14818","Burdett","NY","42.444243","-76.83274","-5","1" +"14819","Cameron","NY","42.20928","-77.42796","-5","1" +"14820","Cameron Mills","NY","42.192615","-77.35979","-5","1" +"14821","Campbell","NY","42.235058","-77.20491","-5","1" +"14822","Canaseraga","NY","42.442261","-77.84125","-5","1" +"14823","Canisteo","NY","42.250187","-77.58406","-5","1" +"14824","Cayuta","NY","42.265328","-76.71263","-5","1" +"14825","Chemung","NY","42.043018","-76.62459","-5","1" +"14826","Cohocton","NY","42.484672","-77.49846","-5","1" +"14827","Coopers Plains","NY","42.178527","-77.141357","-5","1" +"14830","Corning","NY","42.140881","-77.04793","-5","1" +"14831","Corning","NY","42.145265","-77.56683","-5","1" +"14836","Dalton","NY","42.523195","-77.93008","-5","1" +"14837","Dundee","NY","42.502293","-76.9997","-5","1" +"14838","Erin","NY","42.177019","-76.66687","-5","1" +"14839","Greenwood","NY","42.129806","-77.63705","-5","1" +"14840","Hammondsport","NY","42.453547","-77.18019","-5","1" +"14841","Hector","NY","42.521501","-76.86246","-5","1" +"14842","Himrod","NY","42.595985","-76.94713","-5","1" +"14843","Hornell","NY","42.331062","-77.65536","-5","1" +"14844","Horseheads","NY","42.160717","-76.878456","-5","1" +"14845","Horseheads","NY","42.181584","-76.83639","-5","1" +"14846","Hunt","NY","42.542056","-77.99501","-5","1" +"14847","Interlaken","NY","42.614518","-76.72405","-5","1" +"14850","Ithaca","NY","42.449454","-76.49685","-5","1" +"14851","Ithaca","NY","42.460721","-76.505435","-5","1" +"14852","Ithaca","NY","42.445074","-76.467233","-5","1" +"14853","Ithaca","NY","42.447373","-76.483703","-5","1" +"14854","Jacksonville","NY","42.50632","-76.608222","-5","1" +"14855","Jasper","NY","42.135945","-77.5078","-5","1" +"14856","Kanona","NY","42.374218","-77.364812","-5","1" +"14857","Lakemont","NY","42.515233","-76.92063","-5","1" +"14858","Lindley","NY","42.03128","-77.13413","-5","1" +"14859","Lockwood","NY","42.116615","-76.54806","-5","1" +"14860","Lodi","NY","42.590355","-76.84745","-5","1" +"14861","Lowman","NY","42.074742","-76.69317","-5","1" +"14863","Mecklenburg","NY","42.451569","-76.706717","-5","1" +"14864","Millport","NY","42.271938","-76.83926","-5","1" +"14865","Montour Falls","NY","42.352725","-76.84258","-5","1" +"14867","Newfield","NY","42.354851","-76.60338","-5","1" +"14869","Odessa","NY","42.341316","-76.77926","-5","1" +"14870","Painted Post","NY","42.173481","-77.11844","-5","1" +"14871","Pine City","NY","42.048032","-76.90521","-5","1" +"14872","Pine Valley","NY","42.218224","-76.84694","-5","1" +"14873","Prattsburgh","NY","42.525335","-77.29673","-5","1" +"14874","Pulteney","NY","42.527075","-77.16963","-5","1" +"14876","Reading Center","NY","42.429721","-76.925846","-5","1" +"14877","Rexville","NY","42.060154","-77.68455","-5","1" +"14878","Rock Stream","NY","42.451153","-76.93132","-5","1" +"14879","Savona","NY","42.330602","-77.19305","-5","1" +"14880","Scio","NY","42.170951","-77.97556","-5","1" +"14881","Slaterville Springs","NY","42.39534","-76.35211","-5","1" +"14882","Lansing","NY","42.564191","-76.54077","-5","1" +"14883","Spencer","NY","42.234865","-76.48643","-5","1" +"14884","Swain","NY","42.473556","-77.89514","-5","1" +"14885","Troupsburg","NY","42.041973","-77.5632","-5","1" +"14886","Trumansburg","NY","42.51432","-76.6689","-5","1" +"14887","Tyrone","NY","42.399371","-77.026768","-5","1" +"14889","Van Etten","NY","42.212809","-76.58618","-5","1" +"14891","Watkins Glen","NY","42.374828","-76.91606","-5","1" +"14892","Waverly","NY","42.023442","-76.53404","-5","1" +"14893","Wayne","NY","42.474143","-77.097713","-5","1" +"14894","Wellsburg","NY","42.01359","-76.75307","-5","1" +"14895","Wellsville","NY","42.094855","-77.94686","-5","1" +"14897","Whitesville","NY","42.034218","-77.79269","-5","1" +"14898","Woodhull","NY","42.065376","-77.42392","-5","1" +"14901","Elmira","NY","42.091924","-76.79217","-5","1" +"14902","Elmira","NY","42.147285","-76.750888","-5","1" +"14903","Elmira","NY","42.129274","-76.84497","-5","1" +"14904","Elmira","NY","42.072024","-76.80393","-5","1" +"14905","Elmira","NY","42.087824","-76.83686","-5","1" +"14925","Elmira","NY","42.147285","-76.750888","-5","1" +"15001","Aliquippa","PA","40.603966","-80.28776","-5","1" +"15003","Ambridge","PA","40.593917","-80.22181","-5","1" +"15004","Atlasburg","PA","40.341487","-80.38408","-5","1" +"15005","Baden","PA","40.641066","-80.20599","-5","1" +"15006","Bairdford","PA","40.630894","-79.88057","-5","1" +"15007","Bakerstown","PA","40.652311","-79.93303","-5","1" +"15009","Beaver","PA","40.695281","-80.3299","-5","1" +"15010","Beaver Falls","PA","40.763899","-80.33572","-5","1" +"15012","Belle Vernon","PA","40.140248","-79.84251","-5","1" +"15014","Brackenridge","PA","40.608403","-79.74234","-5","1" +"15015","Bradfordwoods","PA","40.635147","-80.08369","-5","1" +"15017","Bridgeville","PA","40.351802","-80.11534","-5","1" +"15018","Buena Vista","PA","40.266358","-79.79325","-5","1" +"15019","Bulger","PA","40.417545","-80.33625","-5","1" +"15020","Bunola","PA","40.238657","-79.94493","-5","1" +"15021","Burgettstown","PA","40.383884","-80.41364","-5","1" +"15022","Charleroi","PA","40.136537","-79.91321","-5","1" +"15024","Cheswick","PA","40.569723","-79.83242","-5","1" +"15025","Clairton","PA","40.292974","-79.90179","-5","1" +"15026","Clinton","PA","40.508376","-80.35953","-5","1" +"15027","Conway","PA","40.663816","-80.23494","-5","1" +"15028","Coulters","PA","40.297336","-79.80192","-5","1" +"15030","Creighton","PA","40.583218","-79.77947","-5","1" +"15031","Cuddy","PA","40.347826","-80.1656","-5","1" +"15032","Curtisville","PA","40.434436","-80.024817","-5","1" +"15033","Donora","PA","40.176375","-79.86138","-5","1" +"15034","Dravosburg","PA","40.350519","-79.89008","-5","1" +"15035","East McKeesport","PA","40.384223","-79.80792","-5","1" +"15036","Eldersville","PA","40.214896","-80.179139","-5","1" +"15037","Elizabeth","PA","40.258438","-79.85946","-5","1" +"15038","Elrama","PA","40.251586","-79.92474","-5","1" +"15042","Freedom","PA","40.682566","-80.23208","-5","1" +"15043","Georgetown","PA","40.582316","-80.50182","-5","1" +"15044","Gibsonia","PA","40.631011","-79.95766","-5","1" +"15045","Glassport","PA","40.326919","-79.88869","-5","1" +"15046","Crescent","PA","40.558477","-80.2261","-5","1" +"15047","Greenock","PA","40.434436","-80.024817","-5","1" +"15049","Harwick","PA","40.555627","-79.8064","-5","1" +"15050","Hookstown","PA","40.557889","-80.44529","-5","1" +"15051","Indianola","PA","40.565907","-79.85848","-5","1" +"15052","Industry","PA","40.665001","-80.42534","-5","1" +"15053","Joffre","PA","40.379884","-80.36087","-5","1" +"15054","Langeloth","PA","40.363006","-80.40861","-5","1" +"15055","Lawrence","PA","40.304019","-80.12246","-5","1" +"15056","Leetsdale","PA","40.565367","-80.20977","-5","1" +"15057","McDonald","PA","40.357286","-80.23629","-5","1" +"15059","Midland","PA","40.649081","-80.47218","-5","1" +"15060","Midway","PA","40.368154","-80.2924","-5","1" +"15061","Monaca","PA","40.677132","-80.28881","-5","1" +"15062","Monessen","PA","40.154271","-79.88277","-5","1" +"15063","Monongahela","PA","40.196694","-79.92642","-5","1" +"15064","Morgan","PA","40.352897","-80.14529","-5","1" +"15065","Natrona Heights","PA","40.628522","-79.72566","-5","1" +"15066","New Brighton","PA","40.73998","-80.29472","-5","1" +"15067","New Eagle","PA","40.207526","-79.95304","-5","1" +"15068","New Kensington","PA","40.571108","-79.74226","-5","1" +"15069","New Kensington","PA","40.360223","-79.439801","-5","1" +"15071","Oakdale","PA","40.420319","-80.18692","-5","1" +"15072","Pricedale","PA","40.13848","-79.85575","-5","1" +"15074","Rochester","PA","40.708166","-80.2735","-5","1" +"15075","Rural Ridge","PA","40.586408","-79.82769","-5","1" +"15076","Russellton","PA","40.61517","-79.83394","-5","1" +"15077","Shippingport","PA","40.602535","-80.386344","-5","1" +"15078","Slovan","PA","40.357926","-80.38943","-5","1" +"15081","South Heights","PA","40.574634","-80.23609","-5","1" +"15082","Sturgeon","PA","40.378997","-80.21184","-5","1" +"15083","Sutersville","PA","40.237582","-79.80038","-5","1" +"15084","Tarentum","PA","40.61357","-79.78095","-5","1" +"15085","Trafford","PA","40.386968","-79.74467","-5","1" +"15086","Warrendale","PA","40.661431","-80.09304","-5","1" +"15087","Webster","PA","40.186047","-79.84994","-5","1" +"15088","West Elizabeth","PA","40.272901","-79.89491","-5","1" +"15089","West Newton","PA","40.211895","-79.75483","-5","1" +"15090","Wexford","PA","40.617016","-80.05916","-5","1" +"15091","Wildwood","PA","40.434436","-80.024817","-5","1" +"15095","Warrendale","PA","40.434436","-80.024817","-5","1" +"15096","Warrendale","PA","40.434436","-80.024817","-5","1" +"15101","Allison Park","PA","40.570915","-79.96033","-5","1" +"15102","Bethel Park","PA","40.324535","-80.03864","-5","1" +"15104","Braddock","PA","40.404743","-79.86439","-5","1" +"15106","Carnegie","PA","40.404119","-80.09014","-5","1" +"15108","Coraopolis","PA","40.500665","-80.18464","-5","1" +"15110","Duquesne","PA","40.369969","-79.85095","-5","1" +"15112","East Pittsburgh","PA","40.399436","-79.83794","-5","1" +"15116","Glenshaw","PA","40.533806","-79.96303","-5","1" +"15120","Homestead","PA","40.395336","-79.90635","-5","1" +"15122","West Mifflin","PA","40.366177","-79.89418","-5","1" +"15123","West Mifflin","PA","40.434436","-80.024817","-5","1" +"15126","Imperial","PA","40.454423","-80.26324","-5","1" +"15127","Ingomar","PA","40.434436","-80.024817","-5","1" +"15129","Library","PA","40.289752","-80.00756","-5","1" +"15130","McKeesport","PA","40.434436","-80.024817","-5","1" +"15131","McKeesport","PA","40.341469","-79.81105","-5","1" +"15132","McKeesport","PA","40.341919","-79.84791","-5","1" +"15133","McKeesport","PA","40.332502","-79.8646","-5","1" +"15134","McKeesport","PA","40.434436","-80.024817","-5","1" +"15135","McKeesport","PA","40.306819","-79.8145","-5","1" +"15136","McKees Rocks","PA","40.471618","-80.07695","-5","1" +"15137","North Versailles","PA","40.380219","-79.81017","-5","1" +"15139","Oakmont","PA","40.519518","-79.83762","-5","1" +"15140","Pitcairn","PA","40.405768","-79.77643","-5","1" +"15142","Presto","PA","40.379549","-80.12451","-5","1" +"15143","Sewickley","PA","40.561091","-80.15554","-5","1" +"15144","Springdale","PA","40.543053","-79.78223","-5","1" +"15145","Turtle Creek","PA","40.408218","-79.82339","-5","1" +"15146","Monroeville","PA","40.431034","-79.76526","-5","1" +"15147","Verona","PA","40.498218","-79.83426","-5","1" +"15148","Wilmerding","PA","40.394268","-79.80286","-5","1" +"15163","North Apollo","PA","40.588257","-79.554054","-5","1" +"15189","Sewickley","PA","40.434436","-80.024817","-5","1" +"15201","Pittsburgh","PA","40.471468","-79.95726","-5","1" +"15202","Pittsburgh","PA","40.502918","-80.0704","-5","1" +"15203","Pittsburgh","PA","40.426211","-79.97826","-5","1" +"15204","Pittsburgh","PA","40.455118","-80.06008","-5","1" +"15205","Pittsburgh","PA","40.436618","-80.07289","-5","1" +"15206","Pittsburgh","PA","40.468968","-79.91863","-5","1" +"15207","Pittsburgh","PA","40.399355","-79.93414","-5","1" +"15208","Pittsburgh","PA","40.455168","-79.89709","-5","1" +"15209","Pittsburgh","PA","40.492618","-79.97458","-5","1" +"15210","Pittsburgh","PA","40.409219","-79.98948","-5","1" +"15211","Pittsburgh","PA","40.428369","-80.01269","-5","1" +"15212","Pittsburgh","PA","40.460669","-80.01144","-5","1" +"15213","Pittsburgh","PA","40.443269","-79.95487","-5","1" +"15214","Pittsburgh","PA","40.479469","-80.0115","-5","1" +"15215","Pittsburgh","PA","40.497701","-79.9157","-5","1" +"15216","Pittsburgh","PA","40.400319","-80.03566","-5","1" +"15217","Pittsburgh","PA","40.430919","-79.92569","-5","1" +"15218","Pittsburgh","PA","40.424336","-79.88725","-5","1" +"15219","Pittsburgh","PA","40.443819","-79.98067","-5","1" +"15220","Pittsburgh","PA","40.430822","-80.04453","-5","1" +"15221","Pittsburgh","PA","40.438035","-79.87191","-5","1" +"15222","Pittsburgh","PA","40.447036","-79.99313","-5","1" +"15223","Pittsburgh","PA","40.503768","-79.95164","-5","1" +"15224","Pittsburgh","PA","40.463463","-79.94612","-5","1" +"15225","Pittsburgh","PA","40.513778","-80.13571","-5","1" +"15226","Pittsburgh","PA","40.394002","-80.01655","-5","1" +"15227","Pittsburgh","PA","40.377869","-79.97516","-5","1" +"15228","Pittsburgh","PA","40.372802","-80.0448","-5","1" +"15229","Pittsburgh","PA","40.518368","-80.03364","-5","1" +"15230","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15231","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15232","Pittsburgh","PA","40.454018","-79.9325","-5","1" +"15233","Pittsburgh","PA","40.455919","-80.02604","-5","1" +"15234","Pittsburgh","PA","40.369619","-80.01831","-5","1" +"15235","Pittsburgh","PA","40.459518","-79.83277","-5","1" +"15236","Pittsburgh","PA","40.342869","-79.97929","-5","1" +"15237","Pittsburgh","PA","40.552768","-80.03227","-5","1" +"15238","Pittsburgh","PA","40.518701","-79.86744","-5","1" +"15239","Pittsburgh","PA","40.482655","-79.74278","-5","1" +"15240","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15241","Pittsburgh","PA","40.329619","-80.07364","-5","1" +"15242","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15243","Pittsburgh","PA","40.372669","-80.0712","-5","1" +"15244","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15246","Pittsburgh","PA","40.476524","-79.899044","-5","1" +"15250","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15251","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15252","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15253","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15254","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15255","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15257","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15258","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15259","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15260","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15261","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15262","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15263","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15264","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15265","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15266","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15267","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15268","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15270","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15272","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15274","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15275","Pittsburgh","PA","40.44952","-80.179475","-5","1" +"15276","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15277","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15278","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15279","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15281","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15282","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15283","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15285","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15286","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15290","Pittsburgh","PA","40.434436","-80.024817","-5","1" +"15298","Pittsburgh","PA","40.420019","-79.939473","-5","1" +"15301","Washington","PA","40.170663","-80.25185","-5","1" +"15310","Aleppo","PA","39.792529","-80.48584","-5","1" +"15311","Amity","PA","40.042851","-80.18827","-5","1" +"15312","Avella","PA","40.264217","-80.44199","-5","1" +"15313","Beallsville","PA","40.065384","-80.02313","-5","1" +"15314","Bentleyville","PA","40.127951","-80.01226","-5","1" +"15315","Bobtown","PA","39.760868","-79.98315","-5","1" +"15316","Brave","PA","39.743424","-80.26376","-5","1" +"15317","Canonsburg","PA","40.26819","-80.16222","-5","1" +"15320","Carmichaels","PA","39.883336","-79.98393","-5","1" +"15321","Cecil","PA","40.322872","-80.18745","-5","1" +"15322","Clarksville","PA","39.976531","-80.04218","-5","1" +"15323","Claysville","PA","40.114204","-80.40715","-5","1" +"15324","Cokeburg","PA","40.10012","-80.06363","-5","1" +"15325","Crucible","PA","39.94821","-79.96653","-5","1" +"15327","Dilliner","PA","39.754889","-79.95226","-5","1" +"15329","Prosperity","PA","40.030707","-80.27353","-5","1" +"15330","Eighty Four","PA","40.178679","-80.10014","-5","1" +"15331","Ellsworth","PA","40.105887","-80.02045","-5","1" +"15332","Finleyville","PA","40.250299","-79.99436","-5","1" +"15333","Fredericktown","PA","40.010135","-80.00537","-5","1" +"15334","Garards Fort","PA","39.809756","-79.9969","-5","1" +"15336","Gastonville","PA","40.260141","-79.992678","-5","1" +"15337","Graysville","PA","39.943552","-80.37399","-5","1" +"15338","Greensboro","PA","39.809161","-79.93793","-5","1" +"15339","Hendersonville","PA","40.301838","-80.15431","-5","1" +"15340","Hickory","PA","40.290375","-80.31845","-5","1" +"15341","Holbrook","PA","39.82644","-80.35051","-5","1" +"15342","Houston","PA","40.241854","-80.21445","-5","1" +"15344","Jefferson","PA","39.92757","-80.05491","-5","1" +"15345","Marianna","PA","40.019657","-80.10273","-5","1" +"15346","Mather","PA","39.935562","-80.07248","-5","1" +"15347","Meadow Lands","PA","40.214331","-80.22872","-5","1" +"15348","Millsboro","PA","39.988369","-79.99484","-5","1" +"15349","Mount Morris","PA","39.741865","-80.07999","-5","1" +"15350","Muse","PA","40.292528","-80.20022","-5","1" +"15351","Nemacolin","PA","39.877676","-79.92585","-5","1" +"15352","New Freeport","PA","39.748534","-80.39778","-5","1" +"15353","Nineveh","PA","39.961767","-80.3069","-5","1" +"15354","Pine Bank","PA","39.870635","-80.211335","-5","1" +"15355","Centerville","PA","40.055216","-80.009135","-5","1" +"15357","Rices Landing","PA","39.942802","-79.99612","-5","1" +"15358","Richeyville","PA","40.05604","-79.9981","-5","1" +"15359","Rogersville","PA","39.880073","-80.27332","-5","1" +"15360","Scenery Hill","PA","40.08708","-80.07316","-5","1" +"15361","Southview","PA","40.32826","-80.2596","-5","1" +"15362","Spraggs","PA","39.748302","-80.21327","-5","1" +"15363","Strabane","PA","40.251054","-80.19917","-5","1" +"15364","Sycamore","PA","39.956204","-80.27779","-5","1" +"15365","Taylorstown","PA","40.16113","-80.378093","-5","1" +"15366","Van Voorhis","PA","40.110068","-80.031787","-5","1" +"15367","Venetia","PA","40.261394","-80.05254","-5","1" +"15368","Vestaburg","PA","40.015501","-79.99019","-5","1" +"15370","Waynesburg","PA","39.892235","-80.17983","-5","1" +"15376","West Alexander","PA","40.101254","-80.50229","-5","1" +"15377","West Finley","PA","39.976027","-80.44474","-5","1" +"15378","Westland","PA","40.27758","-80.27408","-5","1" +"15379","West Middletown","PA","40.240402","-80.42414","-5","1" +"15380","Wind Ridge","PA","39.874975","-80.46845","-5","1" +"15401","Uniontown","PA","39.89822","-79.7311","-5","1" +"15410","Adah","PA","39.918848","-79.90832","-5","1" +"15411","Addison","PA","39.751296","-79.35113","-5","1" +"15412","Allenport","PA","40.100345","-79.846","-5","1" +"15413","Allison","PA","39.987842","-79.86681","-5","1" +"15415","Brier Hill","PA","39.980787","-79.850366","-5","1" +"15416","Brownfield","PA","39.932084","-79.65217","-5","1" +"15417","Brownsville","PA","40.01933","-79.89869","-5","1" +"15419","California","PA","40.063977","-79.89261","-5","1" +"15420","Cardale","PA","39.958894","-79.86798","-5","1" +"15421","Chalk Hill","PA","39.845088","-79.599126","-5","1" +"15422","Chestnut Ridge","PA","39.979032","-79.81957","-5","1" +"15423","Coal Center","PA","40.082073","-79.91911","-5","1" +"15424","Confluence","PA","39.817148","-79.34803","-5","1" +"15425","Connellsville","PA","40.024138","-79.58414","-5","1" +"15427","Daisytown","PA","40.061044","-79.97336","-5","1" +"15428","Dawson","PA","40.060912","-79.65886","-5","1" +"15429","Denbo","PA","40.007062","-79.9339","-5","1" +"15430","Dickerson Run","PA","40.040653","-79.66089","-5","1" +"15431","Dunbar","PA","39.968368","-79.61815","-5","1" +"15432","Dunlevy","PA","40.117368","-79.86413","-5","1" +"15433","East Millsboro","PA","39.968503","-79.95183","-5","1" +"15434","Elco","PA","40.079185","-79.87475","-5","1" +"15435","Fairbank","PA","39.950123","-79.858471","-5","1" +"15436","Fairchance","PA","39.821336","-79.75186","-5","1" +"15437","Farmington","PA","39.793095","-79.59465","-5","1" +"15438","Fayette City","PA","40.093982","-79.83787","-5","1" +"15439","Gans","PA","39.771324","-79.635842","-5","1" +"15440","Gibbon Glade","PA","39.72974","-79.59124","-5","1" +"15442","Grindstone","PA","40.013397","-79.83113","-5","1" +"15443","Hibbs","PA","39.927312","-79.88768","-5","1" +"15444","Hiller","PA","40.011146","-79.90541","-5","1" +"15445","Hopwood","PA","39.876251","-79.69296","-5","1" +"15446","Indian Head","PA","40.028267","-79.39475","-5","1" +"15447","Isabella","PA","39.945514","-79.93869","-5","1" +"15448","Jacobs Creek","PA","40.134792","-79.74272","-5","1" +"15449","Keisterville","PA","39.963622","-79.785349","-5","1" +"15450","La Belle","PA","40.00666","-79.96943","-5","1" +"15451","Lake Lynn","PA","39.737104","-79.83613","-5","1" +"15454","Leckrone","PA","39.863666","-79.86378","-5","1" +"15455","Leisenring","PA","39.998299","-79.64333","-5","1" +"15456","Lemont Furnace","PA","39.923495","-79.66014","-5","1" +"15458","McClellandtown","PA","39.879185","-79.8618","-5","1" +"15459","Markleysburg","PA","39.757928","-79.46514","-5","1" +"15460","Martin","PA","39.804674","-79.9102","-5","1" +"15461","Masontown","PA","39.847077","-79.90196","-5","1" +"15462","Melcroft","PA","40.061931","-79.38538","-5","1" +"15463","Merrittstown","PA","39.882521","-79.833585","-5","1" +"15464","Mill Run","PA","39.926509","-79.43272","-5","1" +"15465","Mount Braddock","PA","39.932084","-79.65217","-5","1" +"15466","Newell","PA","40.075617","-79.89611","-5","1" +"15467","New Geneva","PA","39.932084","-79.65217","-5","1" +"15468","New Salem","PA","39.936535","-79.84669","-5","1" +"15469","Normalville","PA","40.006624","-79.41616","-5","1" +"15470","Ohiopyle","PA","39.854144","-79.52989","-5","1" +"15471","German","PA","39.9783","-79.856751","-5","1" +"15472","Oliver","PA","39.916995","-79.71589","-5","1" +"15473","Perryopolis","PA","40.080727","-79.75697","-5","1" +"15474","Point Marion","PA","39.74419","-79.90126","-5","1" +"15475","Republic","PA","39.964486","-79.87846","-5","1" +"15476","Ronco","PA","39.869675","-79.922","-5","1" +"15477","Roscoe","PA","40.079169","-79.86448","-5","1" +"15478","Smithfield","PA","39.791113","-79.81247","-5","1" +"15479","Smithton","PA","40.148576","-79.72573","-5","1" +"15480","Smock","PA","39.987054","-79.77879","-5","1" +"15482","Star Junction","PA","40.062849","-79.76338","-5","1" +"15483","Stockdale","PA","40.081257","-79.85174","-5","1" +"15484","Uledi","PA","39.89615","-79.78956","-5","1" +"15485","Ursina","PA","39.816608","-79.33009","-5","1" +"15486","Vanderbilt","PA","40.034355","-79.6819","-5","1" +"15488","Waltersburg","PA","39.976316","-79.768901","-5","1" +"15489","West Leisenring","PA","39.955933","-79.69946","-5","1" +"15490","White","PA","40.077289","-79.42598","-5","1" +"15492","Wickhaven","PA","40.120876","-79.77089","-5","1" +"15493","Perry","PA","40.091655","-79.718512","-5","1" +"15501","Somerset","PA","40.02847","-79.1105","-5","1" +"15502","Hidden Valley","PA","40.046023","-79.258458","-5","1" +"15510","Somerset","PA","39.963306","-79.04089","-5","1" +"15520","Acosta","PA","40.112153","-79.06772","-5","1" +"15521","Alum Bank","PA","40.188405","-78.63027","-5","1" +"15522","Bedford","PA","39.998096","-78.52204","-5","1" +"15530","Berlin","PA","39.937504","-78.94183","-5","1" +"15531","Boswell","PA","40.173782","-79.0629","-5","1" +"15532","Boynton","PA","39.766617","-79.06594","-5","1" +"15533","Breezewood","PA","39.989224","-78.24245","-5","1" +"15534","Buffalo Mills","PA","39.904209","-78.70159","-5","1" +"15535","Clearville","PA","39.825578","-78.4423","-5","1" +"15536","Crystal Spring","PA","39.951222","-78.20512","-5","1" +"15537","Everett","PA","40.003997","-78.36456","-5","1" +"15538","Fairhope","PA","39.863486","-78.84235","-5","1" +"15539","Fishertown","PA","40.128089","-78.5839","-5","1" +"15540","Fort Hill","PA","39.798343","-79.22064","-5","1" +"15541","Friedens","PA","40.053525","-78.99023","-5","1" +"15542","Garrett","PA","39.863543","-79.06935","-5","1" +"15544","Gray","PA","40.134685","-79.09236","-5","1" +"15545","Hyndman","PA","39.776675","-78.76286","-5","1" +"15546","Jenners","PA","40.14376","-79.04944","-5","1" +"15547","Jennerstown","PA","40.159054","-79.06371","-5","1" +"15548","Kantner","PA","40.101106","-78.938653","-5","1" +"15549","Listie","PA","40.020764","-79.012306","-5","1" +"15550","Manns Choice","PA","40.003724","-78.63685","-5","1" +"15551","Markleton","PA","39.886916","-79.25388","-5","1" +"15552","Meyersdale","PA","39.805436","-79.00013","-5","1" +"15553","New Baltimore","PA","39.983808","-78.77215","-5","1" +"15554","New Paris","PA","40.121392","-78.5877","-5","1" +"15555","Quecreek","PA","40.091429","-79.087198","-5","1" +"15557","Rockwood","PA","39.935728","-79.22093","-5","1" +"15558","Salisbury","PA","39.742872","-79.0868","-5","1" +"15559","Schellsburg","PA","40.058077","-78.66391","-5","1" +"15560","Shanksville","PA","40.017182","-78.90589","-5","1" +"15561","Sipesville","PA","40.096406","-79.090158","-5","1" +"15562","Springs","PA","39.746182","-79.13245","-5","1" +"15563","Stoystown","PA","40.099003","-78.94801","-5","1" +"15564","Wellersburg","PA","39.729896","-78.844105","-5","1" +"15565","West Salisbury","PA","40.003476","-79.037983","-5","1" +"15601","Greensburg","PA","40.298765","-79.54126","-5","1" +"15605","Greensburg","PA","40.360223","-79.439801","-5","1" +"15606","Greensburg","PA","40.360223","-79.439801","-5","1" +"15610","Acme","PA","40.138405","-79.42425","-5","1" +"15611","Adamsburg","PA","40.3044","-79.65604","-5","1" +"15612","Alverton","PA","40.136883","-79.59033","-5","1" +"15613","Apollo","PA","40.560849","-79.57544","-5","1" +"15615","Ardara","PA","40.358962","-79.73879","-5","1" +"15616","Armbrust","PA","40.360223","-79.439801","-5","1" +"15617","Arona","PA","40.26974","-79.66042","-5","1" +"15618","Avonmore","PA","40.528929","-79.48116","-5","1" +"15619","Bovard","PA","40.360223","-79.439801","-5","1" +"15620","Bradenville","PA","40.321426","-79.34079","-5","1" +"15621","Calumet","PA","40.360223","-79.439801","-5","1" +"15622","Champion","PA","40.038201","-79.30426","-5","1" +"15623","Claridge","PA","40.366748","-79.61645","-5","1" +"15624","Crabtree","PA","40.362739","-79.46886","-5","1" +"15625","Darragh","PA","40.267005","-79.67427","-5","1" +"15626","Delmont","PA","40.409992","-79.57266","-5","1" +"15627","Derry","PA","40.339547","-79.30172","-5","1" +"15628","Donegal","PA","40.108585","-79.38106","-5","1" +"15629","East Vandergrift","PA","40.598412","-79.56196","-5","1" +"15630","Edmon","PA","40.847829","-79.451575","-5","1" +"15631","Everson","PA","40.090582","-79.58704","-5","1" +"15632","Export","PA","40.430632","-79.61837","-5","1" +"15633","Forbes Road","PA","40.355049","-79.52297","-5","1" +"15634","Grapeville","PA","40.324588","-79.60693","-5","1" +"15635","Hannastown","PA","40.351619","-79.49612","-5","1" +"15636","Harrison City","PA","40.359353","-79.65576","-5","1" +"15637","Herminie","PA","40.261878","-79.71321","-5","1" +"15638","Hostetter","PA","40.26106","-79.14313","-5","1" +"15639","Hunker","PA","40.201398","-79.60071","-5","1" +"15640","Hutchinson","PA","40.22615","-79.73165","-5","1" +"15641","Hyde Park","PA","40.631729","-79.58961","-5","1" +"15642","Irwin","PA","40.325902","-79.71324","-5","1" +"15643","Hempfield","PA","40.322965","-79.653388","-5","1" +"15644","Jeannette","PA","40.329238","-79.61469","-5","1" +"15646","Jones Mills","PA","40.087243","-79.32665","-5","1" +"15647","Larimer","PA","40.344319","-79.72574","-5","1" +"15650","Latrobe","PA","40.299646","-79.38845","-5","1" +"15655","Laughlintown","PA","40.202095","-79.19266","-5","1" +"15656","Leechburg","PA","40.63071","-79.61381","-5","1" +"15658","Ligonier","PA","40.247351","-79.22882","-5","1" +"15660","Lowber","PA","40.245378","-79.77196","-5","1" +"15661","Loyalhanna","PA","40.319956","-79.35901","-5","1" +"15662","Luxor","PA","40.333489","-79.47547","-5","1" +"15663","Madison","PA","40.244753","-79.67839","-5","1" +"15664","Mammoth","PA","40.310772","-79.617187","-5","1" +"15665","Manor","PA","40.333339","-79.66646","-5","1" +"15666","Mount Pleasant","PA","40.150143","-79.52492","-5","1" +"15668","Murrysville","PA","40.451664","-79.67948","-5","1" +"15670","New Alexandria","PA","40.408295","-79.43967","-5","1" +"15671","New Derry","PA","40.356055","-79.3194","-5","1" +"15672","New Stanton","PA","40.231003","-79.61611","-5","1" +"15673","North Apollo","PA","40.593301","-79.55779","-5","1" +"15674","Norvelt","PA","40.2071","-79.49619","-5","1" +"15675","Penn","PA","40.330326","-79.64061","-5","1" +"15676","Pleasant Unity","PA","40.243195","-79.45737","-5","1" +"15677","Rector","PA","40.175368","-79.23651","-5","1" +"15678","Rillton","PA","40.287869","-79.72904","-5","1" +"15679","Ruffs Dale","PA","40.17462","-79.63584","-5","1" +"15680","Salina","PA","40.521015","-79.49522","-5","1" +"15681","Saltsburg","PA","40.500852","-79.4463","-5","1" +"15682","Schenley","PA","40.847829","-79.451575","-5","1" +"15683","Scottdale","PA","40.103791","-79.59396","-5","1" +"15684","Slickville","PA","40.463572","-79.51475","-5","1" +"15685","Southwest","PA","40.196455","-79.52466","-5","1" +"15686","Spring Church","PA","40.608969","-79.42092","-5","1" +"15687","Stahlstown","PA","40.134658","-79.31493","-5","1" +"15688","Tarrs","PA","40.172199","-79.59265","-5","1" +"15689","United","PA","40.219344","-79.49244","-5","1" +"15690","Vandergrift","PA","40.612649","-79.56708","-5","1" +"15691","Wendel","PA","40.294021","-79.686626","-5","1" +"15692","Westmoreland City","PA","40.332063","-79.67632","-5","1" +"15693","Whitney","PA","40.253086","-79.40846","-5","1" +"15695","Wyano","PA","40.195407","-79.69532","-5","1" +"15696","Youngstown","PA","40.279151","-79.36465","-5","1" +"15697","Youngwood","PA","40.238134","-79.58172","-5","1" +"15698","Yukon","PA","40.217118","-79.68406","-5","1" +"15701","Indiana","PA","40.626307","-79.16146","-5","1" +"15705","Indiana","PA","40.640031","-79.129445","-5","1" +"15710","Alverda","PA","40.632966","-78.85799","-5","1" +"15711","Anita","PA","41.00232","-78.96306","-5","1" +"15712","Arcadia","PA","40.786561","-78.84707","-5","1" +"15713","Aultman","PA","40.56265","-79.25965","-5","1" +"15714","Barnesboro","PA","40.662676","-78.7936","-5","1" +"15715","Big Run","PA","40.969945","-78.87784","-5","1" +"15716","Black Lick","PA","40.472335","-79.19534","-5","1" +"15717","Blairsville","PA","40.446361","-79.24611","-5","1" +"15720","Brush Valley","PA","40.529238","-79.0846","-5","1" +"15721","Burnside","PA","40.813203","-78.78764","-5","1" +"15722","Carrolltown","PA","40.600375","-78.72133","-5","1" +"15723","Chambersville","PA","40.70673","-79.16106","-5","1" +"15724","Cherry Tree","PA","40.734783","-78.81275","-5","1" +"15725","Clarksburg","PA","40.518067","-79.34538","-5","1" +"15727","Clune","PA","40.55027","-79.323745","-5","1" +"15728","Clymer","PA","40.674994","-78.98999","-5","1" +"15729","Commodore","PA","40.710407","-78.93008","-5","1" +"15730","Coolspring","PA","41.040903","-79.08486","-5","1" +"15731","Coral","PA","40.500385","-79.17407","-5","1" +"15732","Creekside","PA","40.721516","-79.21224","-5","1" +"15733","De Lancey","PA","40.98415","-78.9622","-5","1" +"15734","Dixonville","PA","40.717399","-79.00688","-5","1" +"15736","Elderton","PA","40.694906","-79.34332","-5","1" +"15737","Elmora","PA","40.607635","-78.752415","-5","1" +"15738","Emeigh","PA","40.693633","-78.775076","-5","1" +"15739","Ernest","PA","40.677609","-79.16422","-5","1" +"15740","Frostburg","PA","41.141079","-78.962877","-5","1" +"15741","Gipsy","PA","40.804018","-78.86765","-5","1" +"15742","Glen Campbell","PA","40.816706","-78.8636","-5","1" +"15744","Hamilton","PA","40.916407","-79.08397","-5","1" +"15745","Heilwood","PA","40.621037","-78.91839","-5","1" +"15746","Hillsdale","PA","40.767854","-78.877331","-5","1" +"15747","Home","PA","40.763402","-79.14759","-5","1" +"15748","Homer City","PA","40.529621","-79.14264","-5","1" +"15750","Josephine","PA","40.482783","-79.185048","-5","1" +"15751","Juneau","PA","40.640031","-79.129445","-5","1" +"15752","Kent","PA","40.541589","-79.28315","-5","1" +"15753","La Jose","PA","40.801942","-78.66543","-5","1" +"15754","Lucernemines","PA","40.558928","-79.1497","-5","1" +"15756","McIntyre","PA","40.570149","-79.29689","-5","1" +"15757","Mahaffey","PA","40.890039","-78.72404","-5","1" +"15758","Marchand","PA","40.640031","-79.129445","-5","1" +"15759","Marion Center","PA","40.771687","-79.04221","-5","1" +"15760","Marsteller","PA","40.652164","-78.79936","-5","1" +"15761","Mentcle","PA","40.625962","-78.89325","-5","1" +"15762","Nicktown","PA","40.596681","-78.83252","-5","1" +"15763","Northpoint","PA","40.906164","-79.13757","-5","1" +"15764","Oliveburg","PA","40.986389","-79.02664","-5","1" +"15765","Penn Run","PA","40.592854","-78.98412","-5","1" +"15767","Punxsutawney","PA","40.954059","-78.97017","-5","1" +"15770","Ringgold","PA","40.999588","-79.15992","-5","1" +"15771","Rochester Mills","PA","40.827315","-78.98991","-5","1" +"15772","Rossiter","PA","40.877189","-78.91752","-5","1" +"15773","Saint Benedict","PA","40.628368","-78.73335","-5","1" +"15774","Shelocta","PA","40.657804","-79.3328","-5","1" +"15775","Spangler","PA","40.642174","-78.77125","-5","1" +"15776","Sprankle Mills","PA","41.013546","-79.11389","-5","1" +"15777","Starford","PA","40.700574","-78.95812","-5","1" +"15778","Timblin","PA","40.965989","-79.20053","-5","1" +"15779","Torrance","PA","40.416334","-79.23317","-5","1" +"15780","Valier","PA","40.91719","-79.04992","-5","1" +"15781","Walston","PA","40.964542","-78.99646","-5","1" +"15783","West Lebanon","PA","40.601789","-79.35524","-5","1" +"15784","Worthville","PA","41.027404","-79.13928","-5","1" +"15801","Du Bois","PA","41.125563","-78.74648","-5","1" +"15817","South Fayette","PA","40.332173","-80.177979","-5","1" +"15821","Benezett","PA","41.328011","-78.35854","-5","1" +"15822","Brandy Camp","PA","41.415878","-78.665057","-5","1" +"15823","Brockport","PA","41.254038","-78.71987","-5","1" +"15824","Brockway","PA","41.241861","-78.80577","-5","1" +"15825","Brookville","PA","41.160579","-79.06479","-5","1" +"15827","Byrnedale","PA","41.293237","-78.50472","-5","1" +"15828","Clarington","PA","41.34149","-79.13567","-5","1" +"15829","Corsica","PA","41.173044","-79.19369","-5","1" +"15831","Dagus Mines","PA","41.304782","-78.621286","-5","1" +"15832","Driftwood","PA","41.379949","-78.17987","-5","1" +"15834","Emporium","PA","41.517738","-78.25309","-5","1" +"15840","Falls Creek","PA","41.160521","-78.81129","-5","1" +"15841","Force","PA","41.254727","-78.50411","-5","1" +"15845","Johnsonburg","PA","41.497219","-78.68278","-5","1" +"15846","Kersey","PA","41.337926","-78.61075","-5","1" +"15847","Knox Dale","PA","41.08434","-79.0308","-5","1" +"15848","Luthersburg","PA","41.031691","-78.72684","-5","1" +"15849","Penfield","PA","41.201892","-78.56335","-5","1" +"15851","Reynoldsville","PA","41.095493","-78.88994","-5","1" +"15853","Ridgway","PA","41.420778","-78.74776","-5","1" +"15856","Rockton","PA","41.082722","-78.62593","-5","1" +"15857","Saint Marys","PA","41.4376","-78.54272","-5","1" +"15860","Sigel","PA","41.345663","-79.04707","-5","1" +"15861","Sinnamahoning","PA","41.370716","-78.04939","-5","1" +"15863","Stump Creek","PA","41.012739","-78.83719","-5","1" +"15864","Summerville","PA","41.108591","-79.19553","-5","1" +"15865","Sykesville","PA","41.049353","-78.81868","-5","1" +"15866","Troutville","PA","41.023829","-78.78711","-5","1" +"15868","Weedville","PA","41.283012","-78.42919","-5","1" +"15870","Wilcox","PA","41.587333","-78.65347","-5","1" +"15874","Worthville","PA","41.027511","-79.141174","-5","1" +"15901","Johnstown","PA","40.325374","-78.91485","-5","1" +"15902","Johnstown","PA","40.309087","-78.90069","-5","1" +"15904","Johnstown","PA","40.289442","-78.86612","-5","1" +"15905","Johnstown","PA","40.302374","-78.93802","-5","1" +"15906","Johnstown","PA","40.348973","-78.94132","-5","1" +"15907","Johnstown","PA","40.325374","-78.915147","-5","1" +"15909","Johnstown","PA","40.36344","-78.87674","-5","1" +"15915","Johnstown","PA","40.484487","-78.702224","-5","1" +"15920","Armagh","PA","40.460191","-79.04608","-5","1" +"15921","Beaverdale","PA","40.319561","-78.694043","-5","1" +"15922","Belsano","PA","40.484487","-78.702224","-5","1" +"15923","Bolivar","PA","40.372103","-79.14574","-5","1" +"15924","Cairnbrook","PA","40.123213","-78.80478","-5","1" +"15925","Cassandra","PA","40.408989","-78.64104","-5","1" +"15926","Central City","PA","40.097937","-78.81509","-5","1" +"15927","Colver","PA","40.543153","-78.79067","-5","1" +"15928","Davidsville","PA","40.23741","-78.92978","-5","1" +"15929","Dilltown","PA","40.467684","-79.00063","-5","1" +"15930","Dunlo","PA","40.294347","-78.71981","-5","1" +"15931","Ebensburg","PA","40.498793","-78.74591","-5","1" +"15934","Elton","PA","40.280875","-78.80196","-5","1" +"15935","Hollsopple","PA","40.212192","-78.95052","-5","1" +"15936","Hooversville","PA","40.156538","-78.91515","-5","1" +"15937","Jerome","PA","40.208983","-78.98782","-5","1" +"15938","Lilly","PA","40.42026","-78.61924","-5","1" +"15940","Loretto","PA","40.506799","-78.62996","-5","1" +"15942","Mineral Point","PA","40.402861","-78.83563","-5","1" +"15943","Nanty Glo","PA","40.474488","-78.84402","-5","1" +"15944","New Florence","PA","40.371165","-79.0772","-5","1" +"15945","Parkhill","PA","40.356723","-78.873296","-5","1" +"15946","Portage","PA","40.384718","-78.6651","-5","1" +"15948","Revloc","PA","40.491089","-78.76419","-5","1" +"15949","Robinson","PA","40.401076","-79.13701","-5","1" +"15951","Saint Michael","PA","40.338615","-78.776137","-5","1" +"15952","Salix","PA","40.298625","-78.77164","-5","1" +"15953","Seanor","PA","40.206435","-78.900533","-5","1" +"15954","Seward","PA","40.414654","-79.01806","-5","1" +"15955","Sidman","PA","40.324295","-78.7063","-5","1" +"15956","South Fork","PA","40.358541","-78.78201","-5","1" +"15957","Strongstown","PA","40.536405","-78.89205","-5","1" +"15958","Summerhill","PA","40.381332","-78.7433","-5","1" +"15959","Tire Hill","PA","40.267975","-78.915567","-5","1" +"15960","Twin Rocks","PA","40.49963","-78.861308","-5","1" +"15961","Vintondale","PA","40.47535","-78.94295","-5","1" +"15962","Wilmore","PA","40.380188","-78.719019","-5","1" +"15963","Windber","PA","40.228222","-78.81978","-5","1" +"15965","Wilmore","PA","40.388921","-78.720134","-5","1" +"15973","Perry","PA","40.098721","-79.785885","-5","1" +"16001","Butler","PA","40.877664","-79.9113","-5","1" +"16002","Butler","PA","40.818663","-79.86119","-5","1" +"16003","Butler","PA","40.921145","-79.92758","-5","1" +"16006","Cranberry","PA","40.726206","-80.10054","-5","1" +"16016","Boyers","PA","40.921145","-79.92758","-5","1" +"16017","Boyers","PA","40.921145","-79.92758","-5","1" +"16018","Boyers","PA","40.921145","-79.92758","-5","1" +"16020","Boyers","PA","41.10936","-79.90816","-5","1" +"16021","Branchton","PA","40.921145","-79.92758","-5","1" +"16022","Bruin","PA","41.057142","-79.73005","-5","1" +"16023","Cabot","PA","40.796809","-79.75147","-5","1" +"16024","Callery","PA","40.739587","-80.03721","-5","1" +"16025","Chicora","PA","40.947245","-79.75428","-5","1" +"16027","Connoquenessing","PA","40.818096","-80.0137","-5","1" +"16028","East Brady","PA","40.97717","-79.61922","-5","1" +"16029","East Butler","PA","40.877703","-79.84392","-5","1" +"16030","Eau Claire","PA","41.135335","-79.79791","-5","1" +"16033","Evans City","PA","40.789672","-80.04848","-5","1" +"16034","Fenelton","PA","40.868261","-79.72506","-5","1" +"16035","Forestville","PA","41.106327","-80.00429","-5","1" +"16036","Foxburg","PA","41.141525","-79.67366","-5","1" +"16037","Harmony","PA","40.821535","-80.13033","-5","1" +"16038","Harrisville","PA","41.152347","-79.9632","-5","1" +"16039","Herman","PA","40.921145","-79.92758","-5","1" +"16040","Hilliards","PA","41.098857","-79.84091","-5","1" +"16041","Karns City","PA","41.009219","-79.7102","-5","1" +"16045","Lyndora","PA","40.85062","-79.91314","-5","1" +"16046","Mars","PA","40.695658","-80.03359","-5","1" +"16048","North Washington","PA","41.04719","-79.808899","-5","1" +"16049","Parker","PA","41.097836","-79.66317","-5","1" +"16050","Petrolia","PA","41.028275","-79.75423","-5","1" +"16051","Portersville","PA","40.953141","-80.14799","-5","1" +"16052","Prospect","PA","40.898789","-80.06125","-5","1" +"16053","Renfrew","PA","40.808934","-79.97811","-5","1" +"16054","Saint Petersburg","PA","41.160944","-79.65393","-5","1" +"16055","Sarver","PA","40.713078","-79.73603","-5","1" +"16056","Saxonburg","PA","40.732393","-79.83422","-5","1" +"16057","Slippery Rock","PA","41.047157","-80.05506","-5","1" +"16058","Turkey City","PA","41.202325","-79.453751","-5","1" +"16059","Valencia","PA","40.702289","-79.93733","-5","1" +"16061","West Sunbury","PA","41.005075","-79.8851","-5","1" +"16063","Zelienople","PA","40.783001","-80.13343","-5","1" +"16066","Cranberry Twp","PA","40.700423","-80.11374","-5","1" +"16101","New Castle","PA","40.992023","-80.32747","-5","1" +"16102","New Castle","PA","40.970991","-80.38291","-5","1" +"16103","New Castle","PA","40.989662","-80.308376","-5","1" +"16105","New Castle","PA","41.038205","-80.34539","-5","1" +"16107","New Castle","PA","40.989662","-80.308376","-5","1" +"16108","New Castle","PA","40.989662","-80.308376","-5","1" +"16110","Adamsville","PA","41.508647","-80.37501","-5","1" +"16111","Atlantic","PA","41.518256","-80.2834","-5","1" +"16112","Bessemer","PA","40.976839","-80.49346","-5","1" +"16113","Clark","PA","41.280779","-80.4241","-5","1" +"16114","Clarks Mills","PA","41.402438","-80.18346","-5","1" +"16115","Darlington","PA","40.802863","-80.44364","-5","1" +"16116","Edinburg","PA","41.025132","-80.45756","-5","1" +"16117","Ellwood City","PA","40.857663","-80.27534","-5","1" +"16120","Enon Valley","PA","40.875943","-80.46851","-5","1" +"16121","Farrell","PA","41.211606","-80.49404","-5","1" +"16123","Fombell","PA","40.821528","-80.19444","-5","1" +"16124","Fredonia","PA","41.329301","-80.26042","-5","1" +"16125","Greenville","PA","41.403462","-80.37424","-5","1" +"16127","Grove City","PA","41.169987","-80.08174","-5","1" +"16130","Hadley","PA","41.443741","-80.22367","-5","1" +"16131","Hartstown","PA","41.549671","-80.37143","-5","1" +"16132","Hillsville","PA","41.00745","-80.49576","-5","1" +"16133","Jackson Center","PA","41.274408","-80.12409","-5","1" +"16134","Jamestown","PA","41.506801","-80.46177","-5","1" +"16136","Koppel","PA","40.834903","-80.32428","-5","1" +"16137","Mercer","PA","41.234591","-80.2364","-5","1" +"16140","New Bedford","PA","41.098098","-80.50393","-5","1" +"16141","New Galilee","PA","40.853014","-80.40181","-5","1" +"16142","New Wilmington","PA","41.135063","-80.33492","-5","1" +"16143","Pulaski","PA","41.096535","-80.46266","-5","1" +"16145","Sandy Lake","PA","41.385019","-80.07987","-5","1" +"16146","Sharon","PA","41.230106","-80.49896","-5","1" +"16148","Hermitage","PA","41.232543","-80.45797","-5","1" +"16150","Sharpsville","PA","41.266185","-80.46312","-5","1" +"16151","Sheakleyville","PA","41.443244","-80.2073","-5","1" +"16153","Stoneboro","PA","41.335391","-80.08895","-5","1" +"16154","Transfer","PA","41.330028","-80.42771","-5","1" +"16155","Villa Maria","PA","41.074943","-80.50611","-5","1" +"16156","Volant","PA","41.097672","-80.23","-5","1" +"16157","Wampum","PA","40.889241","-80.34189","-5","1" +"16159","West Middlesex","PA","41.174066","-80.45319","-5","1" +"16160","West Pittsburg","PA","40.93156","-80.36453","-5","1" +"16161","Wheatland","PA","41.200389","-80.4957","-5","1" +"16172","New Wilmington","PA","41.119992","-80.333192","-5","1" +"16201","Kittanning","PA","40.809467","-79.49922","-5","1" +"16210","Adrian","PA","40.885328","-79.52058","-5","1" +"16211","Beyer","PA","40.640031","-79.129445","-5","1" +"16212","Cadogan","PA","40.7532","-79.58296","-5","1" +"16213","Callensburg","PA","41.125693","-79.557","-5","1" +"16214","Clarion","PA","41.199396","-79.37196","-5","1" +"16215","Kittanning","PA","40.847829","-79.451575","-5","1" +"16216","Climax","PA","40.847829","-79.451575","-5","1" +"16217","Cooksburg","PA","41.344067","-79.20159","-5","1" +"16218","Cowansville","PA","40.923894","-79.59137","-5","1" +"16220","Crown","PA","41.202325","-79.453751","-5","1" +"16221","Curllsville","PA","41.202325","-79.453751","-5","1" +"16222","Dayton","PA","40.8739","-79.24188","-5","1" +"16223","Distant","PA","40.954782","-79.37922","-5","1" +"16224","Fairmount City","PA","41.045243","-79.29524","-5","1" +"16225","Fisher","PA","41.202325","-79.453751","-5","1" +"16226","Ford City","PA","40.747985","-79.51228","-5","1" +"16228","Ford Cliff","PA","40.76172","-79.53488","-5","1" +"16229","Freeport","PA","40.711528","-79.65608","-5","1" +"16230","Hawthorn","PA","41.020621","-79.27416","-5","1" +"16232","Knox","PA","41.230562","-79.55397","-5","1" +"16233","Leeper","PA","41.361473","-79.27869","-5","1" +"16234","Limestone","PA","41.127485","-79.32695","-5","1" +"16235","Lucinda","PA","41.323424","-79.35134","-5","1" +"16236","McGrann","PA","40.780619","-79.52342","-5","1" +"16238","Manorville","PA","40.786362","-79.52164","-5","1" +"16239","Marienville","PA","41.496544","-79.13944","-5","1" +"16240","Mayport","PA","41.035602","-79.2235","-5","1" +"16242","New Bethlehem","PA","41.007757","-79.3461","-5","1" +"16244","Nu Mine","PA","40.796406","-79.2727","-5","1" +"16245","Oak Ridge","PA","41.007679","-79.29719","-5","1" +"16246","Plumville","PA","40.793823","-79.18023","-5","1" +"16248","Rimersburg","PA","41.039668","-79.50254","-5","1" +"16249","Rural Valley","PA","40.779271","-79.31915","-5","1" +"16250","Sagamore","PA","40.776212","-79.23196","-5","1" +"16253","Seminole","PA","40.95557","-79.34352","-5","1" +"16254","Shippenville","PA","41.255691","-79.45122","-5","1" +"16255","Sligo","PA","41.115411","-79.46865","-5","1" +"16256","Smicksburg","PA","40.854736","-79.13528","-5","1" +"16257","Snydersburg","PA","41.202325","-79.453751","-5","1" +"16258","Strattanville","PA","41.221629","-79.28293","-5","1" +"16259","Templeton","PA","40.90764","-79.45161","-5","1" +"16260","Vowinckel","PA","41.41229","-79.22805","-5","1" +"16261","Widnoon","PA","40.847829","-79.451575","-5","1" +"16262","Worthington","PA","40.839519","-79.65268","-5","1" +"16263","Yatesboro","PA","40.801244","-79.33317","-5","1" +"16299","South Buffalo","PA","40.755638","-79.651602","-5","1" +"16301","Oil City","PA","41.439658","-79.69044","-5","1" +"16302","Oil City","PA","41.407066","-79.730975","-5","1" +"16311","Carlton","PA","41.452879","-80.0222","-5","1" +"16312","Chandlers Valley","PA","41.935848","-79.309668","-5","1" +"16313","Clarendon","PA","41.773848","-79.11801","-5","1" +"16314","Cochranton","PA","41.517339","-80.05761","-5","1" +"16316","Conneaut Lake","PA","41.607955","-80.29601","-5","1" +"16317","Cooperstown","PA","41.526679","-79.86027","-5","1" +"16319","Cranberry","PA","41.321298","-79.6478","-5","1" +"16321","East Hickory","PA","41.581586","-79.40272","-5","1" +"16322","Endeavor","PA","41.626321","-79.3633","-5","1" +"16323","Franklin","PA","41.407366","-79.83921","-5","1" +"16326","Fryburg","PA","41.362104","-79.43125","-5","1" +"16327","Guys Mills","PA","41.61792","-79.94934","-5","1" +"16328","Hydetown","PA","41.666057","-80.065793","-5","1" +"16329","Irvine","PA","41.821327","-79.27004","-5","1" +"16331","Kossuth","PA","41.306317","-79.57486","-5","1" +"16332","Lickingville","PA","41.378962","-79.37128","-5","1" +"16333","Ludlow","PA","41.732284","-78.9393","-5","1" +"16334","Marble","PA","41.316316","-79.44164","-5","1" +"16335","Meadville","PA","41.637502","-80.15214","-5","1" +"16340","Pittsfield","PA","41.826878","-79.42231","-5","1" +"16341","Pleasantville","PA","41.560056","-79.53852","-5","1" +"16342","Polk","PA","41.335938","-79.93647","-5","1" +"16343","Reno","PA","41.410693","-79.75012","-5","1" +"16344","Rouseville","PA","41.471398","-79.68946","-5","1" +"16345","Russell","PA","41.954896","-79.09583","-5","1" +"16346","Seneca","PA","41.378236","-79.6864","-5","1" +"16347","Sheffield","PA","41.676904","-79.03116","-5","1" +"16350","Sugar Grove","PA","41.977253","-79.33007","-5","1" +"16351","Tidioute","PA","41.680467","-79.39428","-5","1" +"16352","Tiona","PA","41.764498","-79.04693","-5","1" +"16353","Tionesta","PA","41.493473","-79.3902","-5","1" +"16354","Titusville","PA","41.622203","-79.69298","-5","1" +"16355","East Fairfield","PA","41.562679","-80.062136","-5","1" +"16360","Townville","PA","41.684627","-79.88684","-5","1" +"16361","Tylersburg","PA","41.391383","-79.34078","-5","1" +"16362","Utica","PA","41.445871","-79.96704","-5","1" +"16364","Venus","PA","41.369406","-79.51724","-5","1" +"16365","Warren","PA","41.853225","-79.15521","-5","1" +"16366","Warren","PA","41.811682","-79.264322","-5","1" +"16367","Warren","PA","41.811682","-79.264322","-5","1" +"16368","Irvine","PA","41.811682","-79.264322","-5","1" +"16369","Irvine","PA","41.811682","-79.264322","-5","1" +"16370","West Hickory","PA","41.569732","-79.40911","-5","1" +"16371","Youngsville","PA","41.860809","-79.31703","-5","1" +"16372","Clintonville","PA","41.199578","-79.87436","-5","1" +"16373","Emlenton","PA","41.195768","-79.70044","-5","1" +"16374","Kennerdell","PA","41.252823","-79.82675","-5","1" +"16375","Lamartine","PA","41.202325","-79.453751","-5","1" +"16388","Meadville","PA","41.659552","-80.157553","-5","1" +"16401","Albion","PA","41.883648","-80.37687","-5","1" +"16402","Bear Lake","PA","41.972884","-79.478","-5","1" +"16403","Cambridge Springs","PA","41.79637","-80.02524","-5","1" +"16404","Centerville","PA","41.727069","-79.78908","-5","1" +"16405","Columbus","PA","41.94208","-79.54534","-5","1" +"16406","Conneautville","PA","41.746056","-80.35888","-5","1" +"16407","Corry","PA","41.919028","-79.65224","-5","1" +"16410","Cranesville","PA","41.922138","-80.32884","-5","1" +"16411","East Springfield","PA","41.981289","-80.44277","-5","1" +"16412","Edinboro","PA","41.875896","-80.15129","-5","1" +"16413","Elgin","PA","42.182748","-80.064915","-5","1" +"16414","Bloomfield","PA","41.785249","-79.787096","-5","1" +"16415","Fairview","PA","42.035523","-80.23526","-5","1" +"16416","Garland","PA","41.81426","-79.44777","-5","1" +"16417","Girard","PA","41.979","-80.3098","-5","1" +"16420","Grand Valley","PA","41.700333","-79.54788","-5","1" +"16421","Harborcreek","PA","42.169106","-79.9409","-5","1" +"16422","Harmonsburg","PA","41.661068","-80.31618","-5","1" +"16423","Lake City","PA","42.019394","-80.34064","-5","1" +"16424","Linesville","PA","41.63471","-80.43671","-5","1" +"16426","McKean","PA","41.992528","-80.14448","-5","1" +"16427","Mill Village","PA","41.87504","-79.96986","-5","1" +"16428","North East","PA","42.195488","-79.83296","-5","1" +"16430","North Springfield","PA","41.999881","-80.42585","-5","1" +"16432","Riceville","PA","41.666057","-80.065793","-5","1" +"16433","Saegertown","PA","41.732434","-80.14613","-5","1" +"16434","Spartansburg","PA","41.803172","-79.68296","-5","1" +"16435","Springboro","PA","41.817144","-80.38568","-5","1" +"16436","Spring Creek","PA","41.860822","-79.51047","-5","1" +"16438","Union City","PA","41.87487","-79.843","-5","1" +"16440","Venango","PA","41.774575","-80.1145","-5","1" +"16441","Waterford","PA","41.93958","-79.98542","-5","1" +"16442","Wattsburg","PA","42.029506","-79.82547","-5","1" +"16443","West Springfield","PA","41.942171","-80.48002","-5","1" +"16444","Edinboro","PA","42.182748","-80.064915","-5","1" +"16475","Albion","PA","42.182748","-80.064915","-5","1" +"16501","Erie","PA","42.122957","-80.08437","-5","1" +"16502","Erie","PA","42.110757","-80.10024","-5","1" +"16503","Erie","PA","42.127807","-80.06351","-5","1" +"16504","Erie","PA","42.110156","-80.05187","-5","1" +"16505","Erie","PA","42.100307","-80.15552","-5","1" +"16506","Erie","PA","42.072606","-80.14541","-5","1" +"16507","Erie","PA","42.132707","-80.08452","-5","1" +"16508","Erie","PA","42.097856","-80.09147","-5","1" +"16509","Erie","PA","42.074056","-80.06927","-5","1" +"16510","Erie","PA","42.126956","-80.0004","-5","1" +"16511","Erie","PA","42.156157","-80.01686","-5","1" +"16512","Erie","PA","42.030201","-80.257855","-5","1" +"16514","Erie","PA","42.182748","-80.064915","-5","1" +"16515","Erie","PA","42.182748","-80.064915","-5","1" +"16522","Erie","PA","42.182748","-80.064915","-5","1" +"16530","Erie","PA","42.182748","-80.064915","-5","1" +"16531","Erie","PA","42.182748","-80.064915","-5","1" +"16532","Erie","PA","42.182748","-80.064915","-5","1" +"16533","Erie","PA","42.182748","-80.064915","-5","1" +"16534","Erie","PA","42.182748","-80.064915","-5","1" +"16538","Erie","PA","42.182748","-80.064915","-5","1" +"16541","Erie","PA","42.182748","-80.064915","-5","1" +"16544","Erie","PA","42.182748","-80.064915","-5","1" +"16546","Erie","PA","42.182748","-80.064915","-5","1" +"16550","Erie","PA","42.182748","-80.064915","-5","1" +"16553","Erie","PA","42.182748","-80.064915","-5","1" +"16554","Erie","PA","42.182748","-80.064915","-5","1" +"16558","Erie","PA","42.182748","-80.064915","-5","1" +"16563","Erie","PA","42.182748","-80.064915","-5","1" +"16565","Erie","PA","42.182748","-80.064915","-5","1" +"16601","Altoona","PA","40.526319","-78.40082","-5","1" +"16602","Altoona","PA","40.50217","-78.39121","-5","1" +"16603","Altoona","PA","40.50177","-78.410035","-5","1" +"16611","Alexandria","PA","40.561651","-78.10583","-5","1" +"16613","Ashville","PA","40.554187","-78.5406","-5","1" +"16614","Bakers Summit","PA","40.262311","-78.421434","-5","1" +"16616","Beccaria","PA","40.770522","-78.44099","-5","1" +"16617","Bellwood","PA","40.601566","-78.33361","-5","1" +"16619","Blandburg","PA","40.684811","-78.41481","-5","1" +"16620","Brisbin","PA","40.8376","-78.3527","-5","1" +"16621","Broad Top","PA","40.211299","-78.13","-5","1" +"16622","Calvin","PA","40.336064","-78.06665","-5","1" +"16623","Cassville","PA","40.274021","-78.04002","-5","1" +"16624","Chest Springs","PA","40.578804","-78.6098","-5","1" +"16625","Claysburg","PA","40.290914","-78.48646","-5","1" +"16627","Coalport","PA","40.753504","-78.52097","-5","1" +"16629","Coupon","PA","40.521778","-78.526274","-5","1" +"16630","Cresson","PA","40.464754","-78.5885","-5","1" +"16631","Curryville","PA","40.282346","-78.34748","-5","1" +"16633","Defiance","PA","40.160858","-78.23205","-5","1" +"16634","Dudley","PA","40.205819","-78.17565","-5","1" +"16635","Duncansville","PA","40.419572","-78.44934","-5","1" +"16636","Dysart","PA","40.612642","-78.51947","-5","1" +"16637","East Freedom","PA","40.34068","-78.43301","-5","1" +"16638","Entriken","PA","40.335188","-78.20534","-5","1" +"16639","Fallentimber","PA","40.687083","-78.47615","-5","1" +"16640","Flinton","PA","40.711195","-78.56081","-5","1" +"16641","Gallitzin","PA","40.487413","-78.55617","-5","1" +"16644","Glasgow","PA","40.717845","-78.463679","-5","1" +"16645","Glen Hope","PA","40.798959","-78.50032","-5","1" +"16646","Hastings","PA","40.670162","-78.70932","-5","1" +"16647","Hesston","PA","40.40537","-78.10103","-5","1" +"16648","Hollidaysburg","PA","40.439272","-78.37421","-5","1" +"16650","Hopewell","PA","40.132345","-78.26845","-5","1" +"16651","Houtzdale","PA","40.827635","-78.36046","-5","1" +"16652","Huntingdon","PA","40.498403","-77.99417","-5","1" +"16654","Huntingdon","PA","40.402523","-77.966977","-5","1" +"16655","Imler","PA","40.235","-78.53545","-5","1" +"16656","Irvona","PA","40.792727","-78.5578","-5","1" +"16657","James Creek","PA","40.341859","-78.1723","-5","1" +"16659","Loysburg","PA","40.16478","-78.37709","-5","1" +"16660","McConnellstown","PA","40.402523","-77.966977","-5","1" +"16661","Madera","PA","40.841761","-78.46167","-5","1" +"16662","Martinsburg","PA","40.306709","-78.31987","-5","1" +"16663","Morann","PA","40.789079","-78.375","-5","1" +"16664","New Enterprise","PA","40.174807","-78.41772","-5","1" +"16665","Newry","PA","40.393223","-78.43508","-5","1" +"16666","Osceola Mills","PA","40.85258","-78.28335","-5","1" +"16667","Osterburg","PA","40.173012","-78.52762","-5","1" +"16668","Patton","PA","40.63949","-78.63816","-5","1" +"16669","Petersburg","PA","40.627047","-77.96449","-5","1" +"16670","Queen","PA","40.25915","-78.50652","-5","1" +"16671","Ramey","PA","40.800186","-78.4013","-5","1" +"16672","Riddlesburg","PA","40.160825","-78.25489","-5","1" +"16673","Roaring Spring","PA","40.328843","-78.39897","-5","1" +"16674","Robertsdale","PA","40.196898","-78.10266","-5","1" +"16675","Saint Boniface","PA","40.671181","-78.675548","-5","1" +"16677","Sandy Ridge","PA","40.807219","-78.26071","-5","1" +"16678","Saxton","PA","40.221352","-78.22785","-5","1" +"16679","Six Mile Run","PA","40.163172","-78.20555","-5","1" +"16680","Smithmill","PA","40.75212","-78.41085","-5","1" +"16681","Smokerun","PA","40.792825","-78.43559","-5","1" +"16682","Sproul","PA","40.271645","-78.45919","-5","1" +"16683","Spruce Creek","PA","40.662087","-78.07012","-5","1" +"16684","Tipton","PA","40.636691","-78.303614","-5","1" +"16685","Todd","PA","40.273559","-78.07926","-5","1" +"16686","Tyrone","PA","40.666444","-78.24353","-5","1" +"16689","Waterfall","PA","40.092488","-78.08406","-5","1" +"16691","Wells Tannery","PA","40.080393","-78.15342","-5","1" +"16692","Westover","PA","40.757085","-78.69622","-5","1" +"16693","Williamsburg","PA","40.456531","-78.2221","-5","1" +"16694","Wood","PA","40.167018","-78.13583","-5","1" +"16695","Woodbury","PA","40.217753","-78.37197","-5","1" +"16698","Houtzdale","PA","40.989115","-78.422403","-5","1" +"16699","Cresson","PA","40.484487","-78.702224","-5","1" +"16701","Bradford","PA","41.943791","-78.65448","-5","1" +"16720","Austin","PA","41.613244","-78.07011","-5","1" +"16724","Crosby","PA","41.747898","-78.37938","-5","1" +"16725","Custer City","PA","41.902256","-78.659","-5","1" +"16726","Cyclone","PA","41.816833","-78.58059","-5","1" +"16727","Derrick City","PA","41.976763","-78.53541","-5","1" +"16728","De Young","PA","41.415878","-78.665057","-5","1" +"16729","Duke Center","PA","41.96192","-78.4841","-5","1" +"16730","East Smethport","PA","41.811926","-78.42256","-5","1" +"16731","Eldred","PA","41.957479","-78.39317","-5","1" +"16732","Gifford","PA","41.850657","-78.60663","-5","1" +"16733","Hazel Hurst","PA","41.713565","-78.56703","-5","1" +"16734","James City","PA","41.619029","-78.84","-5","1" +"16735","Kane","PA","41.628726","-78.80734","-5","1" +"16738","Lewis Run","PA","41.833762","-78.68839","-5","1" +"16740","Mount Jewett","PA","41.734498","-78.61379","-5","1" +"16743","Port Allegany","PA","41.809546","-78.27125","-5","1" +"16744","Rew","PA","41.883626","-78.5454","-5","1" +"16745","Rixford","PA","41.925564","-78.50206","-5","1" +"16746","Roulette","PA","41.800699","-78.14362","-5","1" +"16748","Shinglehouse","PA","41.940288","-78.16186","-5","1" +"16749","Smethport","PA","41.801302","-78.44419","-5","1" +"16750","Turtlepoint","PA","41.876559","-78.32445","-5","1" +"16751","Westline","PA","41.791063","-78.76347","-5","1" +"16801","State College","PA","40.792011","-77.84993","-5","1" +"16802","University Park","PA","40.806956","-77.86281","-5","1" +"16803","State College","PA","40.802661","-77.89936","-5","1" +"16804","State College","PA","40.972229","-77.760172","-5","1" +"16805","State College","PA","40.972229","-77.760172","-5","1" +"16815","Potter","PA","40.771122","-77.658267","-5","1" +"16820","Aaronsburg","PA","40.908997","-77.42424","-5","1" +"16821","Allport","PA","40.989115","-78.422403","-5","1" +"16822","Beech Creek","PA","41.092339","-77.60545","-5","1" +"16823","Bellefonte","PA","40.91255","-77.77387","-5","1" +"16825","Bigler","PA","40.98169","-78.30514","-5","1" +"16826","Blanchard","PA","41.059172","-77.60029","-5","1" +"16827","Boalsburg","PA","40.78267","-77.78689","-5","1" +"16828","Centre Hall","PA","40.828679","-77.6849","-5","1" +"16829","Clarence","PA","41.053528","-77.96226","-5","1" +"16830","Clearfield","PA","41.026239","-78.43838","-5","1" +"16832","Coburn","PA","40.847255","-77.47633","-5","1" +"16833","Curwensville","PA","40.948433","-78.55176","-5","1" +"16834","Drifting","PA","41.033239","-78.1104","-5","1" +"16835","Fleming","PA","40.904645","-77.875191","-5","1" +"16836","Frenchville","PA","41.104737","-78.2344","-5","1" +"16837","Glen Richey","PA","40.945702","-78.4745","-5","1" +"16838","Grampian","PA","40.977104","-78.62296","-5","1" +"16839","Grassflat","PA","41.004152","-78.11298","-5","1" +"16840","Hawk Run","PA","40.924438","-78.20652","-5","1" +"16841","Howard","PA","41.021843","-77.66909","-5","1" +"16843","Hyde","PA","41.001993","-78.46381","-5","1" +"16844","Julian","PA","40.896662","-77.91555","-5","1" +"16845","Karthaus","PA","41.131415","-78.10643","-5","1" +"16847","Kylertown","PA","40.994188","-78.16804","-5","1" +"16848","Lamar","PA","41.010409","-77.53613","-5","1" +"16849","Lanse","PA","40.972358","-78.12121","-5","1" +"16850","Lecontes Mills","PA","40.989115","-78.422403","-5","1" +"16851","Lemont","PA","40.809461","-77.81584","-5","1" +"16852","Madisonburg","PA","40.92744","-77.52998","-5","1" +"16853","Milesburg","PA","40.942533","-77.7892","-5","1" +"16854","Millheim","PA","40.891594","-77.47605","-5","1" +"16855","Mineral Springs","PA","40.998733","-78.37324","-5","1" +"16856","Mingoville","PA","40.929263","-77.64581","-5","1" +"16858","Morrisdale","PA","41.004198","-78.19085","-5","1" +"16859","Moshannon","PA","41.0448","-78.024","-5","1" +"16860","Munson","PA","40.954583","-78.1668","-5","1" +"16861","New Millport","PA","40.87713","-78.53394","-5","1" +"16863","Olanta","PA","40.914286","-78.48998","-5","1" +"16864","Orviston","PA","41.105537","-77.75273","-5","1" +"16865","Pennsylvania Furnace","PA","40.722897","-77.96941","-5","1" +"16866","Philipsburg","PA","40.893028","-78.21678","-5","1" +"16868","Pine Grove Mills","PA","40.726405","-77.911776","-5","1" +"16870","Port Matilda","PA","40.801396","-78.045","-5","1" +"16871","Pottersdale","PA","41.177156","-78.04399","-5","1" +"16872","Rebersburg","PA","40.966199","-77.35299","-5","1" +"16873","Shawville","PA","40.989115","-78.422403","-5","1" +"16874","Snow Shoe","PA","41.034029","-77.93356","-5","1" +"16875","Spring Mills","PA","40.833229","-77.57458","-5","1" +"16876","Wallaceton","PA","40.960106","-78.28886","-5","1" +"16877","Warriors Mark","PA","40.721787","-78.08561","-5","1" +"16878","West Decatur","PA","40.943755","-78.30853","-5","1" +"16879","Winburne","PA","40.962566","-78.15005","-5","1" +"16881","Woodland","PA","41.018168","-78.32112","-5","1" +"16882","Woodward","PA","40.918517","-77.32269","-5","1" +"16901","Wellsboro","PA","41.736343","-77.31915","-5","1" +"16910","Alba","PA","41.77197","-76.521266","-5","1" +"16911","Arnot","PA","41.664117","-77.14153","-5","1" +"16912","Blossburg","PA","41.676922","-77.0616","-5","1" +"16914","Columbia Cross Roads","PA","41.86401","-76.76982","-5","1" +"16915","Coudersport","PA","41.800278","-77.98905","-5","1" +"16917","Covington","PA","41.739613","-77.07521","-5","1" +"16918","Cowanesque","PA","41.936663","-77.49843","-5","1" +"16920","Elkland","PA","41.989863","-77.31123","-5","1" +"16921","Gaines","PA","41.74103","-77.53768","-5","1" +"16922","Galeton","PA","41.678935","-77.68562","-5","1" +"16923","Genesee","PA","41.93668","-77.87089","-5","1" +"16925","Gillett","PA","41.950785","-76.78511","-5","1" +"16926","Granville Summit","PA","41.702935","-76.71175","-5","1" +"16927","Harrison Valley","PA","41.958059","-77.67187","-5","1" +"16928","Knoxville","PA","41.954314","-77.42457","-5","1" +"16929","Lawrenceville","PA","41.973095","-77.13731","-5","1" +"16930","Liberty","PA","41.557848","-77.13755","-5","1" +"16932","Mainesburg","PA","41.796032","-76.94145","-5","1" +"16933","Mansfield","PA","41.811139","-77.06939","-5","1" +"16935","Middlebury Center","PA","41.86292","-77.31285","-5","1" +"16936","Millerton","PA","41.951518","-76.94413","-5","1" +"16937","Mills","PA","41.969218","-77.71978","-5","1" +"16938","Morris","PA","41.564177","-77.31191","-5","1" +"16939","Morris Run","PA","41.677577","-77.01677","-5","1" +"16940","Nelson","PA","41.978436","-77.24667","-5","1" +"16941","Genesee","PA","41.993777","-77.75122","-5","1" +"16942","Osceola","PA","41.961001","-77.35306","-5","1" +"16943","Sabinsville","PA","41.84992","-77.59404","-5","1" +"16945","Sylvania","PA","41.77197","-76.521266","-5","1" +"16946","Tioga","PA","41.924013","-77.14224","-5","1" +"16947","Troy","PA","41.759353","-76.80388","-5","1" +"16948","Ulysses","PA","41.869812","-77.75115","-5","1" +"16950","Westfield","PA","41.895838","-77.52164","-5","1" +"17001","Camp Hill","PA","40.21604","-76.924996","-5","1" +"17002","Allensville","PA","40.510176","-77.83124","-5","1" +"17003","Annville","PA","40.347757","-76.53498","-5","1" +"17004","Belleville","PA","40.597698","-77.73883","-5","1" +"17005","Berrysburg","PA","40.602475","-76.8113","-5","1" +"17006","Blain","PA","40.325136","-77.52681","-5","1" +"17007","Boiling Springs","PA","40.14789","-77.12245","-5","1" +"17008","Bowmansdale","PA","40.167091","-76.978448","-5","1" +"17009","Burnham","PA","40.637663","-77.56552","-5","1" +"17010","Campbelltown","PA","40.280149","-76.5806","-5","1" +"17011","Camp Hill","PA","40.236139","-76.93084","-5","1" +"17012","Camp Hill","PA","40.136687","-77.242805","-5","1" +"17013","Carlisle","PA","40.203458","-77.19987","-5","1" +"17014","Cocolamus","PA","40.478716","-77.345514","-5","1" +"17015","South Londonderry","PA","40.238207","-76.511942","-5","1" +"17016","Cornwall","PA","40.273968","-76.40602","-5","1" +"17017","Dalmatia","PA","40.644085","-76.87648","-5","1" +"17018","Dauphin","PA","40.385623","-76.92332","-5","1" +"17019","Dillsburg","PA","40.093968","-77.02628","-5","1" +"17020","Duncannon","PA","40.401114","-77.03405","-5","1" +"17021","East Waterford","PA","40.354433","-77.65046","-5","1" +"17022","Elizabethtown","PA","40.160793","-76.60763","-5","1" +"17023","Elizabethville","PA","40.560414","-76.81316","-5","1" +"17024","Elliottsburg","PA","40.413024","-77.30162","-5","1" +"17025","Enola","PA","40.28807","-76.94251","-5","1" +"17026","Fredericksburg","PA","40.45253","-76.42443","-5","1" +"17027","Grantham","PA","40.153656","-76.9963","-5","1" +"17028","Grantville","PA","40.402578","-76.6434","-5","1" +"17029","Granville","PA","40.551431","-77.62577","-5","1" +"17030","Gratz","PA","40.608245","-76.737545","-5","1" +"17031","Green Park","PA","40.406766","-77.292578","-5","1" +"17032","Halifax","PA","40.48358","-76.8727","-5","1" +"17033","Hershey","PA","40.277923","-76.6434","-5","1" +"17034","Highspire","PA","40.208591","-76.78563","-5","1" +"17035","Honey Grove","PA","40.4305","-77.5843","-5","1" +"17036","Hummelstown","PA","40.270367","-76.7048","-5","1" +"17037","Ickesburg","PA","40.436607","-77.39337","-5","1" +"17038","Jonestown","PA","40.434998","-76.51296","-5","1" +"17039","Kleinfeltersville","PA","40.300505","-76.258399","-5","1" +"17040","Landisburg","PA","40.333508","-77.29933","-5","1" +"17041","Lawn","PA","40.220907","-76.53769","-5","1" +"17042","Lebanon","PA","40.31977","-76.42344","-5","1" +"17043","Lemoyne","PA","40.247189","-76.89807","-5","1" +"17044","Lewistown","PA","40.595359","-77.5774","-5","1" +"17045","Liverpool","PA","40.586914","-76.99402","-5","1" +"17046","Lebanon","PA","40.358015","-76.42501","-5","1" +"17047","Loysville","PA","40.365242","-77.40369","-5","1" +"17048","Lykens","PA","40.592398","-76.72086","-5","1" +"17049","McAlisterville","PA","40.64686","-77.24149","-5","1" +"17050","Mechanicsburg","PA","40.249543","-77.002296","-5","1" +"17051","McVeytown","PA","40.458618","-77.77254","-5","1" +"17052","Mapleton Depot","PA","40.338058","-77.9779","-5","1" +"17053","Marysville","PA","40.333185","-76.96659","-5","1" +"17054","Mattawana","PA","40.495979","-77.723716","-5","1" +"17055","Mechanicsburg","PA","40.215939","-76.99827","-5","1" +"17056","Mexico","PA","40.478716","-77.345514","-5","1" +"17057","Middletown","PA","40.201341","-76.73557","-5","1" +"17058","Mifflin","PA","40.53526","-77.46457","-5","1" +"17059","Mifflintown","PA","40.582815","-77.36866","-5","1" +"17060","Mill Creek","PA","40.453498","-77.91154","-5","1" +"17061","Millersburg","PA","40.550027","-76.93743","-5","1" +"17062","Millerstown","PA","40.5565","-77.14962","-5","1" +"17063","Milroy","PA","40.735551","-77.54813","-5","1" +"17064","Mount Gretna","PA","40.24793","-76.46847","-5","1" +"17065","Mount Holly Springs","PA","40.114682","-77.19201","-5","1" +"17066","Mount Union","PA","40.373421","-77.8739","-5","1" +"17067","Myerstown","PA","40.389502","-76.3147","-5","1" +"17068","New Bloomfield","PA","40.409544","-77.17959","-5","1" +"17069","New Buffalo","PA","40.454175","-76.96991","-5","1" +"17070","New Cumberland","PA","40.22004","-76.86849","-5","1" +"17071","New Germantown","PA","40.406766","-77.292578","-5","1" +"17072","New Kingstown","PA","40.233164","-77.08212","-5","1" +"17073","Newmanstown","PA","40.308675","-76.24974","-5","1" +"17074","Newport","PA","40.482257","-77.13907","-5","1" +"17075","Newton Hamilton","PA","40.39213","-77.83649","-5","1" +"17076","Oakland Mills","PA","40.616926","-77.31228","-5","1" +"17077","Ono","PA","40.406144","-76.52753","-5","1" +"17078","Palmyra","PA","40.304156","-76.5912","-5","1" +"17080","Pillow","PA","40.64043","-76.80346","-5","1" +"17081","Plainfield","PA","40.202404","-77.28825","-5","1" +"17082","Port Royal","PA","40.508563","-77.42137","-5","1" +"17083","Quentin","PA","40.277603","-76.43823","-5","1" +"17084","Reedsville","PA","40.67845","-77.60264","-5","1" +"17085","Rexmont","PA","40.277076","-76.385727","-5","1" +"17086","Richfield","PA","40.675983","-77.11862","-5","1" +"17087","Richland","PA","40.375621","-76.26401","-5","1" +"17088","Schaefferstown","PA","40.299051","-76.29673","-5","1" +"17089","Camp Hill","PA","40.269738","-76.936046","-5","1" +"17090","Shermans Dale","PA","40.332785","-77.18464","-5","1" +"17091","Camp Hill","PA","40.136687","-77.242805","-5","1" +"17093","Summerdale","PA","40.310088","-76.9287","-5","1" +"17094","Thompsontown","PA","40.574018","-77.23385","-5","1" +"17097","Wiconisco","PA","40.573636","-76.68525","-5","1" +"17098","Williamstown","PA","40.581422","-76.62209","-5","1" +"17099","Yeagertown","PA","40.641204","-77.57953","-5","1" +"17101","Harrisburg","PA","40.261839","-76.88279","-5","1" +"17102","Harrisburg","PA","40.272839","-76.89053","-5","1" +"17103","Harrisburg","PA","40.274389","-76.86217","-5","1" +"17104","Harrisburg","PA","40.258972","-76.85922","-5","1" +"17105","Harrisburg","PA","40.278498","-76.875207","-5","1" +"17106","Harrisburg","PA","40.292664","-76.850061","-5","1" +"17107","Harrisburg","PA","40.297031","-76.876437","-5","1" +"17108","Harrisburg","PA","40.308638","-76.801693","-5","1" +"17109","Harrisburg","PA","40.290439","-76.82841","-5","1" +"17110","Harrisburg","PA","40.300738","-76.88528","-5","1" +"17111","Harrisburg","PA","40.264389","-76.80298","-5","1" +"17112","Harrisburg","PA","40.343261","-76.7808","-5","1" +"17113","Harrisburg","PA","40.23299","-76.82579","-5","1" +"17120","Harrisburg","PA","40.265689","-76.882745","-5","1" +"17121","Harrisburg","PA","40.294396","-76.893751","-5","1" +"17122","Harrisburg","PA","40.249845","-76.871209","-5","1" +"17123","Harrisburg","PA","40.267518","-76.883734","-5","1" +"17124","Harrisburg","PA","40.26746","-76.885967","-5","1" +"17125","Harrisburg","PA","40.266221","-76.882854","-5","1" +"17126","Harrisburg","PA","40.26179","-76.880021","-5","1" +"17127","Harrisburg","PA","40.261516","-76.880884","-5","1" +"17128","Harrisburg","PA","40.389865","-76.782323","-5","1" +"17129","Harrisburg","PA","40.261516","-76.880884","-5","1" +"17130","Harrisburg","PA","40.270222","-76.882889","-5","1" +"17140","Harrisburg","PA","40.30864","-76.846449","-5","1" +"17177","Harrisburg","PA","40.298988","-76.847194","-5","1" +"17201","Chambersburg","PA","39.931123","-77.66139","-5","1" +"17210","Amberson","PA","40.171667","-77.661354","-5","1" +"17211","Artemas","PA","39.742192","-78.42113","-5","1" +"17212","Big Cove Tannery","PA","39.81231","-78.06337","-5","1" +"17213","Blairs Mills","PA","40.243335","-77.77414","-5","1" +"17214","Blue Ridge Summit","PA","39.736626","-77.47038","-5","1" +"17215","Burnt Cabins","PA","40.079326","-77.90039","-5","1" +"17217","Concord","PA","40.225168","-77.725013","-5","1" +"17219","Doylesburg","PA","40.228687","-77.71034","-5","1" +"17220","Dry Run","PA","40.195365","-77.72092","-5","1" +"17221","Fannettsburg","PA","40.0724","-77.81148","-5","1" +"17222","Fayetteville","PA","39.897287","-77.52006","-5","1" +"17223","Fort Littleton","PA","40.062255","-77.96308","-5","1" +"17224","Fort Loudon","PA","39.957564","-77.90623","-5","1" +"17225","Greencastle","PA","39.792122","-77.74923","-5","1" +"17228","Harrisonville","PA","39.995374","-78.09348","-5","1" +"17229","Hustontown","PA","40.070337","-78.02273","-5","1" +"17231","Lemasters","PA","39.859432","-77.857889","-5","1" +"17232","Lurgan","PA","40.105495","-77.640461","-5","1" +"17233","McConnellsburg","PA","39.942589","-77.99529","-5","1" +"17235","Marion","PA","39.857218","-77.69775","-5","1" +"17236","Mercersburg","PA","39.793293","-77.92889","-5","1" +"17237","Mont Alto","PA","39.840491","-77.55239","-5","1" +"17238","Needmore","PA","39.847933","-78.12821","-5","1" +"17239","Neelyton","PA","40.130231","-77.84147","-5","1" +"17240","Newburg","PA","40.147267","-77.57259","-5","1" +"17241","Newville","PA","40.172412","-77.40826","-5","1" +"17243","Orbisonia","PA","40.242121","-77.87139","-5","1" +"17244","Orrstown","PA","40.076657","-77.65433","-5","1" +"17246","Pleasant Hall","PA","40.049118","-77.671754","-5","1" +"17247","Quincy","PA","39.799481","-77.581092","-5","1" +"17249","Rockhill Furnace","PA","40.242927","-77.90043","-5","1" +"17250","Rouzerville","PA","39.736395","-77.52474","-5","1" +"17251","Roxbury","PA","40.112652","-77.670626","-5","1" +"17252","Saint Thomas","PA","39.913537","-77.81001","-5","1" +"17253","Saltillo","PA","40.210859","-78.00567","-5","1" +"17254","Scotland","PA","39.969722","-77.58878","-5","1" +"17255","Shade Gap","PA","40.152486","-77.8617","-5","1" +"17256","Shady Grove","PA","39.783391","-77.674851","-5","1" +"17257","Shippensburg","PA","40.053308","-77.50622","-5","1" +"17260","Shirleysburg","PA","40.298547","-77.89067","-5","1" +"17261","South Mountain","PA","39.833095","-77.488633","-5","1" +"17262","Spring Run","PA","40.153677","-77.70883","-5","1" +"17263","State Line","PA","39.724825","-77.718629","-5","1" +"17264","Three Springs","PA","40.190713","-77.98067","-5","1" +"17265","Upperstrasburg","PA","40.035958","-77.79113","-5","1" +"17266","Walnut Bottom","PA","40.086522","-77.41026","-5","1" +"17267","Warfordsburg","PA","39.798516","-78.23675","-5","1" +"17268","Waynesboro","PA","39.766281","-77.57241","-5","1" +"17269","Brush Creek","PA","39.88745","-78.245581","-5","1" +"17270","Williamson","PA","39.851731","-77.7993","-5","1" +"17271","Willow Hill","PA","40.110585","-77.79943","-5","1" +"17272","Zullinger","PA","39.771372","-77.62702","-5","1" +"17275","Southampton","PA","40.019915","-77.464257","-5","1" +"17294","Blue Ridge Summit","PA","40.004885","-77.77637","-5","1" +"17301","Abbottstown","PA","39.891548","-76.98359","-5","1" +"17302","Airville","PA","39.80954","-76.40849","-5","1" +"17303","Arendtsville","PA","39.923644","-77.300085","-5","1" +"17304","Aspers","PA","39.969711","-77.218","-5","1" +"17306","Bendersville","PA","39.982466","-77.2496","-5","1" +"17307","Biglerville","PA","39.930756","-77.2917","-5","1" +"17309","Brogue","PA","39.871433","-76.44796","-5","1" +"17310","Cashtown","PA","39.890605","-77.356642","-5","1" +"17311","Codorus","PA","39.81667","-76.84165","-5","1" +"17312","Craley","PA","39.946739","-76.506639","-5","1" +"17313","Dallastown","PA","39.8989","-76.64405","-5","1" +"17314","Delta","PA","39.746811","-76.33655","-5","1" +"17315","Dover","PA","40.002696","-76.85763","-5","1" +"17316","East Berlin","PA","39.965131","-77.00863","-5","1" +"17317","East Prospect","PA","39.971506","-76.5206","-5","1" +"17318","Emigsville","PA","40.017597","-76.72921","-5","1" +"17319","Etters","PA","40.157382","-76.7872","-5","1" +"17320","Fairfield","PA","39.759356","-77.37768","-5","1" +"17321","Fawn Grove","PA","39.747204","-76.44339","-5","1" +"17322","Felton","PA","39.848832","-76.55122","-5","1" +"17323","Franklintown","PA","40.07501","-77.027926","-5","1" +"17324","Gardners","PA","40.030925","-77.22858","-5","1" +"17325","Gettysburg","PA","39.827337","-77.22904","-5","1" +"17326","Gettysburg","PA","39.8948","-77.213493","-5","1" +"17327","Glen Rock","PA","39.780323","-76.74785","-5","1" +"17329","Glenville","PA","39.759126","-76.85248","-5","1" +"17331","Hanover","PA","39.795301","-76.97727","-5","1" +"17332","Hanover","PA","39.775037","-76.735116","-5","1" +"17333","Hanover","PA","39.972985","-76.687826","-5","1" +"17337","Idaville","PA","40.015656","-77.200131","-5","1" +"17339","Lewisberry","PA","40.138959","-76.86904","-5","1" +"17340","Littlestown","PA","39.748187","-77.10806","-5","1" +"17342","Loganville","PA","39.853644","-76.707997","-5","1" +"17343","McKnightstown","PA","39.871147","-77.32608","-5","1" +"17344","McSherrystown","PA","39.805693","-77.01905","-5","1" +"17345","Manchester","PA","40.067348","-76.72398","-5","1" +"17346","Menges Mills","PA","40.079591","-76.703553","-5","1" +"17347","Mount Wolf","PA","40.067559","-76.69584","-5","1" +"17349","New Freedom","PA","39.753369","-76.68112","-5","1" +"17350","New Oxford","PA","39.874531","-77.06305","-5","1" +"17352","New Park","PA","39.761007","-76.50129","-5","1" +"17353","Orrtanna","PA","39.876675","-77.3794","-5","1" +"17354","Porters Sideling","PA","39.82457","-76.89927","-5","1" +"17355","Railroad","PA","39.756761","-76.69939","-5","1" +"17356","Red Lion","PA","39.90035","-76.59778","-5","1" +"17358","Rossville","PA","39.972985","-76.687826","-5","1" +"17360","Seven Valleys","PA","39.84987","-76.76403","-5","1" +"17361","Shrewsbury","PA","39.765405","-76.67748","-5","1" +"17362","Spring Grove","PA","39.853966","-76.87182","-5","1" +"17363","Stewartstown","PA","39.765741","-76.59359","-5","1" +"17364","Thomasville","PA","39.92813","-76.9018","-5","1" +"17365","Wellsville","PA","40.052872","-76.94481","-5","1" +"17366","Windsor","PA","39.92741","-76.56268","-5","1" +"17368","Wrightsville","PA","40.002058","-76.52757","-5","1" +"17370","York Haven","PA","40.120806","-76.76352","-5","1" +"17371","York New Salem","PA","39.900579","-76.789624","-5","1" +"17372","York Springs","PA","40.003442","-77.1099","-5","1" +"17375","Peach Glen","PA","39.8948","-77.213493","-5","1" +"17401","York","PA","39.962463","-76.72887","-5","1" +"17402","York","PA","39.976898","-76.67785","-5","1" +"17403","York","PA","39.952198","-76.71328","-5","1" +"17404","York","PA","39.962821","-76.76764","-5","1" +"17405","York","PA","40.008647","-76.597187","-5","1" +"17406","York","PA","40.002547","-76.59646","-5","1" +"17407","York","PA","39.882516","-76.71206","-5","1" +"17415","York","PA","39.972985","-76.687826","-5","1" +"17501","Akron","PA","40.156472","-76.204","-5","1" +"17502","Bainbridge","PA","40.095995","-76.66707","-5","1" +"17503","Bart","PA","40.0185","-76.297582","-5","1" +"17504","Bausman","PA","40.024047","-76.328081","-5","1" +"17505","Bird In Hand","PA","40.055467","-76.19149","-5","1" +"17506","Blue Ball","PA","40.117326","-76.052379","-5","1" +"17507","Bowmansville","PA","40.196641","-76.016047","-5","1" +"17508","Brownstown","PA","40.125278","-76.21665","-5","1" +"17509","Christiana","PA","39.919072","-76.02508","-5","1" +"17511","Columbia","PA","40.041911","-76.487732","-5","1" +"17512","Columbia","PA","40.037682","-76.49011","-5","1" +"17516","Conestoga","PA","39.938255","-76.36066","-5","1" +"17517","Denver","PA","40.234392","-76.12655","-5","1" +"17518","Drumore","PA","39.811308","-76.25348","-5","1" +"17519","East Earl","PA","40.141301","-76.0227","-5","1" +"17520","East Petersburg","PA","40.098696","-76.35153","-5","1" +"17521","Elm","PA","40.204393","-76.34643","-5","1" +"17522","Ephrata","PA","40.174994","-76.17619","-5","1" +"17527","Gap","PA","40.008814","-75.99195","-5","1" +"17528","Goodville","PA","40.043523","-76.238766","-5","1" +"17529","Gordonville","PA","40.0348","-76.11175","-5","1" +"17532","Holtwood","PA","39.859296","-76.28548","-5","1" +"17533","Hopeland","PA","40.233892","-76.260725","-5","1" +"17534","Intercourse","PA","40.036659","-76.106902","-5","1" +"17535","Kinzers","PA","40.000723","-76.04649","-5","1" +"17536","Kirkwood","PA","39.840243","-76.07373","-5","1" +"17537","Lampeter","PA","39.988548","-76.238729","-5","1" +"17538","Landisville","PA","40.091196","-76.41582","-5","1" +"17540","Leola","PA","40.096346","-76.19007","-5","1" +"17543","Lititz","PA","40.164049","-76.29946","-5","1" +"17545","Manheim","PA","40.168294","-76.4123","-5","1" +"17547","Marietta","PA","40.064862","-76.57145","-5","1" +"17549","Martindale","PA","40.154498","-76.08756","-5","1" +"17550","Maytown","PA","40.072108","-76.57779","-5","1" +"17551","Millersville","PA","39.994798","-76.36018","-5","1" +"17552","Mount Joy","PA","40.109445","-76.50919","-5","1" +"17554","Mountville","PA","40.040697","-76.42806","-5","1" +"17555","Narvon","PA","40.126611","-75.96767","-5","1" +"17557","New Holland","PA","40.102296","-76.08031","-5","1" +"17560","New Providence","PA","39.915209","-76.21546","-5","1" +"17562","Paradise","PA","39.981916","-76.09224","-5","1" +"17563","Peach Bottom","PA","39.767658","-76.1749","-5","1" +"17564","Penryn","PA","40.0185","-76.297582","-5","1" +"17565","Pequea","PA","39.902788","-76.32496","-5","1" +"17566","Quarryville","PA","39.872437","-76.15056","-5","1" +"17567","Reamstown","PA","40.209941","-76.116445","-5","1" +"17568","Refton","PA","39.9469","-76.232229","-5","1" +"17569","Reinholds","PA","40.264733","-76.09645","-5","1" +"17570","Rheems","PA","40.129494","-76.56991","-5","1" +"17572","Ronks","PA","40.003405","-76.15367","-5","1" +"17573","Ronks","PA","40.0185","-76.297582","-5","1" +"17575","Silver Spring","PA","40.064746","-76.434285","-5","1" +"17576","Smoketown","PA","40.038648","-76.1964","-5","1" +"17577","Soudersburg","PA","40.0185","-76.297582","-5","1" +"17578","Stevens","PA","40.226093","-76.16682","-5","1" +"17579","Strasburg","PA","39.9656","-76.17781","-5","1" +"17580","Talmage","PA","40.116846","-76.213075","-5","1" +"17581","Terre Hill","PA","40.157565","-76.05041","-5","1" +"17582","Washington Boro","PA","39.993398","-76.45568","-5","1" +"17583","West Willow","PA","39.972349","-76.28733","-5","1" +"17584","Willow Street","PA","39.963866","-76.26963","-5","1" +"17585","Witmer","PA","40.048398","-76.211427","-5","1" +"17601","Lancaster","PA","40.072246","-76.3155","-5","1" +"17602","Lancaster","PA","40.032664","-76.27575","-5","1" +"17603","Lancaster","PA","40.03263","-76.33328","-5","1" +"17604","Lancaster","PA","40.065096","-76.335631","-5","1" +"17605","Lancaster","PA","40.0185","-76.297582","-5","1" +"17606","Lancaster","PA","40.110201","-76.305378","-5","1" +"17607","Lancaster","PA","40.0185","-76.297582","-5","1" +"17608","Lancaster","PA","40.0185","-76.297582","-5","1" +"17699","Lancaster","PA","40.0185","-76.297582","-5","1" +"17701","Williamsport","PA","41.256736","-77.0108","-5","1" +"17702","Williamsport","PA","41.222128","-77.02267","-5","1" +"17703","Williamsport","PA","41.33275","-77.023601","-5","1" +"17705","Williamsport","PA","41.33275","-77.023601","-5","1" +"17720","Antes Fort","PA","41.186545","-77.218368","-5","1" +"17721","Avis","PA","41.186038","-77.31604","-5","1" +"17722","Bodines","PA","41.33275","-77.023601","-5","1" +"17723","Jersey Shore","PA","41.33275","-77.023601","-5","1" +"17724","Canton","PA","41.649813","-76.82304","-5","1" +"17726","Castanea","PA","41.122741","-77.431745","-5","1" +"17727","Cedar Run","PA","41.33275","-77.023601","-5","1" +"17728","Cogan Station","PA","41.318934","-77.08211","-5","1" +"17729","Cross Fork","PA","41.493592","-77.78665","-5","1" +"17730","Dewart","PA","41.109525","-76.87893","-5","1" +"17731","Eagles Mere","PA","41.414864","-76.58391","-5","1" +"17735","Grover","PA","41.77197","-76.521266","-5","1" +"17737","Hughesville","PA","41.268721","-76.69048","-5","1" +"17738","Hyner","PA","41.335148","-77.64014","-5","1" +"17739","Jersey Mills","PA","41.357921","-77.40671","-5","1" +"17740","Jersey Shore","PA","41.209389","-77.25975","-5","1" +"17741","Watson","PA","41.229164","-77.28278","-5","1" +"17742","Lairdsville","PA","41.232059","-76.6084","-5","1" +"17743","Leroy","PA","41.77197","-76.521266","-5","1" +"17744","Linden","PA","41.239046","-77.15154","-5","1" +"17745","Lock Haven","PA","41.146432","-77.42658","-5","1" +"17747","Loganton","PA","41.038555","-77.29872","-5","1" +"17748","McElhattan","PA","41.125166","-77.36332","-5","1" +"17749","McEwensville","PA","41.072139","-76.81871","-5","1" +"17750","Mackeyville","PA","41.051654","-77.4631","-5","1" +"17751","Mill Hall","PA","41.108454","-77.49516","-5","1" +"17752","Montgomery","PA","41.173254","-76.88449","-5","1" +"17754","Montoursville","PA","41.271098","-76.90382","-5","1" +"17756","Muncy","PA","41.208834","-76.73877","-5","1" +"17757","Wolf","PA","41.241656","-76.747251","-5","1" +"17758","Muncy Valley","PA","41.349559","-76.5442","-5","1" +"17759","Nisbet","PA","41.218259","-77.12137","-5","1" +"17760","North Bend","PA","41.404439","-77.68536","-5","1" +"17762","Picture Rocks","PA","41.280066","-76.71173","-5","1" +"17763","Ralston","PA","41.505366","-76.95432","-5","1" +"17764","Renovo","PA","41.351129","-77.79678","-5","1" +"17765","Roaring Branch","PA","41.592461","-76.95078","-5","1" +"17767","Salona","PA","41.084417","-77.46288","-5","1" +"17768","Shunk","PA","41.544194","-76.74643","-5","1" +"17769","Slate Run","PA","41.33275","-77.023601","-5","1" +"17771","Trout Run","PA","41.43664","-77.03435","-5","1" +"17772","Turbotville","PA","41.104021","-76.73831","-5","1" +"17773","Tylersville","PA","41.220635","-77.618532","-5","1" +"17774","Unityville","PA","41.239382","-76.53935","-5","1" +"17776","Waterville","PA","41.36958","-77.38615","-5","1" +"17777","Watsontown","PA","41.096505","-76.84924","-5","1" +"17778","Westport","PA","41.290924","-77.92124","-5","1" +"17779","Woolrich","PA","41.187424","-77.372827","-5","1" +"17786","Penn","PA","41.254974","-76.681186","-5","1" +"17801","Sunbury","PA","40.856105","-76.77124","-5","1" +"17810","Allenwood","PA","41.117517","-77.00557","-5","1" +"17812","Beaver Springs","PA","40.739459","-77.23037","-5","1" +"17813","Beavertown","PA","40.768922","-77.17854","-5","1" +"17814","Benton","PA","41.241255","-76.37738","-5","1" +"17815","Bloomsburg","PA","41.013364","-76.43982","-5","1" +"17820","Catawissa","PA","40.916126","-76.43888","-5","1" +"17821","Danville","PA","40.985594","-76.63449","-5","1" +"17822","Danville","PA","40.967437","-76.604896","-5","1" +"17823","Dornsife","PA","40.720016","-76.73738","-5","1" +"17824","Elysburg","PA","40.848885","-76.53547","-5","1" +"17825","Excelsior","PA","40.769908","-76.49366","-5","1" +"17827","Freeburg","PA","40.761179","-76.94339","-5","1" +"17828","Gowen City","PA","40.889632","-76.664574","-5","1" +"17829","Hartleton","PA","40.900777","-77.15522","-5","1" +"17830","Herndon","PA","40.690647","-76.80513","-5","1" +"17831","Hummels Wharf","PA","40.834408","-76.835439","-5","1" +"17832","Marion Heights","PA","40.80436","-76.46387","-5","1" +"17833","Kreamer","PA","40.802232","-76.96291","-5","1" +"17834","Kulpmont","PA","40.792365","-76.47131","-5","1" +"17835","Laurelton","PA","40.88358","-77.19808","-5","1" +"17836","Leck Kill","PA","40.706213","-76.5997","-5","1" +"17837","Lewisburg","PA","40.965348","-76.9139","-5","1" +"17839","Light Street","PA","41.020062","-76.438413","-5","1" +"17840","Locust Gap","PA","40.769941","-76.43928","-5","1" +"17841","McClure","PA","40.714443","-77.34934","-5","1" +"17842","Middleburg","PA","40.799235","-77.03834","-5","1" +"17843","Beaver Springs","PA","40.762675","-77.07752","-5","1" +"17844","Mifflinburg","PA","40.928666","-77.05294","-5","1" +"17845","Millmont","PA","40.879182","-77.17437","-5","1" +"17846","Millville","PA","41.142069","-76.51679","-5","1" +"17847","Milton","PA","41.010754","-76.83647","-5","1" +"17850","Montandon","PA","40.964676","-76.85724","-5","1" +"17851","Mount Carmel","PA","40.797899","-76.41898","-5","1" +"17853","Mount Pleasant Mills","PA","40.694161","-77.00629","-5","1" +"17855","New Berlin","PA","40.880509","-76.985","-5","1" +"17856","New Columbia","PA","41.047295","-76.91245","-5","1" +"17857","Northumberland","PA","40.899361","-76.78947","-5","1" +"17858","Numidia","PA","41.042106","-76.424297","-5","1" +"17859","Orangeville","PA","41.11533","-76.39923","-5","1" +"17860","Paxinos","PA","40.839093","-76.62615","-5","1" +"17861","Paxtonville","PA","40.770921","-77.08455","-5","1" +"17862","Penns Creek","PA","40.860555","-77.0582","-5","1" +"17864","Port Trevorton","PA","40.696064","-76.90271","-5","1" +"17865","Potts Grove","PA","40.9921","-76.78654","-5","1" +"17866","Coal Township","PA","40.791328","-76.56393","-5","1" +"17867","Rebuck","PA","40.708236","-76.68758","-5","1" +"17868","Riverside","PA","40.956916","-76.63116","-5","1" +"17870","Selinsgrove","PA","40.812047","-76.86138","-5","1" +"17872","Shamokin","PA","40.784453","-76.56417","-5","1" +"17876","Shamokin Dam","PA","40.845896","-76.82241","-5","1" +"17877","Snydertown","PA","40.87897","-76.667267","-5","1" +"17878","Stillwater","PA","41.170314","-76.33154","-5","1" +"17880","Swengel","PA","40.978059","-77.08184","-5","1" +"17881","Trevorton","PA","40.780982","-76.67105","-5","1" +"17882","Troxelville","PA","40.801614","-77.20537","-5","1" +"17883","Vicksburg","PA","40.978059","-77.08184","-5","1" +"17884","Washingtonville","PA","41.052616","-76.67506","-5","1" +"17885","Weikert","PA","40.851747","-77.31213","-5","1" +"17886","West Milton","PA","41.017937","-76.86828","-5","1" +"17887","White Deer","PA","41.07552","-76.87189","-5","1" +"17888","Wilburton","PA","40.818443","-76.37737","-5","1" +"17889","Winfield","PA","40.884501","-76.91202","-5","1" +"17901","Pottsville","PA","40.68514","-76.2139","-5","1" +"17920","Aristes","PA","40.818731","-76.33997","-5","1" +"17921","Ashland","PA","40.763568","-76.34824","-5","1" +"17922","Auburn","PA","40.594185","-76.13162","-5","1" +"17923","Branchdale","PA","40.670753","-76.32397","-5","1" +"17925","Brockton","PA","40.750666","-76.06899","-5","1" +"17927","Centralia","PA","40.802567","-76.34017","-5","1" +"17929","Cressona","PA","40.630557","-76.19448","-5","1" +"17930","Cumbola","PA","40.711162","-76.13678","-5","1" +"17931","Frackville","PA","40.782361","-76.23232","-5","1" +"17932","Frackville","PA","40.649109","-76.503339","-5","1" +"17933","Friedensburg","PA","40.602141","-76.24143","-5","1" +"17934","Gilberton","PA","40.79872","-76.21547","-5","1" +"17935","Girardville","PA","40.793258","-76.28315","-5","1" +"17936","Gordon","PA","40.750943","-76.33944","-5","1" +"17938","Hegins","PA","40.658667","-76.4814","-5","1" +"17941","Klingerstown","PA","40.677386","-76.62897","-5","1" +"17942","Landingville","PA","40.722587","-76.229623","-5","1" +"17943","Lavelle","PA","40.763048","-76.38158","-5","1" +"17944","Llewellyn","PA","40.672834","-76.27989","-5","1" +"17945","Locustdale","PA","40.777606","-76.37371","-5","1" +"17946","Lost Creek","PA","40.809063","-76.25805","-5","1" +"17948","Mahanoy City","PA","40.813869","-76.13737","-5","1" +"17949","Mahanoy Plane","PA","40.794162","-76.24258","-5","1" +"17951","Mar Lin","PA","40.679479","-76.24495","-5","1" +"17952","Mary D","PA","40.759814","-76.05513","-5","1" +"17953","Middleport","PA","40.727464","-76.08556","-5","1" +"17954","Minersville","PA","40.690455","-76.26024","-5","1" +"17957","Muir","PA","40.592705","-76.51986","-5","1" +"17959","New Philadelphia","PA","40.731739","-76.1278","-5","1" +"17960","New Ringgold","PA","40.700548","-75.96098","-5","1" +"17961","Orwigsburg","PA","40.645057","-76.0785","-5","1" +"17963","Pine Grove","PA","40.558488","-76.38129","-5","1" +"17964","Pitman","PA","40.710899","-76.52368","-5","1" +"17965","Port Carbon","PA","40.698814","-76.16405","-5","1" +"17966","Ravine","PA","40.722587","-76.229623","-5","1" +"17967","Ringtown","PA","40.859702","-76.21615","-5","1" +"17968","Sacramento","PA","40.63898","-76.60502","-5","1" +"17970","Saint Clair","PA","40.718586","-76.19111","-5","1" +"17972","Schuylkill Haven","PA","40.614771","-76.19352","-5","1" +"17974","Seltzer","PA","40.696252","-76.23554","-5","1" +"17976","Shenandoah","PA","40.820862","-76.20421","-5","1" +"17978","Spring Glen","PA","40.632279","-76.64059","-5","1" +"17979","Summit Station","PA","40.560225","-76.19887","-5","1" +"17980","Tower City","PA","40.584748","-76.55479","-5","1" +"17981","Tremont","PA","40.632681","-76.39579","-5","1" +"17982","Tuscarora","PA","40.771111","-76.03747","-5","1" +"17983","Valley View","PA","40.643634","-76.54562","-5","1" +"17985","Zion Grove","PA","40.909697","-76.20494","-5","1" +"18001","Lehigh Valley","PA","40.693376","-75.471156","-5","1" +"18002","Lehigh Valley","PA","40.665597","-75.426247","-5","1" +"18003","Lehigh Valley","PA","40.693376","-75.471156","-5","1" +"18010","Ackermanville","PA","40.693376","-75.471156","-5","1" +"18011","Alburtis","PA","40.496375","-75.62213","-5","1" +"18012","Aquashicola","PA","40.811206","-75.59136","-5","1" +"18013","Bangor","PA","40.863124","-75.19004","-5","1" +"18014","Bath","PA","40.747742","-75.40078","-5","1" +"18015","Bethlehem","PA","40.601261","-75.37542","-5","1" +"18016","Bethlehem","PA","40.693376","-75.471156","-5","1" +"18017","Bethlehem","PA","40.645665","-75.36926","-5","1" +"18018","Bethlehem","PA","40.625444","-75.38831","-5","1" +"18020","Bethlehem","PA","40.656498","-75.32938","-5","1" +"18021","Hazleton","PA","40.954484","-75.973747","-5","1" +"18024","Bethlehem","PA","40.650883","-75.306102","-5","1" +"18025","Bethlehem","PA","40.693376","-75.471156","-5","1" +"18030","Bowmanstown","PA","40.80116","-75.66158","-5","1" +"18031","Breinigsville","PA","40.552042","-75.64919","-5","1" +"18032","Catasauqua","PA","40.657089","-75.47123","-5","1" +"18034","Center Valley","PA","40.540398","-75.41501","-5","1" +"18035","Cherryville","PA","40.749545","-75.53855","-5","1" +"18036","Coopersburg","PA","40.508855","-75.40103","-5","1" +"18037","Coplay","PA","40.671538","-75.5044","-5","1" +"18038","Danielsville","PA","40.786431","-75.49158","-5","1" +"18039","Durham","PA","40.328645","-75.10278","-5","1" +"18040","Easton","PA","40.730182","-75.22349","-5","1" +"18041","East Greenville","PA","40.410224","-75.50845","-5","1" +"18042","Easton","PA","40.681798","-75.22082","-5","1" +"18043","Easton","PA","40.792804","-75.137186","-5","1" +"18044","Easton","PA","40.693376","-75.471156","-5","1" +"18045","Easton","PA","40.681531","-75.26722","-5","1" +"18046","East Texas","PA","40.538843","-75.568502","-5","1" +"18049","Emmaus","PA","40.533597","-75.49822","-5","1" +"18050","Flicksville","PA","40.693376","-75.471156","-5","1" +"18051","Fogelsville","PA","40.593153","-75.65222","-5","1" +"18052","Whitehall","PA","40.651751","-75.49224","-5","1" +"18053","Germansville","PA","40.707516","-75.70754","-5","1" +"18054","Green Lane","PA","40.343587","-75.44613","-5","1" +"18055","Hellertown","PA","40.585649","-75.3261","-5","1" +"18056","Hereford","PA","40.451369","-75.55229","-5","1" +"18058","Kunkletown","PA","40.912421","-75.49765","-5","1" +"18059","Laurys Station","PA","40.723681","-75.53601","-5","1" +"18060","Limeport","PA","40.53484","-75.57864","-5","1" +"18062","Macungie","PA","40.517304","-75.56515","-5","1" +"18063","Martins Creek","PA","40.781918","-75.18589","-5","1" +"18064","Nazareth","PA","40.746849","-75.31632","-5","1" +"18065","Neffs","PA","40.696738","-75.611647","-5","1" +"18066","New Tripoli","PA","40.653037","-75.72689","-5","1" +"18067","Northampton","PA","40.693818","-75.48697","-5","1" +"18068","Old Zionsville","PA","40.693376","-75.471156","-5","1" +"18069","Orefield","PA","40.624592","-75.60728","-5","1" +"18070","Palm","PA","40.431982","-75.53852","-5","1" +"18071","Palmerton","PA","40.820558","-75.58537","-5","1" +"18072","Pen Argyl","PA","40.857829","-75.25776","-5","1" +"18073","Pennsburg","PA","40.388263","-75.48659","-5","1" +"18074","Perkiomenville","PA","40.316397","-75.5154","-5","1" +"18076","Red Hill","PA","40.375182","-75.48431","-5","1" +"18077","Riegelsville","PA","40.576989","-75.22121","-5","1" +"18078","Schnecksville","PA","40.675741","-75.61626","-5","1" +"18079","Slatedale","PA","40.744055","-75.65864","-5","1" +"18080","Slatington","PA","40.739576","-75.62113","-5","1" +"18081","Springtown","PA","40.556976","-75.28817","-5","1" +"18083","Stockertown","PA","40.754064","-75.26477","-5","1" +"18084","Sumneytown","PA","40.327782","-75.454043","-5","1" +"18085","Tatamy","PA","40.740769","-75.25335","-5","1" +"18086","Treichlers","PA","40.734807","-75.54488","-5","1" +"18087","Trexlertown","PA","40.549119","-75.60049","-5","1" +"18088","Walnutport","PA","40.760403","-75.57535","-5","1" +"18091","Wind Gap","PA","40.835128","-75.30274","-5","1" +"18092","Zionsville","PA","40.465994","-75.51958","-5","1" +"18096","South Whitehall","PA","40.633542","-75.583861","-5","1" +"18098","Emmaus","PA","40.693376","-75.471156","-5","1" +"18099","Emmaus","PA","40.693376","-75.471156","-5","1" +"18101","Allentown","PA","40.602847","-75.47022","-5","1" +"18102","Allentown","PA","40.607747","-75.4793","-5","1" +"18103","Allentown","PA","40.595097","-75.45915","-5","1" +"18104","Allentown","PA","40.601996","-75.52104","-5","1" +"18105","Allentown","PA","40.693376","-75.471156","-5","1" +"18106","Allentown","PA","40.569288","-75.58893","-5","1" +"18109","Allentown","PA","40.693376","-75.471156","-5","1" +"18160","Tunkhannock","PA","41.010299","-75.45705","-5","1" +"18175","Allentown","PA","40.585561","-75.621058","-5","1" +"18195","Allentown","PA","40.57983","-75.579884","-5","1" +"18201","Hazleton","PA","40.958434","-75.98519","-5","1" +"18202","Hazleton","PA","40.969691","-75.990392","-5","1" +"18210","Albrightsville","PA","41.000937","-75.55484","-5","1" +"18211","Andreas","PA","40.749289","-75.82947","-5","1" +"18212","Ashfield","PA","40.784095","-75.708281","-5","1" +"18214","Barnesville","PA","40.811198","-76.06652","-5","1" +"18216","Beaver Meadows","PA","40.931187","-75.91493","-5","1" +"18218","Coaldale","PA","40.822234","-75.91011","-5","1" +"18219","Conyngham","PA","40.988834","-76.05963","-5","1" +"18220","Delano","PA","40.839186","-76.06929","-5","1" +"18221","Drifton","PA","41.004017","-75.90569","-5","1" +"18222","Drums","PA","41.030933","-75.98932","-5","1" +"18223","Ebervale","PA","41.272248","-75.880146","-5","1" +"18224","Freeland","PA","41.015634","-75.89791","-5","1" +"18225","Harleigh","PA","40.98227","-75.96874","-5","1" +"18229","Jim Thorpe","PA","40.913283","-75.6982","-5","1" +"18230","Junedale","PA","40.924427","-75.94189","-5","1" +"18231","Kelayres","PA","40.900995","-76.00488","-5","1" +"18232","Lansford","PA","40.832477","-75.88198","-5","1" +"18234","Lattimer Mines","PA","40.99303","-75.96009","-5","1" +"18235","Lehighton","PA","40.828682","-75.70596","-5","1" +"18237","Mcadoo","PA","40.897038","-75.99548","-5","1" +"18239","Milnesville","PA","40.989783","-75.98173","-5","1" +"18240","Nesquehoning","PA","40.857175","-75.84811","-5","1" +"18241","Nuremberg","PA","40.939035","-76.16898","-5","1" +"18242","Oneida","PA","40.90757","-76.12636","-5","1" +"18243","Pardeesville","PA","41.001683","-75.966146","-5","1" +"18244","Parryville","PA","40.824403","-75.66924","-5","1" +"18245","Quakake","PA","40.85315","-76.03218","-5","1" +"18246","Rock Glen","PA","40.965379","-76.18859","-5","1" +"18247","Saint Johns","PA","41.014808","-76.058391","-5","1" +"18248","Sheppton","PA","40.89707","-76.11711","-5","1" +"18249","Sugarloaf","PA","40.99118","-76.09565","-5","1" +"18250","Summit Hill","PA","40.826908","-75.8674","-5","1" +"18251","Sybertsville","PA","41.001956","-76.08117","-5","1" +"18252","Tamaqua","PA","40.792315","-75.97705","-5","1" +"18254","Tresckow","PA","40.914664","-75.96359","-5","1" +"18255","Weatherly","PA","40.945334","-75.8265","-5","1" +"18256","Weston","PA","40.941585","-76.13916","-5","1" +"18301","East Stroudsburg","PA","41.052199","-75.15936","-5","1" +"18320","Analomink","PA","41.071213","-75.236436","-5","1" +"18321","Bartonsville","PA","41.012235","-75.29039","-5","1" +"18322","Brodheadsville","PA","40.923539","-75.4","-5","1" +"18323","Buck Hill Falls","PA","41.198247","-75.27298","-5","1" +"18324","Bushkill","PA","41.141582","-74.99786","-5","1" +"18325","Canadensis","PA","41.205738","-75.24344","-5","1" +"18326","Cresco","PA","41.154329","-75.27865","-5","1" +"18327","Delaware Water Gap","PA","40.982028","-75.14262","-5","1" +"18328","Dingmans Ferry","PA","41.241889","-74.95917","-5","1" +"18330","Effort","PA","40.969985","-75.45726","-5","1" +"18331","Gilbert","PA","40.913651","-75.43501","-5","1" +"18332","Henryville","PA","41.093813","-75.26213","-5","1" +"18333","Kresgeville","PA","40.898654","-75.49795","-5","1" +"18334","Long Pond","PA","41.075315","-75.43058","-5","1" +"18335","Marshalls Creek","PA","41.050764","-75.208269","-5","1" +"18336","Matamoras","PA","41.368893","-74.70553","-5","1" +"18337","Milford","PA","41.320904","-74.88565","-5","1" +"18340","Millrift","PA","41.411678","-74.744","-5","1" +"18341","Minisink Hills","PA","40.999857","-75.13254","-5","1" +"18342","Mountainhome","PA","41.145778","-75.294125","-5","1" +"18343","Mount Bethel","PA","40.889911","-75.1112","-5","1" +"18344","Mount Pocono","PA","41.118465","-75.35501","-5","1" +"18346","Pocono Summit","PA","41.118226","-75.39631","-5","1" +"18347","Pocono Lake","PA","41.144565","-75.55717","-5","1" +"18348","Pocono Lake Preserve","PA","41.033755","-75.30798","-5","1" +"18349","Pocono Manor","PA","41.100236","-75.36453","-5","1" +"18350","Pocono Pines","PA","41.116737","-75.46037","-5","1" +"18351","Portland","PA","40.920622","-75.09773","-5","1" +"18352","Reeders","PA","40.986265","-75.348026","-5","1" +"18353","Saylorsburg","PA","40.906654","-75.35881","-5","1" +"18354","Sciota","PA","40.922005","-75.32185","-5","1" +"18355","Scotrun","PA","41.074757","-75.36259","-5","1" +"18356","Shawnee On Delaware","PA","41.010333","-75.09995","-5","1" +"18357","Skytop","PA","41.231091","-75.23884","-5","1" +"18360","Stroudsburg","PA","40.98314","-75.26026","-5","1" +"18370","Swiftwater","PA","41.095437","-75.3191","-5","1" +"18371","Tamiment","PA","41.340936","-75.024055","-5","1" +"18372","Tannersville","PA","41.048423","-75.31865","-5","1" +"18373","Unity House","PA","41.340936","-75.024055","-5","1" +"18377","Dingman","PA","41.31514","-74.95183","-5","1" +"18401","Aldenville","PA","41.615989","-75.274708","-5","1" +"18403","Archbald","PA","41.493381","-75.54909","-5","1" +"18405","Beach Lake","PA","41.598906","-75.10381","-5","1" +"18407","Carbondale","PA","41.583517","-75.51015","-5","1" +"18410","Chinchilla","PA","41.486527","-75.693335","-5","1" +"18411","Clarks Summit","PA","41.485845","-75.71134","-5","1" +"18413","Clifford","PA","41.64872","-75.59722","-5","1" +"18414","Dalton","PA","41.537933","-75.73826","-5","1" +"18415","Damascus","PA","41.743598","-75.12383","-5","1" +"18416","Elmhurst","PA","41.375602","-75.547966","-5","1" +"18417","Equinunk","PA","41.800226","-75.20349","-5","1" +"18419","Factoryville","PA","41.568872","-75.79296","-5","1" +"18420","Fleetville","PA","41.597115","-75.71102","-5","1" +"18421","Forest City","PA","41.653139","-75.46199","-5","1" +"18424","Gouldsboro","PA","41.251286","-75.49121","-5","1" +"18425","Greeley","PA","41.419116","-75.00683","-5","1" +"18426","Greentown","PA","41.337195","-75.27069","-5","1" +"18427","Hamlin","PA","41.422497","-75.335384","-5","1" +"18428","Hawley","PA","41.427945","-75.13473","-5","1" +"18430","Herrick Center","PA","41.759285","-75.50111","-5","1" +"18431","Honesdale","PA","41.60032","-75.25102","-5","1" +"18433","Jermyn","PA","41.550591","-75.56795","-5","1" +"18434","Jessup","PA","41.471937","-75.56605","-5","1" +"18435","Lackawaxen","PA","41.497511","-75.01149","-5","1" +"18436","Lake Ariel","PA","41.426197","-75.39395","-5","1" +"18437","Lake Como","PA","41.866271","-75.33611","-5","1" +"18438","Lakeville","PA","41.429411","-75.24702","-5","1" +"18439","Lakewood","PA","41.825884","-75.34132","-5","1" +"18440","La Plume","PA","41.551585","-75.767583","-5","1" +"18441","Lenoxville","PA","41.663906","-75.62979","-5","1" +"18443","Milanville","PA","41.656499","-75.11552","-5","1" +"18444","Moscow","PA","41.344794","-75.52671","-5","1" +"18445","Newfoundland","PA","41.286968","-75.36218","-5","1" +"18446","Nicholson","PA","41.64181","-75.74693","-5","1" +"18447","Olyphant","PA","41.47785","-75.60486","-5","1" +"18448","Olyphant","PA","41.46488","-75.596231","-5","1" +"18449","Orson","PA","41.615989","-75.274708","-5","1" +"18451","Paupack","PA","41.404263","-75.23826","-5","1" +"18452","Peckville","PA","41.48188","-75.58669","-5","1" +"18453","Pleasant Mount","PA","41.75098","-75.37109","-5","1" +"18454","Poyntelle","PA","41.615989","-75.274708","-5","1" +"18455","Preston Park","PA","41.880371","-75.36086","-5","1" +"18456","Prompton","PA","41.606185","-75.33971","-5","1" +"18457","Rowland","PA","41.471736","-75.04617","-5","1" +"18458","Shohola","PA","41.408589","-74.92544","-5","1" +"18459","South Canaan","PA","41.515012","-75.40884","-5","1" +"18460","South Sterling","PA","41.255644","-75.34474","-5","1" +"18461","Starlight","PA","41.938498","-75.34499","-5","1" +"18462","Starrucca","PA","41.8914","-75.43221","-5","1" +"18463","Sterling","PA","41.376953","-75.31601","-5","1" +"18464","Tafton","PA","41.414421","-75.18585","-5","1" +"18465","Thompson","PA","41.839349","-75.50841","-5","1" +"18466","Tobyhanna","PA","41.19012","-75.36779","-5","1" +"18469","Tyler Hill","PA","41.694366","-75.13718","-5","1" +"18470","Union Dale","PA","41.722929","-75.5417","-5","1" +"18471","Waverly","PA","41.527134","-75.70629","-5","1" +"18472","Waymart","PA","41.579472","-75.39613","-5","1" +"18473","White Mills","PA","41.525207","-75.20779","-5","1" +"18501","Scranton","PA","41.401881","-75.637626","-5","1" +"18502","Scranton","PA","41.350303","-75.689965","-5","1" +"18503","Scranton","PA","41.41018","-75.66588","-5","1" +"18504","Scranton","PA","41.414979","-75.6879","-5","1" +"18505","Scranton","PA","41.39208","-75.66603","-5","1" +"18507","Moosic","PA","41.35838","-75.71228","-5","1" +"18508","Scranton","PA","41.439329","-75.66187","-5","1" +"18509","Scranton","PA","41.42818","-75.64726","-5","1" +"18510","Scranton","PA","41.40918","-75.64508","-5","1" +"18512","Scranton","PA","41.427199","-75.61821","-5","1" +"18514","Scranton","PA","41.401881","-75.637626","-5","1" +"18515","Scranton","PA","41.403529","-75.706485","-5","1" +"18517","Taylor","PA","41.391279","-75.71535","-5","1" +"18518","Old Forge","PA","41.369679","-75.73829","-5","1" +"18519","Dickson City","PA","41.46213","-75.62478","-5","1" +"18522","Scranton","PA","41.401881","-75.637626","-5","1" +"18540","Scranton","PA","41.401881","-75.637626","-5","1" +"18577","Scranton","PA","41.401881","-75.637626","-5","1" +"18601","Beach Haven","PA","41.067712","-76.17626","-5","1" +"18602","Bear Creek","PA","41.184986","-75.75144","-5","1" +"18603","Berwick","PA","41.061356","-76.24934","-5","1" +"18610","Blakeslee","PA","41.057574","-75.53909","-5","1" +"18611","Cambra","PA","41.196076","-76.30735","-5","1" +"18612","Dallas","PA","41.345579","-75.97596","-5","1" +"18614","Dushore","PA","41.501249","-76.38889","-5","1" +"18615","Falls","PA","41.449135","-75.85774","-5","1" +"18616","Forksville","PA","41.511462","-76.6237","-5","1" +"18617","Glen Lyon","PA","41.175582","-76.07455","-5","1" +"18618","Harveys Lake","PA","41.37649","-76.03662","-5","1" +"18619","Hillsgrove","PA","41.448101","-76.6963","-5","1" +"18621","Hunlock Creek","PA","41.257193","-76.08882","-5","1" +"18622","Huntington Mills","PA","41.2044","-76.27211","-5","1" +"18623","Laceyville","PA","41.653217","-76.1487","-5","1" +"18624","Lake Harmony","PA","41.058352","-75.60137","-5","1" +"18625","Lake Winola","PA","41.509364","-75.85458","-5","1" +"18626","Laporte","PA","41.421281","-76.49446","-5","1" +"18627","Lehman","PA","41.316584","-76.021037","-5","1" +"18628","Lopez","PA","41.417231","-76.30865","-5","1" +"18629","Mehoopany","PA","41.555944","-76.13179","-5","1" +"18630","Meshoppen","PA","41.653604","-76.03178","-5","1" +"18631","Mifflinville","PA","41.028617","-76.30717","-5","1" +"18632","Mildred","PA","41.476652","-76.38074","-5","1" +"18634","Nanticoke","PA","41.197908","-76.00325","-5","1" +"18635","Nescopeck","PA","41.038241","-76.20682","-5","1" +"18636","Noxen","PA","41.402035","-76.07007","-5","1" +"18638","Solebury","PA","40.384588","-75.058245","-5","1" +"18640","Pittston","PA","41.317242","-75.77942","-5","1" +"18641","Pittston","PA","41.333035","-75.74189","-5","1" +"18642","Duryea","PA","41.348939","-75.76279","-5","1" +"18643","Pittston","PA","41.337585","-75.81587","-5","1" +"18644","Wyoming","PA","41.31943","-75.85208","-5","1" +"18651","Plymouth","PA","41.244281","-75.94878","-5","1" +"18653","Ransom","PA","41.393881","-75.82447","-5","1" +"18654","Shawanese","PA","41.350053","-76.03193","-5","1" +"18655","Shickshinny","PA","41.184223","-76.19361","-5","1" +"18656","Sweet Valley","PA","41.310649","-76.19316","-5","1" +"18657","Tunkhannock","PA","41.535917","-75.95006","-5","1" +"18660","Wapwallopen","PA","41.098371","-76.06397","-5","1" +"18661","White Haven","PA","41.082188","-75.75965","-5","1" +"18672","Bridgeton","PA","40.540232","-75.104872","-5","1" +"18690","Dallas","PA","41.272248","-75.880146","-5","1" +"18701","Wilkes Barre","PA","41.243181","-75.88438","-5","1" +"18702","Wilkes Barre","PA","41.236331","-75.87254","-5","1" +"18703","Wilkes Barre","PA","41.242081","-75.88569","-5","1" +"18704","Kingston","PA","41.274748","-75.89076","-5","1" +"18705","Wilkes Barre","PA","41.268231","-75.84569","-5","1" +"18706","Wilkes Barre","PA","41.209869","-75.91781","-5","1" +"18707","Mountain Top","PA","41.133482","-75.9194","-5","1" +"18708","Shavertown","PA","41.305822","-75.94148","-5","1" +"18709","Luzerne","PA","41.28328","-75.89369","-5","1" +"18710","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18711","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18715","Almedia","PA","41.016832","-76.377114","-5","1" +"18761","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18762","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18763","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18764","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18765","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18766","Wilkes Barre","PA","41.244781","-75.88959","-5","1" +"18767","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18768","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18769","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18773","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18774","Wilkes Barre","PA","41.272248","-75.880146","-5","1" +"18801","Montrose","PA","41.830406","-75.9179","-5","1" +"18810","Athens","PA","41.949723","-76.50508","-5","1" +"18812","Brackney","PA","41.964875","-75.95528","-5","1" +"18813","Brooklyn","PA","41.753339","-75.80831","-5","1" +"18814","Burlington","PA","41.782906","-76.60854","-5","1" +"18815","Camptown","PA","41.77197","-76.521266","-5","1" +"18816","Dimock","PA","41.747232","-75.89424","-5","1" +"18817","East Smithfield","PA","41.875402","-76.63313","-5","1" +"18818","Friendsville","PA","41.909808","-76.04473","-5","1" +"18820","Gibson","PA","41.803936","-75.64431","-5","1" +"18821","Great Bend","PA","41.977241","-75.74391","-5","1" +"18822","Hallstead","PA","41.951797","-75.77536","-5","1" +"18823","Harford","PA","41.784395","-75.70091","-5","1" +"18824","Hop Bottom","PA","41.708207","-75.7846","-5","1" +"18825","Jackson","PA","41.822157","-75.59506","-5","1" +"18826","Kingsley","PA","41.738688","-75.72679","-5","1" +"18827","Lanesboro","PA","41.963293","-75.58203","-5","1" +"18828","Lawton","PA","41.786507","-76.07042","-5","1" +"18829","Le Raysville","PA","41.837903","-76.17415","-5","1" +"18830","Little Meadows","PA","41.957125","-76.11639","-5","1" +"18831","Milan","PA","41.899294","-76.60496","-5","1" +"18832","Monroeton","PA","41.702433","-76.55565","-5","1" +"18833","New Albany","PA","41.5932","-76.46516","-5","1" +"18834","New Milford","PA","41.853082","-75.72077","-5","1" +"18837","Rome","PA","41.918757","-76.29687","-5","1" +"18839","Rushville","PA","41.803273","-76.11934","-5","1" +"18840","Sayre","PA","41.983801","-76.52578","-5","1" +"18842","South Gibson","PA","41.746871","-75.61752","-5","1" +"18843","South Montrose","PA","41.8237","-75.88314","-5","1" +"18844","Springville","PA","41.695782","-75.91836","-5","1" +"18845","Stevensville","PA","41.797851","-76.18303","-5","1" +"18846","Sugar Run","PA","41.600392","-76.24243","-5","1" +"18847","Susquehanna","PA","41.944334","-75.57241","-5","1" +"18848","Towanda","PA","41.762543","-76.45298","-5","1" +"18850","Ulster","PA","41.849392","-76.5021","-5","1" +"18851","Warren Center","PA","41.928722","-76.16896","-5","1" +"18853","Wyalusing","PA","41.719942","-76.26615","-5","1" +"18854","Wysox","PA","41.781522","-76.35906","-5","1" +"18901","Doylestown","PA","40.317473","-75.12854","-5","1" +"18903","Doylestown","PA","40.339307","-75.152176","-5","1" +"18910","Bedminster","PA","40.328645","-75.10278","-5","1" +"18911","Blooming Glen","PA","40.328645","-75.10278","-5","1" +"18912","Buckingham","PA","40.309942","-75.074252","-5","1" +"18913","Carversville","PA","40.376499","-75.04129","-5","1" +"18914","Chalfont","PA","40.282406","-75.20657","-5","1" +"18915","Colmar","PA","40.272177","-75.25783","-5","1" +"18916","Danboro","PA","40.328645","-75.10278","-5","1" +"18917","Dublin","PA","40.37327","-75.20246","-5","1" +"18918","Earlington","PA","40.320036","-75.374155","-5","1" +"18920","Erwinna","PA","40.500115","-75.07901","-5","1" +"18921","Ferndale","PA","40.328645","-75.10278","-5","1" +"18922","Forest Grove","PA","40.328645","-75.10278","-5","1" +"18923","Fountainville","PA","40.346926","-75.16497","-5","1" +"18924","Franconia","PA","40.308116","-75.358575","-5","1" +"18925","Furlong","PA","40.282168","-75.06283","-5","1" +"18926","Gardenville","PA","40.39473","-75.098468","-5","1" +"18927","Hilltown","PA","40.324823","-75.2436","-5","1" +"18928","Holicong","PA","40.335974","-75.04288","-5","1" +"18929","Jamison","PA","40.256648","-75.09357","-5","1" +"18930","Kintnersville","PA","40.537142","-75.21189","-5","1" +"18931","Lahaska","PA","40.328645","-75.10278","-5","1" +"18932","Line Lexington","PA","40.289372","-75.25572","-5","1" +"18933","Lumberville","PA","40.328645","-75.10278","-5","1" +"18934","Mechanicsville","PA","40.349443","-75.067622","-5","1" +"18935","Milford Square","PA","40.328645","-75.10278","-5","1" +"18936","Montgomeryville","PA","40.223216","-75.22829","-5","1" +"18938","New Hope","PA","40.354735","-74.99319","-5","1" +"18940","Newtown","PA","40.246802","-74.93912","-5","1" +"18942","Ottsville","PA","40.466205","-75.16183","-5","1" +"18943","Penns Park","PA","40.268981","-75.009401","-5","1" +"18944","Perkasie","PA","40.379029","-75.25926","-5","1" +"18945","Plumstead","PA","40.431382","-75.100804","-5","1" +"18946","Pineville","PA","40.271104","-75.062204","-5","1" +"18947","Pipersville","PA","40.426391","-75.11842","-5","1" +"18949","Plumsteadville","PA","40.38805","-75.142522","-5","1" +"18950","Point Pleasant","PA","40.416516","-75.074832","-5","1" +"18951","Quakertown","PA","40.445203","-75.34838","-5","1" +"18953","Revere","PA","40.328645","-75.10278","-5","1" +"18954","Richboro","PA","40.214652","-75.00379","-5","1" +"18955","Richlandtown","PA","40.478742","-75.31938","-5","1" +"18956","Rushland","PA","40.262783","-75.01568","-5","1" +"18957","Salford","PA","40.302945","-75.448579","-5","1" +"18958","Salfordville","PA","40.290357","-75.435539","-5","1" +"18960","Sellersville","PA","40.361206","-75.31101","-5","1" +"18962","Silverdale","PA","40.346017","-75.26953","-5","1" +"18963","Solebury","PA","40.328645","-75.10278","-5","1" +"18964","Souderton","PA","40.305176","-75.325","-5","1" +"18966","Southampton","PA","40.184745","-75.00831","-5","1" +"18968","Spinnerstown","PA","40.328645","-75.10278","-5","1" +"18969","Telford","PA","40.32635","-75.34589","-5","1" +"18970","Trumbauersville","PA","40.412771","-75.38625","-5","1" +"18971","Tylersport","PA","40.34698","-75.376985","-5","1" +"18972","Upper Black Eddy","PA","40.535227","-75.12642","-5","1" +"18974","Warminster","PA","40.211241","-75.0887","-5","1" +"18976","Warrington","PA","40.240295","-75.13458","-5","1" +"18977","Washington Crossing","PA","40.289939","-74.87885","-5","1" +"18979","Woxall","PA","40.211896","-75.35586","-5","1" +"18980","Wycombe","PA","40.28083","-75.01422","-5","1" +"18981","Zionhill","PA","40.328645","-75.10278","-5","1" +"18991","Warminster","PA","40.328645","-75.10278","-5","1" +"19001","Abington","PA","40.127907","-75.12695","-5","1" +"19002","Ambler","PA","40.169608","-75.21158","-5","1" +"19003","Ardmore","PA","40.000861","-75.29694","-5","1" +"19004","Bala Cynwyd","PA","40.012862","-75.23309","-5","1" +"19006","Huntingdon Valley","PA","40.129509","-75.06115","-5","1" +"19007","Bristol","PA","40.108943","-74.85548","-5","1" +"19008","Broomall","PA","39.974378","-75.36083","-5","1" +"19009","Bryn Athyn","PA","40.139539","-75.06716","-5","1" +"19010","Bryn Mawr","PA","40.02371","-75.32764","-5","1" +"19012","Cheltenham","PA","40.060304","-75.10439","-5","1" +"19013","Chester","PA","39.84697","-75.37444","-5","1" +"19014","Aston","PA","39.864761","-75.4326","-5","1" +"19015","Brookhaven","PA","39.864929","-75.38761","-5","1" +"19016","Chester","PA","39.934047","-75.405987","-5","1" +"19017","Chester Heights","PA","39.883911","-75.466949","-5","1" +"19018","Primos","PA","39.922862","-75.29639","-5","1" +"19019","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19020","Bensalem","PA","40.10386","-74.93734","-5","1" +"19021","Croydon","PA","40.093443","-74.89912","-5","1" +"19022","Crum Lynne","PA","39.862712","-75.33958","-5","1" +"19023","Darby","PA","39.916262","-75.26517","-5","1" +"19025","Dresher","PA","40.149164","-75.16047","-5","1" +"19026","Drexel Hill","PA","39.949962","-75.30184","-5","1" +"19027","Elkins Park","PA","40.072293","-75.12406","-5","1" +"19028","Edgemont","PA","39.934047","-75.405987","-5","1" +"19029","Essington","PA","39.866912","-75.29156","-5","1" +"19030","Fairless Hills","PA","40.175504","-74.84611","-5","1" +"19031","Flourtown","PA","40.107743","-75.21334","-5","1" +"19032","Folcroft","PA","39.893212","-75.28088","-5","1" +"19033","Folsom","PA","39.890462","-75.32755","-5","1" +"19034","Fort Washington","PA","40.13477","-75.20374","-5","1" +"19035","Gladwyne","PA","40.042444","-75.28002","-5","1" +"19036","Glenolden","PA","39.902045","-75.29371","-5","1" +"19037","Glen Riddle Lima","PA","39.934047","-75.405987","-5","1" +"19038","Glenside","PA","40.10346","-75.16829","-5","1" +"19039","Gradyville","PA","39.88211","-75.337234","-5","1" +"19040","Hatboro","PA","40.178076","-75.1067","-5","1" +"19041","Haverford","PA","40.012661","-75.3088","-5","1" +"19043","Holmes","PA","39.899812","-75.30893","-5","1" +"19044","Horsham","PA","40.184758","-75.14386","-5","1" +"19046","Jenkintown","PA","40.09811","-75.10949","-5","1" +"19047","Langhorne","PA","40.173563","-74.91203","-5","1" +"19048","Langhorne","PA","40.173509","-74.92461","-5","1" +"19049","Langhorne","PA","40.328645","-75.10278","-5","1" +"19050","Lansdowne","PA","39.939609","-75.26453","-5","1" +"19052","Lenni","PA","39.894161","-75.445589","-5","1" +"19053","Feasterville Trevose","PA","40.148759","-74.98228","-5","1" +"19054","Levittown","PA","40.166859","-74.82066","-5","1" +"19055","Levittown","PA","40.149009","-74.83617","-5","1" +"19056","Levittown","PA","40.151509","-74.88576","-5","1" +"19057","Levittown","PA","40.142059","-74.85821","-5","1" +"19058","Levittown","PA","40.328645","-75.10278","-5","1" +"19059","Levittown","PA","40.328645","-75.10278","-5","1" +"19061","Marcus Hook","PA","39.832762","-75.44063","-5","1" +"19063","Media","PA","39.916078","-75.40251","-5","1" +"19064","Springfield","PA","39.929511","-75.33562","-5","1" +"19065","Media","PA","39.921061","-75.386136","-5","1" +"19066","Merion Station","PA","40.003762","-75.2493","-5","1" +"19067","Morrisville","PA","40.214661","-74.81812","-5","1" +"19070","Morton","PA","39.906312","-75.32489","-5","1" +"19072","Narberth","PA","40.014541","-75.25805","-5","1" +"19073","Newtown Square","PA","39.98451","-75.41265","-5","1" +"19074","Norwood","PA","39.888312","-75.29717","-5","1" +"19075","Oreland","PA","40.11461","-75.18632","-5","1" +"19076","Prospect Park","PA","39.884562","-75.30847","-5","1" +"19078","Ridley Park","PA","39.877262","-75.32272","-5","1" +"19079","Sharon Hill","PA","39.903312","-75.26939","-5","1" +"19080","Wayne","PA","40.043201","-75.357678","-5","1" +"19081","Swarthmore","PA","39.897562","-75.34658","-5","1" +"19082","Upper Darby","PA","39.958512","-75.26856","-5","1" +"19083","Havertown","PA","39.978728","-75.30861","-5","1" +"19085","Villanova","PA","40.038477","-75.3473","-5","1" +"19086","Wallingford","PA","39.888913","-75.37006","-5","1" +"19087","Wayne","PA","40.058808","-75.40069","-5","1" +"19088","Wayne","PA","39.934047","-75.405987","-5","1" +"19089","Wayne","PA","40.043399","-75.357308","-5","1" +"19090","Willow Grove","PA","40.145859","-75.1216","-5","1" +"19091","Media","PA","39.934047","-75.405987","-5","1" +"19092","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19093","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19094","Woodlyn","PA","39.874612","-75.34542","-5","1" +"19095","Wyncote","PA","40.08786","-75.14707","-5","1" +"19096","Wynnewood","PA","39.992345","-75.27624","-5","1" +"19098","Holmes","PA","39.895362","-75.310731","-5","1" +"19099","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19101","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19102","Philadelphia","PA","39.952962","-75.16558","-5","1" +"19103","Philadelphia","PA","39.952162","-75.17406","-5","1" +"19104","Philadelphia","PA","39.961612","-75.19957","-5","1" +"19105","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19106","Philadelphia","PA","39.951062","-75.14589","-5","1" +"19107","Philadelphia","PA","39.952112","-75.15853","-5","1" +"19108","Philadelphia","PA","39.959662","-75.1605","-5","1" +"19109","Philadelphia","PA","39.949612","-75.163722","-5","1" +"19110","Philadelphia","PA","39.950212","-75.163572","-5","1" +"19111","Philadelphia","PA","40.057661","-75.08018","-5","1" +"19112","Philadelphia","PA","39.895677","-75.19044","-5","1" +"19113","Philadelphia","PA","39.874179","-75.26353","-5","1" +"19114","Philadelphia","PA","40.064257","-75.00155","-5","1" +"19115","Philadelphia","PA","40.09261","-75.04118","-5","1" +"19116","Philadelphia","PA","40.117413","-75.0154","-5","1" +"19118","Philadelphia","PA","40.07236","-75.20772","-5","1" +"19119","Philadelphia","PA","40.053511","-75.18858","-5","1" +"19120","Philadelphia","PA","40.033944","-75.12118","-5","1" +"19121","Philadelphia","PA","39.981062","-75.1745","-5","1" +"19122","Philadelphia","PA","39.977662","-75.14336","-5","1" +"19123","Philadelphia","PA","39.964012","-75.14764","-5","1" +"19124","Philadelphia","PA","40.017362","-75.08769","-5","1" +"19125","Philadelphia","PA","39.978162","-75.12565","-5","1" +"19126","Philadelphia","PA","40.055411","-75.13793","-5","1" +"19127","Philadelphia","PA","40.026626","-75.22311","-5","1" +"19128","Philadelphia","PA","40.038944","-75.22104","-5","1" +"19129","Philadelphia","PA","40.011562","-75.1839","-5","1" +"19130","Philadelphia","PA","39.968262","-75.17222","-5","1" +"19131","Philadelphia","PA","39.981112","-75.22486","-5","1" +"19132","Philadelphia","PA","39.995412","-75.16977","-5","1" +"19133","Philadelphia","PA","39.992862","-75.14054","-5","1" +"19134","Philadelphia","PA","39.991712","-75.11116","-5","1" +"19135","Philadelphia","PA","40.023611","-75.04966","-5","1" +"19136","Philadelphia","PA","40.041111","-75.02644","-5","1" +"19137","Philadelphia","PA","40.000262","-75.07404","-5","1" +"19138","Philadelphia","PA","40.055861","-75.15654","-5","1" +"19139","Philadelphia","PA","39.961812","-75.23003","-5","1" +"19140","Philadelphia","PA","40.012212","-75.14503","-5","1" +"19141","Philadelphia","PA","40.035778","-75.1447","-5","1" +"19142","Philadelphia","PA","39.922612","-75.23453","-5","1" +"19143","Philadelphia","PA","39.944162","-75.22718","-5","1" +"19144","Philadelphia","PA","40.034111","-75.17203","-5","1" +"19145","Philadelphia","PA","39.922262","-75.18259","-5","1" +"19146","Philadelphia","PA","39.938512","-75.18067","-5","1" +"19147","Philadelphia","PA","39.936562","-75.15409","-5","1" +"19148","Philadelphia","PA","39.919812","-75.15803","-5","1" +"19149","Philadelphia","PA","40.037711","-75.06658","-5","1" +"19150","Philadelphia","PA","40.07226","-75.17106","-5","1" +"19151","Philadelphia","PA","39.975929","-75.25256","-5","1" +"19152","Philadelphia","PA","40.059611","-75.04837","-5","1" +"19153","Philadelphia","PA","39.898985","-75.23221","-5","1" +"19154","Philadelphia","PA","40.09146","-74.97719","-5","1" +"19155","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19156","Centerport","PA","40.48586","-76.009125","-5","1" +"19160","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19161","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19162","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19170","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19171","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19172","Philadelphia","PA","39.947321","-75.150011","-5","1" +"19173","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19175","Philadelphia","PA","39.990562","-75.12957","-5","1" +"19177","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19178","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19179","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19181","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19182","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19183","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19184","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19185","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19187","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19188","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19191","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19192","Philadelphia","PA","39.951112","-75.167622","-5","1" +"19193","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19194","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19196","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19197","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19244","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19255","Philadelphia","PA","40.001811","-75.11787","-5","1" +"19301","Paoli","PA","40.042252","-75.48357","-5","1" +"19310","Atglen","PA","39.9451","-75.97024","-5","1" +"19311","Avondale","PA","39.825643","-75.77244","-5","1" +"19312","Berwyn","PA","40.037958","-75.44986","-5","1" +"19316","Brandamore","PA","40.058565","-75.83584","-5","1" +"19317","Chadds Ford","PA","39.851803","-75.5961","-5","1" +"19318","Chatham","PA","39.852406","-75.811789","-5","1" +"19319","Cheyney","PA","39.928663","-75.52526","-5","1" +"19320","Coatesville","PA","39.978456","-75.82275","-5","1" +"19330","Cochranville","PA","39.872123","-75.91411","-5","1" +"19331","Concordville","PA","39.882274","-75.516529","-5","1" +"19333","Devon","PA","40.044858","-75.42174","-5","1" +"19335","Downingtown","PA","40.02342","-75.71389","-5","1" +"19339","Concordville","PA","39.934047","-75.405987","-5","1" +"19340","Concordville","PA","39.934047","-75.405987","-5","1" +"19341","Exton","PA","40.040505","-75.63425","-5","1" +"19342","Glen Mills","PA","39.897677","-75.50109","-5","1" +"19343","Glenmoore","PA","40.094621","-75.74602","-5","1" +"19344","Honey Brook","PA","40.078045","-75.88488","-5","1" +"19345","Immaculata","PA","40.030536","-75.565","-5","1" +"19346","Kelton","PA","39.983153","-75.748055","-5","1" +"19347","Kemblesville","PA","39.983153","-75.748055","-5","1" +"19348","Kennett Square","PA","39.858137","-75.71227","-5","1" +"19350","Landenberg","PA","39.768218","-75.78759","-5","1" +"19351","Lewisville","PA","39.983153","-75.748055","-5","1" +"19352","Lincoln University","PA","39.783675","-75.8944","-5","1" +"19353","Lionville","PA","40.013158","-75.499046","-5","1" +"19354","Lyndell","PA","40.058173","-75.743272","-5","1" +"19355","Malvern","PA","40.042957","-75.53221","-5","1" +"19357","Mendenhall","PA","39.983153","-75.748055","-5","1" +"19358","Modena","PA","39.962256","-75.80215","-5","1" +"19360","New London","PA","39.726143","-75.7857","-5","1" +"19362","Nottingham","PA","39.750999","-76.059","-5","1" +"19363","Oxford","PA","39.781938","-75.97458","-5","1" +"19365","Parkesburg","PA","39.961094","-75.92047","-5","1" +"19366","Pocopson","PA","39.983153","-75.748055","-5","1" +"19367","Pomeroy","PA","39.964795","-75.88285","-5","1" +"19369","Sadsburyville","PA","39.985257","-75.88984","-5","1" +"19370","Steelville","PA","39.983153","-75.748055","-5","1" +"19371","Suplee","PA","39.983153","-75.748055","-5","1" +"19372","Thorndale","PA","39.997469","-75.75964","-5","1" +"19373","Thornton","PA","39.899315","-75.5314","-5","1" +"19374","Toughkenamon","PA","39.830992","-75.7553","-5","1" +"19375","Unionville","PA","39.901177","-75.750203","-5","1" +"19376","Wagontown","PA","39.983153","-75.748055","-5","1" +"19380","West Chester","PA","39.983108","-75.59332","-5","1" +"19381","West Chester","PA","39.983153","-75.748055","-5","1" +"19382","West Chester","PA","39.940043","-75.59729","-5","1" +"19383","West Chester","PA","39.94545","-75.602401","-5","1" +"19390","West Grove","PA","39.820841","-75.84233","-5","1" +"19395","Westtown","PA","39.932821","-75.544822","-5","1" +"19397","Southeastern","PA","39.983153","-75.748055","-5","1" +"19398","Southeastern","PA","39.983153","-75.748055","-5","1" +"19399","Southeastern","PA","39.983153","-75.748055","-5","1" +"19401","Norristown","PA","40.123708","-75.33843","-5","1" +"19403","Norristown","PA","40.146069","-75.38378","-5","1" +"19404","Norristown","PA","40.211896","-75.35586","-5","1" +"19405","Bridgeport","PA","40.103208","-75.3405","-5","1" +"19406","King Of Prussia","PA","40.092941","-75.37525","-5","1" +"19407","Audubon","PA","40.211896","-75.35586","-5","1" +"19408","Eagleville","PA","40.156555","-75.413127","-5","1" +"19409","Fairview Village","PA","40.211896","-75.35586","-5","1" +"19420","Arcola","PA","40.152871","-75.456719","-5","1" +"19421","Birchrunville","PA","40.138889","-75.63332","-5","1" +"19422","Blue Bell","PA","40.157526","-75.27816","-5","1" +"19423","Cedars","PA","40.21735","-75.364973","-5","1" +"19424","Blue Bell","PA","40.211896","-75.35586","-5","1" +"19425","Chester Springs","PA","40.089905","-75.64124","-5","1" +"19426","Collegeville","PA","40.185637","-75.44873","-5","1" +"19428","Conshohocken","PA","40.077736","-75.30509","-5","1" +"19429","Conshohocken","PA","40.211896","-75.35586","-5","1" +"19430","Creamery","PA","40.185071","-75.419966","-5","1" +"19432","Devault","PA","40.079629","-75.559975","-5","1" +"19435","Frederick","PA","40.330348","-75.56937","-5","1" +"19436","Gwynedd","PA","40.201932","-75.25091","-5","1" +"19437","Gwynedd Valley","PA","40.183763","-75.26271","-5","1" +"19438","Harleysville","PA","40.270424","-75.38569","-5","1" +"19440","Hatfield","PA","40.278294","-75.29479","-5","1" +"19441","Harleysville","PA","40.211896","-75.35586","-5","1" +"19442","Kimberton","PA","40.146549","-75.617739","-5","1" +"19443","Kulpsville","PA","40.241004","-75.34392","-5","1" +"19444","Lafayette Hill","PA","40.087297","-75.2557","-5","1" +"19446","Lansdale","PA","40.237206","-75.29156","-5","1" +"19450","Lederach","PA","40.211896","-75.35586","-5","1" +"19451","Mainland","PA","40.211896","-75.35586","-5","1" +"19452","Miquon","PA","40.211896","-75.35586","-5","1" +"19453","Mont Clare","PA","40.137922","-75.50218","-5","1" +"19454","North Wales","PA","40.223524","-75.24731","-5","1" +"19455","North Wales","PA","40.211896","-75.35586","-5","1" +"19456","Oaks","PA","40.133355","-75.453631","-5","1" +"19457","Parker Ford","PA","40.204252","-75.58449","-5","1" +"19460","Phoenixville","PA","40.126271","-75.52341","-5","1" +"19462","Plymouth Meeting","PA","40.115959","-75.29257","-5","1" +"19464","Pottstown","PA","40.253496","-75.63481","-5","1" +"19465","Pottstown","PA","40.206057","-75.66107","-5","1" +"19468","Royersford","PA","40.200347","-75.53236","-5","1" +"19470","Saint Peters","PA","40.186707","-75.728759","-5","1" +"19472","Sassamansville","PA","40.339207","-75.57372","-5","1" +"19473","Schwenksville","PA","40.257069","-75.47097","-5","1" +"19474","Skippack","PA","40.222343","-75.4052","-5","1" +"19475","Spring City","PA","40.176858","-75.57621","-5","1" +"19477","Spring House","PA","40.185934","-75.232407","-5","1" +"19478","Spring Mount","PA","40.276511","-75.4582","-5","1" +"19480","Uwchland","PA","40.098032","-75.688005","-5","1" +"19481","Valley Forge","PA","40.092269","-75.453735","-5","1" +"19482","Valley Forge","PA","40.080323","-75.455408","-5","1" +"19483","Valley Forge","PA","40.211896","-75.35586","-5","1" +"19484","Valley Forge","PA","40.211896","-75.35586","-5","1" +"19485","Valley Forge","PA","40.211896","-75.35586","-5","1" +"19486","West Point","PA","40.203291","-75.301918","-5","1" +"19487","King Of Prussia","PA","39.983153","-75.748055","-5","1" +"19488","Norristown","PA","39.983153","-75.748055","-5","1" +"19489","Norristown","PA","39.983153","-75.748055","-5","1" +"19490","Worcester","PA","40.192881","-75.357555","-5","1" +"19492","Zieglerville","PA","40.281036","-75.486","-5","1" +"19493","Valley Forge","PA","39.983153","-75.748055","-5","1" +"19494","Valley Forge","PA","39.983153","-75.748055","-5","1" +"19495","Valley Forge","PA","39.983153","-75.748055","-5","1" +"19496","Valley Forge","PA","39.983153","-75.748055","-5","1" +"19501","Adamstown","PA","40.241588","-76.05765","-5","1" +"19503","Bally","PA","40.401044","-75.58836","-5","1" +"19504","Barto","PA","40.404892","-75.58992","-5","1" +"19505","Bechtelsville","PA","40.375925","-75.62617","-5","1" +"19506","Bernville","PA","40.453886","-76.12911","-5","1" +"19507","Bethel","PA","40.488558","-76.27269","-5","1" +"19508","Birdsboro","PA","40.267165","-75.8254","-5","1" +"19510","Blandon","PA","40.444786","-75.88034","-5","1" +"19511","Bowers","PA","40.48773","-75.7393","-5","1" +"19512","Boyertown","PA","40.338497","-75.6632","-5","1" +"19516","Centerport","PA","40.486726","-76.00719","-5","1" +"19517","Dauberville","PA","40.407173","-75.984901","-5","1" +"19518","Douglassville","PA","40.273179","-75.73931","-5","1" +"19519","Earlville","PA","40.317896","-75.73144","-5","1" +"19520","Elverson","PA","40.157078","-75.80669","-5","1" +"19522","Fleetwood","PA","40.447093","-75.81997","-5","1" +"19523","Geigertown","PA","40.203142","-75.83588","-5","1" +"19524","Robeson","PA","40.248684","-75.858731","-5","1" +"19525","Gilbertsville","PA","40.311246","-75.594","-5","1" +"19526","Hamburg","PA","40.545014","-75.98463","-5","1" +"19529","Kempton","PA","40.625739","-75.83474","-5","1" +"19530","Kutztown","PA","40.535102","-75.77566","-5","1" +"19533","Leesport","PA","40.435509","-75.98937","-5","1" +"19534","Lenhartsville","PA","40.574033","-75.87434","-5","1" +"19535","Limekiln","PA","40.335593","-75.801009","-5","1" +"19536","Lyon Station","PA","40.480194","-75.75698","-5","1" +"19538","Maxatawny","PA","40.569818","-75.740942","-5","1" +"19539","Mertztown","PA","40.497369","-75.68225","-5","1" +"19540","Mohnton","PA","40.250592","-75.96683","-5","1" +"19541","Mohrsville","PA","40.479447","-76.02438","-5","1" +"19542","Monocacy Station","PA","40.260992","-75.768437","-5","1" +"19543","Morgantown","PA","40.167618","-75.89259","-5","1" +"19544","Mount Aetna","PA","40.418864","-76.29564","-5","1" +"19545","New Berlinville","PA","40.340392","-75.63082","-5","1" +"19546","Cumru","PA","40.254667","-75.951709","-5","1" +"19547","Oley","PA","40.385143","-75.76372","-5","1" +"19548","Pine Forge","PA","40.407173","-75.984901","-5","1" +"19549","Port Clinton","PA","40.580744","-76.02559","-5","1" +"19550","Rehrersburg","PA","40.456862","-76.24373","-5","1" +"19551","Robesonia","PA","40.357034","-76.13741","-5","1" +"19554","Shartlesville","PA","40.513794","-76.10833","-5","1" +"19555","Shoemakersville","PA","40.494943","-75.96466","-5","1" +"19557","Stony Run","PA","40.613868","-75.814984","-5","1" +"19559","Strausstown","PA","40.492053","-76.1841","-5","1" +"19560","Temple","PA","40.407243","-75.91163","-5","1" +"19562","Topton","PA","40.502511","-75.70315","-5","1" +"19564","Virginville","PA","40.526803","-75.869653","-5","1" +"19565","Wernersville","PA","40.327974","-76.08921","-5","1" +"19567","Womelsdorf","PA","40.373285","-76.20054","-5","1" +"19601","Reading","PA","40.348092","-75.93577","-5","1" +"19602","Reading","PA","40.329992","-75.91962","-5","1" +"19603","Reading","PA","40.388442","-75.963055","-5","1" +"19604","Reading","PA","40.355092","-75.91205","-5","1" +"19605","Reading","PA","40.390943","-75.9375","-5","1" +"19606","Reading","PA","40.327741","-75.87002","-5","1" +"19607","Reading","PA","40.302492","-75.95565","-5","1" +"19608","Reading","PA","40.312842","-76.02422","-5","1" +"19609","Reading","PA","40.324694","-75.9921","-5","1" +"19610","Reading","PA","40.335023","-75.97099","-5","1" +"19611","Reading","PA","40.327792","-75.94215","-5","1" +"19612","Reading","PA","40.4389","-75.885303","-5","1" +"19640","Reading","PA","40.407173","-75.984901","-5","1" +"19650","Alsace","PA","40.394884","-75.86638","-5","1" +"19685","Muhlenberg","PA","40.378451","-75.917477","-5","1" +"19700","Delaware City","DE","39.570322","-75.590662","-5","1" +"19701","Bear","DE","39.598203","-75.69945","-5","1" +"19702","Newark","DE","39.626297","-75.71386","-5","1" +"19703","Claymont","DE","39.800945","-75.46455","-5","1" +"19706","Delaware City","DE","39.573744","-75.59204","-5","1" +"19707","Hockessin","DE","39.784014","-75.68586","-5","1" +"19708","Kirkwood","DE","39.577567","-75.690069","-5","1" +"19709","Middletown","DE","39.479602","-75.6932","-5","1" +"19710","Montchanin","DE","39.788562","-75.58881","-5","1" +"19711","Newark","DE","39.700561","-75.7431","-5","1" +"19712","Newark","DE","39.564499","-75.597047","-5","1" +"19713","Newark","DE","39.669211","-75.71796","-5","1" +"19714","Newark","DE","39.564499","-75.597047","-5","1" +"19715","Newark","DE","39.564499","-75.597047","-5","1" +"19716","Newark","DE","39.564499","-75.597047","-5","1" +"19717","Newark","DE","39.564499","-75.597047","-5","1" +"19718","Newark","DE","39.564499","-75.597047","-5","1" +"19720","New Castle","DE","39.669219","-75.59003","-5","1" +"19721","New Castle","DE","39.564499","-75.597047","-5","1" +"19725","Newark","DE","39.564499","-75.597047","-5","1" +"19726","Newark","DE","39.564499","-75.597047","-5","1" +"19730","Odessa","DE","39.456484","-75.65976","-5","1" +"19731","Port Penn","DE","39.518164","-75.57656","-5","1" +"19732","Rockland","DE","39.794496","-75.57433","-5","1" +"19733","Saint Georges","DE","39.555794","-75.65058","-5","1" +"19734","Townsend","DE","39.386601","-75.66801","-5","1" +"19735","Winterthur","DE","39.794396","-75.597598","-5","1" +"19736","Yorklyn","DE","39.790911","-75.64934","-5","1" +"19743","Spring Mount","PA","40.276386","-75.462796","-5","1" +"19766","Delaware City","DE","39.567092","-75.601491","-5","1" +"19801","Wilmington","DE","39.738563","-75.54833","-5","1" +"19802","Wilmington","DE","39.756213","-75.53312","-5","1" +"19803","Wilmington","DE","39.793962","-75.53401","-5","1" +"19804","Wilmington","DE","39.721062","-75.60806","-5","1" +"19805","Wilmington","DE","39.745377","-75.58251","-5","1" +"19806","Wilmington","DE","39.758563","-75.56413","-5","1" +"19807","Wilmington","DE","39.787512","-75.60256","-5","1" +"19808","Wilmington","DE","39.734279","-75.6631","-5","1" +"19809","Wilmington","DE","39.771663","-75.49656","-5","1" +"19810","Wilmington","DE","39.817645","-75.50242","-5","1" +"19814","Newport","DE","39.713625","-75.596283","-5","1" +"19815","Amity","PA","40.318615","-75.755807","-5","1" +"19850","Wilmington","DE","39.564499","-75.597047","-5","1" +"19853","Schuylkill","PA","40.088156","-75.480887","-5","1" +"19880","Wilmington","DE","39.564499","-75.597047","-5","1" +"19884","Wilmington","DE","39.564499","-75.597047","-5","1" +"19885","Wilmington","DE","39.564499","-75.597047","-5","1" +"19886","Wilmington","DE","39.564499","-75.597047","-5","1" +"19887","Wilmington","DE","39.564499","-75.597047","-5","1" +"19889","Wilmington","DE","39.564499","-75.597047","-5","1" +"19890","Wilmington","DE","39.564499","-75.597047","-5","1" +"19891","Wilmington","DE","39.564499","-75.597047","-5","1" +"19892","Wilmington","DE","39.564499","-75.597047","-5","1" +"19893","Wilmington","DE","39.564499","-75.597047","-5","1" +"19894","Wilmington","DE","39.564499","-75.597047","-5","1" +"19895","Wilmington","DE","39.564499","-75.597047","-5","1" +"19896","Wilmington","DE","39.564499","-75.597047","-5","1" +"19897","Wilmington","DE","39.564499","-75.597047","-5","1" +"19898","Wilmington","DE","39.564499","-75.597047","-5","1" +"19899","Wilmington","DE","39.734792","-75.624617","-5","1" +"19901","Dover","DE","39.16426","-75.51163","-5","1" +"19902","Dover AFB","DE","39.131958","-75.46953","-5","1" +"19903","Dover","DE","39.10868","-75.448023","-5","1" +"19904","Dover","DE","39.161639","-75.5587","-5","1" +"19905","Dover","DE","39.10868","-75.448023","-5","1" +"19925","Upper Uwchlan","PA","40.084337","-75.680797","-5","1" +"19930","Bethany Beach","DE","38.536354","-75.06062","-5","1" +"19931","Bethel","DE","38.570238","-75.6147","-5","1" +"19933","Bridgeville","DE","38.73635","-75.60807","-5","1" +"19934","Camden Wyoming","DE","39.094699","-75.58871","-5","1" +"19936","Cheswold","DE","39.218448","-75.584848","-5","1" +"19938","Clayton","DE","39.265066","-75.6807","-5","1" +"19939","Dagsboro","DE","38.557501","-75.21465","-5","1" +"19940","Delmar","DE","38.469655","-75.5669","-5","1" +"19941","Ellendale","DE","38.80136","-75.42595","-5","1" +"19942","Farmington","DE","38.868387","-75.57907","-5","1" +"19943","Felton","DE","39.011387","-75.58978","-5","1" +"19944","Fenwick Island","DE","38.459314","-75.05356","-5","1" +"19945","Frankford","DE","38.511469","-75.18364","-5","1" +"19946","Frederica","DE","39.037803","-75.46634","-5","1" +"19947","Georgetown","DE","38.676552","-75.39269","-5","1" +"19950","Greenwood","DE","38.818541","-75.60966","-5","1" +"19951","Harbeson","DE","38.682345","-75.23286","-5","1" +"19952","Harrington","DE","38.916908","-75.61343","-5","1" +"19953","Hartly","DE","39.150822","-75.70428","-5","1" +"19954","Houston","DE","38.909621","-75.51264","-5","1" +"19955","Kenton","DE","39.227313","-75.66549","-5","1" +"19956","Laurel","DE","38.549721","-75.55304","-5","1" +"19958","Lewes","DE","38.746207","-75.16282","-5","1" +"19960","Lincoln","DE","38.855872","-75.39889","-5","1" +"19961","Little Creek","DE","39.166323","-75.448289","-5","1" +"19962","Magnolia","DE","39.06517","-75.49858","-5","1" +"19963","Milford","DE","38.922806","-75.41449","-5","1" +"19964","Marydel","DE","39.098772","-75.73943","-5","1" +"19966","Millsboro","DE","38.601355","-75.2411","-5","1" +"19967","Millville","DE","38.54597","-75.11175","-5","1" +"19968","Milton","DE","38.772648","-75.28665","-5","1" +"19969","Nassau","DE","38.725562","-75.353387","-5","1" +"19970","Ocean View","DE","38.55044","-75.09928","-5","1" +"19971","Rehoboth Beach","DE","38.711512","-75.09677","-5","1" +"19973","Seaford","DE","38.643248","-75.61102","-5","1" +"19975","Selbyville","DE","38.463751","-75.15642","-5","1" +"19977","Smyrna","DE","39.29799","-75.59391","-5","1" +"19979","Viola","DE","39.0461","-75.57185","-5","1" +"19980","Woodside","DE","39.07027","-75.57057","-5","1" +"19999","Bethany Beach","DE","38.542771","-75.05666","-5","1" +"20001","Washington","DC","38.907711","-77.01732","-5","1" +"20002","Washington","DC","38.901811","-76.99097","-5","1" +"20003","Washington","DC","38.881762","-76.99447","-5","1" +"20004","Washington","DC","38.895268","-77.0276","-5","1" +"20005","Washington","DC","38.904461","-77.03088","-5","1" +"20006","Washington","DC","38.897567","-77.04195","-5","1" +"20007","Washington","DC","38.913961","-77.07179","-5","1" +"20008","Washington","DC","38.934866","-77.06039","-5","1" +"20009","Washington","DC","38.919211","-77.03777","-5","1" +"20010","Washington","DC","38.933311","-77.02929","-5","1" +"20011","Washington","DC","38.95211","-77.02097","-5","1" +"20012","Washington","DC","38.97808","-77.02858","-5","1" +"20013","Washington","DC","38.893311","-77.014647","-5","1" +"20015","Washington","DC","38.96516","-77.06737","-5","1" +"20016","Washington","DC","38.94081","-77.08723","-5","1" +"20017","Washington","DC","38.937478","-76.99125","-5","1" +"20018","Washington","DC","38.928761","-76.97523","-5","1" +"20019","Washington","DC","38.891445","-76.93811","-5","1" +"20020","Washington","DC","38.863079","-76.97138","-5","1" +"20024","Washington","DC","38.880112","-77.02362","-5","1" +"20026","Washington","DC","38.893311","-77.014647","-5","1" +"20029","Washington","DC","38.893311","-77.014647","-5","1" +"20030","Washington","DC","38.893311","-77.014647","-5","1" +"20032","Washington","DC","38.836145","-77.00058","-5","1" +"20033","Washington","DC","38.893311","-77.014647","-5","1" +"20035","Washington","DC","38.893311","-77.014647","-5","1" +"20036","Washington","DC","38.906778","-77.04148","-5","1" +"20037","Washington","DC","38.900394","-77.05126","-5","1" +"20038","Washington","DC","38.893311","-77.014647","-5","1" +"20039","Washington","DC","38.893311","-77.014647","-5","1" +"20040","Washington","DC","38.893311","-77.014647","-5","1" +"20041","Washington","DC","38.893311","-77.014647","-5","1" +"20042","Washington","DC","38.893311","-77.014647","-5","1" +"20043","Washington","DC","38.893311","-77.014647","-5","1" +"20044","Washington","DC","38.893311","-77.014647","-5","1" +"20045","Washington","DC","38.896599","-77.0319","-5","1" +"20046","Washington","DC","38.893311","-77.014647","-5","1" +"20047","Washington","DC","38.893311","-77.014647","-5","1" +"20049","Washington","DC","38.895911","-77.020998","-5","1" +"20050","Washington","DC","38.893311","-77.014647","-5","1" +"20051","Washington","DC","38.893311","-77.014647","-5","1" +"20052","Washington","DC","38.90014","-77.047899","-5","1" +"20053","Washington","DC","38.893311","-77.014647","-5","1" +"20055","Washington","DC","38.901633","-77.020959","-5","1" +"20056","Washington","DC","38.893311","-77.014647","-5","1" +"20057","Washington","DC","38.893311","-77.014647","-5","1" +"20058","Washington","DC","38.893311","-77.014647","-5","1" +"20059","Washington","DC","38.893311","-77.014647","-5","1" +"20060","Washington","DC","38.918011","-77.020398","-5","1" +"20061","Washington","DC","38.893311","-77.014647","-5","1" +"20062","Washington","DC","38.900009","-77.036948","-5","1" +"20063","Washington","DC","38.905317","-77.046645","-5","1" +"20064","Washington","DC","38.933161","-76.996348","-5","1" +"20065","Washington","DC","38.883412","-77.028198","-5","1" +"20066","Washington","DC","38.893311","-77.014647","-5","1" +"20067","Washington","DC","38.893311","-77.014647","-5","1" +"20068","Washington","DC","38.893311","-77.014647","-5","1" +"20069","Washington","DC","38.893311","-77.014647","-5","1" +"20070","Washington","DC","38.893311","-77.014647","-5","1" +"20071","Washington","DC","38.893311","-77.014647","-5","1" +"20073","Washington","DC","38.897011","-77.025098","-5","1" +"20074","Washington","DC","38.893311","-77.014647","-5","1" +"20075","Washington","DC","38.893311","-77.014647","-5","1" +"20076","Washington","DC","38.893311","-77.014647","-5","1" +"20077","Washington","DC","38.893311","-77.014647","-5","1" +"20078","Washington","DC","38.893311","-77.014647","-5","1" +"20080","Washington","DC","38.893311","-77.014647","-5","1" +"20081","Washington","DC","38.893311","-77.014647","-5","1" +"20082","Washington","DC","38.893311","-77.014647","-5","1" +"20088","Washington","DC","38.893311","-77.014647","-5","1" +"20090","Washington","DC","38.893311","-77.014647","-5","1" +"20091","Washington","DC","38.893311","-77.014647","-5","1" +"20097","Washington","DC","38.893311","-77.014647","-5","1" +"20098","Washington","DC","38.893311","-77.014647","-5","1" +"20099","Washington","DC","38.893311","-77.014647","-5","1" +"20101","Dulles","VA","39.002125","-77.442066","-5","1" +"20102","Dulles","VA","39.085309","-77.645224","-5","1" +"20103","Dulles","VA","38.996242","-77.449952","-5","1" +"20104","Dulles","VA","39.085309","-77.645224","-5","1" +"20105","Aldie","VA","38.964054","-77.60878","-5","1" +"20106","Amissville","VA","38.683116","-77.99031","-5","1" +"20107","Arcola","VA","38.968321","-77.533263","-5","1" +"20108","Manassas","VA","38.744685","-77.487162","-5","1" +"20109","Manassas","VA","38.790202","-77.51294","-5","1" +"20110","Manassas","VA","38.752269","-77.47694","-5","1" +"20111","Manassas","VA","38.769697","-77.44915","-5","1" +"20112","Manassas","VA","38.685117","-77.44796","-5","1" +"20113","Manassas","VA","38.770864","-77.449443","-5","1" +"20115","Marshall","VA","38.855848","-77.88174","-5","1" +"20116","Marshall","VA","38.853723","-77.860127","-5","1" +"20117","Middleburg","VA","38.983902","-77.74903","-5","1" +"20118","Middleburg","VA","38.953454","-77.74996","-5","1" +"20119","Catlett","VA","38.639283","-77.63866","-5","1" +"20120","Centreville","VA","38.851221","-77.44998","-5","1" +"20121","Centreville","VA","38.82571","-77.43964","-5","1" +"20122","Centreville","VA","38.831813","-77.288755","-5","1" +"20124","Clifton","VA","38.797424","-77.39237","-5","1" +"20128","Orlean","VA","38.741639","-77.977432","-5","1" +"20129","Paeonian Springs","VA","39.149032","-77.61471","-5","1" +"20130","Paris","VA","39.008532","-77.94907","-5","1" +"20131","Philomont","VA","39.057952","-77.743423","-5","1" +"20132","Purcellville","VA","39.146479","-77.72798","-5","1" +"20134","Purcellville","VA","39.152187","-77.702576","-5","1" +"20135","Bluemont","VA","39.080229","-77.87192","-5","1" +"20136","Bristow","VA","38.7475","-77.56917","-5","1" +"20137","Broad Run","VA","38.810629","-77.7057","-5","1" +"20138","Calverton","VA","38.630238","-77.67295","-5","1" +"20139","Casanova","VA","38.651558","-77.70361","-5","1" +"20140","Rectortown","VA","38.918124","-77.87243","-5","1" +"20141","Round Hill","VA","39.119917","-77.77328","-5","1" +"20142","Round Hill","VA","39.130665","-77.774665","-5","1" +"20143","Catharpin","VA","38.858613","-77.56391","-5","1" +"20144","Delaplane","VA","38.918435","-77.9255","-5","1" +"20146","Ashburn","VA","39.085309","-77.645224","-5","1" +"20147","Ashburn","VA","39.041978","-77.49064","-5","1" +"20148","Ashburn","VA","39.020637","-77.52276","-5","1" +"20149","Ashburn","VA","39.085309","-77.645224","-5","1" +"20151","Chantilly","VA","38.889111","-77.4363","-5","1" +"20152","Chantilly","VA","38.90371","-77.5038","-5","1" +"20153","Chantilly","VA","38.831813","-77.288755","-5","1" +"20155","Gainesville","VA","38.803732","-77.62404","-5","1" +"20156","Gainesville","VA","38.721912","-77.466897","-5","1" +"20158","Hamilton","VA","39.137667","-77.66186","-5","1" +"20159","Hamilton","VA","39.133855","-77.662072","-5","1" +"20160","Lincoln","VA","39.098479","-77.688338","-5","1" +"20163","Sterling","VA","39.085309","-77.645224","-5","1" +"20164","Sterling","VA","39.011909","-77.39295","-5","1" +"20165","Sterling","VA","39.044855","-77.38701","-5","1" +"20166","Sterling","VA","39.004276","-77.43442","-5","1" +"20167","Sterling","VA","39.085309","-77.645224","-5","1" +"20168","Haymarket","VA","38.721912","-77.466897","-5","1" +"20169","Haymarket","VA","38.860551","-77.64947","-5","1" +"20170","Herndon","VA","38.977109","-77.38527","-5","1" +"20171","Herndon","VA","38.931479","-77.40085","-5","1" +"20172","Herndon","VA","38.831813","-77.288755","-5","1" +"20175","Leesburg","VA","39.080037","-77.58025","-5","1" +"20176","Leesburg","VA","39.138978","-77.54519","-5","1" +"20177","Leesburg","VA","39.158095","-77.666863","-5","1" +"20178","Leesburg","VA","39.072918","-77.608014","-5","1" +"20180","Lovettsville","VA","39.261906","-77.64239","-5","1" +"20181","Nokesville","VA","38.69835","-77.57365","-5","1" +"20182","Nokesville","VA","38.700866","-77.585708","-5","1" +"20184","Upperville","VA","38.997904","-77.87487","-5","1" +"20185","Upperville","VA","38.992978","-77.879855","-5","1" +"20186","Warrenton","VA","38.707135","-77.8145","-5","1" +"20187","Warrenton","VA","38.735202","-77.73717","-5","1" +"20188","Warrenton","VA","38.765619","-77.820293","-5","1" +"20190","Reston","VA","38.959673","-77.3462","-5","1" +"20191","Reston","VA","38.934709","-77.3469","-5","1" +"20192","Herndon","VA","38.831813","-77.288755","-5","1" +"20193","Reston","VA","38.831813","-77.288755","-5","1" +"20194","Reston","VA","38.977362","-77.34658","-5","1" +"20195","Reston","VA","38.831813","-77.288755","-5","1" +"20196","Reston","VA","38.831813","-77.288755","-5","1" +"20197","Waterford","VA","39.191333","-77.63118","-5","1" +"20198","The Plains","VA","38.889848","-77.75907","-5","1" +"20199","Dulles","VA","39.085309","-77.645224","-5","1" +"20201","Washington","DC","38.893311","-77.014647","-5","1" +"20202","Washington","DC","38.893311","-77.014647","-5","1" +"20203","Washington","DC","38.905317","-77.046645","-5","1" +"20204","Washington","DC","38.893311","-77.014647","-5","1" +"20206","Washington","DC","38.893311","-77.014647","-5","1" +"20207","Washington","DC","38.893311","-77.014647","-5","1" +"20208","Washington","DC","38.896611","-77.011748","-5","1" +"20210","Washington","DC","38.893311","-77.014647","-5","1" +"20211","Washington","DC","38.893311","-77.014647","-5","1" +"20212","Washington","DC","38.893311","-77.014647","-5","1" +"20213","Washington","DC","38.893311","-77.014647","-5","1" +"20214","Washington","DC","38.893311","-77.014647","-5","1" +"20215","Washington","DC","38.893311","-77.014647","-5","1" +"20216","Washington","DC","38.891911","-77.014098","-5","1" +"20217","Washington","DC","38.893311","-77.014647","-5","1" +"20218","Washington","DC","38.893311","-77.014647","-5","1" +"20219","Washington","DC","38.893311","-77.014647","-5","1" +"20220","Washington","DC","38.893311","-77.014647","-5","1" +"20221","Washington","DC","38.893311","-77.014647","-5","1" +"20222","Washington","DC","38.893311","-77.014647","-5","1" +"20223","Washington","DC","38.893311","-77.014647","-5","1" +"20224","Washington","DC","38.893311","-77.014647","-5","1" +"20226","Washington","DC","38.893311","-77.014647","-5","1" +"20227","Washington","DC","38.893311","-77.014647","-5","1" +"20228","Washington","DC","38.893311","-77.014647","-5","1" +"20229","Washington","DC","38.893311","-77.014647","-5","1" +"20230","Washington","DC","38.893311","-77.014647","-5","1" +"20231","Washington","DC","38.893311","-77.014647","-5","1" +"20232","Washington","DC","38.900561","-77.039099","-5","1" +"20233","Washington","DC","38.893311","-77.014647","-5","1" +"20235","Washington","DC","38.915361","-77.057199","-5","1" +"20238","Washington","DC","38.893311","-77.014647","-5","1" +"20239","Washington","DC","38.893311","-77.014647","-5","1" +"20240","Washington","DC","38.897143","-77.040895","-5","1" +"20241","Washington","DC","38.893311","-77.014647","-5","1" +"20242","Washington","DC","38.867812","-77.028948","-5","1" +"20244","Washington","DC","38.893311","-77.014647","-5","1" +"20245","Washington","DC","38.893311","-77.014647","-5","1" +"20250","Washington","DC","38.887323","-77.03274","-5","1" +"20251","Washington","DC","38.893311","-77.014647","-5","1" +"20254","Washington","DC","38.893311","-77.014647","-5","1" +"20260","Washington","DC","38.893311","-77.014647","-5","1" +"20261","Washington","DC","38.893311","-77.014647","-5","1" +"20262","Washington","DC","38.893311","-77.014647","-5","1" +"20265","Washington","DC","38.893311","-77.014647","-5","1" +"20266","Washington","DC","38.893311","-77.014647","-5","1" +"20268","Washington","DC","38.893311","-77.014647","-5","1" +"20270","Washington","DC","38.893311","-77.014647","-5","1" +"20277","Washington","DC","38.893311","-77.014647","-5","1" +"20289","Washington","DC","38.893311","-77.014647","-5","1" +"20299","Washington","DC","38.893311","-77.014647","-5","1" +"20301","Washington","DC","38.889357","-77.031113","-5","1" +"20303","Washington","DC","38.893311","-77.014647","-5","1" +"20306","Washington","DC","38.893311","-77.014647","-5","1" +"20307","Washington","DC","38.893311","-77.014647","-5","1" +"20310","Washington","DC","38.893311","-77.014647","-5","1" +"20314","Washington","DC","38.893311","-77.014647","-5","1" +"20315","Washington","DC","38.928861","-77.017948","-5","1" +"20317","Washington","DC","38.931161","-77.010298","-5","1" +"20318","Washington","DC","38.893311","-77.014647","-5","1" +"20319","Washington","DC","38.866924","-77.01424","-5","1" +"20330","Washington","DC","38.893311","-77.014647","-5","1" +"20332","Washington","DC","38.829932","-77.0176","-5","1" +"20336","Washington","DC","38.847768","-77.01299","-5","1" +"20337","Washington","DC","38.893311","-77.014647","-5","1" +"20338","Washington","DC","38.893311","-77.014647","-5","1" +"20340","Washington","DC","38.893311","-77.014647","-5","1" +"20350","Washington","DC","38.893311","-77.014647","-5","1" +"20370","Washington","DC","38.893311","-77.014647","-5","1" +"20372","Washington","DC","38.893311","-77.014647","-5","1" +"20373","Washington","DC","38.893311","-77.014647","-5","1" +"20374","Washington","DC","38.855522","-77.002197","-5","1" +"20375","Washington","DC","38.822713","-77.02322","-5","1" +"20380","Washington","DC","38.893311","-77.014647","-5","1" +"20388","Washington","DC","38.872553","-76.996605","-5","1" +"20389","Washington","DC","38.893311","-77.014647","-5","1" +"20390","Washington","DC","38.893311","-77.014647","-5","1" +"20391","Washington","DC","38.893311","-77.014647","-5","1" +"20392","Washington","DC","38.893311","-77.014647","-5","1" +"20393","Washington","DC","38.893311","-77.014647","-5","1" +"20394","Washington","DC","38.893311","-77.014647","-5","1" +"20395","Washington","DC","38.893311","-77.014647","-5","1" +"20398","Washington","DC","38.893311","-77.014647","-5","1" +"20401","Washington","DC","38.893311","-77.014647","-5","1" +"20402","Washington","DC","38.893311","-77.014647","-5","1" +"20403","Washington","DC","38.893311","-77.014647","-5","1" +"20404","Washington","DC","38.899161","-77.008948","-5","1" +"20405","Washington","DC","38.893311","-77.014647","-5","1" +"20406","Washington","DC","38.893311","-77.014647","-5","1" +"20407","Washington","DC","38.893311","-77.014647","-5","1" +"20408","Washington","DC","38.893311","-77.014647","-5","1" +"20409","Washington","DC","38.893311","-77.014647","-5","1" +"20410","Washington","DC","38.893311","-77.014647","-5","1" +"20411","Washington","DC","38.883962","-77.022098","-5","1" +"20412","Washington","DC","38.895261","-77.022098","-5","1" +"20413","Washington","DC","38.893311","-77.014647","-5","1" +"20414","Washington","DC","38.883962","-77.022098","-5","1" +"20415","Washington","DC","38.893311","-77.014647","-5","1" +"20416","Washington","DC","38.893311","-77.014647","-5","1" +"20418","Washington","DC","38.904253","-77.05723","-5","1" +"20419","Washington","DC","38.893311","-77.014647","-5","1" +"20420","Washington","DC","38.903461","-77.027648","-5","1" +"20421","Washington","DC","38.893311","-77.014647","-5","1" +"20422","Washington","DC","38.893311","-77.014647","-5","1" +"20423","Washington","DC","38.893311","-77.014647","-5","1" +"20424","Washington","DC","38.893311","-77.014647","-5","1" +"20425","Washington","DC","38.893311","-77.014647","-5","1" +"20426","Washington","DC","38.893311","-77.014647","-5","1" +"20427","Washington","DC","38.893311","-77.014647","-5","1" +"20428","Washington","DC","38.893311","-77.014647","-5","1" +"20429","Washington","DC","38.893311","-77.014647","-5","1" +"20431","Washington","DC","38.898618","-77.042753","-5","1" +"20433","Washington","DC","38.899996","-77.041976","-5","1" +"20434","Washington","DC","38.893311","-77.014647","-5","1" +"20435","Washington","DC","38.899399","-77.040319","-5","1" +"20436","Washington","DC","38.895927","-77.021068","-5","1" +"20437","Washington","DC","38.902761","-77.048499","-5","1" +"20439","Washington","DC","38.893311","-77.014647","-5","1" +"20440","Washington","DC","38.913911","-77.045349","-5","1" +"20441","Washington","DC","38.923861","-77.036349","-5","1" +"20442","Washington","DC","38.895977","-77.017668","-5","1" +"20444","Washington","DC","38.893311","-77.014647","-5","1" +"20447","Washington","DC","38.884712","-77.025198","-5","1" +"20451","Washington","DC","38.897711","-77.044449","-5","1" +"20453","Washington","DC","38.893311","-77.014647","-5","1" +"20456","Washington","DC","38.898111","-77.040149","-5","1" +"20460","Washington","DC","38.876362","-77.018798","-5","1" +"20463","Washington","DC","38.893311","-77.014647","-5","1" +"20468","Washington","DC","38.893311","-77.014647","-5","1" +"20469","Washington","DC","38.893311","-77.014647","-5","1" +"20470","Washington","DC","38.893311","-77.014647","-5","1" +"20472","Washington","DC","38.893311","-77.014647","-5","1" +"20500","Washington","DC","38.894781","-77.036122","-5","1" +"20501","Washington","DC","38.89872","-77.036198","-5","1" +"20502","Washington","DC","38.89872","-77.036198","-5","1" +"20503","Washington","DC","38.900711","-77.043068","-5","1" +"20504","Washington","DC","38.893311","-77.014647","-5","1" +"20505","Washington","DC","38.893311","-77.014647","-5","1" +"20506","Washington","DC","38.899364","-77.037668","-5","1" +"20507","Washington","DC","38.893311","-77.014647","-5","1" +"20508","Washington","DC","38.893311","-77.014647","-5","1" +"20510","Washington","DC","38.893311","-77.014647","-5","1" +"20515","Washington","DC","38.893311","-77.014647","-5","1" +"20520","Washington","DC","38.893217","-77.048957","-5","1" +"20521","Washington","DC","38.893311","-77.014647","-5","1" +"20522","Washington","DC","38.893217","-77.048957","-5","1" +"20523","Washington","DC","38.89449","-77.047807","-5","1" +"20524","Washington","DC","38.902414","-77.032601","-5","1" +"20525","Washington","DC","38.893311","-77.014647","-5","1" +"20526","Washington","DC","38.902217","-77.043738","-5","1" +"20527","Washington","DC","38.902933","-77.036091","-5","1" +"20530","Washington","DC","38.897561","-77.026998","-5","1" +"20531","Washington","DC","38.893761","-77.021848","-5","1" +"20532","Washington","DC","38.904486","-77.017291","-5","1" +"20533","Washington","DC","38.901102","-77.032591","-5","1" +"20534","Washington","DC","38.894075","-77.01254","-5","1" +"20535","Washington","DC","38.894097","-77.025133","-5","1" +"20536","Washington","DC","38.901211","-77.016948","-5","1" +"20537","Washington","DC","38.894097","-77.025133","-5","1" +"20538","Washington","DC","38.893311","-77.014647","-5","1" +"20539","Washington","DC","38.893311","-77.014647","-5","1" +"20540","Washington","DC","38.887405","-77.004663","-5","1" +"20541","Washington","DC","38.887405","-77.004663","-5","1" +"20542","Washington","DC","38.940761","-77.028348","-5","1" +"20543","Washington","DC","38.893311","-77.014647","-5","1" +"20544","Washington","DC","38.893311","-77.014647","-5","1" +"20546","Washington","DC","38.890976","-77.021092","-5","1" +"20547","Washington","DC","38.893311","-77.014647","-5","1" +"20548","Washington","DC","38.898111","-77.017698","-5","1" +"20549","Washington","DC","38.893311","-77.014647","-5","1" +"20550","Washington","DC","38.893311","-77.014647","-5","1" +"20551","Washington","DC","38.891995","-77.045219","-5","1" +"20552","Washington","DC","38.893311","-77.014647","-5","1" +"20553","Washington","DC","38.887333","-77.023118","-5","1" +"20554","Washington","DC","38.893311","-77.014647","-5","1" +"20555","Washington","DC","38.900011","-77.040149","-5","1" +"20557","Washington","DC","38.887405","-77.004663","-5","1" +"20558","Washington","DC","38.893311","-77.014647","-5","1" +"20559","Washington","DC","38.887405","-77.004663","-5","1" +"20560","Washington","DC","38.893311","-77.014647","-5","1" +"20565","Washington","DC","38.891941","-77.018853","-5","1" +"20566","Washington","DC","38.897074","-77.05535","-5","1" +"20570","Washington","DC","38.899061","-77.040149","-5","1" +"20571","Washington","DC","38.900559","-77.034554","-5","1" +"20572","Washington","DC","38.893311","-77.014647","-5","1" +"20573","Washington","DC","38.893311","-77.014647","-5","1" +"20575","Washington","DC","38.893311","-77.014647","-5","1" +"20576","Washington","DC","38.893662","-77.023592","-5","1" +"20577","Washington","DC","38.900758","-77.034455","-5","1" +"20578","Washington","DC","38.893311","-77.014647","-5","1" +"20579","Washington","DC","38.904311","-77.044649","-5","1" +"20580","Washington","DC","38.893311","-77.014647","-5","1" +"20581","Washington","DC","38.893311","-77.014647","-5","1" +"20585","Washington","DC","38.893311","-77.014647","-5","1" +"20586","Washington","DC","38.902211","-77.047399","-5","1" +"20590","Washington","DC","38.883962","-77.022098","-5","1" +"20591","Washington","DC","38.893311","-77.014647","-5","1" +"20593","Washington","DC","38.893311","-77.014647","-5","1" +"20594","Washington","DC","38.88494","-77.018372","-5","1" +"20597","Washington","DC","38.893311","-77.014647","-5","1" +"20599","Washington","DC","38.893311","-77.014647","-5","1" +"20601","Waldorf","MD","38.634306","-76.86008","-5","1" +"20602","Waldorf","MD","38.598185","-76.90381","-5","1" +"20603","Waldorf","MD","38.631542","-76.95723","-5","1" +"20604","Waldorf","MD","38.509548","-76.981651","-5","1" +"20606","Abell","MD","38.250996","-76.73974","-5","1" +"20607","Accokeek","MD","38.672216","-77.01807","-5","1" +"20608","Aquasco","MD","38.564649","-76.69229","-5","1" +"20609","Avenue","MD","38.268558","-76.75084","-5","1" +"20610","Barstow","MD","38.444727","-76.533026","-5","1" +"20611","Bel Alton","MD","38.463289","-76.9858","-5","1" +"20612","Benedict","MD","38.511147","-76.67864","-5","1" +"20613","Brandywine","MD","38.676968","-76.82215","-5","1" +"20615","Broomes Island","MD","38.416782","-76.54814","-5","1" +"20616","Bryans Road","MD","38.639117","-77.08301","-5","1" +"20617","Bryantown","MD","38.55223","-76.84477","-5","1" +"20618","Bushwood","MD","38.270124","-76.79155","-5","1" +"20619","California","MD","38.303103","-76.52231","-5","1" +"20620","Callaway","MD","38.226406","-76.51759","-5","1" +"20621","Chaptico","MD","38.330254","-76.80782","-5","1" +"20622","Charlotte Hall","MD","38.458322","-76.83947","-5","1" +"20623","Cheltenham","MD","38.748872","-76.83075","-5","1" +"20624","Clements","MD","38.330096","-76.73113","-5","1" +"20625","Cobb Island","MD","38.262468","-76.84951","-5","1" +"20626","Coltons Point","MD","38.229113","-76.75829","-5","1" +"20627","Compton","MD","38.276828","-76.703971","-5","1" +"20628","Dameron","MD","38.135718","-76.33865","-5","1" +"20629","Dowell","MD","38.334336","-76.4534","-5","1" +"20630","Drayden","MD","38.171834","-76.47437","-5","1" +"20632","Faulkner","MD","38.421787","-76.96182","-5","1" +"20634","Great Mills","MD","38.260846","-76.4985","-5","1" +"20635","Helen","MD","38.312112","-76.607676","-5","1" +"20636","Hollywood","MD","38.349517","-76.54839","-5","1" +"20637","Hughesville","MD","38.523408","-76.75435","-5","1" +"20639","Huntingtown","MD","38.601648","-76.60434","-5","1" +"20640","Indian Head","MD","38.593095","-77.15212","-5","1" +"20643","Ironsides","MD","38.503876","-77.148283","-5","1" +"20645","Issue","MD","38.30126","-76.91539","-5","1" +"20646","La Plata","MD","38.528103","-76.98063","-5","1" +"20650","Leonardtown","MD","38.269283","-76.64336","-5","1" +"20653","Lexington Park","MD","38.234838","-76.44889","-5","1" +"20656","Loveville","MD","38.359274","-76.683325","-5","1" +"20657","Lusby","MD","38.370044","-76.43328","-5","1" +"20658","Marbury","MD","38.567465","-77.16779","-5","1" +"20659","Mechanicsville","MD","38.427328","-76.72826","-5","1" +"20660","Morganza","MD","38.363994","-76.694102","-5","1" +"20661","Mount Victoria","MD","38.343591","-76.884559","-5","1" +"20662","Nanjemoy","MD","38.42029","-77.19479","-5","1" +"20664","Newburg","MD","38.343729","-76.92493","-5","1" +"20667","Park Hall","MD","38.2176","-76.4382","-5","1" +"20670","Patuxent River","MD","38.268636","-76.42383","-5","1" +"20674","Piney Point","MD","38.127843","-76.49055","-5","1" +"20675","Pomfret","MD","38.58215","-77.01739","-5","1" +"20676","Port Republic","MD","38.489163","-76.52937","-5","1" +"20677","Port Tobacco","MD","38.501493","-77.03169","-5","1" +"20678","Prince Frederick","MD","38.535116","-76.58432","-5","1" +"20680","Ridge","MD","38.112419","-76.36964","-5","1" +"20682","Rock Point","MD","38.283551","-76.848093","-5","1" +"20684","Saint Inigoes","MD","38.151666","-76.40512","-5","1" +"20685","Saint Leonard","MD","38.448869","-76.49776","-5","1" +"20686","Saint Marys City","MD","38.188796","-76.420738","-5","1" +"20687","Scotland","MD","38.064947","-76.3444","-5","1" +"20688","Solomons","MD","38.339176","-76.46568","-5","1" +"20689","Sunderland","MD","38.668765","-76.58648","-5","1" +"20690","Tall Timbers","MD","38.165432","-76.53284","-5","1" +"20692","Valley Lee","MD","38.179764","-76.50185","-5","1" +"20693","Welcome","MD","38.451267","-77.08955","-5","1" +"20695","White Plains","MD","38.593202","-76.97063","-5","1" +"20697","Southern Md Facility","MD","38.833563","-76.877743","-5","1" +"20701","Annapolis Junction","MD","39.127708","-76.7923","-5","1" +"20703","Lanham","MD","38.833563","-76.877743","-5","1" +"20704","Beltsville","MD","38.833563","-76.877743","-5","1" +"20705","Beltsville","MD","39.044509","-76.9133","-5","1" +"20706","Lanham","MD","38.964093","-76.85331","-5","1" +"20707","Laurel","MD","39.098475","-76.86571","-5","1" +"20708","Laurel","MD","39.0632","-76.84103","-5","1" +"20709","Laurel","MD","38.833563","-76.877743","-5","1" +"20710","Bladensburg","MD","38.941428","-76.93005","-5","1" +"20711","Lothian","MD","38.80884","-76.67236","-5","1" +"20712","Mount Rainier","MD","38.941594","-76.96369","-5","1" +"20714","North Beach","MD","38.711264","-76.53637","-5","1" +"20715","Bowie","MD","38.979413","-76.74382","-5","1" +"20716","Bowie","MD","38.93193","-76.72457","-5","1" +"20717","Bowie","MD","38.833563","-76.877743","-5","1" +"20718","Bowie","MD","38.833563","-76.877743","-5","1" +"20719","Bowie","MD","38.833563","-76.877743","-5","1" +"20720","Bowie","MD","38.986699","-76.78612","-5","1" +"20721","Bowie","MD","38.917506","-76.79404","-5","1" +"20722","Brentwood","MD","38.939716","-76.95203","-5","1" +"20723","Laurel","MD","39.134062","-76.8579","-5","1" +"20724","Laurel","MD","39.101646","-76.80334","-5","1" +"20725","Laurel","MD","38.833563","-76.877743","-5","1" +"20726","Laurel","MD","38.833563","-76.877743","-5","1" +"20731","Capitol Heights","MD","38.833563","-76.877743","-5","1" +"20732","Chesapeake Beach","MD","38.670858","-76.53652","-5","1" +"20733","Churchton","MD","38.801516","-76.52469","-5","1" +"20735","Clinton","MD","38.753264","-76.89913","-5","1" +"20736","Owings","MD","38.694074","-76.61793","-5","1" +"20737","Riverdale","MD","38.96146","-76.92056","-5","1" +"20738","Riverdale","MD","38.833563","-76.877743","-5","1" +"20740","College Park","MD","38.99756","-76.92577","-5","1" +"20741","College Park","MD","38.833563","-76.877743","-5","1" +"20742","College Park","MD","38.833563","-76.877743","-5","1" +"20743","Capitol Heights","MD","38.886812","-76.90645","-5","1" +"20744","Fort Washington","MD","38.756347","-76.99034","-5","1" +"20745","Oxon Hill","MD","38.80758","-76.99193","-5","1" +"20746","Suitland","MD","38.839663","-76.91478","-5","1" +"20747","District Heights","MD","38.855479","-76.88621","-5","1" +"20748","Temple Hills","MD","38.822163","-76.93974","-5","1" +"20749","Fort Washington","MD","38.833563","-76.877743","-5","1" +"20750","Oxon Hill","MD","38.833563","-76.877743","-5","1" +"20751","Deale","MD","38.786949","-76.55335","-5","1" +"20752","Suitland","MD","38.833563","-76.877743","-5","1" +"20753","District Heights","MD","38.833563","-76.877743","-5","1" +"20754","Dunkirk","MD","38.746123","-76.65117","-5","1" +"20755","Fort George G Meade","MD","39.105015","-76.74126","-5","1" +"20757","Temple Hills","MD","38.833563","-76.877743","-5","1" +"20758","Friendship","MD","38.731822","-76.59378","-5","1" +"20759","Fulton","MD","39.147257","-76.93799","-5","1" +"20762","Andrews Air Force Base","MD","38.820546","-76.88334","-5","1" +"20763","Savage","MD","39.137307","-76.82335","-5","1" +"20764","Shady Side","MD","38.839015","-76.5114","-5","1" +"20765","Galesville","MD","38.844097","-76.54795","-5","1" +"20768","Greenbelt","MD","38.833563","-76.877743","-5","1" +"20769","Glenn Dale","MD","38.984107","-76.81544","-5","1" +"20770","Greenbelt","MD","39.00391","-76.88005","-5","1" +"20771","Greenbelt","MD","38.833563","-76.877743","-5","1" +"20772","Upper Marlboro","MD","38.792281","-76.781","-5","1" +"20773","Upper Marlboro","MD","38.833563","-76.877743","-5","1" +"20774","Upper Marlboro","MD","38.892456","-76.80685","-5","1" +"20775","Upper Marlboro","MD","38.833563","-76.877743","-5","1" +"20776","Harwood","MD","38.86313","-76.61917","-5","1" +"20777","Highland","MD","39.173104","-76.95779","-5","1" +"20778","West River","MD","38.832265","-76.55604","-5","1" +"20779","Tracys Landing","MD","38.759196","-76.57076","-5","1" +"20781","Hyattsville","MD","38.946746","-76.9356","-5","1" +"20782","Hyattsville","MD","38.96401","-76.96139","-5","1" +"20783","Hyattsville","MD","38.98941","-76.97294","-5","1" +"20784","Hyattsville","MD","38.950528","-76.8888","-5","1" +"20785","Hyattsville","MD","38.920111","-76.889","-5","1" +"20787","Hyattsville","MD","38.98707","-76.982405","-5","1" +"20788","Hyattsville","MD","38.969434","-76.950913","-5","1" +"20790","Capitol Heights","MD","38.833563","-76.877743","-5","1" +"20791","Capitol Heights","MD","38.833563","-76.877743","-5","1" +"20794","Jessup","MD","39.144807","-76.78767","-5","1" +"20797","Southern Md Facility","MD","38.833563","-76.877743","-5","1" +"20799","Capitol Heights","MD","38.833563","-76.877743","-5","1" +"20812","Glen Echo","MD","38.97026","-77.1442","-5","1" +"20813","Bethesda","MD","39.143979","-77.207617","-5","1" +"20814","Bethesda","MD","38.999759","-77.10185","-5","1" +"20815","Chevy Chase","MD","38.97986","-77.08079","-5","1" +"20816","Bethesda","MD","38.958377","-77.11425","-5","1" +"20817","Bethesda","MD","38.996842","-77.13519","-5","1" +"20818","Cabin John","MD","38.97511","-77.15928","-5","1" +"20824","Bethesda","MD","39.143979","-77.207617","-5","1" +"20825","Chevy Chase","MD","39.143979","-77.207617","-5","1" +"20827","Bethesda","MD","39.143979","-77.207617","-5","1" +"20830","Olney","MD","39.15522","-77.066745","-5","1" +"20831","Chesapeake Beach","MD","38.698833","-76.536276","-5","1" +"20832","Olney","MD","39.155449","-77.07487","-5","1" +"20833","Brookeville","MD","39.183221","-77.05917","-5","1" +"20837","Poolesville","MD","39.128854","-77.40763","-5","1" +"20838","Barnesville","MD","39.221975","-77.37781","-5","1" +"20839","Beallsville","MD","39.1672","-77.41411","-5","1" +"20841","Boyds","MD","39.194497","-77.321","-5","1" +"20842","Dickerson","MD","39.22086","-77.41699","-5","1" +"20847","Rockville","MD","39.143979","-77.207617","-5","1" +"20848","Rockville","MD","39.143979","-77.207617","-5","1" +"20849","Rockville","MD","39.143979","-77.207617","-5","1" +"20850","Rockville","MD","39.093408","-77.1718","-5","1" +"20851","Rockville","MD","39.076608","-77.1232","-5","1" +"20852","Rockville","MD","39.0509","-77.12261","-5","1" +"20853","Rockville","MD","39.087409","-77.0944","-5","1" +"20854","Potomac","MD","39.035028","-77.19995","-5","1" +"20855","Derwood","MD","39.131705","-77.14981","-5","1" +"20857","Rockville","MD","39.143979","-77.207617","-5","1" +"20859","Potomac","MD","39.143979","-77.207617","-5","1" +"20860","Sandy Spring","MD","39.15283","-77.03494","-5","1" +"20861","Ashton","MD","39.14827","-76.99859","-5","1" +"20862","Brinklow","MD","39.184019","-77.01708","-5","1" +"20866","Burtonsville","MD","39.097243","-76.93467","-5","1" +"20868","Spencerville","MD","39.127028","-76.96372","-5","1" +"20871","Clarksburg","MD","39.262598","-77.29125","-5","1" +"20872","Damascus","MD","39.284185","-77.22752","-5","1" +"20874","Germantown","MD","39.169859","-77.27564","-5","1" +"20875","Germantown","MD","39.143979","-77.207617","-5","1" +"20876","Germantown","MD","39.191769","-77.24329","-5","1" +"20877","Gaithersburg","MD","39.13975","-77.18568","-5","1" +"20878","Gaithersburg","MD","39.11755","-77.23548","-5","1" +"20879","Gaithersburg","MD","39.168656","-77.18716","-5","1" +"20880","Washington Grove","MD","39.139535","-77.17592","-5","1" +"20882","Gaithersburg","MD","39.229652","-77.1594","-5","1" +"20884","Gaithersburg","MD","39.143979","-77.207617","-5","1" +"20885","Gaithersburg","MD","39.187421","-77.202798","-5","1" +"20886","Montgomery Village","MD","39.178737","-77.19564","-5","1" +"20889","Bethesda","MD","39.143979","-77.207617","-5","1" +"20891","Kensington","MD","39.143979","-77.207617","-5","1" +"20892","Bethesda","MD","39.002375","-77.10341","-5","1" +"20894","Bethesda","MD","39.143979","-77.207617","-5","1" +"20895","Kensington","MD","39.027259","-77.07745","-5","1" +"20896","Garrett Park","MD","39.035276","-77.09263","-5","1" +"20897","Suburb Maryland Fac","MD","39.143979","-77.207617","-5","1" +"20898","Gaithersburg","MD","39.143979","-77.207617","-5","1" +"20899","Gaithersburg","MD","39.140324","-77.221984","-5","1" +"20901","Silver Spring","MD","39.020359","-77.0115","-5","1" +"20902","Silver Spring","MD","39.040759","-77.04876","-5","1" +"20903","Silver Spring","MD","39.014009","-76.98199","-5","1" +"20904","Silver Spring","MD","39.069108","-76.97834","-5","1" +"20905","Silver Spring","MD","39.104509","-76.99374","-5","1" +"20906","Silver Spring","MD","39.07737","-77.06433","-5","1" +"20907","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20908","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20910","Silver Spring","MD","38.999992","-77.03404","-5","1" +"20911","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20912","Takoma Park","MD","38.98236","-77.00044","-5","1" +"20913","Takoma Park","MD","38.833563","-76.877743","-5","1" +"20914","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20915","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20916","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20918","Silver Spring","MD","39.143979","-77.207617","-5","1" +"20997","Silver Spring","MD","39.143979","-77.207617","-5","1" +"21001","Aberdeen","MD","39.508177","-76.18066","-5","1" +"21002","Perryman","MD","39.487519","-76.199871","-5","1" +"21004","Bel Air South","MD","39.539458","-76.326363","-5","1" +"21005","Aberdeen Proving Ground","MD","39.473451","-76.14083","-5","1" +"21009","Abingdon","MD","39.473899","-76.2983","-5","1" +"21010","Gunpowder","MD","39.344808","-76.27313","-5","1" +"21012","Arnold","MD","39.049377","-76.49892","-5","1" +"21013","Baldwin","MD","39.508739","-76.49191","-5","1" +"21014","Bel Air","MD","39.536057","-76.34957","-5","1" +"21015","Bel Air","MD","39.532212","-76.30754","-5","1" +"21017","Belcamp","MD","39.476018","-76.24355","-5","1" +"21018","Benson","MD","39.509276","-76.385083","-5","1" +"21020","Boring","MD","39.521276","-76.804699","-5","1" +"21022","Brooklandville","MD","39.397861","-76.671742","-5","1" +"21023","Butler","MD","39.532955","-76.743196","-5","1" +"21027","Chase","MD","39.438964","-76.592139","-5","1" +"21028","Churchville","MD","39.559374","-76.24757","-5","1" +"21029","Clarksville","MD","39.198816","-76.9367","-5","1" +"21030","Cockeysville","MD","39.477506","-76.64114","-5","1" +"21031","Hunt Valley","MD","39.487938","-76.65938","-5","1" +"21032","Crownsville","MD","39.04366","-76.58805","-5","1" +"21034","Darlington","MD","39.638039","-76.22398","-5","1" +"21035","Davidsonville","MD","38.931312","-76.65248","-5","1" +"21036","Dayton","MD","39.24367","-76.99782","-5","1" +"21037","Edgewater","MD","38.921763","-76.5373","-5","1" +"21040","Edgewood","MD","39.427058","-76.30183","-5","1" +"21041","Ellicott City","MD","39.236405","-76.941902","-5","1" +"21042","Ellicott City","MD","39.276305","-76.86082","-5","1" +"21043","Ellicott City","MD","39.254356","-76.8006","-5","1" +"21044","Columbia","MD","39.21536","-76.87823","-5","1" +"21045","Columbia","MD","39.207523","-76.82527","-5","1" +"21046","Columbia","MD","39.175004","-76.85319","-5","1" +"21047","Fallston","MD","39.521572","-76.4258","-5","1" +"21048","Finksburg","MD","39.506853","-76.90953","-5","1" +"21050","Forest Hill","MD","39.574606","-76.39022","-5","1" +"21051","Fork","MD","39.47044","-76.44898","-5","1" +"21052","Fort Howard","MD","39.206108","-76.44642","-5","1" +"21053","Freeland","MD","39.70172","-76.71236","-5","1" +"21054","Gambrills","MD","39.040159","-76.68408","-5","1" +"21055","Garrison","MD","39.438964","-76.592139","-5","1" +"21056","Gibson Island","MD","39.07566","-76.4286","-5","1" +"21057","Glen Arm","MD","39.454943","-76.49718","-5","1" +"21060","Glen Burnie","MD","39.162225","-76.59444","-5","1" +"21061","Glen Burnie","MD","39.164158","-76.6306","-5","1" +"21062","Glen Burnie","MD","38.974203","-76.594942","-5","1" +"21071","Glyndon","MD","39.472604","-76.81424","-5","1" +"21074","Hampstead","MD","39.613293","-76.84802","-5","1" +"21075","Elkridge","MD","39.197119","-76.75178","-5","1" +"21076","Hanover","MD","39.167708","-76.71706","-5","1" +"21077","Harmans","MD","39.157958","-76.69854","-5","1" +"21078","Havre De Grace","MD","39.554644","-76.11118","-5","1" +"21080","Henryton","MD","39.534703","-77.049302","-5","1" +"21082","Hydes","MD","39.470274","-76.45964","-5","1" +"21084","Jarrettsville","MD","39.610405","-76.45569","-5","1" +"21085","Joppa","MD","39.432273","-76.35578","-5","1" +"21087","Kingsville","MD","39.444457","-76.40817","-5","1" +"21088","Lineboro","MD","39.534703","-77.049302","-5","1" +"21090","Linthicum Heights","MD","39.209529","-76.66177","-5","1" +"21092","Long Green","MD","39.438964","-76.592139","-5","1" +"21093","Lutherville Timonium","MD","39.435789","-76.63614","-5","1" +"21094","Lutherville Timonium","MD","39.438964","-76.592139","-5","1" +"21098","Hanover","MD","38.974203","-76.594942","-5","1" +"21102","Manchester","MD","39.685569","-76.8505","-5","1" +"21104","Marriottsville","MD","39.359754","-76.91103","-5","1" +"21105","Maryland Line","MD","39.712453","-76.65069","-5","1" +"21106","Mayo","MD","38.971475","-76.580934","-5","1" +"21108","Millersville","MD","39.099957","-76.62114","-5","1" +"21111","Monkton","MD","39.575605","-76.59123","-5","1" +"21113","Odenton","MD","39.079902","-76.70867","-5","1" +"21114","Crofton","MD","39.012134","-76.68561","-5","1" +"21117","Owings Mills","MD","39.419105","-76.78388","-5","1" +"21120","Parkton","MD","39.656737","-76.66001","-5","1" +"21122","Pasadena","MD","39.125776","-76.51863","-5","1" +"21123","Pasadena","MD","38.974203","-76.594942","-5","1" +"21128","Perry Hall","MD","39.400296","-76.44639","-5","1" +"21130","Perryman","MD","39.466859","-76.20106","-5","1" +"21131","Phoenix","MD","39.504706","-76.57112","-5","1" +"21132","Pylesville","MD","39.696621","-76.42781","-5","1" +"21133","Randallstown","MD","39.376372","-76.79916","-5","1" +"21136","Reisterstown","MD","39.470603","-76.81417","-5","1" +"21139","Riderwood","MD","39.438964","-76.592139","-5","1" +"21140","Riva","MD","38.952412","-76.58205","-5","1" +"21144","Severn","MD","39.130224","-76.69142","-5","1" +"21146","Severna Park","MD","39.079059","-76.55784","-5","1" +"21150","Simpsonville","MD","39.236405","-76.941902","-5","1" +"21152","Sparks Glencoe","MD","39.543905","-76.67","-5","1" +"21153","Stevenson","MD","39.412905","-76.730345","-5","1" +"21154","Street","MD","39.661905","-76.35166","-5","1" +"21155","Upperco","MD","39.566103","-76.82125","-5","1" +"21156","Upper Falls","MD","39.439935","-76.39363","-5","1" +"21157","Westminster","MD","39.563901","-76.98926","-5","1" +"21158","Westminster","MD","39.624705","-77.03086","-5","1" +"21160","Whiteford","MD","39.707377","-76.31864","-5","1" +"21161","White Hall","MD","39.659671","-76.56859","-5","1" +"21162","White Marsh","MD","39.387307","-76.41236","-5","1" +"21163","Woodstock","MD","39.336855","-76.84947","-5","1" +"21176","New Windsor","MD","39.540072","-77.115045","-5","1" +"21201","Baltimore","MD","39.295306","-76.62118","-5","1" +"21202","Baltimore","MD","39.296507","-76.60693","-5","1" +"21203","Baltimore","MD","39.284707","-76.620489","-5","1" +"21204","Towson","MD","39.405606","-76.62648","-5","1" +"21205","Baltimore","MD","39.301157","-76.57478","-5","1" +"21206","Baltimore","MD","39.341107","-76.54085","-5","1" +"21207","Gwynn Oak","MD","39.324406","-76.7176","-5","1" +"21208","Pikesville","MD","39.376879","-76.7287","-5","1" +"21209","Baltimore","MD","39.368974","-76.66904","-5","1" +"21210","Baltimore","MD","39.352496","-76.63452","-5","1" +"21211","Baltimore","MD","39.328957","-76.63361","-5","1" +"21212","Baltimore","MD","39.363456","-76.61142","-5","1" +"21213","Baltimore","MD","39.311474","-76.58283","-5","1" +"21214","Baltimore","MD","39.351857","-76.56399","-5","1" +"21215","Baltimore","MD","39.345456","-76.68038","-5","1" +"21216","Baltimore","MD","39.310006","-76.67029","-5","1" +"21217","Baltimore","MD","39.306306","-76.63786","-5","1" +"21218","Baltimore","MD","39.325956","-76.60602","-5","1" +"21219","Sparrows Point","MD","39.229258","-76.44898","-5","1" +"21220","Middle River","MD","39.337798","-76.41533","-5","1" +"21221","Essex","MD","39.307737","-76.45171","-5","1" +"21222","Dundalk","MD","39.263162","-76.5082","-5","1" +"21223","Baltimore","MD","39.286556","-76.64644","-5","1" +"21224","Baltimore","MD","39.284607","-76.55696","-5","1" +"21225","Brooklyn","MD","39.229507","-76.61203","-5","1" +"21226","Curtis Bay","MD","39.211758","-76.56623","-5","1" +"21227","Halethorpe","MD","39.241957","-76.67712","-5","1" +"21228","Catonsville","MD","39.278056","-76.74002","-5","1" +"21229","Baltimore","MD","39.284856","-76.6878","-5","1" +"21230","Baltimore","MD","39.273107","-76.62613","-5","1" +"21231","Baltimore","MD","39.288607","-76.59116","-5","1" +"21233","Baltimore","MD","39.284707","-76.620489","-5","1" +"21234","Parkville","MD","39.385006","-76.54177","-5","1" +"21235","Baltimore","MD","39.284707","-76.620489","-5","1" +"21236","Nottingham","MD","39.389457","-76.48709","-5","1" +"21237","Rosedale","MD","39.33224","-76.50365","-5","1" +"21239","Baltimore","MD","39.36225","-76.58812","-5","1" +"21240","Baltimore","MD","39.142793","-76.651589","-5","1" +"21241","Baltimore","MD","39.284707","-76.620489","-5","1" +"21244","Windsor Mill","MD","39.338156","-76.76438","-5","1" +"21250","Baltimore","MD","39.258226","-76.713149","-5","1" +"21251","Baltimore","MD","39.438964","-76.592139","-5","1" +"21252","Baltimore","MD","39.388799","-76.613325","-5","1" +"21260","Baltimore","MD","39.284707","-76.620489","-5","1" +"21263","Baltimore","MD","39.284707","-76.620489","-5","1" +"21264","Baltimore","MD","39.284707","-76.620489","-5","1" +"21265","Baltimore","MD","39.284707","-76.620489","-5","1" +"21268","Baltimore","MD","39.284707","-76.620489","-5","1" +"21270","Baltimore","MD","39.284707","-76.620489","-5","1" +"21273","Baltimore","MD","39.284707","-76.620489","-5","1" +"21274","Baltimore","MD","39.284707","-76.620489","-5","1" +"21275","Baltimore","MD","39.284707","-76.620489","-5","1" +"21278","Baltimore","MD","39.284707","-76.620489","-5","1" +"21279","Baltimore","MD","39.284707","-76.620489","-5","1" +"21280","Baltimore","MD","39.284707","-76.620489","-5","1" +"21281","Baltimore","MD","39.284707","-76.620489","-5","1" +"21282","Baltimore","MD","39.438964","-76.592139","-5","1" +"21283","Baltimore","MD","39.284707","-76.620489","-5","1" +"21284","Baltimore","MD","39.438964","-76.592139","-5","1" +"21285","Baltimore","MD","39.438964","-76.592139","-5","1" +"21286","Towson","MD","39.399639","-76.58418","-5","1" +"21287","Baltimore","MD","39.297457","-76.592738","-5","1" +"21288","Baltimore","MD","39.284707","-76.620489","-5","1" +"21289","Baltimore","MD","39.284707","-76.620489","-5","1" +"21290","Baltimore","MD","39.293256","-76.623839","-5","1" +"21297","Baltimore","MD","39.284707","-76.620489","-5","1" +"21298","Baltimore","MD","39.284707","-76.620489","-5","1" +"21401","Annapolis","MD","38.997511","-76.49803","-5","1" +"21402","Annapolis","MD","38.988506","-76.47229","-5","1" +"21403","Annapolis","MD","38.946462","-76.48358","-5","1" +"21404","Annapolis","MD","38.974203","-76.594942","-5","1" +"21405","Annapolis","MD","39.02801","-76.54183","-5","1" +"21411","Annapolis","MD","38.974203","-76.594942","-5","1" +"21412","Annapolis","MD","38.974203","-76.594942","-5","1" +"21501","Cumberland","MD","39.580691","-78.690593","-5","1" +"21502","Cumberland","MD","39.646587","-78.77398","-5","1" +"21503","Cumberland","MD","39.580691","-78.690593","-5","1" +"21504","Cumberland","MD","39.580691","-78.690593","-5","1" +"21505","Cumberland","MD","39.594043","-78.843432","-5","1" +"21520","Accident","MD","39.629925","-79.31377","-5","1" +"21521","Barton","MD","39.535862","-79.0194","-5","1" +"21522","Bittinger","MD","39.614779","-79.24494","-5","1" +"21523","Bloomington","MD","39.47965","-79.07263","-5","1" +"21524","Corriganville","MD","39.698332","-78.78741","-5","1" +"21528","Eckhart Mines","MD","39.652187","-78.90123","-5","1" +"21529","Ellerslie","MD","39.718905","-78.77685","-5","1" +"21530","Flintstone","MD","39.697548","-78.53893","-5","1" +"21531","Friendsville","MD","39.662458","-79.416","-5","1" +"21532","Frostburg","MD","39.64612","-78.93778","-5","1" +"21536","Grantsville","MD","39.675393","-79.17045","-5","1" +"21538","Kitzmiller","MD","39.395674","-79.20096","-5","1" +"21539","Lonaconing","MD","39.580942","-78.99073","-5","1" +"21540","Luke","MD","39.475166","-79.05968","-5","1" +"21541","McHenry","MD","39.557364","-79.35999","-5","1" +"21542","Midland","MD","39.589842","-78.94877","-5","1" +"21543","Midlothian","MD","39.63664","-78.95027","-5","1" +"21545","Mount Savage","MD","39.699489","-78.86961","-5","1" +"21550","Oakland","MD","39.409861","-79.39015","-5","1" +"21555","Oldtown","MD","39.579649","-78.55826","-5","1" +"21556","Pinto","MD","39.572452","-78.843962","-5","1" +"21557","Rawlings","MD","39.509856","-78.92329","-5","1" +"21560","Spring Gap","MD","39.564946","-78.711","-5","1" +"21561","Swanton","MD","39.484412","-79.20856","-5","1" +"21562","Westernport","MD","39.488146","-79.03506","-5","1" +"21601","Easton","MD","38.777863","-76.0782","-5","1" +"21606","Easton","MD","38.758525","-76.180166","-5","1" +"21607","Barclay","MD","39.142967","-75.86144","-5","1" +"21609","Bethlehem","MD","38.740562","-75.958683","-5","1" +"21610","Betterton","MD","39.366193","-76.0623","-5","1" +"21612","Bozman","MD","38.747964","-76.27279","-5","1" +"21613","Cambridge","MD","38.545285","-76.09118","-5","1" +"21617","Centreville","MD","39.049697","-76.05309","-5","1" +"21619","Chester","MD","38.949536","-76.28063","-5","1" +"21620","Chestertown","MD","39.215278","-76.09726","-5","1" +"21622","Church Creek","MD","38.393669","-76.16806","-5","1" +"21623","Church Hill","MD","39.123235","-75.96707","-5","1" +"21624","Claiborne","MD","38.836142","-76.2702","-5","1" +"21625","Cordova","MD","38.882856","-75.98842","-5","1" +"21626","Crapo","MD","38.344103","-76.10098","-5","1" +"21627","Crocheron","MD","38.17656","-76.04321","-5","1" +"21628","Crumpton","MD","39.239132","-75.9243","-5","1" +"21629","Denton","MD","38.871895","-75.8273","-5","1" +"21631","East New Market","MD","38.589383","-75.94218","-5","1" +"21632","Federalsburg","MD","38.705731","-75.77488","-5","1" +"21634","Fishing Creek","MD","38.288409","-76.20146","-5","1" +"21635","Galena","MD","39.349536","-75.85332","-5","1" +"21636","Goldsboro","MD","39.026033","-75.7936","-5","1" +"21638","Grasonville","MD","38.954613","-76.21257","-5","1" +"21639","Greensboro","MD","38.971566","-75.80107","-5","1" +"21640","Henderson","MD","39.07733","-75.79992","-5","1" +"21641","Hillsboro","MD","38.920583","-75.9408","-5","1" +"21643","Hurlock","MD","38.641666","-75.86418","-5","1" +"21644","Ingleside","MD","39.094126","-75.87294","-5","1" +"21645","Kennedyville","MD","39.328784","-75.9666","-5","1" +"21647","Mcdaniel","MD","38.80503","-76.29105","-5","1" +"21648","Madison","MD","38.485297","-76.24057","-5","1" +"21649","Marydel","MD","39.122683","-75.76427","-5","1" +"21650","Massey","MD","39.311429","-75.80806","-5","1" +"21651","Millington","MD","39.254014","-75.86239","-5","1" +"21652","Neavitt","MD","38.795102","-76.152762","-5","1" +"21653","Newcomb","MD","38.750959","-76.17804","-5","1" +"21654","Oxford","MD","38.690831","-76.14666","-5","1" +"21655","Preston","MD","38.747216","-75.91459","-5","1" +"21656","Price","MD","39.034637","-76.092127","-5","1" +"21657","Queen Anne","MD","38.945143","-75.96915","-5","1" +"21658","Queenstown","MD","38.963566","-76.13939","-5","1" +"21659","Rhodesdale","MD","38.57526","-75.78177","-5","1" +"21660","Ridgely","MD","38.954731","-75.88459","-5","1" +"21661","Rock Hall","MD","39.137775","-76.22765","-5","1" +"21662","Royal Oak","MD","38.709254","-76.2086","-5","1" +"21663","Saint Michaels","MD","38.783264","-76.22256","-5","1" +"21664","Secretary","MD","38.609886","-75.949","-5","1" +"21665","Sherwood","MD","38.754785","-76.32474","-5","1" +"21666","Stevensville","MD","38.942464","-76.34124","-5","1" +"21667","Still Pond","MD","39.335017","-76.05365","-5","1" +"21668","Sudlersville","MD","39.201203","-75.85175","-5","1" +"21669","Taylors Island","MD","38.458374","-76.30203","-5","1" +"21670","Templeville","MD","38.88927","-75.861191","-5","1" +"21671","Tilghman","MD","38.708795","-76.33501","-5","1" +"21672","Toddville","MD","38.277014","-76.06229","-5","1" +"21673","Trappe","MD","38.662533","-76.07009","-5","1" +"21675","Wingate","MD","38.286828","-76.08221","-5","1" +"21676","Wittman","MD","38.796477","-76.30437","-5","1" +"21677","Woolford","MD","38.510494","-76.18219","-5","1" +"21678","Worton","MD","39.295736","-76.09974","-5","1" +"21679","Wye Mills","MD","38.925358","-76.05652","-5","1" +"21681","Ridgely","MD","38.88927","-75.861191","-5","1" +"21682","Ridgely","MD","38.88927","-75.861191","-5","1" +"21683","Ridgely","MD","38.88927","-75.861191","-5","1" +"21684","Ridgely","MD","38.88927","-75.861191","-5","1" +"21685","Ridgely","MD","38.88927","-75.861191","-5","1" +"21686","Ridgely","MD","38.88927","-75.861191","-5","1" +"21687","Ridgely","MD","38.88927","-75.861191","-5","1" +"21688","Ridgely","MD","38.88927","-75.861191","-5","1" +"21690","Chestertown","MD","39.034637","-76.092127","-5","1" +"21701","Frederick","MD","39.423344","-77.38902","-5","1" +"21702","Frederick","MD","39.451934","-77.442","-5","1" +"21703","Frederick","MD","39.385165","-77.4539","-5","1" +"21704","Frederick","MD","39.363415","-77.37849","-5","1" +"21705","Frederick","MD","39.469961","-77.392139","-5","1" +"21709","Frederick","MD","39.469961","-77.392139","-5","1" +"21710","Adamstown","MD","39.301647","-77.46667","-5","1" +"21711","Big Pool","MD","39.654773","-78.01823","-5","1" +"21713","Boonsboro","MD","39.521507","-77.66056","-5","1" +"21714","Braddock Heights","MD","39.4203","-77.505098","-5","1" +"21715","Brownsville","MD","39.386893","-77.658015","-5","1" +"21716","Brunswick","MD","39.313666","-77.62466","-5","1" +"21717","Buckeystown","MD","39.334864","-77.4333","-5","1" +"21718","Burkittsville","MD","39.391459","-77.62709","-5","1" +"21719","Cascade","MD","39.710433","-77.49104","-5","1" +"21720","Cavetown","MD","39.647296","-77.584162","-5","1" +"21721","Chewsville","MD","39.642537","-77.637152","-5","1" +"21722","Clear Spring","MD","39.656474","-77.9152","-5","1" +"21723","Cooksville","MD","39.319271","-77.02397","-5","1" +"21727","Emmitsburg","MD","39.695328","-77.32721","-5","1" +"21733","Fairplay","MD","39.549752","-77.7557","-5","1" +"21734","Funkstown","MD","39.609846","-77.70725","-5","1" +"21736","Gapland","MD","39.520696","-77.916196","-5","1" +"21737","Glenelg","MD","39.26574","-76.99735","-5","1" +"21738","Glenwood","MD","39.280106","-77.02052","-5","1" +"21740","Hagerstown","MD","39.633946","-77.73025","-5","1" +"21741","Hagerstown","MD","39.693944","-77.742116","-5","1" +"21742","Hagerstown","MD","39.658897","-77.68297","-5","1" +"21746","Hagerstown","MD","39.563787","-77.720642","-5","1" +"21747","Hagerstown","MD","39.520696","-77.916196","-5","1" +"21748","Hagerstown","MD","39.520696","-77.916196","-5","1" +"21749","Hagerstown","MD","39.520696","-77.916196","-5","1" +"21750","Hancock","MD","39.692614","-78.21691","-5","1" +"21754","Ijamsville","MD","39.342096","-77.29984","-5","1" +"21755","Jefferson","MD","39.372496","-77.55869","-5","1" +"21756","Keedysville","MD","39.460534","-77.69284","-5","1" +"21757","Keymar","MD","39.584616","-77.2686","-5","1" +"21758","Knoxville","MD","39.342991","-77.66014","-5","1" +"21759","Ladiesburg","MD","39.569426","-77.290519","-5","1" +"21762","Libertytown","MD","39.484079","-77.24711","-5","1" +"21764","Linwood","MD","39.534703","-77.049302","-5","1" +"21765","Lisbon","MD","39.337804","-77.071952","-5","1" +"21766","Little Orleans","MD","39.65643","-78.3986","-5","1" +"21767","Maugansville","MD","39.697894","-77.74514","-5","1" +"21769","Middletown","MD","39.446452","-77.55169","-5","1" +"21770","Monrovia","MD","39.354093","-77.24861","-5","1" +"21771","Mount Airy","MD","39.381295","-77.15867","-5","1" +"21773","Myersville","MD","39.528123","-77.557","-5","1" +"21774","New Market","MD","39.408627","-77.28676","-5","1" +"21775","New Midway","MD","39.564472","-77.29468","-5","1" +"21776","New Windsor","MD","39.529834","-77.09715","-5","1" +"21777","Point Of Rocks","MD","39.275498","-77.53385","-5","1" +"21778","Rocky Ridge","MD","39.610752","-77.34166","-5","1" +"21779","Rohrersville","MD","39.431058","-77.66169","-5","1" +"21780","Sabillasville","MD","39.677316","-77.47049","-5","1" +"21781","Saint James","MD","39.56991","-77.760697","-5","1" +"21782","Sharpsburg","MD","39.454582","-77.75052","-5","1" +"21783","Smithsburg","MD","39.655722","-77.5672","-5","1" +"21784","Sykesville","MD","39.39667","-76.965","-5","1" +"21787","Taneytown","MD","39.665171","-77.17264","-5","1" +"21788","Thurmont","MD","39.604303","-77.41092","-5","1" +"21790","Tuscarora","MD","39.254538","-77.49474","-5","1" +"21791","Union Bridge","MD","39.5549","-77.18176","-5","1" +"21792","Unionville","MD","39.469961","-77.392139","-5","1" +"21793","Walkersville","MD","39.484843","-77.34668","-5","1" +"21794","West Friendship","MD","39.297519","-76.98377","-5","1" +"21795","Williamsport","MD","39.600029","-77.81584","-5","1" +"21797","Woodbine","MD","39.335671","-77.06364","-5","1" +"21798","Woodsboro","MD","39.540623","-77.30606","-5","1" +"21801","Salisbury","MD","38.369675","-75.61214","-5","1" +"21802","Salisbury","MD","38.388434","-75.6276","-5","1" +"21803","Salisbury","MD","38.388434","-75.6276","-5","1" +"21804","Salisbury","MD","38.359332","-75.56931","-5","1" +"21810","Allen","MD","38.292848","-75.68812","-5","1" +"21811","Berlin","MD","38.343166","-75.19082","-5","1" +"21813","Bishopville","MD","38.431954","-75.18061","-5","1" +"21814","Bivalve","MD","38.302152","-75.88812","-5","1" +"21817","Crisfield","MD","37.985297","-75.84597","-5","1" +"21821","Deal Island","MD","38.158615","-75.93147","-5","1" +"21822","Eden","MD","38.284622","-75.64771","-5","1" +"21824","Ewell","MD","37.991177","-76.02374","-5","1" +"21826","Fruitland","MD","38.322867","-75.62088","-5","1" +"21829","Girdletree","MD","38.097861","-75.39378","-5","1" +"21830","Hebron","MD","38.407885","-75.69357","-5","1" +"21831","Hebron","MD","38.416292","-75.691572","-5","1" +"21835","Linkwood","MD","38.540293","-75.94596","-5","1" +"21836","Manokin","MD","38.073294","-75.734412","-5","1" +"21837","Mardela Springs","MD","38.469332","-75.74074","-5","1" +"21838","Marion Station","MD","38.018482","-75.7389","-5","1" +"21840","Nanticoke","MD","38.268651","-75.90494","-5","1" +"21841","Newark","MD","38.248485","-75.29106","-5","1" +"21842","Ocean City","MD","38.385457","-75.07153","-5","1" +"21843","Ocean City","MD","38.22309","-75.324057","-5","1" +"21849","Parsonsburg","MD","38.363057","-75.45574","-5","1" +"21850","Pittsville","MD","38.377713","-75.39747","-5","1" +"21851","Pocomoke City","MD","38.069322","-75.54811","-5","1" +"21852","Powellville","MD","38.388434","-75.6276","-5","1" +"21853","Princess Anne","MD","38.205272","-75.70169","-5","1" +"21856","Quantico","MD","38.327156","-75.79598","-5","1" +"21857","Rehobeth","MD","38.092718","-75.888207","-5","1" +"21861","Sharptown","MD","38.539817","-75.71854","-5","1" +"21862","Showell","MD","38.39893","-75.21195","-5","1" +"21863","Snow Hill","MD","38.193683","-75.41162","-5","1" +"21864","Stockton","MD","38.040265","-75.40992","-5","1" +"21865","Tyaskin","MD","38.324259","-75.87793","-5","1" +"21866","Tylerton","MD","37.967803","-76.02337","-5","1" +"21867","Upper Fairmount","MD","38.111688","-75.79242","-5","1" +"21868","Fairmount","MD","38.107572","-75.789354","-5","1" +"21869","Vienna","MD","38.493753","-75.84317","-5","1" +"21870","Wenona","MD","38.092718","-75.888207","-5","1" +"21871","Westover","MD","38.100727","-75.7115","-5","1" +"21872","Whaleyville","MD","38.408973","-75.29575","-5","1" +"21874","Willards","MD","38.397611","-75.35364","-5","1" +"21875","Delmar","MD","38.446894","-75.56365","-5","1" +"21890","Westover","MD","38.092718","-75.888207","-5","1" +"21901","North East","MD","39.593813","-75.95602","-5","1" +"21902","Perry Point","MD","39.553014","-76.06542","-5","1" +"21903","Perryville","MD","39.571003","-76.05077","-5","1" +"21904","Port Deposit","MD","39.61881","-76.0853","-5","1" +"21911","Rising Sun","MD","39.694974","-76.05395","-5","1" +"21912","Warwick","MD","39.44474","-75.80203","-5","1" +"21913","Cecilton","MD","39.402919","-75.86943","-5","1" +"21914","Charlestown","MD","39.572476","-75.97904","-5","1" +"21915","Chesapeake City","MD","39.523096","-75.84155","-5","1" +"21916","Childs","MD","39.541512","-75.999972","-5","1" +"21917","Colora","MD","39.671671","-76.0972","-5","1" +"21918","Conowingo","MD","39.679246","-76.15464","-5","1" +"21919","Earleville","MD","39.425542","-75.96164","-5","1" +"21920","Elk Mills","MD","39.658943","-75.82314","-5","1" +"21921","Elkton","MD","39.626736","-75.84294","-5","1" +"21922","Elkton","MD","39.593612","-75.947332","-5","1" +"21930","Georgetown","MD","39.365119","-75.88499","-5","1" +"22002","Amissville","VA","38.691448","-78.137019","-5","1" +"22003","Annandale","VA","38.830345","-77.21387","-5","1" +"22009","Burke","VA","38.831813","-77.288755","-5","1" +"22015","Burke","VA","38.788646","-77.27888","-5","1" +"22026","Dumfries","VA","38.582319","-77.32722","-5","1" +"22027","Dunn Loring","VA","38.893921","-77.21976","-5","1" +"22030","Fairfax","VA","38.846212","-77.32787","-5","1" +"22031","Fairfax","VA","38.859675","-77.26167","-5","1" +"22032","Fairfax","VA","38.821753","-77.29293","-5","1" +"22033","Fairfax","VA","38.874879","-77.38642","-5","1" +"22034","Fairfax","VA","38.831813","-77.288755","-5","1" +"22035","Fairfax","VA","38.855715","-77.361633","-5","1" +"22036","Fairfax","VA","38.735114","-77.07965","-5","1" +"22037","Fairfax","VA","38.831813","-77.288755","-5","1" +"22038","Fairfax","VA","38.852849","-77.30199","-5","1" +"22039","Fairfax Station","VA","38.760747","-77.31684","-5","1" +"22040","Falls Church","VA","38.884177","-77.171752","-5","1" +"22041","Falls Church","VA","38.849136","-77.14081","-5","1" +"22042","Falls Church","VA","38.864669","-77.18781","-5","1" +"22043","Falls Church","VA","38.901311","-77.19777","-5","1" +"22044","Falls Church","VA","38.859645","-77.15328","-5","1" +"22046","Falls Church","VA","38.886311","-77.18098","-5","1" +"22047","Falls Church","VA","38.831813","-77.288755","-5","1" +"22060","Fort Belvoir","VA","38.71299","-77.16615","-5","1" +"22066","Great Falls","VA","39.003809","-77.30165","-5","1" +"22067","Greenway","VA","38.96451","-77.233103","-5","1" +"22079","Lorton","VA","38.695915","-77.20122","-5","1" +"22081","Merrifield","VA","38.873861","-77.234454","-5","1" +"22082","Merrifield","VA","38.831813","-77.288755","-5","1" +"22092","Herndon","VA","38.831813","-77.288755","-5","1" +"22093","Ashburn","VA","39.085309","-77.645224","-5","1" +"22095","Herndon","VA","38.831813","-77.288755","-5","1" +"22096","Reston","VA","38.831813","-77.288755","-5","1" +"22101","McLean","VA","38.93276","-77.1677","-5","1" +"22102","McLean","VA","38.938664","-77.22196","-5","1" +"22103","West Mclean","VA","38.831813","-77.288755","-5","1" +"22106","McLean","VA","38.831813","-77.288755","-5","1" +"22109","McLean","VA","38.920165","-77.229043","-5","1" +"22116","Merrifield","VA","38.871469","-77.234428","-5","1" +"22118","Merrifield","VA","38.831813","-77.288755","-5","1" +"22119","Merrifield","VA","38.831813","-77.288755","-5","1" +"22120","Merrifield","VA","38.831813","-77.288755","-5","1" +"22121","Mount Vernon","VA","38.830912","-77.432252","-5","1" +"22122","Newington","VA","38.831813","-77.288755","-5","1" +"22124","Oakton","VA","38.88619","-77.32402","-5","1" +"22125","Occoquan","VA","38.683295","-77.26044","-5","1" +"22134","Quantico","VA","38.503139","-77.33372","-5","1" +"22135","Quantico","VA","38.721912","-77.466897","-5","1" +"22150","Springfield","VA","38.778243","-77.18562","-5","1" +"22151","Springfield","VA","38.803813","-77.20821","-5","1" +"22152","Springfield","VA","38.775716","-77.23131","-5","1" +"22153","Springfield","VA","38.745164","-77.23535","-5","1" +"22156","Springfield","VA","38.831813","-77.288755","-5","1" +"22158","Springfield","VA","38.831813","-77.288755","-5","1" +"22159","Springfield","VA","38.831813","-77.288755","-5","1" +"22160","Springfield","VA","38.831813","-77.288755","-5","1" +"22161","Springfield","VA","38.807462","-77.219354","-5","1" +"22172","Triangle","VA","38.557527","-77.35726","-5","1" +"22180","Vienna","VA","38.894711","-77.25337","-5","1" +"22181","Vienna","VA","38.896361","-77.29102","-5","1" +"22182","Vienna","VA","38.922478","-77.2566","-5","1" +"22183","Vienna","VA","38.831813","-77.288755","-5","1" +"22184","Vienna","VA","38.831813","-77.288755","-5","1" +"22185","Vienna","VA","38.831813","-77.288755","-5","1" +"22191","Woodbridge","VA","38.63275","-77.26786","-5","1" +"22192","Woodbridge","VA","38.678451","-77.30657","-5","1" +"22193","Woodbridge","VA","38.646375","-77.34469","-5","1" +"22194","Woodbridge","VA","38.721912","-77.466897","-5","1" +"22195","Woodbridge","VA","38.721912","-77.466897","-5","1" +"22199","Lorton","VA","38.831813","-77.288755","-5","1" +"22201","Arlington","VA","38.885337","-77.09512","-5","1" +"22202","Arlington","VA","38.856795","-77.05628","-5","1" +"22203","Arlington","VA","38.874979","-77.11455","-5","1" +"22204","Arlington","VA","38.860247","-77.09627","-5","1" +"22205","Arlington","VA","38.88275","-77.13999","-5","1" +"22206","Arlington","VA","38.843466","-77.08973","-5","1" +"22207","Arlington","VA","38.903697","-77.12749","-5","1" +"22209","Arlington","VA","38.893241","-77.07453","-5","1" +"22210","Arlington","VA","38.880811","-77.11295","-5","1" +"22211","Ft Myer","VA","38.878215","-77.06845","-5","1" +"22212","Arlington","VA","38.880811","-77.11295","-5","1" +"22213","Arlington","VA","38.894457","-77.16396","-5","1" +"22214","Arlington","VA","38.880811","-77.11295","-5","1" +"22215","Arlington","VA","38.880811","-77.11295","-5","1" +"22216","Arlington","VA","38.880811","-77.11295","-5","1" +"22217","Arlington","VA","38.880811","-77.11295","-5","1" +"22218","Arlington","VA","38.880811","-77.11295","-5","1" +"22219","Arlington","VA","38.880811","-77.11295","-5","1" +"22222","Arlington","VA","38.861462","-77.053599","-5","1" +"22223","Arlington","VA","38.880811","-77.11295","-5","1" +"22225","Arlington","VA","38.880811","-77.11295","-5","1" +"22226","Arlington","VA","38.883358","-77.10281","-5","1" +"22227","Arlington","VA","38.880811","-77.11295","-5","1" +"22229","Arlington","VA","38.880811","-77.11295","-5","1" +"22230","Arlington","VA","38.87972","-77.110817","-5","1" +"22234","Arlington","VA","38.880811","-77.11295","-5","1" +"22240","Arlington","VA","38.856623","-77.051788","-5","1" +"22241","Arlington","VA","38.880811","-77.11295","-5","1" +"22242","Arlington","VA","38.850879","-77.052336","-5","1" +"22243","Arlington","VA","38.86045","-77.051569","-5","1" +"22244","Arlington","VA","38.854522","-77.052035","-5","1" +"22245","Arlington","VA","38.851773","-77.052296","-5","1" +"22246","Arlington","VA","38.880811","-77.11295","-5","1" +"22301","Alexandria","VA","38.819863","-77.05854","-5","1" +"22302","Alexandria","VA","38.829512","-77.08204","-5","1" +"22303","Alexandria","VA","38.792863","-77.07964","-5","1" +"22304","Alexandria","VA","38.813013","-77.11667","-5","1" +"22305","Alexandria","VA","38.836779","-77.06418","-5","1" +"22306","Alexandria","VA","38.757214","-77.08666","-5","1" +"22307","Alexandria","VA","38.774863","-77.0593","-5","1" +"22308","Alexandria","VA","38.728464","-77.05701","-5","1" +"22309","Alexandria","VA","38.725214","-77.10734","-5","1" +"22310","Alexandria","VA","38.782013","-77.12125","-5","1" +"22311","Alexandria","VA","38.837312","-77.12064","-5","1" +"22312","Alexandria","VA","38.817362","-77.1537","-5","1" +"22313","Alexandria","VA","38.815762","-77.09005","-5","1" +"22314","Alexandria","VA","38.806163","-77.05139","-5","1" +"22315","Alexandria","VA","38.757924","-77.15284","-5","1" +"22320","Alexandria","VA","38.804413","-77.046699","-5","1" +"22321","Alexandria","VA","38.831813","-77.288755","-5","1" +"22331","Alexandria","VA","38.801342","-77.070733","-5","1" +"22332","Alexandria","VA","38.803142","-77.072679","-5","1" +"22333","Alexandria","VA","38.815762","-77.09005","-5","1" +"22334","Alexandria","VA","38.815762","-77.09005","-5","1" +"22336","Alexandria","VA","38.815762","-77.09005","-5","1" +"22393","Fishersville","VA","38.103819","-78.963004","-5","1" +"22401","Fredericksburg","VA","38.301829","-77.47077","-5","1" +"22402","Fredericksburg","VA","38.299613","-77.489666","-5","1" +"22403","Fredericksburg","VA","38.417273","-77.460814","-5","1" +"22404","Fredericksburg","VA","38.298305","-77.489913","-5","1" +"22405","Fredericksburg","VA","38.317636","-77.43297","-5","1" +"22406","Fredericksburg","VA","38.387261","-77.54676","-5","1" +"22407","Fredericksburg","VA","38.271028","-77.5559","-5","1" +"22408","Fredericksburg","VA","38.236023","-77.46111","-5","1" +"22412","Fredericksburg","VA","38.184716","-77.662559","-5","1" +"22427","Bowling Green","VA","38.042346","-77.30833","-5","1" +"22428","Bowling Green","VA","38.014536","-77.355902","-5","1" +"22430","Brooke","VA","38.385704","-77.374292","-5","1" +"22432","Burgess","VA","37.860549","-76.35637","-5","1" +"22433","Burr Hill","VA","38.343691","-77.85964","-5","1" +"22435","Callao","VA","37.996825","-76.56435","-5","1" +"22436","Caret","VA","38.069014","-77.09611","-5","1" +"22437","Center Cross","VA","37.790946","-76.78764","-5","1" +"22438","Champlain","VA","38.041706","-77.005","-5","1" +"22442","Coles Point","VA","38.121793","-76.79025","-5","1" +"22443","Colonial Beach","VA","38.22653","-76.97442","-5","1" +"22446","Corbin","VA","38.171755","-77.408163","-5","1" +"22448","Dahlgren","VA","38.340124","-77.03273","-5","1" +"22451","Dogue","VA","38.271077","-77.17261","-5","1" +"22454","Dunnsville","VA","37.854791","-76.81298","-5","1" +"22456","Edwardsville","VA","37.852316","-76.40511","-5","1" +"22460","Farnham","VA","37.858952","-76.63263","-5","1" +"22463","Garrisonville","VA","38.468432","-77.461213","-5","1" +"22469","Hague","VA","38.093956","-76.64055","-5","1" +"22471","Hartwood","VA","38.39933","-77.581351","-5","1" +"22472","Haynesville","VA","37.950511","-76.636722","-5","1" +"22473","Heathsville","VA","37.892668","-76.36307","-5","1" +"22476","Hustle","VA","38.036866","-77.08033","-5","1" +"22480","Irvington","VA","37.66871","-76.41038","-5","1" +"22481","Jersey","VA","38.271077","-77.17261","-5","1" +"22482","Kilmarnock","VA","37.733327","-76.34389","-5","1" +"22485","King George","VA","38.277837","-77.1642","-5","1" +"22486","Irvington","VA","37.665713","-76.420763","-5","1" +"22488","Kinsale","VA","38.046358","-76.57924","-5","1" +"22501","Ladysmith","VA","38.015899","-77.559298","-5","1" +"22503","Lancaster","VA","37.732696","-76.51554","-5","1" +"22504","Laneview","VA","37.763552","-76.72961","-5","1" +"22507","Lively","VA","37.762848","-76.49749","-5","1" +"22508","Locust Grove","VA","38.326624","-77.76987","-5","1" +"22509","Loretto","VA","38.104829","-77.0743","-5","1" +"22511","Lottsburg","VA","37.991772","-76.48985","-5","1" +"22513","Merry Point","VA","37.750261","-76.509615","-5","1" +"22514","Milford","VA","37.988674","-77.29047","-5","1" +"22517","Mollusk","VA","37.75028","-76.578109","-5","1" +"22520","Montross","VA","38.129822","-76.76155","-5","1" +"22523","Morattico","VA","37.792761","-76.60933","-5","1" +"22524","Mount Holly","VA","38.118186","-76.680504","-5","1" +"22526","Ninde","VA","38.271077","-77.17261","-5","1" +"22528","Nuttsville","VA","37.713175","-76.409946","-5","1" +"22529","Oldhams","VA","38.006793","-76.68218","-5","1" +"22530","Ophelia","VA","37.90938","-76.293436","-5","1" +"22534","Partlow","VA","38.08157","-77.66795","-5","1" +"22535","Port Royal","VA","38.164219","-77.18217","-5","1" +"22538","Rappahannock Academy","VA","38.22172","-77.26648","-5","1" +"22539","Reedville","VA","37.854233","-76.27848","-5","1" +"22542","Rhoadesville","VA","38.296355","-77.88379","-5","1" +"22544","Rollins Fork","VA","38.271077","-77.17261","-5","1" +"22545","Ruby","VA","38.508611","-77.542957","-5","1" +"22546","Ruther Glen","VA","37.95969","-77.47733","-5","1" +"22547","Sealston","VA","38.271077","-77.17261","-5","1" +"22548","Sharps","VA","37.825956","-76.70563","-5","1" +"22552","Sparta","VA","38.009438","-77.225139","-5","1" +"22553","Spotsylvania","VA","38.207275","-77.64378","-5","1" +"22554","Stafford","VA","38.460395","-77.43266","-5","1" +"22555","Stafford","VA","38.417273","-77.460814","-5","1" +"22558","Stratford","VA","38.121793","-76.79025","-5","1" +"22560","Tappahannock","VA","37.916172","-76.90656","-5","1" +"22565","Thornburg","VA","38.137216","-77.518865","-5","1" +"22567","Unionville","VA","38.233223","-77.91258","-5","1" +"22570","Village","VA","37.947224","-76.615358","-5","1" +"22572","Warsaw","VA","37.957869","-76.75725","-5","1" +"22576","Weems","VA","37.680124","-76.44242","-5","1" +"22577","Sandy Point","VA","38.067325","-76.550274","-5","1" +"22578","White Stone","VA","37.64424","-76.36034","-5","1" +"22579","Wicomico Church","VA","37.807268","-76.31275","-5","1" +"22580","Woodford","VA","38.095772","-77.44404","-5","1" +"22581","Zacata","VA","38.121793","-76.79025","-5","1" +"22601","Winchester","VA","39.179076","-78.16653","-5","1" +"22602","Winchester","VA","39.158386","-78.24758","-5","1" +"22603","Winchester","VA","39.267257","-78.19396","-5","1" +"22604","Winchester","VA","39.167603","-78.168643","-5","1" +"22606","Newport News","VA","38.112139","-77.329674","-5","1" +"22610","Bentonville","VA","38.822506","-78.27368","-5","1" +"22611","Berryville","VA","39.156378","-77.97857","-5","1" +"22620","Boyce","VA","39.061499","-78.03693","-5","1" +"22622","Brucetown","VA","39.2543","-78.066373","-5","1" +"22623","Chester Gap","VA","38.853733","-78.141239","-5","1" +"22624","Clear Brook","VA","39.26582","-78.08496","-5","1" +"22625","Cross Junction","VA","39.345906","-78.30975","-5","1" +"22626","Fishers Hill","VA","38.980286","-78.4011","-5","1" +"22627","Flint Hill","VA","38.765004","-78.0948","-5","1" +"22630","Front Royal","VA","38.926615","-78.17499","-5","1" +"22637","Gore","VA","39.247386","-78.35444","-5","1" +"22638","Winchester","VA","39.236944","-78.288465","-5","1" +"22639","Hume","VA","38.814086","-78.01898","-5","1" +"22640","Huntly","VA","38.808303","-78.13578","-5","1" +"22641","Strasburg","VA","39.076317","-78.39617","-5","1" +"22642","Linden","VA","38.932178","-78.06051","-5","1" +"22643","Markham","VA","38.905106","-77.98948","-5","1" +"22644","Maurertown","VA","38.944011","-78.48125","-5","1" +"22645","Middletown","VA","39.023035","-78.2809","-5","1" +"22646","Millwood","VA","39.069682","-78.03752","-5","1" +"22649","Middletown","VA","39.004774","-78.247806","-5","1" +"22650","Rileyville","VA","38.76592","-78.36545","-5","1" +"22651","Front Royal","VA","38.947215","-78.213304","-5","1" +"22652","Fort Valley","VA","38.823987","-78.4531","-5","1" +"22654","Star Tannery","VA","39.04494","-78.47377","-5","1" +"22655","Stephens City","VA","39.07814","-78.20713","-5","1" +"22656","Stephenson","VA","39.230131","-78.09992","-5","1" +"22657","Strasburg","VA","39.00127","-78.36485","-5","1" +"22660","Toms Brook","VA","38.949013","-78.43921","-5","1" +"22663","White Post","VA","39.045019","-78.12417","-5","1" +"22664","Woodstock","VA","38.881558","-78.51586","-5","1" +"22701","Culpeper","VA","38.459521","-77.99875","-5","1" +"22709","Aroda","VA","38.312548","-78.23622","-5","1" +"22711","Banco","VA","38.476275","-78.2729","-5","1" +"22712","Bealeton","VA","38.5593","-77.75728","-5","1" +"22713","Boston","VA","38.549388","-78.15309","-5","1" +"22714","Brandy Station","VA","38.512989","-77.89529","-5","1" +"22715","Brightwood","VA","38.414359","-78.18321","-5","1" +"22716","Castleton","VA","38.627135","-78.11341","-5","1" +"22718","Elkwood","VA","38.493501","-77.82067","-5","1" +"22719","Etlan","VA","38.527816","-78.25117","-5","1" +"22720","Goldvein","VA","38.474222","-77.64361","-5","1" +"22721","Graves Mill","VA","38.428509","-78.267848","-5","1" +"22722","Haywood","VA","38.452043","-78.24197","-5","1" +"22723","Hood","VA","38.331957","-78.3774","-5","1" +"22724","Jeffersonton","VA","38.630345","-77.89777","-5","1" +"22725","Leon","VA","38.428509","-78.267848","-5","1" +"22726","Lignum","VA","38.411845","-77.82208","-5","1" +"22727","Madison","VA","38.393351","-78.28737","-5","1" +"22728","Midland","VA","38.587503","-77.70952","-5","1" +"22729","Mitchells","VA","38.373645","-78.0165","-5","1" +"22730","Oakpark","VA","38.365699","-78.18604","-5","1" +"22731","Pratts","VA","38.345179","-78.26151","-5","1" +"22732","Radiant","VA","38.310141","-78.20098","-5","1" +"22733","Rapidan","VA","38.324175","-78.05877","-5","1" +"22734","Remington","VA","38.52916","-77.80274","-5","1" +"22735","Reva","VA","38.477063","-78.17517","-5","1" +"22736","Richardsville","VA","38.388311","-77.68111","-5","1" +"22737","Rixeyville","VA","38.588409","-77.98995","-5","1" +"22738","Rochelle","VA","38.303414","-78.28937","-5","1" +"22739","Somerville","VA","38.505945","-77.59557","-5","1" +"22740","Sperryville","VA","38.636896","-78.24","-5","1" +"22741","Stevensburg","VA","38.442247","-77.8962","-5","1" +"22742","Sumerduck","VA","38.456916","-77.7009","-5","1" +"22743","Syria","VA","38.509556","-78.33721","-5","1" +"22746","Viewtown","VA","38.638635","-78.03061","-5","1" +"22747","Washington","VA","38.725801","-78.16767","-5","1" +"22748","Wolftown","VA","38.372652","-78.380509","-5","1" +"22749","Woodville","VA","38.629058","-78.18057","-5","1" +"22801","Harrisonburg","VA","38.426786","-78.88153","-5","1" +"22802","Harrisonburg","VA","38.477752","-78.86302","-5","1" +"22807","Harrisonburg","VA","38.440898","-78.874173","-5","1" +"22810","Basye","VA","38.81913","-78.77149","-5","1" +"22811","Bergton","VA","38.797789","-78.96672","-5","1" +"22812","Bridgewater","VA","38.398049","-79.00071","-5","1" +"22815","Broadway","VA","38.619654","-78.80513","-5","1" +"22820","Criders","VA","38.725738","-79.01957","-5","1" +"22821","Dayton","VA","38.436873","-78.99039","-5","1" +"22824","Edinburg","VA","38.828628","-78.60964","-5","1" +"22827","Elkton","VA","38.404364","-78.62907","-5","1" +"22830","Fulks Run","VA","38.637545","-78.95205","-5","1" +"22831","Hinton","VA","38.584516","-79.04328","-5","1" +"22832","Keezletown","VA","38.453741","-78.78234","-5","1" +"22833","Lacey Spring","VA","38.528361","-78.855172","-5","1" +"22834","Linville","VA","38.544652","-78.86564","-5","1" +"22835","Luray","VA","38.665615","-78.45621","-5","1" +"22840","McGaheysville","VA","38.387721","-78.73452","-5","1" +"22841","Mount Crawford","VA","38.358334","-78.90667","-5","1" +"22842","Mount Jackson","VA","38.772409","-78.69461","-5","1" +"22843","Mount Solon","VA","38.337507","-79.11629","-5","1" +"22844","New Market","VA","38.652274","-78.66417","-5","1" +"22845","Orkney Springs","VA","38.788499","-78.81488","-5","1" +"22846","Penn Laird","VA","38.371616","-78.79742","-5","1" +"22847","Quicksburg","VA","38.704494","-78.70088","-5","1" +"22848","Pleasant Valley","VA","38.384681","-78.891422","-5","1" +"22849","Shenandoah","VA","38.49696","-78.61997","-5","1" +"22850","Singers Glen","VA","38.553225","-78.92206","-5","1" +"22851","Stanley","VA","38.567459","-78.50696","-5","1" +"22853","Timberville","VA","38.641556","-78.76258","-5","1" +"22865","Luray","VA","38.65845","-78.426788","-5","1" +"22875","Luray","VA","38.665568","-78.466716","-5","1" +"22880","Waynesboro","VA","38.058102","-78.878493","-5","1" +"22901","Charlottesville","VA","38.072402","-78.50149","-5","1" +"22902","Charlottesville","VA","38.00847","-78.47803","-5","1" +"22903","Charlottesville","VA","38.026342","-78.5348","-5","1" +"22904","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22905","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22906","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22907","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22908","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22909","Charlottesville","VA","38.024474","-78.448214","-5","1" +"22910","Charlottesville","VA","38.040101","-78.485066","-5","1" +"22911","Charlottesville","VA","38.07735","-78.42042","-5","1" +"22920","Afton","VA","37.987812","-78.79701","-5","1" +"22922","Arrington","VA","37.69474","-78.93251","-5","1" +"22923","Barboursville","VA","38.167465","-78.3259","-5","1" +"22924","Batesville","VA","38.000289","-78.72662","-5","1" +"22931","Covesville","VA","37.890917","-78.70343","-5","1" +"22932","Crozet","VA","38.116217","-78.71396","-5","1" +"22935","Dyke","VA","38.254105","-78.56548","-5","1" +"22936","Earlysville","VA","38.150083","-78.47627","-5","1" +"22937","Esmont","VA","37.79922","-78.61263","-5","1" +"22938","Faber","VA","37.85583","-78.77546","-5","1" +"22939","Fishersville","VA","38.104457","-78.97416","-5","1" +"22940","Free Union","VA","38.197583","-78.59304","-5","1" +"22942","Gordonsville","VA","38.125214","-78.197","-5","1" +"22943","Greenwood","VA","38.039928","-78.75894","-5","1" +"22945","Ivy","VA","38.065383","-78.595831","-5","1" +"22946","Keene","VA","37.855103","-78.56162","-5","1" +"22947","Keswick","VA","38.025346","-78.32925","-5","1" +"22948","Locust Dale","VA","38.349795","-78.11747","-5","1" +"22949","Lovingston","VA","37.780882","-78.89239","-5","1" +"22952","Lyndhurst","VA","37.969657","-78.95712","-5","1" +"22953","Madison Mills","VA","38.428509","-78.267848","-5","1" +"22954","Massies Mill","VA","37.790887","-79.00334","-5","1" +"22957","Montpelier Station","VA","38.221405","-78.19026","-5","1" +"22958","Nellysford","VA","37.905649","-78.90273","-5","1" +"22959","North Garden","VA","37.935994","-78.64088","-5","1" +"22960","Orange","VA","38.231526","-78.07923","-5","1" +"22963","Palmyra","VA","37.871021","-78.30837","-5","1" +"22964","Piney River","VA","37.725074","-78.99245","-5","1" +"22965","Quinque","VA","38.330132","-78.475018","-5","1" +"22967","Roseland","VA","37.79151","-78.98961","-5","1" +"22968","Ruckersville","VA","38.233717","-78.41009","-5","1" +"22969","Schuyler","VA","37.792343","-78.69417","-5","1" +"22971","Shipman","VA","37.74747","-78.80233","-5","1" +"22972","Somerset","VA","38.214023","-78.21596","-5","1" +"22973","Stanardsville","VA","38.301191","-78.46396","-5","1" +"22974","Troy","VA","37.959376","-78.26353","-5","1" +"22976","Tyro","VA","37.840892","-79.02459","-5","1" +"22980","Waynesboro","VA","38.076547","-78.89839","-5","1" +"22987","White Hall","VA","38.179859","-78.618912","-5","1" +"22989","Woodberry Forest","VA","38.292221","-78.11865","-5","1" +"23001","Achilles","VA","37.293165","-76.41057","-5","1" +"23002","Amelia Court House","VA","37.338511","-77.95893","-5","1" +"23003","Ark","VA","37.432335","-76.601616","-5","1" +"23004","Arvonia","VA","37.673369","-78.38899","-5","1" +"23005","Ashland","VA","37.754254","-77.47465","-5","1" +"23009","Aylett","VA","37.790757","-77.17553","-5","1" +"23011","Barhamsville","VA","37.478184","-76.81384","-5","1" +"23014","Beaumont","VA","37.733844","-77.888082","-5","1" +"23015","Beaverdam","VA","37.931011","-77.64296","-5","1" +"23017","Bellamy","VA","37.418242","-76.508402","-5","1" +"23018","Bena","VA","37.418242","-76.508402","-5","1" +"23021","Bohannon","VA","37.3946","-76.36571","-5","1" +"23022","Bremo Bluff","VA","37.728067","-78.26865","-5","1" +"23023","Bruington","VA","37.777938","-76.95055","-5","1" +"23024","Bumpass","VA","37.961187","-77.76824","-5","1" +"23025","Cardinal","VA","37.422209","-76.37304","-5","1" +"23027","Cartersville","VA","37.653694","-78.11902","-5","1" +"23030","Charles City","VA","37.342306","-77.0731","-5","1" +"23031","Christchurch","VA","37.598391","-76.447551","-5","1" +"23032","Church View","VA","37.674655","-76.68104","-5","1" +"23035","Cobbs Creek","VA","37.514774","-76.37543","-5","1" +"23038","Columbia","VA","37.758949","-78.14009","-5","1" +"23039","Crozier","VA","37.643406","-77.80709","-5","1" +"23040","Cumberland","VA","37.522085","-78.2553","-5","1" +"23043","Deltaville","VA","37.550168","-76.34327","-5","1" +"23045","Diggs","VA","37.426154","-76.26844","-5","1" +"23047","Doswell","VA","37.855002","-77.47011","-5","1" +"23050","Dutton","VA","37.490365","-76.44118","-5","1" +"23054","Fife","VA","37.733844","-77.888082","-5","1" +"23055","Fork Union","VA","37.782109","-78.23472","-5","1" +"23056","Foster","VA","37.383629","-76.36167","-5","1" +"23058","Glen Allen","VA","37.531296","-77.416103","-5","1" +"23059","Glen Allen","VA","37.686152","-77.53651","-5","1" +"23060","Glen Allen","VA","37.661647","-77.52632","-5","1" +"23061","Gloucester","VA","37.414991","-76.52959","-5","1" +"23062","Gloucester Point","VA","37.257466","-76.49661","-5","1" +"23063","Goochland","VA","37.69536","-77.99793","-5","1" +"23064","Grimstead","VA","37.50519","-76.29784","-5","1" +"23065","Gum Spring","VA","37.801783","-77.92431","-5","1" +"23066","Gwynn","VA","37.501358","-76.28453","-5","1" +"23067","Hadensville","VA","37.825208","-77.989878","-5","1" +"23068","Hallieford","VA","37.492529","-76.33636","-5","1" +"23069","Hanover","VA","37.753904","-77.33963","-5","1" +"23070","Hardyville","VA","37.551549","-76.39294","-5","1" +"23071","Hartfield","VA","37.533471","-76.4609","-5","1" +"23072","Hayes","VA","37.288999","-76.47393","-5","1" +"23075","Highland Springs","VA","37.543595","-77.32339","-5","1" +"23076","Hudgins","VA","37.475132","-76.31316","-5","1" +"23079","Jamaica","VA","37.748645","-76.66735","-5","1" +"23081","Jamestown","VA","37.223482","-76.783317","-5","1" +"23083","Jetersville","VA","37.303726","-78.11349","-5","1" +"23084","Kents Store","VA","37.90198","-78.09647","-5","1" +"23085","King And Queen Court Hous","VA","37.711368","-76.85843","-5","1" +"23086","King William","VA","37.64375","-77.02508","-5","1" +"23089","Lanexa","VA","37.435153","-76.90719","-5","1" +"23090","Lightfoot","VA","37.235892","-76.445567","-5","1" +"23091","Little Plymouth","VA","37.638259","-76.82858","-5","1" +"23092","Locust Hill","VA","37.593059","-76.50694","-5","1" +"23093","Louisa","VA","37.995103","-78.04612","-5","1" +"23101","Macon","VA","37.553314","-77.892964","-5","1" +"23102","Maidens","VA","37.712894","-77.82379","-5","1" +"23103","Manakin Sabot","VA","37.639354","-77.72841","-5","1" +"23104","Gloucester Point","VA","37.298919","-76.530276","-5","1" +"23105","Mannboro","VA","37.345032","-77.944868","-5","1" +"23106","Manquin","VA","37.704693","-77.20342","-5","1" +"23107","Maryus","VA","37.28641","-76.404783","-5","1" +"23108","Mascot","VA","37.642543","-76.73554","-5","1" +"23109","Mathews","VA","37.43704","-76.30724","-5","1" +"23110","Mattaponi","VA","37.571544","-76.78066","-5","1" +"23111","Mechanicsville","VA","37.605641","-77.31536","-5","1" +"23112","Midlothian","VA","37.427988","-77.64868","-5","1" +"23113","Midlothian","VA","37.51338","-77.64165","-5","1" +"23115","Millers Tavern","VA","37.826347","-76.87751","-5","1" +"23116","Mechanicsville","VA","37.662559","-77.36778","-5","1" +"23117","Mineral","VA","38.007186","-77.86809","-5","1" +"23119","Moon","VA","37.451894","-76.2904","-5","1" +"23120","Moseley","VA","37.422868","-77.7813","-5","1" +"23123","New Canton","VA","37.663039","-78.2868","-5","1" +"23124","New Kent","VA","37.545276","-77.06664","-5","1" +"23125","New Point","VA","37.342721","-76.27989","-5","1" +"23126","Newtown","VA","37.902954","-77.14586","-5","1" +"23127","Norge","VA","37.310451","-76.746769","-5","1" +"23128","North","VA","37.456363","-76.43298","-5","1" +"23129","Oilville","VA","37.698646","-77.77111","-5","1" +"23130","Onemo","VA","37.405038","-76.27785","-5","1" +"23131","Ordinary","VA","37.312159","-76.518831","-5","1" +"23138","Port Haywood","VA","37.366838","-76.29577","-5","1" +"23139","Powhatan","VA","37.55563","-77.90048","-5","1" +"23140","Providence Forge","VA","37.438569","-77.03578","-5","1" +"23141","Quinton","VA","37.506369","-77.15127","-5","1" +"23146","Rockville","VA","37.725675","-77.69002","-5","1" +"23147","Ruthville","VA","37.37956","-77.034752","-5","1" +"23148","Saint Stephens Church","VA","37.837177","-77.05555","-5","1" +"23149","Saluda","VA","37.5787","-76.60916","-5","1" +"23150","Sandston","VA","37.517804","-77.28678","-5","1" +"23153","Sandy Hook","VA","37.787745","-77.96916","-5","1" +"23154","Schley","VA","37.418242","-76.508402","-5","1" +"23155","Severn","VA","37.418242","-76.508402","-5","1" +"23156","Shacklefords","VA","37.501267","-76.72389","-5","1" +"23160","State Farm","VA","37.733844","-77.888082","-5","1" +"23161","Stevensville","VA","37.701245","-76.92919","-5","1" +"23162","Studley","VA","37.772187","-77.45264","-5","1" +"23163","Susan","VA","37.357742","-76.30136","-5","1" +"23168","Toano","VA","37.403872","-76.81744","-5","1" +"23169","Topping","VA","37.599217","-76.45876","-5","1" +"23170","Trevilians","VA","37.940788","-77.996956","-5","1" +"23173","University Of Richmond","VA","37.524246","-77.493157","-5","1" +"23175","Urbanna","VA","37.648536","-76.59872","-5","1" +"23176","Wake","VA","37.571789","-76.41631","-5","1" +"23177","Walkerton","VA","37.728152","-76.99901","-5","1" +"23178","Ware Neck","VA","37.400287","-76.46089","-5","1" +"23180","Water View","VA","37.710586","-76.63179","-5","1" +"23181","West Point","VA","37.559878","-76.83018","-5","1" +"23183","White Marsh","VA","37.363201","-76.532492","-5","1" +"23184","Wicomico","VA","37.285188","-76.5298","-5","1" +"23185","Williamsburg","VA","37.256301","-76.70024","-5","1" +"23186","Williamsburg","VA","37.270994","-76.71722","-5","1" +"23187","Williamsburg","VA","37.310451","-76.746769","-5","1" +"23188","Williamsburg","VA","37.322936","-76.75793","-5","1" +"23190","Woods Cross Roads","VA","37.482039","-76.636154","-5","1" +"23191","Zanoni","VA","37.418242","-76.508402","-5","1" +"23192","Montpelier","VA","37.813901","-77.68952","-5","1" +"23201","Richmond","VA","37.541106","-77.431825","-5","1" +"23218","Richmond","VA","37.524246","-77.493157","-5","1" +"23219","Richmond","VA","37.541046","-77.43536","-5","1" +"23220","Richmond","VA","37.549396","-77.45739","-5","1" +"23221","Richmond","VA","37.557626","-77.48844","-5","1" +"23222","Richmond","VA","37.573595","-77.42504","-5","1" +"23223","Richmond","VA","37.544746","-77.40085","-5","1" +"23224","Richmond","VA","37.505147","-77.46101","-5","1" +"23225","Richmond","VA","37.51918","-77.49851","-5","1" +"23226","Richmond","VA","37.581696","-77.51709","-5","1" +"23227","Richmond","VA","37.606778","-77.44775","-5","1" +"23228","Richmond","VA","37.621745","-77.48896","-5","1" +"23229","Richmond","VA","37.593546","-77.56271","-5","1" +"23230","Richmond","VA","37.580346","-77.48831","-5","1" +"23231","Richmond","VA","37.482896","-77.36304","-5","1" +"23232","Richmond","VA","37.520187","-77.408359","-5","1" +"23233","Richmond","VA","37.622465","-77.61965","-5","1" +"23234","Richmond","VA","37.457341","-77.4658","-5","1" +"23235","Richmond","VA","37.522514","-77.56565","-5","1" +"23236","Richmond","VA","37.475798","-77.58235","-5","1" +"23237","Richmond","VA","37.406204","-77.4533","-5","1" +"23238","Richmond","VA","37.733844","-77.888082","-5","1" +"23240","Richmond","VA","37.524246","-77.493157","-5","1" +"23241","Richmond","VA","37.524246","-77.493157","-5","1" +"23242","Richmond","VA","37.531296","-77.416103","-5","1" +"23249","Richmond","VA","37.524246","-77.493157","-5","1" +"23250","Richmond","VA","37.507498","-77.332916","-5","1" +"23255","Richmond","VA","37.531296","-77.416103","-5","1" +"23260","Richmond","VA","37.524246","-77.493157","-5","1" +"23261","Richmond","VA","37.524246","-77.493157","-5","1" +"23266","Richmond","VA","37.567896","-77.528308","-5","1" +"23269","Richmond","VA","37.524246","-77.493157","-5","1" +"23270","Richmond","VA","37.524246","-77.493157","-5","1" +"23272","Richmond","VA","37.524246","-77.493157","-5","1" +"23273","Richmond","VA","37.524246","-77.493157","-5","1" +"23274","Richmond","VA","37.524246","-77.493157","-5","1" +"23275","Richmond","VA","37.524246","-77.493157","-5","1" +"23276","Richmond","VA","37.524246","-77.493157","-5","1" +"23278","Richmond","VA","37.524246","-77.493157","-5","1" +"23279","Richmond","VA","37.524246","-77.493157","-5","1" +"23280","Richmond","VA","37.637622","-77.46836","-5","1" +"23282","Richmond","VA","37.524246","-77.493157","-5","1" +"23284","Richmond","VA","37.549446","-77.451155","-5","1" +"23285","Richmond","VA","37.524246","-77.493157","-5","1" +"23286","Richmond","VA","37.524246","-77.493157","-5","1" +"23288","Richmond","VA","37.531296","-77.416103","-5","1" +"23289","Richmond","VA","37.531296","-77.416103","-5","1" +"23290","Richmond","VA","37.524246","-77.493157","-5","1" +"23291","Richmond","VA","37.524246","-77.493157","-5","1" +"23292","Richmond","VA","37.524246","-77.493157","-5","1" +"23293","Richmond","VA","37.524246","-77.493157","-5","1" +"23294","Richmond","VA","37.633316","-77.54775","-5","1" +"23297","Richmond","VA","37.389721","-77.561266","-5","1" +"23298","Richmond","VA","37.539694","-77.42815","-5","1" +"23301","Accomac","VA","37.713561","-75.67108","-5","1" +"23302","Assawoman","VA","37.870022","-75.53554","-5","1" +"23303","Atlantic","VA","37.892445","-75.51107","-5","1" +"23304","Battery Park","VA","36.99497","-76.56901","-5","1" +"23306","Belle Haven","VA","37.560093","-75.86182","-5","1" +"23307","Birdsnest","VA","37.434719","-75.87767","-5","1" +"23308","Bloxom","VA","37.828492","-75.61896","-5","1" +"23310","Cape Charles","VA","37.26252","-75.97104","-5","1" +"23313","Capeville","VA","37.201937","-75.952409","-5","1" +"23314","Carrollton","VA","36.940626","-76.5378","-5","1" +"23315","Carrsville","VA","36.740632","-76.84517","-5","1" +"23316","Cheriton","VA","37.284061","-75.96909","-5","1" +"23320","Chesapeake","VA","36.761698","-76.24511","-5","1" +"23321","Chesapeake","VA","36.826239","-76.41524","-5","1" +"23322","Chesapeake","VA","36.687543","-76.22905","-5","1" +"23323","Chesapeake","VA","36.757815","-76.3358","-5","1" +"23324","Chesapeake","VA","36.805717","-76.27126","-5","1" +"23325","Chesapeake","VA","36.814897","-76.23848","-5","1" +"23326","Chesapeake","VA","36.777015","-76.239417","-5","1" +"23327","Chesapeake","VA","36.7085","-76.278531","-5","1" +"23328","Chesapeake","VA","36.7085","-76.278531","-5","1" +"23336","Chincoteague Island","VA","37.934673","-75.3678","-5","1" +"23337","Wallops Island","VA","37.931216","-75.47192","-5","1" +"23341","Craddockville","VA","37.577292","-75.864607","-5","1" +"23345","Davis Wharf","VA","37.738248","-75.701449","-5","1" +"23347","Eastville","VA","37.353286","-75.94203","-5","1" +"23350","Exmore","VA","37.522269","-75.86132","-5","1" +"23351","Exmore","VA","37.528076","-75.822769","-5","1" +"23354","Franktown","VA","37.479588","-75.90262","-5","1" +"23356","Greenbackville","VA","37.999025","-75.41634","-5","1" +"23357","Greenbush","VA","37.754497","-75.67974","-5","1" +"23358","Hacksneck","VA","37.635833","-75.86849","-5","1" +"23359","Hallwood","VA","37.876357","-75.59686","-5","1" +"23380","Exmore","VA","37.529341","-75.816851","-5","1" +"23389","Harborton","VA","37.661513","-75.8315","-5","1" +"23395","Horntown","VA","37.95715","-75.45296","-5","1" +"23396","Oak Hall","VA","37.923682","-75.555142","-5","1" +"23397","Isle Of Wight","VA","36.898915","-76.687745","-5","1" +"23398","Jamesville","VA","37.534336","-75.877052","-5","1" +"23399","Jenkins Bridge","VA","37.916218","-75.616754","-5","1" +"23401","Keller","VA","37.61686","-75.76512","-5","1" +"23404","Locustville","VA","37.635838","-75.66642","-5","1" +"23405","Machipongo","VA","37.425567","-75.93117","-5","1" +"23407","Mappsville","VA","37.848467","-75.55559","-5","1" +"23408","Marionville","VA","37.424497","-75.877143","-5","1" +"23409","Mears","VA","37.859953","-75.62995","-5","1" +"23410","Melfa","VA","37.64682","-75.73996","-5","1" +"23412","Modest Town","VA","37.790415","-75.60347","-5","1" +"23413","Nassawadox","VA","37.452186","-75.84523","-5","1" +"23414","Nelsonia","VA","37.816896","-75.583227","-5","1" +"23415","New Church","VA","37.973042","-75.53045","-5","1" +"23416","Oak Hall","VA","37.9268","-75.55339","-5","1" +"23417","Onancock","VA","37.70973","-75.76272","-5","1" +"23418","Onley","VA","37.685447","-75.71051","-5","1" +"23419","Oyster","VA","37.307411","-75.926877","-5","1" +"23420","Painter","VA","37.589068","-75.79947","-5","1" +"23421","Parksley","VA","37.780966","-75.64895","-5","1" +"23422","Pungoteague","VA","37.616183","-75.791519","-5","1" +"23423","Quinby","VA","37.549044","-75.73237","-5","1" +"23424","Rescue","VA","36.996881","-76.564516","-5","1" +"23426","Sanford","VA","37.93359","-75.67692","-5","1" +"23427","Saxis","VA","37.92358","-75.72178","-5","1" +"23429","Seaview","VA","37.271104","-75.953608","-5","1" +"23430","Smithfield","VA","36.978861","-76.63973","-5","1" +"23431","Smithfield","VA","36.898915","-76.687745","-5","1" +"23432","Suffolk","VA","36.871628","-76.56063","-5","1" +"23433","Suffolk","VA","36.906805","-76.49899","-5","1" +"23434","Suffolk","VA","36.735893","-76.59656","-5","1" +"23435","Suffolk","VA","36.84882","-76.46521","-5","1" +"23436","Suffolk","VA","36.894736","-76.51281","-5","1" +"23437","Suffolk","VA","36.642645","-76.82272","-5","1" +"23438","Suffolk","VA","36.578692","-76.70129","-5","1" +"23439","Suffolk","VA","36.746101","-76.665251","-5","1" +"23440","Tangier","VA","37.847652","-75.99404","-5","1" +"23441","Tasley","VA","37.711442","-75.70044","-5","1" +"23442","Temperanceville","VA","37.887538","-75.53645","-5","1" +"23443","Townsend","VA","37.188217","-75.969003","-5","1" +"23450","Virginia Beach","VA","36.844004","-76.12036","-5","1" +"23451","Virginia Beach","VA","36.864788","-76.00098","-5","1" +"23452","Virginia Beach","VA","36.839209","-76.09333","-5","1" +"23453","Virginia Beach","VA","36.786753","-76.082079","-5","1" +"23454","Virginia Beach","VA","36.838398","-76.02862","-5","1" +"23455","Virginia Beach","VA","36.889797","-76.1426","-5","1" +"23456","Virginia Beach","VA","36.762459","-76.06139","-5","1" +"23457","Virginia Beach","VA","36.600219","-76.03592","-5","1" +"23458","Virginia Beach","VA","36.847388","-76.15581","-5","1" +"23459","Virginia Beach","VA","36.926647","-76.02058","-5","1" +"23460","Virginia Beach","VA","36.837598","-76.026053","-5","1" +"23461","Virginia Beach","VA","36.795328","-75.97768","-5","1" +"23462","Virginia Beach","VA","36.839648","-76.15177","-5","1" +"23463","Virginia Beach","VA","36.795669","-76.012628","-5","1" +"23464","Virginia Beach","VA","36.799284","-76.17767","-5","1" +"23465","Virginia Beach","VA","36.851243","-76.169215","-5","1" +"23466","Virginia Beach","VA","36.795669","-76.012628","-5","1" +"23467","Virginia Beach","VA","36.795669","-76.012628","-5","1" +"23468","Virginia Beach","VA","36.843948","-76.142407","-5","1" +"23471","Virginia Beach","VA","36.795669","-76.012628","-5","1" +"23472","Gloucester Point","VA","37.294975","-76.527425","-5","1" +"23479","Virginia Beach","VA","36.795669","-76.012628","-5","1" +"23480","Wachapreague","VA","37.605335","-75.69088","-5","1" +"23482","Wardtown","VA","37.273986","-75.86913","-5","1" +"23483","Wattsville","VA","37.943726","-75.502306","-5","1" +"23486","Willis Wharf","VA","37.518917","-75.810482","-5","1" +"23487","Windsor","VA","36.828408","-76.73506","-5","1" +"23488","Withams","VA","37.952168","-75.59681","-5","1" +"23501","Norfolk","VA","36.895911","-76.208521","-5","1" +"23502","Norfolk","VA","36.855247","-76.21233","-5","1" +"23503","Norfolk","VA","36.942947","-76.2547","-5","1" +"23504","Norfolk","VA","36.859362","-76.27028","-5","1" +"23505","Norfolk","VA","36.913147","-76.28444","-5","1" +"23506","Norfolk","VA","36.931166","-76.23972","-5","1" +"23507","Norfolk","VA","36.864047","-76.29947","-5","1" +"23508","Norfolk","VA","36.886447","-76.30065","-5","1" +"23509","Norfolk","VA","36.880297","-76.2596","-5","1" +"23510","Norfolk","VA","36.852547","-76.29028","-5","1" +"23511","Norfolk","VA","36.935579","-76.303417","-5","1" +"23512","Norfolk","VA","36.931166","-76.23972","-5","1" +"23513","Norfolk","VA","36.888147","-76.23909","-5","1" +"23514","Norfolk","VA","36.931166","-76.23972","-5","1" +"23515","Norfolk","VA","36.931166","-76.23972","-5","1" +"23517","Norfolk","VA","36.870197","-76.29271","-5","1" +"23518","Norfolk","VA","36.916497","-76.21796","-5","1" +"23519","Norfolk","VA","36.931166","-76.23972","-5","1" +"23520","Norfolk","VA","36.931166","-76.23972","-5","1" +"23521","Norfolk","VA","36.916397","-76.1527","-5","1" +"23523","Norfolk","VA","36.830936","-76.27354","-5","1" +"23529","Norfolk","VA","36.931166","-76.23972","-5","1" +"23530","Norfolk","VA","36.931166","-76.23972","-5","1" +"23541","Norfolk","VA","36.931166","-76.23972","-5","1" +"23551","Norfolk","VA","36.931166","-76.23972","-5","1" +"23601","Newport News","VA","37.053346","-76.45948","-5","1" +"23602","Newport News","VA","37.115698","-76.5183","-5","1" +"23603","Newport News","VA","37.193712","-76.57178","-5","1" +"23604","Fort Eustis","VA","37.144943","-76.58677","-5","1" +"23605","Newport News","VA","37.019453","-76.43651","-5","1" +"23606","Newport News","VA","37.078196","-76.49446","-5","1" +"23607","Newport News","VA","36.987151","-76.4195","-5","1" +"23608","Newport News","VA","37.151315","-76.54812","-5","1" +"23609","Newport News","VA","37.195924","-76.524805","-5","1" +"23612","Newport News","VA","37.195924","-76.524805","-5","1" +"23620","Franklin","VA","36.694658","-76.965091","-5","1" +"23628","Newport News","VA","37.195924","-76.524805","-5","1" +"23630","Hampton","VA","37.072658","-76.38992","-5","1" +"23631","Hampton","VA","37.072658","-76.38992","-5","1" +"23642","Virginia Beach","VA","36.843073","-76.154882","-5","1" +"23651","Fort Monroe","VA","37.002997","-76.32039","-5","1" +"23653","Hampton","VA","37.072658","-76.38992","-5","1" +"23661","Hampton","VA","37.005814","-76.38316","-5","1" +"23662","Poquoson","VA","37.131237","-76.38089","-5","1" +"23663","Hampton","VA","37.031474","-76.31637","-5","1" +"23664","Hampton","VA","37.056778","-76.29373","-5","1" +"23665","Hampton","VA","37.098317","-76.4196","-5","1" +"23666","Hampton","VA","37.050946","-76.40711","-5","1" +"23667","Hampton","VA","37.019346","-76.331815","-5","1" +"23668","Hampton","VA","37.020596","-76.337715","-5","1" +"23669","Hampton","VA","37.037946","-76.34415","-5","1" +"23670","Hampton","VA","37.072658","-76.38992","-5","1" +"23681","Hampton","VA","37.072658","-76.38992","-5","1" +"23690","Yorktown","VA","37.227904","-76.51278","-5","1" +"23691","Yorktown","VA","37.257932","-76.56076","-5","1" +"23692","Yorktown","VA","37.178417","-76.46751","-5","1" +"23693","Yorktown","VA","37.112915","-76.43591","-5","1" +"23694","Lackey","VA","37.223152","-76.55901","-5","1" +"23696","Seaford","VA","37.191262","-76.42135","-5","1" +"23701","Portsmouth","VA","36.810448","-76.36811","-5","1" +"23702","Portsmouth","VA","36.803981","-76.32386","-5","1" +"23703","Portsmouth","VA","36.867248","-76.38232","-5","1" +"23704","Portsmouth","VA","36.830748","-76.31369","-5","1" +"23705","Portsmouth","VA","36.868553","-76.355165","-5","1" +"23707","Portsmouth","VA","36.835215","-76.3457","-5","1" +"23708","Portsmouth","VA","36.846562","-76.30803","-5","1" +"23709","Portsmouth","VA","36.868553","-76.355165","-5","1" +"23801","Fort Lee","VA","37.241173","-77.34845","-5","1" +"23803","Petersburg","VA","37.21695","-77.43063","-5","1" +"23804","Petersburg","VA","37.204765","-77.392784","-5","1" +"23805","Petersburg","VA","37.174217","-77.39008","-5","1" +"23806","Petersburg","VA","37.204765","-77.392784","-5","1" +"23810","Cape Charles","VA","37.268263","-76.007162","-5","1" +"23814","Gloucester Point","VA","37.285231","-76.531577","-5","1" +"23821","Alberta","VA","36.87229","-77.91125","-5","1" +"23822","Ammon","VA","37.072361","-77.647495","-5","1" +"23824","Blackstone","VA","37.070975","-77.98876","-5","1" +"23827","Boykins","VA","36.602472","-77.20851","-5","1" +"23828","Branchville","VA","36.582188","-77.27759","-5","1" +"23829","Capron","VA","36.724498","-77.21893","-5","1" +"23830","Carson","VA","37.01775","-77.39475","-5","1" +"23831","Chester","VA","37.350999","-77.43959","-5","1" +"23832","Chesterfield","VA","37.405699","-77.5838","-5","1" +"23833","Church Road","VA","37.197024","-77.66932","-5","1" +"23834","Colonial Heights","VA","37.265403","-77.40438","-5","1" +"23836","Chester","VA","37.343005","-77.34604","-5","1" +"23837","Courtland","VA","36.740306","-77.07132","-5","1" +"23838","Chesterfield","VA","37.328232","-77.61364","-5","1" +"23839","Dendron","VA","37.079298","-76.92155","-5","1" +"23840","Dewitt","VA","37.066833","-77.6675","-5","1" +"23841","Dinwiddie","VA","37.055849","-77.56349","-5","1" +"23842","Disputanta","VA","37.126708","-77.23281","-5","1" +"23843","Dolphin","VA","36.848712","-77.80682","-5","1" +"23844","Drewryville","VA","36.688788","-77.31072","-5","1" +"23845","Ebony","VA","36.554164","-78.01408","-5","1" +"23846","Elberon","VA","37.064244","-76.82637","-5","1" +"23847","Emporia","VA","36.68627","-77.56121","-5","1" +"23850","Ford","VA","37.169066","-77.74358","-5","1" +"23851","Franklin","VA","36.668255","-76.93945","-5","1" +"23856","Freeman","VA","36.776189","-77.71289","-5","1" +"23857","Gasburg","VA","36.576549","-77.88467","-5","1" +"23860","Hopewell","VA","37.287869","-77.29359","-5","1" +"23866","Ivor","VA","36.907991","-76.89025","-5","1" +"23867","Jarratt","VA","36.811276","-77.47496","-5","1" +"23868","Lawrenceville","VA","36.722176","-77.81269","-5","1" +"23870","Jarratt","VA","36.721471","-77.531996","-5","1" +"23872","McKenney","VA","36.993498","-77.74687","-5","1" +"23873","Meredithville","VA","36.80878","-77.954397","-5","1" +"23874","Newsoms","VA","36.610636","-77.10269","-5","1" +"23875","Prince George","VA","37.235949","-77.30259","-5","1" +"23876","Rawlings","VA","36.951449","-77.82402","-5","1" +"23878","Sedley","VA","36.822024","-77.02404","-5","1" +"23879","Skippers","VA","36.584448","-77.58854","-5","1" +"23881","Spring Grove","VA","37.181764","-77.0026","-5","1" +"23882","Stony Creek","VA","36.928972","-77.41971","-5","1" +"23883","Surry","VA","37.14051","-76.74342","-5","1" +"23884","Sussex","VA","36.945667","-77.253913","-5","1" +"23885","Sutherland","VA","37.191579","-77.56682","-5","1" +"23887","Valentines","VA","36.563755","-77.82652","-5","1" +"23888","Wakefield","VA","36.963354","-76.98127","-5","1" +"23889","Warfield","VA","36.912369","-77.75239","-5","1" +"23890","Waverly","VA","37.005989","-77.09819","-5","1" +"23891","Waverly","VA","36.909845","-77.286287","-5","1" +"23893","White Plains","VA","36.628802","-77.92817","-5","1" +"23894","Wilsons","VA","37.127935","-77.83918","-5","1" +"23897","Yale","VA","36.828831","-77.28288","-5","1" +"23898","Zuni","VA","36.836423","-76.83731","-5","1" +"23899","Claremont","VA","37.227291","-76.96545","-5","1" +"23901","Farmville","VA","37.307946","-78.40144","-5","1" +"23909","Farmville","VA","37.301574","-78.394944","-5","1" +"23915","Baskerville","VA","36.694531","-78.28794","-5","1" +"23917","Boydton","VA","36.615944","-78.3102","-5","1" +"23919","Bracey","VA","36.567521","-78.12176","-5","1" +"23920","Brodnax","VA","36.732859","-77.99591","-5","1" +"23921","Buckingham","VA","37.581656","-78.62058","-5","1" +"23922","Burkeville","VA","37.191053","-78.2117","-5","1" +"23923","Charlotte Court House","VA","37.074876","-78.63263","-5","1" +"23924","Chase City","VA","36.806422","-78.46048","-5","1" +"23927","Clarksville","VA","36.61665","-78.54018","-5","1" +"23930","Crewe","VA","37.173493","-78.11236","-5","1" +"23934","Cullen","VA","37.164981","-78.62592","-5","1" +"23936","Dillwyn","VA","37.529284","-78.49082","-5","1" +"23937","Drakes Branch","VA","36.958048","-78.53403","-5","1" +"23938","Dundas","VA","36.909504","-78.00646","-5","1" +"23939","Evergreen","VA","37.312972","-78.77203","-5","1" +"23941","Fort Mitchell","VA","36.948129","-78.248333","-5","1" +"23942","Green Bay","VA","37.129269","-78.30107","-5","1" +"23943","Hampden Sydney","VA","37.241732","-78.4632","-5","1" +"23944","Kenbridge","VA","36.925375","-78.11767","-5","1" +"23947","Keysville","VA","37.029877","-78.4643","-5","1" +"23950","La Crosse","VA","36.678507","-78.08098","-5","1" +"23952","Lunenburg","VA","36.930088","-78.29215","-5","1" +"23954","Meherrin","VA","37.097705","-78.37823","-5","1" +"23955","Nottoway","VA","37.116094","-78.057832","-5","1" +"23958","Pamplin","VA","37.264896","-78.66558","-5","1" +"23959","Phenix","VA","37.094313","-78.77182","-5","1" +"23960","Prospect","VA","37.310203","-78.55359","-5","1" +"23962","Randolph","VA","37.017706","-78.73668","-5","1" +"23963","Red House","VA","37.197072","-78.81694","-5","1" +"23964","Red Oak","VA","36.780021","-78.62102","-5","1" +"23966","Rice","VA","37.284087","-78.27559","-5","1" +"23967","Saxe","VA","36.913228","-78.63611","-5","1" +"23968","Skipwith","VA","36.702863","-78.51218","-5","1" +"23970","South Hill","VA","36.733874","-78.17287","-5","1" +"23974","Victoria","VA","36.987595","-78.23285","-5","1" +"23976","Wylliesburg","VA","36.848612","-78.59064","-5","1" +"23999","Richmond","VA","37.561962","-77.425452","-5","1" +"24001","Roanoke","VA","37.274175","-79.95786","-5","1" +"24002","Roanoke","VA","37.274175","-79.95786","-5","1" +"24003","Roanoke","VA","37.274175","-79.95786","-5","1" +"24004","Roanoke","VA","37.274175","-79.95786","-5","1" +"24005","Roanoke","VA","37.274175","-79.95786","-5","1" +"24006","Roanoke","VA","37.274175","-79.95786","-5","1" +"24007","Roanoke","VA","37.274175","-79.95786","-5","1" +"24008","Roanoke","VA","37.274175","-79.95786","-5","1" +"24009","Roanoke","VA","37.274175","-79.95786","-5","1" +"24010","Roanoke","VA","37.274175","-79.95786","-5","1" +"24011","Roanoke","VA","37.270637","-79.94155","-5","1" +"24012","Roanoke","VA","37.305769","-79.92767","-5","1" +"24013","Roanoke","VA","37.267137","-79.92645","-5","1" +"24014","Roanoke","VA","37.236753","-79.93549","-5","1" +"24015","Roanoke","VA","37.258787","-79.97816","-5","1" +"24016","Roanoke","VA","37.272186","-79.95321","-5","1" +"24017","Roanoke","VA","37.290886","-79.98256","-5","1" +"24018","Roanoke","VA","37.229786","-80.02477","-5","1" +"24019","Roanoke","VA","37.341428","-79.95049","-5","1" +"24020","Roanoke","VA","37.357149","-79.94541","-5","1" +"24022","Roanoke","VA","37.278439","-79.933206","-5","1" +"24023","Roanoke","VA","37.210663","-80.406172","-5","1" +"24024","Roanoke","VA","37.274175","-79.95786","-5","1" +"24025","Roanoke","VA","37.274175","-79.95786","-5","1" +"24026","Roanoke","VA","37.274175","-79.95786","-5","1" +"24027","Roanoke","VA","37.274175","-79.95786","-5","1" +"24028","Roanoke","VA","37.274175","-79.95786","-5","1" +"24029","Roanoke","VA","37.274175","-79.95786","-5","1" +"24030","Roanoke","VA","37.274175","-79.95786","-5","1" +"24031","Roanoke","VA","37.274175","-79.95786","-5","1" +"24032","Roanoke","VA","37.274175","-79.95786","-5","1" +"24033","Roanoke","VA","37.274175","-79.95786","-5","1" +"24034","Roanoke","VA","37.274175","-79.95786","-5","1" +"24035","Roanoke","VA","37.274175","-79.95786","-5","1" +"24036","Roanoke","VA","37.274175","-79.95786","-5","1" +"24037","Roanoke","VA","37.274175","-79.95786","-5","1" +"24038","Roanoke","VA","37.274175","-79.95786","-5","1" +"24040","Roanoke","VA","37.274175","-79.95786","-5","1" +"24042","Roanoke","VA","37.271687","-79.939228","-5","1" +"24043","Roanoke","VA","37.269168","-79.939905","-5","1" +"24044","Roanoke","VA","37.274175","-79.95786","-5","1" +"24045","Roanoke","VA","37.268618","-79.940655","-5","1" +"24048","Roanoke","VA","37.274175","-79.95786","-5","1" +"24050","Roanoke","VA","37.555083","-79.786151","-5","1" +"24053","Ararat","VA","36.618824","-80.53102","-5","1" +"24054","Axton","VA","36.677075","-79.70604","-5","1" +"24055","Bassett","VA","36.757893","-80.00161","-5","1" +"24058","Belspring","VA","37.189876","-80.59761","-5","1" +"24059","Bent Mountain","VA","37.146244","-80.12562","-5","1" +"24060","Blacksburg","VA","37.232027","-80.42127","-5","1" +"24061","Blacksburg","VA","37.179115","-80.351482","-5","1" +"24062","Blacksburg","VA","37.174227","-80.395698","-5","1" +"24063","Blacksburg","VA","37.174227","-80.395698","-5","1" +"24064","Blue Ridge","VA","37.373117","-79.79043","-5","1" +"24065","Boones Mill","VA","37.116716","-79.95528","-5","1" +"24066","Buchanan","VA","37.532991","-79.68004","-5","1" +"24067","Callaway","VA","37.010772","-80.08111","-5","1" +"24068","Christiansburg","VA","37.154804","-80.418396","-5","1" +"24069","Cascade","VA","36.586545","-79.64194","-5","1" +"24070","Catawba","VA","37.361962","-80.19485","-5","1" +"24072","Check","VA","37.040036","-80.2167","-5","1" +"24073","Christiansburg","VA","37.136013","-80.41222","-5","1" +"24076","Claudville","VA","36.580514","-80.4332","-5","1" +"24077","Cloverdale","VA","37.369313","-79.90303","-5","1" +"24078","Collinsville","VA","36.720217","-79.91425","-5","1" +"24079","Copper Hill","VA","37.043459","-80.14868","-5","1" +"24082","Critz","VA","36.625817","-80.13542","-5","1" +"24083","Daleville","VA","37.407301","-79.91761","-5","1" +"24084","Dublin","VA","37.107273","-80.67384","-5","1" +"24085","Eagle Rock","VA","37.671394","-79.81681","-5","1" +"24086","Eggleston","VA","37.287326","-80.62194","-5","1" +"24087","Elliston","VA","37.218668","-80.2335","-5","1" +"24088","Ferrum","VA","36.901203","-80.0715","-5","1" +"24089","Fieldale","VA","36.70487","-79.95681","-5","1" +"24090","Fincastle","VA","37.512912","-79.87046","-5","1" +"24091","Floyd","VA","36.910051","-80.30871","-5","1" +"24092","Glade Hill","VA","37.014685","-79.75335","-5","1" +"24093","Glen Lyn","VA","37.377877","-80.85658","-5","1" +"24094","Goldbond","VA","37.427111","-80.55227","-5","1" +"24095","Goodview","VA","37.21556","-79.73922","-5","1" +"24101","Hardy","VA","37.180713","-79.76536","-5","1" +"24102","Henry","VA","36.838473","-79.99093","-5","1" +"24104","Huddleston","VA","37.107479","-79.53046","-5","1" +"24105","Indian Valley","VA","36.901524","-80.5936","-5","1" +"24111","McCoy","VA","37.174227","-80.395698","-5","1" +"24112","Martinsville","VA","36.696264","-79.86879","-5","1" +"24113","Martinsville","VA","36.679571","-79.865168","-5","1" +"24114","Martinsville","VA","36.679571","-79.865168","-5","1" +"24115","Martinsville","VA","36.679571","-79.865168","-5","1" +"24120","Meadows Of Dan","VA","36.720001","-80.41975","-5","1" +"24121","Moneta","VA","37.145705","-79.64786","-5","1" +"24122","Montvale","VA","37.413397","-79.70789","-5","1" +"24124","Narrows","VA","37.331818","-80.80847","-5","1" +"24126","Newbern","VA","37.069206","-80.689067","-5","1" +"24127","New Castle","VA","37.505033","-80.17302","-5","1" +"24128","Newport","VA","37.325758","-80.47021","-5","1" +"24129","New River","VA","37.096403","-80.608056","-5","1" +"24130","Oriskany","VA","37.555083","-79.786151","-5","1" +"24131","Paint Bank","VA","37.562902","-80.2538","-5","1" +"24132","Parrott","VA","37.210996","-80.62751","-5","1" +"24133","Patrick Springs","VA","36.677978","-80.13511","-5","1" +"24134","Pearisburg","VA","37.291252","-80.73601","-5","1" +"24136","Pembroke","VA","37.31803","-80.62267","-5","1" +"24137","Penhook","VA","36.947422","-79.63536","-5","1" +"24138","Pilot","VA","37.048647","-80.32048","-5","1" +"24139","Pittsville","VA","37.010279","-79.47217","-5","1" +"24141","Radford","VA","37.11979","-80.57325","-5","1" +"24142","Radford","VA","37.138427","-80.55031","-5","1" +"24143","Radford","VA","37.122583","-80.562913","-5","1" +"24146","Redwood","VA","37.006912","-79.913875","-5","1" +"24147","Rich Creek","VA","37.38389","-80.81734","-5","1" +"24148","Ridgeway","VA","36.595224","-79.87353","-5","1" +"24149","Riner","VA","37.011934","-80.41897","-5","1" +"24150","Ripplemead","VA","37.351691","-80.67726","-5","1" +"24151","Rocky Mount","VA","36.980013","-79.88027","-5","1" +"24153","Salem","VA","37.288807","-80.07821","-5","1" +"24155","Salem","VA","37.288384","-80.067062","-5","1" +"24156","Salem","VA","37.288384","-80.067062","-5","1" +"24157","Salem","VA","37.288384","-80.067062","-5","1" +"24161","Sandy Level","VA","36.985629","-79.53939","-5","1" +"24162","Shawsville","VA","37.14374","-80.26233","-5","1" +"24165","Spencer","VA","36.590431","-80.03589","-5","1" +"24167","Staffordsville","VA","37.240021","-80.73083","-5","1" +"24168","Stanleytown","VA","36.734651","-79.94572","-5","1" +"24171","Stuart","VA","36.655575","-80.23909","-5","1" +"24174","Thaxton","VA","37.357587","-79.66552","-5","1" +"24175","Troutville","VA","37.427597","-79.90595","-5","1" +"24176","Union Hall","VA","37.024494","-79.69241","-5","1" +"24177","Vesta","VA","36.724064","-80.35806","-5","1" +"24178","Villamont","VA","37.310494","-79.789799","-5","1" +"24179","Vinton","VA","37.276218","-79.8524","-5","1" +"24184","Wirtz","VA","37.068743","-79.74911","-5","1" +"24185","Woolwine","VA","36.806528","-80.26895","-5","1" +"24201","Bristol","VA","36.606582","-82.18087","-5","1" +"24202","Bristol","VA","36.645419","-82.18137","-5","1" +"24203","Bristol","VA","36.761613","-81.968712","-5","1" +"24209","Bristol","VA","36.761613","-81.968712","-5","1" +"24210","Abingdon","VA","36.728639","-82.00845","-5","1" +"24211","Abingdon","VA","36.657812","-81.96207","-5","1" +"24212","Abingdon","VA","36.690942","-81.970764","-5","1" +"24215","Andover","VA","36.921924","-82.79644","-5","1" +"24216","Appalachia","VA","36.919476","-82.78974","-5","1" +"24217","Bee","VA","37.082275","-82.18978","-5","1" +"24218","Ben Hur","VA","36.733931","-83.0635","-5","1" +"24219","Big Stone Gap","VA","36.851953","-82.77056","-5","1" +"24220","Birchleaf","VA","37.138489","-82.25643","-5","1" +"24221","Blackwater","VA","36.627827","-82.96464","-5","1" +"24224","Castlewood","VA","36.870051","-82.27792","-5","1" +"24225","Cleveland","VA","36.968491","-82.1623","-5","1" +"24226","Clinchco","VA","37.147222","-82.34369","-5","1" +"24228","Clintwood","VA","37.153509","-82.44936","-5","1" +"24230","Coeburn","VA","36.952634","-82.46657","-5","1" +"24236","Damascus","VA","36.624632","-81.76732","-5","1" +"24237","Dante","VA","37.001752","-82.28089","-5","1" +"24239","Davenport","VA","37.107474","-82.12413","-5","1" +"24243","Dryden","VA","36.780481","-82.94428","-5","1" +"24244","Duffield","VA","36.70122","-82.79538","-5","1" +"24245","Dungannon","VA","36.844539","-82.49147","-5","1" +"24246","East Stone Gap","VA","36.864429","-82.737469","-5","1" +"24248","Ewing","VA","36.62928","-83.48322","-5","1" +"24250","Fort Blackmore","VA","36.759614","-82.59473","-5","1" +"24251","Gate City","VA","36.642027","-82.58685","-5","1" +"24256","Haysi","VA","37.213189","-82.29759","-5","1" +"24258","Hiltons","VA","36.658518","-82.42645","-5","1" +"24260","Honaker","VA","37.02264","-81.99859","-5","1" +"24263","Jonesville","VA","36.687716","-83.15587","-5","1" +"24265","Keokee","VA","36.851769","-82.93593","-5","1" +"24266","Lebanon","VA","36.876177","-82.11083","-5","1" +"24269","McClure","VA","37.103304","-82.37613","-5","1" +"24270","Mendota","VA","36.720381","-82.26093","-5","1" +"24271","Nickelsville","VA","36.741128","-82.41823","-5","1" +"24272","Nora","VA","37.008665","-82.35244","-5","1" +"24273","Norton","VA","36.942047","-82.63138","-5","1" +"24274","Pound","VA","37.126639","-82.59599","-5","1" +"24277","Pennington Gap","VA","36.756705","-83.04178","-5","1" +"24279","Pound","VA","37.10297","-82.59626","-5","1" +"24280","Rosedale","VA","36.954936","-81.94252","-5","1" +"24281","Rose Hill","VA","36.65364","-83.34736","-5","1" +"24282","Saint Charles","VA","36.805965","-83.05467","-5","1" +"24283","Saint Paul","VA","36.943316","-82.33154","-5","1" +"24285","Stonega","VA","36.953228","-82.79025","-5","1" +"24289","Trammel","VA","37.130943","-82.344881","-5","1" +"24290","Weber City","VA","36.617348","-82.5666","-5","1" +"24292","Whitetop","VA","36.59565","-81.59154","-5","1" +"24293","Wise","VA","36.979817","-82.56963","-5","1" +"24301","Pulaski","VA","37.053297","-80.7728","-5","1" +"24311","Atkins","VA","36.870607","-81.40497","-5","1" +"24312","Austinville","VA","36.837699","-80.85731","-5","1" +"24313","Barren Springs","VA","36.909335","-80.80411","-5","1" +"24314","Bastian","VA","37.183901","-81.17641","-5","1" +"24315","Bland","VA","37.107412","-81.0571","-5","1" +"24316","Broadford","VA","36.937195","-81.67617","-5","1" +"24317","Cana","VA","36.609475","-80.67102","-5","1" +"24318","Ceres","VA","36.982193","-81.38945","-5","1" +"24319","Chilhowie","VA","36.776534","-81.65827","-5","1" +"24322","Cripple Creek","VA","36.820139","-81.11128","-5","1" +"24323","Crockett","VA","36.88091","-81.1992","-5","1" +"24324","Draper","VA","36.973028","-80.79309","-5","1" +"24325","Dugspur","VA","36.801489","-80.60492","-5","1" +"24326","Elk Creek","VA","36.729236","-81.2001","-5","1" +"24327","Emory","VA","36.773659","-81.82771","-5","1" +"24328","Fancy Gap","VA","36.659171","-80.70387","-5","1" +"24330","Fries","VA","36.721913","-81.00535","-5","1" +"24333","Galax","VA","36.649548","-80.92683","-5","1" +"24338","Fries","VA","36.718307","-80.978273","-5","1" +"24340","Glade Spring","VA","36.772376","-81.7742","-5","1" +"24343","Hillsville","VA","36.750353","-80.68706","-5","1" +"24347","Hiwassee","VA","36.958829","-80.65995","-5","1" +"24348","Independence","VA","36.626454","-81.16554","-5","1" +"24350","Ivanhoe","VA","36.809933","-80.99526","-5","1" +"24351","Lambsburg","VA","36.580074","-80.76311","-5","1" +"24352","Laurel Fork","VA","36.708515","-80.52791","-5","1" +"24354","Marion","VA","36.828526","-81.53045","-5","1" +"24360","Max Meadows","VA","36.933981","-80.92897","-5","1" +"24361","Meadowview","VA","36.763059","-81.84774","-5","1" +"24363","Mouth Of Wilson","VA","36.597486","-81.37604","-5","1" +"24366","Rocky Gap","VA","37.261609","-81.10659","-5","1" +"24368","Rural Retreat","VA","36.889364","-81.28162","-5","1" +"24370","Saltville","VA","36.893445","-81.74825","-5","1" +"24373","Seven Mile Ford","VA","36.826371","-81.549231","-5","1" +"24374","Speedwell","VA","36.813383","-81.19791","-5","1" +"24375","Sugar Grove","VA","36.790265","-81.37541","-5","1" +"24377","Tannersville","VA","37.000956","-81.54797","-5","1" +"24378","Trout Dale","VA","36.684567","-81.43411","-5","1" +"24379","Volney","VA","36.682782","-81.257795","-5","1" +"24380","Willis","VA","36.853525","-80.52024","-5","1" +"24381","Woodlawn","VA","36.714663","-80.82602","-5","1" +"24382","Wytheville","VA","36.947446","-81.09439","-5","1" +"24401","Staunton","VA","38.146216","-79.07625","-5","1" +"24402","Staunton","VA","38.159275","-79.062858","-5","1" +"24407","Staunton","VA","38.179715","-79.141332","-5","1" +"24411","Augusta Springs","VA","38.091705","-79.322363","-5","1" +"24412","Bacova","VA","38.054111","-79.84575","-5","1" +"24413","Blue Grass","VA","38.521373","-79.58361","-5","1" +"24415","Brownsburg","VA","37.929347","-79.31644","-5","1" +"24416","Buena Vista","VA","37.74078","-79.35038","-5","1" +"24421","Churchville","VA","38.252683","-79.17339","-5","1" +"24422","Clifton Forge","VA","37.821088","-79.79619","-5","1" +"24426","Covington","VA","37.772399","-80.02705","-5","1" +"24430","Craigsville","VA","38.085244","-79.36209","-5","1" +"24431","Crimora","VA","38.167914","-78.84222","-5","1" +"24432","Deerfield","VA","38.178513","-79.42701","-5","1" +"24433","Doe Hill","VA","38.443961","-79.44072","-5","1" +"24435","Fairfield","VA","37.871126","-79.29041","-5","1" +"24437","Fort Defiance","VA","38.212067","-78.94563","-5","1" +"24438","Glen Wilton","VA","37.555083","-79.786151","-5","1" +"24439","Goshen","VA","37.997778","-79.48004","-5","1" +"24440","Greenville","VA","37.996542","-79.15354","-5","1" +"24441","Grottoes","VA","38.255747","-78.8242","-5","1" +"24442","Head Waters","VA","38.345202","-79.38497","-5","1" +"24444","Iron Gate","VA","37.799435","-79.790895","-5","1" +"24445","Hot Springs","VA","37.970734","-79.89283","-5","1" +"24448","Iron Gate","VA","37.797214","-79.79002","-5","1" +"24450","Lexington","VA","37.794344","-79.47658","-5","1" +"24457","Low Moor","VA","37.802424","-79.86351","-5","1" +"24458","McDowell","VA","38.322663","-79.54418","-5","1" +"24459","Middlebrook","VA","38.042173","-79.28175","-5","1" +"24460","Millboro","VA","38.015153","-79.65065","-5","1" +"24463","Mint Spring","VA","38.064112","-79.10979","-5","1" +"24464","Montebello","VA","37.897702","-79.08939","-5","1" +"24465","Monterey","VA","38.374628","-79.63611","-5","1" +"24467","Mount Sidney","VA","38.258308","-78.95941","-5","1" +"24468","Mustoe","VA","38.385967","-79.559157","-5","1" +"24469","New Hope","VA","38.179715","-79.141332","-5","1" +"24471","Port Republic","VA","38.310311","-78.80409","-5","1" +"24472","Raphine","VA","37.936577","-79.22828","-5","1" +"24473","Rockbridge Baths","VA","37.912977","-79.39906","-5","1" +"24474","Selma","VA","37.805268","-79.84752","-5","1" +"24475","Spottswood","VA","37.9651","-79.2357","-5","1" +"24476","Steeles Tavern","VA","38.179715","-79.141332","-5","1" +"24477","Stuarts Draft","VA","38.01473","-79.02733","-5","1" +"24479","Swoope","VA","38.151767","-79.21998","-5","1" +"24482","Verona","VA","38.19958","-78.99553","-5","1" +"24483","Vesuvius","VA","37.819652","-79.21508","-5","1" +"24484","Warm Springs","VA","38.103122","-79.81478","-5","1" +"24485","West Augusta","VA","38.270442","-79.33402","-5","1" +"24486","Weyers Cave","VA","38.290722","-78.92423","-5","1" +"24487","Williamsville","VA","38.197757","-79.57766","-5","1" +"24501","Lynchburg","VA","37.390209","-79.16132","-5","1" +"24502","Lynchburg","VA","37.362109","-79.21525","-5","1" +"24503","Lynchburg","VA","37.440641","-79.20923","-5","1" +"24504","Lynchburg","VA","37.400275","-79.12597","-5","1" +"24505","Lynchburg","VA","37.400944","-79.178506","-5","1" +"24506","Lynchburg","VA","37.381692","-79.161046","-5","1" +"24512","Lynchburg","VA","37.242503","-79.109789","-5","1" +"24513","Lynchburg","VA","37.245798","-79.133546","-5","1" +"24514","Lynchburg","VA","37.400944","-79.178506","-5","1" +"24515","Lynchburg","VA","37.400944","-79.178506","-5","1" +"24517","Altavista","VA","37.127543","-79.27409","-5","1" +"24520","Alton","VA","36.561396","-79.05268","-5","1" +"24521","Amherst","VA","37.616606","-79.08763","-5","1" +"24522","Appomattox","VA","37.374688","-78.80585","-5","1" +"24523","Bedford","VA","37.339184","-79.52839","-5","1" +"24526","Big Island","VA","37.528701","-79.39812","-5","1" +"24527","Blairs","VA","36.725028","-79.35877","-5","1" +"24528","Brookneal","VA","37.079385","-78.90765","-5","1" +"24529","Buffalo Junction","VA","36.631531","-78.63806","-5","1" +"24530","Callands","VA","36.807043","-79.61864","-5","1" +"24531","Chatham","VA","36.836822","-79.45193","-5","1" +"24533","Clifford","VA","37.582488","-78.93618","-5","1" +"24534","Clover","VA","36.864697","-78.76019","-5","1" +"24535","Cluster Springs","VA","36.611317","-78.945519","-5","1" +"24536","Coleman Falls","VA","37.486603","-79.30501","-5","1" +"24538","Concord","VA","37.343394","-78.96433","-5","1" +"24539","Crystal Hill","VA","36.861612","-78.91187","-5","1" +"24540","Danville","VA","36.622638","-79.39998","-5","1" +"24541","Danville","VA","36.581085","-79.45027","-5","1" +"24542","Danville","VA","36.579313","-79.398748","-5","1" +"24543","Danville","VA","36.592679","-79.410983","-5","1" +"24544","Danville","VA","36.592679","-79.410983","-5","1" +"24549","Dry Fork","VA","36.710985","-79.48517","-5","1" +"24550","Evington","VA","37.237928","-79.28268","-5","1" +"24551","Forest","VA","37.366744","-79.29977","-5","1" +"24553","Gladstone","VA","37.541726","-78.80777","-5","1" +"24554","Gladys","VA","37.142894","-79.05412","-5","1" +"24555","Glasgow","VA","37.641788","-79.45652","-5","1" +"24556","Goode","VA","37.361512","-79.3981","-5","1" +"24557","Gretna","VA","36.971021","-79.31787","-5","1" +"24558","Halifax","VA","36.774635","-78.93426","-5","1" +"24562","Howardsville","VA","37.715293","-78.64175","-5","1" +"24563","Hurt","VA","37.071568","-79.2923","-5","1" +"24565","Java","VA","36.842686","-79.19748","-5","1" +"24566","Keeling","VA","36.726236","-79.26279","-5","1" +"24569","Long Island","VA","37.041512","-79.1278","-5","1" +"24570","Lowry","VA","37.333936","-79.406303","-5","1" +"24571","Lynch Station","VA","37.133274","-79.37324","-5","1" +"24572","Madison Heights","VA","37.461272","-79.09364","-5","1" +"24574","Monroe","VA","37.576208","-79.26133","-5","1" +"24576","Naruna","VA","37.245798","-79.133546","-5","1" +"24577","Nathalie","VA","36.940538","-78.98017","-5","1" +"24578","Natural Bridge","VA","37.650711","-79.55269","-5","1" +"24579","Natural Bridge Station","VA","37.597531","-79.50659","-5","1" +"24580","Nelson","VA","36.589704","-78.66151","-5","1" +"24581","Norwood","VA","37.644171","-78.79447","-5","1" +"24585","Republican Grove","VA","36.801515","-78.883933","-5","1" +"24586","Ringgold","VA","36.595244","-79.28647","-5","1" +"24588","Rustburg","VA","37.268024","-79.11686","-5","1" +"24589","Scottsburg","VA","36.759749","-78.78547","-5","1" +"24590","Scottsville","VA","37.806508","-78.48134","-5","1" +"24592","South Boston","VA","36.701855","-78.92008","-5","1" +"24593","Spout Spring","VA","37.320709","-78.91071","-5","1" +"24594","Sutherlin","VA","36.635902","-79.1968","-5","1" +"24595","Sweet Briar","VA","37.556248","-79.08249","-5","1" +"24597","Vernon Hill","VA","36.782331","-79.1237","-5","1" +"24598","Virgilina","VA","36.592597","-78.78207","-5","1" +"24599","Wingina","VA","37.638783","-78.71934","-5","1" +"24601","Amonate","VA","37.177549","-81.6578","-5","1" +"24602","Bandy","VA","37.170062","-81.64412","-5","1" +"24603","Big Rock","VA","37.371119","-82.1645","-5","1" +"24604","Bishop","VA","37.201022","-81.53963","-5","1" +"24605","Bluefield","VA","37.222548","-81.3367","-5","1" +"24606","Boissevain","VA","37.28526","-81.38993","-5","1" +"24607","Breaks","VA","37.297387","-82.27942","-5","1" +"24608","Burkes Garden","VA","37.13549","-81.563406","-5","1" +"24609","Cedar Bluff","VA","37.055512","-81.76922","-5","1" +"24612","Doran","VA","37.091572","-81.84119","-5","1" +"24613","Falls Mills","VA","37.273973","-81.31688","-5","1" +"24614","Grundy","VA","37.296213","-82.05775","-5","1" +"24618","Harman","VA","37.287992","-82.027408","-5","1" +"24619","Horsepen","VA","37.13549","-81.563406","-5","1" +"24620","Hurley","VA","37.409883","-82.02317","-5","1" +"24622","Jewell Ridge","VA","37.214471","-81.78967","-5","1" +"24624","Keen Mountain","VA","37.204272","-81.97936","-5","1" +"24627","Mavisdale","VA","37.287992","-82.027408","-5","1" +"24628","Maxie","VA","37.308652","-82.18593","-5","1" +"24630","North Tazewell","VA","37.155621","-81.49787","-5","1" +"24631","Oakwood","VA","37.223011","-82.00538","-5","1" +"24634","Pilgrims Knob","VA","37.250363","-81.89766","-5","1" +"24635","Pocahontas","VA","37.305821","-81.34697","-5","1" +"24637","Pounding Mill","VA","37.076801","-81.70519","-5","1" +"24639","Raven","VA","37.136584","-81.89068","-5","1" +"24640","Red Ash","VA","37.13549","-81.563406","-5","1" +"24641","Richlands","VA","37.098588","-81.80607","-5","1" +"24646","Rowe","VA","37.14445","-81.99735","-5","1" +"24647","Shortt Gap","VA","37.287992","-82.027408","-5","1" +"24649","Swords Creek","VA","37.077291","-81.91973","-5","1" +"24651","Tazewell","VA","37.113004","-81.50326","-5","1" +"24656","Vansant","VA","37.198005","-82.12193","-5","1" +"24657","Whitewood","VA","37.226416","-81.86739","-5","1" +"24658","Wolford","VA","37.287992","-82.027408","-5","1" +"24701","Bluefield","WV","37.2757","-81.2145","-5","1" +"24704","Bluefield","WV","37.264098","-81.229646","-5","1" +"24712","Athens","WV","37.448532","-81.0032","-5","1" +"24714","Beeson","WV","37.501743","-81.22148","-5","1" +"24715","Bramwell","WV","37.335297","-81.31112","-5","1" +"24716","Bud","WV","37.532524","-81.37275","-5","1" +"24719","Covel","WV","37.48929","-81.29736","-5","1" +"24724","Freeman","WV","37.32767","-81.29994","-5","1" +"24726","Herndon","WV","37.520914","-81.33026","-5","1" +"24729","Hiawatha","WV","37.416395","-81.105803","-5","1" +"24731","Kegley","WV","37.404113","-81.14078","-5","1" +"24732","Kellysville","WV","37.416395","-81.105803","-5","1" +"24733","Lashmeet","WV","37.431153","-81.22628","-5","1" +"24736","Matoaka","WV","37.425866","-81.27625","-5","1" +"24737","Montcalm","WV","37.352655","-81.24781","-5","1" +"24738","Nemours","WV","37.416395","-81.105803","-5","1" +"24739","Oakvale","WV","37.336554","-80.95523","-5","1" +"24740","Princeton","WV","37.368167","-81.07307","-5","1" +"24747","Rock","WV","37.394221","-81.21868","-5","1" +"24751","Wolfe","WV","37.416395","-81.105803","-5","1" +"24801","Welch","WV","37.424498","-81.57835","-5","1" +"24808","Anawalt","WV","37.338242","-81.43081","-5","1" +"24811","Avondale","WV","37.399793","-81.78312","-5","1" +"24813","Bartley","WV","37.355111","-81.73002","-5","1" +"24815","Berwind","WV","37.25068","-81.65044","-5","1" +"24816","Big Sandy","WV","37.459251","-81.70173","-5","1" +"24817","Bradshaw","WV","37.358272","-81.8013","-5","1" +"24818","Brenton","WV","37.594959","-81.62947","-5","1" +"24820","Capels","WV","37.375246","-81.653889","-5","1" +"24821","Caretta","WV","37.345693","-81.66789","-5","1" +"24822","Clear Fork","WV","37.62127","-81.69408","-5","1" +"24823","Coal Mountain","WV","37.664172","-81.7338","-5","1" +"24824","Coalwood","WV","37.416947","-81.69288","-5","1" +"24825","Crumpler","WV","37.421641","-81.34504","-5","1" +"24826","Cucumber","WV","37.375246","-81.653889","-5","1" +"24827","Cyclone","WV","37.742953","-81.67951","-5","1" +"24828","Davy","WV","37.478583","-81.66169","-5","1" +"24829","Eckman","WV","37.40273","-81.4629","-5","1" +"24830","Elbert","WV","37.319439","-81.5432","-5","1" +"24831","Elkhorn","WV","37.385757","-81.41415","-5","1" +"24832","English","WV","37.375246","-81.653889","-5","1" +"24834","Fanrock","WV","37.603344","-81.53998","-5","1" +"24836","Gary","WV","37.352131","-81.54688","-5","1" +"24839","Hanover","WV","37.567007","-81.77969","-5","1" +"24841","Havaco","WV","37.405828","-81.576548","-5","1" +"24842","Hemphill","WV","37.444465","-81.59684","-5","1" +"24843","Hensley","WV","37.474577","-81.69961","-5","1" +"24844","Iaeger","WV","37.469496","-81.79548","-5","1" +"24845","Ikes Fork","WV","37.530418","-81.79553","-5","1" +"24846","Isaban","WV","37.530963","-81.8885","-5","1" +"24847","Itmann","WV","37.603344","-81.53998","-5","1" +"24848","Jenkinjones","WV","37.296401","-81.43135","-5","1" +"24849","Jesse","WV","37.666079","-81.57309","-5","1" +"24850","Jolo","WV","37.312239","-81.82478","-5","1" +"24851","Justice","WV","37.602126","-81.84968","-5","1" +"24852","Keystone","WV","37.417857","-81.44874","-5","1" +"24853","Kimball","WV","37.427781","-81.48654","-5","1" +"24854","Kopperston","WV","37.741813","-81.53722","-5","1" +"24855","Kyle","WV","37.409655","-81.42559","-5","1" +"24856","Leckie","WV","37.343452","-81.40244","-5","1" +"24857","Lynco","WV","37.683273","-81.66048","-5","1" +"24859","Marianna","WV","37.603344","-81.53998","-5","1" +"24860","Matheny","WV","37.664685","-81.5967","-5","1" +"24861","Maybeury","WV","37.363882","-81.36531","-5","1" +"24862","Mohawk","WV","37.485276","-81.93955","-5","1" +"24866","Newhall","WV","37.265686","-81.6155","-5","1" +"24867","New Richmond","WV","37.568981","-81.49308","-5","1" +"24868","Northfork","WV","37.418471","-81.41706","-5","1" +"24869","North Spring","WV","37.551372","-81.84229","-5","1" +"24870","Oceana","WV","37.69629","-81.60845","-5","1" +"24871","Pageton","WV","37.325163","-81.47554","-5","1" +"24872","Panther","WV","37.45926","-81.89024","-5","1" +"24873","Paynesville","WV","37.357831","-81.89583","-5","1" +"24874","Pineville","WV","37.562494","-81.51746","-5","1" +"24877","Powhatan","WV","37.375246","-81.653889","-5","1" +"24878","Premier","WV","37.375246","-81.653889","-5","1" +"24879","Raysal","WV","37.35294","-81.768","-5","1" +"24880","Rock View","WV","37.641027","-81.53625","-5","1" +"24881","Roderfield","WV","37.444527","-81.69146","-5","1" +"24882","Simon","WV","37.609388","-81.75668","-5","1" +"24883","Skygusty","WV","37.375246","-81.653889","-5","1" +"24884","Squire","WV","37.249595","-81.55208","-5","1" +"24887","Switchback","WV","37.371122","-81.384","-5","1" +"24888","Thorpe","WV","37.365675","-81.50968","-5","1" +"24889","Twin Branch","WV","37.375246","-81.653889","-5","1" +"24892","War","WV","37.309666","-81.69546","-5","1" +"24894","Warriormine","WV","37.291157","-81.69541","-5","1" +"24895","Wilcoe","WV","37.381834","-81.56342","-5","1" +"24896","Wolf Pen","WV","37.603344","-81.53998","-5","1" +"24897","Worth","WV","37.422523","-81.38363","-5","1" +"24898","Wyoming","WV","37.585536","-81.60347","-5","1" +"24899","Yukon","WV","37.375246","-81.653889","-5","1" +"24901","Lewisburg","WV","37.80848","-80.44493","-5","1" +"24902","Fairlea","WV","37.774666","-80.461492","-5","1" +"24910","Alderson","WV","37.731717","-80.65942","-5","1" +"24915","Arbovale","WV","38.462522","-79.80308","-5","1" +"24916","Asbury","WV","37.841919","-80.55325","-5","1" +"24917","Auto","WV","37.975595","-80.426874","-5","1" +"24918","Ballard","WV","37.515724","-80.76748","-5","1" +"24919","Ballengee","WV","37.620418","-80.71636","-5","1" +"24920","Bartow","WV","38.552106","-79.7315","-5","1" +"24924","Buckeye","WV","38.185341","-80.13261","-5","1" +"24925","Caldwell","WV","37.741887","-80.37481","-5","1" +"24927","Cass","WV","38.380196","-79.93278","-5","1" +"24931","Crawley","WV","37.901788","-80.59452","-5","1" +"24934","Dunmore","WV","38.325205","-79.90179","-5","1" +"24935","Forest Hill","WV","37.549702","-80.80017","-5","1" +"24936","Fort Spring","WV","37.743322","-80.52942","-5","1" +"24938","Frankford","WV","37.918994","-80.36331","-5","1" +"24941","Gap Mills","WV","37.602172","-80.3464","-5","1" +"24942","Glace","WV","37.552029","-80.539672","-5","1" +"24943","Grassy Meadows","WV","37.838288","-80.75393","-5","1" +"24944","Green Bank","WV","38.412244","-79.79796","-5","1" +"24945","Greenville","WV","37.543667","-80.69604","-5","1" +"24946","Hillsboro","WV","38.114627","-80.22808","-5","1" +"24950","Kieffer","WV","37.94046","-80.61007","-5","1" +"24951","Lindside","WV","37.485348","-80.64293","-5","1" +"24954","Marlinton","WV","38.196374","-80.05957","-5","1" +"24957","Maxwelton","WV","37.869998","-80.41067","-5","1" +"24958","Meadow Bluff","WV","37.975595","-80.426874","-5","1" +"24961","Neola","WV","37.975595","-80.426874","-5","1" +"24962","Pence Springs","WV","37.675571","-80.73336","-5","1" +"24963","Peterstown","WV","37.424195","-80.78465","-5","1" +"24966","Renick","WV","38.059474","-80.35569","-5","1" +"24970","Ronceverte","WV","37.742719","-80.47151","-5","1" +"24971","Lewisburg","WV","37.792525","-80.443556","-5","1" +"24974","Secondcreek","WV","37.665867","-80.44338","-5","1" +"24976","Sinks Grove","WV","37.667594","-80.54184","-5","1" +"24977","Smoot","WV","37.893306","-80.65773","-5","1" +"24981","Talcott","WV","37.654267","-80.72899","-5","1" +"24983","Union","WV","37.590774","-80.53448","-5","1" +"24984","Waiteville","WV","37.515131","-80.38284","-5","1" +"24985","Wayside","WV","37.597231","-80.74638","-5","1" +"24986","White Sulphur Springs","WV","37.861237","-80.24008","-5","1" +"24991","Williamsburg","WV","38.001124","-80.48027","-5","1" +"24993","Wolfcreek","WV","37.552029","-80.539672","-5","1" +"25002","Alloy","WV","38.129903","-81.25882","-5","1" +"25003","Alum Creek","WV","38.254483","-81.79045","-5","1" +"25004","Ameagle","WV","37.784459","-81.118491","-5","1" +"25005","Amma","WV","38.552755","-81.24219","-5","1" +"25007","Arnett","WV","37.832443","-81.42991","-5","1" +"25008","Artie","WV","37.933384","-81.36076","-5","1" +"25009","Ashford","WV","38.179811","-81.72566","-5","1" +"25010","Bald Knob","WV","37.842289","-81.61919","-5","1" +"25011","Bancroft","WV","38.508675","-81.84134","-5","1" +"25015","Belle","WV","38.224918","-81.5151","-5","1" +"25018","Bentree","WV","38.465777","-81.050662","-5","1" +"25019","Bickmore","WV","38.38338","-81.08555","-5","1" +"25021","Bim","WV","37.922612","-81.68729","-5","1" +"25022","Blair","WV","37.858735","-81.81253","-5","1" +"25024","Bloomingrose","WV","38.143324","-81.63578","-5","1" +"25025","Blount","WV","38.324795","-81.38164","-5","1" +"25026","Blue Creek","WV","38.490789","-81.392845","-5","1" +"25028","Bob White","WV","37.948618","-81.71199","-5","1" +"25030","Bomont","WV","38.453331","-81.22481","-5","1" +"25031","Boomer","WV","38.151116","-81.28483","-5","1" +"25033","Buffalo","WV","38.61324","-81.95406","-5","1" +"25035","Cabin Creek","WV","38.177823","-81.49148","-5","1" +"25036","Cannelton","WV","38.199924","-81.28865","-5","1" +"25039","Cedar Grove","WV","38.242575","-81.39377","-5","1" +"25040","Charlton Heights","WV","38.12563","-81.24499","-5","1" +"25043","Clay","WV","38.46791","-81.0082","-5","1" +"25044","Clear Creek","WV","37.90907","-81.35066","-5","1" +"25045","Clendenin","WV","38.464079","-81.33836","-5","1" +"25046","Clio","WV","38.731737","-81.314633","-5","1" +"25047","Clothier","WV","37.950033","-81.78924","-5","1" +"25048","Colcord","WV","37.949813","-81.42024","-5","1" +"25049","Comfort","WV","38.131663","-81.56282","-5","1" +"25051","Costa","WV","38.161661","-81.70438","-5","1" +"25053","Danville","WV","38.05738","-81.86082","-5","1" +"25054","Dawes","WV","38.108987","-81.46418","-5","1" +"25057","Deep Water","WV","38.126873","-81.25954","-5","1" +"25059","Dixie","WV","38.260339","-81.19697","-5","1" +"25060","Dorothy","WV","37.958702","-81.47577","-5","1" +"25061","Drybranch","WV","38.296818","-81.554655","-5","1" +"25062","Dry Creek","WV","37.854572","-81.453786","-5","1" +"25063","Duck","WV","38.583094","-80.94056","-5","1" +"25064","Dunbar","WV","38.367255","-81.74473","-5","1" +"25067","East Bank","WV","38.198471","-81.44797","-5","1" +"25070","Eleanor","WV","38.538953","-81.93548","-5","1" +"25071","Elkview","WV","38.451344","-81.46602","-5","1" +"25075","Eskdale","WV","38.046638","-81.4311","-5","1" +"25076","Ethel","WV","37.861621","-81.90361","-5","1" +"25079","Falling Rock","WV","38.495072","-81.398422","-5","1" +"25081","Foster","WV","38.092103","-81.75855","-5","1" +"25082","Fraziers Bottom","WV","38.621761","-82.02827","-5","1" +"25083","Gallagher","WV","38.077863","-81.37333","-5","1" +"25085","Gauley Bridge","WV","38.176834","-81.19688","-5","1" +"25086","Glasgow","WV","38.214254","-81.42028","-5","1" +"25088","Glen","WV","38.382145","-81.19842","-5","1" +"25090","Glen Ferris","WV","38.149058","-81.21276","-5","1" +"25093","Gordon","WV","37.997105","-81.71704","-5","1" +"25095","Grimms Landing","WV","38.752312","-81.997278","-5","1" +"25102","Handley","WV","38.186707","-81.3639","-5","1" +"25103","Hansford","WV","38.202669","-81.39427","-5","1" +"25106","Henderson","WV","38.805615","-82.11034","-5","1" +"25107","Hernshaw","WV","38.211477","-81.60468","-5","1" +"25108","Hewett","WV","37.960963","-81.85261","-5","1" +"25109","Hometown","WV","38.526637","-81.85738","-5","1" +"25110","Hugheston","WV","38.212287","-81.34327","-5","1" +"25111","Indore","WV","38.391188","-81.16398","-5","1" +"25112","Institute","WV","38.282497","-81.56514","-5","1" +"25113","Ivydale","WV","38.557141","-81.03747","-5","1" +"25114","Jeffrey","WV","37.978787","-81.81354","-5","1" +"25115","Kanawha Falls","WV","38.136263","-81.20064","-5","1" +"25118","Kimberly","WV","38.135059","-81.30312","-5","1" +"25119","Kincaid","WV","38.024108","-81.28534","-5","1" +"25121","Lake","WV","37.929438","-81.90109","-5","1" +"25122","Leewood","WV","38.296818","-81.554655","-5","1" +"25123","Leon","WV","38.743247","-81.90281","-5","1" +"25124","Liberty","WV","38.619376","-81.76361","-5","1" +"25125","Lizemores","WV","38.323058","-81.19769","-5","1" +"25126","London","WV","38.186871","-81.35285","-5","1" +"25130","Madison","WV","38.038145","-81.79154","-5","1" +"25132","Mammoth","WV","38.293438","-81.34526","-5","1" +"25133","Maysel","WV","38.485889","-81.13105","-5","1" +"25134","Miami","WV","38.153818","-81.44962","-5","1" +"25136","Montgomery","WV","38.175742","-81.33047","-5","1" +"25139","Mount Carbon","WV","38.143496","-81.29088","-5","1" +"25140","Naoma","WV","37.883223","-81.48001","-5","1" +"25141","Nebo","WV","38.642203","-81.03691","-5","1" +"25142","Nellis","WV","37.997105","-81.71704","-5","1" +"25143","Nitro","WV","38.417852","-81.8321","-5","1" +"25147","Ohley","WV","38.296818","-81.554655","-5","1" +"25148","Orgas","WV","38.04358","-81.57171","-5","1" +"25149","Ottawa","WV","37.957458","-81.81583","-5","1" +"25150","Ovapa","WV","38.504506","-81.15739","-5","1" +"25152","Page","WV","38.052957","-81.26966","-5","1" +"25154","Peytona","WV","38.136987","-81.70112","-5","1" +"25156","Pinch","WV","38.401962","-81.461063","-5","1" +"25159","Poca","WV","38.49008","-81.79515","-5","1" +"25160","Pond Gap","WV","38.317053","-81.29336","-5","1" +"25161","Powellton","WV","38.084773","-81.31241","-5","1" +"25162","Pratt","WV","38.209912","-81.38475","-5","1" +"25164","Procious","WV","38.48444","-81.19156","-5","1" +"25165","Racine","WV","38.140732","-81.66005","-5","1" +"25168","Red House","WV","38.547027","-81.88002","-5","1" +"25169","Ridgeview","WV","38.18125","-81.77755","-5","1" +"25173","Robson","WV","38.072309","-81.2457","-5","1" +"25174","Rock Creek","WV","37.850007","-81.4451","-5","1" +"25177","Saint Albans","WV","38.378841","-81.82633","-5","1" +"25180","Saxon","WV","37.793057","-81.384755","-5","1" +"25181","Seth","WV","38.069687","-81.62346","-5","1" +"25182","Sharon","WV","38.296818","-81.554655","-5","1" +"25183","Sharples","WV","37.909119","-81.83666","-5","1" +"25185","Mount Olive","WV","38.041293","-81.064784","-5","1" +"25186","Smithers","WV","38.176382","-81.30575","-5","1" +"25187","Southside","WV","38.72218","-82.02759","-5","1" +"25193","Sylvester","WV","38.018753","-81.55106","-5","1" +"25201","Tad","WV","38.296818","-81.554655","-5","1" +"25202","Tornado","WV","38.327452","-81.84485","-5","1" +"25203","Turtle Creek","WV","37.986266","-81.942704","-5","1" +"25204","Twilight","WV","37.898585","-81.60628","-5","1" +"25205","Uneeda","WV","38.021082","-81.7733","-5","1" +"25206","Van","WV","37.972887","-81.71468","-5","1" +"25208","Wharton","WV","37.887883","-81.67191","-5","1" +"25209","Whitesville","WV","37.978232","-81.53288","-5","1" +"25211","Widen","WV","38.462053","-80.86627","-5","1" +"25213","Winfield","WV","38.509445","-81.90578","-5","1" +"25214","Winifrede","WV","38.19411","-81.54396","-5","1" +"25231","Advent","WV","38.597265","-81.57934","-5","1" +"25234","Arnoldsburg","WV","38.806907","-81.12827","-5","1" +"25235","Chloe","WV","38.661766","-81.07615","-5","1" +"25239","Cottageville","WV","38.851872","-81.84501","-5","1" +"25241","Evans","WV","38.792125","-81.80117","-5","1" +"25243","Gandeeville","WV","38.665227","-81.47783","-5","1" +"25244","Gay","WV","38.770723","-81.55043","-5","1" +"25245","Given","WV","38.698253","-81.75416","-5","1" +"25247","Hartford","WV","39.005918","-81.99083","-5","1" +"25248","Kenna","WV","38.631892","-81.62048","-5","1" +"25250","Lakin","WV","38.752312","-81.997278","-5","1" +"25251","Left Hand","WV","38.618255","-81.22913","-5","1" +"25252","Le Roy","WV","38.884","-81.53807","-5","1" +"25253","Letart","WV","38.923595","-81.97414","-5","1" +"25256","Linden","WV","38.731737","-81.314633","-5","1" +"25258","Lockney","WV","38.913649","-80.831256","-5","1" +"25259","Looneyville","WV","38.679327","-81.27334","-5","1" +"25260","Mason","WV","39.017309","-82.03031","-5","1" +"25261","Millstone","WV","38.835085","-81.10284","-5","1" +"25262","Millwood","WV","38.906099","-81.83274","-5","1" +"25264","Mount Alto","WV","38.853643","-81.8985","-5","1" +"25265","New Haven","WV","38.988059","-81.96731","-5","1" +"25266","Newton","WV","38.585331","-81.17428","-5","1" +"25267","Normantown","WV","38.849663","-80.96569","-5","1" +"25268","Orma","WV","38.73796","-81.09478","-5","1" +"25270","Reedy","WV","38.879098","-81.42115","-5","1" +"25271","Ripley","WV","38.803814","-81.70763","-5","1" +"25275","Sandyville","WV","38.926713","-81.6196","-5","1" +"25276","Spencer","WV","38.780168","-81.34244","-5","1" +"25279","Statts Mills","WV","38.732716","-81.61753","-5","1" +"25281","Tariff","WV","38.682668","-81.18846","-5","1" +"25283","Valley Fork","WV","38.536815","-81.12623","-5","1" +"25285","Wallback","WV","38.566365","-81.12923","-5","1" +"25286","Walton","WV","38.617139","-81.39537","-5","1" +"25287","West Columbia","WV","38.950609","-82.0603","-5","1" +"25301","Charleston","WV","38.350647","-81.63028","-5","1" +"25302","Charleston","WV","38.375397","-81.62367","-5","1" +"25303","Charleston","WV","38.362374","-81.6863","-5","1" +"25304","Charleston","WV","38.313411","-81.58564","-5","1" +"25305","Charleston","WV","38.335798","-81.612344","-5","1" +"25306","Charleston","WV","38.310827","-81.53106","-5","1" +"25309","Charleston","WV","38.329768","-81.73418","-5","1" +"25311","Charleston","WV","38.351204","-81.58198","-5","1" +"25312","Charleston","WV","38.414155","-81.66166","-5","1" +"25313","Charleston","WV","38.425721","-81.76168","-5","1" +"25314","Charleston","WV","38.335969","-81.66084","-5","1" +"25315","Charleston","WV","38.23753","-81.55661","-5","1" +"25317","Charleston","WV","38.335647","-81.613794","-5","1" +"25320","Charleston","WV","38.530623","-81.62565","-5","1" +"25321","Charleston","WV","38.296818","-81.554655","-5","1" +"25322","Charleston","WV","38.534661","-81.56035","-5","1" +"25323","Charleston","WV","38.296818","-81.554655","-5","1" +"25324","Charleston","WV","38.296818","-81.554655","-5","1" +"25325","Charleston","WV","38.296818","-81.554655","-5","1" +"25326","Charleston","WV","38.296818","-81.554655","-5","1" +"25327","Charleston","WV","38.296818","-81.554655","-5","1" +"25328","Charleston","WV","38.296818","-81.554655","-5","1" +"25329","Charleston","WV","38.296818","-81.554655","-5","1" +"25330","Charleston","WV","38.296818","-81.554655","-5","1" +"25331","Charleston","WV","38.296818","-81.554655","-5","1" +"25332","Charleston","WV","38.296818","-81.554655","-5","1" +"25333","Charleston","WV","38.296818","-81.554655","-5","1" +"25334","Charleston","WV","38.296818","-81.554655","-5","1" +"25335","Charleston","WV","38.296818","-81.554655","-5","1" +"25336","Charleston","WV","38.296818","-81.554655","-5","1" +"25337","Charleston","WV","38.296818","-81.554655","-5","1" +"25338","Charleston","WV","38.296818","-81.554655","-5","1" +"25339","Charleston","WV","38.296818","-81.554655","-5","1" +"25350","Charleston","WV","38.296818","-81.554655","-5","1" +"25356","Charleston","WV","38.296818","-81.554655","-5","1" +"25357","Charleston","WV","38.296818","-81.554655","-5","1" +"25358","Charleston","WV","38.296818","-81.554655","-5","1" +"25360","Charleston","WV","38.296818","-81.554655","-5","1" +"25361","Charleston","WV","38.296818","-81.554655","-5","1" +"25362","Charleston","WV","38.296818","-81.554655","-5","1" +"25364","Charleston","WV","38.296818","-81.554655","-5","1" +"25365","Charleston","WV","38.296818","-81.554655","-5","1" +"25375","Charleston","WV","38.296818","-81.554655","-5","1" +"25387","Charleston","WV","38.296818","-81.554655","-5","1" +"25389","Charleston","WV","38.354041","-81.639389","-5","1" +"25392","Charleston","WV","38.296818","-81.554655","-5","1" +"25396","Charleston","WV","38.296818","-81.554655","-5","1" +"25401","Martinsburg","WV","39.463781","-77.95767","-5","1" +"25402","Martinsburg","WV","39.461663","-78.011472","-5","1" +"25410","Bakerton","WV","39.315914","-77.877223","-5","1" +"25411","Berkeley Springs","WV","39.567987","-78.22783","-5","1" +"25413","Bunker Hill","WV","39.323628","-78.04157","-5","1" +"25414","Charles Town","WV","39.279965","-77.86203","-5","1" +"25419","Falling Waters","WV","39.58132","-77.8804","-5","1" +"25420","Gerrardstown","WV","39.379281","-78.12229","-5","1" +"25421","Glengary","WV","39.372769","-78.1676","-5","1" +"25422","Great Cacapon","WV","39.571804","-78.37183","-5","1" +"25423","Halltown","WV","39.315914","-77.877223","-5","1" +"25425","Harpers Ferry","WV","39.272324","-77.77982","-5","1" +"25427","Hedgesville","WV","39.540636","-78.05882","-5","1" +"25428","Inwood","WV","39.368967","-78.02742","-5","1" +"25429","Kearneysville","WV","39.349586","-77.878957","-5","1" +"25430","Kearneysville","WV","39.349476","-77.93415","-5","1" +"25431","Levels","WV","39.50219","-78.55592","-5","1" +"25432","Millville","WV","39.315914","-77.877223","-5","1" +"25434","Paw Paw","WV","39.500633","-78.43726","-5","1" +"25437","Points","WV","39.418178","-78.57871","-5","1" +"25438","Ranson","WV","39.300223","-77.8599","-5","1" +"25440","Ridgeway","WV","39.442661","-78.02628","-5","1" +"25441","Rippon","WV","39.210527","-77.91403","-5","1" +"25442","Shenandoah Junction","WV","39.358159","-77.83296","-5","1" +"25443","Shepherdstown","WV","39.434479","-77.81132","-5","1" +"25444","Slanesville","WV","39.412828","-78.52587","-5","1" +"25446","Summit Point","WV","39.247155","-77.95747","-5","1" +"25501","Alkol","WV","38.169041","-81.92567","-5","1" +"25502","Apple Grove","WV","38.669561","-82.12662","-5","1" +"25503","Ashton","WV","38.613255","-82.12468","-5","1" +"25504","Barboursville","WV","38.391209","-82.28563","-5","1" +"25505","Big Creek","WV","38.009633","-82.04481","-5","1" +"25506","Branchland","WV","38.214232","-82.191","-5","1" +"25507","Ceredo","WV","38.396081","-82.55881","-5","1" +"25508","Chapmanville","WV","37.962522","-82.01954","-5","1" +"25510","Culloden","WV","38.399499","-82.06562","-5","1" +"25511","Dunlow","WV","38.011587","-82.38072","-5","1" +"25512","East Lynn","WV","38.20651","-82.34523","-5","1" +"25514","Fort Gay","WV","38.101664","-82.5456","-5","1" +"25515","Gallipolis Ferry","WV","38.764623","-82.16003","-5","1" +"25517","Genoa","WV","38.116605","-82.46238","-5","1" +"25519","Glenhayes","WV","38.132114","-82.418277","-5","1" +"25520","Glenwood","WV","38.558344","-82.17149","-5","1" +"25521","Griffithsville","WV","38.238045","-81.98991","-5","1" +"25523","Hamlin","WV","38.280976","-82.08584","-5","1" +"25524","Harts","WV","38.02644","-82.1086","-5","1" +"25526","Hurricane","WV","38.427011","-81.9896","-5","1" +"25529","Julian","WV","38.152035","-81.84153","-5","1" +"25530","Kenova","WV","38.385975","-82.57461","-5","1" +"25534","Kiahsville","WV","38.082632","-82.27115","-5","1" +"25535","Lavalette","WV","38.30329","-82.44551","-5","1" +"25537","Lesage","WV","38.534701","-82.27982","-5","1" +"25540","Midkiff","WV","38.159971","-82.12506","-5","1" +"25541","Milton","WV","38.440316","-82.13535","-5","1" +"25543","Shepherdstown","WV","39.43028","-77.807994","-5","1" +"25544","Myra","WV","38.219991","-82.11462","-5","1" +"25545","Ona","WV","38.44068","-82.22311","-5","1" +"25547","Pecks Mill","WV","37.925145","-81.95826","-5","1" +"25550","Point Pleasant","WV","38.87018","-82.10751","-5","1" +"25555","Prichard","WV","38.238942","-82.58178","-5","1" +"25557","Ranger","WV","38.106001","-82.15143","-5","1" +"25559","Salt Rock","WV","38.324409","-82.22242","-5","1" +"25560","Scott Depot","WV","38.446225","-81.90315","-5","1" +"25562","Shoals","WV","38.343176","-82.490494","-5","1" +"25564","Sod","WV","38.268079","-81.88769","-5","1" +"25565","Spurlockville","WV","38.106045","-81.99598","-5","1" +"25567","Sumerco","WV","38.219996","-81.85414","-5","1" +"25569","Teays","WV","38.475369","-81.880455","-5","1" +"25570","Wayne","WV","38.225065","-82.43909","-5","1" +"25571","West Hamlin","WV","38.290859","-82.17566","-5","1" +"25572","Woodville","WV","38.187456","-81.901236","-5","1" +"25573","Yawkey","WV","38.229352","-81.94543","-5","1" +"25601","Logan","WV","37.833826","-82.00011","-5","1" +"25606","Accoville","WV","37.75979","-81.82027","-5","1" +"25607","Amherstdale","WV","37.788146","-81.80248","-5","1" +"25608","Baisden","WV","37.55612","-81.92315","-5","1" +"25611","Bruno","WV","37.690439","-81.85711","-5","1" +"25612","Chauncey","WV","37.76662","-81.98755","-5","1" +"25614","Cora","WV","37.833204","-81.902401","-5","1" +"25617","Davin","WV","37.733955","-81.81897","-5","1" +"25621","Gilbert","WV","37.625805","-81.90186","-5","1" +"25623","Hampden","WV","37.743063","-82.10801","-5","1" +"25624","Henlawson","WV","37.904732","-81.9827","-5","1" +"25625","Holden","WV","37.827404","-82.06382","-5","1" +"25628","Kistler","WV","37.757905","-81.85517","-5","1" +"25630","Lorado","WV","37.80126","-81.70802","-5","1" +"25631","Amherstdale-Robinette","WV","37.790435","-81.784532","-5","1" +"25632","Lyburn","WV","37.779196","-81.91651","-5","1" +"25634","Mallory","WV","37.72738","-81.84577","-5","1" +"25635","Man","WV","37.729265","-81.87853","-5","1" +"25636","Monaville","WV","37.808757","-81.99433","-5","1" +"25637","Mount Gay","WV","37.849418","-82.02174","-5","1" +"25638","Omar","WV","37.734818","-82.01452","-5","1" +"25639","Peach Creek","WV","37.878311","-81.96519","-5","1" +"25644","Sarah Ann","WV","37.688162","-81.98826","-5","1" +"25645","Stirrat","WV","37.833204","-81.902401","-5","1" +"25646","Stollings","WV","37.837136","-81.95921","-5","1" +"25647","Switzer","WV","37.793612","-81.98738","-5","1" +"25649","Verdunville","WV","37.852728","-82.06678","-5","1" +"25650","Verner","WV","37.686815","-81.81441","-5","1" +"25651","Wharncliffe","WV","37.555503","-81.96819","-5","1" +"25652","Whitman","WV","37.800168","-82.03943","-5","1" +"25653","Wilkinson","WV","37.828926","-81.99936","-5","1" +"25654","Yolyn","WV","37.801671","-81.87113","-5","1" +"25661","Williamson","WV","37.705144","-82.26827","-5","1" +"25665","Borderland","WV","37.714369","-82.30873","-5","1" +"25666","Breeden","WV","37.924415","-82.27394","-5","1" +"25667","Chattaroy","WV","37.703827","-82.27824","-5","1" +"25669","Crum","WV","37.938427","-82.4254","-5","1" +"25670","Delbarton","WV","37.705946","-82.14416","-5","1" +"25671","Dingess","WV","37.863118","-82.21671","-5","1" +"25672","Edgarton","WV","37.570813","-82.13578","-5","1" +"25674","Kermit","WV","37.860845","-82.37574","-5","1" +"25676","Lenore","WV","37.818843","-82.27267","-5","1" +"25678","Matewan","WV","37.617949","-82.16397","-5","1" +"25682","Meador","WV","37.583945","-82.04459","-5","1" +"25685","Naugatuck","WV","37.786897","-82.34373","-5","1" +"25686","Newtown","WV","37.743063","-82.10801","-5","1" +"25687","Nolan","WV","37.743063","-82.10801","-5","1" +"25688","North Matewan","WV","37.627833","-82.14774","-5","1" +"25690","Ragland","WV","37.743063","-82.10801","-5","1" +"25691","Rawl","WV","37.643043","-82.21701","-5","1" +"25692","Red Jacket","WV","37.640357","-82.13265","-5","1" +"25694","Thacker","WV","37.743063","-82.10801","-5","1" +"25696","Varney","WV","37.669222","-82.12599","-5","1" +"25697","Vulcan","WV","37.743063","-82.10801","-5","1" +"25699","Wilsondale","WV","37.966899","-82.29414","-5","1" +"25701","Huntington","WV","38.403511","-82.43904","-5","1" +"25702","Huntington","WV","38.431116","-82.37019","-5","1" +"25703","Huntington","WV","38.421443","-82.41924","-5","1" +"25704","Huntington","WV","38.386966","-82.49609","-5","1" +"25705","Huntington","WV","38.410745","-82.36995","-5","1" +"25706","Huntington","WV","38.413384","-82.277401","-5","1" +"25707","Huntington","WV","38.413384","-82.277401","-5","1" +"25708","Huntington","WV","38.413384","-82.277401","-5","1" +"25709","Huntington","WV","38.132114","-82.418277","-5","1" +"25710","Huntington","WV","38.413384","-82.277401","-5","1" +"25711","Huntington","WV","38.413384","-82.277401","-5","1" +"25712","Huntington","WV","38.413384","-82.277401","-5","1" +"25713","Huntington","WV","38.413384","-82.277401","-5","1" +"25714","Huntington","WV","38.413384","-82.277401","-5","1" +"25715","Huntington","WV","38.413384","-82.277401","-5","1" +"25716","Huntington","WV","38.413384","-82.277401","-5","1" +"25717","Huntington","WV","38.413384","-82.277401","-5","1" +"25718","Huntington","WV","38.413384","-82.277401","-5","1" +"25719","Huntington","WV","38.413384","-82.277401","-5","1" +"25720","Huntington","WV","38.413384","-82.277401","-5","1" +"25721","Huntington","WV","38.413384","-82.277401","-5","1" +"25722","Huntington","WV","38.413384","-82.277401","-5","1" +"25723","Huntington","WV","38.413384","-82.277401","-5","1" +"25724","Huntington","WV","38.413384","-82.277401","-5","1" +"25725","Huntington","WV","38.413384","-82.277401","-5","1" +"25726","Huntington","WV","38.413384","-82.277401","-5","1" +"25727","Huntington","WV","38.413384","-82.277401","-5","1" +"25728","Huntington","WV","38.413384","-82.277401","-5","1" +"25729","Huntington","WV","38.413384","-82.277401","-5","1" +"25755","Huntington","WV","38.422115","-82.431667","-5","1" +"25770","Huntington","WV","38.413384","-82.277401","-5","1" +"25771","Huntington","WV","38.413384","-82.277401","-5","1" +"25772","Huntington","WV","38.413384","-82.277401","-5","1" +"25773","Huntington","WV","38.413384","-82.277401","-5","1" +"25774","Huntington","WV","38.413384","-82.277401","-5","1" +"25775","Huntington","WV","38.413384","-82.277401","-5","1" +"25776","Huntington","WV","38.413384","-82.277401","-5","1" +"25777","Huntington","WV","38.413384","-82.277401","-5","1" +"25778","Huntington","WV","38.413384","-82.277401","-5","1" +"25779","Huntington","WV","38.413384","-82.277401","-5","1" +"25801","Beckley","WV","37.79064","-81.19958","-5","1" +"25802","Beckley","WV","37.748935","-81.224458","-5","1" +"25810","Allen Junction","WV","37.603344","-81.53998","-5","1" +"25811","Amigo","WV","37.603344","-81.53998","-5","1" +"25812","Ansted","WV","38.138419","-81.10403","-5","1" +"25813","Beaver","WV","37.754656","-81.11304","-5","1" +"25816","Blue Jay","WV","37.735161","-81.136328","-5","1" +"25817","Bolt","WV","37.77672","-81.41377","-5","1" +"25818","Bradley","WV","37.865746","-81.19244","-5","1" +"25820","Camp Creek","WV","37.504558","-81.11622","-5","1" +"25823","Coal City","WV","37.679582","-81.20968","-5","1" +"25825","Cool Ridge","WV","37.648813","-81.11241","-5","1" +"25826","Corinne","WV","37.577807","-81.35319","-5","1" +"25827","Crab Orchard","WV","37.733391","-81.23769","-5","1" +"25831","Danese","WV","37.950115","-80.92051","-5","1" +"25832","Daniels","WV","37.728559","-81.10364","-5","1" +"25833","Dothan","WV","38.041293","-81.064784","-5","1" +"25836","Eccles","WV","37.777391","-81.26443","-5","1" +"25837","Edmond","WV","38.048578","-81.03387","-5","1" +"25839","Fairdale","WV","37.776961","-81.36179","-5","1" +"25840","Fayetteville","WV","38.059415","-81.11208","-5","1" +"25841","Flat Top","WV","37.557975","-81.09537","-5","1" +"25843","Ghent","WV","37.618115","-81.10724","-5","1" +"25844","Glen Daniel","WV","37.802995","-81.36495","-5","1" +"25845","Glen Fork","WV","37.687988","-81.5314","-5","1" +"25846","Glen Jean","WV","37.927809","-81.15174","-5","1" +"25847","Glen Morgan","WV","37.72329","-81.17444","-5","1" +"25848","Glen Rogers","WV","37.714713","-81.41815","-5","1" +"25849","Glen White","WV","37.731521","-81.28108","-5","1" +"25851","Harper","WV","37.802469","-81.282759","-5","1" +"25853","Helen","WV","37.63215","-81.31644","-5","1" +"25854","Hico","WV","38.128245","-80.99151","-5","1" +"25855","Hilltop","WV","37.94251","-81.14995","-5","1" +"25856","Jonben","WV","37.653792","-81.18833","-5","1" +"25857","Josephine","WV","37.625307","-81.25093","-5","1" +"25859","Kilsyth","WV","38.041293","-81.064784","-5","1" +"25860","Lanark","WV","37.748935","-81.224458","-5","1" +"25862","Lansing","WV","38.079509","-81.06238","-5","1" +"25864","Layland","WV","37.906682","-80.99175","-5","1" +"25865","Lester","WV","37.737104","-81.32536","-5","1" +"25866","Lochgelly","WV","38.007725","-81.1391","-5","1" +"25868","Lookout","WV","38.073479","-80.9522","-5","1" +"25870","Maben","WV","37.67337","-81.42001","-5","1" +"25871","Mabscott","WV","37.771364","-81.2093","-5","1" +"25873","Mac Arthur","WV","37.7517","-81.214825","-5","1" +"25875","McGraws","WV","37.68344","-81.44608","-5","1" +"25876","Saulsville","WV","37.603344","-81.53998","-5","1" +"25878","Midway","WV","37.715335","-81.24131","-5","1" +"25879","Minden","WV","37.980561","-81.10208","-5","1" +"25880","Mount Hope","WV","37.88169","-81.19273","-5","1" +"25882","Mullens","WV","37.596209","-81.38193","-5","1" +"25898","Shady Spring","WV","37.698351","-81.081333","-5","1" +"25901","Oak Hill","WV","37.982775","-81.14533","-5","1" +"25902","Odd","WV","37.589172","-81.2324","-5","1" +"25904","Pax","WV","37.935699","-81.26724","-5","1" +"25906","Piney View","WV","37.837573","-81.128631","-5","1" +"25907","Prince","WV","37.855763","-81.06673","-5","1" +"25908","Princewick","WV","37.663234","-81.23911","-5","1" +"25909","Prosperity","WV","37.837706","-81.19722","-5","1" +"25911","Raleigh","WV","37.758469","-81.167549","-5","1" +"25912","Ramsey","WV","38.041293","-81.064784","-5","1" +"25913","Ravencliff","WV","37.699568","-81.48138","-5","1" +"25914","Redstar","WV","38.041293","-81.064784","-5","1" +"25915","Rhodell","WV","37.608562","-81.3019","-5","1" +"25916","Sabine","WV","37.677563","-81.50071","-5","1" +"25917","Scarbro","WV","37.964622","-81.21634","-5","1" +"25918","Shady Spring","WV","37.712469","-81.00561","-5","1" +"25919","Skelton","WV","37.800481","-81.180561","-5","1" +"25920","Slab Fork","WV","37.683749","-81.34359","-5","1" +"25921","Sophia","WV","37.70708","-81.26263","-5","1" +"25922","Spanishburg","WV","37.467516","-81.11672","-5","1" +"25926","Sprague","WV","37.787252","-81.195122","-5","1" +"25927","Stanaford","WV","37.748935","-81.224458","-5","1" +"25928","Stephenson","WV","37.576978","-81.33086","-5","1" +"25931","Summerlee","WV","38.041293","-81.064784","-5","1" +"25932","Surveyor","WV","37.764498","-81.3169","-5","1" +"25934","Terry","WV","37.848955","-81.093678","-5","1" +"25936","Thurmond","WV","37.930061","-81.05964","-5","1" +"25938","Victor","WV","38.151832","-81.05101","-5","1" +"25942","Winona","WV","38.040215","-80.99702","-5","1" +"25943","Wyco","WV","37.603344","-81.53998","-5","1" +"25951","Hinton","WV","37.671295","-80.86867","-5","1" +"25958","Charmco","WV","38.012459","-80.72757","-5","1" +"25961","Crichton","WV","37.975595","-80.426874","-5","1" +"25962","Rainelle","WV","37.966816","-80.7889","-5","1" +"25965","Elton","WV","37.648541","-80.877395","-5","1" +"25966","Green Sulphur Springs","WV","37.798406","-80.77039","-5","1" +"25967","Hines","WV","37.975595","-80.426874","-5","1" +"25969","Jumping Branch","WV","37.630988","-81.00955","-5","1" +"25971","Lerona","WV","37.478519","-80.95735","-5","1" +"25972","Leslie","WV","38.048182","-80.74821","-5","1" +"25976","Meadow Bridge","WV","37.854735","-80.84199","-5","1" +"25977","Meadow Creek","WV","37.808181","-80.92321","-5","1" +"25978","Nimitz","WV","37.645397","-80.92422","-5","1" +"25979","Pipestem","WV","37.49671","-80.91401","-5","1" +"25981","Quinwood","WV","38.07743","-80.72476","-5","1" +"25984","Rupert","WV","37.981358","-80.66798","-5","1" +"25985","Sandstone","WV","37.772844","-80.86438","-5","1" +"25986","Spring Dale","WV","37.878258","-80.80217","-5","1" +"25988","True","WV","37.648541","-80.877395","-5","1" +"25989","White Oak","WV","37.67906","-81.03591","-5","1" +"26003","Wheeling","WV","40.071472","-80.6868","-5","1" +"26030","Beech Bottom","WV","40.219614","-80.65404","-5","1" +"26031","Benwood","WV","40.013637","-80.72744","-5","1" +"26032","Bethany","WV","40.198956","-80.54683","-5","1" +"26033","Cameron","WV","39.81304","-80.58446","-5","1" +"26034","Chester","WV","40.609272","-80.55893","-5","1" +"26035","Colliers","WV","40.352943","-80.55585","-5","1" +"26036","Dallas","WV","39.974547","-80.53003","-5","1" +"26037","Follansbee","WV","40.330969","-80.58889","-5","1" +"26038","Glen Dale","WV","39.951586","-80.74994","-5","1" +"26039","Glen Easton","WV","39.835605","-80.67752","-5","1" +"26040","McMechen","WV","39.987177","-80.73048","-5","1" +"26041","Moundsville","WV","39.912923","-80.73701","-5","1" +"26047","New Cumberland","WV","40.519953","-80.58925","-5","1" +"26050","Newell","WV","40.616853","-80.60454","-5","1" +"26055","Proctor","WV","39.768143","-80.79867","-5","1" +"26056","New Manchester","WV","40.5323","-80.57999","-5","1" +"26058","Short Creek","WV","40.27932","-80.599949","-5","1" +"26059","Triadelphia","WV","40.063895","-80.6091","-5","1" +"26060","Valley Grove","WV","40.104818","-80.54634","-5","1" +"26062","Weirton","WV","40.412067","-80.57542","-5","1" +"26070","Wellsburg","WV","40.266698","-80.59709","-5","1" +"26074","West Liberty","WV","40.167471","-80.59377","-5","1" +"26075","Windsor Heights","WV","40.190886","-80.66613","-5","1" +"26101","Parkersburg","WV","39.265408","-81.53706","-5","1" +"26102","Parkersburg","WV","39.218276","-81.497865","-5","1" +"26103","Parkersburg","WV","39.236427","-81.540501","-5","1" +"26104","Parkersburg","WV","39.285724","-81.52639","-5","1" +"26105","Vienna","WV","39.323907","-81.54206","-5","1" +"26106","Parkersburg","WV","39.218276","-81.497865","-5","1" +"26120","Mineral Wells","WV","39.218276","-81.497865","-5","1" +"26121","Mineral Wells","WV","39.218276","-81.497865","-5","1" +"26133","Belleville","WV","39.122989","-81.68365","-5","1" +"26134","Belmont","WV","39.374773","-81.27886","-5","1" +"26135","Bens Run","WV","39.450612","-80.870081","-5","1" +"26136","Big Bend","WV","38.977792","-81.13917","-5","1" +"26137","Big Springs","WV","38.991483","-81.06772","-5","1" +"26138","Brohard","WV","39.03594","-81.18787","-5","1" +"26141","Creston","WV","38.939317","-81.24459","-5","1" +"26142","Davisville","WV","39.2059","-81.46549","-5","1" +"26143","Elizabeth","WV","39.070067","-81.40762","-5","1" +"26145","Pennsboro","WV","39.288336","-80.968967","-5","1" +"26146","Friendly","WV","39.462447","-81.05091","-5","1" +"26147","Grantsville","WV","38.911018","-81.07278","-5","1" +"26148","Macfarlan","WV","39.065862","-81.18722","-5","1" +"26149","Middlebourne","WV","39.481247","-80.87533","-5","1" +"26150","Mineral Wells","WV","39.162229","-81.53788","-5","1" +"26151","Mount Zion","WV","38.885826","-81.16885","-5","1" +"26152","Munday","WV","38.988098","-81.20721","-5","1" +"26155","New Martinsville","WV","39.646099","-80.83465","-5","1" +"26159","Paden City","WV","39.604088","-80.93276","-5","1" +"26160","Palestine","WV","38.971224","-81.40218","-5","1" +"26161","Petroleum","WV","39.173299","-81.25595","-5","1" +"26162","Porters Falls","WV","39.576419","-80.77211","-5","1" +"26164","Ravenswood","WV","38.977445","-81.72789","-5","1" +"26167","Reader","WV","39.550395","-80.71163","-5","1" +"26169","Rockport","WV","39.076628","-81.55299","-5","1" +"26170","Saint Marys","WV","39.370217","-81.17215","-5","1" +"26173","Sherman","WV","38.95192","-81.709496","-5","1" +"26175","Sistersville","WV","39.547803","-80.97408","-5","1" +"26178","Smithville","WV","39.059792","-81.02943","-5","1" +"26180","Walker","WV","39.179485","-81.37836","-5","1" +"26181","Washington","WV","39.220948","-81.66508","-5","1" +"26184","Waverly","WV","39.306083","-81.36639","-5","1" +"26186","Wileyville","WV","39.619007","-80.61225","-5","1" +"26187","Williamstown","WV","39.387718","-81.44585","-5","1" +"26201","Buckhannon","WV","38.997267","-80.20915","-5","1" +"26202","Fenwick","WV","38.224393","-80.61391","-5","1" +"26203","Erbacon","WV","38.520078","-80.59518","-5","1" +"26205","Craigsville","WV","38.330842","-80.64803","-5","1" +"26206","Cowen","WV","38.424309","-80.53771","-5","1" +"26208","Camden On Gauley","WV","38.364123","-80.5902","-5","1" +"26209","Snowshoe","WV","38.422376","-79.99344","-5","1" +"26210","Adrian","WV","38.900064","-80.26795","-5","1" +"26215","Cleveland","WV","38.716238","-80.39927","-5","1" +"26217","Diana","WV","38.60286","-80.4595","-5","1" +"26218","French Creek","WV","38.857567","-80.27872","-5","1" +"26219","Frenchton","WV","38.899314","-80.226855","-5","1" +"26222","Hacker Valley","WV","38.663739","-80.39794","-5","1" +"26224","Helvetia","WV","38.735363","-80.18033","-5","1" +"26228","Kanawha Head","WV","38.753031","-80.38231","-5","1" +"26229","Lorentz","WV","38.899314","-80.226855","-5","1" +"26230","Pickens","WV","38.66362","-80.24361","-5","1" +"26234","Rock Cave","WV","38.792214","-80.3159","-5","1" +"26236","Selbyville","WV","38.752157","-80.23537","-5","1" +"26237","Tallmansville","WV","38.854653","-80.15531","-5","1" +"26238","Volga","WV","39.091657","-80.1442","-5","1" +"26241","Elkins","WV","38.920042","-79.8446","-5","1" +"26250","Belington","WV","39.032644","-79.95295","-5","1" +"26253","Beverly","WV","38.827205","-79.89057","-5","1" +"26254","Bowden","WV","38.918159","-79.63227","-5","1" +"26257","Coalton","WV","38.916124","-80.00221","-5","1" +"26259","Dailey","WV","38.798094","-79.89941","-5","1" +"26260","Davis","WV","39.101535","-79.43805","-5","1" +"26261","Richwood","WV","38.224781","-80.5425","-5","1" +"26263","Dryfork","WV","38.992079","-79.40533","-5","1" +"26264","Durbin","WV","38.55181","-79.83449","-5","1" +"26266","Upperglade","WV","38.41012","-80.49595","-5","1" +"26267","Ellamore","WV","38.912609","-80.07907","-5","1" +"26268","Glady","WV","38.780919","-79.74674","-5","1" +"26269","Hambleton","WV","39.097545","-79.63848","-5","1" +"26270","Harman","WV","38.915141","-79.53066","-5","1" +"26271","Hendricks","WV","39.042297","-79.60611","-5","1" +"26273","Huttonsville","WV","38.671662","-79.98029","-5","1" +"26275","Junior","WV","38.97639","-79.95201","-5","1" +"26276","Kerens","WV","39.019639","-79.74614","-5","1" +"26278","Mabie","WV","38.861656","-80.00402","-5","1" +"26280","Mill Creek","WV","38.736144","-80","-5","1" +"26282","Monterville","WV","38.518735","-80.14368","-5","1" +"26283","Montrose","WV","39.067689","-79.82219","-5","1" +"26285","Norton","WV","38.934414","-79.96518","-5","1" +"26287","Parsons","WV","39.141165","-79.67466","-5","1" +"26288","Webster Springs","WV","38.484777","-80.38023","-5","1" +"26289","Red Creek","WV","38.99095","-79.50217","-5","1" +"26291","Slatyfork","WV","38.444873","-80.09781","-5","1" +"26292","Thomas","WV","39.149624","-79.5003","-5","1" +"26293","Valley Bend","WV","38.758699","-79.91798","-5","1" +"26294","Valley Head","WV","38.52061","-80.03629","-5","1" +"26296","Whitmer","WV","38.810555","-79.54723","-5","1" +"26298","Bergoo","WV","38.480062","-80.29679","-5","1" +"26301","Clarksburg","WV","39.281289","-80.34348","-5","1" +"26302","Clarksburg","WV","39.26277","-80.30858","-5","1" +"26306","Clarksburg","WV","39.285204","-80.385344","-5","1" +"26320","Alma","WV","39.41849","-80.80604","-5","1" +"26321","Alum Bridge","WV","39.051863","-80.6844","-5","1" +"26323","Anmoore","WV","39.258328","-80.28798","-5","1" +"26325","Auburn","WV","39.095644","-80.86182","-5","1" +"26327","Berea","WV","39.122023","-80.95448","-5","1" +"26328","Blandville","WV","39.270846","-80.719742","-5","1" +"26330","Bridgeport","WV","39.296499","-80.24199","-5","1" +"26332","Bristol","WV","39.286975","-80.50197","-5","1" +"26333","Burnsville","WV","38.859246","-80.657019","-5","1" +"26334","Brownton","WV","39.220701","-80.15881","-5","1" +"26335","Burnsville","WV","38.856879","-80.66528","-5","1" +"26337","Cairo","WV","39.228729","-81.16135","-5","1" +"26338","Camden","WV","39.09666","-80.62283","-5","1" +"26339","Center Point","WV","39.42039","-80.60204","-5","1" +"26342","Coxs Mills","WV","39.018602","-80.85231","-5","1" +"26343","Crawford","WV","38.85389","-80.40589","-5","1" +"26346","Ellenboro","WV","39.270902","-81.06189","-5","1" +"26347","Flemington","WV","39.258358","-80.12604","-5","1" +"26348","Folsom","WV","39.472363","-80.5275","-5","1" +"26349","Galloway","WV","39.226574","-80.08514","-5","1" +"26350","Gilmer","WV","38.913649","-80.831256","-5","1" +"26351","Glenville","WV","38.939952","-80.84886","-5","1" +"26354","Grafton","WV","39.343418","-80.02665","-5","1" +"26361","Gypsy","WV","39.368814","-80.31872","-5","1" +"26362","Harrisville","WV","39.171784","-81.05325","-5","1" +"26366","Haywood","WV","39.380098","-80.33785","-5","1" +"26369","Hepzibah","WV","39.328064","-80.33566","-5","1" +"26372","Horner","WV","38.969579","-80.36881","-5","1" +"26374","Independence","WV","39.436084","-79.87873","-5","1" +"26375","Industrial","WV","39.279818","-80.575379","-5","1" +"26376","Ireland","WV","38.766855","-80.46172","-5","1" +"26377","Jacksonburg","WV","39.485593","-80.64053","-5","1" +"26378","Jane Lew","WV","39.106153","-80.42691","-5","1" +"26384","Linn","WV","38.983677","-80.70654","-5","1" +"26385","Lost Creek","WV","39.163304","-80.35527","-5","1" +"26386","Lumberport","WV","39.378137","-80.3709","-5","1" +"26404","Meadowbrook","WV","39.344303","-80.31744","-5","1" +"26405","Moatsville","WV","39.230125","-79.89397","-5","1" +"26407","Mountain","WV","39.198501","-81.068913","-5","1" +"26408","Mount Clare","WV","39.205852","-80.29416","-5","1" +"26410","Newburg","WV","39.39905","-79.82996","-5","1" +"26411","New Milton","WV","39.185707","-80.71039","-5","1" +"26412","Orlando","WV","38.891517","-80.5648","-5","1" +"26415","Pennsboro","WV","39.294877","-80.96009","-5","1" +"26416","Philippi","WV","39.155551","-80.02419","-5","1" +"26419","Pine Grove","WV","39.551892","-80.67076","-5","1" +"26421","Pullman","WV","39.183473","-80.92668","-5","1" +"26422","Reynoldsville","WV","39.285303","-80.44628","-5","1" +"26424","Rosemont","WV","39.268207","-80.1652","-5","1" +"26425","Rowlesburg","WV","39.320034","-79.68442","-5","1" +"26426","Salem","WV","39.284467","-80.57219","-5","1" +"26430","Sand Fork","WV","38.891042","-80.74656","-5","1" +"26431","Shinnston","WV","39.392285","-80.28438","-5","1" +"26434","Shirley","WV","39.450612","-80.870081","-5","1" +"26435","Simpson","WV","39.266262","-80.09206","-5","1" +"26436","Smithburg","WV","39.287254","-80.73186","-5","1" +"26437","Smithfield","WV","39.513468","-80.53196","-5","1" +"26438","Spelter","WV","39.346726","-80.31889","-5","1" +"26440","Thornton","WV","39.329797","-79.90371","-5","1" +"26443","Troy","WV","39.080329","-80.76956","-5","1" +"26444","Tunnelton","WV","39.377589","-79.76428","-5","1" +"26447","Walkersville","WV","38.881069","-80.47432","-5","1" +"26448","Wallace","WV","39.407957","-80.48869","-5","1" +"26451","West Milford","WV","39.204169","-80.40294","-5","1" +"26452","Weston","WV","39.04101","-80.47731","-5","1" +"26456","West Union","WV","39.293095","-80.77811","-5","1" +"26461","Wilsonburg","WV","39.285204","-80.385344","-5","1" +"26462","Weston","WV","39.03525","-80.467765","-5","1" +"26463","Wyatt","WV","39.440245","-80.35233","-5","1" +"26501","Morgantown","WV","39.628475","-79.98796","-5","1" +"26502","Morgantown","WV","39.625302","-79.967184","-5","1" +"26503","Morgantown","WV","39.636606","-79.895639","-5","1" +"26504","Morgantown","WV","39.578512","-80.093007","-5","1" +"26505","Morgantown","WV","39.646497","-79.95154","-5","1" +"26506","Morgantown","WV","39.645276","-79.962669","-5","1" +"26507","Morgantown","WV","39.680786","-79.836473","-5","1" +"26508","Morgantown","WV","39.61098","-79.89947","-5","1" +"26519","Albright","WV","39.539088","-79.63241","-5","1" +"26520","Arthurdale","WV","39.497676","-79.82003","-5","1" +"26521","Blacksville","WV","39.718922","-80.21137","-5","1" +"26522","Booth","WV","39.578512","-80.093007","-5","1" +"26524","Bretz","WV","39.458091","-79.688154","-5","1" +"26525","Bruceton Mills","WV","39.646876","-79.59847","-5","1" +"26527","Cassville","WV","39.578512","-80.093007","-5","1" +"26529","Core","WV","39.68903","-80.14113","-5","1" +"26531","Dellslow","WV","39.607447","-79.89012","-5","1" +"26533","Everettville","WV","39.578512","-80.093007","-5","1" +"26534","Granville","WV","39.646705","-79.98826","-5","1" +"26535","Hazelton","WV","39.458091","-79.688154","-5","1" +"26537","Kingwood","WV","39.472924","-79.69873","-5","1" +"26541","Maidsville","WV","39.69234","-79.97335","-5","1" +"26542","Masontown","WV","39.561031","-79.79533","-5","1" +"26543","Osage","WV","39.660624","-80.0072","-5","1" +"26544","Pentress","WV","39.707009","-80.16451","-5","1" +"26546","Pursglove","WV","39.674575","-80.034965","-5","1" +"26547","Reedsville","WV","39.509001","-79.80521","-5","1" +"26554","Fairmont","WV","39.470949","-80.13936","-5","1" +"26555","Fairmont","WV","39.514343","-80.218538","-5","1" +"26559","Barrackville","WV","39.5017","-80.1664","-5","1" +"26560","Baxter","WV","39.514343","-80.218538","-5","1" +"26561","Big Run","WV","39.575518","-80.666712","-5","1" +"26562","Burton","WV","39.646936","-80.44192","-5","1" +"26563","Carolina","WV","39.480838","-80.27183","-5","1" +"26566","Colfax","WV","39.514343","-80.218538","-5","1" +"26568","Enterprise","WV","39.422397","-80.27564","-5","1" +"26570","Fairview","WV","39.642393","-80.23405","-5","1" +"26571","Farmington","WV","39.513513","-80.25738","-5","1" +"26572","Four States","WV","39.48057","-80.30851","-5","1" +"26574","Grant Town","WV","39.558702","-80.17617","-5","1" +"26575","Hundred","WV","39.696744","-80.43872","-5","1" +"26576","Idamay","WV","39.494727","-80.25872","-5","1" +"26578","Kingmont","WV","39.446631","-80.176171","-5","1" +"26581","Littleton","WV","39.695772","-80.53077","-5","1" +"26582","Mannington","WV","39.527817","-80.3586","-5","1" +"26585","Metz","WV","39.611767","-80.41237","-5","1" +"26586","Montana Mines","WV","39.525505","-80.10866","-5","1" +"26587","Rachel","WV","39.520705","-80.30336","-5","1" +"26588","Rivesville","WV","39.549346","-80.13097","-5","1" +"26589","Wadestown","WV","39.668566","-80.335","-5","1" +"26590","Wana","WV","39.704464","-80.27178","-5","1" +"26591","Worthington","WV","39.452034","-80.27599","-5","1" +"26601","Sutton","WV","38.641439","-80.67497","-5","1" +"26610","Birch River","WV","38.465291","-80.72323","-5","1" +"26611","Cedarville","WV","38.833295","-80.80006","-5","1" +"26612","Centralia","WV","38.620506","-80.586148","-5","1" +"26615","Copen","WV","38.836102","-80.72573","-5","1" +"26617","Dille","WV","38.49119","-80.83069","-5","1" +"26618","Elmira","WV","38.706017","-80.736884","-5","1" +"26619","Exchange","WV","38.788013","-80.73291","-5","1" +"26621","Flatwoods","WV","38.728405","-80.58745","-5","1" +"26623","Frametown","WV","38.653616","-80.86194","-5","1" +"26624","Gassaway","WV","38.704457","-80.79366","-5","1" +"26627","Heaters","WV","38.767682","-80.61266","-5","1" +"26629","Little Birch","WV","38.553898","-80.69864","-5","1" +"26630","Bridgeport","WV","39.280867","-80.249302","-5","1" +"26631","Napier","WV","38.790368","-80.57981","-5","1" +"26634","Perkins","WV","38.786153","-80.91878","-5","1" +"26636","Rosedale","WV","38.74076","-80.9435","-5","1" +"26638","Shock","WV","38.7357","-80.98431","-5","1" +"26639","Strange Creek","WV","38.55291","-80.86928","-5","1" +"26641","Wilsie","WV","38.690755","-80.90285","-5","1" +"26651","Summersville","WV","38.30696","-80.87329","-5","1" +"26656","Belva","WV","38.244559","-81.16153","-5","1" +"26660","Calvin","WV","38.355607","-80.69639","-5","1" +"26662","Canvas","WV","38.245298","-80.75434","-5","1" +"26667","Drennen","WV","38.268633","-80.98148","-5","1" +"26671","Gilboa","WV","38.302121","-80.93549","-5","1" +"26674","Jodie","WV","38.210552","-81.13906","-5","1" +"26675","Keslers Cross Lanes","WV","38.318389","-80.834152","-5","1" +"26676","Leivasy","WV","38.153472","-80.66112","-5","1" +"26678","Mount Lookout","WV","38.15798","-80.91002","-5","1" +"26679","Mount Nebo","WV","38.1755","-80.80897","-5","1" +"26680","Nallen","WV","38.090457","-80.88462","-5","1" +"26681","Nettie","WV","38.218258","-80.70048","-5","1" +"26684","Pool","WV","38.163524","-80.86864","-5","1" +"26690","Swiss","WV","38.243168","-81.10596","-5","1" +"26691","Tioga","WV","38.408153","-80.67026","-5","1" +"26704","Augusta","WV","39.285323","-78.59401","-5","1" +"26705","Aurora","WV","39.327576","-79.54714","-5","1" +"26707","Bayard","WV","39.264409","-79.3654","-5","1" +"26710","Burlington","WV","39.335771","-78.91724","-5","1" +"26711","Capon Bridge","WV","39.293252","-78.47306","-5","1" +"26714","Delray","WV","39.18253","-78.62152","-5","1" +"26716","Eglon","WV","39.261474","-79.50612","-5","1" +"26717","Elk Garden","WV","39.351231","-79.17606","-5","1" +"26719","Fort Ashby","WV","39.497698","-78.76381","-5","1" +"26720","Gormania","WV","39.280652","-79.33844","-5","1" +"26722","Green Spring","WV","39.509416","-78.6438","-5","1" +"26726","Keyser","WV","39.434856","-78.95987","-5","1" +"26731","Lahmansville","WV","39.153987","-79.07088","-5","1" +"26734","Medley","WV","39.070601","-79.233536","-5","1" +"26739","Mount Storm","WV","39.248761","-79.23785","-5","1" +"26743","New Creek","WV","39.291478","-79.07484","-5","1" +"26750","Piedmont","WV","39.476243","-79.04681","-5","1" +"26753","Ridgeley","WV","39.579717","-78.78539","-5","1" +"26755","Rio","WV","39.13957","-78.66841","-5","1" +"26757","Romney","WV","39.321688","-78.74815","-5","1" +"26761","Shanks","WV","39.291196","-78.69317","-5","1" +"26763","Springfield","WV","39.44763","-78.6661","-5","1" +"26764","Terra Alta","WV","39.454805","-79.54326","-5","1" +"26767","Wiley Ford","WV","39.616008","-78.77489","-5","1" +"26801","Baker","WV","39.084895","-78.779","-5","1" +"26802","Brandywine","WV","38.633148","-79.21669","-5","1" +"26804","Circleville","WV","38.626289","-79.53068","-5","1" +"26807","Franklin","WV","38.65585","-79.33975","-5","1" +"26808","High View","WV","39.210787","-78.44261","-5","1" +"26810","Lost City","WV","38.973027","-78.73978","-5","1" +"26812","Mathias","WV","38.878002","-78.88245","-5","1" +"26814","Riverton","WV","38.737991","-79.43087","-5","1" +"26815","Sugar Grove","WV","38.482224","-79.33161","-5","1" +"26817","Bloomery","WV","39.344466","-78.38374","-5","1" +"26818","Fisher","WV","39.068317","-79.01717","-5","1" +"26823","Capon Springs","WV","39.13982","-78.49576","-5","1" +"26824","Junction","WV","39.314071","-78.659428","-5","1" +"26833","Maysville","WV","39.089792","-79.18014","-5","1" +"26836","Moorefield","WV","39.038183","-78.97189","-5","1" +"26838","Milam","WV","38.81801","-79.09107","-5","1" +"26845","Old Fields","WV","39.184315","-78.9458","-5","1" +"26847","Petersburg","WV","38.959188","-79.13703","-5","1" +"26851","Wardensville","WV","39.066543","-78.6218","-5","1" +"26852","Purgitsville","WV","39.248438","-78.92736","-5","1" +"26855","Cabins","WV","38.98645","-79.25455","-5","1" +"26865","Yellow Spring","WV","39.199856","-78.49655","-5","1" +"26866","Upper Tract","WV","38.814289","-79.23861","-5","1" +"26884","Seneca Rocks","WV","38.849407","-79.37151","-5","1" +"26886","Onego","WV","38.844294","-79.42206","-5","1" +"26905","Morgantown","WV","39.635272","-79.933496","-5","1" +"27006","Advance","NC","35.954679","-80.44132","-5","1" +"27007","Ararat","NC","36.390363","-80.58746","-5","1" +"27009","Belews Creek","NC","36.236829","-80.07495","-5","1" +"27010","Bethania","NC","36.182975","-80.338662","-5","1" +"27011","Boonville","NC","36.218385","-80.70955","-5","1" +"27012","Clemmons","NC","36.027101","-80.39312","-5","1" +"27013","Cleveland","NC","35.73956","-80.69407","-5","1" +"27014","Cooleemee","NC","35.812635","-80.55724","-5","1" +"27016","Danbury","NC","36.429179","-80.19588","-5","1" +"27017","Dobson","NC","36.367258","-80.72296","-5","1" +"27018","East Bend","NC","36.198622","-80.52694","-5","1" +"27019","Germanton","NC","36.297049","-80.23777","-5","1" +"27020","Hamptonville","NC","36.115196","-80.81872","-5","1" +"27021","King","NC","36.293122","-80.3546","-5","1" +"27022","Lawsonville","NC","36.52235","-80.22195","-5","1" +"27023","Lewisville","NC","36.097767","-80.42715","-5","1" +"27024","Lowgap","NC","36.520921","-80.84824","-5","1" +"27025","Madison","NC","36.383107","-79.97451","-5","1" +"27027","Mayodan","NC","36.421448","-79.97458","-5","1" +"27028","Mocksville","NC","35.920477","-80.57143","-5","1" +"27030","Mount Airy","NC","36.49376","-80.62336","-5","1" +"27031","White Plains","NC","36.399366","-80.70809","-5","1" +"27040","Pfafftown","NC","36.182718","-80.36487","-5","1" +"27041","Pilot Mountain","NC","36.398995","-80.48006","-5","1" +"27042","Pine Hall","NC","36.335676","-80.05135","-5","1" +"27043","Pinnacle","NC","36.331502","-80.4417","-5","1" +"27045","Rural Hall","NC","36.232354","-80.30391","-5","1" +"27046","Sandy Ridge","NC","36.488575","-80.09267","-5","1" +"27047","Siloam","NC","36.305687","-80.5824","-5","1" +"27048","Stoneville","NC","36.47266","-79.90522","-5","1" +"27049","Toast","NC","36.551332","-80.655786","-5","1" +"27050","Tobaccoville","NC","36.235252","-80.38089","-5","1" +"27051","Walkertown","NC","36.174243","-80.16679","-5","1" +"27052","Walnut Cove","NC","36.298241","-80.14383","-5","1" +"27053","Westfield","NC","36.473951","-80.34752","-5","1" +"27054","Woodleaf","NC","35.787743","-80.59377","-5","1" +"27055","Yadkinville","NC","36.12301","-80.64557","-5","1" +"27094","Rural Hall","NC","36.027482","-80.20728","-5","1" +"27098","Rural Hall","NC","36.027482","-80.20728","-5","1" +"27099","Rural Hall","NC","36.027482","-80.20728","-5","1" +"27101","Winston Salem","NC","36.107037","-80.21918","-5","1" +"27102","Winston Salem","NC","36.032304","-80.396168","-5","1" +"27103","Winston Salem","NC","36.066545","-80.30733","-5","1" +"27104","Winston Salem","NC","36.094104","-80.31503","-5","1" +"27105","Winston Salem","NC","36.147887","-80.23423","-5","1" +"27106","Winston Salem","NC","36.141395","-80.3137","-5","1" +"27107","Winston Salem","NC","36.046215","-80.18998","-5","1" +"27108","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27109","Winston Salem","NC","36.133577","-80.2768","-5","1" +"27110","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27111","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27113","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27114","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27115","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27116","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27117","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27120","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27127","Winston Salem","NC","36.039398","-80.26171","-5","1" +"27130","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27144","Salisbury","NC","35.708966","-80.464515","-5","1" +"27150","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27151","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27152","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27155","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27156","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27157","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27198","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27199","Winston Salem","NC","36.027482","-80.20728","-5","1" +"27201","Alamance","NC","36.031836","-79.485643","-5","1" +"27202","Altamahaw","NC","36.185712","-79.50496","-5","1" +"27203","Asheboro","NC","35.686122","-79.82919","-5","1" +"27204","Asheboro","NC","35.788286","-79.720556","-5","1" +"27205","Asheboro","NC","35.665973","-79.832161","-5","1" +"27207","Bear Creek","NC","35.613837","-79.38984","-5","1" +"27208","Bennett","NC","35.559258","-79.54591","-5","1" +"27209","Biscoe","NC","35.354158","-79.76839","-5","1" +"27212","Blanch","NC","36.461871","-79.26388","-5","1" +"27213","Bonlee","NC","35.648194","-79.414859","-5","1" +"27214","Browns Summit","NC","36.205771","-79.69839","-5","1" +"27215","Burlington","NC","36.072336","-79.4698","-5","1" +"27216","Burlington","NC","36.047523","-79.479743","-5","1" +"27217","Burlington","NC","36.132737","-79.41135","-5","1" +"27220","Burlington","NC","36.046677","-79.389631","-5","1" +"27228","Bynum","NC","35.783476","-79.129791","-5","1" +"27229","Candor","NC","35.280008","-79.79467","-5","1" +"27230","Cedar Falls","NC","35.802758","-79.879711","-5","1" +"27231","Cedar Grove","NC","36.207994","-79.16879","-5","1" +"27233","Climax","NC","35.911979","-79.69566","-5","1" +"27235","Colfax","NC","36.092076","-80.01009","-5","1" +"27237","Cumnock","NC","35.467567","-79.165314","-5","1" +"27239","Denton","NC","35.618434","-80.10517","-5","1" +"27242","Eagle Springs","NC","35.307299","-79.65327","-5","1" +"27243","Efland","NC","36.082138","-79.18649","-5","1" +"27244","Elon College","NC","36.152742","-79.50839","-5","1" +"27247","Ether","NC","35.451411","-79.783404","-5","1" +"27248","Franklinville","NC","35.761433","-79.69835","-5","1" +"27249","Gibsonville","NC","36.125747","-79.56352","-5","1" +"27252","Goldston","NC","35.564257","-79.35011","-5","1" +"27253","Graham","NC","36.031837","-79.37815","-5","1" +"27256","Gulf","NC","35.562184","-79.28751","-5","1" +"27258","Haw River","NC","36.064176","-79.34421","-5","1" +"27259","Highfalls","NC","35.492077","-79.479016","-5","1" +"27260","High Point","NC","35.950436","-79.99345","-5","1" +"27261","High Point","NC","36.080707","-80.0244","-5","1" +"27262","High Point","NC","35.964586","-80.02239","-5","1" +"27263","High Point","NC","35.914548","-79.96062","-5","1" +"27264","High Point","NC","36.080707","-80.0244","-5","1" +"27265","High Point","NC","36.017647","-80.00628","-5","1" +"27278","Hillsborough","NC","36.079726","-79.09459","-5","1" +"27281","Jackson Springs","NC","35.177643","-79.60491","-5","1" +"27282","Jamestown","NC","35.998221","-79.93573","-5","1" +"27283","Julian","NC","35.936904","-79.63191","-5","1" +"27284","Kernersville","NC","36.119887","-80.08726","-5","1" +"27285","Kernersville","NC","36.027482","-80.20728","-5","1" +"27288","Eden","NC","36.505996","-79.74935","-5","1" +"27289","Eden","NC","36.392135","-79.773094","-5","1" +"27291","Leasburg","NC","36.415102","-79.14221","-5","1" +"27292","Lexington","NC","35.775789","-80.23174","-5","1" +"27293","Lexington","NC","35.882943","-80.275963","-5","1" +"27294","Lexington","NC","35.882943","-80.275963","-5","1" +"27295","Lexington","NC","35.856896","-80.28961","-5","1" +"27298","Liberty","NC","35.884276","-79.56809","-5","1" +"27299","Linwood","NC","35.752578","-80.37587","-5","1" +"27301","McLeansville","NC","36.108536","-79.6808","-5","1" +"27302","Mebane","NC","36.111449","-79.27142","-5","1" +"27305","Milton","NC","36.532166","-79.21379","-5","1" +"27306","Mount Gilead","NC","35.227919","-79.99741","-5","1" +"27310","Oak Ridge","NC","36.178137","-79.9842","-5","1" +"27311","Pelham","NC","36.49076","-79.48073","-5","1" +"27312","Pittsboro","NC","35.756091","-79.17848","-5","1" +"27313","Pleasant Garden","NC","35.937595","-79.75441","-5","1" +"27314","Prospect Hill","NC","36.285009","-79.19809","-5","1" +"27315","Providence","NC","36.512448","-79.37498","-5","1" +"27316","Ramseur","NC","35.711954","-79.63723","-5","1" +"27317","Randleman","NC","35.817411","-79.80389","-5","1" +"27320","Reidsville","NC","36.345919","-79.67075","-5","1" +"27321","Reidsville","NC","36.347568","-79.680318","-5","1" +"27322","Reidsville","NC","36.392135","-79.773094","-5","1" +"27323","Reidsville","NC","36.392135","-79.773094","-5","1" +"27325","Robbins","NC","35.447663","-79.57555","-5","1" +"27326","Ruffin","NC","36.478349","-79.55518","-5","1" +"27330","Sanford","NC","35.458804","-79.16415","-5","1" +"27331","Sanford","NC","35.372577","-79.276577","-5","1" +"27332","Sanford","NC","35.401023","-79.14419","-5","1" +"27340","Saxapahaw","NC","35.948814","-79.329664","-5","1" +"27341","Seagrove","NC","35.53332","-79.71018","-5","1" +"27342","Sedalia","NC","36.075975","-79.63132","-5","1" +"27343","Semora","NC","36.495772","-79.09331","-5","1" +"27344","Siler City","NC","35.729692","-79.44984","-5","1" +"27349","Snow Camp","NC","35.897155","-79.42344","-5","1" +"27350","Sophia","NC","35.808395","-79.90244","-5","1" +"27351","Southmont","NC","35.660548","-80.283647","-5","1" +"27355","Staley","NC","35.79386","-79.55521","-5","1" +"27356","Star","NC","35.414095","-79.78487","-5","1" +"27357","Stokesdale","NC","36.252154","-79.97548","-5","1" +"27358","Summerfield","NC","36.209976","-79.88921","-5","1" +"27359","Swepsonville","NC","36.021389","-79.357399","-5","1" +"27360","Thomasville","NC","35.871","-80.08603","-5","1" +"27361","Thomasville","NC","35.882943","-80.275963","-5","1" +"27370","Trinity","NC","35.843856","-79.9849","-5","1" +"27371","Troy","NC","35.382213","-79.92418","-5","1" +"27373","Wallburg","NC","35.882943","-80.275963","-5","1" +"27374","Welcome","NC","35.781848","-80.203546","-5","1" +"27375","Wentworth","NC","36.392135","-79.773094","-5","1" +"27376","West End","NC","35.248989","-79.54383","-5","1" +"27377","Whitsett","NC","36.050652","-79.59483","-5","1" +"27379","Yanceyville","NC","36.387904","-79.33107","-5","1" +"27391","Troy","NC","35.353048","-79.901349","-5","1" +"27397","Yanceyville","NC","36.403393","-79.333836","-5","1" +"27401","Greensboro","NC","36.071135","-79.77468","-5","1" +"27402","Greensboro","NC","36.106711","-79.791901","-5","1" +"27403","Greensboro","NC","36.064485","-79.82206","-5","1" +"27404","Greensboro","NC","36.080707","-80.0244","-5","1" +"27405","Greensboro","NC","36.107499","-79.75242","-5","1" +"27406","Greensboro","NC","36.022863","-79.77895","-5","1" +"27407","Greensboro","NC","36.025379","-79.87112","-5","1" +"27408","Greensboro","NC","36.101385","-79.81425","-5","1" +"27409","Greensboro","NC","36.083885","-79.94122","-5","1" +"27410","Greensboro","NC","36.116854","-79.88291","-5","1" +"27411","Greensboro","NC","36.080707","-80.0244","-5","1" +"27412","Greensboro","NC","36.066129","-79.806735","-5","1" +"27413","Greensboro","NC","36.080707","-80.0244","-5","1" +"27415","Greensboro","NC","36.080707","-80.0244","-5","1" +"27416","Greensboro","NC","36.080707","-80.0244","-5","1" +"27417","Greensboro","NC","36.080707","-80.0244","-5","1" +"27419","Greensboro","NC","36.080707","-80.0244","-5","1" +"27420","Greensboro","NC","36.112987","-79.775913","-5","1" +"27425","Greensboro","NC","36.080707","-80.0244","-5","1" +"27427","Greensboro","NC","36.080707","-80.0244","-5","1" +"27429","Greensboro","NC","36.080707","-80.0244","-5","1" +"27435","Greensboro","NC","36.080707","-80.0244","-5","1" +"27438","Greensboro","NC","36.080707","-80.0244","-5","1" +"27455","Greensboro","NC","36.156707","-79.80644","-5","1" +"27480","Greensboro","NC","36.080707","-80.0244","-5","1" +"27495","Greensboro","NC","36.080707","-80.0244","-5","1" +"27498","Greensboro","NC","36.080707","-80.0244","-5","1" +"27499","Greensboro","NC","36.080707","-80.0244","-5","1" +"27501","Angier","NC","35.494384","-78.71","-5","1" +"27502","Apex","NC","35.73663","-78.86462","-5","1" +"27503","Bahama","NC","36.158344","-78.87419","-5","1" +"27504","Benson","NC","35.390431","-78.53155","-5","1" +"27505","Broadway","NC","35.42638","-79.03409","-5","1" +"27506","Buies Creek","NC","35.406513","-78.73848","-5","1" +"27507","Bullock","NC","36.525791","-78.57014","-5","1" +"27508","Bunn","NC","35.954331","-78.25342","-5","1" +"27509","Butner","NC","36.138298","-78.75882","-5","1" +"27510","Carrboro","NC","35.912489","-79.08144","-5","1" +"27511","Cary","NC","35.755651","-78.77508","-5","1" +"27512","Cary","NC","35.808387","-78.839488","-5","1" +"27513","Cary","NC","35.797882","-78.79702","-5","1" +"27514","Chapel Hill","NC","35.915083","-79.02939","-5","1" +"27515","Chapel Hill","NC","36.05251","-79.107692","-5","1" +"27516","Chapel Hill","NC","35.912786","-79.10931","-5","1" +"27517","Chapel Hill","NC","35.892359","-79.020849","-5","1" +"27518","Cary","NC","35.797692","-78.625265","-5","1" +"27519","Cary","NC","35.76812","-78.829548","-5","1" +"27520","Clayton","NC","35.635275","-78.4489","-5","1" +"27521","Coats","NC","35.408375","-78.66964","-5","1" +"27522","Creedmoor","NC","36.111937","-78.69122","-5","1" +"27523","Eagle Rock","NC","35.797692","-78.625265","-5","1" +"27524","Four Oaks","NC","35.4152","-78.42116","-5","1" +"27525","Franklinton","NC","36.104866","-78.45893","-5","1" +"27526","Fuquay Varina","NC","35.575302","-78.80234","-5","1" +"27529","Garner","NC","35.679194","-78.60246","-5","1" +"27530","Goldsboro","NC","35.384344","-78.00893","-5","1" +"27531","Goldsboro","NC","35.463121","-77.995728","-5","1" +"27532","Goldsboro","NC","35.372045","-78.052422","-5","1" +"27533","Goldsboro","NC","35.372045","-78.052422","-5","1" +"27534","Goldsboro","NC","35.377069","-77.92463","-5","1" +"27536","Henderson","NC","36.340681","-78.39425","-5","1" +"27537","Henderson","NC","36.33705","-78.387374","-5","1" +"27539","Apex","NC","35.681429","-78.782556","-5","1" +"27540","Holly Springs","NC","35.643545","-78.83486","-5","1" +"27541","Hurdle Mills","NC","36.264894","-79.08338","-5","1" +"27542","Kenly","NC","35.606392","-78.13755","-5","1" +"27543","Kipling","NC","35.429849","-78.882395","-5","1" +"27544","Kittrell","NC","36.215193","-78.43861","-5","1" +"27545","Knightdale","NC","35.790516","-78.48345","-5","1" +"27546","Lillington","NC","35.396654","-78.83852","-5","1" +"27549","Louisburg","NC","36.062239","-78.24953","-5","1" +"27551","Macon","NC","36.474898","-78.04505","-5","1" +"27552","Mamers","NC","35.413579","-78.979964","-5","1" +"27553","Manson","NC","36.484233","-78.30615","-5","1" +"27555","Micro","NC","35.562142","-78.20349","-5","1" +"27556","Middleburg","NC","36.413473","-78.327491","-5","1" +"27557","Middlesex","NC","35.777862","-78.19889","-5","1" +"27559","Moncure","NC","35.631434","-79.0894","-5","1" +"27560","Morrisville","NC","35.846363","-78.83866","-5","1" +"27561","Raleigh","NC","35.898538","-78.738904","-5","1" +"27562","New Hill","NC","35.633286","-78.97271","-5","1" +"27563","Norlina","NC","36.450603","-78.21676","-5","1" +"27564","Creedmoor","NC","36.101529","-78.713346","-5","1" +"27565","Oxford","NC","36.340501","-78.61595","-5","1" +"27568","Pine Level","NC","35.511864","-78.24273","-5","1" +"27569","Princeton","NC","35.458912","-78.1638","-5","1" +"27570","Ridgeway","NC","36.441215","-78.24044","-5","1" +"27571","Rolesville","NC","35.921662","-78.45805","-5","1" +"27572","Rougemont","NC","36.238956","-78.88293","-5","1" +"27573","Roxboro","NC","36.414739","-78.97375","-5","1" +"27574","Roxboro","NC","36.416628","-78.970224","-5","1" +"27576","Selma","NC","35.557966","-78.26479","-5","1" +"27577","Smithfield","NC","35.506459","-78.34446","-5","1" +"27581","Stem","NC","36.195036","-78.72657","-5","1" +"27582","Stovall","NC","36.454831","-78.5702","-5","1" +"27583","Timberlake","NC","36.291896","-78.93552","-5","1" +"27584","Townsville","NC","36.528939","-78.44504","-5","1" +"27586","Vaughan","NC","36.37367","-78.110931","-5","1" +"27587","Wake Forest","NC","35.97154","-78.52241","-5","1" +"27588","Wake Forest","NC","35.973108","-78.450754","-5","1" +"27589","Warrenton","NC","36.378439","-78.13903","-5","1" +"27591","Wendell","NC","35.781595","-78.37287","-5","1" +"27592","Willow Spring","NC","35.554891","-78.67038","-5","1" +"27593","Wilsons Mills","NC","35.590731","-78.360723","-5","1" +"27594","Wise","NC","36.37367","-78.110931","-5","1" +"27596","Youngsville","NC","36.000487","-78.44921","-5","1" +"27597","Zebulon","NC","35.848039","-78.30135","-5","1" +"27599","Chapel Hill","NC","36.05251","-79.107692","-5","1" +"27601","Raleigh","NC","35.774451","-78.63274","-5","1" +"27602","Raleigh","NC","35.758667","-78.671089","-5","1" +"27603","Raleigh","NC","35.716105","-78.65734","-5","1" +"27604","Raleigh","NC","35.814572","-78.58348","-5","1" +"27605","Raleigh","NC","35.788284","-78.65316","-5","1" +"27606","Raleigh","NC","35.758268","-78.71783","-5","1" +"27607","Raleigh","NC","35.807458","-78.70086","-5","1" +"27608","Raleigh","NC","35.808451","-78.64667","-5","1" +"27609","Raleigh","NC","35.844753","-78.63263","-5","1" +"27610","Raleigh","NC","35.767829","-78.5861","-5","1" +"27611","Raleigh","NC","35.797692","-78.625265","-5","1" +"27612","Raleigh","NC","35.847788","-78.70161","-5","1" +"27613","Raleigh","NC","35.899208","-78.71161","-5","1" +"27614","Raleigh","NC","35.939255","-78.60317","-5","1" +"27615","Raleigh","NC","35.891726","-78.63203","-5","1" +"27616","Raleigh","NC","35.865441","-78.54929","-5","1" +"27617","Raleigh","NC","35.906016","-78.743197","-5","1" +"27619","Raleigh","NC","35.851463","-78.63141","-5","1" +"27620","Raleigh","NC","35.797692","-78.625265","-5","1" +"27621","Raleigh","NC","35.797692","-78.625265","-5","1" +"27622","Raleigh","NC","35.797692","-78.625265","-5","1" +"27623","Raleigh","NC","35.797692","-78.625265","-5","1" +"27624","Raleigh","NC","35.797692","-78.625265","-5","1" +"27625","Raleigh","NC","35.797692","-78.625265","-5","1" +"27626","Raleigh","NC","35.797692","-78.625265","-5","1" +"27627","Raleigh","NC","35.797692","-78.625265","-5","1" +"27628","Raleigh","NC","35.797692","-78.625265","-5","1" +"27629","Raleigh","NC","35.817497","-78.552388","-5","1" +"27630","Thomasville","NC","35.875344","-80.081269","-5","1" +"27634","Raleigh","NC","35.797692","-78.625265","-5","1" +"27635","Raleigh","NC","35.797692","-78.625265","-5","1" +"27636","Raleigh","NC","35.797692","-78.625265","-5","1" +"27640","Raleigh","NC","35.797692","-78.625265","-5","1" +"27650","Raleigh","NC","35.797692","-78.625265","-5","1" +"27656","Raleigh","NC","35.797692","-78.625265","-5","1" +"27658","Raleigh","NC","35.797692","-78.625265","-5","1" +"27661","Raleigh","NC","35.797692","-78.625265","-5","1" +"27668","Raleigh","NC","35.797692","-78.625265","-5","1" +"27675","Raleigh","NC","35.797692","-78.625265","-5","1" +"27676","Raleigh","NC","35.797692","-78.625265","-5","1" +"27690","Raleigh","NC","35.797692","-78.625265","-5","1" +"27695","Raleigh","NC","35.797692","-78.625265","-5","1" +"27697","Raleigh","NC","35.88224","-78.413371","-5","1" +"27698","Raleigh","NC","35.797692","-78.625265","-5","1" +"27699","Raleigh","NC","35.797692","-78.625265","-5","1" +"27701","Durham","NC","35.997193","-78.89731","-5","1" +"27702","Durham","NC","36.051155","-78.857651","-5","1" +"27703","Durham","NC","35.966431","-78.83969","-5","1" +"27704","Durham","NC","36.034561","-78.86892","-5","1" +"27705","Durham","NC","36.015992","-78.95911","-5","1" +"27706","Durham","NC","35.993143","-78.93735","-5","1" +"27707","Durham","NC","35.963994","-78.93602","-5","1" +"27708","Durham","NC","36.028685","-78.92398","-5","1" +"27709","Durham","NC","36.051155","-78.857651","-5","1" +"27710","Durham","NC","36.051155","-78.857651","-5","1" +"27711","Durham","NC","36.051155","-78.857651","-5","1" +"27712","Durham","NC","36.087738","-78.92313","-5","1" +"27713","Durham","NC","35.905765","-78.92113","-5","1" +"27715","Durham","NC","36.051155","-78.857651","-5","1" +"27717","Durham","NC","36.051155","-78.857651","-5","1" +"27722","Durham","NC","36.051155","-78.857651","-5","1" +"27801","Rocky Mount","NC","35.935125","-77.77076","-5","1" +"27802","Rocky Mount","NC","35.935563","-77.78077","-5","1" +"27803","Rocky Mount","NC","35.924465","-77.83689","-5","1" +"27804","Rocky Mount","NC","35.973773","-77.82694","-5","1" +"27805","Aulander","NC","36.223682","-77.10397","-5","1" +"27806","Aurora","NC","35.308035","-76.79019","-5","1" +"27807","Bailey","NC","35.797988","-78.10641","-5","1" +"27808","Bath","NC","35.47031","-76.77855","-5","1" +"27809","Battleboro","NC","36.032405","-77.78636","-5","1" +"27810","Belhaven","NC","35.545041","-76.60012","-5","1" +"27811","Bellarthur","NC","35.584685","-77.513357","-5","1" +"27812","Bethel","NC","35.799764","-77.37765","-5","1" +"27813","Black Creek","NC","35.633996","-77.93311","-5","1" +"27814","Blounts Creek","NC","35.384013","-76.93188","-5","1" +"27816","Castalia","NC","36.085542","-78.07321","-5","1" +"27817","Chocowinity","NC","35.487026","-77.07986","-5","1" +"27818","Como","NC","36.507288","-77.01668","-5","1" +"27819","Conetoe","NC","35.818414","-77.45335","-5","1" +"27820","Conway","NC","36.416472","-77.23117","-5","1" +"27821","Edward","NC","35.321447","-76.87437","-5","1" +"27822","Elm City","NC","35.809514","-77.8601","-5","1" +"27823","Enfield","NC","36.190589","-77.71859","-5","1" +"27824","Engelhard","NC","35.514202","-76.00736","-5","1" +"27825","Everetts","NC","35.866711","-77.084958","-5","1" +"27826","Fairfield","NC","35.575982","-76.20409","-5","1" +"27827","Falkland","NC","35.69872","-77.5108","-5","1" +"27828","Farmville","NC","35.598204","-77.59066","-5","1" +"27829","Fountain","NC","35.686549","-77.64461","-5","1" +"27830","Fremont","NC","35.552162","-77.9727","-5","1" +"27831","Garysburg","NC","36.458825","-77.57834","-5","1" +"27832","Gaston","NC","36.502541","-77.68887","-5","1" +"27833","Greenville","NC","35.580444","-77.392609","-5","1" +"27834","Greenville","NC","35.626653","-77.37896","-5","1" +"27835","Greenville","NC","35.588523","-77.353092","-5","1" +"27836","Greenville","NC","35.580444","-77.392609","-5","1" +"27837","Grimesland","NC","35.531965","-77.20349","-5","1" +"27838","Gumberry","NC","36.356129","-77.483072","-5","1" +"27839","Halifax","NC","36.310967","-77.57821","-5","1" +"27840","Hamilton","NC","35.948738","-77.2083","-5","1" +"27841","Hassell","NC","35.908558","-77.27835","-5","1" +"27842","Henrico","NC","36.531252","-77.86277","-5","1" +"27843","Hobgood","NC","35.999591","-77.40241","-5","1" +"27844","Hollister","NC","36.255897","-77.93998","-5","1" +"27845","Jackson","NC","36.366571","-77.44254","-5","1" +"27846","Jamesville","NC","35.759335","-76.89865","-5","1" +"27847","Kelford","NC","36.184037","-77.21536","-5","1" +"27849","Lewiston Woodville","NC","36.083011","-77.19032","-5","1" +"27850","Littleton","NC","36.451785","-77.90383","-5","1" +"27851","Lucama","NC","35.640324","-78.02336","-5","1" +"27852","Macclesfield","NC","35.746654","-77.64342","-5","1" +"27853","Margarettsville","NC","36.518839","-77.30888","-5","1" +"27854","Milwaukee","NC","36.363144","-77.386748","-5","1" +"27855","Murfreesboro","NC","36.432993","-77.10287","-5","1" +"27856","Nashville","NC","35.993357","-77.96738","-5","1" +"27857","Oak City","NC","35.948539","-77.27013","-5","1" +"27858","Greenville","NC","35.579216","-77.33836","-5","1" +"27859","Palmyra","NC","36.064879","-77.364499","-5","1" +"27860","Pantego","NC","35.624117","-76.67274","-5","1" +"27861","Parmele","NC","35.819037","-77.314288","-5","1" +"27862","Pendleton","NC","36.490929","-77.1981","-5","1" +"27863","Pikeville","NC","35.491814","-77.98298","-5","1" +"27864","Pinetops","NC","35.795738","-77.64106","-5","1" +"27865","Pinetown","NC","35.588518","-76.83431","-5","1" +"27866","Pleasant Hill","NC","36.52177","-77.51319","-5","1" +"27867","Potecasi","NC","36.356129","-77.483072","-5","1" +"27868","Red Oak","NC","36.054832","-77.911635","-5","1" +"27869","Rich Square","NC","36.281144","-77.28809","-5","1" +"27870","Roanoke Rapids","NC","36.448592","-77.67144","-5","1" +"27871","Robersonville","NC","35.821436","-77.26186","-5","1" +"27872","Roxobel","NC","36.203511","-77.24791","-5","1" +"27873","Saratoga","NC","35.65363","-77.77649","-5","1" +"27874","Scotland Neck","NC","36.128851","-77.41983","-5","1" +"27875","Scranton","NC","35.481914","-76.44693","-5","1" +"27876","Seaboard","NC","36.487125","-77.43618","-5","1" +"27877","Severn","NC","36.515084","-77.18438","-5","1" +"27878","Sharpsburg","NC","35.867224","-77.83054","-5","1" +"27879","Simpson","NC","35.567478","-77.280169","-5","1" +"27880","Sims","NC","35.748755","-78.06759","-5","1" +"27881","Speed","NC","35.915927","-77.585471","-5","1" +"27882","Spring Hope","NC","35.94178","-78.11872","-5","1" +"27883","Stantonsburg","NC","35.598504","-77.81173","-5","1" +"27884","Stokes","NC","35.700448","-77.27014","-5","1" +"27885","Swanquarter","NC","35.452071","-76.27892","-5","1" +"27886","Tarboro","NC","35.905299","-77.54056","-5","1" +"27887","Tillery","NC","36.235198","-77.502602","-5","1" +"27888","Walstonburg","NC","35.593689","-77.70192","-5","1" +"27889","Washington","NC","35.560439","-77.03459","-5","1" +"27890","Weldon","NC","36.421387","-77.60825","-5","1" +"27891","Whitakers","NC","36.10607","-77.73","-5","1" +"27892","Williamston","NC","35.824061","-77.08093","-5","1" +"27893","Wilson","NC","35.715315","-77.91989","-5","1" +"27894","Wilson","NC","35.715778","-77.904283","-5","1" +"27895","Wilson","NC","35.719923","-77.926691","-5","1" +"27896","Wilson","NC","35.768693","-77.95167","-5","1" +"27897","Woodland","NC","36.332552","-77.20441","-5","1" +"27906","Elizabeth City","NC","36.285388","-76.213284","-5","1" +"27907","Elizabeth City","NC","36.285026","-76.255312","-5","1" +"27909","Elizabeth City","NC","36.293192","-76.23692","-5","1" +"27910","Ahoskie","NC","36.293352","-76.98612","-5","1" +"27915","Avon","NC","35.354252","-75.50417","-5","1" +"27916","Aydlett","NC","36.314447","-75.89888","-5","1" +"27917","Barco","NC","36.388493","-75.98097","-5","1" +"27919","Belvidere","NC","36.319777","-76.49654","-5","1" +"27920","Buxton","NC","35.263128","-75.55787","-5","1" +"27921","Camden","NC","36.344333","-76.16595","-5","1" +"27922","Cofield","NC","36.339548","-76.88086","-5","1" +"27923","Coinjock","NC","36.381161","-75.94115","-5","1" +"27924","Colerain","NC","36.192231","-76.83458","-5","1" +"27925","Columbia","NC","35.883885","-76.22037","-5","1" +"27926","Corapeake","NC","36.519826","-76.61637","-5","1" +"27927","Corolla","NC","36.435092","-75.84497","-5","1" +"27928","Creswell","NC","35.849234","-76.4067","-5","1" +"27929","Currituck","NC","36.433902","-75.97921","-5","1" +"27930","Durants Neck","NC","36.198539","-76.373908","-5","1" +"27932","Edenton","NC","36.093252","-76.62077","-5","1" +"27935","Eure","NC","36.440867","-76.86007","-5","1" +"27936","Frisco","NC","35.24554","-75.618","-5","1" +"27937","Gates","NC","36.501152","-76.78039","-5","1" +"27938","Gatesville","NC","36.410008","-76.75097","-5","1" +"27939","Grandy","NC","36.239666","-75.87361","-5","1" +"27941","Harbinger","NC","36.099065","-75.81974","-5","1" +"27942","Harrellsville","NC","36.289302","-76.76737","-5","1" +"27943","Hatteras","NC","35.218342","-75.68792","-5","1" +"27944","Hertford","NC","36.157292","-76.4275","-5","1" +"27946","Hobbsville","NC","36.362745","-76.60188","-5","1" +"27947","Jarvisburg","NC","36.189366","-75.86047","-5","1" +"27948","Kill Devil Hills","NC","36.022242","-75.67686","-5","1" +"27949","Kitty Hawk","NC","36.115899","-75.72772","-5","1" +"27950","Knotts Island","NC","36.513626","-75.9518","-5","1" +"27953","Manns Harbor","NC","35.795867","-75.85014","-5","1" +"27954","Manteo","NC","35.913938","-75.67961","-5","1" +"27956","Maple","NC","36.419422","-76.03362","-5","1" +"27957","Merry Hill","NC","36.067244","-76.76046","-5","1" +"27958","Moyock","NC","36.497406","-76.13715","-5","1" +"27959","Nags Head","NC","35.923805","-75.61144","-5","1" +"27960","Ocracoke","NC","35.113265","-75.97255","-5","1" +"27962","Plymouth","NC","35.842107","-76.73206","-5","1" +"27964","Point Harbor","NC","36.093211","-75.80319","-5","1" +"27965","Poplar Branch","NC","36.273428","-75.87867","-5","1" +"27966","Powells Point","NC","36.13655","-75.82653","-5","1" +"27967","Powellsville","NC","36.234231","-76.94686","-5","1" +"27968","Rodanthe","NC","35.661979","-75.47741","-5","1" +"27969","Roduco","NC","36.424152","-76.702125","-5","1" +"27970","Roper","NC","35.892486","-76.57584","-5","1" +"27972","Salvo","NC","35.538351","-75.47473","-5","1" +"27973","Shawboro","NC","36.384779","-76.08293","-5","1" +"27974","Shiloh","NC","36.233836","-76.03822","-5","1" +"27976","South Mills","NC","36.466396","-76.29809","-5","1" +"27978","Stumpy Point","NC","35.698493","-75.772775","-5","1" +"27979","Sunbury","NC","36.440509","-76.60411","-5","1" +"27980","Tyner","NC","36.256548","-76.62627","-5","1" +"27981","Wanchese","NC","35.845046","-75.63954","-5","1" +"27982","Waves","NC","35.56179","-75.47152","-5","1" +"27983","Windsor","NC","36.015391","-76.9349","-5","1" +"27985","Winfall","NC","36.217959","-76.46994","-5","1" +"27986","Winton","NC","36.386605","-76.92641","-5","1" +"28001","Albemarle","NC","35.351477","-80.19879","-5","1" +"28002","Albemarle","NC","35.264179","-80.108188","-5","1" +"28003","Marshville","NC","34.995653","-80.355204","-5","1" +"28006","Alexis","NC","35.403268","-81.09974","-5","1" +"28007","Ansonville","NC","35.104652","-80.10965","-5","1" +"28009","Badin","NC","35.40846","-80.11171","-5","1" +"28010","Barium Springs","NC","35.719228","-80.89909","-5","1" +"28012","Belmont","NC","35.2406","-81.04028","-5","1" +"28016","Bessemer City","NC","35.292581","-81.28723","-5","1" +"28017","Boiling Springs","NC","35.254223","-81.65456","-5","1" +"28018","Bostic","NC","35.441168","-81.7995","-5","1" +"28019","Caroleen","NC","35.279371","-81.79475","-5","1" +"28020","Casar","NC","35.518637","-81.62728","-5","1" +"28021","Cherryville","NC","35.383935","-81.39368","-5","1" +"28023","China Grove","NC","35.567189","-80.59116","-5","1" +"28024","Cliffside","NC","35.241615","-81.775456","-5","1" +"28025","Concord","NC","35.400407","-80.56574","-5","1" +"28026","Concord","NC","35.346285","-80.541088","-5","1" +"28027","Concord","NC","35.405636","-80.63823","-5","1" +"28031","Cornelius","NC","35.477583","-80.8924","-5","1" +"28032","Cramerton","NC","35.239702","-81.07753","-5","1" +"28033","Crouse","NC","35.416189","-81.31911","-5","1" +"28034","Dallas","NC","35.333668","-81.18303","-5","1" +"28036","Davidson","NC","35.490772","-80.82576","-5","1" +"28037","Denver","NC","35.501448","-81.00412","-5","1" +"28038","Earl","NC","35.198687","-81.54162","-5","1" +"28039","East Spencer","NC","35.677889","-80.44593","-5","1" +"28040","Ellenboro","NC","35.346886","-81.75621","-5","1" +"28041","Faith","NC","35.58167","-80.45806","-5","1" +"28042","Fallston","NC","35.373884","-81.543706","-5","1" +"28043","Forest City","NC","35.317602","-81.86722","-5","1" +"28051","Gastonia","NC","35.284018","-81.189693","-5","1" +"28052","Gastonia","NC","35.248787","-81.2142","-5","1" +"28053","Gastonia","NC","35.275073","-81.213369","-5","1" +"28054","Gastonia","NC","35.263287","-81.15312","-5","1" +"28055","Gastonia","NC","35.284018","-81.189693","-5","1" +"28056","Gastonia","NC","35.229565","-81.12847","-5","1" +"28070","Huntersville","NC","35.462187","-80.898668","-5","1" +"28071","Gold Hill","NC","35.513974","-80.32779","-5","1" +"28072","Granite Quarry","NC","35.614966","-80.44198","-5","1" +"28073","Grover","NC","35.189591","-81.47928","-5","1" +"28074","Harris","NC","35.224743","-81.885081","-5","1" +"28075","Harrisburg","NC","35.335294","-80.6633","-5","1" +"28076","Henrietta","NC","35.256252","-81.77804","-5","1" +"28077","High Shoals","NC","35.404772","-81.20268","-5","1" +"28078","Huntersville","NC","35.409544","-80.86362","-5","1" +"28079","Indian Trail","NC","35.105208","-80.62098","-5","1" +"28080","Iron Station","NC","35.454565","-81.12368","-5","1" +"28081","Kannapolis","NC","35.499521","-80.64447","-5","1" +"28082","Kannapolis","NC","35.346285","-80.541088","-5","1" +"28083","Kannapolis","NC","35.492989","-80.60293","-5","1" +"28086","Kings Mountain","NC","35.241188","-81.3614","-5","1" +"28088","Landis","NC","35.543639","-80.61167","-5","1" +"28089","Lattimore","NC","35.318573","-81.66601","-5","1" +"28090","Lawndale","NC","35.450548","-81.56223","-5","1" +"28091","Lilesville","NC","34.970129","-79.93705","-5","1" +"28092","Lincolnton","NC","35.473447","-81.24094","-5","1" +"28093","Lincolnton","NC","35.484822","-81.239543","-5","1" +"28097","Locust","NC","35.267185","-80.4268","-5","1" +"28098","Lowell","NC","35.267234","-81.09942","-5","1" +"28101","McAdenville","NC","35.256379","-81.07978","-5","1" +"28102","McFarlan","NC","34.819916","-79.97188","-5","1" +"28103","Marshville","NC","34.99545","-80.35635","-5","1" +"28104","Matthews","NC","35.067285","-80.68424","-5","1" +"28105","Matthews","NC","35.116851","-80.7164","-5","1" +"28106","Matthews","NC","35.26002","-80.804151","-5","1" +"28107","Midland","NC","35.247181","-80.52363","-5","1" +"28108","Mineral Springs","NC","34.916253","-80.640383","-5","1" +"28109","Misenheimer","NC","35.485703","-80.28811","-5","1" +"28110","Monroe","NC","35.031947","-80.56002","-5","1" +"28111","Monroe","NC","35.011204","-80.558743","-5","1" +"28112","Monroe","NC","34.936388","-80.5382","-5","1" +"28114","Mooresboro","NC","35.243585","-81.75656","-5","1" +"28115","Mooresville","NC","35.584157","-80.80258","-5","1" +"28117","Mooresville","NC","35.571827","-80.89228","-5","1" +"28119","Morven","NC","34.858713","-80.02232","-5","1" +"28120","Mount Holly","NC","35.311862","-81.02441","-5","1" +"28123","Mount Mourne","NC","35.529792","-80.947028","-5","1" +"28124","Mount Pleasant","NC","35.407499","-80.41228","-5","1" +"28125","Mount Ulla","NC","35.664696","-80.71056","-5","1" +"28126","Newell","NC","35.276794","-80.716495","-5","1" +"28127","New London","NC","35.463024","-80.1649","-5","1" +"28128","Norwood","NC","35.228831","-80.15214","-5","1" +"28129","Oakboro","NC","35.232542","-80.33123","-5","1" +"28130","Paw Creek","NC","35.26002","-80.804151","-5","1" +"28133","Peachland","NC","34.969886","-80.27001","-5","1" +"28134","Pineville","NC","35.086017","-80.89034","-5","1" +"28135","Polkton","NC","35.043566","-80.21272","-5","1" +"28136","Polkville","NC","35.396126","-81.630272","-5","1" +"28137","Richfield","NC","35.49326","-80.25524","-5","1" +"28138","Rockwell","NC","35.536561","-80.42959","-5","1" +"28139","Rutherfordton","NC","35.361333","-81.98377","-5","1" +"28144","Salisbury","NC","35.679639","-80.46645","-5","1" +"28145","Salisbury","NC","35.682683","-80.477116","-5","1" +"28146","Salisbury","NC","35.614422","-80.43115","-5","1" +"28147","Salisbury","NC","35.665362","-80.54673","-5","1" +"28150","Shelby","NC","35.315118","-81.55584","-5","1" +"28151","Shelby","NC","35.233125","-81.574711","-5","1" +"28152","Shelby","NC","35.258879","-81.57867","-5","1" +"28159","Spencer","NC","35.693339","-80.4342","-5","1" +"28160","Spindale","NC","35.360536","-81.92506","-5","1" +"28163","Stanfield","NC","35.245048","-80.4163","-5","1" +"28164","Stanley","NC","35.377576","-81.07238","-5","1" +"28166","Troutman","NC","35.687365","-80.88715","-5","1" +"28167","Union Mills","NC","35.48902","-81.95039","-5","1" +"28168","Vale","NC","35.545918","-81.42942","-5","1" +"28169","Waco","NC","35.362026","-81.42911","-5","1" +"28170","Wadesboro","NC","34.985423","-80.08543","-5","1" +"28173","Waxhaw","NC","34.929433","-80.73061","-5","1" +"28174","Wingate","NC","34.981605","-80.44305","-5","1" +"28201","Charlotte","NC","35.26002","-80.804151","-5","1" +"28202","Charlotte","NC","35.227192","-80.84419","-5","1" +"28203","Charlotte","NC","35.208992","-80.85539","-5","1" +"28204","Charlotte","NC","35.214693","-80.82665","-5","1" +"28205","Charlotte","NC","35.222406","-80.79221","-5","1" +"28206","Charlotte","NC","35.248292","-80.82748","-5","1" +"28207","Charlotte","NC","35.197643","-80.82752","-5","1" +"28208","Charlotte","NC","35.235791","-80.89295","-5","1" +"28209","Charlotte","NC","35.178543","-80.85375","-5","1" +"28210","Charlotte","NC","35.13451","-80.85632","-5","1" +"28211","Charlotte","NC","35.170094","-80.79857","-5","1" +"28212","Charlotte","NC","35.189544","-80.74742","-5","1" +"28213","Charlotte","NC","35.280464","-80.75678","-5","1" +"28214","Charlotte","NC","35.276639","-80.96111","-5","1" +"28215","Charlotte","NC","35.244468","-80.72164","-5","1" +"28216","Charlotte","NC","35.286967","-80.87903","-5","1" +"28217","Charlotte","NC","35.172319","-80.89731","-5","1" +"28218","Charlotte","NC","35.26002","-80.804151","-5","1" +"28219","Charlotte","NC","35.26002","-80.804151","-5","1" +"28220","Charlotte","NC","35.26002","-80.804151","-5","1" +"28221","Charlotte","NC","35.26002","-80.804151","-5","1" +"28222","Charlotte","NC","35.26002","-80.804151","-5","1" +"28223","Charlotte","NC","35.305552","-80.73303","-5","1" +"28224","Charlotte","NC","35.26002","-80.804151","-5","1" +"28225","Charlotte","NC","35.26002","-80.804151","-5","1" +"28226","Charlotte","NC","35.107804","-80.82139","-5","1" +"28227","Charlotte","NC","35.192919","-80.66822","-5","1" +"28228","Charlotte","NC","35.26002","-80.804151","-5","1" +"28229","Charlotte","NC","35.26002","-80.804151","-5","1" +"28230","Charlotte","NC","35.26002","-80.804151","-5","1" +"28231","Charlotte","NC","35.26002","-80.804151","-5","1" +"28232","Charlotte","NC","35.26002","-80.804151","-5","1" +"28233","Charlotte","NC","35.489411","-80.825368","-5","1" +"28234","Charlotte","NC","35.26002","-80.804151","-5","1" +"28235","Charlotte","NC","35.26002","-80.804151","-5","1" +"28236","Charlotte","NC","35.26002","-80.804151","-5","1" +"28237","Charlotte","NC","35.26002","-80.804151","-5","1" +"28240","Charlotte","NC","35.26002","-80.804151","-5","1" +"28241","Charlotte","NC","35.26002","-80.804151","-5","1" +"28242","Charlotte","NC","35.26002","-80.804151","-5","1" +"28243","Charlotte","NC","35.26002","-80.804151","-5","1" +"28244","Charlotte","NC","35.26002","-80.804151","-5","1" +"28246","Charlotte","NC","35.227542","-80.842543","-5","1" +"28247","Charlotte","NC","35.065595","-80.851149","-5","1" +"28250","Charlotte","NC","35.26002","-80.804151","-5","1" +"28253","Charlotte","NC","35.26002","-80.804151","-5","1" +"28254","Charlotte","NC","35.26002","-80.804151","-5","1" +"28255","Charlotte","NC","35.26002","-80.804151","-5","1" +"28256","Charlotte","NC","35.26002","-80.804151","-5","1" +"28258","Charlotte","NC","35.26002","-80.804151","-5","1" +"28260","Charlotte","NC","35.26002","-80.804151","-5","1" +"28261","Charlotte","NC","35.26002","-80.804151","-5","1" +"28262","Charlotte","NC","35.321279","-80.7405","-5","1" +"28265","Charlotte","NC","35.26002","-80.804151","-5","1" +"28266","Charlotte","NC","35.284459","-80.858155","-5","1" +"28269","Charlotte","NC","35.329235","-80.80486","-5","1" +"28270","Charlotte","NC","35.113906","-80.7613","-5","1" +"28272","Charlotte","NC","35.26002","-80.804151","-5","1" +"28273","Charlotte","NC","35.124032","-80.93954","-5","1" +"28274","Charlotte","NC","35.187943","-80.831693","-5","1" +"28275","Charlotte","NC","35.26002","-80.804151","-5","1" +"28277","Charlotte","NC","35.054546","-80.81792","-5","1" +"28278","Charlotte","NC","35.119012","-81.02213","-5","1" +"28280","Charlotte","NC","35.26002","-80.804151","-5","1" +"28281","Charlotte","NC","35.26002","-80.804151","-5","1" +"28282","Charlotte","NC","35.224242","-80.844743","-5","1" +"28283","Charlotte","NC","35.26002","-80.804151","-5","1" +"28284","Charlotte","NC","35.26002","-80.804151","-5","1" +"28285","Charlotte","NC","35.26002","-80.804151","-5","1" +"28286","Charlotte","NC","35.26002","-80.804151","-5","1" +"28287","Charlotte","NC","35.26002","-80.804151","-5","1" +"28288","Charlotte","NC","35.26002","-80.804151","-5","1" +"28289","Charlotte","NC","35.26002","-80.804151","-5","1" +"28290","Charlotte","NC","35.26002","-80.804151","-5","1" +"28296","Charlotte","NC","35.225242","-80.845843","-5","1" +"28297","Charlotte","NC","35.26002","-80.804151","-5","1" +"28299","Charlotte","NC","35.26002","-80.804151","-5","1" +"28301","Fayetteville","NC","35.042389","-78.84124","-5","1" +"28302","Fayetteville","NC","35.034307","-78.908828","-5","1" +"28303","Fayetteville","NC","35.084163","-78.953","-5","1" +"28304","Fayetteville","NC","35.02844","-78.97037","-5","1" +"28305","Fayetteville","NC","35.056963","-78.90369","-5","1" +"28306","Fayetteville","NC","35.003712","-78.92179","-5","1" +"28307","Fort Bragg","NC","35.142321","-79.01225","-5","1" +"28308","Pope A F B","NC","35.173377","-79.013799","-5","1" +"28309","Fayetteville","NC","35.039726","-78.842868","-5","1" +"28310","Fort Bragg","NC","35.050612","-78.80384","-5","1" +"28311","Fayetteville","NC","35.134301","-78.89411","-5","1" +"28314","Fayetteville","NC","35.060087","-79.00848","-5","1" +"28315","Aberdeen","NC","35.12416","-79.4415","-5","1" +"28318","Autryville","NC","35.020272","-78.614","-5","1" +"28319","Barnesville","NC","34.595364","-79.197058","-5","1" +"28320","Bladenboro","NC","34.552642","-78.78102","-5","1" +"28323","Bunnlevel","NC","35.316332","-78.82527","-5","1" +"28325","Calypso","NC","35.152512","-78.10474","-5","1" +"28326","Cameron","NC","35.278125","-79.15153","-5","1" +"28327","Carthage","NC","35.319639","-79.40248","-5","1" +"28328","Clinton","NC","35.000056","-78.33424","-5","1" +"28329","Clinton","NC","34.994005","-78.277669","-5","1" +"28330","Cordova","NC","34.913233","-79.82302","-5","1" +"28331","Cumberland","NC","35.150896","-78.915788","-5","1" +"28332","Dublin","NC","34.655921","-78.72076","-5","1" +"28333","Dudley","NC","35.293245","-78.01897","-5","1" +"28334","Dunn","NC","35.302419","-78.6012","-5","1" +"28335","Dunn","NC","35.350774","-78.625362","-5","1" +"28337","Elizabethtown","NC","34.647611","-78.58643","-5","1" +"28338","Ellerbe","NC","35.089476","-79.72904","-5","1" +"28339","Erwin","NC","35.322849","-78.68964","-5","1" +"28340","Fairmont","NC","34.476857","-79.13005","-5","1" +"28341","Faison","NC","35.119076","-78.16439","-5","1" +"28342","Falcon","NC","35.191142","-78.6514","-5","1" +"28343","Gibson","NC","34.767875","-79.59239","-5","1" +"28344","Godwin","NC","35.171062","-78.63648","-5","1" +"28345","Hamlet","NC","34.879186","-79.69001","-5","1" +"28347","Hoffman","NC","35.042172","-79.53503","-5","1" +"28348","Hope Mills","NC","34.954709","-78.93744","-5","1" +"28349","Kenansville","NC","34.977225","-77.94761","-5","1" +"28350","Lakeview","NC","35.24356","-79.31355","-5","1" +"28351","Laurel Hill","NC","34.827291","-79.56026","-5","1" +"28352","Laurinburg","NC","34.779227","-79.45745","-5","1" +"28353","Laurinburg","NC","34.781768","-79.482423","-5","1" +"28355","Lemon Springs","NC","35.467567","-79.165314","-5","1" +"28356","Linden","NC","35.237338","-78.79613","-5","1" +"28357","Lumber Bridge","NC","34.902698","-79.08288","-5","1" +"28358","Lumberton","NC","34.620874","-78.98986","-5","1" +"28359","Lumberton","NC","34.607669","-79.014425","-5","1" +"28360","Lumberton","NC","34.659575","-79.06282","-5","1" +"28361","Mccain","NC","35.02363","-79.246841","-5","1" +"28362","Marietta","NC","34.368246","-79.12124","-5","1" +"28363","Marston","NC","34.938451","-79.54609","-5","1" +"28364","Maxton","NC","34.735024","-79.32836","-5","1" +"28365","Mount Olive","NC","35.184516","-78.06056","-5","1" +"28366","Newton Grove","NC","35.237142","-78.36593","-5","1" +"28367","Norman","NC","35.173481","-79.72363","-5","1" +"28368","Olivia","NC","35.35149","-79.10586","-5","1" +"28369","Orrum","NC","34.434292","-79.03714","-5","1" +"28370","Pinehurst","NC","35.216222","-79.452352","-5","1" +"28371","Parkton","NC","34.912113","-78.9999","-5","1" +"28372","Pembroke","NC","34.69004","-79.18802","-5","1" +"28373","Pinebluff","NC","35.100144","-79.47979","-5","1" +"28374","Pinehurst","NC","35.195417","-79.46496","-5","1" +"28375","Proctorville","NC","34.471259","-79.041388","-5","1" +"28376","Raeford","NC","34.992085","-79.23013","-5","1" +"28377","Red Springs","NC","34.828798","-79.21215","-5","1" +"28378","Rex","NC","34.858715","-79.04705","-5","1" +"28379","Rockingham","NC","34.937078","-79.7605","-5","1" +"28380","Rockingham","NC","34.994152","-79.767341","-5","1" +"28382","Roseboro","NC","34.945305","-78.51432","-5","1" +"28383","Rowland","NC","34.571076","-79.27404","-5","1" +"28384","Saint Pauls","NC","34.804654","-78.9594","-5","1" +"28385","Salemburg","NC","35.053627","-78.50025","-5","1" +"28386","Shannon","NC","34.851865","-79.12266","-5","1" +"28387","Southern Pines","NC","35.180394","-79.39084","-5","1" +"28388","Southern Pines","NC","35.280335","-79.432734","-5","1" +"28390","Spring Lake","NC","35.211913","-78.97499","-5","1" +"28391","Stedman","NC","35.016373","-78.6941","-5","1" +"28392","Tar Heel","NC","34.742752","-78.80645","-5","1" +"28393","Turkey","NC","34.989801","-78.18555","-5","1" +"28394","Vass","NC","35.218131","-79.24449","-5","1" +"28395","Wade","NC","35.145952","-78.74102","-5","1" +"28396","Wagram","NC","34.927483","-79.40099","-5","1" +"28397","Stedman","NC","35.015586","-78.690428","-5","1" +"28398","Warsaw","NC","34.993016","-78.08407","-5","1" +"28399","White Oak","NC","34.786138","-78.70765","-5","1" +"28401","Wilmington","NC","34.235219","-77.94134","-5","1" +"28402","Wilmington","NC","34.340518","-77.901408","-5","1" +"28403","Wilmington","NC","34.221512","-77.88452","-5","1" +"28404","Wilmington","NC","33.926255","-78.07127","-5","1" +"28405","Wilmington","NC","34.254235","-77.87251","-5","1" +"28406","Wilmington","NC","34.088079","-77.852599","-5","1" +"28407","Wilmington","NC","34.088079","-77.852599","-5","1" +"28408","Wilmington","NC","34.212707","-77.792177","-5","1" +"28409","Wilmington","NC","34.169953","-77.87113","-5","1" +"28410","Wilmington","NC","34.088079","-77.852599","-5","1" +"28411","Wilmington","NC","34.285519","-77.80572","-5","1" +"28412","Wilmington","NC","34.152021","-77.91346","-5","1" +"28420","Ash","NC","34.07367","-78.48214","-5","1" +"28421","Atkinson","NC","34.524003","-78.18584","-5","1" +"28422","Bolivia","NC","34.006479","-78.19035","-5","1" +"28423","Bolton","NC","34.319905","-78.37743","-5","1" +"28424","Brunswick","NC","34.290716","-78.699417","-5","1" +"28425","Burgaw","NC","34.554821","-77.92764","-5","1" +"28428","Carolina Beach","NC","34.034336","-77.89903","-5","1" +"28429","Castle Hayne","NC","34.332126","-77.90554","-5","1" +"28430","Cerro Gordo","NC","34.285951","-78.93039","-5","1" +"28431","Chadbourn","NC","34.312363","-78.83023","-5","1" +"28432","Clarendon","NC","34.17074","-78.75997","-5","1" +"28433","Clarkton","NC","34.491177","-78.64362","-5","1" +"28434","Council","NC","34.461167","-78.46244","-5","1" +"28435","Currie","NC","34.430433","-78.10539","-5","1" +"28436","Delco","NC","34.275453","-78.26673","-5","1" +"28438","Evergreen","NC","34.430348","-78.91932","-5","1" +"28439","Fair Bluff","NC","34.309767","-79.02516","-5","1" +"28441","Garland","NC","34.788387","-78.40574","-5","1" +"28442","Hallsboro","NC","34.323483","-78.59534","-5","1" +"28443","Hampstead","NC","34.407677","-77.65238","-5","1" +"28444","Harrells","NC","34.686496","-78.32406","-5","1" +"28445","Holly Ridge","NC","34.47722","-77.55978","-5","1" +"28446","Ingold","NC","34.83661","-78.348111","-5","1" +"28447","Ivanhoe","NC","34.595158","-78.23438","-5","1" +"28448","Kelly","NC","34.464635","-78.29701","-5","1" +"28449","Kure Beach","NC","33.99207","-77.91092","-5","1" +"28450","Lake Waccamaw","NC","34.319538","-78.51678","-5","1" +"28451","Leland","NC","34.25124","-78.06492","-5","1" +"28452","Longwood","NC","33.997345","-78.5565","-5","1" +"28453","Magnolia","NC","34.888483","-78.05955","-5","1" +"28454","Maple Hill","NC","34.676719","-77.65343","-5","1" +"28455","Nakina","NC","34.11045","-78.6608","-5","1" +"28456","Riegelwood","NC","34.36338","-78.28251","-5","1" +"28457","Rocky Point","NC","34.449782","-77.88697","-5","1" +"28458","Rose Hill","NC","34.822407","-78.04176","-5","1" +"28459","Shallotte","NC","33.933388","-78.412864","-5","1" +"28460","Sneads Ferry","NC","34.52072","-77.42096","-5","1" +"28461","Southport","NC","33.963111","-78.05743","-5","1" +"28462","Supply","NC","33.974251","-78.30961","-5","1" +"28463","Tabor City","NC","34.12483","-78.82187","-5","1" +"28464","Teachey","NC","34.772249","-78.01392","-5","1" +"28465","Oak Island","NC","33.915522","-78.12862","-5","1" +"28466","Wallace","NC","34.738793","-77.97788","-5","1" +"28467","Calabash","NC","33.905566","-78.5759","-5","1" +"28468","Sunset Beach","NC","33.885203","-78.51224","-5","1" +"28469","Ocean Isle Beach","NC","33.913508","-78.44868","-5","1" +"28470","South Brunswick","NC","33.9666","-78.3878","-5","1" +"28471","Watha","NC","34.605639","-77.99977","-5","1" +"28472","Whiteville","NC","34.312063","-78.70773","-5","1" +"28478","Willard","NC","34.671237","-78.06544","-5","1" +"28479","Winnabow","NC","34.107077","-78.04965","-5","1" +"28480","Wrightsville Beach","NC","34.21222","-77.7981","-5","1" +"28501","Kinston","NC","35.260895","-77.56469","-5","1" +"28502","Kinston","NC","35.288558","-77.662614","-5","1" +"28503","Kinston","NC","35.319066","-77.595034","-5","1" +"28504","Kinston","NC","35.264739","-77.62481","-5","1" +"28508","Albertson","NC","35.11493","-77.82238","-5","1" +"28509","Alliance","NC","35.156145","-76.632264","-5","1" +"28510","Arapahoe","NC","35.000658","-76.81297","-5","1" +"28511","Atlantic","NC","34.887266","-76.33033","-5","1" +"28512","Atlantic Beach","NC","34.698274","-76.78706","-5","1" +"28513","Ayden","NC","35.463012","-77.4161","-5","1" +"28515","Bayboro","NC","35.176466","-76.71853","-5","1" +"28516","Beaufort","NC","34.769532","-76.64783","-5","1" +"28518","Beulaville","NC","34.911417","-77.77153","-5","1" +"28519","Bridgeton","NC","35.120742","-77.01969","-5","1" +"28520","Cedar Island","NC","34.984608","-76.1988","-5","1" +"28521","Chinquapin","NC","34.826715","-77.75929","-5","1" +"28522","Comfort","NC","35.005079","-77.523102","-5","1" +"28523","Cove City","NC","35.193213","-77.32292","-5","1" +"28524","Davis","NC","34.794527","-76.46317","-5","1" +"28525","Deep Run","NC","35.119845","-77.69208","-5","1" +"28526","Dover","NC","35.238886","-77.41061","-5","1" +"28527","Ernul","NC","35.244257","-77.01504","-5","1" +"28528","Gloucester","NC","34.732744","-76.53869","-5","1" +"28529","Grantsboro","NC","35.085784","-76.86135","-5","1" +"28530","Grifton","NC","35.370945","-77.42548","-5","1" +"28531","Harkers Island","NC","34.712315","-76.52748","-5","1" +"28532","Havelock","NC","34.884421","-76.88972","-5","1" +"28533","Cherry Point","NC","34.903793","-76.899976","-5","1" +"28537","Hobucken","NC","35.259895","-76.55591","-5","1" +"28538","Hookerton","NC","35.424381","-77.58452","-5","1" +"28539","Hubert","NC","34.694262","-77.20701","-5","1" +"28540","Jacksonville","NC","34.755669","-77.4559","-5","1" +"28541","Jacksonville","NC","34.692056","-77.391199","-5","1" +"28542","Camp Lejeune","NC","34.664035","-77.463687","-5","1" +"28543","Tarawa Terrace","NC","34.74167","-77.37117","-5","1" +"28544","Midway Park","NC","34.724322","-77.31866","-5","1" +"28545","Mccutcheon Field","NC","34.692056","-77.391199","-5","1" +"28546","Jacksonville","NC","34.781212","-77.3756","-5","1" +"28547","Camp Lejeune","NC","34.637348","-77.3127","-5","1" +"28551","La Grange","NC","35.320045","-77.78042","-5","1" +"28552","Lowland","NC","35.304817","-76.57115","-5","1" +"28553","Marshallberg","NC","34.725663","-76.51632","-5","1" +"28554","Maury","NC","35.481503","-77.58718","-5","1" +"28555","Maysville","NC","34.879658","-77.22214","-5","1" +"28556","Merritt","NC","35.124491","-76.66595","-5","1" +"28557","Morehead City","NC","34.729839","-76.75219","-5","1" +"28559","Fairplains","NC","36.214395","-81.165972","-5","1" +"28560","New Bern","NC","35.119674","-77.01509","-5","1" +"28561","New Bern","NC","35.103736","-77.07585","-5","1" +"28562","New Bern","NC","35.091472","-77.09936","-5","1" +"28563","New Bern","NC","35.110855","-77.06336","-5","1" +"28564","New Bern","NC","35.110855","-77.06336","-5","1" +"28570","Newport","NC","34.770681","-76.87786","-5","1" +"28571","Oriental","NC","35.040757","-76.69263","-5","1" +"28572","Pink Hill","NC","35.030154","-77.7221","-5","1" +"28573","Pollocksville","NC","35.000858","-77.21501","-5","1" +"28574","Richlands","NC","34.888736","-77.57157","-5","1" +"28575","Salter Path","NC","34.689821","-76.89242","-5","1" +"28577","Sealevel","NC","34.868975","-76.38149","-5","1" +"28578","Seven Springs","NC","35.206329","-77.87444","-5","1" +"28579","Smyrna","NC","34.753595","-76.5184","-5","1" +"28580","Snow Hill","NC","35.44451","-77.69186","-5","1" +"28581","Stacy","NC","34.842394","-76.44111","-5","1" +"28582","Stella","NC","34.756033","-77.15405","-5","1" +"28583","Stonewall","NC","35.156145","-76.632264","-5","1" +"28584","Swansboro","NC","34.69771","-77.10614","-5","1" +"28585","Trenton","NC","35.056317","-77.43518","-5","1" +"28586","Vanceboro","NC","35.302937","-77.15546","-5","1" +"28587","Vandemere","NC","35.191279","-76.660435","-5","1" +"28589","Williston","NC","34.7994","-76.49457","-5","1" +"28590","Winterville","NC","35.53445","-77.39714","-5","1" +"28594","Emerald Isle","NC","34.667473","-77.01025","-5","1" +"28599","Emerald Isle","NC","34.662495","-77.030502","-5","1" +"28601","Hickory","NC","35.759932","-81.33012","-5","1" +"28602","Hickory","NC","35.70701","-81.3534","-5","1" +"28603","Hickory","NC","35.679876","-81.287181","-5","1" +"28604","Banner Elk","NC","36.166515","-81.84672","-5","1" +"28605","Blowing Rock","NC","36.133083","-81.68783","-5","1" +"28606","Boomer","NC","36.058853","-81.30497","-5","1" +"28607","Boone","NC","36.21277","-81.66255","-5","1" +"28608","Boone","NC","36.221334","-81.713416","-5","1" +"28609","Catawba","NC","35.689806","-81.06694","-5","1" +"28610","Claremont","NC","35.725163","-81.14279","-5","1" +"28611","Collettsville","NC","36.009373","-81.73139","-5","1" +"28612","Connellys Springs","NC","35.693787","-81.51726","-5","1" +"28613","Conover","NC","35.720227","-81.21466","-5","1" +"28615","Creston","NC","36.455882","-81.65141","-5","1" +"28616","Crossnore","NC","36.024252","-81.92693","-5","1" +"28617","Crumpler","NC","36.488377","-81.39224","-5","1" +"28618","Deep Gap","NC","36.197882","-81.52276","-5","1" +"28619","Drexel","NC","35.75779","-81.60359","-5","1" +"28620","Pleasant Hill","NC","35.891211","-81.102329","-5","1" +"28621","Elkin","NC","36.283497","-80.84586","-5","1" +"28622","Elk Park","NC","36.17893","-81.95958","-5","1" +"28623","Ennice","NC","36.523031","-80.97109","-5","1" +"28624","Ferguson","NC","36.110425","-81.42262","-5","1" +"28625","Statesville","NC","35.840579","-80.87988","-5","1" +"28626","Fleetwood","NC","36.290889","-81.51951","-5","1" +"28627","Glade Valley","NC","36.445484","-81.0081","-5","1" +"28628","Glen Alpine","NC","35.721174","-81.817998","-5","1" +"28629","Glendale Springs","NC","36.343002","-81.37502","-5","1" +"28630","Granite Falls","NC","35.811919","-81.43478","-5","1" +"28631","Grassy Creek","NC","36.557892","-81.42635","-5","1" +"28633","Lenoir","NC","35.937564","-81.539847","-5","1" +"28634","Harmony","NC","35.97991","-80.77085","-5","1" +"28635","Hays","NC","36.315077","-81.13146","-5","1" +"28636","Hiddenite","NC","35.928486","-81.07441","-5","1" +"28637","Hildebran","NC","35.718432","-81.41878","-5","1" +"28638","Hudson","NC","35.840553","-81.48192","-5","1" +"28640","Jefferson","NC","36.410186","-81.42409","-5","1" +"28641","Jonas Ridge","NC","35.938422","-81.884521","-5","1" +"28642","Jonesville","NC","36.227576","-80.82988","-5","1" +"28643","Lansing","NC","36.532301","-81.53117","-5","1" +"28644","Laurel Springs","NC","36.43591","-81.27736","-5","1" +"28645","Lenoir","NC","35.934783","-81.54476","-5","1" +"28646","Linville","NC","36.073202","-81.87177","-5","1" +"28647","Linville Falls","NC","35.779182","-81.675545","-5","1" +"28649","McGrady","NC","36.329636","-81.2111","-5","1" +"28650","Maiden","NC","35.575785","-81.18843","-5","1" +"28651","Millers Creek","NC","36.241685","-81.27076","-5","1" +"28652","Minneapolis","NC","36.086466","-81.934265","-5","1" +"28653","Montezuma","NC","36.065053","-81.901715","-5","1" +"28654","Moravian Falls","NC","36.073489","-81.16056","-5","1" +"28655","Morganton","NC","35.742752","-81.71625","-5","1" +"28656","North Wilkesboro","NC","36.238438","-81.045963","-5","1" +"28657","Newland","NC","36.049348","-81.94286","-5","1" +"28658","Newton","NC","35.653437","-81.23443","-5","1" +"28659","North Wilkesboro","NC","36.169604","-81.11615","-5","1" +"28660","Olin","NC","35.970599","-80.86439","-5","1" +"28661","Patterson","NC","35.99726","-81.562609","-5","1" +"28662","Pineola","NC","36.023359","-81.84888","-5","1" +"28663","Piney Creek","NC","36.541861","-81.3195","-5","1" +"28664","Plumtree","NC","36.044098","-82.003691","-5","1" +"28665","Purlear","NC","36.195632","-81.37303","-5","1" +"28666","Icard","NC","35.726966","-81.47238","-5","1" +"28667","Rhodhiss","NC","35.777241","-81.43023","-5","1" +"28668","Roaring Gap","NC","36.38846","-81.00733","-5","1" +"28669","Roaring River","NC","36.229983","-80.99639","-5","1" +"28670","Ronda","NC","36.204458","-80.93481","-5","1" +"28671","Rutherford College","NC","35.753767","-81.53545","-5","1" +"28672","Scottville","NC","36.414156","-81.492983","-5","1" +"28673","Sherrills Ford","NC","35.589022","-80.99326","-5","1" +"28674","North Wilkesboro","NC","36.216247","-81.207166","-5","1" +"28675","Sparta","NC","36.506064","-81.1362","-5","1" +"28676","State Road","NC","36.326001","-80.86182","-5","1" +"28677","Statesville","NC","35.765719","-80.8981","-5","1" +"28678","Stony Point","NC","35.846848","-81.05152","-5","1" +"28679","Sugar Grove","NC","36.255467","-81.83002","-5","1" +"28680","Morganton","NC","35.750657","-81.695292","-5","1" +"28681","Taylorsville","NC","35.914275","-81.2083","-5","1" +"28682","Terrell","NC","35.585074","-80.96141","-5","1" +"28683","Thurmond","NC","36.394123","-80.91951","-5","1" +"28684","Todd","NC","36.345453","-81.61009","-5","1" +"28685","Traphill","NC","36.33942","-81.03564","-5","1" +"28687","Statesville","NC","35.529792","-80.947028","-5","1" +"28688","Turnersburg","NC","35.529792","-80.947028","-5","1" +"28689","Union Grove","NC","36.03559","-80.91265","-5","1" +"28690","Valdese","NC","35.740368","-81.56804","-5","1" +"28691","Valle Crucis","NC","36.209158","-81.778871","-5","1" +"28692","Vilas","NC","36.268944","-81.77819","-5","1" +"28693","Warrensville","NC","36.474746","-81.5371","-5","1" +"28694","West Jefferson","NC","36.375468","-81.47784","-5","1" +"28697","Wilkesboro","NC","36.136991","-81.17462","-5","1" +"28698","Zionville","NC","36.321009","-81.74404","-5","1" +"28699","Scotts","NC","35.831037","-81.00762","-5","1" +"28701","Alexander","NC","35.712999","-82.63479","-5","1" +"28702","Almond","NC","35.412166","-83.58395","-5","1" +"28704","Arden","NC","35.459869","-82.54142","-5","1" +"28705","Bakersville","NC","36.033454","-82.16858","-5","1" +"28707","Balsam","NC","35.419931","-83.08029","-5","1" +"28708","Balsam Grove","NC","35.289152","-82.83859","-5","1" +"28709","Barnardsville","NC","35.756437","-82.41471","-5","1" +"28710","Bat Cave","NC","35.464897","-82.28307","-5","1" +"28711","Black Mountain","NC","35.605146","-82.31665","-5","1" +"28712","Brevard","NC","35.188077","-82.75799","-5","1" +"28713","Bryson City","NC","35.395491","-83.47397","-5","1" +"28714","Burnsville","NC","35.891276","-82.30008","-5","1" +"28715","Candler","NC","35.529895","-82.70449","-5","1" +"28716","Canton","NC","35.503301","-82.85103","-5","1" +"28717","Cashiers","NC","35.103251","-83.09538","-5","1" +"28718","Cedar Mountain","NC","35.154193","-82.62466","-5","1" +"28719","Cherokee","NC","35.50359","-83.29698","-5","1" +"28720","Chimney Rock","NC","35.436893","-82.241744","-5","1" +"28721","Clyde","NC","35.60089","-82.93536","-5","1" +"28722","Columbus","NC","35.248689","-82.18161","-5","1" +"28723","Cullowhee","NC","35.256241","-83.14464","-5","1" +"28724","Dana","NC","35.295403","-82.388325","-5","1" +"28725","Dillsboro","NC","35.36852","-83.25321","-5","1" +"28726","East Flat Rock","NC","35.280702","-82.41834","-5","1" +"28727","Edneyville","NC","35.322276","-82.503226","-5","1" +"28728","Enka","NC","35.498797","-82.708024","-5","1" +"28729","Etowah","NC","35.311112","-82.60288","-5","1" +"28730","Fairview","NC","35.526686","-82.37542","-5","1" +"28731","Flat Rock","NC","35.270682","-82.41515","-5","1" +"28732","Fletcher","NC","35.437611","-82.48999","-5","1" +"28733","Fontana Dam","NC","35.435102","-83.82171","-5","1" +"28734","Franklin","NC","35.185018","-83.39032","-5","1" +"28735","Gerton","NC","35.478887","-82.34855","-5","1" +"28736","Glenville","NC","35.175847","-83.11146","-5","1" +"28737","Glenwood","NC","35.738725","-82.059494","-5","1" +"28738","Hazelwood","NC","35.468264","-83.002841","-5","1" +"28739","Hendersonville","NC","35.290454","-82.50652","-5","1" +"28740","Greenmountain","NC","36.023817","-82.29237","-5","1" +"28741","Highlands","NC","35.06252","-83.21173","-5","1" +"28742","Horse Shoe","NC","35.362016","-82.60353","-5","1" +"28743","Hot Springs","NC","35.834212","-82.86149","-5","1" +"28744","Franklin","NC","35.117299","-83.295244","-5","1" +"28745","Lake Junaluska","NC","35.527982","-82.96774","-5","1" +"28746","Lake Lure","NC","35.451314","-82.185","-5","1" +"28747","Lake Toxaway","NC","35.146004","-82.92258","-5","1" +"28748","Leicester","NC","35.661009","-82.73513","-5","1" +"28749","Little Switzerland","NC","35.849372","-82.07899","-5","1" +"28750","Lynn","NC","35.236179","-82.236198","-5","1" +"28751","Maggie Valley","NC","35.518138","-83.085","-5","1" +"28752","Marion","NC","35.709124","-82.01719","-5","1" +"28753","Marshall","NC","35.852912","-82.68447","-5","1" +"28754","Mars Hill","NC","35.866763","-82.52043","-5","1" +"28755","Micaville","NC","35.909707","-82.21395","-5","1" +"28756","Mill Spring","NC","35.336523","-82.18313","-5","1" +"28757","Montreat","NC","35.646373","-82.29968","-5","1" +"28758","Mountain Home","NC","35.37094","-82.4945","-5","1" +"28760","Naples","NC","35.381677","-82.481257","-5","1" +"28761","Nebo","NC","35.666254","-81.90629","-5","1" +"28762","Old Fort","NC","35.625414","-82.18229","-5","1" +"28763","Otto","NC","35.050529","-83.42225","-5","1" +"28765","Penland","NC","35.931539","-82.11072","-5","1" +"28766","Penrose","NC","35.264303","-82.62357","-5","1" +"28767","Old Fort","NC","35.640648","-82.165546","-5","1" +"28768","Pisgah Forest","NC","35.272331","-82.67373","-5","1" +"28770","Ridgecrest","NC","35.618596","-82.30048","-5","1" +"28771","Robbinsville","NC","35.345611","-83.79634","-5","1" +"28772","Rosman","NC","35.139812","-82.84253","-5","1" +"28773","Saluda","NC","35.23899","-82.34408","-5","1" +"28774","Sapphire","NC","35.115467","-83.01052","-5","1" +"28775","Scaly Mountain","NC","35.03107","-83.327411","-5","1" +"28776","Skyland","NC","35.483482","-82.520707","-5","1" +"28777","Spruce Pine","NC","35.910932","-82.07366","-5","1" +"28778","Swannanoa","NC","35.60243","-82.40531","-5","1" +"28779","Sylva","NC","35.37273","-83.20772","-5","1" +"28781","Topton","NC","35.241747","-83.62998","-5","1" +"28782","Tryon","NC","35.221428","-82.21712","-5","1" +"28783","Tuckasegee","NC","35.248885","-83.04111","-5","1" +"28784","Tuxedo","NC","35.219796","-82.43186","-5","1" +"28785","Maggie Valley","NC","35.569047","-83.009416","-5","1" +"28786","Waynesville","NC","35.511094","-82.99607","-5","1" +"28787","Weaverville","NC","35.723848","-82.54285","-5","1" +"28788","Webster","NC","35.328533","-83.233302","-5","1" +"28789","Whittier","NC","35.418018","-83.30887","-5","1" +"28790","Zirconia","NC","35.202275","-82.47156","-5","1" +"28791","Hendersonville","NC","35.345487","-82.49673","-5","1" +"28792","Hendersonville","NC","35.353837","-82.41625","-5","1" +"28793","Hendersonville","NC","35.292714","-82.503611","-5","1" +"28796","East Flat Rock","NC","35.29118","-82.41453","-5","1" +"28800","Asheville","NC","35.564734","-82.597992","-5","1" +"28801","Asheville","NC","35.595661","-82.55632","-5","1" +"28802","Asheville","NC","35.623732","-82.667132","-5","1" +"28803","Asheville","NC","35.54179","-82.52307","-5","1" +"28804","Asheville","NC","35.635844","-82.55992","-5","1" +"28805","Asheville","NC","35.599363","-82.50007","-5","1" +"28806","Asheville","NC","35.575877","-82.6062","-5","1" +"28808","Asheville","NC","35.486156","-82.532081","-5","1" +"28810","Asheville","NC","35.620335","-82.528558","-5","1" +"28813","Asheville","NC","35.50042","-82.502644","-5","1" +"28814","Asheville","NC","35.664752","-82.492664","-5","1" +"28815","Asheville","NC","35.620335","-82.528558","-5","1" +"28816","Asheville","NC","35.620335","-82.528558","-5","1" +"28818","Beulaville","NC","34.924076","-77.764819","-5","1" +"28849","Wrightsboro","NC","34.300421","-77.934656","-5","1" +"28894","Vass","NC","35.267373","-79.280088","-5","1" +"28901","Andrews","NC","35.202178","-83.81695","-5","1" +"28902","Brasstown","NC","35.02851","-83.94882","-5","1" +"28903","Culberson","NC","35.094379","-84.035916","-5","1" +"28904","Hayesville","NC","35.052591","-83.76683","-5","1" +"28905","Marble","NC","35.152197","-83.94231","-5","1" +"28906","Murphy","NC","35.091332","-84.09018","-5","1" +"28909","Warne","NC","34.994752","-83.90161","-5","1" +"28950","Winterville","NC","35.526959","-77.404512","-5","1" +"28954","Emerald Isle","NC","34.673805","-76.97842","-5","1" +"28971","Hendersonville","NC","35.350962","-82.494187","-5","1" +"28972","Hendersonville","NC","35.299726","-82.449228","-5","1" +"29001","Alcolu","SC","33.76993","-80.17278","-5","1" +"29002","Ballentine","SC","34.126535","-81.234811","-5","1" +"29003","Bamberg","SC","33.272026","-81.03203","-5","1" +"29006","Batesburg","SC","33.872503","-81.55245","-5","1" +"29009","Bethune","SC","34.422793","-80.36129","-5","1" +"29010","Bishopville","SC","34.213582","-80.26083","-5","1" +"29014","Blackstock","SC","34.552119","-81.13542","-5","1" +"29015","Blair","SC","34.428673","-81.35898","-5","1" +"29016","Blythewood","SC","34.200042","-80.98653","-5","1" +"29018","Bowman","SC","33.354403","-80.65134","-5","1" +"29020","Camden","SC","34.278935","-80.59142","-5","1" +"29030","Cameron","SC","33.572356","-80.67158","-5","1" +"29031","Carlisle","SC","34.603967","-81.4496","-5","1" +"29032","Cassatt","SC","34.349725","-80.48117","-5","1" +"29033","Cayce","SC","33.964753","-81.06618","-5","1" +"29036","Chapin","SC","34.128998","-81.33822","-5","1" +"29037","Chappells","SC","34.188584","-81.87043","-5","1" +"29038","Cope","SC","33.372063","-80.98409","-5","1" +"29039","Cordova","SC","33.425547","-80.90083","-5","1" +"29040","Dalzell","SC","34.029407","-80.44405","-5","1" +"29041","Davis Station","SC","33.688373","-80.208109","-5","1" +"29042","Denmark","SC","33.321406","-81.14318","-5","1" +"29044","Eastover","SC","33.911025","-80.70157","-5","1" +"29045","Elgin","SC","34.1699","-80.81448","-5","1" +"29046","Elliott","SC","34.107967","-80.161","-5","1" +"29047","Elloree","SC","33.52803","-80.58127","-5","1" +"29048","Eutawville","SC","33.399511","-80.32069","-5","1" +"29051","Gable","SC","33.845399","-80.13052","-5","1" +"29052","Gadsden","SC","33.839441","-80.74802","-5","1" +"29053","Gaston","SC","33.830405","-81.09219","-5","1" +"29054","Gilbert","SC","33.947764","-81.3823","-5","1" +"29055","Great Falls","SC","34.569908","-80.90972","-5","1" +"29056","Greeleyville","SC","33.634675","-79.99205","-5","1" +"29058","Heath Springs","SC","34.588329","-80.70107","-5","1" +"29059","Holly Hill","SC","33.332666","-80.42251","-5","1" +"29061","Hopkins","SC","33.920721","-80.84535","-5","1" +"29062","Horatio","SC","34.020978","-80.56786","-5","1" +"29063","Irmo","SC","34.120487","-81.19686","-5","1" +"29065","Jenkinsville","SC","34.295632","-81.30068","-5","1" +"29066","Batesburg-Leesville","SC","33.905722","-81.530165","-5","1" +"29067","Kershaw","SC","34.545825","-80.54807","-5","1" +"29069","Lamar","SC","34.183978","-80.07629","-5","1" +"29070","Leesville","SC","33.931279","-81.465","-5","1" +"29071","Lexington","SC","33.925183","-81.248345","-5","1" +"29072","Lexington","SC","33.991362","-81.25047","-5","1" +"29073","Lexington","SC","33.917812","-81.21854","-5","1" +"29074","Liberty Hill","SC","34.450789","-80.79844","-5","1" +"29075","Little Mountain","SC","34.194914","-81.39016","-5","1" +"29078","Lugoff","SC","34.204467","-80.70776","-5","1" +"29079","Lydia","SC","34.296064","-80.11319","-5","1" +"29080","Lynchburg","SC","34.007854","-80.0675","-5","1" +"29081","Ehrhardt","SC","33.094711","-81.04345","-5","1" +"29082","Lodge","SC","33.040507","-80.95448","-5","1" +"29101","McBee","SC","34.461353","-80.2506","-5","1" +"29102","Manning","SC","33.647611","-80.21281","-5","1" +"29103","Mayesville","SC","33.989924","-80.208361","-5","1" +"29104","Mayesville","SC","34.000732","-80.2136","-5","1" +"29105","Monetta","SC","33.831118","-81.59772","-5","1" +"29106","Monticello","SC","34.373596","-81.098735","-5","1" +"29107","Neeses","SC","33.532767","-81.12298","-5","1" +"29108","Newberry","SC","34.282877","-81.61641","-5","1" +"29111","New Zion","SC","33.795243","-80.04196","-5","1" +"29112","North","SC","33.629017","-81.09763","-5","1" +"29113","Norway","SC","33.445032","-81.12334","-5","1" +"29114","Olanta","SC","33.9413","-79.93219","-5","1" +"29115","Orangeburg","SC","33.487767","-80.8564","-5","1" +"29116","Orangeburg","SC","33.49593","-80.824603","-5","1" +"29117","Orangeburg","SC","33.442019","-80.797486","-5","1" +"29118","Orangeburg","SC","33.548282","-80.88513","-5","1" +"29122","Peak","SC","34.242848","-81.32649","-5","1" +"29123","Pelion","SC","33.771358","-81.25987","-5","1" +"29124","Perry","SC","33.630125","-81.30861","-5","1" +"29125","Pinewood","SC","33.71469","-80.4548","-5","1" +"29126","Pomaria","SC","34.305501","-81.4218","-5","1" +"29127","Prosperity","SC","34.14854","-81.511","-5","1" +"29128","Rembert","SC","34.094472","-80.54447","-5","1" +"29129","Ridge Spring","SC","33.804368","-81.65577","-5","1" +"29130","Ridgeway","SC","34.328826","-80.88762","-5","1" +"29132","Rion","SC","34.309957","-81.12724","-5","1" +"29133","Rowesville","SC","33.37731","-80.81601","-5","1" +"29135","Saint Matthews","SC","33.675533","-80.79563","-5","1" +"29137","Salley","SC","33.593634","-81.32226","-5","1" +"29138","Saluda","SC","34.029635","-81.77579","-5","1" +"29142","Santee","SC","33.462378","-80.50903","-5","1" +"29143","Sardinia","SC","33.688373","-80.208109","-5","1" +"29145","Silverstreet","SC","34.215881","-81.75318","-5","1" +"29146","Springfield","SC","33.506999","-81.28947","-5","1" +"29147","State Park","SC","34.005992","-80.970766","-5","1" +"29148","Summerton","SC","33.570595","-80.33969","-5","1" +"29150","Sumter","SC","33.916418","-80.35738","-5","1" +"29151","Sumter","SC","33.899856","-80.37434","-5","1" +"29152","Shaw A F B","SC","33.972863","-80.46534","-5","1" +"29153","Sumter","SC","33.948928","-80.32025","-5","1" +"29154","Sumter","SC","33.899155","-80.43433","-5","1" +"29160","Swansea","SC","33.734171","-81.07563","-5","1" +"29161","Timmonsville","SC","34.115691","-79.94482","-5","1" +"29162","Turbeville","SC","33.88759","-80.01013","-5","1" +"29163","Vance","SC","33.434712","-80.43046","-5","1" +"29164","Wagener","SC","33.659078","-81.40845","-5","1" +"29166","Ward","SC","33.90529","-81.70607","-5","1" +"29168","Wedgefield","SC","33.881986","-80.50487","-5","1" +"29169","West Columbia","SC","33.990952","-81.08956","-5","1" +"29170","West Columbia","SC","33.943251","-81.14142","-5","1" +"29171","West Columbia","SC","33.925183","-81.248345","-5","1" +"29172","West Columbia","SC","33.902216","-81.08256","-5","1" +"29175","Westville","SC","34.443733","-80.60138","-5","1" +"29176","White Oak","SC","34.373596","-81.098735","-5","1" +"29177","White Rock","SC","34.143934","-81.27281","-5","1" +"29178","Whitmire","SC","34.502577","-81.60777","-5","1" +"29180","Winnsboro","SC","34.369441","-81.08218","-5","1" +"29201","Columbia","SC","33.998454","-81.03519","-5","1" +"29202","Columbia","SC","34.022921","-81.02886","-5","1" +"29203","Columbia","SC","34.066271","-81.02492","-5","1" +"29204","Columbia","SC","34.027955","-81.00008","-5","1" +"29205","Columbia","SC","33.990555","-80.99826","-5","1" +"29206","Columbia","SC","34.037557","-80.96024","-5","1" +"29207","Columbia","SC","34.021442","-80.94144","-5","1" +"29208","Columbia","SC","33.993705","-81.019913","-5","1" +"29209","Columbia","SC","33.968011","-80.93844","-5","1" +"29210","Columbia","SC","34.041646","-81.10624","-5","1" +"29211","Columbia","SC","34.096716","-80.922338","-5","1" +"29212","Columbia","SC","34.075611","-81.17611","-5","1" +"29214","Columbia","SC","34.005992","-80.970766","-5","1" +"29215","Columbia","SC","34.005992","-80.970766","-5","1" +"29216","Columbia","SC","34.005992","-80.970766","-5","1" +"29217","Columbia","SC","34.005992","-80.970766","-5","1" +"29218","Columbia","SC","34.005992","-80.970766","-5","1" +"29219","Columbia","SC","34.005992","-80.970766","-5","1" +"29220","Columbia","SC","34.005992","-80.970766","-5","1" +"29221","Columbia","SC","34.005992","-80.970766","-5","1" +"29222","Columbia","SC","34.005992","-80.970766","-5","1" +"29223","Columbia","SC","34.084069","-80.93286","-5","1" +"29224","Columbia","SC","34.005992","-80.970766","-5","1" +"29225","Columbia","SC","34.005992","-80.970766","-5","1" +"29226","Columbia","SC","34.005992","-80.970766","-5","1" +"29227","Columbia","SC","34.005992","-80.970766","-5","1" +"29228","Columbia","SC","33.925183","-81.248345","-5","1" +"29229","Columbia","SC","34.139511","-80.88783","-5","1" +"29230","Columbia","SC","34.107483","-81.062623","-5","1" +"29233","Columbia","SC","34.091966","-80.87343","-5","1" +"29235","Clinton","SC","34.457522","-81.880871","-5","1" +"29240","Columbia","SC","34.005992","-80.970766","-5","1" +"29250","Columbia","SC","34.005992","-80.970766","-5","1" +"29260","Columbia","SC","34.005992","-80.970766","-5","1" +"29290","Columbia","SC","34.005992","-80.970766","-5","1" +"29292","Columbia","SC","34.005992","-80.970766","-5","1" +"29301","Spartanburg","SC","34.940921","-81.98682","-5","1" +"29302","Spartanburg","SC","34.926075","-81.87919","-5","1" +"29303","Spartanburg","SC","34.980636","-81.95665","-5","1" +"29304","Spartanburg","SC","34.916625","-81.863874","-5","1" +"29305","Spartanburg","SC","35.111404","-82.105503","-5","1" +"29306","Spartanburg","SC","34.925353","-81.9308","-5","1" +"29307","Spartanburg","SC","34.982424","-81.85729","-5","1" +"29316","Spartanburg","SC","35.033903","-81.97413","-5","1" +"29318","Spartanburg","SC","34.888237","-81.96902","-5","1" +"29319","Spartanburg","SC","34.888237","-81.96902","-5","1" +"29320","Arcadia","SC","34.957898","-81.99252","-5","1" +"29321","Buffalo","SC","34.715641","-81.71187","-5","1" +"29322","Campobello","SC","35.109207","-82.141","-5","1" +"29323","Chesnee","SC","35.131971","-81.88553","-5","1" +"29324","Clifton","SC","34.99056","-81.83271","-5","1" +"29325","Clinton","SC","34.470115","-81.86761","-5","1" +"29329","Converse","SC","35.001748","-81.832999","-5","1" +"29330","Cowpens","SC","35.043505","-81.81026","-5","1" +"29331","Cross Anchor","SC","34.638315","-81.856745","-5","1" +"29332","Cross Hill","SC","34.270774","-81.98276","-5","1" +"29333","Drayton","SC","34.968472","-81.906376","-5","1" +"29334","Duncan","SC","34.915071","-82.13322","-5","1" +"29335","Enoree","SC","34.660137","-81.90924","-5","1" +"29336","Fairforest","SC","34.888237","-81.96902","-5","1" +"29338","Fingerville","SC","35.136333","-82.00328","-5","1" +"29340","Gaffney","SC","35.03653","-81.62497","-5","1" +"29341","Gaffney","SC","35.10425","-81.69232","-5","1" +"29342","Gaffney","SC","34.996314","-81.652395","-5","1" +"29346","Glendale","SC","35.044719","-81.977324","-5","1" +"29348","Gramling","SC","34.888237","-81.96902","-5","1" +"29349","Inman","SC","35.061431","-82.07523","-5","1" +"29351","Joanna","SC","34.415818","-81.8106","-5","1" +"29353","Jonesville","SC","34.828217","-81.66903","-5","1" +"29355","Kinards","SC","34.338289","-81.78674","-5","1" +"29356","Landrum","SC","35.15617","-82.22045","-5","1" +"29360","Laurens","SC","34.503167","-82.02271","-5","1" +"29363","Lake View","SC","34.342221","-79.165102","-5","1" +"29364","Lockhart","SC","34.788053","-81.46124","-5","1" +"29365","Lyman","SC","34.96589","-82.14541","-5","1" +"29368","Mayo","SC","34.949241","-81.990216","-5","1" +"29369","Moore","SC","34.865445","-82.02018","-5","1" +"29370","Mountville","SC","34.367183","-81.9768","-5","1" +"29372","Pacolet","SC","34.900682","-81.74846","-5","1" +"29373","Pacolet Mills","SC","34.925281","-81.74321","-5","1" +"29374","Pauline","SC","34.783908","-81.85468","-5","1" +"29375","Reidville","SC","34.862432","-82.11066","-5","1" +"29376","Roebuck","SC","34.856283","-81.95444","-5","1" +"29377","Startex","SC","34.935828","-82.09514","-5","1" +"29378","Una","SC","34.853013","-81.772738","-5","1" +"29379","Union","SC","34.714045","-81.60496","-5","1" +"29384","Waterloo","SC","34.323605","-82.08325","-5","1" +"29385","Wellford","SC","34.954729","-82.09312","-5","1" +"29386","White Stone","SC","34.888237","-81.96902","-5","1" +"29388","Woodruff","SC","34.758703","-82.0483","-5","1" +"29390","Duncan","SC","34.888237","-81.96902","-5","1" +"29391","Duncan","SC","34.888237","-81.96902","-5","1" +"29401","Charleston","SC","32.779126","-79.9355","-5","1" +"29402","Charleston","SC","32.84885","-79.85773","-5","1" +"29403","Charleston","SC","32.799326","-79.94813","-5","1" +"29404","Charleston AFB","SC","32.897903","-80.06061","-5","1" +"29405","North Charleston","SC","32.856634","-79.98218","-5","1" +"29406","Charleston","SC","32.918757","-80.0228","-5","1" +"29407","Charleston","SC","32.794841","-80.005","-5","1" +"29409","Charleston","SC","32.84885","-79.85773","-5","1" +"29410","Charleston","SC","33.192514","-80.03063","-5","1" +"29412","Charleston","SC","32.73727","-79.95409","-5","1" +"29413","Charleston","SC","32.84885","-79.85773","-5","1" +"29414","Charleston","SC","32.821238","-80.05353","-5","1" +"29415","Charleston","SC","32.84885","-79.85773","-5","1" +"29416","Charleston","SC","32.84885","-79.85773","-5","1" +"29417","Charleston","SC","32.84885","-79.85773","-5","1" +"29418","North Charleston","SC","32.879529","-80.05911","-5","1" +"29419","Charleston","SC","32.84885","-79.85773","-5","1" +"29420","North Charleston","SC","32.93064","-80.09247","-5","1" +"29422","Charleston","SC","32.84885","-79.85773","-5","1" +"29423","Charleston","SC","32.981952","-80.07363","-5","1" +"29424","Charleston","SC","32.783076","-79.93701","-5","1" +"29425","Charleston","SC","32.786176","-79.94711","-5","1" +"29426","Adams Run","SC","32.790622","-80.38489","-5","1" +"29429","Awendaw","SC","32.97251","-79.6607","-5","1" +"29430","Bethera","SC","33.174292","-79.78991","-5","1" +"29431","Bonneau","SC","33.284887","-79.91504","-5","1" +"29432","Branchville","SC","33.229581","-80.80248","-5","1" +"29433","Canadys","SC","33.061376","-80.631208","-5","1" +"29434","Cordesville","SC","33.119898","-79.85797","-5","1" +"29435","Cottageville","SC","32.976399","-80.47925","-5","1" +"29436","Cross","SC","33.345833","-80.19009","-5","1" +"29437","Dorchester","SC","33.144807","-80.41593","-5","1" +"29438","Edisto Island","SC","32.542343","-80.31682","-5","1" +"29439","Folly Beach","SC","32.662451","-79.93224","-5","1" +"29440","Georgetown","SC","33.38934","-79.32638","-5","1" +"29442","Georgetown","SC","33.403693","-79.226361","-5","1" +"29445","Goose Creek","SC","32.991185","-80.02347","-5","1" +"29446","Green Pond","SC","32.683083","-80.56074","-5","1" +"29447","Grover","SC","33.086324","-80.62279","-5","1" +"29448","Harleyville","SC","33.237382","-80.45186","-5","1" +"29449","Hollywood","SC","32.715745","-80.26738","-5","1" +"29450","Huger","SC","33.046869","-79.8097","-5","1" +"29451","Isle Of Palms","SC","32.798138","-79.76496","-5","1" +"29452","Jacksonboro","SC","32.745396","-80.46458","-5","1" +"29453","Jamestown","SC","33.235105","-79.61472","-5","1" +"29455","Johns Island","SC","32.717109","-80.08507","-5","1" +"29456","Ladson","SC","32.993571","-80.12165","-5","1" +"29457","Johns Island","SC","32.84885","-79.85773","-5","1" +"29458","McClellanville","SC","33.10594","-79.4657","-5","1" +"29461","Moncks Corner","SC","33.164225","-80.01039","-5","1" +"29464","Mount Pleasant","SC","32.813518","-79.85899","-5","1" +"29465","Mount Pleasant","SC","32.84885","-79.85773","-5","1" +"29466","Mount Pleasant","SC","32.87602","-79.79148","-5","1" +"29468","Pineville","SC","33.418106","-80.07822","-5","1" +"29469","Pinopolis","SC","33.252941","-80.08297","-5","1" +"29470","Ravenel","SC","32.788784","-80.22778","-5","1" +"29471","Reevesville","SC","33.198286","-80.65637","-5","1" +"29472","Ridgeville","SC","33.03271","-80.31958","-5","1" +"29474","Round O","SC","32.939642","-80.54405","-5","1" +"29475","Ruffin","SC","32.977614","-80.81529","-5","1" +"29476","Russellville","SC","33.164201","-79.904182","-5","1" +"29477","Saint George","SC","33.187906","-80.57602","-5","1" +"29479","Saint Stephen","SC","33.391941","-79.91737","-5","1" +"29481","Smoaks","SC","33.105834","-80.81066","-5","1" +"29482","Sullivans Island","SC","32.763456","-79.83791","-5","1" +"29483","Summerville","SC","33.034586","-80.18599","-5","1" +"29484","Summerville","SC","33.00234","-80.226694","-5","1" +"29485","Summerville","SC","32.983408","-80.17627","-5","1" +"29487","Wadmalaw Island","SC","32.651864","-80.17774","-5","1" +"29488","Walterboro","SC","32.89989","-80.67195","-5","1" +"29492","Charleston","SC","32.91583","-79.8846","-5","1" +"29493","Williams","SC","33.03378","-80.84282","-5","1" +"29494","Hollywood","SC","32.727638","-80.24773","-5","1" +"29501","Florence","SC","34.195705","-79.80977","-5","1" +"29502","Florence","SC","34.200994","-79.784721","-5","1" +"29503","Florence","SC","34.062999","-79.650627","-5","1" +"29504","Florence","SC","34.041582","-79.693294","-5","1" +"29505","Florence","SC","34.142119","-79.74311","-5","1" +"29506","Florence","SC","34.201299","-79.71722","-5","1" +"29510","Andrews","SC","33.45053","-79.59233","-5","1" +"29511","Aynor","SC","33.985128","-79.14985","-5","1" +"29512","Bennettsville","SC","34.657694","-79.69151","-5","1" +"29516","Blenheim","SC","34.467072","-79.6437","-5","1" +"29518","Cades","SC","33.78144","-79.88688","-5","1" +"29519","Centenary","SC","34.028989","-79.3594","-5","1" +"29520","Cheraw","SC","34.68862","-79.92315","-5","1" +"29525","Clio","SC","34.571839","-79.53847","-5","1" +"29526","Conway","SC","33.850218","-79.01692","-5","1" +"29527","Conway","SC","33.801049","-79.1148","-5","1" +"29528","Conway","SC","33.935814","-78.919205","-5","1" +"29530","Coward","SC","33.985431","-79.74037","-5","1" +"29532","Darlington","SC","34.291269","-79.8761","-5","1" +"29535","McCormick","SC","33.911717","-82.30074","-5","1" +"29536","Dillon","SC","34.413907","-79.36512","-5","1" +"29540","Darlington","SC","34.388055","-79.89135","-5","1" +"29541","Effingham","SC","34.070033","-79.75793","-5","1" +"29542","Floyd Dale","SC","34.425629","-79.352291","-5","1" +"29543","Fork","SC","34.289399","-79.27039","-5","1" +"29544","Galivants Ferry","SC","34.002167","-79.19325","-5","1" +"29545","Green Sea","SC","34.164187","-78.96696","-5","1" +"29546","Gresham","SC","33.939996","-79.36142","-5","1" +"29547","Hamer","SC","34.483711","-79.32815","-5","1" +"29549","Myrtle Beach","SC","33.798844","-78.739531","-5","1" +"29550","Hartsville","SC","34.386728","-80.08256","-5","1" +"29551","Hartsville","SC","34.365898","-80.132418","-5","1" +"29554","Hemingway","SC","33.71239","-79.40387","-5","1" +"29555","Johnsonville","SC","33.830612","-79.45494","-5","1" +"29556","Kingstree","SC","33.671678","-79.78693","-5","1" +"29560","Lake City","SC","33.859815","-79.7542","-5","1" +"29561","Latta","SC","34.336439","-79.432546","-5","1" +"29563","Lake View","SC","34.345437","-79.18651","-5","1" +"29564","Lane","SC","33.493553","-79.87402","-5","1" +"29565","Latta","SC","34.340797","-79.45893","-5","1" +"29566","Little River","SC","33.873017","-78.64282","-5","1" +"29567","Little Rock","SC","34.525937","-79.42049","-5","1" +"29568","Longs","SC","33.915705","-78.74796","-5","1" +"29569","Loris","SC","34.046247","-78.9008","-5","1" +"29570","McColl","SC","34.671428","-79.55308","-5","1" +"29571","Marion","SC","34.164094","-79.396","-5","1" +"29572","Myrtle Beach","SC","33.765136","-78.79097","-5","1" +"29573","Minturn","SC","34.488255","-79.476859","-5","1" +"29574","Mullins","SC","34.194685","-79.25775","-5","1" +"29575","Myrtle Beach","SC","33.627763","-78.98126","-5","1" +"29576","Murrells Inlet","SC","33.568115","-79.03226","-5","1" +"29577","Myrtle Beach","SC","33.698101","-78.89604","-5","1" +"29578","Myrtle Beach","SC","33.738887","-78.999561","-5","1" +"29579","Myrtle Beach","SC","33.729439","-78.97824","-5","1" +"29580","Nesmith","SC","33.653454","-79.56773","-5","1" +"29581","Nichols","SC","34.19138","-79.11348","-5","1" +"29582","North Myrtle Beach","SC","33.823495","-78.67824","-5","1" +"29583","Pamplico","SC","33.983639","-79.57018","-5","1" +"29584","Patrick","SC","34.585217","-80.06109","-5","1" +"29585","Pawleys Island","SC","33.467343","-79.1301","-5","1" +"29587","Myrtle Beach","SC","33.621094","-78.963155","-5","1" +"29588","Myrtle Beach","SC","33.694757","-78.999862","-5","1" +"29589","Rains","SC","34.095976","-79.31738","-5","1" +"29590","Salters","SC","33.575913","-79.85551","-5","1" +"29591","Scranton","SC","33.927936","-79.76429","-5","1" +"29592","Sellers","SC","34.283207","-79.47272","-5","1" +"29593","Society Hill","SC","34.492154","-79.87045","-5","1" +"29594","Tatum","SC","34.645047","-79.58188","-5","1" +"29596","Wallace","SC","34.743074","-79.83177","-5","1" +"29597","North Myrtle Beach","SC","33.785803","-78.971795","-5","1" +"29598","North Myrtle Beach","SC","33.935814","-78.919205","-5","1" +"29599","Socastee","SC","33.694492","-79.011696","-5","1" +"29601","Greenville","SC","34.848301","-82.40578","-5","1" +"29602","Greenville","SC","34.800718","-82.395594","-5","1" +"29603","Greenville","SC","34.837666","-82.371519","-5","1" +"29604","Greenville","SC","34.849745","-82.453779","-5","1" +"29605","Greenville","SC","34.798035","-82.39289","-5","1" +"29606","Greenville","SC","34.849745","-82.453779","-5","1" +"29607","Greenville","SC","34.825592","-82.34099","-5","1" +"29608","Greenville","SC","34.849745","-82.453779","-5","1" +"29609","Greenville","SC","34.889217","-82.39364","-5","1" +"29610","Greenville","SC","34.849745","-82.453779","-5","1" +"29611","Greenville","SC","34.840717","-82.44234","-5","1" +"29612","Greenville","SC","34.849745","-82.453779","-5","1" +"29613","Greenville","SC","34.924876","-82.433132","-5","1" +"29614","Greenville","SC","34.872423","-82.362585","-5","1" +"29615","Greenville","SC","34.866801","-82.31739","-5","1" +"29616","Greenville","SC","34.849745","-82.453779","-5","1" +"29617","Greenville","SC","34.897829","-82.447","-5","1" +"29620","Abbeville","SC","34.189812","-82.41245","-5","1" +"29621","Anderson","SC","34.523657","-82.62509","-5","1" +"29622","Anderson","SC","34.491988","-82.782868","-5","1" +"29623","Anderson","SC","34.438087","-82.835449","-5","1" +"29624","Anderson","SC","34.478139","-82.6455","-5","1" +"29625","Anderson","SC","34.532638","-82.71615","-5","1" +"29626","Anderson","SC","34.464572","-82.74032","-5","1" +"29627","Belton","SC","34.517231","-82.49053","-5","1" +"29628","Calhoun Falls","SC","34.095246","-82.56215","-5","1" +"29630","Central","SC","34.733515","-82.78407","-5","1" +"29631","Clemson","SC","34.681255","-82.82176","-5","1" +"29632","Clemson","SC","34.847372","-82.710126","-5","1" +"29633","Clemson","SC","34.847372","-82.710126","-5","1" +"29634","Clemson","SC","34.847372","-82.710126","-5","1" +"29635","Cleveland","SC","35.084282","-82.62565","-5","1" +"29636","Conestee","SC","34.849745","-82.453779","-5","1" +"29638","Donalds","SC","34.370703","-82.33427","-5","1" +"29639","Due West","SC","34.325575","-82.4023","-5","1" +"29640","Easley","SC","34.849655","-82.59365","-5","1" +"29641","Easley","SC","34.813542","-82.653067","-5","1" +"29642","Easley","SC","34.789884","-82.56459","-5","1" +"29643","Fair Play","SC","34.505005","-82.99703","-5","1" +"29644","Fountain Inn","SC","34.681279","-82.19732","-5","1" +"29645","Gray Court","SC","34.601311","-82.13111","-5","1" +"29646","Greenwood","SC","34.169781","-82.15474","-5","1" +"29647","Greenwood","SC","34.178813","-82.163078","-5","1" +"29648","Greenwood","SC","34.21241","-82.168139","-5","1" +"29649","Greenwood","SC","34.225872","-82.15614","-5","1" +"29650","Greer","SC","34.911469","-82.25178","-5","1" +"29651","Greer","SC","34.937356","-82.22117","-5","1" +"29652","Greer","SC","34.849745","-82.453779","-5","1" +"29653","Hodges","SC","34.286915","-82.23672","-5","1" +"29654","Honea Path","SC","34.45451","-82.38755","-5","1" +"29655","Iva","SC","34.299215","-82.63812","-5","1" +"29656","La France","SC","34.612144","-82.76263","-5","1" +"29657","Liberty","SC","34.779483","-82.68861","-5","1" +"29658","Long Creek","SC","34.774914","-83.27236","-5","1" +"29659","Lowndesville","SC","34.210243","-82.63239","-5","1" +"29661","Marietta","SC","35.048312","-82.52726","-5","1" +"29662","Mauldin","SC","34.774657","-82.30432","-5","1" +"29664","Mountain Rest","SC","34.855841","-83.16336","-5","1" +"29665","Newry","SC","34.725935","-82.90985","-5","1" +"29666","Ninety Six","SC","34.14606","-82.00203","-5","1" +"29667","Norris","SC","34.766305","-82.75838","-5","1" +"29669","Pelzer","SC","34.646501","-82.44077","-5","1" +"29670","Pendleton","SC","34.641851","-82.76668","-5","1" +"29671","Pickens","SC","34.912476","-82.71136","-5","1" +"29672","Seneca","SC","34.736907","-82.94599","-5","1" +"29673","Piedmont","SC","34.723173","-82.4565","-5","1" +"29675","Richland","SC","34.764076","-83.088332","-5","1" +"29676","Salem","SC","34.888111","-82.95878","-5","1" +"29677","Sandy Springs","SC","34.589662","-82.74935","-5","1" +"29678","Seneca","SC","34.660345","-82.94557","-5","1" +"29679","Seneca","SC","34.607898","-82.939668","-5","1" +"29680","Simpsonville","SC","34.709869","-82.28385","-5","1" +"29681","Simpsonville","SC","34.762693","-82.24512","-5","1" +"29682","Six Mile","SC","34.833113","-82.83794","-5","1" +"29683","Slater","SC","35.031252","-82.49425","-5","1" +"29684","Starr","SC","34.376689","-82.71772","-5","1" +"29685","Sunset","SC","34.95424","-82.8484","-5","1" +"29686","Tamassee","SC","34.898387","-83.04391","-5","1" +"29687","Taylors","SC","34.935636","-82.32238","-5","1" +"29688","Tigerville","SC","35.068914","-82.37061","-5","1" +"29689","Townville","SC","34.527385","-82.86993","-5","1" +"29690","Travelers Rest","SC","35.018511","-82.43224","-5","1" +"29691","Walhalla","SC","34.769994","-83.06882","-5","1" +"29692","Ware Shoals","SC","34.404535","-82.23851","-5","1" +"29693","Westminster","SC","34.633763","-83.11495","-5","1" +"29695","Hodges","SC","34.218582","-82.304658","-5","1" +"29696","West Union","SC","34.77272","-83.02066","-5","1" +"29697","Williamston","SC","34.622494","-82.50551","-5","1" +"29698","Greenville","SC","34.888237","-81.96902","-5","1" +"29702","Blacksburg","SC","35.118338","-81.49413","-5","1" +"29703","Bowling Green","SC","34.992612","-81.178712","-5","1" +"29704","Catawba","SC","34.843469","-80.92235","-5","1" +"29706","Chester","SC","34.720597","-81.21429","-5","1" +"29708","Fort Mill","SC","35.040969","-80.99427","-5","1" +"29709","Chesterfield","SC","34.720306","-80.09371","-5","1" +"29710","Clover","SC","35.109114","-81.19429","-5","1" +"29712","Edgemoor","SC","34.795665","-80.97792","-5","1" +"29714","Fort Lawn","SC","34.702249","-80.90157","-5","1" +"29715","Fort Mill","SC","35.008416","-80.91644","-5","1" +"29716","Fort Mill","SC","35.062815","-80.969035","-5","1" +"29717","Hickory Grove","SC","34.963208","-81.43049","-5","1" +"29718","Jefferson","SC","34.631305","-80.35877","-5","1" +"29720","Lancaster","SC","34.729073","-80.76005","-5","1" +"29721","Lancaster","SC","34.699412","-80.781721","-5","1" +"29722","Lancaster","SC","34.767269","-80.658932","-5","1" +"29724","Lando","SC","34.774347","-81.00994","-5","1" +"29726","McConnells","SC","34.861633","-81.22788","-5","1" +"29727","Mount Croghan","SC","34.712457","-80.26799","-5","1" +"29728","Pageland","SC","34.769259","-80.39935","-5","1" +"29729","Richburg","SC","34.692002","-81.00536","-5","1" +"29730","Rock Hill","SC","34.914611","-81.0125","-5","1" +"29731","Rock Hill","SC","34.992612","-81.178712","-5","1" +"29732","Rock Hill","SC","34.969427","-81.0509","-5","1" +"29733","Rock Hill","SC","34.992612","-81.178712","-5","1" +"29734","Rock Hill","SC","34.992612","-81.178712","-5","1" +"29741","Ruby","SC","34.721265","-80.19733","-5","1" +"29742","Sharon","SC","34.870127","-81.39136","-5","1" +"29743","Smyrna","SC","35.041829","-81.40335","-5","1" +"29744","Van Wyck","SC","34.973866","-80.851836","-5","1" +"29745","York","SC","35.005981","-81.21176","-5","1" +"29756","Garden City","SC","33.595996","-79.001441","-5","1" +"29801","Aiken","SC","33.569885","-81.71368","-5","1" +"29802","Aiken","SC","33.723519","-81.59072","-5","1" +"29803","Aiken","SC","33.486049","-81.70946","-5","1" +"29804","Aiken","SC","33.53773","-81.599891","-5","1" +"29805","Aiken","SC","33.650812","-81.61561","-5","1" +"29808","Aiken","SC","33.53773","-81.599891","-5","1" +"29809","New Ellenton","SC","33.415481","-81.68632","-5","1" +"29810","Allendale","SC","33.010041","-81.33069","-5","1" +"29812","Barnwell","SC","33.226172","-81.36031","-5","1" +"29813","Hilda","SC","33.291666","-81.482658","-5","1" +"29816","Bath","SC","33.503438","-81.87128","-5","1" +"29817","Blackville","SC","33.363785","-81.28416","-5","1" +"29819","Bradley","SC","34.074234","-82.23492","-5","1" +"29821","Clarks Hill","SC","33.643924","-82.13638","-5","1" +"29822","Clearwater","SC","33.498386","-81.89705","-5","1" +"29824","Edgefield","SC","33.819096","-81.95036","-5","1" +"29826","Elko","SC","33.380314","-81.37854","-5","1" +"29827","Fairfax","SC","32.963048","-81.24052","-5","1" +"29828","Gloverville","SC","33.523241","-81.82785","-5","1" +"29829","Graniteville","SC","33.566349","-81.84119","-5","1" +"29831","Jackson","SC","33.337781","-81.8214","-5","1" +"29832","Johnston","SC","33.824496","-81.79179","-5","1" +"29834","Langley","SC","33.51344","-81.85264","-5","1" +"29835","McCormick","SC","33.91509","-82.30548","-5","1" +"29836","Martin","SC","33.080604","-81.49201","-5","1" +"29838","Modoc","SC","33.733657","-82.19251","-5","1" +"29839","Montmorenci","SC","33.507335","-81.599198","-5","1" +"29840","Mount Carmel","SC","33.997908","-82.51411","-5","1" +"29841","North Augusta","SC","33.517435","-81.94945","-5","1" +"29842","Beech Island","SC","33.443562","-81.87994","-5","1" +"29843","Olar","SC","33.190068","-81.18294","-5","1" +"29844","Parksville","SC","33.7802","-82.21285","-5","1" +"29845","Plum Branch","SC","33.84674","-82.23442","-5","1" +"29846","Sycamore","SC","33.047132","-81.22185","-5","1" +"29847","Trenton","SC","33.695638","-81.85192","-5","1" +"29848","Troy","SC","33.980222","-82.19013","-5","1" +"29849","Ulmer","SC","33.092403","-81.2209","-5","1" +"29850","Vaucluse","SC","33.619604","-81.81628","-5","1" +"29851","Warrenville","SC","33.530409","-81.81743","-5","1" +"29853","Williston","SC","33.405948","-81.42936","-5","1" +"29856","Windsor","SC","33.475916","-81.51935","-5","1" +"29860","North Augusta","SC","33.59107","-81.96445","-5","1" +"29861","North Augusta","SC","33.53773","-81.599891","-5","1" +"29875","Murrells Inlet","SC","33.55016","-79.053838","-5","1" +"29899","McCormick","SC","33.83562","-82.319983","-5","1" +"29901","Beaufort","SC","32.424353","-80.565343","-5","1" +"29902","Beaufort","SC","32.421594","-80.67505","-5","1" +"29903","Beaufort","SC","32.443974","-80.735245","-5","1" +"29904","Beaufort","SC","32.390605","-80.661027","-5","1" +"29905","Beaufort","SC","32.340119","-80.689041","-5","1" +"29906","Beaufort","SC","32.445712","-80.74845","-5","1" +"29907","Beaufort","SC","32.447677","-80.642097","-5","1" +"29909","Hilton Head Island","SC","32.312621","-80.915532","-5","1" +"29910","Bluffton","SC","32.241315","-80.87404","-5","1" +"29911","Brunson","SC","32.928131","-81.16602","-5","1" +"29912","Coosawatchie","SC","32.488929","-80.989142","-5","1" +"29913","Crocketville","SC","32.929902","-81.184627","-5","1" +"29914","Dale","SC","32.552652","-80.677001","-5","1" +"29915","Daufuskie Island","SC","32.156011","-80.787899","-5","1" +"29916","Early Branch","SC","32.72765","-80.94972","-5","1" +"29918","Estill","SC","32.744565","-81.24794","-5","1" +"29920","Saint Helena Island","SC","32.371697","-80.5503","-5","1" +"29921","Furman","SC","32.67553","-81.17208","-5","1" +"29922","Garnett","SC","32.593295","-81.24035","-5","1" +"29923","Gifford","SC","32.866195","-81.24215","-5","1" +"29924","Hampton","SC","32.868065","-81.10998","-5","1" +"29925","Hilton Head Island","SC","32.21319","-80.799698","-5","1" +"29926","Hilton Head Island","SC","32.226713","-80.74325","-5","1" +"29927","Hardeeville","SC","32.277216","-81.07847","-5","1" +"29928","Hilton Head Island","SC","32.159476","-80.75144","-5","1" +"29929","Islandton","SC","32.934459","-80.91937","-5","1" +"29931","Lobeco","SC","32.538432","-80.702594","-5","1" +"29932","Luray","SC","32.818844","-81.30864","-5","1" +"29933","Miley","SC","32.788773","-81.126913","-5","1" +"29934","Pineland","SC","32.602042","-81.12453","-5","1" +"29935","Port Royal","SC","32.382453","-80.69009","-5","1" +"29936","Ridgeland","SC","32.493936","-80.97461","-5","1" +"29938","Hilton Head Island","SC","32.390605","-80.661027","-5","1" +"29939","Scotia","SC","32.669734","-81.2447","-5","1" +"29940","Seabrook","SC","32.566537","-80.74987","-5","1" +"29941","Sheldon","SC","32.586005","-80.82739","-5","1" +"29942","Hampton","SC","32.881971","-81.111258","-5","1" +"29943","Tillman","SC","32.458459","-81.10567","-5","1" +"29944","Varnville","SC","32.822292","-81.05236","-5","1" +"29945","Yemassee","SC","32.681058","-80.83348","-5","1" +"29982","Hilton Head Island","SC","32.206894","-80.687134","-5","1" +"30002","Avondale Estates","GA","33.772122","-84.26491","-5","1" +"30003","Norcross","GA","33.960353","-84.037859","-5","1" +"30004","Alpharetta","GA","34.119177","-84.30292","-5","1" +"30005","Alpharetta","GA","34.080035","-84.21929","-5","1" +"30006","Marietta","GA","33.912473","-84.557181","-5","1" +"30007","Marietta","GA","33.912473","-84.557181","-5","1" +"30008","Marietta","GA","33.907336","-84.5788","-5","1" +"30009","Alpharetta","GA","33.844371","-84.47405","-5","1" +"30010","Norcross","GA","33.960353","-84.037859","-5","1" +"30011","Auburn","GA","34.022974","-83.83416","-5","1" +"30012","Conyers","GA","33.696714","-84.01732","-5","1" +"30013","Conyers","GA","33.633685","-83.98382","-5","1" +"30014","Covington","GA","33.581406","-83.851","-5","1" +"30015","Covington","GA","33.555791","-83.864915","-5","1" +"30016","Covington","GA","33.542118","-83.93372","-5","1" +"30017","Grayson","GA","33.888829","-83.96848","-5","1" +"30018","Jersey","GA","33.717989","-83.801451","-5","1" +"30019","Dacula","GA","33.981721","-83.88302","-5","1" +"30021","Clarkston","GA","33.809604","-84.2387","-5","1" +"30022","Alpharetta","GA","34.026238","-84.24506","-5","1" +"30023","Alpharetta","GA","33.844371","-84.47405","-5","1" +"30024","Suwanee","GA","34.052698","-84.07485","-5","1" +"30025","Social Circle","GA","33.65072","-83.70779","-5","1" +"30026","Duluth","GA","33.962979","-84.092267","-5","1" +"30028","Cumming","GA","34.193041","-84.092588","-5","1" +"30029","Duluth","GA","33.960353","-84.037859","-5","1" +"30030","Decatur","GA","33.771705","-84.29407","-5","1" +"30031","Decatur","GA","33.891251","-84.07456","-5","1" +"30032","Decatur","GA","33.740055","-84.26791","-5","1" +"30033","Decatur","GA","33.811354","-84.28335","-5","1" +"30034","Decatur","GA","33.693448","-84.24743","-5","1" +"30035","Decatur","GA","33.725739","-84.21114","-5","1" +"30036","Decatur","GA","33.891251","-84.07456","-5","1" +"30037","Decatur","GA","33.891251","-84.07456","-5","1" +"30038","Lithonia","GA","33.676358","-84.15381","-5","1" +"30039","Snellville","GA","33.822204","-84.03707","-5","1" +"30040","Cumming","GA","34.235408","-84.17441","-5","1" +"30041","Cumming","GA","34.201503","-84.09764","-5","1" +"30042","Lawrenceville","GA","33.929464","-84.103226","-5","1" +"30043","Lawrenceville","GA","34.001159","-84.01487","-5","1" +"30044","Lawrenceville","GA","33.91967","-84.07482","-5","1" +"30045","Lawrenceville","GA","33.949054","-83.98565","-5","1" +"30046","Lawrenceville","GA","33.960353","-84.037859","-5","1" +"30047","Lilburn","GA","33.872371","-84.11655","-5","1" +"30048","Lilburn","GA","33.960353","-84.037859","-5","1" +"30052","Loganville","GA","33.823809","-83.89423","-5","1" +"30054","Oxford","GA","33.658113","-83.86249","-5","1" +"30055","Mansfield","GA","33.504952","-83.74735","-5","1" +"30056","Newborn","GA","33.500008","-83.67165","-5","1" +"30058","Lithonia","GA","33.750257","-84.0964","-5","1" +"30060","Marietta","GA","33.932052","-84.54746","-5","1" +"30061","Marietta","GA","33.932842","-84.556004","-5","1" +"30062","Marietta","GA","33.99605","-84.47464","-5","1" +"30063","Marietta","GA","33.965294","-84.511209","-5","1" +"30064","Marietta","GA","33.946735","-84.602","-5","1" +"30065","Marietta","GA","33.912473","-84.557181","-5","1" +"30066","Marietta","GA","34.027533","-84.51475","-5","1" +"30067","Marietta","GA","33.933002","-84.47633","-5","1" +"30068","Marietta","GA","33.965601","-84.4433","-5","1" +"30069","Marietta","GA","33.912473","-84.557181","-5","1" +"30070","Porterdale","GA","33.576043","-83.89821","-5","1" +"30071","Norcross","GA","33.940768","-84.2062","-5","1" +"30072","Pine Lake","GA","33.791505","-84.20642","-5","1" +"30074","Redan","GA","33.891251","-84.07456","-5","1" +"30075","Roswell","GA","34.049789","-84.38539","-5","1" +"30076","Roswell","GA","34.032532","-84.31774","-5","1" +"30077","Roswell","GA","33.844371","-84.47405","-5","1" +"30078","Snellville","GA","33.860955","-84.01807","-5","1" +"30079","Scottdale","GA","33.791537","-84.25994","-5","1" +"30080","Smyrna","GA","33.87578","-84.50382","-5","1" +"30081","Smyrna","GA","33.858836","-84.71062","-5","1" +"30082","Smyrna","GA","33.859137","-84.53744","-5","1" +"30083","Stone Mountain","GA","33.795622","-84.19771","-5","1" +"30084","Tucker","GA","33.853853","-84.22036","-5","1" +"30085","Tucker","GA","33.891251","-84.07456","-5","1" +"30086","Stone Mountain","GA","33.891251","-84.07456","-5","1" +"30087","Stone Mountain","GA","33.817438","-84.13167","-5","1" +"30088","Stone Mountain","GA","33.762106","-84.17938","-5","1" +"30090","Marietta","GA","33.952451","-84.547082","-5","1" +"30091","Norcross","GA","33.960353","-84.037859","-5","1" +"30092","Norcross","GA","33.9692","-84.23261","-5","1" +"30093","Norcross","GA","33.909952","-84.1794","-5","1" +"30094","Conyers","GA","33.621906","-84.04633","-5","1" +"30095","Duluth","GA","34.025598","-84.13045","-5","1" +"30096","Duluth","GA","33.979401","-84.15118","-5","1" +"30097","Duluth","GA","34.020621","-84.14294","-5","1" +"30098","Duluth","GA","33.960353","-84.037859","-5","1" +"30099","Duluth","GA","33.959535","-84.105011","-5","1" +"30101","Acworth","GA","34.052285","-84.68483","-5","1" +"30102","Acworth","GA","34.097998","-84.6183","-5","1" +"30103","Adairsville","GA","34.368647","-84.92452","-5","1" +"30104","Aragon","GA","34.065792","-85.07227","-5","1" +"30105","Armuchee","GA","34.448075","-85.15313","-5","1" +"30106","Austell","GA","33.828061","-84.62593","-5","1" +"30107","Ball Ground","GA","34.344939","-84.37204","-5","1" +"30108","Bowdon","GA","33.533934","-85.26088","-5","1" +"30109","Bowdon Junction","GA","33.653355","-85.136227","-5","1" +"30110","Bremen","GA","33.723939","-85.14282","-5","1" +"30111","Clarkdale","GA","33.912473","-84.557181","-5","1" +"30113","Buchanan","GA","33.84627","-85.20291","-5","1" +"30114","Canton","GA","34.228478","-84.50402","-5","1" +"30115","Canton","GA","34.194029","-84.43884","-5","1" +"30116","Carrollton","GA","33.560454","-85.02254","-5","1" +"30117","Carrollton","GA","33.588486","-85.1062","-5","1" +"30118","Carrollton","GA","33.571176","-85.09612","-5","1" +"30119","Carrollton","GA","33.618931","-85.073582","-5","1" +"30120","Cartersville","GA","34.167327","-84.82764","-5","1" +"30121","Cartersville","GA","34.200264","-84.77533","-5","1" +"30122","Lithia Springs","GA","33.776137","-84.64484","-5","1" +"30123","Cassville","GA","34.244179","-84.845684","-5","1" +"30124","Cave Spring","GA","34.118206","-85.34001","-5","1" +"30125","Cedartown","GA","34.010162","-85.25762","-5","1" +"30126","Mableton","GA","33.817738","-84.56087","-5","1" +"30127","Powder Springs","GA","33.874553","-84.68784","-5","1" +"30129","Coosa","GA","34.333308","-85.233721","-5","1" +"30132","Dallas","GA","33.945735","-84.84463","-5","1" +"30133","Douglasville","GA","33.68966","-84.744595","-5","1" +"30134","Douglasville","GA","33.769636","-84.74967","-5","1" +"30135","Douglasville","GA","33.701554","-84.73756","-5","1" +"30137","Emerson","GA","34.124283","-84.75579","-5","1" +"30138","Esom Hill","GA","33.99994","-85.172297","-5","1" +"30139","Fairmount","GA","34.434629","-84.70133","-5","1" +"30140","Felton","GA","33.88232","-85.234946","-5","1" +"30141","Hiram","GA","33.867574","-84.77103","-5","1" +"30142","Holly Springs","GA","34.242944","-84.458326","-5","1" +"30143","Jasper","GA","34.454934","-84.41583","-5","1" +"30144","Kennesaw","GA","34.038949","-84.59706","-5","1" +"30145","Kingston","GA","34.237986","-84.97801","-5","1" +"30146","Lebanon","GA","34.242944","-84.458326","-5","1" +"30147","Lindale","GA","34.175095","-85.18084","-5","1" +"30148","Marble Hill","GA","34.452988","-84.25925","-5","1" +"30149","Mount Berry","GA","34.280355","-85.182085","-5","1" +"30150","Mount Zion","GA","33.643002","-85.181782","-5","1" +"30151","Nelson","GA","34.242944","-84.458326","-5","1" +"30152","Kennesaw","GA","34.002147","-84.63392","-5","1" +"30153","Rockmart","GA","33.987497","-85.05508","-5","1" +"30154","Douglasville","GA","33.68966","-84.744595","-5","1" +"30157","Dallas","GA","33.892504","-84.8346","-5","1" +"30161","Rome","GA","34.253343","-85.15312","-5","1" +"30162","Rome","GA","34.290508","-85.213817","-5","1" +"30163","Rome","GA","34.333308","-85.233721","-5","1" +"30164","Rome","GA","34.333308","-85.233721","-5","1" +"30165","Rome","GA","34.281423","-85.23825","-5","1" +"30166","Carrollton","GA","33.571329","-85.030663","-5","1" +"30168","Austell","GA","33.797456","-84.60621","-5","1" +"30170","Roopville","GA","33.434562","-85.16973","-5","1" +"30171","Rydal","GA","34.346142","-84.73232","-5","1" +"30172","Shannon","GA","34.333308","-85.233721","-5","1" +"30173","Silver Creek","GA","34.145931","-85.14342","-5","1" +"30175","Talking Rock","GA","34.537611","-84.51135","-5","1" +"30176","Tallapoosa","GA","33.748838","-85.29304","-5","1" +"30177","Tate","GA","34.418116","-84.38462","-5","1" +"30178","Taylorsville","GA","34.113826","-84.97274","-5","1" +"30179","Temple","GA","33.76324","-85.02667","-5","1" +"30180","Villa Rica","GA","33.718079","-84.92356","-5","1" +"30182","Waco","GA","33.658254","-85.23497","-5","1" +"30183","Waleska","GA","34.332315","-84.577","-5","1" +"30184","White","GA","34.236128","-84.72539","-5","1" +"30185","Whitesburg","GA","33.517698","-84.91725","-5","1" +"30187","Winston","GA","33.670405","-84.83809","-5","1" +"30188","Woodstock","GA","34.108027","-84.4843","-5","1" +"30189","Woodstock","GA","34.117565","-84.57176","-5","1" +"30202","Alpharetta","GA","34.062176","-84.240414","-5","1" +"30203","Brooks","GA","33.288993","-84.464401","-5","1" +"30204","Barnesville","GA","33.05413","-84.14862","-5","1" +"30205","Brooks","GA","33.275707","-84.46706","-5","1" +"30206","Concord","GA","33.109599","-84.45541","-5","1" +"30212","Experiment","GA","33.278205","-84.288803","-5","1" +"30213","Fairburn","GA","33.565662","-84.59321","-5","1" +"30214","Fayetteville","GA","33.47875","-84.47668","-5","1" +"30215","Fayetteville","GA","33.40147","-84.46271","-5","1" +"30216","Flovilla","GA","33.251174","-83.89284","-5","1" +"30217","Franklin","GA","33.298014","-85.12243","-5","1" +"30218","Gay","GA","33.121379","-84.58776","-5","1" +"30219","Glenn","GA","33.157214","-85.170588","-5","1" +"30220","Grantville","GA","33.230734","-84.82543","-5","1" +"30222","Greenville","GA","33.034761","-84.73593","-5","1" +"30223","Griffin","GA","33.268185","-84.27306","-5","1" +"30224","Griffin","GA","33.215454","-84.25427","-5","1" +"30228","Hampton","GA","33.401827","-84.30152","-5","1" +"30229","Haralson","GA","33.232156","-84.56854","-5","1" +"30230","Hogansville","GA","33.173516","-84.91737","-5","1" +"30232","Inman","GA","33.403811","-84.504403","-5","1" +"30233","Jackson","GA","33.294522","-83.97568","-5","1" +"30234","Jenkinsburg","GA","33.325951","-84.03346","-5","1" +"30236","Jonesboro","GA","33.528345","-84.33347","-5","1" +"30237","Jonesboro","GA","33.500697","-84.351273","-5","1" +"30238","Jonesboro","GA","33.49348","-84.37871","-5","1" +"30240","Lagrange","GA","33.029838","-85.0745","-5","1" +"30241","Lagrange","GA","33.036715","-84.98895","-5","1" +"30248","Locust Grove","GA","33.351277","-84.10645","-5","1" +"30250","Lovejoy","GA","33.437428","-84.31519","-5","1" +"30251","Luthersville","GA","33.201986","-84.69943","-5","1" +"30252","Mcdonough","GA","33.464387","-84.08154","-5","1" +"30253","Mcdonough","GA","33.455031","-84.17215","-5","1" +"30256","Meansville","GA","33.015476","-84.32187","-5","1" +"30257","Milner","GA","33.136567","-84.19386","-5","1" +"30258","Molena","GA","32.999261","-84.47168","-5","1" +"30259","Moreland","GA","33.277468","-84.75388","-5","1" +"30260","Morrow","GA","33.58776","-84.33011","-5","1" +"30261","Lagrange","GA","33.04567","-85.048995","-5","1" +"30263","Newnan","GA","33.38779","-84.82536","-5","1" +"30264","Newnan","GA","33.361003","-84.814173","-5","1" +"30265","Newnan","GA","33.400875","-84.71206","-5","1" +"30266","Orchard Hill","GA","33.265656","-84.298964","-5","1" +"30268","Palmetto","GA","33.527793","-84.69453","-5","1" +"30269","Peachtree City","GA","33.398992","-84.57062","-5","1" +"30271","Newnan","GA","33.351401","-84.756109","-5","1" +"30272","Red Oak","GA","33.625894","-84.516327","-5","1" +"30273","Rex","GA","33.582877","-84.26906","-5","1" +"30274","Riverdale","GA","33.555145","-84.40108","-5","1" +"30275","Sargent","GA","33.431181","-84.86733","-5","1" +"30276","Senoia","GA","33.281102","-84.58017","-5","1" +"30277","Sharpsburg","GA","33.387534","-84.65511","-5","1" +"30281","Stockbridge","GA","33.547578","-84.21809","-5","1" +"30283","Jackson","GA","33.295159","-83.965099","-5","1" +"30284","Sunny Side","GA","33.345253","-84.289814","-5","1" +"30285","The Rock","GA","32.995865","-84.25092","-5","1" +"30286","Thomaston","GA","32.895794","-84.33084","-5","1" +"30287","Morrow","GA","33.500697","-84.351273","-5","1" +"30288","Conley","GA","33.647275","-84.32753","-5","1" +"30289","Turin","GA","33.32603","-84.637108","-5","1" +"30290","Tyrone","GA","33.48012","-84.58724","-5","1" +"30291","Union City","GA","33.580878","-84.54611","-5","1" +"30292","Williamson","GA","33.169646","-84.37168","-5","1" +"30293","Woodbury","GA","32.973728","-84.5903","-5","1" +"30294","Ellenwood","GA","33.639658","-84.26822","-5","1" +"30295","Zebulon","GA","33.101705","-84.31252","-5","1" +"30296","Riverdale","GA","33.564711","-84.43987","-5","1" +"30297","Forest Park","GA","33.615409","-84.36704","-5","1" +"30298","Forest Park","GA","33.500697","-84.351273","-5","1" +"30301","Atlanta","GA","33.844371","-84.47405","-5","1" +"30302","Atlanta","GA","33.844371","-84.47405","-5","1" +"30303","Atlanta","GA","33.752856","-84.39013","-5","1" +"30304","Atlanta","GA","33.848196","-84.429296","-5","1" +"30305","Atlanta","GA","33.830054","-84.38472","-5","1" +"30306","Atlanta","GA","33.786755","-84.35149","-5","1" +"30307","Atlanta","GA","33.768205","-84.33786","-5","1" +"30308","Atlanta","GA","33.771755","-84.38065","-5","1" +"30309","Atlanta","GA","33.794055","-84.38525","-5","1" +"30310","Atlanta","GA","33.727807","-84.41983","-5","1" +"30311","Atlanta","GA","33.724907","-84.47131","-5","1" +"30312","Atlanta","GA","33.745739","-84.3764","-5","1" +"30313","Atlanta","GA","33.761223","-84.39599","-5","1" +"30314","Atlanta","GA","33.758056","-84.42268","-5","1" +"30315","Atlanta","GA","33.709595","-84.38365","-5","1" +"30316","Atlanta","GA","33.729506","-84.34087","-5","1" +"30317","Atlanta","GA","33.750005","-84.31854","-5","1" +"30318","Atlanta","GA","33.786805","-84.437","-5","1" +"30319","Atlanta","GA","33.872053","-84.33611","-5","1" +"30320","Atlanta","GA","33.656824","-84.423648","-5","1" +"30321","Atlanta","GA","33.844371","-84.47405","-5","1" +"30322","Atlanta","GA","33.793754","-84.3238","-5","1" +"30323","Atlanta","GA","33.844371","-84.47405","-5","1" +"30324","Atlanta","GA","33.818304","-84.35779","-5","1" +"30325","Atlanta","GA","33.844371","-84.47405","-5","1" +"30326","Atlanta","GA","33.849853","-84.3606","-5","1" +"30327","Atlanta","GA","33.86427","-84.41972","-5","1" +"30328","Atlanta","GA","33.931746","-84.37817","-5","1" +"30329","Atlanta","GA","33.827554","-84.32355","-5","1" +"30330","Atlanta","GA","33.707107","-84.432127","-5","1" +"30331","Atlanta","GA","33.715558","-84.52728","-5","1" +"30332","Atlanta","GA","33.776305","-84.397976","-5","1" +"30333","Atlanta","GA","33.891251","-84.07456","-5","1" +"30334","Atlanta","GA","33.702657","-84.439127","-5","1" +"30335","Atlanta","GA","33.752406","-84.389676","-5","1" +"30336","Atlanta","GA","33.744007","-84.56032","-5","1" +"30337","Atlanta","GA","33.646984","-84.4538","-5","1" +"30338","Atlanta","GA","33.942751","-84.31769","-5","1" +"30339","Atlanta","GA","33.87507","-84.46615","-5","1" +"30340","Atlanta","GA","33.899381","-84.25367","-5","1" +"30341","Atlanta","GA","33.888102","-84.29321","-5","1" +"30342","Atlanta","GA","33.879003","-84.37203","-5","1" +"30343","Atlanta","GA","33.844371","-84.47405","-5","1" +"30344","Atlanta","GA","33.676258","-84.44977","-5","1" +"30345","Atlanta","GA","33.851736","-84.28412","-5","1" +"30346","Atlanta","GA","33.926753","-84.33877","-5","1" +"30347","Atlanta","GA","33.844371","-84.47405","-5","1" +"30348","Atlanta","GA","33.844371","-84.47405","-5","1" +"30349","Atlanta","GA","33.61541","-84.49033","-5","1" +"30350","Atlanta","GA","33.97285","-84.32775","-5","1" +"30351","Atlanta","GA","33.844371","-84.47405","-5","1" +"30353","Atlanta","GA","33.844371","-84.47405","-5","1" +"30354","Atlanta","GA","33.658834","-84.39682","-5","1" +"30355","Atlanta","GA","33.844371","-84.47405","-5","1" +"30356","Atlanta","GA","33.891251","-84.07456","-5","1" +"30357","Atlanta","GA","33.844371","-84.47405","-5","1" +"30358","Atlanta","GA","33.998151","-84.34112","-5","1" +"30359","Atlanta","GA","33.891251","-84.07456","-5","1" +"30360","Atlanta","GA","33.934536","-84.27215","-5","1" +"30361","Atlanta","GA","33.844371","-84.47405","-5","1" +"30362","Atlanta","GA","33.891251","-84.07456","-5","1" +"30363","Atlanta","GA","33.844371","-84.47405","-5","1" +"30364","Atlanta","GA","33.844371","-84.47405","-5","1" +"30365","Atlanta","GA","33.844371","-84.47405","-5","1" +"30366","Atlanta","GA","33.891251","-84.07456","-5","1" +"30367","Atlanta","GA","33.789255","-84.387276","-5","1" +"30368","Atlanta","GA","33.844371","-84.47405","-5","1" +"30369","Atlanta","GA","33.844371","-84.47405","-5","1" +"30370","Atlanta","GA","33.844371","-84.47405","-5","1" +"30371","Atlanta","GA","33.844371","-84.47405","-5","1" +"30374","Atlanta","GA","33.844371","-84.47405","-5","1" +"30375","Atlanta","GA","33.844371","-84.47405","-5","1" +"30376","Atlanta","GA","33.844371","-84.47405","-5","1" +"30377","Atlanta","GA","33.844371","-84.47405","-5","1" +"30378","Atlanta","GA","33.844371","-84.47405","-5","1" +"30379","Atlanta","GA","33.844371","-84.47405","-5","1" +"30380","Atlanta","GA","33.844371","-84.47405","-5","1" +"30381","Atlanta","GA","33.844371","-84.47405","-5","1" +"30384","Atlanta","GA","33.844371","-84.47405","-5","1" +"30385","Atlanta","GA","33.844371","-84.47405","-5","1" +"30386","Atlanta","GA","33.844371","-84.47405","-5","1" +"30387","Atlanta","GA","33.844371","-84.47405","-5","1" +"30388","Atlanta","GA","33.844371","-84.47405","-5","1" +"30389","Atlanta","GA","33.844371","-84.47405","-5","1" +"30390","Atlanta","GA","33.844371","-84.47405","-5","1" +"30392","Atlanta","GA","33.844371","-84.47405","-5","1" +"30394","Atlanta","GA","33.844371","-84.47405","-5","1" +"30396","Atlanta","GA","33.844371","-84.47405","-5","1" +"30398","Atlanta","GA","33.844371","-84.47405","-5","1" +"30399","Atlanta","GA","33.844371","-84.47405","-5","1" +"30401","Swainsboro","GA","32.605196","-82.3391","-5","1" +"30410","Ailey","GA","32.196136","-82.50985","-5","1" +"30411","Alamo","GA","32.146031","-82.792","-5","1" +"30412","Alston","GA","32.083879","-82.47988","-5","1" +"30413","Bartow","GA","32.884137","-82.50969","-5","1" +"30414","Bellville","GA","32.15499","-81.97826","-5","1" +"30415","Brooklet","GA","32.3456","-81.62339","-5","1" +"30417","Claxton","GA","32.162077","-81.90984","-5","1" +"30420","Cobbtown","GA","32.301639","-82.11842","-5","1" +"30421","Collins","GA","32.186824","-82.10699","-5","1" +"30423","Daisy","GA","32.150061","-81.83478","-5","1" +"30424","Dover","GA","32.767634","-81.629062","-5","1" +"30425","Garfield","GA","32.632683","-82.036","-5","1" +"30426","Girard","GA","33.032445","-81.63251","-5","1" +"30427","Glennville","GA","31.945767","-81.93594","-5","1" +"30428","Glenwood","GA","32.190739","-82.69115","-5","1" +"30429","Hagan","GA","32.159458","-81.93724","-5","1" +"30434","Louisville","GA","33.008983","-82.378","-5","1" +"30436","Lyons","GA","32.177508","-82.30448","-5","1" +"30438","Manassas","GA","32.152792","-82.01301","-5","1" +"30439","Metter","GA","32.414401","-82.05534","-5","1" +"30441","Midville","GA","32.792831","-82.23715","-5","1" +"30442","Millen","GA","32.802448","-81.98381","-5","1" +"30444","East Point","GA","33.696073","-84.450276","-5","1" +"30445","Mount Vernon","GA","32.186824","-82.59171","-5","1" +"30446","Newington","GA","32.567281","-81.48627","-5","1" +"30447","Norristown","GA","32.505913","-82.49502","-5","1" +"30448","Nunez","GA","32.49126","-82.36787","-5","1" +"30449","Oliver","GA","32.528104","-81.533198","-5","1" +"30450","Portal","GA","32.555659","-81.9242","-5","1" +"30451","Pulaski","GA","32.414349","-82.086658","-5","1" +"30452","Register","GA","32.327219","-81.89818","-5","1" +"30453","Reidsville","GA","32.057356","-82.1214","-5","1" +"30454","Rockledge","GA","32.432854","-82.72979","-5","1" +"30455","Rocky Ford","GA","32.697762","-81.81036","-5","1" +"30456","Sardis","GA","32.969028","-81.79396","-5","1" +"30457","Soperton","GA","32.387041","-82.58272","-5","1" +"30458","Statesboro","GA","32.423083","-81.80677","-5","1" +"30459","Statesboro","GA","32.447036","-81.77772","-5","1" +"30460","Statesboro","GA","32.41795","-81.78233","-5","1" +"30461","Statesboro","GA","32.4906","-81.73166","-5","1" +"30464","Stillmore","GA","32.439708","-82.22278","-5","1" +"30466","Summertown","GA","32.566594","-82.324475","-5","1" +"30467","Sylvania","GA","32.754635","-81.63543","-5","1" +"30470","Tarrytown","GA","32.309128","-82.52255","-5","1" +"30471","Twin City","GA","32.547214","-82.17048","-5","1" +"30473","Uvalda","GA","32.03096","-82.48797","-5","1" +"30474","Vidalia","GA","32.220155","-82.41493","-5","1" +"30475","Vidalia","GA","32.177513","-82.373889","-5","1" +"30477","Wadley","GA","32.872098","-82.4023","-5","1" +"30499","Reidsville","GA","32.050694","-81.998348","-5","1" +"30501","Gainesville","GA","34.306643","-83.82352","-5","1" +"30502","Chestnut Mountain","GA","34.212993","-83.794858","-5","1" +"30503","Gainesville","GA","34.345432","-83.950541","-5","1" +"30504","Gainesville","GA","34.274355","-83.87003","-5","1" +"30505","Gainesville","GA","34.306188","-83.838936","-5","1" +"30506","Gainesville","GA","34.346102","-83.901","-5","1" +"30507","Gainesville","GA","34.253714","-83.77348","-5","1" +"30510","Alto","GA","34.455729","-83.58913","-5","1" +"30511","Baldwin","GA","34.469971","-83.50035","-5","1" +"30512","Blairsville","GA","34.875556","-84.00419","-5","1" +"30513","Blue Ridge","GA","34.851171","-84.32905","-5","1" +"30514","Blairsville","GA","34.903398","-84.019157","-5","1" +"30515","Buford","GA","33.960353","-84.037859","-5","1" +"30516","Bowersville","GA","34.370551","-83.05998","-5","1" +"30517","Braselton","GA","34.121974","-83.78604","-5","1" +"30518","Buford","GA","34.12115","-84.01804","-5","1" +"30519","Buford","GA","34.089419","-83.94701","-5","1" +"30520","Canon","GA","34.338008","-83.09656","-5","1" +"30521","Carnesville","GA","34.360544","-83.28544","-5","1" +"30522","Cherrylog","GA","34.801665","-84.37931","-5","1" +"30523","Clarkesville","GA","34.700311","-83.51879","-5","1" +"30525","Clayton","GA","34.882362","-83.4156","-5","1" +"30527","Clermont","GA","34.481514","-83.78599","-5","1" +"30528","Cleveland","GA","34.595859","-83.76194","-5","1" +"30529","Commerce","GA","34.210423","-83.46842","-5","1" +"30530","Commerce","GA","34.209907","-83.38389","-5","1" +"30531","Cornelia","GA","34.514215","-83.54118","-5","1" +"30533","Dahlonega","GA","34.542098","-83.99718","-5","1" +"30534","Dawsonville","GA","34.416521","-84.10849","-5","1" +"30535","Demorest","GA","34.573072","-83.55992","-5","1" +"30537","Dillard","GA","34.977198","-83.35161","-5","1" +"30538","Eastanollee","GA","34.511618","-83.25811","-5","1" +"30539","East Ellijay","GA","34.680011","-84.47154","-5","1" +"30540","Ellijay","GA","34.688716","-84.46716","-5","1" +"30541","Epworth","GA","34.925622","-84.42981","-5","1" +"30542","Flowery Branch","GA","34.188281","-83.91813","-5","1" +"30543","Gillsville","GA","34.299459","-83.65226","-5","1" +"30544","Demorest","GA","34.593092","-83.562922","-5","1" +"30545","Helen","GA","34.713441","-83.74189","-5","1" +"30546","Hiawassee","GA","34.923847","-83.7231","-5","1" +"30547","Homer","GA","34.348822","-83.47738","-5","1" +"30548","Hoschton","GA","34.097915","-83.77864","-5","1" +"30549","Jefferson","GA","34.112581","-83.58251","-5","1" +"30552","Lakemont","GA","34.763553","-83.44201","-5","1" +"30553","Lavonia","GA","34.450501","-83.09448","-5","1" +"30554","Lula","GA","34.391688","-83.65979","-5","1" +"30555","McCaysville","GA","34.977037","-84.39839","-5","1" +"30557","Martin","GA","34.491829","-83.17539","-5","1" +"30558","Maysville","GA","34.258054","-83.56058","-5","1" +"30559","Mineral Bluff","GA","34.949755","-84.28317","-5","1" +"30560","Morganton","GA","34.887912","-84.2098","-5","1" +"30562","Mountain City","GA","34.917466","-83.38487","-5","1" +"30563","Mount Airy","GA","34.549681","-83.47201","-5","1" +"30564","Murrayville","GA","34.466226","-83.88442","-5","1" +"30565","Nicholson","GA","34.094345","-83.41617","-5","1" +"30566","Oakwood","GA","34.236556","-83.89115","-5","1" +"30567","Pendergrass","GA","34.167309","-83.68536","-5","1" +"30568","Rabun Gap","GA","34.952452","-83.4073","-5","1" +"30571","Sautee Nacoochee","GA","34.696896","-83.68012","-5","1" +"30572","Suches","GA","34.731084","-84.07943","-5","1" +"30573","Tallulah Falls","GA","34.742007","-83.397716","-5","1" +"30575","Talmo","GA","34.191571","-83.71124","-5","1" +"30576","Tiger","GA","34.846806","-83.48178","-5","1" +"30577","Toccoa","GA","34.561584","-83.31718","-5","1" +"30580","Turnerville","GA","34.676584","-83.43578","-5","1" +"30581","Wiley","GA","34.797611","-83.42329","-5","1" +"30582","Young Harris","GA","34.954638","-83.86484","-5","1" +"30596","Alto","GA","34.629391","-83.509934","-5","1" +"30597","Dahlonega","GA","34.527671","-83.980879","-5","1" +"30598","Toccoa","GA","34.597674","-83.36207","-5","1" +"30599","Commerce","GA","34.130594","-83.587419","-5","1" +"30601","Athens","GA","33.979016","-83.36423","-5","1" +"30602","Athens","GA","33.948432","-83.3749","-5","1" +"30603","Athens","GA","33.947587","-83.408897","-5","1" +"30604","Athens","GA","33.944339","-83.38908","-5","1" +"30605","Athens","GA","33.925085","-83.34529","-5","1" +"30606","Athens","GA","33.945619","-83.41732","-5","1" +"30607","Athens","GA","34.013154","-83.43565","-5","1" +"30608","Athens","GA","33.944339","-83.38908","-5","1" +"30609","Athens","GA","33.946364","-83.37743","-5","1" +"30610","Athens","GA","33.944339","-83.38908","-5","1" +"30612","Athens","GA","33.944339","-83.38908","-5","1" +"30613","Athens","GA","33.962364","-83.39828","-5","1" +"30619","Arnoldsville","GA","33.863663","-83.24825","-5","1" +"30620","Bethlehem","GA","33.928949","-83.73524","-5","1" +"30621","Bishop","GA","33.804849","-83.48164","-5","1" +"30622","Bogart","GA","33.927792","-83.51552","-5","1" +"30623","Bostwick","GA","33.754235","-83.511055","-5","1" +"30624","Bowman","GA","34.193943","-83.03375","-5","1" +"30625","Buckhead","GA","33.527207","-83.34676","-5","1" +"30627","Carlton","GA","33.994139","-82.97819","-5","1" +"30628","Colbert","GA","34.041416","-83.21997","-5","1" +"30629","Comer","GA","34.072573","-83.11913","-5","1" +"30630","Crawford","GA","33.892957","-83.15548","-5","1" +"30631","Crawfordville","GA","33.570317","-82.88542","-5","1" +"30633","Danielsville","GA","34.17085","-83.24654","-5","1" +"30634","Dewy Rose","GA","34.212836","-82.94112","-5","1" +"30635","Elberton","GA","34.119972","-82.825","-5","1" +"30638","Farmington","GA","33.775001","-83.42456","-5","1" +"30639","Franklin Springs","GA","34.281721","-83.14746","-5","1" +"30641","Good Hope","GA","33.766057","-83.57597","-5","1" +"30642","Greensboro","GA","33.547041","-83.19797","-5","1" +"30643","Hartwell","GA","34.366948","-82.9201","-5","1" +"30645","High Shoals","GA","33.801274","-83.516374","-5","1" +"30646","Hull","GA","34.065588","-83.31318","-5","1" +"30647","Ila","GA","34.120239","-83.288117","-5","1" +"30648","Lexington","GA","33.863779","-83.06063","-5","1" +"30650","Madison","GA","33.588436","-83.47936","-5","1" +"30652","Greensboro","GA","33.559342","-83.364156","-5","1" +"30655","Monroe","GA","33.786041","-83.69901","-5","1" +"30656","Monroe","GA","33.857423","-83.71899","-5","1" +"30660","Rayle","GA","33.775127","-82.94624","-5","1" +"30662","Royston","GA","34.270167","-83.12842","-5","1" +"30663","Rutledge","GA","33.614556","-83.61157","-5","1" +"30664","Sharon","GA","33.560693","-82.80015","-5","1" +"30665","Siloam","GA","33.535009","-83.07787","-5","1" +"30666","Statham","GA","33.957713","-83.58491","-5","1" +"30667","Stephens","GA","33.784316","-83.16666","-5","1" +"30668","Tignall","GA","33.912362","-82.6684","-5","1" +"30669","Union Point","GA","33.652489","-83.08857","-5","1" +"30671","Maxeys","GA","33.748344","-83.18538","-5","1" +"30673","Washington","GA","33.728754","-82.72612","-5","1" +"30677","Watkinsville","GA","33.849286","-83.41232","-5","1" +"30678","White Plains","GA","33.46171","-83.05852","-5","1" +"30680","Winder","GA","33.992538","-83.71061","-5","1" +"30683","Winterville","GA","33.954047","-83.2673","-5","1" +"30701","Calhoun","GA","34.4966","-84.93798","-5","1" +"30703","Calhoun","GA","34.479066","-84.762161","-5","1" +"30705","Chatsworth","GA","34.753129","-84.77502","-5","1" +"30707","Chickamauga","GA","34.827019","-85.32883","-5","1" +"30708","Cisco","GA","34.945576","-84.7113","-5","1" +"30710","Cohutta","GA","34.935105","-84.94642","-5","1" +"30711","Crandall","GA","34.93882","-84.76558","-5","1" +"30716","Tallapoosa","GA","33.744222","-85.286982","-5","1" +"30719","Dalton","GA","34.801861","-84.989796","-5","1" +"30720","Dalton","GA","34.766095","-84.9865","-5","1" +"30721","Dalton","GA","34.780699","-84.93994","-5","1" +"30722","Dalton","GA","34.759522","-84.951261","-5","1" +"30724","Eton","GA","34.822176","-84.75967","-5","1" +"30725","Flintstone","GA","34.932348","-85.35064","-5","1" +"30726","Graysville","GA","34.975939","-85.1416","-5","1" +"30728","La Fayette","GA","34.696201","-85.25824","-5","1" +"30730","Lyerly","GA","34.376063","-85.4043","-5","1" +"30731","Menlo","GA","34.553485","-85.47893","-5","1" +"30732","Oakman","GA","34.569015","-84.711863","-5","1" +"30733","Plainville","GA","34.409661","-85.03345","-5","1" +"30734","Ranger","GA","34.531444","-84.69955","-5","1" +"30735","Resaca","GA","34.604648","-84.91926","-5","1" +"30736","Ringgold","GA","34.916552","-85.14435","-5","1" +"30738","Rising Fawn","GA","34.793833","-85.49945","-5","1" +"30739","Rock Spring","GA","34.801988","-85.21956","-5","1" +"30740","Rocky Face","GA","34.757918","-85.05879","-5","1" +"30741","Rossville","GA","34.96311","-85.27405","-5","1" +"30742","Fort Oglethorpe","GA","34.948979","-85.25212","-5","1" +"30746","Sugar Valley","GA","34.574804","-85.02482","-5","1" +"30747","Summerville","GA","34.489848","-85.32928","-5","1" +"30750","Lookout Mountain","GA","34.957134","-85.37183","-5","1" +"30751","Tennga","GA","34.981449","-84.735233","-5","1" +"30752","Trenton","GA","34.895625","-85.52702","-5","1" +"30753","Trion","GA","34.558404","-85.30301","-5","1" +"30754","Summerville","GA","34.484483","-85.345544","-5","1" +"30755","Tunnel Hill","GA","34.85973","-85.03867","-5","1" +"30756","Varnell","GA","34.9298","-84.988536","-5","1" +"30757","Wildwood","GA","34.954188","-85.43232","-5","1" +"30802","Appling","GA","33.620669","-82.30514","-5","1" +"30803","Avera","GA","33.163467","-82.52017","-5","1" +"30805","Blythe","GA","33.297318","-82.21503","-5","1" +"30806","Boneville","GA","33.527993","-82.5104","-5","1" +"30807","Camak","GA","33.453039","-82.64828","-5","1" +"30808","Dearing","GA","33.397137","-82.40335","-5","1" +"30809","Evans","GA","33.551145","-82.13949","-5","1" +"30810","Gibson","GA","33.236721","-82.58135","-5","1" +"30811","Gough","GA","33.050487","-81.929165","-5","1" +"30812","Gracewood","GA","33.386041","-82.090996","-5","1" +"30813","Grovetown","GA","33.459489","-82.20102","-5","1" +"30814","Harlem","GA","33.42359","-82.31013","-5","1" +"30815","Hephzibah","GA","33.32157","-82.08872","-5","1" +"30816","Keysville","GA","33.16249","-82.18933","-5","1" +"30817","Lincolnton","GA","33.765566","-82.43899","-5","1" +"30818","Matthews","GA","33.244829","-82.32636","-5","1" +"30819","Mesena","GA","33.432384","-82.625213","-5","1" +"30820","Mitchell","GA","33.224199","-82.713","-5","1" +"30821","Norwood","GA","33.477946","-82.73454","-5","1" +"30822","Perkins","GA","32.914843","-81.87901","-5","1" +"30823","Stapleton","GA","33.234802","-82.46303","-5","1" +"30824","Thomson","GA","33.490536","-82.5028","-5","1" +"30828","Warrenton","GA","33.399555","-82.65655","-5","1" +"30830","Waynesboro","GA","33.080965","-81.9944","-5","1" +"30833","Wrens","GA","33.200325","-82.37625","-5","1" +"30881","Atlanta","GA","33.793006","-84.504081","-5","1" +"30901","Augusta","GA","33.461121","-81.97265","-5","1" +"30903","Augusta","GA","33.386041","-82.090996","-5","1" +"30904","Augusta","GA","33.474136","-82.01018","-5","1" +"30905","Augusta","GA","33.417282","-82.14435","-5","1" +"30906","Augusta","GA","33.387089","-82.01237","-5","1" +"30907","Augusta","GA","33.512541","-82.09491","-5","1" +"30909","Augusta","GA","33.475936","-82.0697","-5","1" +"30910","Augusta","GA","33.386041","-82.090996","-5","1" +"30911","Augusta","GA","33.386041","-82.090996","-5","1" +"30912","Augusta","GA","33.386041","-82.090996","-5","1" +"30913","Augusta","GA","33.386041","-82.090996","-5","1" +"30914","Augusta","GA","33.386041","-82.090996","-5","1" +"30916","Augusta","GA","33.386041","-82.090996","-5","1" +"30917","Augusta","GA","33.527678","-82.235542","-5","1" +"30919","Augusta","GA","33.386041","-82.090996","-5","1" +"30999","Augusta","GA","33.386041","-82.090996","-5","1" +"31001","Abbeville","GA","31.972626","-83.33082","-5","1" +"31002","Adrian","GA","32.549854","-82.56948","-5","1" +"31003","Allentown","GA","32.600622","-83.22096","-5","1" +"31004","Bolingbroke","GA","32.946971","-83.800628","-5","1" +"31005","Bonaire","GA","32.556668","-83.62435","-5","1" +"31006","Butler","GA","32.563544","-84.2461","-5","1" +"31007","Byromville","GA","32.199721","-83.91327","-5","1" +"31008","Byron","GA","32.652313","-83.75918","-5","1" +"31009","Cadwell","GA","32.309003","-83.02647","-5","1" +"31010","Cordele","GA","31.917178","-83.785365","-5","1" +"31011","Chauncey","GA","32.108676","-83.06006","-5","1" +"31012","Chester","GA","32.396381","-83.16892","-5","1" +"31013","Clinchfield","GA","32.338639","-83.692562","-5","1" +"31014","Cochran","GA","32.397039","-83.3404","-5","1" +"31015","Cordele","GA","31.950899","-83.77808","-5","1" +"31016","Culloden","GA","32.861386","-84.11732","-5","1" +"31017","Danville","GA","32.600844","-83.24549","-5","1" +"31018","Davisboro","GA","32.976548","-82.61607","-5","1" +"31019","Dexter","GA","32.427633","-83.05632","-5","1" +"31020","Dry Branch","GA","32.719907","-83.4905","-5","1" +"31021","Dublin","GA","32.526359","-82.93375","-5","1" +"31022","Dudley","GA","32.516865","-83.09905","-5","1" +"31023","Eastman","GA","32.193953","-83.1848","-5","1" +"31024","Eatonton","GA","33.318579","-83.35432","-5","1" +"31025","Elko","GA","32.335147","-83.74571","-5","1" +"31027","Dublin","GA","32.569122","-82.80959","-5","1" +"31028","Centerville","GA","32.632111","-83.67795","-5","1" +"31029","Forsyth","GA","33.0409","-83.92941","-5","1" +"31030","Fort Valley","GA","32.55568","-83.88641","-5","1" +"31031","Gordon","GA","32.891499","-83.32748","-5","1" +"31032","Gray","GA","33.003455","-83.55078","-5","1" +"31033","Haddock","GA","33.053288","-83.43902","-5","1" +"31034","Hardwick","GA","33.040103","-83.2182","-5","1" +"31035","Harrison","GA","32.835471","-82.70761","-5","1" +"31036","Hawkinsville","GA","32.270314","-83.48517","-5","1" +"31037","Helena","GA","32.094127","-82.91713","-5","1" +"31038","Hillsboro","GA","33.172786","-83.63554","-5","1" +"31039","Howard","GA","32.587537","-84.3895","-5","1" +"31040","Dublin","GA","32.540073","-82.914974","-5","1" +"31041","Ideal","GA","32.371371","-84.18258","-5","1" +"31042","Irwinton","GA","32.7615","-83.1612","-5","1" +"31044","Jeffersonville","GA","32.630784","-83.37027","-5","1" +"31045","Jewell","GA","33.285774","-82.7749","-5","1" +"31046","Juliette","GA","33.054591","-83.78583","-5","1" +"31047","Kathleen","GA","32.509384","-83.64773","-5","1" +"31049","Kite","GA","32.69992","-82.51381","-5","1" +"31050","Knoxville","GA","32.742085","-83.94646","-5","1" +"31051","Lilly","GA","32.148624","-83.88003","-5","1" +"31052","Lizella","GA","32.788484","-83.80726","-5","1" +"31054","McIntyre","GA","32.875574","-83.19785","-5","1" +"31055","McRae","GA","32.045313","-82.8916","-5","1" +"31057","Marshallville","GA","32.446656","-83.93413","-5","1" +"31058","Mauk","GA","32.498727","-84.42804","-5","1" +"31060","Milan","GA","32.003035","-83.06337","-5","1" +"31061","Milledgeville","GA","33.083579","-83.23397","-5","1" +"31062","Milledgeville","GA","33.087138","-83.22492","-5","1" +"31063","Montezuma","GA","32.293293","-83.98913","-5","1" +"31064","Monticello","GA","33.319093","-83.70862","-5","1" +"31065","Montrose","GA","32.564036","-83.16019","-5","1" +"31066","Musella","GA","32.799959","-84.00588","-5","1" +"31067","Oconee","GA","32.860031","-82.95019","-5","1" +"31068","Oglethorpe","GA","32.329164","-84.07988","-5","1" +"31069","Perry","GA","32.460791","-83.73541","-5","1" +"31070","Pinehurst","GA","32.185677","-83.76348","-5","1" +"31071","Pineview","GA","32.13702","-83.52604","-5","1" +"31072","Pitts","GA","31.951839","-83.56747","-5","1" +"31073","Plainfield","GA","32.176429","-83.122891","-5","1" +"31075","Rentz","GA","32.370333","-82.96091","-5","1" +"31076","Reynolds","GA","32.54748","-84.10042","-5","1" +"31077","Rhine","GA","31.953407","-83.18058","-5","1" +"31078","Roberta","GA","32.702635","-84.03811","-5","1" +"31079","Rochelle","GA","31.933079","-83.45722","-5","1" +"31081","Rupert","GA","32.419094","-84.28475","-5","1" +"31082","Sandersville","GA","32.984529","-82.8375","-5","1" +"31083","Scotland","GA","32.046427","-82.81923","-5","1" +"31084","Seville","GA","31.989039","-83.394574","-5","1" +"31085","Shady Dale","GA","33.421694","-83.61433","-5","1" +"31086","Smarr","GA","32.989503","-83.876108","-5","1" +"31087","Sparta","GA","33.260235","-83.00647","-5","1" +"31088","Warner Robins","GA","32.594698","-83.64873","-5","1" +"31089","Tennille","GA","32.89115","-82.82775","-5","1" +"31090","Toomsboro","GA","32.801223","-83.06671","-5","1" +"31091","Unadilla","GA","32.24473","-83.72075","-5","1" +"31092","Vienna","GA","32.091578","-83.79311","-5","1" +"31093","Warner Robins","GA","32.638316","-83.64332","-5","1" +"31094","Warthen","GA","33.125097","-82.81018","-5","1" +"31095","Warner Robins","GA","32.487403","-83.669655","-5","1" +"31096","Wrightsville","GA","32.71732","-82.68926","-5","1" +"31097","Yatesville","GA","32.912207","-84.14812","-5","1" +"31098","Warner Robins","GA","32.614742","-83.59829","-5","1" +"31099","Warner Robins","GA","32.646236","-83.6513","-5","1" +"31106","Atlanta","GA","33.844371","-84.47405","-5","1" +"31107","Atlanta","GA","33.844371","-84.47405","-5","1" +"31119","Atlanta","GA","33.891251","-84.07456","-5","1" +"31126","Atlanta","GA","33.844371","-84.47405","-5","1" +"31131","Atlanta","GA","33.844371","-84.47405","-5","1" +"31139","Atlanta","GA","33.844371","-84.47405","-5","1" +"31141","Atlanta","GA","33.891251","-84.07456","-5","1" +"31145","Atlanta","GA","33.891251","-84.07456","-5","1" +"31146","Atlanta","GA","33.891251","-84.07456","-5","1" +"31150","Atlanta","GA","33.844371","-84.47405","-5","1" +"31156","Atlanta","GA","33.844371","-84.47405","-5","1" +"31191","Atlanta","GA","33.844371","-84.47405","-5","1" +"31192","Atlanta","GA","33.844371","-84.47405","-5","1" +"31193","Atlanta","GA","33.844371","-84.47405","-5","1" +"31195","Atlanta","GA","33.844371","-84.47405","-5","1" +"31196","Atlanta","GA","33.844371","-84.47405","-5","1" +"31197","Atlanta","GA","33.844371","-84.47405","-5","1" +"31198","Atlanta","GA","33.844371","-84.47405","-5","1" +"31199","Atlanta","GA","33.844371","-84.47405","-5","1" +"31201","Macon","GA","32.830839","-83.63529","-5","1" +"31202","Macon","GA","32.806707","-83.691315","-5","1" +"31203","Macon","GA","32.806707","-83.691315","-5","1" +"31204","Macon","GA","32.844872","-83.67119","-5","1" +"31205","Macon","GA","32.806707","-83.691315","-5","1" +"31206","Macon","GA","32.79904","-83.67216","-5","1" +"31207","Macon","GA","32.830389","-83.648552","-5","1" +"31208","Macon","GA","32.806707","-83.691315","-5","1" +"31209","Macon","GA","32.806707","-83.691315","-5","1" +"31210","Macon","GA","32.88899","-83.72204","-5","1" +"31211","Macon","GA","32.878304","-83.59963","-5","1" +"31212","Macon","GA","32.806707","-83.691315","-5","1" +"31213","Macon","GA","32.839289","-83.638752","-5","1" +"31216","Macon","GA","32.730641","-83.6793","-5","1" +"31217","Macon","GA","32.839005","-83.56749","-5","1" +"31220","Macon","GA","32.862246","-83.78665","-5","1" +"31221","Macon","GA","32.806707","-83.691315","-5","1" +"31267","Cecil","GA","31.046761","-83.395669","-5","1" +"31294","Macon","GA","32.806707","-83.691315","-5","1" +"31295","Macon","GA","32.810189","-83.569001","-5","1" +"31296","Macon","GA","32.806707","-83.691315","-5","1" +"31297","Macon","GA","32.70045","-83.657207","-5","1" +"31298","Macon","GA","32.87333","-83.708399","-5","1" +"31299","Macon","GA","32.806707","-83.691315","-5","1" +"31301","Allenhurst","GA","31.764663","-81.6098","-5","1" +"31302","Bloomingdale","GA","32.129474","-81.33121","-5","1" +"31303","Clyo","GA","32.508239","-81.3128","-5","1" +"31304","Crescent","GA","31.495071","-81.381908","-5","1" +"31305","Darien","GA","31.407598","-81.39094","-5","1" +"31307","Eden","GA","32.183211","-81.39979","-5","1" +"31308","Ellabell","GA","32.172661","-81.48447","-5","1" +"31309","Fleming","GA","31.873145","-81.42676","-5","1" +"31310","Hinesville","GA","31.806832","-81.437074","-5","1" +"31312","Guyton","GA","32.313816","-81.3908","-5","1" +"31313","Hinesville","GA","31.828575","-81.61617","-5","1" +"31314","Fort Stewart","GA","31.868699","-81.61083","-5","1" +"31315","Fort Stewart","GA","31.886944","-81.60109","-5","1" +"31316","Ludowici","GA","31.74991","-81.75813","-5","1" +"31318","Meldrim","GA","32.141974","-81.37892","-5","1" +"31319","Meridian","GA","31.478486","-81.34528","-5","1" +"31320","Midway","GA","31.788811","-81.37637","-5","1" +"31321","Pembroke","GA","32.163245","-81.64211","-5","1" +"31322","Pooler","GA","32.110421","-81.24568","-5","1" +"31323","Riceboro","GA","31.658252","-81.48778","-5","1" +"31324","Richmond Hill","GA","31.906365","-81.3108","-5","1" +"31326","Rincon","GA","32.293147","-81.23006","-5","1" +"31327","Sapelo Island","GA","31.423776","-81.27064","-5","1" +"31328","Tybee Island","GA","32.006672","-80.84937","-5","1" +"31329","Springfield","GA","32.390879","-81.32427","-5","1" +"31331","Townsend","GA","31.547412","-81.3862","-5","1" +"31332","Valona","GA","31.495071","-81.381908","-5","1" +"31333","Walthourville","GA","31.77789","-81.64534","-5","1" +"31337","Lenox","GA","31.271852","-83.459054","-5","1" +"31401","Savannah","GA","32.068658","-81.09258","-5","1" +"31402","Savannah","GA","31.971394","-81.07156","-5","1" +"31403","Savannah","GA","31.971394","-81.07156","-5","1" +"31404","Savannah","GA","32.046143","-81.06724","-5","1" +"31405","Savannah","GA","32.043058","-81.12183","-5","1" +"31406","Savannah","GA","31.988676","-81.09116","-5","1" +"31407","Savannah","GA","32.162963","-81.17233","-5","1" +"31408","Savannah","GA","32.106705","-81.16915","-5","1" +"31409","Savannah","GA","31.971394","-81.07156","-5","1" +"31410","Savannah","GA","32.022019","-80.99193","-5","1" +"31411","Savannah","GA","31.927434","-81.0425","-5","1" +"31412","Savannah","GA","31.971394","-81.07156","-5","1" +"31414","Savannah","GA","31.971394","-81.07156","-5","1" +"31415","Savannah","GA","32.075806","-81.12002","-5","1" +"31416","Savannah","GA","32.005255","-81.047711","-5","1" +"31418","Savannah","GA","31.971394","-81.07156","-5","1" +"31419","Savannah","GA","31.986249","-81.20259","-5","1" +"31420","Savannah","GA","31.971394","-81.07156","-5","1" +"31421","Savannah","GA","31.971394","-81.07156","-5","1" +"31422","Savannah","GA","31.971394","-81.07156","-5","1" +"31424","Richmond Hill","GA","31.919866","-81.325815","-5","1" +"31441","Savannah","GA","32.008183","-81.101502","-5","1" +"31498","Savannah","GA","31.971394","-81.07156","-5","1" +"31499","Savannah","GA","31.971394","-81.07156","-5","1" +"31501","Waycross","GA","31.220059","-82.35133","-5","1" +"31502","Waycross","GA","31.018954","-82.416543","-5","1" +"31503","Waycross","GA","31.205194","-82.37534","-5","1" +"31507","Marshallville","GA","32.452926","-83.944336","-5","1" +"31510","Alma","GA","31.551458","-82.44618","-5","1" +"31512","Ambrose","GA","31.57344","-83.01502","-5","1" +"31513","Baxley","GA","31.768849","-82.35198","-5","1" +"31515","Baxley","GA","31.717717","-82.299677","-5","1" +"31516","Blackshear","GA","31.307234","-82.25779","-5","1" +"31518","Bristol","GA","31.513511","-82.18481","-5","1" +"31519","Broxton","GA","31.67654","-82.88991","-5","1" +"31520","Brunswick","GA","31.166786","-81.49213","-5","1" +"31521","Brunswick","GA","31.241505","-81.532489","-5","1" +"31522","Saint Simons Island","GA","31.176516","-81.3802","-5","1" +"31523","Brunswick","GA","31.212705","-81.60975","-5","1" +"31524","Brunswick","GA","31.221995","-81.482551","-5","1" +"31525","Brunswick","GA","31.260995","-81.49832","-5","1" +"31527","Jekyll Island","GA","31.06419","-81.42072","-5","1" +"31532","Denton","GA","31.718382","-82.73595","-5","1" +"31533","Douglas","GA","31.522042","-82.84153","-5","1" +"31534","Douglas","GA","31.571596","-82.854631","-5","1" +"31535","Douglas","GA","31.464973","-82.86325","-5","1" +"31537","Folkston","GA","30.860915","-82.02194","-5","1" +"31539","Hazlehurst","GA","31.844772","-82.59809","-5","1" +"31542","Hoboken","GA","31.1747","-82.13812","-5","1" +"31543","Hortense","GA","31.320167","-81.85818","-5","1" +"31544","Jacksonville","GA","31.840974","-82.96137","-5","1" +"31545","Jesup","GA","31.636895","-81.90843","-5","1" +"31546","Jesup","GA","31.575166","-81.86481","-5","1" +"31547","Kings Bay","GA","30.804684","-81.627717","-5","1" +"31548","Kingsland","GA","30.793409","-81.68428","-5","1" +"31549","Lumber City","GA","31.928525","-82.69332","-5","1" +"31550","Manor","GA","31.101953","-82.58299","-5","1" +"31551","Mershon","GA","31.496025","-82.27322","-5","1" +"31552","Millwood","GA","31.281103","-82.6201","-5","1" +"31553","Nahunta","GA","31.17326","-81.97244","-5","1" +"31554","Nicholls","GA","31.495983","-82.62928","-5","1" +"31555","Odum","GA","31.670475","-82.04944","-5","1" +"31556","Offerman","GA","31.412649","-82.115541","-5","1" +"31557","Patterson","GA","31.372403","-82.10743","-5","1" +"31558","Saint Marys","GA","30.761081","-81.56912","-5","1" +"31560","Screven","GA","31.515981","-82.04908","-5","1" +"31561","Sea Island","GA","31.198914","-81.332211","-5","1" +"31563","Surrency","GA","31.715778","-82.19784","-5","1" +"31564","Waresboro","GA","31.018954","-82.416543","-5","1" +"31565","Waverly","GA","31.066479","-81.62656","-5","1" +"31566","Waynesville","GA","31.144635","-81.83011","-5","1" +"31567","West Green","GA","31.631943","-82.71829","-5","1" +"31568","White Oak","GA","31.003385","-81.79512","-5","1" +"31569","Woodbine","GA","30.915778","-81.67924","-5","1" +"31598","Jesup","GA","31.578181","-81.880222","-5","1" +"31599","Jesup","GA","31.578181","-81.880222","-5","1" +"31601","Valdosta","GA","30.807279","-83.28661","-5","1" +"31602","Valdosta","GA","30.866613","-83.30078","-5","1" +"31603","Valdosta","GA","30.827965","-83.252192","-5","1" +"31604","Valdosta","GA","30.827965","-83.252192","-5","1" +"31605","Valdosta","GA","30.92205","-83.25332","-5","1" +"31606","Valdosta","GA","30.802411","-83.19624","-5","1" +"31607","Valdosta","GA","30.831442","-83.318647","-5","1" +"31610","Sparks","GA","31.172669","-83.439433","-5","1" +"31620","Adel","GA","31.133004","-83.42736","-5","1" +"31622","Alapaha","GA","31.379665","-83.21803","-5","1" +"31623","Argyle","GA","31.071563","-82.65232","-5","1" +"31624","Axson","GA","31.297883","-82.71029","-5","1" +"31625","Barney","GA","31.003274","-83.5282","-5","1" +"31626","Boston","GA","30.782963","-83.78882","-5","1" +"31627","Cecil","GA","31.047996","-83.39135","-5","1" +"31629","Dixie","GA","30.802821","-83.69126","-5","1" +"31630","Du Pont","GA","30.96373","-82.86455","-5","1" +"31631","Fargo","GA","30.680867","-82.58028","-5","1" +"31632","Hahira","GA","30.991859","-83.36415","-5","1" +"31634","Homerville","GA","31.062818","-82.72399","-5","1" +"31635","Lakeland","GA","31.055578","-83.07103","-5","1" +"31636","Lake Park","GA","30.72289","-83.13302","-5","1" +"31637","Lenox","GA","31.291612","-83.45328","-5","1" +"31638","Morven","GA","30.935087","-83.50211","-5","1" +"31639","Nashville","GA","31.199","-83.2188","-5","1" +"31641","Naylor","GA","30.934298","-83.08841","-5","1" +"31642","Pearson","GA","31.27291","-82.83342","-5","1" +"31643","Quitman","GA","30.783639","-83.55343","-5","1" +"31645","Ray City","GA","31.070627","-83.20286","-5","1" +"31646","Saint George","GA","30.518903","-82.08063","-5","1" +"31647","Sparks","GA","31.183567","-83.43559","-5","1" +"31648","Statenville","GA","30.703175","-83.02568","-5","1" +"31649","Stockton","GA","30.957421","-83.00524","-5","1" +"31650","Willacoochee","GA","31.375165","-83.01949","-5","1" +"31659","Nashville","GA","31.205388","-83.246084","-5","1" +"31698","Valdosta","GA","30.84848","-83.287753","-5","1" +"31699","Valdosta","GA","30.965263","-83.19316","-5","1" +"31700","Albany","GA","31.564274","-84.165407","-5","1" +"31701","Albany","GA","31.580774","-84.16044","-5","1" +"31702","Albany","GA","31.594782","-84.194812","-5","1" +"31703","Albany","GA","31.543065","-84.219594","-5","1" +"31704","Albany","GA","31.549975","-84.061155","-5","1" +"31705","Albany","GA","31.552483","-84.09678","-5","1" +"31706","Albany","GA","31.559274","-84.176507","-5","1" +"31707","Albany","GA","31.568073","-84.22644","-5","1" +"31708","Albany","GA","31.591073","-84.132357","-5","1" +"31709","Americus","GA","32.071641","-84.21942","-5","1" +"31710","Americus","GA","32.051235","-84.181547","-5","1" +"31711","Andersonville","GA","32.195361","-84.137","-5","1" +"31712","Arabi","GA","31.836577","-83.72045","-5","1" +"31713","Arlington","GA","31.427845","-84.71025","-5","1" +"31714","Ashburn","GA","31.709742","-83.66519","-5","1" +"31715","Attapulgus","GA","30.743234","-84.48229","-5","1" +"31716","Baconton","GA","31.3709","-84.12921","-5","1" +"31717","Bainbridge","GA","30.884525","-84.58951","-5","1" +"31718","Bainbridge","GA","30.901863","-84.570049","-5","1" +"31719","Americus","GA","32.085491","-84.252665","-5","1" +"31720","Barwick","GA","30.890906","-83.73816","-5","1" +"31721","Albany","GA","31.56889","-84.248211","-5","1" +"31722","Berlin","GA","31.067313","-83.62288","-5","1" +"31723","Blakely","GA","31.334337","-84.94899","-5","1" +"31724","Bluffton","GA","31.528299","-84.86025","-5","1" +"31725","Brinson","GA","30.945016","-84.72284","-5","1" +"31726","Bronwood","GA","31.832214","-84.35727","-5","1" +"31727","Brookfield","GA","31.44172","-83.503715","-5","1" +"31728","Cairo","GA","30.87039","-84.21343","-5","1" +"31729","Calvary","GA","30.729915","-84.34762","-5","1" +"31730","Camilla","GA","31.209854","-84.23667","-5","1" +"31732","Cedar Springs","GA","31.169794","-85.0557","-5","1" +"31733","Chula","GA","31.592199","-83.48004","-5","1" +"31734","Climax","GA","30.88096","-84.42415","-5","1" +"31735","Cobb","GA","31.959367","-83.96028","-5","1" +"31736","Coleman","GA","31.650442","-84.87908","-5","1" +"31737","Colquitt","GA","31.152253","-84.69653","-5","1" +"31738","Coolidge","GA","31.012042","-83.87218","-5","1" +"31739","Cotton","GA","31.260443","-84.253089","-5","1" +"31740","Cuthbert","GA","31.781815","-84.76444","-5","1" +"31741","Damascus","GA","31.299009","-84.68772","-5","1" +"31742","Dawson","GA","31.756995","-84.43357","-5","1" +"31743","De Soto","GA","31.930451","-84.02921","-5","1" +"31744","Doerun","GA","31.325004","-83.90937","-5","1" +"31745","Donalsonville","GA","30.974364","-84.87703","-5","1" +"31746","Edison","GA","31.563327","-84.75869","-5","1" +"31747","Ellenton","GA","31.176563","-83.58801","-5","1" +"31749","Enigma","GA","31.439212","-83.34041","-5","1" +"31750","Fitzgerald","GA","31.720029","-83.25093","-5","1" +"31751","Fort Gaines","GA","31.631333","-85.03241","-5","1" +"31752","Fowlstown","GA","30.803291","-84.54711","-5","1" +"31753","Funston","GA","31.205365","-83.877554","-5","1" +"31754","Georgetown","GA","31.860476","-85.07534","-5","1" +"31756","Hartsfield","GA","31.177174","-83.96555","-5","1" +"31757","Thomasville","GA","30.883208","-83.91237","-5","1" +"31758","Thomasville","GA","30.868187","-83.927785","-5","1" +"31759","Iron City","GA","31.011595","-84.80242","-5","1" +"31760","Irwinville","GA","31.706283","-83.408633","-5","1" +"31761","Jakin","GA","31.113122","-85.00251","-5","1" +"31762","Leary","GA","31.454628","-84.51726","-5","1" +"31763","Leesburg","GA","31.714526","-84.16931","-5","1" +"31764","Leslie","GA","31.98309","-84.06866","-5","1" +"31765","Meigs","GA","31.082141","-84.05767","-5","1" +"31766","Morgan","GA","31.575228","-84.59849","-5","1" +"31767","Morris","GA","31.834324","-84.94739","-5","1" +"31768","Moultrie","GA","31.165358","-83.77172","-5","1" +"31769","Mystic","GA","31.620866","-83.249754","-5","1" +"31770","Newton","GA","31.33349","-84.36269","-5","1" +"31771","Norman Park","GA","31.256287","-83.66005","-5","1" +"31772","Oakfield","GA","31.723178","-83.9628","-5","1" +"31773","Ochlocknee","GA","30.977162","-84.0615","-5","1" +"31774","Ocilla","GA","31.586426","-83.27583","-5","1" +"31775","Omega","GA","31.334062","-83.59971","-5","1" +"31776","Moultrie","GA","31.172696","-83.792379","-5","1" +"31777","Parrott","GA","31.905462","-84.51526","-5","1" +"31778","Pavo","GA","30.966781","-83.72075","-5","1" +"31779","Pelham","GA","31.117271","-84.15678","-5","1" +"31780","Plains","GA","32.026125","-84.39361","-5","1" +"31781","Poulan","GA","31.526584","-83.79025","-5","1" +"31782","Putney","GA","31.543065","-84.219594","-5","1" +"31783","Rebecca","GA","31.767986","-83.47325","-5","1" +"31784","Sale City","GA","31.258794","-84.02897","-5","1" +"31785","Sasser","GA","31.689973","-84.32748","-5","1" +"31786","Shellman","GA","31.72952","-84.60173","-5","1" +"31787","Smithville","GA","31.901066","-84.25037","-5","1" +"31788","White House","TN","31.138011","-83.716729","-5","1" +"31789","Sumner","GA","31.484091","-83.73515","-5","1" +"31790","Sycamore","GA","31.652542","-83.57934","-5","1" +"31791","Sylvester","GA","31.536886","-83.86041","-5","1" +"31792","Thomasville","GA","30.817654","-83.98919","-5","1" +"31793","Tifton","GA","31.485438","-83.503621","-5","1" +"31794","Tifton","GA","31.459666","-83.51083","-5","1" +"31795","Ty Ty","GA","31.47387","-83.66484","-5","1" +"31796","Warwick","GA","31.782466","-83.86973","-5","1" +"31797","Whigham","GA","30.888809","-84.32976","-5","1" +"31798","Wray","GA","31.621764","-83.05502","-5","1" +"31799","Thomasville","GA","30.880968","-83.885902","-5","1" +"31801","Box Springs","GA","32.527813","-84.59822","-5","1" +"31803","Buena Vista","GA","32.315915","-84.52238","-5","1" +"31804","Cataula","GA","32.651617","-84.88805","-5","1" +"31805","Cusseta","GA","32.285535","-84.76332","-5","1" +"31806","Ellaville","GA","32.246795","-84.32008","-5","1" +"31807","Ellerslie","GA","32.634965","-84.80137","-5","1" +"31808","Fortson","GA","32.638885","-85.00736","-5","1" +"31810","Geneva","GA","32.57791","-84.54513","-5","1" +"31811","Hamilton","GA","32.722333","-84.95803","-5","1" +"31812","Junction City","GA","32.614374","-84.44513","-5","1" +"31814","Louvale","GA","32.154164","-84.83857","-5","1" +"31815","Lumpkin","GA","32.030297","-84.81218","-5","1" +"31816","Manchester","GA","32.862377","-84.60879","-5","1" +"31820","Midland","GA","32.566197","-84.84122","-5","1" +"31821","Omaha","GA","32.1342","-84.98499","-5","1" +"31822","Pine Mountain","GA","32.867211","-84.88437","-5","1" +"31823","Pine Mountain Valley","GA","32.801174","-84.82038","-5","1" +"31824","Preston","GA","32.051618","-84.53419","-5","1" +"31825","Richland","GA","32.109225","-84.66063","-5","1" +"31826","Shiloh","GA","32.803518","-84.69384","-5","1" +"31827","Talbotton","GA","32.683146","-84.52243","-5","1" +"31829","Upatoi","GA","32.557718","-84.73957","-5","1" +"31830","Warm Springs","GA","32.896166","-84.71191","-5","1" +"31831","Waverly Hall","GA","32.698622","-84.71552","-5","1" +"31832","Weston","GA","31.973541","-84.62522","-5","1" +"31833","West Point","GA","32.867469","-85.13779","-5","1" +"31836","Woodland","GA","32.797475","-84.54095","-5","1" +"31901","Columbus","GA","32.471492","-84.98005","-5","1" +"31902","Columbus","GA","32.524252","-84.955843","-5","1" +"31903","Columbus","GA","32.423311","-84.94879","-5","1" +"31904","Columbus","GA","32.513391","-84.97753","-5","1" +"31905","Fort Benning","GA","32.37349","-84.90612","-5","1" +"31906","Columbus","GA","32.468442","-84.95128","-5","1" +"31907","Columbus","GA","32.479492","-84.90942","-5","1" +"31908","Columbus","GA","32.534852","-84.906483","-5","1" +"31909","Columbus","GA","32.53554","-84.92583","-5","1" +"31914","Columbus","GA","32.491005","-84.874123","-5","1" +"31917","Columbus","GA","32.491005","-84.874123","-5","1" +"31993","Columbus","GA","32.482142","-84.977131","-5","1" +"31994","Columbus","GA","32.491005","-84.874123","-5","1" +"31995","Fort Benning","GA","32.495841","-84.963981","-5","1" +"31997","Columbus","GA","32.491005","-84.874123","-5","1" +"31998","Columbus","GA","32.491005","-84.874123","-5","1" +"31999","Columbus","GA","32.491005","-84.874123","-5","1" +"32004","Ponte Vedra Beach","FL","29.937673","-81.420603","-5","1" +"32007","Bostwick","FL","29.799631","-81.627324","-5","1" +"32008","Branford","FL","29.928691","-82.91032","-5","1" +"32009","Bryceville","FL","30.421425","-81.95741","-5","1" +"32011","Callahan","FL","30.567684","-81.84051","-5","1" +"32013","Day","FL","30.193758","-83.29266","-5","1" +"32024","Lake City","FL","30.108128","-82.72529","-5","1" +"32025","Lake City","FL","30.155229","-82.62165","-5","1" +"32030","Doctors Inlet","FL","30.105553","-81.768964","-5","1" +"32033","Elkton","FL","29.787831","-81.44668","-5","1" +"32034","Fernandina Beach","FL","30.641487","-81.46092","-5","1" +"32035","Fernandina Beach","FL","30.551558","-81.698422","-5","1" +"32038","Fort White","FL","29.922221","-82.71425","-5","1" +"32040","Glen Saint Mary","FL","30.272356","-82.21351","-5","1" +"32041","Yulee","FL","30.6233","-81.590249","-5","1" +"32042","Graham","FL","29.968926","-82.122553","-5","1" +"32043","Green Cove Springs","FL","29.97289","-81.72195","-5","1" +"32044","Hampton","FL","29.863141","-82.15623","-5","1" +"32046","Hilliard","FL","30.685319","-81.93061","-5","1" +"32047","Yulee","FL","30.621671","-81.617754","-5","1" +"32050","Middleburg","FL","30.031702","-81.848401","-5","1" +"32052","Jasper","FL","30.491893","-82.94876","-5","1" +"32053","Jennings","FL","30.581517","-83.13841","-5","1" +"32054","Lake Butler","FL","30.005135","-82.38103","-5","1" +"32055","Lake City","FL","30.216073","-82.6396","-5","1" +"32056","Lake City","FL","30.162772","-82.651184","-5","1" +"32058","Lawtey","FL","30.061174","-82.0943","-5","1" +"32059","Lee","FL","30.421598","-83.27037","-5","1" +"32060","Live Oak","FL","30.285127","-83.04106","-5","1" +"32061","Lulu","FL","30.101542","-82.50337","-5","1" +"32062","McAlpin","FL","30.13762","-82.98732","-5","1" +"32063","Macclenny","FL","30.267664","-82.12457","-5","1" +"32064","Live Oak","FL","30.331517","-82.957151","-5","1" +"32065","Orange Park","FL","30.133007","-81.77904","-5","1" +"32066","Mayo","FL","30.084849","-83.21849","-5","1" +"32067","Orange Park","FL","29.956068","-81.815115","-5","1" +"32068","Middleburg","FL","30.074926","-81.87932","-5","1" +"32071","O Brien","FL","30.039096","-82.94481","-5","1" +"32072","Olustee","FL","30.210947","-82.43601","-5","1" +"32073","Orange Park","FL","30.160965","-81.72916","-5","1" +"32079","Penney Farms","FL","29.979095","-81.80991","-5","1" +"32080","St. Augustine","FL","29.838279","-81.275174","-5","1" +"32081","Pomona Park","FL","29.50199","-81.600108","-5","1" +"32082","Ponte Vedra Beach","FL","30.189934","-81.38213","-5","1" +"32083","Raiford","FL","30.070341","-82.22371","-5","1" +"32084","Saint Augustine","FL","29.87131","-81.29464","-5","1" +"32085","Saint Augustine","FL","29.937673","-81.420603","-5","1" +"32086","Saint Augustine","FL","29.811123","-81.30987","-5","1" +"32087","Sanderson","FL","30.390734","-82.26039","-5","1" +"32091","Starke","FL","29.937512","-82.11706","-5","1" +"32092","Saint Augustine","FL","29.955409","-81.51284","-5","1" +"32094","Wellborn","FL","30.203153","-82.81421","-5","1" +"32095","Saint Augustine","FL","29.923718","-81.33962","-5","1" +"32096","White Springs","FL","30.366085","-82.76055","-5","1" +"32097","Yulee","FL","30.63928","-81.59442","-5","1" +"32098","Palm Valley","FL","30.164918","-81.378181","-5","1" +"32099","Jacksonville","FL","30.337538","-81.768622","-5","1" +"32102","Astor","FL","29.174417","-81.56319","-5","1" +"32105","Barberville","FL","29.200508","-81.406458","-5","1" +"32110","Bunnell","FL","29.445826","-81.30203","-5","1" +"32111","Candler","FL","29.060711","-81.969048","-5","1" +"32112","Crescent City","FL","29.425693","-81.55686","-5","1" +"32113","Citra","FL","29.393366","-82.09805","-5","1" +"32114","Daytona Beach","FL","29.204009","-81.03602","-5","1" +"32115","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32116","Daytona Beach","FL","29.10909","-80.984344","-5","1" +"32117","Daytona Beach","FL","29.238606","-81.05316","-5","1" +"32118","Daytona Beach","FL","29.210309","-81.00259","-5","1" +"32119","Daytona Beach","FL","29.153239","-81.02229","-5","1" +"32120","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32121","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32122","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32123","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32124","Daytona Beach","FL","29.105506","-81.08642","-5","1" +"32125","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32126","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32127","Daytona Beach","FL","29.116361","-80.98175","-5","1" +"32128","Port Orange","FL","29.080251","-81.045962","-5","1" +"32129","Port Orange","FL","29.022729","-81.172169","-5","1" +"32130","De Leon Springs","FL","29.140657","-81.34497","-5","1" +"32131","East Palatka","FL","29.668112","-81.59005","-5","1" +"32132","Edgewater","FL","28.982714","-80.911","-5","1" +"32133","Eastlake Weir","FL","29.008805","-81.909445","-5","1" +"32134","Fort McCoy","FL","29.401523","-81.83636","-5","1" +"32135","Palm Coast","FL","29.466085","-81.282815","-5","1" +"32136","Flagler Beach","FL","29.47033","-81.13316","-5","1" +"32137","Palm Coast","FL","29.581683","-81.21645","-5","1" +"32138","Grandin","FL","29.727276","-81.9205","-5","1" +"32139","Georgetown","FL","29.385225","-81.61052","-5","1" +"32140","Florahome","FL","29.765329","-81.85602","-5","1" +"32141","Edgewater","FL","28.944915","-80.89524","-5","1" +"32142","Palm Coast","FL","29.466085","-81.282815","-5","1" +"32145","Hastings","FL","29.656806","-81.46122","-5","1" +"32147","Hollister","FL","29.634649","-81.80743","-5","1" +"32148","Interlachen","FL","29.640791","-81.88648","-5","1" +"32149","Interlachen","FL","29.58203","-81.744852","-5","1" +"32151","Flagler Beach","FL","29.466085","-81.282815","-5","1" +"32157","Lake Como","FL","29.467357","-81.57164","-5","1" +"32158","Lady Lake","FL","28.811078","-81.653642","-5","1" +"32159","Lady Lake","FL","28.930573","-81.93806","-5","1" +"32160","Lake Geneva","FL","29.768321","-81.990729","-5","1" +"32162","The Villages","FL","28.945246","-81.987609","-5","1" +"32164","Palm Coast","FL","29.499591","-81.22328","-5","1" +"32168","New Smyrna Beach","FL","29.016897","-80.95736","-5","1" +"32169","New Smyrna Beach","FL","28.998887","-80.87561","-5","1" +"32170","New Smyrna Beach","FL","29.022729","-81.172169","-5","1" +"32173","Ormond Beach","FL","29.022729","-81.172169","-5","1" +"32174","Ormond Beach","FL","29.284924","-81.10296","-5","1" +"32175","Ormond Beach","FL","29.022729","-81.172169","-5","1" +"32176","Ormond Beach","FL","29.316606","-81.05611","-5","1" +"32177","Palatka","FL","29.666218","-81.67401","-5","1" +"32178","Palatka","FL","29.644306","-81.668593","-5","1" +"32179","Ocklawaha","FL","29.071931","-81.89073","-5","1" +"32180","Pierson","FL","29.231366","-81.45095","-5","1" +"32181","Pomona Park","FL","29.488583","-81.6088","-5","1" +"32182","Orange Springs","FL","29.493034","-81.96523","-5","1" +"32183","Ocklawaha","FL","29.084013","-81.8349","-5","1" +"32185","Putnam Hall","FL","29.740034","-81.95858","-5","1" +"32187","San Mateo","FL","29.589748","-81.57009","-5","1" +"32189","Satsuma","FL","29.556365","-81.64433","-5","1" +"32190","Seville","FL","29.332109","-81.50008","-5","1" +"32192","Sparr","FL","29.326821","-82.104632","-5","1" +"32193","Welaka","FL","29.476035","-81.66331","-5","1" +"32195","Weirsdale","FL","29.003387","-81.89262","-5","1" +"32198","Daytona Beach","FL","29.022729","-81.172169","-5","1" +"32201","Jacksonville","FL","30.389438","-81.680806","-5","1" +"32202","Jacksonville","FL","30.328539","-81.65101","-5","1" +"32203","Jacksonville","FL","30.32281","-81.547044","-5","1" +"32204","Jacksonville","FL","30.323806","-81.68174","-5","1" +"32205","Jacksonville","FL","30.307439","-81.72044","-5","1" +"32206","Jacksonville","FL","30.351006","-81.64664","-5","1" +"32207","Jacksonville","FL","30.294389","-81.6374","-5","1" +"32208","Jacksonville","FL","30.392888","-81.67933","-5","1" +"32209","Jacksonville","FL","30.354588","-81.69113","-5","1" +"32210","Jacksonville","FL","30.268572","-81.73987","-5","1" +"32211","Jacksonville","FL","30.333022","-81.586","-5","1" +"32212","Jacksonville","FL","30.222683","-81.70165","-5","1" +"32214","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32215","Jacksonville","FL","30.23289","-81.91485","-5","1" +"32216","Jacksonville","FL","30.28374","-81.58359","-5","1" +"32217","Jacksonville","FL","30.24354","-81.62098","-5","1" +"32218","Jacksonville","FL","30.449096","-81.65651","-5","1" +"32219","Jacksonville","FL","30.411564","-81.76653","-5","1" +"32220","Jacksonville","FL","30.329588","-81.80865","-5","1" +"32221","Jacksonville","FL","30.292631","-81.80502","-5","1" +"32222","Jacksonville","FL","30.230272","-81.81255","-5","1" +"32223","Jacksonville","FL","30.159091","-81.63073","-5","1" +"32224","Jacksonville","FL","30.284511","-81.47043","-5","1" +"32225","Jacksonville","FL","30.348585","-81.49965","-5","1" +"32226","Jacksonville","FL","30.453405","-81.52551","-5","1" +"32227","Jacksonville","FL","30.383023","-81.41049","-5","1" +"32228","Jacksonville","FL","30.38239","-81.436859","-5","1" +"32229","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32230","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32231","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32232","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32233","Atlantic Beach","FL","30.343407","-81.40949","-5","1" +"32234","Jacksonville","FL","30.226463","-81.98364","-5","1" +"32235","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32236","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32237","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32238","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32239","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32240","Jacksonville Beach","FL","30.34494","-81.683107","-5","1" +"32241","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32244","Jacksonville","FL","30.222489","-81.74894","-5","1" +"32245","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32246","Jacksonville","FL","30.296911","-81.52228","-5","1" +"32247","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32250","Jacksonville Beach","FL","30.284641","-81.39844","-5","1" +"32254","Jacksonville","FL","30.336038","-81.72509","-5","1" +"32255","Jacksonville","FL","30.287041","-81.389305","-5","1" +"32256","Jacksonville","FL","30.206922","-81.54604","-5","1" +"32257","Jacksonville","FL","30.192434","-81.60597","-5","1" +"32258","Jacksonville","FL","30.148209","-81.56882","-5","1" +"32259","Jacksonville","FL","30.092346","-81.60274","-5","1" +"32260","Jacksonville","FL","29.937673","-81.420603","-5","1" +"32266","Neptune Beach","FL","30.316641","-81.40308","-5","1" +"32267","Jacksonville","FL","30.34494","-81.683107","-5","1" +"32276","Jacksonville","FL","30.325739","-81.659017","-5","1" +"32277","Jacksonville","FL","30.364339","-81.59087","-5","1" +"32301","Tallahassee","FL","30.431283","-84.26903","-5","1" +"32302","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32303","Tallahassee","FL","30.486061","-84.31528","-5","1" +"32304","Tallahassee","FL","30.446766","-84.32394","-5","1" +"32305","Wakulla Springs","FL","30.130775","-84.406629","-5","1" +"32306","Tallahassee","FL","30.442499","-84.29855","-5","1" +"32307","Tallahassee","FL","30.42565","-84.287749","-5","1" +"32308","Tallahassee","FL","30.531677","-84.16049","-5","1" +"32309","Miccosukee Cpo","FL","30.514599","-84.188446","-5","1" +"32310","Tallahassee","FL","30.400318","-84.34803","-5","1" +"32311","Tallahassee","FL","30.403146","-84.18841","-5","1" +"32312","Tallahassee","FL","30.554434","-84.25979","-5","1" +"32313","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32314","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32315","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32316","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32317","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32320","Apalachicola","FL","29.71877","-85.02704","-5","1" +"32321","Bristol","FL","30.36007","-84.97668","-5","1" +"32322","Carrabelle","FL","29.912584","-84.6407","-5","1" +"32323","Lanark Village","FL","29.879559","-84.60134","-5","1" +"32324","Chattahoochee","FL","30.687983","-84.8218","-5","1" +"32326","Crawfordville","FL","30.183372","-84.34906","-5","1" +"32327","Crawfordville","FL","30.194939","-84.35533","-5","1" +"32328","Eastpoint","FL","29.825252","-84.89247","-5","1" +"32329","Apalachicola","FL","29.745526","-85.023947","-5","1" +"32330","Greensboro","FL","30.571364","-84.74346","-5","1" +"32331","Greenville","FL","30.442203","-83.65112","-5","1" +"32332","Gretna","FL","30.616479","-84.66292","-5","1" +"32333","Havana","FL","30.607352","-84.41376","-5","1" +"32334","Hosford","FL","30.381958","-84.77767","-5","1" +"32335","Sumatra","FL","30.060351","-85.04477","-5","1" +"32336","Lamont","FL","30.416739","-83.8239","-5","1" +"32337","Lloyd","FL","30.478502","-84.02083","-5","1" +"32340","Madison","FL","30.476181","-83.40303","-5","1" +"32341","Madison","FL","30.47756","-83.391393","-5","1" +"32342","Midway","FL","30.496047","-84.483258","-5","1" +"32343","Midway","FL","30.494878","-84.46259","-5","1" +"32344","Monticello","FL","30.530854","-83.88017","-5","1" +"32345","Monticello","FL","30.342161","-83.840177","-5","1" +"32346","Panacea","FL","29.983931","-84.38798","-5","1" +"32347","Perry","FL","30.080602","-83.58119","-5","1" +"32348","Perry","FL","29.966454","-83.659371","-5","1" +"32349","Perry","FL","30.100578","-83.578106","-5","1" +"32350","Pinetta","FL","30.594145","-83.32545","-5","1" +"32351","Quincy","FL","30.573563","-84.6147","-5","1" +"32352","Mount Pleasant","FL","30.665715","-84.75363","-5","1" +"32353","Quincy","FL","30.549676","-84.606864","-5","1" +"32355","Saint Marks","FL","30.162414","-84.20923","-5","1" +"32356","Salem","FL","29.900822","-83.42088","-5","1" +"32357","Shady Grove","FL","30.28163","-83.63082","-5","1" +"32358","Sopchoppy","FL","30.029899","-84.50595","-5","1" +"32359","Steinhatchee","FL","29.673459","-83.38416","-5","1" +"32360","Telogia","FL","30.184365","-84.88355","-5","1" +"32361","Wacissa","FL","30.357761","-83.98882","-5","1" +"32362","Woodville","FL","30.319263","-84.267397","-5","1" +"32395","Tallahassee","FL","30.479347","-84.346204","-5","1" +"32399","Tallahassee","FL","30.420146","-84.23331","-5","1" +"32401","Panama City","FL","30.161901","-85.65297","-6","1" +"32402","Panama City","FL","30.234451","-85.692035","-5","1" +"32403","Panama City","FL","30.068188","-85.60975","-6","1" +"32404","Panama City","FL","30.188585","-85.56392","-6","1" +"32405","Panama City","FL","30.195424","-85.66458","-6","1" +"32406","Panama City","FL","30.234451","-85.692035","-5","1" +"32407","Panama City Beach","FL","30.196771","-85.81279","-6","1" +"32408","Panama City","FL","30.154621","-85.76367","-6","1" +"32409","Panama City","FL","30.330553","-85.65413","-6","1" +"32410","Mexico Beach","FL","29.945008","-85.41461","-6","1" +"32411","Panama City","FL","30.234451","-85.692035","-5","1" +"32412","Panama City","FL","30.234451","-85.692035","-5","1" +"32413","Panama City Beach","FL","30.252616","-85.90413","-6","1" +"32417","Panama City","FL","30.243832","-85.916988","-6","1" +"32420","Alford","FL","30.641154","-85.37542","-6","1" +"32421","Altha","FL","30.5403","-85.18229","-6","1" +"32422","Argyle","FL","30.716494","-86.03889","-6","1" +"32423","Bascom","FL","30.959504","-85.05644","-6","1" +"32424","Blountstown","FL","30.42007","-85.07299","-6","1" +"32425","Bonifay","FL","30.838337","-85.67495","-6","1" +"32426","Campbellton","FL","30.955359","-85.38288","-6","1" +"32427","Caryville","FL","30.821603","-85.806","-6","1" +"32428","Chipley","FL","30.636228","-85.5775","-6","1" +"32430","Clarksville","FL","30.438819","-85.24381","-6","1" +"32431","Cottondale","FL","30.779196","-85.39371","-6","1" +"32432","Cypress","FL","30.713868","-85.0779","-6","1" +"32433","Defuniak Springs","FL","30.747244","-86.14665","-6","1" +"32434","Mossy Head","FL","30.762486","-86.342683","-6","1" +"32435","Defuniak Springs","FL","30.603777","-86.12111","-6","1" +"32436","Wewahitchka","FL","30.110171","-85.198431","-6","1" +"32437","Ebro","FL","30.443152","-85.88079","-6","1" +"32438","Fountain","FL","30.488955","-85.41673","-6","1" +"32439","Freeport","FL","30.482838","-86.1675","-6","1" +"32440","Graceville","FL","30.935306","-85.52171","-6","1" +"32442","Grand Ridge","FL","30.698517","-85.01619","-6","1" +"32443","Greenwood","FL","30.860528","-85.11142","-6","1" +"32444","Lynn Haven","FL","30.239849","-85.64577","-6","1" +"32445","Malone","FL","30.961401","-85.16919","-6","1" +"32446","Marianna","FL","30.804698","-85.2206","-6","1" +"32447","Marianna","FL","30.759353","-85.25712","-6","1" +"32448","Marianna","FL","30.675635","-85.23283","-6","1" +"32449","Kinard","FL","30.283088","-85.21892","-6","1" +"32452","Noma","FL","30.849972","-85.768022","-6","1" +"32454","Point Washington","FL","30.603777","-86.12111","-6","1" +"32455","Ponce De Leon","FL","30.657214","-85.96035","-6","1" +"32456","Port Saint Joe","FL","29.846517","-85.32792","-5","1" +"32457","Port Saint Joe","FL","29.902484","-85.242169","-6","1" +"32459","Santa Rosa Beach","FL","30.361248","-86.18759","-6","1" +"32460","Sneads","FL","30.735645","-84.94563","-6","1" +"32461","Sunnyside","FL","30.252531","-85.942389","-6","1" +"32462","Vernon","FL","30.563809","-85.82357","-6","1" +"32463","Wausau","FL","30.631345","-85.58981","-6","1" +"32464","Westville","FL","30.892936","-85.93988","-6","1" +"32465","Wewahitchka","FL","30.045471","-85.22822","-6","1" +"32466","Youngstown","FL","30.373845","-85.52891","-6","1" +"32476","Lake Mary","FL","28.773699","-81.344414","-5","1" +"32478","Chipley","FL","30.778182","-85.53832","-6","1" +"32501","Pensacola","FL","30.420997","-87.22305","-6","1" +"32502","Pensacola","FL","30.474288","-87.225691","-6","1" +"32503","Pensacola","FL","30.447997","-87.20727","-6","1" +"32504","Pensacola","FL","30.48787","-87.18937","-6","1" +"32505","Pensacola","FL","30.441994","-87.25472","-6","1" +"32506","Pensacola","FL","30.408807","-87.31919","-6","1" +"32507","Pensacola","FL","30.360887","-87.33451","-6","1" +"32508","Pensacola","FL","30.355477","-87.29035","-6","1" +"32509","Pensacola","FL","30.464324","-87.340262","-6","1" +"32511","Pensacola","FL","30.61428","-87.275772","-6","1" +"32512","Pensacola","FL","30.394327","-87.299129","-6","1" +"32513","Pensacola","FL","30.557064","-87.259592","-6","1" +"32514","Pensacola","FL","30.527195","-87.21485","-6","1" +"32516","Pensacola","FL","30.61428","-87.275772","-6","1" +"32520","Pensacola","FL","30.412377","-87.203543","-6","1" +"32521","Pensacola","FL","30.61428","-87.275772","-6","1" +"32522","Pensacola","FL","30.61428","-87.275772","-6","1" +"32523","Pensacola","FL","30.61428","-87.275772","-6","1" +"32524","Pensacola","FL","30.61428","-87.275772","-6","1" +"32526","Pensacola","FL","30.479002","-87.31996","-6","1" +"32530","Bagdad","FL","30.598564","-87.031496","-6","1" +"32531","Baker","FL","30.8752","-86.68607","-6","1" +"32533","Cantonment","FL","30.600993","-87.31979","-6","1" +"32534","Pensacola","FL","30.526345","-87.27734","-6","1" +"32535","Century","FL","30.969066","-87.30604","-6","1" +"32536","Crestview","FL","30.760184","-86.58533","-6","1" +"32537","Milligan","FL","30.741965","-86.655208","-6","1" +"32538","Paxton","FL","30.970853","-86.311093","-6","1" +"32539","Crestview","FL","30.757479","-86.51088","-6","1" +"32540","Destin","FL","30.661155","-86.594479","-6","1" +"32541","Destin","FL","30.391795","-86.4338","-6","1" +"32542","Eglin AFB","FL","30.457156","-86.55081","-6","1" +"32544","Hurlburt Field","FL","30.464755","-86.64643","-6","1" +"32546","Myrtle Grove","FL","30.409264","-87.292755","-6","1" +"32547","Fort Walton Beach","FL","30.447248","-86.62113","-6","1" +"32548","Fort Walton Beach","FL","30.414932","-86.61992","-6","1" +"32549","Fort Walton Beach","FL","30.661155","-86.594479","-6","1" +"32550","Miramar Beach","FL","30.381934","-86.359508","-6","1" +"32559","Pensacola","FL","30.356287","-87.277307","-6","1" +"32560","Gonzalez","FL","30.581825","-87.292918","-6","1" +"32561","Gulf Breeze","FL","30.375469","-87.09013","-6","1" +"32562","Gulf Breeze","FL","30.659159","-87.04972","-6","1" +"32563","Harold","FL","30.659159","-87.04972","-6","1" +"32564","Holt","FL","30.717437","-86.77075","-6","1" +"32565","Jay","FL","30.902015","-87.13267","-6","1" +"32566","Gulf Breeze","FL","30.435069","-86.89025","-6","1" +"32567","Laurel Hill","FL","30.945123","-86.43749","-6","1" +"32568","McDavid","FL","30.878449","-87.47861","-6","1" +"32569","Mary Esther","FL","30.409902","-86.71497","-5","1" +"32570","Milton","FL","30.70969","-87.01098","-6","1" +"32571","Milton","FL","30.627637","-87.16724","-6","1" +"32572","Milton","FL","30.659159","-87.04972","-6","1" +"32573","Pensacola","FL","30.61428","-87.275772","-6","1" +"32574","Pensacola","FL","30.61428","-87.275772","-6","1" +"32575","Pensacola","FL","30.61428","-87.275772","-6","1" +"32576","Pensacola","FL","30.61428","-87.275772","-6","1" +"32577","Molino","FL","30.743945","-87.34872","-6","1" +"32578","Niceville","FL","30.500901","-86.45335","-5","1" +"32579","Shalimar","FL","30.444975","-86.57331","-6","1" +"32580","Valparaiso","FL","30.507047","-86.49702","-6","1" +"32581","Pensacola","FL","30.61428","-87.275772","-6","1" +"32582","Pensacola","FL","30.61428","-87.275772","-6","1" +"32583","Milton","FL","30.58149","-87.00178","-6","1" +"32588","Niceville","FL","30.661155","-86.594479","-6","1" +"32589","Pensacola","FL","30.61428","-87.275772","-6","1" +"32590","Pensacola","FL","30.61428","-87.275772","-6","1" +"32591","Pensacola","FL","30.61428","-87.275772","-6","1" +"32592","Pensacola","FL","30.61428","-87.275772","-6","1" +"32593","Pensacola","FL","30.61428","-87.275772","-6","1" +"32594","Pensacola","FL","30.61428","-87.275772","-6","1" +"32595","Pensacola","FL","30.61428","-87.275772","-6","1" +"32596","Pensacola","FL","30.61428","-87.275772","-6","1" +"32597","Pensacola","FL","30.529739","-87.275693","-6","1" +"32598","Pensacola","FL","30.61428","-87.275772","-6","1" +"32601","Gainesville","FL","29.653195","-82.3244","-5","1" +"32602","Gainesville","FL","29.629887","-82.396567","-5","1" +"32603","Gainesville","FL","29.653145","-82.3469","-5","1" +"32604","Gainesville","FL","29.573293","-82.397904","-5","1" +"32605","Gainesville","FL","29.676006","-82.36889","-5","1" +"32606","Gainesville","FL","29.681426","-82.41502","-5","1" +"32607","Gainesville","FL","29.646189","-82.39658","-5","1" +"32608","Gainesville","FL","29.611545","-82.3941","-5","1" +"32609","Gainesville","FL","29.713911","-82.29591","-5","1" +"32610","Gainesville","FL","29.681312","-82.353862","-5","1" +"32611","Gainesville","FL","29.681312","-82.353862","-5","1" +"32612","Gainesville","FL","29.681312","-82.353862","-5","1" +"32613","Gainesville","FL","29.681312","-82.353862","-5","1" +"32614","Gainesville","FL","29.681312","-82.353862","-5","1" +"32615","Alachua","FL","29.801949","-82.48872","-5","1" +"32616","Alachua","FL","29.790674","-82.49351","-5","1" +"32617","Anthony","FL","29.315961","-82.10092","-5","1" +"32618","Archer","FL","29.517277","-82.54518","-5","1" +"32619","Bell","FL","29.764553","-82.87062","-5","1" +"32621","Bronson","FL","29.447069","-82.60452","-5","1" +"32622","Brooker","FL","29.896156","-82.30358","-5","1" +"32625","Cedar Key","FL","29.178171","-83.02243","-5","1" +"32626","Chiefland","FL","29.453178","-82.86837","-5","1" +"32627","Gainesville","FL","29.681312","-82.353862","-5","1" +"32628","Cross City","FL","29.630964","-83.1148","-5","1" +"32631","Earleton","FL","29.730413","-82.097095","-5","1" +"32633","Evinston","FL","29.681312","-82.353862","-5","1" +"32634","Fairfield","FL","29.35089","-82.27648","-5","1" +"32635","Gainesville","FL","29.681312","-82.353862","-5","1" +"32638","Trenton","FL","29.622568","-82.808642","-5","1" +"32639","Gulf Hammock","FL","29.231843","-82.72965","-5","1" +"32640","Hawthorne","FL","29.601599","-82.0309","-5","1" +"32641","Gainesville","FL","29.648594","-82.28621","-5","1" +"32643","High Springs","FL","29.823616","-82.60407","-5","1" +"32644","Chiefland","FL","29.460221","-82.855334","-5","1" +"32648","Horseshoe Beach","FL","29.458513","-83.27604","-5","1" +"32653","Gainesville","FL","29.735832","-82.39008","-5","1" +"32654","Island Grove","FL","29.459973","-82.10819","-5","1" +"32655","High Springs","FL","29.817457","-82.60064","-5","1" +"32656","Keystone Heights","FL","29.788679","-82.00421","-5","1" +"32658","La Crosse","FL","29.845122","-82.39845","-5","1" +"32662","Lochloosa","FL","29.514298","-82.09829","-5","1" +"32663","Lowell","FL","29.342404","-82.212649","-5","1" +"32664","McIntosh","FL","29.450353","-82.22069","-5","1" +"32666","Melrose","FL","29.733375","-82.01048","-5","1" +"32667","Micanopy","FL","29.502067","-82.27775","-5","1" +"32668","Morriston","FL","29.282158","-82.51776","-5","1" +"32669","Newberry","FL","29.640613","-82.59446","-5","1" +"32680","Old Town","FL","29.643244","-82.99026","-5","1" +"32681","Orange Lake","FL","29.425291","-82.2158","-5","1" +"32683","Otter Creek","FL","29.319173","-82.77965","-5","1" +"32686","Reddick","FL","29.364039","-82.23483","-5","1" +"32692","Suwannee","FL","29.330426","-83.14401","-5","1" +"32693","Trenton","FL","29.598935","-82.82752","-5","1" +"32694","Waldo","FL","29.789597","-82.1621","-5","1" +"32696","Williston","FL","29.369207","-82.49831","-5","1" +"32697","Worthington Springs","FL","29.931204","-82.42643","-5","1" +"32699","Newberry","FL","29.636632","-82.611304","-5","1" +"32701","Altamonte Springs","FL","28.666249","-81.36796","-5","1" +"32702","Altoona","FL","29.046215","-81.64043","-5","1" +"32703","Apopka","FL","28.658395","-81.50319","-5","1" +"32704","Apopka","FL","28.566338","-81.260818","-5","1" +"32706","Cassadaga","FL","28.965591","-81.23654","-5","1" +"32707","Casselberry","FL","28.665125","-81.31772","-5","1" +"32708","Winter Springs","FL","28.683408","-81.28151","-5","1" +"32709","Christmas","FL","28.513011","-80.99418","-5","1" +"32710","Clarcona","FL","28.566338","-81.260818","-5","1" +"32712","Apopka","FL","28.713173","-81.52359","-5","1" +"32713","Debary","FL","28.888595","-81.31212","-5","1" +"32714","Altamonte Springs","FL","28.663913","-81.41112","-5","1" +"32715","Altamonte Springs","FL","28.744752","-81.22328","-5","1" +"32716","Altamonte Springs","FL","28.744752","-81.22328","-5","1" +"32718","Casselberry","FL","28.744752","-81.22328","-5","1" +"32719","Winter Springs","FL","28.744752","-81.22328","-5","1" +"32720","Deland","FL","29.021782","-81.33352","-5","1" +"32721","Deland","FL","28.997288","-81.299521","-5","1" +"32722","Glenwood","FL","29.022729","-81.172169","-5","1" +"32724","Deland","FL","29.039757","-81.27927","-5","1" +"32725","Deltona","FL","28.902426","-81.24515","-5","1" +"32726","Eustis","FL","28.850617","-81.68034","-5","1" +"32727","Eustis","FL","28.855517","-81.674147","-5","1" +"32728","Deltona","FL","29.022729","-81.172169","-5","1" +"32730","Casselberry","FL","28.653875","-81.34387","-5","1" +"32732","Geneva","FL","28.746588","-81.10985","-5","1" +"32733","Goldenrod","FL","28.613308","-81.258108","-5","1" +"32735","Grand Island","FL","28.893559","-81.74343","-5","1" +"32736","Eustis","FL","28.895482","-81.5228","-5","1" +"32738","Deltona","FL","28.910383","-81.18764","-5","1" +"32739","Deltona","FL","29.022729","-81.172169","-5","1" +"32744","Lake Helen","FL","28.985274","-81.23495","-5","1" +"32745","Heathrow","FL","28.77368","-81.390498","-5","1" +"32746","Lake Mary","FL","28.758133","-81.33992","-5","1" +"32747","Lake Monroe","FL","28.827219","-81.332888","-5","1" +"32750","Longwood","FL","28.703674","-81.35384","-5","1" +"32751","Maitland","FL","28.628359","-81.35942","-5","1" +"32752","Longwood","FL","28.744752","-81.22328","-5","1" +"32754","Mims","FL","28.707648","-80.89049","-5","1" +"32756","Mount Dora","FL","28.811078","-81.653642","-5","1" +"32757","Mount Dora","FL","28.786272","-81.64475","-5","1" +"32759","Oak Hill","FL","28.868986","-80.85374","-5","1" +"32762","Oviedo","FL","28.744752","-81.22328","-5","1" +"32763","Orange City","FL","28.945857","-81.30512","-5","1" +"32764","Osteen","FL","28.834172","-81.0948","-5","1" +"32765","Oviedo","FL","28.656375","-81.21026","-5","1" +"32766","Oviedo","FL","28.639275","-81.11906","-5","1" +"32767","Paisley","FL","29.008612","-81.50174","-5","1" +"32768","Plymouth","FL","28.698542","-81.569764","-5","1" +"32769","Oak Hill","FL","28.858941","-80.856373","-5","1" +"32771","Sanford","FL","28.803979","-81.28761","-5","1" +"32772","Sanford","FL","28.80722","-81.250236","-5","1" +"32773","Sanford","FL","28.769173","-81.27631","-5","1" +"32774","Orange City","FL","29.022729","-81.172169","-5","1" +"32775","Scottsmoor","FL","28.76507","-80.87315","-5","1" +"32776","Sorrento","FL","28.804039","-81.53689","-5","1" +"32777","Tangerine","FL","28.566338","-81.260818","-5","1" +"32778","Tavares","FL","28.799017","-81.73184","-5","1" +"32779","Longwood","FL","28.704874","-81.41711","-5","1" +"32780","Titusville","FL","28.564077","-80.81695","-5","1" +"32781","Titusville","FL","28.306726","-80.686159","-5","1" +"32782","Titusville","FL","28.306726","-80.686159","-5","1" +"32783","Titusville","FL","28.306726","-80.686159","-5","1" +"32784","Umatilla","FL","28.948549","-81.70621","-5","1" +"32789","Winter Park","FL","28.598677","-81.35594","-5","1" +"32790","Winter Park","FL","28.566338","-81.260818","-5","1" +"32791","Longwood","FL","28.744752","-81.22328","-5","1" +"32792","Winter Park","FL","28.607077","-81.30606","-5","1" +"32793","Winter Park","FL","28.566338","-81.260818","-5","1" +"32794","Maitland","FL","28.566338","-81.260818","-5","1" +"32795","Lake Mary","FL","28.744752","-81.22328","-5","1" +"32796","Titusville","FL","28.623371","-80.84123","-5","1" +"32798","Zellwood","FL","28.716923","-81.5754","-5","1" +"32799","Mid Florida","FL","28.744752","-81.22328","-5","1" +"32801","Orlando","FL","28.541879","-81.37446","-5","1" +"32802","Orlando","FL","28.519024","-81.343903","-5","1" +"32803","Orlando","FL","28.557579","-81.35244","-5","1" +"32804","Orlando","FL","28.577723","-81.3931","-5","1" +"32805","Orlando","FL","28.53028","-81.40089","-5","1" +"32806","Orlando","FL","28.51483","-81.36054","-5","1" +"32807","Orlando","FL","28.546897","-81.30774","-5","1" +"32808","Orlando","FL","28.576028","-81.44369","-5","1" +"32809","Orlando","FL","28.463482","-81.38814","-5","1" +"32810","Orlando","FL","28.619445","-81.42695","-5","1" +"32811","Orlando","FL","28.52493","-81.43994","-5","1" +"32812","Orlando","FL","28.493531","-81.32609","-5","1" +"32813","Orlando","FL","28.567928","-81.325842","-5","1" +"32814","Orlando","FL","28.566338","-81.260818","-5","1" +"32815","Orlando","FL","28.306726","-80.686159","-5","1" +"32816","Orlando","FL","28.566338","-81.260818","-5","1" +"32817","Orlando","FL","28.591692","-81.24717","-5","1" +"32818","Orlando","FL","28.583103","-81.48608","-5","1" +"32819","Orlando","FL","28.463509","-81.47514","-5","1" +"32820","Orlando","FL","28.561242","-81.10735","-5","1" +"32821","Orlando","FL","28.391608","-81.47345","-5","1" +"32822","Orlando","FL","28.494931","-81.28949","-5","1" +"32824","Orlando","FL","28.410872","-81.35898","-5","1" +"32825","Orlando","FL","28.543248","-81.2456","-5","1" +"32826","Orlando","FL","28.584177","-81.18634","-5","1" +"32827","Orlando","FL","28.425221","-81.30353","-5","1" +"32828","Orlando","FL","28.542132","-81.18404","-5","1" +"32829","Orlando","FL","28.491653","-81.26436","-5","1" +"32830","Orlando","FL","28.385549","-81.505894","-5","1" +"32831","Orlando","FL","28.458149","-81.13666","-5","1" +"32832","Orlando","FL","28.395979","-81.17653","-5","1" +"32833","Orlando","FL","28.511879","-81.09078","-5","1" +"32834","Orlando","FL","28.566338","-81.260818","-5","1" +"32835","Orlando","FL","28.528789","-81.47863","-5","1" +"32836","Orlando","FL","28.401151","-81.52488","-5","1" +"32837","Orlando","FL","28.385906","-81.41182","-5","1" +"32839","Orlando","FL","28.489758","-81.40625","-5","1" +"32853","Orlando","FL","28.566338","-81.260818","-5","1" +"32854","Orlando","FL","28.566338","-81.260818","-5","1" +"32855","Orlando","FL","28.550028","-81.104185","-5","1" +"32856","Orlando","FL","28.548379","-81.420092","-5","1" +"32857","Orlando","FL","28.566338","-81.260818","-5","1" +"32858","Orlando","FL","28.566338","-81.260818","-5","1" +"32859","Orlando","FL","28.442926","-81.402613","-5","1" +"32860","Orlando","FL","28.566338","-81.260818","-5","1" +"32861","Orlando","FL","28.566338","-81.260818","-5","1" +"32862","Orlando","FL","28.417368","-81.332763","-5","1" +"32867","Orlando","FL","28.566338","-81.260818","-5","1" +"32868","Orlando","FL","28.566338","-81.260818","-5","1" +"32869","Orlando","FL","28.566338","-81.260818","-5","1" +"32872","Orlando","FL","28.566338","-81.260818","-5","1" +"32877","Orlando","FL","28.566338","-81.260818","-5","1" +"32878","Orlando","FL","28.566338","-81.260818","-5","1" +"32886","Orlando","FL","28.566338","-81.260818","-5","1" +"32887","Orlando","FL","28.566338","-81.260818","-5","1" +"32889","Orlando","FL","28.566338","-81.260818","-5","1" +"32890","Orlando","FL","28.566338","-81.260818","-5","1" +"32891","Orlando","FL","28.566338","-81.260818","-5","1" +"32893","Orlando","FL","28.566338","-81.260818","-5","1" +"32897","Orlando","FL","28.566338","-81.260818","-5","1" +"32898","Orlando","FL","28.566338","-81.260818","-5","1" +"32899","Orlando","FL","28.306726","-80.686159","-5","1" +"32901","Melbourne","FL","28.077494","-80.61987","-5","1" +"32902","Melbourne","FL","28.306726","-80.686159","-5","1" +"32903","Indialantic","FL","28.103191","-80.57414","-5","1" +"32904","Melbourne","FL","28.073891","-80.67167","-5","1" +"32905","Palm Bay","FL","28.031689","-80.60014","-5","1" +"32906","Palm Bay","FL","28.067128","-80.650341","-5","1" +"32907","Palm Bay","FL","28.012241","-80.67729","-5","1" +"32908","Palm Bay","FL","27.958982","-80.68591","-5","1" +"32909","Palm Bay","FL","27.950975","-80.64679","-5","1" +"32910","Palm Bay","FL","28.306726","-80.686159","-5","1" +"32911","Palm Bay","FL","28.306726","-80.686159","-5","1" +"32912","Melbourne","FL","28.306726","-80.686159","-5","1" +"32919","Melbourne","FL","28.306726","-80.686159","-5","1" +"32920","Cape Canaveral","FL","28.390932","-80.60501","-5","1" +"32922","Cocoa","FL","28.366284","-80.74196","-5","1" +"32923","Cocoa","FL","28.427535","-80.828991","-5","1" +"32924","Cocoa","FL","28.306726","-80.686159","-5","1" +"32925","Patrick AFB","FL","28.235092","-80.60159","-5","1" +"32926","Cocoa","FL","28.392933","-80.79585","-5","1" +"32927","Cocoa","FL","28.47123","-80.79887","-5","1" +"32931","Cocoa Beach","FL","28.326985","-80.61119","-5","1" +"32932","Cocoa Beach","FL","28.306726","-80.686159","-5","1" +"32934","Melbourne","FL","28.137443","-80.69211","-5","1" +"32935","Melbourne","FL","28.13926","-80.65077","-5","1" +"32936","Melbourne","FL","28.306726","-80.686159","-5","1" +"32937","Satellite Beach","FL","28.172041","-80.59957","-5","1" +"32940","Melbourne","FL","28.21981","-80.69402","-5","1" +"32941","Melbourne","FL","27.924577","-80.523463","-5","1" +"32948","Fellsmere","FL","27.762118","-80.59472","-5","1" +"32949","Grant","FL","27.929103","-80.52879","-5","1" +"32950","Malabar","FL","27.974173","-80.56986","-5","1" +"32951","Melbourne Beach","FL","28.01514","-80.53518","-5","1" +"32952","Merritt Island","FL","28.350373","-80.6691","-5","1" +"32953","Merritt Island","FL","28.396301","-80.70198","-5","1" +"32954","Merritt Island","FL","28.22571","-80.673356","-5","1" +"32955","Rockledge","FL","28.308581","-80.72558","-5","1" +"32956","Rockledge","FL","28.329785","-80.732327","-5","1" +"32957","Roseland","FL","27.709049","-80.572557","-5","1" +"32958","Sebastian","FL","27.78783","-80.48266","-5","1" +"32959","Sharpes","FL","28.306726","-80.686159","-5","1" +"32960","Vero Beach","FL","27.636828","-80.40294","-5","1" +"32961","Vero Beach","FL","27.617473","-80.423083","-5","1" +"32962","Vero Beach","FL","27.582151","-80.39141","-5","1" +"32963","Vero Beach","FL","27.676376","-80.37248","-5","1" +"32964","Vero Beach","FL","27.709049","-80.572557","-5","1" +"32965","Vero Beach","FL","27.709049","-80.572557","-5","1" +"32966","Vero Beach","FL","27.645377","-80.51468","-5","1" +"32967","Vero Beach","FL","27.724801","-80.49708","-5","1" +"32968","Vero Beach","FL","27.594718","-80.45722","-5","1" +"32969","Vero Beach","FL","27.709049","-80.572557","-5","1" +"32970","Wabasso","FL","27.750176","-80.45364","-5","1" +"32971","Winter Beach","FL","27.709049","-80.572557","-5","1" +"32976","Sebastian","FL","27.877504","-80.51457","-5","1" +"32977","Winter Beach","FL","27.718868","-80.421607","-5","1" +"32978","Sebastian","FL","27.709049","-80.572557","-5","1" +"33001","Long Key","FL","24.841814","-80.79405","-5","1" +"33002","Hialeah","FL","25.558428","-80.458168","-5","1" +"33003","Florida City","FL","25.455229","-80.475479","-5","1" +"33004","Dania","FL","26.051916","-80.14526","-5","1" +"33008","Hallandale","FL","26.145724","-80.448254","-5","1" +"33009","Hallandale","FL","25.987069","-80.15004","-5","1" +"33010","Hialeah","FL","25.832374","-80.27874","-5","1" +"33011","Hialeah","FL","25.558428","-80.458168","-5","1" +"33012","Hialeah","FL","25.864773","-80.30069","-5","1" +"33013","Hialeah","FL","25.860373","-80.27174","-5","1" +"33014","Hialeah","FL","25.902172","-80.30732","-5","1" +"33015","Hialeah","FL","25.938687","-80.3182","-5","1" +"33016","Hialeah","FL","25.887983","-80.33284","-5","1" +"33017","Hialeah","FL","25.558428","-80.458168","-5","1" +"33018","Hialeah","FL","25.895557","-80.35509","-5","1" +"33019","Hollywood","FL","26.018967","-80.12231","-5","1" +"33020","Hollywood","FL","26.016984","-80.14925","-5","1" +"33021","Hollywood","FL","26.023634","-80.18922","-5","1" +"33022","Hollywood","FL","26.013368","-80.144217","-5","1" +"33023","Hollywood","FL","25.989119","-80.21318","-5","1" +"33024","Hollywood","FL","26.023567","-80.23851","-5","1" +"33025","Hollywood","FL","25.990494","-80.27326","-5","1" +"33026","Hollywood","FL","26.0267","-80.29443","-5","1" +"33027","Hollywood","FL","25.981409","-80.34491","-5","1" +"33028","Pembroke Pines","FL","26.018418","-80.34798","-5","1" +"33029","Hollywood","FL","26.006373","-80.40212","-5","1" +"33030","Homestead","FL","25.479438","-80.48687","-5","1" +"33031","Homestead","FL","25.526214","-80.49632","-5","1" +"33032","Homestead","FL","25.524528","-80.40521","-5","1" +"33033","Homestead","FL","25.487988","-80.42692","-5","1" +"33034","Homestead","FL","25.431506","-80.51382","-5","1" +"33035","Homestead","FL","25.457913","-80.44781","-5","1" +"33036","Islamorada","FL","24.91828","-80.63676","-5","1" +"33037","Key Largo","FL","25.137661","-80.40735","-5","1" +"33039","Homestead","FL","25.558428","-80.458168","-5","1" +"33040","Key West","FL","24.567593","-81.7566","-5","1" +"33041","Key West","FL","25.100957","-81.568862","-5","1" +"33042","Summerland Key","FL","24.663121","-81.48694","-5","1" +"33043","Big Pine Key","FL","24.675731","-81.34359","-5","1" +"33044","Sugarloaf Shores","FL","24.664649","-81.565319","-5","1" +"33045","Key West","FL","25.100957","-81.568862","-5","1" +"33047","West Little River","FL","25.859273","-80.242671","-5","1" +"33050","Marathon","FL","24.731758","-81.0278","-5","1" +"33051","Key Colony Beach","FL","24.72339","-81.020281","-5","1" +"33052","Marathon Shores","FL","24.723283","-81.063249","-5","1" +"33054","Opa Locka","FL","25.909039","-80.24945","-5","1" +"33055","Opa Locka","FL","25.94422","-80.2773","-5","1" +"33056","Opa Locka","FL","25.946754","-80.24962","-5","1" +"33058","Lake Lucerne","FL","25.968737","-80.262604","-5","1" +"33060","Pompano Beach","FL","26.232009","-80.12211","-5","1" +"33061","Pompano Beach","FL","26.253909","-80.134216","-5","1" +"33062","Pompano Beach","FL","26.236792","-80.09594","-5","1" +"33063","Pompano Beach","FL","26.251909","-80.21016","-5","1" +"33064","Pompano Beach","FL","26.279108","-80.11319","-5","1" +"33065","Pompano Beach","FL","26.272608","-80.25589","-5","1" +"33066","Pompano Beach","FL","26.253238","-80.17799","-5","1" +"33067","Pompano Beach","FL","26.3007","-80.22727","-5","1" +"33068","Pompano Beach","FL","26.21606","-80.21776","-5","1" +"33069","Pompano Beach","FL","26.22876","-80.15816","-5","1" +"33070","Tavernier","FL","25.006349","-80.53139","-5","1" +"33071","Pompano Beach","FL","26.242559","-80.26564","-5","1" +"33072","Pompano Beach","FL","26.233459","-80.092365","-5","1" +"33073","Pompano Beach","FL","26.305433","-80.18287","-5","1" +"33074","Pompano Beach","FL","26.145724","-80.448254","-5","1" +"33075","Pompano Beach","FL","26.145724","-80.448254","-5","1" +"33076","Pompano Beach","FL","26.30116","-80.2731","-5","1" +"33077","Pompano Beach","FL","26.145724","-80.448254","-5","1" +"33081","Hollywood","FL","26.145724","-80.448254","-5","1" +"33082","Pembroke Pines","FL","26.145724","-80.448254","-5","1" +"33083","Hollywood","FL","26.145724","-80.448254","-5","1" +"33084","Pembroke Pines","FL","26.289057","-80.129816","-5","1" +"33090","Homestead","FL","25.558428","-80.458168","-5","1" +"33092","Homestead","FL","25.558428","-80.458168","-5","1" +"33093","Pompano Beach","FL","26.145724","-80.448254","-5","1" +"33097","Pompano Beach","FL","26.145724","-80.448254","-5","1" +"33101","Miami","FL","25.779076","-80.19782","-5","1" +"33102","Miami","FL","25.558428","-80.458168","-5","1" +"33107","Miami","FL","25.558428","-80.458168","-5","1" +"33109","Miami Beach","FL","25.759474","-80.13907","-5","1" +"33110","Miami","FL","25.846874","-80.20827","-5","1" +"33111","Miami","FL","25.558428","-80.458168","-5","1" +"33114","Miami","FL","25.558428","-80.458168","-5","1" +"33116","Miami","FL","25.558428","-80.458168","-5","1" +"33119","Miami Beach","FL","25.784526","-80.131967","-5","1" +"33121","Miami","FL","25.558428","-80.458168","-5","1" +"33122","Miami","FL","25.799962","-80.31775","-5","1" +"33124","Miami","FL","25.558428","-80.458168","-5","1" +"33125","Miami","FL","25.782176","-80.23607","-5","1" +"33126","Miami","FL","25.777977","-80.29718","-5","1" +"33127","Miami","FL","25.813808","-80.2058","-5","1" +"33128","Miami","FL","25.777143","-80.20225","-5","1" +"33129","Miami","FL","25.757227","-80.20656","-5","1" +"33130","Miami","FL","25.768277","-80.20339","-5","1" +"33131","Miami","FL","25.767368","-80.1893","-5","1" +"33132","Miami","FL","25.784326","-80.18753","-5","1" +"33133","Miami","FL","25.730678","-80.2441","-5","1" +"33134","Miami","FL","25.753927","-80.27034","-5","1" +"33135","Miami","FL","25.766577","-80.23576","-5","1" +"33136","Miami","FL","25.786326","-80.2029","-5","1" +"33137","Miami","FL","25.817325","-80.19046","-5","1" +"33138","Miami","FL","25.853184","-80.18622","-5","1" +"33139","Miami Beach","FL","25.784276","-80.14126","-5","1" +"33140","Miami Beach","FL","25.814225","-80.13085","-5","1" +"33141","Miami Beach","FL","25.858573","-80.12973","-5","1" +"33142","Miami","FL","25.812625","-80.2369","-5","1" +"33143","Miami","FL","25.702929","-80.29642","-5","1" +"33144","Miami","FL","25.76226","-80.30839","-5","1" +"33145","Miami","FL","25.753177","-80.23327","-5","1" +"33146","Miami","FL","25.720728","-80.27255","-5","1" +"33147","Miami","FL","25.850124","-80.23773","-5","1" +"33148","Miami","FL","25.558428","-80.458168","-5","1" +"33149","Key Biscayne","FL","25.700966","-80.16195","-5","1" +"33150","Miami","FL","25.851974","-80.20566","-5","1" +"33151","Miami","FL","25.832074","-80.20942","-5","1" +"33152","Miami","FL","25.795476","-80.312873","-5","1" +"33153","Miami","FL","25.865523","-80.193619","-5","1" +"33154","Miami","FL","25.881391","-80.1276","-5","1" +"33155","Miami","FL","25.739011","-80.30685","-5","1" +"33156","Miami","FL","25.66558","-80.30688","-5","1" +"33157","Miami","FL","25.606583","-80.34859","-5","1" +"33158","Miami","FL","25.637132","-80.31641","-5","1" +"33159","Miami","FL","25.558428","-80.458168","-5","1" +"33160","North Miami Beach","FL","25.941535","-80.13861","-5","1" +"33161","Miami","FL","25.893372","-80.18164","-5","1" +"33162","Miami","FL","25.929571","-80.17839","-5","1" +"33163","Miami","FL","25.94497","-80.21452","-5","1" +"33164","Miami","FL","25.558428","-80.458168","-5","1" +"33165","Miami","FL","25.734828","-80.3583","-5","1" +"33166","Miami","FL","25.824725","-80.30476","-5","1" +"33167","Miami","FL","25.885739","-80.23264","-5","1" +"33168","Miami","FL","25.892185","-80.21032","-5","1" +"33169","Miami","FL","25.94267","-80.21276","-5","1" +"33170","Miami","FL","25.559785","-80.41664","-5","1" +"33172","Miami","FL","25.786634","-80.36151","-5","1" +"33173","Miami","FL","25.702429","-80.36184","-5","1" +"33174","Miami","FL","25.763044","-80.35919","-5","1" +"33175","Miami","FL","25.733204","-80.41197","-5","1" +"33176","Miami","FL","25.653431","-80.35999","-5","1" +"33177","Miami","FL","25.595983","-80.40234","-5","1" +"33178","Miami","FL","25.837696","-80.36947","-5","1" +"33179","Miami","FL","25.95872","-80.17941","-5","1" +"33180","Miami","FL","25.962069","-80.14465","-5","1" +"33181","Miami","FL","25.897372","-80.16048","-5","1" +"33182","Miami","FL","25.781127","-80.40467","-5","1" +"33183","Miami","FL","25.699968","-80.40811","-5","1" +"33184","Miami","FL","25.759184","-80.40773","-5","1" +"33185","Miami","FL","25.723173","-80.43995","-5","1" +"33186","Miami","FL","25.662292","-80.40947","-5","1" +"33187","Miami","FL","25.596234","-80.4765","-5","1" +"33188","Miami","FL","25.558428","-80.458168","-5","1" +"33189","Miami","FL","25.574834","-80.3467","-5","1" +"33190","Miami","FL","25.56071","-80.3494","-5","1" +"33192","Miami","FL","25.558428","-80.458168","-5","1" +"33193","Miami","FL","25.70028","-80.44721","-5","1" +"33194","Miami","FL","25.745549","-80.4651","-5","1" +"33195","Miami","FL","25.772876","-80.187019","-5","1" +"33196","Miami","FL","25.650232","-80.45925","-5","1" +"33197","Miami","FL","25.558428","-80.458168","-5","1" +"33199","Miami","FL","25.558428","-80.458168","-5","1" +"33201","Hollywood","FL","26.013768","-80.206869","-5","1" +"33231","Miami","FL","25.558428","-80.458168","-5","1" +"33233","Miami","FL","25.558428","-80.458168","-5","1" +"33234","Miami","FL","25.558428","-80.458168","-5","1" +"33238","Miami","FL","25.558428","-80.458168","-5","1" +"33239","Miami Beach","FL","25.558428","-80.458168","-5","1" +"33242","Miami","FL","25.558428","-80.458168","-5","1" +"33243","Miami","FL","25.558428","-80.458168","-5","1" +"33245","Miami","FL","25.558428","-80.458168","-5","1" +"33247","Miami","FL","25.558428","-80.458168","-5","1" +"33255","Miami","FL","25.558428","-80.458168","-5","1" +"33256","Miami","FL","25.558428","-80.458168","-5","1" +"33257","Miami","FL","25.558428","-80.458168","-5","1" +"33261","Miami","FL","25.558428","-80.458168","-5","1" +"33265","Miami","FL","25.558428","-80.458168","-5","1" +"33266","Miami","FL","25.558428","-80.458168","-5","1" +"33269","Miami","FL","25.558428","-80.458168","-5","1" +"33280","Miami","FL","25.558428","-80.458168","-5","1" +"33283","Miami","FL","25.558428","-80.458168","-5","1" +"33296","Miami","FL","25.558428","-80.458168","-5","1" +"33299","Miami","FL","25.558428","-80.458168","-5","1" +"33301","Fort Lauderdale","FL","26.121114","-80.13187","-5","1" +"33302","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33303","Fort Lauderdale","FL","26.196911","-80.095165","-5","1" +"33304","Fort Lauderdale","FL","26.137693","-80.12646","-5","1" +"33305","Fort Lauderdale","FL","26.153728","-80.12606","-5","1" +"33306","Fort Lauderdale","FL","26.165212","-80.11379","-5","1" +"33307","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33308","Fort Lauderdale","FL","26.191111","-80.10846","-5","1" +"33309","Fort Lauderdale","FL","26.185461","-80.17218","-5","1" +"33310","Fort Lauderdale","FL","26.144263","-80.206919","-5","1" +"33311","Fort Lauderdale","FL","26.13883","-80.16865","-5","1" +"33312","Fort Lauderdale","FL","26.094665","-80.17987","-5","1" +"33313","Fort Lauderdale","FL","26.148613","-80.22446","-5","1" +"33314","Fort Lauderdale","FL","26.067966","-80.22016","-5","1" +"33315","Fort Lauderdale","FL","26.094385","-80.15422","-5","1" +"33316","Fort Lauderdale","FL","26.101114","-80.12931","-5","1" +"33317","Fort Lauderdale","FL","26.113664","-80.22376","-5","1" +"33318","Fort Lauderdale","FL","26.11842","-80.251988","-5","1" +"33319","Fort Lauderdale","FL","26.183628","-80.22122","-5","1" +"33320","Fort Lauderdale","FL","26.162462","-80.25822","-5","1" +"33321","Fort Lauderdale","FL","26.211122","-80.2631","-5","1" +"33322","Fort Lauderdale","FL","26.150863","-80.27284","-5","1" +"33323","Fort Lauderdale","FL","26.156854","-80.31408","-5","1" +"33324","Fort Lauderdale","FL","26.110631","-80.27469","-5","1" +"33325","Fort Lauderdale","FL","26.112924","-80.32097","-5","1" +"33326","Weston","FL","26.112366","-80.37697","-5","1" +"33327","Weston","FL","26.120134","-80.41441","-5","1" +"33328","Fort Lauderdale","FL","26.062016","-80.27202","-5","1" +"33329","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33330","Fort Lauderdale","FL","26.05479","-80.31581","-5","1" +"33331","Fort Lauderdale","FL","26.056111","-80.36373","-5","1" +"33332","Fort Lauderdale","FL","26.049367","-80.40885","-5","1" +"33334","Fort Lauderdale","FL","26.182161","-80.13341","-5","1" +"33335","Fort Lauderdale","FL","26.089215","-80.335973","-5","1" +"33337","Fort Lauderdale","FL","26.129013","-80.260071","-5","1" +"33338","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33339","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33340","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33345","Fort Lauderdale","FL","26.165424","-80.29589","-5","1" +"33346","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33348","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33349","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33351","Fort Lauderdale","FL","26.179495","-80.27183","-5","1" +"33352","Pine Island Ridge","FL","26.094025","-80.273961","-5","1" +"33355","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33359","Fort Lauderdale","FL","26.145724","-80.448254","-5","1" +"33380","Winter Haven","FL","28.017179","-81.754949","-5","1" +"33388","Fort Lauderdale","FL","26.120714","-80.25326","-5","1" +"33394","Fort Lauderdale","FL","26.121364","-80.13916","-5","1" +"33401","West Palm Beach","FL","26.711192","-80.06043","-5","1" +"33402","West Palm Beach","FL","26.645895","-80.430269","-5","1" +"33403","West Palm Beach","FL","26.802139","-80.07032","-5","1" +"33404","West Palm Beach","FL","26.782114","-80.06528","-5","1" +"33405","West Palm Beach","FL","26.669744","-80.0585","-5","1" +"33406","West Palm Beach","FL","26.659294","-80.09118","-5","1" +"33407","West Palm Beach","FL","26.750991","-80.07296","-5","1" +"33408","North Palm Beach","FL","26.840684","-80.06312","-5","1" +"33409","West Palm Beach","FL","26.709575","-80.09443","-5","1" +"33410","West Palm Beach","FL","26.839588","-80.08824","-5","1" +"33411","West Palm Beach","FL","26.719596","-80.22077","-5","1" +"33412","West Palm Beach","FL","26.795367","-80.24044","-5","1" +"33413","West Palm Beach","FL","26.668944","-80.14721","-5","1" +"33414","West Palm Beach","FL","26.65671","-80.25377","-5","1" +"33415","West Palm Beach","FL","26.659344","-80.12704","-5","1" +"33416","West Palm Beach","FL","26.665394","-80.092864","-5","1" +"33417","West Palm Beach","FL","26.715596","-80.1262","-5","1" +"33418","West Palm Beach","FL","26.877984","-80.16052","-5","1" +"33419","West Palm Beach","FL","26.645895","-80.430269","-5","1" +"33420","West Palm Beach","FL","26.645895","-80.430269","-5","1" +"33421","West Palm Beach","FL","26.645895","-80.430269","-5","1" +"33422","West Palm Beach","FL","26.645895","-80.430269","-5","1" +"33424","Boynton Beach","FL","26.645895","-80.430269","-5","1" +"33425","Boynton Beach","FL","26.645895","-80.430269","-5","1" +"33426","Boynton Beach","FL","26.529581","-80.08226","-5","1" +"33427","Boca Raton","FL","26.375954","-80.10717","-5","1" +"33428","Boca Raton","FL","26.348354","-80.21841","-5","1" +"33429","Boca Raton","FL","26.645895","-80.430269","-5","1" +"33430","Belle Glade","FL","26.685125","-80.66279","-5","1" +"33431","Boca Raton","FL","26.381304","-80.09623","-5","1" +"33432","Boca Raton","FL","26.347305","-80.08552","-5","1" +"33433","Boca Raton","FL","26.347711","-80.15648","-5","1" +"33434","Boca Raton","FL","26.382408","-80.16699","-5","1" +"33435","Boynton Beach","FL","26.524549","-80.06321","-5","1" +"33436","Boynton Beach","FL","26.530144","-80.10461","-5","1" +"33437","Boynton Beach","FL","26.522249","-80.15031","-5","1" +"33438","Canal Point","FL","26.900359","-80.60368","-5","1" +"33439","Bryant","FL","26.645895","-80.430269","-5","1" +"33440","Clewiston","FL","26.714088","-80.9973","-5","1" +"33441","Deerfield Beach","FL","26.309657","-80.09541","-5","1" +"33442","Deerfield Beach","FL","26.309757","-80.14548","-5","1" +"33443","Deerfield Beach","FL","26.145724","-80.448254","-5","1" +"33444","Delray Beach","FL","26.460951","-80.07891","-5","1" +"33445","Delray Beach","FL","26.459571","-80.10582","-5","1" +"33446","Delray Beach","FL","26.452473","-80.16509","-5","1" +"33447","Delray Beach","FL","26.645895","-80.430269","-5","1" +"33448","Delray Beach","FL","26.645895","-80.430269","-5","1" +"33452","Lantana","FL","26.590609","-80.052663","-5","1" +"33454","Lake Worth","FL","26.645895","-80.430269","-5","1" +"33455","Hobe Sound","FL","27.076516","-80.14697","-5","1" +"33458","Jupiter","FL","26.928035","-80.11803","-5","1" +"33459","Lake Harbor","FL","26.645895","-80.430269","-5","1" +"33460","Lake Worth","FL","26.619695","-80.05676","-5","1" +"33461","Lake Worth","FL","26.621145","-80.08976","-5","1" +"33462","Lake Worth","FL","26.579714","-80.07437","-5","1" +"33463","Lake Worth","FL","26.609226","-80.12874","-5","1" +"33464","Lake Worth","FL","26.645895","-80.430269","-5","1" +"33465","Lake Worth","FL","26.628272","-80.132569","-5","1" +"33466","Lake Worth","FL","26.645895","-80.430269","-5","1" +"33467","Lake Worth","FL","26.601937","-80.17921","-5","1" +"33468","Jupiter","FL","26.645895","-80.430269","-5","1" +"33469","Jupiter","FL","26.968795","-80.0994","-5","1" +"33470","Loxahatchee","FL","26.751094","-80.30156","-5","1" +"33471","Moore Haven","FL","26.844989","-81.1105","-5","1" +"33474","Boynton Beach","FL","26.645895","-80.430269","-5","1" +"33475","Hobe Sound","FL","27.110182","-80.454196","-5","1" +"33476","Pahokee","FL","26.817786","-80.65425","-5","1" +"33477","Jupiter","FL","26.924709","-80.08119","-5","1" +"33478","Jupiter","FL","26.925835","-80.21526","-5","1" +"33480","Palm Beach","FL","26.715067","-80.03937","-5","1" +"33481","Boca Raton","FL","26.645895","-80.430269","-5","1" +"33482","Delray Beach","FL","26.645895","-80.430269","-5","1" +"33483","Delray Beach","FL","26.465051","-80.06517","-5","1" +"33484","Delray Beach","FL","26.458152","-80.1356","-5","1" +"33486","Boca Raton","FL","26.344955","-80.11226","-5","1" +"33487","Boca Raton","FL","26.409953","-80.08841","-5","1" +"33488","Boca Raton","FL","26.645895","-80.430269","-5","1" +"33493","South Bay","FL","26.663097","-80.71827","-5","1" +"33496","Boca Raton","FL","26.404353","-80.1627","-5","1" +"33497","Boca Raton","FL","26.645895","-80.430269","-5","1" +"33498","Boca Raton","FL","26.391346","-80.21824","-5","1" +"33499","Boca Raton","FL","26.645895","-80.430269","-5","1" +"33501","Brandon","FL","27.929731","-82.315058","-5","1" +"33503","Balm","FL","27.764761","-82.273409","-5","1" +"33509","Brandon","FL","28.119579","-82.451959","-5","1" +"33510","Brandon","FL","27.953801","-82.29748","-5","1" +"33511","Brandon","FL","27.911201","-82.2948","-5","1" +"33513","Bushnell","FL","28.663132","-82.14042","-5","1" +"33514","Center Hill","FL","28.654412","-81.98278","-5","1" +"33515","Fort Lauderdale","FL","26.092115","-80.163418","-5","1" +"33521","Coleman","FL","28.805331","-82.07371","-5","1" +"33523","Dade City","FL","28.433019","-82.19736","-5","1" +"33524","Crystal Springs","FL","28.182209","-82.152341","-5","1" +"33525","Dade City","FL","28.346914","-82.20293","-5","1" +"33526","Dade City","FL","28.310134","-82.247783","-5","1" +"33527","Dover","FL","27.98706","-82.21357","-5","1" +"33528","Lake Panasoffkee","FL","28.801617","-82.133869","-5","1" +"33530","Durant","FL","27.906823","-82.176749","-5","1" +"33534","Gibsonton","FL","27.837894","-82.37407","-5","1" +"33537","Lacoochee","FL","28.324796","-82.481766","-5","1" +"33538","Lake Panasoffkee","FL","28.835261","-82.14818","-5","1" +"33539","Zephyrhills","FL","28.21305","-82.16568","-5","1" +"33540","Zephyrhills","FL","28.235313","-82.16868","-5","1" +"33541","Zephyrhills","FL","28.234624","-82.20022","-5","1" +"33542","Zephyrhills","FL","28.238489","-82.181913","-5","1" +"33543","Zephyrhills","FL","28.187356","-82.31601","-5","1" +"33544","Zephyrhills","FL","28.26658","-82.34222","-5","1" +"33547","Lithia","FL","27.788498","-82.1508","-5","1" +"33548","Lutz","FL","27.871964","-82.438841","-5","1" +"33549","Lutz","FL","28.142694","-82.46629","-5","1" +"33550","Mango","FL","27.871964","-82.438841","-5","1" +"33556","Odessa","FL","28.143377","-82.59054","-5","1" +"33558","Land O' Lakes","FL","28.157704","-82.514615","-5","1" +"33559","Land O' Lakes","FL","28.156536","-82.415275","-5","1" +"33563","Plant City","FL","28.016971","-82.128584","-5","1" +"33564","Plant City","FL","28.029627","-82.134741","-5","1" +"33565","Plant City","FL","28.065552","-82.14506","-5","1" +"33566","Plant City","FL","28.013755","-82.11685","-5","1" +"33567","Plant City","FL","27.982949","-82.14539","-5","1" +"33568","Riverview","FL","27.871964","-82.438841","-5","1" +"33569","Riverview","FL","27.847802","-82.31799","-5","1" +"33570","Ruskin","FL","27.703801","-82.44385","-5","1" +"33571","Sun City Center","FL","27.720111","-82.453041","-5","1" +"33572","Apollo Beach","FL","27.771988","-82.41078","-5","1" +"33573","Sun City Center","FL","27.713353","-82.35965","-5","1" +"33574","Saint Leo","FL","28.334752","-82.269323","-5","1" +"33576","San Antonio","FL","28.331979","-82.28877","-5","1" +"33578","St. Leo","FL","28.331186","-82.252917","-5","1" +"33583","Seffner","FL","27.871964","-82.438841","-5","1" +"33584","Seffner","FL","27.987925","-82.28819","-5","1" +"33585","Sumterville","FL","28.754347","-82.06126","-5","1" +"33586","Sun City","FL","27.871964","-82.438841","-5","1" +"33587","Sydney","FL","27.871964","-82.438841","-5","1" +"33592","Thonotosassa","FL","28.077843","-82.29837","-5","1" +"33593","Trilby","FL","28.324796","-82.481766","-5","1" +"33594","Valrico","FL","27.911226","-82.24508","-5","1" +"33595","Valrico","FL","27.871964","-82.438841","-5","1" +"33597","Webster","FL","28.568393","-82.15053","-5","1" +"33598","Wimauma","FL","27.693924","-82.32758","-5","1" +"33599","Punta Gorda","FL","26.871443","-82.007115","-5","1" +"33601","Tampa","FL","27.996097","-82.582035","-5","1" +"33602","Tampa","FL","27.956149","-82.45723","-5","1" +"33603","Tampa","FL","27.984198","-82.4627","-5","1" +"33604","Tampa","FL","28.016846","-82.4566","-5","1" +"33605","Tampa","FL","27.963849","-82.43193","-5","1" +"33606","Tampa","FL","27.936799","-82.46911","-5","1" +"33607","Tampa","FL","27.963798","-82.49537","-5","1" +"33608","Tampa","FL","27.84343","-82.488413","-5","1" +"33609","Tampa","FL","27.943549","-82.50656","-5","1" +"33610","Tampa","FL","27.993498","-82.40914","-5","1" +"33611","Tampa","FL","27.891151","-82.50581","-5","1" +"33612","Tampa","FL","28.048595","-82.45171","-5","1" +"33613","Tampa","FL","28.077994","-82.44989","-5","1" +"33614","Tampa","FL","28.006247","-82.50632","-5","1" +"33615","Tampa","FL","28.005446","-82.57776","-5","1" +"33616","Tampa","FL","27.869251","-82.52226","-5","1" +"33617","Tampa","FL","28.039096","-82.39371","-5","1" +"33618","Tampa","FL","28.071502","-82.49392","-5","1" +"33619","Tampa","FL","27.94605","-82.37525","-5","1" +"33620","Tampa","FL","28.062961","-82.41314","-5","1" +"33621","Tampa","FL","27.855078","-82.52464","-5","1" +"33622","Tampa","FL","27.871964","-82.438841","-5","1" +"33623","Tampa","FL","27.871964","-82.438841","-5","1" +"33624","Tampa","FL","28.07506","-82.52355","-5","1" +"33625","Tampa","FL","28.069755","-82.55734","-5","1" +"33626","Tampa","FL","28.052799","-82.61135","-5","1" +"33629","Tampa","FL","27.92085","-82.50916","-5","1" +"33630","Tampa","FL","27.871964","-82.438841","-5","1" +"33631","Tampa","FL","27.871964","-82.438841","-5","1" +"33633","Tampa","FL","27.871964","-82.438841","-5","1" +"33634","Tampa","FL","28.005497","-82.54936","-5","1" +"33635","Tampa","FL","28.031088","-82.60593","-5","1" +"33637","Tampa","FL","28.038324","-82.36289","-5","1" +"33643","Tampa","FL","28.130402","-82.337751","-5","1" +"33647","Tampa","FL","28.127973","-82.36123","-5","1" +"33650","Tampa","FL","27.871964","-82.438841","-5","1" +"33651","Tampa","FL","27.871964","-82.438841","-5","1" +"33655","Tampa","FL","27.871964","-82.438841","-5","1" +"33659","Palm River-Clair Mel","FL","27.894362","-82.338911","-5","1" +"33660","Tampa","FL","27.871964","-82.438841","-5","1" +"33661","Tampa","FL","27.871964","-82.438841","-5","1" +"33662","Tampa","FL","27.871964","-82.438841","-5","1" +"33663","Tampa","FL","27.871964","-82.438841","-5","1" +"33664","Tampa","FL","27.871964","-82.438841","-5","1" +"33672","Tampa","FL","27.871964","-82.438841","-5","1" +"33673","Tampa","FL","27.871964","-82.438841","-5","1" +"33674","Tampa","FL","27.871964","-82.438841","-5","1" +"33675","Tampa","FL","27.871964","-82.438841","-5","1" +"33677","Tampa","FL","27.871964","-82.438841","-5","1" +"33679","Tampa","FL","27.871964","-82.438841","-5","1" +"33680","Tampa","FL","27.871964","-82.438841","-5","1" +"33681","Tampa","FL","27.871964","-82.438841","-5","1" +"33682","Tampa","FL","27.871964","-82.438841","-5","1" +"33684","Tampa","FL","27.871964","-82.438841","-5","1" +"33685","Tampa","FL","27.871964","-82.438841","-5","1" +"33686","Tampa","FL","27.871964","-82.438841","-5","1" +"33687","Tampa","FL","27.871964","-82.438841","-5","1" +"33688","Tampa","FL","27.871964","-82.438841","-5","1" +"33689","Tampa","FL","27.871964","-82.438841","-5","1" +"33690","Tampa","FL","27.871964","-82.438841","-5","1" +"33694","Tampa","FL","27.871964","-82.438841","-5","1" +"33697","Tampa","FL","27.871964","-82.438841","-5","1" +"33701","Saint Petersburg","FL","27.770955","-82.63931","-5","1" +"33702","Saint Petersburg","FL","27.843052","-82.6449","-5","1" +"33703","Saint Petersburg","FL","27.816977","-82.62795","-5","1" +"33704","Saint Petersburg","FL","27.796454","-82.63751","-5","1" +"33705","Saint Petersburg","FL","27.741306","-82.64349","-5","1" +"33706","Saint Petersburg","FL","27.741505","-82.75179","-5","1" +"33707","Saint Petersburg","FL","27.756505","-82.71764","-5","1" +"33708","Saint Petersburg","FL","27.811626","-82.79321","-5","1" +"33709","Saint Petersburg","FL","27.815953","-82.72865","-5","1" +"33710","Saint Petersburg","FL","27.788637","-82.72244","-5","1" +"33711","Saint Petersburg","FL","27.750655","-82.6882","-5","1" +"33712","Saint Petersburg","FL","27.745355","-82.66572","-5","1" +"33713","Saint Petersburg","FL","27.787904","-82.68039","-5","1" +"33714","Saint Petersburg","FL","27.817323","-82.67612","-5","1" +"33715","Saint Petersburg","FL","27.68301","-82.72096","-5","1" +"33716","Saint Petersburg","FL","27.874324","-82.64515","-5","1" +"33728","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33729","Saint Petersburg","FL","27.881909","-82.664359","-5","1" +"33730","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33731","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33732","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33733","Saint Petersburg","FL","27.925755","-82.75211","-5","1" +"33734","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33736","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33737","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33738","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33740","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33741","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33742","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33743","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33744","Bay Pines","FL","27.891809","-82.724763","-5","1" +"33747","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33755","Clearwater","FL","27.979114","-82.78166","-5","1" +"33756","Clearwater","FL","27.944631","-82.78702","-5","1" +"33757","Clearwater","FL","27.891809","-82.724763","-5","1" +"33758","Clearwater","FL","27.891809","-82.724763","-5","1" +"33759","Clearwater","FL","27.980297","-82.71645","-5","1" +"33760","Clearwater","FL","27.90802","-82.71365","-5","1" +"33761","Clearwater","FL","28.032827","-82.72596","-5","1" +"33762","Clearwater","FL","27.883118","-82.68389","-5","1" +"33763","Clearwater","FL","28.001394","-82.74549","-5","1" +"33764","Clearwater","FL","27.932797","-82.74115","-5","1" +"33765","Clearwater","FL","27.971362","-82.74482","-5","1" +"33766","Clearwater","FL","27.891809","-82.724763","-5","1" +"33767","Clearwater Beach","FL","27.982722","-82.82504","-5","1" +"33769","Clearwater","FL","27.891809","-82.724763","-5","1" +"33770","Largo","FL","27.916149","-82.80122","-5","1" +"33771","Largo","FL","27.906088","-82.7553","-5","1" +"33772","Seminole","FL","27.843349","-82.79307","-5","1" +"33773","Largo","FL","27.883188","-82.75633","-5","1" +"33774","Largo","FL","27.885283","-82.82607","-5","1" +"33775","Seminole","FL","27.891809","-82.724763","-5","1" +"33776","Seminole","FL","27.853151","-82.82712","-5","1" +"33777","Largo","FL","27.851052","-82.76111","-5","1" +"33778","Largo","FL","27.885344","-82.79594","-5","1" +"33779","Largo","FL","27.839698","-82.772483","-5","1" +"33780","Pinellas Park","FL","27.891809","-82.724763","-5","1" +"33781","Pinellas Park","FL","27.839802","-82.71094","-5","1" +"33782","Pinellas Park","FL","27.861925","-82.71145","-5","1" +"33784","Saint Petersburg","FL","27.891809","-82.724763","-5","1" +"33785","Indian Rocks Beach","FL","27.887923","-82.84703","-5","1" +"33786","Belleair Beach","FL","27.924748","-82.83937","-5","1" +"33801","Lakeland","FL","28.041198","-81.92392","-5","1" +"33802","Lakeland","FL","28.020992","-81.985185","-5","1" +"33803","Lakeland","FL","28.015032","-81.95206","-5","1" +"33804","Lakeland","FL","28.002553","-81.61864","-5","1" +"33805","Lakeland","FL","28.071564","-81.95802","-5","1" +"33806","Lakeland","FL","28.002553","-81.61864","-5","1" +"33807","Lakeland","FL","28.002553","-81.61864","-5","1" +"33809","Lakeland","FL","28.128494","-81.95625","-5","1" +"33810","Lakeland","FL","28.106787","-82.01033","-5","1" +"33811","Lakeland","FL","27.978316","-82.00841","-5","1" +"33813","Lakeland","FL","27.965469","-81.92215","-5","1" +"33815","Lakeland","FL","28.042948","-81.9849","-5","1" +"33820","Alturas","FL","28.002553","-81.61864","-5","1" +"33823","Auburndale","FL","28.068865","-81.80267","-5","1" +"33825","Avon Park","FL","27.60047","-81.50932","-5","1" +"33826","Avon Park","FL","27.339483","-81.252872","-5","1" +"33827","Babson Park","FL","27.826864","-81.53291","-5","1" +"33830","Bartow","FL","27.894991","-81.82638","-5","1" +"33831","Bartow","FL","27.955426","-81.951673","-5","1" +"33834","Bowling Green","FL","27.613064","-81.93581","-5","1" +"33835","Bradley","FL","27.710056","-81.95196","-5","1" +"33836","Davenport","FL","28.167211","-81.631589","-5","1" +"33837","Davenport","FL","28.223014","-81.63131","-5","1" +"33838","Dundee","FL","28.021066","-81.61872","-5","1" +"33839","Eagle Lake","FL","27.98038","-81.75531","-5","1" +"33840","Eaton Park","FL","28.084383","-81.5415","-5","1" +"33841","Fort Meade","FL","27.7437","-81.79405","-5","1" +"33843","Frostproof","FL","27.757986","-81.5088","-5","1" +"33844","Haines City","FL","28.101527","-81.6235","-5","1" +"33845","Haines City","FL","28.002553","-81.61864","-5","1" +"33846","Highland City","FL","27.964651","-81.867153","-5","1" +"33847","Homeland","FL","27.815882","-81.82529","-5","1" +"33848","Intercession City","FL","28.26074","-81.50669","-5","1" +"33849","Kathleen","FL","28.24625","-82.06358","-5","1" +"33850","Lake Alfred","FL","28.092512","-81.72758","-5","1" +"33851","Lake Hamilton","FL","28.044641","-81.62373","-5","1" +"33852","Lake Placid","FL","27.293327","-81.38206","-5","1" +"33853","Lake Wales","FL","27.894622","-81.52824","-5","1" +"33854","Fedhaven","FL","28.002553","-81.61864","-5","1" +"33855","Indian Lake Estates","FL","27.798022","-81.357154","-5","1" +"33856","Nalcrest","FL","27.855686","-81.430915","-5","1" +"33857","Lorida","FL","27.397067","-81.1411","-5","1" +"33858","Loughman","FL","28.050121","-81.505211","-5","1" +"33859","Lake Wales","FL","27.885359","-81.522998","-5","1" +"33860","Mulberry","FL","27.884256","-81.97697","-5","1" +"33862","Lake Placid","FL","27.244668","-81.288424","-5","1" +"33863","Nichols","FL","28.002553","-81.61864","-5","1" +"33865","Ona","FL","27.432764","-81.93703","-5","1" +"33867","River Ranch","FL","27.768567","-81.19664","-5","1" +"33868","Polk City","FL","28.180035","-81.81863","-5","1" +"33870","Sebring","FL","27.483817","-81.42131","-5","1" +"33871","Sebring","FL","27.485803","-81.407884","-5","1" +"33872","Sebring","FL","27.475288","-81.48535","-5","1" +"33873","Wauchula","FL","27.541676","-81.8127","-5","1" +"33875","Sebring","FL","27.430819","-81.463297","-5","1" +"33876","Sebring","FL","27.436826","-81.35515","-5","1" +"33877","Waverly","FL","27.982891","-81.61743","-5","1" +"33880","Winter Haven","FL","27.997276","-81.74554","-5","1" +"33881","Winter Haven","FL","28.051985","-81.72457","-5","1" +"33882","Winter Haven","FL","28.029402","-81.732139","-5","1" +"33883","Winter Haven","FL","28.002553","-81.61864","-5","1" +"33884","Winter Haven","FL","27.997387","-81.68256","-5","1" +"33885","Winter Haven","FL","28.002553","-81.61864","-5","1" +"33888","Winter Haven","FL","28.023115","-81.723417","-5","1" +"33890","Zolfo Springs","FL","27.485551","-81.72528","-5","1" +"33896","Loughman","FL","28.252198","-81.607612","-5","1" +"33897","Citrus Ridge","FL","28.310679","-81.670264","-5","1" +"33898","Highland Park","FL","27.918187","-81.493521","-5","1" +"33901","Fort Myers","FL","26.62365","-81.8727","-5","1" +"33902","Fort Myers","FL","26.623908","-81.883648","-5","1" +"33903","North Fort Myers","FL","26.698526","-81.9178","-5","1" +"33904","Cape Coral","FL","26.582185","-81.95528","-5","1" +"33905","Fort Myers","FL","26.680407","-81.74812","-5","1" +"33906","Fort Myers","FL","26.552895","-81.94861","-5","1" +"33907","Fort Myers","FL","26.566053","-81.87009","-5","1" +"33908","Fort Myers","FL","26.502677","-81.93052","-5","1" +"33909","Cape Coral","FL","26.687462","-81.94968","-5","1" +"33910","Cape Coral","FL","26.552895","-81.94861","-5","1" +"33911","Fort Myers","FL","26.596286","-81.882373","-5","1" +"33912","Fort Myers","FL","26.501582","-81.82841","-5","1" +"33913","Fort Myers","FL","26.542097","-81.69984","-5","1" +"33914","Cape Coral","FL","26.579862","-82.00227","-5","1" +"33915","Cape Coral","FL","26.659942","-81.893427","-5","1" +"33916","Fort Myers","FL","26.6435","-81.84418","-5","1" +"33917","North Fort Myers","FL","26.711647","-81.865","-5","1" +"33918","North Fort Myers","FL","26.71613","-81.607007","-5","1" +"33919","Fort Myers","FL","26.555958","-81.90174","-5","1" +"33920","Alva","FL","26.711362","-81.61684","-5","1" +"33921","Boca Grande","FL","26.759514","-82.26351","-5","1" +"33922","Bokeelia","FL","26.6636","-82.14112","-5","1" +"33924","Captiva","FL","26.519415","-82.19101","-5","1" +"33927","Punta Gorda","FL","26.901981","-82.000005","-5","1" +"33928","Estero","FL","26.425671","-81.80196","-5","1" +"33930","Felda","FL","26.581172","-81.46202","-5","1" +"33931","Fort Myers Beach","FL","26.446463","-81.93269","-5","1" +"33932","Fort Myers Beach","FL","26.552895","-81.94861","-5","1" +"33935","Labelle","FL","26.760476","-81.43029","-5","1" +"33936","Lehigh Acres","FL","26.588982","-81.61163","-5","1" +"33938","Murdock","FL","26.901981","-82.000005","-5","1" +"33944","Palmdale","FL","26.95925","-81.31568","-5","1" +"33945","Pineland","FL","26.59951","-82.22166","-5","1" +"33946","Placida","FL","26.849473","-82.28661","-5","1" +"33947","Rotonda West","FL","26.894448","-82.26125","-5","1" +"33948","Port Charlotte","FL","26.984486","-82.14859","-5","1" +"33949","Port Charlotte","FL","26.993904","-82.098418","-5","1" +"33950","Punta Gorda","FL","26.914393","-82.04106","-5","1" +"33951","Punta Gorda","FL","26.970756","-81.984504","-5","1" +"33952","Port Charlotte","FL","26.993876","-82.09821","-5","1" +"33953","Port Charlotte","FL","27.012758","-82.2112","-5","1" +"33954","Port Charlotte","FL","27.02442","-82.12225","-5","1" +"33955","Punta Gorda","FL","26.837879","-82.00403","-5","1" +"33956","Saint James City","FL","26.536435","-82.0915","-5","1" +"33957","Sanibel","FL","26.439608","-82.08045","-5","1" +"33960","Venus","FL","27.052583","-81.39628","-5","1" +"33961","Fort Myers","FL","26.629875","-81.857683","-5","1" +"33965","Fort Myers","FL","26.552895","-81.94861","-5","1" +"33970","Lehigh Acres","FL","26.564718","-81.620778","-5","1" +"33971","Lehigh Acres","FL","26.60599","-81.70296","-5","1" +"33972","Lehigh Acres","FL","26.634332","-81.59391","-5","1" +"33975","Labelle","FL","26.742327","-81.27863","-5","1" +"33980","Port Charlotte","FL","26.983094","-82.05972","-5","1" +"33981","Port Charlotte","FL","26.922089","-82.23092","-5","1" +"33982","Punta Gorda","FL","26.958821","-81.95134","-5","1" +"33983","Punta Gorda","FL","26.999486","-82.00964","-5","1" +"33990","Cape Coral","FL","26.63075","-81.95251","-5","1" +"33991","Cape Coral","FL","26.634338","-82.00674","-5","1" +"33993","Cape Coral","FL","26.681122","-82.01319","-5","1" +"33994","Fort Myers","FL","26.552895","-81.94861","-5","1" +"34101","Naples","FL","25.855534","-81.38719","-5","1" +"34102","Naples","FL","26.142938","-81.79852","-5","1" +"34103","Naples","FL","26.191117","-81.80333","-5","1" +"34104","Naples","FL","26.15091","-81.7477","-5","1" +"34105","Naples","FL","26.187767","-81.76829","-5","1" +"34106","Naples","FL","26.14326","-81.389124","-5","1" +"34107","Vanderbilt Beach","FL","26.14326","-81.389124","-5","1" +"34108","Naples","FL","26.252711","-81.80825","-5","1" +"34109","Naples","FL","26.240637","-81.76663","-5","1" +"34110","Naples","FL","26.28828","-81.78726","-5","1" +"34112","Naples","FL","26.121546","-81.75251","-5","1" +"34113","Naples","FL","26.067538","-81.72002","-5","1" +"34114","Naples","FL","26.020283","-81.63094","-5","1" +"34116","Naples","FL","26.183424","-81.70643","-5","1" +"34117","Naples","FL","26.1785","-81.55495","-5","1" +"34119","Naples","FL","26.256551","-81.7186","-5","1" +"34120","Naples","FL","26.275676","-81.59586","-5","1" +"34133","Bonita Springs","FL","26.552895","-81.94861","-5","1" +"34134","Bonita Springs","FL","26.348608","-81.83134","-5","1" +"34135","Bonita Springs","FL","26.348523","-81.77391","-5","1" +"34136","Bonita Springs","FL","26.552895","-81.94861","-5","1" +"34137","Copeland","FL","26.03569","-81.46799","-5","1" +"34138","Chokoloskee","FL","25.813786","-81.36291","-5","1" +"34139","Everglades City","FL","25.856771","-81.38412","-5","1" +"34140","Goodland","FL","26.14326","-81.389124","-5","1" +"34141","Ochopee","FL","25.7265","-81.20151","-5","1" +"34142","Immokalee","FL","26.398248","-81.39325","-5","1" +"34143","Immokalee","FL","26.464183","-81.504661","-5","1" +"34145","Marco Island","FL","25.940112","-81.71329","-5","1" +"34146","Marco Island","FL","26.14326","-81.389124","-5","1" +"34154","Goodland","FL","25.925446","-81.644387","-5","1" +"34168","Chokoloskee","FL","25.81528","-81.359902","-5","1" +"34201","Bradenton","FL","27.400627","-82.47104","-5","1" +"34202","Bradenton","FL","27.434755","-82.40211","-5","1" +"34203","Bradenton","FL","27.448369","-82.52324","-5","1" +"34204","Bradenton","FL","27.427213","-82.438689","-5","1" +"34205","Bradenton","FL","27.485617","-82.58294","-5","1" +"34206","Bradenton","FL","27.427213","-82.438689","-5","1" +"34207","Bradenton","FL","27.438719","-82.57646","-5","1" +"34208","Bradenton","FL","27.486448","-82.535","-5","1" +"34209","Bradenton","FL","27.488866","-82.62737","-5","1" +"34210","Bradenton","FL","27.455543","-82.63372","-5","1" +"34211","Memphis","FL","27.437698","-82.372125","-5","1" +"34215","Cortez","FL","27.469113","-82.68765","-5","1" +"34216","Anna Maria","FL","27.530644","-82.73594","-5","1" +"34217","Bradenton Beach","FL","27.499982","-82.7129","-5","1" +"34218","Holmes Beach","FL","27.499515","-82.709871","-5","1" +"34219","Parrish","FL","27.574128","-82.40701","-5","1" +"34220","Palmetto","FL","27.427213","-82.438689","-5","1" +"34221","Palmetto","FL","27.549314","-82.55981","-5","1" +"34222","Ellenton","FL","27.532098","-82.5009","-5","1" +"34223","Englewood","FL","26.974858","-82.3665","-5","1" +"34224","Englewood","FL","26.925265","-82.29693","-5","1" +"34228","Longboat Key","FL","27.396931","-82.64475","-5","1" +"34229","Osprey","FL","27.187829","-82.48539","-5","1" +"34230","Sarasota","FL","27.335023","-82.537169","-5","1" +"34231","Sarasota","FL","27.267649","-82.51663","-5","1" +"34232","Sarasota","FL","27.321313","-82.47648","-5","1" +"34233","Sarasota","FL","27.285142","-82.47363","-5","1" +"34234","Sarasota","FL","27.365622","-82.53556","-5","1" +"34235","Sarasota","FL","27.365549","-82.48659","-5","1" +"34236","Sarasota","FL","27.333014","-82.54613","-5","1" +"34237","Sarasota","FL","27.336973","-82.51506","-5","1" +"34238","Sarasota","FL","27.240571","-82.47836","-5","1" +"34239","Sarasota","FL","27.310924","-82.5213","-5","1" +"34240","Sarasota","FL","27.33458","-82.40894","-5","1" +"34241","Sarasota","FL","27.272873","-82.41676","-5","1" +"34242","Sarasota","FL","27.275225","-82.54934","-5","1" +"34243","Sarasota","FL","27.407657","-82.52923","-5","1" +"34250","Terra Ceia","FL","27.575972","-82.58493","-5","1" +"34251","Myakka City","FL","27.396045","-82.23349","-5","1" +"34260","Manasota","FL","27.427213","-82.438689","-5","1" +"34264","Oneco","FL","27.427213","-82.438689","-5","1" +"34265","Arcadia","FL","27.186146","-81.809939","-5","1" +"34266","Arcadia","FL","27.201006","-81.87196","-5","1" +"34267","Fort Ogden","FL","27.186146","-81.809939","-5","1" +"34268","Nocatee","FL","27.158612","-81.88324","-5","1" +"34270","Tallevast","FL","27.405429","-82.543519","-5","1" +"34272","Laurel","FL","27.146963","-82.425512","-5","1" +"34274","Nokomis","FL","27.144031","-82.464468","-5","1" +"34275","Nokomis","FL","27.136731","-82.45241","-5","1" +"34276","Sarasota","FL","27.167521","-82.380967","-5","1" +"34277","Sarasota","FL","27.167521","-82.380967","-5","1" +"34278","Sarasota","FL","27.331628","-82.528488","-5","1" +"34280","Bradenton","FL","27.427213","-82.438689","-5","1" +"34281","Bradenton","FL","27.427213","-82.438689","-5","1" +"34282","Bradenton","FL","27.427213","-82.438689","-5","1" +"34284","Venice","FL","27.167521","-82.380967","-5","1" +"34285","Venice","FL","27.091783","-82.44846","-5","1" +"34286","North Port","FL","27.072445","-82.1606","-5","1" +"34287","North Port","FL","27.051075","-82.24417","-5","1" +"34288","North Port","FL","27.048707","-82.127196","-5","1" +"34289","North Port","FL","27.08464","-82.156884","-5","1" +"34292","Venice","FL","27.098474","-82.41481","-5","1" +"34293","Venice","FL","27.055013","-82.3973","-5","1" +"34295","Englewood","FL","27.085985","-82.438918","-5","1" +"34334","Grove City","FL","26.89679","-82.317993","-5","1" +"34420","Belleview","FL","29.054976","-82.04255","-5","1" +"34421","Belleview","FL","29.240728","-82.087458","-5","1" +"34423","Crystal River","FL","28.867027","-82.572703","-5","1" +"34424","Crystal River","FL","28.916441","-82.608795","-5","1" +"34426","Pine Ridge","FL","28.94159","-82.503117","-5","1" +"34428","Crystal River","FL","28.95138","-82.61213","-5","1" +"34429","Crystal River","FL","28.872108","-82.5961","-5","1" +"34430","Dunnellon","FL","29.240728","-82.087458","-5","1" +"34431","Dunnellon","FL","29.131665","-82.49726","-5","1" +"34432","Dunnellon","FL","29.060092","-82.35195","-5","1" +"34433","Dunnellon","FL","28.997155","-82.50053","-5","1" +"34434","Dunnellon","FL","28.99409","-82.45364","-5","1" +"34436","Floral City","FL","28.751024","-82.28449","-5","1" +"34442","Hernando","FL","28.932925","-82.39477","-5","1" +"34445","Holder","FL","28.948753","-82.406476","-5","1" +"34446","Homosassa","FL","28.746912","-82.53331","-5","1" +"34447","Homosassa Springs","FL","28.804911","-82.574264","-5","1" +"34448","Homosassa","FL","28.797979","-82.5912","-5","1" +"34449","Inglis","FL","29.07664","-82.68022","-5","1" +"34450","Inverness","FL","28.829773","-82.29019","-5","1" +"34451","Inverness","FL","28.803207","-82.32167","-5","1" +"34452","Inverness","FL","28.793722","-82.35021","-5","1" +"34453","Inverness","FL","28.865761","-82.35982","-5","1" +"34460","Lecanto","FL","28.859286","-82.508694","-5","1" +"34461","Lecanto","FL","28.848776","-82.48108","-5","1" +"34464","Beverly Hills","FL","28.859286","-82.508694","-5","1" +"34465","Beverly Hills","FL","28.932403","-82.47641","-5","1" +"34470","Ocala","FL","29.198704","-82.10556","-5","1" +"34471","Ocala","FL","29.171187","-82.10394","-5","1" +"34472","Ocala","FL","29.120287","-82.02133","-5","1" +"34473","Ocala","FL","29.003195","-82.1899","-5","1" +"34474","Ocala","FL","29.166186","-82.17027","-5","1" +"34475","Ocala","FL","29.212886","-82.15378","-5","1" +"34476","Ocala","FL","29.08091","-82.21004","-5","1" +"34477","Ocala","FL","29.240728","-82.087458","-5","1" +"34478","Ocala","FL","29.187178","-82.112278","-5","1" +"34479","Ocala","FL","29.23543","-82.1107","-5","1" +"34480","Ocala","FL","29.12295","-82.0816","-5","1" +"34481","Ocala","FL","29.124611","-82.32271","-5","1" +"34482","Ocala","FL","29.232873","-82.2522","-5","1" +"34483","Ocala","FL","29.240728","-82.087458","-5","1" +"34484","Oxford","FL","28.921705","-82.07847","-5","1" +"34487","Homosassa","FL","28.859286","-82.508694","-5","1" +"34488","Silver Springs","FL","29.198564","-81.92095","-5","1" +"34489","Silver Springs","FL","29.215153","-82.097163","-5","1" +"34491","Summerfield","FL","28.991135","-82.02658","-5","1" +"34492","Summerfield","FL","28.99796","-82.016139","-5","1" +"34498","Yankeetown","FL","29.031155","-82.7201","-5","1" +"34592","Port St. Lucie","FL","27.287855","-80.2978","-5","1" +"34601","Brooksville","FL","28.566183","-82.38002","-5","1" +"34602","Brooksville","FL","28.51589","-82.26576","-5","1" +"34603","Brooksville","FL","28.564167","-82.416515","-5","1" +"34604","Spring Hill","FL","28.478994","-82.453508","-5","1" +"34605","Brooksville","FL","28.505896","-82.422554","-5","1" +"34606","Spring Hill","FL","28.470236","-82.59741","-5","1" +"34607","Spring Hill","FL","28.516609","-82.61302","-5","1" +"34608","Spring Hill","FL","28.484316","-82.55181","-5","1" +"34609","Brooksville","FL","28.475662","-82.50199","-5","1" +"34610","Brooksville","FL","28.397791","-82.53084","-5","1" +"34611","Spring Hill","FL","28.564167","-82.416515","-5","1" +"34613","Brooksville","FL","28.555346","-82.53601","-5","1" +"34614","Brooksville","FL","28.632101","-82.52181","-5","1" +"34636","Istachatta","FL","28.65503","-82.267706","-5","1" +"34639","Land O Lakes","FL","28.233671","-82.45463","-5","1" +"34652","New Port Richey","FL","28.237582","-82.72818","-5","1" +"34653","New Port Richey","FL","28.248558","-82.69869","-5","1" +"34654","New Port Richey","FL","28.295714","-82.61782","-5","1" +"34655","New Port Richey","FL","28.209833","-82.66973","-5","1" +"34656","New Port Richey","FL","28.324796","-82.481766","-5","1" +"34660","Ozona","FL","28.067043","-82.778424","-5","1" +"34661","Nobleton","FL","28.643141","-82.26051","-5","1" +"34667","Hudson","FL","28.372441","-82.66603","-5","1" +"34668","Port Richey","FL","28.30073","-82.69698","-5","1" +"34669","Hudson","FL","28.348507","-82.61937","-5","1" +"34673","Port Richey","FL","28.324796","-82.481766","-5","1" +"34674","Hudson","FL","28.324796","-82.481766","-5","1" +"34677","Oldsmar","FL","28.042799","-82.67737","-5","1" +"34678","Palm Harbor","FL","28.061727","-82.777757","-5","1" +"34679","Aripeka","FL","28.429478","-82.66315","-5","1" +"34680","Elfers","FL","28.324796","-82.481766","-5","1" +"34681","Crystal Beach","FL","28.088443","-82.77834","-5","1" +"34682","Palm Harbor","FL","27.891809","-82.724763","-5","1" +"34683","Palm Harbor","FL","28.076744","-82.76116","-5","1" +"34684","Palm Harbor","FL","28.081325","-82.72751","-5","1" +"34685","Palm Harbor","FL","28.099485","-82.69532","-5","1" +"34688","Tarpon Springs","FL","27.891809","-82.724763","-5","1" +"34689","Tarpon Springs","FL","28.149691","-82.75339","-5","1" +"34690","Holiday","FL","28.190181","-82.72696","-5","1" +"34691","Holiday","FL","28.19006","-82.75735","-5","1" +"34695","Safety Harbor","FL","28.005639","-82.69511","-5","1" +"34697","Dunedin","FL","27.891809","-82.724763","-5","1" +"34698","Dunedin","FL","28.025395","-82.77534","-5","1" +"34703","Astatula","FL","28.718224","-81.735239","-5","1" +"34705","Astatula","FL","28.708139","-81.73307","-5","1" +"34711","Clermont","FL","28.545742","-81.74805","-5","1" +"34712","Clermont","FL","28.811078","-81.653642","-5","1" +"34713","Clermont","FL","28.811078","-81.653642","-5","1" +"34729","Ferndale","FL","28.811078","-81.653642","-5","1" +"34731","Fruitland Park","FL","28.859765","-81.90184","-5","1" +"34734","Gotha","FL","28.543429","-81.52479","-5","1" +"34736","Groveland","FL","28.571677","-81.86649","-5","1" +"34737","Howey In The Hills","FL","28.711167","-81.77955","-5","1" +"34739","Kenansville","FL","27.938975","-81.0951","-5","1" +"34740","Killarney","FL","28.545385","-81.650667","-5","1" +"34741","Kissimmee","FL","28.301788","-81.42159","-5","1" +"34742","Kissimmee","FL","27.995287","-81.259332","-5","1" +"34743","Kissimmee","FL","28.325715","-81.35408","-5","1" +"34744","Kissimmee","FL","28.308979","-81.37594","-5","1" +"34745","Kissimmee","FL","27.995287","-81.259332","-5","1" +"34746","Kissimmee","FL","28.287883","-81.46862","-5","1" +"34747","Kissimmee","FL","28.326187","-81.58897","-5","1" +"34748","Leesburg","FL","28.797245","-81.88466","-5","1" +"34749","Leesburg","FL","28.811078","-81.653642","-5","1" +"34753","Mascotte","FL","28.583191","-81.89038","-5","1" +"34755","Minneola","FL","28.578234","-81.831883","-5","1" +"34756","Montverde","FL","28.597126","-81.67579","-5","1" +"34758","Kissimmee","FL","28.178192","-81.48731","-5","1" +"34759","Kissimmee","FL","28.094144","-81.48395","-5","1" +"34760","Oakland","FL","28.555328","-81.63104","-5","1" +"34761","Ocoee","FL","28.574628","-81.52946","-5","1" +"34762","Okahumpka","FL","28.735088","-81.91035","-5","1" +"34769","Saint Cloud","FL","28.24934","-81.28749","-5","1" +"34770","Saint Cloud","FL","27.995287","-81.259332","-5","1" +"34771","Saint Cloud","FL","28.271939","-81.19645","-5","1" +"34772","Saint Cloud","FL","28.198441","-81.27246","-5","1" +"34773","Saint Cloud","FL","28.160376","-81.00041","-5","1" +"34777","Winter Garden","FL","28.541579","-81.605846","-5","1" +"34778","Winter Garden","FL","28.566338","-81.260818","-5","1" +"34785","Wildwood","FL","28.852564","-82.0321","-5","1" +"34786","Windermere","FL","28.495982","-81.5362","-5","1" +"34787","Winter Garden","FL","28.536794","-81.59344","-5","1" +"34788","Leesburg","FL","28.857425","-81.7845","-5","1" +"34789","Leesburg","FL","28.811078","-81.653642","-5","1" +"34797","Yalaha","FL","28.744182","-81.81859","-5","1" +"34801","Brooksville","FL","28.566148","-82.371747","-5","1" +"34837","Hunters Creek","FL","28.368679","-81.423542","-5","1" +"34869","Tarpon Springs","FL","28.126307","-82.766173","-5","1" +"34876","Lake Butter","FL","28.505419","-81.571248","-5","1" +"34924","Okeechobee","FL","27.227002","-80.829442","-5","1" +"34945","Fort Pierce","FL","27.431607","-80.4915","-5","1" +"34946","Fort Pierce","FL","27.485272","-80.35243","-5","1" +"34947","Fort Pierce","FL","27.448688","-80.36247","-5","1" +"34948","Fort Pierce","FL","27.382196","-80.409024","-5","1" +"34949","Fort Pierce","FL","27.472857","-80.29901","-5","1" +"34950","Fort Pierce","FL","27.448016","-80.33644","-5","1" +"34951","Fort Pierce","FL","27.53831","-80.40526","-5","1" +"34952","Port Saint Lucie","FL","27.291694","-80.29691","-5","1" +"34953","Port Saint Lucie","FL","27.246754","-80.38145","-5","1" +"34954","Fort Pierce","FL","27.382196","-80.409024","-5","1" +"34956","Indiantown","FL","27.049788","-80.48057","-5","1" +"34957","Jensen Beach","FL","27.248445","-80.23277","-5","1" +"34958","Jensen Beach","FL","27.242402","-80.224613","-5","1" +"34972","Okeechobee","FL","27.39171","-80.87555","-5","1" +"34973","Okeechobee","FL","27.297631","-80.802656","-5","1" +"34974","Okeechobee","FL","27.1944","-80.84644","-5","1" +"34979","Fort Pierce","FL","27.382196","-80.409024","-5","1" +"34981","Fort Pierce","FL","27.410069","-80.36327","-5","1" +"34982","Fort Pierce","FL","27.393097","-80.3279","-5","1" +"34983","Port Saint Lucie","FL","27.312471","-80.34907","-5","1" +"34984","Port Saint Lucie","FL","27.273272","-80.34727","-5","1" +"34985","Port Saint Lucie","FL","27.382196","-80.409024","-5","1" +"34986","Port Saint Lucie","FL","27.341158","-80.39786","-5","1" +"34987","Port Saint Lucie","FL","27.273586","-80.46447","-5","1" +"34988","Port Saint Lucie","FL","27.386818","-80.503746","-5","1" +"34990","Palm City","FL","27.163485","-80.31267","-5","1" +"34991","Palm City","FL","27.110182","-80.454196","-5","1" +"34992","Port Salerno","FL","27.110182","-80.454196","-5","1" +"34994","Stuart","FL","27.195291","-80.25225","-5","1" +"34995","Stuart","FL","27.17537","-80.241512","-5","1" +"34996","Stuart","FL","27.195927","-80.21143","-5","1" +"34997","Stuart","FL","27.136003","-80.21686","-5","1" +"35004","Moody","AL","33.606379","-86.50249","-6","1" +"35005","Adamsville","AL","33.592585","-86.95969","-6","1" +"35006","Adger","AL","33.451714","-87.23957","-6","1" +"35007","Alabaster","AL","33.232422","-86.80871","-6","1" +"35010","Alexander City","AL","32.903432","-85.92669","-6","1" +"35011","Alexander City","AL","32.990191","-85.958001","-6","1" +"35013","Allgood","AL","33.922162","-86.449262","-6","1" +"35014","Alpine","AL","33.35596","-86.2772","-6","1" +"35015","Alton","AL","33.544622","-86.929208","-6","1" +"35016","Arab","AL","34.323715","-86.49278","-6","1" +"35019","Baileyton","AL","34.29254","-86.63505","-6","1" +"35020","Bessemer","AL","33.405559","-86.95141","-6","1" +"35021","Bessemer","AL","33.544622","-86.929208","-6","1" +"35022","Bessemer","AL","33.346817","-86.95252","-6","1" +"35023","Bessemer","AL","33.443039","-87.0193","-6","1" +"35026","Clanton","AL","32.859262","-86.638819","-6","1" +"35031","Blountsville","AL","34.111425","-86.5338","-6","1" +"35032","Bon Air","AL","33.256886","-86.338572","-6","1" +"35033","Bremen","AL","33.952939","-87.02889","-6","1" +"35034","Brent","AL","32.915182","-87.21488","-6","1" +"35035","Brierfield","AL","33.041166","-86.95117","-6","1" +"35036","Brookside","AL","33.63815","-86.91956","-6","1" +"35038","Burnwell","AL","33.804411","-87.202136","-6","1" +"35039","Brookside","AL","33.635848","-86.918818","-6","1" +"35040","Calera","AL","33.107572","-86.74996","-6","1" +"35041","Cardiff","AL","33.64672","-86.931818","-6","1" +"35042","Centreville","AL","32.963486","-87.13867","-6","1" +"35043","Chelsea","AL","33.317093","-86.66295","-6","1" +"35044","Childersburg","AL","33.268471","-86.35582","-6","1" +"35045","Clanton","AL","32.834501","-86.64355","-6","1" +"35046","Clanton","AL","32.894351","-86.56504","-6","1" +"35048","Clay","AL","33.544622","-86.929208","-6","1" +"35049","Cleveland","AL","33.963435","-86.5954","-6","1" +"35050","Columbiana","AL","33.158454","-86.621931","-6","1" +"35051","Columbiana","AL","33.201789","-86.61584","-6","1" +"35052","Cook Springs","AL","33.593115","-86.4084","-6","1" +"35053","Crane Hill","AL","34.041061","-87.06771","-6","1" +"35054","Cropwell","AL","33.506012","-86.31547","-6","1" +"35055","Cullman","AL","34.167893","-86.82506","-6","1" +"35056","Cullman","AL","34.196448","-86.895226","-6","1" +"35057","Cullman","AL","34.139198","-86.92449","-6","1" +"35058","Cullman","AL","34.223732","-86.7562","-6","1" +"35060","Docena","AL","33.559455","-86.92968","-6","1" +"35061","Dolomite","AL","33.462541","-86.95736","-6","1" +"35062","Dora","AL","33.731278","-87.0361","-6","1" +"35063","Empire","AL","33.805216","-87.00192","-6","1" +"35064","Fairfield","AL","33.476908","-86.91684","-6","1" +"35068","Fultondale","AL","33.611297","-86.81518","-6","1" +"35070","Garden City","AL","34.011027","-86.74877","-6","1" +"35071","Gardendale","AL","33.67933","-86.8206","-6","1" +"35072","Goodwater","AL","33.089342","-86.04682","-6","1" +"35073","Graysville","AL","33.640865","-86.96885","-6","1" +"35074","Green Pond","AL","33.22584","-87.12515","-6","1" +"35077","Hanceville","AL","34.043589","-86.80644","-6","1" +"35078","Harpersville","AL","33.337092","-86.44085","-6","1" +"35079","Hayden","AL","33.922179","-86.7607","-6","1" +"35080","Helena","AL","33.280625","-86.88411","-6","1" +"35082","Hollins","AL","33.116909","-86.1698","-6","1" +"35083","Holly Pond","AL","34.198738","-86.59814","-6","1" +"35085","Jemison","AL","32.96512","-86.74405","-6","1" +"35087","Joppa","AL","34.303718","-86.58323","-6","1" +"35089","Kellyton","AL","32.941708","-86.06098","-6","1" +"35091","Kimberly","AL","33.77109","-86.80672","-6","1" +"35094","Leeds","AL","33.530698","-86.55506","-6","1" +"35096","Lincoln","AL","33.605233","-86.12079","-6","1" +"35097","Locust Fork","AL","33.896526","-86.63056","-6","1" +"35098","Logan","AL","34.120006","-87.05075","-6","1" +"35111","McCalla","AL","33.279946","-87.10148","-6","1" +"35112","Margaret","AL","33.681899","-86.48237","-6","1" +"35114","Maylene","AL","33.225377","-86.86443","-6","1" +"35115","Montevallo","AL","33.114972","-86.8738","-6","1" +"35116","Morris","AL","33.74137","-86.78543","-6","1" +"35117","Mount Olive","AL","33.665823","-86.87111","-6","1" +"35118","Mulga","AL","33.529224","-87.01546","-6","1" +"35119","New Castle","AL","33.640823","-86.77574","-6","1" +"35120","Odenville","AL","33.668341","-86.43641","-6","1" +"35121","Oneonta","AL","33.944897","-86.45813","-6","1" +"35123","Palmerdale","AL","33.544622","-86.929208","-6","1" +"35124","Pelham","AL","33.317471","-86.78726","-6","1" +"35125","Pell City","AL","33.606663","-86.28912","-6","1" +"35126","Pinson","AL","33.728568","-86.66052","-6","1" +"35127","Pleasant Grove","AL","33.487675","-86.97331","-6","1" +"35128","Pell City","AL","33.561597","-86.30285","-6","1" +"35130","Quinton","AL","33.640629","-87.11584","-6","1" +"35131","Ragland","AL","33.721107","-86.17492","-6","1" +"35133","Remlap","AL","33.827521","-86.60703","-6","1" +"35135","Riverside","AL","33.614465","-86.20067","-6","1" +"35136","Rockford","AL","32.8697","-86.2822","-6","1" +"35137","Saginaw","AL","33.206302","-86.781162","-6","1" +"35139","Sayre","AL","33.712204","-86.97203","-6","1" +"35142","Shannon","AL","33.406869","-86.87347","-6","1" +"35143","Shelby","AL","33.080971","-86.53875","-6","1" +"35144","Siluria","AL","33.28241","-86.683891","-6","1" +"35146","Springville","AL","33.781133","-86.45052","-6","1" +"35147","Sterrett","AL","33.397441","-86.54218","-6","1" +"35148","Sumiton","AL","33.753474","-87.04756","-6","1" +"35149","Sycamore","AL","33.252906","-86.20523","-6","1" +"35150","Sylacauga","AL","33.185782","-86.25105","-6","1" +"35151","Sylacauga","AL","33.137515","-86.33414","-6","1" +"35160","Talladega","AL","33.415449","-86.10908","-6","1" +"35161","Talladega","AL","33.420206","-86.102782","-6","1" +"35171","Thorsby","AL","32.907616","-86.71868","-6","1" +"35172","Trafford","AL","33.823416","-86.71537","-6","1" +"35173","Trussville","AL","33.623485","-86.58546","-6","1" +"35175","Union Grove","AL","34.426844","-86.51841","-6","1" +"35176","Vandiver","AL","33.4776","-86.5126","-6","1" +"35178","Vincent","AL","33.414831","-86.3925","-6","1" +"35179","Vinemont","AL","34.256106","-86.92158","-6","1" +"35180","Warrior","AL","33.82343","-86.81569","-6","1" +"35181","Watson","AL","33.544622","-86.929208","-6","1" +"35182","Wattsville","AL","33.706786","-86.256658","-6","1" +"35183","Weogufka","AL","33.016558","-86.33936","-6","1" +"35184","West Blocton","AL","33.118259","-87.13548","-6","1" +"35185","Westover","AL","33.335629","-86.543692","-6","1" +"35186","Wilsonville","AL","33.241272","-86.50614","-6","1" +"35187","Wilton","AL","33.08104","-86.879328","-6","1" +"35188","Woodstock","AL","33.195743","-87.16252","-6","1" +"35201","Birmingham","AL","33.456412","-86.801904","-6","1" +"35202","Birmingham","AL","33.544622","-86.929208","-6","1" +"35203","Birmingham","AL","33.519055","-86.8097","-6","1" +"35204","Birmingham","AL","33.519855","-86.83534","-6","1" +"35205","Birmingham","AL","33.497055","-86.8057","-6","1" +"35206","Birmingham","AL","33.568573","-86.72163","-6","1" +"35207","Birmingham","AL","33.560652","-86.81897","-6","1" +"35208","Birmingham","AL","33.494545","-86.88115","-6","1" +"35209","Birmingham","AL","33.468306","-86.80814","-6","1" +"35210","Birmingham","AL","33.546051","-86.66963","-6","1" +"35211","Birmingham","AL","33.479306","-86.85878","-6","1" +"35212","Birmingham","AL","33.542004","-86.74896","-6","1" +"35213","Birmingham","AL","33.507637","-86.74161","-6","1" +"35214","Birmingham","AL","33.558772","-86.89199","-6","1" +"35215","Birmingham","AL","33.636102","-86.69506","-6","1" +"35216","Birmingham","AL","33.420558","-86.78489","-6","1" +"35217","Birmingham","AL","33.590003","-86.76708","-6","1" +"35218","Birmingham","AL","33.506456","-86.89524","-6","1" +"35219","Birmingham","AL","33.544622","-86.929208","-6","1" +"35220","Birmingham","AL","33.544622","-86.929208","-6","1" +"35221","Birmingham","AL","33.450267","-86.8965","-6","1" +"35222","Birmingham","AL","33.524254","-86.77335","-6","1" +"35223","Birmingham","AL","33.488355","-86.73402","-6","1" +"35224","Birmingham","AL","33.517706","-86.93189","-6","1" +"35225","Birmingham","AL","33.544622","-86.929208","-6","1" +"35226","Birmingham","AL","33.406409","-86.8295","-6","1" +"35228","Birmingham","AL","33.454262","-86.92273","-6","1" +"35229","Birmingham","AL","33.462856","-86.790389","-6","1" +"35230","Birmingham","AL","33.544622","-86.929208","-6","1" +"35231","Birmingham","AL","33.544622","-86.929208","-6","1" +"35232","Birmingham","AL","33.544622","-86.929208","-6","1" +"35233","Birmingham","AL","33.509623","-86.7997","-6","1" +"35234","Birmingham","AL","33.538504","-86.80602","-6","1" +"35235","Birmingham","AL","33.609779","-86.65507","-6","1" +"35236","Birmingham","AL","33.544622","-86.929208","-6","1" +"35237","Birmingham","AL","33.544622","-86.929208","-6","1" +"35238","Birmingham","AL","33.544622","-86.929208","-6","1" +"35240","Birmingham","AL","33.425892","-86.776926","-6","1" +"35242","Birmingham","AL","33.409582","-86.69684","-6","1" +"35243","Birmingham","AL","33.437667","-86.74586","-6","1" +"35244","Birmingham","AL","33.356981","-86.81577","-6","1" +"35245","Birmingham","AL","33.544622","-86.929208","-6","1" +"35246","Birmingham","AL","33.544622","-86.929208","-6","1" +"35249","Birmingham","AL","33.544622","-86.929208","-6","1" +"35253","Birmingham","AL","33.544622","-86.929208","-6","1" +"35254","Birmingham","AL","33.544622","-86.929208","-6","1" +"35255","Birmingham","AL","33.544622","-86.929208","-6","1" +"35259","Birmingham","AL","33.544622","-86.929208","-6","1" +"35260","Birmingham","AL","33.544622","-86.929208","-6","1" +"35261","Birmingham","AL","33.544622","-86.929208","-6","1" +"35263","Birmingham","AL","33.522505","-86.80939","-6","1" +"35266","Birmingham","AL","33.372861","-86.853075","-6","1" +"35277","Birmingham","AL","33.544622","-86.929208","-6","1" +"35278","Birmingham","AL","33.544622","-86.929208","-6","1" +"35279","Birmingham","AL","33.544622","-86.929208","-6","1" +"35280","Birmingham","AL","33.544622","-86.929208","-6","1" +"35281","Birmingham","AL","33.544622","-86.929208","-6","1" +"35282","Birmingham","AL","33.544622","-86.929208","-6","1" +"35283","Birmingham","AL","33.544622","-86.929208","-6","1" +"35285","Birmingham","AL","33.544622","-86.929208","-6","1" +"35286","Birmingham","AL","33.544622","-86.929208","-6","1" +"35287","Birmingham","AL","33.544622","-86.929208","-6","1" +"35288","Birmingham","AL","33.445808","-86.928542","-6","1" +"35289","Birmingham","AL","33.544622","-86.929208","-6","1" +"35290","Birmingham","AL","33.544622","-86.929208","-6","1" +"35291","Birmingham","AL","33.544622","-86.929208","-6","1" +"35292","Birmingham","AL","33.544622","-86.929208","-6","1" +"35293","Birmingham","AL","33.544622","-86.929208","-6","1" +"35294","Birmingham","AL","33.544622","-86.929208","-6","1" +"35295","Birmingham","AL","33.544622","-86.929208","-6","1" +"35296","Birmingham","AL","33.544622","-86.929208","-6","1" +"35297","Birmingham","AL","33.544622","-86.929208","-6","1" +"35298","Birmingham","AL","33.544622","-86.929208","-6","1" +"35299","Birmingham","AL","33.544622","-86.929208","-6","1" +"35308","Dora","AL","33.706068","-87.092112","-6","1" +"35401","Tuscaloosa","AL","33.193818","-87.56843","-6","1" +"35402","Tuscaloosa","AL","33.306606","-87.453224","-6","1" +"35403","Tuscaloosa","AL","33.205073","-87.52749","-6","1" +"35404","Tuscaloosa","AL","33.217168","-87.49461","-6","1" +"35405","Tuscaloosa","AL","33.149246","-87.52303","-6","1" +"35406","Tuscaloosa","AL","33.271585","-87.50611","-6","1" +"35407","Tuscaloosa","AL","33.306606","-87.453224","-6","1" +"35440","Abernant","AL","33.311014","-87.18975","-6","1" +"35441","Akron","AL","32.871514","-87.73326","-6","1" +"35442","Aliceville","AL","33.095505","-88.18653","-6","1" +"35443","Boligee","AL","32.772835","-88.0321","-6","1" +"35444","Brookwood","AL","33.276411","-87.3052","-6","1" +"35446","Buhl","AL","33.207547","-87.75054","-6","1" +"35447","Carrollton","AL","33.254197","-88.16866","-6","1" +"35448","Clinton","AL","32.835692","-87.956884","-6","1" +"35449","Coaling","AL","33.135876","-87.338369","-6","1" +"35452","Coker","AL","33.249332","-87.67217","-6","1" +"35453","Cottondale","AL","33.170357","-87.39889","-6","1" +"35456","Duncanville","AL","33.068806","-87.43974","-6","1" +"35457","Echola","AL","33.301003","-87.77187","-6","1" +"35458","Elrod","AL","33.274081","-87.80211","-6","1" +"35459","Emelle","AL","32.80728","-88.31069","-6","1" +"35460","Epes","AL","32.716468","-88.15261","-6","1" +"35461","Ethelsville","AL","33.421827","-88.22013","-6","1" +"35462","Eutaw","AL","32.931143","-87.93837","-6","1" +"35463","Fosters","AL","33.081289","-87.68988","-6","1" +"35464","Gainesville","AL","32.811241","-88.1648","-6","1" +"35466","Gordo","AL","33.299935","-87.88368","-6","1" +"35468","Kellerman","AL","33.306606","-87.453224","-6","1" +"35469","Knoxville","AL","33.012557","-87.79793","-6","1" +"35470","Livingston","AL","32.558949","-88.12485","-6","1" +"35471","McShan","AL","33.402134","-88.14732","-6","1" +"35473","Northport","AL","33.260567","-87.58945","-6","1" +"35474","Moundville","AL","32.962981","-87.61717","-6","1" +"35475","Northport","AL","33.388654","-87.57913","-6","1" +"35476","Northport","AL","33.227736","-87.58819","-6","1" +"35477","Panola","AL","32.915891","-88.25764","-6","1" +"35478","Peterson","AL","33.306606","-87.453224","-6","1" +"35480","Ralph","AL","33.102981","-87.83382","-6","1" +"35481","Reform","AL","33.399471","-88.02086","-6","1" +"35482","Samantha","AL","33.306606","-87.453224","-6","1" +"35485","Tuscaloosa","AL","33.306606","-87.453224","-6","1" +"35486","Tuscaloosa","AL","33.272662","-87.793794","-6","1" +"35487","Tuscaloosa","AL","33.307222","-87.585902","-6","1" +"35490","Vance","AL","33.197284","-87.25156","-6","1" +"35491","West Greene","AL","32.835692","-87.956884","-6","1" +"35501","Jasper","AL","33.828412","-87.27632","-6","1" +"35502","Jasper","AL","33.901993","-87.293888","-6","1" +"35503","Jasper","AL","33.907546","-87.29957","-6","1" +"35504","Jasper","AL","33.883566","-87.2125","-6","1" +"35540","Addison","AL","34.223057","-87.17232","-6","1" +"35541","Arley","AL","34.059527","-87.18344","-6","1" +"35542","Bankston","AL","33.703682","-87.67155","-6","1" +"35543","Bear Creek","AL","34.247898","-87.72171","-6","1" +"35544","Beaverton","AL","33.939291","-88.01367","-6","1" +"35545","Belk","AL","33.641227","-87.92911","-6","1" +"35546","Berry","AL","33.628719","-87.58251","-6","1" +"35548","Brilliant","AL","34.043457","-87.7594","-6","1" +"35549","Carbon Hill","AL","33.87798","-87.52728","-6","1" +"35550","Cordova","AL","33.754767","-87.16587","-6","1" +"35551","Delmar","AL","34.145939","-87.373241","-6","1" +"35552","Detroit","AL","34.061266","-88.15462","-6","1" +"35553","Double Springs","AL","34.146713","-87.39317","-6","1" +"35554","Eldridge","AL","33.903299","-87.65194","-6","1" +"35555","Fayette","AL","33.681768","-87.83026","-6","1" +"35559","Glen Allen","AL","33.909001","-87.73186","-6","1" +"35560","Goodsprings","AL","33.679503","-87.237372","-6","1" +"35563","Guin","AL","33.972007","-87.90302","-6","1" +"35564","Hackleburg","AL","34.262751","-87.83441","-6","1" +"35565","Haleyville","AL","34.225425","-87.6118","-6","1" +"35570","Hamilton","AL","34.149717","-88.00384","-6","1" +"35571","Hodges","AL","34.341907","-87.94612","-6","1" +"35572","Houston","AL","34.16678","-87.26526","-6","1" +"35573","Kansas","AL","33.92169","-87.524264","-6","1" +"35574","Kennedy","AL","33.586897","-87.97695","-6","1" +"35575","Lynn","AL","34.049426","-87.57065","-6","1" +"35576","Millport","AL","33.581135","-88.10835","-6","1" +"35577","Natural Bridge","AL","34.093409","-87.600815","-6","1" +"35578","Nauvoo","AL","33.97173","-87.45746","-6","1" +"35579","Oakman","AL","33.673236","-87.37169","-6","1" +"35580","Parrish","AL","33.701484","-87.27103","-6","1" +"35581","Phil Campbell","AL","34.343017","-87.71277","-6","1" +"35582","Red Bay","AL","34.448328","-88.12041","-6","1" +"35584","Sipsey","AL","33.823683","-87.08699","-6","1" +"35585","Spruce Pine","AL","34.428048","-87.80695","-6","1" +"35586","Sulligent","AL","33.864591","-88.13117","-6","1" +"35587","Townley","AL","33.807412","-87.446","-6","1" +"35592","Vernon","AL","33.752857","-88.0996","-6","1" +"35593","Vina","AL","34.369264","-88.06745","-6","1" +"35594","Winfield","AL","33.925454","-87.78949","-6","1" +"35601","Decatur","AL","34.595332","-86.98786","-6","1" +"35602","Decatur","AL","34.606216","-87.088142","-6","1" +"35603","Decatur","AL","34.539072","-86.95732","-6","1" +"35609","Decatur","AL","34.495365","-86.82993","-6","1" +"35610","Anderson","AL","34.944113","-87.24921","-6","1" +"35611","Athens","AL","34.784028","-87.02767","-6","1" +"35612","Athens","AL","34.774907","-87.030479","-6","1" +"35613","Athens","AL","34.808165","-86.89623","-6","1" +"35614","Athens","AL","34.860179","-87.06231","-6","1" +"35615","Belle Mina","AL","34.774907","-87.030479","-6","1" +"35616","Cherokee","AL","34.748498","-87.9986","-6","1" +"35617","Cloverdale","AL","34.869964","-87.706859","-6","1" +"35618","Courtland","AL","34.665033","-87.30978","-6","1" +"35619","Danville","AL","34.404908","-87.12915","-6","1" +"35620","Elkmont","AL","34.930354","-86.9809","-6","1" +"35621","Eva","AL","34.334972","-86.71847","-6","1" +"35622","Falkville","AL","34.340484","-86.89176","-6","1" +"35630","Florence","AL","34.817537","-87.66253","-6","1" +"35631","Florence","AL","34.869964","-87.706859","-6","1" +"35632","Florence","AL","34.869964","-87.706859","-6","1" +"35633","Florence","AL","34.898897","-87.77379","-6","1" +"35634","Florence","AL","34.888897","-87.60731","-6","1" +"35640","Hartselle","AL","34.442184","-86.94027","-6","1" +"35643","Hillsboro","AL","34.648768","-87.20394","-6","1" +"35645","Killen","AL","34.904208","-87.50776","-6","1" +"35646","Leighton","AL","34.660322","-87.53577","-6","1" +"35647","Lester","AL","34.967939","-87.11732","-6","1" +"35648","Lexington","AL","34.966009","-87.38262","-6","1" +"35649","Mooresville","AL","34.625704","-86.8784","-6","1" +"35650","Moulton","AL","34.496476","-87.27802","-6","1" +"35651","Mount Hope","AL","34.476048","-87.48875","-6","1" +"35652","Rogersville","AL","34.843309","-87.29937","-6","1" +"35653","Russellville","AL","34.519453","-87.78077","-6","1" +"35654","Russellville","AL","34.516472","-87.65265","-6","1" +"35659","Russellville","AL","34.536839","-87.704179","-6","1" +"35660","Sheffield","AL","34.759738","-87.69317","-6","1" +"35661","Muscle Shoals","AL","34.759947","-87.62705","-6","1" +"35662","Muscle Shoals","AL","34.757152","-87.966575","-6","1" +"35670","Somerville","AL","34.481885","-86.7525","-6","1" +"35671","Tanner","AL","34.67373","-86.94986","-6","1" +"35672","Town Creek","AL","34.64248","-87.41166","-6","1" +"35673","Trinity","AL","34.581591","-87.11884","-6","1" +"35674","Tuscumbia","AL","34.70017","-87.7142","-6","1" +"35677","Waterloo","AL","34.950648","-88.02603","-6","1" +"35699","Decatur","AL","34.495365","-86.82993","-6","1" +"35703","Cardiff","AL","33.64672","-86.931818","-6","1" +"35715","Montevallo","AL","33.08696","-86.855772","-6","1" +"35739","Ardmore","AL","34.972309","-86.81352","-6","1" +"35740","Bridgeport","AL","34.943871","-85.73077","-6","1" +"35741","Brownsboro","AL","34.720813","-86.48932","-6","1" +"35742","Capshaw","AL","34.813577","-86.80405","-6","1" +"35744","Dutton","AL","34.610055","-85.91553","-6","1" +"35745","Estillfork","AL","34.929269","-86.20726","-6","1" +"35746","Fackler","AL","34.830058","-85.97048","-6","1" +"35747","Grant","AL","34.500216","-86.27889","-6","1" +"35748","Gurley","AL","34.710942","-86.38995","-6","1" +"35749","Harvest","AL","34.815817","-86.76003","-6","1" +"35750","Hazel Green","AL","34.948321","-86.58988","-6","1" +"35751","Hollytree","AL","34.815033","-86.27258","-6","1" +"35752","Hollywood","AL","34.745259","-85.94729","-6","1" +"35754","Laceys Spring","AL","34.520438","-86.61977","-6","1" +"35755","Langston","AL","34.501178","-86.11516","-6","1" +"35756","Madison","AL","34.630103","-86.80159","-6","1" +"35757","Madison","AL","34.776638","-86.75164","-6","1" +"35758","Madison","AL","34.715065","-86.73964","-6","1" +"35759","Meridianville","AL","34.863236","-86.56137","-6","1" +"35760","New Hope","AL","34.541285","-86.39852","-6","1" +"35761","New Market","AL","34.902137","-86.44272","-6","1" +"35762","Normal","AL","34.733964","-86.522913","-6","1" +"35763","Owens Cross Roads","AL","34.624533","-86.47069","-6","1" +"35764","Paint Rock","AL","34.694662","-86.31816","-6","1" +"35765","Pisgah","AL","34.695645","-85.80484","-6","1" +"35766","Princeton","AL","34.842944","-86.23149","-6","1" +"35767","Ryland","AL","34.733964","-86.522913","-6","1" +"35768","Scottsboro","AL","34.712327","-86.08387","-6","1" +"35769","Scottsboro","AL","34.606124","-86.06464","-6","1" +"35771","Section","AL","34.546397","-85.98279","-6","1" +"35772","Stevenson","AL","34.877531","-85.84528","-6","1" +"35773","Toney","AL","34.90267","-86.71367","-6","1" +"35774","Trenton","AL","34.752369","-86.22634","-6","1" +"35775","Valhermoso Springs","AL","34.550375","-86.70576","-6","1" +"35776","Woodville","AL","34.664895","-86.23363","-6","1" +"35801","Huntsville","AL","34.72879","-86.57316","-6","1" +"35802","Huntsville","AL","34.666041","-86.55929","-6","1" +"35803","Huntsville","AL","34.603017","-86.54293","-6","1" +"35804","Huntsville","AL","34.728366","-86.585312","-6","1" +"35805","Huntsville","AL","34.711291","-86.61691","-6","1" +"35806","Huntsville","AL","34.748066","-86.68317","-6","1" +"35807","Huntsville","AL","34.733964","-86.522913","-6","1" +"35808","Huntsville","AL","34.623075","-86.6647","-6","1" +"35809","Huntsville","AL","34.733964","-86.522913","-6","1" +"35810","Huntsville","AL","34.77624","-86.61339","-6","1" +"35811","Huntsville","AL","34.78108","-86.53163","-6","1" +"35812","Huntsville","AL","34.733964","-86.522913","-6","1" +"35813","Huntsville","AL","34.733964","-86.522913","-6","1" +"35814","Huntsville","AL","34.733964","-86.522913","-6","1" +"35815","Huntsville","AL","34.733964","-86.522913","-6","1" +"35816","Huntsville","AL","34.73969","-86.62464","-6","1" +"35824","Huntsville","AL","34.654126","-86.73987","-6","1" +"35893","Huntsville","AL","34.733964","-86.522913","-6","1" +"35894","Huntsville","AL","34.733964","-86.522913","-6","1" +"35895","Huntsville","AL","34.733964","-86.522913","-6","1" +"35896","Huntsville","AL","34.733964","-86.522913","-6","1" +"35897","Huntsville","AL","34.733964","-86.522913","-6","1" +"35898","Huntsville","AL","34.733964","-86.522913","-6","1" +"35899","Huntsville","AL","34.733898","-86.645592","-6","1" +"35901","Gadsden","AL","34.016747","-85.99282","-6","1" +"35902","Gadsden","AL","33.984062","-85.803434","-6","1" +"35903","Gadsden","AL","33.996698","-85.92496","-6","1" +"35904","Gadsden","AL","34.032097","-86.0353","-6","1" +"35905","Gadsden","AL","33.942031","-85.93993","-6","1" +"35906","Rainbow City","AL","33.943964","-86.06154","-6","1" +"35907","Gadsden","AL","33.906415","-86.02665","-6","1" +"35950","Albertville","AL","34.261878","-86.22835","-6","1" +"35951","Albertville","AL","34.313014","-86.19282","-6","1" +"35952","Altoona","AL","34.057496","-86.32225","-6","1" +"35953","Ashville","AL","33.825516","-86.24231","-6","1" +"35954","Attalla","AL","34.043263","-86.08904","-6","1" +"35956","Boaz","AL","34.155318","-86.13237","-6","1" +"35957","Boaz","AL","34.203621","-86.1728","-6","1" +"35958","Bryant","AL","34.921827","-85.63784","-6","1" +"35959","Cedar Bluff","AL","34.237989","-85.61277","-6","1" +"35960","Centre","AL","34.141067","-85.60472","-6","1" +"35961","Collinsville","AL","34.279268","-85.85634","-6","1" +"35962","Crossville","AL","34.297717","-86.036","-6","1" +"35963","Dawson","AL","34.359766","-85.92825","-6","1" +"35964","Douglas","AL","34.34962","-86.319824","-6","1" +"35966","Flat Rock","AL","34.788306","-85.67642","-6","1" +"35967","Fort Payne","AL","34.429472","-85.71078","-6","1" +"35968","Fort Payne","AL","34.460537","-85.76744","-6","1" +"35969","Fort Payne","AL","34.452575","-85.717302","-6","1" +"35971","Fyffe","AL","34.457657","-85.92772","-6","1" +"35972","Gallant","AL","33.987653","-86.25523","-6","1" +"35973","Gaylesville","AL","34.333048","-85.55172","-6","1" +"35974","Geraldine","AL","34.361787","-86.0098","-6","1" +"35975","Groveoak","AL","34.431683","-86.06169","-6","1" +"35976","Guntersville","AL","34.350835","-86.30475","-6","1" +"35978","Henagar","AL","34.637589","-85.73274","-6","1" +"35979","Higdon","AL","34.831242","-85.61564","-6","1" +"35980","Horton","AL","34.179277","-86.36882","-6","1" +"35981","Ider","AL","34.717362","-85.65353","-6","1" +"35983","Leesburg","AL","34.189256","-85.76816","-6","1" +"35984","Mentone","AL","34.557735","-85.5751","-6","1" +"35986","Rainsville","AL","34.500878","-85.83763","-6","1" +"35987","Steele","AL","33.9117","-86.24408","-6","1" +"35988","Sylvania","AL","34.56838","-85.79646","-6","1" +"35989","Valley Head","AL","34.5852","-85.65125","-6","1" +"35990","Walnut Grove","AL","34.066644","-86.30438","-6","1" +"36003","Autaugaville","AL","32.439967","-86.68801","-6","1" +"36005","Banks","AL","31.859531","-85.75558","-6","1" +"36006","Billingsley","AL","32.65279","-86.7143","-6","1" +"36008","Booth","AL","32.501649","-86.572711","-6","1" +"36009","Brantley","AL","31.579451","-86.3188","-6","1" +"36010","Brundidge","AL","31.678393","-85.82425","-6","1" +"36013","Cecil","AL","32.295289","-85.99653","-6","1" +"36015","Chapman","AL","31.642713","-86.734317","-6","1" +"36016","Clayton","AL","31.843675","-85.43298","-6","1" +"36017","Clio","AL","31.692576","-85.55787","-6","1" +"36020","Coosada","AL","32.496067","-86.33073","-6","1" +"36022","Deatsville","AL","32.612619","-86.39497","-6","1" +"36023","East Tallassee","AL","32.800155","-85.803427","-6","1" +"36024","Eclectic","AL","32.697561","-86.016","-6","1" +"36025","Elmore","AL","32.538878","-86.33358","-6","1" +"36026","Equality","AL","32.776549","-86.0477","-6","1" +"36027","Eufaula","AL","31.876168","-85.17362","-6","1" +"36028","Dozier","AL","31.474803","-86.37618","-6","1" +"36029","Fitzpatrick","AL","32.214818","-85.93281","-6","1" +"36030","Forest Home","AL","31.847964","-86.86441","-6","1" +"36031","Fort Davis","AL","32.251957","-85.73589","-6","1" +"36032","Fort Deposit","AL","31.984289","-86.57087","-6","1" +"36033","Georgiana","AL","31.655458","-86.76737","-6","1" +"36034","Glenwood","AL","31.637696","-86.13578","-6","1" +"36035","Goshen","AL","31.756986","-86.14489","-6","1" +"36036","Grady","AL","31.985456","-86.15741","-6","1" +"36037","Greenville","AL","31.8007","-86.60591","-6","1" +"36038","Gantt","AL","31.260882","-86.444833","-6","1" +"36039","Hardaway","AL","32.28032","-85.81979","-6","1" +"36040","Hayneville","AL","32.182677","-86.66877","-6","1" +"36041","Highland Home","AL","31.913456","-86.30083","-6","1" +"36042","Honoraville","AL","31.860078","-86.44607","-6","1" +"36043","Hope Hull","AL","32.22381","-86.39798","-6","1" +"36045","Kent","AL","32.587631","-86.132981","-6","1" +"36046","Lapine","AL","32.025367","-86.34182","-6","1" +"36047","Letohatchee","AL","32.070433","-86.49437","-6","1" +"36048","Louisville","AL","31.776734","-85.58908","-6","1" +"36049","Luverne","AL","31.737407","-86.26946","-6","1" +"36051","Marbury","AL","32.682598","-86.47451","-6","1" +"36052","Mathews","AL","32.171705","-86.06661","-6","1" +"36053","Midway","AL","32.011153","-85.46827","-6","1" +"36054","Millbrook","AL","32.492335","-86.36692","-6","1" +"36057","Mount Meigs","AL","32.233377","-86.208528","-6","1" +"36061","Perote","AL","32.092808","-85.704649","-6","1" +"36062","Petrey","AL","31.74589","-86.323949","-6","1" +"36064","Pike Road","AL","32.318234","-86.09585","-6","1" +"36065","Pine Level","AL","32.042813","-86.0514","-6","1" +"36066","Prattville","AL","32.459435","-86.42746","-6","1" +"36067","Prattville","AL","32.488113","-86.52962","-6","1" +"36068","Prattville","AL","32.507893","-86.666272","-6","1" +"36069","Ramer","AL","32.07955","-86.14911","-6","1" +"36071","Rutledge","AL","31.708837","-86.38617","-6","1" +"36072","Eufaula","AL","31.826055","-85.166028","-6","1" +"36075","Shorter","AL","32.399994","-85.9237","-6","1" +"36078","Tallassee","AL","32.553036","-85.9136","-6","1" +"36079","Troy","AL","31.780847","-85.992","-6","1" +"36080","Titus","AL","32.691057","-86.29429","-6","1" +"36081","Troy","AL","31.852825","-85.92314","-6","1" +"36082","Troy","AL","31.816474","-85.964713","-6","1" +"36083","Tuskegee","AL","32.427987","-85.69542","-6","1" +"36087","Tuskegee Institute","AL","32.40926","-85.738032","-6","1" +"36088","Tuskegee Institute","AL","32.419862","-85.71699","-6","1" +"36089","Union Springs","AL","32.145437","-85.70998","-6","1" +"36091","Verbena","AL","32.759543","-86.51111","-6","1" +"36092","Wetumpka","AL","32.592889","-86.21902","-6","1" +"36093","Wetumpka","AL","32.505741","-86.15644","-6","1" +"36101","Montgomery","AL","32.356988","-86.257817","-6","1" +"36102","Montgomery","AL","32.233377","-86.208528","-6","1" +"36103","Montgomery","AL","32.346158","-86.287316","-6","1" +"36104","Montgomery","AL","32.377509","-86.31068","-6","1" +"36105","Montgomery","AL","32.30234","-86.30504","-6","1" +"36106","Montgomery","AL","32.354888","-86.27161","-6","1" +"36107","Montgomery","AL","32.378138","-86.27905","-6","1" +"36108","Montgomery","AL","32.353188","-86.36037","-6","1" +"36109","Montgomery","AL","32.386088","-86.24511","-6","1" +"36110","Montgomery","AL","32.426372","-86.27007","-6","1" +"36111","Montgomery","AL","32.338989","-86.27316","-6","1" +"36112","Montgomery","AL","32.374287","-86.345719","-6","1" +"36113","Montgomery","AL","32.359588","-86.34434","-6","1" +"36114","Montgomery","AL","32.403987","-86.253867","-6","1" +"36115","Montgomery","AL","32.404754","-86.24963","-6","1" +"36116","Montgomery","AL","32.31324","-86.23672","-6","1" +"36117","Montgomery","AL","32.373714","-86.16443","-6","1" +"36118","Montgomery","AL","32.233377","-86.208528","-6","1" +"36119","Montgomery","AL","32.233377","-86.208528","-6","1" +"36120","Montgomery","AL","32.233377","-86.208528","-6","1" +"36121","Montgomery","AL","32.233377","-86.208528","-6","1" +"36123","Montgomery","AL","32.233377","-86.208528","-6","1" +"36124","Montgomery","AL","32.233377","-86.208528","-6","1" +"36125","Montgomery","AL","32.233377","-86.208528","-6","1" +"36130","Montgomery","AL","32.233377","-86.208528","-6","1" +"36131","Montgomery","AL","32.233377","-86.208528","-6","1" +"36132","Montgomery","AL","32.233377","-86.208528","-6","1" +"36133","Montgomery","AL","32.233377","-86.208528","-6","1" +"36134","Montgomery","AL","32.233377","-86.208528","-6","1" +"36135","Montgomery","AL","32.233377","-86.208528","-6","1" +"36140","Montgomery","AL","32.233377","-86.208528","-6","1" +"36141","Montgomery","AL","32.233377","-86.208528","-6","1" +"36142","Montgomery","AL","32.233377","-86.208528","-6","1" +"36177","Montgomery","AL","32.233377","-86.208528","-6","1" +"36191","Montgomery","AL","32.233377","-86.208528","-6","1" +"36201","Anniston","AL","33.658803","-85.85178","-6","1" +"36202","Anniston","AL","33.762195","-85.837828","-6","1" +"36203","Anniston","AL","33.591301","-85.83571","-6","1" +"36204","Anniston","AL","33.762195","-85.837828","-6","1" +"36205","Anniston","AL","33.711314","-85.78527","-6","1" +"36206","Anniston","AL","33.719701","-85.83166","-6","1" +"36207","Anniston","AL","33.651673","-85.75895","-6","1" +"36250","Alexandria","AL","33.766057","-85.88969","-6","1" +"36251","Ashland","AL","33.243964","-85.84503","-6","1" +"36253","Bynum","AL","33.762195","-85.837828","-6","1" +"36254","Choccolocco","AL","33.657349","-85.699116","-6","1" +"36255","Cragford","AL","33.185338","-85.72548","-6","1" +"36256","Daviston","AL","33.032076","-85.69962","-6","1" +"36257","De Armanville","AL","33.762195","-85.837828","-6","1" +"36258","Delta","AL","33.473789","-85.71409","-6","1" +"36260","Eastaboga","AL","33.593189","-85.99551","-6","1" +"36261","Edwardsville","AL","33.706595","-85.509902","-6","1" +"36262","Fruithurst","AL","33.761052","-85.45227","-6","1" +"36263","Graham","AL","33.469709","-85.36139","-6","1" +"36264","Heflin","AL","33.613541","-85.55457","-6","1" +"36265","Jacksonville","AL","33.824496","-85.77037","-6","1" +"36266","Lineville","AL","33.328958","-85.72073","-6","1" +"36267","Millerville","AL","33.200704","-85.94159","-6","1" +"36268","Munford","AL","33.51179","-85.94756","-6","1" +"36269","Muscadine","AL","33.740158","-85.37813","-6","1" +"36270","Newell","AL","33.423088","-85.47202","-6","1" +"36271","Ohatchee","AL","33.79933","-86.0286","-6","1" +"36272","Piedmont","AL","33.948018","-85.61491","-6","1" +"36273","Ranburne","AL","33.535491","-85.36312","-6","1" +"36274","Roanoke","AL","33.159848","-85.36865","-6","1" +"36275","Spring Garden","AL","33.977829","-85.552143","-6","1" +"36276","Wadley","AL","33.142612","-85.57418","-6","1" +"36277","Weaver","AL","33.754308","-85.81991","-6","1" +"36278","Wedowee","AL","33.338853","-85.509","-6","1" +"36279","Wellington","AL","33.862349","-85.89512","-6","1" +"36280","Woodland","AL","33.366136","-85.36501","-6","1" +"36301","Dothan","AL","31.180076","-85.4045","-6","1" +"36302","Dothan","AL","31.156018","-85.355931","-6","1" +"36303","Dothan","AL","31.249042","-85.40605","-6","1" +"36304","Dothan","AL","31.156018","-85.355931","-6","1" +"36305","Dothan","AL","31.214832","-85.47402","-6","1" +"36310","Abbeville","AL","31.599256","-85.2094","-6","1" +"36311","Ariton","AL","31.589226","-85.69097","-6","1" +"36312","Ashford","AL","31.178688","-85.2429","-6","1" +"36313","Bellwood","AL","31.174249","-85.79562","-6","1" +"36314","Black","AL","31.013308","-85.75742","-6","1" +"36316","Chancellor","AL","31.172641","-85.86482","-6","1" +"36317","Clopton","AL","31.645125","-85.37812","-6","1" +"36318","Coffee Springs","AL","31.16782","-85.94917","-6","1" +"36319","Columbia","AL","31.312599","-85.14456","-6","1" +"36320","Cottonwood","AL","31.051843","-85.31561","-6","1" +"36321","Cowarts","AL","31.202473","-85.301373","-6","1" +"36322","Daleville","AL","31.284499","-85.72111","-6","1" +"36323","Elba","AL","31.428389","-86.07271","-6","1" +"36330","Enterprise","AL","31.32579","-85.84117","-6","1" +"36331","Enterprise","AL","31.297817","-85.90364","-6","1" +"36340","Geneva","AL","31.043454","-85.87941","-6","1" +"36343","Gordon","AL","31.087556","-85.13116","-6","1" +"36344","Hartford","AL","31.096994","-85.7001","-6","1" +"36345","Headland","AL","31.381263","-85.3149","-6","1" +"36346","Jack","AL","31.567171","-85.93102","-6","1" +"36349","Malvern","AL","31.121244","-85.559235","-6","1" +"36350","Midland City","AL","31.319083","-85.48718","-6","1" +"36351","New Brockton","AL","31.406536","-85.9175","-6","1" +"36352","Newton","AL","31.262955","-85.60789","-6","1" +"36353","Newville","AL","31.453069","-85.36241","-6","1" +"36360","Ozark","AL","31.447119","-85.62908","-6","1" +"36361","Ozark","AL","31.407872","-85.603458","-6","1" +"36362","Fort Rucker","AL","31.352676","-85.70509","-6","1" +"36370","Pansey","AL","31.141962","-85.15675","-6","1" +"36371","Pinckard","AL","31.31201","-85.54722","-6","1" +"36373","Shorterville","AL","31.52151","-85.1146","-6","1" +"36374","Skipperville","AL","31.569287","-85.48581","-6","1" +"36375","Slocomb","AL","31.096836","-85.54403","-6","1" +"36376","Webb","AL","31.243717","-85.27681","-6","1" +"36383","Lanett","AL","32.890759","-85.221739","-6","1" +"36395","Malvern","AL","31.138076","-85.529661","-6","1" +"36401","Evergreen","AL","31.461019","-86.96271","-6","1" +"36420","Andalusia","AL","31.279043","-86.48699","-6","1" +"36422","Lockhart","AL","31.045685","-86.433655","-6","1" +"36425","Beatrice","AL","31.737883","-87.17442","-6","1" +"36426","Brewton","AL","31.129008","-87.10173","-6","1" +"36427","Brewton","AL","31.091784","-87.26404","-6","1" +"36429","Brooklyn","AL","31.466945","-87.044687","-6","1" +"36431","Burnt Corn","AL","31.529531","-87.345345","-6","1" +"36432","Castleberry","AL","31.291038","-87.03109","-6","1" +"36435","Coy","AL","31.874887","-87.4311","-6","1" +"36436","Dickinson","AL","31.756797","-87.645","-6","1" +"36439","Excel","AL","31.429472","-87.339329","-6","1" +"36441","Flomaton","AL","31.023139","-87.23957","-6","1" +"36442","Florala","AL","31.042071","-86.34347","-6","1" +"36444","Franklin","AL","31.63857","-87.46772","-6","1" +"36445","Frisco City","AL","31.429994","-87.41631","-6","1" +"36446","Fulton","AL","31.786539","-87.72688","-6","1" +"36449","Goodway","AL","31.529531","-87.345345","-6","1" +"36451","Grove Hill","AL","31.704736","-87.77773","-6","1" +"36453","Kinston","AL","31.203287","-86.15169","-6","1" +"36454","Lenox","AL","31.466945","-87.044687","-6","1" +"36455","Lockhart","AL","31.011435","-86.35065","-6","1" +"36456","McKenzie","AL","31.54668","-86.77355","-6","1" +"36457","Megargel","AL","31.361214","-87.435279","-6","1" +"36458","Mexia","AL","31.514659","-87.408362","-6","1" +"36460","Monroeville","AL","31.509039","-87.32416","-6","1" +"36461","Monroeville","AL","31.522093","-87.341108","-6","1" +"36462","Monroeville","AL","31.529531","-87.345345","-6","1" +"36467","Opp","AL","31.280048","-86.25484","-6","1" +"36470","Perdue Hill","AL","31.514262","-87.50401","-6","1" +"36471","Peterman","AL","31.612646","-87.24886","-6","1" +"36473","Range","AL","31.306814","-87.20327","-6","1" +"36474","Red Level","AL","31.416059","-86.61397","-6","1" +"36475","Repton","AL","31.410205","-87.22474","-6","1" +"36476","River Falls","AL","31.356774","-86.54879","-6","1" +"36477","Samson","AL","31.091359","-86.04782","-6","1" +"36480","Uriah","AL","31.320897","-87.59607","-6","1" +"36481","Vredenburgh","AL","31.821448","-87.34313","-6","1" +"36482","Whatley","AL","31.614138","-87.63373","-6","1" +"36483","Wing","AL","31.03183","-86.70207","-6","1" +"36501","Alma","AL","31.463968","-87.73883","-6","1" +"36502","Atmore","AL","31.090528","-87.49715","-6","1" +"36503","Atmore","AL","31.128242","-87.152068","-6","1" +"36504","Atmore","AL","31.015817","-87.497165","-6","1" +"36505","Axis","AL","30.930065","-88.00103","-6","1" +"36507","Bay Minette","AL","30.875697","-87.76592","-6","1" +"36508","Dauphin Island","AL","30.253557","-88.101463","-6","1" +"36509","Bayou La Batre","AL","30.401384","-88.24671","-6","1" +"36511","Bon Secour","AL","30.312316","-87.73468","-6","1" +"36512","Bucks","AL","30.658865","-88.177975","-6","1" +"36513","Calvert","AL","31.161966","-87.99588","-6","1" +"36515","Carlton","AL","31.375467","-87.78506","-6","1" +"36518","Chatom","AL","31.463383","-88.26781","-6","1" +"36521","Chunchula","AL","30.965694","-88.18697","-6","1" +"36522","Citronelle","AL","31.0753","-88.2633","-6","1" +"36523","Coden","AL","30.383724","-88.18466","-6","1" +"36524","Coffeeville","AL","31.790834","-88.06933","-6","1" +"36525","Creola","AL","30.886317","-88.02806","-6","1" +"36526","Daphne","AL","30.620594","-87.88312","-6","1" +"36527","Spanish Fort","AL","30.684873","-87.89723","-6","1" +"36528","Dauphin Island","AL","30.250825","-88.11819","-6","1" +"36529","Deer Park","AL","31.309194","-88.26036","-6","1" +"36530","Elberta","AL","30.377657","-87.56159","-6","1" +"36531","Loxley","AL","30.620944","-87.753091","-6","1" +"36532","Fairhope","AL","30.512458","-87.88559","-6","1" +"36533","Fairhope","AL","30.484131","-87.860613","-6","1" +"36535","Foley","AL","30.396876","-87.69616","-6","1" +"36536","Foley","AL","30.42216","-87.706371","-6","1" +"36538","Frankville","AL","31.646087","-88.14188","-6","1" +"36539","Fruitdale","AL","31.375241","-88.41557","-6","1" +"36540","Gainestown","AL","31.453836","-87.64373","-6","1" +"36541","Grand Bay","AL","30.487783","-88.32722","-6","1" +"36542","Gulf Shores","AL","30.262276","-87.72784","-6","1" +"36543","Huxford","AL","31.216132","-87.461537","-6","1" +"36544","Irvington","AL","30.479171","-88.23793","-6","1" +"36545","Jackson","AL","31.508231","-87.88346","-6","1" +"36547","Gulf Shores","AL","30.265325","-87.629926","-6","1" +"36548","Leroy","AL","31.495691","-87.9626","-6","1" +"36549","Lillian","AL","30.393983","-87.45664","-6","1" +"36550","Little River","AL","31.242801","-87.76099","-6","1" +"36551","Loxley","AL","30.6316","-87.75299","-6","1" +"36553","McIntosh","AL","31.234589","-88.08089","-6","1" +"36555","Magnolia Springs","AL","30.427641","-87.796011","-6","1" +"36556","Malcolm","AL","31.213801","-87.96228","-6","1" +"36558","Millry","AL","31.629578","-88.34737","-6","1" +"36559","Montrose","AL","30.564701","-87.90216","-6","1" +"36560","Mount Vernon","AL","31.088463","-88.03007","-6","1" +"36561","Orange Beach","AL","30.291503","-87.56198","-6","1" +"36562","Perdido","AL","31.021335","-87.64417","-6","1" +"36564","Point Clear","AL","30.471767","-87.91874","-6","1" +"36567","Robertsdale","AL","30.5822","-87.63936","-6","1" +"36568","Saint Elmo","AL","30.49434","-88.269865","-6","1" +"36569","Saint Stephens","AL","31.529488","-88.06349","-6","1" +"36570","Salitpa","AL","31.613745","-88.01381","-6","1" +"36571","Saraland","AL","30.831636","-88.09386","-6","1" +"36572","Satsuma","AL","30.857435","-88.05414","-6","1" +"36574","Seminole","AL","30.511685","-87.4686","-6","1" +"36575","Semmes","AL","30.76635","-88.26553","-6","1" +"36576","Silverhill","AL","30.540664","-87.7549","-6","1" +"36577","Spanish Fort","AL","30.668757","-87.93971","-6","1" +"36578","Stapleton","AL","30.744745","-87.81486","-6","1" +"36579","Stockton","AL","31.126122","-87.80317","-6","1" +"36580","Summerdale","AL","30.485351","-87.71292","-6","1" +"36581","Sunflower","AL","31.373999","-87.99791","-6","1" +"36582","Theodore","AL","30.533744","-88.16865","-6","1" +"36583","Tibbie","AL","31.35209","-88.20879","-6","1" +"36584","Vinegar Bend","AL","31.202048","-88.38071","-6","1" +"36585","Wagarville","AL","31.38122","-88.02433","-6","1" +"36586","Walker Springs","AL","31.58842","-87.840875","-6","1" +"36587","Wilmer","AL","30.828988","-88.35079","-6","1" +"36590","Theodore","AL","30.487953","-88.253278","-6","1" +"36601","Mobile","AL","30.701142","-88.103184","-6","1" +"36602","Mobile","AL","30.693389","-88.04416","-6","1" +"36603","Mobile","AL","30.688457","-88.05341","-6","1" +"36604","Mobile","AL","30.68164","-88.06676","-6","1" +"36605","Mobile","AL","30.641191","-88.08222","-6","1" +"36606","Mobile","AL","30.674057","-88.10249","-6","1" +"36607","Mobile","AL","30.699539","-88.10474","-6","1" +"36608","Mobile","AL","30.69044","-88.19701","-6","1" +"36609","Mobile","AL","30.662735","-88.16255","-6","1" +"36610","Mobile","AL","30.737405","-88.08201","-6","1" +"36611","Mobile","AL","30.764938","-88.08505","-6","1" +"36612","Mobile","AL","30.753155","-88.11116","-6","1" +"36613","Eight Mile","AL","30.795637","-88.1577","-6","1" +"36614","Mobile","AL","30.601892","-88.211103","-6","1" +"36615","Mobile","AL","30.64109","-88.062248","-6","1" +"36616","Mobile","AL","30.671048","-88.126656","-6","1" +"36617","Mobile","AL","30.717539","-88.09609","-6","1" +"36618","Mobile","AL","30.728488","-88.16845","-6","1" +"36619","Mobile","AL","30.586808","-88.18552","-6","1" +"36621","Mobile","AL","30.658865","-88.177975","-6","1" +"36622","Mobile","AL","30.658865","-88.177975","-6","1" +"36623","Mobile","AL","30.658865","-88.177975","-6","1" +"36625","Mobile","AL","30.658865","-88.177975","-6","1" +"36626","Mobile","AL","30.658865","-88.177975","-6","1" +"36628","Mobile","AL","30.658865","-88.177975","-6","1" +"36630","Mobile","AL","30.658865","-88.177975","-6","1" +"36631","Mobile","AL","30.658865","-88.177975","-6","1" +"36633","Mobile","AL","30.658865","-88.177975","-6","1" +"36640","Mobile","AL","30.658865","-88.177975","-6","1" +"36641","Mobile","AL","30.658865","-88.177975","-6","1" +"36644","Mobile","AL","30.658865","-88.177975","-6","1" +"36652","Mobile","AL","30.658865","-88.177975","-6","1" +"36660","Mobile","AL","30.658865","-88.177975","-6","1" +"36663","Mobile","AL","30.81901","-88.231726","-6","1" +"36670","Mobile","AL","30.658865","-88.177975","-6","1" +"36671","Mobile","AL","30.658865","-88.177975","-6","1" +"36675","Mobile","AL","30.658865","-88.177975","-6","1" +"36685","Mobile","AL","30.658865","-88.177975","-6","1" +"36688","Mobile","AL","30.696589","-88.173652","-6","1" +"36689","Mobile","AL","30.658865","-88.177975","-6","1" +"36690","Mobile","AL","30.658865","-88.177975","-6","1" +"36691","Mobile","AL","30.658865","-88.177975","-6","1" +"36693","Mobile","AL","30.630441","-88.15397","-6","1" +"36695","Mobile","AL","30.646415","-88.23657","-6","1" +"36701","Selma","AL","32.429066","-87.03809","-6","1" +"36702","Selma","AL","32.419259","-87.124708","-6","1" +"36703","Selma","AL","32.419846","-86.97783","-6","1" +"36720","Alberta","AL","32.170653","-87.36217","-6","1" +"36721","Annemanie","AL","32.048079","-87.26226","-6","1" +"36722","Arlington","AL","32.079894","-87.57551","-6","1" +"36723","Boykin","AL","32.08846","-87.28018","-6","1" +"36726","Camden","AL","32.008444","-87.25911","-6","1" +"36727","Campbell","AL","31.910694","-88.03148","-6","1" +"36728","Catherine","AL","32.147166","-87.45675","-6","1" +"36732","Demopolis","AL","32.495484","-87.84521","-6","1" +"36736","Dixons Mills","AL","32.069338","-87.77893","-6","1" +"36738","Faunsdale","AL","32.41786","-87.62729","-6","1" +"36740","Forkland","AL","32.629096","-87.84004","-6","1" +"36741","Furman","AL","32.006129","-86.981703","-6","1" +"36742","Gallion","AL","32.454007","-87.75003","-6","1" +"36744","Greensboro","AL","32.703529","-87.60177","-6","1" +"36745","Jefferson","AL","32.414036","-87.898611","-6","1" +"36748","Linden","AL","32.297441","-87.78812","-6","1" +"36749","Jones","AL","32.54896","-86.87897","-6","1" +"36750","Maplesville","AL","32.789726","-86.8496","-6","1" +"36751","Lower Peach Tree","AL","31.833493","-87.55005","-6","1" +"36752","Lowndesboro","AL","32.322266","-86.64395","-6","1" +"36753","McWilliams","AL","32.048079","-87.26226","-6","1" +"36754","Magnolia","AL","32.140637","-87.6801","-6","1" +"36755","Greensboro","AL","32.700467","-87.578576","-6","1" +"36756","Marion","AL","32.665966","-87.33889","-6","1" +"36758","Plantersville","AL","32.639376","-86.91034","-6","1" +"36759","Marion Junction","AL","32.420138","-87.27857","-6","1" +"36761","Minter","AL","32.080532","-86.95524","-6","1" +"36762","Morvin","AL","31.940191","-88.00336","-6","1" +"36763","Myrtlewood","AL","32.249718","-87.96332","-6","1" +"36764","Nanafalia","AL","32.268329","-87.795275","-6","1" +"36765","Newbern","AL","32.594818","-87.53543","-6","1" +"36766","Oak Hill","AL","31.947005","-87.074497","-6","1" +"36767","Orrville","AL","32.29165","-87.23168","-6","1" +"36768","Pine Apple","AL","31.901412","-86.95505","-6","1" +"36769","Pine Hill","AL","31.990494","-87.55222","-6","1" +"36773","Safford","AL","32.291429","-87.39972","-6","1" +"36775","Sardis","AL","32.213369","-86.98313","-6","1" +"36776","Sawyerville","AL","32.739091","-87.7417","-6","1" +"36778","Snow Hill","AL","32.01998","-87.054284","-6","1" +"36779","Sprott","AL","32.701812","-87.17423","-6","1" +"36782","Sweet Water","AL","32.114999","-87.90187","-6","1" +"36783","Thomaston","AL","32.263473","-87.60214","-6","1" +"36784","Thomasville","AL","31.936003","-87.77013","-6","1" +"36785","Tyler","AL","32.282192","-86.8216","-6","1" +"36786","Uniontown","AL","32.440868","-87.49657","-6","1" +"36790","Stanton","AL","32.731866","-86.90004","-6","1" +"36792","Randolph","AL","32.917983","-86.89046","-6","1" +"36793","Lawley","AL","32.838805","-86.99911","-6","1" +"36801","Opelika","AL","32.660497","-85.39917","-6","1" +"36802","Opelika","AL","32.578185","-85.349003","-6","1" +"36803","Opelika","AL","32.522567","-85.431517","-6","1" +"36804","Opelika","AL","32.556296","-85.33465","-6","1" +"36830","Auburn","AL","32.577135","-85.47282","-6","1" +"36831","Auburn","AL","32.578185","-85.349003","-6","1" +"36832","Auburn","AL","32.589553","-85.53991","-6","1" +"36849","Auburn University","AL","32.602434","-85.4858","-6","1" +"36850","Camp Hill","AL","32.799998","-85.64621","-6","1" +"36851","Cottonton","AL","32.286092","-85.161497","-6","1" +"36852","Cusseta","AL","32.745844","-85.28076","-6","1" +"36853","Dadeville","AL","32.787441","-85.79955","-6","1" +"36854","Valley","AL","32.777662","-85.17623","-6","1" +"36855","Five Points","AL","33.046756","-85.30102","-6","1" +"36856","Fort Mitchell","AL","32.282085","-84.98389","-6","1" +"36858","Hatchechubbee","AL","32.297792","-85.31205","-6","1" +"36859","Holy Trinity","AL","32.229846","-85.008178","-6","1" +"36860","Hurtsboro","AL","32.237339","-85.41029","-6","1" +"36861","Jacksons Gap","AL","32.862333","-85.84588","-6","1" +"36862","Lafayette","AL","32.903922","-85.42905","-6","1" +"36863","Lanett","AL","32.871306","-85.21314","-6","1" +"36865","Loachapoka","AL","32.578185","-85.349003","-6","1" +"36866","Notasulga","AL","32.551474","-85.69859","-6","1" +"36867","Phenix City","AL","32.492304","-85.01943","-6","1" +"36868","Phenix City","AL","32.464614","-85.020604","-6","1" +"36869","Phenix City","AL","32.433065","-85.04512","-6","1" +"36870","Phenix City","AL","32.484671","-85.0752","-6","1" +"36871","Pittsview","AL","32.16827","-85.11621","-6","1" +"36872","Valley","AL","32.578185","-85.349003","-6","1" +"36874","Salem","AL","32.587751","-85.18539","-6","1" +"36875","Seale","AL","32.315128","-85.11348","-6","1" +"36876","Uniontown","AL","32.454371","-87.519156","-6","1" +"36877","Smiths","AL","32.545138","-85.09212","-6","1" +"36879","Waverly","AL","32.733511","-85.55322","-6","1" +"36901","Bellamy","AL","32.451618","-88.131","-6","1" +"36904","Butler","AL","32.097363","-88.22647","-6","1" +"36906","Cromwell","AL","32.004227","-88.200738","-6","1" +"36907","Cuba","AL","32.403275","-88.36252","-6","1" +"36908","Gilbertown","AL","31.891177","-88.28508","-6","1" +"36910","Jachin","AL","32.220752","-88.15471","-6","1" +"36912","Lisman","AL","32.227905","-88.32468","-6","1" +"36913","Melvin","AL","32.004227","-88.200738","-6","1" +"36915","Needham","AL","31.970871","-88.34902","-6","1" +"36916","Pennington","AL","32.209381","-88.05965","-6","1" +"36919","Silas","AL","31.779344","-88.30045","-6","1" +"36921","Toxey","AL","31.96958","-88.18661","-6","1" +"36922","Ward","AL","32.304709","-88.17081","-6","1" +"36925","York","AL","32.487726","-88.2679","-6","1" +"37010","Adams","TN","36.569635","-87.10026","-6","1" +"37011","Antioch","TN","36.170556","-86.8825","-6","1" +"37012","Alexandria","TN","36.076635","-86.01978","-6","1" +"37013","Antioch","TN","36.055115","-86.64782","-6","1" +"37014","Arrington","TN","35.856372","-86.66189","-6","1" +"37015","Ashland City","TN","36.299293","-87.06949","-6","1" +"37016","Auburntown","TN","35.951494","-86.09259","-6","1" +"37018","Beechgrove","TN","35.642797","-86.1669","-6","1" +"37019","Belfast","TN","35.390308","-86.70969","-6","1" +"37020","Bell Buckle","TN","35.616935","-86.39629","-6","1" +"37022","Bethpage","TN","36.501049","-86.3","-6","1" +"37023","Big Rock","TN","36.574224","-87.79018","-6","1" +"37024","Brentwood","TN","35.874553","-86.907565","-6","1" +"37025","Bon Aqua","TN","35.943598","-87.28991","-6","1" +"37026","Bradyville","TN","35.699599","-86.10976","-6","1" +"37027","Brentwood","TN","36.007373","-86.79121","-6","1" +"37028","Bumpus Mills","TN","36.633539","-87.86841","-6","1" +"37029","Burns","TN","36.047742","-87.28938","-6","1" +"37030","Carthage","TN","36.264959","-85.94893","-6","1" +"37031","Castalian Springs","TN","36.377228","-86.30112","-6","1" +"37032","Cedar Hill","TN","36.522355","-87.02542","-6","1" +"37033","Centerville","TN","35.76714","-87.49418","-6","1" +"37034","Chapel Hill","TN","35.639491","-86.6865","-6","1" +"37035","Chapmansboro","TN","36.388731","-87.13175","-6","1" +"37036","Charlotte","TN","36.225389","-87.29179","-6","1" +"37037","Christiana","TN","35.702877","-86.35134","-6","1" +"37040","Clarksville","TN","36.528448","-87.34142","-6","1" +"37041","Clarksville","TN","36.477428","-87.377197","-6","1" +"37042","Clarksville","TN","36.58068","-87.4056","-6","1" +"37043","Clarksville","TN","36.506407","-87.2572","-6","1" +"37044","Clarksville","TN","36.531398","-87.353008","-6","1" +"37046","College Grove","TN","35.7557","-86.72272","-6","1" +"37047","Cornersville","TN","35.330683","-86.8406","-6","1" +"37048","Cottontown","TN","36.491753","-86.59963","-6","1" +"37049","Cross Plains","TN","36.548569","-86.67907","-6","1" +"37050","Cumberland City","TN","36.373626","-87.63158","-6","1" +"37051","Cumberland Furnace","TN","36.310027","-87.4128","-6","1" +"37052","Cunningham","TN","36.371609","-87.4039","-6","1" +"37055","Dickson","TN","36.065779","-87.40831","-6","1" +"37056","Dickson","TN","36.146949","-87.352971","-6","1" +"37057","Dixon Springs","TN","36.389736","-86.04135","-6","1" +"37058","Dover","TN","36.477136","-87.85877","-6","1" +"37059","Dowelltown","TN","35.993983","-85.92851","-6","1" +"37060","Eagleville","TN","35.73843","-86.64441","-6","1" +"37061","Erin","TN","36.301089","-87.68198","-6","1" +"37062","Fairview","TN","35.976983","-87.14128","-6","1" +"37063","Fosterville","TN","35.859565","-86.420958","-6","1" +"37064","Franklin","TN","35.893823","-86.89919","-6","1" +"37065","Franklin","TN","35.895085","-86.921416","-6","1" +"37066","Gallatin","TN","36.388997","-86.4548","-6","1" +"37067","Franklin","TN","35.921811","-86.7952","-6","1" +"37068","Franklin","TN","35.874553","-86.907565","-6","1" +"37069","Franklin","TN","35.97706","-86.89653","-6","1" +"37070","Goodlettsville","TN","36.186605","-86.785248","-6","1" +"37071","Gladeville","TN","36.156231","-86.304922","-6","1" +"37072","Goodlettsville","TN","36.35465","-86.71879","-6","1" +"37073","Greenbrier","TN","36.427758","-86.81023","-6","1" +"37074","Hartsville","TN","36.407653","-86.15305","-6","1" +"37075","Hendersonville","TN","36.311047","-86.61173","-6","1" +"37076","Hermitage","TN","36.180507","-86.60111","-6","1" +"37077","Hendersonville","TN","36.304701","-86.621095","-6","1" +"37078","Hurricane Mills","TN","35.924976","-87.77219","-6","1" +"37079","Indian Mound","TN","36.48677","-87.66331","-6","1" +"37080","Joelton","TN","36.329551","-86.90949","-6","1" +"37082","Kingston Springs","TN","36.084917","-87.1106","-6","1" +"37083","Lafayette","TN","36.537994","-86.01497","-6","1" +"37085","Lascassas","TN","35.950979","-86.29596","-6","1" +"37086","La Vergne","TN","36.01333","-86.56268","-6","1" +"37087","Lebanon","TN","36.240331","-86.29271","-6","1" +"37088","Lebanon","TN","36.156231","-86.304922","-6","1" +"37089","La Vergne","TN","35.859565","-86.420958","-6","1" +"37090","Lebanon","TN","36.147433","-86.31061","-6","1" +"37091","Lewisburg","TN","35.461359","-86.7792","-6","1" +"37095","Liberty","TN","36.000953","-85.97669","-6","1" +"37096","Linden","TN","35.61432","-87.87486","-6","1" +"37097","Lobelville","TN","35.769743","-87.80286","-6","1" +"37098","Lyles","TN","35.882639","-87.31395","-6","1" +"37101","McEwen","TN","36.069712","-87.64489","-6","1" +"37110","McMinnville","TN","35.687286","-85.787","-6","1" +"37111","McMinnville","TN","35.678368","-85.777633","-6","1" +"37115","Madison","TN","36.264069","-86.70566","-6","1" +"37116","Madison","TN","36.186605","-86.785248","-6","1" +"37118","Milton","TN","35.929221","-86.18393","-6","1" +"37119","Mitchellville","TN","36.631981","-86.539028","-6","1" +"37121","Mount Juliet","TN","36.156231","-86.304922","-6","1" +"37122","Mount Juliet","TN","36.195016","-86.49732","-6","1" +"37127","Murfreesboro","TN","35.791021","-86.34445","-6","1" +"37128","Murfreesboro","TN","35.813319","-86.4455","-6","1" +"37129","Murfreesboro","TN","35.896645","-86.42425","-6","1" +"37130","Murfreesboro","TN","35.860152","-86.3648","-6","1" +"37131","Murfreesboro","TN","35.859565","-86.420958","-6","1" +"37132","Murfreesboro","TN","35.859565","-86.420958","-6","1" +"37133","Murfreesboro","TN","35.859565","-86.420958","-6","1" +"37134","New Johnsonville","TN","36.022057","-87.9564","-6","1" +"37135","Nolensville","TN","35.940383","-86.6686","-6","1" +"37136","Norene","TN","36.156231","-86.304922","-6","1" +"37137","Nunnelly","TN","35.88662","-87.50471","-6","1" +"37138","Old Hickory","TN","36.243698","-86.62308","-6","1" +"37140","Only","TN","35.863362","-87.67179","-6","1" +"37141","Orlinda","TN","36.60983","-86.69226","-6","1" +"37142","Palmyra","TN","36.421075","-87.49893","-6","1" +"37143","Pegram","TN","36.121471","-87.04467","-6","1" +"37144","Petersburg","TN","35.301331","-86.63337","-6","1" +"37145","Pleasant Shade","TN","36.377253","-85.90866","-6","1" +"37146","Pleasant View","TN","36.393153","-87.0285","-6","1" +"37147","Pleasantville","TN","35.679617","-87.65472","-6","1" +"37148","Portland","TN","36.576137","-86.51355","-6","1" +"37149","Readyville","TN","35.800108","-86.19391","-6","1" +"37150","Red Boiling Springs","TN","36.543183","-85.81114","-6","1" +"37151","Riddleton","TN","36.335403","-86.0317","-6","1" +"37152","Ridgetop","TN","36.396821","-86.76679","-6","1" +"37153","Rockvale","TN","35.751016","-86.55056","-6","1" +"37155","Saint Bethlehem","TN","36.477428","-87.377197","-6","1" +"37160","Shelbyville","TN","35.47066","-86.45974","-6","1" +"37161","Shelbyville","TN","35.471531","-86.489019","-6","1" +"37162","Shelbyville","TN","35.510825","-86.450042","-6","1" +"37165","Slayden","TN","36.283543","-87.458058","-6","1" +"37166","Smithville","TN","35.922583","-85.80108","-6","1" +"37167","Smyrna","TN","35.968513","-86.52231","-6","1" +"37171","Southside","TN","36.354736","-87.30571","-6","1" +"37172","Springfield","TN","36.513979","-86.86892","-6","1" +"37174","Spring Hill","TN","35.73062","-86.91144","-6","1" +"37175","Stewart","TN","36.316042","-87.89028","-6","1" +"37178","Tennessee Ridge","TN","36.323799","-87.77676","-6","1" +"37179","Thompsons Station","TN","35.79867","-86.90734","-6","1" +"37180","Unionville","TN","35.621614","-86.57353","-6","1" +"37181","Vanleer","TN","36.237999","-87.49831","-6","1" +"37183","Wartrace","TN","35.508541","-86.30889","-6","1" +"37184","Watertown","TN","36.096166","-86.13715","-6","1" +"37185","Waverly","TN","36.085376","-87.81626","-6","1" +"37186","Westmoreland","TN","36.579247","-86.23954","-6","1" +"37187","White Bluff","TN","36.117433","-87.21761","-6","1" +"37188","White House","TN","36.467624","-86.66941","-6","1" +"37189","Whites Creek","TN","36.27062","-86.82052","-6","1" +"37190","Woodbury","TN","35.813335","-86.05538","-6","1" +"37191","Woodlawn","TN","36.503792","-87.54263","-6","1" +"37201","Nashville","TN","36.164556","-86.77738","-6","1" +"37202","Nashville","TN","36.340304","-86.827254","-6","1" +"37203","Nashville","TN","36.152607","-86.78927","-6","1" +"37204","Nashville","TN","36.112058","-86.77626","-6","1" +"37205","Nashville","TN","36.113558","-86.86207","-6","1" +"37206","Nashville","TN","36.180806","-86.74176","-6","1" +"37207","Nashville","TN","36.215535","-86.77317","-6","1" +"37208","Nashville","TN","36.174806","-86.80252","-6","1" +"37209","Nashville","TN","36.151324","-86.8559","-6","1" +"37210","Nashville","TN","36.140857","-86.74437","-6","1" +"37211","Nashville","TN","36.079259","-86.72584","-6","1" +"37212","Nashville","TN","36.133251","-86.80057","-6","1" +"37213","Nashville","TN","36.167179","-86.76777","-6","1" +"37214","Nashville","TN","36.166956","-86.66869","-6","1" +"37215","Nashville","TN","36.098408","-86.82522","-6","1" +"37216","Nashville","TN","36.213004","-86.72594","-6","1" +"37217","Nashville","TN","36.103408","-86.66616","-6","1" +"37218","Nashville","TN","36.206755","-86.85215","-6","1" +"37219","Nashville","TN","36.166806","-86.78172","-6","1" +"37220","Nashville","TN","36.069659","-86.77266","-6","1" +"37221","Nashville","TN","36.065032","-86.94674","-6","1" +"37222","Nashville","TN","36.056164","-86.980116","-6","1" +"37224","Nashville","TN","36.186605","-86.785248","-6","1" +"37227","Nashville","TN","36.186605","-86.785248","-6","1" +"37228","Nashville","TN","36.190205","-86.80078","-6","1" +"37229","Nashville","TN","36.186605","-86.785248","-6","1" +"37230","Nashville","TN","36.186605","-86.785248","-6","1" +"37232","Nashville","TN","36.186605","-86.785248","-6","1" +"37234","Nashville","TN","36.186605","-86.785248","-6","1" +"37235","Nashville","TN","36.186605","-86.785248","-6","1" +"37236","Nashville","TN","36.186605","-86.785248","-6","1" +"37237","Nashville","TN","36.186605","-86.785248","-6","1" +"37238","Nashville","TN","36.186605","-86.785248","-6","1" +"37239","Nashville","TN","36.186605","-86.785248","-6","1" +"37240","Nashville","TN","36.186605","-86.785248","-6","1" +"37241","Nashville","TN","36.186605","-86.785248","-6","1" +"37242","Nashville","TN","36.186605","-86.785248","-6","1" +"37243","Nashville","TN","36.167606","-86.784498","-6","1" +"37244","Nashville","TN","36.186605","-86.785248","-6","1" +"37245","Nashville","TN","36.186605","-86.785248","-6","1" +"37246","Nashville","TN","36.158606","-86.789998","-6","1" +"37247","Nashville","TN","36.186605","-86.785248","-6","1" +"37248","Nashville","TN","36.186605","-86.785248","-6","1" +"37249","Nashville","TN","36.186605","-86.785248","-6","1" +"37250","Nashville","TN","36.186605","-86.785248","-6","1" +"37301","Altamont","TN","35.429018","-85.77679","-6","1" +"37302","Apison","TN","35.017404","-85.01322","-5","1" +"37303","Athens","TN","35.441378","-84.61975","-5","1" +"37304","Bakewell","TN","35.345216","-85.138046","-5","1" +"37305","Beersheba Springs","TN","35.467486","-85.67736","-6","1" +"37306","Belvidere","TN","35.106467","-86.2035","-6","1" +"37307","Benton","TN","35.172376","-84.63913","-5","1" +"37308","Birchwood","TN","35.357001","-84.99288","-5","1" +"37309","Calhoun","TN","35.302952","-84.74359","-5","1" +"37310","Charleston","TN","35.275808","-84.76927","-5","1" +"37311","Cleveland","TN","35.146362","-84.88723","-5","1" +"37312","Cleveland","TN","35.219532","-84.86489","-5","1" +"37313","Coalmont","TN","35.361678","-85.70288","-6","1" +"37314","Cokercreek","TN","35.246689","-84.303121","-5","1" +"37315","Collegedale","TN","35.047891","-85.057359","-5","1" +"37316","Conasauga","TN","34.995039","-84.72951","-5","1" +"37317","Copperhill","TN","35.008596","-84.3859","-5","1" +"37318","Cowan","TN","35.168862","-86.00538","-6","1" +"37320","Cleveland","TN","35.17272","-84.861885","-5","1" +"37321","Dayton","TN","35.495894","-85.01032","-5","1" +"37322","Decatur","TN","35.503723","-84.80741","-5","1" +"37323","Cleveland","TN","35.114482","-84.82836","-5","1" +"37324","Decherd","TN","35.234156","-86.0324","-6","1" +"37325","Delano","TN","35.245578","-84.58812","-5","1" +"37326","Ducktown","TN","35.030319","-84.38284","-5","1" +"37327","Dunlap","TN","35.399109","-85.38755","-6","1" +"37328","Elora","TN","35.018508","-86.36085","-6","1" +"37329","Englewood","TN","35.41142","-84.47473","-5","1" +"37330","Estill Springs","TN","35.280936","-86.12247","-6","1" +"37331","Etowah","TN","35.325991","-84.53015","-5","1" +"37332","Evensville","TN","35.585467","-84.94125","-5","1" +"37333","Farner","TN","35.14864","-84.31707","-5","1" +"37334","Fayetteville","TN","35.136177","-86.57433","-6","1" +"37335","Flintville","TN","35.063253","-86.41866","-6","1" +"37336","Georgetown","TN","35.308786","-84.93042","-5","1" +"37337","Grandview","TN","35.78168","-84.87955","-6","1" +"37338","Graysville","TN","35.443503","-85.18397","-6","1" +"37339","Gruetli Laager","TN","35.373152","-85.62361","-6","1" +"37340","Guild","TN","35.013853","-85.53107","-6","1" +"37341","Harrison","TN","35.19154","-85.09827","-5","1" +"37342","Hillsboro","TN","35.39156","-85.96367","-6","1" +"37343","Hixson","TN","35.167987","-85.21158","-5","1" +"37345","Huntland","TN","35.052678","-86.27141","-6","1" +"37347","Jasper","TN","35.065007","-85.61818","-6","1" +"37348","Kelso","TN","35.1149","-86.4421","-6","1" +"37349","Manchester","TN","35.497637","-86.07482","-6","1" +"37350","Lookout Mountain","TN","34.998375","-85.34865","-5","1" +"37351","Lupton City","TN","35.104789","-85.26415","-5","1" +"37352","Lynchburg","TN","35.276795","-86.35264","-6","1" +"37353","McDonald","TN","35.114036","-84.98535","-5","1" +"37354","Madisonville","TN","35.506259","-84.35738","-5","1" +"37355","Manchester","TN","35.500068","-86.08414","-6","1" +"37356","Monteagle","TN","35.238756","-85.82911","-6","1" +"37357","Morrison","TN","35.596484","-85.92275","-6","1" +"37359","Mulberry","TN","35.203361","-86.40563","-6","1" +"37360","Normandy","TN","35.433962","-86.26045","-6","1" +"37361","Ocoee","TN","35.108559","-84.70139","-5","1" +"37362","Oldfort","TN","35.043475","-84.73957","-5","1" +"37363","Ooltewah","TN","35.087881","-85.06005","-5","1" +"37364","Cleveland","TN","35.17272","-84.861885","-5","1" +"37365","Palmer","TN","35.375156","-85.55501","-6","1" +"37366","Pelham","TN","35.304582","-85.85456","-6","1" +"37367","Pikeville","TN","35.635097","-85.17161","-6","1" +"37369","Reliance","TN","35.191719","-84.49446","-5","1" +"37370","Riceville","TN","35.363968","-84.70392","-5","1" +"37371","Athens","TN","35.441376","-84.641623","-5","1" +"37372","Saint Andrews","TN","35.175522","-86.098338","-6","1" +"37373","Sale Creek","TN","35.391643","-85.10329","-5","1" +"37374","Sequatchie","TN","35.19174","-85.64149","-6","1" +"37375","Sewanee","TN","35.193891","-85.91048","-6","1" +"37376","Sherwood","TN","35.060787","-85.92217","-6","1" +"37377","Signal Mountain","TN","35.159778","-85.33332","-5","1" +"37378","Smartt","TN","35.678368","-85.777633","-6","1" +"37379","Soddy Daisy","TN","35.269694","-85.16227","-5","1" +"37380","South Pittsburg","TN","35.045886","-85.72513","-6","1" +"37381","Spring City","TN","35.68801","-84.82777","-5","1" +"37382","Summitville","TN","35.497637","-86.07482","-6","1" +"37383","Sewanee","TN","35.180503","-85.903522","-6","1" +"37384","Soddy Daisy","TN","35.221092","-85.209082","-5","1" +"37385","Tellico Plains","TN","35.345237","-84.27728","-5","1" +"37387","Tracy City","TN","35.275367","-85.74039","-6","1" +"37388","Tullahoma","TN","35.357522","-86.21484","-6","1" +"37389","Arnold AFB","TN","35.497637","-86.07482","-6","1" +"37391","Turtletown","TN","35.098017","-84.36195","-5","1" +"37394","Viola","TN","35.538116","-85.86169","-6","1" +"37395","Watts Bar Dam","TN","35.61722","-84.928921","-5","1" +"37396","Whiteside","TN","34.994156","-85.48755","-6","1" +"37397","Whitwell","TN","35.20297","-85.49733","-6","1" +"37398","Winchester","TN","35.192829","-86.14045","-6","1" +"37401","Chattanooga","TN","35.017818","-85.206426","-5","1" +"37402","Chattanooga","TN","35.046324","-85.31199","-5","1" +"37403","Chattanooga","TN","35.046173","-85.2988","-5","1" +"37404","Chattanooga","TN","35.030474","-85.2749","-5","1" +"37405","Chattanooga","TN","35.081323","-85.31903","-5","1" +"37406","Chattanooga","TN","35.065723","-85.25014","-5","1" +"37407","Chattanooga","TN","35.000825","-85.28673","-5","1" +"37408","Chattanooga","TN","35.030907","-85.31004","-5","1" +"37409","Chattanooga","TN","35.001842","-85.33092","-5","1" +"37410","Chattanooga","TN","35.002342","-85.31407","-5","1" +"37411","Chattanooga","TN","35.023824","-85.2333","-5","1" +"37412","Chattanooga","TN","34.996674","-85.23748","-5","1" +"37414","Chattanooga","TN","35.221092","-85.209082","-5","1" +"37415","Chattanooga","TN","35.116285","-85.28466","-5","1" +"37416","Chattanooga","TN","35.089805","-85.18152","-5","1" +"37419","Chattanooga","TN","35.031674","-85.37276","-5","1" +"37421","Chattanooga","TN","35.028574","-85.15939","-5","1" +"37422","Chattanooga","TN","35.221092","-85.209082","-5","1" +"37424","Chattanooga","TN","35.221092","-85.209082","-5","1" +"37450","Chattanooga","TN","35.221092","-85.209082","-5","1" +"37499","Chattanooga","TN","35.221092","-85.209082","-5","1" +"37501","Memphis","TN","35.169255","-89.990415","-6","1" +"37601","Johnson City","TN","36.331006","-82.3386","-5","1" +"37602","Johnson City","TN","36.271729","-82.501212","-5","1" +"37604","Johnson City","TN","36.312633","-82.3802","-5","1" +"37605","Johnson City","TN","36.315795","-82.383792","-5","1" +"37614","Johnson City","TN","36.302479","-82.36984","-5","1" +"37615","Johnson City","TN","36.405338","-82.44593","-5","1" +"37616","Afton","TN","36.218863","-82.74704","-5","1" +"37617","Blountville","TN","36.534729","-82.37229","-5","1" +"37618","Bluff City","TN","36.469605","-82.22998","-5","1" +"37620","Bristol","TN","36.561341","-82.16869","-5","1" +"37621","Bristol","TN","36.504158","-82.26446","-5","1" +"37625","Bristol","TN","36.504158","-82.26446","-5","1" +"37640","Butler","TN","36.335618","-81.97775","-5","1" +"37641","Chuckey","TN","36.21503","-82.6744","-5","1" +"37642","Church Hill","TN","36.534489","-82.71292","-5","1" +"37643","Elizabethton","TN","36.355251","-82.18843","-5","1" +"37644","Elizabethton","TN","36.436637","-82.051765","-5","1" +"37645","Mount Carmel","TN","36.560966","-82.65855","-5","1" +"37650","Erwin","TN","36.128301","-82.4273","-5","1" +"37656","Fall Branch","TN","36.4017","-82.62705","-5","1" +"37657","Flag Pond","TN","36.011662","-82.56056","-5","1" +"37658","Hampton","TN","36.269157","-82.17558","-5","1" +"37659","Jonesborough","TN","36.293805","-82.49704","-5","1" +"37660","Kingsport","TN","36.547133","-82.55408","-5","1" +"37662","Kingsport","TN","36.530517","-82.529816","-5","1" +"37663","Kingsport","TN","36.468953","-82.49765","-5","1" +"37664","Kingsport","TN","36.522968","-82.51162","-5","1" +"37665","Kingsport","TN","36.583233","-82.57249","-5","1" +"37669","Kingsport","TN","36.504158","-82.26446","-5","1" +"37680","Laurel Bloomery","TN","36.580229","-81.75509","-5","1" +"37681","Limestone","TN","36.246547","-82.62095","-5","1" +"37682","Milligan College","TN","36.296007","-82.305359","-5","1" +"37683","Mountain City","TN","36.451041","-81.81906","-5","1" +"37684","Mountain Home","TN","36.309201","-82.37338","-5","1" +"37686","Piney Flats","TN","36.430799","-82.33344","-5","1" +"37687","Roan Mountain","TN","36.192236","-82.0975","-5","1" +"37688","Shady Valley","TN","36.529827","-81.91718","-5","1" +"37690","Telford","TN","36.254547","-82.55708","-5","1" +"37691","Trade","TN","36.367169","-81.75553","-5","1" +"37692","Unicoi","TN","36.20493","-82.31214","-5","1" +"37694","Watauga","TN","36.376371","-82.278","-5","1" +"37699","Piney Flats","TN","36.504158","-82.26446","-5","1" +"37701","Alcoa","TN","35.784708","-83.97956","-5","1" +"37705","Andersonville","TN","36.217896","-84.01131","-5","1" +"37707","Arthur","TN","36.566257","-83.636479","-5","1" +"37708","Bean Station","TN","36.320262","-83.32206","-5","1" +"37709","Blaine","TN","36.161001","-83.67602","-5","1" +"37710","Briceville","TN","36.15231","-84.28968","-5","1" +"37711","Bulls Gap","TN","36.274715","-83.05737","-5","1" +"37713","Bybee","TN","36.081083","-83.13505","-5","1" +"37714","Caryville","TN","36.290972","-84.22104","-5","1" +"37715","Clairfield","TN","36.567165","-83.94202","-5","1" +"37716","Clinton","TN","36.099283","-84.14656","-5","1" +"37717","Clinton","TN","36.110028","-84.167208","-5","1" +"37719","Coalfield","TN","36.029022","-84.42541","-5","1" +"37721","Corryton","TN","36.141925","-83.8066","-5","1" +"37722","Cosby","TN","35.820011","-83.24441","-5","1" +"37723","Crab Orchard","TN","35.933213","-84.86226","-6","1" +"37724","Cumberland Gap","TN","36.566416","-83.67499","-5","1" +"37725","Dandridge","TN","35.996454","-83.39791","-5","1" +"37726","Deer Lodge","TN","36.186086","-84.838","-5","1" +"37727","Del Rio","TN","35.900308","-83.01575","-5","1" +"37729","Duff","TN","36.510252","-84.02712","-5","1" +"37730","Eagan","TN","36.553851","-83.97503","-5","1" +"37731","Eidson","TN","36.531811","-83.03714","-5","1" +"37732","Elgin","TN","36.327029","-84.60898","-5","1" +"37733","Rugby","TN","36.351914","-84.713666","-5","1" +"37737","Friendsville","TN","35.760657","-84.11925","-5","1" +"37738","Gatlinburg","TN","35.733627","-83.47156","-5","1" +"37742","Greenback","TN","35.66806","-84.1817","-5","1" +"37743","Greeneville","TN","36.102325","-82.85446","-5","1" +"37744","Greeneville","TN","36.182289","-82.73948","-5","1" +"37745","Greeneville","TN","36.229928","-82.81406","-5","1" +"37748","Harriman","TN","35.930801","-84.53135","-5","1" +"37752","Harrogate","TN","36.581713","-83.61278","-5","1" +"37753","Hartford","TN","35.822918","-83.10835","-5","1" +"37754","Heiskell","TN","36.138832","-84.03142","-5","1" +"37755","Helenwood","TN","36.434757","-84.53288","-5","1" +"37756","Huntsville","TN","36.351978","-84.42137","-5","1" +"37757","Jacksboro","TN","36.326509","-84.17277","-5","1" +"37760","Jefferson City","TN","36.109404","-83.48325","-5","1" +"37762","Jellico","TN","36.578257","-84.13698","-5","1" +"37763","Kingston","TN","35.839274","-84.50562","-5","1" +"37764","Kodak","TN","35.97555","-83.61374","-5","1" +"37765","Kyles Ford","TN","36.572764","-83.05028","-5","1" +"37766","La Follette","TN","36.388766","-84.08164","-5","1" +"37769","Lake City","TN","36.221786","-84.14984","-5","1" +"37770","Lancing","TN","36.133166","-84.66792","-5","1" +"37771","Lenoir City","TN","35.815524","-84.29301","-5","1" +"37772","Lenoir City","TN","35.800329","-84.23281","-5","1" +"37773","Lone Mountain","TN","36.466398","-83.678621","-5","1" +"37774","Loudon","TN","35.725969","-84.33069","-5","1" +"37777","Louisville","TN","35.835374","-84.01196","-5","1" +"37778","Lowland","TN","36.213293","-83.275211","-5","1" +"37779","Luttrell","TN","36.20423","-83.75046","-5","1" +"37801","Maryville","TN","35.709071","-84.05015","-5","1" +"37802","Maryville","TN","35.728283","-83.933815","-5","1" +"37803","Maryville","TN","35.693358","-83.98412","-5","1" +"37804","Maryville","TN","35.781607","-83.93591","-5","1" +"37806","Mascot","TN","36.086398","-83.7413","-5","1" +"37807","Maynardville","TN","36.251265","-83.82558","-5","1" +"37809","Midway","TN","36.162502","-83.0211","-5","1" +"37810","Mohawk","TN","36.188878","-83.09599","-5","1" +"37811","Mooresburg","TN","36.352009","-83.22676","-5","1" +"37813","Morristown","TN","36.186008","-83.27474","-5","1" +"37814","Morristown","TN","36.225565","-83.30799","-5","1" +"37815","Morristown","TN","36.213293","-83.275211","-5","1" +"37816","Morristown","TN","36.213293","-83.275211","-5","1" +"37818","Mosheim","TN","36.190417","-82.96185","-5","1" +"37819","Newcomb","TN","36.547121","-84.18206","-5","1" +"37820","New Market","TN","36.089568","-83.56389","-5","1" +"37821","Newport","TN","35.963276","-83.20116","-5","1" +"37822","Newport","TN","35.947688","-83.106554","-5","1" +"37824","New Tazewell","TN","36.449963","-83.591129","-5","1" +"37825","New Tazewell","TN","36.417235","-83.65241","-5","1" +"37826","Niota","TN","35.548316","-84.58403","-5","1" +"37828","Norris","TN","36.190257","-84.07017","-5","1" +"37829","Oakdale","TN","35.98291","-84.60149","-5","1" +"37830","Oak Ridge","TN","35.992691","-84.27044","-5","1" +"37831","Oak Ridge","TN","36.105971","-84.195796","-5","1" +"37838","Sewanee","TN","35.199411","-85.93221","-6","1" +"37840","Oliver Springs","TN","36.045663","-84.36685","-5","1" +"37841","Oneida","TN","36.49787","-84.51808","-5","1" +"37842","Ozone","TN","35.87543","-84.792927","-6","1" +"37843","Parrottsville","TN","36.013728","-83.05351","-5","1" +"37845","Petros","TN","36.09122","-84.44598","-5","1" +"37846","Philadelphia","TN","35.679462","-84.45838","-5","1" +"37847","Pioneer","TN","36.432891","-84.27781","-5","1" +"37848","Powder Springs","TN","36.24404","-83.68053","-5","1" +"37849","Powell","TN","36.044507","-84.04192","-5","1" +"37851","Pruden","TN","36.557884","-83.81392","-5","1" +"37852","Robbins","TN","36.335832","-84.6022","-5","1" +"37853","Rockford","TN","35.834126","-83.93452","-5","1" +"37854","Rockwood","TN","35.861763","-84.70042","-5","1" +"37857","Rogersville","TN","36.413437","-82.96804","-5","1" +"37860","Russellville","TN","36.248645","-83.19321","-5","1" +"37861","Rutledge","TN","36.243526","-83.51516","-5","1" +"37862","Sevierville","TN","35.818653","-83.59197","-5","1" +"37863","Pigeon Forge","TN","35.792313","-83.5605","-5","1" +"37864","Sevierville","TN","35.854211","-83.613849","-5","1" +"37865","Seymour","TN","35.853932","-83.74476","-5","1" +"37866","Sharps Chapel","TN","36.355257","-83.82637","-5","1" +"37867","Shawanee","TN","36.580283","-83.647254","-5","1" +"37868","Pigeon Forge","TN","35.880902","-83.556134","-5","1" +"37869","Sneedville","TN","36.521297","-83.22818","-5","1" +"37870","Speedwell","TN","36.45491","-83.8546","-5","1" +"37871","Strawberry Plains","TN","36.04051","-83.67934","-5","1" +"37872","Sunbright","TN","36.262842","-84.66549","-5","1" +"37873","Surgoinsville","TN","36.51276","-82.83526","-5","1" +"37874","Sweetwater","TN","35.598659","-84.46613","-5","1" +"37876","Sevierville","TN","35.860157","-83.48694","-5","1" +"37877","Talbott","TN","36.154381","-83.40946","-5","1" +"37878","Tallassee","TN","35.63373","-83.93138","-5","1" +"37879","Tazewell","TN","36.465808","-83.52357","-5","1" +"37880","Ten Mile","TN","35.684788","-84.67782","-5","1" +"37881","Thorn Hill","TN","36.407028","-83.34113","-5","1" +"37882","Townsend","TN","35.680116","-83.75801","-5","1" +"37885","Vonore","TN","35.543355","-84.1933","-5","1" +"37886","Walland","TN","35.734481","-83.81988","-5","1" +"37887","Wartburg","TN","36.091018","-84.56863","-5","1" +"37888","Washburn","TN","36.310299","-83.60658","-5","1" +"37890","White Pine","TN","36.094622","-83.29024","-5","1" +"37891","Whitesburg","TN","36.277627","-83.13987","-5","1" +"37892","Winfield","TN","36.563797","-84.41935","-5","1" +"37893","Winona","TN","36.383425","-84.517287","-5","1" +"37901","Knoxville","TN","36.032334","-83.884804","-5","1" +"37902","Knoxville","TN","35.964032","-83.91964","-5","1" +"37909","Knoxville","TN","35.947846","-84.01554","-5","1" +"37912","Knoxville","TN","36.008048","-83.97962","-5","1" +"37913","Knoxville","TN","35.906808","-84.024627","-5","1" +"37914","Knoxville","TN","35.988528","-83.84981","-5","1" +"37915","Knoxville","TN","35.97125","-83.90149","-5","1" +"37916","Knoxville","TN","35.955732","-83.93271","-5","1" +"37917","Knoxville","TN","35.991982","-83.91859","-5","1" +"37918","Knoxville","TN","36.046598","-83.92511","-5","1" +"37919","Knoxville","TN","35.922881","-84.00384","-5","1" +"37920","Knoxville","TN","35.923517","-83.89042","-5","1" +"37921","Knoxville","TN","35.973731","-83.97413","-5","1" +"37922","Knoxville","TN","35.875925","-84.12608","-5","1" +"37923","Knoxville","TN","35.928997","-84.07543","-5","1" +"37924","Knoxville","TN","36.029987","-83.80705","-5","1" +"37927","Knoxville","TN","35.990142","-83.96218","-5","1" +"37928","Knoxville","TN","35.990142","-83.96218","-5","1" +"37929","Knoxville","TN","35.922421","-83.795492","-5","1" +"37930","Knoxville","TN","35.9029","-83.953554","-5","1" +"37931","Knoxville","TN","35.976063","-84.1182","-5","1" +"37932","Knoxville","TN","35.919695","-84.17255","-5","1" +"37933","Knoxville","TN","35.990142","-83.96218","-5","1" +"37937","Powells Crossroads","TN","35.187308","-85.47929","-6","1" +"37938","Knoxville","TN","36.113552","-83.93785","-5","1" +"37939","Knoxville","TN","35.990142","-83.96218","-5","1" +"37940","Knoxville","TN","35.990142","-83.96218","-5","1" +"37950","Knoxville","TN","35.990142","-83.96218","-5","1" +"37951","Knoxville","TN","35.972146","-83.950384","-5","1" +"37990","Knoxville","TN","35.990142","-83.96218","-5","1" +"37995","Knoxville","TN","35.990142","-83.96218","-5","1" +"37996","Knoxville","TN","35.990142","-83.96218","-5","1" +"37997","Knoxville","TN","35.990142","-83.96218","-5","1" +"37998","Knoxville","TN","35.935134","-83.750258","-5","1" +"37999","Knoxville","TN","35.990142","-83.96218","-5","1" +"38001","Alamo","TN","35.796157","-89.14016","-6","1" +"38002","Arlington","TN","35.272386","-89.71198","-6","1" +"38004","Atoka","TN","35.422035","-89.80806","-6","1" +"38006","Bells","TN","35.696656","-89.08457","-6","1" +"38007","Bogota","TN","36.158668","-89.437684","-6","1" +"38008","Bolivar","TN","35.25543","-88.98751","-6","1" +"38010","Braden","TN","35.288624","-89.48802","-6","1" +"38011","Brighton","TN","35.474694","-89.72344","-6","1" +"38012","Brownsville","TN","35.590558","-89.2609","-6","1" +"38014","Brunswick","TN","35.201738","-89.971538","-6","1" +"38015","Burlison","TN","35.551277","-89.82387","-6","1" +"38016","Memphis","TN","35.177475","-89.776835","-6","1" +"38017","Collierville","TN","35.057224","-89.67417","-6","1" +"38018","Cordova","TN","35.157681","-89.78249","-6","1" +"38019","Covington","TN","35.560622","-89.64201","-6","1" +"38021","Crockett Mills","TN","35.875396","-89.16485","-6","1" +"38023","Drummonds","TN","35.489296","-89.94754","-6","1" +"38024","Dyersburg","TN","36.038042","-89.38613","-6","1" +"38025","Dyersburg","TN","36.046851","-89.443779","-6","1" +"38026","Memphis","TN","35.132219","-90.047966","-6","1" +"38027","Collierville","TN","35.201738","-89.971538","-6","1" +"38028","Eads","TN","35.203968","-89.62203","-6","1" +"38029","Ellendale","TN","35.201738","-89.971538","-6","1" +"38030","Finley","TN","35.980206","-89.60112","-6","1" +"38034","Friendship","TN","35.908286","-89.24555","-6","1" +"38036","Gallaway","TN","35.320487","-89.6215","-6","1" +"38037","Gates","TN","35.82036","-89.41497","-6","1" +"38039","Grand Junction","TN","35.057728","-89.18599","-6","1" +"38040","Halls","TN","35.879497","-89.41989","-6","1" +"38041","Henning","AR","35.629555","-89.86945","-6","1" +"38042","Hickory Valley","TN","35.149952","-89.1536","-6","1" +"38043","Hickory Withe","TN","35.199265","-89.414113","-6","1" +"38044","Hornsby","TN","35.211663","-88.80988","-6","1" +"38045","Laconia","TN","35.290428","-89.232185","-6","1" +"38046","La Grange","TN","35.049339","-89.23476","-6","1" +"38047","Lenox","TN","36.063947","-89.62287","-6","1" +"38048","Macon","TN","35.15066","-89.481362","-6","1" +"38049","Mason","TN","35.391363","-89.53988","-6","1" +"38050","Maury City","TN","35.815535","-89.22386","-6","1" +"38052","Middleton","TN","35.074302","-88.90845","-6","1" +"38053","Millington","TN","35.347965","-89.90668","-6","1" +"38054","Millington","TN","35.334132","-89.870636","-6","1" +"38055","Millington","TN","35.201738","-89.971538","-6","1" +"38056","Miston","TN","36.046851","-89.443779","-6","1" +"38057","Moscow","TN","35.055545","-89.37347","-6","1" +"38058","Munford","TN","35.451159","-89.80845","-6","1" +"38059","Newbern","TN","36.114872","-89.25419","-6","1" +"38060","Oakland","TN","35.214462","-89.5034","-6","1" +"38061","Pocahontas","TN","35.067152","-88.76534","-6","1" +"38063","Ripley","AR","35.637993","-89.86859","-6","1" +"38066","Rossville","TN","35.076213","-89.5329","-6","1" +"38067","Saulsbury","TN","35.090194","-89.02951","-6","1" +"38068","Somerville","TN","35.275036","-89.32907","-6","1" +"38069","Stanton","TN","35.459089","-89.35699","-6","1" +"38070","Tigrett","TN","35.942019","-89.243405","-6","1" +"38071","Tipton","TN","35.414319","-89.818781","-6","1" +"38073","Gates","TN","35.839785","-89.40664","-6","1" +"38074","Bolivar","TN","35.213371","-88.990028","-6","1" +"38075","Whiteville","TN","35.35001","-89.15508","-6","1" +"38076","Williston","TN","35.152913","-89.43406","-6","1" +"38077","Wynnburg","TN","36.344296","-89.522851","-6","1" +"38079","Tiptonville","KY","36.513386","-89.50472","-6","1" +"38080","Ridgely","TN","36.224429","-89.48641","-6","1" +"38083","Millington","TN","35.201738","-89.971538","-6","1" +"38088","Cordova","TN","35.201738","-89.971538","-6","1" +"38101","Memphis","TN","35.050667","-89.847782","-6","1" +"38103","Memphis","TN","35.146131","-90.0534","-6","1" +"38104","Memphis","TN","35.133825","-90.00463","-6","1" +"38105","Memphis","TN","35.15275","-90.0356","-6","1" +"38106","Memphis","TN","35.103019","-90.04017","-6","1" +"38107","Memphis","TN","35.167515","-90.02224","-6","1" +"38108","Memphis","TN","35.174165","-89.96028","-6","1" +"38109","Memphis","TN","35.050286","-90.07523","-6","1" +"38110","Memphis","TN","35.201738","-89.971538","-6","1" +"38111","Memphis","TN","35.10935","-89.94363","-6","1" +"38112","Memphis","TN","35.148605","-89.97479","-6","1" +"38113","Memphis","TN","35.12738","-89.984484","-6","1" +"38114","Memphis","TN","35.101525","-89.98543","-6","1" +"38115","Memphis","TN","35.057311","-89.86291","-6","1" +"38116","Memphis","TN","35.03319","-90.01128","-6","1" +"38117","Memphis","TN","35.112929","-89.90389","-6","1" +"38118","Memphis","TN","35.048455","-89.92426","-6","1" +"38119","Memphis","TN","35.082936","-89.84892","-6","1" +"38120","Memphis","TN","35.124818","-89.86562","-6","1" +"38122","Memphis","TN","35.155589","-89.92315","-6","1" +"38124","Memphis","TN","35.201738","-89.971538","-6","1" +"38125","Memphis","TN","35.035466","-89.80329","-6","1" +"38126","Memphis","TN","35.126469","-90.04359","-6","1" +"38127","Memphis","TN","35.223796","-90.00646","-6","1" +"38128","Memphis","TN","35.219882","-89.92588","-6","1" +"38130","Memphis","TN","35.201738","-89.971538","-6","1" +"38131","Memphis","TN","35.063236","-89.99403","-6","1" +"38132","Memphis","TN","35.073545","-89.99788","-6","1" +"38133","Memphis","TN","35.208709","-89.80518","-6","1" +"38134","Memphis","TN","35.193046","-89.86559","-6","1" +"38135","Memphis","TN","35.232085","-89.85214","-6","1" +"38136","Memphis","TN","35.201738","-89.971538","-6","1" +"38137","Memphis","TN","35.201738","-89.971538","-6","1" +"38138","Germantown","TN","35.088885","-89.80677","-6","1" +"38139","Germantown","TN","35.087468","-89.7615","-6","1" +"38140","Memphis","TN","35.201738","-89.971538","-6","1" +"38141","Memphis","TN","35.016803","-89.84701","-6","1" +"38142","Memphis","TN","35.201738","-89.971538","-6","1" +"38143","Memphis","TN","35.201738","-89.971538","-6","1" +"38145","Memphis","TN","35.201738","-89.971538","-6","1" +"38146","Memphis","TN","35.201738","-89.971538","-6","1" +"38147","Memphis","TN","35.201738","-89.971538","-6","1" +"38148","Memphis","TN","35.201738","-89.971538","-6","1" +"38150","Memphis","TN","35.201738","-89.971538","-6","1" +"38151","Memphis","TN","35.201738","-89.971538","-6","1" +"38152","Memphis","TN","35.201738","-89.971538","-6","1" +"38157","Memphis","TN","35.114416","-89.89189","-6","1" +"38159","Memphis","TN","35.201738","-89.971538","-6","1" +"38160","Metcalfe","MS","34.259164","-89.06039","-6","1" +"38161","Memphis","TN","35.201738","-89.971538","-6","1" +"38163","Memphis","TN","35.201738","-89.971538","-6","1" +"38165","Memphis","TN","35.201738","-89.971538","-6","1" +"38166","Memphis","TN","35.201738","-89.971538","-6","1" +"38167","Memphis","TN","35.201738","-89.971538","-6","1" +"38168","Memphis","TN","35.201738","-89.971538","-6","1" +"38173","Memphis","TN","35.201738","-89.971538","-6","1" +"38174","Memphis","TN","35.201738","-89.971538","-6","1" +"38175","Memphis","TN","35.201738","-89.971538","-6","1" +"38177","Memphis","TN","35.201738","-89.971538","-6","1" +"38181","Memphis","TN","35.201738","-89.971538","-6","1" +"38182","Memphis","TN","35.201738","-89.971538","-6","1" +"38183","Germantown","TN","35.201738","-89.971538","-6","1" +"38184","Memphis","TN","35.201738","-89.971538","-6","1" +"38186","Memphis","TN","35.201738","-89.971538","-6","1" +"38187","Memphis","TN","35.201738","-89.971538","-6","1" +"38188","Memphis","TN","35.201738","-89.971538","-6","1" +"38190","Memphis","TN","35.201738","-89.971538","-6","1" +"38193","Memphis","TN","35.201738","-89.971538","-6","1" +"38194","Memphis","TN","35.201738","-89.971538","-6","1" +"38195","Memphis","TN","35.201738","-89.971538","-6","1" +"38197","Memphis","TN","35.201738","-89.971538","-6","1" +"38201","McKenzie","TN","36.133065","-88.52246","-6","1" +"38220","Atwood","TN","35.98269","-88.66966","-6","1" +"38221","Big Sandy","TN","36.254423","-88.04885","-6","1" +"38222","Buchanan","TN","36.458738","-88.14836","-6","1" +"38223","Como","TN","36.310995","-88.260367","-6","1" +"38224","Cottage Grove","TN","36.395616","-88.49515","-6","1" +"38225","Dresden","TN","36.305305","-88.6869","-6","1" +"38226","Dukedom","TN","36.488409","-88.66672","-6","1" +"38229","Gleason","TN","36.223573","-88.60614","-6","1" +"38230","Greenfield","TN","36.154281","-88.76867","-6","1" +"38231","Henry","TN","36.210847","-88.42518","-6","1" +"38232","Hornbeak","TN","36.339084","-89.33228","-6","1" +"38233","Kenton","TN","36.201487","-89.03087","-6","1" +"38235","McLemoresville","TN","35.992987","-88.57656","-6","1" +"38236","Mansfield","TN","36.167573","-88.26817","-6","1" +"38237","Martin","TN","36.353928","-88.84191","-6","1" +"38238","Martin","TN","36.282357","-88.738132","-6","1" +"38240","Obion","TN","36.253678","-89.25364","-6","1" +"38241","Palmersville","TN","36.427351","-88.59234","-6","1" +"38242","Paris","TN","36.300311","-88.32891","-6","1" +"38251","Puryear","TN","36.444446","-88.35903","-6","1" +"38253","Rives","TN","36.307957","-89.0377","-6","1" +"38254","Samburg","TN","36.379051","-89.353821","-6","1" +"38255","Sharon","TN","36.236377","-88.83586","-6","1" +"38256","Springville","TN","36.330953","-88.12309","-6","1" +"38257","South Fulton","TN","36.483302","-88.87895","-6","1" +"38258","Trezevant","TN","36.016599","-88.61825","-6","1" +"38259","Trimble","TN","36.198652","-89.18203","-6","1" +"38260","Troy","TN","36.358158","-89.17888","-6","1" +"38261","Union City","TN","36.426933","-89.0727","-6","1" +"38271","Woodland Mills","TN","36.458295","-89.233227","-6","1" +"38281","Union City","TN","36.354384","-89.149881","-6","1" +"38301","Jackson","TN","35.60758","-88.81959","-6","1" +"38302","Jackson","TN","35.612405","-88.841225","-6","1" +"38303","Jackson","TN","35.612405","-88.841225","-6","1" +"38305","Jackson","TN","35.693101","-88.80653","-6","1" +"38308","Jackson","TN","35.612405","-88.841225","-6","1" +"38310","Adamsville","TN","35.241412","-88.38425","-6","1" +"38311","Bath Springs","TN","35.436584","-88.11912","-6","1" +"38313","Beech Bluff","TN","35.601914","-88.62354","-6","1" +"38314","Jackson","TN","35.612405","-88.841225","-6","1" +"38315","Bethel Springs","TN","35.260888","-88.64275","-6","1" +"38316","Bradford","TN","36.067294","-88.81209","-6","1" +"38317","Bruceton","TN","36.038551","-88.25144","-6","1" +"38318","Buena Vista","TN","35.960377","-88.26959","-6","1" +"38320","Camden","TN","36.050286","-88.10137","-6","1" +"38321","Cedar Grove","TN","35.844195","-88.5322","-6","1" +"38324","Clarksburg","TN","35.867454","-88.39343","-6","1" +"38326","Counce","TN","35.041335","-88.27379","-6","1" +"38327","Crump","TN","35.225753","-88.30456","-6","1" +"38328","Darden","TN","35.667861","-88.21648","-6","1" +"38329","Decaturville","TN","35.546839","-88.12345","-6","1" +"38330","Dyer","TN","36.073575","-89.01767","-6","1" +"38331","Eaton","TN","35.969336","-89.131915","-6","1" +"38332","Enville","TN","35.411713","-88.40388","-6","1" +"38333","Eva","TN","36.114049","-87.97808","-6","1" +"38334","Finger","TN","35.357639","-88.60089","-6","1" +"38336","Fruitvale","TN","35.748414","-89.032672","-6","1" +"38337","Gadsden","TN","35.794403","-89.01731","-6","1" +"38338","Gibson","TN","35.870849","-88.846372","-6","1" +"38339","Guys","TN","35.047877","-88.52289","-6","1" +"38340","Henderson","TN","35.414454","-88.66118","-6","1" +"38341","Holladay","TN","35.866499","-88.09896","-6","1" +"38342","Hollow Rock","TN","36.075068","-88.28916","-6","1" +"38343","Humboldt","TN","35.825299","-88.90218","-6","1" +"38344","Huntingdon","TN","35.995802","-88.41385","-6","1" +"38345","Huron","TN","35.576402","-88.51041","-6","1" +"38346","Idlewild","TN","36.030588","-88.805599","-6","1" +"38347","Jacks Creek","TN","35.462376","-88.50539","-6","1" +"38348","Lavinia","TN","35.867764","-88.63929","-6","1" +"38350","Collinwood","TN","35.148316","-87.745118","-6","1" +"38351","Lexington","TN","35.658409","-88.40535","-6","1" +"38352","Luray","TN","35.52953","-88.53275","-6","1" +"38355","Medina","TN","35.795399","-88.77185","-6","1" +"38356","Medon","TN","35.431381","-88.88248","-6","1" +"38357","Michie","TN","35.051008","-88.42611","-6","1" +"38358","Milan","TN","35.916722","-88.76628","-6","1" +"38359","Milledgeville","TN","35.37046","-88.36434","-6","1" +"38361","Morris Chapel","TN","35.311586","-88.29757","-6","1" +"38362","Oakfield","TN","35.73006","-88.78683","-6","1" +"38363","Parsons","TN","35.66088","-88.1184","-6","1" +"38365","Pickwick Dam","TN","35.038284","-88.225601","-6","1" +"38366","Pinson","TN","35.4832","-88.73125","-6","1" +"38367","Ramer","TN","35.062793","-88.60533","-6","1" +"38368","Reagan","TN","35.502859","-88.36148","-6","1" +"38369","Rutherford","TN","36.12836","-88.98134","-6","1" +"38370","Saltillo","TN","35.381331","-88.23261","-6","1" +"38371","Sardis","TN","35.432389","-88.30407","-6","1" +"38372","Savannah","TN","35.180947","-88.18946","-6","1" +"38374","Scotts Hill","TN","35.522263","-88.24152","-6","1" +"38375","Selmer","TN","35.165045","-88.59327","-6","1" +"38376","Shiloh","TN","35.130384","-88.34742","-6","1" +"38377","Silerton","TN","35.35604","-88.826923","-6","1" +"38378","Spring Creek","TN","35.764637","-88.685","-6","1" +"38379","Stantonville","TN","35.159237","-88.41878","-6","1" +"38380","Sugar Tree","TN","35.77928","-88.02646","-6","1" +"38381","Toone","TN","35.35452","-88.95209","-6","1" +"38382","Trenton","TN","35.973431","-88.95035","-6","1" +"38384","Toone","TN","35.544159","-88.950206","-6","1" +"38387","Westport","TN","35.878702","-88.27401","-6","1" +"38388","Wildersville","TN","35.782093","-88.35061","-6","1" +"38389","Yorkville","TN","36.135364","-89.111653","-6","1" +"38390","Yuma","TN","35.843868","-88.36661","-6","1" +"38391","Denmark","TN","35.560669","-89.00984","-6","1" +"38392","Mercer","TN","35.468337","-89.04069","-6","1" +"38393","Chewalla","TN","34.99687","-88.645577","-6","1" +"38401","Columbia","TN","35.619784","-87.03565","-6","1" +"38402","Columbia","TN","35.629413","-87.068172","-6","1" +"38425","Clifton","TN","35.401188","-87.97188","-6","1" +"38449","Ardmore","TN","35.043961","-86.84324","-6","1" +"38450","Collinwood","TN","35.187869","-87.77263","-6","1" +"38451","Culleoka","TN","35.474034","-86.98993","-6","1" +"38452","Cypress Inn","TN","35.066147","-87.80171","-6","1" +"38453","Dellrose","TN","35.128317","-86.81188","-6","1" +"38454","Duck River","TN","35.727189","-87.31927","-6","1" +"38455","Elkton","TN","35.05392","-86.895305","-6","1" +"38456","Ethridge","TN","35.336135","-87.26409","-6","1" +"38457","Five Points","TN","35.025423","-87.29104","-6","1" +"38459","Frankewing","TN","35.188143","-86.81014","-6","1" +"38460","Goodspring","TN","35.08957","-87.16259","-6","1" +"38461","Hampshire","TN","35.606697","-87.33058","-6","1" +"38462","Hohenwald","TN","35.535397","-87.54905","-6","1" +"38463","Iron City","TN","35.069017","-87.62171","-6","1" +"38464","Lawrenceburg","TN","35.259613","-87.37522","-6","1" +"38468","Leoma","TN","35.135003","-87.29218","-6","1" +"38469","Loretto","TN","35.071804","-87.41974","-6","1" +"38471","Lutts","TN","35.083644","-87.91309","-6","1" +"38472","Lynnville","TN","35.376463","-87.04478","-6","1" +"38473","Minor Hill","TN","35.026969","-87.16763","-6","1" +"38474","Mount Pleasant","TN","35.52478","-87.22342","-6","1" +"38475","Olivehill","TN","35.270793","-88.01666","-6","1" +"38476","Primm Springs","TN","35.839045","-87.2243","-6","1" +"38477","Prospect","TN","35.040578","-86.98456","-6","1" +"38478","Pulaski","TN","35.204983","-87.01246","-6","1" +"38481","Saint Joseph","TN","35.03492","-87.50215","-6","1" +"38482","Santa Fe","TN","35.77692","-87.1517","-6","1" +"38483","Summertown","TN","35.43506","-87.33748","-6","1" +"38485","Waynesboro","TN","35.343716","-87.75739","-6","1" +"38486","Westpoint","TN","35.164749","-87.54145","-6","1" +"38487","Williamsport","TN","35.734499","-87.21926","-6","1" +"38488","Taft","TN","35.045279","-86.69047","-6","1" +"38501","Cookeville","TN","36.1832","-85.52054","-6","1" +"38502","Cookeville","TN","36.141824","-85.454779","-6","1" +"38503","Cookeville","TN","36.141824","-85.454779","-6","1" +"38504","Allardt","TN","36.392571","-84.73614","-6","1" +"38505","Cookeville","TN","36.141824","-85.454779","-6","1" +"38506","Cookeville","TN","36.177831","-85.46238","-6","1" +"38514","Clarksdale","MS","34.196894","-90.572408","-6","1" +"38528","Trezevant","TN","36.003208","-88.614501","-6","1" +"38541","Allons","TN","36.525275","-85.36148","-6","1" +"38542","Allred","TN","36.323957","-85.20787","-6","1" +"38543","Alpine","TN","36.400338","-85.16208","-6","1" +"38544","Baxter","TN","36.127733","-85.64636","-6","1" +"38545","Bloomington Springs","TN","36.228911","-85.66854","-6","1" +"38547","Brush Creek","TN","36.141741","-86.00868","-6","1" +"38548","Buffalo Valley","TN","36.163234","-85.78987","-6","1" +"38549","Byrdstown","TN","36.572543","-85.15007","-6","1" +"38550","Campaign","TN","35.773417","-85.619169","-6","1" +"38551","Celina","TN","36.547412","-85.48904","-6","1" +"38552","Chestnut Mound","TN","36.214724","-85.79907","-6","1" +"38553","Clarkrange","TN","36.209271","-85.00757","-6","1" +"38554","Crawford","TN","36.26742","-85.16204","-6","1" +"38555","Crossville","TN","35.929314","-85.05926","-6","1" +"38556","Jamestown","TN","36.409385","-84.93393","-6","1" +"38557","Crossville","TN","35.988457","-85.012389","-6","1" +"38558","Crossville","TN","36.008521","-84.91132","-6","1" +"38559","Doyle","TN","35.833271","-85.51921","-6","1" +"38560","Elmwood","TN","36.236398","-85.88908","-6","1" +"38562","Gainesboro","TN","36.351803","-85.65757","-6","1" +"38563","Gordonsville","TN","36.182334","-85.9832","-6","1" +"38564","Granville","TN","36.259907","-85.7555","-6","1" +"38565","Grimsley","TN","36.260904","-84.99517","-6","1" +"38567","Hickman","TN","36.140473","-85.91072","-6","1" +"38568","Hilham","TN","36.414282","-85.45701","-6","1" +"38569","Lancaster","TN","36.104271","-85.84696","-6","1" +"38570","Livingston","TN","36.376289","-85.32585","-6","1" +"38571","Crossville","TN","36.04347","-85.094842","-6","1" +"38572","Pleasant Hill","TN","35.861811","-85.0902","-6","1" +"38573","Monroe","TN","36.480151","-85.20656","-6","1" +"38574","Monterey","TN","36.133983","-85.23805","-6","1" +"38575","Moss","TN","36.555932","-85.65072","-6","1" +"38577","Pall Mall","TN","36.571669","-84.99647","-6","1" +"38578","Pleasant Hill","TN","36.007405","-85.162272","-6","1" +"38579","Quebeck","TN","35.817417","-85.55772","-6","1" +"38580","Rickman","TN","36.270655","-85.32525","-6","1" +"38581","Rock Island","TN","35.751554","-85.63943","-6","1" +"38582","Silver Point","TN","36.09651","-85.74373","-6","1" +"38583","Sparta","TN","35.943026","-85.45113","-6","1" +"38585","Spencer","TN","35.69653","-85.41146","-6","1" +"38587","Walling","TN","35.869657","-85.61165","-6","1" +"38588","Whitleyville","TN","36.456113","-85.72381","-6","1" +"38589","Wilder","TN","36.29017","-85.08484","-6","1" +"38597","Sumner","MS","33.969302","-90.371546","-6","1" +"38601","Abbeville","MS","34.489297","-89.47412","-6","1" +"38602","Arkabutla","MS","34.686272","-90.106756","-6","1" +"38603","Ashland","MS","34.839417","-89.15818","-6","1" +"38606","Batesville","MS","34.309659","-89.963","-6","1" +"38609","Belen","MS","34.275423","-90.37392","-6","1" +"38610","Blue Mountain","MS","34.659973","-89.02625","-6","1" +"38611","Byhalia","MS","34.862416","-89.68014","-6","1" +"38614","Clarksdale","MS","34.196126","-90.59442","-6","1" +"38617","Coahoma","MS","34.362729","-90.5035","-6","1" +"38618","Coldwater","MS","34.699588","-89.95004","-6","1" +"38619","Como","MS","34.514853","-89.88781","-6","1" +"38620","Courtland","MS","34.236973","-89.91568","-6","1" +"38621","Crenshaw","MS","34.45965","-90.17154","-6","1" +"38622","Crowder","MS","34.172051","-90.13765","-6","1" +"38623","Darling","MS","34.360101","-90.2717","-6","1" +"38625","Dumas","MS","34.597573","-88.83252","-6","1" +"38626","Dundee","MS","34.48647","-90.45124","-6","1" +"38627","Etta","MS","34.425389","-89.20431","-6","1" +"38628","Falcon","MS","34.291611","-90.292717","-6","1" +"38629","Falkner","MS","34.879287","-88.99516","-6","1" +"38630","Farrell","MS","34.22795","-90.63213","-6","1" +"38631","Friars Point","MS","34.365436","-90.634","-6","1" +"38632","Hernando","MS","34.811777","-90.01917","-6","1" +"38633","Hickory Flat","MS","34.628795","-89.20147","-6","1" +"38634","Holly Springs","MS","34.74504","-89.484963","-6","1" +"38635","Holly Springs","MS","34.762615","-89.46092","-6","1" +"38637","Horn Lake","MS","34.959171","-90.04093","-6","1" +"38638","Independence","MS","34.695853","-89.828798","-6","1" +"38639","Jonestown","MS","34.31465","-90.44966","-6","1" +"38641","Lake Cormorant","MS","34.904881","-90.19353","-6","1" +"38642","Lamar","MS","34.926974","-89.33214","-6","1" +"38643","Lambert","MS","34.179708","-90.27846","-6","1" +"38644","Lula","MS","34.449792","-90.47061","-6","1" +"38645","Lyon","MS","34.237759","-90.48669","-6","1" +"38646","Marks","MS","34.261893","-90.27443","-6","1" +"38647","Michigan City","MS","34.975571","-89.25982","-6","1" +"38649","Mount Pleasant","MS","34.962714","-89.54023","-6","1" +"38650","Myrtle","MS","34.536153","-89.13829","-6","1" +"38651","Nesbit","MS","34.893254","-89.97629","-6","1" +"38652","New Albany","MS","34.489085","-88.99973","-6","1" +"38654","Olive Branch","MS","34.954106","-89.83743","-6","1" +"38655","Oxford","MS","34.345016","-89.50735","-6","1" +"38658","Pope","MS","34.181071","-89.90638","-6","1" +"38659","Potts Camp","MS","34.643828","-89.33776","-6","1" +"38661","Red Banks","MS","34.878143","-89.57295","-6","1" +"38663","Ripley","MS","34.739023","-88.92629","-6","1" +"38664","Robinsonville","MS","34.818548","-90.29479","-6","1" +"38665","Sarah","MS","34.578092","-90.1805","-6","1" +"38666","Sardis","MS","34.418338","-89.90517","-6","1" +"38668","Senatobia","MS","34.607602","-89.94635","-6","1" +"38669","Sherard","MS","34.18658","-90.71753","-6","1" +"38670","Sledge","MS","34.417393","-90.27615","-6","1" +"38671","Southaven","MS","34.96848","-89.99793","-6","1" +"38672","Southaven","MS","34.943945","-89.92279","-6","1" +"38673","Taylor","MS","34.279282","-89.601","-6","1" +"38674","Tiplersville","MS","34.884396","-88.89784","-6","1" +"38675","Tula","MS","34.358201","-89.483865","-6","1" +"38676","Tunica","MS","34.687733","-90.36723","-6","1" +"38677","University","MS","34.366302","-89.53721","-6","1" +"38679","Victoria","MS","34.870804","-89.64082","-6","1" +"38680","Walls","MS","34.961576","-90.12315","-6","1" +"38683","Walnut","MS","34.937606","-88.85572","-6","1" +"38685","Waterford","MS","34.549354","-89.61445","-6","1" +"38686","Walls","MS","34.875277","-89.991991","-6","1" +"38695","Water Valley","MS","34.164116","-89.625197","-6","1" +"38701","Greenville","MS","33.380388","-91.05187","-6","1" +"38702","Greenville","MS","33.425792","-90.994597","-6","1" +"38703","Greenville","MS","33.442801","-91.02984","-6","1" +"38704","Greenville","MS","33.253401","-90.918503","-6","1" +"38720","Alligator","MS","34.127564","-90.73281","-6","1" +"38721","Anguilla","MS","32.977692","-90.79251","-6","1" +"38722","Arcola","MS","33.260748","-90.85022","-6","1" +"38723","Avon","MS","33.229713","-91.04781","-6","1" +"38725","Benoit","MS","33.628285","-91.0273","-6","1" +"38726","Beulah","MS","33.780092","-90.9791","-6","1" +"38730","Boyle","MS","33.701986","-90.76402","-6","1" +"38731","Chatham","MS","33.085379","-91.088255","-6","1" +"38732","Cleveland","MS","33.749149","-90.71329","-6","1" +"38733","Cleveland","MS","33.624024","-90.819547","-6","1" +"38736","Doddsville","MS","33.65327","-90.49849","-6","1" +"38737","Drew","MS","33.865068","-90.52395","-6","1" +"38738","Parchman","MS","33.922146","-90.54366","-6","1" +"38739","Dublin","MS","34.060111","-90.50275","-6","1" +"38740","Duncan","MS","34.033462","-90.78544","-6","1" +"38744","Glen Allan","MS","33.028345","-91.05179","-6","1" +"38745","Grace","MS","32.984306","-90.94339","-6","1" +"38746","Gunnison","MS","34.036412","-90.87715","-6","1" +"38748","Hollandale","MS","33.145438","-90.85634","-6","1" +"38749","Holly Ridge","MS","33.628715","-90.607457","-6","1" +"38751","Indianola","MS","33.45139","-90.65824","-6","1" +"38753","Inverness","MS","33.344368","-90.58537","-6","1" +"38754","Isola","MS","33.231628","-90.58586","-6","1" +"38756","Leland","MS","33.407212","-90.87866","-6","1" +"38758","Mattson","MS","34.095627","-90.51041","-6","1" +"38759","Merigold","MS","33.822471","-90.72406","-6","1" +"38760","Metcalfe","MS","33.454082","-90.99667","-6","1" +"38761","Moorhead","MS","33.44504","-90.49719","-6","1" +"38762","Mound Bayou","MS","33.887043","-90.73549","-6","1" +"38763","Nitta Yuma","MS","33.031698","-90.88397","-6","1" +"38764","Pace","MS","33.796844","-90.85561","-6","1" +"38765","Panther Burn","MS","33.063312","-90.88093","-6","1" +"38767","Rena Lara","MS","34.13452","-90.7836","-6","1" +"38768","Rome","MS","33.965488","-90.52646","-6","1" +"38769","Rosedale","MS","33.850803","-90.9695","-6","1" +"38771","Ruleville","MS","33.732774","-90.53427","-6","1" +"38772","Scott","MS","33.569415","-91.0742","-6","1" +"38773","Shaw","MS","33.613093","-90.77527","-6","1" +"38774","Shelby","MS","33.947701","-90.76417","-6","1" +"38776","Stoneville","MS","33.409614","-90.910404","-6","1" +"38778","Sunflower","MS","33.555234","-90.51367","-6","1" +"38780","Wayside","MS","33.272695","-90.995399","-6","1" +"38781","Winstonville","MS","33.887774","-90.737149","-6","1" +"38782","Winterville","MS","33.269118","-90.957291","-6","1" +"38801","Tupelo","MS","34.23615","-88.75665","-6","1" +"38802","Tupelo","MS","34.234527","-88.767127","-6","1" +"38803","Tupelo","MS","34.187638","-88.77852","-6","1" +"38804","Tupelo","MS","34.272374","-88.6822","-6","1" +"38820","Algoma","MS","34.171543","-89.032791","-6","1" +"38821","Amory","MS","33.988235","-88.46783","-6","1" +"38824","Baldwyn","MS","34.511249","-88.63051","-6","1" +"38825","Becker","MS","33.869763","-88.462173","-6","1" +"38826","Belden","MS","34.306239","-88.81668","-6","1" +"38827","Belmont","MS","34.513163","-88.2092","-6","1" +"38828","Blue Springs","MS","34.413143","-88.87292","-6","1" +"38829","Booneville","MS","34.653448","-88.53751","-6","1" +"38833","Burnsville","MS","34.835384","-88.32784","-6","1" +"38834","Corinth","MS","34.928325","-88.52856","-6","1" +"38835","Corinth","MS","34.920451","-88.521772","-6","1" +"38838","Dennis","MS","34.552421","-88.25935","-6","1" +"38839","Derma","MS","33.856165","-89.303214","-6","1" +"38841","Ecru","MS","34.344618","-89.02908","-6","1" +"38843","Fulton","MS","34.265985","-88.38409","-6","1" +"38844","Gattman","MS","33.885239","-88.24591","-6","1" +"38846","Glen","MS","34.851034","-88.39868","-6","1" +"38847","Golden","MS","34.428899","-88.22647","-6","1" +"38848","Greenwood Springs","MS","33.924023","-88.29002","-6","1" +"38849","Guntown","MS","34.443919","-88.67217","-6","1" +"38850","Houlka","MS","34.04281","-89.02557","-6","1" +"38851","Houston","MS","33.904246","-88.9671","-6","1" +"38852","Iuka","AL","34.803864","-88.10205","-6","1" +"38854","McCondy","MS","33.906827","-88.955351","-6","1" +"38855","Mantachie","MS","34.325456","-88.49376","-6","1" +"38856","Marietta","MS","34.481995","-88.45205","-6","1" +"38857","Mooreville","MS","34.280996","-88.57745","-6","1" +"38858","Nettleton","MS","34.082553","-88.58797","-6","1" +"38859","New Site","MS","34.530559","-88.36794","-6","1" +"38860","Okolona","MS","33.976464","-88.76008","-6","1" +"38862","Plantersville","MS","34.179513","-88.63454","-6","1" +"38863","Pontotoc","MS","34.236312","-89.00425","-6","1" +"38864","Randolph","MS","34.134456","-89.20879","-6","1" +"38865","Rienzi","MS","34.774486","-88.57746","-6","1" +"38866","Saltillo","MS","34.360547","-88.68079","-6","1" +"38868","Shannon","MS","34.122101","-88.72967","-6","1" +"38869","Sherman","MS","34.359456","-88.83873","-6","1" +"38870","Smithville","MS","34.065563","-88.36577","-6","1" +"38871","Thaxton","MS","34.324644","-89.20057","-6","1" +"38873","Tishomingo","MS","34.652269","-88.23581","-6","1" +"38874","Toccopola","MS","34.248527","-89.2448","-6","1" +"38875","Trebloc","MS","33.906827","-88.955351","-6","1" +"38876","Tremont","MS","34.22634","-88.23179","-6","1" +"38877","Van Vleet","MS","33.987089","-88.898807","-6","1" +"38878","Vardaman","MS","33.879148","-89.18351","-6","1" +"38879","Verona","MS","34.188301","-88.72093","-6","1" +"38880","Wheeler","MS","34.57971","-88.60817","-6","1" +"38901","Grenada","MS","33.77132","-89.80301","-6","1" +"38902","Grenada","MS","33.824113","-89.794687","-6","1" +"38912","Avalon","MS","33.65497","-90.053958","-6","1" +"38913","Banner","MS","34.115816","-89.39765","-6","1" +"38914","Big Creek","MS","33.859554","-89.43745","-6","1" +"38915","Bruce","MS","34.005229","-89.36375","-6","1" +"38916","Calhoun City","MS","33.839389","-89.32561","-6","1" +"38917","Carrollton","MS","33.534708","-89.9363","-6","1" +"38920","Cascilla","MS","33.875369","-90.10215","-6","1" +"38921","Charleston","MS","33.974998","-90.12046","-6","1" +"38922","Coffeeville","MS","33.936248","-89.64228","-6","1" +"38923","Coila","MS","33.368238","-89.99776","-6","1" +"38924","Cruger","MS","33.309896","-90.21172","-6","1" +"38925","Duck Hill","MS","33.645396","-89.65893","-6","1" +"38926","Elliott","MS","33.689476","-89.758302","-6","1" +"38927","Enid","MS","34.135098","-90.01821","-6","1" +"38928","Glendora","MS","33.857538","-90.30001","-6","1" +"38929","Gore Springs","MS","33.748508","-89.54482","-6","1" +"38930","Greenwood","MS","33.528734","-90.17663","-6","1" +"38935","Greenwood","MS","33.523355","-90.27757","-6","1" +"38940","Holcomb","MS","33.742886","-89.99349","-6","1" +"38941","Itta Bena","MS","33.492412","-90.3243","-6","1" +"38943","McCarley","MS","33.523907","-89.84901","-6","1" +"38944","Minter City","MS","33.763479","-90.32393","-6","1" +"38945","Money","MS","33.650681","-90.196909","-6","1" +"38946","Morgan City","MS","33.359299","-90.3527","-6","1" +"38947","North Carrollton","MS","33.517885","-89.92185","-6","1" +"38948","Oakland","MS","34.082634","-89.89819","-6","1" +"38949","Paris","MS","34.171462","-89.44452","-6","1" +"38950","Philipp","MS","33.753716","-90.18159","-6","1" +"38951","Pittsboro","MS","33.968398","-89.30308","-6","1" +"38952","Schlater","MS","33.63788","-90.33746","-6","1" +"38953","Scobey","MS","33.910734","-89.93012","-6","1" +"38954","Sidon","MS","33.417028","-90.21318","-6","1" +"38955","Slate Spring","MS","33.743871","-89.375281","-6","1" +"38957","Sumner","MS","33.972212","-90.35668","-6","1" +"38958","Swan Lake","MS","33.929206","-90.188462","-6","1" +"38959","Swiftown","MS","33.304241","-90.42665","-6","1" +"38960","Tie Plant","MS","33.787157","-89.821941","-6","1" +"38961","Tillatoba","MS","33.973722","-89.88636","-6","1" +"38962","Tippo","MS","33.90263","-90.16305","-6","1" +"38963","Tutwiler","MS","34.015686","-90.39034","-6","1" +"38964","Vance","MS","34.087461","-90.39276","-6","1" +"38965","Water Valley","MS","34.148775","-89.62882","-6","1" +"38966","Webb","MS","33.934418","-90.34434","-6","1" +"38967","Winona","MS","33.481491","-89.73155","-6","1" +"39038","Belzoni","MS","33.165359","-90.50127","-6","1" +"39039","Benton","MS","32.832943","-90.21951","-6","1" +"39040","Bentonia","MS","32.639989","-90.40856","-6","1" +"39041","Bolton","MS","32.39336","-90.47024","-6","1" +"39042","Brandon","MS","32.237742","-89.93514","-6","1" +"39043","Brandon","MS","32.269041","-89.987491","-6","1" +"39044","Braxton","MS","32.01965","-89.9742","-6","1" +"39045","Camden","MS","32.791408","-89.82958","-6","1" +"39046","Canton","MS","32.618475","-90.01041","-6","1" +"39047","Brandon","MS","32.39705","-89.98466","-6","1" +"39048","Bentonia","MS","32.667612","-90.39157","-6","1" +"39051","Carthage","MS","32.785139","-89.50644","-6","1" +"39054","Cary","MS","32.804592","-90.92611","-6","1" +"39056","Clinton","MS","32.347295","-90.33224","-6","1" +"39057","Conehatta","MS","32.486525","-89.28431","-6","1" +"39058","Clinton","MS","32.311287","-90.397157","-6","1" +"39059","Crystal Springs","MS","31.985052","-90.3633","-6","1" +"39060","Clinton","MS","32.350688","-90.26954","-6","1" +"39061","Delta City","MS","33.075557","-90.84298","-6","1" +"39062","D Lo","MS","31.985048","-89.89986","-6","1" +"39063","Durant","MS","33.102777","-89.87579","-6","1" +"39066","Edwards","MS","32.295098","-90.60286","-6","1" +"39067","Ethel","MS","33.127907","-89.46704","-6","1" +"39069","Fayette","MS","31.707145","-91.05349","-6","1" +"39071","Flora","MS","32.560845","-90.31338","-6","1" +"39072","Pocahontas","MS","32.311287","-90.397157","-6","1" +"39073","Florence","MS","32.125628","-90.10964","-6","1" +"39074","Forest","MS","32.379693","-89.46552","-6","1" +"39077","Gallman","MS","31.928751","-90.392603","-6","1" +"39078","Georgetown","MS","31.869093","-90.17798","-6","1" +"39079","Goodman","MS","32.940348","-89.89824","-6","1" +"39080","Harperville","MS","32.492533","-89.494585","-6","1" +"39081","Harriston","MS","31.739958","-91.050948","-6","1" +"39082","Harrisville","MS","31.946357","-90.13324","-6","1" +"39083","Hazlehurst","MS","31.841281","-90.42995","-6","1" +"39086","Hermanville","MS","31.983753","-90.79058","-6","1" +"39087","Hillsboro","MS","32.470606","-89.517069","-6","1" +"39088","Holly Bluff","MS","32.753234","-90.73846","-6","1" +"39090","Kosciusko","MS","33.038079","-89.56318","-6","1" +"39092","Lake","MS","32.330717","-89.33827","-6","1" +"39094","Lena","MS","32.595179","-89.6311","-6","1" +"39095","Lexington","MS","33.114291","-90.08221","-6","1" +"39096","Lorman","MS","31.825143","-91.07877","-6","1" +"39097","Louise","MS","32.984428","-90.58503","-6","1" +"39098","Ludlow","MS","32.56195","-89.70928","-6","1" +"39107","McAdams","MS","33.025946","-89.68374","-6","1" +"39108","McCool","MS","33.169445","-89.33038","-6","1" +"39109","Madden","MS","32.671826","-89.3324","-6","1" +"39110","Madison","MS","32.484979","-90.11552","-6","1" +"39111","Magee","MS","31.880229","-89.72086","-6","1" +"39112","Sanatorium","MS","31.891839","-89.77926","-6","1" +"39113","Mayersville","MS","32.905763","-91.04272","-6","1" +"39114","Mendenhall","MS","31.948527","-89.84256","-6","1" +"39115","Midnight","MS","33.078256","-90.60068","-6","1" +"39116","Mize","MS","31.881155","-89.55099","-6","1" +"39117","Morton","MS","32.313881","-89.66509","-6","1" +"39119","Mount Olive","MS","31.757725","-89.65851","-6","1" +"39120","Natchez","MS","31.535545","-91.35434","-6","1" +"39121","Natchez","MS","31.470602","-91.404404","-6","1" +"39122","Natchez","MS","31.470602","-91.404404","-6","1" +"39130","Madison","MS","32.642448","-90.090683","-6","1" +"39140","Newhebron","MS","31.738817","-89.97045","-6","1" +"39144","Pattison","MS","31.834496","-90.80341","-6","1" +"39145","Pelahatchie","MS","32.335063","-89.80491","-6","1" +"39146","Pickens","MS","32.877746","-89.97586","-6","1" +"39148","Piney Woods","MS","32.057964","-89.99117","-6","1" +"39149","Pinola","MS","31.852006","-89.99076","-6","1" +"39150","Port Gibson","MS","31.970308","-90.97911","-6","1" +"39151","Puckett","MS","32.08065","-89.776","-6","1" +"39152","Pulaski","MS","32.220895","-89.57038","-6","1" +"39153","Raleigh","MS","32.035356","-89.49748","-6","1" +"39154","Raymond","MS","32.230592","-90.45709","-6","1" +"39156","Redwood","MS","32.524981","-90.779","-6","1" +"39157","Ridgeland","MS","32.420814","-90.13134","-6","1" +"39158","Ridgeland","MS","32.642448","-90.090683","-6","1" +"39159","Rolling Fork","MS","32.811181","-90.97713","-6","1" +"39160","Sallis","MS","33.002813","-89.75296","-6","1" +"39161","Sandhill","MS","32.503522","-89.87039","-6","1" +"39162","Satartia","MS","32.629834","-90.64376","-6","1" +"39163","Sharon","MS","32.642448","-90.090683","-6","1" +"39165","Sibley","MS","31.470602","-91.404404","-6","1" +"39166","Silver City","MS","33.062845","-90.50034","-6","1" +"39167","Star","MS","32.096124","-90.061508","-6","1" +"39168","Taylorsville","MS","31.816868","-89.41533","-6","1" +"39169","Tchula","MS","33.136434","-90.27065","-6","1" +"39170","Terry","MS","32.119511","-90.32859","-6","1" +"39171","Thomastown","MS","32.753923","-89.52414","-6","1" +"39173","Tinsley","MS","32.762751","-90.36285","-6","1" +"39174","Tougaloo","MS","32.398142","-90.16072","-6","1" +"39175","Utica","MS","32.105647","-90.61749","-6","1" +"39176","Vaiden","MS","33.317882","-89.733","-6","1" +"39177","Valley Park","MS","32.641205","-90.82835","-6","1" +"39179","Vaughan","MS","32.806703","-90.08908","-6","1" +"39180","Vicksburg","MS","32.292761","-90.87184","-6","1" +"39181","Vicksburg","MS","32.348565","-90.864199","-6","1" +"39182","Vicksburg","MS","32.348565","-90.864199","-6","1" +"39183","Vicksburg","MS","32.386653","-90.84485","-6","1" +"39189","Walnut Grove","MS","32.601899","-89.42078","-6","1" +"39190","Washington","MS","31.470602","-91.404404","-6","1" +"39191","Wesson","MS","31.714881","-90.39667","-6","1" +"39192","West","MS","33.194928","-89.76284","-6","1" +"39193","Whitfield","MS","32.234775","-90.07263","-6","1" +"39194","Yazoo City","MS","32.855811","-90.4497","-6","1" +"39201","Jackson","MS","32.292396","-90.18328","-6","1" +"39202","Jackson","MS","32.313595","-90.17688","-6","1" +"39203","Jackson","MS","32.308695","-90.19915","-6","1" +"39204","Jackson","MS","32.284829","-90.22778","-6","1" +"39205","Jackson","MS","32.311287","-90.397157","-6","1" +"39206","Jackson","MS","32.365794","-90.17182","-6","1" +"39207","Jackson","MS","32.311287","-90.397157","-6","1" +"39208","Jackson","MS","32.280746","-90.10708","-6","1" +"39209","Jackson","MS","32.325512","-90.25709","-6","1" +"39210","Jackson","MS","32.325012","-90.17902","-6","1" +"39211","Jackson","MS","32.370544","-90.1297","-6","1" +"39212","Jackson","MS","32.234627","-90.26331","-6","1" +"39213","Jackson","MS","32.356489","-90.2106","-6","1" +"39215","Jackson","MS","32.311287","-90.397157","-6","1" +"39216","Jackson","MS","32.334738","-90.16933","-6","1" +"39217","Jackson","MS","32.297396","-90.208088","-6","1" +"39218","Jackson","MS","32.230408","-90.16213","-6","1" +"39219","Jackson","MS","32.252147","-90.214865","-6","1" +"39225","Jackson","MS","32.311287","-90.397157","-6","1" +"39232","Jackson","MS","32.311287","-90.397157","-6","1" +"39235","Jackson","MS","32.311287","-90.397157","-6","1" +"39236","Jackson","MS","32.311287","-90.397157","-6","1" +"39250","Jackson","MS","32.311287","-90.397157","-6","1" +"39269","Jackson","MS","32.300996","-90.18859","-6","1" +"39271","Jackson","MS","32.311287","-90.397157","-6","1" +"39272","Jackson","MS","32.311287","-90.397157","-6","1" +"39282","Jackson","MS","32.311287","-90.397157","-6","1" +"39283","Jackson","MS","32.311287","-90.397157","-6","1" +"39284","Jackson","MS","32.311287","-90.397157","-6","1" +"39286","Jackson","MS","32.311287","-90.397157","-6","1" +"39288","Jackson","MS","32.313127","-89.799625","-6","1" +"39289","Jackson","MS","32.311287","-90.397157","-6","1" +"39296","Jackson","MS","32.311287","-90.397157","-6","1" +"39298","Jackson","MS","32.319905","-89.992257","-6","1" +"39301","Meridian","MS","32.339004","-88.6596","-6","1" +"39302","Meridian","MS","32.431958","-88.641888","-6","1" +"39303","Meridian","MS","32.401233","-88.652279","-6","1" +"39304","Meridian","MS","32.420847","-88.646016","-6","1" +"39305","Meridian","MS","32.439945","-88.70918","-6","1" +"39307","Meridian","MS","32.358891","-88.7494","-6","1" +"39309","Meridian","MS","32.337389","-88.726474","-6","1" +"39320","Bailey","MS","32.535472","-88.72639","-6","1" +"39322","Buckatunna","MS","31.574589","-88.53326","-6","1" +"39323","Chunky","MS","32.315069","-88.91687","-6","1" +"39324","Clara","MS","31.593682","-88.704829","-6","1" +"39325","Collinsville","MS","32.553716","-88.86736","-6","1" +"39326","Daleville","MS","32.578591","-88.66152","-6","1" +"39327","Decatur","MS","32.444821","-89.11703","-6","1" +"39328","De Kalb","MS","32.744445","-88.69959","-6","1" +"39330","Enterprise","MS","32.170432","-88.83866","-6","1" +"39332","Hickory","MS","32.314553","-89.01461","-6","1" +"39335","Lauderdale","MS","32.517145","-88.51801","-6","1" +"39336","Lawrence","MS","32.307815","-89.26169","-6","1" +"39337","Little Rock","MS","32.527955","-88.9952","-6","1" +"39338","Louin","MS","32.108768","-89.23675","-6","1" +"39339","Louisville","MS","33.109635","-89.02849","-6","1" +"39341","Macon","MS","33.115598","-88.58159","-6","1" +"39342","Marion","MS","32.336743","-88.616297","-6","1" +"39345","Newton","MS","32.317298","-89.14483","-6","1" +"39346","Noxapater","MS","32.957794","-89.0821","-6","1" +"39347","Pachuta","MS","32.042598","-88.91588","-6","1" +"39348","Paulding","MS","32.026165","-89.03762","-6","1" +"39350","Philadelphia","MS","32.776368","-89.12788","-6","1" +"39352","Porterville","MS","32.678923","-88.49952","-6","1" +"39354","Preston","MS","32.873605","-88.84028","-6","1" +"39355","Quitman","MS","32.057969","-88.67069","-6","1" +"39356","Rose Hill","MS","32.154808","-89.03624","-6","1" +"39357","Louisville","MS","33.11415","-89.053844","-6","1" +"39358","Scooba","MS","32.838485","-88.48707","-6","1" +"39359","Sebastopol","MS","32.568112","-89.33891","-6","1" +"39360","Shubuta","MS","31.863493","-88.74923","-6","1" +"39361","Shuqualak","MS","32.985613","-88.57464","-6","1" +"39362","State Line","MS","31.415048","-88.531","-6","1" +"39363","Stonewall","MS","32.134826","-88.78589","-6","1" +"39364","Toomsuba","MS","32.420314","-88.52234","-6","1" +"39365","Union","MS","32.588341","-89.13047","-6","1" +"39366","Vossburg","MS","31.931474","-88.922","-6","1" +"39367","Waynesboro","MS","31.688901","-88.65623","-6","1" +"39401","Hattiesburg","MS","31.285508","-89.2799","-6","1" +"39402","Hattiesburg","MS","31.325437","-89.37926","-6","1" +"39403","Hattiesburg","MS","31.356642","-89.382415","-6","1" +"39404","Hattiesburg","MS","31.172142","-89.294772","-6","1" +"39406","Hattiesburg","MS","31.172142","-89.294772","-6","1" +"39407","Hattiesburg","MS","31.172142","-89.294772","-6","1" +"39421","Bassfield","MS","31.490798","-89.72655","-6","1" +"39422","Bay Springs","MS","31.969813","-89.27645","-6","1" +"39423","Beaumont","MS","31.176725","-88.91223","-6","1" +"39425","Brooklyn","MS","31.059327","-89.09164","-6","1" +"39426","Carriere","MS","30.641521","-89.65929","-6","1" +"39427","Carson","MS","31.49616","-89.83579","-6","1" +"39428","Collins","MS","31.651487","-89.56525","-6","1" +"39429","Columbia","MS","31.255242","-89.79264","-6","1" +"39436","Eastabuchie","MS","31.436305","-89.29464","-6","1" +"39437","Ellisville","MS","31.588327","-89.21431","-6","1" +"39439","Heidelberg","MS","31.86883","-89.00323","-6","1" +"39440","Laurel","MS","31.701492","-89.1393","-6","1" +"39441","Laurel","MS","31.727664","-89.075482","-6","1" +"39442","Laurel","MS","31.682254","-89.040622","-6","1" +"39443","Laurel","MS","31.719947","-89.11948","-6","1" +"39451","Leakesville","MS","31.162188","-88.60093","-6","1" +"39452","Lucedale","MS","30.873353","-88.58869","-6","1" +"39455","Lumberton","MS","31.035015","-89.49561","-6","1" +"39456","McLain","MS","31.072789","-88.80915","-6","1" +"39457","McNeill","MS","30.666936","-89.673392","-6","1" +"39459","Moselle","MS","31.496211","-89.30503","-6","1" +"39460","Moss","MS","32.013235","-89.11656","-6","1" +"39461","Neely","MS","31.176281","-88.72248","-6","1" +"39462","New Augusta","MS","31.215709","-89.04494","-6","1" +"39463","Nicholson","MS","30.563724","-89.557751","-6","1" +"39464","Ovett","MS","31.487531","-89.05842","-6","1" +"39465","Petal","MS","31.358823","-89.2279","-6","1" +"39466","Picayune","MS","30.52798","-89.66611","-6","1" +"39470","Poplarville","MS","30.810936","-89.56435","-6","1" +"39474","Prentiss","MS","31.605946","-89.86086","-6","1" +"39475","Purvis","MS","31.165903","-89.41323","-6","1" +"39476","Richton","MS","31.355717","-88.85881","-6","1" +"39477","Sandersville","MS","31.788517","-89.03379","-6","1" +"39478","Sandy Hook","MS","31.054236","-89.85553","-6","1" +"39479","Seminary","MS","31.543388","-89.4648","-6","1" +"39480","Soso","MS","31.726898","-89.30528","-6","1" +"39481","Stringer","MS","31.857399","-89.2469","-6","1" +"39482","Sumrall","MS","31.376358","-89.58558","-6","1" +"39483","Foxworth","MS","31.218509","-89.90761","-6","1" +"39501","Gulfport","MS","30.380597","-89.09626","-6","1" +"39502","Gulfport","MS","30.415795","-89.068448","-6","1" +"39503","Gulfport","MS","30.461786","-89.10381","-6","1" +"39505","Gulfport","MS","30.415795","-89.068448","-6","1" +"39506","Gulfport","MS","30.415795","-89.068448","-6","1" +"39507","Gulfport","MS","30.397044","-89.03998","-6","1" +"39520","Bay Saint Louis","MS","30.304327","-89.40705","-6","1" +"39521","Bay Saint Louis","MS","30.403156","-89.49821","-6","1" +"39522","Stennis Space Center","MS","30.403156","-89.49821","-6","1" +"39525","Diamondhead","MS","30.382544","-89.36958","-6","1" +"39529","Stennis Space Center","MS","30.403156","-89.49821","-6","1" +"39530","Biloxi","MS","30.399148","-88.88917","-6","1" +"39531","Biloxi","MS","30.405831","-88.96219","-6","1" +"39532","Biloxi","MS","30.462388","-88.93293","-6","1" +"39533","Biloxi","MS","30.415795","-89.068448","-6","1" +"39534","Biloxi","MS","30.415795","-89.068448","-6","1" +"39535","Biloxi","MS","30.415795","-89.068448","-6","1" +"39540","D'Iberville","MS","30.444267","-88.899207","-6","1" +"39552","Escatawpa","MS","30.441072","-88.634482","-6","1" +"39553","Gautier","MS","30.400599","-88.65092","-6","1" +"39555","Hurley","MS","30.71325","-88.519743","-6","1" +"39556","Kiln","MS","30.429334","-89.43471","-6","1" +"39558","Lakeshore","MS","30.239124","-89.459526","-6","1" +"39560","Long Beach","MS","30.356147","-89.16346","-6","1" +"39561","McHenry","MS","30.704034","-89.15395","-6","1" +"39562","Moss Point","MS","30.522009","-88.50312","-6","1" +"39563","Moss Point","MS","30.410999","-88.52514","-6","1" +"39564","Ocean Springs","MS","30.403286","-88.77565","-6","1" +"39565","Ocean Springs","MS","30.566715","-88.76018","-6","1" +"39566","Ocean Springs","MS","30.441072","-88.634482","-6","1" +"39567","Pascagoula","MS","30.362203","-88.5469","-6","1" +"39568","Pascagoula","MS","30.441072","-88.634482","-6","1" +"39569","Pascagoula","MS","30.441072","-88.634482","-6","1" +"39571","Pass Christian","MS","30.371623","-89.27038","-6","1" +"39572","Pearlington","MS","30.249994","-89.60493","-6","1" +"39573","Perkinston","MS","30.710795","-89.09325","-6","1" +"39574","Saucier","MS","30.600244","-89.11948","-6","1" +"39576","Waveland","MS","30.289646","-89.38349","-6","1" +"39577","Wiggins","MS","30.94336","-89.17912","-6","1" +"39579","Pearlington","MS","30.258204","-89.602572","-6","1" +"39581","Pascagoula","MS","30.36298","-88.52901","-6","1" +"39595","Pascagoula","MS","30.441072","-88.634482","-6","1" +"39601","Brookhaven","MS","31.574319","-90.45029","-6","1" +"39602","Brookhaven","MS","31.533354","-90.490661","-6","1" +"39603","Brookhaven","MS","31.612287","-90.446702","-6","1" +"39629","Bogue Chitto","MS","31.441613","-90.45281","-6","1" +"39630","Bude","MS","31.463533","-90.84522","-6","1" +"39631","Centreville","MS","31.078189","-91.07723","-6","1" +"39632","Chatawa","MS","31.059186","-90.46706","-6","1" +"39633","Crosby","MS","31.296257","-91.12921","-6","1" +"39635","Fernwood","MS","31.186981","-90.44989","-6","1" +"39638","Gloster","MS","31.206278","-90.9959","-6","1" +"39641","Jayess","MS","31.363848","-90.17457","-6","1" +"39643","Kokomo","MS","31.231448","-90.02263","-6","1" +"39645","Liberty","MS","31.148177","-90.79859","-6","1" +"39647","McCall Creek","MS","31.509919","-90.69788","-6","1" +"39648","Mccomb","MS","31.225598","-90.43327","-6","1" +"39649","Mccomb","MS","31.17494","-90.403987","-6","1" +"39652","Magnolia","MS","31.117097","-90.45287","-6","1" +"39653","Meadville","MS","31.461337","-90.89208","-6","1" +"39654","Monticello","MS","31.544331","-90.1213","-6","1" +"39656","Oak Vale","MS","31.458217","-89.93268","-6","1" +"39657","Osyka","MS","31.028259","-90.4588","-6","1" +"39660","McComb","MS","31.245067","-90.506861","-6","1" +"39661","Roxie","MS","31.487982","-91.08403","-6","1" +"39662","Ruth","MS","31.40227","-90.26002","-6","1" +"39663","Silver Creek","MS","31.590797","-90.00583","-6","1" +"39664","Smithdale","MS","31.328058","-90.67792","-6","1" +"39665","Sontag","MS","31.643751","-90.20776","-6","1" +"39666","Summit","MS","31.292262","-90.45228","-6","1" +"39667","Tylertown","MS","31.131018","-90.12856","-6","1" +"39668","Union Church","MS","31.668442","-90.76317","-6","1" +"39669","Woodville","MS","31.120979","-91.35511","-6","1" +"39701","Columbus","MS","33.492107","-88.43746","-6","1" +"39702","Columbus","MS","33.463004","-88.35574","-6","1" +"39703","Columbus","MS","33.484147","-88.283998","-6","1" +"39704","Columbus","MS","33.69048","-88.33097","-6","1" +"39705","Columbus","MS","33.581599","-88.43297","-6","1" +"39710","Columbus","MS","33.51633","-88.460083","-6","1" +"39730","Aberdeen","MS","33.833689","-88.55463","-6","1" +"39731","Brooksville","MS","33.230508","-88.57968","-6","1" +"39735","Ackerman","MS","33.371974","-89.17616","-6","1" +"39736","Artesia","MS","33.415448","-88.64745","-6","1" +"39737","Bellefontaine","MS","33.648956","-89.334234","-6","1" +"39739","Brooksville","MS","33.243098","-88.60228","-6","1" +"39740","Caledonia","MS","33.752213","-88.30989","-6","1" +"39741","Cedarbluff","MS","33.67341","-88.87957","-6","1" +"39743","Crawford","MS","33.313523","-88.62721","-6","1" +"39744","Eupora","MS","33.577688","-89.3028","-6","1" +"39745","French Camp","MS","33.312695","-89.41628","-6","1" +"39746","Hamilton","MS","33.743856","-88.42703","-6","1" +"39747","Kilmichael","MS","33.413657","-89.56261","-6","1" +"39750","Maben","MS","33.596326","-89.07609","-6","1" +"39751","Mantee","MS","33.702318","-89.05064","-6","1" +"39752","Mathiston","MS","33.54549","-89.13632","-6","1" +"39753","Mayhew","MS","33.483814","-88.640881","-6","1" +"39754","Montpelier","MS","33.659271","-88.753976","-6","1" +"39755","Pheba","MS","33.608062","-88.9596","-6","1" +"39756","Prairie","MS","33.786542","-88.72404","-6","1" +"39758","Sturgis","MS","33.344664","-89.036193","-6","1" +"39759","Starkville","MS","33.450215","-88.82383","-6","1" +"39760","Starkville","MS","33.459924","-88.832163","-6","1" +"39762","Mississippi State","MS","33.453349","-88.79107","-6","1" +"39766","Steens","MS","33.615277","-88.31031","-6","1" +"39767","Stewart","MS","33.463558","-89.46705","-6","1" +"39769","Sturgis","MS","33.333797","-89.01361","-6","1" +"39771","Walthall","MS","33.606148","-89.27527","-6","1" +"39772","Weir","MS","33.321345","-89.32063","-6","1" +"39773","West Point","MS","33.619058","-88.64686","-6","1" +"39776","Woodland","MS","33.779165","-89.03949","-6","1" +"39871","Flora","MS","32.540084","-90.307122","-6","1" +"39901","Atlanta","GA","33.891251","-84.07456","-5","1" +"39940","Laurel","MS","31.706345","-89.12119","-6","1" +"39956","Kiln","MS","30.409245","-89.438829","-6","1" +"40003","Bagdad","KY","38.279797","-85.03498","-5","1" +"40004","Bardstown","KY","37.81109","-85.46164","-5","1" +"40006","Bedford","KY","38.597624","-85.33889","-5","1" +"40007","Bethlehem","KY","38.452451","-85.00764","-5","1" +"40008","Bloomfield","KY","37.923734","-85.28257","-5","1" +"40009","Bradfordsville","KY","37.477192","-85.10175","-5","1" +"40010","Buckner","KY","38.366467","-85.45075","-5","1" +"40011","Campbellsburg","KY","38.53445","-85.17178","-5","1" +"40012","Chaplin","KY","37.905918","-85.21241","-5","1" +"40013","Coxs Creek","KY","37.928563","-85.49036","-5","1" +"40014","Crestwood","KY","38.335106","-85.4584","-5","1" +"40018","Eastwood","KY","38.22977","-85.66304","-5","1" +"40019","Eminence","KY","38.370336","-85.17208","-5","1" +"40020","Fairfield","KY","37.9348","-85.38765","-5","1" +"40022","Finchville","KY","38.147801","-85.33158","-5","1" +"40023","Fisherville","KY","38.182772","-85.43238","-5","1" +"40025","Glenview","KY","38.309597","-85.643359","-5","1" +"40026","Goshen","KY","38.411964","-85.57066","-5","1" +"40027","Harrods Creek","KY","38.329718","-85.63299","-5","1" +"40031","La Grange","KY","38.407833","-85.38475","-5","1" +"40032","La Grange","KY","38.40464","-85.460504","-5","1" +"40033","Lebanon","KY","37.565894","-85.25148","-5","1" +"40036","Lockport","KY","38.434443","-84.96898","-5","1" +"40037","Loretto","KY","37.652712","-85.41337","-5","1" +"40040","Mackville","KY","37.742806","-85.05564","-5","1" +"40041","Masonic Home","KY","38.25361","-85.662215","-5","1" +"40045","Milton","KY","38.702793","-85.37187","-5","1" +"40046","Mount Eden","KY","38.026767","-85.1869","-5","1" +"40047","Mount Washington","KY","38.045982","-85.55467","-5","1" +"40048","Nazareth","KY","37.756941","-85.44671","-5","1" +"40049","Nerinx","KY","37.660251","-85.393204","-5","1" +"40050","New Castle","KY","38.435604","-85.17658","-5","1" +"40051","New Haven","KY","37.656291","-85.58099","-5","1" +"40052","New Hope","KY","37.585365","-85.50817","-5","1" +"40053","Pewee Valley","KY","37.7604","-85.447393","-5","1" +"40055","Pendleton","KY","38.495454","-85.33839","-5","1" +"40056","Pewee Valley","KY","38.308109","-85.48714","-5","1" +"40057","Pleasureville","KY","38.386916","-85.06609","-5","1" +"40058","Port Royal","KY","38.433076","-85.17111","-5","1" +"40059","Prospect","KY","38.350915","-85.60042","-5","1" +"40060","Raywick","KY","37.533395","-85.43588","-5","1" +"40061","Saint Catharine","KY","37.773962","-85.201068","-5","1" +"40062","Saint Francis","KY","37.590699","-85.45004","-5","1" +"40063","Saint Mary","KY","37.579519","-85.355132","-5","1" +"40065","Shelbyville","KY","38.211511","-85.21658","-5","1" +"40066","Shelbyville","KY","38.197268","-85.212156","-5","1" +"40067","Simpsonville","KY","38.210818","-85.36122","-5","1" +"40068","Smithfield","KY","38.400619","-85.27741","-5","1" +"40069","Springfield","KY","37.702418","-85.22257","-5","1" +"40070","Sulphur","KY","38.486325","-85.27425","-5","1" +"40071","Taylorsville","KY","38.045406","-85.36427","-5","1" +"40075","Turners Station","KY","38.552133","-85.101879","-5","1" +"40076","Waddy","KY","38.122088","-85.06677","-5","1" +"40077","Westport","KY","38.491982","-85.4722","-5","1" +"40078","Willisburg","KY","37.840066","-85.12572","-5","1" +"40080","Fairfield","KY","37.93388","-85.385382","-5","1" +"40081","Crestwood","KY","38.3386","-85.492459","-5","1" +"40104","Battletown","KY","38.087303","-86.35414","-5","1" +"40106","Big Spring","KY","37.788538","-86.231194","-6","1" +"40107","Boston","KY","37.768921","-85.65602","-5","1" +"40108","Brandenburg","KY","37.973094","-86.11831","-5","1" +"40109","Brooks","KY","38.062515","-85.73559","-5","1" +"40110","Clermont","KY","37.93462","-85.65545","-5","1" +"40111","Cloverport","KY","37.816771","-86.63448","-6","1" +"40115","Custer","KY","37.753533","-86.21654","-6","1" +"40117","Ekron","KY","37.915077","-86.14434","-5","1" +"40118","Fairdale","KY","38.106135","-85.75362","-5","1" +"40119","Falls Of Rough","KY","37.600179","-86.52846","-6","1" +"40121","Fort Knox","KY","37.895491","-85.9662","-5","1" +"40140","Garfield","KY","37.675627","-86.23001","-6","1" +"40142","Guston","KY","37.894075","-86.20383","-5","1" +"40143","Hardinsburg","KY","37.777083","-86.48345","-6","1" +"40144","Harned","KY","37.750101","-86.39972","-6","1" +"40145","Hudson","KY","37.652706","-86.3173","-6","1" +"40146","Irvington","KY","37.88108","-86.31377","-6","1" +"40150","Lebanon Junction","KY","37.849334","-85.73269","-5","1" +"40152","McDaniels","KY","37.61966","-86.45078","-6","1" +"40153","McQuady","KY","37.802295","-86.414768","-6","1" +"40155","Muldraugh","KY","37.937825","-85.99137","-5","1" +"40157","Payneville","KY","38.028543","-86.38511","-5","1" +"40159","Radcliff","KY","37.723474","-85.976854","-5","1" +"40160","Radcliff","KY","37.828459","-85.93888","-5","1" +"40161","Rhodelia","KY","38.005963","-86.398391","-5","1" +"40162","Rineyville","KY","37.756775","-86.00073","-5","1" +"40164","Se Ree","KY","37.670928","-86.39204","-6","1" +"40165","Shepherdsville","KY","37.997938","-85.69667","-5","1" +"40170","Stephensport","KY","37.965908","-86.49255","-6","1" +"40171","Union Star","KY","37.969766","-86.43079","-6","1" +"40175","Vine Grove","KY","37.826822","-86.00692","-5","1" +"40176","Webster","KY","37.934279","-86.34869","-6","1" +"40177","West Point","KY","37.997957","-85.94452","-5","1" +"40178","Westview","KY","37.647315","-86.40623","-6","1" +"40179","West Point","KY","37.998628","-85.946585","-5","1" +"40201","Louisville","KY","38.188962","-85.676819","-5","1" +"40202","Louisville","KY","38.252854","-85.75137","-5","1" +"40203","Louisville","KY","38.248106","-85.7665","-5","1" +"40204","Louisville","KY","38.23862","-85.72626","-5","1" +"40205","Louisville","KY","38.22292","-85.68326","-5","1" +"40206","Louisville","KY","38.254671","-85.70254","-5","1" +"40207","Louisville","KY","38.257489","-85.65134","-5","1" +"40208","Louisville","KY","38.218764","-85.76241","-5","1" +"40209","Louisville","KY","38.19187","-85.75298","-5","1" +"40210","Louisville","KY","38.23067","-85.78665","-5","1" +"40211","Louisville","KY","38.24142","-85.81181","-5","1" +"40212","Louisville","KY","38.26632","-85.79998","-5","1" +"40213","Louisville","KY","38.186126","-85.71304","-5","1" +"40214","Louisville","KY","38.160936","-85.77624","-5","1" +"40215","Louisville","KY","38.19192","-85.78405","-5","1" +"40216","Louisville","KY","38.188886","-85.83137","-5","1" +"40217","Louisville","KY","38.21632","-85.739","-5","1" +"40218","Louisville","KY","38.193769","-85.65733","-5","1" +"40219","Louisville","KY","38.141638","-85.68218","-5","1" +"40220","Louisville","KY","38.214982","-85.62207","-5","1" +"40221","Louisville","KY","38.188962","-85.676819","-5","1" +"40222","Louisville","KY","38.26507","-85.61319","-5","1" +"40223","Louisville","KY","38.258941","-85.55574","-5","1" +"40224","Louisville","KY","38.188962","-85.676819","-5","1" +"40225","Louisville","KY","38.188962","-85.676819","-5","1" +"40228","Louisville","KY","38.137586","-85.62741","-5","1" +"40229","Louisville","KY","38.085601","-85.66979","-5","1" +"40231","Louisville","KY","38.188962","-85.676819","-5","1" +"40232","Louisville","KY","38.188962","-85.676819","-5","1" +"40233","Louisville","KY","38.188962","-85.676819","-5","1" +"40241","Louisville","KY","38.305636","-85.58424","-5","1" +"40242","Louisville","KY","38.279059","-85.59037","-5","1" +"40243","Louisville","KY","38.237155","-85.53657","-5","1" +"40245","Louisville","KY","38.270855","-85.48322","-5","1" +"40250","Louisville","KY","38.188962","-85.676819","-5","1" +"40251","Louisville","KY","38.188962","-85.676819","-5","1" +"40252","Louisville","KY","38.188962","-85.676819","-5","1" +"40253","Louisville","KY","38.188962","-85.676819","-5","1" +"40255","Louisville","KY","38.188962","-85.676819","-5","1" +"40256","Louisville","KY","38.188962","-85.676819","-5","1" +"40257","Louisville","KY","38.188962","-85.676819","-5","1" +"40258","Louisville","KY","38.141719","-85.86375","-5","1" +"40259","Louisville","KY","38.188962","-85.676819","-5","1" +"40261","Louisville","KY","38.188962","-85.676819","-5","1" +"40266","Louisville","KY","38.188962","-85.676819","-5","1" +"40268","Louisville","KY","38.188962","-85.676819","-5","1" +"40269","Louisville","KY","38.188962","-85.676819","-5","1" +"40270","Louisville","KY","38.188962","-85.676819","-5","1" +"40272","Louisville","KY","38.096056","-85.85994","-5","1" +"40280","Louisville","KY","38.246721","-85.685261","-5","1" +"40281","Louisville","KY","38.188962","-85.676819","-5","1" +"40282","Louisville","KY","38.188962","-85.676819","-5","1" +"40283","Louisville","KY","38.188962","-85.676819","-5","1" +"40285","Louisville","KY","38.188962","-85.676819","-5","1" +"40287","Louisville","KY","38.188962","-85.676819","-5","1" +"40289","Louisville","KY","38.188962","-85.676819","-5","1" +"40290","Louisville","KY","38.188962","-85.676819","-5","1" +"40291","Louisville","KY","38.147232","-85.59169","-5","1" +"40292","Louisville","KY","38.188962","-85.676819","-5","1" +"40293","Louisville","KY","38.188962","-85.676819","-5","1" +"40294","Louisville","KY","38.188962","-85.676819","-5","1" +"40295","Louisville","KY","38.188962","-85.676819","-5","1" +"40296","Louisville","KY","38.188962","-85.676819","-5","1" +"40297","Louisville","KY","38.188962","-85.676819","-5","1" +"40298","Louisville","KY","38.188962","-85.676819","-5","1" +"40299","Louisville","KY","38.190568","-85.55348","-5","1" +"40310","Burgin","KY","37.754255","-84.76904","-5","1" +"40311","Carlisle","KY","38.320944","-84.02358","-5","1" +"40312","Clay City","KY","37.846536","-83.9343","-5","1" +"40313","Clearfield","KY","38.156248","-83.41586","-5","1" +"40316","Denniston","KY","37.933123","-83.52303","-5","1" +"40317","Elliottville","KY","38.176471","-83.268234","-5","1" +"40319","Farmers","KY","38.140258","-83.533691","-5","1" +"40320","Ford","KY","37.968496","-84.157766","-5","1" +"40322","Frenchburg","KY","37.937105","-83.63429","-5","1" +"40324","Georgetown","KY","38.221179","-84.55465","-5","1" +"40328","Gravel Switch","KY","37.561722","-85.0227","-5","1" +"40329","Haldeman","KY","38.206706","-83.41725","-5","1" +"40330","Harrodsburg","KY","37.773923","-84.85812","-5","1" +"40334","Hope","KY","38.016706","-83.76639","-5","1" +"40336","Irvine","KY","37.694764","-83.9771","-5","1" +"40337","Jeffersonville","KY","37.9615","-83.8438","-5","1" +"40339","Keene","KY","37.942941","-84.64418","-5","1" +"40340","Nicholasville","KY","37.866238","-84.579491","-5","1" +"40342","Lawrenceburg","KY","38.012479","-84.94075","-5","1" +"40346","Means","KY","37.979941","-83.73183","-5","1" +"40347","Midway","KY","38.153759","-84.70928","-5","1" +"40348","Millersburg","KY","38.302495","-84.14578","-5","1" +"40350","Moorefield","KY","38.304494","-83.87442","-5","1" +"40351","Morehead","KY","38.19056","-83.4321","-5","1" +"40353","Mount Sterling","KY","38.061248","-83.92964","-5","1" +"40355","New Liberty","KY","38.606023","-84.8279","-5","1" +"40356","Nicholasville","KY","37.883886","-84.571","-5","1" +"40357","North Middletown","KY","38.146395","-84.107655","-5","1" +"40358","Olympia","KY","38.057744","-83.6848","-5","1" +"40359","Owenton","KY","38.467809","-84.81023","-5","1" +"40360","Owingsville","KY","38.152302","-83.76603","-5","1" +"40361","Paris","KY","38.212471","-84.23646","-5","1" +"40362","Paris","KY","38.219407","-84.205944","-5","1" +"40363","Perry Park","KY","38.522034","-85.00607","-5","1" +"40366","Preston","KY","38.086673","-83.757123","-5","1" +"40370","Sadieville","KY","38.399525","-84.53353","-5","1" +"40371","Salt Lick","KY","38.087867","-83.61146","-5","1" +"40372","Salvisa","KY","37.911825","-84.88657","-5","1" +"40374","Sharpsburg","KY","38.201485","-83.91734","-5","1" +"40376","Slade","KY","37.78422","-83.69224","-5","1" +"40379","Stamping Ground","KY","38.29617","-84.69614","-5","1" +"40380","Stanton","KY","37.838747","-83.8099","-5","1" +"40383","Versailles","KY","38.042639","-84.73189","-5","1" +"40384","Versailles","KY","38.021292","-84.745488","-5","1" +"40385","Waco","KY","37.724497","-84.11389","-5","1" +"40386","Versailles","KY","38.021292","-84.745488","-5","1" +"40387","Wellington","KY","37.929101","-83.49464","-5","1" +"40390","Wilmore","KY","37.85743","-84.66069","-5","1" +"40391","Winchester","KY","37.98223","-84.17023","-5","1" +"40392","Winchester","KY","37.968496","-84.157766","-5","1" +"40402","Annville","KY","37.29409","-83.9759","-5","1" +"40403","Berea","KY","37.575568","-84.27767","-5","1" +"40404","Berea","KY","37.716443","-84.299699","-5","1" +"40405","Bighill","KY","37.716443","-84.299699","-5","1" +"40409","Brodhead","KY","37.374681","-84.41808","-5","1" +"40410","Bryantsville","KY","37.651397","-84.546693","-5","1" +"40419","Crab Orchard","KY","37.455879","-84.48753","-5","1" +"40421","Dabolt","KY","37.416008","-83.993588","-5","1" +"40422","Danville","KY","37.644426","-84.78862","-5","1" +"40423","Danville","KY","37.624659","-84.845767","-5","1" +"40434","Gray Hawk","KY","37.395468","-83.908492","-5","1" +"40437","Hustonville","KY","37.431549","-84.81256","-5","1" +"40440","Junction City","KY","37.583748","-84.80855","-5","1" +"40442","Kings Mountain","KY","37.351449","-84.7219","-5","1" +"40444","Lancaster","KY","37.667083","-84.59496","-5","1" +"40445","Livingston","KY","37.302783","-84.21527","-5","1" +"40446","Lancaster","KY","37.651397","-84.546693","-5","1" +"40447","McKee","KY","37.457017","-84.03435","-5","1" +"40448","McKinney","KY","37.460003","-84.75676","-5","1" +"40452","Mitchellsburg","KY","37.603345","-84.94918","-5","1" +"40456","Mount Vernon","KY","37.36766","-84.33233","-5","1" +"40460","Orlando","KY","37.406069","-84.24292","-5","1" +"40461","Paint Lick","KY","37.59483","-84.40789","-5","1" +"40464","Parksville","KY","37.55081","-84.90009","-5","1" +"40467","Peoples","KY","37.416008","-83.993588","-5","1" +"40468","Perryville","KY","37.65487","-84.98037","-5","1" +"40469","Brodhead","KY","37.40382","-84.405839","-5","1" +"40472","Ravenna","KY","37.703394","-83.91384","-5","1" +"40473","Renfro Valley","KY","37.345751","-84.31614","-5","1" +"40475","Richmond","KY","37.745999","-84.28433","-5","1" +"40476","Richmond","KY","37.716443","-84.299699","-5","1" +"40481","Sandgap","KY","37.43424","-84.09155","-5","1" +"40484","Stanford","KY","37.520836","-84.6735","-5","1" +"40486","Tyner","KY","37.369321","-83.85889","-5","1" +"40488","Waneta","KY","37.471602","-84.03936","-5","1" +"40489","Waynesburg","KY","37.351221","-84.62099","-5","1" +"40492","Wildie","KY","37.345751","-84.31614","-5","1" +"40495","Winston","KY","37.709721","-84.082894","-5","1" +"40501","Lexington","KY","38.037847","-84.61645","-5","1" +"40502","Lexington","KY","38.017219","-84.4859","-5","1" +"40503","Lexington","KY","38.007898","-84.53452","-5","1" +"40504","Lexington","KY","38.039322","-84.54259","-5","1" +"40505","Lexington","KY","38.058477","-84.46109","-5","1" +"40506","Lexington","KY","38.028712","-84.507471","-5","1" +"40507","Lexington","KY","38.047408","-84.49627","-5","1" +"40508","Lexington","KY","38.051727","-84.49336","-5","1" +"40509","Lexington","KY","38.005199","-84.40954","-5","1" +"40510","Lexington","KY","38.064087","-84.60713","-5","1" +"40511","Lexington","KY","38.105283","-84.50775","-5","1" +"40512","Lexington","KY","38.028269","-84.471505","-5","1" +"40513","Lexington","KY","38.010247","-84.58619","-5","1" +"40514","Lexington","KY","37.984907","-84.56691","-5","1" +"40515","Lexington","KY","37.952113","-84.45347","-5","1" +"40516","Lexington","KY","38.071981","-84.38559","-5","1" +"40517","Lexington","KY","37.985128","-84.48874","-5","1" +"40522","Lexington","KY","38.028269","-84.471505","-5","1" +"40523","Lexington","KY","38.028269","-84.471505","-5","1" +"40524","Lexington","KY","38.028269","-84.471505","-5","1" +"40526","Lexington","KY","38.028269","-84.471505","-5","1" +"40533","Lexington","KY","38.028269","-84.471505","-5","1" +"40536","Lexington","KY","38.032075","-84.508361","-5","1" +"40544","Lexington","KY","38.028269","-84.471505","-5","1" +"40546","Lexington","KY","38.028269","-84.471505","-5","1" +"40550","Lexington","KY","38.028269","-84.471505","-5","1" +"40555","Lexington","KY","38.028269","-84.471505","-5","1" +"40574","Lexington","KY","38.028269","-84.471505","-5","1" +"40575","Lexington","KY","38.028269","-84.471505","-5","1" +"40576","Lexington","KY","38.028269","-84.471505","-5","1" +"40577","Lexington","KY","38.028269","-84.471505","-5","1" +"40578","Lexington","KY","38.028269","-84.471505","-5","1" +"40579","Lexington","KY","38.028269","-84.471505","-5","1" +"40580","Lexington","KY","38.028269","-84.471505","-5","1" +"40581","Lexington","KY","38.028269","-84.471505","-5","1" +"40582","Lexington","KY","38.028269","-84.471505","-5","1" +"40583","Lexington","KY","38.028269","-84.471505","-5","1" +"40584","Lexington","KY","38.028269","-84.471505","-5","1" +"40585","Lexington","KY","38.028269","-84.471505","-5","1" +"40586","Lexington","KY","38.028269","-84.471505","-5","1" +"40587","Lexington","KY","38.028269","-84.471505","-5","1" +"40588","Lexington","KY","38.028269","-84.471505","-5","1" +"40589","Lexington","KY","38.028269","-84.471505","-5","1" +"40590","Lexington","KY","38.028269","-84.471505","-5","1" +"40591","Lexington","KY","38.028269","-84.471505","-5","1" +"40592","Lexington","KY","38.028269","-84.471505","-5","1" +"40593","Lexington","KY","38.028269","-84.471505","-5","1" +"40594","Lexington","KY","38.028269","-84.471505","-5","1" +"40595","Lexington","KY","38.028269","-84.471505","-5","1" +"40596","Lexington","KY","38.028269","-84.471505","-5","1" +"40601","Frankfort","KY","38.201649","-84.86935","-5","1" +"40602","Frankfort","KY","38.234133","-84.874809","-5","1" +"40603","Frankfort","KY","38.234133","-84.874809","-5","1" +"40604","Frankfort","KY","38.234133","-84.874809","-5","1" +"40618","Frankfort","KY","38.234133","-84.874809","-5","1" +"40619","Frankfort","KY","38.234133","-84.874809","-5","1" +"40620","Frankfort","KY","38.234133","-84.874809","-5","1" +"40621","Frankfort","KY","38.234133","-84.874809","-5","1" +"40622","Frankfort","KY","38.234133","-84.874809","-5","1" +"40695","Middlesborough","KY","36.608426","-83.731809","-5","1" +"40701","Corbin","KY","36.942035","-84.10685","-5","1" +"40702","Corbin","KY","36.937426","-84.1031","-5","1" +"40724","Bush","KY","37.152074","-84.140847","-5","1" +"40729","East Bernstadt","KY","37.231717","-84.13026","-5","1" +"40730","Emlyn","KY","36.705162","-84.14595","-5","1" +"40734","Gray","KY","36.930995","-83.98146","-5","1" +"40737","Keavy","KY","36.990797","-84.14124","-5","1" +"40740","Lily","KY","37.015283","-84.05872","-5","1" +"40741","London","KY","37.143828","-84.07839","-5","1" +"40742","London","KY","37.137615","-84.115617","-5","1" +"40743","London","KY","37.134455","-84.045746","-5","1" +"40744","London","KY","37.060576","-84.071","-5","1" +"40745","London","KY","37.137615","-84.115617","-5","1" +"40746","London","KY","37.137615","-84.115617","-5","1" +"40747","London","KY","37.137615","-84.115617","-5","1" +"40748","London","KY","37.137615","-84.115617","-5","1" +"40751","Marydell","KY","37.137615","-84.115617","-5","1" +"40754","Nevisdale","KY","36.780333","-84.11678","-5","1" +"40755","Pittsburg","KY","37.167752","-84.116614","-5","1" +"40759","Rockholds","KY","36.817151","-84.05917","-5","1" +"40763","Siler","KY","36.681189","-83.95156","-5","1" +"40769","Williamsburg","KY","36.709853","-84.1508","-5","1" +"40771","Woodbine","KY","36.888978","-84.05237","-5","1" +"40801","Ages Brookside","KY","36.858906","-83.2528","-5","1" +"40803","Asher","KY","37.046365","-83.42003","-5","1" +"40806","Baxter","KY","36.872801","-83.30778","-5","1" +"40807","Benham","KY","36.963608","-82.95015","-5","1" +"40808","Big Laurel","KY","36.981495","-83.25264","-5","1" +"40810","Bledsoe","KY","36.91707","-83.32399","-5","1" +"40813","Calvin","KY","36.737835","-83.60248","-5","1" +"40815","Cawood","KY","36.781517","-83.22904","-5","1" +"40816","Chappell","KY","36.987495","-83.32795","-5","1" +"40818","Coalgood","KY","36.807137","-83.26552","-5","1" +"40819","Coldiron","KY","36.827233","-83.4645","-5","1" +"40820","Cranks","KY","36.766134","-83.16117","-5","1" +"40823","Cumberland","KY","36.972292","-82.99572","-5","1" +"40824","Dayhoit","KY","36.840955","-83.37539","-5","1" +"40826","Eolia","KY","37.048238","-82.81775","-5","1" +"40827","Essie","KY","37.043142","-83.48892","-5","1" +"40828","Evarts","KY","36.86772","-83.17747","-5","1" +"40829","Grays Knob","KY","36.797447","-83.264497","-5","1" +"40830","Gulston","KY","36.772301","-83.33415","-5","1" +"40831","Harlan","KY","36.828285","-83.31856","-5","1" +"40840","Helton","KY","36.949181","-83.43129","-5","1" +"40843","Holmes Mill","KY","36.868363","-82.96607","-5","1" +"40844","Hoskinston","KY","37.058837","-83.38533","-5","1" +"40845","Hulen","KY","36.786271","-83.52009","-5","1" +"40847","Kenvir","KY","36.852687","-83.15917","-5","1" +"40849","Lejunior","KY","36.885169","-83.12461","-5","1" +"40854","Loyall","KY","36.85107","-83.35315","-5","1" +"40855","Lynch","KY","36.96222","-82.90522","-5","1" +"40856","Miracle","KY","36.726258","-83.54969","-5","1" +"40858","Mozelle","KY","37.018413","-83.39768","-5","1" +"40862","Partridge","KY","37.004426","-82.89858","-5","1" +"40863","Pathfork","KY","36.753043","-83.44991","-5","1" +"40865","Putney","KY","36.901802","-83.24129","-5","1" +"40867","Smith","KY","36.712383","-83.33711","-5","1" +"40868","Stinnett","KY","37.11181","-83.39265","-5","1" +"40870","Totz","KY","36.930024","-83.15467","-5","1" +"40873","Wallins Creek","KY","36.823334","-83.41058","-5","1" +"40874","Warbranch","KY","36.982545","-83.48003","-5","1" +"40902","Arjay","KY","36.836208","-83.63388","-5","1" +"40903","Artemus","KY","36.825088","-83.8385","-5","1" +"40906","Barbourville","KY","36.853913","-83.88501","-5","1" +"40913","Beverly","KY","36.942094","-83.53262","-5","1" +"40914","Big Creek","KY","37.112359","-83.56789","-5","1" +"40915","Bimble","KY","36.887081","-83.81552","-5","1" +"40921","Bryants Store","KY","36.72179","-83.90657","-5","1" +"40923","Cannon","KY","36.920165","-83.85699","-5","1" +"40927","Closplint","KY","36.889259","-83.05265","-5","1" +"40930","Dewitt","KY","36.855044","-83.739","-5","1" +"40931","Eriline","KY","37.147687","-83.737014","-5","1" +"40932","Fall Rock","KY","37.147687","-83.737014","-5","1" +"40935","Flat Lick","KY","36.867971","-83.74576","-5","1" +"40939","Fourmile","KY","36.871254","-83.829985","-5","1" +"40940","Frakes","KY","36.607234","-83.92535","-5","1" +"40941","Garrard","KY","37.176075","-83.66608","-5","1" +"40943","Girdler","KY","36.947113","-83.8506","-5","1" +"40944","Goose Rock","KY","37.147687","-83.737014","-5","1" +"40946","Green Road","KY","36.966634","-83.83413","-5","1" +"40949","Heidrick","KY","36.897618","-83.87252","-5","1" +"40951","Hima","KY","37.147687","-83.737014","-5","1" +"40953","Hinkle","KY","36.943114","-83.81984","-5","1" +"40955","Ingram","KY","36.769184","-83.708181","-5","1" +"40958","Kettle Island","KY","36.793291","-83.58725","-5","1" +"40962","Manchester","KY","37.164346","-83.76674","-5","1" +"40964","Mary Alice","KY","36.842977","-83.183446","-5","1" +"40965","Middlesboro","KY","36.617181","-83.72186","-5","1" +"40972","Oneida","KY","37.25398","-83.61901","-5","1" +"40977","Pineville","KY","36.750028","-83.72023","-5","1" +"40979","Roark","KY","37.016332","-83.51075","-5","1" +"40981","Saul","KY","37.331259","-83.386991","-5","1" +"40982","Scalf","KY","36.933443","-83.70088","-5","1" +"40983","Sextons Creek","KY","37.32832","-83.7488","-5","1" +"40988","Stoney Fork","KY","36.842522","-83.51851","-5","1" +"40995","Trosper","KY","36.78737","-83.81508","-5","1" +"40997","Walker","KY","36.888893","-83.66257","-5","1" +"40999","Woollum","KY","37.005242","-83.80508","-5","1" +"41000","Fort Mitchell","KY","39.0358","-84.546445","-5","1" +"41001","Alexandria","KY","38.946893","-84.38652","-5","1" +"41002","Augusta","KY","38.76189","-83.99683","-5","1" +"41003","Berry","KY","38.535065","-84.38904","-5","1" +"41004","Brooksville","KY","38.677837","-84.09411","-5","1" +"41005","Burlington","KY","39.020466","-84.74158","-5","1" +"41006","Butler","KY","38.796981","-84.33792","-5","1" +"41007","California","KY","38.910255","-84.28194","-5","1" +"41008","Carrollton","KY","38.663328","-85.16803","-5","1" +"41010","Corinth","KY","38.484843","-84.61017","-5","1" +"41011","Covington","KY","39.0752","-84.52064","-5","1" +"41012","Covington","KY","38.944663","-84.520501","-5","1" +"41014","Covington","KY","39.067811","-84.5039","-5","1" +"41015","Latonia","KY","39.013062","-84.49419","-5","1" +"41016","Covington","KY","39.087593","-84.55057","-5","1" +"41017","Ft Mitchell","KY","39.036361","-84.56801","-5","1" +"41018","Erlanger","KY","39.013755","-84.60229","-5","1" +"41019","Covington","KY","38.944663","-84.520501","-5","1" +"41022","Florence","KY","38.962372","-84.747789","-5","1" +"41030","Crittenden","KY","38.788439","-84.602","-5","1" +"41031","Cynthiana","KY","38.397678","-84.2939","-5","1" +"41033","De Mossville","KY","38.773111","-84.44889","-5","1" +"41034","Dover","KY","38.730747","-83.88762","-5","1" +"41035","Dry Ridge","KY","38.691006","-84.6418","-5","1" +"41037","Elizaville","KY","38.3481","-83.718626","-5","1" +"41039","Ewing","KY","38.424954","-83.86286","-5","1" +"41040","Falmouth","KY","38.656527","-84.32811","-5","1" +"41041","Flemingsburg","KY","38.418131","-83.72497","-5","1" +"41042","Florence","KY","38.983853","-84.64401","-5","1" +"41043","Foster","KY","38.765448","-84.16998","-5","1" +"41044","Germantown","KY","38.63785","-83.96651","-5","1" +"41045","Ghent","KY","38.724439","-85.05007","-5","1" +"41046","Glencoe","KY","38.742296","-84.81223","-5","1" +"41048","Hebron","KY","39.0805","-84.68754","-5","1" +"41049","Hillsboro","KY","38.286314","-83.6512","-5","1" +"41051","Independence","KY","38.941953","-84.54902","-5","1" +"41052","Jonesville","KY","38.6622","-84.77495","-5","1" +"41053","Kenton","KY","38.944663","-84.520501","-5","1" +"41054","Mason","KY","38.593226","-84.578552","-5","1" +"41055","Mayslick","KY","38.52217","-83.85894","-5","1" +"41056","Maysville","KY","38.624534","-83.76561","-5","1" +"41059","Melbourne","KY","39.022732","-84.36575","-5","1" +"41061","Milford","KY","38.688556","-84.070074","-5","1" +"41062","Minerva","KY","38.719573","-83.910276","-5","1" +"41063","Morning View","KY","38.842166","-84.48802","-5","1" +"41064","Mount Olivet","KY","38.508638","-84.05145","-5","1" +"41065","Muses Mills","KY","38.3481","-83.718626","-5","1" +"41071","Newport","KY","39.08347","-84.48681","-5","1" +"41072","Newport","KY","38.963761","-84.368926","-5","1" +"41073","Bellevue","KY","39.103011","-84.47987","-5","1" +"41074","Dayton","KY","39.10941","-84.46986","-5","1" +"41075","Fort Thomas","KY","39.076011","-84.45127","-5","1" +"41076","Newport","KY","39.019185","-84.44204","-5","1" +"41080","Petersburg","KY","39.062761","-84.85236","-5","1" +"41081","Plummers Landing","KY","38.3481","-83.718626","-5","1" +"41083","Sanders","KY","38.666588","-84.96756","-5","1" +"41085","Silver Grove","KY","39.034293","-84.39156","-5","1" +"41086","Sparta","KY","38.709838","-84.88807","-5","1" +"41091","Union","KY","38.930285","-84.71603","-5","1" +"41092","Verona","KY","38.815335","-84.68485","-5","1" +"41093","Wallingford","KY","38.37106","-83.57103","-5","1" +"41094","Walton","KY","38.87872","-84.62558","-5","1" +"41095","Warsaw","KY","38.775686","-84.89756","-5","1" +"41096","Washington","KY","38.61225","-83.808021","-5","1" +"41097","Williamstown","KY","38.628866","-84.5679","-5","1" +"41098","Worthville","KY","38.60395","-85.03388","-5","1" +"41099","Newport","KY","38.963761","-84.368926","-5","1" +"41101","Ashland","KY","38.473961","-82.64532","-5","1" +"41102","Ashland","KY","38.439526","-82.6932","-5","1" +"41105","Ashland","KY","38.370285","-82.694757","-5","1" +"41114","Ashland","KY","38.370285","-82.694757","-5","1" +"41121","Argillite","KY","38.456608","-82.82615","-5","1" +"41124","Blaine","KY","38.028476","-82.84781","-5","1" +"41127","Camp Dix","KY","38.602881","-83.361625","-5","1" +"41128","Carter","KY","38.433912","-83.133597","-5","1" +"41129","Catlettsburg","KY","38.360669","-82.61836","-5","1" +"41132","Denton","KY","38.251159","-82.83496","-5","1" +"41135","Emerson","KY","38.365096","-83.27206","-5","1" +"41137","Firebrick","KY","38.688142","-83.04838","-5","1" +"41139","Flatwoods","KY","38.52032","-82.72175","-5","1" +"41141","Garrison","KY","38.570194","-83.14301","-5","1" +"41142","Grahn","KY","38.282767","-83.0727","-5","1" +"41143","Grayson","KY","38.323106","-82.94997","-5","1" +"41144","Greenup","KY","38.552472","-82.86514","-5","1" +"41146","Hitchins","KY","38.272476","-82.90494","-5","1" +"41149","Isonville","KY","38.061324","-83.05005","-5","1" +"41150","Jacobs","KY","38.225087","-83.242129","-5","1" +"41156","Lloyd","KY","38.565211","-82.916586","-5","1" +"41159","Martha","KY","38.019104","-82.9507","-5","1" +"41160","Mazie","KY","38.074113","-82.744663","-5","1" +"41163","Grayson","KY","38.338445","-82.939541","-5","1" +"41164","Olive Hill","KY","38.292177","-83.18381","-5","1" +"41166","Quincy","KY","38.630683","-83.11739","-5","1" +"41168","Rush","KY","38.298546","-82.77714","-5","1" +"41169","Russell","KY","38.538456","-82.70856","-5","1" +"41170","Saint Paul","KY","38.68177","-83.0695","-5","1" +"41171","Sandy Hook","KY","38.089097","-83.09554","-5","1" +"41173","Soldier","KY","38.262029","-83.28472","-5","1" +"41174","South Portsmouth","KY","38.71293","-83.02353","-5","1" +"41175","South Shore","KY","38.676695","-82.9686","-5","1" +"41179","Vanceburg","KY","38.530915","-83.38506","-5","1" +"41180","Webbville","KY","38.132937","-82.85098","-5","1" +"41181","Willard","KY","38.204459","-82.907615","-5","1" +"41183","Worthington","KY","38.54912","-82.73508","-5","1" +"41189","Tollesboro","KY","38.546281","-83.55909","-5","1" +"41201","Adams","KY","38.076051","-82.73975","-5","1" +"41203","Beauty","KY","37.846064","-82.44835","-5","1" +"41204","Boons Camp","KY","37.81711","-82.68897","-5","1" +"41214","Debord","KY","37.775385","-82.57034","-5","1" +"41215","Denver","KY","37.771963","-82.865092","-5","1" +"41216","East Point","KY","37.756007","-82.81931","-5","1" +"41219","Flatgap","KY","37.933492","-82.90279","-5","1" +"41222","Hagerhill","KY","37.780917","-82.82744","-5","1" +"41224","Inez","KY","37.866327","-82.52903","-5","1" +"41226","Keaton","KY","37.992794","-82.94551","-5","1" +"41228","Leander","KY","37.752473","-82.87484","-5","1" +"41230","Louisa","KY","38.071237","-82.64062","-5","1" +"41231","Lovely","KY","37.810757","-82.39411","-5","1" +"41232","Lowmansville","KY","37.916701","-82.73746","-5","1" +"41234","Meally","KY","37.795418","-82.7337","-5","1" +"41238","Oil Springs","KY","37.841448","-82.94106","-5","1" +"41240","Paintsville","KY","37.823275","-82.78167","-5","1" +"41250","Pilgrim","KY","37.758445","-82.48919","-5","1" +"41254","River","KY","37.887278","-82.73688","-5","1" +"41255","Sitka","KY","37.916221","-82.83962","-5","1" +"41256","Staffordsville","KY","37.832617","-82.86299","-5","1" +"41257","Stambaugh","KY","37.940709","-82.81233","-5","1" +"41260","Thelma","KY","37.831324","-82.76039","-5","1" +"41262","Tomahawk","KY","37.855873","-82.62091","-5","1" +"41263","Tutor Key","KY","37.8583","-82.7598","-5","1" +"41264","Ulysses","KY","37.935529","-82.68331","-5","1" +"41265","Van Lear","KY","37.761356","-82.72165","-5","1" +"41267","Warfield","KY","37.855146","-82.41666","-5","1" +"41268","West Van Lear","KY","37.789291","-82.78437","-5","1" +"41271","Williamsport","KY","37.831277","-82.726407","-5","1" +"41274","Wittensville","KY","37.86388","-82.80914","-5","1" +"41301","Campton","KY","37.716311","-83.51835","-5","1" +"41307","Athol","KY","37.515013","-83.26432","-5","1" +"41310","Bays","KY","37.640938","-83.24466","-5","1" +"41311","Beattyville","KY","37.578547","-83.70348","-5","1" +"41313","Bethany","KY","37.740503","-83.475446","-5","1" +"41314","Booneville","KY","37.430777","-83.66771","-5","1" +"41317","Clayhole","KY","37.461944","-83.18256","-5","1" +"41332","Hazel Green","KY","37.797688","-83.36866","-5","1" +"41333","Heidelberg","KY","37.556255","-83.776253","-5","1" +"41338","Island City","KY","37.398617","-83.704908","-5","1" +"41339","Jackson","KY","37.533559","-83.34547","-5","1" +"41342","Lee City","KY","37.740503","-83.475446","-5","1" +"41344","Lerose","KY","37.502641","-83.62117","-5","1" +"41347","Lone","KY","37.54418","-83.600784","-5","1" +"41348","Lost Creek","KY","37.426337","-83.29911","-5","1" +"41351","Mistletoe","KY","37.398617","-83.704908","-5","1" +"41352","Mize","KY","37.914002","-83.233761","-5","1" +"41360","Pine Ridge","KY","37.791388","-83.64971","-5","1" +"41362","Primrose","KY","37.60332","-83.713974","-5","1" +"41364","Ricetown","KY","37.382832","-83.62327","-5","1" +"41365","Rogers","KY","37.711278","-83.63647","-5","1" +"41366","Rousseau","KY","37.593059","-83.287774","-5","1" +"41367","Rowdy","KY","37.383285","-83.2404","-5","1" +"41368","Saint Helens","KY","37.611684","-83.64341","-5","1" +"41377","Talbert","KY","37.416002","-83.44991","-5","1" +"41385","Vancleve","KY","37.635723","-83.35077","-5","1" +"41386","Vincent","KY","37.473347","-83.81722","-5","1" +"41390","Whick","KY","37.424083","-83.37595","-5","1" +"41397","Zoe","KY","37.643659","-83.67763","-5","1" +"41408","Cannel City","KY","37.792272","-83.28137","-5","1" +"41410","Cisco","KY","37.690636","-83.074592","-5","1" +"41413","Crockett","KY","37.970507","-83.125202","-5","1" +"41419","Edna","KY","37.690636","-83.074592","-5","1" +"41421","Elkfork","KY","37.997666","-83.16103","-5","1" +"41422","Elsie","KY","37.690636","-83.074592","-5","1" +"41425","Ezel","KY","37.891486","-83.44413","-5","1" +"41426","Falcon","KY","37.784924","-82.99783","-5","1" +"41433","Gapville","KY","37.690636","-83.074592","-5","1" +"41444","Ivyton","KY","37.690636","-83.074592","-5","1" +"41451","Malone","KY","37.914002","-83.233761","-5","1" +"41459","Ophir","KY","37.914002","-83.233761","-5","1" +"41463","Salyersville","KY","37.745824","-83.073603","-5","1" +"41464","Royalton","KY","37.65026","-82.94544","-5","1" +"41465","Salyersville","KY","37.736751","-83.08652","-5","1" +"41472","West Liberty","KY","37.932283","-83.23821","-5","1" +"41477","Wrigley","KY","37.914002","-83.233761","-5","1" +"41501","Pikeville","KY","37.478169","-82.5189","-5","1" +"41502","Pikeville","KY","37.481637","-82.550507","-5","1" +"41503","South Williamson","KY","37.67059","-82.28465","-5","1" +"41512","Ashcamp","KY","37.254188","-82.47961","-5","1" +"41513","Belcher","KY","37.357536","-82.3631","-5","1" +"41514","Belfry","KY","37.672296","-82.30442","-5","1" +"41517","Burdine","KY","37.184477","-82.61109","-5","1" +"41519","Canada","KY","37.60512","-82.31477","-5","1" +"41520","Dorton","KY","37.279027","-82.57732","-5","1" +"41522","Elkhorn City","KY","37.300397","-82.39516","-5","1" +"41524","Fedscreek","KY","37.424071","-82.23762","-5","1" +"41526","Fords Branch","KY","37.437194","-82.518527","-5","1" +"41527","Forest Hills","KY","37.641773","-82.27793","-5","1" +"41528","Freeburn","KY","37.561944","-82.13471","-5","1" +"41531","Hardy","KY","37.599893","-82.23349","-5","1" +"41534","Hellier","KY","37.2701","-82.48553","-5","1" +"41535","Huddy","KY","37.598267","-82.27611","-5","1" +"41537","Jenkins","KY","37.192483","-82.6235","-5","1" +"41538","Jonancy","KY","37.314335","-82.59506","-5","1" +"41539","Kimper","KY","37.504315","-82.32797","-5","1" +"41540","Lick Creek","KY","37.396574","-82.33349","-5","1" +"41542","Lookout","KY","37.314848","-82.464979","-5","1" +"41543","McAndrews","KY","37.553553","-82.28283","-5","1" +"41544","McCarr","KY","37.59865","-82.16836","-5","1" +"41546","McVeigh","KY","37.550374","-82.25703","-5","1" +"41547","Majestic","KY","37.544224","-82.06488","-5","1" +"41548","Mouthcard","KY","37.369612","-82.23523","-5","1" +"41549","Myra","KY","37.293386","-82.60019","-5","1" +"41553","Phelps","KY","37.506174","-82.15907","-5","1" +"41554","Phyllis","KY","37.445906","-82.32708","-5","1" +"41555","Pinsonfork","KY","37.52976","-82.26665","-5","1" +"41557","Raccoon","KY","37.514166","-82.43625","-5","1" +"41558","Ransom","KY","37.533643","-82.21145","-5","1" +"41559","Regina","KY","37.364548","-82.40573","-5","1" +"41560","Robinson Creek","KY","37.389786","-82.55812","-5","1" +"41561","Rockhouse","KY","37.33162","-82.462574","-5","1" +"41562","Shelbiana","KY","37.416995","-82.4571","-5","1" +"41563","Shelby Gap","KY","37.216465","-82.54639","-5","1" +"41564","Sidney","KY","37.610331","-82.36125","-5","1" +"41566","Steele","KY","37.417254","-82.18823","-5","1" +"41567","Stone","KY","37.560929","-82.28796","-5","1" +"41568","Stopover","KY","37.49947","-82.05643","-5","1" +"41569","Toler","KY","37.633524","-82.25408","-5","1" +"41571","Varney","KY","37.625031","-82.38704","-5","1" +"41572","Virgie","KY","37.322411","-82.61598","-5","1" +"41601","Allen","KY","37.611434","-82.72503","-5","1" +"41602","Auxier","KY","37.73696","-82.74012","-5","1" +"41603","Banner","KY","37.601078","-82.69496","-5","1" +"41604","Beaver","KY","37.370358","-82.66944","-5","1" +"41605","Betsy Layne","KY","37.554631","-82.63174","-5","1" +"41606","Bevinsville","KY","37.362943","-82.73277","-5","1" +"41607","Blue River","KY","37.617197","-82.85634","-5","1" +"41612","Bypro","KY","37.358509","-82.7207","-5","1" +"41615","Dana","KY","37.550496","-82.6933","-5","1" +"41616","David","KY","37.587133","-82.87272","-5","1" +"41619","Drift","KY","37.496608","-82.75942","-5","1" +"41621","Dwale","KY","37.623492","-82.72417","-5","1" +"41622","Eastern","KY","37.514748","-82.81097","-5","1" +"41630","Garrett","KY","37.470216","-82.8409","-5","1" +"41631","Grethel","KY","37.479754","-82.64922","-5","1" +"41632","Gunlock","KY","37.555846","-82.94995","-5","1" +"41635","Harold","KY","37.509291","-82.63494","-5","1" +"41636","Hi Hat","KY","37.398774","-82.73257","-5","1" +"41640","Hueysville","KY","37.493888","-82.94192","-5","1" +"41642","Ivel","KY","37.587011","-82.66028","-5","1" +"41643","Lackey","KY","37.470999","-82.829405","-5","1" +"41645","Langley","KY","37.544465","-82.80178","-5","1" +"41647","McDowell","KY","37.449076","-82.7264","-5","1" +"41649","Martin","KY","37.568873","-82.75937","-5","1" +"41650","Melvin","KY","37.351125","-82.69298","-5","1" +"41651","Minnie","KY","37.465744","-82.75492","-5","1" +"41653","Prestonsburg","KY","37.667872","-82.75876","-5","1" +"41655","Printer","KY","37.511126","-82.72053","-5","1" +"41659","Stanville","KY","37.569845","-82.62562","-5","1" +"41660","Teaberry","KY","37.428801","-82.64374","-5","1" +"41663","Tram","KY","37.568942","-82.64774","-5","1" +"41666","Wayland","KY","37.446983","-82.80852","-5","1" +"41667","Weeksbury","KY","37.322234","-82.69699","-5","1" +"41668","West Prestonsburg","KY","37.670986","-82.760975","-5","1" +"41669","Wheelwright","KY","37.331465","-82.71906","-5","1" +"41701","Hazard","KY","37.274854","-83.19061","-5","1" +"41702","Hazard","KY","37.320076","-83.206495","-5","1" +"41705","Fort Thomas","KY","39.08359","-84.450912","-5","1" +"41712","Ary","KY","37.373384","-83.15186","-5","1" +"41713","Avawam","KY","37.22539","-83.273609","-5","1" +"41714","Bear Branch","KY","37.163342","-83.51527","-5","1" +"41719","Bonnyman","KY","37.295365","-83.25414","-5","1" +"41721","Buckhorn","KY","37.325318","-83.49048","-5","1" +"41722","Bulan","KY","37.369312","-83.1156","-5","1" +"41723","Busy","KY","37.257714","-83.31253","-5","1" +"41725","Carrie","KY","37.33195","-83.02976","-5","1" +"41727","Chavies","KY","37.350689","-83.34049","-5","1" +"41729","Combs","KY","37.266633","-83.21226","-5","1" +"41730","Confluence","KY","37.263348","-83.39943","-5","1" +"41731","Cornettsville","KY","37.115385","-83.08501","-5","1" +"41735","Delphia","KY","37.029744","-83.08919","-5","1" +"41736","Dice","KY","37.370521","-83.23714","-5","1" +"41739","Dwarf","KY","37.348289","-83.11137","-5","1" +"41740","Emmalena","KY","37.348377","-83.04938","-5","1" +"41743","Fisty","KY","37.30636","-83.090441","-5","1" +"41745","Gays Creek","KY","37.328336","-83.4399","-5","1" +"41746","Happy","KY","37.204045","-83.09845","-5","1" +"41747","Hardburly","KY","37.300202","-83.122477","-5","1" +"41749","Hyden","KY","37.17621","-83.38301","-5","1" +"41751","Jeff","KY","37.207333","-83.13361","-5","1" +"41754","Krypton","KY","37.31629","-83.33267","-5","1" +"41759","Sassafras","KY","37.229381","-83.03409","-5","1" +"41760","Scuddy","KY","37.205562","-83.08055","-5","1" +"41762","Sizerock","KY","37.223635","-83.50599","-5","1" +"41763","Slemp","KY","37.04877","-83.13904","-5","1" +"41764","Smilax","KY","37.113248","-83.24326","-5","1" +"41766","Thousandsticks","KY","37.187088","-83.44978","-5","1" +"41772","Vest","KY","37.393894","-83.02313","-5","1" +"41773","Vicco","KY","37.221636","-83.05627","-5","1" +"41774","Viper","KY","37.158397","-83.13673","-5","1" +"41775","Wendover","KY","37.10014","-83.34647","-5","1" +"41776","Wooton","KY","37.167173","-83.2852","-5","1" +"41777","Yeaddiss","KY","37.065439","-83.22479","-5","1" +"41778","Yerkes","KY","37.279297","-83.3187","-5","1" +"41804","Blackey","KY","37.141017","-82.99081","-5","1" +"41810","Cromona","KY","37.185228","-82.69447","-5","1" +"41812","Deane","KY","37.241284","-82.75013","-5","1" +"41815","Ermine","KY","37.150537","-82.79468","-5","1" +"41817","Garner","KY","37.36778","-82.91535","-5","1" +"41819","Gordon","KY","36.98586","-83.06497","-5","1" +"41821","Hallie","KY","37.088069","-82.99728","-5","1" +"41822","Hindman","KY","37.333551","-82.97212","-5","1" +"41824","Isom","KY","37.194426","-82.88714","-5","1" +"41825","Jackhorn","KY","37.215305","-82.70468","-5","1" +"41826","Jeremiah","KY","37.164562","-82.93047","-5","1" +"41828","Kite","KY","37.303276","-82.77851","-5","1" +"41831","Leburn","KY","37.387358","-82.95633","-5","1" +"41832","Letcher","KY","37.148006","-82.95634","-5","1" +"41833","Linefork","KY","37.021403","-82.98159","-5","1" +"41834","Littcarr","KY","37.270358","-82.9403","-5","1" +"41835","McRoberts","KY","37.205961","-82.67347","-5","1" +"41836","Mallie","KY","37.245041","-82.8955","-5","1" +"41837","Mayking","KY","37.135518","-82.74606","-5","1" +"41838","Millstone","KY","37.168682","-82.75036","-5","1" +"41839","Mousie","KY","37.420362","-82.87543","-5","1" +"41840","Neon","KY","37.195448","-82.71232","-5","1" +"41843","Pine Top","KY","37.273854","-82.86011","-5","1" +"41844","Pippa Passes","KY","37.334629","-82.87549","-5","1" +"41845","Premium","KY","37.123583","-82.93216","-5","1" +"41847","Redfox","KY","37.21583","-82.95449","-5","1" +"41848","Roxana","KY","37.110216","-82.94073","-5","1" +"41849","Seco","KY","37.172969","-82.72934","-5","1" +"41855","Thornton","KY","37.156856","-82.76167","-5","1" +"41858","Whitesburg","KY","37.130559","-82.83185","-5","1" +"41859","Dema","KY","37.392257","-82.78204","-5","1" +"41861","Raven","KY","37.386051","-82.83138","-5","1" +"41862","Topmost","KY","37.357624","-82.79564","-5","1" +"42001","Paducah","KY","37.066543","-88.65687","-6","1" +"42002","Paducah","KY","37.085511","-88.71247","-6","1" +"42003","Paducah","KY","37.044233","-88.59046","-6","1" +"42011","Fredonia","KY","37.220735","-88.061294","-6","1" +"42020","Almo","KY","36.697107","-88.29836","-6","1" +"42021","Arlington","KY","36.796741","-88.997","-6","1" +"42022","Bandana","KY","37.149003","-88.94252","-6","1" +"42023","Bardwell","KY","36.881954","-88.98347","-6","1" +"42024","Barlow","KY","37.071352","-89.04326","-6","1" +"42025","Benton","KY","36.854812","-88.33515","-6","1" +"42027","Boaz","KY","36.92516","-88.63778","-6","1" +"42028","Burna","KY","37.24122","-88.33829","-6","1" +"42029","Calvert City","KY","37.013505","-88.37269","-6","1" +"42031","Clinton","KY","36.678217","-88.97559","-6","1" +"42032","Columbus","KY","36.755242","-89.10667","-6","1" +"42033","Crayne","KY","37.336533","-88.079607","-6","1" +"42035","Cunningham","KY","36.911107","-88.84412","-6","1" +"42036","Dexter","KY","36.731901","-88.24594","-6","1" +"42037","Dycusburg","KY","37.157866","-88.183598","-6","1" +"42038","Eddyville","KY","37.051386","-88.03613","-6","1" +"42039","Fancy Farm","KY","36.800353","-88.83224","-6","1" +"42040","Farmington","KY","36.614839","-88.5005","-6","1" +"42041","Fulton","KY","36.532059","-88.89132","-6","1" +"42044","Gilbertsville","KY","36.97877","-88.28273","-6","1" +"42045","Grand Rivers","KY","37.031683","-88.24498","-6","1" +"42046","Hamlin","KY","36.6033","-88.092285","-6","1" +"42047","Hampton","KY","37.2948","-88.41026","-6","1" +"42048","Hardin","KY","36.765893","-88.26527","-6","1" +"42049","Hazel","KY","36.511681","-88.32543","-6","1" +"42050","Hickman","KY","36.558598","-89.19789","-6","1" +"42051","Hickory","KY","36.852344","-88.63769","-6","1" +"42053","Kevil","KY","37.107447","-88.86061","-6","1" +"42054","Kirksey","KY","36.716315","-88.44499","-6","1" +"42055","Kuttawa","KY","37.058356","-88.14097","-6","1" +"42056","La Center","KY","37.08716","-88.97616","-6","1" +"42058","Ledbetter","KY","37.054715","-88.48043","-6","1" +"42060","Lovelaceville","KY","36.968906","-88.82817","-6","1" +"42061","Lowes","KY","36.885527","-88.77469","-6","1" +"42063","Lynnville","KY","36.723872","-88.652009","-6","1" +"42064","Marion","KY","37.331602","-88.06997","-6","1" +"42066","Mayfield","KY","36.733761","-88.63449","-6","1" +"42069","Melber","KY","36.921462","-88.75871","-6","1" +"42070","Milburn","KY","36.863147","-88.995991","-6","1" +"42071","Murray","KY","36.617443","-88.28746","-6","1" +"42076","New Concord","KY","36.540753","-88.06837","-6","1" +"42078","Salem","KY","37.282124","-88.24568","-6","1" +"42079","Sedalia","KY","36.574074","-88.56359","-6","1" +"42081","Smithland","KY","37.217493","-88.40884","-6","1" +"42082","Symsonia","KY","36.922652","-88.5104","-6","1" +"42083","Tiline","KY","37.150978","-88.29191","-6","1" +"42084","Tolu","KY","37.433695","-88.24498","-6","1" +"42085","Water Valley","KY","36.578907","-88.82074","-6","1" +"42086","West Paducah","KY","37.089948","-88.7597","-6","1" +"42087","Wickliffe","KY","36.96575","-89.0324","-6","1" +"42088","Wingo","KY","36.627427","-88.74845","-6","1" +"42101","Bowling Green","KY","37.010643","-86.46145","-6","1" +"42102","Bowling Green","KY","36.922292","-86.387046","-6","1" +"42103","Bowling Green","KY","36.969761","-86.38247","-6","1" +"42104","Bowling Green","KY","36.930527","-86.44751","-6","1" +"42109","Bowling Green","KY","36.961988","-86.450786","-6","1" +"42120","Adolphus","KY","36.661883","-86.25964","-6","1" +"42122","Alvaton","KY","36.86316","-86.35202","-6","1" +"42123","Austin","KY","36.820727","-86.00112","-6","1" +"42124","Beaumont","KY","36.857666","-85.649583","-6","1" +"42127","Cave City","KY","37.131203","-85.94633","-6","1" +"42128","Drake","KY","36.983441","-86.394012","-6","1" +"42129","Edmonton","KY","36.988613","-85.58534","-6","1" +"42130","Eighty Eight","KY","36.91297","-85.775282","-6","1" +"42131","Etoile","KY","36.82928","-85.90806","-6","1" +"42133","Fountain Run","KY","36.721319","-85.96139","-6","1" +"42134","Franklin","KY","36.718074","-86.58202","-6","1" +"42135","Franklin","KY","36.758166","-86.581957","-6","1" +"42140","Gamaliel","KY","36.655006","-85.80866","-6","1" +"42141","Glasgow","KY","36.970776","-85.91232","-6","1" +"42142","Glasgow","KY","36.946326","-85.957797","-6","1" +"42150","Halfway","KY","36.782131","-86.184088","-6","1" +"42151","Hestand","KY","36.63667","-85.55275","-6","1" +"42152","Hiseville","KY","37.098753","-85.816472","-6","1" +"42153","Holland","KY","36.665767","-86.04006","-6","1" +"42154","Knob Lick","KY","37.066581","-85.73482","-6","1" +"42156","Lucas","KY","36.840503","-85.995572","-6","1" +"42157","Mount Hermon","KY","36.778567","-85.81772","-6","1" +"42159","Oakland","KY","37.016847","-86.25187","-6","1" +"42160","Park City","KY","37.0896","-86.06474","-6","1" +"42163","Rocky Hill","KY","37.09425","-86.143188","-6","1" +"42164","Scottsville","KY","36.767969","-86.1813","-6","1" +"42166","Summer Shade","KY","36.86322","-85.71774","-6","1" +"42167","Tompkinsville","KY","36.712179","-85.67567","-6","1" +"42170","Woodburn","KY","36.832502","-86.554","-6","1" +"42171","Smiths Grove","KY","37.046968","-86.17181","-6","1" +"42201","Aberdeen","KY","37.279564","-86.670181","-6","1" +"42202","Adairville","KY","36.681441","-86.85365","-6","1" +"42203","Allegre","KY","36.929243","-87.219328","-6","1" +"42204","Allensville","KY","36.70996","-87.07105","-6","1" +"42206","Auburn","KY","36.881837","-86.71983","-6","1" +"42207","Bee Spring","KY","37.293315","-86.26557","-6","1" +"42209","Brooklyn","KY","37.197491","-86.67216","-6","1" +"42210","Brownsville","KY","37.215448","-86.29013","-6","1" +"42211","Cadiz","KY","36.846471","-87.86409","-6","1" +"42214","Center","KY","37.143908","-85.66945","-6","1" +"42215","Cerulean","KY","36.983293","-87.68273","-6","1" +"42216","Clifty","KY","37.004492","-87.152148","-6","1" +"42217","Crofton","KY","37.04413","-87.48219","-6","1" +"42219","Dunbar","KY","37.170909","-86.767822","-6","1" +"42220","Elkton","KY","36.887716","-87.18526","-6","1" +"42221","Fairview","KY","36.898071","-87.496529","-6","1" +"42223","Fort Campbell","KY","36.654943","-87.46188","-6","1" +"42232","Gracey","KY","36.847924","-87.6579","-6","1" +"42234","Guthrie","KY","36.673268","-87.18089","-6","1" +"42235","Hadley","KY","36.983441","-86.394012","-6","1" +"42236","Herndon","KY","36.705024","-87.59935","-6","1" +"42240","Hopkinsville","KY","36.866845","-87.47617","-6","1" +"42241","Hopkinsville","KY","36.898071","-87.496529","-6","1" +"42251","Huntsville","KY","37.157967","-86.885846","-6","1" +"42252","Jetson","KY","37.248326","-86.509271","-6","1" +"42253","Science Hill","KY","37.17925","-84.633915","-5","1" +"42254","La Fayette","KY","36.657405","-87.65633","-6","1" +"42256","Lewisburg","KY","37.020366","-86.94284","-6","1" +"42257","Lindseyville","KY","37.237211","-86.299361","-6","1" +"42259","Mammoth Cave","KY","37.274689","-86.19818","-6","1" +"42261","Morgantown","KY","37.219254","-86.67988","-6","1" +"42262","Oak Grove","KY","36.664334","-87.42789","-6","1" +"42265","Olmstead","KY","36.752802","-87.02003","-6","1" +"42266","Pembroke","KY","36.780906","-87.34305","-6","1" +"42267","Provo","KY","37.229645","-86.804803","-6","1" +"42270","Richardsville","KY","36.983441","-86.394012","-6","1" +"42273","Rochester","KY","37.196636","-86.87625","-6","1" +"42274","Rockfield","KY","36.931416","-86.62507","-6","1" +"42275","Roundhill","KY","37.223167","-86.44062","-6","1" +"42276","Russellville","KY","36.860612","-86.88171","-6","1" +"42280","Sharon Grove","KY","36.953559","-87.09887","-6","1" +"42283","South Union","KY","36.869206","-86.663225","-6","1" +"42285","Sweeden","KY","37.273726","-86.27499","-6","1" +"42286","Trenton","KY","36.727378","-87.26971","-6","1" +"42287","Welchs Creek","KY","37.311676","-86.52913","-6","1" +"42288","Woodbury","KY","37.197491","-86.67216","-6","1" +"42301","Owensboro","KY","37.753347","-87.17419","-6","1" +"42302","Owensboro","KY","37.745491","-87.112823","-6","1" +"42303","Owensboro","KY","37.758568","-87.08714","-6","1" +"42304","Owensboro","KY","37.745491","-87.112823","-6","1" +"42320","Beaver Dam","KY","37.377266","-86.88364","-6","1" +"42321","Beech Creek","KY","37.177839","-87.05761","-6","1" +"42322","Beech Grove","KY","37.615062","-87.406866","-6","1" +"42323","Beechmont","KY","37.172261","-87.03677","-6","1" +"42324","Belton","KY","37.150125","-87.00657","-6","1" +"42325","Bremen","KY","37.333802","-87.26807","-6","1" +"42326","Browder","KY","37.198074","-87.01403","-6","1" +"42327","Calhoun","KY","37.575772","-87.29499","-6","1" +"42328","Centertown","KY","37.410099","-87.03433","-6","1" +"42330","Central City","KY","37.299591","-87.12992","-6","1" +"42332","Cleaton","KY","37.251296","-87.09071","-6","1" +"42333","Cromwell","KY","37.349023","-86.76565","-6","1" +"42334","Curdsville","KY","37.745491","-87.112823","-6","1" +"42337","Drakesboro","KY","37.227223","-87.01349","-6","1" +"42338","Dundee","KY","37.559872","-86.77254","-6","1" +"42339","Dunmor","KY","37.094139","-86.9746","-6","1" +"42343","Fordsville","KY","37.655016","-86.69303","-6","1" +"42344","Graham","KY","37.240117","-87.29396","-6","1" +"42345","Greenville","KY","37.166299","-87.18333","-6","1" +"42347","Hartford","KY","37.471839","-86.9063","-6","1" +"42348","Hawesville","KY","37.882498","-86.76297","-6","1" +"42349","Horse Branch","KY","37.433703","-86.66952","-6","1" +"42350","Island","KY","37.456942","-87.17107","-6","1" +"42351","Lewisport","KY","37.918157","-86.89243","-6","1" +"42352","Livermore","KY","37.502836","-87.11162","-6","1" +"42354","McHenry","KY","37.3799","-86.9258","-6","1" +"42355","Maceo","KY","37.86975","-86.99535","-6","1" +"42356","Maple Mount","KY","37.693229","-87.323841","-6","1" +"42361","Olaton","KY","37.517388","-86.6846","-6","1" +"42364","Pellville","KY","37.827235","-86.804814","-6","1" +"42365","Penrod","KY","37.114594","-87.00175","-6","1" +"42366","Philpot","KY","37.729714","-86.92838","-6","1" +"42367","Powderly","KY","37.242948","-87.154898","-6","1" +"42368","Reynolds Station","KY","37.710929","-86.75487","-6","1" +"42369","Rockport","KY","37.337926","-86.99685","-6","1" +"42370","Rosine","KY","37.448681","-86.74121","-6","1" +"42371","Rumsey","KY","37.508047","-87.29293","-6","1" +"42372","Sacramento","KY","37.41277","-87.28063","-6","1" +"42374","South Carrollton","KY","37.33976","-87.14514","-6","1" +"42375","Stanley","KY","37.745491","-87.112823","-6","1" +"42376","Utica","KY","37.598406","-87.09113","-6","1" +"42377","West Louisville","KY","37.745491","-87.112823","-6","1" +"42378","Whitesville","KY","37.666515","-86.86454","-6","1" +"42400","Morganfield","KY","37.784577","-87.72406","-6","1" +"42402","Baskett","KY","37.778911","-87.60124","-6","1" +"42403","Blackford","KY","37.448198","-87.93391","-6","1" +"42404","Clay","KY","37.481719","-87.8394","-6","1" +"42406","Corydon","KY","37.743264","-87.73173","-6","1" +"42408","Dawson Springs","KY","37.183465","-87.68413","-6","1" +"42409","Dixon","KY","37.52165","-87.69701","-6","1" +"42410","Earlington","KY","37.275896","-87.51498","-6","1" +"42411","Fredonia","KY","37.216778","-88.01438","-6","1" +"42413","Hanson","KY","37.425687","-87.495","-6","1" +"42419","Henderson","KY","37.807173","-87.599052","-6","1" +"42420","Henderson","KY","37.825094","-87.56055","-6","1" +"42431","Madisonville","KY","37.330791","-87.50378","-6","1" +"42436","Manitou","KY","37.458645","-87.54828","-6","1" +"42437","Morganfield","KY","37.67416","-87.90199","-6","1" +"42440","Mortons Gap","KY","37.238785","-87.46986","-6","1" +"42441","Nebo","KY","37.36327","-87.65307","-6","1" +"42442","Nortonville","KY","37.178627","-87.46702","-6","1" +"42444","Poole","KY","37.641689","-87.63786","-6","1" +"42445","Princeton","KY","37.12596","-87.87429","-6","1" +"42450","Providence","KY","37.396445","-87.76428","-6","1" +"42451","Reed","KY","37.859415","-87.37005","-6","1" +"42452","Robards","KY","37.674669","-87.54291","-6","1" +"42453","Saint Charles","KY","37.143686","-87.59662","-6","1" +"42455","Sebree","KY","37.600857","-87.52635","-6","1" +"42456","Slaughters","KY","37.514424","-87.49975","-6","1" +"42457","Smith Mills","KY","37.801347","-87.76586","-6","1" +"42458","Spottsville","KY","37.860142","-87.41866","-6","1" +"42459","Sturgis","KY","37.558719","-87.99632","-6","1" +"42460","Sullivan","KY","37.493997","-87.932773","-6","1" +"42461","Uniontown","KY","37.771573","-87.91614","-6","1" +"42462","Waverly","KY","37.729871","-87.81891","-6","1" +"42463","Wheatcroft","KY","37.488169","-87.8631","-6","1" +"42464","White Plains","KY","37.168568","-87.37879","-6","1" +"42501","Somerset","KY","37.075624","-84.54437","-5","1" +"42502","Somerset","KY","37.09325","-84.427729","-5","1" +"42503","Somerset","KY","37.112274","-84.588","-5","1" +"42516","Bethelridge","KY","37.191504","-84.79832","-5","1" +"42518","Bronston","KY","36.94593","-84.63278","-5","1" +"42519","Burnside","KY","36.965123","-84.55458","-5","1" +"42528","Dunnville","KY","37.180186","-85.02396","-5","1" +"42533","Ferguson","KY","37.067452","-84.60301","-5","1" +"42539","Liberty","KY","37.305705","-84.94589","-5","1" +"42541","Middleburg","KY","37.3677","-84.80732","-5","1" +"42544","Nancy","KY","37.029286","-84.81365","-5","1" +"42553","Science Hill","KY","37.177577","-84.65481","-5","1" +"42558","Tateville","KY","36.94919","-84.581482","-5","1" +"42564","West Somerset","KY","37.111433","-84.592898","-5","1" +"42565","Windsor","KY","37.144759","-84.89524","-5","1" +"42566","Yosemite","KY","37.303038","-84.77674","-5","1" +"42567","Eubank","KY","37.250746","-84.61781","-5","1" +"42602","Albany","KY","36.72024","-85.13539","-6","1" +"42603","Alpha","KY","36.7703","-85.01043","-6","1" +"42629","Jamestown","KY","36.946642","-85.09981","-6","1" +"42631","Marshes Siding","KY","36.762748","-84.51036","-5","1" +"42632","Mill Springs","KY","36.932769","-84.7757","-5","1" +"42633","Monticello","KY","36.801922","-84.82841","-5","1" +"42634","Parkers Lake","KY","36.881682","-84.42143","-5","1" +"42635","Pine Knot","KY","36.663153","-84.41611","-5","1" +"42637","Monticello","KY","36.843563","-84.841004","-5","1" +"42638","Revelo","KY","36.673236","-84.47095","-5","1" +"42642","Russell Springs","KY","37.05401","-85.06142","-6","1" +"42647","Stearns","KY","36.710692","-84.55416","-5","1" +"42649","Strunk","KY","36.631706","-84.42183","-5","1" +"42653","Whitley City","KY","36.772507","-84.47785","-5","1" +"42701","Elizabethtown","KY","37.704287","-85.86403","-5","1" +"42702","Elizabethtown","KY","37.723474","-85.976854","-5","1" +"42711","Bakerton","KY","36.898169","-85.31056","-6","1" +"42712","Big Clifty","KY","37.581023","-86.15642","-5","1" +"42713","Bonnieville","KY","37.381189","-85.88175","-6","1" +"42715","Breeding","KY","36.954911","-85.39553","-6","1" +"42716","Buffalo","KY","37.47534","-85.60987","-5","1" +"42717","Burkesville","KY","36.765985","-85.39971","-6","1" +"42718","Campbellsville","KY","37.372314","-85.3549","-5","1" +"42719","Campbellsville","KY","37.337936","-85.330374","-5","1" +"42720","Cane Valley","KY","37.121145","-85.370926","-6","1" +"42721","Caneyville","KY","37.413211","-86.49884","-6","1" +"42722","Canmer","KY","37.271372","-85.72639","-6","1" +"42724","Cecilia","KY","37.668721","-86.02527","-5","1" +"42726","Clarkson","KY","37.429456","-86.16448","-6","1" +"42728","Columbia","KY","37.123196","-85.27561","-6","1" +"42729","Cub Run","KY","37.304661","-86.12987","-6","1" +"42731","Dubre","KY","36.8395","-85.55526","-6","1" +"42732","Eastview","KY","37.606543","-86.10413","-5","1" +"42733","Elk Horn","KY","37.353227","-85.1628","-5","1" +"42735","Fairplay","KY","37.045089","-85.29683","-6","1" +"42740","Glendale","KY","37.59641","-85.92294","-5","1" +"42741","Glens Fork","KY","36.98182","-85.22988","-6","1" +"42742","Gradyville","KY","37.098391","-85.50199","-6","1" +"42743","Greensburg","KY","37.234802","-85.51436","-6","1" +"42746","Hardyville","KY","37.199656","-85.73469","-6","1" +"42748","Hodgenville","KY","37.566527","-85.71452","-5","1" +"42749","Horse Cave","KY","37.176738","-85.88288","-6","1" +"42753","Knifley","KY","37.242258","-85.20271","-6","1" +"42754","Leitchfield","KY","37.479797","-86.30731","-6","1" +"42755","Leitchfield","KY","37.471943","-86.343941","-6","1" +"42757","Magnolia","KY","37.415382","-85.71597","-6","1" +"42758","Mannsville","KY","37.360392","-85.198031","-5","1" +"42759","Marrowbone","KY","36.824961","-85.50481","-6","1" +"42761","Milltown","KY","37.113189","-85.44177","-6","1" +"42762","Millwood","KY","37.443289","-86.40531","-6","1" +"42764","Mount Sherman","KY","37.463961","-85.639231","-5","1" +"42765","Munfordville","KY","37.291869","-85.90786","-6","1" +"42776","Sonora","KY","37.52025","-85.8807","-5","1" +"42782","Summersville","KY","37.349798","-85.64536","-6","1" +"42783","Summit","KY","37.567134","-86.085259","-5","1" +"42784","Upton","KY","37.456599","-85.90164","-5","1" +"42786","Waterview","KY","36.819839","-85.462435","-6","1" +"42788","White Mills","KY","37.55125","-86.03115","-5","1" +"43001","Alexandria","OH","40.091576","-82.61225","-5","1" +"43002","Amlin","OH","40.05991","-83.18299","-5","1" +"43003","Ashley","OH","40.40994","-82.96124","-5","1" +"43004","Blacklick","OH","39.998073","-82.8052","-5","1" +"43005","Bladensburg","OH","40.285043","-82.28218","-5","1" +"43006","Brinkhaven","OH","40.471139","-82.16947","-5","1" +"43007","Broadway","OH","40.340633","-83.416306","-5","1" +"43008","Buckeye Lake","OH","39.93398","-82.47932","-5","1" +"43009","Cable","OH","40.175413","-83.64579","-5","1" +"43010","Catawba","OH","40.000364","-83.62142","-5","1" +"43011","Centerburg","OH","40.304121","-82.68029","-5","1" +"43013","Croton","OH","40.235446","-82.69054","-5","1" +"43014","Danville","OH","40.470806","-82.26422","-5","1" +"43015","Delaware","OH","40.295925","-83.06968","-5","1" +"43016","Dublin","OH","40.089811","-83.13983","-5","1" +"43017","Dublin","OH","40.109478","-83.12713","-5","1" +"43018","Etna","OH","39.956994","-82.68307","-5","1" +"43019","Fredericktown","OH","40.493191","-82.56998","-5","1" +"43021","Galena","OH","40.202298","-82.89437","-5","1" +"43022","Gambier","OH","40.351781","-82.35543","-5","1" +"43023","Granville","OH","40.070985","-82.52134","-5","1" +"43025","Hebron","OH","39.958869","-82.49882","-5","1" +"43026","Hilliard","OH","40.021665","-83.14762","-5","1" +"43027","Homer","OH","40.132821","-82.561556","-5","1" +"43028","Howard","OH","40.42065","-82.31485","-5","1" +"43029","Irwin","OH","40.108356","-83.44868","-5","1" +"43030","Jacksontown","OH","39.968846","-82.430017","-5","1" +"43031","Johnstown","OH","40.151979","-82.66944","-5","1" +"43032","Kilbourne","OH","40.328773","-82.95824","-5","1" +"43033","Kirkersville","OH","39.960661","-82.59613","-5","1" +"43035","Lewis Center","OH","40.173636","-82.99675","-5","1" +"43036","Magnetic Springs","OH","40.353133","-83.26289","-5","1" +"43037","Martinsburg","OH","40.27453","-82.34436","-5","1" +"43040","Marysville","OH","40.255973","-83.36391","-5","1" +"43041","Marysville","OH","40.306924","-83.360645","-5","1" +"43044","Mechanicsburg","OH","40.052907","-83.57223","-5","1" +"43045","Milford Center","OH","40.179696","-83.44266","-5","1" +"43046","Millersport","OH","39.900063","-82.53696","-5","1" +"43047","Mingo","OH","40.204914","-83.646581","-5","1" +"43048","Mount Liberty","OH","40.406113","-82.465777","-5","1" +"43050","Mount Vernon","OH","40.385636","-82.48254","-5","1" +"43054","New Albany","OH","40.080252","-82.82462","-5","1" +"43055","Newark","OH","40.079115","-82.40054","-5","1" +"43056","Heath","OH","40.017096","-82.34322","-5","1" +"43058","Newark","OH","40.095148","-82.482659","-5","1" +"43060","North Lewisburg","OH","40.223286","-83.56172","-5","1" +"43061","Ostrander","OH","40.285343","-83.20426","-5","1" +"43062","Pataskala","OH","39.994001","-82.67652","-5","1" +"43064","Plain City","OH","40.103133","-83.26825","-5","1" +"43065","Powell","OH","40.155515","-83.08415","-5","1" +"43066","Radnor","OH","40.400799","-83.15216","-5","1" +"43067","Raymond","OH","40.355958","-83.46681","-5","1" +"43068","Reynoldsburg","OH","39.956384","-82.7961","-5","1" +"43070","Rosewood","OH","40.217799","-83.96044","-5","1" +"43071","Saint Louisville","OH","40.173402","-82.36653","-5","1" +"43072","Saint Paris","OH","40.123455","-83.95416","-5","1" +"43073","Summit Station","OH","39.996516","-82.754034","-5","1" +"43074","Sunbury","OH","40.270926","-82.84501","-5","1" +"43076","Thornville","OH","39.909915","-82.41013","-5","1" +"43077","Unionville Center","OH","40.136336","-83.3415","-5","1" +"43078","Urbana","OH","40.112531","-83.76633","-5","1" +"43080","Utica","OH","40.242377","-82.42775","-5","1" +"43081","Westerville","OH","40.109513","-82.91606","-5","1" +"43082","Westerville","OH","40.14852","-82.91278","-5","1" +"43083","Westville","OH","40.102185","-83.83786","-5","1" +"43084","Woodstock","OH","40.145952","-83.52488","-5","1" +"43085","Columbus","OH","40.097796","-83.02076","-5","1" +"43086","Westerville","OH","39.969036","-83.011389","-5","1" +"43093","Newark","OH","40.095148","-82.482659","-5","1" +"43098","Hebron","OH","40.095148","-82.482659","-5","1" +"43101","Adelphi","OH","39.466041","-82.7457","-5","1" +"43102","Amanda","OH","39.651028","-82.76098","-5","1" +"43103","Ashville","OH","39.720751","-82.94842","-5","1" +"43105","Baltimore","OH","39.860353","-82.61356","-5","1" +"43106","Bloomingburg","OH","39.624916","-83.40267","-5","1" +"43107","Bremen","OH","39.703126","-82.41937","-5","1" +"43109","Brice","OH","39.916574","-82.83218","-5","1" +"43110","Canal Winchester","OH","39.854413","-82.80872","-5","1" +"43111","Carbon Hill","OH","39.501342","-82.24434","-5","1" +"43112","Carroll","OH","39.803993","-82.70953","-5","1" +"43113","Circleville","OH","39.598236","-82.94285","-5","1" +"43115","Clarksburg","OH","39.501913","-83.17383","-5","1" +"43116","Commercial Point","OH","39.768502","-83.06007","-5","1" +"43117","Derby","OH","39.773025","-83.199472","-5","1" +"43119","Galloway","OH","39.939871","-83.1667","-5","1" +"43123","Grove City","OH","39.88628","-83.07989","-5","1" +"43125","Groveport","OH","39.852363","-82.89589","-5","1" +"43126","Harrisburg","OH","39.810093","-83.17085","-5","1" +"43127","Haydenville","OH","39.482096","-82.32798","-5","1" +"43128","Jeffersonville","OH","39.651917","-83.57236","-5","1" +"43130","Lancaster","OH","39.712887","-82.61216","-5","1" +"43135","Laurelville","OH","39.473379","-82.71076","-5","1" +"43136","Lithopolis","OH","39.802655","-82.80802","-5","1" +"43137","Lockbourne","OH","39.818249","-82.98115","-5","1" +"43138","Logan","OH","39.530972","-82.40801","-5","1" +"43140","London","OH","39.892676","-83.43643","-5","1" +"43142","Milledgeville","OH","39.593121","-83.5876","-5","1" +"43143","Mount Sterling","OH","39.710455","-83.28776","-5","1" +"43144","Murray City","OH","39.513028","-82.1665","-5","1" +"43145","New Holland","OH","39.555409","-83.26409","-5","1" +"43146","Orient","OH","39.786202","-83.1469","-5","1" +"43147","Pickerington","OH","39.904288","-82.756","-5","1" +"43148","Pleasantville","OH","39.816577","-82.50791","-5","1" +"43149","Rockbridge","OH","39.545786","-82.57704","-5","1" +"43150","Rushville","OH","39.778306","-82.41455","-5","1" +"43151","Sedalia","OH","39.732474","-83.47587","-5","1" +"43152","South Bloomingville","OH","39.387214","-82.62314","-5","1" +"43153","South Solon","OH","39.721965","-83.58093","-5","1" +"43154","Stoutsville","OH","39.605605","-82.82656","-5","1" +"43155","Sugar Grove","OH","39.630003","-82.51459","-5","1" +"43156","Tarlton","OH","39.554697","-82.77917","-5","1" +"43157","Thurston","OH","39.843864","-82.54555","-5","1" +"43158","Union Furnace","OH","39.460218","-82.3572","-5","1" +"43160","Washington Court House","OH","39.533002","-83.43905","-5","1" +"43162","West Jefferson","OH","39.939528","-83.28912","-5","1" +"43163","West Rushville","OH","39.7631","-82.447024","-5","1" +"43164","Williamsport","OH","39.590417","-83.11298","-5","1" +"43187","Pickerington","OH","39.882017","-82.739875","-5","1" +"43199","Groveport","OH","39.969036","-83.011389","-5","1" +"43201","Columbus","OH","39.990764","-83.00117","-5","1" +"43202","Columbus","OH","40.018814","-83.00894","-5","1" +"43203","Columbus","OH","39.9718","-82.9688","-5","1" +"43204","Columbus","OH","39.958496","-83.08231","-5","1" +"43205","Columbus","OH","39.957265","-82.96587","-5","1" +"43206","Columbus","OH","39.944564","-82.98085","-5","1" +"43207","Columbus","OH","39.897695","-82.96969","-5","1" +"43209","Columbus","OH","39.958564","-82.92824","-5","1" +"43210","Columbus","OH","40.003681","-83.02148","-5","1" +"43211","Columbus","OH","40.012714","-82.97127","-5","1" +"43212","Columbus","OH","39.988114","-83.04268","-5","1" +"43213","Columbus","OH","39.966814","-82.87413","-5","1" +"43214","Columbus","OH","40.053063","-83.01881","-5","1" +"43215","Columbus","OH","39.965131","-83.00431","-5","1" +"43216","Columbus","OH","39.969036","-83.011389","-5","1" +"43217","Columbus","OH","39.824831","-82.94384","-5","1" +"43218","Columbus","OH","39.969036","-83.011389","-5","1" +"43219","Columbus","OH","40.002514","-82.92589","-5","1" +"43220","Columbus","OH","40.047273","-83.06986","-5","1" +"43221","Columbus","OH","40.02063","-83.07655","-5","1" +"43222","Columbus","OH","39.958664","-83.02856","-5","1" +"43223","Columbus","OH","39.935263","-83.04558","-5","1" +"43224","Columbus","OH","40.039914","-82.96772","-5","1" +"43226","Columbus","OH","39.969036","-83.011389","-5","1" +"43227","Columbus","OH","39.944231","-82.89063","-5","1" +"43228","Columbus","OH","39.954363","-83.123","-5","1" +"43229","Columbus","OH","40.085313","-82.97326","-5","1" +"43230","Columbus","OH","40.039963","-82.87855","-5","1" +"43231","Columbus","OH","40.076042","-82.94064","-5","1" +"43232","Columbus","OH","39.924213","-82.86563","-5","1" +"43234","Columbus","OH","39.969036","-83.011389","-5","1" +"43235","Columbus","OH","40.099204","-83.05567","-5","1" +"43236","Columbus","OH","40.135711","-83.007626","-5","1" +"43240","Columbus","OH","40.146873","-82.98178","-5","1" +"43251","Columbus","OH","39.969036","-83.011389","-5","1" +"43260","Columbus","OH","39.969036","-83.011389","-5","1" +"43265","Columbus","OH","39.969036","-83.011389","-5","1" +"43266","Columbus","OH","39.969036","-83.011389","-5","1" +"43268","Columbus","OH","39.969036","-83.011389","-5","1" +"43270","Columbus","OH","39.969036","-83.011389","-5","1" +"43271","Columbus","OH","39.969036","-83.011389","-5","1" +"43272","Columbus","OH","39.969036","-83.011389","-5","1" +"43279","Columbus","OH","39.969036","-83.011389","-5","1" +"43284","Columbus","OH","39.969036","-83.011389","-5","1" +"43287","Columbus","OH","39.969036","-83.011389","-5","1" +"43291","Columbus","OH","39.969036","-83.011389","-5","1" +"43299","Columbus","OH","39.969036","-83.011389","-5","1" +"43301","Marion","OH","40.616604","-83.069296","-5","1" +"43302","Marion","OH","40.589747","-83.12173","-5","1" +"43306","Marion","OH","40.56941","-83.139341","-5","1" +"43307","Marion","OH","40.56941","-83.139341","-5","1" +"43310","Belle Center","OH","40.518081","-83.78052","-5","1" +"43311","Bellefontaine","OH","40.365923","-83.75816","-5","1" +"43314","Caledonia","OH","40.642604","-82.96158","-5","1" +"43315","Cardington","OH","40.490756","-82.87312","-5","1" +"43316","Carey","OH","40.954293","-83.38068","-5","1" +"43317","Chesterville","OH","40.479649","-82.68356","-5","1" +"43318","De Graff","OH","40.314099","-83.91041","-5","1" +"43319","East Liberty","OH","40.307923","-83.56924","-5","1" +"43320","Edison","OH","40.583666","-82.88443","-5","1" +"43321","Fulton","OH","40.46242","-82.82831","-5","1" +"43322","Green Camp","OH","40.531614","-83.20937","-5","1" +"43323","Harpster","OH","40.730593","-83.24454","-5","1" +"43324","Huntsville","OH","40.460862","-83.83774","-5","1" +"43325","Iberia","OH","40.60796","-82.872954","-5","1" +"43326","Kenton","OH","40.642266","-83.60577","-5","1" +"43330","Kirby","OH","40.813023","-83.419606","-5","1" +"43331","Lakeview","OH","40.507868","-83.90705","-5","1" +"43332","La Rue","OH","40.585905","-83.3828","-5","1" +"43333","Lewistown","OH","40.436172","-83.92528","-5","1" +"43334","Marengo","OH","40.399648","-82.80783","-5","1" +"43335","Martel","OH","40.668497","-82.909984","-5","1" +"43336","Middleburg","OH","40.293691","-83.5827","-5","1" +"43337","Morral","OH","40.687548","-83.22944","-5","1" +"43338","Mount Gilead","OH","40.555366","-82.77273","-5","1" +"43340","Mount Victory","OH","40.547039","-83.49204","-5","1" +"43341","New Bloomington","OH","40.587559","-83.31254","-5","1" +"43342","Prospect","OH","40.470755","-83.18305","-5","1" +"43343","Quincy","OH","40.308916","-83.97325","-5","1" +"43344","Richwood","OH","40.430758","-83.32103","-5","1" +"43345","Ridgeway","OH","40.513261","-83.57736","-5","1" +"43346","Roundhead","OH","40.573227","-83.846199","-5","1" +"43347","Rushsylvania","OH","40.470605","-83.66538","-5","1" +"43348","Russells Point","OH","40.469231","-83.88554","-5","1" +"43349","Shauck","OH","40.614239","-82.661938","-5","1" +"43350","Sparta","OH","40.394773","-82.69952","-5","1" +"43351","Upper Sandusky","OH","40.82732","-83.29921","-5","1" +"43355","Ridgeville","OH","41.438281","-84.254241","-5","1" +"43356","Waldo","OH","40.461613","-83.05047","-5","1" +"43357","West Liberty","OH","40.254824","-83.751","-5","1" +"43358","West Mansfield","OH","40.413252","-83.53853","-5","1" +"43359","Wharton","OH","40.863848","-83.45714","-5","1" +"43360","Zanesfield","OH","40.327984","-83.66884","-5","1" +"43381","Stokes","OH","40.498069","-83.921517","-5","1" +"43400","Danbury","OH","41.532003","-82.797419","-5","1" +"43402","Bowling Green","OH","41.388519","-83.65795","-5","1" +"43403","Bowling Green","OH","41.39235","-83.648996","-5","1" +"43406","Bradner","OH","41.328037","-83.43802","-5","1" +"43407","Burgoon","OH","41.277969","-83.24578","-5","1" +"43408","Clay Center","OH","41.565049","-83.363","-5","1" +"43410","Clyde","OH","41.304387","-82.96925","-5","1" +"43412","Curtice","OH","41.63678","-83.30724","-5","1" +"43413","Cygnet","OH","41.240054","-83.64985","-5","1" +"43414","Dunbridge","OH","41.39235","-83.648996","-5","1" +"43416","Elmore","OH","41.477061","-83.28361","-5","1" +"43420","Fremont","OH","41.35307","-83.11217","-5","1" +"43430","Genoa","OH","41.523309","-83.37072","-5","1" +"43431","Gibsonburg","OH","41.390878","-83.32313","-5","1" +"43432","Graytown","OH","41.553383","-83.25597","-5","1" +"43433","Gypsum","OH","41.503759","-82.87084","-5","1" +"43434","Harbor View","OH","41.645699","-83.620233","-5","1" +"43435","Helena","OH","41.333956","-83.30333","-5","1" +"43436","Isle Saint George","OH","41.715332","-82.822697","-5","1" +"43437","Jerry City","OH","41.252306","-83.60464","-5","1" +"43438","Kelleys Island","OH","41.601343","-82.69744","-5","1" +"43439","Lacarne","OH","41.51751","-83.04293","-5","1" +"43440","Lakeside Marblehead","OH","41.533186","-82.75881","-5","1" +"43441","Lemoyne","OH","41.536132","-83.45938","-5","1" +"43442","Lindsey","OH","41.425328","-83.2253","-5","1" +"43443","Luckey","OH","41.455078","-83.47735","-5","1" +"43445","Martin","OH","41.596682","-83.28985","-5","1" +"43446","Middle Bass","OH","41.683477","-82.804677","-5","1" +"43447","Millbury","OH","41.5678","-83.433","-5","1" +"43449","Oak Harbor","OH","41.53446","-83.13569","-5","1" +"43450","Pemberville","OH","41.4031","-83.47664","-5","1" +"43451","Portage","OH","41.318285","-83.62835","-5","1" +"43452","Port Clinton","OH","41.512855","-82.92948","-5","1" +"43456","Put In Bay","OH","41.671574","-82.81278","-5","1" +"43457","Risingsun","OH","41.269279","-83.43171","-5","1" +"43458","Rocky Ridge","OH","41.532215","-83.21026","-5","1" +"43460","Rossford","OH","41.603797","-83.5619","-5","1" +"43462","Rudolph","OH","41.28447","-83.69515","-5","1" +"43463","Stony Ridge","OH","41.509051","-83.508531","-5","1" +"43464","Vickery","OH","41.404156","-82.92509","-5","1" +"43465","Walbridge","OH","41.57725","-83.49795","-5","1" +"43466","Wayne","OH","41.28953","-83.50215","-5","1" +"43467","West Millgrove","OH","41.245763","-83.48948","-5","1" +"43468","Williston","OH","41.602898","-83.33988","-5","1" +"43469","Woodville","OH","41.455129","-83.36565","-5","1" +"43501","Alvordton","OH","41.673094","-84.44711","-5","1" +"43502","Archbold","OH","41.529231","-84.30866","-5","1" +"43504","Berkey","OH","41.697701","-83.83446","-5","1" +"43505","Blakeslee","OH","41.523945","-84.730275","-5","1" +"43506","Bryan","OH","41.471569","-84.55459","-5","1" +"43510","Colton","OH","41.419878","-84.013674","-5","1" +"43511","Custar","OH","41.26256","-83.82917","-5","1" +"43512","Defiance","OH","41.29037","-84.36539","-5","1" +"43515","Delta","OH","41.585627","-84.00778","-5","1" +"43516","Deshler","OH","41.211032","-83.89827","-5","1" +"43517","Edgerton","OH","41.441679","-84.73356","-5","1" +"43518","Edon","OH","41.572443","-84.75333","-5","1" +"43519","Evansport","OH","41.422158","-84.396619","-5","1" +"43520","Farmer","OH","41.39066","-84.631322","-5","1" +"43521","Fayette","OH","41.66143","-84.29732","-5","1" +"43522","Grand Rapids","OH","41.427352","-83.84944","-5","1" +"43523","Grelton","OH","41.341081","-84.000532","-5","1" +"43524","Hamler","OH","41.229001","-84.03567","-5","1" +"43525","Haskins","OH","41.466185","-83.70725","-5","1" +"43526","Hicksville","OH","41.30569","-84.74496","-5","1" +"43527","Holgate","OH","41.253169","-84.14754","-5","1" +"43528","Holland","OH","41.626651","-83.73047","-5","1" +"43529","Hoytville","OH","41.190401","-83.78249","-5","1" +"43530","Jewell","OH","41.325764","-84.279306","-5","1" +"43531","Kunkle","OH","41.635979","-84.49453","-5","1" +"43532","Liberty Center","OH","41.450082","-83.97563","-5","1" +"43533","Lyons","OH","41.696808","-84.07558","-5","1" +"43534","McClure","OH","41.368743","-83.93422","-5","1" +"43535","Malinta","OH","41.315943","-84.03021","-5","1" +"43536","Mark Center","OH","41.299247","-84.63748","-5","1" +"43537","Maumee","OH","41.576992","-83.672","-5","1" +"43538","Monclova","OH","41.597362","-83.806053","-5","1" +"43540","Metamora","OH","41.702622","-83.93725","-5","1" +"43541","Milton Center","OH","41.301347","-83.82923","-5","1" +"43542","Monclova","OH","41.577428","-83.76396","-5","1" +"43543","Montpelier","OH","41.609365","-84.62292","-5","1" +"43545","Napoleon","OH","41.388278","-84.12511","-5","1" +"43547","Neapolis","OH","41.491702","-83.87108","-5","1" +"43548","New Bavaria","OH","41.190188","-84.17549","-5","1" +"43549","Ney","OH","41.380047","-84.51313","-5","1" +"43550","Okolona","OH","41.326664","-84.111701","-5","1" +"43551","Perrysburg","OH","41.540724","-83.58904","-5","1" +"43552","Perrysburg","OH","41.39235","-83.648996","-5","1" +"43553","Pettisville","OH","41.531159","-84.22716","-5","1" +"43554","Pioneer","OH","41.65973","-84.56225","-5","1" +"43555","Ridgeville Corners","OH","41.437905","-84.255","-5","1" +"43556","Sherwood","OH","41.298409","-84.55885","-5","1" +"43557","Stryker","OH","41.491112","-84.40709","-5","1" +"43558","Swanton","OH","41.585948","-83.87384","-5","1" +"43560","Sylvania","OH","41.706383","-83.7102","-5","1" +"43565","Tontogany","OH","41.419152","-83.74024","-5","1" +"43566","Waterville","OH","41.501902","-83.73685","-5","1" +"43567","Wauseon","OH","41.5615","-84.15574","-5","1" +"43569","Weston","OH","41.349205","-83.78953","-5","1" +"43570","West Unity","OH","41.586794","-84.43574","-5","1" +"43571","Whitehouse","OH","41.517402","-83.81063","-5","1" +"43579","Tiffin","OH","41.425554","-84.395196","-5","1" +"43601","Toledo","OH","41.720684","-83.569359","-5","1" +"43602","Toledo","OH","41.646649","-83.54935","-5","1" +"43603","Toledo","OH","41.686778","-83.43943","-5","1" +"43604","Toledo","OH","41.658109","-83.52774","-5","1" +"43605","Toledo","OH","41.642549","-83.5104","-5","1" +"43606","Toledo","OH","41.671761","-83.6064","-5","1" +"43607","Toledo","OH","41.65","-83.59783","-5","1" +"43608","Toledo","OH","41.678248","-83.53257","-5","1" +"43609","Toledo","OH","41.63105","-83.57313","-5","1" +"43610","Toledo","OH","41.676299","-83.55996","-5","1" +"43611","Toledo","OH","41.703379","-83.49003","-5","1" +"43612","Toledo","OH","41.706048","-83.5577","-5","1" +"43613","Toledo","OH","41.703899","-83.605","-5","1" +"43614","Toledo","OH","41.60135","-83.62611","-5","1" +"43615","Toledo","OH","41.6522","-83.67037","-5","1" +"43616","Oregon","OH","41.646398","-83.46933","-5","1" +"43617","Toledo","OH","41.667361","-83.71609","-5","1" +"43618","Oregon","OH","41.676897","-83.39972","-5","1" +"43619","Northwood","OH","41.607416","-83.48322","-5","1" +"43620","Toledo","OH","41.665849","-83.55218","-5","1" +"43623","Toledo","OH","41.707649","-83.64363","-5","1" +"43624","Toledo","OH","41.657099","-83.54525","-5","1" +"43628","Howard","OH","40.44652","-82.329486","-5","1" +"43635","Toledo","OH","41.686778","-83.43943","-5","1" +"43652","Toledo","OH","41.686778","-83.43943","-5","1" +"43653","Toledo","OH","41.686778","-83.43943","-5","1" +"43654","Toledo","OH","41.686778","-83.43943","-5","1" +"43655","Toledo","OH","41.686778","-83.43943","-5","1" +"43656","Toledo","OH","41.678167","-83.497155","-5","1" +"43657","Toledo","OH","41.686778","-83.43943","-5","1" +"43659","Toledo","OH","41.686778","-83.43943","-5","1" +"43660","Toledo","OH","41.654649","-83.532883","-5","1" +"43661","Toledo","OH","41.678167","-83.497155","-5","1" +"43666","Toledo","OH","41.678167","-83.497155","-5","1" +"43667","Toledo","OH","41.686778","-83.43943","-5","1" +"43681","Toledo","OH","41.686778","-83.43943","-5","1" +"43682","Toledo","OH","41.686778","-83.43943","-5","1" +"43697","Toledo","OH","41.686778","-83.43943","-5","1" +"43699","Toledo","OH","41.653788","-83.658937","-5","1" +"43701","Zanesville","OH","39.949377","-82.00492","-5","1" +"43702","Zanesville","OH","39.961236","-81.962539","-5","1" +"43704","Columbus","OH","39.991729","-83.082262","-5","1" +"43708","Wayne","OH","39.922656","-81.433818","-5","1" +"43711","Ava","OH","39.827556","-81.554854","-5","1" +"43713","Barnesville","OH","39.989191","-81.17197","-5","1" +"43716","Beallsville","OH","39.841646","-81.02104","-5","1" +"43717","Belle Valley","OH","39.789241","-81.55483","-5","1" +"43718","Belmont","OH","40.028171","-81.00679","-5","1" +"43719","Bethesda","OH","40.009383","-81.0763","-5","1" +"43720","Blue Rock","OH","39.806956","-81.88179","-5","1" +"43721","Brownsville","OH","39.946713","-82.25642","-5","1" +"43722","Buffalo","OH","39.917012","-81.51947","-5","1" +"43723","Byesville","OH","39.968985","-81.54108","-5","1" +"43724","Caldwell","OH","39.741629","-81.52512","-5","1" +"43725","Cambridge","OH","40.025859","-81.59243","-5","1" +"43727","Chandlersville","OH","39.873402","-81.81724","-5","1" +"43728","Chesterhill","OH","39.484626","-81.89613","-5","1" +"43730","Corning","OH","39.617263","-82.09325","-5","1" +"43731","Crooksville","OH","39.742354","-82.09349","-5","1" +"43732","Cumberland","OH","39.85261","-81.64922","-5","1" +"43733","Derwent","OH","39.923616","-81.542965","-5","1" +"43734","Duncan Falls","OH","39.876997","-81.90909","-5","1" +"43735","East Fultonham","OH","39.851515","-82.12173","-5","1" +"43736","Fairview","OH","40.064971","-81.255793","-5","1" +"43738","Fultonham","OH","39.855355","-82.14178","-5","1" +"43739","Glenford","OH","39.905157","-82.28507","-5","1" +"43740","Gratiot","OH","39.950857","-82.21842","-5","1" +"43741","Wayne","OH","39.884291","-81.106797","-5","1" +"43746","Hopewell","OH","39.966135","-82.18376","-5","1" +"43747","Jerusalem","OH","39.862128","-81.11139","-5","1" +"43748","Junction City","OH","39.710863","-82.30228","-5","1" +"43749","Kimbolton","OH","40.157301","-81.55736","-5","1" +"43750","Kipling","OH","39.994467","-81.500579","-5","1" +"43752","Laings","OH","39.717086","-81.009999","-5","1" +"43754","Lewisville","OH","39.76607","-81.24357","-5","1" +"43755","Lore City","OH","40.041068","-81.44635","-5","1" +"43756","McConnelsville","OH","39.675911","-81.79548","-5","1" +"43757","Malaga","OH","39.859373","-81.151604","-5","1" +"43758","Malta","OH","39.621481","-81.91737","-5","1" +"43759","Morristown","OH","40.011338","-80.970135","-5","1" +"43760","Mount Perry","OH","39.888751","-82.19224","-5","1" +"43761","Moxahala","OH","39.740299","-82.248369","-5","1" +"43762","New Concord","OH","40.018953","-81.73657","-5","1" +"43764","New Lexington","OH","39.717824","-82.19823","-5","1" +"43766","New Straitsville","OH","39.588854","-82.25279","-5","1" +"43767","Norwich","OH","39.990948","-81.80629","-5","1" +"43768","Old Washington","OH","40.038503","-81.44232","-5","1" +"43771","Philo","OH","39.842048","-81.93264","-5","1" +"43772","Pleasant City","OH","39.895548","-81.53483","-5","1" +"43773","Quaker City","OH","39.991056","-81.28517","-5","1" +"43777","Roseville","OH","39.814025","-82.07808","-5","1" +"43778","Salesville","OH","39.995987","-81.36641","-5","1" +"43779","Sarahsville","OH","39.803205","-81.43368","-5","1" +"43780","Senecaville","OH","39.930047","-81.44256","-5","1" +"43782","Shawnee","OH","39.608984","-82.22225","-5","1" +"43783","Somerset","OH","39.801679","-82.29166","-5","1" +"43786","Stafford","OH","39.711168","-81.275824","-5","1" +"43787","Stockport","OH","39.536415","-81.80009","-5","1" +"43788","Summerfield","OH","39.799978","-81.33548","-5","1" +"43789","Sycamore Valley","OH","39.654386","-81.240732","-5","1" +"43791","White Cottage","OH","39.855474","-82.11492","-5","1" +"43793","Woodsfield","OH","39.742066","-81.09908","-5","1" +"43799","Center","OH","39.816891","-81.485315","-5","1" +"43802","Adamsville","OH","40.090643","-81.86556","-5","1" +"43803","Bakersville","OH","40.357237","-81.643638","-5","1" +"43804","Baltic","OH","40.449531","-81.72309","-5","1" +"43805","Blissfield","OH","40.398274","-81.968787","-5","1" +"43811","Conesville","OH","40.180136","-81.90422","-5","1" +"43812","Coshocton","OH","40.270198","-81.86761","-5","1" +"43821","Dresden","OH","40.130754","-82.01637","-5","1" +"43822","Frazeysburg","OH","40.161484","-82.16324","-5","1" +"43824","Fresno","OH","40.357857","-81.75288","-5","1" +"43828","Keene","OH","40.351271","-81.873607","-5","1" +"43830","Nashport","OH","40.063886","-82.15977","-5","1" +"43832","Newcomerstown","OH","40.277376","-81.59662","-5","1" +"43836","Plainfield","OH","40.200382","-81.720675","-5","1" +"43837","Port Washington","OH","40.314481","-81.49751","-5","1" +"43840","Stone Creek","OH","40.406106","-81.58374","-5","1" +"43842","Trinway","OH","40.140472","-82.01079","-5","1" +"43843","Walhonding","OH","40.3479","-82.17789","-5","1" +"43844","Warsaw","OH","40.33503","-82.04314","-5","1" +"43845","West Lafayette","OH","40.268019","-81.74213","-5","1" +"43901","Adena","OH","40.223285","-80.87017","-5","1" +"43902","Alledonia","OH","39.890564","-80.9766","-5","1" +"43903","Amsterdam","OH","40.469171","-80.93363","-5","1" +"43905","Barton","OH","40.105279","-80.84292","-5","1" +"43906","Bellaire","OH","40.01558","-80.76343","-5","1" +"43907","Cadiz","OH","40.258447","-81.00415","-5","1" +"43908","Bergholz","OH","40.518045","-80.88733","-5","1" +"43909","Blaine","OH","40.067767","-80.81836","-5","1" +"43910","Bloomingdale","OH","40.361891","-80.81953","-5","1" +"43912","Bridgeport","OH","40.074284","-80.77447","-5","1" +"43913","Brilliant","OH","40.26212","-80.6356","-5","1" +"43914","Cameron","OH","39.768134","-80.94455","-5","1" +"43915","Clarington","OH","39.759825","-80.88695","-5","1" +"43916","Colerain","OH","40.122351","-80.814948","-5","1" +"43917","Dillonvale","OH","40.212067","-80.78094","-5","1" +"43920","East Liverpool","OH","40.641545","-80.57469","-5","1" +"43924","Noble","OH","39.764709","-81.537215","-5","1" +"43925","East Springfield","OH","40.450257","-80.86015","-5","1" +"43926","Empire","OH","40.510729","-80.62344","-5","1" +"43927","Fairpoint","OH","40.11761","-80.93763","-5","1" +"43928","Glencoe","OH","40.008421","-80.88913","-5","1" +"43930","Hammondsville","OH","40.566375","-80.76929","-5","1" +"43931","Hannibal","OH","39.676317","-80.891369","-5","1" +"43932","Irondale","OH","40.561512","-80.71859","-5","1" +"43933","Jacobsburg","OH","39.938218","-80.89033","-5","1" +"43934","Lansing","OH","40.076176","-80.78926","-5","1" +"43935","Martins Ferry","OH","40.103877","-80.73327","-5","1" +"43937","Maynard","OH","40.130167","-80.877264","-5","1" +"43938","Mingo Junction","OH","40.318569","-80.64172","-5","1" +"43939","Mount Pleasant","OH","40.176109","-80.79979","-5","1" +"43940","Neffs","OH","40.027491","-80.81606","-5","1" +"43941","Piney Fork","OH","40.263948","-80.835767","-5","1" +"43942","Powhatan Point","OH","39.861984","-80.82023","-5","1" +"43943","Rayland","OH","40.211142","-80.72596","-5","1" +"43944","Richmond","OH","40.43273","-80.76692","-5","1" +"43945","Salineville","OH","40.624307","-80.83872","-5","1" +"43946","Sardis","OH","39.646462","-80.96151","-5","1" +"43947","Shadyside","OH","39.964553","-80.76013","-5","1" +"43948","Smithfield","OH","40.269741","-80.78137","-5","1" +"43950","Saint Clairsville","OH","40.086725","-80.90826","-5","1" +"43951","Lafferty","OH","40.109149","-81.01773","-5","1" +"43952","Steubenville","OH","40.371185","-80.63426","-5","1" +"43953","Steubenville","OH","40.369467","-80.70251","-5","1" +"43960","Richland","OH","40.012984","-80.859104","-5","1" +"43961","Stratton","OH","40.523054","-80.6294","-5","1" +"43962","Summitville","OH","40.679857","-80.88595","-5","1" +"43963","Tiltonsville","OH","40.170721","-80.69768","-5","1" +"43964","Toronto","OH","40.465183","-80.62364","-5","1" +"43966","Unionport","OH","40.360979","-80.839519","-5","1" +"43967","Warnock","OH","40.022806","-80.94093","-5","1" +"43968","Wellsville","OH","40.621521","-80.66843","-5","1" +"43970","Wolf Run","OH","40.46947","-80.889206","-5","1" +"43971","Yorkville","OH","40.152615","-80.70789","-5","1" +"43972","Bannock","OH","40.099277","-80.97601","-5","1" +"43973","Freeport","OH","40.189812","-81.27506","-5","1" +"43974","Harrisville","OH","40.18182","-80.88695","-5","1" +"43976","Hopedale","OH","40.352364","-80.90465","-5","1" +"43977","Flushing","OH","40.147388","-81.11291","-5","1" +"43981","New Athens","OH","40.184401","-80.99519","-5","1" +"43983","Piedmont","OH","40.147075","-81.20232","-5","1" +"43984","New Rumley","OH","40.29649","-81.102502","-5","1" +"43985","Holloway","OH","40.011338","-80.970135","-5","1" +"43986","Jewett","OH","40.374942","-80.99193","-5","1" +"43988","Scio","OH","40.405788","-81.10432","-5","1" +"43989","Short Creek","OH","40.29649","-81.102502","-5","1" +"44001","Amherst","OH","41.386533","-82.23419","-5","1" +"44003","Andover","OH","41.611348","-80.5622","-5","1" +"44004","Ashtabula","OH","41.871212","-80.79178","-5","1" +"44005","Ashtabula","OH","41.730146","-80.955313","-5","1" +"44010","Austinburg","OH","41.758952","-80.86289","-5","1" +"44011","Avon","OH","41.450538","-82.02167","-5","1" +"44012","Avon Lake","OH","41.501595","-82.0063","-5","1" +"44017","Berea","OH","41.36995","-81.86259","-5","1" +"44021","Burton","OH","41.442863","-81.14404","-5","1" +"44022","Chagrin Falls","OH","41.43932","-81.39232","-5","1" +"44023","Chagrin Falls","OH","41.392171","-81.32748","-5","1" +"44024","Chardon","OH","41.574171","-81.19473","-5","1" +"44026","Chesterland","OH","41.526301","-81.33683","-5","1" +"44028","Columbia Station","OH","41.316001","-81.93433","-5","1" +"44030","Conneaut","OH","41.934916","-80.57923","-5","1" +"44032","Dorset","OH","41.676362","-80.6686","-5","1" +"44033","East Claridon","OH","41.53335","-81.111175","-5","1" +"44035","Elyria","OH","41.369846","-82.10874","-5","1" +"44036","Elyria","OH","41.401494","-82.077068","-5","1" +"44039","North Ridgeville","OH","41.389546","-82.0046","-5","1" +"44040","Gates Mills","OH","41.532584","-81.41052","-5","1" +"44041","Geneva","OH","41.802618","-80.94645","-5","1" +"44044","Grafton","OH","41.275919","-82.05315","-5","1" +"44045","Grand River","OH","41.742693","-81.282125","-5","1" +"44046","Huntsburg","OH","41.541756","-81.08063","-5","1" +"44047","Jefferson","OH","41.728451","-80.74507","-5","1" +"44048","Kingsville","OH","41.866806","-80.64962","-5","1" +"44049","Kipton","OH","41.267051","-82.3047","-5","1" +"44050","Lagrange","OH","41.259352","-82.13542","-5","1" +"44052","Lorain","OH","41.459218","-82.1691","-5","1" +"44053","Lorain","OH","41.431875","-82.20658","-5","1" +"44054","Sheffield Lake","OH","41.48054","-82.09914","-5","1" +"44055","Lorain","OH","41.435642","-82.13689","-5","1" +"44056","Macedonia","OH","41.321189","-81.50135","-5","1" +"44057","Madison","OH","41.80063","-81.06021","-5","1" +"44060","Mentor","OH","41.688162","-81.33378","-5","1" +"44061","Mentor","OH","41.910676","-81.249027","-5","1" +"44062","Middlefield","OH","41.462346","-81.03666","-5","1" +"44064","Montville","OH","41.61391","-81.05515","-5","1" +"44065","Newbury","OH","41.469908","-81.24579","-5","1" +"44067","Northfield","OH","41.319704","-81.54119","-5","1" +"44068","North Kingsville","OH","41.904594","-80.685034","-5","1" +"44070","North Olmsted","OH","41.415097","-81.91436","-5","1" +"44072","Novelty","OH","41.478469","-81.33635","-5","1" +"44073","Novelty","OH","41.837043","-80.955545","-5","1" +"44074","Oberlin","OH","41.2863","-82.21935","-5","1" +"44076","Orwell","OH","41.535437","-80.83514","-5","1" +"44077","Painesville","OH","41.716094","-81.2396","-5","1" +"44080","Parkman","OH","41.372452","-81.06617","-5","1" +"44081","Perry","OH","41.767394","-81.14287","-5","1" +"44082","Pierpont","OH","41.759503","-80.56995","-5","1" +"44084","Rock Creek","OH","41.659739","-80.86635","-5","1" +"44085","Rome","OH","41.6128","-80.83579","-5","1" +"44086","Thompson","OH","41.674336","-81.05753","-5","1" +"44087","Twinsburg","OH","41.314655","-81.44441","-5","1" +"44088","Unionville","OH","41.783323","-81.003385","-5","1" +"44089","Vermilion","OH","41.407845","-82.3648","-5","1" +"44090","Wellington","OH","41.147116","-82.24031","-5","1" +"44092","Wickliffe","OH","41.603581","-81.47087","-5","1" +"44093","Williamsfield","OH","41.52563","-80.58076","-5","1" +"44094","Willoughby","OH","41.625886","-81.39929","-5","1" +"44095","Eastlake","OH","41.653796","-81.44614","-5","1" +"44096","Willoughby","OH","41.910676","-81.249027","-5","1" +"44097","Eastlake","OH","41.910676","-81.249027","-5","1" +"44099","Windsor","OH","41.539985","-80.96688","-5","1" +"44101","Cleveland","OH","41.523401","-81.599648","-5","1" +"44102","Cleveland","OH","41.473451","-81.7358","-5","1" +"44103","Cleveland","OH","41.513801","-81.64287","-5","1" +"44104","Cleveland","OH","41.484001","-81.62702","-5","1" +"44105","Cleveland","OH","41.450602","-81.62216","-5","1" +"44106","Cleveland","OH","41.507751","-81.60883","-5","1" +"44107","Lakewood","OH","41.480881","-81.80036","-5","1" +"44108","Cleveland","OH","41.53715","-81.60905","-5","1" +"44109","Cleveland","OH","41.448951","-81.70342","-5","1" +"44110","Cleveland","OH","41.562781","-81.57273","-5","1" +"44111","Cleveland","OH","41.459399","-81.78174","-5","1" +"44112","Cleveland","OH","41.534101","-81.57558","-5","1" +"44113","Cleveland","OH","41.484688","-81.70125","-5","1" +"44114","Cleveland","OH","41.50988","-81.6753","-5","1" +"44115","Cleveland","OH","41.493501","-81.67125","-5","1" +"44116","Rocky River","OH","41.475297","-81.84575","-5","1" +"44117","Euclid","OH","41.570344","-81.52726","-5","1" +"44118","Cleveland","OH","41.499202","-81.55434","-5","1" +"44119","Cleveland","OH","41.586749","-81.54584","-5","1" +"44120","Cleveland","OH","41.472352","-81.58211","-5","1" +"44121","Cleveland","OH","41.526151","-81.53309","-5","1" +"44122","Beachwood","OH","41.472881","-81.52209","-5","1" +"44123","Euclid","OH","41.602498","-81.52357","-5","1" +"44124","Cleveland","OH","41.513752","-81.47281","-5","1" +"44125","Cleveland","OH","41.414403","-81.60793","-5","1" +"44126","Cleveland","OH","41.441697","-81.85738","-5","1" +"44127","Cleveland","OH","41.469951","-81.65009","-5","1" +"44128","Cleveland","OH","41.441153","-81.55179","-5","1" +"44129","Cleveland","OH","41.397701","-81.73575","-5","1" +"44130","Cleveland","OH","41.378051","-81.77945","-5","1" +"44131","Independence","OH","41.391753","-81.65816","-5","1" +"44132","Euclid","OH","41.608298","-81.50041","-5","1" +"44133","North Royalton","OH","41.313758","-81.74204","-5","1" +"44134","Cleveland","OH","41.393852","-81.70507","-5","1" +"44135","Cleveland","OH","41.432149","-81.80467","-5","1" +"44136","Strongsville","OH","41.312752","-81.83197","-5","1" +"44137","Maple Heights","OH","41.412653","-81.56067","-5","1" +"44138","Olmsted Falls","OH","41.373949","-81.91507","-5","1" +"44139","Solon","OH","41.388387","-81.44365","-5","1" +"44140","Bay Village","OH","41.484193","-81.92658","-5","1" +"44141","Brecksville","OH","41.307688","-81.61835","-5","1" +"44142","Brookpark","OH","41.40035","-81.82055","-5","1" +"44143","Cleveland","OH","41.550318","-81.48175","-5","1" +"44144","Cleveland","OH","41.437018","-81.73488","-5","1" +"44145","Westlake","OH","41.454439","-81.92865","-5","1" +"44146","Bedford","OH","41.389371","-81.52709","-5","1" +"44147","Broadview Heights","OH","41.321827","-81.67659","-5","1" +"44149","Brunswick","OH","41.316784","-81.854005","-5","1" +"44168","Dalton","OH","40.80066","-81.699683","-5","1" +"44177","Cleveland","OH","41.685744","-81.672797","-5","1" +"44178","Cleveland","OH","41.685744","-81.672797","-5","1" +"44179","Cleveland","OH","41.685744","-81.672797","-5","1" +"44181","Cleveland","OH","41.685744","-81.672797","-5","1" +"44184","Cleveland","OH","41.685744","-81.672797","-5","1" +"44185","Cleveland","OH","41.685744","-81.672797","-5","1" +"44186","Cleveland","OH","41.685744","-81.672797","-5","1" +"44188","Cleveland","OH","41.685744","-81.672797","-5","1" +"44189","Cleveland","OH","41.685744","-81.672797","-5","1" +"44190","Cleveland","OH","41.685744","-81.672797","-5","1" +"44191","Cleveland","OH","41.685744","-81.672797","-5","1" +"44192","Cleveland","OH","41.685744","-81.672797","-5","1" +"44193","Cleveland","OH","41.685744","-81.672797","-5","1" +"44194","Cleveland","OH","41.685744","-81.672797","-5","1" +"44195","Cleveland","OH","41.685744","-81.672797","-5","1" +"44197","Cleveland","OH","41.685744","-81.672797","-5","1" +"44198","Cleveland","OH","41.685744","-81.672797","-5","1" +"44199","Cleveland","OH","41.685744","-81.672797","-5","1" +"44201","Atwater","OH","41.020057","-81.20037","-5","1" +"44202","Aurora","OH","41.320612","-81.36352","-5","1" +"44203","Barberton","OH","41.017522","-81.61616","-5","1" +"44210","Bath","OH","41.128705","-81.53999","-5","1" +"44211","Brady Lake","OH","41.169816","-81.312416","-5","1" +"44212","Brunswick","OH","41.244051","-81.82836","-5","1" +"44214","Burbank","OH","40.965423","-82.00032","-5","1" +"44215","Chippewa Lake","OH","41.069151","-81.90358","-5","1" +"44216","Clinton","OH","40.936655","-81.5981","-5","1" +"44217","Creston","OH","40.976892","-81.90624","-5","1" +"44221","Cuyahoga Falls","OH","41.141456","-81.47928","-5","1" +"44222","Cuyahoga Falls","OH","41.128705","-81.53999","-5","1" +"44223","Cuyahoga Falls","OH","41.1486","-81.51241","-5","1" +"44224","Stow","OH","41.174256","-81.43744","-5","1" +"44230","Doylestown","OH","40.964111","-81.68961","-5","1" +"44231","Garrettsville","OH","41.295898","-81.08057","-5","1" +"44232","Green","OH","40.932506","-81.461987","-5","1" +"44233","Hinckley","OH","41.233479","-81.73475","-5","1" +"44234","Hiram","OH","41.337187","-81.16699","-5","1" +"44235","Homerville","OH","41.028815","-82.11496","-5","1" +"44236","Hudson","OH","41.248795","-81.44679","-5","1" +"44237","Hudson","OH","41.128705","-81.53999","-5","1" +"44238","Hudson","OH","41.128705","-81.53999","-5","1" +"44240","Kent","OH","41.148756","-81.35302","-5","1" +"44241","Streetsboro","OH","41.249405","-81.34404","-5","1" +"44242","Kent","OH","41.170006","-81.196615","-5","1" +"44243","Kent","OH","41.146862","-81.3388","-5","1" +"44250","Lakemore","OH","41.020256","-81.4359","-5","1" +"44251","Westfield Center","OH","41.029639","-81.93146","-5","1" +"44253","Litchfield","OH","41.161459","-82.03333","-5","1" +"44254","Lodi","OH","41.039394","-82.0137","-5","1" +"44255","Mantua","OH","41.286755","-81.22911","-5","1" +"44256","Medina","OH","41.139849","-81.85646","-5","1" +"44258","Medina","OH","41.127594","-81.841079","-5","1" +"44260","Mogadore","OH","41.043123","-81.36518","-5","1" +"44262","Munroe Falls","OH","41.138806","-81.43787","-5","1" +"44264","Peninsula","OH","41.234388","-81.55114","-5","1" +"44265","Randolph","OH","41.010907","-81.297727","-5","1" +"44266","Ravenna","OH","41.159224","-81.23143","-5","1" +"44270","Rittman","OH","40.971727","-81.77938","-5","1" +"44272","Rootstown","OH","41.09464","-81.19784","-5","1" +"44273","Seville","OH","41.022387","-81.8775","-5","1" +"44274","Sharon Center","OH","41.09924","-81.734329","-5","1" +"44275","Spencer","OH","41.101909","-82.10234","-5","1" +"44276","Sterling","OH","40.951253","-81.82651","-5","1" +"44278","Tallmadge","OH","41.093156","-81.42692","-5","1" +"44280","Valley City","OH","41.230745","-81.92477","-5","1" +"44281","Wadsworth","OH","41.037664","-81.73368","-5","1" +"44282","Wadsworth","OH","41.132725","-81.929185","-5","1" +"44285","Wayland","OH","41.159706","-81.070017","-5","1" +"44286","Richfield","OH","41.233722","-81.63222","-5","1" +"44287","West Salem","OH","40.957955","-82.12114","-5","1" +"44288","Windham","OH","41.242864","-81.07101","-5","1" +"44301","Akron","OH","41.043955","-81.51919","-5","1" +"44302","Akron","OH","41.089405","-81.53973","-5","1" +"44303","Akron","OH","41.103205","-81.53625","-5","1" +"44304","Akron","OH","41.081788","-81.50745","-5","1" +"44305","Akron","OH","41.073606","-81.46278","-5","1" +"44306","Akron","OH","41.046055","-81.49039","-5","1" +"44307","Akron","OH","41.069605","-81.54591","-5","1" +"44308","Akron","OH","41.081755","-81.51813","-5","1" +"44309","Akron","OH","41.096205","-81.512338","-5","1" +"44310","Akron","OH","41.107655","-81.50091","-5","1" +"44311","Akron","OH","41.063055","-81.51906","-5","1" +"44312","Akron","OH","41.034156","-81.43944","-5","1" +"44313","Akron","OH","41.123588","-81.57129","-5","1" +"44314","Akron","OH","41.040155","-81.55914","-5","1" +"44315","Akron","OH","41.027977","-81.463238","-5","1" +"44316","Akron","OH","41.067506","-81.484686","-5","1" +"44317","Akron","OH","41.052455","-81.529139","-5","1" +"44319","Akron","OH","40.990922","-81.52953","-5","1" +"44320","Akron","OH","41.083155","-81.57022","-5","1" +"44321","Akron","OH","41.102587","-81.65092","-5","1" +"44322","Akron","OH","41.043496","-81.58536","-5","1" +"44325","Akron","OH","41.076425","-81.51026","-5","1" +"44326","Akron","OH","41.172713","-81.472701","-5","1" +"44328","Akron","OH","41.075955","-81.520588","-5","1" +"44331","Paint","OH","40.683695","-81.674717","-5","1" +"44333","Akron","OH","41.144661","-81.61948","-5","1" +"44334","Akron","OH","41.128705","-81.53999","-5","1" +"44372","Akron","OH","41.128705","-81.53999","-5","1" +"44393","Akron","OH","41.128705","-81.53999","-5","1" +"44396","Akron","OH","41.128705","-81.53999","-5","1" +"44397","Akron","OH","41.071603","-81.525556","-5","1" +"44398","Akron","OH","41.128705","-81.53999","-5","1" +"44399","Akron","OH","41.128705","-81.53999","-5","1" +"44401","Berlin Center","OH","41.031141","-80.95058","-5","1" +"44402","Bristolville","OH","41.385826","-80.87487","-5","1" +"44403","Brookfield","OH","41.239987","-80.58346","-5","1" +"44404","Burghill","OH","41.340211","-80.536","-5","1" +"44405","Campbell","OH","41.078058","-80.59243","-5","1" +"44406","Canfield","OH","41.029666","-80.76396","-5","1" +"44408","Columbiana","OH","40.884299","-80.68652","-5","1" +"44410","Cortland","OH","41.333312","-80.7264","-5","1" +"44411","Deerfield","OH","41.024608","-81.05025","-5","1" +"44412","Diamond","OH","41.099351","-81.00605","-5","1" +"44413","East Palestine","OH","40.838456","-80.54601","-5","1" +"44415","Elkton","OH","40.76304","-80.704245","-5","1" +"44416","Ellsworth","OH","41.017082","-80.802854","-5","1" +"44417","Farmdale","OH","41.428487","-80.65551","-5","1" +"44418","Fowler","OH","41.304391","-80.60358","-5","1" +"44420","Girard","OH","41.160758","-80.693","-5","1" +"44422","Greenford","OH","41.017082","-80.802854","-5","1" +"44423","Hanoverton","OH","40.75105","-80.91009","-5","1" +"44424","Hartford","OH","41.309096","-80.584681","-5","1" +"44425","Hubbard","OH","41.166743","-80.57733","-5","1" +"44427","Kensington","OH","40.723803","-80.94874","-5","1" +"44428","Kinsman","OH","41.443358","-80.58862","-5","1" +"44429","Lake Milton","OH","41.100329","-80.9853","-5","1" +"44430","Leavittsburg","OH","41.24168","-80.88588","-5","1" +"44431","Leetonia","OH","40.864494","-80.75848","-5","1" +"44432","Lisbon","OH","40.757793","-80.7642","-5","1" +"44436","Lowellville","OH","41.046606","-80.54145","-5","1" +"44437","McDonald","OH","41.159574","-80.73083","-5","1" +"44438","Masury","OH","41.22832","-80.53175","-5","1" +"44439","Mesopotamia","OH","41.459359","-80.942716","-5","1" +"44440","Mineral Ridge","OH","41.146334","-80.77271","-5","1" +"44441","Negley","OH","40.776151","-80.54967","-5","1" +"44442","New Middletown","OH","40.966908","-80.55862","-5","1" +"44443","New Springfield","OH","40.917556","-80.60039","-5","1" +"44444","Newton Falls","OH","41.188981","-80.96964","-5","1" +"44445","New Waterford","OH","40.842848","-80.61956","-5","1" +"44446","Niles","OH","41.186257","-80.75297","-5","1" +"44449","North Benton","OH","40.992991","-81.02595","-5","1" +"44450","North Bloomfield","OH","41.449052","-80.81921","-5","1" +"44451","North Jackson","OH","41.090089","-80.86736","-5","1" +"44452","North Lima","OH","40.951859","-80.6549","-5","1" +"44453","Orangeville","OH","41.32519","-80.533572","-5","1" +"44454","Petersburg","OH","40.910669","-80.53069","-5","1" +"44455","Rogers","OH","40.787331","-80.61034","-5","1" +"44460","Salem","OH","40.898658","-80.86094","-5","1" +"44470","Southington","OH","41.294453","-80.9552","-5","1" +"44471","Struthers","OH","41.051255","-80.59512","-5","1" +"44473","Vienna","OH","41.236248","-80.66265","-5","1" +"44481","Warren","OH","41.205342","-80.85756","-5","1" +"44482","Warren","OH","41.317424","-80.761269","-5","1" +"44483","Warren","OH","41.252748","-80.80773","-5","1" +"44484","Warren","OH","41.226957","-80.76475","-5","1" +"44485","Warren","OH","41.237856","-80.84356","-5","1" +"44486","Warren","OH","41.317424","-80.761269","-5","1" +"44487","Warren","OH","41.317424","-80.761269","-5","1" +"44488","Warren","OH","41.317424","-80.761269","-5","1" +"44490","Washingtonville","OH","40.899731","-80.76333","-5","1" +"44491","West Farmington","OH","41.369527","-80.96327","-5","1" +"44492","West Point","OH","40.709282","-80.70141","-5","1" +"44493","Winona","OH","40.828584","-80.896714","-5","1" +"44501","Youngstown","OH","41.017082","-80.802854","-5","1" +"44502","Youngstown","OH","41.086279","-80.64563","-5","1" +"44503","Youngstown","OH","41.100296","-80.64962","-5","1" +"44504","Youngstown","OH","41.123757","-80.65481","-5","1" +"44505","Youngstown","OH","41.122524","-80.62043","-5","1" +"44506","Youngstown","OH","41.095658","-80.62652","-5","1" +"44507","Youngstown","OH","41.074508","-80.65562","-5","1" +"44509","Youngstown","OH","41.106249","-80.69471","-5","1" +"44510","Youngstown","OH","41.120507","-80.66811","-5","1" +"44511","Youngstown","OH","41.069158","-80.69134","-5","1" +"44512","Youngstown","OH","41.032675","-80.66467","-5","1" +"44513","Youngstown","OH","41.017082","-80.802854","-5","1" +"44514","Youngstown","OH","41.016159","-80.61549","-5","1" +"44515","Youngstown","OH","41.099008","-80.74545","-5","1" +"44555","Youngstown","OH","41.103858","-80.643646","-5","1" +"44598","Youngstown","OH","41.017082","-80.802854","-5","1" +"44599","Youngstown","OH","41.017082","-80.802854","-5","1" +"44601","Alliance","OH","40.917908","-81.11641","-5","1" +"44606","Apple Creek","OH","40.739199","-81.80457","-5","1" +"44607","Augusta","OH","40.686028","-81.02187","-5","1" +"44608","Beach City","OH","40.65151","-81.58475","-5","1" +"44609","Beloit","OH","40.898618","-80.99304","-5","1" +"44610","Berlin","OH","40.561587","-81.7981","-5","1" +"44611","Big Prairie","OH","40.635332","-82.08743","-5","1" +"44612","Bolivar","OH","40.643724","-81.45442","-5","1" +"44613","Brewster","OH","40.712109","-81.59859","-5","1" +"44614","Canal Fulton","OH","40.886688","-81.58327","-5","1" +"44615","Carrollton","OH","40.568568","-81.08187","-5","1" +"44617","Charm","OH","40.507088","-81.782872","-5","1" +"44618","Dalton","OH","40.787827","-81.68623","-5","1" +"44619","Damascus","OH","40.901738","-80.95723","-5","1" +"44620","Dellroy","OH","40.571372","-81.21163","-5","1" +"44621","Dennison","OH","40.410604","-81.31633","-5","1" +"44622","Dover","OH","40.537509","-81.48791","-5","1" +"44624","Dundee","OH","40.600062","-81.65174","-5","1" +"44625","East Rochester","OH","40.758473","-81.00795","-5","1" +"44626","East Sparta","OH","40.695377","-81.38102","-5","1" +"44627","Fredericksburg","OH","40.671036","-81.84927","-5","1" +"44628","Glenmont","OH","40.527648","-82.14312","-5","1" +"44629","Gnadenhutten","OH","40.359172","-81.4351","-5","1" +"44630","Greentown","OH","40.929507","-81.400134","-5","1" +"44631","Harlem Springs","OH","40.521924","-81.003619","-5","1" +"44632","Hartville","OH","40.96289","-81.32814","-5","1" +"44633","Holmesville","OH","40.630191","-81.93057","-5","1" +"44634","Homeworth","OH","40.832092","-81.0573","-5","1" +"44636","Kidron","OH","40.738387","-81.742811","-5","1" +"44637","Killbuck","OH","40.485312","-82.01209","-5","1" +"44638","Lakeville","OH","40.657511","-82.13584","-5","1" +"44639","Leesville","OH","40.547688","-81.243498","-5","1" +"44640","Limaville","OH","40.983308","-81.14682","-5","1" +"44641","Louisville","OH","40.843685","-81.26298","-5","1" +"44643","Magnolia","OH","40.646529","-81.30882","-5","1" +"44644","Malvern","OH","40.68357","-81.17453","-5","1" +"44645","Marshallville","OH","40.909535","-81.71764","-5","1" +"44646","Massillon","OH","40.805131","-81.50101","-5","1" +"44647","Massillon","OH","40.793924","-81.55252","-5","1" +"44648","Massillon","OH","40.811809","-81.368284","-5","1" +"44650","Maximo","OH","40.874558","-81.173873","-5","1" +"44651","Mechanicstown","OH","40.623637","-80.96214","-5","1" +"44652","Middlebranch","OH","40.895057","-81.326195","-5","1" +"44653","Midvale","OH","40.433496","-81.3731","-5","1" +"44654","Millersburg","OH","40.542339","-81.87856","-5","1" +"44656","Mineral City","OH","40.569177","-81.3359","-5","1" +"44657","Minerva","OH","40.733459","-81.09148","-5","1" +"44659","Mount Eaton","OH","40.694887","-81.70227","-5","1" +"44660","Mount Hope","OH","40.622284","-81.782532","-5","1" +"44661","Nashville","OH","40.596018","-82.11317","-5","1" +"44662","Navarre","OH","40.722891","-81.54071","-5","1" +"44663","New Philadelphia","OH","40.477187","-81.44439","-5","1" +"44665","North Georgetown","OH","40.843563","-80.979435","-5","1" +"44666","North Lawrence","OH","40.840256","-81.62724","-5","1" +"44667","Orrville","OH","40.835059","-81.77006","-5","1" +"44669","Paris","OH","40.798758","-81.16037","-5","1" +"44670","Robertsville","OH","40.76291","-81.19054","-5","1" +"44671","Sandyville","OH","40.641188","-81.36885","-5","1" +"44672","Sebring","OH","40.922608","-81.02632","-5","1" +"44675","Sherrodsville","OH","40.506928","-81.24133","-5","1" +"44676","Shreve","OH","40.687973","-82.02563","-5","1" +"44677","Smithville","OH","40.865194","-81.85967","-5","1" +"44678","Somerdale","OH","40.565209","-81.35014","-5","1" +"44679","Stillwater","OH","40.440407","-81.488516","-5","1" +"44680","Strasburg","OH","40.59712","-81.53098","-5","1" +"44681","Sugarcreek","OH","40.503332","-81.64879","-5","1" +"44682","Tuscarawas","OH","40.397916","-81.40527","-5","1" +"44683","Uhrichsville","OH","40.373604","-81.34146","-5","1" +"44684","Walnut Creek","OH","40.561693","-81.677906","-5","1" +"44685","Uniontown","OH","40.961206","-81.42516","-5","1" +"44687","Walnut Creek","OH","40.551575","-81.728416","-5","1" +"44688","Waynesburg","OH","40.67926","-81.26003","-5","1" +"44689","Wilmot","OH","40.655909","-81.63929","-5","1" +"44690","Winesburg","OH","40.616646","-81.6953","-5","1" +"44691","Wooster","OH","40.800086","-81.95726","-5","1" +"44692","Tuscarawas","OH","40.398664","-81.40088","-5","1" +"44693","Deersville","OH","40.308212","-81.18752","-5","1" +"44695","Bowerston","OH","40.433246","-81.18764","-5","1" +"44697","Zoar","OH","40.612253","-81.42168","-5","1" +"44699","Tippecanoe","OH","40.283493","-81.28215","-5","1" +"44701","Canton","OH","40.782408","-81.371185","-5","1" +"44702","Canton","OH","40.798859","-81.37499","-5","1" +"44703","Canton","OH","40.809108","-81.3809","-5","1" +"44704","Canton","OH","40.799358","-81.3564","-5","1" +"44705","Canton","OH","40.821858","-81.34253","-5","1" +"44706","Canton","OH","40.776858","-81.40593","-5","1" +"44707","Canton","OH","40.784158","-81.36566","-5","1" +"44708","Canton","OH","40.810931","-81.42142","-5","1" +"44709","Canton","OH","40.836508","-81.38548","-5","1" +"44710","Canton","OH","40.791108","-81.41672","-5","1" +"44711","Canton","OH","40.811809","-81.368284","-5","1" +"44712","Canton","OH","40.811809","-81.368284","-5","1" +"44714","Canton","OH","40.827659","-81.36029","-5","1" +"44718","Canton","OH","40.850683","-81.43773","-5","1" +"44720","Canton","OH","40.888408","-81.41066","-5","1" +"44721","Canton","OH","40.886297","-81.33145","-5","1" +"44730","Canton","OH","40.769763","-81.2707","-5","1" +"44735","Canton","OH","40.811809","-81.368284","-5","1" +"44750","Canton","OH","40.784646","-81.418943","-5","1" +"44760","Canton","OH","40.853958","-81.42778","-5","1" +"44767","Canton","OH","40.895721","-81.424552","-5","1" +"44798","Canton","OH","40.811809","-81.368284","-5","1" +"44799","Canton","OH","40.811809","-81.368284","-5","1" +"44801","Adrian","OH","41.090712","-83.365404","-5","1" +"44802","Alvada","OH","41.053889","-83.41412","-5","1" +"44803","Amsden","OH","41.037511","-82.910552","-5","1" +"44804","Arcadia","OH","41.117339","-83.52652","-5","1" +"44805","Ashland","OH","40.867016","-82.31514","-5","1" +"44807","Attica","OH","41.069216","-82.87708","-5","1" +"44809","Bascom","OH","41.132988","-83.28328","-5","1" +"44811","Bellevue","OH","41.257163","-82.84296","-5","1" +"44813","Bellville","OH","40.606221","-82.52073","-5","1" +"44814","Berlin Heights","OH","41.323499","-82.4692","-5","1" +"44815","Bettsville","OH","41.244095","-83.23348","-5","1" +"44816","Birmingham","OH","41.331398","-82.35278","-5","1" +"44817","Bloomdale","OH","41.193747","-83.54226","-5","1" +"44818","Bloomville","OH","41.00811","-82.99772","-5","1" +"44820","Bucyrus","OH","40.815179","-82.97091","-5","1" +"44822","Butler","OH","40.561377","-82.41237","-5","1" +"44824","Castalia","OH","41.393507","-82.80569","-5","1" +"44825","Chatfield","OH","40.952927","-82.94232","-5","1" +"44826","Collins","OH","41.227648","-82.48061","-5","1" +"44827","Crestline","OH","40.795521","-82.74991","-5","1" +"44828","Flat Rock","OH","41.234403","-82.86059","-5","1" +"44830","Fostoria","OH","41.164209","-83.41054","-5","1" +"44833","Galion","OH","40.720869","-82.797","-5","1" +"44836","Green Springs","OH","41.249374","-83.05827","-5","1" +"44837","Greenwich","OH","41.020433","-82.50097","-5","1" +"44838","Hayesville","OH","40.773052","-82.26175","-5","1" +"44839","Huron","OH","41.388534","-82.5568","-5","1" +"44840","Jeromesville","OH","40.801432","-82.18712","-5","1" +"44841","Kansas","OH","41.249535","-83.2966","-5","1" +"44842","Loudonville","OH","40.639849","-82.2246","-5","1" +"44843","Lucas","OH","40.701792","-82.41177","-5","1" +"44844","McCutchenville","OH","40.990406","-83.26087","-5","1" +"44845","Melmore","OH","41.024204","-83.109783","-5","1" +"44846","Milan","OH","41.306205","-82.60611","-5","1" +"44847","Monroeville","OH","41.238863","-82.70909","-5","1" +"44848","Nankin","OH","40.920617","-82.281695","-5","1" +"44849","Nevada","OH","40.815261","-83.13144","-5","1" +"44850","New Haven","OH","41.034683","-82.68056","-5","1" +"44851","New London","OH","41.098478","-82.40483","-5","1" +"44853","New Riegel","OH","41.057873","-83.29505","-5","1" +"44854","New Washington","OH","40.954399","-82.85436","-5","1" +"44855","North Fairfield","OH","41.100202","-82.60887","-5","1" +"44856","North Robinson","OH","40.792804","-82.85759","-5","1" +"44857","Norwalk","OH","41.236357","-82.60185","-5","1" +"44858","Norwalk","OH","41.261375","-82.589042","-5","1" +"44859","Nova","OH","41.019566","-82.33622","-5","1" +"44860","Oceola","OH","40.845335","-83.09269","-5","1" +"44861","Old Fort","OH","41.240649","-83.15","-5","1" +"44862","Ontario","OH","40.772874","-82.532057","-5","1" +"44864","Perrysville","OH","40.66496","-82.31994","-5","1" +"44865","Plymouth","OH","40.99388","-82.67743","-5","1" +"44866","Polk","OH","40.906577","-82.18985","-5","1" +"44867","Republic","OH","41.140139","-82.99802","-5","1" +"44870","Sandusky","OH","41.42646","-82.71083","-5","1" +"44871","Sandusky","OH","41.49181","-82.647824","-5","1" +"44874","Savannah","OH","40.963743","-82.36547","-5","1" +"44875","Shelby","OH","40.888988","-82.65598","-5","1" +"44878","Shiloh","OH","40.949737","-82.52995","-5","1" +"44880","Sullivan","OH","41.038842","-82.21779","-5","1" +"44881","Sulphur Springs","OH","40.868645","-82.875027","-5","1" +"44882","Sycamore","OH","40.953556","-83.14177","-5","1" +"44883","Tiffin","OH","41.12071","-83.17658","-5","1" +"44887","Tiro","OH","40.90261","-82.78885","-5","1" +"44888","Willard","OH","41.141541","-82.588928","-5","1" +"44889","Wakeman","OH","41.24323","-82.38848","-5","1" +"44890","Willard","OH","41.073672","-82.72435","-5","1" +"44901","Mansfield","OH","40.850833","-82.511369","-5","1" +"44902","Mansfield","OH","40.759156","-82.51118","-5","1" +"44903","Mansfield","OH","40.766589","-82.51869","-5","1" +"44904","Mansfield","OH","40.678208","-82.58207","-5","1" +"44905","Mansfield","OH","40.773556","-82.47612","-5","1" +"44906","Mansfield","OH","40.766056","-82.56749","-5","1" +"44907","Mansfield","OH","40.733243","-82.51975","-5","1" +"44999","Mansfield","OH","40.772874","-82.532057","-5","1" +"45000","North Bend","OH","39.147991","-84.739682","-5","1" +"45001","Addyston","OH","39.137818","-84.7079","-5","1" +"45002","Cleves","OH","39.180358","-84.73783","-5","1" +"45003","College Corner","OH","39.575126","-84.7905","-5","1" +"45004","Collinsville","OH","39.440956","-84.575746","-5","1" +"45005","Franklin","OH","39.550241","-84.3087","-5","1" +"45010","Catawba","OH","39.999367","-83.619892","-5","1" +"45011","Hamilton","OH","39.404856","-84.52271","-5","1" +"45012","Hamilton","OH","39.440956","-84.575746","-5","1" +"45013","Hamilton","OH","39.409188","-84.60321","-5","1" +"45014","Fairfield","OH","39.330356","-84.55277","-5","1" +"45015","Hamilton","OH","39.367106","-84.55053","-5","1" +"45018","Fairfield","OH","39.440956","-84.575746","-5","1" +"45020","Hamilton","OH","39.440956","-84.575746","-5","1" +"45023","Hamilton","OH","39.440956","-84.575746","-5","1" +"45025","Hamilton","OH","39.440956","-84.575746","-5","1" +"45026","Hamilton","OH","39.440956","-84.575746","-5","1" +"45030","Harrison","OH","39.257936","-84.77001","-5","1" +"45032","Harveysburg","OH","39.499635","-84.00579","-5","1" +"45033","Hooven","OH","39.177002","-84.76337","-5","1" +"45034","Kings Mills","OH","39.359268","-84.24898","-5","1" +"45036","Lebanon","OH","39.440152","-84.22175","-5","1" +"45039","Maineville","OH","39.317735","-84.24728","-5","1" +"45040","Mason","OH","39.344258","-84.3152","-5","1" +"45041","Miamitown","OH","39.213282","-84.70421","-5","1" +"45042","Middletown","OH","39.534907","-84.39324","-5","1" +"45043","Middletown","OH","39.440956","-84.575746","-5","1" +"45044","Middletown","OH","39.482957","-84.38393","-5","1" +"45050","Monroe","OH","39.441008","-84.36582","-5","1" +"45051","Mount Saint Joseph","OH","39.09646","-84.643096","-5","1" +"45052","North Bend","OH","39.155158","-84.77789","-5","1" +"45053","Okeana","OH","39.352687","-84.78591","-5","1" +"45054","Oregonia","OH","39.44415","-84.06299","-5","1" +"45055","Overpeck","OH","39.451806","-84.515245","-5","1" +"45056","Oxford","OH","39.498751","-84.7407","-5","1" +"45061","Ross","OH","39.31235","-84.64828","-5","1" +"45062","Seven Mile","OH","39.480856","-84.55382","-5","1" +"45063","Shandon","OH","39.325805","-84.712099","-5","1" +"45064","Somerville","OH","39.562415","-84.6169","-5","1" +"45065","South Lebanon","OH","39.371242","-84.21132","-5","1" +"45066","Springboro","OH","39.557096","-84.22688","-5","1" +"45067","Trenton","OH","39.482307","-84.46429","-5","1" +"45068","Waynesville","OH","39.525562","-84.06923","-5","1" +"45069","West Chester","OH","39.343757","-84.40249","-5","1" +"45070","West Elkton","OH","39.588878","-84.55562","-5","1" +"45071","West Chester","OH","39.440956","-84.575746","-5","1" +"45073","Monroe","OH","39.440956","-84.575746","-5","1" +"45099","Monroe","OH","39.440956","-84.575746","-5","1" +"45101","Aberdeen","OH","38.671655","-83.75693","-5","1" +"45102","Amelia","OH","39.023067","-84.2099","-5","1" +"45103","Batavia","OH","39.082894","-84.15319","-5","1" +"45105","Bentonville","OH","38.749779","-83.612574","-5","1" +"45106","Bethel","OH","38.956484","-84.08093","-5","1" +"45107","Blanchester","OH","39.293634","-83.97584","-5","1" +"45110","Buford","OH","39.074262","-83.848414","-5","1" +"45111","Camp Dennison","OH","39.195516","-84.29093","-5","1" +"45112","Chilo","OH","38.792686","-84.1386","-5","1" +"45113","Clarksville","OH","39.397066","-83.98239","-5","1" +"45114","Cuba","OH","39.362778","-83.86432","-5","1" +"45115","Decatur","OH","38.815056","-83.7039","-5","1" +"45118","Fayetteville","OH","39.184985","-83.95045","-5","1" +"45119","Feesburg","OH","38.880632","-84.00874","-5","1" +"45120","Felicity","OH","38.821032","-84.09805","-5","1" +"45121","Georgetown","OH","38.87752","-83.90215","-5","1" +"45122","Goshen","OH","39.222264","-84.11831","-5","1" +"45123","Greenfield","OH","39.343559","-83.39748","-5","1" +"45125","Union","OH","39.104387","-84.232422","-5","1" +"45127","Columbia","OH","39.137761","-84.35214","-5","1" +"45130","Hamersville","OH","38.914118","-83.99496","-5","1" +"45131","Higginsport","OH","38.789585","-83.96705","-5","1" +"45132","Highland","OH","39.344299","-83.59926","-5","1" +"45133","Hillsboro","OH","39.162917","-83.5802","-5","1" +"45135","Leesburg","OH","39.34446","-83.54825","-5","1" +"45138","Lees Creek","OH","39.416747","-83.647583","-5","1" +"45140","Loveland","OH","39.258653","-84.2651","-5","1" +"45142","Lynchburg","OH","39.213112","-83.80743","-5","1" +"45144","Manchester","OH","38.690566","-83.61925","-5","1" +"45145","Marathon","OH","39.145698","-84.007023","-5","1" +"45146","Martinsville","OH","39.32006","-83.79841","-5","1" +"45147","Miamiville","OH","39.213739","-84.300232","-5","1" +"45148","Midland","OH","39.290475","-83.88767","-5","1" +"45150","Milford","OH","39.168818","-84.24995","-5","1" +"45152","Morrow","OH","39.350319","-84.11606","-5","1" +"45153","Moscow","OH","38.8702","-84.2025","-5","1" +"45154","Mount Orab","OH","39.046589","-83.92245","-5","1" +"45155","Mowrystown","OH","39.038055","-83.74936","-5","1" +"45156","Neville","OH","38.810072","-84.21176","-5","1" +"45157","New Richmond","OH","38.957385","-84.24755","-5","1" +"45158","Newtonsville","OH","39.18779","-84.078313","-5","1" +"45159","New Vienna","OH","39.326987","-83.68731","-5","1" +"45160","Owensville","OH","39.121637","-84.13927","-5","1" +"45162","Pleasant Plain","OH","39.276492","-84.08817","-5","1" +"45164","Port William","OH","39.553045","-83.78346","-5","1" +"45165","Greenfield","OH","39.198813","-83.607858","-5","1" +"45166","Reesville","OH","39.480543","-83.677197","-5","1" +"45167","Ripley","OH","38.763305","-83.8075","-5","1" +"45168","Russellville","OH","38.850094","-83.77254","-5","1" +"45169","Sabina","OH","39.507106","-83.6505","-5","1" +"45171","Sardinia","OH","38.985368","-83.78542","-5","1" +"45172","Sinking Spring","OH","39.074266","-83.38713","-5","1" +"45174","Terrace Park","OH","39.161061","-84.30808","-5","1" +"45176","Williamsburg","OH","39.081436","-84.02906","-5","1" +"45177","Wilmington","OH","39.463476","-83.84446","-5","1" +"45201","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45202","Cincinnati","OH","39.10441","-84.50774","-5","1" +"45203","Cincinnati","OH","39.104127","-84.53067","-5","1" +"45204","Cincinnati","OH","39.093345","-84.56428","-5","1" +"45205","Cincinnati","OH","39.11071","-84.57438","-5","1" +"45206","Cincinnati","OH","39.127527","-84.48832","-5","1" +"45207","Cincinnati","OH","39.142246","-84.46983","-5","1" +"45208","Cincinnati","OH","39.13786","-84.43426","-5","1" +"45209","Cincinnati","OH","39.15406","-84.43086","-5","1" +"45210","Cincinnati","OH","39.11226","-84.51439","-5","1" +"45211","Cincinnati","OH","39.154159","-84.60527","-5","1" +"45212","Cincinnati","OH","39.160693","-84.4545","-5","1" +"45213","Cincinnati","OH","39.180893","-84.41881","-5","1" +"45214","Cincinnati","OH","39.12056","-84.53575","-5","1" +"45215","Cincinnati","OH","39.228859","-84.45707","-5","1" +"45216","Cincinnati","OH","39.197109","-84.47991","-5","1" +"45217","Cincinnati","OH","39.166948","-84.49514","-5","1" +"45218","Cincinnati","OH","39.264791","-84.5175","-5","1" +"45219","Cincinnati","OH","39.12721","-84.50988","-5","1" +"45220","Cincinnati","OH","39.14426","-84.51986","-5","1" +"45221","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45222","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45223","Cincinnati","OH","39.161859","-84.54259","-5","1" +"45224","Cincinnati","OH","39.204959","-84.53734","-5","1" +"45225","Cincinnati","OH","39.13741","-84.54112","-5","1" +"45226","Cincinnati","OH","39.114911","-84.42526","-5","1" +"45227","Cincinnati","OH","39.15201","-84.38348","-5","1" +"45228","Cincinnati","OH","39.070561","-84.417891","-5","1" +"45229","Cincinnati","OH","39.152093","-84.48899","-5","1" +"45230","Cincinnati","OH","39.078368","-84.38865","-5","1" +"45231","Cincinnati","OH","39.242608","-84.5453","-5","1" +"45232","Cincinnati","OH","39.173409","-84.51295","-5","1" +"45233","Cincinnati","OH","39.117065","-84.67173","-5","1" +"45234","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45235","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45236","Cincinnati","OH","39.205109","-84.39512","-5","1" +"45237","Cincinnati","OH","39.188859","-84.45798","-5","1" +"45238","Cincinnati","OH","39.112169","-84.60849","-5","1" +"45239","Cincinnati","OH","39.207558","-84.57299","-5","1" +"45240","Cincinnati","OH","39.284806","-84.52941","-5","1" +"45241","Cincinnati","OH","39.276271","-84.39324","-5","1" +"45242","Cincinnati","OH","39.242559","-84.36042","-5","1" +"45243","Cincinnati","OH","39.18466","-84.36014","-5","1" +"45244","Cincinnati","OH","39.119161","-84.33389","-5","1" +"45245","Cincinnati","OH","39.075329","-84.27311","-5","1" +"45246","Cincinnati","OH","39.288558","-84.47383","-5","1" +"45247","Cincinnati","OH","39.209208","-84.64363","-5","1" +"45248","Cincinnati","OH","39.160159","-84.65042","-5","1" +"45249","Cincinnati","OH","39.278295","-84.33049","-5","1" +"45250","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45251","Cincinnati","OH","39.258124","-84.58733","-5","1" +"45252","Cincinnati","OH","39.282824","-84.62514","-5","1" +"45253","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45254","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45255","Cincinnati","OH","39.066112","-84.32227","-5","1" +"45258","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45262","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45263","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45264","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45267","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45268","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45269","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45270","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45271","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45273","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45274","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45275","Cincinnati","OH","38.946921","-83.862877","-5","1" +"45277","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45296","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45298","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45299","Cincinnati","OH","39.262158","-84.509268","-5","1" +"45301","Alpha","OH","39.711173","-84.02323","-5","1" +"45302","Anna","OH","40.40476","-84.19578","-5","1" +"45303","Ansonia","OH","40.215278","-84.6477","-5","1" +"45304","Arcanum","OH","39.990909","-84.53709","-5","1" +"45305","Bellbrook","OH","39.640059","-84.0855","-5","1" +"45306","Botkins","OH","40.464571","-84.18763","-5","1" +"45307","Bowersville","OH","39.580198","-83.72363","-5","1" +"45308","Bradford","OH","40.128652","-84.4433","-5","1" +"45309","Brookville","OH","39.844538","-84.41774","-5","1" +"45310","Burkettsville","OH","40.352158","-84.6448","-5","1" +"45311","Camden","OH","39.629735","-84.67557","-5","1" +"45312","Casstown","OH","40.0659","-84.08219","-5","1" +"45314","Cedarville","OH","39.744577","-83.79697","-5","1" +"45315","Clayton","OH","39.853674","-84.34125","-5","1" +"45316","Clifton","OH","39.796992","-83.82609","-5","1" +"45317","Conover","OH","40.170605","-84.02446","-5","1" +"45318","Covington","OH","40.123474","-84.35433","-5","1" +"45319","Donnelsville","OH","39.918936","-83.944909","-5","1" +"45320","Eaton","OH","39.739353","-84.65393","-5","1" +"45321","Eldorado","OH","39.888717","-84.67216","-5","1" +"45322","Englewood","OH","39.877745","-84.30999","-5","1" +"45323","Enon","OH","39.867259","-83.93512","-5","1" +"45324","Fairborn","OH","39.808909","-84.01972","-5","1" +"45325","Farmersville","OH","39.685116","-84.42307","-5","1" +"45326","Fletcher","OH","40.144131","-84.10429","-5","1" +"45327","Germantown","OH","39.628806","-84.37873","-5","1" +"45328","Gettysburg","OH","40.112545","-84.49314","-5","1" +"45329","Gordon","OH","40.135426","-84.619129","-5","1" +"45330","Gratis","OH","39.647494","-84.52749","-5","1" +"45331","Greenville","OH","40.094141","-84.63574","-5","1" +"45332","Hollansburg","OH","39.998881","-84.79165","-5","1" +"45333","Houston","OH","40.260111","-84.33611","-5","1" +"45334","Jackson Center","OH","40.446467","-84.04389","-5","1" +"45335","Jamestown","OH","39.62434","-83.74587","-5","1" +"45336","Kettlersville","OH","40.438744","-84.26309","-5","1" +"45337","Laura","OH","39.981075","-84.42201","-5","1" +"45338","Lewisburg","OH","39.849859","-84.54428","-5","1" +"45339","Ludlow Falls","OH","40.008648","-84.34143","-5","1" +"45340","Maplewood","OH","40.372607","-84.05113","-5","1" +"45341","Medway","OH","39.880826","-84.02364","-5","1" +"45342","Miamisburg","OH","39.631525","-84.27074","-5","1" +"45343","Miamisburg","OH","39.750471","-84.268593","-5","1" +"45344","New Carlisle","OH","39.939925","-84.01992","-5","1" +"45345","New Lebanon","OH","39.743766","-84.39256","-5","1" +"45346","New Madison","OH","39.971929","-84.70471","-5","1" +"45347","New Paris","OH","39.876255","-84.77788","-5","1" +"45348","New Weston","OH","40.332705","-84.65016","-5","1" +"45349","North Hampton","OH","39.990945","-83.94049","-5","1" +"45350","North Star","OH","40.135426","-84.619129","-5","1" +"45351","Osgood","OH","40.339356","-84.49597","-5","1" +"45352","Palestine","OH","40.050308","-84.74442","-5","1" +"45353","Pemberton","OH","40.294031","-84.03271","-5","1" +"45354","Phillipsburg","OH","39.904603","-84.40163","-5","1" +"45356","Piqua","OH","40.156514","-84.24213","-5","1" +"45358","Pitsburg","OH","39.986011","-84.48651","-5","1" +"45359","Pleasant Hill","OH","40.053483","-84.35202","-5","1" +"45360","Port Jefferson","OH","40.330423","-84.09097","-5","1" +"45361","Potsdam","OH","39.963492","-84.414484","-5","1" +"45362","Rossburg","OH","40.28577","-84.63891","-5","1" +"45363","Russia","OH","40.233304","-84.40459","-5","1" +"45365","Sidney","OH","40.284855","-84.15974","-5","1" +"45367","Sidney","OH","40.333611","-84.218308","-5","1" +"45368","South Charleston","OH","39.840367","-83.65813","-5","1" +"45369","South Vienna","OH","39.942716","-83.60235","-5","1" +"45370","Spring Valley","OH","39.600367","-84.02586","-5","1" +"45371","Tipp City","OH","39.954239","-84.17685","-5","1" +"45372","Tremont City","OH","40.013871","-83.83325","-5","1" +"45373","Troy","OH","40.036525","-84.20629","-5","1" +"45374","Troy","OH","40.03997","-84.229799","-5","1" +"45377","Vandalia","OH","39.889356","-84.2051","-5","1" +"45378","Verona","OH","39.903161","-84.48822","-5","1" +"45380","Versailles","OH","40.231735","-84.49935","-5","1" +"45381","West Alexandria","OH","39.730506","-84.53052","-5","1" +"45382","West Manchester","OH","39.903258","-84.62255","-5","1" +"45383","West Milton","OH","39.958117","-84.33335","-5","1" +"45384","Wilberforce","OH","39.712772","-83.88014","-5","1" +"45385","Xenia","OH","39.682836","-83.92144","-5","1" +"45387","Yellow Springs","OH","39.797227","-83.89239","-5","1" +"45388","Yorkshire","OH","40.328535","-84.47938","-5","1" +"45389","Christiansburg","OH","40.055737","-84.02525","-5","1" +"45390","Union City","OH","40.20451","-84.78292","-5","1" +"45401","Dayton","OH","39.750471","-84.268593","-5","1" +"45402","Dayton","OH","39.757758","-84.18848","-5","1" +"45403","Dayton","OH","39.762708","-84.15294","-5","1" +"45404","Dayton","OH","39.783258","-84.16342","-5","1" +"45405","Dayton","OH","39.788458","-84.21111","-5","1" +"45406","Dayton","OH","39.784108","-84.23841","-5","1" +"45407","Dayton","OH","39.760058","-84.22011","-5","1" +"45408","Dayton","OH","39.741558","-84.22362","-5","1" +"45409","Dayton","OH","39.725705","-84.18927","-5","1" +"45410","Dayton","OH","39.748309","-84.15893","-5","1" +"45412","Dayton","OH","39.750471","-84.268593","-5","1" +"45413","Dayton","OH","39.750471","-84.268593","-5","1" +"45414","Dayton","OH","39.820807","-84.19381","-5","1" +"45415","Dayton","OH","39.837256","-84.26016","-5","1" +"45416","Dayton","OH","39.805207","-84.25804","-5","1" +"45417","Dayton","OH","39.753108","-84.24715","-5","1" +"45418","Dayton","OH","39.716161","-84.2734","-5","1" +"45419","Dayton","OH","39.713309","-84.16523","-5","1" +"45420","Dayton","OH","39.723909","-84.13453","-5","1" +"45422","Dayton","OH","39.758058","-84.20009","-5","1" +"45423","Dayton","OH","39.750471","-84.268593","-5","1" +"45424","Dayton","OH","39.840308","-84.12227","-5","1" +"45426","Dayton","OH","39.802606","-84.30196","-5","1" +"45427","Dayton","OH","39.755758","-84.27867","-5","1" +"45428","Dayton","OH","39.746656","-84.259292","-5","1" +"45429","Dayton","OH","39.687459","-84.15595","-5","1" +"45430","Dayton","OH","39.710787","-84.08192","-5","1" +"45431","Dayton","OH","39.765259","-84.10262","-5","1" +"45432","Dayton","OH","39.74035","-84.09306","-5","1" +"45433","Dayton","OH","39.813743","-84.05898","-5","1" +"45434","Dayton","OH","39.719092","-84.03808","-5","1" +"45435","Dayton","OH","39.750471","-84.268593","-5","1" +"45437","Dayton","OH","39.750471","-84.268593","-5","1" +"45439","Dayton","OH","39.695702","-84.21688","-5","1" +"45440","Dayton","OH","39.674192","-84.11029","-5","1" +"45441","Dayton","OH","39.750471","-84.268593","-5","1" +"45448","Dayton","OH","39.750471","-84.268593","-5","1" +"45449","Dayton","OH","39.664226","-84.24201","-5","1" +"45454","Dayton","OH","39.750471","-84.268593","-5","1" +"45458","Dayton","OH","39.60828","-84.16413","-5","1" +"45459","Dayton","OH","39.644609","-84.16931","-5","1" +"45463","Dayton","OH","39.750471","-84.268593","-5","1" +"45469","Dayton","OH","39.740509","-84.178939","-5","1" +"45470","Dayton","OH","39.750471","-84.268593","-5","1" +"45475","Dayton","OH","39.750471","-84.268593","-5","1" +"45479","Dayton","OH","39.734409","-84.194389","-5","1" +"45481","Dayton","OH","39.750471","-84.268593","-5","1" +"45482","Dayton","OH","39.750471","-84.268593","-5","1" +"45490","Dayton","OH","39.750471","-84.268593","-5","1" +"45501","Springfield","OH","39.927059","-83.813228","-5","1" +"45502","Springfield","OH","39.926617","-83.8128","-5","1" +"45503","Springfield","OH","39.94831","-83.78205","-5","1" +"45504","Springfield","OH","39.941827","-83.83702","-5","1" +"45505","Springfield","OH","39.91086","-83.78579","-5","1" +"45506","Springfield","OH","39.910109","-83.83243","-5","1" +"45553","West Union","OH","38.782131","-83.558044","-5","1" +"45601","Chillicothe","OH","39.33046","-82.97228","-5","1" +"45612","Bainbridge","OH","39.228796","-83.28641","-5","1" +"45613","Beaver","OH","39.015223","-82.84927","-5","1" +"45614","Bidwell","OH","38.919179","-82.29337","-5","1" +"45616","Blue Creek","OH","38.789223","-83.3192","-5","1" +"45617","Bourneville","OH","39.280388","-83.158991","-5","1" +"45618","Cherry Fork","OH","38.892198","-83.621787","-5","1" +"45619","Chesapeake","OH","38.448563","-82.44553","-5","1" +"45620","Cheshire","OH","38.943285","-82.13589","-5","1" +"45621","Coalton","OH","39.111094","-82.61105","-5","1" +"45622","Creola","OH","39.364574","-82.4959","-5","1" +"45623","Crown City","OH","38.630633","-82.2697","-5","1" +"45624","Cynthiana","OH","39.172214","-83.34842","-5","1" +"45628","Frankfort","OH","39.390231","-83.19363","-5","1" +"45629","Franklin Furnace","OH","38.653909","-82.82535","-5","1" +"45630","Friendship","OH","38.793335","-82.96046","-5","1" +"45631","Gallipolis","OH","38.825478","-82.22755","-5","1" +"45633","Hallsville","OH","39.46557","-82.747853","-5","1" +"45634","Hamden","OH","39.171012","-82.50017","-5","1" +"45636","Haverhill","OH","38.592446","-82.828817","-5","1" +"45638","Ironton","OH","38.535109","-82.6737","-5","1" +"45640","Jackson","OH","39.034226","-82.63678","-5","1" +"45641","Morgan","OH","38.967813","-82.220469","-5","1" +"45642","Jasper","OH","39.047577","-83.05382","-5","1" +"45643","Kerr","OH","38.86833","-82.256185","-5","1" +"45644","Kingston","OH","39.459353","-82.87777","-5","1" +"45645","Kitts Hill","OH","38.557052","-82.53744","-5","1" +"45646","Latham","OH","39.086218","-83.31764","-5","1" +"45647","Londonderry","OH","39.282411","-82.76457","-5","1" +"45648","Lucasville","OH","38.911803","-82.98836","-5","1" +"45650","Lynx","OH","38.746506","-83.40878","-5","1" +"45651","McArthur","OH","39.267049","-82.46415","-5","1" +"45652","McDermott","OH","38.833053","-83.07498","-5","1" +"45653","Minford","OH","38.877777","-82.84096","-5","1" +"45654","New Plymouth","OH","39.376504","-82.39503","-5","1" +"45656","Oak Hill","OH","38.879935","-82.58332","-5","1" +"45657","Otway","OH","38.866354","-83.22028","-5","1" +"45658","Patriot","OH","38.766082","-82.41638","-5","1" +"45659","Pedro","OH","38.67484","-82.61865","-5","1" +"45660","Peebles","OH","38.987596","-83.37752","-5","1" +"45661","Piketon","OH","39.046079","-83.06459","-5","1" +"45662","Portsmouth","OH","38.762824","-82.94294","-5","1" +"45663","West Portsmouth","OH","38.743244","-83.05954","-5","1" +"45669","Proctorville","OH","38.468003","-82.35457","-5","1" +"45670","Wilkesville","OH","39.118117","-82.381351","-5","1" +"45671","Rarden","OH","38.947693","-83.24361","-5","1" +"45672","Ray","OH","39.208053","-82.69077","-5","1" +"45673","Richmond Dale","OH","39.204151","-82.81378","-5","1" +"45674","Rio Grande","OH","38.881743","-82.38091","-5","1" +"45675","Rock Camp","OH","38.536685","-82.532715","-5","1" +"45677","Scioto Furnace","OH","38.794115","-82.755455","-5","1" +"45678","Scottown","OH","38.615111","-82.38004","-5","1" +"45679","Seaman","OH","38.95352","-83.57108","-5","1" +"45680","South Point","OH","38.438617","-82.55774","-5","1" +"45681","South Salem","OH","39.308063","-83.25664","-5","1" +"45682","South Webster","OH","38.816072","-82.71455","-5","1" +"45683","Stockdale","OH","38.955485","-82.858402","-5","1" +"45684","Stout","OH","38.664532","-83.29759","-5","1" +"45685","Thurman","OH","38.915013","-82.45326","-5","1" +"45686","Vinton","OH","38.99754","-82.36215","-5","1" +"45687","Wakefield","OH","39.072829","-83.085764","-5","1" +"45688","Waterloo","OH","38.734463","-82.52163","-5","1" +"45690","Waverly","OH","39.123071","-83.0009","-5","1" +"45692","Wellston","OH","39.117212","-82.54811","-5","1" +"45693","West Union","OH","38.795145","-83.54335","-5","1" +"45694","Wheelersburg","OH","38.729816","-82.8004","-5","1" +"45695","Wilkesville","OH","39.137773","-82.36543","-5","1" +"45696","Willow Wood","OH","38.592851","-82.46212","-5","1" +"45697","Winchester","OH","38.939364","-83.67195","-5","1" +"45698","Zaleski","OH","39.282728","-82.39623","-5","1" +"45699","Lucasville","OH","38.793335","-82.96046","-5","1" +"45701","Athens","OH","39.322847","-82.09728","-5","1" +"45710","Albany","OH","39.202517","-82.21421","-5","1" +"45711","Amesville","OH","39.429095","-81.94337","-5","1" +"45712","Barlow","OH","39.40032","-81.66209","-5","1" +"45713","Bartlett","OH","39.419647","-81.8164","-5","1" +"45714","Belpre","OH","39.297622","-81.5958","-5","1" +"45715","Beverly","OH","39.58849","-81.62932","-5","1" +"45716","Buchtel","OH","39.462005","-82.18021","-5","1" +"45717","Carbondale","OH","39.368235","-82.010132","-5","1" +"45719","Chauncey","OH","39.4001","-82.12856","-5","1" +"45720","Chester","OH","39.085629","-81.921443","-5","1" +"45721","Coal Run","OH","39.430738","-81.44512","-5","1" +"45723","Coolville","OH","39.22241","-81.81945","-5","1" +"45724","Cutler","OH","39.363901","-81.78854","-5","1" +"45727","Dexter City","OH","39.649854","-81.47113","-5","1" +"45729","Fleming","OH","39.420916","-81.5936","-5","1" +"45732","Glouster","OH","39.506243","-82.0779","-5","1" +"45734","Graysville","OH","39.628144","-81.19164","-5","1" +"45735","Guysville","OH","39.262298","-81.92977","-5","1" +"45739","Hockingport","OH","39.197888","-81.744573","-5","1" +"45740","Jacksonville","OH","39.475889","-82.07959","-5","1" +"45741","Langsville","OH","39.07348","-82.244","-5","1" +"45742","Little Hocking","OH","39.273206","-81.70889","-5","1" +"45743","Long Bottom","OH","39.077704","-81.84506","-5","1" +"45744","Lowell","OH","39.533021","-81.50986","-5","1" +"45745","Lower Salem","OH","39.611675","-81.34495","-5","1" +"45746","Macksburg","OH","39.627217","-81.45532","-5","1" +"45750","Marietta","OH","39.426551","-81.44373","-5","1" +"45757","Dexter City","OH","39.65828","-81.470771","-5","1" +"45760","Middleport","OH","39.006757","-82.08208","-5","1" +"45761","Millfield","OH","39.431016","-82.09986","-5","1" +"45764","Nelsonville","OH","39.450463","-82.22975","-5","1" +"45766","New Marshfield","OH","39.32502","-82.2586","-5","1" +"45767","New Matamoras","OH","39.524674","-81.12031","-5","1" +"45768","Newport","OH","39.397077","-81.25508","-5","1" +"45769","Pomeroy","OH","39.092281","-82.028","-5","1" +"45770","Portland","OH","38.988699","-81.8019","-5","1" +"45771","Racine","OH","38.978044","-81.91206","-5","1" +"45772","Reedsville","OH","39.143542","-81.83724","-5","1" +"45773","Reno","OH","39.471663","-81.28018","-5","1" +"45775","Rutland","OH","39.089885","-82.16773","-5","1" +"45776","Shade","OH","39.191685","-82.01828","-5","1" +"45777","Sharpsburg","OH","39.368235","-82.010132","-5","1" +"45778","Stewart","OH","39.341224","-81.88561","-5","1" +"45779","Syracuse","OH","38.999757","-81.97282","-5","1" +"45780","The Plains","OH","39.370636","-82.13406","-5","1" +"45781","Torch","OH","39.368235","-82.010132","-5","1" +"45782","Trimble","OH","39.483798","-82.07788","-5","1" +"45783","Tuppers Plains","OH","39.168349","-81.842313","-5","1" +"45784","Vincent","OH","39.389346","-81.68122","-5","1" +"45786","Waterford","OH","39.526685","-81.66109","-5","1" +"45787","Watertown","OH","39.430738","-81.44512","-5","1" +"45788","Whipple","OH","39.5103","-81.37669","-5","1" +"45789","Wingett Run","OH","39.551002","-81.256","-5","1" +"45801","Lima","OH","40.759451","-84.08458","-5","1" +"45802","Lima","OH","40.781785","-84.138566","-5","1" +"45804","Lima","OH","40.72255","-84.08979","-5","1" +"45805","Lima","OH","40.739517","-84.14468","-5","1" +"45806","Lima","OH","40.668448","-84.1331","-5","1" +"45807","Lima","OH","40.7953","-84.16573","-5","1" +"45808","Beaverdam","OH","40.832363","-83.97343","-5","1" +"45809","Gomer","OH","40.844554","-84.18324","-5","1" +"45810","Ada","OH","40.774039","-83.81821","-5","1" +"45812","Alger","OH","40.696862","-83.8231","-5","1" +"45813","Antwerp","OH","41.18312","-84.73533","-5","1" +"45814","Arlington","OH","40.892253","-83.64338","-5","1" +"45815","Belmore","OH","41.153855","-83.941281","-5","1" +"45816","Benton Ridge","OH","41.00433","-83.79265","-5","1" +"45817","Bluffton","OH","40.886803","-83.89259","-5","1" +"45819","Buckland","OH","40.623695","-84.26087","-5","1" +"45820","Cairo","OH","40.831339","-84.08602","-5","1" +"45821","Cecil","OH","41.230816","-84.57771","-5","1" +"45822","Celina","OH","40.542778","-84.58232","-5","1" +"45826","Chickasaw","OH","40.428177","-84.633484","-5","1" +"45827","Cloverdale","OH","41.009008","-84.30617","-5","1" +"45828","Coldwater","OH","40.480128","-84.64678","-5","1" +"45829","Crane","OH","41.163632","-84.612173","-5","1" +"45830","Columbus Grove","OH","40.900986","-84.06783","-5","1" +"45831","Continental","OH","41.103903","-84.25371","-5","1" +"45832","Convoy","OH","40.929839","-84.73138","-5","1" +"45833","Delphos","OH","40.841409","-84.34178","-5","1" +"45835","Dola","OH","40.768846","-83.70007","-5","1" +"45836","Dunkirk","OH","40.790676","-83.63856","-5","1" +"45837","Dupont","OH","41.054934","-84.30075","-5","1" +"45838","Elgin","OH","40.740456","-84.47602","-5","1" +"45839","Findlay","OH","40.993263","-83.650714","-5","1" +"45840","Findlay","OH","41.037325","-83.64576","-5","1" +"45841","Jenera","OH","40.881217","-83.73199","-5","1" +"45843","Forest","OH","40.782854","-83.52862","-5","1" +"45844","Fort Jennings","OH","40.914909","-84.28717","-5","1" +"45845","Fort Loramie","OH","40.338583","-84.38348","-5","1" +"45846","Fort Recovery","OH","40.409441","-84.75912","-5","1" +"45848","Glandorf","OH","41.096421","-84.112031","-5","1" +"45849","Grover Hill","OH","41.012","-84.46683","-5","1" +"45850","Harrod","OH","40.713499","-83.93098","-5","1" +"45851","Haviland","OH","41.030911","-84.60213","-5","1" +"45853","Kalida","OH","40.983471","-84.20027","-5","1" +"45854","Lafayette","OH","40.758211","-83.949934","-5","1" +"45855","Latty","OH","41.088144","-84.58332","-5","1" +"45856","Leipsic","OH","41.112413","-83.99136","-5","1" +"45858","McComb","OH","41.106245","-83.80463","-5","1" +"45859","McGuffey","OH","40.691866","-83.78457","-5","1" +"45860","Maria Stein","OH","40.400409","-84.51744","-5","1" +"45861","Melrose","OH","41.090714","-84.41948","-5","1" +"45862","Mendon","OH","40.669102","-84.52245","-5","1" +"45863","Middle Point","OH","40.892251","-84.45548","-5","1" +"45864","Miller City","OH","41.103776","-84.131541","-5","1" +"45865","Minster","OH","40.391924","-84.37211","-5","1" +"45866","Montezuma","OH","40.488771","-84.54783","-5","1" +"45867","Mount Blanchard","OH","40.903089","-83.54591","-5","1" +"45868","Mount Cory","OH","40.958861","-83.8356","-5","1" +"45869","New Bremen","OH","40.452556","-84.38731","-5","1" +"45870","New Hampshire","OH","40.555807","-83.95347","-5","1" +"45871","New Knoxville","OH","40.491725","-84.31129","-5","1" +"45872","North Baltimore","OH","41.18394","-83.67053","-5","1" +"45873","Oakwood","OH","41.107804","-84.39098","-5","1" +"45874","Ohio City","OH","40.780889","-84.65726","-5","1" +"45875","Ottawa","OH","41.020852","-84.04649","-5","1" +"45876","Ottoville","OH","40.931687","-84.33877","-5","1" +"45877","Pandora","OH","40.945888","-83.9514","-5","1" +"45879","Paulding","OH","41.137873","-84.56377","-5","1" +"45880","Payne","OH","41.072614","-84.7317","-5","1" +"45881","Rawson","OH","40.954985","-83.78216","-5","1" +"45882","Rockford","OH","40.682303","-84.67806","-5","1" +"45883","Saint Henry","OH","40.413734","-84.6325","-5","1" +"45884","Saint Johns","OH","40.520289","-84.16797","-5","1" +"45885","Saint Marys","OH","40.550005","-84.39308","-5","1" +"45886","Scott","OH","40.9871","-84.6073","-5","1" +"45887","Spencerville","OH","40.711394","-84.35509","-5","1" +"45888","Uniopolis","OH","40.601985","-84.08653","-5","1" +"45889","Van Buren","OH","41.14062","-83.64464","-5","1" +"45890","Vanlue","OH","40.973064","-83.48845","-5","1" +"45891","Van Wert","OH","40.874092","-84.57871","-5","1" +"45893","Vaughnsville","OH","40.882077","-84.148028","-5","1" +"45894","Venedocia","OH","40.755619","-84.48041","-5","1" +"45895","Wapakoneta","OH","40.56914","-84.17288","-5","1" +"45896","Waynesfield","OH","40.593532","-83.94417","-5","1" +"45897","Williamstown","OH","40.834233","-83.65288","-5","1" +"45898","Willshire","OH","40.74011","-84.77607","-5","1" +"45899","Wren","OH","40.799531","-84.77422","-5","1" +"45944","Cincinnati","OH","39.166759","-84.53822","-5","1" +"45999","Cincinnati","OH","39.166759","-84.53822","-5","1" +"46001","Alexandria","IN","40.257082","-85.673","-5","0" +"46011","Anderson","IN","40.112913","-85.737","-5","0" +"46012","Anderson","IN","40.132892","-85.65097","-5","0" +"46013","Anderson","IN","40.061092","-85.67672","-5","0" +"46014","Anderson","IN","40.161733","-85.719659","-5","0" +"46015","Anderson","IN","40.093792","-85.657825","-5","0" +"46016","Anderson","IN","40.098641","-85.68452","-5","0" +"46017","Anderson","IN","40.096343","-85.60147","-5","0" +"46018","Anderson","IN","40.161733","-85.719659","-5","0" +"46030","Arcadia","IN","40.17449","-86.01736","-5","0" +"46031","Atlanta","IN","40.211166","-86.02304","-5","0" +"46032","Carmel","IN","39.970241","-86.15416","-5","0" +"46033","Carmel","IN","39.973731","-86.08875","-5","0" +"46034","Cicero","IN","40.127019","-86.03121","-5","0" +"46035","Colfax","IN","40.1915","-86.67137","-5","0" +"46036","Elwood","IN","40.279375","-85.83761","-5","0" +"46038","Fishers","IN","39.95645","-86.00872","-5","0" +"46039","Forest","IN","40.366648","-86.30867","-5","0" +"46040","Fortville","IN","39.93549","-85.84047","-5","0" +"46041","Frankfort","IN","40.290615","-86.5028","-5","0" +"46044","Frankton","IN","40.221208","-85.77612","-5","0" +"46045","Goldsmith","IN","40.289779","-86.15004","-5","0" +"46046","Hillisburg","IN","40.304473","-86.469044","-5","0" +"46047","Hobbs","IN","40.284101","-85.94676","-5","0" +"46048","Ingalls","IN","39.95634","-85.80252","-5","0" +"46049","Kempton","IN","40.292007","-86.22757","-5","0" +"46050","Kirklin","IN","40.196061","-86.35846","-5","0" +"46051","Lapel","IN","40.065589","-85.84631","-5","0" +"46052","Lebanon","IN","40.047966","-86.46592","-5","0" +"46055","McCordsville","IN","39.898378","-85.9159","-5","0" +"46056","Markleville","IN","39.974904","-85.61733","-5","0" +"46057","Michigantown","IN","40.333772","-86.38161","-5","0" +"46058","Mulberry","IN","40.349135","-86.66424","-5","0" +"46060","Noblesville","IN","40.050109","-85.99815","-5","0" +"46061","Noblesville","IN","40.072462","-86.052285","-5","0" +"46063","Orestes","IN","40.27046","-85.72871","-5","0" +"46064","Pendleton","IN","39.997694","-85.75075","-5","0" +"46065","Rossville","IN","40.427919","-86.61059","-5","0" +"46067","Sedalia","IN","40.304473","-86.469044","-5","0" +"46068","Sharpsville","IN","40.378829","-86.09362","-5","0" +"46069","Sheridan","IN","40.134736","-86.21885","-5","0" +"46070","Summitville","IN","40.340749","-85.64679","-5","0" +"46071","Thorntown","IN","40.126304","-86.60268","-5","0" +"46072","Tipton","IN","40.284041","-86.04681","-5","0" +"46074","Westfield","IN","40.041325","-86.15262","-5","0" +"46075","Whitestown","IN","40.007024","-86.34405","-5","0" +"46076","Windfall","IN","40.363776","-85.95074","-5","0" +"46077","Zionsville","IN","39.960858","-86.28252","-5","0" +"46082","Carmel","IN","40.072462","-86.052285","-5","0" +"46102","Advance","IN","39.996577","-86.61928","-5","0" +"46103","Amo","IN","39.688673","-86.61409","-5","0" +"46104","Arlington","IN","39.649096","-85.60213","-5","0" +"46105","Bainbridge","IN","39.761986","-86.80492","-5","0" +"46106","Bargersville","IN","39.514024","-86.18812","-5","0" +"46107","Beech Grove","IN","39.718744","-86.09375","-5","0" +"46110","Boggstown","IN","39.56578","-85.92481","-5","0" +"46111","Brooklyn","IN","39.538087","-86.36991","-5","0" +"46112","Brownsburg","IN","39.84952","-86.38739","-5","0" +"46113","Camby","IN","39.631344","-86.31273","-5","0" +"46114","Cartersburg","IN","39.762448","-86.510386","-5","0" +"46115","Carthage","IN","39.740158","-85.57101","-5","0" +"46117","Charlottesville","IN","39.805933","-85.61514","-5","0" +"46118","Clayton","IN","39.65983","-86.53196","-5","0" +"46120","Cloverdale","IN","39.513388","-86.79169","-5","0" +"46121","Coatesville","IN","39.679883","-86.67849","-5","0" +"46122","Danville","IN","39.761211","-86.52344","-5","0" +"46123","Avon","IN","39.764436","-86.39699","-5","0" +"46124","Edinburgh","IN","39.366507","-85.9864","-5","0" +"46125","Eminence","IN","39.522181","-86.64102","-5","0" +"46126","Fairland","IN","39.61753","-85.88003","-5","0" +"46127","Falmouth","IN","39.717457","-85.32737","-5","0" +"46128","Fillmore","IN","39.674879","-86.75256","-5","0" +"46129","Finly","IN","39.821516","-85.765169","-5","0" +"46130","Fountaintown","IN","39.680058","-85.83363","-5","0" +"46131","Franklin","IN","39.482105","-86.05043","-5","0" +"46133","Glenwood","IN","39.609926","-85.28428","-5","0" +"46135","Greencastle","IN","39.652374","-86.87361","-5","0" +"46140","Greenfield","IN","39.799143","-85.78446","-5","0" +"46142","Greenwood","IN","39.62068","-86.15126","-5","0" +"46143","Greenwood","IN","39.601649","-86.12734","-5","0" +"46144","Gwynneville","IN","39.661964","-85.64945","-5","0" +"46145","Greenwood","IN","39.597444","-86.088914","-5","0" +"46146","Homer","IN","39.619923","-85.46554","-5","0" +"46147","Jamestown","IN","39.96354","-86.61733","-5","0" +"46148","Knightstown","IN","39.803168","-85.51553","-5","0" +"46149","Lizton","IN","39.885033","-86.54978","-5","0" +"46150","Manilla","IN","39.563815","-85.61239","-5","0" +"46151","Martinsville","IN","39.442774","-86.41337","-5","0" +"46154","Maxwell","IN","39.856763","-85.768357","-5","0" +"46155","Mays","IN","39.743346","-85.43035","-5","0" +"46156","Milroy","IN","39.484598","-85.47698","-5","0" +"46157","Monrovia","IN","39.561003","-86.53591","-5","0" +"46158","Mooresville","IN","39.588545","-86.37431","-5","0" +"46160","Morgantown","IN","39.351269","-86.26806","-5","0" +"46161","Morristown","IN","39.67083","-85.69786","-5","0" +"46162","Needham","IN","39.542985","-85.95928","-5","0" +"46163","New Palestine","IN","39.726811","-85.89726","-5","0" +"46164","Nineveh","IN","39.324091","-86.11397","-5","0" +"46165","North Salem","IN","39.852098","-86.64494","-5","0" +"46166","Paragon","IN","39.416815","-86.58507","-5","0" +"46167","Pittsboro","IN","39.872255","-86.46335","-5","0" +"46168","Plainfield","IN","39.69775","-86.39589","-5","0" +"46170","Putnamville","IN","39.668441","-86.828402","-5","0" +"46171","Reelsville","IN","39.525112","-86.95994","-5","0" +"46172","Roachdale","IN","39.842523","-86.83174","-5","0" +"46173","Rushville","IN","39.614803","-85.43834","-5","0" +"46175","Russellville","IN","39.837161","-86.98612","-5","0" +"46176","Shelbyville","IN","39.523797","-85.77208","-5","0" +"46180","Stilesville","IN","39.612844","-86.63017","-5","0" +"46181","Trafalgar","IN","39.396833","-86.16098","-5","0" +"46182","Waldron","IN","39.457143","-85.67065","-5","0" +"46183","West Newton","IN","39.648251","-86.28509","-5","0" +"46184","Whiteland","IN","39.557799","-86.08543","-5","0" +"46186","Wilkinson","IN","39.894667","-85.62657","-5","0" +"46201","Indianapolis","IN","39.775125","-86.10839","-5","0" +"46202","Indianapolis","IN","39.782842","-86.15673","-5","0" +"46203","Indianapolis","IN","39.742593","-86.11766","-5","0" +"46204","Indianapolis","IN","39.771743","-86.15598","-5","0" +"46205","Indianapolis","IN","39.824858","-86.13817","-5","0" +"46206","Indianapolis","IN","39.761293","-86.161336","-5","0" +"46207","Indianapolis","IN","39.767293","-86.160616","-5","0" +"46208","Indianapolis","IN","39.820708","-86.1713","-5","0" +"46209","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46211","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46214","Indianapolis","IN","39.792993","-86.28575","-5","0" +"46216","Indianapolis","IN","39.857639","-86.00948","-5","0" +"46217","Indianapolis","IN","39.668795","-86.1833","-5","0" +"46218","Indianapolis","IN","39.805841","-86.10175","-5","0" +"46219","Indianapolis","IN","39.78001","-86.04889","-5","0" +"46220","Indianapolis","IN","39.866913","-86.12323","-5","0" +"46221","Indianapolis","IN","39.719444","-86.22183","-5","0" +"46222","Indianapolis","IN","39.786793","-86.21093","-5","0" +"46223","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46224","Indianapolis","IN","39.795593","-86.25409","-5","0" +"46225","Indianapolis","IN","39.746993","-86.15903","-5","0" +"46226","Indianapolis","IN","39.83729","-86.05378","-5","0" +"46227","Indianapolis","IN","39.678495","-86.12973","-5","0" +"46228","Indianapolis","IN","39.849474","-86.20448","-5","0" +"46229","Indianapolis","IN","39.795025","-85.97356","-5","0" +"46230","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46231","Indianapolis","IN","39.71962","-86.33121","-5","0" +"46234","Indianapolis","IN","39.797622","-86.32493","-5","0" +"46235","Indianapolis","IN","39.835369","-85.98635","-5","0" +"46236","Indianapolis","IN","39.888225","-85.97041","-5","0" +"46237","Indianapolis","IN","39.67859","-86.08634","-5","0" +"46239","Indianapolis","IN","39.732943","-85.99903","-5","0" +"46240","Indianapolis","IN","39.902039","-86.12948","-5","0" +"46241","Indianapolis","IN","39.736844","-86.25214","-5","0" +"46242","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46243","Washington","IN","39.779741","-86.332995","-5","0" +"46244","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46247","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46249","Indianapolis","IN","39.858989","-86.006082","-5","0" +"46250","Indianapolis","IN","39.905689","-86.06733","-5","0" +"46251","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46253","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46254","Indianapolis","IN","39.844024","-86.26464","-5","0" +"46255","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46256","Indianapolis","IN","39.907838","-86.01405","-5","0" +"46259","Indianapolis","IN","39.651145","-85.98073","-5","0" +"46260","Indianapolis","IN","39.898107","-86.18232","-5","0" +"46266","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46268","Indianapolis","IN","39.897548","-86.22546","-5","0" +"46274","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46275","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46277","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46278","Indianapolis","IN","39.89792","-86.28619","-5","0" +"46280","Indianapolis","IN","39.939102","-86.13831","-5","0" +"46282","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46283","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46285","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46290","Indianapolis","IN","39.934949","-86.16262","-5","0" +"46291","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46295","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46298","Indianapolis","IN","39.779492","-86.132837","-5","0" +"46301","Beverly Shores","IN","41.687414","-86.9797","-6","1" +"46302","Boone Grove","IN","41.354186","-87.130431","-6","1" +"46303","Cedar Lake","IN","41.36959","-87.44849","-6","1" +"46304","Chesterton","IN","41.616263","-87.05883","-6","1" +"46305","Granger","IN","41.74486","-86.177059","-5","0" +"46307","Crown Point","IN","41.418873","-87.34298","-6","1" +"46308","Crown Point","IN","41.461543","-87.372779","-6","1" +"46310","Demotte","IN","41.179017","-87.24265","-6","1" +"46311","Dyer","IN","41.491377","-87.51022","-6","1" +"46312","East Chicago","IN","41.639735","-87.46084","-6","1" +"46319","Griffith","IN","41.527235","-87.42458","-6","1" +"46320","Hammond","IN","41.610035","-87.50574","-6","1" +"46321","Munster","IN","41.551457","-87.50143","-6","1" +"46322","Highland","IN","41.549851","-87.45806","-6","1" +"46323","Hammond","IN","41.587718","-87.45528","-6","1" +"46324","Hammond","IN","41.583535","-87.50391","-6","1" +"46325","Hammond","IN","41.461543","-87.372779","-6","1" +"46327","Hammond","IN","41.634385","-87.50911","-6","1" +"46332","Washington","IN","39.77127","-86.373314","-5","0" +"46340","Hanna","IN","41.397147","-86.76103","-6","1" +"46341","Hebron","IN","41.32374","-87.20898","-6","1" +"46342","Hobart","IN","41.533786","-87.26403","-6","1" +"46345","Kingsbury","IN","41.526628","-86.70041","-6","1" +"46346","Kingsford Heights","IN","41.479757","-86.6925","-6","1" +"46347","Kouts","IN","41.305178","-87.01522","-6","1" +"46348","La Crosse","IN","41.316401","-86.87244","-6","1" +"46349","Lake Village","IN","41.111996","-87.43686","-6","1" +"46350","La Porte","IN","41.605749","-86.71983","-6","1" +"46352","La Porte","IN","41.498992","-86.709883","-6","1" +"46355","Leroy","IN","41.359415","-87.27081","-6","1" +"46356","Lowell","IN","41.269789","-87.41353","-6","1" +"46360","Michigan City","IN","41.707539","-86.87902","-6","1" +"46361","Michigan City","IN","41.70354","-86.915077","-6","1" +"46365","Mill Creek","IN","41.598294","-86.53889","-6","1" +"46366","North Judson","IN","41.212184","-86.77019","-5","0" +"46368","Portage","IN","41.58327","-87.18154","-6","1" +"46369","Russiaville","IN","40.41663","-86.26679","-5","0" +"46371","Rolling Prairie","IN","41.677087","-86.60481","-6","1" +"46372","Roselawn","IN","41.143358","-87.322049","-6","1" +"46373","Saint John","IN","41.44862","-87.47404","-6","1" +"46374","San Pierre","IN","41.204744","-86.90009","-5","0" +"46375","Schererville","IN","41.492085","-87.4519","-6","1" +"46376","Schneider","IN","41.176325","-87.46426","-6","1" +"46377","Shelby","IN","41.191665","-87.34695","-6","1" +"46379","Sumava Resorts","IN","41.167119","-87.43781","-6","1" +"46380","Tefft","IN","41.194816","-86.968614","-6","1" +"46381","Thayer","IN","41.170584","-87.33142","-6","1" +"46382","Union Mills","IN","41.479916","-86.77328","-6","1" +"46383","Valparaiso","IN","41.47339","-87.03165","-6","1" +"46384","Valparaiso","IN","41.490545","-87.076094","-6","1" +"46385","Valparaiso","IN","41.484652","-87.11269","-6","1" +"46386","Porter","IN","41.428873","-87.170527","-6","1" +"46390","Wanatah","IN","41.420078","-86.88131","-6","1" +"46391","Westville","IN","41.550192","-86.91068","-6","1" +"46392","Wheatfield","IN","41.186662","-87.05359","-6","1" +"46393","Wheeler","IN","41.510333","-87.17829","-6","1" +"46394","Whiting","IN","41.679185","-87.50015","-6","1" +"46401","Gary","IN","41.590686","-87.319937","-6","1" +"46402","Gary","IN","41.601086","-87.33681","-6","1" +"46403","Gary","IN","41.604654","-87.25695","-6","1" +"46404","Gary","IN","41.588636","-87.37271","-6","1" +"46405","Lake Station","IN","41.570086","-87.26447","-6","1" +"46406","Gary","IN","41.589135","-87.40962","-6","1" +"46407","Gary","IN","41.580469","-87.33646","-6","1" +"46408","Gary","IN","41.542536","-87.3581","-6","1" +"46409","Gary","IN","41.544736","-87.32716","-6","1" +"46410","Merrillville","IN","41.487369","-87.34024","-6","1" +"46411","Merrillville","IN","41.461543","-87.372779","-6","1" +"46415","Burlington","IN","40.479112","-86.397372","-5","0" +"46501","Argos","IN","41.224036","-86.24521","-5","0" +"46502","Atwood","IN","41.259773","-85.97379","-5","0" +"46504","Bourbon","IN","41.301049","-86.1114","-5","0" +"46506","Bremen","IN","41.450744","-86.1692","-5","0" +"46507","Bristol","IN","41.725061","-85.81792","-5","0" +"46508","Burket","IN","41.154441","-85.96915","-5","0" +"46510","Claypool","IN","41.12274","-85.88733","-5","0" +"46511","Culver","IN","41.218388","-86.42163","-5","0" +"46513","Donaldson","IN","41.361567","-86.44545","-5","0" +"46514","Elkhart","IN","41.707616","-85.97605","-5","0" +"46515","Elkhart","IN","41.641449","-85.938348","-5","0" +"46516","Elkhart","IN","41.676899","-85.96044","-5","0" +"46517","Elkhart","IN","41.646499","-85.96923","-5","0" +"46518","Madison","IN","39.580105","-86.308673","-5","0" +"46524","Etna Green","IN","41.291767","-86.03216","-5","0" +"46526","Goshen","IN","41.567559","-85.84885","-5","0" +"46527","Goshen","IN","41.597739","-85.858076","-5","0" +"46528","Goshen","IN","41.600649","-85.81902","-5","0" +"46530","Granger","IN","41.741872","-86.13717","-5","0" +"46531","Grovertown","IN","41.356991","-86.50975","-5","0" +"46532","Hamlet","IN","41.411513","-86.61127","-5","0" +"46534","Knox","IN","41.282822","-86.61613","-5","0" +"46535","Granger","IN","41.720636","-86.192003","-5","0" +"46536","Lakeville","IN","41.519839","-86.2795","-5","0" +"46537","Lapaz","IN","41.458188","-86.3076","-5","0" +"46538","Leesburg","IN","41.323642","-85.78997","-5","0" +"46539","Mentone","IN","41.168118","-86.01203","-5","0" +"46540","Middlebury","IN","41.685374","-85.69409","-5","0" +"46542","Milford","IN","41.408621","-85.86531","-5","0" +"46543","Millersburg","IN","41.525634","-85.68403","-5","0" +"46544","Mishawaka","IN","41.650672","-86.16002","-5","0" +"46545","Mishawaka","IN","41.681487","-86.16811","-5","0" +"46546","Mishawaka","IN","41.688432","-86.196485","-5","0" +"46550","Nappanee","IN","41.444183","-85.99829","-5","0" +"46552","New Carlisle","IN","41.708183","-86.50412","-5","0" +"46553","New Paris","IN","41.48922","-85.84083","-5","0" +"46554","North Liberty","IN","41.547845","-86.42047","-5","0" +"46555","North Webster","IN","41.328153","-85.6852","-5","0" +"46556","Notre Dame","IN","41.701415","-86.24498","-5","0" +"46561","Osceola","IN","41.672698","-86.07877","-5","0" +"46562","Pierceton","IN","41.213756","-85.70397","-5","0" +"46563","Plymouth","IN","41.347159","-86.32023","-5","0" +"46565","Shipshewana","IN","41.696334","-85.58665","-5","0" +"46566","Sidney","IN","41.105868","-85.74168","-5","0" +"46567","Syracuse","IN","41.411075","-85.736","-5","0" +"46570","Tippecanoe","IN","41.208493","-86.12107","-5","0" +"46571","Topeka","IN","41.565561","-85.54707","-5","0" +"46572","Tyner","IN","41.325513","-86.260569","-5","0" +"46573","Wakarusa","IN","41.538432","-86.04261","-5","0" +"46574","Walkerton","IN","41.472858","-86.49379","-5","0" +"46580","Warsaw","IN","41.2281","-85.85778","-5","0" +"46581","Warsaw","IN","41.239365","-85.864267","-5","0" +"46582","Warsaw","IN","41.281518","-85.81927","-5","0" +"46590","Winona Lake","IN","41.22163","-85.81795","-5","0" +"46595","Wyatt","IN","41.526405","-86.17013","-5","0" +"46601","South Bend","IN","41.671197","-86.25253","-5","0" +"46604","South Bend","IN","41.664198","-86.221805","-5","0" +"46612","South Bend","IN","41.628483","-86.234589","-5","0" +"46613","South Bend","IN","41.654547","-86.25043","-5","0" +"46614","South Bend","IN","41.626588","-86.24804","-5","0" +"46615","South Bend","IN","41.671848","-86.21105","-5","0" +"46616","South Bend","IN","41.69248","-86.26514","-5","0" +"46617","South Bend","IN","41.684504","-86.23576","-5","0" +"46619","South Bend","IN","41.667797","-86.31341","-5","0" +"46620","South Bend","IN","41.596769","-86.292991","-5","0" +"46624","South Bend","IN","41.733223","-86.283278","-5","0" +"46626","South Bend","IN","41.677397","-86.252506","-5","0" +"46628","South Bend","IN","41.700776","-86.30357","-5","0" +"46629","South Bend","IN","41.672543","-86.27329","-5","0" +"46634","South Bend","IN","41.596769","-86.292991","-5","0" +"46635","South Bend","IN","41.708505","-86.20906","-5","0" +"46637","South Bend","IN","41.73104","-86.24391","-5","0" +"46660","South Bend","IN","41.596769","-86.292991","-5","0" +"46671","Topeka","IN","41.532773","-85.539454","-5","0" +"46680","South Bend","IN","41.596769","-86.292991","-5","0" +"46692","Noble","IN","40.752777","-85.744328","-5","0" +"46696","Franklin","IN","41.156891","-86.604952","-5","0" +"46699","South Bend","IN","41.596769","-86.292991","-5","0" +"46701","Albion","IN","41.361895","-85.43989","-5","0" +"46702","Andrews","IN","40.838891","-85.62014","-5","0" +"46703","Angola","IN","41.656798","-85.0223","-5","0" +"46704","Arcola","IN","41.103797","-85.292474","-5","0" +"46705","Ashley","IN","41.523914","-85.06155","-5","0" +"46706","Auburn","IN","41.352638","-85.04792","-5","0" +"46710","Avilla","IN","41.353742","-85.24367","-5","0" +"46711","Berne","IN","40.660174","-84.94244","-5","0" +"46713","Bippus","IN","40.829196","-85.489198","-5","0" +"46714","Bluffton","IN","40.728816","-85.16565","-5","0" +"46720","Brimfield","IN","41.395275","-85.423462","-5","0" +"46721","Butler","IN","41.424095","-84.8726","-5","0" +"46723","Churubusco","IN","41.238825","-85.32693","-5","0" +"46725","Columbia City","IN","41.166034","-85.48313","-5","0" +"46730","Corunna","IN","41.44551","-85.15149","-5","0" +"46731","Craigville","IN","40.793562","-85.0974","-5","0" +"46732","Cromwell","IN","41.386918","-85.63924","-5","0" +"46733","Decatur","IN","40.831351","-84.93704","-5","0" +"46737","Fremont","IN","41.724694","-84.95619","-5","0" +"46738","Garrett","IN","41.334204","-85.13569","-5","0" +"46740","Geneva","IN","40.599769","-84.96856","-5","0" +"46741","Grabill","IN","41.202549","-84.93811","-5","0" +"46742","Hamilton","IN","41.544911","-84.89154","-5","0" +"46743","Harlan","IN","41.215338","-84.85575","-5","0" +"46745","Hoagland","IN","40.954897","-85.00759","-5","0" +"46746","Howe","IN","41.722976","-85.39367","-5","0" +"46747","Hudson","IN","41.556391","-85.15428","-5","0" +"46748","Huntertown","IN","41.243248","-85.16711","-5","0" +"46750","Huntington","IN","40.872261","-85.49061","-5","0" +"46755","Kendallville","IN","41.449897","-85.26765","-5","0" +"46759","Keystone","IN","40.598916","-85.17871","-5","0" +"46760","Kimmell","IN","41.359626","-85.56204","-5","0" +"46761","Lagrange","IN","41.634457","-85.35825","-5","0" +"46763","Laotto","IN","41.28867","-85.22236","-5","0" +"46764","Larwill","IN","41.209244","-85.6322","-5","0" +"46765","Leo","IN","41.219699","-85.02486","-5","0" +"46766","Liberty Center","IN","40.708804","-85.29184","-5","0" +"46767","Ligonier","IN","41.464213","-85.59288","-5","0" +"46768","Plainfield","IN","39.712549","-86.370409","-5","0" +"46769","Linn Grove","IN","40.74532","-84.937926","-5","0" +"46770","Markle","IN","40.852768","-85.30702","-5","0" +"46771","Mongo","IN","41.665489","-85.267567","-5","0" +"46772","Monroe","IN","40.736015","-84.92161","-5","0" +"46773","Monroeville","IN","40.988714","-84.87284","-5","0" +"46774","New Haven","IN","41.081548","-84.98664","-5","0" +"46776","Orland","IN","41.732206","-85.16794","-5","0" +"46777","Ossian","IN","40.880397","-85.15936","-5","0" +"46778","Petroleum","IN","40.611419","-85.152604","-5","0" +"46779","Pleasant Lake","IN","41.578442","-85.03134","-5","0" +"46780","Pleasant Mills","IN","40.74532","-84.937926","-5","0" +"46781","Poneto","IN","40.641626","-85.24984","-5","0" +"46782","Preble","IN","40.83204","-85.005402","-5","0" +"46783","Roanoke","IN","40.967646","-85.34315","-5","0" +"46784","Rome City","IN","41.493637","-85.37745","-5","0" +"46785","Saint Joe","IN","41.317967","-84.89306","-5","0" +"46786","South Milford","IN","41.536899","-85.319241","-5","0" +"46787","South Whitley","IN","41.080236","-85.62796","-5","0" +"46788","Spencerville","IN","41.267553","-84.93525","-5","0" +"46789","Stroh","IN","41.583493","-85.199186","-5","0" +"46791","Uniondale","IN","40.830096","-85.24399","-5","0" +"46792","Warren","IN","40.683261","-85.43218","-5","0" +"46793","Waterloo","IN","41.441775","-85.01837","-5","0" +"46794","Wawaka","IN","41.462326","-85.45882","-5","0" +"46795","Wolcottville","IN","41.551546","-85.35463","-5","0" +"46796","Wolflake","IN","41.336115","-85.500246","-5","0" +"46797","Woodburn","IN","41.129274","-84.86982","-5","0" +"46798","Yoder","IN","40.942397","-85.23342","-5","0" +"46799","Zanesville","IN","40.916397","-85.28232","-5","0" +"46801","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46802","Fort Wayne","IN","41.071681","-85.15101","-5","0" +"46803","Fort Wayne","IN","41.070498","-85.10706","-5","0" +"46804","Fort Wayne","IN","41.054247","-85.23878","-5","0" +"46805","Fort Wayne","IN","41.098248","-85.12061","-5","0" +"46806","Fort Wayne","IN","41.048148","-85.11114","-5","0" +"46807","Fort Wayne","IN","41.046848","-85.14481","-5","0" +"46808","Fort Wayne","IN","41.094348","-85.16151","-5","0" +"46809","Fort Wayne","IN","41.023147","-85.1826","-5","0" +"46814","Fort Wayne","IN","41.044502","-85.30984","-5","0" +"46815","Fort Wayne","IN","41.105691","-85.06509","-5","0" +"46816","Fort Wayne","IN","41.006281","-85.0692","-5","0" +"46818","Fort Wayne","IN","41.148298","-85.22159","-5","0" +"46819","Fort Wayne","IN","40.993914","-85.14262","-5","0" +"46825","Fort Wayne","IN","41.150677","-85.12181","-5","0" +"46835","Fort Wayne","IN","41.138599","-85.05941","-5","0" +"46845","Fort Wayne","IN","41.200465","-85.10219","-5","0" +"46848","Huntertown","IN","41.221366","-85.172053","-5","0" +"46850","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46851","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46852","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46853","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46854","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46855","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46856","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46857","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46858","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46859","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46860","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46861","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46862","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46863","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46864","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46865","Fort Wayne","IN","41.126298","-85.090669","-5","0" +"46866","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46867","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46868","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46869","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46885","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46891","Fort Wayne","IN","41.018247","-85.148284","-5","0" +"46895","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46896","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46897","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46898","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46899","Fort Wayne","IN","41.093763","-85.070713","-5","0" +"46901","Kokomo","IN","40.501576","-86.14677","-5","0" +"46902","Kokomo","IN","40.450623","-86.12127","-5","0" +"46903","Kokomo","IN","40.469625","-86.11894","-5","0" +"46904","Kokomo","IN","40.469625","-86.11894","-5","0" +"46910","Akron","IN","41.040643","-86.03829","-5","0" +"46911","Amboy","IN","40.614885","-85.93863","-5","0" +"46912","Athens","IN","41.040988","-86.206925","-5","0" +"46913","Bringhurst","IN","40.507086","-86.50127","-5","0" +"46914","Bunker Hill","IN","40.646736","-86.09952","-5","0" +"46915","Burlington","IN","40.495181","-86.394248","-5","0" +"46916","Burrows","IN","40.584272","-86.573952","-5","0" +"46917","Camden","IN","40.626913","-86.475","-5","0" +"46919","Converse","IN","40.580773","-85.86648","-5","0" +"46920","Cutler","IN","40.472125","-86.47781","-5","0" +"46921","Deedsville","IN","40.911001","-86.10052","-5","0" +"46922","Delong","IN","41.040988","-86.206925","-5","0" +"46923","Delphi","IN","40.597574","-86.65297","-5","0" +"46926","Denver","IN","40.873913","-86.06339","-5","0" +"46928","Fairmount","IN","40.412026","-85.65476","-5","0" +"46929","Flora","IN","40.542108","-86.497","-5","0" +"46930","Fowlerton","IN","40.409668","-85.57179","-5","0" +"46931","Fulton","IN","40.947157","-86.26393","-5","0" +"46932","Galveston","IN","40.593036","-86.23191","-5","0" +"46933","Gas City","IN","40.48684","-85.60772","-5","0" +"46935","Grass Creek","IN","41.040988","-86.206925","-5","0" +"46936","Greentown","IN","40.482338","-85.94279","-5","0" +"46937","Hemlock","IN","40.418662","-86.018139","-5","0" +"46938","Jonesboro","IN","40.468157","-85.63456","-5","0" +"46939","Kewanna","IN","41.007625","-86.4016","-5","0" +"46940","La Fontaine","IN","40.680911","-85.72135","-5","0" +"46941","Lagro","IN","40.832028","-85.70333","-5","0" +"46942","Lake Cicott","IN","40.736111","-86.37341","-5","0" +"46943","Laketon","IN","40.974439","-85.83873","-5","0" +"46945","Leiters Ford","IN","41.040988","-86.206925","-5","0" +"46946","Liberty Mills","IN","41.035728","-85.73528","-5","0" +"46947","Logansport","IN","40.754787","-86.36684","-5","0" +"46950","Lucerne","IN","40.882776","-86.38446","-5","0" +"46951","Macy","IN","40.952117","-86.1172","-5","0" +"46952","Marion","IN","40.58119","-85.66324","-5","0" +"46953","Marion","IN","40.53089","-85.65922","-5","0" +"46957","Matthews","IN","40.387885","-85.49905","-5","0" +"46958","Mexico","IN","40.820851","-86.11735","-5","0" +"46959","Miami","IN","40.614644","-86.10749","-5","0" +"46960","Monterey","IN","41.159868","-86.50246","-5","0" +"46961","New Waverly","IN","40.765286","-86.1918","-5","0" +"46962","North Manchester","IN","40.996628","-85.7758","-5","0" +"46965","Oakford","IN","40.412741","-86.101484","-5","0" +"46966","Harrison","IN","41.046274","-86.563025","-5","0" +"46967","Onward","IN","40.694298","-86.204238","-5","0" +"46968","Ora","IN","41.172438","-86.55239","-5","0" +"46970","Peru","IN","40.753091","-86.07185","-5","0" +"46971","Grissom AFB","IN","40.780955","-86.016441","-5","0" +"46974","Roann","IN","40.935304","-85.92906","-5","0" +"46975","Rochester","IN","41.073678","-86.23521","-5","0" +"46977","Rockfield","IN","40.584272","-86.573952","-5","0" +"46978","Royal Center","IN","40.860779","-86.50183","-5","0" +"46979","Russiaville","IN","40.427588","-86.26918","-5","0" +"46980","Servia","IN","40.848927","-85.792501","-5","0" +"46982","Silver Lake","IN","41.054969","-85.90441","-5","0" +"46984","Somerset","IN","40.671369","-85.828846","-5","0" +"46985","Star City","IN","40.950873","-86.57394","-5","0" +"46986","Swayzee","IN","40.504346","-85.82678","-5","0" +"46987","Sweetser","IN","40.569731","-85.76697","-5","0" +"46988","Twelve Mile","IN","40.870115","-86.23359","-5","0" +"46989","Upland","IN","40.457599","-85.49089","-5","0" +"46990","Urbana","IN","40.898561","-85.7457","-5","0" +"46991","Van Buren","IN","40.620755","-85.50548","-5","0" +"46992","Wabash","IN","40.795068","-85.82953","-5","0" +"46994","Walton","IN","40.668348","-86.24943","-5","0" +"46995","West Middleton","IN","40.442117","-86.215482","-5","0" +"46996","Winamac","IN","41.048063","-86.64799","-5","0" +"46998","Young America","IN","40.569059","-86.34952","-5","0" +"47001","Aurora","IN","39.060204","-84.93094","-5","0" +"47003","West College Corner","IN","39.567147","-84.82042","-5","0" +"47006","Batesville","IN","39.291624","-85.21961","-5","0" +"47010","Bath","IN","39.518217","-84.82728","-5","0" +"47011","Bennington","IN","38.848761","-85.07263","-5","0" +"47012","Brookville","IN","39.43115","-84.99568","-5","0" +"47016","Cedar Grove","IN","39.37427","-84.91113","-5","0" +"47017","Cross Plains","IN","38.93049","-85.19406","-5","0" +"47018","Dillsboro","IN","38.992471","-85.06601","-5","0" +"47019","East Enterprise","IN","38.881346","-84.94437","-5","0" +"47020","Florence","IN","38.813326","-84.94113","-5","0" +"47021","Friendship","IN","38.966859","-85.1453","-5","0" +"47022","Guilford","IN","39.206203","-84.94922","-5","0" +"47023","Holton","IN","39.07308","-85.38747","-5","0" +"47024","Laurel","IN","39.491509","-85.19242","-5","0" +"47025","Lawrenceburg","IN","39.129059","-84.85887","-5","0" +"47030","Metamora","IN","39.428752","-85.13141","-5","0" +"47031","Milan","IN","39.126201","-85.14049","-5","0" +"47032","Moores Hill","IN","39.075691","-85.06057","-5","0" +"47033","Morris","IN","39.281429","-85.1739","-5","0" +"47034","Napoleon","IN","39.205405","-85.32865","-5","0" +"47035","New Trenton","IN","39.310292","-84.90196","-5","0" +"47036","Oldenburg","IN","39.382381","-85.24073","-5","0" +"47037","Osgood","IN","39.1548","-85.30949","-5","0" +"47038","Patriot","IN","38.855749","-84.83861","-5","0" +"47039","Pierceville","IN","39.111625","-85.255114","-5","0" +"47040","Rising Sun","IN","38.944426","-84.91227","-5","0" +"47041","Sunman","IN","39.240684","-85.08587","-5","0" +"47042","Versailles","IN","39.035173","-85.26017","-5","0" +"47043","Vevay","IN","38.788449","-85.06618","-5","0" +"47045","Jefferson","IN","38.77905","-84.99462","-5","0" +"47048","Bloomington","IN","39.155801","-86.516419","-5","0" +"47060","West Harrison","IN","39.288178","-84.87774","-5","0" +"47070","Lovett","IN","38.897246","-85.726384","-5","0" +"47093","Jefferson","IN","38.762649","-85.041244","-5","0" +"47102","Austin","IN","38.749542","-85.80264","-5","0" +"47104","Bethlehem","IN","38.539899","-85.421753","-5","1" +"47106","Borden","IN","38.457573","-85.91774","-5","1" +"47107","Bradford","IN","38.190314","-86.115257","-5","1" +"47108","Campbellsburg","IN","38.648032","-86.26288","-5","0" +"47110","Central","IN","38.096971","-86.172327","-5","1" +"47111","Charlestown","IN","38.453813","-85.65443","-5","1" +"47112","Corydon","IN","38.208144","-86.12978","-5","1" +"47114","Crandall","IN","38.287227","-86.06805","-5","1" +"47115","Depauw","IN","38.350106","-86.22652","-5","1" +"47116","Eckerty","IN","38.328419","-86.61356","-5","0" +"47117","Elizabeth","IN","38.12173","-85.97453","-5","1" +"47118","English","IN","38.311323","-86.47439","-5","0" +"47119","Floyds Knobs","IN","38.345815","-85.89095","-5","1" +"47120","Fredericksburg","IN","38.435326","-86.18702","-5","0" +"47122","Georgetown","IN","38.300674","-85.96698","-5","1" +"47123","Grantsburg","IN","38.284524","-86.46103","-5","0" +"47124","Greenville","IN","38.363632","-85.99239","-5","1" +"47125","Hardinsburg","IN","38.461255","-86.2983","-5","0" +"47126","Henryville","IN","38.544777","-85.7737","-5","1" +"47128","Madison","IN","38.557243","-86.261089","-5","0" +"47129","Clarksville","IN","38.303945","-85.76787","-5","1" +"47130","Jeffersonville","IN","38.309105","-85.72035","-5","1" +"47131","Jeffersonville","IN","38.437021","-85.704973","-5","1" +"47132","Jeffersonville","IN","38.286819","-85.732062","-5","1" +"47133","Jeffersonville","IN","38.286819","-85.732062","-5","1" +"47134","Jeffersonville","IN","38.286819","-85.732062","-5","1" +"47135","Laconia","IN","38.038838","-86.07212","-5","1" +"47136","Lanesville","IN","38.237852","-85.96834","-5","1" +"47137","Leavenworth","IN","38.200101","-86.36988","-5","0" +"47138","Lexington","IN","38.678365","-85.6097","-5","0" +"47139","Little York","IN","38.700523","-85.90405","-5","0" +"47140","Marengo","IN","38.37482","-86.35313","-5","0" +"47141","Marysville","IN","38.543388","-85.60373","-5","1" +"47142","Mauckport","IN","38.079482","-86.23083","-5","1" +"47143","Memphis","IN","38.473919","-85.76702","-5","1" +"47144","Jeffersonville","IN","38.286819","-85.732062","-5","1" +"47145","Milltown","IN","38.344403","-86.29997","-5","0" +"47146","Mount Saint Francis","IN","38.298486","-85.896961","-5","1" +"47147","Nabb","IN","38.591735","-85.53195","-5","1" +"47150","New Albany","IN","38.30382","-85.82522","-5","1" +"47151","New Albany","IN","38.298486","-85.896961","-5","1" +"47160","New Middletown","IN","38.165541","-86.05223","-5","1" +"47161","New Salisbury","IN","38.312878","-86.09478","-5","1" +"47162","New Washington","IN","38.548693","-85.49124","-5","1" +"47163","Otisco","IN","38.544512","-85.66831","-5","1" +"47164","Palmyra","IN","38.410145","-86.09643","-5","1" +"47165","Pekin","IN","38.49903","-86.01293","-5","0" +"47166","Ramsey","IN","38.313345","-86.16656","-5","1" +"47167","Salem","IN","38.605039","-86.08928","-5","0" +"47169","Washington","IN","38.609733","-86.055202","-5","0" +"47170","Scottsburg","IN","38.684426","-85.80304","-5","0" +"47172","Sellersburg","IN","38.387722","-85.75936","-5","1" +"47174","Sulphur","IN","38.210303","-86.46657","-5","0" +"47175","Taswell","IN","38.355935","-86.55656","-5","0" +"47177","Underwood","IN","38.603451","-85.76711","-5","1" +"47190","Jeffersonville","IN","38.437021","-85.704973","-5","1" +"47199","Jeffersonville","IN","38.286819","-85.732062","-5","1" +"47201","Columbus","IN","39.185341","-85.9456","-5","0" +"47202","Columbus","IN","39.192972","-85.885168","-5","0" +"47203","Columbus","IN","39.232235","-85.86356","-5","0" +"47220","Brownstown","IN","38.876537","-86.04252","-5","0" +"47223","Butlerville","IN","39.049336","-85.49272","-5","0" +"47224","Canaan","IN","38.896209","-85.21936","-5","0" +"47225","Clarksburg","IN","39.424072","-85.347677","-5","0" +"47226","Clifford","IN","39.28249","-85.86852","-5","0" +"47227","Commiskey","IN","38.872926","-85.64367","-5","0" +"47228","Cortland","IN","38.974458","-85.962761","-5","0" +"47229","Crothersville","IN","38.802486","-85.84894","-5","0" +"47230","Deputy","IN","38.802781","-85.62922","-5","0" +"47231","Dupont","IN","38.8937","-85.5097","-5","0" +"47232","Elizabethtown","IN","39.129171","-85.8013","-5","0" +"47234","Flat Rock","IN","39.370375","-85.78008","-5","0" +"47235","Freetown","IN","38.982358","-86.13561","-5","0" +"47236","Grammer","IN","39.152228","-85.726135","-5","0" +"47240","Greensburg","IN","39.333248","-85.47579","-5","0" +"47241","Bedford","IN","38.873216","-86.518002","-5","0" +"47243","Hanover","IN","38.699654","-85.47234","-5","0" +"47244","Hartsville","IN","39.246458","-85.70234","-5","0" +"47245","Hayden","IN","39.001301","-85.619906","-5","0" +"47246","Hope","IN","39.297144","-85.76741","-5","0" +"47247","Jonesville","IN","39.0601","-85.88879","-5","0" +"47249","Kurtz","IN","38.897974","-86.056681","-5","0" +"47250","Madison","IN","38.787175","-85.38031","-5","0" +"47256","North Vernon","IN","39.037187","-85.617307","-5","0" +"47257","North Vernon","IN","39.005651","-85.611994","-5","0" +"47260","Medora","IN","38.846345","-86.18327","-5","0" +"47261","Millhousen","IN","39.292004","-85.491788","-5","0" +"47262","Nebraska","IN","39.001301","-85.619906","-5","0" +"47263","New Point","IN","39.308947","-85.33006","-5","0" +"47264","Norman","IN","38.962997","-86.27469","-5","0" +"47265","North Vernon","IN","39.011225","-85.63325","-5","0" +"47270","Paris Crossing","IN","38.838706","-85.71245","-5","0" +"47272","Saint Paul","IN","39.419641","-85.62782","-5","0" +"47273","Scipio","IN","39.085027","-85.7316","-5","0" +"47274","Seymour","IN","38.958688","-85.89917","-5","0" +"47280","Taylorsville","IN","39.296605","-85.95025","-5","0" +"47281","Vallonia","IN","38.805185","-86.09283","-5","0" +"47282","Vernon","IN","38.982269","-85.60914","-5","0" +"47283","Westport","IN","39.171916","-85.58067","-5","0" +"47288","Cayuga","IN","39.952253","-87.453249","-5","0" +"47302","Muncie","IN","40.164393","-85.38114","-5","0" +"47303","Muncie","IN","40.221103","-85.37602","-5","0" +"47304","Muncie","IN","40.215398","-85.43636","-5","0" +"47305","Muncie","IN","40.192293","-85.38494","-5","0" +"47306","Muncie","IN","40.202293","-85.408221","-5","0" +"47307","Muncie","IN","40.162093","-85.442772","-5","0" +"47308","Muncie","IN","40.227938","-85.396685","-5","0" +"47317","Kennard","IN","39.902534","-85.520201","-5","0" +"47320","Albany","IN","40.290747","-85.25293","-5","0" +"47322","Bentonville","IN","39.656994","-85.167996","-5","0" +"47324","Boston","IN","39.757864","-84.848442","-5","0" +"47325","Brownsville","IN","39.685481","-85.02454","-5","0" +"47326","Bryant","IN","40.548194","-84.96724","-5","0" +"47327","Cambridge City","IN","39.816703","-85.17784","-5","0" +"47330","Centerville","IN","39.802089","-85.00994","-5","0" +"47331","Connersville","IN","39.644794","-85.14929","-5","0" +"47334","Daleville","IN","40.117139","-85.54205","-5","0" +"47335","Dublin","IN","39.812688","-85.204359","-5","0" +"47336","Dunkirk","IN","40.38509","-85.2115","-5","0" +"47337","Dunreith","IN","39.802917","-85.43806","-5","0" +"47338","Eaton","IN","40.339779","-85.34956","-5","0" +"47339","Economy","IN","39.97566","-85.10107","-5","0" +"47340","Farmland","IN","40.184743","-85.13","-5","0" +"47341","Fountain City","IN","39.963113","-84.9142","-5","0" +"47342","Gaston","IN","40.320458","-85.50656","-5","0" +"47344","Greensboro","IN","39.876764","-85.46546","-5","0" +"47345","Greens Fork","IN","39.883711","-85.04618","-5","0" +"47346","Hagerstown","IN","39.918857","-85.16333","-5","0" +"47348","Hartford City","IN","40.449883","-85.36442","-5","0" +"47351","Kennard","IN","39.904323","-85.5198","-5","0" +"47352","Lewisville","IN","39.802646","-85.35541","-5","0" +"47353","Liberty","IN","39.622812","-84.92284","-5","0" +"47354","Losantville","IN","40.043267","-85.20909","-5","0" +"47355","Lynn","IN","40.042138","-84.93926","-5","0" +"47356","Middletown","IN","40.035904","-85.52036","-5","0" +"47357","Milton","IN","39.773709","-85.14847","-5","0" +"47358","Modoc","IN","40.043409","-85.11692","-5","0" +"47359","Montpelier","IN","40.550511","-85.28118","-5","0" +"47360","Mooreland","IN","40.00296","-85.25831","-5","0" +"47361","Mount Summit","IN","40.004196","-85.38641","-5","0" +"47362","New Castle","IN","39.92698","-85.3697","-5","0" +"47366","New Lisbon","IN","39.931785","-85.398625","-5","0" +"47367","Oakville","IN","40.079197","-85.389978","-5","0" +"47368","Parker City","IN","40.187403","-85.20421","-5","0" +"47369","Pennville","IN","40.495879","-85.14637","-5","0" +"47370","Pershing","IN","39.861314","-85.147437","-5","0" +"47371","Portland","IN","40.419489","-84.96936","-5","0" +"47373","Redkey","IN","40.34703","-85.15474","-5","0" +"47374","Richmond","IN","39.831061","-84.89067","-5","0" +"47375","Richmond","IN","39.860417","-85.015983","-5","0" +"47380","Ridgeville","IN","40.285505","-85.02063","-5","0" +"47381","Salamonia","IN","40.382778","-84.86603","-5","0" +"47382","Saratoga","IN","40.236181","-84.91901","-5","0" +"47383","Selma","IN","40.168528","-85.2698","-5","0" +"47384","Shirley","IN","39.90952","-85.56716","-5","0" +"47385","Spiceland","IN","39.832904","-85.44117","-5","0" +"47386","Springport","IN","40.058307","-85.38566","-5","0" +"47387","Straughn","IN","39.838735","-85.28409","-5","0" +"47388","Sulphur Springs","IN","40.005999","-85.44341","-5","0" +"47390","Union City","IN","40.212425","-84.83422","-5","0" +"47392","Webster","IN","39.903236","-84.94334","-5","0" +"47393","Williamsburg","IN","39.953627","-84.99542","-5","0" +"47394","Winchester","IN","40.173141","-84.97922","-5","0" +"47395","Lynn","IN","40.05085","-84.938878","-5","0" +"47396","Yorktown","IN","40.186603","-85.5056","-5","0" +"47398","Hartford City","IN","40.461432","-85.377969","-5","0" +"47401","Bloomington","IN","39.131576","-86.49743","-5","0" +"47402","Bloomington","IN","39.173234","-86.501543","-5","0" +"47403","Bloomington","IN","39.121719","-86.57409","-5","0" +"47404","Bloomington","IN","39.188246","-86.56779","-5","0" +"47405","Bloomington","IN","39.173447","-86.515145","-5","0" +"47406","Bloomington","IN","39.173597","-86.51676","-5","0" +"47407","Bloomington","IN","39.173234","-86.501543","-5","0" +"47408","Bloomington","IN","39.183164","-86.50293","-5","0" +"47412","Evansville","IN","37.975102","-87.626938","-6","1" +"47420","Avoca","IN","38.912898","-86.55097","-5","0" +"47421","Bedford","IN","38.865549","-86.46897","-5","0" +"47424","Bloomfield","IN","39.021657","-86.90202","-5","0" +"47426","Clear Creek","IN","39.173234","-86.501543","-5","0" +"47427","Coal City","IN","39.232338","-87.03271","-5","0" +"47429","Ellettsville","IN","39.245995","-86.62275","-5","0" +"47430","Fort Ritner","IN","38.773826","-86.28146","-5","0" +"47431","Freedom","IN","39.235092","-86.88719","-5","0" +"47432","French Lick","IN","38.507726","-86.62922","-5","0" +"47433","Gosport","IN","39.355692","-86.66247","-5","0" +"47434","Harrodsburg","IN","39.012984","-86.545732","-5","0" +"47435","Helmsburg","IN","39.196272","-86.230212","-5","0" +"47436","Heltonville","IN","38.978916","-86.4169","-5","0" +"47437","Huron","IN","38.722153","-86.670987","-5","0" +"47438","Jasonville","IN","39.160126","-87.19961","-5","0" +"47439","Koleen","IN","39.037144","-86.961577","-5","0" +"47441","Linton","IN","39.039636","-87.16987","-5","0" +"47443","Lyons","IN","38.96555","-87.09917","-5","0" +"47445","Midland","IN","39.125078","-87.19332","-5","0" +"47446","Mitchell","IN","38.733355","-86.49319","-5","0" +"47448","Nashville","IN","39.199357","-86.2395","-5","0" +"47449","Newberry","IN","38.926709","-87.0031","-5","0" +"47451","Oolitic","IN","38.896413","-86.52474","-5","0" +"47452","Orleans","IN","38.647931","-86.43438","-5","0" +"47453","Owensburg","IN","38.924067","-86.74308","-5","0" +"47454","Paoli","IN","38.533167","-86.48362","-5","0" +"47455","Patricksburg","IN","39.311243","-86.95343","-5","0" +"47456","Quincy","IN","39.448838","-86.73117","-5","0" +"47457","Scotland","IN","39.037144","-86.961577","-5","0" +"47458","Smithville","IN","39.173234","-86.501543","-5","0" +"47459","Solsberry","IN","39.110903","-86.74855","-5","0" +"47460","Spencer","IN","39.290029","-86.77844","-5","0" +"47462","Springville","IN","38.967187","-86.63699","-5","0" +"47463","Stanford","IN","39.085896","-86.6689","-5","0" +"47464","Stinesville","IN","39.298595","-86.6512","-5","0" +"47465","Switz City","IN","39.039348","-87.04871","-5","0" +"47467","Tunnelton","IN","38.768275","-86.34441","-5","0" +"47468","Unionville","IN","39.251349","-86.3935","-5","0" +"47469","West Baden Springs","IN","38.584248","-86.61296","-5","0" +"47470","Williams","IN","38.845709","-86.68869","-5","0" +"47471","Worthington","IN","39.123925","-86.9845","-5","0" +"47485","Lewis","IN","39.191057","-87.231182","-5","0" +"47488","Hamblen","IN","39.246268","-86.163826","-5","0" +"47490","Bloomington","IN","39.173234","-86.501543","-5","0" +"47501","Washington","IN","38.658196","-87.17619","-5","0" +"47512","Bicknell","IN","38.777038","-87.31447","-5","0" +"47513","Birdseye","IN","38.316017","-86.70118","-5","0" +"47514","Branchville","IN","38.137325","-86.58477","-5","0" +"47515","Bristow","IN","38.184046","-86.71714","-5","0" +"47516","Bruceville","IN","38.762261","-87.4228","-5","0" +"47519","Cannelburg","IN","38.619866","-86.98761","-5","0" +"47520","Cannelton","IN","37.934311","-86.67821","-5","0" +"47521","Celestine","IN","38.387935","-86.74717","-5","0" +"47522","Crane","IN","38.893458","-86.8507","-5","0" +"47523","Dale","IN","38.170876","-86.99889","-6","1" +"47524","Decker","IN","38.507039","-87.55539","-5","0" +"47525","Derby","IN","38.031757","-86.55613","-5","0" +"47527","Dubois","IN","38.473956","-86.77777","-5","0" +"47528","Edwardsport","IN","38.824546","-87.25186","-5","0" +"47529","Elnora","IN","38.869876","-87.08288","-5","0" +"47531","Evanston","IN","38.056909","-86.82196","-6","1" +"47532","Ferdinand","IN","38.22309","-86.86155","-5","0" +"47535","Freelandville","IN","38.867886","-87.30865","-5","0" +"47536","Fulda","IN","38.112396","-86.83649","-6","1" +"47537","Gentryville","IN","38.099889","-87.04073","-6","1" +"47541","Holland","IN","38.241887","-87.04145","-5","0" +"47542","Huntingburg","IN","38.302272","-86.96864","-5","0" +"47545","Ireland","IN","38.413906","-87.0006","-5","0" +"47546","Jasper","IN","38.408794","-86.93876","-5","0" +"47547","Jasper","IN","38.364749","-86.876173","-5","0" +"47549","Jasper","IN","38.364749","-86.876173","-5","0" +"47550","Lamar","IN","38.077016","-86.92258","-6","1" +"47551","Leopold","IN","38.127871","-86.558","-5","0" +"47552","Lincoln City","IN","38.118547","-86.99567","-6","1" +"47553","Loogootee","IN","38.702827","-86.89775","-5","0" +"47556","Mariah Hill","IN","38.16644","-86.917205","-6","1" +"47557","Monroe City","IN","38.588354","-87.34174","-5","0" +"47558","Montgomery","IN","38.660051","-87.04626","-5","0" +"47561","Oaktown","IN","38.864563","-87.44554","-5","0" +"47562","Odon","IN","38.837695","-86.98512","-5","0" +"47564","Otwell","IN","38.470473","-87.09905","-5","0" +"47567","Petersburg","IN","38.477037","-87.30217","-5","0" +"47568","Plainville","IN","38.791938","-87.13975","-5","0" +"47573","Ragsdale","IN","38.744136","-87.321357","-5","0" +"47574","Rome","IN","37.934212","-86.56537","-5","0" +"47575","Saint Anthony","IN","38.313717","-86.81523","-5","0" +"47576","Saint Croix","IN","38.19297","-86.60853","-5","0" +"47577","Saint Meinrad","IN","38.160168","-86.80978","-6","1" +"47578","Sandborn","IN","38.892783","-87.1913","-5","0" +"47579","Santa Claus","IN","38.115573","-86.91993","-6","1" +"47580","Schnellville","IN","38.345103","-86.75914","-5","0" +"47581","Shoals","IN","38.663011","-86.77554","-5","0" +"47584","Spurgeon","IN","38.248608","-87.24115","-5","0" +"47585","Stendal","IN","38.267827","-87.14299","-5","0" +"47586","Tell City","IN","37.971622","-86.73903","-5","0" +"47588","Troy","IN","38.012451","-86.79698","-6","1" +"47590","Velpen","IN","38.356658","-87.10155","-5","0" +"47591","Vincennes","IN","38.668827","-87.50791","-5","0" +"47596","Westphalia","IN","38.862609","-87.2247","-5","0" +"47597","Wheatland","IN","38.652821","-87.30088","-5","0" +"47598","Winslow","IN","38.384501","-87.20987","-5","0" +"47601","Boonville","IN","38.05732","-87.26579","-6","1" +"47610","Chandler","IN","38.047188","-87.39041","-6","1" +"47611","Chrisney","IN","38.022045","-87.05408","-6","1" +"47612","Cynthiana","IN","38.190517","-87.7024","-6","1" +"47613","Elberfeld","IN","38.170645","-87.42886","-6","1" +"47614","Folsomville","IN","38.130034","-87.163636","-6","1" +"47615","Grandview","IN","37.965531","-86.95436","-6","1" +"47616","Griffin","IN","38.218814","-87.92435","-6","1" +"47617","Hatfield","IN","37.903557","-87.249886","-6","1" +"47618","Inglefield","IN","37.997128","-87.574963","-6","1" +"47619","Lynnville","IN","38.199662","-87.31132","-6","1" +"47620","Mount Vernon","IN","37.940511","-87.88918","-6","1" +"47625","North Vernon","IN","39.00249","-85.625718","-5","0" +"47629","Newburgh","IN","38.06242","-87.245214","-6","1" +"47630","Newburgh","IN","37.958873","-87.37998","-6","1" +"47631","New Harmony","IN","38.117974","-87.91918","-6","1" +"47633","Poseyville","IN","38.168191","-87.78113","-6","1" +"47634","Richland","IN","37.93889","-87.19167","-6","1" +"47635","Rockport","IN","37.883451","-87.09771","-6","1" +"47637","Tennyson","IN","38.132339","-87.14259","-6","1" +"47638","Wadesville","IN","38.081681","-87.78055","-6","1" +"47639","Haubstadt","IN","38.187983","-87.5658","-6","1" +"47640","Hazleton","IN","38.484278","-87.5039","-6","1" +"47647","Buckskin","IN","38.215226","-87.42319","-6","1" +"47648","Fort Branch","IN","38.240456","-87.56035","-6","1" +"47649","Francisco","IN","38.343295","-87.44275","-6","1" +"47654","Mackey","IN","38.25312","-87.39205","-6","1" +"47660","Oakland City","IN","38.323439","-87.34145","-6","1" +"47665","Owensville","IN","38.287411","-87.72954","-6","1" +"47666","Patoka","IN","38.411923","-87.58462","-6","1" +"47667","Owensville","IN","38.27312","-87.692037","-6","1" +"47670","Princeton","IN","38.34841","-87.57478","-6","1" +"47671","Oxford","IN","40.519221","-87.255079","-5","0" +"47672","Cynthiana","IN","38.187432","-87.716121","-6","1" +"47683","Somerville","IN","38.278452","-87.37714","-6","1" +"47701","Evansville","IN","37.997128","-87.574963","-6","1" +"47702","Evansville","IN","37.997128","-87.574963","-6","1" +"47703","Evansville","IN","37.997128","-87.574963","-6","1" +"47704","Evansville","IN","37.997128","-87.574963","-6","1" +"47705","Evansville","IN","37.997128","-87.574963","-6","1" +"47706","Evansville","IN","37.997128","-87.574963","-6","1" +"47708","Evansville","IN","37.974642","-87.57349","-6","1" +"47710","Evansville","IN","37.999542","-87.57621","-6","1" +"47711","Evansville","IN","38.000442","-87.54178","-6","1" +"47712","Evansville","IN","37.966292","-87.63664","-6","1" +"47713","Evansville","IN","37.962542","-87.55796","-6","1" +"47714","Evansville","IN","37.959092","-87.52468","-6","1" +"47715","Evansville","IN","37.975476","-87.47506","-6","1" +"47716","Evansville","IN","37.997128","-87.574963","-6","1" +"47718","Jackson","IN","38.420839","-86.570962","-5","0" +"47719","Evansville","IN","37.997128","-87.574963","-6","1" +"47720","Evansville","IN","38.045951","-87.62723","-6","1" +"47721","Evansville","IN","37.978035","-87.600791","-6","1" +"47722","Evansville","IN","37.970192","-87.542014","-6","1" +"47724","Evansville","IN","37.997128","-87.574963","-6","1" +"47725","Evansville","IN","38.096771","-87.52112","-6","1" +"47727","Evansville","IN","38.031942","-87.538915","-6","1" +"47728","Evansville","IN","37.997128","-87.574963","-6","1" +"47729","Scott","IN","38.110995","-87.527249","-6","1" +"47730","Evansville","IN","37.997128","-87.574963","-6","1" +"47731","Evansville","IN","37.997128","-87.574963","-6","1" +"47732","Evansville","IN","37.997128","-87.574963","-6","1" +"47733","Evansville","IN","37.997128","-87.574963","-6","1" +"47734","Evansville","IN","37.997128","-87.574963","-6","1" +"47735","Evansville","IN","37.997128","-87.574963","-6","1" +"47736","Evansville","IN","37.997128","-87.574963","-6","1" +"47737","Evansville","IN","37.997128","-87.574963","-6","1" +"47739","Evansville","IN","37.997128","-87.574963","-6","1" +"47740","Evansville","IN","37.997128","-87.574963","-6","1" +"47741","Evansville","IN","37.997128","-87.574963","-6","1" +"47744","Evansville","IN","37.977492","-87.597316","-6","1" +"47747","Evansville","IN","37.997128","-87.574963","-6","1" +"47750","Evansville","IN","37.962292","-87.505512","-6","1" +"47765","New Market","IN","39.952416","-86.922974","-5","0" +"47801","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47802","Terre Haute","IN","39.393237","-87.3977","-5","0" +"47803","Terre Haute","IN","39.46706","-87.34452","-5","0" +"47804","Terre Haute","IN","39.495436","-87.39209","-5","0" +"47805","Terre Haute","IN","39.535285","-87.35222","-5","0" +"47807","Terre Haute","IN","39.470986","-87.39996","-5","0" +"47808","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47809","Terre Haute","IN","39.470986","-87.41107","-5","0" +"47811","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47812","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47813","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47814","Terre Haute","IN","39.433602","-87.410094","-5","0" +"47830","Bellmore","IN","39.779078","-87.221819","-5","0" +"47831","Blanford","IN","39.877847","-87.443566","-5","0" +"47832","Bloomingdale","IN","39.869467","-87.24589","-5","0" +"47833","Bowling Green","IN","39.360169","-86.99353","-5","0" +"47834","Brazil","IN","39.52503","-87.12738","-5","0" +"47836","Bridgeton","IN","39.647929","-87.17529","-5","0" +"47837","Carbon","IN","39.625607","-87.11502","-5","0" +"47838","Carlisle","IN","38.957093","-87.3793","-5","0" +"47840","Centerpoint","IN","39.406161","-87.06899","-5","0" +"47841","Clay City","IN","39.282127","-87.11557","-5","0" +"47842","Clinton","IN","39.66851","-87.43577","-5","0" +"47845","Coalmont","IN","39.387544","-87.090363","-5","0" +"47846","Cory","IN","39.377883","-87.20462","-5","0" +"47847","Dana","IN","39.830942","-87.47013","-5","0" +"47848","Dugger","IN","39.065547","-87.25714","-5","0" +"47849","Fairbanks","IN","39.193884","-87.5449","-5","0" +"47850","Farmersburg","IN","39.25182","-87.40974","-5","0" +"47851","Fontanet","IN","39.573663","-87.24536","-5","0" +"47852","Graysville","IN","39.080474","-87.449558","-5","0" +"47853","Harmony","IN","39.536856","-87.0721","-5","0" +"47854","Hillsdale","IN","39.819742","-87.41458","-5","0" +"47855","Hymera","IN","39.185497","-87.29997","-5","0" +"47856","Judson","IN","39.813543","-87.13635","-5","0" +"47857","Knightsville","IN","39.526913","-87.086882","-5","0" +"47858","Lewis","IN","39.255569","-87.23587","-5","0" +"47859","Marshall","IN","39.865058","-87.17504","-5","0" +"47860","Mecca","IN","39.725201","-87.33149","-5","0" +"47861","Merom","IN","39.061837","-87.56655","-5","0" +"47862","Montezuma","IN","39.783738","-87.35609","-5","0" +"47863","New Goshen","IN","39.580862","-87.46293","-5","0" +"47864","New Lebanon","IN","39.041245","-87.475747","-5","0" +"47865","Paxton","IN","39.020687","-87.39149","-5","0" +"47866","Pimento","IN","39.293977","-87.30983","-5","0" +"47868","Poland","IN","39.414547","-86.90202","-5","0" +"47869","Prairie Creek","IN","39.433602","-87.410094","-5","0" +"47870","Prairieton","IN","39.371187","-87.475871","-5","0" +"47871","Riley","IN","39.388638","-87.301367","-5","0" +"47872","Rockville","IN","39.758142","-87.1754","-5","0" +"47874","Rosedale","IN","39.625041","-87.27765","-5","0" +"47875","Saint Bernice","IN","39.877847","-87.443566","-5","0" +"47876","Saint Mary Of The Woods","IN","39.505935","-87.46156","-5","0" +"47878","Seelyville","IN","39.492838","-87.266549","-5","0" +"47879","Shelburn","IN","39.182707","-87.38029","-5","0" +"47880","Shepardsville","IN","39.600636","-87.419569","-5","0" +"47881","Staunton","IN","39.487119","-87.18939","-5","0" +"47882","Sullivan","IN","39.090479","-87.40667","-5","0" +"47884","Universal","IN","39.622536","-87.45451","-5","0" +"47885","West Terre Haute","IN","39.508235","-87.46511","-5","0" +"47895","Helt","IN","39.714267","-87.524376","-5","0" +"47901","Lafayette","IN","40.418585","-86.88975","-5","0" +"47902","Lafayette","IN","40.388656","-86.894908","-5","0" +"47903","Lafayette","IN","40.304402","-86.824468","-5","0" +"47904","Lafayette","IN","40.428735","-86.8768","-5","0" +"47905","Lafayette","IN","40.41836","-86.81847","-5","0" +"47906","West Lafayette","IN","40.461012","-86.93664","-5","0" +"47907","West Lafayette","IN","40.424923","-86.916215","-5","0" +"47909","Lafayette","IN","40.35589","-86.88972","-5","0" +"47916","Alamo","IN","39.983709","-87.05507","-5","0" +"47917","Ambia","IN","40.469643","-87.50098","-5","0" +"47918","Attica","IN","40.294316","-87.21957","-5","0" +"47920","Battle Ground","IN","40.543522","-86.81628","-5","0" +"47921","Boswell","IN","40.506071","-87.36849","-5","0" +"47922","Brook","IN","40.8685","-87.35899","-6","1" +"47923","Brookston","IN","40.605","-86.8894","-5","0" +"47924","Buck Creek","IN","40.487219","-86.76381","-5","0" +"47925","Buffalo","IN","40.882284","-86.74363","-5","0" +"47926","Burnettsville","IN","40.767098","-86.59362","-5","0" +"47928","Cayuga","IN","39.946144","-87.46611","-5","0" +"47929","Chalmers","IN","40.671905","-86.89189","-5","0" +"47930","Clarks Hill","IN","40.247657","-86.72533","-5","0" +"47932","Covington","IN","40.133867","-87.40081","-5","0" +"47933","Crawfordsville","IN","40.034554","-86.89143","-5","0" +"47934","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47935","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47936","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47937","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47938","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47939","Crawfordsville","IN","40.040014","-86.893614","-5","0" +"47940","Darlington","IN","40.118998","-86.76265","-5","0" +"47941","Dayton","IN","40.375691","-86.76703","-5","0" +"47942","Earl Park","IN","40.692374","-87.4346","-5","0" +"47943","Fair Oaks","IN","41.074738","-87.26193","-6","1" +"47944","Fowler","IN","40.617152","-87.32659","-5","0" +"47946","Francesville","IN","40.986799","-86.87659","-5","0" +"47948","Goodland","IN","40.773474","-87.28615","-6","1" +"47949","Hillsboro","IN","40.072123","-87.13698","-5","0" +"47950","Idaville","IN","40.794442","-86.65353","-5","0" +"47951","Kentland","IN","40.77759","-87.44607","-6","1" +"47952","Kingman","IN","39.968437","-87.29994","-5","0" +"47954","Ladoga","IN","39.903358","-86.80388","-5","0" +"47955","Linden","IN","40.19705","-86.88781","-5","0" +"47957","Medaryville","IN","41.083487","-86.87605","-5","0" +"47958","Mellott","IN","40.163921","-87.14796","-5","0" +"47959","Monon","IN","40.860496","-86.88963","-5","0" +"47960","Monticello","IN","40.777036","-86.75982","-5","0" +"47962","Montmorenci","IN","40.473159","-87.027571","-5","0" +"47963","Morocco","IN","40.960029","-87.44715","-6","1" +"47964","Mount Ayr","IN","40.952608","-87.29837","-6","1" +"47965","New Market","IN","39.950948","-86.92076","-5","0" +"47966","Newport","IN","39.885739","-87.4078","-5","0" +"47967","New Richmond","IN","40.192176","-86.98346","-5","0" +"47968","New Ross","IN","39.961958","-86.73576","-5","0" +"47969","Newtown","IN","40.205056","-87.15089","-5","0" +"47970","Otterbein","IN","40.480675","-87.10907","-5","0" +"47971","Oxford","IN","40.520834","-87.2444","-5","0" +"47974","Perrysville","IN","40.043359","-87.4655","-5","0" +"47975","Pine Village","IN","40.448708","-87.25568","-5","0" +"47976","Earl Park","IN","40.606301","-87.310042","-5","0" +"47977","Remington","IN","40.763755","-87.15306","-6","1" +"47978","Rensselaer","IN","40.962747","-87.13684","-6","1" +"47980","Reynolds","IN","40.753293","-86.88769","-5","0" +"47981","Romney","IN","40.246558","-86.91652","-5","0" +"47982","State Line","IN","40.196628","-87.5271","-5","0" +"47983","Stockwell","IN","40.285727","-86.77511","-5","0" +"47984","Talbot","IN","40.606301","-87.310042","-5","0" +"47986","Templeton","IN","40.512643","-87.20706","-5","0" +"47987","Veedersburg","IN","40.118561","-87.23646","-5","0" +"47988","Wallace","IN","39.986538","-87.147674","-5","0" +"47989","Waveland","IN","39.881586","-87.04635","-5","0" +"47990","Waynetown","IN","40.071792","-87.06369","-5","0" +"47991","West Lebanon","IN","40.277121","-87.413","-5","0" +"47992","Westpoint","IN","40.319429","-87.04867","-5","0" +"47993","Williamsport","IN","40.300013","-87.38396","-5","0" +"47994","Wingate","IN","40.170546","-87.06795","-5","0" +"47995","Wolcott","IN","40.758188","-87.03629","-5","0" +"47996","West Lafayette","IN","40.388656","-86.894908","-5","0" +"47997","Yeoman","IN","40.667985","-86.7225","-5","0" +"48001","Algonac","MI","42.631359","-82.554","-5","1" +"48002","Allenton","MI","42.938385","-82.91582","-5","1" +"48003","Almont","MI","42.931178","-83.04585","-5","1" +"48004","Anchorville","MI","42.824095","-82.66522","-5","1" +"48005","Armada","MI","42.842554","-82.91471","-5","1" +"48006","Avoca","MI","43.062285","-82.69327","-5","1" +"48007","Troy","MI","42.606088","-83.297593","-5","1" +"48009","Birmingham","MI","42.544084","-83.21527","-5","1" +"48012","Birmingham","MI","42.604425","-83.292382","-5","1" +"48014","Capac","MI","43.01185","-82.93255","-5","1" +"48015","Center Line","MI","42.479137","-83.02449","-5","1" +"48017","Clawson","MI","42.535534","-83.15112","-5","1" +"48019","Rose","MI","42.755627","-83.612581","-5","1" +"48021","Eastpointe","MI","42.466086","-82.94641","-5","1" +"48022","Emmett","MI","43.013805","-82.79404","-5","1" +"48023","Fair Haven","MI","42.693915","-82.66859","-5","1" +"48025","Franklin","MI","42.524134","-83.25454","-5","1" +"48026","Fraser","MI","42.536402","-82.95044","-5","1" +"48027","Goodells","MI","42.952553","-82.68571","-5","1" +"48028","Harsens Island","MI","42.563129","-82.62325","-5","1" +"48030","Hazel Park","MI","42.459022","-83.09819","-5","1" +"48032","Jeddo","MI","43.125531","-82.59617","-5","1" +"48034","Southfield","MI","42.474234","-83.29078","-5","1" +"48035","Clinton Township","MI","42.554134","-82.90786","-5","1" +"48036","Clinton Township","MI","42.587117","-82.89837","-5","1" +"48037","Southfield","MI","42.567543","-83.149978","-5","1" +"48038","Clinton Township","MI","42.603172","-82.94459","-5","1" +"48039","Marine City","MI","42.710445","-82.50811","-5","1" +"48040","Marysville","MI","42.910198","-82.47973","-5","1" +"48041","Memphis","MI","42.93281","-82.80345","-5","1" +"48042","Macomb","MI","42.68347","-82.92958","-5","1" +"48043","Mount Clemens","MI","42.596784","-82.88031","-5","1" +"48044","Macomb","MI","42.650265","-82.93416","-5","1" +"48045","Harrison Township","MI","42.582961","-82.83063","-5","1" +"48046","Mount Clemens","MI","42.672322","-82.903065","-5","1" +"48047","New Baltimore","MI","42.670932","-82.77754","-5","1" +"48048","New Haven","MI","42.739751","-82.79758","-5","1" +"48049","North Street","MI","43.03154","-82.59251","-5","1" +"48050","New Haven","MI","42.786198","-82.8092","-5","1" +"48051","New Baltimore","MI","42.682081","-82.83068","-5","1" +"48054","East China","MI","42.769956","-82.52595","-5","1" +"48059","Fort Gratiot","MI","43.088742","-82.48614","-5","1" +"48060","Port Huron","MI","42.978974","-82.44402","-5","1" +"48061","Port Huron","MI","42.824095","-82.66522","-5","1" +"48062","Richmond","MI","42.829226","-82.77538","-5","1" +"48063","Columbus","MI","42.85452","-82.68244","-5","1" +"48064","Casco","MI","42.773535","-82.67684","-5","1" +"48065","Romeo","MI","42.826805","-83.02963","-5","1" +"48066","Roseville","MI","42.503285","-82.93851","-5","1" +"48067","Royal Oak","MI","42.488735","-83.13752","-5","1" +"48068","Royal Oak","MI","42.660091","-83.3863","-5","1" +"48069","Pleasant Ridge","MI","42.472235","-83.14051","-5","1" +"48070","Huntington Woods","MI","42.482585","-83.16812","-5","1" +"48071","Madison Heights","MI","42.501385","-83.10474","-5","1" +"48072","Berkley","MI","42.497035","-83.18532","-5","1" +"48073","Royal Oak","MI","42.518635","-83.16357","-5","1" +"48074","Smiths Creek","MI","42.948521","-82.57049","-5","1" +"48075","Southfield","MI","42.465275","-83.2264","-5","1" +"48076","Southfield","MI","42.499335","-83.22829","-5","1" +"48079","Saint Clair","MI","42.833034","-82.50425","-5","1" +"48080","Saint Clair Shores","MI","42.462036","-82.90232","-5","1" +"48081","Saint Clair Shores","MI","42.497736","-82.89979","-5","1" +"48082","Saint Clair Shores","MI","42.526965","-82.88809","-5","1" +"48083","Troy","MI","42.556943","-83.11506","-5","1" +"48084","Troy","MI","42.563505","-83.18405","-5","1" +"48085","Troy","MI","42.597323","-83.116567","-5","1" +"48086","Southfield","MI","42.660091","-83.3863","-5","1" +"48088","Warren","MI","42.516851","-82.982757","-5","1" +"48089","Warren","MI","42.467086","-82.99866","-5","1" +"48090","Warren","MI","42.672322","-82.903065","-5","1" +"48091","Warren","MI","42.465886","-83.056","-5","1" +"48092","Warren","MI","42.511293","-83.0597","-5","1" +"48093","Warren","MI","42.514885","-82.99768","-5","1" +"48094","Washington","MI","42.727731","-83.03847","-5","1" +"48095","Washington","MI","42.779239","-83.02605","-5","1" +"48096","Ray","MI","42.753378","-82.91658","-5","1" +"48097","Yale","MI","43.131709","-82.81411","-5","1" +"48098","Troy","MI","42.599133","-83.15235","-5","1" +"48099","Troy","MI","42.587643","-83.173666","-5","1" +"48101","Allen Park","MI","42.254788","-83.21027","-5","1" +"48103","Ann Arbor","MI","42.280887","-83.79147","-5","1" +"48104","Ann Arbor","MI","42.266805","-83.72297","-5","1" +"48105","Ann Arbor","MI","42.307288","-83.70443","-5","1" +"48106","Ann Arbor","MI","42.253502","-83.836571","-5","1" +"48107","Ann Arbor","MI","42.253502","-83.836571","-5","1" +"48108","Ann Arbor","MI","42.232807","-83.72671","-5","1" +"48109","Ann Arbor","MI","42.291637","-83.71831","-5","1" +"48110","Azalia","MI","42.008164","-83.664277","-5","1" +"48111","Belleville","MI","42.194865","-83.49083","-5","1" +"48112","Belleville","MI","42.239933","-83.150823","-5","1" +"48113","Ann Arbor","MI","42.253502","-83.836571","-5","1" +"48114","Brighton","MI","42.566097","-83.75725","-5","1" +"48115","Bridgewater","MI","42.160216","-83.911693","-5","1" +"48116","Brighton","MI","42.509476","-83.77718","-5","1" +"48117","Carleton","MI","42.05589","-83.40605","-5","1" +"48118","Chelsea","MI","42.316922","-84.03445","-5","1" +"48120","Dearborn","MI","42.306288","-83.15863","-5","1" +"48121","Dearborn","MI","42.239933","-83.150823","-5","1" +"48122","Melvindale","MI","42.281638","-83.18188","-5","1" +"48123","Dearborn","MI","42.239933","-83.150823","-5","1" +"48124","Dearborn","MI","42.294987","-83.25049","-5","1" +"48125","Dearborn Heights","MI","42.277388","-83.25987","-5","1" +"48126","Dearborn","MI","42.333787","-83.18179","-5","1" +"48127","Dearborn Heights","MI","42.335687","-83.28332","-5","1" +"48128","Dearborn","MI","42.320237","-83.26872","-5","1" +"48130","Dexter","MI","42.344837","-83.89907","-5","1" +"48131","Dundee","MI","41.965806","-83.67133","-5","1" +"48133","Erie","MI","41.777302","-83.49818","-5","1" +"48134","Flat Rock","MI","42.107026","-83.28711","-5","1" +"48135","Garden City","MI","42.324338","-83.3382","-5","1" +"48136","Garden City","MI","42.239933","-83.150823","-5","1" +"48137","Gregory","MI","42.445724","-84.06078","-5","1" +"48138","Grosse Ile","MI","42.130091","-83.16017","-5","1" +"48139","Hamburg","MI","42.449117","-83.80332","-5","1" +"48140","Ida","MI","41.876895","-83.58184","-5","1" +"48141","Inkster","MI","42.292582","-83.31414","-5","1" +"48143","Lakeland","MI","42.454366","-83.83372","-5","1" +"48144","Lambertville","MI","41.754298","-83.63047","-5","1" +"48145","La Salle","MI","41.846349","-83.44652","-5","1" +"48146","Lincoln Park","MI","42.243488","-83.18097","-5","1" +"48150","Livonia","MI","42.365936","-83.36513","-5","1" +"48151","Livonia","MI","42.239933","-83.150823","-5","1" +"48152","Livonia","MI","42.427835","-83.36299","-5","1" +"48153","Livonia","MI","42.239933","-83.150823","-5","1" +"48154","Livonia","MI","42.396194","-83.37161","-5","1" +"48157","Luna Pier","MI","41.811196","-83.44141","-5","1" +"48158","Manchester","MI","42.14784","-84.03123","-5","1" +"48159","Maybee","MI","42.01968","-83.54756","-5","1" +"48160","Milan","MI","42.081363","-83.68414","-5","1" +"48161","Monroe","MI","41.904793","-83.41669","-5","1" +"48162","Monroe","MI","41.940898","-83.38515","-5","1" +"48164","New Boston","MI","42.128069","-83.38785","-5","1" +"48165","New Hudson","MI","42.501401","-83.62916","-5","1" +"48166","Newport","MI","41.988228","-83.29818","-5","1" +"48167","Northville","MI","42.425506","-83.48945","-5","1" +"48168","South Monroe","MI","41.885451","-83.418524","-5","1" +"48169","Pinckney","MI","42.455063","-83.93425","-5","1" +"48170","Plymouth","MI","42.370837","-83.4856","-5","1" +"48173","Rockwood","MI","42.073793","-83.21575","-5","1" +"48174","Romulus","MI","42.212372","-83.37223","-5","1" +"48175","Salem","MI","42.405636","-83.578088","-5","1" +"48176","Saline","MI","42.16489","-83.78387","-5","1" +"48177","Samaria","MI","41.807647","-83.579334","-5","1" +"48178","South Lyon","MI","42.45644","-83.66673","-5","1" +"48179","South Rockwood","MI","42.049534","-83.26128","-5","1" +"48180","Taylor","MI","42.231788","-83.26481","-5","1" +"48182","Temperance","MI","41.773203","-83.57793","-5","1" +"48183","Trenton","MI","42.137071","-83.21446","-5","1" +"48184","Wayne","MI","42.276688","-83.3786","-5","1" +"48185","Westland","MI","42.335937","-83.378","-5","1" +"48186","Westland","MI","42.293787","-83.37464","-5","1" +"48187","Canton","MI","42.33087","-83.47575","-5","1" +"48188","Canton","MI","42.289354","-83.47401","-5","1" +"48189","Whitmore Lake","MI","42.422746","-83.78009","-5","1" +"48190","Whittaker","MI","42.134658","-83.59684","-5","1" +"48191","Willis","MI","42.121345","-83.57071","-5","1" +"48192","Wyandotte","MI","42.199989","-83.17402","-5","1" +"48195","Southgate","MI","42.205289","-83.19812","-5","1" +"48197","Ypsilanti","MI","42.223482","-83.63316","-5","1" +"48198","Ypsilanti","MI","42.247039","-83.58215","-5","1" +"48201","Detroit","MI","42.343787","-83.05879","-5","1" +"48202","Detroit","MI","42.375237","-83.07837","-5","1" +"48203","Highland Park","MI","42.421936","-83.09981","-5","1" +"48204","Detroit","MI","42.365337","-83.14254","-5","1" +"48205","Detroit","MI","42.433703","-82.98068","-5","1" +"48206","Detroit","MI","42.375787","-83.10849","-5","1" +"48207","Detroit","MI","42.352837","-83.02449","-5","1" +"48208","Detroit","MI","42.348937","-83.08994","-5","1" +"48209","Detroit","MI","42.307088","-83.11467","-5","1" +"48210","Detroit","MI","42.338137","-83.12785","-5","1" +"48211","Detroit","MI","42.379019","-83.04483","-5","1" +"48212","Hamtramck","MI","42.410037","-83.05826","-5","1" +"48213","Detroit","MI","42.395904","-82.99632","-5","1" +"48214","Detroit","MI","42.368137","-82.99314","-5","1" +"48215","Detroit","MI","42.378287","-82.95243","-5","1" +"48216","Detroit","MI","42.328338","-83.07805","-5","1" +"48217","Detroit","MI","42.277738","-83.1552","-5","1" +"48218","River Rouge","MI","42.269288","-83.13676","-5","1" +"48219","Detroit","MI","42.425236","-83.24902","-5","1" +"48220","Ferndale","MI","42.460986","-83.13398","-5","1" +"48221","Detroit","MI","42.426786","-83.14969","-5","1" +"48222","Detroit","MI","42.239933","-83.150823","-5","1" +"48223","Detroit","MI","42.394586","-83.24422","-5","1" +"48224","Detroit","MI","42.410487","-82.94348","-5","1" +"48225","Harper Woods","MI","42.438186","-82.9283","-5","1" +"48226","Detroit","MI","42.331821","-83.04888","-5","1" +"48227","Detroit","MI","42.388786","-83.1918","-5","1" +"48228","Detroit","MI","42.355437","-83.21722","-5","1" +"48229","Ecorse","MI","42.250505","-83.14829","-5","1" +"48230","Grosse Pointe","MI","42.386087","-82.92426","-5","1" +"48231","Detroit","MI","42.239933","-83.150823","-5","1" +"48232","Detroit","MI","42.239933","-83.150823","-5","1" +"48233","Detroit","MI","42.239933","-83.150823","-5","1" +"48234","Detroit","MI","42.432686","-83.04422","-5","1" +"48235","Detroit","MI","42.427636","-83.19547","-5","1" +"48236","Grosse Pointe","MI","42.425836","-82.90003","-5","1" +"48237","Oak Park","MI","42.467235","-83.17952","-5","1" +"48238","Detroit","MI","42.396736","-83.14152","-5","1" +"48239","Redford","MI","42.379436","-83.29105","-5","1" +"48240","Redford","MI","42.426285","-83.30197","-5","1" +"48242","Detroit","MI","42.20649","-83.35297","-5","1" +"48243","Detroit","MI","42.239933","-83.150823","-5","1" +"48244","Detroit","MI","42.239933","-83.150823","-5","1" +"48246","Independence","MI","42.712944","-83.348152","-5","1" +"48254","Detroit","MI","42.239933","-83.150823","-5","1" +"48255","Detroit","MI","42.239933","-83.150823","-5","1" +"48258","Detroit","MI","42.239933","-83.150823","-5","1" +"48260","Detroit","MI","42.239933","-83.150823","-5","1" +"48264","Detroit","MI","42.239933","-83.150823","-5","1" +"48265","Detroit","MI","42.239933","-83.150823","-5","1" +"48266","Detroit","MI","42.239933","-83.150823","-5","1" +"48267","Detroit","MI","42.239933","-83.150823","-5","1" +"48268","Detroit","MI","42.239933","-83.150823","-5","1" +"48269","Detroit","MI","42.239933","-83.150823","-5","1" +"48272","Detroit","MI","42.239933","-83.150823","-5","1" +"48274","Detroit","MI","42.239933","-83.150823","-5","1" +"48275","Detroit","MI","42.239933","-83.150823","-5","1" +"48277","Detroit","MI","42.239933","-83.150823","-5","1" +"48278","Detroit","MI","42.239933","-83.150823","-5","1" +"48279","Detroit","MI","42.239933","-83.150823","-5","1" +"48288","Detroit","MI","42.239933","-83.150823","-5","1" +"48295","Detroit","MI","42.239933","-83.150823","-5","1" +"48297","Detroit","MI","42.239933","-83.150823","-5","1" +"48299","Detroit","MI","42.239933","-83.150823","-5","1" +"48301","Bloomfield Hills","MI","42.546445","-83.28083","-5","1" +"48302","Bloomfield Hills","MI","42.5863","-83.29705","-5","1" +"48303","Bloomfield Hills","MI","42.660091","-83.3863","-5","1" +"48304","Bloomfield Hills","MI","42.586677","-83.22956","-5","1" +"48305","Clinton","MI","42.569278","-82.911243","-5","1" +"48306","Rochester","MI","42.708151","-83.16584","-5","1" +"48307","Rochester","MI","42.662293","-83.12781","-5","1" +"48308","Rochester","MI","42.638533","-83.131426","-5","1" +"48309","Rochester","MI","42.662732","-83.18111","-5","1" +"48310","Sterling Heights","MI","42.563644","-83.07158","-5","1" +"48311","Sterling Heights","MI","42.672322","-82.903065","-5","1" +"48312","Sterling Heights","MI","42.558151","-83.00446","-5","1" +"48313","Sterling Heights","MI","42.598734","-82.99938","-5","1" +"48314","Sterling Heights","MI","42.609789","-83.04844","-5","1" +"48315","Utica","MI","42.662902","-82.99392","-5","1" +"48316","Utica","MI","42.689632","-83.06154","-5","1" +"48317","Utica","MI","42.639777","-83.04255","-5","1" +"48318","Utica","MI","42.672322","-82.903065","-5","1" +"48320","Keego Harbor","MI","42.611783","-83.33757","-5","1" +"48321","Auburn Hills","MI","42.660091","-83.3863","-5","1" +"48322","West Bloomfield","MI","42.541268","-83.37551","-5","1" +"48323","West Bloomfield","MI","42.572442","-83.37159","-5","1" +"48324","West Bloomfield","MI","42.595233","-83.39974","-5","1" +"48325","West Bloomfield","MI","42.660091","-83.3863","-5","1" +"48326","Auburn Hills","MI","42.661129","-83.24571","-5","1" +"48327","Waterford","MI","42.642764","-83.40273","-5","1" +"48328","Waterford","MI","42.642302","-83.35133","-5","1" +"48329","Waterford","MI","42.68828","-83.38967","-5","1" +"48330","Drayton Plains","MI","42.675435","-83.363697","-5","1" +"48331","Farmington","MI","42.508809","-83.40875","-5","1" +"48332","Farmington","MI","42.660091","-83.3863","-5","1" +"48333","Farmington","MI","42.660091","-83.3863","-5","1" +"48334","Farmington","MI","42.5065","-83.35363","-5","1" +"48335","Farmington","MI","42.465142","-83.39853","-5","1" +"48336","Farmington","MI","42.458502","-83.3464","-5","1" +"48340","Pontiac","MI","42.668532","-83.29585","-5","1" +"48341","Pontiac","MI","42.626947","-83.30243","-5","1" +"48342","Pontiac","MI","42.644581","-83.28211","-5","1" +"48343","Pontiac","MI","42.660091","-83.3863","-5","1" +"48346","Clarkston","MI","42.720966","-83.4044","-5","1" +"48347","Clarkston","MI","42.660091","-83.3863","-5","1" +"48348","Clarkston","MI","42.768373","-83.37805","-5","1" +"48350","Davisburg","MI","42.747677","-83.52283","-5","1" +"48353","Hartland","MI","42.644709","-83.71792","-5","1" +"48356","Highland","MI","42.66415","-83.58982","-5","1" +"48357","Highland","MI","42.656281","-83.63297","-5","1" +"48359","Lake Orion","MI","42.722932","-83.28537","-5","1" +"48360","Lake Orion","MI","42.74628","-83.2612","-5","1" +"48361","Lake Orion","MI","42.660091","-83.3863","-5","1" +"48362","Lake Orion","MI","42.783379","-83.2471","-5","1" +"48363","Oakland","MI","42.765582","-83.17281","-5","1" +"48366","Lakeville","MI","42.803277","-83.18412","-5","1" +"48367","Leonard","MI","42.838438","-83.14416","-5","1" +"48370","Oxford","MI","42.820082","-83.20932","-5","1" +"48371","Oxford","MI","42.823968","-83.27921","-5","1" +"48374","Novi","MI","42.467945","-83.51766","-5","1" +"48375","Novi","MI","42.462734","-83.45865","-5","1" +"48376","Novi","MI","42.470984","-83.474785","-5","1" +"48377","Novi","MI","42.511766","-83.47314","-5","1" +"48380","Milford","MI","42.586597","-83.66826","-5","1" +"48381","Milford","MI","42.571402","-83.59318","-5","1" +"48382","Commerce Township","MI","42.593035","-83.48997","-5","1" +"48383","White Lake","MI","42.657361","-83.54529","-5","1" +"48386","White Lake","MI","42.642431","-83.47193","-5","1" +"48387","Union Lake","MI","42.7253","-83.311605","-5","1" +"48390","Walled Lake","MI","42.549483","-83.47969","-5","1" +"48391","Walled Lake","MI","42.660091","-83.3863","-5","1" +"48393","Wixom","MI","42.532251","-83.53378","-5","1" +"48396","Wixom","MI","42.523233","-83.537887","-5","1" +"48397","Warren","MI","42.491736","-83.040222","-5","1" +"48398","Clawson","MI","42.660091","-83.3863","-5","1" +"48401","Applegate","MI","43.357999","-82.65433","-5","1" +"48410","Argyle","MI","43.558856","-82.945483","-5","1" +"48411","Atlas","MI","42.940019","-83.536923","-5","1" +"48412","Attica","MI","43.053648","-83.16651","-5","1" +"48413","Bad Axe","MI","43.803691","-83.00181","-5","1" +"48414","Bancroft","MI","42.869478","-84.0761","-5","1" +"48415","Birch Run","MI","43.268788","-83.79486","-5","1" +"48416","Brown City","MI","43.214645","-82.98356","-5","1" +"48417","Burt","MI","43.262162","-83.93995","-5","1" +"48418","Byron","MI","42.816358","-83.95884","-5","1" +"48419","Carsonville","MI","43.420791","-82.6415","-5","1" +"48420","Clio","MI","43.176375","-83.726","-5","1" +"48421","Columbiaville","MI","43.154173","-83.3933","-5","1" +"48422","Croswell","MI","43.263998","-82.64573","-5","1" +"48423","Davison","MI","43.029526","-83.5218","-5","1" +"48426","Decker","MI","43.50461","-83.06289","-5","1" +"48427","Deckerville","MI","43.519997","-82.71234","-5","1" +"48428","Dryden","MI","42.936145","-83.13471","-5","1" +"48429","Durand","MI","42.918766","-83.99148","-5","1" +"48430","Fenton","MI","42.78459","-83.74074","-5","1" +"48432","Filion","MI","43.89867","-83.01232","-5","1" +"48433","Flushing","MI","43.072177","-83.84883","-5","1" +"48434","Forestville","MI","43.66139","-82.60984","-5","1" +"48435","Fostoria","MI","43.239123","-83.36195","-5","1" +"48436","Gaines","MI","42.870299","-83.89144","-5","1" +"48437","Genesee","MI","43.111009","-83.62016","-5","1" +"48438","Goodrich","MI","42.911611","-83.48421","-5","1" +"48439","Grand Blanc","MI","42.925677","-83.63585","-5","1" +"48440","Hadley","MI","42.952899","-83.40536","-5","1" +"48441","Harbor Beach","MI","43.812371","-82.69274","-5","1" +"48442","Holly","MI","42.800191","-83.5968","-5","1" +"48444","Imlay City","MI","43.038967","-83.06067","-5","1" +"48445","Kinde","MI","43.952534","-83.02017","-5","1" +"48446","Lapeer","MI","43.048777","-83.33073","-5","1" +"48448","Sciota","MI","42.955783","-84.300929","-5","1" +"48449","Lennon","MI","42.988946","-83.94468","-5","1" +"48450","Lexington","MI","43.243891","-82.52701","-5","1" +"48451","Linden","MI","42.800911","-83.81366","-5","1" +"48453","Marlette","MI","43.336126","-83.03213","-5","1" +"48454","Melvin","MI","43.198014","-82.82558","-5","1" +"48455","Metamora","MI","42.938891","-83.29409","-5","1" +"48456","Minden City","MI","43.660079","-82.74685","-5","1" +"48457","Montrose","MI","43.182851","-83.89507","-5","1" +"48458","Mount Morris","MI","43.116959","-83.69025","-5","1" +"48460","New Lothrop","MI","43.131102","-83.98443","-5","1" +"48461","North Branch","MI","43.210744","-83.20549","-5","1" +"48462","Ortonville","MI","42.84391","-83.43109","-5","1" +"48463","Otisville","MI","43.167457","-83.52542","-5","1" +"48464","Otter Lake","MI","43.219132","-83.42227","-5","1" +"48465","Palms","MI","43.618879","-82.6874","-5","1" +"48466","Peck","MI","43.264205","-82.81674","-5","1" +"48467","Port Austin","MI","44.023181","-83.00241","-5","1" +"48468","Port Hope","MI","43.938529","-82.77514","-5","1" +"48469","Port Sanilac","MI","43.452038","-82.54948","-5","1" +"48470","Ruth","MI","43.736207","-82.75005","-5","1" +"48471","Sandusky","MI","43.418054","-82.83687","-5","1" +"48472","Snover","MI","43.512287","-82.9635","-5","1" +"48473","Swartz Creek","MI","42.950128","-83.82612","-5","1" +"48475","Ubly","MI","43.673699","-82.9257","-5","1" +"48476","Vernon","MI","42.939379","-84.03166","-5","1" +"48501","Flint","MI","42.965926","-83.780835","-5","1" +"48502","Flint","MI","43.014077","-83.69012","-5","1" +"48503","Flint","MI","43.011227","-83.69291","-5","1" +"48504","Flint","MI","43.043627","-83.73126","-5","1" +"48505","Flint","MI","43.062076","-83.69728","-5","1" +"48506","Flint","MI","43.047826","-83.64688","-5","1" +"48507","Flint","MI","42.973263","-83.70142","-5","1" +"48509","Burton","MI","43.020176","-83.60433","-5","1" +"48519","Burton","MI","42.984777","-83.61155","-5","1" +"48529","Burton","MI","42.972477","-83.67085","-5","1" +"48531","Flint","MI","43.002","-83.692507","-5","1" +"48532","Flint","MI","43.005477","-83.76098","-5","1" +"48550","Flint","MI","43.034927","-83.688706","-5","1" +"48551","Flint","MI","42.978995","-83.713124","-5","1" +"48552","Flint","MI","42.977895","-83.713074","-5","1" +"48553","Flint","MI","42.973627","-83.720306","-5","1" +"48554","Flint","MI","42.972244","-83.79463","-5","1" +"48555","Flint","MI","43.011277","-83.710756","-5","1" +"48556","Flint","MI","43.032677","-83.646255","-5","1" +"48557","Flint","MI","43.080578","-83.783675","-5","1" +"48559","Flint","MI","43.002","-83.692507","-5","1" +"48563","Markey","MI","44.407339","-84.695963","-5","1" +"48567","Flint","MI","42.993102","-83.655654","-5","1" +"48601","Saginaw","MI","43.413975","-83.91427","-5","1" +"48602","Saginaw","MI","43.423925","-83.97142","-5","1" +"48603","Saginaw","MI","43.441975","-84.01177","-5","1" +"48604","Saginaw","MI","43.473075","-83.94479","-5","1" +"48605","Saginaw","MI","43.458776","-84.051827","-5","1" +"48606","Saginaw","MI","43.348535","-84.032612","-5","1" +"48607","Saginaw","MI","43.431375","-83.93267","-5","1" +"48608","Saginaw","MI","43.348535","-84.032612","-5","1" +"48609","Saginaw","MI","43.40153","-84.09438","-5","1" +"48610","Alger","MI","44.142282","-84.14497","-5","1" +"48611","Auburn","MI","43.617796","-84.07918","-5","1" +"48612","Beaverton","MI","43.87787","-84.42078","-5","1" +"48613","Bentley","MI","43.93724","-84.12889","-5","1" +"48614","Brant","MI","43.25118","-84.29816","-5","1" +"48615","Breckenridge","MI","43.422568","-84.47433","-5","1" +"48616","Chesaning","MI","43.190239","-84.11987","-5","1" +"48617","Clare","MI","43.828266","-84.74219","-5","1" +"48618","Coleman","MI","43.747084","-84.55669","-5","1" +"48619","Comins","MI","44.825431","-84.04695","-5","1" +"48620","Edenville","MI","43.807728","-84.37785","-5","1" +"48621","Fairview","MI","44.718279","-83.98795","-5","1" +"48622","Farwell","MI","43.840787","-84.86734","-5","1" +"48623","Freeland","MI","43.518309","-84.1337","-5","1" +"48624","Gladwin","MI","44.041529","-84.46503","-5","1" +"48625","Harrison","MI","44.052759","-84.83959","-5","1" +"48626","Hemlock","MI","43.416335","-84.22384","-5","1" +"48627","Higgins Lake","MI","44.462149","-84.747","-5","1" +"48628","Hope","MI","43.807162","-84.33789","-5","1" +"48629","Houghton Lake","MI","44.305812","-84.75589","-5","1" +"48630","Houghton Lake Heights","MI","44.327064","-84.77405","-5","1" +"48631","Kawkawlin","MI","43.67579","-83.97973","-5","1" +"48632","Lake","MI","43.864435","-85.00864","-5","1" +"48633","Lake George","MI","43.959478","-84.93861","-5","1" +"48634","Linwood","MI","43.748816","-84.01217","-5","1" +"48635","Lupton","MI","44.399711","-83.99444","-5","1" +"48636","Luzerne","MI","44.616344","-84.27784","-5","1" +"48637","Merrill","MI","43.410627","-84.33926","-5","1" +"48640","Midland","MI","43.605457","-84.27234","-5","1" +"48641","Midland","MI","43.538252","-84.387753","-5","1" +"48642","Midland","MI","43.652404","-84.21671","-5","1" +"48647","Mio","MI","44.654024","-84.10388","-5","1" +"48649","Oakley","MI","43.150386","-84.1976","-5","1" +"48650","Pinconning","MI","43.851276","-83.97901","-5","1" +"48651","Prudenville","MI","44.258616","-84.646","-5","1" +"48652","Rhodes","MI","43.862479","-84.19641","-5","1" +"48653","Roscommon","MI","44.484145","-84.66089","-5","1" +"48654","Rose City","MI","44.468977","-84.19608","-5","1" +"48655","Saint Charles","MI","43.297082","-84.14652","-5","1" +"48656","Saint Helen","MI","44.360384","-84.43815","-5","1" +"48657","Sanford","MI","43.69784","-84.39169","-5","1" +"48658","Standish","MI","43.985129","-83.93628","-5","1" +"48659","Sterling","MI","44.080925","-84.02506","-5","1" +"48661","West Branch","MI","44.288158","-84.21162","-5","1" +"48662","Wheeler","MI","43.400958","-84.41672","-5","1" +"48663","Saginaw","MI","43.467315","-83.975475","-5","1" +"48667","Midland","MI","43.647297","-84.387331","-5","1" +"48670","Midland","MI","43.637471","-84.256758","-5","1" +"48674","Midland","MI","43.612884","-84.197125","-5","1" +"48686","Midland","MI","43.647297","-84.387331","-5","1" +"48701","Akron","MI","43.587817","-83.53468","-5","1" +"48703","Au Gres","MI","44.06434","-83.65821","-5","1" +"48705","Barton City","MI","44.708179","-83.63681","-5","1" +"48706","Bay City","MI","43.607523","-83.9162","-5","1" +"48707","Bay City","MI","43.737798","-83.933337","-5","1" +"48708","Bay City","MI","43.583323","-83.87869","-5","1" +"48710","University Center","MI","43.556574","-83.994328","-5","1" +"48720","Bay Port","MI","43.831509","-83.34887","-5","1" +"48721","Black River","MI","44.79652","-83.32907","-5","1" +"48722","Bridgeport","MI","43.346632","-83.84636","-5","1" +"48723","Caro","MI","43.490117","-83.3881","-5","1" +"48724","Carrollton","MI","43.460075","-83.92772","-5","1" +"48725","Caseville","MI","43.944466","-83.23974","-5","1" +"48726","Cass City","MI","43.604819","-83.17889","-5","1" +"48727","Clifford","MI","43.314176","-83.18115","-5","1" +"48728","Curran","MI","44.746486","-83.83882","-5","1" +"48729","Deford","MI","43.492259","-83.17874","-5","1" +"48730","East Tawas","MI","44.335904","-83.48516","-5","1" +"48731","Elkton","MI","43.83014","-83.16143","-5","1" +"48732","Essexville","MI","43.605861","-83.81298","-5","1" +"48733","Fairgrove","MI","43.542822","-83.61267","-5","1" +"48734","Frankenmuth","MI","43.340413","-83.74123","-5","1" +"48735","Gagetown","MI","43.664593","-83.26005","-5","1" +"48736","Gilford","MI","43.49442","-83.624431","-5","1" +"48737","Glennie","MI","44.54684","-83.70977","-5","1" +"48738","Greenbush","MI","44.563997","-83.32459","-5","1" +"48739","Hale","MI","44.379147","-83.83539","-5","1" +"48740","Harrisville","MI","44.663477","-83.3516","-5","1" +"48741","Kingston","MI","43.410781","-83.17248","-5","1" +"48742","Lincoln","MI","44.725546","-83.43887","-5","1" +"48743","Long Lake","MI","44.442563","-83.87538","-5","1" +"48744","Mayville","MI","43.34896","-83.35883","-5","1" +"48745","Mikado","MI","44.580133","-83.49441","-5","1" +"48746","Millington","MI","43.274498","-83.53822","-5","1" +"48747","Munger","MI","43.519522","-83.76529","-5","1" +"48748","National City","MI","44.328794","-83.66579","-5","1" +"48749","Omer","MI","44.046475","-83.87572","-5","1" +"48750","Oscoda","MI","44.447318","-83.41927","-5","1" +"48754","Owendale","MI","43.736747","-83.24746","-5","1" +"48755","Pigeon","MI","43.85672","-83.28557","-5","1" +"48756","Prescott","MI","44.206123","-83.99306","-5","1" +"48757","Reese","MI","43.462775","-83.68564","-5","1" +"48758","Richville","MI","43.407321","-83.676156","-5","1" +"48759","Sebewaing","MI","43.737971","-83.43007","-5","1" +"48760","Silverwood","MI","43.331961","-83.25403","-5","1" +"48761","South Branch","MI","44.54106","-83.91915","-5","1" +"48762","Spruce","MI","44.821813","-83.50181","-5","1" +"48763","Tawas City","MI","44.250144","-83.55805","-5","1" +"48764","Tawas City","MI","44.266549","-83.519166","-5","1" +"48765","Turner","MI","44.147192","-83.73723","-5","1" +"48766","Twining","MI","44.127342","-83.84369","-5","1" +"48767","Unionville","MI","43.645608","-83.46527","-5","1" +"48768","Vassar","MI","43.370434","-83.57917","-5","1" +"48769","Tuscola","MI","43.327048","-83.657355","-5","1" +"48770","Whittemore","MI","44.246004","-83.81849","-5","1" +"48787","Frankenmuth","MI","43.334958","-83.749418","-5","1" +"48801","Alma","MI","43.377113","-84.66256","-5","1" +"48802","Alma","MI","43.389262","-84.666661","-5","1" +"48803","Troy","MI","42.581148","-83.09901","-5","1" +"48804","Mount Pleasant","MI","43.640574","-84.847417","-5","1" +"48805","Okemos","MI","42.599184","-84.371973","-5","1" +"48806","Ashley","MI","43.179346","-84.50765","-5","1" +"48807","Bannister","MI","43.145475","-84.41579","-5","1" +"48808","Bath","MI","42.821233","-84.46099","-5","1" +"48809","Belding","MI","43.085313","-85.24478","-5","1" +"48811","Carson City","MI","43.184647","-84.84871","-5","1" +"48812","Cedar Lake","MI","43.413761","-84.975271","-5","1" +"48813","Charlotte","MI","42.580076","-84.8228","-5","1" +"48815","Clarksville","MI","42.841491","-85.25046","-5","1" +"48816","Cohoctah","MI","42.757633","-83.938967","-5","1" +"48817","Corunna","MI","43.000193","-84.0634","-5","1" +"48818","Crystal","MI","43.272279","-84.90913","-5","1" +"48819","Dansville","MI","42.552218","-84.27674","-5","1" +"48820","Dewitt","MI","42.842438","-84.58612","-5","1" +"48821","Dimondale","MI","42.645985","-84.64772","-5","1" +"48822","Eagle","MI","42.8288","-84.76379","-5","1" +"48823","East Lansing","MI","42.747922","-84.47143","-5","1" +"48824","East Lansing","MI","42.725884","-84.4792","-5","1" +"48825","East Lansing","MI","42.723784","-84.464775","-5","1" +"48826","East Lansing","MI","42.599184","-84.371973","-5","1" +"48827","Eaton Rapids","MI","42.507093","-84.6579","-5","1" +"48829","Edmore","MI","43.404412","-85.03033","-5","1" +"48830","Elm Hall","MI","43.362879","-84.83662","-5","1" +"48831","Elsie","MI","43.098253","-84.37722","-5","1" +"48832","Elwell","MI","43.411924","-84.77657","-5","1" +"48833","Eureka","MI","42.944209","-84.600723","-5","1" +"48834","Fenwick","MI","43.141649","-85.04948","-5","1" +"48835","Fowler","MI","43.011103","-84.74589","-5","1" +"48836","Fowlerville","MI","42.666646","-84.07542","-5","1" +"48837","Grand Ledge","MI","42.749774","-84.7503","-5","1" +"48838","Greenville","MI","43.1791","-85.26533","-5","1" +"48840","Haslett","MI","42.760217","-84.39027","-5","1" +"48841","Henderson","MI","43.104499","-84.23568","-5","1" +"48842","Holt","MI","42.639235","-84.52702","-5","1" +"48843","Howell","MI","42.612243","-83.91835","-5","1" +"48844","Howell","MI","42.603479","-83.911173","-5","1" +"48845","Hubbardston","MI","43.096466","-84.84627","-5","1" +"48846","Ionia","MI","42.981932","-85.06679","-5","1" +"48847","Ithaca","MI","43.269967","-84.59181","-5","1" +"48848","Laingsburg","MI","42.884921","-84.3569","-5","1" +"48849","Lake Odessa","MI","42.788151","-85.13565","-5","1" +"48850","Lakeview","MI","43.447625","-85.25628","-5","1" +"48851","Lyons","MI","42.962965","-84.94611","-5","1" +"48852","Mcbrides","MI","43.355304","-85.04326","-5","1" +"48853","Maple Rapids","MI","43.102399","-84.69278","-5","1" +"48854","Mason","MI","42.582902","-84.44738","-5","1" +"48855","Howell","MI","42.678059","-83.915592","-5","1" +"48856","Middleton","MI","43.197414","-84.73336","-5","1" +"48857","Morrice","MI","42.845703","-84.16581","-5","1" +"48858","Mount Pleasant","MI","43.60616","-84.78306","-5","1" +"48859","Mount Pleasant","MI","43.564736","-84.847297","-5","1" +"48860","Muir","MI","43.026842","-84.92633","-5","1" +"48861","Mulliken","MI","42.733673","-84.92575","-5","1" +"48862","North Star","MI","43.356518","-84.497138","-5","1" +"48863","Oak Grove","MI","42.603479","-83.911173","-5","1" +"48864","Okemos","MI","42.702128","-84.41946","-5","1" +"48865","Orleans","MI","43.090038","-85.11754","-5","1" +"48866","Ovid","MI","42.997636","-84.37643","-5","1" +"48867","Owosso","MI","42.99605","-84.17896","-5","1" +"48870","Palo","MI","43.113587","-85.007665","-5","1" +"48871","Perrinton","MI","43.160914","-84.68397","-5","1" +"48872","Perry","MI","42.807435","-84.22291","-5","1" +"48873","Pewamo","MI","42.987795","-84.84263","-5","1" +"48874","Pompeii","MI","43.184467","-84.6032","-5","1" +"48875","Portland","MI","42.864338","-84.91289","-5","1" +"48876","Potterville","MI","42.640719","-84.73826","-5","1" +"48877","Riverdale","MI","43.403224","-84.84062","-5","1" +"48878","Rosebush","MI","43.713365","-84.77731","-5","1" +"48879","Saint Johns","MI","42.998998","-84.57704","-5","1" +"48880","Saint Louis","MI","43.422397","-84.60041","-5","1" +"48881","Saranac","MI","42.929829","-85.20938","-5","1" +"48882","Shaftsburg","MI","42.803973","-84.295949","-5","1" +"48883","Shepherd","MI","43.534764","-84.68228","-5","1" +"48884","Sheridan","MI","43.21107","-85.04772","-5","1" +"48885","Sidney","MI","43.247555","-85.16587","-5","1" +"48886","Six Lakes","MI","43.426703","-85.14998","-5","1" +"48887","Smyrna","MI","42.944929","-85.074665","-5","1" +"48888","Stanton","MI","43.297366","-85.10506","-5","1" +"48889","Sumner","MI","43.293977","-84.79415","-5","1" +"48890","Sunfield","MI","42.759217","-84.98054","-5","1" +"48891","Vestaburg","MI","43.402185","-84.92216","-5","1" +"48892","Webberville","MI","42.643684","-84.17011","-5","1" +"48893","Weidman","MI","43.662482","-84.98244","-5","1" +"48894","Westphalia","MI","42.928735","-84.7996","-5","1" +"48895","Williamston","MI","42.68669","-84.27844","-5","1" +"48896","Winn","MI","43.523617","-84.90307","-5","1" +"48897","Woodland","MI","42.705285","-85.12449","-5","1" +"48901","Lansing","MI","42.599184","-84.371973","-5","1" +"48906","Lansing","MI","42.764167","-84.56153","-5","1" +"48907","Lansing","MI","42.596071","-84.838206","-5","1" +"48908","Lansing","MI","42.596071","-84.838206","-5","1" +"48909","Lansing","MI","42.599184","-84.371973","-5","1" +"48910","Lansing","MI","42.704435","-84.54915","-5","1" +"48911","Lansing","MI","42.677335","-84.56913","-5","1" +"48912","Lansing","MI","42.734434","-84.52497","-5","1" +"48913","Lansing","MI","42.599184","-84.371973","-5","1" +"48915","Lansing","MI","42.737701","-84.57106","-5","1" +"48916","Lansing","MI","42.599184","-84.371973","-5","1" +"48917","Lansing","MI","42.735535","-84.62698","-5","1" +"48918","Lansing","MI","42.599184","-84.371973","-5","1" +"48919","Lansing","MI","42.728585","-84.551728","-5","1" +"48921","Lansing","MI","42.723735","-84.555629","-5","1" +"48922","Lansing","MI","42.732535","-84.558679","-5","1" +"48924","Lansing","MI","42.599184","-84.371973","-5","1" +"48929","Lansing","MI","42.732535","-84.558679","-5","1" +"48930","Lansing","MI","42.732535","-84.558679","-5","1" +"48933","Lansing","MI","42.731885","-84.55492","-5","1" +"48937","Lansing","MI","42.748734","-84.559029","-5","1" +"48950","Lansing","MI","42.599184","-84.371973","-5","1" +"48956","Lansing","MI","42.732535","-84.558679","-5","1" +"48980","Lansing","MI","42.599184","-84.371973","-5","1" +"49001","Kalamazoo","MI","42.278891","-85.55107","-5","1" +"49002","Portage","MI","42.210792","-85.55958","-5","1" +"49003","Kalamazoo","MI","42.245412","-85.529858","-5","1" +"49004","Kalamazoo","MI","42.330089","-85.56635","-5","1" +"49005","Kalamazoo","MI","42.323045","-85.493232","-5","1" +"49006","Kalamazoo","MI","42.295005","-85.62247","-5","1" +"49007","Kalamazoo","MI","42.29714","-85.58573","-5","1" +"49008","Kalamazoo","MI","42.26549","-85.61098","-5","1" +"49009","Kalamazoo","MI","42.272538","-85.69255","-5","1" +"49010","Allegan","MI","42.531244","-85.87438","-5","1" +"49011","Athens","MI","42.089314","-85.23333","-5","1" +"49012","Augusta","MI","42.347289","-85.35242","-5","1" +"49013","Bangor","MI","42.308798","-86.12201","-5","1" +"49014","Battle Creek","MI","42.311089","-85.13845","-5","1" +"49015","Battle Creek","MI","42.30244","-85.22294","-5","1" +"49016","Battle Creek","MI","42.34381","-85.29136","-5","1" +"49017","Battle Creek","MI","42.35714","-85.20257","-5","1" +"49018","Battle Creek","MI","42.246402","-85.004511","-5","1" +"49019","Kalamazoo","MI","42.245412","-85.529858","-5","1" +"49020","Bedford","MI","42.246402","-85.004511","-5","1" +"49021","Bellevue","MI","42.447038","-85.04264","-5","1" +"49022","Benton Harbor","MI","42.10809","-86.41801","-5","1" +"49023","Benton Harbor","MI","42.001551","-86.715294","-5","1" +"49024","Portage","MI","42.216541","-85.61773","-5","1" +"49026","Bloomingdale","MI","42.371729","-85.9679","-5","1" +"49027","Breedsville","MI","42.345815","-86.0795","-5","1" +"49028","Bronson","MI","41.850631","-85.18987","-5","1" +"49029","Burlington","MI","42.142445","-85.09728","-5","1" +"49030","Burr Oak","MI","41.854639","-85.32984","-5","1" +"49031","Cassopolis","MI","41.907837","-85.98937","-5","1" +"49032","Centreville","MI","41.924331","-85.51068","-5","1" +"49033","Ceresco","MI","42.239592","-85.09307","-5","1" +"49034","Climax","MI","42.239393","-85.33499","-5","1" +"49035","Cloverdale","MI","42.595121","-85.308555","-5","1" +"49036","Coldwater","MI","41.912776","-85.0142","-5","1" +"49038","Coloma","MI","42.209307","-86.3337","-5","1" +"49039","Hagar Shores","MI","42.224757","-86.372276","-5","1" +"49040","Colon","MI","41.960856","-85.33059","-5","1" +"49041","Comstock","MI","42.245412","-85.529858","-5","1" +"49042","Constantine","MI","41.847413","-85.66411","-5","1" +"49043","Covert","MI","42.296105","-86.26647","-5","1" +"49045","Decatur","MI","42.105719","-85.99417","-5","1" +"49046","Delton","MI","42.504149","-85.39257","-5","1" +"49047","Dowagiac","MI","42.004729","-86.1208","-5","1" +"49048","Kalamazoo","MI","42.292335","-85.525359","-5","1" +"49050","Dowling","MI","42.504137","-85.24582","-5","1" +"49051","East Leroy","MI","42.184303","-85.24228","-5","1" +"49052","Fulton","MI","42.111949","-85.31673","-5","1" +"49053","Galesburg","MI","42.289991","-85.41657","-5","1" +"49055","Gobles","MI","42.37346","-85.85725","-5","1" +"49056","Grand Junction","MI","42.395965","-86.0545","-5","1" +"49057","Hartford","MI","42.19923","-86.16943","-5","1" +"49058","Hastings","MI","42.64275","-85.29296","-5","1" +"49060","Hickory Corners","MI","42.424387","-85.4055","-5","1" +"49061","Jones","MI","41.878312","-85.81527","-5","1" +"49062","Kendall","MI","42.36175","-85.814072","-5","1" +"49063","Lacota","MI","42.393586","-86.209904","-5","1" +"49064","Lawrence","MI","42.215357","-86.04822","-5","1" +"49065","Lawton","MI","42.144087","-85.84205","-5","1" +"49066","Leonidas","MI","42.037422","-85.35683","-5","1" +"49067","Marcellus","MI","42.026876","-85.8033","-5","1" +"49068","Marshall","MI","42.277837","-84.94869","-5","1" +"49069","Marshall","MI","42.204494","-84.949919","-5","1" +"49070","Martin","MI","42.540492","-85.63686","-5","1" +"49071","Mattawan","MI","42.234417","-85.7807","-5","1" +"49072","Mendon","MI","42.005815","-85.46428","-5","1" +"49073","Nashville","MI","42.588988","-85.124","-5","1" +"49074","Nazareth","MI","42.245412","-85.529858","-5","1" +"49075","Nottawa","MI","41.916374","-85.45029","-5","1" +"49076","Olivet","MI","42.439324","-84.91041","-5","1" +"49077","Oshtemo","MI","42.245412","-85.529858","-5","1" +"49078","Otsego","MI","42.459989","-85.71069","-5","1" +"49079","Paw Paw","MI","42.22514","-85.90002","-5","1" +"49080","Plainwell","MI","42.462935","-85.61256","-5","1" +"49081","Portage","MI","42.171777","-85.617824","-5","1" +"49082","Quincy","MI","41.943472","-84.87559","-5","1" +"49083","Richland","MI","42.379689","-85.45022","-5","1" +"49084","Riverside","MI","42.178035","-86.38557","-5","1" +"49085","Saint Joseph","MI","42.074435","-86.47935","-5","1" +"49087","Schoolcraft","MI","42.117421","-85.67594","-5","1" +"49088","Scotts","MI","42.187577","-85.42621","-5","1" +"49089","Sherwood","MI","42.010485","-85.23198","-5","1" +"49090","South Haven","MI","42.403593","-86.24912","-5","1" +"49091","Sturgis","MI","41.822244","-85.43234","-5","1" +"49092","Tekonsha","MI","42.09724","-84.97543","-5","1" +"49093","Three Rivers","MI","41.958306","-85.63829","-5","1" +"49094","Union City","MI","42.06137","-85.11971","-5","1" +"49095","Vandalia","MI","41.916613","-85.89022","-5","1" +"49096","Vermontville","MI","42.63222","-85.01188","-5","1" +"49097","Vicksburg","MI","42.117028","-85.5073","-5","1" +"49098","Watervliet","MI","42.186679","-86.25718","-5","1" +"49099","White Pigeon","MI","41.792628","-85.67233","-5","1" +"49101","Baroda","MI","41.944869","-86.48827","-5","1" +"49102","Berrien Center","MI","41.949244","-86.26909","-5","1" +"49103","Berrien Springs","MI","41.944691","-86.34979","-5","1" +"49104","Berrien Springs","MI","42.001551","-86.715294","-5","1" +"49106","Bridgman","MI","41.94263","-86.55586","-5","1" +"49107","Buchanan","MI","41.830012","-86.38349","-5","1" +"49111","Eau Claire","MI","42.022092","-86.29071","-5","1" +"49112","Edwardsburg","MI","41.797792","-86.02616","-5","1" +"49113","Galien","MI","41.801264","-86.50367","-5","1" +"49115","Harbert","MI","41.876483","-86.63715","-5","1" +"49116","Lakeside","MI","41.848782","-86.67044","-5","1" +"49117","New Buffalo","MI","41.784691","-86.75519","-5","1" +"49119","New Troy","MI","41.875968","-86.54919","-5","1" +"49120","Niles","MI","41.828055","-86.23981","-5","1" +"49121","Niles","MI","42.001551","-86.715294","-5","1" +"49125","Sawyer","MI","41.890521","-86.59362","-5","1" +"49126","Sodus","MI","42.036334","-86.37416","-5","1" +"49127","Stevensville","MI","42.015092","-86.51351","-5","1" +"49128","Three Oaks","MI","41.820452","-86.61984","-5","1" +"49129","Union Pier","MI","41.827718","-86.69237","-5","1" +"49130","Union","MI","41.787096","-85.83605","-5","1" +"49137","Lyndon","MI","42.424092","-84.102395","-5","1" +"49157","Richland","MI","44.21551","-85.298079","-5","1" +"49169","Dickson","MI","44.30476","-86.015026","-5","1" +"49201","Jackson","MI","42.252268","-84.38842","-5","1" +"49202","Jackson","MI","42.262135","-84.41052","-5","1" +"49203","Jackson","MI","42.227536","-84.40913","-5","1" +"49204","Jackson","MI","42.252847","-84.213755","-5","1" +"49220","Addison","MI","41.992765","-84.3329","-5","1" +"49221","Adrian","MI","41.900927","-84.04585","-5","1" +"49224","Albion","MI","42.261257","-84.75151","-5","1" +"49226","Bloomingdale","MI","42.379469","-85.976841","-5","1" +"49227","Allen","MI","41.956743","-84.76598","-5","1" +"49228","Blissfield","MI","41.821595","-83.87435","-5","1" +"49229","Britton","MI","41.991654","-83.82631","-5","1" +"49230","Brooklyn","MI","42.089891","-84.22768","-5","1" +"49232","Camden","MI","41.731009","-84.65993","-5","1" +"49233","Cement City","MI","42.071196","-84.3494","-5","1" +"49234","Clarklake","MI","42.121774","-84.36382","-5","1" +"49235","Clayton","MI","41.853441","-84.20769","-5","1" +"49236","Clinton","MI","42.067837","-83.95779","-5","1" +"49237","Concord","MI","42.177223","-84.651","-5","1" +"49238","Deerfield","MI","41.910884","-83.78699","-5","1" +"49239","Frontier","MI","41.782499","-84.604662","-5","1" +"49240","Grass Lake","MI","42.284771","-84.18971","-5","1" +"49241","Hanover","MI","42.107907","-84.60334","-5","1" +"49242","Hillsdale","MI","41.89958","-84.62624","-5","1" +"49245","Homer","MI","42.147222","-84.80789","-5","1" +"49246","Horton","MI","42.118019","-84.49338","-5","1" +"49247","Hudson","MI","41.857385","-84.34907","-5","1" +"49248","Jasper","MI","41.766891","-84.01395","-5","1" +"49249","Jerome","MI","42.048979","-84.4396","-5","1" +"49250","Jonesville","MI","42.018585","-84.64548","-5","1" +"49251","Leslie","MI","42.464769","-84.41116","-5","1" +"49252","Litchfield","MI","42.034427","-84.77046","-5","1" +"49253","Manitou Beach","MI","41.974999","-84.27972","-5","1" +"49254","Michigan Center","MI","42.230336","-84.32597","-5","1" +"49255","Montgomery","MI","41.776287","-84.8376","-5","1" +"49256","Morenci","MI","41.746349","-84.21557","-5","1" +"49257","Moscow","MI","42.054795","-84.503905","-5","1" +"49258","Mosherville","MI","41.884795","-84.593491","-5","1" +"49259","Munith","MI","42.371819","-84.25886","-5","1" +"49261","Napoleon","MI","42.164338","-84.24575","-5","1" +"49262","North Adams","MI","41.963683","-84.46824","-5","1" +"49263","Norvell","MI","42.158739","-84.18274","-5","1" +"49264","Onondaga","MI","42.443387","-84.56022","-5","1" +"49265","Onsted","MI","42.020199","-84.16796","-5","1" +"49266","Osseo","MI","41.844894","-84.55244","-5","1" +"49267","Ottawa Lake","MI","41.757599","-83.70951","-5","1" +"49268","Palmyra","MI","41.869086","-83.93858","-5","1" +"49269","Parma","MI","42.285987","-84.59305","-5","1" +"49270","Petersburg","MI","41.886364","-83.69556","-5","1" +"49271","Pittsford","MI","41.832213","-84.45404","-5","1" +"49272","Pleasant Lake","MI","42.398355","-84.34471","-5","1" +"49274","Reading","MI","41.843254","-84.75263","-5","1" +"49275","Ridgeway","MI","41.988026","-83.865674","-5","1" +"49276","Riga","MI","41.798043","-83.79433","-5","1" +"49277","Rives Junction","MI","42.395023","-84.46144","-5","1" +"49278","Rollin","MI","41.912292","-84.32652","-5","1" +"49279","Sand Creek","MI","41.791959","-84.10866","-5","1" +"49280","Seneca","MI","41.79583","-84.186608","-5","1" +"49281","Somerset","MI","42.050744","-84.37762","-5","1" +"49282","Somerset Center","MI","42.050628","-84.39902","-5","1" +"49283","Spring Arbor","MI","42.203838","-84.55243","-5","1" +"49284","Springport","MI","42.38806","-84.70868","-5","1" +"49285","Stockbridge","MI","42.458785","-84.19374","-5","1" +"49286","Tecumseh","MI","42.012268","-83.93878","-5","1" +"49287","Tipton","MI","42.035005","-84.09154","-5","1" +"49288","Waldron","MI","41.733173","-84.44772","-5","1" +"49289","Weston","MI","41.770793","-84.09996","-5","1" +"49301","Ada","MI","42.97252","-85.47798","-5","1" +"49302","Alto","MI","42.834137","-85.41889","-5","1" +"49303","Bailey","MI","43.271422","-85.84023","-5","1" +"49304","Baldwin","MI","43.895264","-85.88157","-5","1" +"49305","Barryton","MI","43.747406","-85.16304","-5","1" +"49306","Belmont","MI","43.078615","-85.59318","-5","1" +"49307","Big Rapids","MI","43.697651","-85.47815","-5","1" +"49309","Bitely","MI","43.747881","-85.86094","-5","1" +"49310","Blanchard","MI","43.523037","-85.04876","-5","1" +"49311","Bradley","MI","42.633006","-85.643043","-5","1" +"49312","Brohman","MI","43.693086","-85.81962","-5","1" +"49314","Burnips","MI","42.731193","-85.840372","-5","1" +"49315","Byron Center","MI","42.802932","-85.72542","-5","1" +"49316","Caledonia","MI","42.794914","-85.55091","-5","1" +"49317","Cannonsburg","MI","43.071201","-85.480856","-5","1" +"49318","Casnovia","MI","43.22724","-85.82054","-5","1" +"49319","Cedar Springs","MI","43.224155","-85.54811","-5","1" +"49320","Chippewa Lake","MI","43.755335","-85.278303","-5","1" +"49321","Comstock Park","MI","43.059661","-85.67384","-5","1" +"49322","Coral","MI","43.368957","-85.37282","-5","1" +"49323","Dorr","MI","42.721597","-85.77879","-5","1" +"49325","Freeport","MI","42.763599","-85.31026","-5","1" +"49326","Gowen","MI","43.244538","-85.34217","-5","1" +"49327","Grant","MI","43.34022","-85.82566","-5","1" +"49328","Hopkins","MI","42.634199","-85.75809","-5","1" +"49329","Howard City","MI","43.405689","-85.47744","-5","1" +"49330","Kent City","MI","43.231933","-85.73768","-5","1" +"49331","Lowell","MI","42.944838","-85.34928","-5","1" +"49332","Mecosta","MI","43.623053","-85.25883","-5","1" +"49333","Middleville","MI","42.689437","-85.46466","-5","1" +"49335","Moline","MI","42.739942","-85.66543","-5","1" +"49336","Morley","MI","43.494361","-85.43184","-5","1" +"49337","Newaygo","MI","43.430588","-85.73515","-5","1" +"49338","Paris","MI","43.764906","-85.57223","-5","1" +"49339","Pierson","MI","43.335474","-85.49536","-5","1" +"49340","Remus","MI","43.617313","-85.09604","-5","1" +"49341","Rockford","MI","43.117214","-85.5189","-5","1" +"49342","Rodney","MI","43.696188","-85.30996","-5","1" +"49343","Sand Lake","MI","43.291089","-85.50812","-5","1" +"49344","Shelbyville","MI","42.588087","-85.5824","-5","1" +"49345","Sparta","MI","43.161106","-85.69952","-5","1" +"49346","Stanwood","MI","43.587286","-85.37833","-5","1" +"49347","Trufant","MI","43.3157","-85.35285","-5","1" +"49348","Wayland","MI","42.681969","-85.62761","-5","1" +"49349","White Cloud","MI","43.57219","-85.76662","-5","1" +"49351","Rockford","MI","43.031413","-85.550267","-5","1" +"49355","Ada","MI","43.031413","-85.550267","-5","1" +"49356","Ada","MI","43.031413","-85.550267","-5","1" +"49357","Ada","MI","43.031413","-85.550267","-5","1" +"49368","Slagle","MI","44.321979","-85.713857","-5","1" +"49394","Lincoln","MI","43.60034","-85.82081","-5","1" +"49401","Allendale","MI","42.973667","-85.9318","-5","1" +"49402","Branch","MI","43.930995","-86.05421","-5","1" +"49403","Conklin","MI","43.125652","-85.84983","-5","1" +"49404","Coopersville","MI","43.06507","-85.94516","-5","1" +"49405","Custer","MI","43.907681","-86.19014","-5","1" +"49406","Douglas","MI","42.643315","-86.20404","-5","1" +"49408","Fennville","MI","42.575519","-86.12461","-5","1" +"49409","Ferrysburg","MI","43.080865","-86.215413","-5","1" +"49410","Fountain","MI","44.016249","-86.14028","-5","1" +"49411","Free Soil","MI","44.100701","-86.2662","-5","1" +"49412","Fremont","MI","43.464943","-85.95005","-5","1" +"49413","Fremont","MI","43.554311","-85.800884","-5","1" +"49415","Fruitport","MI","43.135994","-86.13348","-5","1" +"49416","Glenn","MI","42.630533","-86.072032","-5","1" +"49417","Grand Haven","MI","43.04117","-86.19013","-5","1" +"49418","Grandville","MI","42.891709","-85.76466","-5","1" +"49419","Hamilton","MI","42.679762","-85.98996","-5","1" +"49420","Hart","MI","43.708002","-86.30604","-5","1" +"49421","Hesperia","MI","43.595939","-86.0865","-5","1" +"49422","Holland","MI","42.985596","-86.444751","-5","1" +"49423","Holland","MI","42.765918","-86.10544","-5","1" +"49424","Holland","MI","42.823232","-86.12726","-5","1" +"49425","Holton","MI","43.443787","-86.10895","-5","1" +"49426","Hudsonville","MI","42.873302","-85.87861","-5","1" +"49427","Jamestown","MI","42.826676","-85.844378","-5","1" +"49428","Jenison","MI","42.904275","-85.82314","-5","1" +"49429","Jenison","MI","42.985596","-86.444751","-5","1" +"49430","Lamont","MI","43.010337","-85.89754","-5","1" +"49431","Ludington","MI","43.967306","-86.43044","-5","1" +"49434","Macatawa","MI","42.768619","-86.20597","-5","1" +"49435","Marne","MI","43.032323","-85.83015","-5","1" +"49436","Mears","MI","43.678258","-86.46576","-5","1" +"49437","Montague","MI","43.436692","-86.37093","-5","1" +"49440","Muskegon","MI","43.234014","-86.25131","-5","1" +"49441","Muskegon","MI","43.199364","-86.2668","-5","1" +"49442","Muskegon","MI","43.232615","-86.1955","-5","1" +"49443","Muskegon","MI","43.295493","-86.468853","-5","1" +"49444","Muskegon","MI","43.198048","-86.22774","-5","1" +"49445","Muskegon","MI","43.278021","-86.2682","-5","1" +"49446","New Era","MI","43.551783","-86.40265","-5","1" +"49448","Nunica","MI","43.091183","-86.07346","-5","1" +"49449","Pentwater","MI","43.791699","-86.40276","-5","1" +"49450","Pullman","MI","42.484769","-86.07944","-5","1" +"49451","Ravenna","MI","43.200998","-85.96376","-5","1" +"49452","Rothbury","MI","43.520576","-86.27335","-5","1" +"49453","Saugatuck","MI","42.668174","-86.18724","-5","1" +"49454","Scottville","MI","43.946244","-86.28427","-5","1" +"49455","Shelby","MI","43.607628","-86.37004","-5","1" +"49456","Spring Lake","MI","43.08767","-86.19345","-5","1" +"49457","Twin Lake","MI","43.360182","-86.18835","-5","1" +"49458","Walhalla","MI","43.945299","-86.11684","-5","1" +"49459","Walkerville","MI","43.733491","-86.11462","-5","1" +"49460","West Olive","MI","42.935483","-86.14141","-5","1" +"49461","Whitehall","MI","43.389775","-86.34028","-5","1" +"49463","Wabaningo","MI","43.295493","-86.468853","-5","1" +"49464","Zeeland","MI","42.829252","-85.99621","-5","1" +"49468","Grandville","MI","43.031413","-85.550267","-5","1" +"49501","Grand Rapids","MI","42.984226","-85.629101","-5","1" +"49502","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49503","Grand Rapids","MI","42.964176","-85.65885","-5","1" +"49504","Grand Rapids","MI","42.977925","-85.69733","-5","1" +"49505","Grand Rapids","MI","43.000076","-85.64785","-5","1" +"49506","Grand Rapids","MI","42.945727","-85.61899","-5","1" +"49507","Grand Rapids","MI","42.933077","-85.65435","-5","1" +"49508","Grand Rapids","MI","42.876661","-85.62856","-5","1" +"49509","Grand Rapids","MI","42.905877","-85.70392","-5","1" +"49510","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49512","Grand Rapids","MI","42.888821","-85.5616","-5","1" +"49514","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49515","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49516","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49518","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49523","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49525","Grand Rapids","MI","43.022199","-85.61168","-5","1" +"49530","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49544","Grand Rapids","MI","42.999561","-85.75371","-5","1" +"49546","Grand Rapids","MI","42.927801","-85.54582","-5","1" +"49548","Grand Rapids","MI","42.868228","-85.66391","-5","1" +"49550","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49555","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49560","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49564","Glen Arbor","MI","44.933988","-85.950661","-5","1" +"49565","Newkirk","MI","44.115429","-85.78338","-5","1" +"49582","Colfax","MI","44.544624","-85.832785","-5","1" +"49588","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49590","Whitewater","MI","44.851771","-85.394202","-5","1" +"49599","Grand Rapids","MI","43.031413","-85.550267","-5","1" +"49601","Cadillac","MI","44.243788","-85.46006","-5","1" +"49610","Acme","MI","44.789382","-85.488449","-5","1" +"49611","Alba","MI","44.976915","-84.97282","-5","1" +"49612","Alden","MI","44.877741","-85.24163","-5","1" +"49613","Arcadia","MI","44.494139","-86.21509","-5","1" +"49614","Bear Lake","MI","44.433903","-86.12625","-5","1" +"49615","Bellaire","MI","44.970267","-85.21448","-5","1" +"49616","Benzonia","MI","44.592766","-86.08323","-5","1" +"49617","Beulah","MI","44.643593","-86.04382","-5","1" +"49618","Boon","MI","44.306885","-85.60119","-5","1" +"49619","Brethren","MI","44.306548","-86.00977","-5","1" +"49620","Buckley","MI","44.516368","-85.68623","-5","1" +"49621","Cedar","MI","44.872464","-85.78716","-5","1" +"49622","Central Lake","MI","45.074263","-85.26929","-5","1" +"49623","Chase","MI","43.889404","-85.67131","-5","1" +"49625","Copemish","MI","44.44905","-85.88908","-5","1" +"49626","Eastlake","MI","44.245509","-86.29477","-5","1" +"49627","Eastport","MI","45.107683","-85.36212","-5","1" +"49628","Elberta","MI","44.617592","-86.22663","-5","1" +"49629","Elk Rapids","MI","44.900873","-85.40671","-5","1" +"49630","Empire","MI","44.845213","-86.02479","-5","1" +"49631","Evart","MI","43.893894","-85.26394","-5","1" +"49632","Falmouth","MI","44.233529","-84.97463","-5","1" +"49633","Fife Lake","MI","44.555245","-85.22931","-5","1" +"49634","Filer City","MI","44.215959","-86.29048","-5","1" +"49635","Frankfort","MI","44.631","-86.21484","-5","1" +"49636","Glen Arbor","MI","44.884904","-85.98588","-5","1" +"49637","Grawn","MI","44.647716","-85.70649","-5","1" +"49638","Harrietta","MI","44.30192","-85.75597","-5","1" +"49639","Hersey","MI","43.84716","-85.40908","-5","1" +"49640","Honor","MI","44.701761","-86.05033","-5","1" +"49642","Idlewild","MI","43.880898","-85.78999","-5","1" +"49643","Interlochen","MI","44.634131","-85.8079","-5","1" +"49644","Irons","MI","44.105814","-85.92846","-5","1" +"49645","Kaleva","MI","44.371587","-86.0122","-5","1" +"49646","Kalkaska","MI","44.743834","-85.08986","-5","1" +"49647","Paradise","MI","44.515487","-85.527652","-5","1" +"49648","Kewadin","MI","45.000254","-85.3651","-5","1" +"49649","Kingsley","MI","44.561602","-85.52611","-5","1" +"49650","Lake Ann","MI","44.725887","-85.85676","-5","1" +"49651","Lake City","MI","44.382889","-85.14305","-5","1" +"49652","Yates","MI","43.867421","-85.772312","-5","1" +"49653","Lake Leelanau","MI","44.975051","-85.72325","-5","1" +"49654","Leland","MI","45.023384","-85.75697","-5","1" +"49655","Leroy","MI","44.023714","-85.44877","-5","1" +"49656","Luther","MI","44.05505","-85.69759","-5","1" +"49657","McBain","MI","44.204505","-85.1771","-5","1" +"49659","Mancelona","MI","44.905437","-85.03401","-5","1" +"49660","Manistee","MI","44.234322","-86.27234","-5","1" +"49663","Manton","MI","44.426913","-85.37836","-5","1" +"49664","Maple City","MI","44.888566","-85.89914","-5","1" +"49665","Marion","MI","44.095357","-85.11843","-5","1" +"49666","Mayfield","MI","44.635328","-85.5614","-5","1" +"49667","Merritt","MI","44.335387","-84.91649","-5","1" +"49668","Mesick","MI","44.405334","-85.71981","-5","1" +"49670","Northport","MI","45.107479","-85.62347","-5","1" +"49673","Old Mission","MI","44.955872","-85.490005","-5","1" +"49674","Omena","MI","45.066568","-85.597374","-5","1" +"49675","Onekama","MI","44.365757","-86.21149","-5","1" +"49676","Rapid City","MI","44.829056","-85.27959","-5","1" +"49677","Reed City","MI","43.906666","-85.5155","-5","1" +"49679","Sears","MI","43.878924","-85.15802","-5","1" +"49680","South Boardman","MI","44.654872","-85.26096","-5","1" +"49682","Suttons Bay","MI","44.993085","-85.63635","-5","1" +"49683","Thompsonville","MI","44.531456","-85.9334","-5","1" +"49684","Traverse City","MI","44.74136","-85.67316","-5","1" +"49685","Traverse City","MI","44.816178","-85.575147","-5","1" +"49686","Traverse City","MI","44.735559","-85.54511","-5","1" +"49688","Tustin","MI","44.117243","-85.43612","-5","1" +"49689","Wellston","MI","44.209541","-85.9109","-5","1" +"49690","Williamsburg","MI","44.774285","-85.41696","-5","1" +"49695","Custer","MI","44.918887","-85.131606","-5","1" +"49696","Traverse City","MI","44.816178","-85.575147","-5","1" +"49701","Mackinaw City","MI","45.773926","-84.72714","-5","1" +"49705","Afton","MI","45.355074","-84.47898","-5","1" +"49706","Alanson","MI","45.431122","-84.77654","-5","1" +"49707","Alpena","MI","45.08583","-83.46411","-5","1" +"49709","Atlanta","MI","45.016358","-84.14518","-5","1" +"49710","Barbeau","MI","46.274091","-84.17164","-5","1" +"49711","Bay Shore","MI","45.523425","-85.332038","-5","1" +"49712","Boyne City","MI","45.215511","-85.00995","-5","1" +"49713","Boyne Falls","MI","45.206973","-84.86185","-5","1" +"49715","Brimley","MI","46.411782","-84.66502","-5","1" +"49716","Brutus","MI","45.515594","-84.72353","-5","1" +"49717","Burt Lake","MI","45.430705","-84.691207","-5","1" +"49718","Carp Lake","MI","45.714093","-84.79969","-5","1" +"49719","Cedarville","MI","45.998074","-84.32615","-5","1" +"49720","Charlevoix","MI","45.294169","-85.24516","-5","1" +"49721","Cheboygan","MI","45.589694","-84.4625","-5","1" +"49722","Conway","MI","45.416693","-84.86646","-5","1" +"49723","Cross Village","MI","45.625353","-85.041872","-5","1" +"49724","Dafter","MI","46.33614","-84.43525","-5","1" +"49725","De Tour Village","MI","45.992931","-83.98087","-5","1" +"49726","Drummond Island","MI","45.994672","-83.75198","-5","1" +"49727","East Jordan","MI","45.1379","-85.12252","-5","1" +"49728","Eckerman","MI","46.355548","-84.99249","-5","1" +"49729","Ellsworth","MI","45.160264","-85.26699","-5","1" +"49730","Elmira","MI","45.039542","-84.86774","-5","1" +"49732","Forest","MI","45.354266","-84.301497","-5","1" +"49733","Frederic","MI","44.809476","-84.71727","-5","1" +"49734","Gaylord","MI","45.028411","-84.612207","-5","1" +"49735","Gaylord","MI","44.989608","-84.67492","-5","1" +"49736","Goetzville","MI","46.064734","-84.15477","-5","1" +"49737","Good Hart","MI","45.580183","-85.113678","-5","1" +"49738","Grayling","MI","44.683274","-84.6253","-5","1" +"49739","Grayling","MI","44.682996","-84.610441","-5","1" +"49740","Harbor Springs","MI","45.502308","-84.99025","-5","1" +"49743","Hawks","MI","45.282088","-83.93526","-5","1" +"49744","Herron","MI","44.993111","-83.65723","-5","1" +"49745","Hessel","MI","46.01207","-84.45048","-5","1" +"49746","Hillman","MI","45.068394","-83.96071","-5","1" +"49747","Hubbard Lake","MI","44.827421","-83.61368","-5","1" +"49748","Hulbert","MI","46.340461","-85.16591","-5","1" +"49749","Indian River","MI","45.418813","-84.59578","-5","1" +"49750","Lewiston","MI","44.884763","-84.35977","-5","1" +"49751","Johannesburg","MI","44.963659","-84.43175","-5","1" +"49752","Kinross","MI","46.250359","-84.48228","-5","1" +"49753","Lachine","MI","44.99718","-83.7918","-5","1" +"49755","Levering","MI","45.631602","-84.79103","-5","1" +"49756","Lewiston","MI","44.839929","-84.30787","-5","1" +"49757","Mackinac Island","MI","45.856777","-84.62643","-5","1" +"49758","Greenwood","MI","44.682965","-84.287698","-5","1" +"49759","Millersburg","MI","45.433394","-84.09811","-5","1" +"49760","Moran","MI","46.048831","-84.94734","-5","1" +"49761","Mullett Lake","MI","45.563799","-84.52405","-5","1" +"49762","Naubinway","MI","46.142357","-85.29284","-5","1" +"49764","Oden","MI","45.423768","-84.82611","-5","1" +"49765","Onaway","MI","45.354463","-84.23956","-5","1" +"49766","Ossineke","MI","44.920907","-83.45125","-5","1" +"49768","Paradise","MI","46.659548","-85.09913","-5","1" +"49769","Pellston","MI","45.567787","-84.81464","-5","1" +"49770","Petoskey","MI","45.360111","-84.93774","-5","1" +"49774","Pickford","MI","46.165132","-84.33219","-5","1" +"49775","Pointe Aux Pins","MI","45.758378","-84.46507","-5","1" +"49776","Posen","MI","45.248956","-83.69012","-5","1" +"49777","Presque Isle","MI","45.311011","-83.49878","-5","1" +"49778","Brimley","MI","46.410777","-84.336519","-5","1" +"49779","Rogers City","MI","45.413252","-83.83626","-5","1" +"49780","Rudyard","MI","46.204512","-84.73671","-5","1" +"49781","Saint Ignace","MI","45.923952","-84.7255","-5","1" +"49782","Beaver Island","MI","45.739114","-85.55339","-5","1" +"49783","Sault Sainte Marie","MI","46.460895","-84.32485","-5","1" +"49784","Kincheloe","MI","46.410777","-84.336519","-5","1" +"49785","Kincheloe","MI","46.181451","-84.405367","-5","1" +"49786","Kincheloe","MI","46.410777","-84.336519","-5","1" +"49788","Kincheloe","MI","46.267303","-84.45633","-5","1" +"49790","Strongs","MI","46.387377","-84.966792","-5","1" +"49791","Topinabee","MI","45.48586","-84.59227","-5","1" +"49792","Tower","MI","45.354677","-84.30074","-5","1" +"49793","Trout Lake","MI","46.199197","-85.05287","-5","1" +"49795","Vanderbilt","MI","45.169729","-84.60248","-5","1" +"49796","Walloon Lake","MI","45.269001","-84.9475","-5","1" +"49797","Waters","MI","44.870234","-84.659847","-5","1" +"49799","Wolverine","MI","45.268255","-84.60141","-5","1" +"49801","Iron Mountain","MI","45.87178","-87.99717","-6","1" +"49802","Kingsford","MI","45.800687","-88.08323","-6","1" +"49805","Allouez","MI","47.322703","-88.40806","-5","1" +"49806","Au Train","MI","46.436663","-86.88541","-5","1" +"49807","Bark River","MI","45.770006","-87.34617","-6","1" +"49808","Big Bay","MI","46.650313","-87.86241","-5","1" +"49812","Carney","MI","45.59232","-87.50316","-6","1" +"49813","Cedar River","MI","45.435313","-87.37679","-6","1" +"49814","Champion","MI","46.501074","-87.92354","-5","1" +"49815","Channing","MI","46.186913","-88.04546","-6","1" +"49816","Chatham","MI","46.323845","-86.90766","-5","1" +"49817","Cooks","MI","45.921508","-86.45869","-5","1" +"49818","Cornell","MI","45.936883","-87.26197","-5","1" +"49819","Arnold","MI","46.604141","-87.614805","-5","1" +"49820","Curtis","MI","46.191702","-85.72148","-5","1" +"49821","Daggett","MI","45.521574","-87.61977","-6","1" +"49822","Deerton","MI","46.470986","-87.06843","-5","1" +"49825","Eben Junction","MI","46.364487","-86.98096","-5","1" +"49826","Rumely","MI","46.364395","-86.99621","-5","1" +"49827","Engadine","MI","46.156073","-85.57069","-5","1" +"49829","Escanaba","MI","45.751671","-87.08951","-5","1" +"49831","Felch","MI","45.994849","-87.81615","-6","1" +"49833","Little Lake","MI","46.291233","-87.33355","-5","1" +"49834","Foster City","MI","45.947706","-87.77089","-6","1" +"49835","Garden","MI","45.769159","-86.55894","-5","1" +"49836","Germfask","MI","46.180416","-85.90176","-5","1" +"49837","Gladstone","MI","45.847136","-87.04529","-5","1" +"49838","Gould City","MI","46.095949","-85.71737","-5","1" +"49839","Grand Marais","MI","46.655567","-85.95837","-5","1" +"49840","Gulliver","MI","46.000666","-85.9963","-5","1" +"49841","Gwinn","MI","46.299186","-87.43312","-5","1" +"49845","Harris","MI","45.692178","-87.351342","-6","1" +"49847","Hermansville","MI","45.709804","-87.61054","-6","1" +"49848","Ingalls","MI","45.376503","-87.63243","-6","1" +"49849","Ishpeming","MI","46.458207","-87.72709","-5","1" +"49852","Loretto","MI","45.781167","-87.81759","-6","1" +"49853","McMillan","MI","46.301265","-85.72321","-5","1" +"49854","Manistique","MI","46.042121","-86.33946","-5","1" +"49855","Marquette","MI","46.554402","-87.42223","-5","1" +"49858","Menominee","MI","45.1431","-87.60897","-6","1" +"49861","Michigamme","MI","46.54081","-88.14742","-5","1" +"49862","Munising","MI","46.37503","-86.70615","-5","1" +"49863","Nadeau","MI","45.610678","-87.55411","-6","1" +"49864","Nahma","MI","45.840744","-86.66216","-5","1" +"49865","National Mine","MI","46.604141","-87.614805","-5","1" +"49866","Negaunee","MI","46.517192","-87.58245","-5","1" +"49868","Newberry","MI","46.434201","-85.54758","-5","1" +"49869","Wells","MI","46.07199","-87.533429","-5","1" +"49870","Norway","MI","45.792399","-87.90824","-6","1" +"49871","Palmer","MI","46.440274","-87.58988","-5","1" +"49872","Perkins","MI","45.987113","-87.0742","-5","1" +"49873","Perronville","MI","45.889823","-87.50716","-6","1" +"49874","Powers","MI","45.693128","-87.50966","-6","1" +"49876","Quinnesec","MI","45.80007","-87.99141","-6","1" +"49877","Ralph","MI","46.108829","-87.78294","-6","1" +"49878","Rapid River","MI","45.926298","-86.90898","-5","1" +"49879","Republic","MI","46.345957","-88.01972","-5","1" +"49880","Rock","MI","46.086125","-87.20146","-5","1" +"49881","Sagola","MI","46.085875","-87.99607","-6","1" +"49883","Seney","MI","46.460628","-85.98878","-5","1" +"49884","Shingleton","MI","46.399545","-86.43315","-5","1" +"49885","Skandia","MI","46.356104","-87.25211","-5","1" +"49886","Spalding","MI","45.695551","-87.50457","-6","1" +"49887","Stephenson","MI","45.417184","-87.6281","-6","1" +"49891","Trenary","MI","46.229173","-87.01715","-5","1" +"49892","Vulcan","MI","45.755894","-87.78838","-6","1" +"49893","Wallace","MI","45.314014","-87.63114","-6","1" +"49894","Wells","MI","45.778066","-87.07647","-5","1" +"49895","Wetmore","MI","46.191294","-86.64901","-5","1" +"49896","Wilson","MI","45.685664","-87.37748","-6","1" +"49901","Ahmeek","MI","47.297841","-88.39491","-5","1" +"49902","Alpha","MI","46.045407","-88.37681","-6","1" +"49903","Amasa","MI","46.234686","-88.45043","-6","1" +"49905","Atlantic Mine","MI","47.101109","-88.71833","-5","1" +"49908","Baraga","MI","46.795417","-88.52645","-5","1" +"49910","Bergland","MI","46.576653","-89.57618","-5","1" +"49911","Bessemer","MI","46.480948","-90.05138","-6","1" +"49912","Bruce Crossing","MI","46.46077","-89.15645","-5","1" +"49913","Calumet","MI","47.239083","-88.46121","-5","1" +"49915","Caspian","MI","46.063428","-88.62738","-6","1" +"49916","Chassell","MI","47.010896","-88.54077","-5","1" +"49917","Copper City","MI","47.283086","-88.38434","-5","1" +"49918","Copper Harbor","MI","47.467597","-87.88212","-5","1" +"49919","Covington","MI","46.559834","-88.52201","-5","1" +"49920","Crystal Falls","MI","46.12624","-88.35677","-6","1" +"49921","Dodgeville","MI","47.093922","-88.57894","-5","1" +"49922","Dollar Bay","MI","47.122751","-88.4818","-5","1" +"49924","Houghton","MI","47.414054","-88.297959","-5","1" +"49925","Ewen","MI","46.555946","-89.34434","-5","1" +"49927","Gaastra","MI","46.056611","-88.59396","-6","1" +"49929","Greenland","MI","46.780926","-89.09762","-5","1" +"49930","Hancock","MI","47.145007","-88.57829","-5","1" +"49931","Houghton","MI","47.11929","-88.57259","-5","1" +"49934","Hubbell","MI","47.170691","-88.43396","-5","1" +"49935","Iron River","MI","46.108022","-88.70073","-6","1" +"49938","Ironwood","MI","46.47351","-90.15732","-6","1" +"49942","Kearsarge","MI","47.269659","-88.41589","-5","1" +"49943","Iron River","MI","46.421861","-88.879139","-5","1" +"49945","Lake Linden","MI","47.17583","-88.32904","-5","1" +"49946","Lanse","MI","46.766303","-88.37867","-5","1" +"49947","Marenisco","MI","46.420235","-89.66518","-6","1" +"49948","Mass City","MI","46.730077","-89.02038","-5","1" +"49950","Mohawk","MI","47.400603","-88.14768","-5","1" +"49952","Nisula","MI","46.7596","-88.84928","-5","1" +"49953","Ontonagon","MI","46.846455","-89.35119","-5","1" +"49955","Painesdale","MI","47.034828","-88.6719","-5","1" +"49958","Pelkie","MI","46.830728","-88.65751","-5","1" +"49959","Ramsay","MI","46.470746","-89.99603","-6","1" +"49960","Rockland","MI","46.739853","-89.18126","-5","1" +"49961","Sidnaw","MI","46.469552","-88.73659","-5","1" +"49962","Skanee","MI","46.877","-88.17166","-5","1" +"49963","South Range","MI","47.069257","-88.63936","-5","1" +"49964","Stambaugh","MI","46.081472","-88.62806","-6","1" +"49965","Toivola","MI","47.001469","-88.88179","-5","1" +"49967","Trout Creek","MI","46.459705","-89.0028","-5","1" +"49968","Wakefield","MI","46.466645","-89.91876","-6","1" +"49969","Watersmeet","MI","46.258959","-89.26594","-6","1" +"49970","Watton","MI","46.53227","-88.60459","-5","1" +"49971","White Pine","MI","46.754237","-89.57925","-5","1" +"49974","Pickford","MI","46.158139","-84.361116","-5","1" +"49990","Alpha","MI","46.045288","-88.375199","-6","1" +"50001","Ackworth","IA","41.363615","-93.41494","-6","1" +"50002","Adair","IA","41.507565","-94.64805","-6","1" +"50003","Adel","IA","41.612628","-94.03587","-6","1" +"50005","Albion","IA","42.116477","-93.00357","-6","1" +"50006","Alden","IA","42.50767","-93.40082","-6","1" +"50007","Alleman","IA","41.804875","-93.60475","-6","1" +"50008","Allerton","IA","40.688451","-93.37907","-6","1" +"50009","Altoona","IA","41.644716","-93.46641","-6","1" +"50010","Ames","IA","42.02933","-93.60966","-6","1" +"50011","Ames","IA","42.035998","-93.465172","-6","1" +"50012","Ames","IA","42.023557","-93.648465","-6","1" +"50013","Ames","IA","42.023535","-93.640818","-6","1" +"50014","Ames","IA","42.033235","-93.66741","-6","1" +"50015","Ankeny","IA","41.672687","-93.572173","-6","1" +"50020","Anita","IA","41.445635","-94.75806","-6","1" +"50021","Ankeny","IA","41.725288","-93.60475","-6","1" +"50022","Atlantic","IA","41.410484","-95.00852","-6","1" +"50025","Audubon","IA","41.741295","-94.92781","-6","1" +"50026","Bagley","IA","41.853498","-94.43912","-6","1" +"50027","Barnes City","IA","41.472488","-92.46899","-6","1" +"50028","Baxter","IA","41.820644","-93.14743","-6","1" +"50029","Bayard","IA","41.845871","-94.55588","-6","1" +"50031","Beaver","IA","42.038746","-94.143566","-6","1" +"50032","Berwick","IA","41.666513","-93.53916","-6","1" +"50033","Bevington","IA","41.360357","-93.79219","-6","1" +"50034","Blairsburg","IA","42.490439","-93.64187","-6","1" +"50035","Bondurant","IA","41.704455","-93.46171","-6","1" +"50036","Boone","IA","42.074515","-93.87437","-6","1" +"50037","Boone","IA","42.036552","-93.931686","-6","1" +"50038","Booneville","IA","41.519724","-93.90483","-6","1" +"50039","Bouton","IA","41.830156","-94.01444","-6","1" +"50040","Boxholm","IA","42.174905","-94.10552","-6","1" +"50041","Bradford","IA","42.632923","-93.2459","-6","1" +"50042","Brayton","IA","41.534416","-94.90323","-6","1" +"50043","Buckeye","IA","42.417866","-93.375544","-6","1" +"50044","Bussey","IA","41.202354","-92.88621","-6","1" +"50046","Cambridge","IA","41.89949","-93.5311","-6","1" +"50047","Carlisle","IA","41.491089","-93.48058","-6","1" +"50048","Casey","IA","41.514342","-94.52139","-6","1" +"50049","Chariton","IA","41.02891","-93.29857","-6","1" +"50050","Churdan","IA","42.16372","-94.50771","-6","1" +"50051","Clemons","IA","42.13644","-93.14222","-6","1" +"50052","Clio","IA","40.639737","-93.45615","-6","1" +"50054","Colfax","IA","41.682808","-93.23591","-6","1" +"50055","Collins","IA","41.880967","-93.29691","-6","1" +"50056","Colo","IA","42.011477","-93.31293","-6","1" +"50057","Columbia","IA","41.185045","-93.1683","-6","1" +"50058","Coon Rapids","IA","41.87131","-94.6884","-6","1" +"50059","Cooper","IA","41.919495","-94.34518","-6","1" +"50060","Corydon","IA","40.756632","-93.31527","-6","1" +"50061","Cumming","IA","41.491203","-93.78537","-6","1" +"50062","Dallas","IA","41.23022","-93.23904","-6","1" +"50063","Dallas Center","IA","41.687847","-93.94852","-6","1" +"50064","Dana","IA","42.114858","-94.23112","-6","1" +"50065","Davis City","IA","40.623677","-93.80106","-6","1" +"50066","Dawson","IA","41.827287","-94.21237","-6","1" +"50067","Decatur","IA","40.734072","-93.85169","-6","1" +"50068","Derby","IA","40.937432","-93.45659","-6","1" +"50069","De Soto","IA","41.53106","-94.00842","-6","1" +"50070","Dexter","IA","41.488275","-94.23785","-6","1" +"50071","Dows","IA","42.653654","-93.50761","-6","1" +"50072","Earlham","IA","41.468077","-94.12488","-6","1" +"50073","Elkhart","IA","41.792118","-93.52595","-6","1" +"50074","Ellston","IA","40.852515","-94.07546","-6","1" +"50075","Ellsworth","IA","42.325266","-93.56507","-6","1" +"50076","Exira","IA","41.592497","-94.87032","-6","1" +"50078","Ferguson","IA","41.93746","-92.865","-6","1" +"50101","Galt","IA","42.682176","-93.61472","-6","1" +"50102","Garden City","IA","42.24489","-93.39783","-6","1" +"50103","Garden Grove","IA","40.801638","-93.60711","-6","1" +"50104","Gibson","IA","41.472819","-92.3841","-6","1" +"50105","Gilbert","IA","42.110624","-93.64504","-6","1" +"50106","Gilman","IA","41.87955","-92.79387","-6","1" +"50107","Grand Junction","IA","42.036623","-94.21948","-6","1" +"50108","Grand River","IA","40.834902","-93.95414","-6","1" +"50109","Granger","IA","41.759988","-93.81486","-6","1" +"50110","Gray","IA","41.84115","-94.9812","-6","1" +"50111","Grimes","IA","41.67822","-93.7935","-6","1" +"50112","Grinnell","IA","41.736434","-92.72123","-6","1" +"50115","Guthrie Center","IA","41.690084","-94.52602","-6","1" +"50116","Hamilton","IA","41.17969","-92.94775","-6","1" +"50117","Hamlin","IA","41.671777","-94.84924","-6","1" +"50118","Hartford","IA","41.457014","-93.39078","-6","1" +"50119","Harvey","IA","41.313748","-92.93875","-6","1" +"50120","Haverhill","IA","41.940175","-92.96979","-6","1" +"50122","Hubbard","IA","42.30884","-93.31162","-6","1" +"50123","Humeston","IA","40.854525","-93.49863","-6","1" +"50124","Huxley","IA","41.893335","-93.59844","-6","1" +"50125","Indianola","IA","41.354068","-93.57506","-6","1" +"50126","Iowa Falls","IA","42.515426","-93.26217","-6","1" +"50127","Ira","IA","41.777174","-93.21383","-6","1" +"50128","Jamaica","IA","41.855913","-94.29981","-6","1" +"50129","Jefferson","IA","42.017677","-94.37939","-6","1" +"50130","Jewell","IA","42.302683","-93.65232","-6","1" +"50131","Johnston","IA","41.674757","-93.71865","-6","1" +"50132","Kamrar","IA","42.393155","-93.70867","-6","1" +"50133","Kellerton","IA","40.70332","-94.08143","-6","1" +"50134","Kelley","IA","41.949947","-93.6648","-6","1" +"50135","Kellogg","IA","41.736358","-92.89481","-6","1" +"50136","Keswick","IA","41.463624","-92.26841","-6","1" +"50137","Killduff","IA","41.607887","-92.90573","-6","1" +"50138","Knoxville","IA","41.307595","-93.10226","-6","1" +"50139","Lacona","IA","41.182964","-93.36927","-6","1" +"50140","Lamoni","IA","40.630919","-93.94857","-6","1" +"50141","Laurel","IA","41.88053","-92.95464","-6","1" +"50142","Le Grand","IA","42.00533","-92.77525","-6","1" +"50143","Leighton","IA","41.324195","-92.80631","-6","1" +"50144","Leon","IA","40.736802","-93.74273","-6","1" +"50145","Liberty Center","IA","41.203946","-93.50069","-6","1" +"50146","Linden","IA","41.668493","-94.26066","-6","1" +"50147","Lineville","IA","40.60243","-93.52778","-6","1" +"50148","Liscomb","IA","42.187863","-93.00381","-6","1" +"50149","Lorimor","IA","41.137674","-94.08042","-6","1" +"50150","Lovilia","IA","41.120845","-92.93572","-6","1" +"50151","Lucas","IA","41.06058","-93.49076","-6","1" +"50152","Luther","IA","41.967091","-93.82106","-6","1" +"50153","Lynnville","IA","41.573516","-92.79458","-6","1" +"50154","McCallsburg","IA","42.168307","-93.39718","-6","1" +"50155","Macksburg","IA","41.210955","-94.18994","-6","1" +"50156","Madrid","IA","41.877415","-93.79925","-6","1" +"50157","Malcom","IA","41.7388","-92.56155","-6","1" +"50158","Marshalltown","IA","42.042506","-92.90646","-6","1" +"50160","Martensdale","IA","41.373193","-93.74093","-6","1" +"50161","Maxwell","IA","41.86625","-93.40134","-6","1" +"50162","Melbourne","IA","41.939663","-93.07114","-6","1" +"50163","Melcher","IA","41.242194","-93.173193","-6","1" +"50164","Menlo","IA","41.504978","-94.4065","-6","1" +"50165","Millerton","IA","40.847504","-93.30502","-6","1" +"50166","Milo","IA","41.283703","-93.41399","-6","1" +"50167","Minburn","IA","41.750745","-94.04659","-6","1" +"50168","Mingo","IA","41.780089","-93.26916","-6","1" +"50169","Mitchellville","IA","41.661112","-93.35327","-6","1" +"50170","Monroe","IA","41.528347","-93.10517","-6","1" +"50171","Montezuma","IA","41.581309","-92.53946","-6","1" +"50173","Montour","IA","41.980296","-92.711","-6","1" +"50174","Murray","IA","41.039527","-93.95498","-6","1" +"50177","Grinnell","IA","41.685742","-92.532032","-6","1" +"50197","Knoxville","IA","41.334549","-93.099205","-6","1" +"50198","Knoxville","IA","41.334549","-93.099205","-6","1" +"50201","Nevada","IA","42.026021","-93.4484","-6","1" +"50206","New Providence","IA","42.250902","-93.2007","-6","1" +"50207","New Sharon","IA","41.445018","-92.64823","-6","1" +"50208","Newton","IA","41.702148","-93.04467","-6","1" +"50210","New Virginia","IA","41.193148","-93.71388","-6","1" +"50211","Norwalk","IA","41.470726","-93.68225","-6","1" +"50212","Ogden","IA","42.045766","-94.0443","-6","1" +"50213","Osceola","IA","41.031309","-93.77004","-6","1" +"50214","Otley","IA","41.456325","-93.0738","-6","1" +"50216","Panora","IA","41.701873","-94.36488","-6","1" +"50217","Paton","IA","42.17191","-94.25943","-6","1" +"50218","Patterson","IA","41.348815","-93.88068","-6","1" +"50219","Pella","IA","41.411394","-92.91126","-6","1" +"50220","Perry","IA","41.846679","-94.10961","-6","1" +"50222","Peru","IA","41.223389","-93.94309","-6","1" +"50223","Pilot Mound","IA","42.162453","-94.01728","-6","1" +"50225","Pleasantville","IA","41.381537","-93.27056","-6","1" +"50226","Polk City","IA","41.782755","-93.71405","-6","1" +"50227","Popejoy","IA","42.594986","-93.42826","-6","1" +"50228","Prairie City","IA","41.584485","-93.24161","-6","1" +"50229","Prole","IA","41.381146","-93.77547","-6","1" +"50230","Radcliffe","IA","42.303222","-93.45343","-6","1" +"50231","Randall","IA","42.237408","-93.60253","-6","1" +"50232","Reasnor","IA","41.557079","-92.97056","-6","1" +"50233","Redfield","IA","41.604233","-94.20931","-6","1" +"50234","Rhodes","IA","41.89347","-93.1813","-6","1" +"50235","Rippey","IA","41.931753","-94.20565","-6","1" +"50236","Roland","IA","42.168363","-93.49432","-6","1" +"50237","Runnells","IA","41.536205","-93.38182","-6","1" +"50238","Russell","IA","40.962051","-93.18373","-6","1" +"50239","Saint Anthony","IA","42.135419","-93.2024","-6","1" +"50240","Saint Charles","IA","41.304096","-93.79728","-6","1" +"50241","Saint Marys","IA","41.308451","-93.73157","-6","1" +"50242","Searsboro","IA","41.56512","-92.69484","-6","1" +"50243","Sheldahl","IA","41.864393","-93.69541","-6","1" +"50244","Slater","IA","41.871283","-93.67508","-6","1" +"50246","Stanhope","IA","42.281552","-93.7952","-6","1" +"50247","State Center","IA","42.010415","-93.16827","-6","1" +"50248","Story City","IA","42.186442","-93.59867","-6","1" +"50249","Stratford","IA","42.280223","-93.90657","-6","1" +"50250","Stuart","IA","41.500086","-94.32731","-6","1" +"50251","Sully","IA","41.5714","-92.85941","-6","1" +"50252","Swan","IA","41.449489","-93.31782","-6","1" +"50254","Thayer","IA","40.99355","-94.07635","-6","1" +"50255","Thornburg","IA","41.336267","-92.178366","-6","1" +"50256","Tracy","IA","41.277693","-92.903","-6","1" +"50257","Truro","IA","41.204733","-93.84553","-6","1" +"50258","Union","IA","42.232454","-93.07833","-6","1" +"50259","Gifford","IA","42.383133","-93.250567","-6","1" +"50261","Van Meter","IA","41.490848","-93.94509","-6","1" +"50262","Van Wert","IA","40.857503","-93.79945","-6","1" +"50263","Waukee","IA","41.601516","-93.86151","-6","1" +"50264","Weldon","IA","40.89222","-93.70988","-6","1" +"50265","West Des Moines","IA","41.570916","-93.73568","-6","1" +"50266","West Des Moines","IA","41.581181","-93.78287","-6","1" +"50268","What Cheer","IA","41.403794","-92.3541","-6","1" +"50269","Whitten","IA","42.261478","-93.00738","-6","1" +"50271","Williams","IA","42.486287","-93.54644","-6","1" +"50272","Williamson","IA","41.08869","-93.25821","-6","1" +"50273","Winterset","IA","41.332618","-94.03802","-6","1" +"50274","Wiota","IA","41.394625","-94.86276","-6","1" +"50275","Woodburn","IA","41.01619","-93.59181","-6","1" +"50276","Woodward","IA","41.855315","-93.92795","-6","1" +"50277","Yale","IA","41.779131","-94.35418","-6","1" +"50278","Zearing","IA","42.158866","-93.29673","-6","1" +"50294","Stratford","IA","42.266846","-93.927086","-6","1" +"50301","Des Moines","IA","41.672687","-93.572173","-6","1" +"50302","Des Moines","IA","41.672687","-93.572173","-6","1" +"50303","Des Moines","IA","41.672687","-93.572173","-6","1" +"50304","Des Moines","IA","41.672687","-93.572173","-6","1" +"50305","Des Moines","IA","41.672687","-93.572173","-6","1" +"50306","Des Moines","IA","41.672687","-93.572173","-6","1" +"50307","Des Moines","IA","41.672687","-93.572173","-6","1" +"50308","Des Moines","IA","41.672687","-93.572173","-6","1" +"50309","Des Moines","IA","41.585939","-93.62004","-6","1" +"50310","Des Moines","IA","41.625988","-93.67403","-6","1" +"50311","Des Moines","IA","41.601189","-93.68076","-6","1" +"50312","Des Moines","IA","41.587039","-93.67356","-6","1" +"50313","Des Moines","IA","41.637638","-93.61636","-6","1" +"50314","Des Moines","IA","41.602989","-93.63237","-6","1" +"50315","Des Moines","IA","41.545089","-93.61904","-6","1" +"50316","Des Moines","IA","41.606339","-93.59829","-6","1" +"50317","Des Moines","IA","41.606939","-93.54829","-6","1" +"50318","Des Moines","IA","41.672687","-93.572173","-6","1" +"50319","Des Moines","IA","41.592089","-93.603967","-6","1" +"50320","Des Moines","IA","41.537059","-93.58072","-6","1" +"50321","Des Moines","IA","41.542789","-93.66189","-6","1" +"50322","Urbandale","IA","41.630521","-93.7238","-6","1" +"50323","Urbandale","IA","41.625788","-93.80235","-6","1" +"50325","Clive","IA","41.60787","-93.78093","-6","1" +"50327","Pleasant Hill","IA","41.587818","-93.505751","-6","1" +"50328","Des Moines","IA","41.672687","-93.572173","-6","1" +"50329","Des Moines","IA","41.672687","-93.572173","-6","1" +"50330","Des Moines","IA","41.672687","-93.572173","-6","1" +"50331","Des Moines","IA","41.672687","-93.572173","-6","1" +"50332","Des Moines","IA","41.672687","-93.572173","-6","1" +"50333","Des Moines","IA","41.672687","-93.572173","-6","1" +"50334","Des Moines","IA","41.672687","-93.572173","-6","1" +"50335","Des Moines","IA","41.672687","-93.572173","-6","1" +"50336","Des Moines","IA","41.672687","-93.572173","-6","1" +"50338","Des Moines","IA","41.672687","-93.572173","-6","1" +"50339","Des Moines","IA","41.672687","-93.572173","-6","1" +"50340","Des Moines","IA","41.672687","-93.572173","-6","1" +"50347","Des Moines","IA","41.672687","-93.572173","-6","1" +"50350","Des Moines","IA","41.672687","-93.572173","-6","1" +"50359","Des Moines","IA","41.672687","-93.572173","-6","1" +"50360","Des Moines","IA","41.672687","-93.572173","-6","1" +"50361","Des Moines","IA","41.672687","-93.572173","-6","1" +"50362","Des Moines","IA","41.672687","-93.572173","-6","1" +"50363","Des Moines","IA","41.672687","-93.572173","-6","1" +"50364","Des Moines","IA","41.672687","-93.572173","-6","1" +"50367","Des Moines","IA","41.672687","-93.572173","-6","1" +"50368","Des Moines","IA","41.672687","-93.572173","-6","1" +"50369","Des Moines","IA","41.672687","-93.572173","-6","1" +"50380","Des Moines","IA","41.672687","-93.572173","-6","1" +"50381","Des Moines","IA","41.672687","-93.572173","-6","1" +"50391","Des Moines","IA","41.672687","-93.572173","-6","1" +"50392","Des Moines","IA","41.587839","-93.627368","-6","1" +"50393","Des Moines","IA","41.672687","-93.572173","-6","1" +"50394","Des Moines","IA","41.672687","-93.572173","-6","1" +"50395","Des Moines","IA","41.672687","-93.572173","-6","1" +"50396","Des Moines","IA","41.672687","-93.572173","-6","1" +"50397","Des Moines","IA","41.672687","-93.572173","-6","1" +"50398","West Des Moines","IA","41.594543","-93.785502","-6","1" +"50401","Mason City","IA","43.153969","-93.20037","-6","1" +"50402","Mason City","IA","43.081604","-93.260879","-6","1" +"50405","Lake Mills","IA","43.418395","-93.525253","-6","1" +"50420","Alexander","IA","42.811536","-93.46844","-6","1" +"50421","Belmond","IA","42.842616","-93.6187","-6","1" +"50423","Britt","IA","43.104076","-93.8041","-6","1" +"50424","Buffalo Center","IA","43.392145","-93.94282","-6","1" +"50426","Carpenter","IA","43.414156","-93.01693","-6","1" +"50427","Chapin","IA","42.834852","-93.222587","-6","1" +"50428","Clear Lake","IA","43.1375","-93.38463","-6","1" +"50430","Corwith","IA","42.985613","-93.96138","-6","1" +"50431","Coulter","IA","42.735305","-93.37056","-6","1" +"50432","Crystal Lake","IA","43.222661","-93.7909","-6","1" +"50433","Dougherty","IA","42.922595","-93.04392","-6","1" +"50434","Fertile","IA","43.260087","-93.43553","-6","1" +"50435","Floyd","IA","43.157144","-92.76056","-6","1" +"50436","Forest City","IA","43.259165","-93.65625","-6","1" +"50438","Garner","IA","43.102343","-93.61033","-6","1" +"50439","Goodell","IA","42.930305","-93.62645","-6","1" +"50440","Grafton","IA","43.329416","-93.07297","-6","1" +"50441","Hampton","IA","42.743106","-93.21518","-6","1" +"50444","Hanlontown","IA","43.287532","-93.3836","-6","1" +"50446","Joice","IA","43.343138","-93.45694","-6","1" +"50447","Kanawha","IA","42.926804","-93.80821","-6","1" +"50448","Kensett","IA","43.349766","-93.22573","-6","1" +"50449","Klemme","IA","43.002473","-93.58292","-6","1" +"50450","Lake Mills","IA","43.418877","-93.52078","-6","1" +"50451","Lakota","IA","43.379814","-94.09044","-6","1" +"50452","Latimer","IA","42.77929","-93.36842","-6","1" +"50453","Leland","IA","43.363881","-93.6468","-6","1" +"50454","Little Cedar","IA","43.38301","-92.7293","-6","1" +"50455","McIntire","IA","43.450496","-92.64331","-6","1" +"50456","Manly","IA","43.289041","-93.20838","-6","1" +"50457","Meservey","IA","42.916174","-93.48318","-6","1" +"50458","Nora Springs","IA","43.147661","-93.00519","-6","1" +"50459","Northwood","IA","43.444448","-93.24015","-6","1" +"50460","Orchard","IA","43.220043","-92.72237","-6","1" +"50461","Osage","IA","43.290536","-92.82115","-6","1" +"50464","Plymouth","IA","43.248524","-93.09976","-6","1" +"50465","Rake","IA","43.484445","-93.91817","-6","1" +"50466","Riceville","IA","43.376582","-92.54755","-6","1" +"50467","Rock Falls","IA","43.206593","-93.08574","-6","1" +"50468","Rockford","IA","43.048973","-92.95458","-6","1" +"50469","Rockwell","IA","42.994932","-93.20192","-6","1" +"50470","Rowan","IA","42.7402","-93.55338","-6","1" +"50471","Rudd","IA","43.148134","-92.88759","-6","1" +"50472","Saint Ansgar","IA","43.402708","-92.93841","-6","1" +"50473","Scarville","IA","43.46592","-93.66671","-6","1" +"50475","Sheffield","IA","42.88516","-93.22082","-6","1" +"50476","Stacyville","IA","43.441028","-92.77702","-6","1" +"50477","Swaledale","IA","42.97779","-93.32768","-6","1" +"50478","Thompson","IA","43.385425","-93.77734","-6","1" +"50479","Thornton","IA","42.939528","-93.39301","-6","1" +"50480","Titonka","IA","43.242739","-94.04333","-6","1" +"50481","Toeterville","IA","43.356439","-92.788967","-6","1" +"50482","Ventura","IA","43.124246","-93.48259","-6","1" +"50483","Wesley","IA","43.104175","-93.99988","-6","1" +"50484","Woden","IA","43.236648","-93.92137","-6","1" +"50501","Fort Dodge","IA","42.499242","-94.18256","-6","1" +"50510","Albert City","IA","42.768165","-94.97033","-6","1" +"50511","Algona","IA","43.0739","-94.22602","-6","1" +"50514","Armstrong","IA","43.398596","-94.47223","-6","1" +"50515","Ayrshire","IA","43.023296","-94.85188","-6","1" +"50516","Badger","IA","42.624944","-94.13904","-6","1" +"50517","Bancroft","IA","43.295639","-94.22578","-6","1" +"50518","Barnum","IA","42.523953","-94.35401","-6","1" +"50519","Bode","IA","42.884723","-94.27644","-6","1" +"50520","Bradgate","IA","42.802568","-94.41955","-6","1" +"50521","Burnside","IA","42.346859","-94.10732","-6","1" +"50522","Burt","IA","43.192938","-94.19512","-6","1" +"50523","Callender","IA","42.36534","-94.29779","-6","1" +"50524","Clare","IA","42.603391","-94.36129","-6","1" +"50525","Clarion","IA","42.738313","-93.7385","-6","1" +"50526","Clarion","IA","42.733001","-93.73523","-6","1" +"50527","Curlew","IA","42.973868","-94.78269","-6","1" +"50528","Cylinder","IA","43.117331","-94.54767","-6","1" +"50529","Dakota City","IA","42.720708","-94.20185","-6","1" +"50530","Dayton","IA","42.26594","-94.0518","-6","1" +"50531","Dolliver","IA","43.465883","-94.61632","-6","1" +"50532","Duncombe","IA","42.456733","-93.99814","-6","1" +"50533","Eagle Grove","IA","42.659143","-93.90684","-6","1" +"50535","Early","IA","42.453686","-95.16395","-6","1" +"50536","Emmetsburg","IA","43.115156","-94.6931","-6","1" +"50538","Farnhamville","IA","42.279123","-94.41373","-6","1" +"50539","Fenton","IA","43.225165","-94.42583","-6","1" +"50540","Fonda","IA","42.58816","-94.84192","-6","1" +"50541","Gilmore City","IA","42.71032","-94.45293","-6","1" +"50542","Goldfield","IA","42.764886","-93.94113","-6","1" +"50543","Gowrie","IA","42.269537","-94.29539","-6","1" +"50544","Harcourt","IA","42.259002","-94.17666","-6","1" +"50545","Hardy","IA","42.818996","-94.07424","-6","1" +"50546","Havelock","IA","42.836636","-94.70587","-6","1" +"50548","Humboldt","IA","42.720313","-94.22517","-6","1" +"50551","Jolley","IA","42.475817","-94.7321","-6","1" +"50552","Knierim","IA","42.455148","-94.45652","-6","1" +"50554","Laurens","IA","42.844055","-94.84275","-6","1" +"50556","Ledyard","IA","43.448529","-94.19697","-6","1" +"50557","Lehigh","IA","42.358466","-94.05829","-6","1" +"50558","Livermore","IA","42.872099","-94.17339","-6","1" +"50559","Lone Rock","IA","43.204803","-94.31526","-6","1" +"50560","Lu Verne","IA","42.947984","-94.10845","-6","1" +"50561","Lytton","IA","42.417882","-94.85098","-6","1" +"50562","Mallard","IA","42.949884","-94.66372","-6","1" +"50563","Manson","IA","42.52503","-94.53628","-6","1" +"50565","Marathon","IA","42.855822","-95.00245","-6","1" +"50566","Moorland","IA","42.437122","-94.3214","-6","1" +"50567","Nemaha","IA","42.527637","-95.10125","-6","1" +"50568","Newell","IA","42.612476","-95.00006","-6","1" +"50569","Otho","IA","42.417893","-94.1494","-6","1" +"50570","Ottosen","IA","42.899575","-94.37557","-6","1" +"50571","Palmer","IA","42.638478","-94.58979","-6","1" +"50573","Plover","IA","42.878058","-94.624","-6","1" +"50574","Pocahontas","IA","42.724938","-94.68365","-6","1" +"50575","Pomeroy","IA","42.55602","-94.68307","-6","1" +"50576","Rembrandt","IA","42.814277","-95.18071","-6","1" +"50577","Renwick","IA","42.846831","-93.98159","-6","1" +"50578","Ringsted","IA","43.291538","-94.54121","-6","1" +"50579","Rockwell City","IA","42.395906","-94.63294","-6","1" +"50581","Rolfe","IA","42.842111","-94.53114","-6","1" +"50582","Rutland","IA","42.778791","-94.29535","-6","1" +"50583","Sac City","IA","42.43142","-94.99323","-6","1" +"50585","Sioux Rapids","IA","42.907223","-95.14315","-6","1" +"50586","Somers","IA","42.402475","-94.4351","-6","1" +"50587","Rinard","IA","42.339118","-94.488618","-6","1" +"50588","Storm Lake","IA","42.646924","-95.1807","-6","1" +"50590","Swea City","IA","43.392985","-94.31496","-6","1" +"50591","Thor","IA","42.684486","-94.05446","-6","1" +"50592","Truesdale","IA","42.728665","-95.18303","-6","1" +"50593","Varina","IA","42.658595","-94.90006","-6","1" +"50594","Vincent","IA","42.587704","-94.02502","-6","1" +"50595","Webster City","IA","42.464579","-93.82056","-6","1" +"50597","West Bend","IA","42.97944","-94.46472","-6","1" +"50598","Whittemore","IA","43.077787","-94.41061","-6","1" +"50599","Woolstock","IA","42.579038","-93.80387","-6","1" +"50601","Ackley","IA","42.563333","-93.04954","-6","1" +"50602","Allison","IA","42.74806","-92.80277","-6","1" +"50603","Alta Vista","IA","43.191256","-92.46546","-6","1" +"50604","Aplington","IA","42.606337","-92.8988","-6","1" +"50605","Aredale","IA","42.834044","-93.0135","-6","1" +"50606","Arlington","IA","42.752057","-91.67149","-6","1" +"50607","Aurora","IA","42.616399","-91.73262","-6","1" +"50608","Austinville","IA","42.58243","-92.95988","-6","1" +"50609","Beaman","IA","42.226183","-92.81015","-6","1" +"50611","Bristow","IA","42.805321","-92.91579","-6","1" +"50612","Buckingham","IA","42.275046","-92.39722","-6","1" +"50613","Cedar Falls","IA","42.527184","-92.45609","-6","1" +"50614","Cedar Falls","IA","42.469768","-92.309475","-6","1" +"50616","Charles City","IA","43.072978","-92.66719","-6","1" +"50619","Clarksville","IA","42.788967","-92.66584","-6","1" +"50620","Colwell","IA","43.110765","-92.744821","-6","1" +"50621","Conrad","IA","42.238432","-92.90748","-6","1" +"50622","Denver","IA","42.671132","-92.33825","-6","1" +"50623","Dewar","IA","42.526943","-92.21802","-6","1" +"50624","Dike","IA","42.463161","-92.66183","-6","1" +"50625","Dumont","IA","42.754361","-92.9751","-6","1" +"50626","Dunkerton","IA","42.576054","-92.16575","-6","1" +"50627","Eldora","IA","42.357549","-93.0975","-6","1" +"50628","Elma","IA","43.26232","-92.41457","-6","1" +"50629","Fairbank","IA","42.640202","-92.06988","-6","1" +"50630","Fredericksburg","IA","42.963377","-92.20768","-6","1" +"50631","Frederika","IA","42.882349","-92.30477","-6","1" +"50632","Garwin","IA","42.079127","-92.70805","-6","1" +"50633","Geneva","IA","42.671214","-93.13215","-6","1" +"50634","Gilbertville","IA","42.417252","-92.21396","-6","1" +"50635","Gladbrook","IA","42.190943","-92.70755","-6","1" +"50636","Greene","IA","42.891377","-92.80848","-6","1" +"50638","Grundy Center","IA","42.361095","-92.78015","-6","1" +"50641","Hazleton","IA","42.605576","-91.91229","-6","1" +"50642","Holland","IA","42.43442","-92.79802","-6","1" +"50643","Hudson","IA","42.377311","-92.46513","-6","1" +"50644","Independence","IA","42.470191","-91.89268","-6","1" +"50645","Ionia","IA","43.031136","-92.46149","-6","1" +"50647","Janesville","IA","42.646089","-92.473","-6","1" +"50648","Jesup","IA","42.453206","-92.09319","-6","1" +"50649","Kesley","IA","42.662282","-92.91099","-6","1" +"50650","Lamont","IA","42.612267","-91.6572","-6","1" +"50651","La Porte City","IA","42.325098","-92.19383","-6","1" +"50652","Lincoln","IA","42.263223","-92.69186","-6","1" +"50653","Marble Rock","IA","42.966003","-92.87985","-6","1" +"50654","Masonville","IA","42.440131","-91.60941","-6","1" +"50655","Maynard","IA","42.774435","-91.88645","-6","1" +"50657","Morrison","IA","42.343304","-92.673819","-6","1" +"50658","Nashua","IA","42.953461","-92.53473","-6","1" +"50659","New Hampton","IA","43.072094","-92.32323","-6","1" +"50660","New Hartford","IA","42.568395","-92.62664","-6","1" +"50661","North Washington","IA","43.117425","-92.414422","-6","1" +"50662","Oelwein","IA","42.682886","-91.92182","-6","1" +"50664","Oran","IA","42.862275","-91.843639","-6","1" +"50665","Parkersburg","IA","42.576102","-92.78183","-6","1" +"50666","Plainfield","IA","42.855231","-92.50295","-6","1" +"50667","Raymond","IA","42.468387","-92.21818","-6","1" +"50668","Readlyn","IA","42.693119","-92.22915","-6","1" +"50669","Reinbeck","IA","42.329448","-92.60686","-6","1" +"50670","Shell Rock","IA","42.710399","-92.59746","-6","1" +"50671","Stanley","IA","42.643265","-91.81038","-6","1" +"50672","Steamboat Rock","IA","42.410168","-93.06747","-6","1" +"50673","Stout","IA","42.527131","-92.71138","-6","1" +"50674","Sumner","IA","42.846877","-92.11188","-6","1" +"50675","Traer","IA","42.193577","-92.4828","-6","1" +"50676","Tripoli","IA","42.807994","-92.26368","-6","1" +"50677","Waverly","IA","42.741016","-92.45984","-6","1" +"50680","Wellsburg","IA","42.451112","-92.91453","-6","1" +"50681","Westgate","IA","42.778924","-92.00735","-6","1" +"50682","Winthrop","IA","42.459398","-91.71229","-6","1" +"50701","Waterloo","IA","42.473536","-92.36382","-6","1" +"50702","Waterloo","IA","42.475886","-92.33578","-6","1" +"50703","Waterloo","IA","42.513636","-92.32418","-6","1" +"50704","Waterloo","IA","42.469768","-92.309475","-6","1" +"50706","Waterloo","IA","42.407588","-92.26657","-6","1" +"50707","Evansdale","IA","42.477887","-92.28275","-6","1" +"50799","Waterloo","IA","42.469768","-92.309475","-6","1" +"50801","Creston","IA","41.070905","-94.38448","-6","1" +"50830","Afton","IA","41.029408","-94.21128","-6","1" +"50831","Arispe","IA","40.931394","-94.219334","-6","1" +"50833","Bedford","IA","40.671295","-94.71131","-6","1" +"50835","Benton","IA","40.69705","-94.33067","-6","1" +"50836","Blockton","IA","40.621398","-94.47619","-6","1" +"50837","Bridgewater","IA","41.237084","-94.68361","-6","1" +"50839","Carbon","IA","41.048733","-94.823088","-6","1" +"50840","Clearfield","IA","40.796387","-94.47102","-6","1" +"50841","Corning","IA","41.002701","-94.76142","-6","1" +"50842","Cromwell","IA","41.039762","-94.461622","-6","1" +"50843","Cumberland","IA","41.242612","-94.9015","-6","1" +"50845","Diagonal","IA","40.814077","-94.33601","-6","1" +"50846","Fontanelle","IA","41.307029","-94.55679","-6","1" +"50847","Grant","IA","41.142185","-94.98414","-6","1" +"50848","Gravity","IA","40.780854","-94.7643","-6","1" +"50849","Greenfield","IA","41.308843","-94.42424","-6","1" +"50851","Lenox","IA","40.909175","-94.52311","-6","1" +"50853","Massena","IA","41.247145","-94.77195","-6","1" +"50854","Mount Ayr","IA","40.700115","-94.22607","-6","1" +"50857","Nodaway","IA","40.944133","-94.87537","-6","1" +"50858","Orient","IA","41.20657","-94.41573","-6","1" +"50859","Prescott","IA","41.053745","-94.59728","-6","1" +"50860","Redding","IA","40.618619","-94.33102","-6","1" +"50861","Shannon City","IA","40.905544","-94.27107","-6","1" +"50862","Sharpsburg","IA","40.80692","-94.64762","-6","1" +"50863","Tingley","IA","40.857182","-94.19272","-6","1" +"50864","Villisca","IA","40.960481","-94.99017","-6","1" +"50936","Des Moines","IA","41.672687","-93.572173","-6","1" +"50940","Des Moines","IA","41.672687","-93.572173","-6","1" +"50947","Des Moines","IA","41.672687","-93.572173","-6","1" +"50950","Des Moines","IA","41.672687","-93.572173","-6","1" +"50980","Des Moines","IA","41.672687","-93.572173","-6","1" +"50981","Des Moines","IA","41.672687","-93.572173","-6","1" +"51001","Akron","IA","42.819093","-96.48967","-6","1" +"51002","Alta","IA","42.687676","-95.3188","-6","1" +"51003","Alton","IA","42.983011","-95.99636","-6","1" +"51004","Anthon","IA","42.378152","-95.90784","-6","1" +"51005","Aurelia","IA","42.710831","-95.43137","-6","1" +"51006","Battle Creek","IA","42.316288","-95.61045","-6","1" +"51007","Bronson","IA","42.403236","-96.1881","-6","1" +"51008","Brunsville","IA","42.809286","-96.2687","-6","1" +"51009","Calumet","IA","42.9552","-95.570082","-6","1" +"51010","Castana","IA","42.075717","-95.91108","-6","1" +"51011","Chatsworth","IA","42.916772","-96.51603","-6","1" +"51012","Cherokee","IA","42.754004","-95.54919","-6","1" +"51014","Cleghorn","IA","42.759208","-95.71139","-6","1" +"51015","Climbing Hill","IA","42.345024","-96.087523","-6","1" +"51016","Correctionville","IA","42.471378","-95.80529","-6","1" +"51017","Craig","IA","42.896225","-96.309509","-6","1" +"51018","Cushing","IA","42.462159","-95.67654","-6","1" +"51019","Danbury","IA","42.276668","-95.71998","-6","1" +"51020","Galva","IA","42.511431","-95.4187","-6","1" +"51022","Granville","IA","42.974759","-95.86981","-6","1" +"51023","Hawarden","IA","43.005927","-96.4709","-6","1" +"51024","Hinton","IA","42.609657","-96.23855","-6","1" +"51025","Holstein","IA","42.496494","-95.55529","-6","1" +"51026","Hornick","IA","42.250507","-96.08298","-6","1" +"51027","Ireton","IA","42.971195","-96.32512","-6","1" +"51028","Kingsley","IA","42.596358","-95.98619","-6","1" +"51029","Larrabee","IA","42.876589","-95.54106","-6","1" +"51030","Lawton","IA","42.497015","-96.18789","-6","1" +"51031","Le Mars","IA","42.79728","-96.17167","-6","1" +"51033","Linn Grove","IA","42.907563","-95.25334","-6","1" +"51034","Mapleton","IA","42.165283","-95.79109","-6","1" +"51035","Marcus","IA","42.793354","-95.7903","-6","1" +"51036","Maurice","IA","42.969595","-96.18713","-6","1" +"51037","Meriden","IA","42.821249","-95.62735","-6","1" +"51038","Merrill","IA","42.714106","-96.30291","-6","1" +"51039","Moville","IA","42.474905","-96.05563","-6","1" +"51040","Onawa","IA","42.027176","-96.11875","-6","1" +"51041","Orange City","IA","43.015685","-96.06156","-6","1" +"51044","Oto","IA","42.29688","-95.91104","-6","1" +"51045","Oyens","IA","42.820632","-96.05654","-6","1" +"51046","Paullina","IA","42.976116","-95.65772","-6","1" +"51047","Peterson","IA","42.934345","-95.34343","-6","1" +"51048","Pierson","IA","42.571699","-95.85556","-6","1" +"51049","Quimby","IA","42.626822","-95.61438","-6","1" +"51050","Remsen","IA","42.786134","-95.9482","-6","1" +"51051","Rodney","IA","42.20486","-95.95294","-6","1" +"51052","Salix","IA","42.307882","-96.28232","-6","1" +"51053","Schaller","IA","42.498879","-95.28976","-6","1" +"51054","Sergeant Bluff","IA","42.38556","-96.34194","-6","1" +"51055","Sloan","IA","42.221763","-96.24606","-6","1" +"51056","Smithland","IA","42.23092","-95.94724","-6","1" +"51057","Struble","IA","42.837641","-96.178616","-6","1" +"51058","Sutherland","IA","42.996361","-95.4558","-6","1" +"51059","Turin","IA","42.036864","-95.9662","-6","1" +"51060","Ute","IA","42.0477","-95.70185","-6","1" +"51061","Washta","IA","42.576775","-95.71945","-6","1" +"51062","Westfield","IA","42.725792","-96.53712","-6","1" +"51063","Whiting","IA","42.137272","-96.16648","-6","1" +"51101","Sioux City","IA","42.493559","-96.39562","-6","1" +"51102","Sioux City","IA","42.368406","-96.317951","-6","1" +"51103","Sioux City","IA","42.505387","-96.4293","-6","1" +"51104","Sioux City","IA","42.524145","-96.40292","-6","1" +"51105","Sioux City","IA","42.505046","-96.38003","-6","1" +"51106","Sioux City","IA","42.466292","-96.35291","-6","1" +"51107","Bronson","IA","42.411155","-96.210839","-6","1" +"51108","Sioux City","IA","42.554944","-96.36139","-6","1" +"51109","Sioux City","IA","42.528033","-96.47647","-6","1" +"51111","Sioux City","IA","42.406357","-96.37617","-6","1" +"51201","Sheldon","IA","43.184994","-95.85888","-6","1" +"51230","Alvord","IA","43.352016","-96.30802","-6","1" +"51231","Archer","IA","43.091483","-95.73297","-6","1" +"51232","Ashton","IA","43.306169","-95.7969","-6","1" +"51234","Boyden","IA","43.19528","-96.01511","-6","1" +"51235","Doon","IA","43.291936","-96.22202","-6","1" +"51237","George","IA","43.332554","-96.00036","-6","1" +"51238","Hospers","IA","43.072732","-95.89855","-6","1" +"51239","Hull","IA","43.192342","-96.15012","-6","1" +"51240","Inwood","IA","43.30957","-96.45816","-6","1" +"51241","Larchwood","IA","43.451905","-96.44319","-6","1" +"51242","Lester","IA","43.43813","-96.33334","-6","1" +"51243","Little Rock","IA","43.443704","-95.88832","-6","1" +"51244","Matlock","IA","43.242958","-95.93448","-6","1" +"51245","Primghar","IA","43.086954","-95.61476","-6","1" +"51246","Rock Rapids","IA","43.430275","-96.1663","-6","1" +"51247","Rock Valley","IA","43.192619","-96.32412","-6","1" +"51248","Sanborn","IA","43.189668","-95.65409","-6","1" +"51249","Sibley","IA","43.406831","-95.73876","-6","1" +"51250","Sioux Center","IA","43.075142","-96.19039","-6","1" +"51301","Spencer","IA","43.150381","-95.14466","-6","1" +"51330","Allendorf","IA","43.415305","-95.643435","-6","1" +"51331","Arnolds Park","IA","43.364496","-95.12861","-6","1" +"51333","Dickens","IA","43.133063","-95.00965","-6","1" +"51334","Estherville","IA","43.401328","-94.81524","-6","1" +"51338","Everly","IA","43.193363","-95.31854","-6","1" +"51340","Fostoria","IA","43.082426","-95.151095","-6","1" +"51341","Gillett Grove","IA","43.014514","-95.03657","-6","1" +"51342","Graettinger","IA","43.239934","-94.74138","-6","1" +"51343","Greenville","IA","43.003251","-95.12714","-6","1" +"51344","Gruver","IA","43.393113","-94.70471","-6","1" +"51345","Harris","IA","43.407616","-95.43752","-6","1" +"51346","Hartley","IA","43.183038","-95.46787","-6","1" +"51347","Lake Park","IA","43.437775","-95.31637","-6","1" +"51349","May City","IA","43.320149","-95.47513","-6","1" +"51350","Melvin","IA","43.30288","-95.59597","-6","1" +"51351","Milford","IA","43.33158","-95.16337","-6","1" +"51354","Ocheyedan","IA","43.413538","-95.53675","-6","1" +"51355","Okoboji","IA","43.38762","-95.13802","-6","1" +"51357","Royal","IA","43.057948","-95.27482","-6","1" +"51358","Ruthven","IA","43.133294","-94.90006","-6","1" +"51360","Spirit Lake","IA","43.428983","-95.10892","-6","1" +"51363","Superior","IA","43.432156","-94.94569","-6","1" +"51364","Terril","IA","43.303488","-94.96903","-6","1" +"51365","Wallingford","IA","43.309573","-94.74784","-6","1" +"51366","Webb","IA","42.951621","-95.01145","-6","1" +"51401","Carroll","IA","42.066399","-94.86786","-6","1" +"51430","Arcadia","IA","42.09809","-95.02441","-6","1" +"51431","Arthur","IA","42.345965","-95.35615","-6","1" +"51432","Aspinwall","IA","41.911924","-95.135602","-6","1" +"51433","Auburn","IA","42.279474","-94.88642","-6","1" +"51436","Breda","IA","42.186982","-95.00487","-6","1" +"51439","Charter Oak","IA","42.08255","-95.57938","-6","1" +"51440","Dedham","IA","41.913691","-94.81453","-6","1" +"51441","Deloit","IA","42.113042","-95.31482","-6","1" +"51442","Denison","IA","42.019336","-95.35379","-6","1" +"51443","Glidden","IA","42.096445","-94.71141","-6","1" +"51444","Halbur","IA","42.005206","-94.97547","-6","1" +"51445","Ida Grove","IA","42.332677","-95.46823","-6","1" +"51446","Irwin","IA","41.785808","-95.20173","-6","1" +"51447","Kirkman","IA","41.7196","-95.19538","-6","1" +"51448","Kiron","IA","42.204515","-95.30928","-6","1" +"51449","Lake City","IA","42.266805","-94.73571","-6","1" +"51450","Lake View","IA","42.302091","-95.03061","-6","1" +"51451","Lanesboro","IA","42.184035","-94.69246","-6","1" +"51452","Lidderdale","IA","42.126994","-94.78449","-6","1" +"51453","Lohrville","IA","42.27586","-94.54041","-6","1" +"51454","Manilla","IA","41.885538","-95.22158","-6","1" +"51455","Manning","IA","41.913633","-95.06939","-6","1" +"51458","Odebolt","IA","42.315531","-95.23551","-6","1" +"51459","Ralston","IA","42.040772","-94.63292","-6","1" +"51460","Ricketts","IA","42.130428","-95.574593","-6","1" +"51461","Schleswig","IA","42.172338","-95.44924","-6","1" +"51462","Scranton","IA","42.022139","-94.56409","-6","1" +"51463","Templeton","IA","41.910011","-94.92775","-6","1" +"51465","Vail","IA","42.072884","-95.20261","-6","1" +"51466","Wall Lake","IA","42.256867","-95.09307","-6","1" +"51467","Westside","IA","42.072073","-95.10711","-6","1" +"51496","Templeton","IA","41.916027","-94.944563","-6","1" +"51501","Council Bluffs","IA","41.251631","-95.87447","-6","1" +"51502","Council Bluffs","IA","41.269884","-95.79752","-6","1" +"51503","Council Bluffs","IA","41.2544","-95.79062","-6","1" +"51510","Carter Lake","IA","41.292647","-95.91398","-6","1" +"51515","Griswold","IA","41.233503","-95.135861","-6","1" +"51520","Arion","IA","41.952624","-95.45818","-6","1" +"51521","Avoca","IA","41.48079","-95.33881","-6","1" +"51523","Blencoe","IA","41.9134","-96.085","-6","1" +"51525","Carson","IA","41.231387","-95.4044","-6","1" +"51526","Crescent","IA","41.362096","-95.87321","-6","1" +"51527","Defiance","IA","41.828495","-95.34363","-6","1" +"51528","Dow City","IA","41.927255","-95.49821","-6","1" +"51529","Dunlap","IA","41.856963","-95.61754","-6","1" +"51530","Earling","IA","41.77364","-95.42761","-6","1" +"51531","Elk Horn","IA","41.596716","-95.0716","-6","1" +"51532","Elliott","IA","41.140956","-95.13004","-6","1" +"51533","Emerson","IA","41.029684","-95.38295","-6","1" +"51534","Glenwood","IA","41.039679","-95.73092","-6","1" +"51535","Griswold","IA","41.232047","-95.13871","-6","1" +"51536","Hancock","IA","41.388872","-95.36782","-6","1" +"51537","Harlan","IA","41.638566","-95.29692","-6","1" +"51540","Hastings","IA","41.020978","-95.49852","-6","1" +"51541","Henderson","IA","41.137694","-95.39897","-6","1" +"51542","Honey Creek","IA","41.427994","-95.84004","-6","1" +"51543","Kimballton","IA","41.6485","-95.08334","-6","1" +"51544","Lewis","IA","41.313817","-95.10424","-6","1" +"51545","Little Sioux","IA","41.812797","-96.03218","-6","1" +"51546","Logan","IA","41.64252","-95.78134","-6","1" +"51547","Kirkman","IA","41.77","-95.644264","-6","1" +"51548","McClelland","IA","41.307465","-95.62675","-6","1" +"51549","Macedonia","IA","41.182061","-95.44357","-6","1" +"51550","Magnolia","IA","41.695375","-95.87353","-6","1" +"51551","Malvern","IA","40.998667","-95.58941","-6","1" +"51552","Marne","IA","41.470605","-95.11291","-6","1" +"51553","Minden","IA","41.425925","-95.5461","-6","1" +"51554","Mineola","IA","41.142148","-95.69205","-6","1" +"51555","Missouri Valley","IA","41.557887","-95.90651","-6","1" +"51556","Modale","IA","41.64243","-96.02872","-6","1" +"51557","Mondamin","IA","41.739005","-95.99657","-6","1" +"51558","Moorhead","IA","41.911376","-95.86092","-6","1" +"51559","Neola","IA","41.455142","-95.64792","-6","1" +"51560","Oakland","IA","41.320647","-95.39748","-6","1" +"51561","Pacific Junction","IA","41.022849","-95.80303","-6","1" +"51562","Panama","IA","41.725547","-95.49415","-6","1" +"51563","Persia","IA","41.568945","-95.58503","-6","1" +"51564","Pisgah","IA","41.816224","-95.90556","-6","1" +"51565","Portsmouth","IA","41.650114","-95.52275","-6","1" +"51566","Red Oak","IA","41.006437","-95.22603","-6","1" +"51570","Shelby","IA","41.52279","-95.46501","-6","1" +"51571","Silver City","IA","41.123653","-95.62225","-6","1" +"51572","Soldier","IA","41.987483","-95.78317","-6","1" +"51573","Stanton","IA","40.979256","-95.09722","-6","1" +"51574","Tennant","IA","41.595686","-95.44193","-6","1" +"51575","Treynor","IA","41.231146","-95.61155","-6","1" +"51576","Underwood","IA","41.388244","-95.68777","-6","1" +"51577","Walnut","IA","41.470851","-95.20256","-6","1" +"51578","Westphalia","IA","41.719352","-95.3958","-6","1" +"51579","Woodbine","IA","41.743335","-95.71117","-6","1" +"51591","Red Oak","IA","41.030256","-95.156205","-6","1" +"51593","Harlan","IA","41.332943","-95.587197","-6","1" +"51601","Shenandoah","IA","40.750107","-95.36514","-6","1" +"51602","Shenandoah","IA","40.738309","-95.149305","-6","1" +"51603","Shenandoah","IA","40.738309","-95.149305","-6","1" +"51630","Blanchard","IA","40.588924","-95.21254","-6","1" +"51631","Braddyville","IA","40.615698","-95.00942","-6","1" +"51632","Clarinda","IA","40.738639","-95.03595","-6","1" +"51636","Coin","IA","40.671163","-95.21698","-6","1" +"51637","College Springs","IA","40.616696","-95.11568","-6","1" +"51638","Essex","IA","40.822954","-95.27007","-6","1" +"51639","Farragut","IA","40.707376","-95.47445","-6","1" +"51640","Hamburg","IA","40.622159","-95.66736","-6","1" +"51645","Imogene","IA","40.884496","-95.42637","-6","1" +"51646","New Market","IA","40.732886","-94.88772","-6","1" +"51647","Northboro","IA","40.599361","-95.36419","-6","1" +"51648","Percival","IA","40.741715","-95.7976","-6","1" +"51649","Randolph","IA","40.865993","-95.54687","-6","1" +"51650","Riverton","IA","40.679816","-95.56494","-6","1" +"51651","Shambaugh","IA","40.65747","-95.024969","-6","1" +"51652","Sidney","IA","40.76261","-95.60679","-6","1" +"51653","Tabor","IA","40.886487","-95.67001","-6","1" +"51654","Thurman","IA","40.836473","-95.76463","-6","1" +"51656","Yorktown","IA","40.737446","-95.156217","-6","1" +"52001","Dubuque","IA","42.515252","-90.6794","-6","1" +"52002","Dubuque","IA","42.50963","-90.75329","-6","1" +"52003","Dubuque","IA","42.460604","-90.68576","-6","1" +"52004","Dubuque","IA","42.484861","-90.804116","-6","1" +"52030","Andrew","IA","42.154059","-90.59176","-6","1" +"52031","Bellevue","IA","42.250445","-90.47115","-6","1" +"52032","Bernard","IA","42.273028","-90.81319","-6","1" +"52033","Cascade","IA","42.29025","-90.99759","-6","1" +"52035","Colesburg","IA","42.662381","-91.18541","-6","1" +"52036","Delaware","IA","42.473959","-91.34228","-6","1" +"52037","Delmar","IA","41.967074","-90.63216","-6","1" +"52038","Dundee","IA","42.585197","-91.55268","-6","1" +"52039","Durango","IA","42.558403","-90.86042","-6","1" +"52040","Dyersville","IA","42.490907","-91.12842","-6","1" +"52041","Earlville","IA","42.491416","-91.26333","-6","1" +"52042","Edgewood","IA","42.678463","-91.3618","-6","1" +"52043","Elkader","IA","42.855022","-91.40882","-6","1" +"52044","Elkport","IA","42.748558","-91.32445","-6","1" +"52045","Epworth","IA","42.451496","-90.92851","-6","1" +"52046","Farley","IA","42.442226","-91.00932","-6","1" +"52047","Farmersburg","IA","42.959691","-91.35552","-6","1" +"52048","Garber","IA","42.738079","-91.25078","-6","1" +"52049","Garnavillo","IA","42.886672","-91.19866","-6","1" +"52050","Greeley","IA","42.603334","-91.34528","-6","1" +"52052","Guttenberg","IA","42.765031","-91.11376","-6","1" +"52053","Holy Cross","IA","42.631604","-90.96492","-6","1" +"52054","La Motte","IA","42.28911","-90.6341","-6","1" +"52055","Littleport","IA","42.862739","-91.252459","-6","1" +"52056","Luxemburg","IA","42.60483","-91.07654","-6","1" +"52057","Manchester","IA","42.484297","-91.45231","-6","1" +"52060","Maquoketa","IA","42.087769","-90.67352","-6","1" +"52064","Miles","IA","42.092925","-90.3107","-6","1" +"52065","New Vienna","IA","42.559621","-91.10572","-6","1" +"52066","North Buena Vista","IA","42.682337","-90.95239","-6","1" +"52068","Peosta","IA","42.431983","-90.816","-6","1" +"52069","Preston","IA","42.051619","-90.40762","-6","1" +"52070","Sabula","IA","42.071239","-90.20261","-6","1" +"52071","Saint Donatus","IA","42.36059","-90.53879","-6","1" +"52072","Saint Olaf","IA","42.927724","-91.38723","-6","1" +"52073","Sherrill","IA","42.640962","-90.82532","-6","1" +"52074","Spragueville","IA","42.124141","-90.4557","-6","1" +"52075","Springbrook","IA","42.161997","-90.47987","-6","1" +"52076","Strawberry Point","IA","42.697689","-91.51505","-6","1" +"52077","Volga","IA","42.815385","-91.55738","-6","1" +"52078","Worthington","IA","42.398112","-91.12294","-6","1" +"52079","Zwingle","IA","42.286954","-90.71627","-6","1" +"52099","Dubuque","IA","42.484861","-90.804116","-6","1" +"52101","Decorah","IA","43.345879","-91.77187","-6","1" +"52131","Burr Oak","IA","43.47865","-91.765621","-6","1" +"52132","Calmar","IA","43.194235","-91.89585","-6","1" +"52133","Castalia","IA","43.119538","-91.66528","-6","1" +"52134","Chester","IA","43.468995","-92.40092","-6","1" +"52135","Clermont","IA","43.00106","-91.66064","-6","1" +"52136","Cresco","IA","43.382021","-92.10263","-6","1" +"52140","Dorchester","IA","43.442183","-91.53338","-6","1" +"52141","Elgin","IA","42.935873","-91.62785","-6","1" +"52142","Fayette","IA","42.834286","-91.79794","-6","1" +"52144","Fort Atkinson","IA","43.141414","-91.94764","-6","1" +"52146","Harpers Ferry","IA","43.195154","-91.16405","-6","1" +"52147","Hawkeye","IA","42.960176","-91.95858","-6","1" +"52149","Highlandville","IA","43.463765","-91.689862","-6","1" +"52151","Lansing","IA","43.358764","-91.25436","-6","1" +"52154","Lawler","IA","43.1101","-92.15576","-6","1" +"52155","Lime Springs","IA","43.419137","-92.28859","-6","1" +"52156","Luana","IA","43.051922","-91.45842","-6","1" +"52157","McGregor","IA","43.019203","-91.20377","-6","1" +"52158","Marquette","IA","43.042838","-91.18417","-6","1" +"52159","Monona","IA","43.061204","-91.37925","-6","1" +"52160","New Albin","IA","43.48058","-91.30746","-6","1" +"52161","Ossian","IA","43.130438","-91.74913","-6","1" +"52162","Postville","IA","43.104035","-91.5526","-6","1" +"52163","Protivin","IA","43.21661","-92.09219","-6","1" +"52164","Randalia","IA","42.839782","-91.88949","-6","1" +"52165","Ridgeway","IA","43.308213","-91.97807","-6","1" +"52166","Saint Lucas","IA","43.069086","-91.92847","-6","1" +"52168","Spillville","IA","43.203977","-91.95204","-6","1" +"52169","Wadena","IA","42.845037","-91.65943","-6","1" +"52170","Waterville","IA","43.212565","-91.29941","-6","1" +"52171","Waucoma","IA","43.068101","-92.05255","-6","1" +"52172","Waukon","IA","43.265791","-91.47755","-6","1" +"52175","West Union","IA","42.983744","-91.81803","-6","1" +"52201","Ainsworth","IA","41.320371","-91.54755","-6","1" +"52202","Alburnett","IA","42.158477","-91.63859","-6","1" +"52203","Amana","IA","41.808301","-91.87512","-6","1" +"52204","Amana","IA","41.686351","-92.063603","-6","1" +"52205","Anamosa","IA","42.106972","-91.27531","-6","1" +"52206","Atkins","IA","41.993799","-91.86755","-6","1" +"52207","Baldwin","IA","42.088117","-90.83793","-6","1" +"52208","Belle Plaine","IA","41.887989","-92.2727","-6","1" +"52209","Blairstown","IA","41.911228","-92.08549","-6","1" +"52210","Brandon","IA","42.32437","-92.0019","-6","1" +"52211","Brooklyn","IA","41.753372","-92.45012","-6","1" +"52212","Center Junction","IA","42.115943","-91.09397","-6","1" +"52213","Center Point","IA","42.193727","-91.7792","-6","1" +"52214","Central City","IA","42.198823","-91.5075","-6","1" +"52215","Chelsea","IA","41.914489","-92.39359","-6","1" +"52216","Clarence","IA","41.888182","-91.04567","-6","1" +"52217","Clutier","IA","42.080758","-92.40188","-6","1" +"52218","Coggon","IA","42.291075","-91.54024","-6","1" +"52219","Prairieburg","IA","42.235999","-91.42313","-6","1" +"52220","Conroy","IA","41.728994","-91.99748","-6","1" +"52221","Guernsey","IA","41.640716","-92.33182","-6","1" +"52222","Deep River","IA","41.575609","-92.34104","-6","1" +"52223","Delhi","IA","42.424914","-91.33937","-6","1" +"52224","Dysart","IA","42.162873","-92.30485","-6","1" +"52225","Elberon","IA","42.011889","-92.32398","-6","1" +"52226","Elwood","IA","41.992936","-90.7392","-6","1" +"52227","Ely","IA","41.89239","-91.5666","-6","1" +"52228","Fairfax","IA","41.912296","-91.78792","-6","1" +"52229","Garrison","IA","42.145175","-92.1509","-6","1" +"52231","Harper","IA","41.358606","-92.06066","-6","1" +"52232","Hartwick","IA","41.809975","-92.32815","-6","1" +"52233","Hiawatha","IA","42.044409","-91.68102","-6","1" +"52235","Hills","IA","41.55464","-91.53532","-6","1" +"52236","Homestead","IA","41.732868","-91.87587","-6","1" +"52237","Hopkinton","IA","42.346132","-91.24208","-6","1" +"52239","Tama","IA","41.961726","-92.570891","-6","1" +"52240","Iowa City","IA","41.649867","-91.52019","-6","1" +"52241","Coralville","IA","41.688215","-91.58676","-6","1" +"52242","Iowa City","IA","41.662116","-91.54143","-6","1" +"52243","Iowa City","IA","41.642657","-91.599974","-6","1" +"52244","Iowa City","IA","41.572682","-91.661901","-6","1" +"52245","Iowa City","IA","41.662083","-91.50834","-6","1" +"52246","Iowa City","IA","41.650916","-91.56058","-6","1" +"52247","Kalona","IA","41.503882","-91.70969","-6","1" +"52248","Keota","IA","41.341027","-91.94174","-6","1" +"52249","Keystone","IA","42.005883","-92.19669","-6","1" +"52251","Ladora","IA","41.741215","-92.19199","-6","1" +"52252","Langworthy","IA","42.191979","-91.225836","-6","1" +"52253","Lisbon","IA","41.909156","-91.36209","-6","1" +"52254","Lost Nation","IA","41.950398","-90.8085","-6","1" +"52255","Lowden","IA","41.86521","-90.94316","-6","1" +"52257","Luzerne","IA","41.913959","-92.17163","-6","1" +"52301","Marengo","IA","41.790216","-92.07684","-6","1" +"52302","Marion","IA","42.042648","-91.58262","-6","1" +"52305","Martelle","IA","42.018441","-91.35217","-6","1" +"52306","Mechanicsville","IA","41.900204","-91.25428","-6","1" +"52307","Middle Amana","IA","41.790988","-91.91522","-6","1" +"52308","Millersburg","IA","41.572665","-92.15933","-6","1" +"52309","Monmouth","IA","42.109395","-90.8869","-6","1" +"52310","Monticello","IA","42.221176","-91.19335","-6","1" +"52312","Morley","IA","42.006556","-91.24671","-6","1" +"52313","Mount Auburn","IA","42.259239","-92.10136","-6","1" +"52314","Mount Vernon","IA","41.929178","-91.43684","-6","1" +"52315","Newhall","IA","41.995899","-91.96896","-6","1" +"52316","North English","IA","41.527681","-92.09326","-6","1" +"52317","North Liberty","IA","41.755771","-91.61238","-6","1" +"52318","Norway","IA","41.900443","-91.90704","-6","1" +"52319","Oakdale","IA","41.642657","-91.599974","-6","1" +"52320","Olin","IA","42.003337","-91.14736","-6","1" +"52321","Onslow","IA","42.134893","-91.00372","-6","1" +"52322","Oxford","IA","41.6896","-91.76183","-6","1" +"52323","Oxford Junction","IA","41.983923","-90.95702","-6","1" +"52324","Palo","IA","42.065474","-91.8005","-6","1" +"52325","Parnell","IA","41.597014","-91.91805","-6","1" +"52326","Quasqueton","IA","42.394662","-91.75917","-6","1" +"52327","Riverside","IA","41.483058","-91.56899","-6","1" +"52328","Robins","IA","42.073765","-91.66287","-6","1" +"52329","Rowley","IA","42.349458","-91.84325","-6","1" +"52330","Ryan","IA","42.338694","-91.49604","-6","1" +"52332","Shellsburg","IA","42.093056","-91.88379","-6","1" +"52333","Solon","IA","41.809993","-91.50849","-6","1" +"52334","South Amana","IA","41.736497","-91.94243","-6","1" +"52335","South English","IA","41.449599","-92.05579","-6","1" +"52336","Springville","IA","42.0626","-91.44072","-6","1" +"52337","Stanwood","IA","41.888096","-91.14794","-6","1" +"52338","Swisher","IA","41.840184","-91.68552","-6","1" +"52339","Tama","IA","41.95277","-92.58225","-6","1" +"52340","Tiffin","IA","41.710231","-91.66955","-6","1" +"52341","Toddville","IA","42.112232","-91.72605","-6","1" +"52342","Toledo","IA","42.02524","-92.57177","-6","1" +"52344","Troy Mills","IA","42.079415","-91.599215","-6","1" +"52345","Urbana","IA","42.222388","-91.87908","-6","1" +"52346","Van Horne","IA","42.010556","-92.08308","-6","1" +"52347","Victor","IA","41.715992","-92.29288","-6","1" +"52348","Vining","IA","41.990295","-92.38059","-6","1" +"52349","Vinton","IA","42.172481","-92.01595","-6","1" +"52350","Viola","IA","42.091217","-91.385047","-6","1" +"52351","Walford","IA","41.876767","-91.83532","-6","1" +"52352","Walker","IA","42.290421","-91.77461","-6","1" +"52353","Washington","IA","41.300042","-91.69743","-6","1" +"52354","Watkins","IA","41.90889","-91.9818","-6","1" +"52355","Webster","IA","41.459739","-92.17863","-6","1" +"52356","Wellman","IA","41.478896","-91.85354","-6","1" +"52358","West Branch","IA","41.680696","-91.33428","-6","1" +"52359","West Chester","IA","41.356493","-91.81527","-6","1" +"52361","Williamsburg","IA","41.651571","-92.01394","-6","1" +"52362","Wyoming","IA","42.054649","-91.00591","-6","1" +"52401","Cedar Rapids","IA","41.97545","-91.65912","-6","1" +"52402","Cedar Rapids","IA","42.021016","-91.65231","-6","1" +"52403","Cedar Rapids","IA","41.982201","-91.61409","-6","1" +"52404","Cedar Rapids","IA","41.947335","-91.68819","-6","1" +"52405","Cedar Rapids","IA","41.980283","-91.70835","-6","1" +"52406","Cedar Rapids","IA","42.287191","-91.777472","-6","1" +"52407","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52408","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52409","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52410","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52411","Cedar Rapids","IA","42.049941","-91.72511","-6","1" +"52497","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52498","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52499","Cedar Rapids","IA","42.079415","-91.599215","-6","1" +"52501","Ottumwa","IA","41.023872","-92.41741","-6","1" +"52530","Agency","IA","40.995466","-92.30407","-6","1" +"52531","Albia","IA","41.026796","-92.7984","-6","1" +"52533","Batavia","IA","41.0255","-92.15955","-6","1" +"52534","Beacon","IA","41.273646","-92.68082","-6","1" +"52535","Birmingham","IA","40.86112","-91.97867","-6","1" +"52536","Blakesburg","IA","40.947787","-92.62879","-6","1" +"52537","Bloomfield","IA","40.73045","-92.44441","-6","1" +"52538","West Grove","IA","40.745286","-92.408679","-6","1" +"52540","Brighton","IA","41.153462","-91.82082","-6","1" +"52542","Cantril","IA","40.649744","-92.0662","-6","1" +"52543","Cedar","IA","41.218744","-92.51977","-6","1" +"52544","Centerville","IA","40.730159","-92.88994","-6","1" +"52548","Chillicothe","IA","41.085573","-92.52863","-6","1" +"52549","Cincinnati","IA","40.616347","-92.92738","-6","1" +"52550","Delta","IA","41.330967","-92.34521","-6","1" +"52551","Douds","IA","40.798007","-92.13296","-6","1" +"52552","Drakesville","IA","40.837112","-92.56458","-6","1" +"52553","Eddyville","IA","41.151537","-92.64227","-6","1" +"52554","Eldon","IA","40.919465","-92.22521","-6","1" +"52555","Exline","IA","40.648624","-92.83592","-6","1" +"52556","Fairfield","IA","41.017736","-91.95","-6","1" +"52557","Fairfield","IA","41.016566","-91.96821","-6","1" +"52560","Floris","IA","40.852256","-92.24785","-6","1" +"52561","Fremont","IA","41.214824","-92.43864","-6","1" +"52562","Hayesville","IA","41.26457","-92.24888","-6","1" +"52563","Hedrick","IA","41.17196","-92.28491","-6","1" +"52565","Keosauqua","IA","40.747997","-91.96126","-6","1" +"52566","Kirkville","IA","41.14579","-92.49948","-6","1" +"52567","Libertyville","IA","40.946765","-92.07173","-6","1" +"52568","Martinsburg","IA","41.178396","-92.25004","-6","1" +"52569","Melrose","IA","40.948022","-93.02537","-6","1" +"52570","Milton","IA","40.679958","-92.162","-6","1" +"52571","Moravia","IA","40.86655","-92.84446","-6","1" +"52572","Moulton","IA","40.679322","-92.68369","-6","1" +"52573","Mount Sterling","IA","40.620468","-91.93352","-6","1" +"52574","Mystic","IA","40.797559","-92.96436","-6","1" +"52576","Ollie","IA","41.201922","-92.1148","-6","1" +"52577","Oskaloosa","IA","41.281669","-92.65534","-6","1" +"52580","Packwood","IA","41.130669","-92.09695","-6","1" +"52581","Plano","IA","40.792046","-93.04963","-6","1" +"52583","Promise City","IA","40.801913","-93.14736","-6","1" +"52584","Pulaski","IA","40.66442","-92.24541","-6","1" +"52585","Richland","IA","41.194129","-91.98027","-6","1" +"52586","Rose Hill","IA","41.339202","-92.46875","-6","1" +"52588","Selma","IA","40.873769","-92.13113","-6","1" +"52590","Seymour","IA","40.673728","-93.1281","-6","1" +"52591","Sigourney","IA","41.328837","-92.19641","-6","1" +"52593","Udell","IA","40.777917","-92.73565","-6","1" +"52594","Unionville","IA","40.833045","-92.6867","-6","1" +"52595","University Park","IA","41.286619","-92.61893","-6","1" +"52601","Burlington","IA","40.814207","-91.11911","-6","1" +"52619","Argyle","IA","40.542869","-91.57544","-6","1" +"52620","Bonaparte","IA","40.697875","-91.8051","-6","1" +"52621","Crawfordsville","IA","41.209047","-91.53273","-6","1" +"52623","Danville","IA","40.865859","-91.33459","-6","1" +"52624","Denmark","IA","40.741062","-91.33664","-6","1" +"52625","Donnellson","IA","40.675175","-91.57393","-6","1" +"52626","Farmington","IA","40.655336","-91.72385","-6","1" +"52627","Fort Madison","IA","40.637694","-91.33866","-6","1" +"52630","Hillsboro","IA","40.823716","-91.74754","-6","1" +"52631","Houghton","IA","40.784287","-91.60716","-6","1" +"52632","Keokuk","IA","40.409641","-91.40001","-6","1" +"52635","Lockridge","IA","40.991682","-91.75175","-6","1" +"52637","Mediapolis","IA","41.008896","-91.13674","-6","1" +"52638","Middletown","IA","40.828014","-91.25499","-6","1" +"52639","Montrose","IA","40.547399","-91.43864","-6","1" +"52640","Morning Sun","IA","41.09739","-91.27859","-6","1" +"52641","Mount Pleasant","IA","40.974026","-91.57195","-6","1" +"52642","Rome","IA","40.977395","-91.692312","-6","1" +"52644","Mount Union","IA","41.038005","-91.39992","-6","1" +"52645","New London","IA","40.920995","-91.39965","-6","1" +"52646","Oakville","IA","41.069373","-91.01429","-6","1" +"52647","Olds","IA","41.133346","-91.54559","-6","1" +"52648","Pilot Grove","IA","40.594704","-91.415648","-6","1" +"52649","Salem","IA","40.848485","-91.61691","-6","1" +"52650","Sperry","IA","40.952014","-91.16545","-6","1" +"52651","Stockport","IA","40.87657","-91.81242","-6","1" +"52652","Swedesburg","IA","41.103879","-91.54664","-6","1" +"52653","Wapello","IA","41.171534","-91.17035","-6","1" +"52654","Wayland","IA","41.141336","-91.66882","-6","1" +"52655","West Burlington","IA","40.830534","-91.17849","-6","1" +"52656","West Point","IA","40.719775","-91.47271","-6","1" +"52657","Saint Paul","IA","40.758742","-91.478305","-6","1" +"52658","Wever","IA","40.707554","-91.23415","-6","1" +"52659","Winfield","IA","41.126832","-91.44152","-6","1" +"52660","Yarmouth","IA","40.980185","-91.29172","-6","1" +"52701","Andover","IA","41.978834","-90.25171","-6","1" +"52706","Blue Grass","IA","41.509085","-90.754327","-6","1" +"52720","Atalissa","IA","41.578393","-91.15931","-6","1" +"52721","Bennett","IA","41.749701","-90.96586","-6","1" +"52722","Bettendorf","IA","41.551883","-90.48975","-6","1" +"52726","Blue Grass","IA","41.498603","-90.77596","-6","1" +"52727","Bryant","IA","41.96264","-90.32975","-6","1" +"52728","Buffalo","IA","41.456515","-90.73252","-6","1" +"52729","Calamus","IA","41.823151","-90.75572","-6","1" +"52730","Camanche","IA","41.780515","-90.28869","-6","1" +"52731","Charlotte","IA","41.963196","-90.47705","-6","1" +"52732","Clinton","IA","41.861633","-90.21539","-6","1" +"52733","Clinton","IA","41.880619","-90.519519","-6","1" +"52736","Clinton","IA","41.880619","-90.519519","-6","1" +"52737","Columbus City","IA","41.259329","-91.37449","-6","1" +"52738","Columbus Junction","IA","41.265956","-91.3677","-6","1" +"52739","Conesville","IA","41.378166","-91.36693","-6","1" +"52742","De Witt","IA","41.825848","-90.52951","-6","1" +"52745","Dixon","IA","41.73542","-90.77717","-6","1" +"52746","Donahue","IA","41.712643","-90.68748","-6","1" +"52747","Durant","IA","41.603249","-90.91015","-6","1" +"52748","Eldridge","IA","41.659064","-90.56866","-6","1" +"52749","Fruitland","IA","41.355531","-91.12994","-6","1" +"52750","Goose Lake","IA","41.926933","-90.41181","-6","1" +"52751","Grand Mound","IA","41.836317","-90.67008","-6","1" +"52752","Grandview","IA","41.277239","-91.18897","-6","1" +"52753","Le Claire","IA","41.609382","-90.35986","-6","1" +"52754","Letts","IA","41.349983","-91.24664","-6","1" +"52755","Lone Tree","IA","41.476534","-91.43307","-6","1" +"52756","Long Grove","IA","41.732418","-90.53286","-6","1" +"52757","Low Moor","IA","41.801711","-90.35223","-6","1" +"52758","McCausland","IA","41.744689","-90.44392","-6","1" +"52759","Montpelier","IA","41.462494","-90.808767","-6","1" +"52760","Moscow","IA","41.57371","-91.08369","-6","1" +"52761","Muscatine","IL","41.413372","-91.00612","-6","1" +"52765","New Liberty","IA","41.720483","-90.86944","-6","1" +"52766","Nichols","IA","41.473955","-91.31035","-6","1" +"52767","Pleasant Valley","IA","41.56823","-90.4191","-6","1" +"52768","Princeton","IA","41.677679","-90.37338","-6","1" +"52769","Stockton","IA","41.594283","-90.8469","-6","1" +"52771","Teeds Grove","IA","41.999113","-90.218704","-6","1" +"52772","Tipton","IA","41.750868","-91.13361","-6","1" +"52773","Walcott","IA","41.617234","-90.75849","-6","1" +"52774","Welton","IA","41.907575","-90.59624","-6","1" +"52776","West Liberty","IA","41.573818","-91.26586","-6","1" +"52777","Wheatland","IA","41.843587","-90.86097","-6","1" +"52778","Wilton","IA","41.604559","-91.00644","-6","1" +"52801","Davenport","IA","41.522832","-90.57503","-6","1" +"52802","Davenport","IA","41.513182","-90.61672","-6","1" +"52803","Davenport","IA","41.538582","-90.56223","-6","1" +"52804","Davenport","IA","41.546931","-90.61964","-6","1" +"52805","Davenport","IA","41.613034","-90.606284","-6","1" +"52806","Davenport","IA","41.574581","-90.60303","-6","1" +"52807","Davenport","IA","41.565433","-90.53924","-6","1" +"52808","Davenport","IA","41.613034","-90.606284","-6","1" +"52809","Davenport","IA","41.613034","-90.606284","-6","1" +"52820","Tennyson","WI","42.689339","-90.682257","-6","1" +"53001","Adell","WI","43.61014","-88.03047","-6","1" +"53002","Allenton","WI","43.461969","-88.36432","-6","1" +"53003","Ashippun","WI","43.211067","-88.51649","-6","1" +"53004","Belgium","WI","43.498943","-87.86211","-6","1" +"53005","Brookfield","WI","43.060872","-88.09478","-6","1" +"53006","Brownsville","WI","43.623996","-88.51089","-6","1" +"53007","Butler","WI","43.10836","-88.06893","-6","1" +"53008","Brookfield","WI","43.018696","-88.302997","-6","1" +"53009","Byron","WI","43.76983","-88.494357","-6","1" +"53010","Campbellsport","WI","43.602787","-88.2653","-6","1" +"53011","Cascade","WI","43.657079","-88.08008","-6","1" +"53012","Cedarburg","WI","43.305412","-87.99794","-6","1" +"53013","Cedar Grove","WI","43.575272","-87.84597","-6","1" +"53014","Chilton","WI","44.033215","-88.17626","-6","1" +"53015","Cleveland","WI","43.914168","-87.76689","-6","1" +"53016","Clyman","WI","43.313002","-88.71989","-6","1" +"53017","Colgate","WI","43.199526","-88.26177","-6","1" +"53018","Delafield","WI","43.05348","-88.39844","-6","1" +"53019","Eden","WI","43.699527","-88.32233","-6","1" +"53020","Elkhart Lake","WI","43.85255","-88.01085","-6","1" +"53021","Fredonia","WI","43.483263","-87.98908","-6","1" +"53022","Germantown","WI","43.219155","-88.12043","-6","1" +"53023","Glenbeulah","WI","43.777582","-88.10103","-6","1" +"53024","Grafton","WI","43.32546","-87.94573","-6","1" +"53026","Greenbush","WI","43.718294","-87.618716","-6","1" +"53027","Hartford","WI","43.313361","-88.37332","-6","1" +"53029","Hartland","WI","43.132743","-88.34737","-6","1" +"53031","Hingham","WI","43.639395","-87.915705","-6","1" +"53032","Horicon","WI","43.446666","-88.62795","-6","1" +"53033","Hubertus","WI","43.233282","-88.2396","-6","1" +"53034","Hustisford","WI","43.345528","-88.60135","-6","1" +"53035","Iron Ridge","WI","43.395861","-88.53606","-6","1" +"53036","Ixonia","WI","43.178685","-88.5739","-6","1" +"53037","Jackson","WI","43.322213","-88.17011","-6","1" +"53038","Johnson Creek","WI","43.075784","-88.77595","-6","1" +"53039","Juneau","WI","43.378828","-88.70876","-6","1" +"53040","Kewaskum","WI","43.52413","-88.19215","-6","1" +"53042","Kiel","WI","43.924095","-88.00285","-6","1" +"53044","Kohler","WI","43.740794","-87.78303","-6","1" +"53045","Brookfield","WI","43.055315","-88.1503","-6","1" +"53046","Lannon","WI","43.153447","-88.16124","-6","1" +"53047","Lebanon","WI","43.257364","-88.62873","-6","1" +"53048","Lomira","WI","43.584926","-88.44594","-6","1" +"53049","Malone","WI","43.887372","-88.28802","-6","1" +"53050","Mayville","WI","43.499518","-88.53911","-6","1" +"53051","Menomonee Falls","WI","43.151183","-88.11034","-6","1" +"53052","Menomonee Falls","WI","43.018696","-88.302997","-6","1" +"53056","Merton","WI","43.146023","-88.30975","-6","1" +"53057","Mount Calvary","WI","43.80576","-88.25436","-6","1" +"53058","Nashotah","WI","43.108775","-88.40276","-6","1" +"53059","Neosho","WI","43.289159","-88.52623","-6","1" +"53060","Newburg","WI","43.433807","-88.062338","-6","1" +"53061","New Holstein","WI","43.949961","-88.09962","-6","1" +"53062","New Holstein","WI","44.067942","-88.223131","-6","1" +"53063","Newton","WI","43.97207","-87.7766","-6","1" +"53064","North Lake","WI","43.018696","-88.302997","-6","1" +"53065","Oakfield","WI","43.689915","-88.56586","-6","1" +"53066","Oconomowoc","WI","43.108241","-88.48935","-6","1" +"53069","Okauchee","WI","43.114118","-88.43771","-6","1" +"53070","Oostburg","WI","43.622793","-87.80364","-6","1" +"53072","Pewaukee","WI","43.076953","-88.268","-6","1" +"53073","Plymouth","WI","43.758674","-87.98005","-6","1" +"53074","Port Washington","WI","43.40181","-87.88001","-6","1" +"53075","Random Lake","WI","43.564477","-87.99094","-6","1" +"53076","Richfield","WI","43.265289","-88.20144","-6","1" +"53078","Rubicon","WI","43.3182","-88.45169","-6","1" +"53079","Saint Cloud","WI","43.808108","-88.18164","-6","1" +"53080","Saukville","WI","43.394676","-87.95887","-6","1" +"53081","Sheboygan","WI","43.736145","-87.72893","-6","1" +"53082","Sheboygan","WI","43.718294","-87.618716","-6","1" +"53083","Sheboygan","WI","43.797567","-87.75664","-6","1" +"53085","Sheboygan Falls","WI","43.731685","-87.83406","-6","1" +"53086","Slinger","WI","43.33278","-88.27907","-6","1" +"53088","Stockbridge","WI","44.075128","-88.30106","-6","1" +"53089","Sussex","WI","43.14004","-88.22641","-6","1" +"53090","West Bend","WI","43.446623","-88.17879","-6","1" +"53091","Theresa","WI","43.502688","-88.43299","-6","1" +"53092","Thiensville","WI","43.223907","-87.95085","-6","1" +"53093","Waldo","WI","43.665399","-87.94735","-6","1" +"53094","Watertown","WI","43.170606","-88.73058","-6","1" +"53095","West Bend","WI","43.40328","-88.18026","-6","1" +"53097","Mequon","WI","43.234506","-88.00914","-6","1" +"53098","Watertown","WI","43.231506","-88.70634","-6","1" +"53099","Woodland","WI","43.414202","-88.704914","-6","1" +"53101","Bassett","WI","42.58098","-87.662878","-6","1" +"53102","Benet Lake","WI","42.500141","-88.079983","-6","1" +"53103","Big Bend","WI","42.886982","-88.20955","-6","1" +"53104","Bristol","WI","42.551693","-88.04908","-6","1" +"53105","Burlington","WI","42.662671","-88.28132","-6","1" +"53108","Caledonia","WI","42.825711","-87.94293","-6","1" +"53109","Camp Lake","WI","42.535968","-88.144386","-6","1" +"53110","Cudahy","WI","42.948416","-87.86101","-6","1" +"53114","Darien","WI","42.60027","-88.74978","-6","1" +"53115","Delavan","WI","42.63427","-88.6383","-6","1" +"53118","Dousman","WI","42.991622","-88.47085","-6","1" +"53119","Eagle","WI","42.881035","-88.47117","-6","1" +"53120","East Troy","WI","42.797775","-88.40435","-6","1" +"53121","Elkhorn","WI","42.711105","-88.54214","-6","1" +"53122","Elm Grove","WI","43.050762","-88.0842","-6","1" +"53125","Fontana","WI","42.546003","-88.56234","-6","1" +"53126","Franksville","WI","42.778642","-87.96609","-6","1" +"53127","Genesee Depot","WI","42.960098","-88.374455","-6","1" +"53128","Genoa City","WI","42.526028","-88.33443","-6","1" +"53129","Greendale","WI","42.937448","-87.99839","-6","1" +"53130","Hales Corners","WI","42.941264","-88.05121","-6","1" +"53132","Franklin","WI","42.896145","-88.00891","-6","1" +"53134","Walworth","WI","42.560001","-88.594815","-6","1" +"53137","Helenville","WI","43.000999","-88.66382","-6","1" +"53138","Honey Creek","WI","42.66749","-88.541721","-6","1" +"53139","Kansasville","WI","42.691937","-88.12599","-6","1" +"53140","Kenosha","WI","42.60217","-87.82979","-6","1" +"53141","Kenosha","WI","42.58098","-87.662878","-6","1" +"53142","Kenosha","WI","42.559823","-87.87878","-6","1" +"53143","Kenosha","WI","42.56427","-87.83043","-6","1" +"53144","Kenosha","WI","42.601842","-87.87617","-6","1" +"53146","New Berlin","WI","42.973663","-88.15414","-6","1" +"53147","Lake Geneva","WI","42.587613","-88.45828","-6","1" +"53148","Lyons","WI","42.649557","-88.35965","-6","1" +"53149","Mukwonago","WI","42.872477","-88.34409","-6","1" +"53150","Muskego","WI","42.901235","-88.12464","-6","1" +"53151","New Berlin","WI","42.980163","-88.09438","-6","1" +"53152","New Munster","WI","42.574616","-88.232632","-6","1" +"53153","North Prairie","WI","42.935259","-88.40501","-6","1" +"53154","Oak Creek","WI","42.884347","-87.8992","-6","1" +"53156","Palmyra","WI","42.879242","-88.58987","-6","1" +"53157","Pell Lake","WI","42.540048","-88.358167","-6","1" +"53158","Pleasant Prairie","WI","42.529075","-87.87201","-6","1" +"53159","Powers Lake","WI","42.555695","-88.296914","-6","1" +"53167","Rochester","WI","42.742629","-88.22308","-6","1" +"53168","Salem","WI","42.573081","-88.12444","-6","1" +"53170","Silver Lake","WI","42.550263","-88.17065","-6","1" +"53171","Somers","WI","42.642298","-87.903161","-6","1" +"53172","South Milwaukee","WI","42.909816","-87.86395","-6","1" +"53176","Springfield","WI","42.642223","-88.41179","-6","1" +"53177","Sturtevant","WI","42.699169","-87.91692","-6","1" +"53178","Sullivan","WI","43.015999","-88.59572","-6","1" +"53179","Trevor","WI","42.515668","-88.13454","-6","1" +"53181","Twin Lakes","WI","42.515596","-88.25761","-6","1" +"53182","Union Grove","WI","42.696322","-88.04658","-6","1" +"53183","Wales","WI","43.002534","-88.37771","-6","1" +"53184","Walworth","WI","42.532636","-88.59862","-6","1" +"53185","Waterford","WI","42.798555","-88.19409","-6","1" +"53186","Waukesha","WI","43.015289","-88.20924","-6","1" +"53187","Waukesha","WI","43.018696","-88.302997","-6","1" +"53188","Waukesha","WI","43.020762","-88.26852","-6","1" +"53189","Waukesha","WI","42.967394","-88.264","-6","1" +"53190","Whitewater","WI","42.818747","-88.73279","-6","1" +"53191","Williams Bay","WI","42.573162","-88.54021","-6","1" +"53192","Wilmot","WI","42.511818","-88.18285","-6","1" +"53194","Woodworth","WI","42.58098","-87.662878","-6","1" +"53195","Zenda","WI","42.512403","-88.48262","-6","1" +"53197","Walworth","WI","42.566752","-88.56557","-6","1" +"53201","Milwaukee","WI","43.011264","-87.958409","-6","1" +"53202","Milwaukee","WI","43.046213","-87.9005","-6","1" +"53203","Milwaukee","WI","43.037963","-87.91548","-6","1" +"53204","Milwaukee","WI","43.017414","-87.92625","-6","1" +"53205","Milwaukee","WI","43.053763","-87.93473","-6","1" +"53206","Milwaukee","WI","43.076179","-87.93476","-6","1" +"53207","Milwaukee","WI","42.985465","-87.89998","-6","1" +"53208","Milwaukee","WI","43.047863","-87.96618","-6","1" +"53209","Milwaukee","WI","43.11941","-87.94727","-6","1" +"53210","Milwaukee","WI","43.068962","-87.97423","-6","1" +"53211","Milwaukee","WI","43.083012","-87.8859","-6","1" +"53212","Milwaukee","WI","43.072062","-87.9103","-6","1" +"53213","Milwaukee","WI","43.049012","-88.00012","-6","1" +"53214","Milwaukee","WI","43.020363","-88.01273","-6","1" +"53215","Milwaukee","WI","42.999364","-87.94343","-6","1" +"53216","Milwaukee","WI","43.086711","-87.9749","-6","1" +"53217","Milwaukee","WI","43.14351","-87.90894","-6","1" +"53218","Milwaukee","WI","43.11096","-87.99436","-6","1" +"53219","Milwaukee","WI","42.996614","-87.99213","-6","1" +"53220","Milwaukee","WI","42.969115","-87.99141","-6","1" +"53221","Milwaukee","WI","42.953915","-87.9457","-6","1" +"53222","Milwaukee","WI","43.083261","-88.02823","-6","1" +"53223","Milwaukee","WI","43.163692","-87.98717","-6","1" +"53224","Milwaukee","WI","43.153865","-88.04032","-6","1" +"53225","Milwaukee","WI","43.11576","-88.04121","-6","1" +"53226","Milwaukee","WI","43.048545","-88.04239","-6","1" +"53227","Milwaukee","WI","42.997647","-88.03717","-6","1" +"53228","Milwaukee","WI","42.966681","-88.03798","-6","1" +"53233","Milwaukee","WI","43.037313","-87.93373","-6","1" +"53234","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53235","Saint Francis","WI","42.971156","-87.87452","-6","1" +"53237","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53245","Eaton","WI","44.056094","-87.985595","-6","1" +"53259","Milwaukee","WI","43.038663","-87.913934","-6","1" +"53263","Milwaukee","WI","43.074583","-88.06044","-6","1" +"53267","Milwaukee","WI","43.044013","-87.909834","-6","1" +"53268","Milwaukee","WI","43.038513","-87.909584","-6","1" +"53270","Milwaukee","WI","43.038763","-87.903634","-6","1" +"53274","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53277","Milwaukee","WI","43.038863","-87.902384","-6","1" +"53278","Milwaukee","WI","43.038863","-87.902384","-6","1" +"53280","Milwaukee","WI","43.040963","-87.957786","-6","1" +"53281","Milwaukee","WI","43.040963","-87.957786","-6","1" +"53284","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53285","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53288","Milwaukee","WI","43.040613","-87.909784","-6","1" +"53290","Milwaukee","WI","43.037263","-87.914034","-6","1" +"53293","Milwaukee","WI","43.040813","-87.919135","-6","1" +"53295","Milwaukee","WI","43.017412","-87.569664","-6","1" +"53401","Racine","WI","42.727153","-87.675979","-6","1" +"53402","Racine","WI","42.767286","-87.79747","-6","1" +"53403","Racine","WI","42.704519","-87.80062","-6","1" +"53404","Racine","WI","42.743169","-87.80534","-6","1" +"53405","Racine","WI","42.714369","-87.82424","-6","1" +"53406","Racine","WI","42.730807","-87.85827","-6","1" +"53407","Racine","WI","42.731224","-87.782818","-6","1" +"53408","Racine","WI","42.727153","-87.675979","-6","1" +"53449","Jefferson","WI","42.999481","-88.782526","-6","1" +"53490","Racine","WI","42.727153","-87.675979","-6","1" +"53501","Afton","WI","42.605454","-89.070448","-6","1" +"53502","Albany","WI","42.71815","-89.44315","-6","1" +"53503","Arena","WI","43.150122","-89.92545","-6","1" +"53504","Argyle","WI","42.698173","-89.85736","-6","1" +"53505","Avalon","WI","42.642661","-88.82547","-6","1" +"53506","Avoca","WI","43.15498","-90.28594","-6","1" +"53507","Barneveld","WI","43.008697","-89.90117","-6","1" +"53508","Belleville","WI","42.865397","-89.55461","-6","1" +"53510","Belmont","WI","42.729814","-90.31984","-6","1" +"53511","Beloit","WI","42.526464","-89.04291","-6","1" +"53512","Beloit","WI","42.669779","-89.072779","-6","1" +"53515","Black Earth","WI","43.131939","-89.7438","-6","1" +"53516","Blanchardville","WI","42.802663","-89.85943","-6","1" +"53517","Blue Mounds","WI","43.031138","-89.83672","-6","1" +"53518","Blue River","WI","43.23854","-90.59683","-6","1" +"53520","Brodhead","WI","42.613107","-89.37364","-6","1" +"53521","Brooklyn","WI","42.839241","-89.40088","-6","1" +"53522","Browntown","WI","42.552731","-89.79624","-6","1" +"53523","Cambridge","WI","42.99273","-89.02274","-6","1" +"53525","Clinton","WI","42.551253","-88.85412","-6","1" +"53526","Cobb","WI","42.970855","-90.33452","-6","1" +"53527","Cottage Grove","WI","43.073751","-89.1967","-6","1" +"53528","Cross Plains","WI","43.116408","-89.64371","-6","1" +"53529","Dane","WI","43.228109","-89.53605","-6","1" +"53530","Darlington","WI","42.686745","-90.10983","-6","1" +"53531","Deerfield","WI","43.055415","-89.09349","-6","1" +"53532","De Forest","WI","43.240098","-89.33659","-6","1" +"53533","Dodgeville","WI","42.974296","-90.14404","-6","1" +"53534","Edgerton","WI","42.841688","-89.07223","-6","1" +"53535","Edmund","WI","43.011323","-90.133932","-6","1" +"53536","Evansville","WI","42.772516","-89.2802","-6","1" +"53537","Footville","WI","42.668944","-89.20998","-6","1" +"53538","Fort Atkinson","WI","42.924942","-88.84813","-6","1" +"53540","Gotham","WI","43.222854","-90.2935","-6","1" +"53541","Gratiot","WI","42.572413","-90.02605","-6","1" +"53542","Hanover","WI","42.632325","-89.15942","-6","1" +"53543","Highland","WI","43.043206","-90.35954","-6","1" +"53544","Hollandale","WI","42.878192","-89.92864","-6","1" +"53545","Janesville","WI","42.69146","-89.04277","-6","1" +"53546","Janesville","WI","42.666761","-88.99528","-6","1" +"53547","Janesville","WI","42.729359","-89.030111","-6","1" +"53549","Jefferson","WI","42.993905","-88.79321","-6","1" +"53550","Juda","WI","42.567333","-89.49397","-6","1" +"53551","Lake Mills","WI","43.082761","-88.90838","-6","1" +"53553","Linden","WI","42.92239","-90.28554","-6","1" +"53554","Livingston","WI","42.906219","-90.42574","-6","1" +"53555","Lodi","WI","43.325153","-89.56074","-6","1" +"53556","Lone Rock","WI","43.213963","-90.23909","-6","1" +"53557","Lowell","WI","43.339823","-88.79719","-6","1" +"53558","McFarland","WI","43.015498","-89.28954","-6","1" +"53559","Marshall","WI","43.172619","-89.07464","-6","1" +"53560","Mazomanie","WI","43.177861","-89.78012","-6","1" +"53561","Merrimac","WI","43.37262","-89.69418","-6","1" +"53562","Middleton","WI","43.103711","-89.51106","-6","1" +"53563","Milton","WI","42.778497","-88.95595","-6","1" +"53565","Mineral Point","WI","42.852038","-90.1745","-6","1" +"53566","Monroe","WI","42.603462","-89.64037","-6","1" +"53569","Montfort","WI","42.989241","-90.43855","-6","1" +"53570","Monticello","WI","42.745346","-89.61455","-6","1" +"53571","Morrisonville","WI","43.277409","-89.35853","-6","1" +"53572","Mount Horeb","WI","42.985255","-89.73647","-6","1" +"53573","Muscoda","WI","43.1914","-90.45655","-6","1" +"53574","New Glarus","WI","42.81636","-89.64075","-6","1" +"53575","Oregon","WI","42.929208","-89.38478","-6","1" +"53576","Orfordville","WI","42.635236","-89.24268","-6","1" +"53577","Plain","WI","43.302123","-90.07619","-6","1" +"53578","Prairie Du Sac","WI","43.318318","-89.74928","-6","1" +"53579","Reeseville","WI","43.296299","-88.86721","-6","1" +"53580","Rewey","WI","42.85044","-90.37608","-6","1" +"53581","Richland Center","WI","43.361048","-90.40776","-6","1" +"53582","Ridgeway","WI","43.020516","-89.97928","-6","1" +"53583","Sauk City","WI","43.267183","-89.76912","-6","1" +"53584","Sextonville","WI","43.279435","-90.287566","-6","1" +"53585","Sharon","WI","42.518695","-88.7226","-6","1" +"53586","Shullsburg","WI","42.5744","-90.23935","-6","1" +"53587","South Wayne","WI","42.584521","-89.9026","-6","1" +"53588","Spring Green","WI","43.174503","-90.07267","-6","1" +"53589","Stoughton","WI","42.926473","-89.22432","-6","1" +"53590","Sun Prairie","WI","43.189953","-89.2253","-6","1" +"53591","Sun Prairie","WI","43.06956","-89.423861","-6","1" +"53593","Verona","WI","42.988593","-89.55543","-6","1" +"53594","Waterloo","WI","43.18584","-88.97553","-6","1" +"53595","Dodgeville","WI","42.976078","-90.141299","-6","1" +"53596","Sun Prairie","WI","43.192403","-89.26288","-6","1" +"53597","Waunakee","WI","43.182873","-89.45408","-6","1" +"53598","Windsor","WI","43.21352","-89.34203","-6","1" +"53599","Woodford","WI","42.649309","-89.862202","-6","1" +"53648","Salem","WI","42.547163","-88.079487","-6","1" +"53698","Union Center","WI","43.680522","-90.26952","-6","1" +"53701","Madison","WI","43.06956","-89.423861","-6","1" +"53702","Madison","WI","43.06956","-89.423861","-6","1" +"53703","Madison","WI","43.078646","-89.37727","-6","1" +"53704","Madison","WI","43.121416","-89.34968","-6","1" +"53705","Madison","WI","43.073395","-89.45049","-6","1" +"53706","Madison","WI","43.074296","-89.40774","-6","1" +"53707","Madison","WI","43.06956","-89.423861","-6","1" +"53708","Madison","WI","43.06956","-89.423861","-6","1" +"53709","Madison","WI","43.06956","-89.423861","-6","1" +"53710","Madison","WI","43.06956","-89.423861","-6","1" +"53711","Madison","WI","43.036696","-89.44499","-6","1" +"53713","Madison","WI","43.037647","-89.39154","-6","1" +"53714","Madison","WI","43.099861","-89.31786","-6","1" +"53715","Madison","WI","43.061546","-89.40024","-6","1" +"53716","Madison","WI","43.065621","-89.32085","-6","1" +"53717","Madison","WI","43.072994","-89.51992","-6","1" +"53718","Madison","WI","43.095178","-89.2704","-6","1" +"53719","Madison","WI","43.029497","-89.50531","-6","1" +"53725","Madison","WI","43.06956","-89.423861","-6","1" +"53726","Madison","WI","43.06956","-89.423861","-6","1" +"53744","Madison","WI","43.06956","-89.423861","-6","1" +"53777","Madison","WI","43.06956","-89.423861","-6","1" +"53778","Madison","WI","43.06956","-89.423861","-6","1" +"53779","Madison","WI","43.098202","-89.324196","-6","1" +"53780","Madison","WI","43.06956","-89.423861","-6","1" +"53782","Madison","WI","43.06956","-89.423861","-6","1" +"53783","Madison","WI","43.15955","-89.285235","-6","1" +"53784","Madison","WI","43.048908","-89.338447","-6","1" +"53785","Madison","WI","43.06956","-89.423861","-6","1" +"53786","Madison","WI","43.06956","-89.423861","-6","1" +"53787","Madison","WI","43.06956","-89.423861","-6","1" +"53788","Madison","WI","43.076691","-89.37632","-6","1" +"53789","Madison","WI","43.06956","-89.423861","-6","1" +"53790","Madison","WI","43.06956","-89.423861","-6","1" +"53791","Madison","WI","43.06956","-89.423861","-6","1" +"53792","Madison","WI","43.06956","-89.423861","-6","1" +"53793","Madison","WI","43.06956","-89.423861","-6","1" +"53794","Madison","WI","43.06956","-89.423861","-6","1" +"53801","Bagley","WI","42.922835","-91.09378","-6","1" +"53802","Beetown","WI","42.873625","-90.936354","-6","1" +"53803","Benton","WI","42.563769","-90.36783","-6","1" +"53804","Bloomington","WI","42.873162","-90.91222","-6","1" +"53805","Boscobel","WI","43.136963","-90.69831","-6","1" +"53806","Cassville","WI","42.734625","-90.95124","-6","1" +"53807","Cuba City","WI","42.607138","-90.44812","-6","1" +"53808","Dickeyville","WI","42.627951","-90.5939","-6","1" +"53809","Fennimore","WI","42.98995","-90.63483","-6","1" +"53810","Glen Haven","WI","42.818053","-90.9931","-6","1" +"53811","Hazel Green","WI","42.532592","-90.49997","-6","1" +"53812","Kieler","WI","42.859325","-90.791337","-6","1" +"53813","Lancaster","WI","42.847591","-90.70167","-6","1" +"53816","Mount Hope","WI","42.996023","-90.85263","-6","1" +"53817","Patch Grove","WI","42.941786","-90.97564","-6","1" +"53818","Platteville","WI","42.743948","-90.48625","-6","1" +"53820","Potosi","WI","42.695285","-90.69309","-6","1" +"53821","Prairie Du Chien","WI","43.036566","-91.11838","-6","1" +"53824","Sinsinawa","WI","42.859325","-90.791337","-6","1" +"53825","Stitzer","WI","42.928048","-90.56703","-6","1" +"53826","Wauzeka","WI","43.124756","-90.90828","-6","1" +"53827","Woodman","WI","43.063729","-90.82292","-6","1" +"53886","New Diggings","WI","42.522232","-90.340446","-6","1" +"53901","Portage","WI","43.549851","-89.47101","-6","1" +"53910","Adams","WI","43.908737","-89.80722","-6","1" +"53911","Arlington","WI","43.321005","-89.36681","-6","1" +"53913","Baraboo","WI","43.483503","-89.74753","-6","1" +"53916","Beaver Dam","WI","43.456814","-88.84058","-6","1" +"53917","Beaver Dam","WI","43.414202","-88.704914","-6","1" +"53919","Brandon","WI","43.734566","-88.78585","-6","1" +"53920","Briggsville","WI","43.660412","-89.59309","-6","1" +"53922","Burnett","WI","43.518602","-88.71347","-6","1" +"53923","Cambria","WI","43.559975","-89.13762","-6","1" +"53924","Cazenovia","WI","43.503482","-90.26902","-6","1" +"53925","Columbus","WI","43.340383","-89.04091","-6","1" +"53926","Dalton","WI","43.664224","-89.19684","-6","1" +"53927","Dellwood","WI","43.95546","-89.941771","-6","1" +"53928","Doylestown","WI","43.426936","-89.14912","-6","1" +"53929","Elroy","WI","43.752732","-90.2853","-6","1" +"53930","Endeavor","WI","43.691602","-89.48924","-6","1" +"53931","Fairwater","WI","43.740108","-88.86812","-6","1" +"53932","Fall River","WI","43.407179","-89.05837","-6","1" +"53933","Fox Lake","WI","43.566325","-88.90158","-6","1" +"53934","Friendship","WI","43.967604","-89.85287","-6","1" +"53935","Friesland","WI","43.588986","-89.06787","-6","1" +"53936","Grand Marsh","WI","43.868852","-89.70736","-6","1" +"53937","Hillpoint","WI","43.378638","-90.15726","-6","1" +"53939","Kingston","WI","43.693508","-89.12856","-6","1" +"53940","Lake Delton","WI","43.589593","-89.79306","-6","1" +"53941","La Valle","WI","43.579867","-90.13608","-6","1" +"53942","Lime Ridge","WI","43.468211","-90.161478","-6","1" +"53943","Loganville","WI","43.401354","-90.04308","-6","1" +"53944","Lyndon Station","WI","43.705113","-89.89911","-6","1" +"53946","Markesan","WI","43.727646","-89.02574","-6","1" +"53947","Marquette","WI","43.747501","-89.1405","-6","1" +"53948","Mauston","WI","43.783534","-90.0566","-6","1" +"53949","Montello","WI","43.792518","-89.34061","-6","1" +"53950","New Lisbon","WI","43.90147","-90.13777","-6","1" +"53951","North Freedom","WI","43.393526","-89.84489","-6","1" +"53952","Oxford","WI","43.776098","-89.60323","-6","1" +"53953","Packwaukee","WI","43.765621","-89.45736","-6","1" +"53954","Pardeeville","WI","43.522529","-89.32342","-6","1" +"53955","Poynette","WI","43.404191","-89.4171","-6","1" +"53956","Randolph","WI","43.544491","-89.01137","-6","1" +"53957","Randolph","WI","43.535249","-89.006845","-6","1" +"53958","Reedsburg","WI","43.393767","-89.95589","-6","1" +"53959","Reedsburg","WI","43.53414","-89.99183","-6","1" +"53960","Rio","WI","43.442214","-89.24134","-6","1" +"53961","Rock Springs","WI","43.469055","-89.93827","-6","1" +"53962","Union Center","WI","43.685137","-90.26578","-6","1" +"53963","Waupun","WI","43.633781","-88.7351","-6","1" +"53964","Westfield","WI","43.907282","-89.49412","-6","1" +"53965","Wisconsin Dells","WI","43.645603","-89.78104","-6","1" +"53968","Wonewoc","WI","43.648089","-90.24377","-6","1" +"53969","Wyocena","WI","43.49534","-89.30897","-6","1" +"53981","Willow","WI","43.412658","-90.274101","-6","1" +"53995","Poynette","WI","43.39269","-89.404154","-6","1" +"54001","Amery","WI","45.326339","-92.37857","-6","1" +"54002","Baldwin","WI","44.96915","-92.37326","-6","1" +"54003","Beldenville","WI","44.782907","-92.44657","-6","1" +"54004","Clayton","WI","45.319095","-92.13016","-6","1" +"54005","Clear Lake","WI","45.237727","-92.22901","-6","1" +"54006","Cushing","WI","45.586187","-92.64165","-6","1" +"54007","Deer Park","WI","45.189667","-92.37018","-6","1" +"54009","Dresser","WI","45.351585","-92.60246","-6","1" +"54010","East Ellsworth","WI","44.734759","-92.465532","-6","1" +"54011","Ellsworth","WI","44.718955","-92.46651","-6","1" +"54012","Emerald","WI","45.115377","-92.28686","-6","1" +"54013","Glenwood City","WI","45.06461","-92.18504","-6","1" +"54014","Hager City","WI","44.626915","-92.548","-6","1" +"54015","Hammond","WI","44.957487","-92.44589","-6","1" +"54016","Hudson","WI","44.978518","-92.71996","-6","1" +"54017","New Richmond","WI","45.122052","-92.53691","-6","1" +"54020","Osceola","WI","45.299735","-92.64222","-6","1" +"54021","Prescott","WI","44.752662","-92.77958","-6","1" +"54022","River Falls","WI","44.854636","-92.61729","-6","1" +"54023","Roberts","WI","44.970887","-92.5478","-6","1" +"54024","Saint Croix Falls","WI","45.469339","-92.62088","-6","1" +"54025","Somerset","WI","45.142151","-92.6819","-6","1" +"54026","Star Prairie","WI","45.221875","-92.53507","-6","1" +"54027","Wilson","WI","44.938989","-92.18637","-6","1" +"54028","Woodville","WI","44.944206","-92.27961","-6","1" +"54034","Forest","WI","43.690997","-90.478904","-6","1" +"54035","Fond du Lac","WI","43.747687","-88.418643","-6","1" +"54052","Kickapoo","WI","43.489717","-90.712433","-6","1" +"54061","New London","WI","44.393405","-88.72588","-6","1" +"54082","Saint Joseph","WI","45.068411","-92.74248","-6","1" +"54101","Abrams","WI","44.788898","-88.04535","-6","1" +"54102","Amberg","WI","45.503625","-88.08108","-6","1" +"54103","Armstrong Creek","WI","45.655708","-88.48292","-6","1" +"54104","Athelstane","WI","45.428789","-88.25278","-6","1" +"54106","Black Creek","WI","44.472424","-88.45746","-6","1" +"54107","Bonduel","WI","44.710588","-88.45159","-6","1" +"54110","Brillion","WI","44.179504","-88.07449","-6","1" +"54111","Cecil","WI","44.826617","-88.4018","-6","1" +"54112","Coleman","WI","45.054842","-88.0547","-6","1" +"54113","Combined Locks","WI","44.264904","-88.312","-6","1" +"54114","Crivitz","WI","45.245131","-88.1504","-6","1" +"54115","De Pere","WI","44.42042","-88.07896","-6","1" +"54119","Dunbar","WI","45.613142","-88.17458","-6","1" +"54120","Fence","WI","45.755118","-88.43264","-6","1" +"54121","Florence","WI","45.873589","-88.27342","-6","1" +"54123","Forest Junction","WI","44.205239","-88.15899","-6","1" +"54124","Gillett","WI","44.904959","-88.37822","-6","1" +"54125","Goodman","WI","45.634252","-88.33667","-6","1" +"54126","Greenleaf","WI","44.291766","-88.05059","-6","1" +"54127","Green Valley","WI","44.795823","-88.26895","-6","1" +"54128","Gresham","WI","44.860223","-88.79585","-6","1" +"54129","Hilbert","WI","44.131149","-88.19443","-6","1" +"54130","Kaukauna","WI","44.293197","-88.25922","-6","1" +"54131","Freedom","WI","44.416326","-88.464873","-6","1" +"54135","Keshena","WI","44.901909","-88.59535","-6","1" +"54136","Kimberly","WI","44.268387","-88.33656","-6","1" +"54137","Krakow","WI","44.76022","-88.25467","-6","1" +"54138","Lakewood","WI","45.312629","-88.47583","-6","1" +"54139","Lena","WI","44.943923","-88.06843","-6","1" +"54140","Little Chute","WI","44.286637","-88.31001","-6","1" +"54141","Little Suamico","WI","44.728341","-88.00712","-6","1" +"54143","Marinette","WI","45.092448","-87.64929","-6","1" +"54149","Mountain","WI","45.204046","-88.51121","-6","1" +"54150","Neopit","WI","44.984514","-88.85947","-6","1" +"54151","Niagara","WI","45.732689","-87.96996","-6","1" +"54152","Nichols","WI","44.565437","-88.46717","-6","1" +"54153","Oconto","WI","44.886571","-87.89935","-6","1" +"54154","Oconto Falls","WI","44.86802","-88.16446","-6","1" +"54155","Oneida","WI","44.52284","-88.18008","-6","1" +"54156","Pembine","WI","45.595032","-87.95018","-6","1" +"54157","Peshtigo","WI","45.057605","-87.77449","-6","1" +"54159","Porterfield","WI","45.207353","-87.80061","-6","1" +"54160","Potter","WI","44.1196","-88.09784","-6","1" +"54161","Pound","WI","45.116325","-88.16811","-6","1" +"54162","Pulaski","WI","44.65711","-88.24208","-6","1" +"54165","Seymour","WI","44.51523","-88.31075","-6","1" +"54166","Shawano","WI","44.779241","-88.60636","-6","1" +"54169","Sherwood","WI","44.173538","-88.27525","-6","1" +"54170","Shiocton","WI","44.506022","-88.56461","-6","1" +"54171","Sobieski","WI","44.718335","-88.10117","-6","1" +"54173","Suamico","WI","44.640367","-88.03732","-6","1" +"54174","Suring","WI","45.047766","-88.37913","-6","1" +"54175","Townsend","WI","45.30942","-88.61753","-6","1" +"54177","Wausaukee","WI","45.370117","-87.87769","-6","1" +"54180","Wrightstown","WI","44.325856","-88.16205","-6","1" +"54182","Zachow","WI","44.731453","-88.369842","-6","1" +"54201","Algoma","WI","44.613604","-87.46502","-6","1" +"54202","Baileys Harbor","WI","45.059668","-87.13196","-6","1" +"54203","Branch","WI","44.109853","-87.483874","-6","1" +"54204","Brussels","WI","44.753401","-87.64628","-6","1" +"54205","Casco","WI","44.58906","-87.62271","-6","1" +"54206","Kossuth","WI","44.237283","-87.801108","-6","1" +"54207","Collins","WI","44.086144","-87.98331","-6","1" +"54208","Denmark","WI","44.358527","-87.79747","-6","1" +"54209","Egg Harbor","WI","45.027668","-87.28234","-6","1" +"54210","Ellison Bay","WI","45.271782","-87.04561","-6","1" +"54211","Ephraim","WI","45.158078","-87.16796","-6","1" +"54212","Fish Creek","WI","45.146473","-87.24154","-6","1" +"54213","Forestville","WI","44.693392","-87.51197","-6","1" +"54214","Francis Creek","WI","44.200758","-87.71974","-6","1" +"54215","Kellnersville","WI","44.224851","-87.79943","-6","1" +"54216","Kewaunee","WI","44.456022","-87.54429","-6","1" +"54217","Luxemburg","WI","44.55681","-87.71413","-6","1" +"54220","Manitowoc","WI","44.096194","-87.68919","-6","1" +"54221","Manitowoc","WI","44.132295","-87.599031","-6","1" +"54226","Maplewood","WI","45.059713","-87.006012","-6","1" +"54227","Maribel","WI","44.27809","-87.79026","-6","1" +"54228","Mishicot","WI","44.257289","-87.64866","-6","1" +"54229","New Franken","WI","44.559995","-87.81553","-6","1" +"54230","Reedsville","WI","44.142939","-87.9131","-6","1" +"54232","Saint Nazianz","WI","44.008575","-87.92456","-6","1" +"54234","Sister Bay","WI","45.186528","-87.11618","-6","1" +"54235","Sturgeon Bay","WI","44.844133","-87.38044","-6","1" +"54240","Tisch Mills","WI","44.326784","-87.62239","-6","1" +"54241","Two Rivers","WI","44.174245","-87.58613","-6","1" +"54242","Ludington","WI","44.829002","-91.210194","-6","1" +"54245","Valders","WI","44.037618","-87.90026","-6","1" +"54246","Washington Island","WI","45.365984","-86.89946","-6","1" +"54247","Whitelaw","WI","44.19011","-87.79109","-6","1" +"54301","Green Bay","WI","44.489059","-88.01674","-6","1" +"54302","Green Bay","WI","44.505782","-87.97947","-6","1" +"54303","Green Bay","WI","44.530892","-88.04482","-6","1" +"54304","Green Bay","WI","44.499346","-88.06318","-6","1" +"54305","Green Bay","WI","44.460064","-88.007382","-6","1" +"54306","Green Bay","WI","44.460064","-88.007382","-6","1" +"54307","Green Bay","WI","44.460064","-88.007382","-6","1" +"54308","Green Bay","WI","44.459509","-87.805912","-6","1" +"54310","Liberty Grove","WI","45.210664","-87.041244","-6","1" +"54311","Green Bay","WI","44.485243","-87.92232","-6","1" +"54313","Green Bay","WI","44.564261","-88.10326","-6","1" +"54324","Green Bay","WI","44.460064","-88.007382","-6","1" +"54337","Bone Lake","WI","45.610429","-92.324516","-6","1" +"54344","Green Bay","WI","44.42504","-88.111252","-6","1" +"54353","Georgetown","WI","45.54142","-92.398168","-6","1" +"54383","Wascott","WI","46.18508","-91.959307","-6","1" +"54401","Wausau","WI","44.958382","-89.6693","-6","1" +"54402","Wausau","WI","44.900936","-89.7701","-6","1" +"54403","Wausau","WI","44.976118","-89.59209","-6","1" +"54404","Marshfield","WI","44.466554","-90.02136","-6","1" +"54405","Abbotsford","WI","44.950905","-90.30486","-6","1" +"54406","Amherst","WI","44.421111","-89.30618","-6","1" +"54407","Amherst Junction","WI","44.513056","-89.30422","-6","1" +"54408","Aniwa","WI","45.03324","-89.28376","-6","1" +"54409","Antigo","WI","45.121666","-89.13388","-6","1" +"54410","Arpin","WI","44.536298","-90.04317","-6","1" +"54411","Athens","WI","45.040345","-90.01829","-6","1" +"54412","Auburndale","WI","44.662975","-89.9943","-6","1" +"54413","Babcock","WI","44.283542","-90.12791","-6","1" +"54414","Birnamwood","WI","44.95258","-89.16252","-6","1" +"54415","Blenker","WI","44.619128","-89.918563","-6","1" +"54416","Bowler","WI","44.879391","-88.95511","-6","1" +"54417","Brokaw","WI","45.025111","-89.64609","-6","1" +"54418","Bryant","WI","45.221567","-88.96427","-6","1" +"54419","Chelsea","WI","45.222391","-90.329035","-6","1" +"54420","Chili","WI","44.619487","-90.36605","-6","1" +"54421","Colby","WI","44.903","-90.30657","-6","1" +"54422","Curtiss","WI","44.984128","-90.44176","-6","1" +"54423","Custer","WI","44.585504","-89.42139","-6","1" +"54424","Deerbrook","WI","45.28142","-89.20118","-6","1" +"54425","Dorchester","WI","45.006072","-90.33146","-6","1" +"54426","Edgar","WI","44.907131","-89.9777","-6","1" +"54427","Eland","WI","44.834167","-89.23917","-6","1" +"54428","Elcho","WI","45.440199","-89.13837","-6","1" +"54429","Elderon","WI","44.780171","-89.247809","-6","1" +"54430","Elton","WI","45.138072","-88.88498","-6","1" +"54431","Little Black","WI","45.116388","-90.352237","-6","1" +"54432","Galloway","WI","44.900936","-89.7701","-6","1" +"54433","Gilman","WI","45.186932","-90.81846","-6","1" +"54434","Jump River","WI","45.206757","-90.484132","-6","1" +"54435","Gleason","WI","45.372921","-89.43748","-6","1" +"54436","Granton","WI","44.557846","-90.44622","-6","1" +"54437","Greenwood","WI","44.775105","-90.62639","-6","1" +"54439","Hannibal","WI","45.206757","-90.484132","-6","1" +"54440","Hatley","WI","44.830734","-89.37414","-6","1" +"54441","Hewitt","WI","44.645158","-90.10523","-6","1" +"54442","Irma","WI","45.345991","-89.67087","-6","1" +"54443","Junction City","WI","44.612879","-89.74163","-6","1" +"54444","Kempster","WI","45.249382","-89.032136","-6","1" +"54446","Loyal","WI","44.758265","-90.48248","-6","1" +"54447","Lublin","WI","45.077541","-90.7324","-6","1" +"54448","Marathon","WI","44.935076","-89.83699","-6","1" +"54449","Marshfield","WI","44.656686","-90.18152","-6","1" +"54450","Mattoon","WI","45.006232","-89.047379","-6","1" +"54451","Medford","WI","45.171131","-90.40527","-6","1" +"54452","Merrill","WI","45.181311","-89.70469","-6","1" +"54454","Milladore","WI","44.620203","-89.87223","-6","1" +"54455","Mosinee","WI","44.787003","-89.69066","-6","1" +"54456","Neillsville","WI","44.553719","-90.61457","-6","1" +"54457","Nekoosa","WI","44.260056","-89.88239","-6","1" +"54458","Nelsonville","WI","44.490241","-89.310944","-6","1" +"54459","Ogema","WI","45.434426","-90.26806","-6","1" +"54460","Owen","WI","44.945107","-90.53973","-6","1" +"54462","Pearson","WI","45.392118","-89.0051","-6","1" +"54463","Pelican Lake","WI","45.516138","-89.17824","-6","1" +"54464","Phlox","WI","45.249382","-89.032136","-6","1" +"54465","Pickerel","WI","45.393536","-88.88706","-6","1" +"54466","Pittsville","WI","44.404914","-90.24246","-6","1" +"54467","Plover","WI","44.452277","-89.54399","-6","1" +"54469","Port Edwards","WI","44.348816","-89.86368","-6","1" +"54470","Rib Lake","WI","45.297753","-90.16658","-6","1" +"54471","Ringle","WI","44.918707","-89.44139","-6","1" +"54472","Marshfield","WI","44.466554","-90.02136","-6","1" +"54473","Rosholt","WI","44.641554","-89.33596","-6","1" +"54474","Rothschild","WI","44.885168","-89.61922","-6","1" +"54475","Rudolph","WI","44.484001","-89.79403","-6","1" +"54476","Schofield","WI","44.903194","-89.57937","-6","1" +"54479","Spencer","WI","44.764411","-90.33179","-6","1" +"54480","Stetsonville","WI","45.064903","-90.29794","-6","1" +"54481","Stevens Point","WI","44.524054","-89.55621","-6","1" +"54484","Stratford","WI","44.793747","-90.06026","-6","1" +"54485","Summit Lake","WI","45.381803","-89.20073","-6","1" +"54486","Tigerton","WI","44.734445","-89.04525","-6","1" +"54487","Tomahawk","WI","45.510639","-89.73162","-6","1" +"54488","Unity","WI","44.844939","-90.32891","-6","1" +"54489","Vesper","WI","44.456798","-89.99623","-6","1" +"54490","Westboro","WI","45.321034","-90.40218","-6","1" +"54491","White Lake","WI","45.211554","-88.74259","-6","1" +"54492","Stevens Point","WI","44.509433","-89.528584","-6","1" +"54493","Willard","WI","44.729524","-90.79351","-6","1" +"54494","Wisconsin Rapids","WI","44.373468","-89.78761","-6","1" +"54495","Wisconsin Rapids","WI","44.376507","-89.90771","-6","1" +"54498","Withee","WI","45.034443","-90.63063","-6","1" +"54499","Wittenberg","WI","44.797279","-89.18442","-6","1" +"54501","Rhinelander","WI","45.64672","-89.39408","-6","1" +"54511","Argonne","WI","45.69606","-88.81274","-6","1" +"54512","Boulder Junction","WI","46.083178","-89.66605","-6","1" +"54513","Brantwood","WI","45.54608","-90.13535","-6","1" +"54514","Butternut","WI","46.024995","-90.44778","-6","1" +"54515","Catawba","WI","45.536545","-90.50935","-6","1" +"54517","Clam Lake","WI","46.136639","-90.93065","-6","1" +"54519","Conover","WI","46.040996","-89.28591","-6","1" +"54520","Crandon","WI","45.522208","-88.9105","-6","1" +"54521","Eagle River","WI","45.922669","-89.24825","-6","1" +"54524","Fifield","WI","45.85263","-90.41709","-6","1" +"54525","Gile","WI","46.429932","-90.22247","-6","1" +"54526","Glen Flora","WI","45.500701","-90.85944","-6","1" +"54527","Glidden","WI","46.119661","-90.64288","-6","1" +"54529","Harshaw","WI","45.707456","-89.68877","-6","1" +"54530","Hawkins","WI","45.549336","-90.73047","-6","1" +"54531","Hazelhurst","WI","45.754415","-89.79791","-6","1" +"54532","Heafford Junction","WI","45.337678","-89.735524","-6","1" +"54534","Hurley","WI","46.40553","-90.21811","-6","1" +"54536","Iron Belt","WI","46.346699","-90.33543","-6","1" +"54537","Kennan","WI","45.527003","-90.61228","-6","1" +"54538","Lac Du Flambeau","WI","45.964667","-89.90731","-6","1" +"54539","Lake Tomahawk","WI","45.811923","-89.57988","-6","1" +"54540","Land O Lakes","WI","46.149936","-89.36592","-6","1" +"54541","Laona","WI","45.55375","-88.6624","-6","1" +"54542","Long Lake","WI","45.920035","-88.68929","-6","1" +"54543","McNaughton","WI","45.731478","-89.52525","-6","1" +"54545","Manitowish Waters","WI","46.122746","-89.83996","-6","1" +"54546","Mellen","WI","46.273618","-90.70102","-6","1" +"54547","Mercer","WI","46.183572","-90.05754","-6","1" +"54548","Minocqua","WI","45.869921","-89.79346","-6","1" +"54550","Montreal","WI","46.410758","-90.25072","-6","1" +"54551","Presque Isle","WI","46.187253","-89.769399","-6","1" +"54552","Park Falls","WI","45.927783","-90.34311","-6","1" +"54554","Phelps","WI","46.056677","-89.08234","-6","1" +"54555","Phillips","WI","45.716124","-90.40013","-6","1" +"54556","Prentice","WI","45.549425","-90.31571","-6","1" +"54557","Presque Isle","WI","46.221041","-89.73707","-6","1" +"54558","Saint Germain","WI","45.914371","-89.4897","-6","1" +"54559","Saxon","WI","46.495575","-90.45101","-6","1" +"54560","Sayner","WI","45.995755","-89.52565","-6","1" +"54561","Star Lake","WI","46.058408","-89.4516","-6","1" +"54562","Three Lakes","WI","45.815926","-89.10942","-6","1" +"54563","Tony","WI","45.477056","-90.98354","-6","1" +"54564","Tripoli","WI","45.63298","-89.96658","-6","1" +"54565","Upson","WI","46.309371","-90.4354","-6","1" +"54566","Wabeno","WI","45.432682","-88.67339","-6","1" +"54568","Woodruff","WI","45.924341","-89.68496","-6","1" +"54601","La Crosse","WI","43.797116","-91.21141","-6","1" +"54602","La Crosse","WI","43.907739","-91.167621","-6","1" +"54603","La Crosse","WI","43.848665","-91.24922","-6","1" +"54610","Alma","WI","44.362741","-91.85287","-6","1" +"54611","Alma Center","WI","44.44202","-90.93859","-6","1" +"54612","Arcadia","WI","44.253423","-91.48885","-6","1" +"54613","Arkdale","WI","44.061018","-89.90838","-6","1" +"54614","Bangor","WI","43.894741","-90.97441","-6","1" +"54615","Black River Falls","WI","44.277231","-90.80066","-6","1" +"54616","Blair","WI","44.293183","-91.23075","-6","1" +"54618","Camp Douglas","WI","43.95685","-90.29445","-6","1" +"54619","Cashton","WI","43.749142","-90.78473","-6","1" +"54620","Cataract","WI","44.087601","-90.842289","-6","1" +"54621","Chaseburg","WI","43.659389","-91.08195","-6","1" +"54622","Cochrane","WI","44.248179","-91.83124","-6","1" +"54623","Coon Valley","WI","43.713575","-91.02348","-6","1" +"54624","De Soto","WI","43.433893","-91.15949","-6","1" +"54625","Dodge","WI","44.130528","-91.52601","-6","1" +"54626","Eastman","WI","43.217285","-91.05946","-6","1" +"54627","Ettrick","WI","44.168986","-91.25737","-6","1" +"54628","Ferryville","WI","43.373139","-91.0025","-6","1" +"54629","Fountain City","WI","44.13288","-91.67722","-6","1" +"54630","Galesville","WI","44.087366","-91.35965","-6","1" +"54631","Gays Mills","WI","43.291992","-90.83048","-6","1" +"54632","Genoa","WI","43.559832","-91.16957","-6","1" +"54634","Hillsboro","WI","43.610055","-90.40896","-6","1" +"54635","Hixton","WI","44.400995","-91.04608","-6","1" +"54636","Holmen","WI","43.978816","-91.2512","-6","1" +"54637","Hustler","WI","43.880649","-90.27423","-6","1" +"54638","Kendall","WI","43.795422","-90.37609","-6","1" +"54639","La Farge","WI","43.610629","-90.62108","-6","1" +"54640","Lynxville","WI","43.246161","-91.05429","-6","1" +"54641","Mather","WI","43.94521","-90.049489","-6","1" +"54642","Melrose","WI","44.15175","-91.04558","-6","1" +"54643","Millston","WI","44.186869","-90.635831","-6","1" +"54644","Mindoro","WI","44.029269","-91.06484","-6","1" +"54645","Mount Sterling","WI","43.31493","-90.9287","-6","1" +"54646","Necedah","WI","44.057528","-90.07117","-6","1" +"54648","Norwalk","WI","43.836783","-90.62066","-6","1" +"54649","Oakdale","WI","43.971514","-90.361161","-6","1" +"54650","Onalaska","WI","43.899664","-91.22963","-6","1" +"54651","Ontario","WI","43.740893","-90.56934","-6","1" +"54652","Readstown","WI","43.454264","-90.76116","-6","1" +"54653","Rockland","WI","43.869244","-90.91873","-6","1" +"54654","Seneca","WI","43.265154","-90.959","-6","1" +"54655","Soldiers Grove","WI","43.388055","-90.76632","-6","1" +"54656","Sparta","WI","43.96977","-90.80796","-6","1" +"54657","Steuben","WI","43.194284","-90.8911","-6","1" +"54658","Stoddard","WI","43.68804","-91.19665","-6","1" +"54659","Taylor","WI","44.309131","-91.11676","-6","1" +"54660","Tomah","WI","43.984412","-90.48416","-6","1" +"54661","Trempealeau","WI","44.026843","-91.4513","-6","1" +"54662","Tunnel City","WI","44.003084","-90.562005","-6","1" +"54664","Viola","WI","43.502238","-90.65131","-6","1" +"54665","Viroqua","WI","43.543934","-90.89904","-6","1" +"54666","Warrens","WI","44.134587","-90.43289","-6","1" +"54667","Westby","WI","43.656393","-90.85562","-6","1" +"54669","West Salem","WI","43.903949","-91.08847","-6","1" +"54670","Wilton","WI","43.833159","-90.49044","-6","1" +"54699","West Salem","WI","43.900433","-91.071758","-6","1" +"54701","Eau Claire","WI","44.780427","-91.48065","-6","1" +"54702","Eau Claire","WI","44.726626","-91.285931","-6","1" +"54703","Eau Claire","WI","44.82961","-91.50521","-6","1" +"54720","Altoona","WI","44.80416","-91.43963","-6","1" +"54721","Arkansaw","WI","44.62411","-92.07828","-6","1" +"54722","Augusta","WI","44.699923","-91.12509","-6","1" +"54723","Bay City","WI","44.608838","-92.44607","-6","1" +"54724","Bloomer","WI","45.101683","-91.48415","-6","1" +"54725","Boyceville","WI","45.062111","-92.02641","-6","1" +"54726","Boyd","WI","44.946486","-91.02282","-6","1" +"54727","Cadott","WI","44.963809","-91.16181","-6","1" +"54728","Chetek","WI","45.312195","-91.64173","-6","1" +"54729","Chippewa Falls","WI","44.932711","-91.38877","-6","1" +"54730","Colfax","WI","45.012181","-91.73021","-6","1" +"54731","Conrath","WI","45.36469","-91.04968","-6","1" +"54732","Cornell","WI","45.155211","-91.17005","-6","1" +"54733","Dallas","WI","45.275752","-91.85084","-6","1" +"54734","Downing","WI","45.086186","-92.12453","-6","1" +"54735","Downsville","WI","44.946496","-91.90344","-6","1" +"54736","Durand","WI","44.613891","-91.92402","-6","1" +"54737","Eau Galle","WI","44.718959","-91.99704","-6","1" +"54738","Eleva","WI","44.586469","-91.48873","-6","1" +"54739","Elk Mound","WI","44.872678","-91.69231","-6","1" +"54740","Elmwood","WI","44.763269","-92.1517","-6","1" +"54741","Fairchild","WI","44.601345","-90.98854","-6","1" +"54742","Fall Creek","WI","44.763678","-91.29172","-6","1" +"54743","Gilmanton","WI","44.311074","-91.806396","-6","1" +"54744","Hillsdale","WI","45.319786","-91.881754","-6","1" +"54745","Holcombe","WI","45.253108","-91.1559","-6","1" +"54746","Humbird","WI","44.550251","-90.89542","-6","1" +"54747","Independence","WI","44.38161","-91.47913","-6","1" +"54748","Jim Falls","WI","45.074725","-91.2563","-6","1" +"54749","Knapp","WI","44.949207","-92.08073","-6","1" +"54750","Maiden Rock","WI","44.615442","-92.30798","-6","1" +"54751","Menomonie","WI","44.86877","-91.92915","-6","1" +"54754","Merrillan","WI","44.434537","-90.79473","-6","1" +"54755","Mondovi","WI","44.584633","-91.68767","-6","1" +"54756","Nelson","WI","44.451724","-91.95785","-6","1" +"54757","New Auburn","WI","45.235611","-91.52127","-6","1" +"54758","Osseo","WI","44.555876","-91.21713","-6","1" +"54759","Pepin","WI","44.478326","-92.14053","-6","1" +"54760","Pigeon Falls","WI","44.424662","-91.20833","-6","1" +"54761","Plum City","WI","44.624559","-92.17732","-6","1" +"54762","Prairie Farm","WI","45.24647","-91.99273","-6","1" +"54763","Ridgeland","WI","45.186997","-91.88073","-6","1" +"54764","Rock Falls","WI","44.946496","-91.90344","-6","1" +"54765","Sand Creek","WI","45.142866","-91.699794","-6","1" +"54766","Sheldon","WI","45.323865","-90.89376","-6","1" +"54767","Spring Valley","WI","44.833746","-92.25937","-6","1" +"54768","Stanley","WI","44.963528","-90.93012","-6","1" +"54769","Stockholm","WI","44.530201","-92.23721","-6","1" +"54770","Strum","WI","44.545046","-91.38753","-6","1" +"54771","Thorp","WI","44.95298","-90.79784","-6","1" +"54772","Wheeler","WI","45.084813","-91.89724","-6","1" +"54773","Whitehall","WI","44.377781","-91.30948","-6","1" +"54774","Chippewa Falls","WI","45.07413","-91.294397","-6","1" +"54801","Spooner","WI","45.850775","-91.94361","-6","1" +"54805","Almena","WI","45.418325","-92.02914","-6","1" +"54806","Ashland","WI","46.577191","-90.89707","-6","1" +"54810","Balsam Lake","WI","45.455304","-92.40153","-6","1" +"54812","Barron","WI","45.39701","-91.86337","-6","1" +"54813","Barronett","WI","45.646145","-92.01923","-6","1" +"54814","Bayfield","WI","46.856701","-90.85401","-6","1" +"54816","Benoit","WI","46.682796","-91.143254","-6","1" +"54817","Birchwood","WI","45.661506","-91.54526","-6","1" +"54818","Brill","WI","45.423409","-91.848206","-6","1" +"54819","Bruce","WI","45.45273","-91.29437","-6","1" +"54820","Brule","WI","46.588243","-91.55208","-6","1" +"54821","Cable","WI","46.213138","-91.13997","-6","1" +"54822","Cameron","WI","45.401622","-91.72727","-6","1" +"54824","Centuria","WI","45.454867","-92.52701","-6","1" +"54826","Comstock","WI","45.505963","-92.17646","-6","1" +"54827","Cornucopia","WI","46.802909","-91.10944","-6","1" +"54828","Couderay","WI","45.858431","-91.25765","-6","1" +"54829","Cumberland","WI","45.552434","-92.05004","-6","1" +"54830","Danbury","WI","46.036193","-92.21802","-6","1" +"54832","Drummond","WI","46.326236","-91.29643","-6","1" +"54834","Edgewater","WI","45.742668","-91.47648","-6","1" +"54835","Exeland","WI","45.671767","-91.23317","-6","1" +"54836","Foxboro","WI","46.449996","-92.21831","-6","1" +"54837","Frederic","WI","45.679878","-92.42153","-6","1" +"54838","Gordon","WI","46.233591","-91.81795","-6","1" +"54839","Grand View","WI","46.360155","-91.14425","-6","1" +"54840","Grantsburg","WI","45.75118","-92.67182","-6","1" +"54841","Haugen","WI","45.612444","-91.77624","-6","1" +"54842","Hawthorne","WI","46.513247","-91.84824","-6","1" +"54843","Hayward","WI","46.005082","-91.35255","-6","1" +"54844","Herbster","WI","46.765166","-91.21312","-6","1" +"54845","Hertel","WI","45.811685","-92.13692","-6","1" +"54846","High Bridge","WI","46.372151","-90.74865","-6","1" +"54847","Iron River","WI","46.553351","-91.37996","-6","1" +"54848","Ladysmith","WI","45.477445","-91.105","-6","1" +"54849","Lake Nebagamon","WI","46.476428","-91.67634","-6","1" +"54850","La Pointe","WI","46.799835","-90.73209","-6","1" +"54851","Lewis","WI","45.468941","-92.521938","-6","1" +"54853","Luck","WI","45.577963","-92.45652","-6","1" +"54854","Maple","WI","46.626518","-91.6952","-6","1" +"54855","Marengo","WI","46.396053","-90.81506","-6","1" +"54856","Mason","WI","46.433167","-91.10883","-6","1" +"54857","Mikana","WI","45.591546","-91.60046","-6","1" +"54858","Milltown","WI","45.52624","-92.46971","-6","1" +"54859","Minong","WI","46.127976","-91.84389","-6","1" +"54861","Odanah","WI","46.599122","-90.65361","-6","1" +"54862","Ojibwa","WI","45.766112","-91.13603","-6","1" +"54863","Stanley","WI","45.458812","-91.712017","-6","1" +"54864","Poplar","WI","46.587809","-91.8074","-6","1" +"54865","Port Wing","WI","46.757192","-91.39611","-6","1" +"54867","Radisson","WI","45.767489","-91.22193","-6","1" +"54868","Rice Lake","WI","45.517226","-91.72638","-6","1" +"54870","Sarona","WI","45.714265","-91.77498","-6","1" +"54871","Shell Lake","WI","45.750367","-91.99048","-6","1" +"54872","Siren","WI","45.780793","-92.39152","-6","1" +"54873","Solon Springs","WI","46.354613","-91.71166","-6","1" +"54874","South Range","WI","46.58521","-91.95129","-6","1" +"54875","Springbrook","WI","45.947509","-91.67526","-6","1" +"54876","Stone Lake","WI","45.842713","-91.47902","-6","1" +"54880","Superior","WI","46.684273","-92.09474","-6","1" +"54886","Winter","WI","45.882227","-90.967711","-6","1" +"54888","Trego","WI","45.967422","-91.87907","-6","1" +"54889","Turtle Lake","WI","45.407855","-92.15619","-6","1" +"54890","Wascott","WI","46.525129","-91.921631","-6","1" +"54891","Washburn","WI","46.69297","-90.93744","-6","1" +"54893","Webster","WI","45.870441","-92.29416","-6","1" +"54895","Weyerhaeuser","WI","45.422669","-91.42678","-6","1" +"54896","Winter","WI","45.843581","-90.94323","-6","1" +"54901","Oshkosh","WI","44.043984","-88.53528","-6","1" +"54902","Oshkosh","WI","43.988616","-88.54699","-6","1" +"54903","Oshkosh","WI","44.06858","-88.644873","-6","1" +"54904","Oshkosh","WI","44.018871","-88.61324","-6","1" +"54906","Oshkosh","WI","44.06858","-88.644873","-6","1" +"54909","Almond","WI","44.28018","-89.36002","-6","1" +"54911","Appleton","WI","44.276986","-88.39445","-6","1" +"54912","Appleton","WI","44.416326","-88.464873","-6","1" +"54913","Appleton","WI","44.322836","-88.40492","-6","1" +"54914","Appleton","WI","44.267411","-88.4383","-6","1" +"54915","Appleton","WI","44.244753","-88.37783","-6","1" +"54919","Appleton","WI","44.416326","-88.464873","-6","1" +"54921","Bancroft","WI","44.307561","-89.54673","-6","1" +"54922","Bear Creek","WI","44.538848","-88.74381","-6","1" +"54923","Berlin","WI","43.978561","-88.95413","-6","1" +"54926","Big Falls","WI","44.617819","-89.016622","-6","1" +"54927","Butte Des Morts","WI","44.101044","-88.65531","-6","1" +"54928","Caroline","WI","44.732083","-88.88507","-6","1" +"54929","Clintonville","WI","44.63605","-88.74673","-6","1" +"54930","Coloma","WI","44.025668","-89.52124","-6","1" +"54931","Dale","WI","44.416326","-88.464873","-6","1" +"54932","Eldorado","WI","43.830749","-88.6258","-6","1" +"54933","Embarrass","WI","44.666988","-88.70686","-6","1" +"54934","Eureka","WI","44.00443","-88.84108","-6","1" +"54935","Fond Du Lac","WI","43.769889","-88.4281","-6","1" +"54936","Fond Du Lac","WI","43.740559","-88.522984","-6","1" +"54937","Fond Du Lac","WI","43.785391","-88.48704","-6","1" +"54940","Fremont","WI","44.237843","-88.84998","-6","1" +"54941","Green Lake","WI","43.841808","-88.97443","-6","1" +"54942","Greenville","WI","44.29382","-88.53557","-6","1" +"54943","Hancock","WI","44.122177","-89.57305","-6","1" +"54944","Hortonville","WI","44.333183","-88.6167","-6","1" +"54945","Iola","WI","44.558941","-89.13383","-6","1" +"54946","King","WI","44.336537","-89.146258","-6","1" +"54947","Larsen","WI","44.191271","-88.68846","-6","1" +"54948","Leopolis","WI","44.779838","-88.87123","-6","1" +"54949","Manawa","WI","44.472791","-88.91625","-6","1" +"54950","Marion","WI","44.669461","-88.89693","-6","1" +"54951","Medina","WI","44.416326","-88.464873","-6","1" +"54952","Menasha","WI","44.212448","-88.40959","-6","1" +"54956","Neenah","WI","44.180085","-88.48273","-6","1" +"54957","Neenah","WI","44.198944","-88.678863","-6","1" +"54960","Neshkoro","WI","43.959371","-89.22575","-6","1" +"54961","New London","WI","44.394143","-88.75521","-6","1" +"54962","Ogdensburg","WI","44.481372","-89.03101","-6","1" +"54963","Omro","WI","44.042594","-88.7627","-6","1" +"54964","Pickett","WI","43.923141","-88.72654","-6","1" +"54965","Pine River","WI","44.167646","-89.04218","-6","1" +"54966","Plainfield","WI","44.220945","-89.51227","-6","1" +"54967","Poy Sippi","WI","44.13777","-88.99443","-6","1" +"54968","Princeton","WI","43.842646","-89.13955","-6","1" +"54969","Readfield","WI","44.269991","-88.775457","-6","1" +"54970","Redgranite","WI","44.057375","-89.09788","-6","1" +"54971","Ripon","WI","43.849309","-88.84494","-6","1" +"54974","Rosendale","WI","43.797693","-88.66261","-6","1" +"54975","Royalton","WI","44.461926","-88.915027","-6","1" +"54976","Saxeville","WI","44.176716","-89.11271","-6","1" +"54977","Scandinavia","WI","44.454684","-89.15371","-6","1" +"54978","Tilleda","WI","44.805167","-88.9006","-6","1" +"54979","Van Dyne","WI","43.877109","-88.52573","-6","1" +"54980","Waukau","WI","43.987186","-88.77247","-6","1" +"54981","Waupaca","WI","44.331217","-89.11499","-6","1" +"54982","Wautoma","WI","44.064068","-89.29417","-6","1" +"54983","Weyauwega","WI","44.319005","-88.9404","-6","1" +"54984","Wild Rose","WI","44.186455","-89.20231","-6","1" +"54985","Winnebago","WI","44.075084","-88.51758","-6","1" +"54986","Winneconne","WI","44.110806","-88.73155","-6","1" +"54990","Iola","WI","44.461926","-88.915027","-6","1" +"55001","Afton","MN","44.903133","-92.81904","-6","1" +"55002","Almelund","MN","45.513447","-92.894239","-6","1" +"55003","Bayport","MN","45.017767","-92.78039","-6","1" +"55005","Bethel","MN","45.395494","-93.23584","-6","1" +"55006","Braham","MN","45.722","-93.19781","-6","1" +"55007","Brook Park","MN","45.955831","-93.1044","-6","1" +"55008","Cambridge","MN","45.566735","-93.24381","-6","1" +"55009","Cannon Falls","MN","44.493575","-92.89402","-6","1" +"55010","Castle Rock","MN","44.544465","-93.15353","-6","1" +"55011","Cedar","MN","45.335128","-93.27434","-6","1" +"55012","Center City","MN","45.41766","-92.80597","-6","1" +"55013","Chisago City","MN","45.365164","-92.88864","-6","1" +"55014","Circle Pines","MN","45.153516","-93.14463","-6","1" +"55016","Cottage Grove","MN","44.830966","-92.93739","-6","1" +"55017","Dalbo","MN","45.677366","-93.42013","-6","1" +"55018","Dennison","MN","44.422975","-93.00089","-6","1" +"55019","Dundas","MN","44.415567","-93.23269","-6","1" +"55020","Elko","MN","44.571365","-93.36011","-6","1" +"55021","Faribault","MN","44.29478","-93.28732","-6","1" +"55024","Farmington","MN","44.649263","-93.15222","-6","1" +"55025","Forest Lake","MN","45.272117","-92.9911","-6","1" +"55026","Frontenac","MN","44.523212","-92.33216","-6","1" +"55027","Goodhue","MN","44.408846","-92.63312","-6","1" +"55029","Grandy","MN","45.642235","-93.201107","-6","1" +"55030","Grasston","MN","45.842603","-93.11924","-6","1" +"55031","Hampton","MN","44.607553","-92.98548","-6","1" +"55032","Harris","MN","45.586488","-93.01179","-6","1" +"55033","Hastings","MN","44.726517","-92.86147","-6","1" +"55036","Henriette","MN","45.871294","-93.11852","-6","1" +"55037","Hinckley","MN","46.008128","-92.79349","-6","1" +"55038","Hugo","MN","45.161267","-92.99596","-6","1" +"55040","Isanti","MN","45.470239","-93.27947","-6","1" +"55041","Lake City","MN","44.42278","-92.2948","-6","1" +"55042","Lake Elmo","MN","44.999023","-92.90939","-6","1" +"55043","Lakeland","MN","44.9316","-92.77001","-6","1" +"55044","Lakeville","MN","44.669564","-93.26654","-6","1" +"55045","Lindstrom","MN","45.387281","-92.83551","-6","1" +"55046","Lonsdale","MN","44.464394","-93.42243","-6","1" +"55047","Marine On Saint Croix","MN","45.195606","-92.81649","-6","1" +"55049","Medford","MN","44.172277","-93.23924","-6","1" +"55051","Mora","MN","45.897003","-93.29452","-6","1" +"55052","Morristown","MN","44.232811","-93.43992","-6","1" +"55053","Nerstrand","MN","44.338132","-93.05543","-6","1" +"55054","New Market","MN","44.571056","-93.354267","-6","1" +"55055","Newport","MN","44.871166","-93.00187","-6","1" +"55056","North Branch","MN","45.509818","-92.97816","-6","1" +"55057","Northfield","MN","44.459969","-93.16623","-6","1" +"55060","Owatonna","MN","44.07393","-93.22716","-6","1" +"55063","Pine City","MN","45.824236","-92.95813","-6","1" +"55065","Randolph","MN","44.534866","-93.02959","-6","1" +"55066","Red Wing","MN","44.539036","-92.53637","-6","1" +"55067","Rock Creek","MN","46.074687","-92.718004","-6","1" +"55068","Rosemount","MN","44.732105","-93.13437","-6","1" +"55069","Rush City","MN","45.690784","-92.96843","-6","1" +"55070","Saint Francis","MN","45.395912","-93.37005","-6","1" +"55071","Saint Paul Park","MN","44.835366","-92.99254","-6","1" +"55072","Sandstone","MN","46.131798","-92.71377","-6","1" +"55073","Scandia","MN","45.275771","-92.83001","-6","1" +"55074","Shafer","MN","45.381784","-92.7278","-6","1" +"55075","South Saint Paul","MN","44.887966","-93.04546","-6","1" +"55076","Inver Grove Heights","MN","44.844833","-93.03528","-6","1" +"55077","Inver Grove Heights","MN","44.825391","-93.06893","-6","1" +"55078","Stacy","MN","45.513447","-92.894239","-6","1" +"55079","Stacy","MN","45.403157","-93.02829","-6","1" +"55080","Stanchfield","MN","45.651767","-93.21439","-6","1" +"55082","Stillwater","MN","45.054551","-92.82581","-6","1" +"55083","Stillwater","MN","45.021016","-92.983726","-6","1" +"55084","Taylors Falls","MN","45.424065","-92.68321","-6","1" +"55085","Vermillion","MN","44.674317","-92.96823","-6","1" +"55087","Warsaw","MN","44.247889","-93.39305","-6","1" +"55088","Webster","MN","44.541055","-93.38713","-6","1" +"55089","Welch","MN","44.586242","-92.70293","-6","1" +"55090","Willernie","MN","45.054666","-92.95703","-6","1" +"55092","Wyoming","MN","45.329115","-93.06834","-6","1" +"55101","Saint Paul","MN","44.964852","-93.08397","-6","1" +"55102","Saint Paul","MN","44.935315","-93.12049","-6","1" +"55103","Saint Paul","MN","44.964115","-93.12261","-6","1" +"55104","Saint Paul","MN","44.953665","-93.15922","-6","1" +"55105","Saint Paul","MN","44.934465","-93.16554","-6","1" +"55106","Saint Paul","MN","44.967565","-93.05001","-6","1" +"55107","Saint Paul","MN","44.928315","-93.08876","-6","1" +"55108","Saint Paul","MN","44.982515","-93.17489","-6","1" +"55109","Saint Paul","MN","45.010632","-93.01845","-6","1" +"55110","Saint Paul","MN","45.081266","-93.01146","-6","1" +"55111","Saint Paul","MN","44.882838","-93.200671","-6","1" +"55112","Saint Paul","MN","45.076365","-93.19335","-6","1" +"55113","Saint Paul","MN","45.011215","-93.15536","-6","1" +"55114","Saint Paul","MN","44.964815","-93.19581","-6","1" +"55115","Saint Paul","MN","45.060048","-92.95762","-6","1" +"55116","Saint Paul","MN","44.913815","-93.17459","-6","1" +"55117","Saint Paul","MN","44.989065","-93.10666","-6","1" +"55118","Saint Paul","MN","44.903165","-93.10026","-6","1" +"55119","Saint Paul","MN","44.957315","-93.00616","-6","1" +"55120","Saint Paul","MN","44.873398","-93.14538","-6","1" +"55121","Saint Paul","MN","44.844965","-93.14431","-6","1" +"55122","Saint Paul","MN","44.804548","-93.19871","-6","1" +"55123","Saint Paul","MN","44.804048","-93.13378","-6","1" +"55124","Saint Paul","MN","44.743963","-93.20624","-6","1" +"55125","Saint Paul","MN","44.921982","-92.94234","-6","1" +"55126","Saint Paul","MN","45.085643","-93.1353","-6","1" +"55127","Saint Paul","MN","45.076708","-93.0828","-6","1" +"55128","Saint Paul","MN","44.985792","-92.96532","-6","1" +"55129","Saint Paul","MN","44.896938","-92.90241","-6","1" +"55133","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55144","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55145","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55146","Saint Paul","MN","44.942656","-93.082793","-6","1" +"55150","Mendota","MN","44.884265","-93.16415","-6","1" +"55155","Saint Paul","MN","44.952165","-93.095518","-6","1" +"55161","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55164","Saint Paul","MN","44.990915","-93.106593","-6","1" +"55165","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55166","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55168","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55169","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55170","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55171","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55172","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55175","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55177","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55182","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55184","Duluth","MN","46.837172","-92.202829","-6","1" +"55187","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55188","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55189","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55190","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55191","Saint Paul","MN","45.005902","-93.105869","-6","1" +"55272","Kroschel","MN","46.147161","-93.084687","-6","1" +"55301","Albertville","MN","45.237867","-93.66261","-6","1" +"55302","Annandale","MN","45.246631","-94.11692","-6","1" +"55303","Anoka","MN","45.247509","-93.418","-6","1" +"55304","Andover","MN","45.254715","-93.28652","-6","1" +"55305","Hopkins","MN","44.953763","-93.43346","-6","1" +"55306","Burnsville","MN","44.732569","-93.28909","-6","1" +"55307","Arlington","MN","44.613278","-94.10728","-6","1" +"55308","Becker","MN","45.426203","-93.85017","-6","1" +"55309","Big Lake","MN","45.358004","-93.74294","-6","1" +"55310","Bird Island","MN","44.761856","-94.8845","-6","1" +"55311","Osseo","MN","45.102133","-93.48757","-6","1" +"55312","Brownton","MN","44.723259","-94.33922","-6","1" +"55313","Buffalo","MN","45.175558","-93.85441","-6","1" +"55314","Buffalo Lake","MN","44.751001","-94.60782","-6","1" +"55315","Carver","MN","44.736595","-93.65619","-6","1" +"55316","Champlin","MN","45.170714","-93.38452","-6","1" +"55317","Chanhassen","MN","44.866236","-93.54487","-6","1" +"55318","Chaska","MN","44.809954","-93.6105","-6","1" +"55319","Clear Lake","MN","45.470068","-93.92956","-6","1" +"55320","Clearwater","MN","45.387625","-94.0599","-6","1" +"55321","Cokato","MN","45.085142","-94.18748","-6","1" +"55322","Cologne","MN","44.768762","-93.77839","-6","1" +"55323","Crystal Bay","MN","45.015914","-93.47188","-6","1" +"55324","Darwin","MN","45.057766","-94.40368","-6","1" +"55325","Dassel","MN","45.091115","-94.31758","-6","1" +"55327","Dayton","MN","45.217054","-93.47612","-6","1" +"55328","Delano","MN","45.032489","-93.79591","-6","1" +"55329","Eden Valley","MN","45.321197","-94.56778","-6","1" +"55330","Elk River","MN","45.317152","-93.58117","-6","1" +"55331","Excelsior","MN","44.901368","-93.58278","-6","1" +"55332","Fairfax","MN","44.529702","-94.71718","-6","1" +"55333","Franklin","MN","44.541889","-94.8735","-6","1" +"55334","Gaylord","MN","44.542729","-94.21773","-6","1" +"55335","Gibbon","MN","44.527707","-94.53092","-6","1" +"55336","Glencoe","MN","44.773886","-94.17294","-6","1" +"55337","Burnsville","MN","44.770297","-93.27302","-6","1" +"55338","Green Isle","MN","44.670908","-94.01337","-6","1" +"55339","Hamburg","MN","44.730662","-93.9577","-6","1" +"55340","Hamel","MN","45.07343","-93.56455","-6","1" +"55341","Hanover","MN","45.15546","-93.66369","-6","1" +"55342","Hector","MN","44.74323","-94.72447","-6","1" +"55343","Hopkins","MN","44.921599","-93.40857","-6","1" +"55344","Eden Prairie","MN","44.867013","-93.42557","-6","1" +"55345","Minnetonka","MN","44.915413","-93.48443","-6","1" +"55346","Eden Prairie","MN","44.880435","-93.4869","-6","1" +"55347","Eden Prairie","MN","44.831413","-93.46031","-6","1" +"55348","Maple Plain","MN","44.848263","-93.398727","-6","1" +"55349","Howard Lake","MN","45.064272","-94.07175","-6","1" +"55350","Hutchinson","MN","44.896255","-94.38604","-6","1" +"55352","Jordan","MN","44.657463","-93.6133","-6","1" +"55353","Kimball","MN","45.328802","-94.32528","-6","1" +"55354","Lester Prairie","MN","44.881515","-94.05846","-6","1" +"55355","Litchfield","MN","45.104473","-94.52868","-6","1" +"55356","Long Lake","MN","44.985463","-93.58388","-6","1" +"55357","Loretto","MN","45.088013","-93.65053","-6","1" +"55358","Maple Lake","MN","45.244744","-94.00289","-6","1" +"55359","Maple Plain","MN","45.002212","-93.69319","-6","1" +"55360","Mayer","MN","44.909362","-93.89981","-6","1" +"55361","Minnetonka Beach","MN","44.940212","-93.592735","-6","1" +"55362","Monticello","MN","45.301337","-93.80774","-6","1" +"55363","Montrose","MN","45.046143","-93.92085","-6","1" +"55364","Mound","MN","44.933712","-93.66038","-6","1" +"55365","Monticello","MN","45.200875","-93.888099","-6","1" +"55366","New Auburn","MN","44.673454","-94.229311","-6","1" +"55367","New Germany","MN","44.886776","-93.97154","-6","1" +"55368","Norwood","MN","44.756883","-93.91666","-6","1" +"55369","Osseo","MN","45.120764","-93.43183","-6","1" +"55370","Plato","MN","44.787651","-94.04714","-6","1" +"55371","Princeton","MN","45.576431","-93.57644","-6","1" +"55372","Prior Lake","MN","44.704646","-93.42139","-6","1" +"55373","Rockford","MN","45.087513","-93.73548","-6","1" +"55374","Rogers","MN","45.197646","-93.57104","-6","1" +"55375","Saint Bonifacius","MN","44.906512","-93.7439","-6","1" +"55376","Saint Michael","MN","45.20382","-93.67618","-6","1" +"55377","Santiago","MN","45.540181","-93.815434","-6","1" +"55378","Savage","MN","44.761796","-93.3722","-6","1" +"55379","Shakopee","MN","44.776138","-93.52556","-6","1" +"55380","Silver Creek","MN","45.315823","-93.979766","-6","1" +"55381","Silver Lake","MN","44.904987","-94.18802","-6","1" +"55382","South Haven","MN","45.299358","-94.19821","-6","1" +"55383","Norwood","MN","44.805487","-93.766524","-6","1" +"55384","Spring Park","MN","44.936423","-93.62868","-6","1" +"55385","Stewart","MN","44.724926","-94.49346","-6","1" +"55386","Victoria","MN","44.858595","-93.66341","-6","1" +"55387","Waconia","MN","44.849912","-93.78514","-6","1" +"55388","Watertown","MN","44.955136","-93.84467","-6","1" +"55389","Watkins","MN","45.291986","-94.43811","-6","1" +"55390","Waverly","MN","45.066811","-93.97836","-6","1" +"55391","Wayzata","MN","44.963063","-93.52912","-6","1" +"55392","Navarre","MN","45.015914","-93.47188","-6","1" +"55393","Maple Plain","MN","45.200875","-93.888099","-6","1" +"55394","Young America","MN","44.805487","-93.766524","-6","1" +"55395","Winsted","MN","44.960829","-94.05525","-6","1" +"55396","Winthrop","MN","44.536882","-94.36811","-6","1" +"55397","Young America","MN","44.801162","-93.92368","-6","1" +"55398","Zimmerman","MN","45.455085","-93.57873","-6","1" +"55399","Young America","MN","44.805487","-93.766524","-6","1" +"55401","Minneapolis","MN","44.984615","-93.27137","-6","1" +"55402","Minneapolis","MN","44.975565","-93.27053","-6","1" +"55403","Minneapolis","MN","44.971765","-93.28557","-6","1" +"55404","Minneapolis","MN","44.963365","-93.26179","-6","1" +"55405","Minneapolis","MN","44.971798","-93.30273","-6","1" +"55406","Minneapolis","MN","44.938615","-93.22082","-6","1" +"55407","Minneapolis","MN","44.934915","-93.25424","-6","1" +"55408","Minneapolis","MN","44.947515","-93.28742","-6","1" +"55409","Minneapolis","MN","44.924115","-93.28362","-6","1" +"55410","Minneapolis","MN","44.911564","-93.31947","-6","1" +"55411","Minneapolis","MN","44.999165","-93.29823","-6","1" +"55412","Minneapolis","MN","45.027715","-93.30337","-6","1" +"55413","Minneapolis","MN","44.997665","-93.24927","-6","1" +"55414","Minneapolis","MN","44.980379","-93.23003","-6","1" +"55415","Minneapolis","MN","44.973415","-93.25941","-6","1" +"55416","Minneapolis","MN","44.946664","-93.34215","-6","1" +"55417","Minneapolis","MN","44.905365","-93.23662","-6","1" +"55418","Minneapolis","MN","45.019315","-93.24304","-6","1" +"55419","Minneapolis","MN","44.902414","-93.29012","-6","1" +"55420","Minneapolis","MN","44.837964","-93.27657","-6","1" +"55421","Minneapolis","MN","45.050434","-93.25007","-6","1" +"55422","Minneapolis","MN","45.014764","-93.33965","-6","1" +"55423","Minneapolis","MN","44.877164","-93.28124","-6","1" +"55424","Minneapolis","MN","44.904414","-93.34045","-6","1" +"55425","Minneapolis","MN","44.846765","-93.2449","-6","1" +"55426","Minneapolis","MN","44.952064","-93.37795","-6","1" +"55427","Minneapolis","MN","45.006764","-93.38223","-6","1" +"55428","Minneapolis","MN","45.059997","-93.37702","-6","1" +"55429","Minneapolis","MN","45.064714","-93.34155","-6","1" +"55430","Minneapolis","MN","45.059265","-93.29977","-6","1" +"55431","Minneapolis","MN","44.829564","-93.30982","-6","1" +"55432","Minneapolis","MN","45.095674","-93.25336","-6","1" +"55433","Minneapolis","MN","45.163848","-93.3195","-6","1" +"55434","Minneapolis","MN","45.164248","-93.2531","-6","1" +"55435","Minneapolis","MN","44.875614","-93.33487","-6","1" +"55436","Minneapolis","MN","44.903864","-93.37056","-6","1" +"55437","Minneapolis","MN","44.822764","-93.34422","-6","1" +"55438","Minneapolis","MN","44.8257","-93.38212","-6","1" +"55439","Minneapolis","MN","44.875997","-93.37021","-6","1" +"55440","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55441","Minneapolis","MN","45.001997","-93.42421","-6","1" +"55442","Minneapolis","MN","45.046701","-93.42892","-6","1" +"55443","Minneapolis","MN","45.108581","-93.33988","-6","1" +"55444","Minneapolis","MN","45.106065","-93.30461","-6","1" +"55445","Minneapolis","MN","45.112742","-93.3789","-6","1" +"55446","Minneapolis","MN","45.039312","-93.47988","-6","1" +"55447","Minneapolis","MN","45.003363","-93.49262","-6","1" +"55448","Minneapolis","MN","45.186232","-93.29635","-6","1" +"55449","Minneapolis","MN","45.168287","-93.20001","-6","1" +"55450","Minneapolis","MN","44.882365","-93.20847","-6","1" +"55454","Minneapolis","MN","44.969465","-93.24327","-6","1" +"55455","Minneapolis","MN","44.971965","-93.23588","-6","1" +"55458","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55459","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55460","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55468","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55470","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55472","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55473","Minneapolis","MN","44.805487","-93.766524","-6","1" +"55474","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55478","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55479","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55480","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55483","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55484","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55485","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55486","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55487","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55488","Minneapolis","MN","45.015914","-93.47188","-6","1" +"55530","Elk River","MN","45.281604","-93.546333","-6","1" +"55550","Young America","MN","44.805487","-93.766524","-6","1" +"55551","Young America","MN","44.805487","-93.766524","-6","1" +"55552","Young America","MN","44.805487","-93.766524","-6","1" +"55553","Young America","MN","44.805487","-93.766524","-6","1" +"55554","Norwood","MN","44.805487","-93.766524","-6","1" +"55555","Young America","MN","44.805487","-93.766524","-6","1" +"55556","Young America","MN","44.805487","-93.766524","-6","1" +"55557","Young America","MN","44.805487","-93.766524","-6","1" +"55558","Young America","MN","44.805487","-93.766524","-6","1" +"55559","Young America","MN","44.805487","-93.766524","-6","1" +"55560","Young America","MN","44.805487","-93.766524","-6","1" +"55561","Monticello","MN","44.805487","-93.766524","-6","1" +"55562","Young America","MN","44.805487","-93.766524","-6","1" +"55563","Monticello","MN","44.805487","-93.766524","-6","1" +"55564","Young America","MN","44.805487","-93.766524","-6","1" +"55565","Monticello","MN","45.200875","-93.888099","-6","1" +"55566","Young America","MN","44.805487","-93.766524","-6","1" +"55567","Young America","MN","44.805487","-93.766524","-6","1" +"55568","Young America","MN","44.805487","-93.766524","-6","1" +"55569","Osseo","MN","45.015914","-93.47188","-6","1" +"55570","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55571","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55572","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55573","Young America","MN","45.015914","-93.47188","-6","1" +"55574","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55575","Howard Lake","MN","45.015914","-93.47188","-6","1" +"55576","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55577","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55578","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55579","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55580","Monticello","MN","45.200875","-93.888099","-6","1" +"55581","Monticello","MN","45.200875","-93.888099","-6","1" +"55582","Monticello","MN","45.200875","-93.888099","-6","1" +"55583","Norwood","MN","44.805487","-93.766524","-6","1" +"55584","Monticello","MN","45.200875","-93.888099","-6","1" +"55585","Monticello","MN","45.200875","-93.888099","-6","1" +"55586","Monticello","MN","45.200875","-93.888099","-6","1" +"55587","Monticello","MN","45.200875","-93.888099","-6","1" +"55588","Monticello","MN","44.989512","-93.880245","-6","1" +"55589","Monticello","MN","45.200875","-93.888099","-6","1" +"55590","Monticello","MN","45.200875","-93.888099","-6","1" +"55591","Monticello","MN","45.200875","-93.888099","-6","1" +"55592","Maple Plain","MN","45.200875","-93.888099","-6","1" +"55593","Maple Plain","MN","45.015914","-93.47188","-6","1" +"55594","Young America","MN","44.805487","-93.766524","-6","1" +"55595","Loretto","MN","45.015914","-93.47188","-6","1" +"55596","Loretto","MN","45.015914","-93.47188","-6","1" +"55597","Loretto","MN","45.015914","-93.47188","-6","1" +"55598","Loretto","MN","45.015914","-93.47188","-6","1" +"55599","Loretto","MN","45.015914","-93.47188","-6","1" +"55601","Beaver Bay","MN","47.258584","-91.29977","-6","1" +"55602","Brimson","MN","47.309443","-91.87839","-6","1" +"55603","Finland","MN","47.502703","-91.20122","-6","1" +"55604","Grand Marais","MN","47.939037","-90.54659","-6","1" +"55605","Grand Portage","MN","47.967442","-89.73735","-6","1" +"55606","Hovland","MN","47.940908","-90.01705","-6","1" +"55607","Isabella","MN","47.664633","-91.52953","-6","1" +"55608","Rosemount","MN","44.741484","-93.113155","-6","1" +"55609","Knife River","MN","46.94939","-91.78525","-6","1" +"55612","Lutsen","MN","47.757804","-90.63836","-6","1" +"55613","Schroeder","MN","47.651374","-90.95917","-6","1" +"55614","Silver Bay","MN","47.314743","-91.25765","-6","1" +"55615","Tofte","MN","47.677189","-90.81276","-6","1" +"55616","Two Harbors","MN","47.077723","-91.66464","-6","1" +"55676","Barnum","MN","46.471964","-92.687947","-6","1" +"55701","Adolph","MN","47.640367","-92.442797","-6","1" +"55702","Alborn","MN","46.956644","-92.63972","-6","1" +"55703","Angora","MN","47.764569","-92.76689","-6","1" +"55704","Askov","MN","46.22572","-92.76706","-6","1" +"55705","Aurora","MN","47.45225","-92.24109","-6","1" +"55706","Babbitt","MN","47.688083","-91.91856","-6","1" +"55707","Barnum","MN","46.533977","-92.62697","-6","1" +"55708","Biwabik","MN","47.533314","-92.34084","-6","1" +"55709","Bovey","MN","47.372262","-93.38998","-6","1" +"55710","Britt","MN","47.655096","-92.66189","-6","1" +"55711","Brookston","MN","46.870672","-92.65082","-6","1" +"55712","Bruno","MN","46.275431","-92.57886","-6","1" +"55713","Buhl","MN","47.49307","-92.77783","-6","1" +"55715","Buhl","MN","47.494762","-92.780293","-6","1" +"55716","Calumet","MN","47.32211","-93.27581","-6","1" +"55717","Canyon","MN","47.058166","-92.46078","-6","1" +"55718","Carlton","MN","46.649697","-92.48477","-6","1" +"55719","Chisholm","MN","47.509833","-92.87637","-6","1" +"55720","Cloquet","MN","46.727077","-92.48612","-6","1" +"55721","Cohasset","MN","47.247648","-93.66491","-6","1" +"55722","Coleraine","MN","47.285247","-93.43112","-6","1" +"55723","Cook","MN","47.854987","-92.77077","-6","1" +"55724","Cotton","MN","47.172574","-92.41048","-6","1" +"55725","Crane Lake","MN","48.262021","-92.61519","-6","1" +"55726","Cromwell","MN","46.667284","-92.87081","-6","1" +"55728","Bigfork","MN","47.757041","-93.64059","-6","1" +"55730","Grand Rapids","MN","47.087782","-93.921429","-6","1" +"55731","Ely","MN","47.913365","-91.91712","-6","1" +"55732","Embarrass","MN","47.624206","-92.23909","-6","1" +"55733","Esko","MN","46.708371","-92.36434","-6","1" +"55734","Eveleth","MN","47.4211","-92.51331","-6","1" +"55735","Finlayson","MN","46.250308","-93.04462","-6","1" +"55736","Floodwood","MN","46.929033","-92.90614","-6","1" +"55738","Forbes","MN","47.296271","-92.65485","-6","1" +"55741","Gilbert","MN","47.4741","-92.40533","-6","1" +"55742","Goodland","MN","47.169979","-93.13179","-6","1" +"55744","Grand Rapids","MN","47.243062","-93.52599","-6","1" +"55745","Grand Rapids","MN","47.087782","-93.921429","-6","1" +"55746","Hibbing","MN","47.413817","-92.94228","-6","1" +"55747","Hibbing","MN","47.640367","-92.442797","-6","1" +"55748","Hill City","MN","46.956138","-93.60042","-6","1" +"55749","Holyoke","MN","46.463827","-92.40766","-6","1" +"55750","Hoyt Lakes","MN","47.517269","-92.0706","-6","1" +"55751","Iron","MN","47.405699","-92.63067","-6","1" +"55752","Jacobson","MN","46.974237","-93.2632","-6","1" +"55753","Keewatin","MN","47.39654","-93.07651","-6","1" +"55756","Kerrick","MN","46.374991","-92.59795","-6","1" +"55757","Kettle River","MN","46.512349","-92.92803","-6","1" +"55758","Kinney","MN","47.511214","-92.74026","-6","1" +"55760","Mcgregor","MN","46.67746","-93.28391","-6","1" +"55761","McKinley","MN","47.512426","-92.409999","-6","1" +"55763","Makinen","MN","47.310374","-92.20091","-6","1" +"55764","Marble","MN","47.319362","-93.30077","-6","1" +"55765","Meadowlands","MN","47.086392","-92.75843","-6","1" +"55766","Melrude","MN","47.249626","-92.412343","-6","1" +"55767","Moose Lake","MN","46.44429","-92.7699","-6","1" +"55768","Mountain Iron","MN","47.502878","-92.66548","-6","1" +"55769","Nashwauk","MN","47.406731","-93.1645","-6","1" +"55771","Orr","MN","48.098627","-92.80495","-6","1" +"55772","Nett Lake","MN","48.081686","-93.083438","-6","1" +"55775","Pengilly","MN","47.30797","-93.20693","-6","1" +"55777","Virginia","MN","47.640367","-92.442797","-6","1" +"55778","Clark","MN","46.626514","-93.133317","-6","1" +"55779","Saginaw","MN","46.908416","-92.44913","-6","1" +"55780","Sawyer","MN","46.670691","-92.69235","-6","1" +"55781","Side Lake","MN","47.672765","-93.05481","-6","1" +"55782","Soudan","MN","47.813694","-92.23977","-6","1" +"55783","Sturgeon Lake","MN","46.379971","-92.82748","-6","1" +"55784","Swan River","MN","47.061875","-93.20456","-6","1" +"55785","Swatara","MN","46.878205","-93.70721","-6","1" +"55786","Taconite","MN","47.314189","-93.38487","-6","1" +"55787","Tamarack","MN","46.679313","-93.13241","-6","1" +"55790","Tower","MN","47.825059","-92.3247","-6","1" +"55791","Twig","MN","47.640367","-92.442797","-6","1" +"55792","Virginia","MN","47.527383","-92.53371","-6","1" +"55793","Warba","MN","47.116453","-93.26881","-6","1" +"55795","Willow River","MN","46.317812","-92.84315","-6","1" +"55796","Winton","MN","47.930468","-91.79943","-6","1" +"55797","Wrenshall","MN","46.534005","-92.41983","-6","1" +"55798","Wright","MN","46.723028","-92.96594","-6","1" +"55801","Duluth","MN","47.005566","-92.001934","-6","1" +"55802","Duluth","MN","46.774593","-92.09206","-6","1" +"55803","Duluth","MN","46.972432","-92.10105","-6","1" +"55804","Duluth","MN","46.86242","-91.98342","-6","1" +"55805","Duluth","MN","46.798339","-92.09568","-6","1" +"55806","Duluth","MN","46.770773","-92.12718","-6","1" +"55807","Duluth","MN","46.738841","-92.16969","-6","1" +"55808","Duluth","MN","46.674141","-92.2276","-6","1" +"55810","Duluth","MN","46.753414","-92.24355","-6","1" +"55811","Duluth","MN","46.821489","-92.18242","-6","1" +"55812","Duluth","MN","46.809438","-92.07319","-6","1" +"55814","Duluth","MN","47.640367","-92.442797","-6","1" +"55815","Duluth","MN","47.640367","-92.442797","-6","1" +"55816","Duluth","MN","47.640367","-92.442797","-6","1" +"55901","Rochester","MN","44.048931","-92.49459","-6","1" +"55902","Rochester","MN","43.991846","-92.49166","-6","1" +"55903","Rochester","MN","43.996613","-92.540929","-6","1" +"55904","Rochester","MN","43.988708","-92.42937","-6","1" +"55905","Rochester","MN","44.022513","-92.466826","-6","1" +"55906","Rochester","MN","44.064733","-92.44427","-6","1" +"55909","Adams","MN","43.564175","-92.72645","-6","1" +"55910","Altura","MN","44.128262","-91.95965","-6","1" +"55912","Austin","MN","43.671988","-92.97908","-6","1" +"55917","Blooming Prairie","MN","43.88481","-93.07546","-6","1" +"55918","Brownsdale","MN","43.743087","-92.86434","-6","1" +"55919","Brownsville","MN","43.664102","-91.29057","-6","1" +"55920","Byron","MN","44.024835","-92.6388","-6","1" +"55921","Caledonia","MN","43.630012","-91.48667","-6","1" +"55922","Canton","MN","43.569417","-91.90736","-6","1" +"55923","Chatfield","MN","43.84113","-92.1606","-6","1" +"55924","Claremont","MN","44.035716","-93.01627","-6","1" +"55925","Dakota","MN","43.910929","-91.39015","-6","1" +"55926","Dexter","MN","43.731945","-92.70852","-6","1" +"55927","Dodge Center","MN","44.026272","-92.86903","-6","1" +"55929","Dover","MN","43.975269","-92.14213","-6","1" +"55931","Eitzen","MN","43.511822","-91.46635","-6","1" +"55932","Elgin","MN","44.135053","-92.28314","-6","1" +"55933","Elkton","MN","43.65099","-92.70596","-6","1" +"55934","Eyota","MN","44.006609","-92.24856","-6","1" +"55935","Fountain","MN","43.74676","-92.12889","-6","1" +"55936","Grand Meadow","MN","43.715085","-92.57812","-6","1" +"55939","Harmony","MN","43.55123","-92.04994","-6","1" +"55940","Hayfield","MN","43.885028","-92.80894","-6","1" +"55941","Hokah","MN","43.756567","-91.36126","-6","1" +"55942","Homer","MN","44.019989","-91.68187","-6","1" +"55943","Houston","MN","43.769776","-91.57534","-6","1" +"55944","Kasson","MN","44.035512","-92.75013","-6","1" +"55945","Kellogg","MN","44.273406","-92.04934","-6","1" +"55946","Kenyon","MN","44.268145","-92.9651","-6","1" +"55947","La Crescent","MN","43.829382","-91.33919","-6","1" +"55949","Lanesboro","MN","43.70844","-91.95965","-6","1" +"55950","Lansing","MN","43.743278","-92.96929","-6","1" +"55951","Le Roy","MN","43.525845","-92.51616","-6","1" +"55952","Lewiston","MN","43.959148","-91.84932","-6","1" +"55953","Lyle","MN","43.519177","-92.96466","-6","1" +"55954","Mabel","IA","43.498082","-91.89429","-6","1" +"55955","Mantorville","MN","44.068344","-92.75616","-6","1" +"55956","Mazeppa","MN","44.272368","-92.53501","-6","1" +"55957","Millville","MN","44.244633","-92.29074","-6","1" +"55959","Minnesota City","MN","44.093056","-91.74422","-6","1" +"55960","Oronoco","MN","44.152623","-92.53706","-6","1" +"55961","Ostrander","MN","43.6122","-92.46452","-6","1" +"55962","Peterson","MN","43.762272","-91.8453","-6","1" +"55963","Pine Island","MN","44.196932","-92.65482","-6","1" +"55964","Plainview","MN","44.164431","-92.17048","-6","1" +"55965","Preston","MN","43.646355","-92.12329","-6","1" +"55967","Racine","MN","43.786802","-92.50425","-6","1" +"55968","Reads Landing","MN","44.340826","-92.282467","-6","1" +"55969","Rollingstone","MN","44.079021","-91.84612","-6","1" +"55970","Rose Creek","MN","43.599507","-92.83756","-6","1" +"55971","Rushford","MN","43.80784","-91.75117","-6","1" +"55972","Saint Charles","MN","43.977555","-92.06276","-6","1" +"55973","Sargeant","MN","43.797677","-92.7799","-6","1" +"55974","Spring Grove","MN","43.57279","-91.65004","-6","1" +"55975","Spring Valley","MN","43.686356","-92.37242","-6","1" +"55976","Stewartville","MN","43.862105","-92.49849","-6","1" +"55977","Taopi","MN","43.550714","-92.65902","-6","1" +"55978","West Albany","MN","44.301714","-92.178277","-6","1" +"55979","Utica","MN","43.93422","-91.95325","-6","1" +"55981","Wabasha","MN","44.374261","-92.04204","-6","1" +"55982","Waltham","MN","43.82009","-92.87749","-6","1" +"55983","Wanamingo","MN","44.285672","-92.79816","-6","1" +"55985","West Concord","MN","44.157166","-92.89357","-6","1" +"55987","Winona","MN","44.033867","-91.65106","-6","1" +"55988","Stockton","MN","44.025446","-91.77304","-6","1" +"55990","Wykoff","MN","43.714071","-92.26493","-6","1" +"55991","Zumbro Falls","MN","44.24431","-92.41336","-6","1" +"55992","Zumbrota","MN","44.297157","-92.68312","-6","1" +"56001","Mankato","MN","44.15644","-93.99388","-6","1" +"56002","Mankato","MN","44.056047","-94.069828","-6","1" +"56003","Mankato","MN","44.184909","-94.04244","-6","1" +"56006","Mankato","MN","44.056047","-94.069828","-6","1" +"56007","Albert Lea","MN","43.652042","-93.36916","-6","1" +"56009","Alden","MN","43.667207","-93.55598","-6","1" +"56010","Amboy","MN","43.899907","-94.20634","-6","1" +"56011","Belle Plaine","MN","44.616113","-93.76906","-6","1" +"56013","Blue Earth","MN","43.630763","-94.10129","-6","1" +"56014","Bricelyn","MN","43.589604","-93.81676","-6","1" +"56016","Clarks Grove","MN","43.764506","-93.33357","-6","1" +"56017","Cleveland","MN","44.304948","-93.80077","-6","1" +"56019","Comfrey","MN","44.11754","-94.88998","-6","1" +"56020","Conger","MN","43.613686","-93.53072","-6","1" +"56021","Courtland","MN","44.277333","-94.31424","-6","1" +"56022","Darfur","MN","44.049908","-94.83877","-6","1" +"56023","Delavan","MN","43.782104","-94.01341","-6","1" +"56024","Eagle Lake","MN","44.153696","-93.86918","-6","1" +"56025","Easton","MN","43.764111","-93.90534","-6","1" +"56026","Ellendale","MN","43.884985","-93.2917","-6","1" +"56027","Elmore","IA","43.482104","-94.09837","-6","1" +"56028","Elysian","MN","44.207288","-93.68716","-6","1" +"56029","Emmons","MN","43.516115","-93.51768","-6","1" +"56030","Essig","MN","44.325833","-94.605226","-6","1" +"56031","Fairmont","MN","43.646916","-94.45856","-6","1" +"56032","Freeborn","MN","43.766208","-93.56339","-6","1" +"56033","Frost","MN","43.579548","-93.93826","-6","1" +"56034","Garden City","MN","44.029058","-94.18186","-6","1" +"56035","Geneva","MN","43.819798","-93.26713","-6","1" +"56036","Glenville","MN","43.550747","-93.21987","-6","1" +"56037","Good Thunder","MN","44.017609","-94.05231","-6","1" +"56039","Granada","MN","43.680519","-94.33773","-6","1" +"56041","Hanska","MN","44.149047","-94.5238","-6","1" +"56042","Hartland","MN","43.796535","-93.49143","-6","1" +"56043","Hayward","MN","43.65048","-93.224","-6","1" +"56044","Henderson","MN","44.555899","-93.95354","-6","1" +"56045","Hollandale","MN","43.762109","-93.18959","-6","1" +"56046","Hope","MN","43.955103","-93.274017","-6","1" +"56047","Huntley","MN","43.738397","-94.228897","-6","1" +"56048","Janesville","MN","44.102188","-93.71255","-6","1" +"56050","Kasota","MN","44.28491","-93.95806","-6","1" +"56051","Kiester","MN","43.535709","-93.71308","-6","1" +"56052","Kilkenny","MN","44.320314","-93.57071","-6","1" +"56054","Lafayette","MN","44.431776","-94.37742","-6","1" +"56055","Lake Crystal","MN","44.128212","-94.23883","-6","1" +"56056","La Salle","MN","44.070204","-94.57143","-6","1" +"56057","Le Center","MN","44.393899","-93.72583","-6","1" +"56058","Le Sueur","MN","44.449976","-93.90513","-6","1" +"56060","Lewisville","MN","43.930032","-94.43935","-6","1" +"56062","Madelia","MN","44.045998","-94.4211","-6","1" +"56063","Madison Lake","MN","44.204121","-93.81923","-6","1" +"56064","Manchester","MN","43.723693","-93.45161","-6","1" +"56065","Mapleton","MN","43.931415","-93.92866","-6","1" +"56068","Minnesota Lake","MN","43.848573","-93.81718","-6","1" +"56069","Montgomery","MN","44.429956","-93.56982","-6","1" +"56071","New Prague","MN","44.546463","-93.57848","-6","1" +"56072","New Richland","MN","43.899778","-93.53178","-6","1" +"56073","New Ulm","MN","44.308395","-94.46149","-6","1" +"56074","Nicollet","MN","44.331757","-94.19561","-6","1" +"56075","Northrop","MN","43.735594","-94.43584","-6","1" +"56076","Oakland","MN","43.671266","-93.11918","-6","1" +"56078","Pemberton","MN","44.007228","-93.77764","-6","1" +"56080","Saint Clair","MN","44.080713","-93.85663","-6","1" +"56081","Saint James","MN","43.986563","-94.63345","-6","1" +"56082","Saint Peter","MN","44.337276","-93.99282","-6","1" +"56083","Sanborn","MN","44.21838","-95.13348","-6","1" +"56084","Searles","MN","44.302893","-94.738827","-6","1" +"56085","Sleepy Eye","MN","44.29717","-94.73426","-6","1" +"56087","Springfield","MN","44.239384","-94.98313","-6","1" +"56088","Truman","MN","43.834331","-94.4436","-6","1" +"56089","Twin Lakes","MN","43.563452","-93.42694","-6","1" +"56090","Vernon Center","MN","43.95885","-94.22403","-6","1" +"56091","Waldorf","MN","43.930363","-93.69492","-6","1" +"56093","Waseca","MN","44.067673","-93.5103","-6","1" +"56096","Waterville","MN","44.234274","-93.5884","-6","1" +"56097","Wells","MN","43.731479","-93.71837","-6","1" +"56098","Winnebago","MN","43.764936","-94.18016","-6","1" +"56101","Windom","MN","43.870469","-95.13275","-6","1" +"56110","Adrian","MN","43.626278","-95.93973","-6","1" +"56111","Alpha","MN","43.645226","-94.8715","-6","1" +"56113","Arco","MN","44.398668","-96.17095","-6","1" +"56114","Avoca","MN","43.971169","-95.6128","-6","1" +"56115","Balaton","MN","44.227802","-95.9021","-6","1" +"56116","Beaver Creek","MN","43.621142","-96.3866","-6","1" +"56117","Bigelow","MN","43.513198","-95.69138","-6","1" +"56118","Bingham Lake","MN","43.936146","-95.02938","-6","1" +"56119","Brewster","MN","43.702735","-95.46946","-6","1" +"56120","Butterfield","MN","43.957826","-94.79571","-6","1" +"56121","Ceylon","MN","43.535662","-94.62877","-6","1" +"56122","Chandler","MN","43.89707","-95.95855","-6","1" +"56123","Currie","MN","44.084381","-95.59321","-6","1" +"56125","Dovray","MN","44.053323","-95.549899","-6","1" +"56126","Graham Lakes","MN","43.820313","-95.523182","-6","1" +"56127","Dunnell","MN","43.556667","-94.77432","-6","1" +"56128","Edgerton","MN","43.89387","-96.1285","-6","1" +"56129","Ellsworth","IA","43.495384","-95.90691","-6","1" +"56130","Florence","MN","44.238659","-96.052227","-6","1" +"56131","Fulda","MN","43.861532","-95.59378","-6","1" +"56132","Garvin","MN","44.212536","-95.75998","-6","1" +"56134","Hardwick","MN","43.783098","-96.22202","-6","1" +"56135","Powers","MN","46.829136","-94.430518","-6","1" +"56136","Hendricks","MN","44.512114","-96.41157","-6","1" +"56137","Heron Lake","MN","43.826163","-95.34591","-6","1" +"56138","Hills","MN","43.529153","-96.36669","-6","1" +"56139","Holland","MN","44.092188","-96.18168","-6","1" +"56140","Ihlen","MN","43.907841","-96.36802","-6","1" +"56141","Iona","MN","43.884657","-95.77444","-6","1" +"56142","Ivanhoe","MN","44.476959","-96.23","-6","1" +"56143","Jackson","MN","43.625811","-95.00447","-6","1" +"56144","Jasper","MN","43.854184","-96.39022","-6","1" +"56145","Jeffers","MN","44.057605","-95.18517","-6","1" +"56146","Kanaranzi","MN","43.674883","-96.252794","-6","1" +"56147","Kenneth","MN","43.750164","-96.06591","-6","1" +"56149","Lake Benton","MN","44.268332","-96.30822","-6","1" +"56150","Lakefield","MN","43.649239","-95.19501","-6","1" +"56151","Lake Wilson","MN","44.015184","-95.91403","-6","1" +"56152","Lamberton","MN","44.227021","-95.28014","-6","1" +"56153","Leota","MN","43.834517","-96.0186","-6","1" +"56155","Lismore","MN","43.763442","-95.94459","-6","1" +"56156","Luverne","MN","43.653947","-96.2303","-6","1" +"56157","Lynd","MN","44.396043","-95.92771","-6","1" +"56158","Magnolia","MN","43.642511","-96.06011","-6","1" +"56159","Mountain Lake","MN","43.942515","-94.93058","-6","1" +"56160","Odin","MN","43.847252","-94.77124","-6","1" +"56161","Okabena","MN","43.724852","-95.32545","-6","1" +"56162","Ormsby","MN","43.843264","-94.68446","-6","1" +"56164","Pipestone","MN","44.020814","-96.32473","-6","1" +"56165","Reading","MN","43.725227","-95.7032","-6","1" +"56166","Revere","MN","44.2127","-95.3633","-6","1" +"56167","Round Lake","MN","43.536338","-95.38554","-6","1" +"56168","Rushmore","MN","43.608503","-95.80946","-6","1" +"56169","Russell","MN","44.319682","-95.98835","-6","1" +"56170","Ruthton","MN","44.17521","-96.07363","-6","1" +"56171","Sherburn","MN","43.660847","-94.74357","-6","1" +"56172","Slayton","MN","44.007631","-95.75803","-6","1" +"56173","Steen","MN","43.521947","-96.24301","-6","1" +"56174","Storden","MN","44.031366","-95.30674","-6","1" +"56175","Tracy","MN","44.260625","-95.62371","-6","1" +"56176","Trimont","MN","43.771341","-94.72593","-6","1" +"56177","Trosky","MN","43.887295","-96.25132","-6","1" +"56178","Tyler","MN","44.274909","-96.12408","-6","1" +"56180","Walnut Grove","MN","44.249331","-95.46821","-6","1" +"56181","Welcome","MN","43.672105","-94.61716","-6","1" +"56183","Westbrook","MN","44.043567","-95.41116","-6","1" +"56185","Wilmont","MN","43.783453","-95.82563","-6","1" +"56186","Woodstock","MN","44.028354","-96.07063","-6","1" +"56187","Worthington","MN","43.623255","-95.59604","-6","1" +"56201","Willmar","MN","45.118846","-95.04504","-6","1" +"56207","Alberta","MN","45.532754","-96.06453","-6","1" +"56208","Appleton","MN","45.228278","-96.00539","-6","1" +"56209","Atwater","MN","45.128657","-94.79069","-6","1" +"56210","Barry","MN","45.559291","-96.558886","-6","1" +"56211","Beardsley","MN","45.593033","-96.6879","-6","1" +"56212","Bellingham","MN","45.140784","-96.32855","-6","1" +"56214","Belview","MN","44.59231","-95.33465","-6","1" +"56215","Benson","MN","45.317872","-95.57247","-6","1" +"56216","Blomkest","MN","44.945988","-95.05923","-6","1" +"56218","Boyd","MN","44.838823","-95.94042","-6","1" +"56219","Browns Valley","MN","45.606998","-96.81833","-6","1" +"56220","Canby","MN","44.725437","-96.2921","-6","1" +"56221","Chokio","MN","45.556847","-96.1897","-6","1" +"56222","Clara City","MN","44.974538","-95.36594","-6","1" +"56223","Clarkfield","MN","44.761504","-95.8183","-6","1" +"56224","Clements","MN","44.375214","-95.06695","-6","1" +"56225","Clinton","MN","45.459383","-96.44694","-6","1" +"56226","Clontarf","MN","45.409218","-95.69334","-6","1" +"56227","Correll","MN","45.290863","-96.16888","-6","1" +"56228","Cosmos","MN","44.933861","-94.67563","-6","1" +"56229","Cottonwood","MN","44.609098","-95.70555","-6","1" +"56230","Danube","MN","44.79129","-95.09671","-6","1" +"56231","Danvers","MN","45.27133","-95.7711","-6","1" +"56232","Dawson","MN","44.932368","-96.04823","-6","1" +"56235","Donnelly","MN","45.697239","-96.01767","-6","1" +"56236","Dumont","MN","45.664974","-96.39608","-6","1" +"56237","Echo","MN","44.616243","-95.43173","-6","1" +"56239","Ghent","MN","44.515475","-95.89576","-6","1" +"56240","Graceville","MN","45.568463","-96.45916","-6","1" +"56241","Granite Falls","MN","44.794723","-95.56737","-6","1" +"56243","Grove City","MN","45.168724","-94.68641","-6","1" +"56244","Hancock","MN","45.488399","-95.78157","-6","1" +"56245","Hanley Falls","MN","44.690608","-95.65028","-6","1" +"56246","Hawick","MN","45.34373","-94.83013","-6","1" +"56248","Herman","MN","45.800145","-96.13895","-6","1" +"56249","Holloway","MN","45.299531","-95.8996","-6","1" +"56251","Kandiyohi","MN","45.133103","-94.91976","-6","1" +"56252","Kerkhoven","MN","45.18553","-95.30198","-6","1" +"56253","Lake Lillian","MN","44.959237","-94.88831","-6","1" +"56255","Lucan","MN","44.397402","-95.42013","-6","1" +"56256","Madison","MN","45.036047","-96.19573","-6","1" +"56257","Marietta","MN","44.986761","-96.40968","-6","1" +"56258","Marshall","MN","44.446885","-95.77281","-6","1" +"56260","Maynard","MN","44.943885","-95.48031","-6","1" +"56262","Milan","MN","45.113285","-95.86913","-6","1" +"56263","Milroy","MN","44.417337","-95.54999","-6","1" +"56264","Minneota","MN","44.58701","-95.98153","-6","1" +"56265","Montevideo","MN","44.985313","-95.7066","-6","1" +"56266","Morgan","MN","44.417533","-94.91902","-6","1" +"56267","Morris","MN","45.584124","-95.9092","-6","1" +"56270","Morton","MN","44.552749","-94.98994","-6","1" +"56271","Murdock","MN","45.242264","-95.42422","-6","1" +"56273","New London","MN","45.327429","-94.99921","-6","1" +"56274","Norcross","MN","45.897971","-96.24441","-6","1" +"56276","Odessa","MN","45.245844","-96.32641","-6","1" +"56277","Olivia","MN","44.766441","-94.99624","-6","1" +"56278","Ortonville","MN","45.335958","-96.40032","-6","1" +"56279","Pennock","MN","45.200641","-95.17748","-6","1" +"56280","Porter","MN","44.633159","-96.16532","-6","1" +"56281","Prinsburg","MN","44.945831","-95.17628","-6","1" +"56282","Raymond","MN","45.028945","-95.22418","-6","1" +"56283","Redwood Falls","MN","44.540923","-95.12732","-6","1" +"56284","Renville","MN","44.783251","-95.20682","-6","1" +"56285","Sacred Heart","MN","44.79624","-95.35045","-6","1" +"56286","St. Leo","MN","44.716494","-96.054791","-6","1" +"56287","Seaforth","MN","44.475845","-95.32579","-6","1" +"56288","Spicer","MN","45.238936","-94.95001","-6","1" +"56289","Sunburg","MN","45.344013","-95.22335","-6","1" +"56291","Taunton","MN","44.598116","-96.06801","-6","1" +"56292","Vesta","MN","44.501023","-95.45228","-6","1" +"56293","Wabasso","MN","44.403815","-95.25784","-6","1" +"56294","Wanda","MN","44.317104","-95.21378","-6","1" +"56295","Watson","MN","45.024344","-95.82794","-6","1" +"56296","Wheaton","MN","45.823795","-96.47706","-6","1" +"56297","Wood Lake","MN","44.6367","-95.55359","-6","1" +"56301","Saint Cloud","MN","45.526066","-94.20649","-6","1" +"56302","Saint Cloud","MN","45.49343","-94.643922","-6","1" +"56303","Saint Cloud","MN","45.568516","-94.19251","-6","1" +"56304","Saint Cloud","MN","45.547283","-94.11303","-6","1" +"56307","Albany","MN","45.632455","-94.58257","-6","1" +"56308","Alexandria","MN","45.88645","-95.38287","-6","1" +"56309","Ashby","MN","46.080287","-95.80539","-6","1" +"56310","Avon","MN","45.624705","-94.44973","-6","1" +"56311","Barrett","MN","45.902998","-95.88297","-6","1" +"56312","Belgrade","MN","45.460931","-94.96697","-6","1" +"56313","Bock","MN","45.785883","-93.55343","-6","1" +"56314","Bowlus","MN","45.814436","-94.42539","-6","1" +"56315","Brandon","MN","45.968739","-95.5942","-6","1" +"56316","Brooten","MN","45.510591","-95.13636","-6","1" +"56317","Buckman","MN","46.061307","-94.208731","-6","1" +"56318","Burtrum","MN","45.85303","-94.67459","-6","1" +"56319","Carlos","MN","45.990781","-95.27033","-6","1" +"56320","Cold Spring","MN","45.462728","-94.42511","-6","1" +"56321","Collegeville","MN","45.578278","-94.419941","-6","1" +"56323","Cyrus","MN","45.63381","-95.72642","-6","1" +"56324","Dalton","MN","46.169964","-95.90465","-6","1" +"56325","Elrosa","MN","45.562459","-94.94661","-6","1" +"56326","Evansville","MN","46.011931","-95.68104","-6","1" +"56327","Farwell","MN","45.778773","-95.60302","-6","1" +"56328","Flensburg","MN","45.953535","-94.52834","-6","1" +"56329","Foley","MN","45.695411","-93.90417","-6","1" +"56330","Foreston","MN","45.732493","-93.73102","-6","1" +"56331","Freeport","MN","45.67539","-94.67303","-6","1" +"56332","Garfield","MN","45.950306","-95.50754","-6","1" +"56333","Gilman","MN","45.691714","-94.05629","-6","1" +"56334","Glenwood","MN","45.609555","-95.35104","-6","1" +"56335","Greenwald","MN","45.601429","-94.85864","-6","1" +"56336","Grey Eagle","MN","45.819474","-94.76247","-6","1" +"56338","Hillman","MN","46.035241","-93.9153","-6","1" +"56339","Hoffman","MN","45.825031","-95.81104","-6","1" +"56340","Holdingford","MN","45.749908","-94.45647","-6","1" +"56341","Holmes City","MN","45.830998","-95.541618","-6","1" +"56342","Isle","MN","46.212757","-93.45729","-6","1" +"56343","Kensington","MN","45.795887","-95.66742","-6","1" +"56344","Lastrup","MN","46.061307","-94.208731","-6","1" +"56345","Little Falls","MN","45.994029","-94.37183","-6","1" +"56347","Long Prairie","MN","45.973572","-94.8582","-6","1" +"56349","Lowry","MN","45.728732","-95.52504","-6","1" +"56350","McGrath","MN","46.274325","-93.26096","-6","1" +"56352","Melrose","MN","45.659491","-94.81417","-6","1" +"56353","Milaca","MN","45.760191","-93.63247","-6","1" +"56354","Miltona","MN","46.063391","-95.28168","-6","1" +"56355","Nelson","MN","45.92084","-95.23965","-6","1" +"56356","New Munich","MN","45.628804","-94.75466","-6","1" +"56357","Oak Park","MN","45.699995","-93.80256","-6","1" +"56358","Ogilvie","MN","45.831767","-93.44162","-6","1" +"56359","Onamia","MN","46.073505","-93.66983","-6","1" +"56360","Osakis","MN","45.884771","-95.10486","-6","1" +"56361","Parkers Prairie","MN","46.156758","-95.33754","-6","1" +"56362","Paynesville","MN","45.389395","-94.70519","-6","1" +"56363","Pease","MN","45.697362","-93.646503","-6","1" +"56364","Pierz","MN","45.996396","-94.08461","-6","1" +"56366","Bowstring","MN","47.572516","-93.899486","-6","1" +"56367","Rice","MN","45.745266","-94.18176","-6","1" +"56368","Richmond","MN","45.448703","-94.52597","-6","1" +"56369","Rockville","MN","45.470635","-94.33862","-6","1" +"56371","Roscoe","MN","45.432316","-94.63552","-6","1" +"56372","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56373","Royalton","MN","45.840565","-94.26434","-6","1" +"56374","Saint Joseph","MN","45.582653","-94.32974","-6","1" +"56375","Saint Stephen","MN","45.702598","-94.27609","-6","1" +"56376","Saint Martin","MN","45.498506","-94.66271","-6","1" +"56377","Sartell","MN","45.622966","-94.20959","-6","1" +"56378","Sauk Centre","MN","45.729898","-94.97236","-6","1" +"56379","Sauk Rapids","MN","45.608178","-94.13838","-6","1" +"56381","Starbuck","MN","45.578335","-95.55201","-6","1" +"56382","Swanville","MN","45.904129","-94.62373","-6","1" +"56384","Upsala","MN","45.80679","-94.57067","-6","1" +"56385","Villard","MN","45.702767","-95.21433","-6","1" +"56386","Wahkon","MN","46.114445","-93.51986","-6","1" +"56387","Waite Park","MN","45.550378","-94.22429","-6","1" +"56388","Mount Morris","MN","45.946528","-93.84788","-6","1" +"56389","West Union","MN","45.799542","-95.08213","-6","1" +"56393","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56395","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56396","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56397","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56398","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56399","Saint Cloud","MN","45.52886","-94.593338","-6","1" +"56401","Brainerd","MN","46.352758","-94.16289","-6","1" +"56425","Baxter","MN","46.347175","-94.27017","-6","1" +"56430","Ah Gwah Ching","MN","46.862332","-94.641872","-6","1" +"56431","Aitkin","MN","46.507241","-93.66458","-6","1" +"56432","Acton","MN","45.910946","-94.633724","-6","1" +"56433","Akeley","MN","46.977161","-94.70512","-6","1" +"56434","Aldrich","MN","46.376819","-94.93781","-6","1" +"56435","Backus","MN","46.823666","-94.50471","-6","1" +"56436","Benedict","MN","47.143679","-94.68589","-6","1" +"56437","Bertha","MN","46.252854","-95.06222","-6","1" +"56438","Browerville","MN","46.149276","-94.83088","-6","1" +"56440","Clarissa","MN","46.129933","-94.95278","-6","1" +"56441","Crosby","MN","46.528094","-93.98055","-6","1" +"56442","Crosslake","MN","46.67066","-94.10686","-6","1" +"56443","Cushing","MN","46.194584","-94.6196","-6","1" +"56444","Deerwood","MN","46.438976","-93.89064","-6","1" +"56446","Eagle Bend","MN","46.145445","-95.07071","-6","1" +"56447","Emily","MN","46.735697","-93.94205","-6","1" +"56448","Fifty Lakes","MN","46.747211","-94.07246","-6","1" +"56449","Fort Ripley","MN","46.166054","-94.29254","-6","1" +"56450","Garrison","MN","46.244818","-93.8155","-6","1" +"56452","Hackensack","MN","46.963355","-94.4646","-6","1" +"56453","Hewitt","MN","46.32091","-95.14567","-6","1" +"56455","Ironton","MN","46.483523","-93.99978","-6","1" +"56456","Jenkins","MN","46.650706","-94.33651","-6","1" +"56458","Lake George","MN","47.206754","-94.97109","-6","1" +"56459","Lake Hubert","MN","46.498749","-94.251926","-6","1" +"56460","Itasca","MN","47.239049","-95.265379","-6","1" +"56461","Laporte","MN","47.260013","-94.84475","-6","1" +"56464","Menahga","MN","46.770167","-95.09659","-6","1" +"56465","Merrifield","MN","46.527729","-94.11071","-6","1" +"56466","Motley","MN","46.362398","-94.63849","-6","1" +"56467","Nevis","MN","46.970017","-94.85013","-6","1" +"56468","Nisswa","MN","46.501623","-94.28917","-6","1" +"56469","Palisade","MN","46.702947","-93.5203","-6","1" +"56470","Park Rapids","MN","46.974221","-95.06581","-6","1" +"56472","Pequot Lakes","MN","46.602684","-94.29986","-6","1" +"56473","Pillager","MN","46.368605","-94.4846","-6","1" +"56474","Pine River","MN","46.718997","-94.38716","-6","1" +"56475","Randall","MN","46.099545","-94.50864","-6","1" +"56477","Sebeka","MN","46.630023","-95.01222","-6","1" +"56478","Nimrod","MN","46.605266","-94.900729","-6","1" +"56479","Staples","MN","46.380664","-94.80503","-6","1" +"56481","Verndale","MN","46.434002","-94.95748","-6","1" +"56482","Wadena","MN","46.447659","-95.14289","-6","1" +"56483","Wadena","MN","46.439079","-95.137497","-6","1" +"56484","Walker","MN","47.099774","-94.53347","-6","1" +"56501","Detroit Lakes","MN","46.809965","-95.8518","-6","1" +"56502","Detroit Lakes","MN","46.933961","-95.678375","-6","1" +"56508","Lake Eunice","MN","46.732051","-95.997757","-6","1" +"56510","Ada","MN","47.322444","-96.51915","-6","1" +"56511","Audubon","MN","46.863375","-95.99585","-6","1" +"56513","Baker","MN","46.723274","-96.54727","-6","1" +"56514","Barnesville","MN","46.653912","-96.42891","-6","1" +"56515","Battle Lake","MN","46.284496","-95.70975","-6","1" +"56516","Bejou","MN","47.4514","-95.98766","-6","1" +"56517","Beltrami","MN","47.55171","-96.53492","-6","1" +"56518","Bluffton","MN","46.467905","-95.25532","-6","1" +"56519","Borup","MN","47.158015","-96.51487","-6","1" +"56520","Breckenridge","MN","46.27324","-96.54888","-6","1" +"56521","Callaway","MN","47.015728","-95.87008","-6","1" +"56522","Campbell","MN","46.130213","-96.40019","-6","1" +"56523","Climax","MN","47.651391","-96.80408","-6","1" +"56524","Clitherall","MN","46.235125","-95.61543","-6","1" +"56525","Comstock","MN","46.659932","-96.74693","-6","1" +"56527","Deer Creek","MN","46.383585","-95.31644","-6","1" +"56528","Dent","MN","46.528138","-95.79661","-6","1" +"56529","Dilworth","MN","46.878062","-96.70242","-6","1" +"56531","Elbow Lake","MN","45.990556","-95.96704","-6","1" +"56533","Elizabeth","MN","46.405807","-96.15831","-6","1" +"56534","Erhard","MN","46.470638","-96.01013","-6","1" +"56535","Erskine","MN","47.666426","-96.03701","-6","1" +"56536","Felton","MN","47.050391","-96.53933","-6","1" +"56537","Fergus Falls","MN","46.282084","-96.06798","-6","1" +"56538","Fergus Falls","MN","46.412413","-95.713452","-6","1" +"56540","Fertile","MN","47.557644","-96.26954","-6","1" +"56541","Flom","MN","47.325074","-96.469194","-6","1" +"56542","Fosston","MN","47.571567","-95.73784","-6","1" +"56543","Foxhome","MN","46.290371","-96.33238","-6","1" +"56544","Frazee","MN","46.742349","-95.62935","-6","1" +"56545","Gary","MN","47.363986","-96.2396","-6","1" +"56546","Georgetown","MN","47.10033","-96.74309","-6","1" +"56547","Glyndon","MN","46.884481","-96.56301","-6","1" +"56548","Halstad","MN","47.36461","-96.78265","-6","1" +"56549","Hawley","MN","46.864977","-96.30781","-6","1" +"56550","Hendrum","MN","47.271427","-96.76456","-6","1" +"56551","Henning","MN","46.31855","-95.45375","-6","1" +"56552","Hitterdal","MN","46.988379","-96.23607","-6","1" +"56553","Kent","MN","46.434718","-96.62429","-6","1" +"56554","Lake Park","MN","46.861527","-96.10974","-6","1" +"56556","Mcintosh","MN","47.656231","-95.88214","-6","1" +"56557","Mahnomen","MN","47.330624","-95.87672","-6","1" +"56560","Moorhead","MN","46.861413","-96.75367","-6","1" +"56561","Moorhead","MN","46.890034","-96.506156","-6","1" +"56562","Moorhead","MN","46.890034","-96.506156","-6","1" +"56563","Moorhead","MN","46.890034","-96.506156","-6","1" +"56565","Nashua","MN","46.040316","-96.31772","-6","1" +"56566","Naytahwaush","MN","47.257131","-95.61749","-6","1" +"56567","New York Mills","MN","46.534993","-95.38106","-6","1" +"56568","Nielsville","MN","47.53525","-96.78313","-6","1" +"56569","Ogema","MN","47.093608","-95.84166","-6","1" +"56570","Osage","MN","46.895156","-95.36174","-6","1" +"56571","Ottertail","MN","46.428432","-95.559","-6","1" +"56572","Pelican Rapids","MN","46.608461","-96.0663","-6","1" +"56573","Perham","MN","46.607429","-95.55911","-6","1" +"56574","Perley","MN","47.197932","-96.72953","-6","1" +"56575","Ponsford","MN","47.042394","-95.43451","-6","1" +"56576","Richville","MN","46.467527","-95.69675","-6","1" +"56577","Richwood","MN","46.933961","-95.678375","-6","1" +"56578","Rochert","MN","46.920986","-95.66842","-6","1" +"56579","Rothsay","MN","46.459359","-96.34149","-6","1" +"56580","Sabin","MN","46.754039","-96.63715","-6","1" +"56581","Shelly","MN","47.457626","-96.78723","-6","1" +"56583","Tintah","MN","46.014161","-96.40019","-6","1" +"56584","Twin Valley","MN","47.245894","-96.24825","-6","1" +"56585","Ulen","MN","47.087171","-96.24725","-6","1" +"56586","Underwood","MN","46.330985","-95.84679","-6","1" +"56587","Vergas","MN","46.64246","-95.83042","-6","1" +"56588","Vining","MN","46.246571","-95.5305","-6","1" +"56589","Waubun","MN","47.174775","-95.74517","-6","1" +"56590","Wendell","MN","46.033624","-96.13988","-6","1" +"56591","White Earth","MN","46.933961","-95.678375","-6","1" +"56592","Winger","MN","47.530842","-96.00853","-6","1" +"56593","Wolf Lake","MN","46.821648","-95.391968","-6","1" +"56594","Wolverton","MN","46.565562","-96.66702","-6","1" +"56601","Bemidji","MN","47.504496","-94.87105","-6","1" +"56619","Bemidji","MN","47.625699","-94.822154","-6","1" +"56621","Bagley","MN","47.436583","-95.41337","-6","1" +"56623","Baudette","MN","48.663939","-94.54953","-6","1" +"56626","Bena","MN","47.340327","-94.245","-6","1" +"56627","Big Falls","MN","48.186112","-93.80726","-6","1" +"56628","Bigfork","MN","47.667203","-93.58773","-6","1" +"56629","Birchdale","MN","48.551313","-94.17684","-6","1" +"56630","Blackduck","MN","47.722624","-94.5319","-6","1" +"56631","Bowstring","MN","47.087782","-93.921429","-6","1" +"56633","Cass Lake","MN","47.373207","-94.58834","-6","1" +"56634","Clearbrook","MN","47.67265","-95.42809","-6","1" +"56636","Deer River","MN","47.382872","-93.84832","-6","1" +"56637","Talmoon","MN","47.611885","-93.83267","-6","1" +"56639","Effie","MN","47.852874","-93.50758","-6","1" +"56641","Federal Dam","MN","47.243893","-94.23203","-6","1" +"56643","Fleming","MN","46.631748","-93.515456","-6","1" +"56644","Gonvick","MN","47.755904","-95.5078","-6","1" +"56646","Gully","MN","47.771933","-95.64403","-6","1" +"56647","Hines","MN","47.666705","-94.61868","-6","1" +"56649","International Falls","MN","48.579947","-93.38142","-6","1" +"56650","Kelliher","MN","47.997931","-94.55748","-6","1" +"56651","Lengby","MN","47.465509","-95.64614","-6","1" +"56652","Leonard","MN","47.702771","-95.22132","-6","1" +"56653","Littlefork","MN","48.366833","-93.56367","-6","1" +"56654","Loman","MN","48.527572","-93.83554","-6","1" +"56655","Longville","MN","46.975876","-94.21508","-6","1" +"56657","Marcell","MN","47.578093","-93.62929","-6","1" +"56658","Margie","MN","48.27888","-93.755536","-6","1" +"56659","Max","MN","47.64542","-94.05089","-6","1" +"56660","Mizpah","MN","47.954759","-94.20965","-6","1" +"56661","Northome","MN","47.821937","-94.18727","-6","1" +"56662","Outing","MN","46.850438","-93.94081","-6","1" +"56663","Pennington","MN","47.464399","-94.44806","-6","1" +"56666","Ponemah","MN","48.018746","-94.87594","-6","1" +"56667","Puposky","MN","47.750406","-94.91254","-6","1" +"56668","Ranier","MN","48.603143","-93.29771","-6","1" +"56669","Ray","MN","48.443118","-93.14296","-6","1" +"56670","Redby","MN","47.854118","-94.93168","-6","1" +"56671","Redlake","MN","47.871135","-95.14362","-6","1" +"56672","Remer","MN","47.036967","-94.02951","-6","1" +"56673","Roosevelt","MN","48.730013","-95.09004","-6","1" +"56676","Shevlin","MN","47.506665","-95.21527","-6","1" +"56678","Solway","MN","47.508863","-95.11397","-6","1" +"56679","South International Falls","MN","48.27888","-93.755536","-6","1" +"56680","Spring Lake","MN","47.663689","-93.94631","-6","1" +"56681","Squaw Lake","MN","47.617774","-94.24098","-6","1" +"56682","Swift","MN","48.769244","-95.747559","-6","1" +"56683","Tenstrike","MN","47.690018","-94.71889","-6","1" +"56684","Trail","MN","47.855588","-95.69895","-6","1" +"56685","Waskish","MN","48.153759","-94.51934","-6","1" +"56686","Williams","MN","48.786139","-94.91418","-6","1" +"56687","Wilton","MN","47.501402","-94.99344","-6","1" +"56688","Wirt","MN","47.756467","-93.93298","-6","1" +"56701","Thief River Falls","MN","48.118625","-96.1793","-6","1" +"56710","Alvarado","MN","48.192532","-96.9986","-6","1" +"56711","Angle Inlet","MN","49.342144","-95.03571","-6","1" +"56712","Angus","MN","48.071847","-96.74918","-6","1" +"56713","Argyle","MN","48.342579","-96.79448","-6","1" +"56714","Badger","MN","48.795471","-96.01816","-6","1" +"56715","Brooks","MN","47.808866","-95.97713","-6","1" +"56716","Crookston","MN","47.761982","-96.58055","-6","1" +"56720","Donaldson","MN","48.574128","-96.89632","-6","1" +"56721","East Grand Forks","MN","47.956458","-96.98774","-6","1" +"56722","Euclid","MN","47.970507","-96.66654","-6","1" +"56723","Fisher","MN","47.826487","-96.83308","-6","1" +"56724","Gatzke","MN","48.445999","-95.74148","-6","1" +"56725","Goodridge","MN","48.128712","-95.82013","-6","1" +"56726","Greenbush","MN","48.698749","-96.20637","-6","1" +"56727","Grygla","MN","48.32162","-95.47515","-6","1" +"56728","Hallock","MN","48.787016","-96.95434","-6","1" +"56729","Halma","MN","48.655487","-96.59592","-6","1" +"56731","Humboldt","MN","48.909857","-97.09566","-6","1" +"56732","Karlstad","MN","48.565296","-96.47578","-6","1" +"56733","Kennedy","MN","48.634961","-96.92156","-6","1" +"56734","Lake Bronson","MN","48.732852","-96.63392","-6","1" +"56735","Lancaster","MN","48.892011","-96.68027","-6","1" +"56736","Mentor","MN","47.702366","-96.1539","-6","1" +"56737","Middle River","MN","48.436061","-96.06973","-6","1" +"56738","Newfolden","MN","48.348745","-96.32534","-6","1" +"56740","Noyes","MN","48.771938","-96.812921","-6","1" +"56741","Oak Island","MN","49.242285","-94.84003","-6","1" +"56742","Oklee","MN","47.899103","-95.84846","-6","1" +"56744","Oslo","MN","48.233942","-97.11882","-6","1" +"56748","Plummer","MN","47.915369","-96.02739","-6","1" +"56750","Red Lake Falls","MN","47.886448","-96.29033","-6","1" +"56751","Roseau","MN","48.817919","-95.75167","-6","1" +"56754","Saint Hilaire","MN","48.011365","-96.20491","-6","1" +"56755","Saint Vincent","MN","48.954448","-97.13949","-6","1" +"56756","Salol","MN","48.869494","-95.51436","-6","1" +"56757","Stephen","MN","48.478075","-96.83465","-6","1" +"56758","Strandquist","MN","48.472648","-96.5018","-6","1" +"56759","Strathcona","MN","48.565391","-96.07014","-6","1" +"56760","Viking","MN","48.232438","-96.44919","-6","1" +"56761","Wannaska","MN","48.609478","-95.6602","-6","1" +"56762","Warren","MN","48.195512","-96.74207","-6","1" +"56763","Warroad","MN","48.890886","-95.33831","-6","1" +"57001","Alcester","SD","42.974216","-96.63848","-6","1" +"57002","Aurora","SD","44.287058","-96.67784","-6","1" +"57003","Baltic","SD","43.726266","-96.74702","-6","1" +"57004","Beresford","SD","43.069991","-96.79091","-6","1" +"57005","Brandon","SD","43.590014","-96.58362","-6","1" +"57006","Brookings","SD","44.305418","-96.7906","-6","1" +"57007","Brookings","SD","44.369696","-96.790705","-6","1" +"57010","Burbank","SD","42.819124","-96.8163","-6","1" +"57012","Canistota","SD","43.608442","-97.25757","-6","1" +"57013","Canton","SD","43.294672","-96.60442","-6","1" +"57014","Centerville","SD","43.111838","-96.9563","-6","1" +"57015","Chancellor","SD","43.410132","-96.97587","-6","1" +"57016","Chester","SD","43.89916","-96.95926","-6","1" +"57017","Colman","SD","44.001123","-96.81166","-6","1" +"57018","Colton","SD","43.797629","-96.96107","-6","1" +"57020","Crooks","SD","43.672525","-96.81757","-6","1" +"57021","Davis","SD","43.268424","-96.99369","-6","1" +"57022","Dell Rapids","SD","43.833265","-96.70684","-6","1" +"57024","Egan","SD","43.997522","-96.65717","-6","1" +"57025","Elk Point","SD","42.728534","-96.69785","-6","1" +"57026","Elkton","SD","44.252315","-96.5166","-6","1" +"57027","Fairview","SD","43.192357","-96.51982","-6","1" +"57028","Flandreau","SD","44.047857","-96.58896","-6","1" +"57029","Freeman","SD","43.335663","-97.47022","-6","1" +"57030","Garretson","SD","43.735778","-96.54332","-6","1" +"57031","Gayville","SD","42.886177","-97.18884","-6","1" +"57032","Harrisburg","SD","43.424257","-96.67817","-6","1" +"57033","Hartford","SD","43.614888","-96.95463","-6","1" +"57034","Hudson","SD","43.134318","-96.51959","-6","1" +"57035","Humboldt","SD","43.643112","-97.07195","-6","1" +"57036","Hurley","SD","43.281047","-97.15149","-6","1" +"57037","Irene","SD","43.104527","-97.24905","-6","1" +"57038","Jefferson","SD","42.585305","-96.57657","-6","1" +"57039","Lennox","SD","43.350093","-96.87487","-6","1" +"57040","Lesterville","SD","43.060656","-97.58708","-6","1" +"57041","Lyons","SD","43.723468","-96.86695","-6","1" +"57042","Madison","SD","43.995586","-97.134","-6","1" +"57043","Marion","SD","43.42258","-97.29026","-6","1" +"57044","Meckling","SD","42.846853","-97.08438","-6","1" +"57045","Menno","SD","43.214133","-97.53946","-6","1" +"57046","Mission Hill","SD","42.945468","-97.2884","-6","1" +"57047","Monroe","SD","43.50934","-97.21919","-6","1" +"57048","Montrose","SD","43.734095","-97.18706","-6","1" +"57049","North Sioux City","SD","42.524771","-96.49955","-6","1" +"57050","Nunda","SD","44.159515","-97.00957","-6","1" +"57051","Oldham","SD","44.219545","-97.34057","-6","1" +"57052","Olivet","SD","43.29183","-97.7082","-6","1" +"57053","Parker","SD","43.414257","-97.13198","-6","1" +"57054","Ramona","SD","44.129029","-97.23971","-6","1" +"57055","Renner","SD","43.668009","-96.73032","-6","1" +"57056","Rowena","SD","43.521559","-96.558738","-6","1" +"57057","Rutland","SD","44.102243","-96.95951","-6","1" +"57058","Salem","SD","43.73161","-97.38526","-6","1" +"57059","Scotland","SD","43.133482","-97.74525","-6","1" +"57061","Sinai","SD","44.245062","-97.04171","-6","1" +"57062","Springfield","SD","42.861759","-97.93431","-6","1" +"57063","Tabor","SD","42.944651","-97.68587","-6","1" +"57064","Tea","SD","43.450592","-96.84498","-6","1" +"57065","Trent","SD","43.917178","-96.65524","-6","1" +"57066","Tyndall","SD","42.991775","-97.86353","-6","1" +"57067","Utica","SD","43.012455","-97.48749","-6","1" +"57068","Valley Springs","SD","43.582689","-96.48692","-6","1" +"57069","Vermillion","SD","42.812664","-96.94651","-6","1" +"57070","Viborg","SD","43.194321","-97.13077","-6","1" +"57071","Volga","SD","44.278584","-96.93911","-6","1" +"57072","Volin","SD","42.989201","-97.2048","-6","1" +"57073","Wakonda","SD","43.005861","-97.0545","-6","1" +"57074","Ward","SD","44.156514","-96.46401","-6","1" +"57075","Wentworth","SD","43.993676","-96.96892","-6","1" +"57076","Winfred","SD","43.994948","-97.36611","-6","1" +"57077","Worthing","SD","43.327859","-96.76115","-6","1" +"57078","Yankton","SD","42.888538","-97.40958","-6","1" +"57079","Yankton","SD","42.867556","-97.390268","-6","1" +"57101","Sioux Falls","SD","43.546358","-96.69063","-6","1" +"57103","Sioux Falls","SD","43.537075","-96.69527","-6","1" +"57104","Sioux Falls","SD","43.560826","-96.7324","-6","1" +"57105","Sioux Falls","SD","43.525226","-96.73297","-6","1" +"57106","Sioux Falls","SD","43.514392","-96.80375","-6","1" +"57107","Sioux Falls","SD","43.577696","-96.80101","-6","1" +"57108","Sioux Falls","SD","43.488472","-96.72258","-6","1" +"57109","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57110","Sioux Falls","SD","43.544375","-96.65801","-6","1" +"57115","Buffalo Ridge","SD","43.521895","-96.868464","-6","1" +"57117","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57118","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57188","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57189","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57192","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57193","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57194","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57195","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57196","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57197","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57198","Sioux Falls","SD","43.674582","-96.79134","-6","1" +"57201","Watertown","SD","44.916657","-97.11346","-6","1" +"57202","Waverly","SD","44.977634","-97.188372","-6","1" +"57211","Cleveland","SD","44.543593","-97.358948","-6","1" +"57212","Arlington","SD","44.377534","-97.13878","-6","1" +"57213","Astoria","SD","44.551141","-96.51511","-6","1" +"57214","Badger","SD","44.484691","-97.20668","-6","1" +"57216","Big Stone City","SD","45.285323","-96.5024","-6","1" +"57217","Bradley","SD","45.085704","-97.688","-6","1" +"57218","Brandt","SD","44.652381","-96.5922","-6","1" +"57219","Bristol","SD","45.278469","-97.78645","-6","1" +"57220","Bruce","SD","44.459833","-96.91759","-6","1" +"57221","Bryant","SD","44.588318","-97.46092","-6","1" +"57223","Castlewood","SD","44.723825","-97.01425","-6","1" +"57224","Claire City","SD","45.859112","-97.15011","-6","1" +"57225","Clark","SD","44.877579","-97.74574","-6","1" +"57226","Clear Lake","SD","44.790157","-96.69548","-6","1" +"57227","Corona","SD","45.377288","-96.64746","-6","1" +"57230","De Smet","SD","44.34715","-97.471509","-6","1" +"57231","De Smet","SD","44.374289","-97.57442","-6","1" +"57232","Eden","SD","45.631637","-97.36164","-6","1" +"57233","Erwin","SD","44.494263","-97.42038","-6","1" +"57234","Estelline","SD","44.587419","-96.90648","-6","1" +"57235","Florence","SD","45.053712","-97.31065","-6","1" +"57236","Garden City","SD","44.971494","-97.58996","-6","1" +"57237","Gary","SD","44.797788","-96.5007","-6","1" +"57238","Goodwin","SD","44.865062","-96.85949","-6","1" +"57239","Grenville","SD","45.489637","-97.3198","-6","1" +"57241","Hayti","SD","44.695445","-97.21584","-6","1" +"57242","Hazel","SD","44.775741","-97.35251","-6","1" +"57243","Henry","SD","44.917623","-97.43149","-6","1" +"57244","Hetland","SD","44.416191","-97.23974","-6","1" +"57245","Kranzburg","SD","44.889964","-96.91932","-6","1" +"57246","Labolt","SD","45.048009","-96.66287","-6","1" +"57247","Lake City","SD","45.725677","-97.42649","-6","1" +"57248","Lake Norden","SD","44.578302","-97.18354","-6","1" +"57249","Lake Preston","SD","44.355088","-97.35081","-6","1" +"57251","Marvin","SD","45.268329","-96.9274","-6","1" +"57252","Milbank","SD","45.215805","-96.6092","-6","1" +"57253","Milbank","SD","45.151477","-96.839235","-6","1" +"57255","New Effington","SD","45.859799","-96.91988","-6","1" +"57256","Ortley","SD","45.217342","-97.19567","-6","1" +"57257","Peever","SD","45.478644","-97.02057","-6","1" +"57258","Raymond","SD","44.889927","-97.92375","-6","1" +"57259","Revillo","SD","45.013469","-96.55366","-6","1" +"57260","Rosholt","SD","45.871636","-96.7185","-6","1" +"57261","Roslyn","SD","45.536715","-97.54435","-6","1" +"57262","Sisseton","SD","45.667565","-97.04528","-6","1" +"57263","South Shore","SD","45.128333","-97.03365","-6","1" +"57264","Stockholm","SD","45.104925","-96.79467","-6","1" +"57265","Strandburg","SD","45.014788","-96.78889","-6","1" +"57266","Summit","SD","45.278474","-97.10544","-6","1" +"57268","Toronto","SD","44.573144","-96.68409","-6","1" +"57269","Twin Brooks","SD","45.227773","-96.79342","-6","1" +"57270","Veblen","SD","45.83907","-97.37321","-6","1" +"57271","Vienna","SD","44.736853","-97.50123","-6","1" +"57272","Wallace","SD","45.084154","-97.47891","-6","1" +"57273","Waubay","SD","45.369654","-97.2924","-6","1" +"57274","Webster","SD","45.316779","-97.54052","-6","1" +"57276","White","SD","44.428052","-96.63173","-6","1" +"57278","Willow Lake","SD","44.623706","-97.68489","-6","1" +"57279","Wilmot","SD","45.391241","-96.82332","-6","1" +"57301","Mitchell","SD","43.711862","-98.03185","-6","1" +"57309","Perry","SD","43.383541","-96.806422","-6","1" +"57311","Alexandria","SD","43.645927","-97.76631","-6","1" +"57312","Alpena","SD","44.195319","-98.3734","-6","1" +"57313","Armour","SD","43.302262","-98.35489","-6","1" +"57314","Artesian","SD","44.046328","-98.00076","-6","1" +"57315","Avon","SD","43.006529","-98.04587","-6","1" +"57317","Bonesteel","SD","43.104344","-98.97227","-6","1" +"57319","Bridgewater","SD","43.548586","-97.45467","-6","1" +"57321","Canova","SD","43.87045","-97.54046","-6","1" +"57322","Carpenter","SD","44.638862","-97.97146","-6","1" +"57323","Carthage","SD","44.157714","-97.7152","-6","1" +"57324","Cavour","SD","44.305089","-98.04565","-6","1" +"57325","Chamberlain","SD","43.781193","-99.29864","-6","1" +"57326","Chamberlain","SD","43.71725","-99.131736","-6","1" +"57328","Corsica","SD","43.438138","-98.44031","-6","1" +"57329","Dante","SD","43.002628","-98.16211","-6","1" +"57330","Delmont","SD","43.261271","-98.16163","-6","1" +"57331","Dimock","SD","43.481227","-98.04772","-6","1" +"57332","Emery","SD","43.565083","-97.63714","-6","1" +"57334","Ethan","SD","43.549862","-97.99713","-6","1" +"57335","Fairfax","SD","43.037683","-98.74998","-6","1" +"57337","Fedora","SD","44.008344","-97.79178","-6","1" +"57339","Fort Thompson","SD","44.074578","-99.43287","-6","1" +"57340","Fulton","SD","43.772732","-97.8416","-6","1" +"57341","Gann Valley","SD","44.070421","-99.01332","-6","1" +"57342","Geddes","SD","43.257067","-98.69907","-6","1" +"57344","Harrison","SD","43.449261","-98.61919","-6","1" +"57345","Highmore","SD","44.601978","-99.44519","-6","1" +"57346","Stephan","SD","44.246147","-99.45466","-6","1" +"57347","Benton","SD","43.73319","-97.607194","-6","1" +"57348","Hitchcock","SD","44.625453","-98.37219","-6","1" +"57349","Howard","SD","44.025045","-97.56056","-6","1" +"57350","Huron","SD","44.377801","-98.20936","-6","1" +"57353","Iroquois","SD","44.391844","-97.82982","-6","1" +"57354","Kaylor","SD","43.334069","-97.756924","-6","1" +"57355","Kimball","SD","43.754325","-98.96882","-6","1" +"57356","Lake Andes","SD","43.144738","-98.51408","-6","1" +"57357","Ravinia","SD","43.136365","-98.427173","-6","1" +"57358","Lane","SD","44.070966","-98.42594","-6","1" +"57359","Letcher","SD","43.896226","-98.14931","-6","1" +"57361","Marty","SD","43.007052","-98.4172","-6","1" +"57362","Miller","SD","44.523028","-99.03397","-6","1" +"57363","Mount Vernon","SD","43.69156","-98.2555","-6","1" +"57364","New Holland","SD","43.429115","-98.61012","-6","1" +"57365","Oacoma","SD","43.808858","-99.38782","-6","1" +"57366","Parkston","SD","43.391523","-97.94713","-6","1" +"57367","Pickstown","SD","43.062919","-98.53232","-6","1" +"57368","Plankinton","SD","43.733471","-98.47215","-6","1" +"57369","Platte","SD","43.435193","-98.89387","-6","1" +"57370","Pukwana","SD","43.854809","-99.15712","-6","1" +"57371","Ree Heights","SD","44.430739","-99.22041","-6","1" +"57373","Saint Lawrence","SD","44.514512","-98.8941","-6","1" +"57374","Spencer","SD","43.738472","-97.60039","-6","1" +"57375","Stickney","SD","43.556293","-98.46986","-6","1" +"57376","Tripp","SD","43.220164","-97.94616","-6","1" +"57379","Virgil","SD","44.276539","-98.52872","-6","1" +"57380","Wagner","SD","43.045048","-98.29838","-6","1" +"57381","Wessington","SD","44.428879","-98.71147","-6","1" +"57382","Wessington Springs","SD","44.051324","-98.63556","-6","1" +"57383","White Lake","SD","43.69412","-98.70407","-6","1" +"57384","Wolsey","SD","44.414842","-98.47279","-6","1" +"57385","Woonsocket","SD","44.05448","-98.28766","-6","1" +"57386","Yale","SD","44.492158","-97.98222","-6","1" +"57399","Huron","SD","44.414319","-98.279548","-6","1" +"57401","Aberdeen","SD","45.46932","-98.49646","-6","1" +"57402","Aberdeen","SD","45.589567","-98.352014","-6","1" +"57411","Bryant","SD","45.470676","-99.257022","-6","1" +"57420","Akaska","SD","45.327593","-100.12424","-6","1" +"57421","Amherst","SD","45.755146","-97.92723","-6","1" +"57422","Andover","SD","45.418297","-97.92959","-6","1" +"57424","Ashton","SD","45.008745","-98.52375","-6","1" +"57426","Barnard","SD","45.727807","-98.50795","-6","1" +"57427","Bath","SD","45.499572","-98.30102","-6","1" +"57428","Bowdle","SD","45.459575","-99.67824","-6","1" +"57429","Brentford","SD","45.163452","-98.319296","-6","1" +"57430","Britton","SD","45.827391","-97.73978","-6","1" +"57432","Claremont","SD","45.674523","-98.01846","-6","1" +"57433","Columbia","SD","45.625285","-98.31005","-6","1" +"57434","Conde","SD","45.175381","-98.08986","-6","1" +"57435","Cresbard","SD","45.160833","-98.92417","-6","1" +"57436","Doland","SD","44.863792","-98.08876","-6","1" +"57437","Eureka","SD","45.796151","-99.62497","-6","1" +"57438","Faulkton","SD","45.06623","-99.1345","-6","1" +"57439","Ferney","SD","45.32904","-98.083721","-6","1" +"57440","Frankfort","SD","44.857069","-98.27191","-6","1" +"57441","Frederick","SD","45.834246","-98.51539","-6","1" +"57442","Gettysburg","SD","45.007901","-100.05209","-6","1" +"57443","Cambria","SD","45.697865","-98.317734","-6","1" +"57445","Groton","SD","45.458312","-98.13416","-6","1" +"57446","Hecla","SD","45.864171","-98.18814","-6","1" +"57448","Hosmer","SD","45.593008","-99.44937","-6","1" +"57449","Houghton","SD","45.726524","-98.21765","-6","1" +"57450","Hoven","SD","45.253428","-99.84288","-6","1" +"57451","Ipswich","SD","45.43694","-99.02218","-6","1" +"57452","Java","SD","45.549059","-99.88459","-6","1" +"57454","Langford","SD","45.612148","-97.76274","-6","1" +"57455","Lebanon","SD","45.041882","-99.76851","-6","1" +"57456","Leola","SD","45.743673","-98.94361","-6","1" +"57457","Longlake","SD","45.893818","-99.15407","-6","1" +"57460","Mansfield","SD","45.26493","-98.65019","-6","1" +"57461","Mellette","SD","45.152388","-98.42497","-6","1" +"57462","Mina","SD","45.425378","-98.77372","-6","1" +"57465","Northville","SD","45.151166","-98.65671","-6","1" +"57466","Onaka","SD","45.213867","-99.48135","-6","1" +"57467","Orient","SD","44.84796","-99.11828","-6","1" +"57468","Pierpont","SD","45.493324","-97.78571","-6","1" +"57469","Redfield","SD","44.864263","-98.5409","-6","1" +"57470","Rockham","SD","44.899458","-98.86967","-6","1" +"57471","Roscoe","SD","45.42443","-99.3053","-6","1" +"57472","Selby","SD","45.486222","-100.04843","-6","1" +"57473","Seneca","SD","45.020366","-99.50178","-6","1" +"57474","Stratford","SD","45.287179","-98.27899","-6","1" +"57475","Tolstoy","SD","45.223419","-99.62537","-6","1" +"57476","Tulare","SD","44.713517","-98.61569","-6","1" +"57477","Turton","SD","45.032244","-98.14355","-6","1" +"57479","Warner","SD","45.321875","-98.46429","-6","1" +"57481","Westport","SD","45.663385","-98.62274","-6","1" +"57501","Pierre","SD","44.425356","-100.29145","-6","1" +"57520","Agar","SD","44.830961","-100.11167","-6","1" +"57521","Belvidere","SD","43.839641","-101.26996","-7","1" +"57522","Blunt","SD","44.500958","-99.99188","-6","1" +"57523","Burke","SD","43.190783","-99.28191","-6","1" +"57526","Carter","SD","43.483177","-100.19302","-6","1" +"57528","Colome","SD","43.205207","-99.76123","-6","1" +"57529","Dallas","SD","43.263007","-99.5615","-6","1" +"57531","Draper","SD","43.990243","-100.52716","-6","1" +"57532","Fort Pierre","SD","44.326157","-100.43382","-7","1" +"57533","Gregory","SD","43.229236","-99.42096","-6","1" +"57534","Hamill","SD","43.630273","-99.7528","-6","1" +"57536","Harrold","SD","44.461748","-99.77535","-6","1" +"57537","Hayes","SD","44.545795","-101.12947","-7","1" +"57538","Herrick","SD","43.070066","-99.16628","-6","1" +"57540","Holabird","SD","44.466602","-99.61724","-6","1" +"57541","Ideal","SD","43.615797","-99.93186","-6","1" +"57542","Iona","SD","43.573247","-99.48175","-6","1" +"57543","Kadoka","SD","43.829457","-101.52963","-7","1" +"57544","Kennebec","SD","43.908053","-99.81529","-6","1" +"57547","Long Valley","SD","43.501449","-101.51685","-7","1" +"57548","Lower Brule","SD","44.057302","-99.54871","-6","1" +"57551","Martin","SD","43.223447","-101.65737","-7","1" +"57552","Midland","SD","44.159861","-101.19002","-7","1" +"57553","Milesville","SD","44.478744","-101.63569","-7","1" +"57555","Mission","SD","43.233874","-100.64693","-6","1" +"57557","Mission Ridge","SD","44.475844","-100.529517","-6","1" +"57559","Murdo","SD","43.889878","-100.74257","-6","1" +"57560","Norris","SD","43.493132","-101.16474","-6","1" +"57562","Okaton","SD","43.908211","-101.00351","-6","1" +"57563","Okreek","SD","43.360304","-100.38868","-6","1" +"57564","Onida","SD","44.68577","-100.04014","-6","1" +"57565","Timber Lake","SD","45.426656","-101.077412","-7","1" +"57566","Parmelee","SD","43.321116","-101.05768","-6","1" +"57567","Philip","SD","44.036966","-101.71251","-7","1" +"57568","Presho","SD","43.893368","-100.0569","-6","1" +"57569","Reliance","SD","43.839997","-99.57459","-6","1" +"57570","Rosebud","SD","43.232817","-100.90791","-6","1" +"57571","Saint Charles","SD","43.085296","-99.09765","-6","1" +"57572","Saint Francis","SD","43.111157","-100.94904","-6","1" +"57574","Tuthill","SD","43.126441","-101.3747","-7","1" +"57576","Vivian","SD","43.934133","-100.2916","-6","1" +"57577","Wanblee","SD","43.552017","-101.67309","-7","1" +"57578","Wewela","SD","43.026834","-99.81844","-6","1" +"57579","White River","SD","43.579476","-100.77982","-6","1" +"57580","Winner","SD","43.289115","-99.97143","-6","1" +"57584","Witten","SD","43.528885","-100.09039","-6","1" +"57585","Wood","SD","43.557963","-100.38483","-6","1" +"57601","Mobridge","SD","45.472087","-100.45819","-7","1" +"57620","Bison","SD","45.454454","-102.5039","-7","1" +"57621","Bullhead","SD","45.764511","-101.07093","-7","1" +"57622","Cherry Creek","SD","44.617992","-101.53458","-7","1" +"57623","Dupree","SD","45.103367","-101.63974","-7","1" +"57625","Eagle Butte","SD","44.926725","-101.18538","-7","1" +"57626","Faith","SD","44.947869","-102.02661","-7","1" +"57628","Firesteel","SD","45.55964","-101.20322","-7","1" +"57629","Glad Valley","SD","44.992051","-101.568656","-7","1" +"57630","Glencross","SD","45.098685","-100.879214","-7","1" +"57631","Glenham","SD","45.592102","-100.28391","-6","1" +"57632","Herreid","SD","45.834848","-100.1001","-6","1" +"57633","Isabel","SD","45.448377","-101.44983","-7","1" +"57634","Keldron","SD","45.814856","-101.85821","-7","1" +"57636","Lantry","SD","45.03794","-101.42207","-7","1" +"57638","Lemmon","ND","46.034096","-102.11476","-7","1" +"57639","Little Eagle","SD","45.708402","-101.154581","-7","1" +"57640","Lodgepole","SD","45.768967","-102.70446","-7","1" +"57641","McIntosh","SD","45.869314","-101.318","-7","1" +"57642","McLaughlin","SD","45.796863","-100.77282","-7","1" +"57643","Mahto","SD","45.708402","-101.154581","-7","1" +"57644","Meadow","SD","45.402823","-102.13021","-7","1" +"57645","Morristown","SD","45.884074","-101.7111","-7","1" +"57646","Mound City","SD","45.700753","-100.09434","-6","1" +"57647","Parade","SD","45.098685","-100.879214","-7","1" +"57648","Pollock","SD","45.896895","-100.28995","-6","1" +"57649","Prairie City","SD","45.511837","-102.85815","-7","1" +"57650","Ralph","SD","45.849098","-103.01489","-7","1" +"57651","Reva","SD","45.414346","-103.14501","-7","1" +"57652","Ridgeview","SD","45.125932","-100.56202","-7","1" +"57653","Shadehill","SD","45.690446","-102.25384","-7","1" +"57656","Timber Lake","SD","45.354993","-101.0562","-7","1" +"57657","Trail City","SD","45.51978","-100.88176","-7","1" +"57658","Wakpala","SD","45.68838","-100.51908","-7","1" +"57659","Walker","SD","45.708402","-101.154581","-7","1" +"57660","Watauga","SD","45.831561","-101.48462","-7","1" +"57661","Whitehorse","SD","45.198748","-100.85342","-7","1" +"57671","McIntosh","SD","45.924062","-101.354116","-7","1" +"57673","York","SD","44.556082","-98.928401","-6","1" +"57683","Orange","ND","45.984316","-102.101218","-7","1" +"57700","Rapid City","SD","44.090788","-103.284511","-7","1" +"57701","Rapid City","SD","44.085288","-103.21335","-7","1" +"57702","Rapid City","SD","44.052788","-103.34302","-7","1" +"57703","Rapid City","SD","44.05164","-103.13061","-7","1" +"57706","Ellsworth AFB","SD","44.144225","-103.08527","-7","1" +"57708","Bethlehem","SD","44.271094","-103.420131","-7","1" +"57709","Rapid City","SD","44.076106","-103.317149","-7","1" +"57714","Allen","SD","43.31492","-101.92918","-7","1" +"57716","Batesland","SD","43.134526","-102.16756","-7","1" +"57717","Belle Fourche","SD","44.768396","-103.83095","-7","1" +"57718","Black Hawk","SD","44.173449","-103.33329","-7","1" +"57719","Box Elder","SD","44.122693","-103.06315","-7","1" +"57720","Buffalo","SD","45.547869","-103.58054","-7","1" +"57722","Buffalo Gap","SD","43.473186","-102.98607","-7","1" +"57724","Camp Crook","SD","45.616269","-103.92593","-7","1" +"57725","Caputa","SD","43.940637","-102.8122","-7","1" +"57729","Creighton","SD","44.308909","-102.09713","-7","1" +"57730","Custer","SD","43.789695","-103.63631","-7","1" +"57732","Deadwood","SD","44.338702","-103.70916","-7","1" +"57735","Edgemont","SD","43.424499","-103.90273","-7","1" +"57736","Elm Springs","SD","44.338785","-102.41529","-7","1" +"57737","Enning","SD","44.560996","-102.57677","-7","1" +"57738","Fairburn","SD","43.682883","-103.24356","-7","1" +"57741","Fort Meade","SD","44.40932","-103.455428","-7","1" +"57742","Fruitdale","SD","44.65371","-103.68084","-7","1" +"57744","Hermosa","SD","43.796169","-103.07698","-7","1" +"57745","Hill City","SD","43.965949","-103.62797","-7","1" +"57747","Hot Springs","SD","43.401616","-103.5051","-7","1" +"57748","Howes","SD","44.59203","-101.98721","-7","1" +"57750","Interior","SD","43.654636","-101.94355","-7","1" +"57751","Keystone","SD","43.892254","-103.41721","-7","1" +"57752","Kyle","SD","43.389365","-102.17671","-7","1" +"57754","Lead","SD","44.312922","-103.83118","-7","1" +"57755","Ludlow","SD","45.869257","-103.29412","-7","1" +"57756","Manderson","SD","43.24449","-102.49502","-7","1" +"57758","Mud Butte","SD","45.033915","-102.78168","-7","1" +"57759","Nemo","SD","44.197255","-103.53733","-7","1" +"57760","Newell","SD","44.854326","-103.32109","-7","1" +"57761","New Underwood","SD","44.133058","-102.78887","-7","1" +"57762","Nisland","SD","44.688572","-103.59186","-7","1" +"57763","Oelrichs","SD","43.178182","-103.22927","-7","1" +"57764","Oglala","SD","43.257154","-102.77414","-7","1" +"57765","Opal","SD","44.939762","-102.41764","-7","1" +"57766","Oral","SD","43.364717","-103.23035","-7","1" +"57767","Owanka","SD","44.110334","-102.58976","-7","1" +"57769","Piedmont","SD","44.236634","-103.33998","-7","1" +"57770","Pine Ridge","SD","43.046493","-102.57323","-7","1" +"57772","Porcupine","SD","43.331433","-102.38093","-7","1" +"57773","Pringle","SD","43.609557","-103.59517","-7","1" +"57774","Provo","SD","43.156481","-103.70735","-7","1" +"57775","Quinn","SD","44.042842","-102.07873","-7","1" +"57776","Redig","SD","45.578941","-103.493668","-7","1" +"57777","Red Owl","SD","44.735001","-102.45764","-7","1" +"57778","Rochford","SD","44.079794","-103.8513","-7","1" +"57779","Saint Onge","SD","44.578116","-103.75465","-7","1" +"57780","Scenic","SD","43.726261","-102.41628","-7","1" +"57782","Smithwick","SD","43.239655","-103.527757","-7","1" +"57783","Spearfish","SD","44.48837","-103.87853","-7","1" +"57785","Sturgis","SD","44.409616","-103.46597","-7","1" +"57787","Union Center","SD","44.619045","-102.76873","-7","1" +"57788","Vale","SD","44.60302","-103.36866","-7","1" +"57790","Wall","SD","44.018548","-102.23778","-7","1" +"57791","Wasta","SD","44.067091","-102.47618","-7","1" +"57792","White Owl","SD","44.562488","-102.41683","-7","1" +"57793","Whitewood","SD","44.472475","-103.62933","-7","1" +"57794","Wounded Knee","SD","43.138184","-102.36897","-7","1" +"57796","Wall","SD","43.994049","-102.236971","-7","1" +"57799","Spearfish","SD","44.492688","-103.86974","-7","1" +"57840","Harrison","SD","44.798968","-98.200789","-6","1" +"57841","Carlisle","SD","45.632378","-98.704197","-6","1" +"57949","Big Sioux","SD","42.505818","-96.499259","-6","1" +"58000","Minot","ND","48.226422","-101.274388","-6","1" +"58001","Abercrombie","ND","46.448462","-96.73165","-6","1" +"58002","Absaraka","ND","46.859694","-97.214587","-6","1" +"58004","Amenia","ND","47.028291","-97.25029","-6","1" +"58005","Argusville","ND","47.057098","-96.95043","-6","1" +"58006","Arthur","ND","47.10167","-97.2147","-6","1" +"58007","Ayr","ND","47.020312","-97.45571","-6","1" +"58008","Barney","ND","46.304176","-96.99819","-6","1" +"58009","Blanchard","ND","47.331202","-97.25077","-6","1" +"58011","Buffalo","ND","46.920174","-97.54484","-6","1" +"58012","Casselton","ND","46.912684","-97.18939","-6","1" +"58013","Cayuga","ND","46.076891","-97.35562","-6","1" +"58014","Chaffee","ND","46.775027","-97.352437","-6","1" +"58015","Christine","ND","46.581114","-96.823","-6","1" +"58016","Clifford","ND","47.34623","-97.46372","-6","1" +"58017","Cogswell","ND","46.059066","-97.80989","-6","1" +"58018","Colfax","ND","46.437401","-96.89354","-6","1" +"58021","Davenport","ND","46.729689","-97.07941","-6","1" +"58027","Enderlin","ND","46.630659","-97.6003","-6","1" +"58029","Erie","ND","47.118212","-97.38881","-6","1" +"58030","Fairmount","ND","46.043951","-96.66927","-6","1" +"58031","Fingal","ND","46.767912","-97.67144","-6","1" +"58032","Forman","ND","46.098941","-97.63549","-6","1" +"58033","Fort Ransom","ND","46.449141","-97.91961","-6","1" +"58035","Galesburg","ND","47.25098","-97.426","-6","1" +"58036","Gardner","ND","47.15096","-96.96482","-6","1" +"58038","Grandin","ND","47.251489","-96.98522","-6","1" +"58039","Great Bend","ND","46.153098","-96.80909","-6","1" +"58040","Gwinner","ND","46.214772","-97.66923","-6","1" +"58041","Hankinson","ND","46.052141","-96.91067","-6","1" +"58042","Harwood","ND","46.984696","-96.9327","-6","1" +"58043","Havana","ND","45.979819","-97.57406","-6","1" +"58045","Hillsboro","ND","47.389215","-97.05327","-6","1" +"58046","Hope","ND","47.293363","-97.75338","-6","1" +"58047","Horace","ND","46.724294","-96.8728","-6","1" +"58048","Hunter","ND","47.198818","-97.21831","-6","1" +"58049","Kathryn","ND","46.657292","-97.98732","-6","1" +"58051","Kindred","ND","46.634764","-97.02012","-6","1" +"58052","Leonard","ND","46.650902","-97.28313","-6","1" +"58053","Lidgerwood","ND","46.067238","-97.18736","-6","1" +"58054","Lisbon","ND","46.43383","-97.67678","-6","1" +"58056","Luverne","ND","47.252754","-97.93864","-6","1" +"58057","Mcleod","ND","46.451477","-97.24848","-6","1" +"58058","Mantador","ND","46.167324","-96.98251","-6","1" +"58059","Mapleton","ND","46.839654","-97.12241","-6","1" +"58060","Milnor","ND","46.253432","-97.44507","-6","1" +"58061","Mooreton","ND","46.27338","-96.88178","-6","1" +"58062","Nome","ND","46.669107","-97.81842","-6","1" +"58063","Oriska","ND","46.947243","-97.81827","-6","1" +"58064","Page","ND","47.151891","-97.60401","-6","1" +"58065","Pillsbury","ND","46.650741","-98.195722","-6","1" +"58067","Rutland","ND","46.072821","-97.49872","-6","1" +"58068","Sheldon","ND","46.564908","-97.43763","-6","1" +"58069","Stirum","ND","46.232799","-97.85092","-6","1" +"58071","Tower City","ND","46.930679","-97.68708","-6","1" +"58072","Valley City","ND","46.934311","-98.02374","-6","1" +"58074","Wahpeton","ND","46.283291","-96.917614","-6","1" +"58075","Wahpeton","ND","46.28232","-96.68494","-6","1" +"58076","Wahpeton","ND","46.271839","-96.608142","-6","1" +"58077","Walcott","ND","46.533488","-96.93756","-6","1" +"58078","West Fargo","ND","46.875367","-96.90503","-6","1" +"58079","Wheatland","ND","46.883504","-97.35616","-6","1" +"58081","Wyndmere","ND","46.282064","-97.13477","-6","1" +"58102","Fargo","ND","46.900348","-96.80016","-6","1" +"58103","Fargo","ND","46.860864","-96.81602","-6","1" +"58104","Fargo","ND","46.812118","-96.839","-6","1" +"58105","Fargo","ND","46.9414","-96.967371","-6","1" +"58106","Fargo","ND","46.934596","-97.229718","-6","1" +"58107","Fargo","ND","46.934596","-97.229718","-6","1" +"58108","Fargo","ND","46.934596","-97.229718","-6","1" +"58109","Fargo","ND","46.82352","-96.8148","-6","1" +"58121","Fargo","ND","46.934596","-97.229718","-6","1" +"58122","Fargo","ND","46.934596","-97.229718","-6","1" +"58123","Fargo","ND","46.934596","-97.229718","-6","1" +"58124","Fargo","ND","46.934596","-97.229718","-6","1" +"58125","Fargo","ND","46.934596","-97.229718","-6","1" +"58126","Fargo","ND","46.934596","-97.229718","-6","1" +"58201","Grand Forks","ND","47.899217","-97.05896","-6","1" +"58202","Grand Forks","ND","47.920679","-97.07228","-6","1" +"58203","Grand Forks","ND","47.938898","-97.08401","-6","1" +"58204","Grand Forks AFB","ND","47.943847","-97.37255","-6","1" +"58205","Grand Forks AFB","ND","47.933481","-97.394446","-6","1" +"58206","Grand Forks","ND","47.933481","-97.394446","-6","1" +"58207","Grand Forks","ND","47.933481","-97.394446","-6","1" +"58208","Grand Forks","ND","47.933481","-97.394446","-6","1" +"58210","Adams","ND","48.391059","-98.11173","-6","1" +"58212","Aneta","ND","47.694","-97.99703","-6","1" +"58213","Ardoch","ND","48.204374","-97.30774","-6","1" +"58214","Arvilla","ND","47.930777","-97.49066","-6","1" +"58216","Bathgate","ND","48.883906","-97.4489","-6","1" +"58218","Buxton","ND","47.592267","-97.07503","-6","1" +"58219","Caledonia","ND","47.472415","-96.8887","-6","1" +"58220","Cavalier","ND","48.797042","-97.69887","-6","1" +"58222","Crystal","ND","48.62293","-97.67862","-6","1" +"58223","Cummings","ND","47.505171","-97.05906","-6","1" +"58224","Dahlen","ND","48.173113","-97.95766","-6","1" +"58225","Drayton","ND","48.593133","-97.22272","-6","1" +"58227","Edinburg","ND","48.527038","-97.90612","-6","1" +"58228","Emerado","ND","47.882652","-97.35564","-6","1" +"58229","Fairdale","ND","48.497876","-98.23678","-6","1" +"58230","Finley","ND","47.475797","-97.80427","-6","1" +"58231","Fordville","ND","48.214268","-97.82544","-6","1" +"58233","Forest River","ND","48.228707","-97.52498","-6","1" +"58234","Brantford","SD","47.889186","-98.125687","-6","1" +"58235","Gilby","ND","48.084335","-97.47238","-6","1" +"58236","Glasston","ND","48.714076","-97.44741","-6","1" +"58237","Grafton","ND","48.415911","-97.4096","-6","1" +"58238","Hamilton","ND","48.782885","-97.4149","-6","1" +"58239","Hannah","ND","48.950929","-98.66921","-6","1" +"58240","Hatton","ND","47.631","-97.48511","-6","1" +"58241","Hensel","ND","48.710208","-97.69893","-6","1" +"58243","Hoople","ND","48.515762","-97.66385","-6","1" +"58244","Inkster","ND","48.144073","-97.63321","-6","1" +"58249","Langdon","ND","48.811921","-98.31033","-6","1" +"58250","Lankin","ND","48.288615","-98.00082","-6","1" +"58251","Larimore","ND","47.942137","-97.67455","-6","1" +"58254","Mcville","ND","47.765244","-98.16357","-6","1" +"58255","Maida","ND","48.999101","-98.35241","-6","1" +"58256","Manvel","ND","48.083218","-97.18994","-6","1" +"58257","Mayville","ND","47.490878","-97.29392","-6","1" +"58258","Mekinock","ND","48.008825","-97.35424","-6","1" +"58259","Michigan","ND","48.052404","-98.12379","-6","1" +"58260","Milton","ND","48.622954","-98.05162","-6","1" +"58261","Minto","ND","48.288316","-97.28711","-6","1" +"58262","Mountain","ND","48.689123","-97.86695","-6","1" +"58265","Neche","ND","48.956342","-97.59021","-6","1" +"58266","Niagara","ND","48.000075","-97.85041","-6","1" +"58267","Northwood","ND","47.76354","-97.59279","-6","1" +"58269","Osnabrock","ND","48.695247","-98.17672","-6","1" +"58270","Park River","ND","48.39642","-97.78025","-6","1" +"58271","Pembina","ND","48.943042","-97.27924","-6","1" +"58272","Petersburg","ND","48.013283","-97.99298","-6","1" +"58273","Pisek","ND","48.303376","-97.69767","-6","1" +"58274","Portland","ND","47.491179","-97.46343","-6","1" +"58275","Reynolds","ND","47.67933","-97.121","-6","1" +"58276","Saint Thomas","ND","48.628551","-97.44823","-6","1" +"58277","Sharon","ND","47.608142","-97.8179","-6","1" +"58278","Thompson","ND","47.772417","-97.11074","-6","1" +"58281","Wales","ND","48.855352","-98.6171","-6","1" +"58282","Walhalla","ND","48.915739","-97.92312","-6","1" +"58293","Farmington","ND","48.528451","-97.504912","-6","1" +"58300","Poplar Grove","ND","48.10066","-98.984266","-6","1" +"58301","Devils Lake","ND","48.122688","-98.87752","-6","1" +"58310","Agate","ND","48.617378","-99.63453","-6","1" +"58311","Alsen","ND","48.637939","-98.61192","-6","1" +"58313","Balta","ND","48.165299","-100.0384","-6","1" +"58316","Belcourt","ND","48.837507","-99.76388","-6","1" +"58317","Bisbee","ND","48.628607","-99.37707","-6","1" +"58318","Bottineau","ND","48.864955","-100.41403","-6","1" +"58319","Bremen","ND","47.663508","-99.664406","-6","1" +"58320","Brinsmade","ND","48.28641","-99.404705","-6","1" +"58321","Brocket","ND","48.204745","-98.31437","-6","1" +"58323","Calvin","ND","48.849591","-98.90525","-6","1" +"58324","Cando","ND","48.485321","-99.2076","-6","1" +"58325","Churchs Ferry","ND","48.272135","-99.16654","-6","1" +"58327","Crary","ND","48.088486","-98.56277","-6","1" +"58329","Dunseith","ND","48.855835","-100.03636","-6","1" +"58330","Edmore","ND","48.427738","-98.52492","-6","1" +"58331","Egeland","ND","48.65545","-99.11415","-6","1" +"58332","Esmond","ND","48.058376","-99.77766","-6","1" +"58333","Sykeston","ND","47.580254","-99.65457","-6","1" +"58335","Fort Totten","ND","47.968523","-99.02831","-6","1" +"58337","Hamberg","ND","47.587372","-99.667737","-6","1" +"58338","Hampden","ND","48.530196","-98.641","-6","1" +"58339","Hansboro","ND","48.900063","-99.427769","-6","1" +"58341","Harvey","ND","47.767862","-99.84416","-6","1" +"58343","Knox","ND","48.311156","-99.70744","-6","1" +"58344","Lakota","ND","48.021136","-98.33502","-6","1" +"58345","Lawton","ND","48.303578","-98.33378","-6","1" +"58346","Leeds","ND","48.286717","-99.42675","-6","1" +"58348","Maddock","ND","47.955217","-99.52317","-6","1" +"58351","Minnewaukan","ND","48.100632","-99.29718","-6","1" +"58352","Munich","ND","48.696001","-98.87272","-6","1" +"58353","Mylo","ND","48.636915","-99.61665","-6","1" +"58355","Nekoma","ND","48.591846","-98.36827","-6","1" +"58356","New Rockford","ND","47.669608","-99.10553","-6","1" +"58357","Oberon","ND","47.931081","-99.22269","-6","1" +"58358","Fort Yates","ND","46.084899","-100.630803","-6","1" +"58359","Orrin","ND","48.091057","-100.1644","-6","1" +"58361","Pekin","ND","47.75436","-98.33975","-6","1" +"58362","Penn","ND","48.223375","-99.09558","-6","1" +"58363","Perth","ND","48.742513","-99.42744","-6","1" +"58365","Rocklake","ND","48.84741","-99.26643","-6","1" +"58366","Rolette","ND","48.653781","-99.91768","-6","1" +"58367","Rolla","ND","48.855873","-99.58558","-6","1" +"58368","Rugby","ND","48.273263","-100.00991","-6","1" +"58369","Saint John","ND","48.937584","-99.8055","-6","1" +"58370","Saint Michael","ND","47.994379","-98.86913","-6","1" +"58371","Grandfield","ND","47.799663","-99.211615","-6","1" +"58372","Sarles","ND","48.947387","-99.02227","-6","1" +"58374","Sheyenne","ND","47.839733","-99.07241","-6","1" +"58377","Starkweather","ND","48.478826","-98.87311","-6","1" +"58379","Tokio","ND","47.934575","-98.82459","-6","1" +"58380","Tolna","ND","47.836237","-98.51502","-6","1" +"58381","Warwick","ND","47.840223","-98.74895","-6","1" +"58382","Webster","ND","48.318106","-98.79973","-6","1" +"58384","Willow City","ND","48.609924","-100.26587","-6","1" +"58385","Wolford","ND","48.470278","-99.67497","-6","1" +"58386","York","ND","48.3223","-99.59878","-6","1" +"58401","Jamestown","ND","46.906983","-98.72826","-6","1" +"58402","Jamestown","ND","46.97882","-98.960032","-6","1" +"58405","Jamestown","ND","46.913344","-98.699553","-6","1" +"58413","Ashley","ND","46.052308","-99.27476","-6","1" +"58415","Berlin","ND","46.362812","-98.48404","-6","1" +"58416","Binford","ND","47.555709","-98.34567","-6","1" +"58418","Bowdon","ND","47.42157","-99.63946","-6","1" +"58420","Buchanan","ND","47.073601","-98.85843","-6","1" +"58421","Carrington","ND","47.450049","-99.08527","-6","1" +"58422","Cathay","ND","47.609264","-99.42568","-6","1" +"58423","Chaseley","ND","47.49417","-99.84212","-6","1" +"58424","Cleveland","ND","46.888946","-99.11315","-6","1" +"58425","Cooperstown","ND","47.446297","-98.13417","-6","1" +"58426","Courtenay","ND","47.227781","-98.58545","-6","1" +"58428","Dawson","ND","46.868175","-99.74913","-6","1" +"58429","Dazey","ND","47.201159","-98.13662","-6","1" +"58430","Denhoff","ND","47.581276","-100.27173","-6","1" +"58431","Dickey","ND","46.522016","-98.48352","-6","1" +"58432","Eckelson","ND","46.892518","-98.375536","-6","1" +"58433","Edgeley","ND","46.366866","-98.72145","-6","1" +"58436","Ellendale","ND","46.067077","-98.58044","-6","1" +"58438","Fessenden","ND","47.652764","-99.61938","-6","1" +"58439","Forbes","ND","46.014472","-98.83181","-6","1" +"58440","Fredonia","ND","46.310458","-99.13151","-6","1" +"58441","Fullerton","ND","46.163828","-98.38912","-6","1" +"58442","Gackle","ND","46.596847","-99.1616","-6","1" +"58443","Glenfield","ND","47.435273","-98.63842","-6","1" +"58444","Goodrich","ND","47.480027","-100.13717","-6","1" +"58445","Grace City","ND","47.54777","-98.80594","-6","1" +"58448","Hannaford","ND","47.31361","-98.2122","-6","1" +"58451","Hurdsfield","ND","47.456626","-99.9372","-6","1" +"58452","Jessie","ND","47.456477","-98.230415","-6","1" +"58454","Jud","ND","46.57995","-98.89748","-6","1" +"58455","Kensal","ND","47.290251","-98.75318","-6","1" +"58456","Kulm","ND","46.270766","-98.93292","-6","1" +"58458","Lamoure","ND","46.367889","-98.29376","-6","1" +"58460","Lehr","ND","46.309847","-99.32181","-6","1" +"58461","Litchville","ND","46.654622","-98.20015","-6","1" +"58463","Mcclusky","ND","47.483877","-100.48694","-6","1" +"58464","Mchenry","ND","47.583586","-98.5889","-6","1" +"58466","Marion","ND","46.611528","-98.36911","-6","1" +"58467","Medina","ND","46.867794","-99.33125","-6","1" +"58472","Montpelier","ND","46.638134","-98.63923","-6","1" +"58474","Oakes","ND","46.090506","-98.11584","-6","1" +"58475","Pettibone","ND","47.149515","-99.566","-6","1" +"58476","Pingree","ND","47.189716","-98.97328","-6","1" +"58477","Regan","ND","47.229815","-100.5398","-6","1" +"58478","Robinson","ND","47.135224","-99.74552","-6","1" +"58479","Rogers","ND","47.092093","-98.25077","-6","1" +"58480","Sanborn","ND","46.92853","-98.25936","-6","1" +"58481","Spiritwood","ND","46.947101","-98.4288","-6","1" +"58482","Steele","ND","46.862714","-99.9205","-6","1" +"58483","Streeter","ND","46.631342","-99.39898","-6","1" +"58484","Sutton","ND","47.399657","-98.44052","-6","1" +"58486","Sykeston","ND","47.435936","-99.40469","-6","1" +"58487","Tappen","ND","46.856925","-99.60568","-6","1" +"58488","Tuttle","ND","47.177348","-99.99415","-6","1" +"58489","Venturia","ND","46.0327","-99.61847","-6","1" +"58490","Verona","ND","46.368093","-98.06074","-6","1" +"58492","Wimbledon","ND","47.154922","-98.43993","-6","1" +"58494","Wing","ND","47.141711","-100.27279","-6","1" +"58495","Wishek","ND","46.278442","-99.56198","-6","1" +"58496","Woodworth","ND","47.153361","-99.31052","-6","1" +"58497","Ypsilanti","ND","46.770483","-98.56496","-6","1" +"58501","Bismarck","ND","46.83962","-100.7723","-6","1" +"58502","Bismarck","ND","46.8887","-100.681855","-6","1" +"58503","Bismarck","ND","46.861794","-100.78026","-6","1" +"58504","Bismarck","ND","46.768617","-100.75381","-6","1" +"58505","Bismarck","ND","46.82126","-100.78131","-6","1" +"58506","Bismarck","ND","46.980475","-100.520063","-6","1" +"58507","Bismarck","ND","46.980475","-100.520063","-6","1" +"58520","Almont","ND","46.657221","-101.53747","-6","1" +"58521","Baldwin","ND","47.03541","-100.71786","-6","1" +"58523","Beulah","ND","47.229528","-101.75965","-6","1" +"58524","Braddock","ND","46.596608","-100.09497","-6","1" +"58528","Cannon Ball","ND","46.249361","-100.63867","-6","1" +"58529","Carson","ND","46.320916","-101.60406","-7","1" +"58530","Center","ND","47.133382","-101.18309","-6","1" +"58531","Coleharbor","ND","47.575888","-101.19002","-6","1" +"58532","Driscoll","ND","46.86485","-100.10694","-6","1" +"58533","Elgin","ND","46.408171","-101.82853","-7","1" +"58535","Flasher","ND","46.501898","-101.24737","-6","1" +"58538","Fort Yates","ND","46.062798","-100.72114","-6","1" +"58540","Garrison","ND","47.646187","-101.52739","-6","1" +"58541","Golden Valley","ND","47.396933","-102.08106","-7","1" +"58542","Hague","ND","46.05082","-100.03576","-6","1" +"58544","Hazelton","ND","46.488312","-100.29283","-6","1" +"58545","Hazen","ND","47.290543","-101.61207","-7","1" +"58549","Kintyre","ND","46.467732","-99.93796","-6","1" +"58552","Linton","ND","46.257466","-100.23833","-6","1" +"58553","Mckenzie","ND","46.814568","-100.40137","-6","1" +"58554","Mandan","ND","46.812148","-100.90891","-6","1" +"58558","Menoken","ND","46.813571","-100.53101","-6","1" +"58559","Mercer","ND","47.429223","-100.72662","-6","1" +"58560","Moffit","ND","46.677294","-100.28185","-6","1" +"58561","Napoleon","ND","46.477491","-99.71689","-6","1" +"58562","New Leipzig","ND","46.346028","-102.0077","-7","1" +"58563","New Salem","ND","46.909229","-101.4391","-6","1" +"58564","Raleigh","ND","46.291855","-101.34592","-7","1" +"58565","Riverdale","ND","47.494559","-101.37668","-6","1" +"58566","Saint Anthony","ND","46.59174","-100.93332","-6","1" +"58568","Selfridge","ND","46.155222","-100.94635","-6","1" +"58569","Shields","ND","46.258711","-101.17563","-7","1" +"58570","Solen","ND","46.421762","-100.93017","-6","1" +"58571","Stanton","ND","47.281472","-101.37642","-7","1" +"58572","Sterling","ND","46.885406","-100.30355","-6","1" +"58573","Strasburg","ND","46.094998","-100.24342","-6","1" +"58575","Turtle Lake","ND","47.543706","-100.87466","-6","1" +"58576","Underwood","ND","47.446392","-101.15667","-6","1" +"58577","Washburn","ND","47.302682","-101.04618","-6","1" +"58579","Wilton","ND","47.178883","-100.76","-6","1" +"58580","Zap","ND","47.281173","-101.9254","-7","1" +"58581","Zeeland","ND","46.014164","-99.83606","-6","1" +"58601","Dickinson","ND","46.878057","-102.8041","-7","1" +"58602","Dickinson","ND","46.820185","-102.663913","-7","1" +"58620","Amidon","ND","46.486096","-103.31682","-7","1" +"58621","Beach","ND","47.077257","-103.93051","-7","1" +"58622","Belfield","ND","46.922727","-103.21389","-7","1" +"58623","Bowman","ND","46.182799","-103.40453","-7","1" +"58625","Dodge","ND","47.252561","-102.18789","-7","1" +"58626","Dunn Center","ND","47.346329","-102.61222","-7","1" +"58627","Fairfield","ND","47.219032","-103.23327","-7","1" +"58630","Gladstone","ND","46.860364","-102.56782","-7","1" +"58631","Glen Ullin","ND","46.759443","-101.83368","-6","1" +"58632","Golva","ND","46.713628","-103.94995","-7","1" +"58634","Grassy Butte","ND","47.393108","-103.36899","-7","1" +"58636","Halliday","ND","47.371929","-102.34345","-7","1" +"58638","Hebron","ND","46.877355","-102.0497","-6","1" +"58639","Hettinger","ND","46.043733","-102.60353","-7","1" +"58640","Killdeer","ND","47.411564","-102.82766","-7","1" +"58641","Lefor","ND","46.666229","-102.48549","-7","1" +"58642","Manning","ND","47.151337","-102.82216","-7","1" +"58643","Marmarth","ND","46.2715","-103.93203","-7","1" +"58644","Marshall","ND","47.402085","-102.622139","-7","1" +"58645","Medora","ND","46.92752","-103.56872","-7","1" +"58646","Mott","ND","46.379559","-102.28758","-7","1" +"58647","New England","ND","46.511555","-102.8735","-7","1" +"58649","Reeder","ND","46.140764","-102.92304","-7","1" +"58650","Regent","ND","46.405798","-102.60398","-7","1" +"58651","Rhame","ND","46.329565","-103.68539","-7","1" +"58652","Richardton","ND","46.891017","-102.28356","-7","1" +"58653","Scranton","ND","46.172025","-103.09161","-7","1" +"58654","Sentinel Butte","ND","46.85992","-103.78322","-7","1" +"58655","South Heart","ND","46.808668","-103.03364","-7","1" +"58656","Taylor","ND","46.975615","-102.46219","-7","1" +"58673","Dodge","ND","47.304598","-102.203219","-7","1" +"58701","Minot","ND","48.19983","-101.28579","-6","1" +"58702","Minot","ND","48.336898","-101.451285","-6","1" +"58703","Minot","ND","48.277024","-101.31942","-6","1" +"58704","Minot AFB","ND","48.41647","-101.3274","-6","1" +"58705","Minot AFB","ND","48.234184","-101.297161","-6","1" +"58707","Minot","ND","48.245267","-101.301179","-6","1" +"58710","Anamoose","ND","47.87756","-100.23677","-6","1" +"58711","Antler","ND","48.94424","-101.28912","-6","1" +"58712","Balfour","ND","47.985515","-100.53158","-6","1" +"58713","Bantry","ND","48.552669","-100.63594","-6","1" +"58716","Benedict","ND","47.82781","-101.08118","-6","1" +"58718","Berthold","ND","48.327365","-101.81878","-6","1" +"58721","Bowbells","ND","48.811975","-102.27362","-6","1" +"58722","Burlington","ND","48.251187","-101.47331","-6","1" +"58723","Butte","ND","47.785232","-100.69257","-6","1" +"58725","Carpio","ND","48.466756","-101.70175","-6","1" +"58727","Columbus","ND","48.844129","-102.80485","-6","1" +"58730","Crosby","ND","48.889528","-103.32304","-6","1" +"58731","Deering","ND","48.422289","-100.98409","-6","1" +"58733","Des Lacs","ND","48.171782","-101.60981","-6","1" +"58734","Donnybrook","ND","48.506446","-101.96379","-6","1" +"58735","Douglas","ND","47.869756","-101.49673","-6","1" +"58736","Drake","ND","47.916124","-100.38123","-6","1" +"58737","Flaxton","ND","48.917722","-102.40401","-6","1" +"58740","Glenburn","ND","48.485288","-101.22156","-6","1" +"58741","Granville","ND","48.269326","-100.82468","-6","1" +"58744","Karlsruhe","ND","48.102064","-100.61537","-6","1" +"58746","Kenmare","ND","48.719925","-102.08301","-6","1" +"58747","Kief","ND","47.808989","-100.51007","-6","1" +"58748","Kramer","ND","48.687522","-100.6606","-6","1" +"58750","Lansford","ND","48.611257","-101.4194","-6","1" +"58752","Lignite","ND","48.845965","-102.57917","-6","1" +"58755","Mcgregor","ND","48.632655","-102.93658","-6","1" +"58756","Makoti","ND","47.962814","-101.81113","-6","1" +"58757","Mandaree","ND","47.702563","-102.58745","-6","1" +"58758","Martin","ND","47.781908","-100.10165","-6","1" +"58759","Max","ND","47.855591","-101.26056","-6","1" +"58760","Maxbass","ND","48.686244","-101.15787","-6","1" +"58761","Mohall","ND","48.770684","-101.55153","-6","1" +"58762","Newburg","ND","48.671806","-100.96154","-6","1" +"58763","New Town","ND","47.983034","-102.54126","-6","1" +"58764","Clay","ND","48.676056","-101.53884","-6","1" +"58765","Noonan","ND","48.857983","-103.03833","-6","1" +"58768","Norwich","ND","48.250987","-101.00165","-6","1" +"58769","Palermo","ND","48.330437","-102.23239","-6","1" +"58770","Parshall","ND","47.927133","-102.13973","-6","1" +"58771","Plaza","ND","48.073998","-101.9763","-6","1" +"58772","Portal","ND","48.973939","-102.60078","-6","1" +"58773","Powers Lake","ND","48.574749","-102.65064","-6","1" +"58775","Roseglen","ND","47.710089","-101.84406","-6","1" +"58776","Ross","ND","48.24767","-102.62331","-6","1" +"58778","Ruso","ND","47.783028","-100.93423","-6","1" +"58779","Ryder","ND","47.811566","-101.86084","-6","1" +"58781","Sawyer","ND","48.037844","-101.09637","-6","1" +"58782","Sherwood","ND","48.944324","-101.72643","-6","1" +"58783","Souris","ND","48.900962","-100.76402","-6","1" +"58784","Stanley","ND","48.366981","-102.4235","-6","1" +"58785","Surrey","ND","48.271451","-101.11174","-6","1" +"58787","Tolley","ND","48.76715","-101.81935","-6","1" +"58788","Towner","ND","48.363285","-100.47477","-6","1" +"58789","Upham","ND","48.567655","-100.80621","-6","1" +"58790","Velva","ND","48.053192","-100.93425","-6","1" +"58792","Voltaire","ND","47.971295","-100.76841","-6","1" +"58793","Westhope","ND","48.871815","-101.04936","-6","1" +"58794","White Earth","ND","48.298407","-102.76645","-6","1" +"58795","Wildrose","ND","48.64055","-103.15693","-6","1" +"58801","Williston","ND","48.20496","-103.71908","-6","1" +"58802","Williston","ND","48.168836","-103.614824","-6","1" +"58830","Alamo","ND","48.586475","-103.46708","-6","1" +"58831","Alexander","ND","47.826449","-103.65916","-6","1" +"58832","Westby","ND","48.843926","-103.924225","-6","1" +"58833","Ambrose","ND","48.894491","-103.51215","-6","1" +"58835","Arnegard","ND","47.73943","-103.46564","-6","1" +"58838","Cartwright","ND","47.83202","-103.886","-7","1" +"58843","Epping","ND","48.278037","-103.39021","-6","1" +"58844","Fortuna","ND","48.894636","-103.75867","-6","1" +"58845","Grenora","ND","48.629988","-103.93903","-6","1" +"58847","Keene","ND","47.8845","-102.90911","-6","1" +"58849","Ray","ND","48.326813","-103.19462","-6","1" +"58852","Tioga","ND","48.388509","-102.94589","-6","1" +"58853","Trenton","ND","48.069085","-103.84342","-6","1" +"58854","Watford City","ND","47.835713","-103.22565","-6","1" +"58856","Zahl","ND","48.567291","-103.71711","-6","1" +"58888","Garrison","ND","47.612579","-101.304214","-6","1" +"58982","Colquhoun","ND","48.986763","-101.69363","-6","1" +"59000","Roundup","MT","46.506905","-108.289304","-7","1" +"59001","Absarokee","MT","45.522248","-109.48875","-7","1" +"59002","Acton","MT","45.932174","-108.68933","-7","1" +"59003","Ashland","MT","45.486308","-106.33169","-7","1" +"59004","Ashland","MT","46.017965","-106.99199","-7","1" +"59006","Ballantine","MT","45.947154","-108.0969","-7","1" +"59007","Bearcreek","MT","45.159808","-109.14649","-7","1" +"59008","Belfry","MT","45.103044","-109.06992","-7","1" +"59010","Bighorn","MT","45.949226","-107.2284","-7","1" +"59011","Big Timber","MT","45.883409","-109.91891","-7","1" +"59012","Birney","MT","45.351247","-106.58858","-7","1" +"59013","Boyd","MT","45.464156","-109.11927","-7","1" +"59014","Bridger","MT","45.242325","-108.73073","-7","1" +"59015","Broadview","MT","46.096447","-108.83134","-7","1" +"59016","Busby","MT","45.457795","-106.97057","-7","1" +"59018","Clyde Park","MT","45.894359","-110.61105","-7","1" +"59019","Columbus","MT","45.602343","-109.2671","-7","1" +"59020","Cooke City","MT","45.058868","-109.90084","-7","1" +"59022","Crow Agency","MT","45.613564","-107.37805","-7","1" +"59024","Custer","MT","46.095217","-107.6318","-7","1" +"59025","Decker","MT","45.090049","-106.69221","-7","1" +"59026","Edgar","MT","45.430445","-108.76441","-7","1" +"59027","Emigrant","MT","45.310206","-110.8895","-7","1" +"59028","Fishtail","MT","45.373162","-109.64134","-7","1" +"59029","Fromberg","MT","45.391138","-108.89916","-7","1" +"59030","Gardiner","MT","45.145353","-110.60771","-7","1" +"59031","Garryowen","MT","45.521423","-107.42566","-7","1" +"59032","Grass Range","MT","47.041005","-108.80868","-7","1" +"59033","Greycliff","MT","45.734139","-109.77529","-7","1" +"59034","Hardin","MT","45.780451","-107.63987","-7","1" +"59035","Yellowtail","MT","45.224859","-107.98299","-7","1" +"59036","Harlowton","MT","46.435446","-109.86994","-7","1" +"59037","Huntley","MT","45.862261","-108.29474","-7","1" +"59038","Hysham","MT","46.208375","-107.22415","-7","1" +"59039","Ingomar","MT","46.69244","-107.6368","-7","1" +"59041","Joliet","MT","45.505519","-108.92119","-7","1" +"59043","Lame Deer","MT","45.585984","-106.63862","-7","1" +"59044","Laurel","MT","45.665424","-108.75601","-7","1" +"59046","Lavina","MT","46.418078","-109.03637","-7","1" +"59047","Livingston","MT","45.674463","-110.53834","-7","1" +"59050","Lodge Grass","MT","45.272302","-107.45873","-7","1" +"59052","McLeod","MT","45.550177","-110.05667","-7","1" +"59053","Martinsdale","MT","46.491523","-110.50499","-7","1" +"59054","Melstone","MT","46.56503","-107.9138","-7","1" +"59055","Melville","MT","46.13263","-109.89746","-7","1" +"59057","Molt","MT","45.846359","-108.95391","-7","1" +"59058","Mosby","MT","47.05992","-107.80028","-7","1" +"59059","Musselshell","MT","46.455469","-108.0903","-7","1" +"59061","Nye","MT","45.45236","-109.83681","-7","1" +"59062","Otter","MT","45.154425","-106.13017","-7","1" +"59063","Park City","MT","45.622948","-108.96","-7","1" +"59064","Pompeys Pillar","MT","45.903794","-107.92181","-7","1" +"59065","Pray","MT","45.336151","-110.75099","-7","1" +"59066","Pryor","MT","45.353002","-108.49163","-7","1" +"59067","Rapelje","MT","45.951002","-109.28883","-7","1" +"59068","Red Lodge","MT","45.241761","-109.32217","-7","1" +"59069","Reed Point","MT","45.708186","-109.54126","-7","1" +"59070","Roberts","MT","45.352866","-109.17158","-7","1" +"59071","Roscoe","MT","45.343978","-109.50168","-7","1" +"59072","Roundup","MT","46.53932","-108.53775","-7","1" +"59073","Roundup","MT","46.444224","-108.395473","-7","1" +"59074","Ryegate","MT","46.367286","-109.27608","-7","1" +"59075","Saint Xavier","MT","45.395656","-107.93409","-7","1" +"59076","Sanders","MT","46.2644","-107.07438","-7","1" +"59077","Sand Springs","MT","47.130621","-107.52697","-7","1" +"59078","Shawmut","MT","46.383158","-109.49616","-7","1" +"59079","Shepherd","MT","46.001031","-108.3527","-7","1" +"59081","Silver Gate","MT","45.006307","-109.98238","-7","1" +"59082","Springdale","MT","45.33333","-110.477384","-7","1" +"59083","Sumatra","MT","46.017965","-106.99199","-7","1" +"59084","Teigen","MT","47.173641","-108.281168","-7","1" +"59085","Two Dot","MT","46.501026","-110.14681","-7","1" +"59086","Wilsall","MT","46.075387","-110.57954","-7","1" +"59087","Winnett","MT","47.000478","-108.29005","-7","1" +"59088","Worden","MT","46.059495","-108.0755","-7","1" +"59089","Wyola","MT","45.076746","-107.44633","-7","1" +"59101","Billings","MT","45.737525","-108.48754","-7","1" +"59102","Billings","MT","45.778852","-108.5742","-7","1" +"59103","Billings","MT","45.978288","-108.194508","-7","1" +"59104","Billings","MT","45.978288","-108.194508","-7","1" +"59105","Billings","MT","45.836121","-108.46819","-7","1" +"59106","Billings","MT","45.777818","-108.66944","-7","1" +"59107","Billings","MT","45.825204","-108.393388","-7","1" +"59108","Billings","MT","45.978288","-108.194508","-7","1" +"59111","Billings","MT","45.978288","-108.194508","-7","1" +"59112","Billings","MT","45.978288","-108.194508","-7","1" +"59114","Billings","MT","45.978288","-108.194508","-7","1" +"59115","Billings","MT","45.978288","-108.194508","-7","1" +"59116","Billings","MT","45.978288","-108.194508","-7","1" +"59117","Billings","MT","45.978288","-108.194508","-7","1" +"59201","Wolf Point","MT","48.126066","-105.65893","-7","1" +"59211","Antelope","MT","48.695994","-104.35503","-7","1" +"59212","Bainville","MT","48.1154","-104.19036","-7","1" +"59213","Brockton","MT","48.132347","-104.88114","-7","1" +"59214","Brockway","MT","47.274624","-105.84727","-7","1" +"59215","Circle","MT","47.520661","-105.8743","-7","1" +"59217","Crane","MT","47.577478","-104.25806","-7","1" +"59218","Culbertson","MT","48.132161","-104.51429","-7","1" +"59219","Dagmar","MT","48.519946","-104.25492","-7","1" +"59221","Fairview","MT","47.900376","-104.13403","-7","1" +"59222","Flaxville","MT","48.739987","-105.15836","-7","1" +"59223","Fort Peck","MT","48.006744","-106.46104","-7","1" +"59225","Frazer","MT","48.202722","-105.96719","-7","1" +"59226","Froid","MT","48.317939","-104.44433","-7","1" +"59230","Glasgow","MT","48.15381","-106.69558","-7","1" +"59231","Saint Marie","MT","48.404667","-106.53357","-7","1" +"59240","Glentana","MT","48.330241","-106.609665","-7","1" +"59241","Hinsdale","MT","48.39962","-107.09765","-7","1" +"59242","Homestead","MT","48.40892","-104.70869","-7","1" +"59243","Lambert","MT","47.71754","-104.63734","-7","1" +"59244","Larslan","MT","48.599534","-106.33328","-7","1" +"59245","McCabe","MT","48.280119","-104.94413","-7","1" +"59247","Medicine Lake","MT","48.503927","-104.48487","-7","1" +"59248","Nashua","MT","48.13336","-106.33547","-7","1" +"59250","Opheim","MT","48.860359","-106.47675","-7","1" +"59252","Outlook","MT","48.893223","-104.7741","-7","1" +"59253","Peerless","MT","48.730966","-105.85564","-7","1" +"59254","Plentywood","MT","48.77466","-104.56769","-7","1" +"59255","Poplar","MT","48.136011","-105.16175","-7","1" +"59256","Raymond","MT","48.694565","-104.552352","-7","1" +"59257","Redstone","MT","48.750625","-104.96702","-7","1" +"59258","Reserve","MT","48.591968","-104.61326","-7","1" +"59259","Richey","MT","47.777938","-105.04227","-7","1" +"59260","Richland","MT","48.717859","-106.07899","-7","1" +"59261","Saco","MT","48.544159","-107.40301","-7","1" +"59262","Savage","MT","47.463172","-104.36846","-7","1" +"59263","Scobey","MT","48.809655","-105.45829","-7","1" +"59270","Sidney","MT","47.683129","-104.20547","-7","1" +"59273","Vandalia","MT","48.330241","-106.609665","-7","1" +"59274","Vida","MT","47.859083","-105.35001","-7","1" +"59275","Westby","MT","48.887447","-104.20951","-7","1" +"59276","Whitetail","MT","48.897816","-105.16316","-7","1" +"59301","Miles City","MT","46.343483","-105.81164","-7","1" +"59311","Alzada","MT","45.189905","-104.38569","-7","1" +"59312","Angela","MT","46.017965","-106.99199","-7","1" +"59313","Baker","MT","46.357253","-104.25299","-7","1" +"59314","Biddle","MT","45.078881","-105.37586","-7","1" +"59315","Bloomfield","MT","47.441629","-104.86652","-7","1" +"59316","Boyes","MT","45.567085","-104.539066","-7","1" +"59317","Broadus","MT","45.385223","-105.34448","-7","1" +"59318","Brusett","MT","47.426998","-107.44215","-7","1" +"59319","Capitol","MT","45.567085","-104.539066","-7","1" +"59322","Cohagen","MT","47.049949","-106.58157","-7","1" +"59323","Colstrip","MT","45.915952","-106.65505","-7","1" +"59324","Ekalaka","MT","45.797477","-104.47482","-7","1" +"59326","Fallon","MT","46.810255","-105.04391","-7","1" +"59327","Forsyth","MT","46.077231","-106.68186","-7","1" +"59330","Glendive","MT","47.107345","-104.72683","-7","1" +"59332","Hammond","MT","45.386374","-104.75677","-7","1" +"59333","Hathaway","MT","46.271872","-106.21374","-7","1" +"59336","Ismay","MT","46.429205","-104.94036","-7","1" +"59337","Jordan","MT","47.349999","-106.95207","-7","1" +"59338","Kinsey","MT","46.579645","-105.62183","-7","1" +"59339","Lindsay","MT","47.253136","-105.19476","-7","1" +"59341","Mildred","MT","46.860997","-105.345182","-7","1" +"59343","Olive","MT","45.666174","-105.47959","-7","1" +"59344","Plevna","MT","46.43208","-104.61063","-7","1" +"59345","Powderville","MT","45.391078","-105.630461","-7","1" +"59347","Rosebud","MT","46.632549","-106.39641","-7","1" +"59348","Sonnette","MT","45.365698","-105.95632","-7","1" +"59349","Terry","MT","46.897901","-105.46339","-7","1" +"59351","Volborg","MT","45.942409","-105.71211","-7","1" +"59353","Wibaux","MT","46.969132","-104.19232","-7","1" +"59354","Willard","MT","46.127895","-104.45228","-7","1" +"59400","Shelby","MT","48.643651","-111.745326","-7","1" +"59401","Great Falls","MT","47.509157","-111.27408","-7","1" +"59402","Malmstrom A F B","MT","47.510209","-111.195906","-7","1" +"59403","Great Falls","MT","47.258392","-111.341975","-7","1" +"59404","Great Falls","MT","47.514307","-111.34499","-7","1" +"59405","Great Falls","MT","47.476152","-111.26909","-7","1" +"59406","Great Falls","MT","47.619998","-111.239305","-7","1" +"59410","Augusta","MT","47.503261","-112.48018","-7","1" +"59411","Babb","MT","48.871429","-113.43734","-7","1" +"59412","Belt","MT","47.351391","-110.86564","-7","1" +"59414","Black Eagle","MT","47.526385","-111.27845","-7","1" +"59416","Brady","MT","48.037351","-111.66825","-7","1" +"59417","Browning","MT","48.556986","-113.0698","-7","1" +"59418","Buffalo","MT","47.248497","-109.26308","-7","1" +"59419","Bynum","MT","48.007556","-112.32535","-7","1" +"59420","Carter","MT","47.834943","-110.98801","-7","1" +"59421","Cascade","MT","47.223693","-111.70821","-7","1" +"59422","Choteau","MT","47.840047","-112.35083","-7","1" +"59424","Coffee Creek","MT","47.383325","-110.02055","-7","1" +"59425","Conrad","MT","48.190331","-111.96872","-7","1" +"59427","Cut Bank","MT","48.680309","-112.47009","-7","1" +"59430","Denton","MT","47.316304","-109.96291","-7","1" +"59432","Dupuyer","MT","48.177132","-112.61804","-7","1" +"59433","Dutton","MT","47.895071","-111.77961","-7","1" +"59434","East Glacier Park","MT","48.424793","-113.20424","-7","1" +"59435","Ethridge","MT","48.609072","-111.731852","-7","1" +"59436","Fairfield","MT","47.624913","-112.03006","-7","1" +"59440","Floweree","MT","47.696452","-111.15265","-7","1" +"59441","Forestgrove","MT","46.906403","-109.09551","-7","1" +"59442","Fort Benton","MT","47.83055","-110.64869","-7","1" +"59443","Fort Shaw","MT","47.547517","-111.82545","-7","1" +"59444","Galata","MT","48.635319","-111.24083","-7","1" +"59445","Garneill","MT","47.055715","-109.468299","-7","1" +"59446","Geraldine","MT","47.661952","-110.1846","-7","1" +"59447","Geyser","MT","47.268612","-110.44229","-7","1" +"59448","Heart Butte","MT","48.309341","-112.81115","-7","1" +"59450","Highwood","MT","47.530558","-110.57208","-7","1" +"59451","Hilger","MT","47.468715","-109.35624","-7","1" +"59452","Hobson","MT","46.883052","-110.09673","-7","1" +"59453","Judith Gap","MT","46.678858","-109.64119","-7","1" +"59454","Kevin","MT","48.744885","-111.97141","-7","1" +"59456","Ledger","MT","48.281911","-111.30771","-7","1" +"59457","Lewistown","MT","47.054233","-109.48065","-7","1" +"59460","Loma","MT","48.008655","-110.47512","-7","1" +"59461","Lothair","MT","48.609072","-111.731852","-7","1" +"59462","Moccasin","MT","47.089167","-109.91488","-7","1" +"59463","Monarch","MT","47.057303","-110.84279","-7","1" +"59464","Moore","MT","46.956343","-109.7023","-7","1" +"59465","Neihart","MT","46.926021","-110.71696","-7","1" +"59466","Oilmont","MT","48.842195","-111.59529","-7","1" +"59467","Pendroy","MT","48.093269","-112.30254","-7","1" +"59468","Power","MT","47.69094","-111.63998","-7","1" +"59469","Raynesford","MT","47.261238","-110.725","-7","1" +"59471","Roy","MT","47.377169","-108.84397","-7","1" +"59472","Sand Coulee","MT","47.409591","-111.13517","-7","1" +"59473","Santa Rita","MT","48.65417","-113.126262","-7","1" +"59474","Shelby","MT","48.479975","-111.76863","-7","1" +"59477","Simms","MT","47.459112","-111.96711","-7","1" +"59479","Stanford","MT","47.104848","-110.26076","-7","1" +"59480","Stockett","MT","47.188396","-111.16349","-7","1" +"59482","Sunburst","MT","48.881178","-111.91516","-7","1" +"59483","Sun River","MT","47.465072","-111.79735","-7","1" +"59484","Sweet Grass","MT","48.979905","-111.92471","-7","1" +"59485","Ulm","MT","47.429273","-111.59357","-7","1" +"59486","Valier","MT","48.336146","-112.31498","-7","1" +"59487","Vaughn","MT","47.577613","-111.60477","-7","1" +"59489","Winifred","MT","47.065531","-109.430106","-7","1" +"59500","Havre","MT","48.555536","-109.68953","-7","1" +"59501","Havre","MT","48.584562","-109.78365","-7","1" +"59520","Big Sandy","MT","48.141017","-110.06828","-7","1" +"59521","Box Elder","MT","48.321712","-109.9578","-7","1" +"59522","Chester","MT","48.487928","-111.00381","-7","1" +"59523","Chinook","MT","48.485856","-109.17406","-7","1" +"59524","Dodson","MT","48.148715","-108.37109","-7","1" +"59525","Gildford","MT","48.733088","-110.32495","-7","1" +"59526","Harlem","MT","48.483212","-108.72208","-7","1" +"59527","Hays","MT","48.023133","-108.69955","-7","1" +"59528","Hingham","MT","48.555089","-110.41769","-7","1" +"59529","Hogeland","MT","48.843446","-108.73813","-7","1" +"59530","Inverness","MT","48.631693","-110.67384","-7","1" +"59531","Joplin","MT","48.675352","-110.8269","-7","1" +"59532","Kremlin","MT","48.597362","-110.077","-7","1" +"59535","Lloyd","MT","48.031253","-109.28416","-7","1" +"59537","Loring","MT","48.817553","-107.87318","-7","1" +"59538","Malta","MT","48.235694","-107.80711","-7","1" +"59540","Rudyard","MT","48.525132","-110.54993","-7","1" +"59542","Turner","MT","48.824171","-108.44428","-7","1" +"59544","Whitewater","MT","48.751881","-107.61505","-7","1" +"59545","Whitlash","MT","48.962291","-111.16737","-7","1" +"59546","Zortman","MT","47.896703","-108.54135","-7","1" +"59547","Zurich","MT","48.607955","-109.01285","-7","1" +"59601","Helena","MT","46.588803","-112.04193","-7","1" +"59602","Helena","MT","46.696501","-111.96895","-7","1" +"59604","Helena","MT","46.6672","-111.968877","-7","1" +"59620","Helena","MT","47.184233","-112.330214","-7","1" +"59623","Helena","MT","46.590083","-112.040173","-7","1" +"59624","Helena","MT","46.610002","-112.062393","-7","1" +"59625","Helena","MT","46.601832","-112.041346","-7","1" +"59626","Helena","MT","47.184233","-112.330214","-7","1" +"59631","Basin","MT","46.231547","-112.34456","-7","1" +"59632","Boulder","MT","46.205729","-112.06748","-7","1" +"59633","Canyon Creek","MT","46.818147","-112.3409","-7","1" +"59634","Clancy","MT","46.479732","-111.97496","-7","1" +"59635","East Helena","MT","46.578943","-111.8821","-7","1" +"59636","Fort Harrison","MT","46.620549","-112.10446","-7","1" +"59638","Jefferson City","MT","46.376532","-112.14074","-7","1" +"59639","Lincoln","MT","46.973643","-112.62547","-7","1" +"59640","Marysville","MT","46.748706","-112.30023","-7","1" +"59641","Radersburg","MT","46.206922","-111.634364","-7","1" +"59642","Ringling","MT","46.24656","-110.79404","-7","1" +"59643","Toston","MT","46.186442","-111.56253","-7","1" +"59644","Townsend","MT","46.394352","-111.44665","-7","1" +"59645","White Sulphur Springs","MT","46.615309","-111.01063","-7","1" +"59647","Winston","MT","46.45447","-111.650954","-7","1" +"59648","Wolf Creek","MT","47.035168","-112.09073","-7","1" +"59701","Butte","MT","45.996957","-112.51279","-7","1" +"59702","Butte","MT","45.905345","-112.637705","-7","1" +"59703","Butte","MT","45.905345","-112.637705","-7","1" +"59707","Butte","MT","45.905345","-112.637705","-7","1" +"59710","Alder","MT","45.125532","-112.12007","-7","1" +"59711","Anaconda","MT","46.141686","-112.98902","-7","1" +"59713","Avon","MT","46.650216","-112.59075","-7","1" +"59714","Belgrade","MT","45.85291","-111.18037","-7","1" +"59715","Bozeman","MT","45.707153","-110.9878","-7","1" +"59716","Big Sky","MT","45.268367","-111.32651","-7","1" +"59717","Bozeman","MT","45.627982","-110.90128","-7","1" +"59718","Bozeman","MT","45.680811","-111.137","-7","1" +"59719","Bozeman","MT","45.627982","-110.90128","-7","1" +"59720","Cameron","MT","44.99257","-111.62521","-7","1" +"59721","Cardwell","MT","45.849728","-111.86233","-7","1" +"59722","Deer Lodge","MT","46.392658","-112.7369","-7","1" +"59724","Dell","MT","45.149805","-112.70073","-7","1" +"59725","Dillon","MT","45.146179","-112.77411","-7","1" +"59727","Divide","MT","45.794048","-112.77595","-7","1" +"59728","Elliston","MT","46.481128","-112.43358","-7","1" +"59729","Ennis","MT","45.30767","-111.70176","-7","1" +"59730","Gallatin Gateway","MT","45.417898","-111.19888","-7","1" +"59731","Garrison","MT","46.565168","-112.80722","-7","1" +"59732","Glen","MT","45.149805","-112.70073","-7","1" +"59733","Gold Creek","MT","46.606751","-112.97866","-7","1" +"59735","Harrison","MT","45.688676","-111.78292","-7","1" +"59736","Jackson","MT","45.26938","-113.35533","-7","1" +"59739","Lima","MT","44.712015","-112.25568","-7","1" +"59740","McAllister","MT","45.462512","-111.76367","-7","1" +"59741","Manhattan","MT","45.810687","-111.33138","-7","1" +"59743","Melrose","MT","45.631031","-112.6757","-7","1" +"59745","Norris","MT","45.587974","-111.60577","-7","1" +"59746","Polaris","MT","45.534274","-113.17025","-7","1" +"59747","Pony","MT","45.659738","-111.88987","-7","1" +"59748","Ramsay","MT","46.025762","-112.77156","-7","1" +"59749","Sheridan","MT","45.528809","-112.1097","-7","1" +"59750","Butte","MT","45.946694","-112.6987","-7","1" +"59751","Silver Star","MT","45.681898","-112.30548","-7","1" +"59752","Three Forks","MT","45.899881","-111.53143","-7","1" +"59754","Twin Bridges","MT","45.513742","-112.4186","-7","1" +"59755","Virginia City","MT","45.296409","-111.94237","-7","1" +"59756","Warm Springs","MT","46.201464","-112.76555","-7","1" +"59758","West Yellowstone","MT","44.727561","-111.18723","-7","1" +"59759","Whitehall","MT","45.851349","-112.1695","-7","1" +"59760","Willow Creek","MT","45.782744","-111.634532","-7","1" +"59761","Wisdom","MT","45.595349","-113.61624","-7","1" +"59762","Wise River","MT","45.757767","-112.99552","-7","1" +"59771","Bozeman","MT","45.72465","-111.123775","-7","1" +"59772","Bozeman","MT","45.636149","-111.064676","-7","1" +"59773","Bozeman","MT","45.627982","-110.90128","-7","1" +"59795","Ennis","MT","45.349274","-111.735925","-7","1" +"59798","West Yellowstone","MT","44.658614","-111.099869","-7","1" +"59801","Missoula","MT","46.855423","-114.01229","-7","1" +"59802","Missoula","MT","46.896821","-113.95551","-7","1" +"59803","Missoula","MT","46.790915","-114.00439","-7","1" +"59804","Missoula","MT","46.854974","-114.10566","-7","1" +"59806","Missoula","MT","47.116034","-114.049824","-7","1" +"59807","Missoula","MT","46.910342","-113.958686","-7","1" +"59808","Missoula","MT","46.92275","-114.07639","-7","1" +"59812","Missoula","MT","47.116034","-114.049824","-7","1" +"59817","Four Corners","MT","45.652577","-111.190888","-7","1" +"59820","Alberton","MT","46.971146","-114.49692","-7","1" +"59821","Arlee","MT","47.169203","-114.05215","-7","1" +"59823","Bonner","MT","46.900409","-113.64027","-7","1" +"59824","Charlo","MT","47.425832","-114.17894","-7","1" +"59825","Clinton","MT","46.716741","-113.62908","-7","1" +"59826","Condon","MT","47.500385","-113.72687","-7","1" +"59827","Conner","MT","45.905748","-114.07478","-7","1" +"59828","Corvallis","MT","46.313969","-114.04819","-7","1" +"59829","Darby","MT","45.836508","-114.20624","-7","1" +"59830","De Borgia","MT","47.388827","-115.347934","-7","1" +"59831","Dixon","MT","47.291275","-114.37296","-7","1" +"59832","Drummond","MT","46.695594","-113.22547","-7","1" +"59833","Florence","MT","46.642043","-114.07435","-7","1" +"59834","Frenchtown","MT","47.049623","-114.25074","-7","1" +"59835","Grantsdale","MT","46.060169","-114.040777","-7","1" +"59836","Greenough","MT","47.015705","-113.42635","-7","1" +"59837","Hall","MT","46.522136","-113.29281","-7","1" +"59840","Hamilton","MT","46.214883","-114.14786","-7","1" +"59841","Pinesdale","MT","46.336533","-114.22296","-7","1" +"59842","Haugan","MT","47.365882","-115.49151","-7","1" +"59843","Helmville","MT","46.878117","-112.97934","-7","1" +"59844","Heron","MT","48.03036","-115.96844","-7","1" +"59845","Hot Springs","MT","47.740524","-114.63534","-7","1" +"59846","Huson","MT","47.107612","-114.44619","-7","1" +"59847","Lolo","MT","46.752798","-114.35326","-7","1" +"59848","Lonepine","MT","47.689156","-114.67899","-7","1" +"59851","Milltown","MT","46.871508","-113.88196","-7","1" +"59853","Noxon","MT","48.017227","-115.81962","-7","1" +"59854","Ovando","MT","47.044698","-113.09214","-7","1" +"59855","Pablo","MT","47.597618","-114.11853","-7","1" +"59856","Paradise","MT","47.387824","-114.799","-7","1" +"59858","Philipsburg","MT","46.293656","-113.36273","-7","1" +"59859","Plains","MT","47.452071","-114.8171","-7","1" +"59860","Polson","MT","47.696131","-114.16094","-7","1" +"59863","Ravalli","MT","47.594957","-114.101443","-7","1" +"59864","Ronan","MT","47.540256","-114.12898","-7","1" +"59865","Saint Ignatius","MT","47.317264","-114.04402","-7","1" +"59866","Saint Regis","MT","47.3245","-115.13788","-7","1" +"59867","Saltese","MT","47.417172","-115.45113","-7","1" +"59868","Seeley Lake","MT","47.222677","-113.52551","-7","1" +"59870","Stevensville","MT","46.53135","-114.03182","-7","1" +"59871","Sula","MT","45.887807","-113.84407","-7","1" +"59872","Superior","MT","47.113918","-114.84507","-7","1" +"59873","Thompson Falls","MT","47.710209","-115.23463","-7","1" +"59874","Trout Creek","MT","47.844268","-115.60569","-7","1" +"59875","Victor","MT","46.39449","-114.18711","-7","1" +"59901","Kalispell","MT","48.201414","-114.32202","-7","1" +"59902","Kalispell","MT","48.189424","-114.143531","-7","1" +"59903","Kalispell","MT","48.22372","-114.429648","-7","1" +"59904","Kalispell","MT","48.240382","-114.256123","-7","1" +"59910","Big Arm","MT","47.802143","-114.30638","-7","1" +"59911","Bigfork","MT","47.952716","-113.96215","-7","1" +"59912","Columbia Falls","MT","48.438331","-114.23052","-7","1" +"59913","Coram","MT","48.428564","-114.01396","-7","1" +"59914","Dayton","MT","47.868708","-114.2778","-7","1" +"59915","Elmo","MT","47.829886","-114.39536","-7","1" +"59916","Essex","MT","48.249467","-113.62889","-7","1" +"59917","Eureka","MT","48.840305","-114.99727","-7","1" +"59918","Fortine","MT","48.75853","-114.84363","-7","1" +"59919","Hungry Horse","MT","48.185481","-113.83078","-7","1" +"59920","Kila","MT","48.034766","-114.49865","-7","1" +"59921","Lake McDonald","MT","48.605472","-113.88505","-7","1" +"59922","Lakeside","MT","48.005656","-114.24184","-7","1" +"59923","Libby","MT","48.309374","-115.3286","-7","1" +"59925","Marion","MT","48.080862","-114.80804","-7","1" +"59926","Martin City","MT","48.36435","-113.98182","-7","1" +"59927","Olney","MT","48.595224","-114.70843","-7","1" +"59928","Polebridge","MT","48.863964","-114.42793","-7","1" +"59929","Proctor","MT","47.923911","-114.37322","-7","1" +"59930","Rexford","MT","48.875701","-115.27461","-7","1" +"59931","Rollins","MT","47.911242","-114.19568","-7","1" +"59932","Somers","MT","48.073924","-114.22384","-7","1" +"59933","Stryker","MT","48.68464","-114.74914","-7","1" +"59934","Trego","MT","48.611903","-114.90532","-7","1" +"59935","Troy","MT","48.671585","-115.862","-7","1" +"59936","West Glacier","MT","48.497774","-113.92599","-7","1" +"59937","Whitefish","MT","48.409454","-114.43069","-7","1" +"60001","Alden","IL","42.324761","-88.452481","-6","1" +"60002","Antioch","IL","42.46617","-88.09995","-6","1" +"60004","Arlington Heights","IL","42.108428","-87.97723","-6","1" +"60005","Arlington Heights","IL","42.069327","-87.98464","-6","1" +"60006","Arlington Heights","IL","41.811929","-87.68732","-6","1" +"60007","Elk Grove Village","IL","42.005978","-87.99847","-6","1" +"60008","Rolling Meadows","IL","42.07506","-88.02508","-6","1" +"60009","Elk Grove Village","IL","41.811929","-87.68732","-6","1" +"60010","Barrington","IL","42.160791","-88.15231","-6","1" +"60011","Barrington","IL","42.322814","-87.610053","-6","1" +"60012","Crystal Lake","IL","42.265643","-88.31664","-6","1" +"60013","Cary","IL","42.217523","-88.24338","-6","1" +"60014","Crystal Lake","IL","42.226623","-88.33066","-6","1" +"60015","Deerfield","IL","42.169325","-87.86556","-6","1" +"60016","Des Plaines","IL","42.047178","-87.89058","-6","1" +"60017","Des Plaines","IL","42.028779","-87.894366","-6","1" +"60018","Des Plaines","IL","42.008429","-87.89234","-6","1" +"60019","Des Plaines","IL","42.024278","-87.907066","-6","1" +"60020","Fox Lake","IL","42.409445","-88.17822","-6","1" +"60021","Fox River Grove","IL","42.194946","-88.21676","-6","1" +"60022","Glencoe","IL","42.130976","-87.76252","-6","1" +"60025","Glenview","IL","42.07672","-87.81922","-6","1" +"60026","Glenview Nas","IL","41.811929","-87.68732","-6","1" +"60029","Golf","IL","42.056529","-87.79286","-6","1" +"60030","Grayslake","IL","42.338955","-88.03433","-6","1" +"60031","Gurnee","IL","42.375821","-87.93517","-6","1" +"60033","Harvard","IL","42.424338","-88.61431","-6","1" +"60034","Hebron","IL","42.468318","-88.43125","-6","1" +"60035","Highland Park","IL","42.181875","-87.80956","-6","1" +"60037","Fort Sheridan","IL","42.21196","-87.80808","-6","1" +"60038","Palatine","IL","42.097976","-88.014072","-6","1" +"60039","Crystal Lake","IL","42.324761","-88.452481","-6","1" +"60040","Highwood","IL","42.205724","-87.81421","-6","1" +"60041","Ingleside","IL","42.372721","-88.15303","-6","1" +"60042","Island Lake","IL","42.277691","-88.20074","-6","1" +"60043","Kenilworth","IL","42.088128","-87.716","-6","1" +"60044","Lake Bluff","IL","42.286222","-87.86309","-6","1" +"60045","Lake Forest","IL","42.238087","-87.86093","-6","1" +"60046","Lake Villa","IL","42.410687","-88.05462","-6","1" +"60047","Lake Zurich","IL","42.199957","-88.05859","-6","1" +"60048","Libertyville","IL","42.290922","-87.95169","-6","1" +"60049","Long Grove","IL","42.198674","-88.041875","-6","1" +"60050","Mchenry","IL","42.348406","-88.24769","-6","1" +"60051","Mchenry","IL","42.324761","-88.452481","-6","1" +"60053","Morton Grove","IL","42.041999","-87.78882","-6","1" +"60054","McHenry","IL","42.35344","-88.260692","-6","1" +"60055","Palatine","IL","42.097976","-88.014072","-6","1" +"60056","Mount Prospect","IL","42.065427","-87.93621","-6","1" +"60060","Mundelein","IL","42.263623","-88.01172","-6","1" +"60061","Vernon Hills","IL","42.229856","-87.96779","-6","1" +"60062","Northbrook","IL","42.124576","-87.84303","-6","1" +"60064","North Chicago","IL","42.326072","-87.85202","-6","1" +"60065","Northbrook","IL","41.811929","-87.68732","-6","1" +"60067","Palatine","IL","42.10979","-88.04917","-6","1" +"60068","Park Ridge","IL","42.01183","-87.84158","-6","1" +"60069","Lincolnshire","IL","42.188074","-87.92717","-6","1" +"60070","Prospect Heights","IL","42.105576","-87.92816","-6","1" +"60071","Richmond","IL","42.464639","-88.3028","-6","1" +"60072","Ringwood","IL","42.405464","-88.30274","-6","1" +"60073","Round Lake","IL","42.366253","-88.09647","-6","1" +"60074","Palatine","IL","42.143819","-88.02546","-6","1" +"60075","Russell","IL","42.322814","-87.610053","-6","1" +"60076","Skokie","IL","42.03618","-87.7321","-6","1" +"60077","Skokie","IL","42.033313","-87.75764","-6","1" +"60078","Palatine","IL","41.811929","-87.68732","-6","1" +"60079","Waukegan","IL","42.322814","-87.610053","-6","1" +"60080","Solon Mills","IL","42.442519","-88.276047","-6","1" +"60081","Spring Grove","IL","42.441869","-88.22167","-6","1" +"60082","Techny","IL","42.116377","-87.812064","-6","1" +"60083","Wadsworth","IL","42.428187","-87.92935","-6","1" +"60084","Wauconda","IL","42.263181","-88.14328","-6","1" +"60085","Waukegan","IL","42.361271","-87.86187","-6","1" +"60086","North Chicago","IL","42.43335","-87.776595","-6","1" +"60087","Waukegan","IL","42.404272","-87.86525","-6","1" +"60088","Great Lakes","IL","42.312372","-87.85284","-6","1" +"60089","Buffalo Grove","IL","42.167638","-87.96393","-6","1" +"60090","Wheeling","IL","42.131526","-87.92958","-6","1" +"60091","Wilmette","IL","42.077178","-87.72373","-6","1" +"60092","Libertyville","IL","42.322814","-87.610053","-6","1" +"60093","Winnetka","IL","42.104127","-87.75016","-6","1" +"60094","Palatine","IL","41.811929","-87.68732","-6","1" +"60095","Palatine","IL","41.811929","-87.68732","-6","1" +"60096","Winthrop Harbor","IL","42.48067","-87.83018","-6","1" +"60097","Wonder Lake","IL","42.384504","-88.3495","-6","1" +"60098","Woodstock","IL","42.316121","-88.43884","-6","1" +"60099","Zion","IL","42.451371","-87.84862","-6","1" +"60101","Addison","IL","41.931573","-88.00222","-6","1" +"60102","Algonquin","IL","42.17315","-88.31849","-6","1" +"60103","Bartlett","IL","41.977477","-88.17257","-6","1" +"60104","Bellwood","IL","41.882924","-87.87642","-6","1" +"60105","Bensenville","IL","41.839679","-88.088716","-6","1" +"60106","Bensenville","IL","41.956479","-87.95117","-6","1" +"60107","Streamwood","IL","42.023977","-88.17657","-6","1" +"60108","Bloomingdale","IL","41.94954","-88.08256","-6","1" +"60109","Burlington","IL","42.052112","-88.54829","-6","1" +"60110","Carpentersville","IL","42.121188","-88.27227","-6","1" +"60111","Clare","IL","41.998231","-88.84223","-6","1" +"60112","Cortland","IL","41.921121","-88.6899","-6","1" +"60113","Creston","IL","41.93171","-88.96438","-6","1" +"60114","Addison","IL","41.839679","-88.088716","-6","1" +"60115","Dekalb","IL","41.924127","-88.74617","-6","1" +"60116","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60117","Bloomingdale","IL","41.839679","-88.088716","-6","1" +"60118","Dundee","IL","42.101502","-88.28891","-6","1" +"60119","Elburn","IL","41.876506","-88.46429","-6","1" +"60120","Elgin","IL","42.037176","-88.25922","-6","1" +"60121","Elgin","IL","42.04133","-88.3126","-6","1" +"60122","Elgin","IL","42.067101","-88.304994","-6","1" +"60123","Elgin","IL","42.034776","-88.32393","-6","1" +"60125","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60126","Elmhurst","IL","41.89103","-87.94181","-6","1" +"60127","Milton","IL","41.878878","-88.134469","-6","1" +"60128","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60129","Esmond","IL","42.034502","-88.97084","-6","1" +"60130","Forest Park","IL","41.871331","-87.81235","-6","1" +"60131","Franklin Park","IL","41.93548","-87.87468","-6","1" +"60132","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60133","Hanover Park","IL","41.980896","-88.144475","-6","1" +"60134","Geneva","IL","41.885728","-88.31957","-6","1" +"60135","Genoa","IL","42.10028","-88.6906","-6","1" +"60136","Gilberts","IL","42.099479","-88.36942","-6","1" +"60137","Glen Ellyn","IL","41.869779","-88.06285","-6","1" +"60138","Glen Ellyn","IL","41.839679","-88.088716","-6","1" +"60139","Glendale Heights","IL","41.920228","-88.07891","-6","1" +"60140","Hampshire","IL","42.086218","-88.5036","-6","1" +"60141","Hines","IL","41.858028","-87.83865","-6","1" +"60142","Huntley","IL","42.171973","-88.42891","-6","1" +"60143","Itasca","IL","41.972328","-88.02196","-6","1" +"60144","Kaneville","IL","41.936977","-88.420178","-6","1" +"60145","Kingston","IL","42.102014","-88.76647","-6","1" +"60146","Kirkland","IL","42.100571","-88.87665","-6","1" +"60147","Lafox","IL","41.936977","-88.420178","-6","1" +"60148","Lombard","IL","41.875429","-88.01723","-6","1" +"60149","Dement","IL","41.964197","-88.951205","-6","1" +"60150","Malta","IL","41.933061","-88.88293","-6","1" +"60151","Maple Park","IL","41.91842","-88.57626","-6","1" +"60152","Marengo","IL","42.242199","-88.61034","-6","1" +"60153","Maywood","IL","41.880281","-87.84455","-6","1" +"60154","Westchester","IL","41.851257","-87.88351","-6","1" +"60155","Broadview","IL","41.857931","-87.85477","-6","1" +"60156","Lake in the Hills","IL","42.185733","-88.348484","-6","1" +"60157","Medinah","IL","41.970628","-88.05606","-6","1" +"60159","Schaumburg","IL","41.811929","-87.68732","-6","1" +"60160","Melrose Park","IL","41.89988","-87.85978","-6","1" +"60161","Melrose Park","IL","41.811929","-87.68732","-6","1" +"60162","Hillside","IL","41.872997","-87.90101","-6","1" +"60163","Berkeley","IL","41.886794","-87.91052","-6","1" +"60164","Melrose Park","IL","41.91823","-87.89627","-6","1" +"60165","Stone Park","IL","41.90158","-87.88046","-6","1" +"60168","Schaumburg","IL","41.811929","-87.68732","-6","1" +"60170","Plato Center","IL","42.025776","-88.425931","-6","1" +"60171","River Grove","IL","41.92583","-87.84013","-6","1" +"60172","Roselle","IL","41.980761","-88.08704","-6","1" +"60173","Schaumburg","IL","42.051927","-88.04814","-6","1" +"60174","Saint Charles","IL","41.919808","-88.30498","-6","1" +"60175","Saint Charles","IL","41.944577","-88.38326","-6","1" +"60176","Schiller Park","IL","41.95683","-87.87193","-6","1" +"60177","South Elgin","IL","41.99215","-88.30609","-6","1" +"60178","Sycamore","IL","41.990505","-88.68704","-6","1" +"60179","Hoffman Estates","IL","42.079336","-88.223655","-6","1" +"60180","Union","IL","42.229437","-88.52606","-6","1" +"60181","Villa Park","IL","41.880429","-87.97813","-6","1" +"60182","Virgil","IL","41.908736","-88.59915","-6","1" +"60183","Wasco","IL","41.936977","-88.420178","-6","1" +"60184","Wayne","IL","41.953427","-88.25176","-6","1" +"60185","West Chicago","IL","41.891978","-88.20502","-6","1" +"60186","West Chicago","IL","41.839679","-88.088716","-6","1" +"60187","Wheaton","IL","41.858279","-88.10904","-6","1" +"60188","Carol Stream","IL","41.918578","-88.13688","-6","1" +"60189","Wheaton","IL","41.839679","-88.088716","-6","1" +"60190","Winfield","IL","41.875228","-88.15261","-6","1" +"60191","Wood Dale","IL","41.962979","-87.97688","-6","1" +"60192","Schaumburg","IL","42.065827","-88.21399","-6","1" +"60193","Schaumburg","IL","42.01299","-88.09675","-6","1" +"60194","Schaumburg","IL","42.037108","-88.10719","-6","1" +"60195","Schaumburg","IL","42.067809","-88.10828","-6","1" +"60196","Schaumburg","IL","42.056376","-88.072522","-6","1" +"60197","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60198","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60199","Carol Stream","IL","41.839679","-88.088716","-6","1" +"60201","Evanston","IL","42.056391","-87.69684","-6","1" +"60202","Evanston","IL","42.030327","-87.68828","-6","1" +"60203","Evanston","IL","42.048879","-87.7175","-6","1" +"60204","Evanston","IL","41.811929","-87.68732","-6","1" +"60208","Evanston","IL","42.058629","-87.684506","-6","1" +"60209","Evanston","IL","42.04973","-87.679408","-6","1" +"60301","Oak Park","IL","41.887981","-87.79562","-6","1" +"60302","Oak Park","IL","41.893941","-87.78899","-6","1" +"60303","Oak Park","IL","41.811929","-87.68732","-6","1" +"60304","Oak Park","IL","41.87355","-87.7885","-6","1" +"60305","River Forest","IL","41.893031","-87.81718","-6","1" +"60330","River Forest","IL","41.882081","-87.821359","-6","1" +"60401","Beecher","IL","41.350484","-87.62408","-6","1" +"60402","Berwyn","IL","41.836981","-87.79095","-6","1" +"60406","Blue Island","IL","41.656592","-87.68154","-6","1" +"60407","Braceville","IL","41.230524","-88.25503","-6","1" +"60408","Braidwood","IL","41.262178","-88.22307","-6","1" +"60409","Calumet City","IL","41.614188","-87.54638","-6","1" +"60410","Channahon","IL","41.439518","-88.20898","-6","1" +"60411","Chicago Heights","IL","41.511307","-87.6101","-6","1" +"60412","Chicago Heights","IL","41.811929","-87.68732","-6","1" +"60415","Chicago Ridge","IL","41.702482","-87.77869","-6","1" +"60416","Coal City","IL","41.292011","-88.2783","-6","1" +"60417","Crete","IL","41.439034","-87.61173","-6","1" +"60419","Dolton","IL","41.626839","-87.59865","-6","1" +"60420","Dwight","IL","41.089453","-88.42783","-6","1" +"60421","Elwood","IL","41.429681","-88.10284","-6","1" +"60422","Flossmoor","IL","41.539384","-87.68424","-6","1" +"60423","Frankfort","IL","41.501178","-87.83875","-6","1" +"60424","Gardner","IL","41.174117","-88.30954","-6","1" +"60425","Glenwood","IL","41.544584","-87.61289","-6","1" +"60426","Harvey","IL","41.609078","-87.66264","-6","1" +"60429","Hazel Crest","IL","41.574034","-87.67857","-6","1" +"60430","Homewood","IL","41.556734","-87.66464","-6","1" +"60431","Joliet","IL","41.52493","-88.19022","-6","1" +"60432","Joliet","IL","41.533631","-88.05592","-6","1" +"60433","Joliet","IL","41.511644","-88.05698","-6","1" +"60434","Joliet","IL","41.52543","-88.084208","-6","1" +"60435","Joliet","IL","41.54338","-88.11963","-6","1" +"60436","Joliet","IL","41.50798","-88.10553","-6","1" +"60437","Kinsman","IL","41.168761","-88.55792","-6","1" +"60438","Lansing","IL","41.565685","-87.54819","-6","1" +"60439","Lemont","IL","41.676028","-87.98258","-6","1" +"60440","Bolingbrook","IL","41.703097","-88.07462","-6","1" +"60441","Lockport","IL","41.598235","-88.02753","-6","1" +"60442","Manhattan","IL","41.407474","-87.96883","-6","1" +"60443","Matteson","IL","41.503468","-87.73695","-6","1" +"60444","Mazon","IL","41.243419","-88.40325","-6","1" +"60445","Midlothian","IL","41.631683","-87.73309","-6","1" +"60446","Romeoville","IL","41.64273","-88.09934","-6","1" +"60447","Minooka","IL","41.473553","-88.29167","-6","1" +"60448","Mokena","IL","41.536782","-87.88582","-6","1" +"60449","Monee","IL","41.422555","-87.75531","-6","1" +"60450","Morris","IL","41.370642","-88.40749","-6","1" +"60451","New Lenox","IL","41.509231","-87.96475","-6","1" +"60452","Oak Forest","IL","41.605633","-87.75356","-6","1" +"60453","Oak Lawn","IL","41.715082","-87.7546","-6","1" +"60454","Oak Lawn","IL","41.811929","-87.68732","-6","1" +"60455","Bridgeview","IL","41.742432","-87.80678","-6","1" +"60456","Hometown","IL","41.730533","-87.73198","-6","1" +"60457","Hickory Hills","IL","41.723782","-87.82825","-6","1" +"60458","Justice","IL","41.746432","-87.83557","-6","1" +"60459","Burbank","IL","41.744082","-87.77022","-6","1" +"60460","Odell","IL","41.00148","-88.52981","-6","1" +"60461","Olympia Fields","IL","41.51829","-87.69274","-6","1" +"60462","Orland Park","IL","41.623532","-87.83542","-6","1" +"60463","Palos Heights","IL","41.663548","-87.79148","-6","1" +"60464","Palos Park","IL","41.664582","-87.84378","-6","1" +"60465","Palos Hills","IL","41.699432","-87.82977","-6","1" +"60466","Park Forest","IL","41.472934","-87.68767","-6","1" +"60467","Orland Park","IL","41.598255","-87.89201","-6","1" +"60468","Peotone","IL","41.331114","-87.79917","-6","1" +"60469","Posen","IL","41.628034","-87.68694","-6","1" +"60470","Ransom","IL","41.169068","-88.6494","-6","1" +"60471","Richton Park","IL","41.483844","-87.72134","-6","1" +"60472","Robbins","IL","41.642933","-87.70814","-6","1" +"60473","South Holland","IL","41.597472","-87.59909","-6","1" +"60474","South Wilmington","IL","41.173313","-88.27494","-6","1" +"60475","Steger","IL","41.470084","-87.63369","-6","1" +"60476","Thornton","IL","41.570384","-87.60839","-6","1" +"60477","Tinley Park","IL","41.5738","-87.80389","-6","1" +"60478","Country Club Hills","IL","41.561134","-87.72398","-6","1" +"60479","Verona","IL","41.231718","-88.52659","-6","1" +"60480","Willow Springs","IL","41.737616","-87.87778","-6","1" +"60481","Wilmington","IL","41.298186","-88.1464","-6","1" +"60482","Worth","IL","41.688827","-87.79265","-6","1" +"60490","Bolingbrook","IL","41.684752","-88.14203","-6","1" +"60499","Bedford Park","IL","41.811929","-87.68732","-6","1" +"60501","Summit Argo","IL","41.784832","-87.81","-6","1" +"60504","Aurora","IL","41.760067","-88.25218","-6","1" +"60505","Aurora","IL","41.756129","-88.29699","-6","1" +"60506","Aurora","IL","41.766029","-88.35254","-6","1" +"60507","Aurora","IL","41.936977","-88.420178","-6","1" +"60510","Batavia","IL","41.845228","-88.30995","-6","1" +"60511","Big Rock","IL","41.75537","-88.54865","-6","1" +"60512","Bristol","IL","41.706034","-88.41296","-6","1" +"60513","Brookfield","IL","41.822681","-87.84753","-6","1" +"60514","Clarendon Hills","IL","41.779533","-87.95798","-6","1" +"60515","Downers Grove","IL","41.80348","-88.01827","-6","1" +"60516","Downers Grove","IL","41.761463","-88.01334","-6","1" +"60517","Woodridge","IL","41.75253","-88.04864","-6","1" +"60518","Earlville","IL","41.599139","-88.91932","-6","1" +"60519","Eola","IL","41.778379","-88.24268","-6","1" +"60520","Hinckley","IL","41.776884","-88.64655","-6","1" +"60521","Hinsdale","IL","41.772915","-87.92996","-6","1" +"60522","Hinsdale","IL","41.839679","-88.088716","-6","1" +"60523","Oak Brook","IL","41.837716","-87.96041","-6","1" +"60525","La Grange","IL","41.788536","-87.87605","-6","1" +"60526","La Grange Park","IL","41.829831","-87.8704","-6","1" +"60527","Hinsdale","IL","41.839679","-88.088716","-6","1" +"60530","Lee","IL","41.792378","-88.9516","-6","1" +"60531","Leland","IL","41.620636","-88.78895","-6","1" +"60532","Lisle","IL","41.789079","-88.08536","-6","1" +"60534","Lyons","IL","41.812331","-87.82318","-6","1" +"60536","Millbrook","IL","41.598631","-88.55317","-6","1" +"60537","Millington","IL","41.56253","-88.59921","-6","1" +"60538","Montgomery","IL","41.721886","-88.32972","-6","1" +"60539","Mooseheart","IL","41.823478","-88.3332","-6","1" +"60540","Naperville","IL","41.764779","-88.14579","-6","1" +"60541","Newark","IL","41.529433","-88.53552","-6","1" +"60542","North Aurora","IL","41.809387","-88.32931","-6","1" +"60543","Oswego","IL","41.684896","-88.34177","-6","1" +"60544","Plainfield","IL","41.607624","-88.19736","-6","1" +"60545","Plano","IL","41.665654","-88.53697","-6","1" +"60546","Riverside","IL","41.836131","-87.82163","-6","1" +"60548","Sandwich","IL","41.645393","-88.63052","-6","1" +"60549","Serena","IL","41.490329","-88.74998","-6","1" +"60550","Shabbona","IL","41.769322","-88.86858","-6","1" +"60551","Sheridan","IL","41.527585","-88.68292","-6","1" +"60552","Somonauk","IL","41.645998","-88.69","-6","1" +"60553","Steward","IL","41.830628","-89.01704","-6","1" +"60554","Sugar Grove","IL","41.779939","-88.45183","-6","1" +"60555","Warrenville","IL","41.82552","-88.19452","-6","1" +"60556","Waterman","IL","41.768498","-88.77539","-6","1" +"60557","Wedron","IL","41.438531","-88.76933","-6","1" +"60558","Western Springs","IL","41.805531","-87.90103","-6","1" +"60559","Westmont","IL","41.795358","-87.97778","-6","1" +"60560","Yorkville","IL","41.631342","-88.43996","-6","1" +"60561","Darien","IL","41.745623","-87.98108","-6","1" +"60563","Naperville","IL","41.794885","-88.16188","-6","1" +"60564","Naperville","IL","41.707118","-88.19634","-6","1" +"60565","Naperville","IL","41.728738","-88.12824","-6","1" +"60566","Naperville","IL","41.839679","-88.088716","-6","1" +"60567","Naperville","IL","41.839679","-88.088716","-6","1" +"60568","Aurora","IL","41.935616","-88.43238","-6","1" +"60570","Hinsdale","IL","41.839679","-88.088716","-6","1" +"60572","Aurora","IL","41.839679","-88.088716","-6","1" +"60597","Fox Valley","IL","41.839679","-88.088716","-6","1" +"60598","Aurora","IL","41.839679","-88.088716","-6","1" +"60599","Fox Valley","IL","41.839679","-88.088716","-6","1" +"60601","Chicago","IL","41.886456","-87.62325","-6","1" +"60602","Chicago","IL","41.882937","-87.62874","-6","1" +"60603","Chicago","IL","41.880446","-87.63014","-6","1" +"60604","Chicago","IL","41.877589","-87.62818","-6","1" +"60605","Chicago","IL","41.860019","-87.6187","-6","1" +"60606","Chicago","IL","41.882582","-87.6376","-6","1" +"60607","Chicago","IL","41.875882","-87.65114","-6","1" +"60608","Chicago","IL","41.850532","-87.6699","-6","1" +"60609","Chicago","IL","41.814283","-87.65282","-6","1" +"60610","Chicago","IL","41.898582","-87.6371","-6","1" +"60611","Chicago","IL","41.904667","-87.62504","-6","1" +"60612","Chicago","IL","41.880682","-87.6877","-6","1" +"60613","Chicago","IL","41.953256","-87.6629","-6","1" +"60614","Chicago","IL","41.922682","-87.65432","-6","1" +"60615","Chicago","IL","41.801525","-87.60215","-6","1" +"60616","Chicago","IL","41.8474","-87.63126","-6","1" +"60617","Chicago","IL","41.719973","-87.5557","-6","1" +"60618","Chicago","IL","41.945681","-87.7048","-6","1" +"60619","Chicago","IL","41.744834","-87.60444","-6","1" +"60620","Chicago","IL","41.740483","-87.65282","-6","1" +"60621","Chicago","IL","41.776983","-87.6404","-6","1" +"60622","Chicago","IL","41.900332","-87.66927","-6","1" +"60623","Chicago","IL","41.850232","-87.718","-6","1" +"60624","Chicago","IL","41.879365","-87.72199","-6","1" +"60625","Chicago","IL","41.971614","-87.70256","-6","1" +"60626","Chicago","IL","42.009731","-87.66938","-6","1" +"60628","Chicago","IL","41.695434","-87.62255","-6","1" +"60629","Chicago","IL","41.777482","-87.71155","-6","1" +"60630","Chicago","IL","41.971044","-87.75869","-6","1" +"60631","Chicago","IL","41.99623","-87.81091","-6","1" +"60632","Chicago","IL","41.809299","-87.7105","-6","1" +"60633","Chicago","IL","41.655423","-87.55365","-6","1" +"60634","Chicago","IL","41.944454","-87.79654","-6","1" +"60636","Chicago","IL","41.776633","-87.66854","-6","1" +"60637","Chicago","IL","41.779384","-87.60544","-6","1" +"60638","Chicago","IL","41.787982","-87.7738","-6","1" +"60639","Chicago","IL","41.921431","-87.75415","-6","1" +"60640","Chicago","IL","41.973181","-87.6665","-6","1" +"60641","Chicago","IL","41.946431","-87.74576","-6","1" +"60643","Chicago","IL","41.696433","-87.65993","-6","1" +"60644","Chicago","IL","41.881331","-87.75671","-6","1" +"60645","Chicago","IL","42.008956","-87.69634","-6","1" +"60646","Chicago","IL","41.995331","-87.7601","-6","1" +"60647","Chicago","IL","41.921126","-87.70085","-6","1" +"60648","Peotone","IL","41.335445","-87.785286","-6","1" +"60649","Chicago","IL","41.761734","-87.57072","-6","1" +"60650","Chicago","IL","41.818682","-87.743454","-6","1" +"60651","Chicago","IL","41.901485","-87.74055","-6","1" +"60652","Chicago","IL","41.7446","-87.71188","-6","1" +"60653","Chicago","IL","41.819833","-87.61269","-6","1" +"60654","Chicago","IL","41.888627","-87.63538","-6","1" +"60655","Chicago","IL","41.696283","-87.69912","-6","1" +"60656","Chicago","IL","41.97508","-87.8163","-6","1" +"60657","Chicago","IL","41.940832","-87.65852","-6","1" +"60659","Chicago","IL","41.991381","-87.70378","-6","1" +"60660","Chicago","IL","41.990631","-87.6667","-6","1" +"60661","Chicago","IL","41.882082","-87.64461","-6","1" +"60663","Chicago","IL","41.811929","-87.68732","-6","1" +"60664","Chicago","IL","41.811929","-87.68732","-6","1" +"60665","Chicago","IL","41.811929","-87.68732","-6","1" +"60666","Amf Ohare","IL","41.968029","-87.891214","-6","1" +"60667","Chicago","IL","41.811929","-87.68732","-6","1" +"60668","Chicago","IL","41.811929","-87.68732","-6","1" +"60669","Chicago","IL","41.811929","-87.68732","-6","1" +"60670","Chicago","IL","41.811929","-87.68732","-6","1" +"60671","Chicago","IL","41.811929","-87.68732","-6","1" +"60672","Chicago","IL","41.811929","-87.68732","-6","1" +"60673","Chicago","IL","41.811929","-87.68732","-6","1" +"60674","Chicago","IL","41.811929","-87.68732","-6","1" +"60675","Chicago","IL","41.811929","-87.68732","-6","1" +"60677","Chicago","IL","41.811929","-87.68732","-6","1" +"60678","Chicago","IL","41.811929","-87.68732","-6","1" +"60679","Chicago","IL","41.811929","-87.68732","-6","1" +"60680","Chicago","IL","41.811929","-87.68732","-6","1" +"60681","Chicago","IL","41.811929","-87.68732","-6","1" +"60683","Chicago","IL","41.811929","-87.68732","-6","1" +"60684","Chicago","IL","41.811929","-87.68732","-6","1" +"60685","Chicago","IL","41.811929","-87.68732","-6","1" +"60687","Chicago","IL","41.811929","-87.68732","-6","1" +"60690","Chicago","IL","41.811929","-87.68732","-6","1" +"60691","Chicago","IL","41.811929","-87.68732","-6","1" +"60692","Chicago","IL","41.867532","-87.672553","-6","1" +"60693","Chicago","IL","42.096428","-87.71791","-6","1" +"60694","Chicago","IL","41.811929","-87.68732","-6","1" +"60697","Chicago","IL","41.811929","-87.68732","-6","1" +"60699","Chicago","IL","41.811929","-87.68732","-6","1" +"60701","Chicago","IL","41.811929","-87.68732","-6","1" +"60706","Harwood Heights","IL","41.96418","-87.81686","-6","1" +"60707","Elmwood Park","IL","41.922681","-87.80805","-6","1" +"60712","Lincolnwood","IL","42.005331","-87.73545","-6","1" +"60714","Niles","IL","42.032379","-87.81563","-6","1" +"60803","Alsip","IL","41.675861","-87.73189","-6","1" +"60804","Cicero","IL","41.844382","-87.7599","-6","1" +"60805","Evergreen Park","IL","41.719933","-87.70249","-6","1" +"60827","Riverdale","IL","41.649717","-87.63292","-6","1" +"60901","Kankakee","IL","41.114132","-87.86784","-6","1" +"60902","Kankakee","IL","41.146464","-87.888971","-6","1" +"60910","Aroma Park","IL","41.078981","-87.80536","-6","1" +"60911","Ashkum","IL","40.883641","-87.9667","-6","1" +"60912","Beaverville","IL","40.968579","-87.61611","-6","1" +"60913","Bonfield","IL","41.147958","-88.06412","-6","1" +"60914","Bourbonnais","IL","41.170442","-87.86891","-6","1" +"60915","Bradley","IL","41.144256","-87.86239","-6","1" +"60917","Buckingham","IL","41.04699","-88.18649","-6","1" +"60918","Buckley","IL","40.598963","-88.03308","-6","1" +"60919","Cabery","IL","40.987824","-88.23737","-6","1" +"60920","Campus","IL","41.024846","-88.30797","-6","1" +"60921","Chatsworth","IL","40.757447","-88.29306","-6","1" +"60922","Chebanse","IL","41.005603","-87.90649","-6","1" +"60924","Cissna Park","IL","40.565374","-87.88177","-6","1" +"60926","Claytonville","IL","40.572516","-87.81825","-6","1" +"60927","Clifton","IL","40.937573","-87.94105","-6","1" +"60928","Crescent City","IL","40.766096","-87.85474","-6","1" +"60929","Cullom","IL","40.873","-88.28676","-6","1" +"60930","Danforth","IL","40.823527","-87.9874","-6","1" +"60931","Donovan","IL","40.876303","-87.60159","-6","1" +"60932","East Lynn","IL","40.465251","-87.80112","-6","1" +"60933","Elliott","IL","40.465744","-88.26994","-6","1" +"60934","Emington","IL","40.966528","-88.34937","-6","1" +"60935","Essex","IL","41.17569","-88.17268","-6","1" +"60936","Gibson City","IL","40.463079","-88.3731","-6","1" +"60938","Gilman","IL","40.767194","-87.98929","-6","1" +"60939","Goodwine","IL","40.748087","-87.82876","-6","1" +"60940","Grant Park","IL","41.244016","-87.64464","-6","1" +"60941","Herscher","IL","41.05113","-88.08957","-6","1" +"60942","Hoopeston","IL","40.465869","-87.66766","-6","1" +"60944","Hopkins Park","IL","41.146464","-87.888971","-6","1" +"60945","Iroquois","IL","40.827011","-87.58356","-6","1" +"60946","Kempton","IL","40.908942","-88.21304","-6","1" +"60948","Loda","IL","40.526477","-88.0821","-6","1" +"60949","Ludlow","IL","40.375602","-88.11524","-6","1" +"60950","Manteno","IL","41.250408","-87.85125","-6","1" +"60951","Martinton","IL","40.912916","-87.75589","-6","1" +"60952","Melvin","IL","40.562833","-88.25053","-6","1" +"60953","Milford","IL","40.624025","-87.69618","-6","1" +"60954","Momence","IL","41.147918","-87.63579","-6","1" +"60955","Onarga","IL","40.706634","-87.99624","-6","1" +"60956","Papineau","IL","40.966993","-87.716074","-6","1" +"60957","Paxton","IL","40.448736","-88.11405","-6","1" +"60959","Piper City","IL","40.779834","-88.18012","-6","1" +"60960","Rankin","IL","40.439688","-87.89016","-6","1" +"60961","Reddick","IL","41.105629","-88.23794","-6","1" +"60962","Roberts","IL","40.625486","-88.18667","-6","1" +"60963","Rossville","IL","40.372447","-87.6603","-6","1" +"60964","Saint Anne","IL","41.045785","-87.68963","-6","1" +"60966","Sheldon","IL","40.762507","-87.57423","-6","1" +"60967","Stockland","IL","40.613942","-87.59259","-6","1" +"60968","Thawville","IL","40.6756","-88.10761","-6","1" +"60969","Union Hill","IL","41.109101","-88.14732","-6","1" +"60970","Watseka","IL","40.784447","-87.74051","-6","1" +"60973","Wellington","IL","40.543697","-87.66475","-6","1" +"60974","Woodland","IL","40.710295","-87.73137","-6","1" +"61001","Apple River","IL","42.472458","-90.12098","-6","1" +"61006","Ashton","IL","41.865034","-89.21536","-6","1" +"61007","Baileyville","IL","42.199457","-89.59662","-6","1" +"61008","Belvidere","IL","42.257229","-88.84755","-6","1" +"61010","Byron","IL","42.131245","-89.26637","-6","1" +"61011","Caledonia","IL","42.376423","-88.9325","-6","1" +"61012","Capron","IL","42.401104","-88.74726","-6","1" +"61013","Cedarville","IL","42.375078","-89.63382","-6","1" +"61014","Chadwick","IL","41.97068","-89.87508","-6","1" +"61015","Chana","IL","41.982993","-89.2128","-6","1" +"61016","Cherry Valley","IL","42.222221","-88.9543","-6","1" +"61017","Coleta","IL","41.902977","-89.804293","-6","1" +"61018","Dakota","IL","42.403305","-89.55466","-6","1" +"61019","Davis","IL","42.440374","-89.40925","-6","1" +"61020","Davis Junction","IL","42.101928","-89.09369","-6","1" +"61021","Dixon","IL","41.843702","-89.47636","-6","1" +"61024","Durand","IL","42.436585","-89.30394","-6","1" +"61025","East Dubuque","IL","42.483971","-90.58945","-6","1" +"61027","Eleroy","IL","42.332038","-89.761171","-6","1" +"61028","Elizabeth","IL","42.298773","-90.17778","-6","1" +"61030","Forreston","IL","42.119619","-89.58242","-6","1" +"61031","Franklin Grove","IL","41.84036","-89.31176","-6","1" +"61032","Freeport","IL","42.300918","-89.63208","-6","1" +"61036","Galena","IL","42.400744","-90.39738","-6","1" +"61037","Galt","IL","41.788761","-89.76182","-6","1" +"61038","Garden Prairie","IL","42.255617","-88.74344","-6","1" +"61039","German Valley","IL","42.213851","-89.47449","-6","1" +"61041","Hanover","IL","42.270426","-90.31077","-6","1" +"61042","Harmon","IL","41.69339","-89.56986","-6","1" +"61043","Holcomb","IL","42.045123","-89.313593","-6","1" +"61044","Kent","IL","42.320303","-89.91237","-6","1" +"61046","Lanark","IL","42.111421","-89.82436","-6","1" +"61047","Leaf River","IL","42.139244","-89.3968","-6","1" +"61048","Lena","IL","42.381064","-89.83062","-6","1" +"61049","Lindenwood","IL","42.054546","-89.02456","-6","1" +"61050","McConnell","IL","42.4447","-89.72708","-6","1" +"61051","Milledgeville","IL","41.965904","-89.75896","-6","1" +"61052","Monroe Center","IL","42.110548","-89.00751","-6","1" +"61053","Mount Carroll","IL","42.1009","-89.98255","-6","1" +"61054","Mount Morris","IL","42.046139","-89.44025","-6","1" +"61057","Nachusa","IL","41.830896","-89.39613","-6","1" +"61058","Nelson","IL","41.797256","-89.599529","-6","1" +"61059","Nora","IL","42.455036","-89.94561","-6","1" +"61060","Orangeville","IL","42.475891","-89.63404","-6","1" +"61061","Oregon","IL","42.00663","-89.33932","-6","1" +"61062","Pearl City","IL","42.250987","-89.83571","-6","1" +"61063","Pecatonica","IL","42.307665","-89.34453","-6","1" +"61064","Polo","IL","41.989386","-89.59084","-6","1" +"61065","Poplar Grove","IL","42.364394","-88.84665","-6","1" +"61067","Ridott","IL","42.298218","-89.47652","-6","1" +"61068","Rochelle","IL","41.935139","-89.06891","-6","1" +"61070","Rock City","IL","42.407384","-89.46228","-6","1" +"61071","Rock Falls","IL","41.759473","-89.69452","-6","1" +"61072","Rockton","IL","42.447856","-89.08485","-6","1" +"61073","Roscoe","IL","42.419097","-89.00407","-6","1" +"61074","Savanna","IL","42.099635","-90.12858","-6","1" +"61075","Scales Mound","IL","42.473737","-90.25362","-6","1" +"61076","Scioto Mills","IL","42.355422","-89.667939","-6","1" +"61077","Seward","IL","42.236813","-89.35828","-6","1" +"61078","Shannon","IL","42.15834","-89.73555","-6","1" +"61079","Shirland","IL","42.325364","-89.170527","-6","1" +"61080","South Beloit","IL","42.484835","-89.02756","-6","1" +"61081","Sterling","IL","41.813776","-89.70537","-6","1" +"61084","Stillman Valley","IL","42.112207","-89.18633","-6","1" +"61085","Stockton","IL","42.350108","-90.02362","-6","1" +"61087","Warren","IL","42.491388","-89.98979","-6","1" +"61088","Winnebago","IL","42.271385","-89.25099","-6","1" +"61089","Winslow","IL","42.475078","-89.81607","-6","1" +"61091","Woosung","IL","41.905844","-89.54255","-6","1" +"61101","Rockford","IL","42.292221","-89.12574","-6","1" +"61102","Rockford","IL","42.25517","-89.1297","-6","1" +"61103","Rockford","IL","42.303365","-89.08246","-6","1" +"61104","Rockford","IL","42.25537","-89.07602","-6","1" +"61105","Rockford","IL","42.325364","-89.170527","-6","1" +"61106","Rockford","IL","42.325364","-89.170527","-6","1" +"61107","Rockford","IL","42.280019","-89.03347","-6","1" +"61108","Rockford","IL","42.254087","-89.01776","-6","1" +"61109","Rockford","IL","42.213439","-89.05595","-6","1" +"61110","Rockford","IL","42.325364","-89.170527","-6","1" +"61111","Loves Park","IL","42.326227","-89.02573","-6","1" +"61112","Rockford","IL","42.245596","-88.97586","-6","1" +"61114","Rockford","IL","42.306666","-89.00839","-6","1" +"61115","Machesney Park","IL","42.352539","-89.04186","-6","1" +"61125","Rockford","IL","42.325364","-89.170527","-6","1" +"61126","Rockford","IL","42.325364","-89.170527","-6","1" +"61130","Loves Park","IL","42.325364","-89.170527","-6","1" +"61131","Loves Park","IL","42.325364","-89.170527","-6","1" +"61132","Loves Park","IL","42.325364","-89.170527","-6","1" +"61201","Rock Island","IL","41.4903","-90.56956","-6","1" +"61202","Rock Island","IL","41.466752","-90.58714","-6","1" +"61204","Rock Island","IL","41.554901","-90.615975","-6","1" +"61206","Rock Island","IL","41.554901","-90.615975","-6","1" +"61230","Albany","IL","41.766003","-90.22322","-6","1" +"61231","Aledo","IL","41.202461","-90.73137","-6","1" +"61232","Andalusia","IL","41.440852","-90.71957","-6","1" +"61233","Andover","IL","41.292977","-90.29334","-6","1" +"61234","Annawan","IL","41.412944","-89.92236","-6","1" +"61235","Atkinson","IL","41.409646","-90.01821","-6","1" +"61236","Barstow","IL","41.518317","-90.35597","-6","1" +"61237","Buffalo Prairie","IL","41.336752","-90.852226","-6","1" +"61238","Cambridge","IL","41.286797","-90.17486","-6","1" +"61239","Carbon Cliff","IL","41.497667","-90.39047","-6","1" +"61240","Coal Valley","IL","41.439784","-90.428","-6","1" +"61241","Colona","IL","41.483484","-90.34046","-6","1" +"61242","Cordova","IL","41.697188","-90.30177","-6","1" +"61243","Deer Grove","IL","41.610151","-89.66298","-6","1" +"61244","East Moline","IL","41.518733","-90.41788","-6","1" +"61250","Erie","IL","41.657803","-90.08613","-6","1" +"61251","Fenton","IL","41.738551","-90.06922","-6","1" +"61252","Fulton","IL","41.863049","-90.14524","-6","1" +"61254","Geneseo","IL","41.464473","-90.15854","-6","1" +"61256","Hampton","IL","41.554666","-90.40987","-6","1" +"61257","Hillsdale","IL","41.590161","-90.20392","-6","1" +"61258","Hooppole","IL","41.522044","-89.91216","-6","1" +"61259","Illinois City","IL","41.369036","-90.9284","-6","1" +"61260","Joy","IL","41.228561","-90.87565","-6","1" +"61261","Lyndon","IL","41.719782","-89.92116","-6","1" +"61262","Lynn Center","IL","41.28595","-90.36117","-6","1" +"61263","Matherville","IL","41.260255","-90.60587","-6","1" +"61264","Milan","IL","41.426583","-90.57639","-6","1" +"61265","Moline","IL","41.490333","-90.50006","-6","1" +"61266","Moline","IL","41.554901","-90.615975","-6","1" +"61270","Morrison","IL","41.819003","-89.96623","-6","1" +"61272","New Boston","IL","41.223984","-91.0123","-6","1" +"61273","Orion","IL","41.357236","-90.38482","-6","1" +"61274","Osco","IL","41.372408","-90.27031","-6","1" +"61275","Port Byron","IL","41.599642","-90.31978","-6","1" +"61276","Preemption","IL","41.30589","-90.5979","-6","1" +"61277","Prophetstown","IL","41.612038","-89.93036","-6","1" +"61278","Rapids City","IL","41.585883","-90.343228","-6","1" +"61279","Reynolds","IL","41.31653","-90.70671","-6","1" +"61281","Sherrard","IL","41.303101","-90.50615","-6","1" +"61282","Silvis","IL","41.501234","-90.41404","-6","1" +"61283","Tampico","IL","41.605825","-89.77628","-6","1" +"61284","Taylor Ridge","IL","41.406276","-90.735","-6","1" +"61285","Thomson","IL","41.978758","-90.09248","-6","1" +"61299","Rock Island","IL","41.520333","-90.541585","-6","1" +"61301","La Salle","IL","41.347117","-89.08974","-6","1" +"61310","Amboy","IL","41.707588","-89.34371","-6","1" +"61311","Ancona","IL","41.042878","-88.86268","-6","1" +"61312","Arlington","IL","41.435197","-89.23432","-6","1" +"61313","Blackstone","IL","41.064946","-88.66836","-6","1" +"61314","Buda","IL","41.310471","-89.67662","-6","1" +"61315","Bureau","IL","41.289819","-89.37069","-6","1" +"61316","Cedar Point","IL","41.261853","-89.12523","-6","1" +"61317","Cherry","IL","41.4276","-89.21243","-6","1" +"61318","Compton","IL","41.710715","-89.07807","-6","1" +"61319","Cornell","IL","41.011259","-88.74854","-6","1" +"61320","Dalzell","IL","41.350864","-89.17366","-6","1" +"61321","Dana","IL","40.963663","-88.97932","-6","1" +"61322","Depue","IL","41.321814","-89.3086","-6","1" +"61323","Dover","IL","41.435327","-89.39583","-6","1" +"61324","Eldena","IL","41.770952","-89.41267","-6","1" +"61325","Grand Ridge","IL","41.234167","-88.82807","-6","1" +"61326","Granville","IL","41.264159","-89.23655","-6","1" +"61327","Hennepin","IL","41.252101","-89.32451","-6","1" +"61328","Kasbeer","IL","41.504603","-89.46289","-6","1" +"61329","Ladd","IL","41.380259","-89.21239","-6","1" +"61330","La Moille","IL","41.53364","-89.27691","-6","1" +"61331","Lee Center","IL","41.747471","-89.27713","-6","1" +"61332","Leonore","IL","41.190024","-88.98238","-6","1" +"61333","Long Point","IL","40.990965","-88.88278","-6","1" +"61334","Lostant","IL","41.144329","-89.08815","-6","1" +"61335","McNabb","IL","41.168946","-89.2205","-6","1" +"61336","Magnolia","IL","41.111077","-89.21207","-6","1" +"61337","Malden","IL","41.427282","-89.36622","-6","1" +"61338","Manlius","IL","41.4547","-89.66966","-6","1" +"61340","Mark","IL","41.265597","-89.25106","-6","1" +"61341","Marseilles","IL","41.336202","-88.69727","-6","1" +"61342","Mendota","IL","41.543149","-89.10696","-6","1" +"61344","Mineral","IL","41.394429","-89.84111","-6","1" +"61345","Neponset","IL","41.280262","-89.79442","-6","1" +"61346","New Bedford","IL","41.513879","-89.71842","-6","1" +"61348","Oglesby","IL","41.292401","-89.05943","-6","1" +"61349","Ohio","IL","41.543342","-89.44078","-6","1" +"61350","Ottawa","IL","41.35263","-88.84734","-6","1" +"61353","Paw Paw","IL","41.690735","-88.98815","-6","1" +"61354","Peru","IL","41.330789","-89.1299","-6","1" +"61356","Princeton","IL","41.372528","-89.44315","-6","1" +"61358","Rutland","IL","40.986256","-89.04364","-6","1" +"61359","Seatonville","IL","41.363772","-89.26975","-6","1" +"61360","Seneca","IL","41.320345","-88.61017","-6","1" +"61361","Sheffield","IL","41.400837","-89.74444","-6","1" +"61362","Spring Valley","IL","41.332908","-89.20847","-6","1" +"61363","Standard","IL","41.25645","-89.17901","-6","1" +"61364","Streator","IL","41.129482","-88.83666","-6","1" +"61367","Sublette","IL","41.638122","-89.26889","-6","1" +"61368","Tiskilwa","IL","41.279825","-89.50492","-6","1" +"61369","Toluca","IL","40.992084","-89.15231","-6","1" +"61370","Tonica","IL","41.21076","-89.03886","-6","1" +"61371","Triumph","IL","41.499089","-89.021881","-6","1" +"61372","Troy Grove","IL","41.466102","-89.07794","-6","1" +"61373","Utica","IL","41.37061","-89.0149","-6","1" +"61374","Van Orin","IL","41.543813","-89.35449","-6","1" +"61375","Varna","IL","41.037822","-89.25682","-6","1" +"61376","Walnut","IL","41.546706","-89.60081","-6","1" +"61377","Wenona","IL","41.057649","-89.04788","-6","1" +"61378","West Brooklyn","IL","41.722744","-89.15601","-6","1" +"61379","Wyanet","IL","41.369056","-89.60321","-6","1" +"61401","Galesburg","IL","40.948073","-90.36871","-6","1" +"61402","Galesburg","IL","40.932207","-90.214412","-6","1" +"61410","Abingdon","IL","40.802633","-90.39766","-6","1" +"61411","Adair","IL","40.401282","-90.50153","-6","1" +"61412","Alexis","IL","41.067549","-90.57994","-6","1" +"61413","Alpha","IL","41.189123","-90.36813","-6","1" +"61414","Altona","IL","41.117342","-90.16063","-6","1" +"61415","Avon","IL","40.661165","-90.43908","-6","1" +"61416","Bardolph","IL","40.496817","-90.56334","-6","1" +"61417","Berwick","IL","40.781504","-90.52901","-6","1" +"61418","Biggsville","IL","40.854865","-90.85925","-6","1" +"61419","Bishop Hill","IL","41.200711","-90.11832","-6","1" +"61420","Blandinsville","IL","40.555678","-90.87087","-6","1" +"61421","Bradford","IL","41.174037","-89.65849","-6","1" +"61422","Bushnell","IL","40.550883","-90.51766","-6","1" +"61423","Cameron","IL","40.889288","-90.50529","-6","1" +"61424","Camp Grove","IL","41.073398","-89.63015","-6","1" +"61425","Carman","IL","40.778519","-91.05902","-6","1" +"61426","Castleton","IL","41.118359","-89.70575","-6","1" +"61427","Cuba","IL","40.499297","-90.17764","-6","1" +"61428","Dahinda","IL","40.952695","-90.12141","-6","1" +"61430","East Galesburg","IL","40.94399","-90.31205","-6","1" +"61431","Ellisville","IL","40.617275","-90.29556","-6","1" +"61432","Fairview","IL","40.642927","-90.17174","-6","1" +"61433","Fiatt","IL","40.449305","-90.161761","-6","1" +"61434","Galva","IL","41.172197","-90.03901","-6","1" +"61435","Gerlaw","IL","40.972589","-90.54835","-6","1" +"61436","Gilson","IL","40.859964","-90.22212","-6","1" +"61437","Gladstone","IL","40.854247","-90.96542","-6","1" +"61438","Good Hope","IL","40.579737","-90.64691","-6","1" +"61439","Henderson","IL","41.02572","-90.35566","-6","1" +"61440","Industry","IL","40.324365","-90.60351","-6","1" +"61441","Ipava","IL","40.337555","-90.30458","-6","1" +"61442","Keithsburg","IL","41.092081","-90.92743","-6","1" +"61443","Kewanee","IL","41.247536","-89.92848","-6","1" +"61447","Kirkwood","IL","40.867285","-90.75759","-6","1" +"61448","Knoxville","IL","40.910079","-90.27171","-6","1" +"61449","La Fayette","IL","41.098764","-89.97361","-6","1" +"61450","La Harpe","IL","40.567399","-90.97066","-6","1" +"61451","Laura","IL","40.953365","-89.94259","-6","1" +"61452","Littleton","IL","40.249363","-90.66845","-6","1" +"61453","Little York","IL","41.010666","-90.75393","-6","1" +"61454","Lomax","IL","40.685436","-91.05207","-6","1" +"61455","Macomb","IL","40.456986","-90.6681","-6","1" +"61457","Lee","IL","40.553989","-90.355505","-6","1" +"61458","Maquon","IL","40.776079","-90.1938","-6","1" +"61459","Marietta","IL","40.503305","-90.41808","-6","1" +"61460","Media","IL","40.734056","-90.82654","-6","1" +"61462","Monmouth","IL","40.918849","-90.64466","-6","1" +"61465","New Windsor","IL","41.200936","-90.45631","-6","1" +"61466","North Henderson","IL","41.100353","-90.46726","-6","1" +"61467","Oneida","IL","41.069414","-90.24177","-6","1" +"61468","Opheim","IL","41.254936","-90.40384","-6","1" +"61469","Oquawka","IL","40.957929","-90.93608","-6","1" +"61470","Prairie City","IL","40.614899","-90.47345","-6","1" +"61471","Raritan","IL","40.696535","-90.82607","-6","1" +"61472","Rio","IL","41.105401","-90.38717","-6","1" +"61473","Roseville","IL","40.70595","-90.65724","-6","1" +"61474","Saint Augustine","IL","40.740729","-90.37946","-6","1" +"61475","Sciota","IL","40.581413","-90.7612","-6","1" +"61476","Seaton","IL","41.095037","-90.80998","-6","1" +"61477","Smithfield","IL","40.500643","-90.31576","-6","1" +"61478","Smithshire","IL","40.777241","-90.76454","-6","1" +"61479","Speer","IL","40.999497","-89.65429","-6","1" +"61480","Stronghurst","IL","40.727428","-90.91347","-6","1" +"61482","Table Grove","IL","40.368358","-90.42469","-6","1" +"61483","Toulon","IL","41.09638","-89.86649","-6","1" +"61484","Vermont","IL","40.292388","-90.42833","-6","1" +"61485","Victoria","IL","41.025484","-90.08422","-6","1" +"61486","Viola","IL","41.195087","-90.57923","-6","1" +"61488","Wataga","IL","41.030951","-90.29705","-6","1" +"61489","Williamsfield","IL","40.929497","-90.01888","-6","1" +"61490","Woodhull","IL","41.183299","-90.27637","-6","1" +"61491","Wyoming","IL","41.068691","-89.76033","-6","1" +"61501","Astoria","IL","40.234249","-90.32941","-6","1" +"61516","Benson","IL","40.850381","-89.11878","-6","1" +"61517","Brimfield","IL","40.816162","-89.84131","-6","1" +"61518","Brimfield","IL","40.744179","-89.718401","-6","1" +"61519","Bryant","IL","40.466397","-90.09632","-6","1" +"61520","Canton","IL","40.552853","-90.02794","-6","1" +"61523","Chillicothe","IL","40.914377","-89.50654","-6","1" +"61524","Dunfermline","IL","40.490965","-90.03285","-6","1" +"61525","Dunlap","IL","40.849036","-89.65554","-6","1" +"61526","Edelstein","IL","40.936244","-89.62","-6","1" +"61528","Edwards","IL","40.776845","-89.7401","-6","1" +"61529","Elmwood","IL","40.780415","-89.95565","-6","1" +"61530","Eureka","IL","40.718228","-89.27153","-6","1" +"61531","Farmington","IL","40.68847","-90.02166","-6","1" +"61532","Forest City","IL","40.35756","-89.82389","-6","1" +"61533","Glasford","IL","40.577778","-89.8297","-6","1" +"61534","Green Valley","IL","40.40943","-89.65687","-6","1" +"61535","Groveland","IL","40.590353","-89.54053","-6","1" +"61536","Hanna City","IL","40.690205","-89.78042","-6","1" +"61537","Henry","IL","41.113829","-89.38486","-6","1" +"61539","Kingston Mines","IL","40.558329","-89.76891","-6","1" +"61540","Lacon","IL","41.030697","-89.38586","-6","1" +"61541","La Rose","IL","40.975736","-89.23943","-6","1" +"61542","Lewistown","IL","40.39309","-90.13748","-6","1" +"61543","Liverpool","IL","40.392048","-89.99885","-6","1" +"61544","London Mills","IL","40.688615","-90.24422","-6","1" +"61545","Lowpoint","IL","40.873236","-89.37082","-6","1" +"61546","Manito","IL","40.442037","-89.78797","-6","1" +"61547","Mapleton","IL","40.619174","-89.72628","-6","1" +"61548","Metamora","IL","40.784412","-89.40841","-6","1" +"61550","Morton","IL","40.613788","-89.46031","-6","1" +"61552","Mossville","IL","40.817587","-89.56654","-6","1" +"61553","Norris","IL","40.449305","-90.161761","-6","1" +"61554","Pekin","IL","40.567088","-89.63382","-6","1" +"61555","Pekin","IL","40.56071","-89.650232","-6","1" +"61558","Pekin","IL","40.554538","-89.609951","-6","1" +"61559","Princeville","IL","40.935608","-89.76802","-6","1" +"61560","Putnam","IL","41.198061","-89.43131","-6","1" +"61561","Roanoke","IL","40.795911","-89.19419","-6","1" +"61562","Rome","IL","40.874269","-89.506695","-6","1" +"61563","Saint David","IL","40.489747","-90.05501","-6","1" +"61564","South Pekin","IL","40.49271","-89.65194","-6","1" +"61565","Sparland","IL","41.036199","-89.48336","-6","1" +"61567","Topeka","IL","40.340202","-89.90929","-6","1" +"61568","Tremont","IL","40.513656","-89.47408","-6","1" +"61569","Trivoli","IL","40.691022","-89.89138","-6","1" +"61570","Washburn","IL","40.920631","-89.29547","-6","1" +"61571","Washington","IL","40.701037","-89.44294","-6","1" +"61572","Yates City","IL","40.796752","-90.02866","-6","1" +"61576","Richland","IL","40.928331","-89.348163","-6","1" +"61584","Vermont","IL","40.288318","-90.429294","-6","1" +"61593","Garrett","IL","39.809913","-88.343237","-6","1" +"61601","Peoria","IL","40.693137","-89.589847","-6","1" +"61602","Peoria","IL","40.677987","-89.60864","-6","1" +"61603","Peoria","IL","40.712887","-89.57904","-6","1" +"61604","Peoria","IL","40.709237","-89.63633","-6","1" +"61605","Peoria","IL","40.678037","-89.62737","-6","1" +"61606","Peoria","IL","40.699137","-89.60972","-6","1" +"61607","Peoria","IL","40.642049","-89.67147","-6","1" +"61610","Creve Coeur","IL","40.643846","-89.59908","-6","1" +"61611","East Peoria","IL","40.683387","-89.54493","-6","1" +"61612","Peoria","IL","40.744179","-89.718401","-6","1" +"61613","Peoria","IL","40.742537","-89.627948","-6","1" +"61614","Peoria","IL","40.755343","-89.59799","-6","1" +"61615","Peoria","IL","40.764368","-89.6448","-6","1" +"61616","Peoria","IL","40.743266","-89.576628","-6","1" +"61625","Peoria","IL","40.696287","-89.616648","-6","1" +"61628","Peoria","IL","40.744179","-89.718401","-6","1" +"61629","Peoria","IL","40.692037","-89.588747","-6","1" +"61630","Peoria","IL","40.744179","-89.718401","-6","1" +"61632","Peoria","IL","40.765301","-89.569207","-6","1" +"61633","Peoria","IL","40.731165","-89.603081","-6","1" +"61634","Peoria","IL","40.689637","-89.592597","-6","1" +"61635","Peoria","IL","40.744179","-89.718401","-6","1" +"61636","Peoria","IL","40.699937","-89.595147","-6","1" +"61637","Peoria","IL","40.702487","-89.589797","-6","1" +"61638","Peoria","IL","40.796887","-89.611146","-6","1" +"61639","Peoria","IL","40.709837","-89.563646","-6","1" +"61640","Peoria","IL","40.785653","-89.617657","-6","1" +"61641","Peoria","IL","40.640002","-89.651987","-6","1" +"61643","Peoria","IL","40.744179","-89.718401","-6","1" +"61644","Peoria","IL","40.765301","-89.569207","-6","1" +"61650","Peoria","IL","40.744179","-89.718401","-6","1" +"61651","Peoria","IL","40.744179","-89.718401","-6","1" +"61652","Peoria","IL","40.87671","-89.509113","-6","1" +"61653","Peoria","IL","40.744179","-89.718401","-6","1" +"61654","Peoria","IL","40.744179","-89.718401","-6","1" +"61655","Peoria","IL","40.744179","-89.718401","-6","1" +"61656","Peoria","IL","40.744179","-89.718401","-6","1" +"61675","Carlock","IL","40.582108","-89.128871","-6","1" +"61701","Bloomington","IL","40.477286","-88.99592","-6","1" +"61702","Bloomington","IL","40.519236","-88.864303","-6","1" +"61704","Bloomington","IL","40.459584","-88.96939","-6","1" +"61709","Bloomington","IL","40.461431","-88.953015","-6","1" +"61710","Bloomington","IL","40.477735","-88.954174","-6","1" +"61720","Anchor","IL","40.553838","-88.5101","-6","1" +"61721","Armington","IL","40.341123","-89.32028","-6","1" +"61722","Arrowsmith","IL","40.434885","-88.62237","-6","1" +"61723","Atlanta","IL","40.256893","-89.25013","-6","1" +"61724","Bellflower","IL","40.336763","-88.52604","-6","1" +"61725","Carlock","IL","40.600045","-89.13627","-6","1" +"61726","Chenoa","IL","40.740106","-88.70948","-6","1" +"61727","Clinton","IL","40.145501","-88.96776","-6","1" +"61728","Colfax","IL","40.56944","-88.62727","-6","1" +"61729","Congerville","IL","40.619306","-89.22353","-6","1" +"61730","Cooksville","IL","40.537652","-88.73274","-6","1" +"61731","Cropsey","IL","40.607615","-88.49","-6","1" +"61732","Danvers","IL","40.528515","-89.19057","-6","1" +"61733","Deer Creek","IL","40.615875","-89.32778","-6","1" +"61734","Delavan","IL","40.369256","-89.54251","-6","1" +"61735","Dewitt","IL","40.193547","-88.79575","-6","1" +"61736","Downs","IL","40.395487","-88.8498","-6","1" +"61737","Ellsworth","IL","40.450325","-88.72052","-6","1" +"61738","El Paso","IL","40.731662","-89.03978","-6","1" +"61739","Fairbury","IL","40.741158","-88.51546","-6","1" +"61740","Flanagan","IL","40.882858","-88.85739","-6","1" +"61741","Forrest","IL","40.756972","-88.40479","-6","1" +"61742","Goodfield","IL","40.628105","-89.28004","-6","1" +"61743","Graymont","IL","40.877451","-88.7778","-6","1" +"61744","Gridley","IL","40.740729","-88.88791","-6","1" +"61745","Heyworth","IL","40.32122","-88.97442","-6","1" +"61747","Hopedale","IL","40.422027","-89.42614","-6","1" +"61748","Hudson","IL","40.627948","-88.97711","-6","1" +"61749","Kenney","IL","40.091729","-89.10358","-6","1" +"61750","Lane","IL","40.122884","-88.85664","-6","1" +"61751","Lawndale","IL","40.21927","-89.285172","-6","1" +"61752","Le Roy","IL","40.345004","-88.75786","-6","1" +"61753","Lexington","IL","40.63872","-88.7923","-6","1" +"61754","McLean","IL","40.321811","-89.15864","-6","1" +"61755","Mackinaw","IL","40.533634","-89.34345","-6","1" +"61756","Maroa","IL","40.027071","-88.96715","-6","1" +"61758","Merna","IL","40.52835","-88.84075","-6","1" +"61759","Minier","IL","40.431577","-89.32013","-6","1" +"61760","Minonk","IL","40.893593","-89.03266","-6","1" +"61761","Normal","IL","40.515485","-88.98629","-6","1" +"61764","Pontiac","IL","40.884053","-88.63376","-6","1" +"61766","Towanda","IL","40.564323","-88.898663","-6","1" +"61769","Saunemin","IL","40.885397","-88.39957","-6","1" +"61770","Saybrook","IL","40.430727","-88.52548","-6","1" +"61771","Secor","IL","40.738973","-89.13579","-6","1" +"61772","Shirley","IL","40.399689","-89.06088","-6","1" +"61773","Sibley","IL","40.584937","-88.38028","-6","1" +"61774","Stanford","IL","40.426186","-89.2107","-6","1" +"61775","Strawn","IL","40.653799","-88.39026","-6","1" +"61776","Towanda","IL","40.574936","-88.88696","-6","1" +"61777","Wapella","IL","40.240627","-88.96635","-6","1" +"61778","Waynesville","IL","40.242378","-89.1087","-6","1" +"61790","Normal","IL","40.51032","-88.99803","-6","1" +"61791","Bloomington","IL","40.519236","-88.864303","-6","1" +"61799","Bloomington","IL","40.488468","-88.939637","-6","1" +"61801","Urbana","IL","40.109647","-88.21246","-6","1" +"61802","Urbana","IL","40.121648","-88.17649","-6","1" +"61803","Urbana","IL","40.10593","-88.224669","-6","1" +"61810","Allerton","IL","39.909736","-87.93384","-6","1" +"61811","Alvin","IL","40.293159","-87.61401","-6","1" +"61812","Armstrong","IL","40.27363","-87.88919","-6","1" +"61813","Bement","IL","39.918042","-88.56139","-6","1" +"61814","Bismarck","IL","40.231345","-87.58163","-6","1" +"61815","Bondville","IL","40.112616","-88.3708","-6","1" +"61816","Broadlands","IL","39.91613","-88.00203","-6","1" +"61817","Catlin","IL","40.059068","-87.70376","-6","1" +"61818","Cerro Gordo","IL","39.889596","-88.72633","-6","1" +"61819","Bryant","IL","40.466273","-90.095368","-6","1" +"61820","Champaign","IL","40.114931","-88.24322","-6","1" +"61821","Champaign","IL","40.108631","-88.2733","-6","1" +"61822","Champaign","IL","40.126854","-88.29315","-6","1" +"61824","Champaign","IL","40.139946","-88.196102","-6","1" +"61825","Champaign","IL","40.139946","-88.196102","-6","1" +"61826","Champaign","IL","40.113139","-88.361251","-6","1" +"61830","Cisco","IL","40.020978","-88.72247","-6","1" +"61831","Collison","IL","40.2159","-87.78418","-6","1" +"61832","Danville","IL","40.133786","-87.62898","-6","1" +"61833","Tilton","IL","40.096186","-87.64569","-6","1" +"61834","Danville","IL","40.175463","-87.6124","-6","1" +"61839","De Land","IL","40.139336","-88.62966","-6","1" +"61840","Dewey","IL","40.310244","-88.30526","-6","1" +"61841","Fairmount","IL","40.039632","-87.83052","-6","1" +"61842","Farmer City","IL","40.251945","-88.65279","-6","1" +"61843","Fisher","IL","40.313921","-88.3742","-6","1" +"61844","Fithian","IL","40.126299","-87.86871","-6","1" +"61845","Foosland","IL","40.376141","-88.4135","-6","1" +"61846","Georgetown","IL","39.97412","-87.63138","-6","1" +"61847","Gifford","IL","40.310063","-88.01922","-6","1" +"61848","Henning","IL","40.306282","-87.70192","-6","1" +"61849","Homer","IL","40.028716","-87.9576","-6","1" +"61850","Indianola","IL","39.92804","-87.73629","-6","1" +"61851","Ivesdale","IL","39.950391","-88.43939","-6","1" +"61852","Longview","IL","39.901988","-88.07537","-6","1" +"61853","Mahomet","IL","40.205916","-88.40295","-6","1" +"61854","Mansfield","IL","40.213607","-88.5296","-6","1" +"61855","Milmine","IL","39.919693","-88.67859","-6","1" +"61856","Monticello","IL","40.0334","-88.57375","-6","1" +"61857","Muncie","IL","40.11594","-87.84208","-6","1" +"61858","Oakwood","IL","40.121098","-87.74657","-6","1" +"61859","Ogden","IL","40.149486","-87.96347","-6","1" +"61862","Penfield","IL","40.296282","-87.95553","-6","1" +"61863","Pesotum","IL","39.907919","-88.27977","-6","1" +"61864","Philo","IL","39.989282","-88.15174","-6","1" +"61865","Potomac","IL","40.306774","-87.80716","-6","1" +"61866","Rantoul","IL","40.307065","-88.15575","-6","1" +"61870","Ridge Farm","IL","39.90241","-87.62722","-6","1" +"61871","Royal","IL","40.192015","-87.97138","-6","1" +"61872","Sadorus","IL","39.945328","-88.36389","-6","1" +"61873","Saint Joseph","IL","40.124202","-88.03401","-6","1" +"61874","Savoy","IL","40.061694","-88.25023","-6","1" +"61875","Seymour","IL","40.107548","-88.42487","-6","1" +"61876","Sidell","IL","39.907331","-87.82587","-6","1" +"61877","Sidney","IL","40.004053","-88.07693","-6","1" +"61878","Thomasboro","IL","40.243692","-88.17296","-6","1" +"61880","Tolono","IL","39.981936","-88.2532","-6","1" +"61882","Weldon","IL","40.119483","-88.75367","-6","1" +"61883","Westville","IL","40.040115","-87.63685","-6","1" +"61884","White Heath","IL","40.10311","-88.49744","-6","1" +"61901","Bloomington","IL","40.810131","-88.477739","-6","1" +"61910","Arcola","IL","39.676634","-88.30284","-6","1" +"61911","Arthur","IL","39.704391","-88.45985","-6","1" +"61912","Ashmore","IL","39.529566","-88.03349","-6","1" +"61913","Atwood","IL","39.809929","-88.45309","-6","1" +"61914","Bethany","IL","39.639487","-88.74383","-6","1" +"61917","Brocton","IL","39.706131","-87.91691","-6","1" +"61919","Camargo","IL","39.783794","-88.13861","-6","1" +"61920","Charleston","IL","39.496547","-88.17348","-6","1" +"61924","Chrisman","IL","39.786334","-87.66325","-6","1" +"61925","Dalton City","IL","39.719012","-88.82227","-6","1" +"61928","Gays","IL","39.45274","-88.5144","-6","1" +"61929","Hammond","IL","39.806718","-88.6087","-6","1" +"61930","Hindsboro","IL","39.685822","-88.11971","-6","1" +"61931","Humboldt","IL","39.59477","-88.34792","-6","1" +"61932","Hume","IL","39.797661","-87.87017","-6","1" +"61933","Kansas","IL","39.556054","-87.92289","-6","1" +"61936","La Place","IL","39.800512","-88.71835","-6","1" +"61937","Lovington","IL","39.724744","-88.62995","-6","1" +"61938","Mattoon","IL","39.474889","-88.37421","-6","1" +"61940","Metcalf","IL","39.805101","-87.81014","-6","1" +"61941","Murdock","IL","39.801562","-88.07823","-6","1" +"61942","Newman","IL","39.802798","-87.99744","-6","1" +"61943","Oakland","IL","39.655063","-88.01806","-6","1" +"61944","Paris","IL","39.608494","-87.69958","-6","1" +"61949","Redmon","IL","39.646359","-87.86014","-6","1" +"61951","Sullivan","IL","39.582494","-88.6021","-6","1" +"61953","Tuscola","IL","39.793493","-88.29184","-6","1" +"61955","Vermilion","IL","39.679882","-87.750216","-6","1" +"61956","Villa Grove","IL","39.858506","-88.15018","-6","1" +"61957","Windsor","IL","39.434148","-88.60033","-6","1" +"62001","Alhambra","IL","38.884434","-89.74886","-6","1" +"62002","Alton","IL","38.906065","-90.15909","-6","1" +"62003","Medora","IL","39.177478","-90.142329","-6","1" +"62006","Batchtown","IL","39.079147","-90.67372","-6","1" +"62009","Benld","IL","39.092526","-89.8029","-6","1" +"62010","Bethalto","IL","38.912297","-90.043","-6","1" +"62011","Bingham","IL","39.11204","-89.2134","-6","1" +"62012","Brighton","IL","39.038752","-90.13819","-6","1" +"62013","Brussels","IL","38.968323","-90.58121","-6","1" +"62014","Bunker Hill","IL","39.039382","-89.94935","-6","1" +"62015","Butler","IL","39.212833","-89.55969","-6","1" +"62016","Carrollton","IL","39.301561","-90.41674","-6","1" +"62017","Coffeen","IL","39.081889","-89.37787","-6","1" +"62018","Cottage Hills","IL","38.905998","-90.08306","-6","1" +"62019","Donnellson","IL","39.017877","-89.46415","-6","1" +"62021","Dorsey","IL","38.976011","-89.97461","-6","1" +"62022","Dow","IL","38.997296","-90.3405","-6","1" +"62023","Eagarville","IL","39.110422","-89.78428","-6","1" +"62024","East Alton","IL","38.868136","-90.08023","-6","1" +"62025","Edwardsville","IL","38.819297","-89.9551","-6","1" +"62026","Edwardsville","IL","38.733748","-89.94305","-6","1" +"62027","Eldred","IL","39.241734","-90.54614","-6","1" +"62028","Elsah","IL","38.958848","-90.35383","-6","1" +"62030","Fidelity","IL","39.155608","-90.1649","-6","1" +"62031","Fieldon","IL","39.103735","-90.54252","-6","1" +"62032","Fillmore","IL","39.114972","-89.28092","-6","1" +"62033","Gillespie","IL","39.127717","-89.8288","-6","1" +"62034","Glen Carbon","IL","38.75592","-89.97442","-6","1" +"62035","Godfrey","IL","38.947841","-90.2216","-6","1" +"62036","Golden Eagle","IL","38.91384","-90.57421","-6","1" +"62037","Grafton","IL","38.985138","-90.44563","-6","1" +"62040","Granite City","IL","38.720938","-90.11431","-6","1" +"62043","Brushy Mound","IL","39.213822","-89.82872","-6","1" +"62044","Greenfield","IL","39.362285","-90.22147","-6","1" +"62045","Hamburg","IL","39.236358","-90.71359","-6","1" +"62046","Hamel","IL","38.889879","-89.84638","-6","1" +"62047","Hardin","IL","39.128014","-90.6159","-6","1" +"62048","Hartford","IL","38.833898","-90.09533","-6","1" +"62049","Hillsboro","IL","39.146809","-89.48442","-6","1" +"62050","Hillview","IL","39.430595","-90.54502","-6","1" +"62051","Irving","IL","39.205747","-89.40909","-6","1" +"62052","Jerseyville","IL","39.114762","-90.32442","-6","1" +"62053","Kampsville","IL","39.322422","-90.64246","-6","1" +"62054","Kane","IL","39.192501","-90.34541","-6","1" +"62056","Litchfield","IL","39.179875","-89.65721","-6","1" +"62058","Livingston","IL","38.967324","-89.76133","-6","1" +"62059","Lovejoy","IL","38.6565","-90.16643","-6","1" +"62060","Madison","IL","38.6807","-90.15411","-6","1" +"62061","Marine","IL","38.78956","-89.77538","-6","1" +"62062","Maryville","IL","38.726548","-89.9572","-6","1" +"62063","Medora","IL","39.188838","-90.14654","-6","1" +"62065","Michael","IL","39.235652","-90.62842","-6","1" +"62067","Moro","IL","38.91973","-90.01241","-6","1" +"62069","Mount Olive","IL","39.077557","-89.73423","-6","1" +"62070","Mozier","IL","39.328077","-90.76896","-6","1" +"62071","National Stock Yards","IL","38.6516","-90.163909","-6","1" +"62074","New Douglas","IL","38.964162","-89.68226","-6","1" +"62075","Nokomis","IL","39.299771","-89.2864","-6","1" +"62076","Ohlman","IL","39.261791","-89.421584","-6","1" +"62077","Panama","IL","39.031623","-89.5228","-6","1" +"62078","Patterson","IL","39.477337","-90.48002","-6","1" +"62079","Piasa","IL","39.115848","-90.13336","-6","1" +"62080","Ramsey","IL","39.136284","-89.10348","-6","1" +"62081","Rockbridge","IL","39.261499","-90.23039","-6","1" +"62082","Roodhouse","IL","39.481469","-90.33999","-6","1" +"62083","Rosamond","IL","39.354674","-89.19993","-6","1" +"62084","Roxana","IL","38.8494","-90.08536","-6","1" +"62085","Sawyerville","IL","39.078047","-89.80626","-6","1" +"62086","Sorento","IL","38.996375","-89.57044","-6","1" +"62087","South Roxana","IL","38.828347","-90.05894","-6","1" +"62088","Staunton","IL","39.011612","-89.78855","-6","1" +"62089","Taylor Springs","IL","39.130404","-89.49298","-6","1" +"62090","Venice","IL","38.67065","-90.17052","-6","1" +"62091","Walshville","IL","39.053344","-89.59324","-6","1" +"62092","White Hall","IL","39.433041","-90.40655","-6","1" +"62093","Wilsonville","IL","39.068901","-89.85425","-6","1" +"62094","Witt","IL","39.249272","-89.35236","-6","1" +"62095","Wood River","IL","38.860447","-90.09418","-6","1" +"62097","Worden","IL","38.932347","-89.84608","-6","1" +"62098","Wrights","IL","39.376153","-90.293302","-6","1" +"62201","East Saint Louis","IL","38.62855","-90.14609","-6","1" +"62202","East Saint Louis","IL","38.6163","-90.159059","-6","1" +"62203","East Saint Louis","IL","38.598175","-90.07575","-6","1" +"62204","East Saint Louis","IL","38.631383","-90.10008","-6","1" +"62205","East Saint Louis","IL","38.6151","-90.12675","-6","1" +"62206","East Saint Louis","IL","38.564451","-90.1628","-6","1" +"62207","East Saint Louis","IL","38.59035","-90.13276","-6","1" +"62208","Fairview Heights","IL","38.596199","-90.00227","-6","1" +"62214","Addieville","IL","38.377193","-89.55998","-6","1" +"62215","Albers","IL","38.517125","-89.60258","-6","1" +"62216","Aviston","IL","38.607817","-89.60516","-6","1" +"62217","Baldwin","IL","38.178395","-89.84183","-6","1" +"62218","Bartelso","IL","38.535097","-89.46426","-6","1" +"62219","Beckemeyer","IL","38.605187","-89.43404","-6","1" +"62220","Belleville","IL","38.50046","-89.97654","-6","1" +"62221","Belleville","IL","38.532311","-89.93996","-6","1" +"62222","Belleville","IL","38.439983","-89.983521","-6","1" +"62223","Belleville","IL","38.55615","-90.05078","-6","1" +"62224","Mascoutah","IL","38.439983","-89.983521","-6","1" +"62225","Scott Air Force Base","IL","38.544298","-89.85054","-6","1" +"62226","Belleville","IL","38.53895","-90.00104","-6","1" +"62230","Breese","IL","38.620018","-89.5305","-6","1" +"62231","Carlyle","IL","38.623384","-89.36368","-6","1" +"62232","Caseyville","IL","38.636749","-90.01763","-6","1" +"62233","Chester","IL","37.921816","-89.82842","-6","1" +"62234","Collinsville","IL","38.679282","-89.99407","-6","1" +"62236","Columbia","IL","38.442906","-90.20775","-6","1" +"62237","Coulterville","IL","38.188624","-89.59789","-6","1" +"62238","Cutler","IL","38.034281","-89.54537","-6","1" +"62239","Dupo","IL","38.526792","-90.19253","-6","1" +"62240","East Carondelet","IL","38.535325","-90.21617","-6","1" +"62241","Ellis Grove","IL","38.011729","-89.89007","-6","1" +"62242","Evansville","IL","38.092615","-89.93485","-6","1" +"62243","Freeburg","IL","38.425949","-89.90389","-6","1" +"62244","Fults","IL","38.200113","-90.2272","-6","1" +"62245","Germantown","IL","38.554515","-89.5631","-6","1" +"62246","Greenville","IL","38.889355","-89.40987","-6","1" +"62247","Hagarstown","IL","38.977111","-88.975507","-6","1" +"62248","Hecker","IL","38.299507","-89.961825","-6","1" +"62249","Highland","IL","38.752017","-89.67478","-6","1" +"62250","Hoffman","IL","38.540238","-89.26294","-6","1" +"62252","Huey","IL","38.601768","-89.291549","-6","1" +"62253","Keyesport","IL","38.761214","-89.29128","-6","1" +"62254","Lebanon","IL","38.601648","-89.81317","-6","1" +"62255","Lenzburg","IL","38.303147","-89.79161","-6","1" +"62256","Maeystown","IL","38.30426","-90.135645","-6","1" +"62257","Marissa","IL","38.260108","-89.73627","-6","1" +"62258","Mascoutah","IL","38.481674","-89.79432","-6","1" +"62259","Menard","IL","38.013132","-89.899569","-6","1" +"62260","Millstadt","IL","38.463718","-90.09831","-6","1" +"62261","Modoc","IL","37.988745","-90.00785","-6","1" +"62262","Mulberry Grove","IL","38.931719","-89.27132","-6","1" +"62263","Nashville","IL","38.346578","-89.38453","-6","1" +"62264","New Athens","IL","38.318253","-89.88852","-6","1" +"62265","New Baden","IL","38.520285","-89.6807","-6","1" +"62266","New Memphis","IL","38.478","-89.67869","-6","1" +"62268","Oakdale","IL","38.271313","-89.51773","-6","1" +"62269","O Fallon","IL","38.589849","-89.91207","-6","1" +"62270","Dupo","IL","38.227604","-89.650381","-6","1" +"62271","Okawville","IL","38.439574","-89.5286","-6","1" +"62272","Percy","IL","38.006386","-89.61645","-6","1" +"62273","Pierron","IL","38.780229","-89.5973","-6","1" +"62274","Pinckneyville","IL","38.078231","-89.38796","-6","1" +"62275","Pocahontas","IL","38.812744","-89.54888","-6","1" +"62277","Prairie Du Rocher","IL","38.095119","-90.09885","-6","1" +"62278","Red Bud","IL","38.214515","-89.98785","-6","1" +"62279","Renault","IL","38.153322","-90.13459","-6","1" +"62280","Rockwood","IL","37.845454","-89.66878","-6","1" +"62281","Saint Jacob","IL","38.706847","-89.77739","-6","1" +"62282","Saint Libory","IL","38.363228","-89.713921","-6","1" +"62283","Shattuc","IL","38.647775","-89.20166","-6","1" +"62284","Smithboro","IL","38.887748","-89.32248","-6","1" +"62285","Smithton","IL","38.399148","-89.99604","-6","1" +"62286","Sparta","IL","38.122112","-89.71168","-6","1" +"62288","Steeleville","IL","38.002188","-89.66723","-6","1" +"62289","Summerfield","IL","38.596948","-89.75117","-6","1" +"62292","Tilden","IL","38.214035","-89.68346","-6","1" +"62293","Trenton","IL","38.611798","-89.67691","-6","1" +"62294","Troy","IL","38.725498","-89.88891","-6","1" +"62295","Valmeyer","IL","38.299904","-90.30833","-6","1" +"62297","Walsh","IL","38.049616","-89.80775","-6","1" +"62298","Waterloo","IL","38.325969","-90.14606","-6","1" +"62301","Quincy","IL","39.929597","-91.37415","-6","1" +"62305","Quincy","IL","39.96008","-91.302633","-6","1" +"62306","Quincy","IL","39.97863","-91.21256","-6","1" +"62310","Adrian","IL","40.416145","-91.205805","-6","1" +"62311","Augusta","IL","40.223837","-90.93288","-6","1" +"62312","Barry","IL","39.704649","-91.0368","-6","1" +"62313","Basco","IL","40.319528","-91.20483","-6","1" +"62314","Baylis","IL","39.756139","-90.89509","-6","1" +"62316","Bowen","IL","40.232385","-91.05746","-6","1" +"62318","Burnside","IL","40.513153","-91.12851","-6","1" +"62319","Camden","IL","40.147818","-90.74246","-6","1" +"62320","Camp Point","IL","40.020397","-91.07407","-6","1" +"62321","Carthage","IL","40.414128","-91.11577","-6","1" +"62323","Chambersburg","IL","39.817702","-90.66923","-6","1" +"62324","Clayton","IL","39.988988","-90.94976","-6","1" +"62325","Coatsburg","IL","40.034398","-91.16278","-6","1" +"62326","Colchester","IL","40.421857","-90.80333","-6","1" +"62329","Colusa","IL","40.571353","-91.168221","-6","1" +"62330","Dallas City","IL","40.630407","-91.15278","-6","1" +"62334","Elvaston","IL","40.396983","-91.25029","-6","1" +"62336","Ferris","IL","40.467994","-91.17125","-6","1" +"62338","Fowler","IL","39.98152","-91.25754","-6","1" +"62339","Golden","IL","40.112726","-91.02632","-6","1" +"62340","Griggsville","IL","39.71345","-90.72045","-6","1" +"62341","Hamilton","IL","40.402015","-91.33182","-6","1" +"62343","Hull","IL","39.709855","-91.22914","-6","1" +"62344","Huntsville","IL","40.18275","-90.81819","-6","1" +"62345","Kinderhook","IL","39.700245","-91.14564","-6","1" +"62346","La Prairie","IL","40.151799","-90.95426","-6","1" +"62347","Liberty","IL","39.876235","-91.1106","-6","1" +"62348","Lima","IL","40.180236","-91.37791","-6","1" +"62349","Loraine","IL","40.160393","-91.20372","-6","1" +"62351","Mendon","IL","40.094396","-91.26558","-6","1" +"62352","Milton","IL","39.563599","-90.64813","-6","1" +"62353","Mount Sterling","IL","39.983824","-90.74134","-6","1" +"62354","Nauvoo","IL","40.531825","-91.36598","-6","1" +"62355","Nebo","IL","39.440654","-90.77809","-6","1" +"62356","New Canton","IL","39.599949","-91.09115","-6","1" +"62357","New Salem","IL","39.696523","-90.84253","-6","1" +"62358","Niota","IL","40.587769","-91.26301","-6","1" +"62359","Paloma","IL","40.028595","-91.21286","-6","1" +"62360","Payson","IL","39.813094","-91.25561","-6","1" +"62361","Pearl","IL","39.469982","-90.63108","-6","1" +"62362","Perry","IL","39.781349","-90.74617","-6","1" +"62363","Pittsfield","IL","39.606349","-90.78642","-6","1" +"62365","Plainville","IL","39.795818","-91.16751","-6","1" +"62366","Pleasant Hill","IL","39.450931","-90.87779","-6","1" +"62367","Plymouth","IL","40.304799","-90.88699","-6","1" +"62370","Rockport","IL","39.510835","-90.99193","-6","1" +"62373","Sutter","IL","40.240004","-91.35197","-6","1" +"62374","Tennessee","IL","40.403553","-90.8834","-6","1" +"62375","Timewell","IL","39.983573","-90.8842","-6","1" +"62376","Ursa","IL","40.09625","-91.38474","-6","1" +"62378","Versailles","IL","39.884796","-90.6289","-6","1" +"62379","Warsaw","IL","40.314446","-91.40638","-6","1" +"62380","West Point","IL","40.233504","-91.19727","-6","1" +"62394","Equality","IL","37.726738","-88.372434","-6","1" +"62401","Effingham","IL","39.123807","-88.56","-6","1" +"62407","Summit","IL","39.148234","-88.593764","-6","1" +"62410","Allendale","IL","38.528202","-87.72913","-6","1" +"62411","Altamont","IL","39.062913","-88.73912","-6","1" +"62413","Annapolis","IL","39.138761","-87.83769","-6","1" +"62414","Beecher City","IL","39.167788","-88.8255","-6","1" +"62415","Birds","IL","38.710336","-87.703639","-6","1" +"62417","Bridgeport","IL","38.720425","-87.76815","-6","1" +"62418","Brownstown","IL","39.018987","-88.96134","-6","1" +"62419","Calhoun","IL","38.625864","-87.99407","-6","1" +"62420","Casey","IL","39.299447","-87.99863","-6","1" +"62421","Claremont","IL","38.755492","-87.95334","-6","1" +"62422","Cowden","IL","39.251624","-88.86505","-6","1" +"62423","Dennison","IL","39.452478","-87.57092","-6","1" +"62424","Dieterich","IL","39.01077","-88.428","-6","1" +"62425","Dundas","IL","38.830182","-88.09218","-6","1" +"62426","Edgewood","IL","38.913064","-88.66404","-6","1" +"62427","Flat Rock","IL","38.869453","-87.66502","-6","1" +"62428","Greenup","IL","39.25287","-88.13528","-6","1" +"62431","Herrick","IL","39.228594","-88.98873","-6","1" +"62432","Hidalgo","IL","39.139262","-88.14862","-6","1" +"62433","Hutsonville","IL","39.113033","-87.67563","-6","1" +"62434","Ingraham","IL","38.835884","-88.33505","-6","1" +"62435","Janesville","IL","39.374287","-88.244487","-6","1" +"62436","Jewett","IL","39.190088","-88.2601","-6","1" +"62438","Lakewood","IL","39.317235","-88.87876","-6","1" +"62439","Lawrenceville","IL","38.738226","-87.65984","-6","1" +"62440","Lerna","IL","39.393267","-88.28118","-6","1" +"62441","Marshall","IL","39.396463","-87.69589","-6","1" +"62442","Martinsville","IL","39.32463","-87.86922","-6","1" +"62443","Mason","IL","38.95232","-88.62883","-6","1" +"62444","Mode","IL","39.272317","-88.75932","-6","1" +"62445","Montrose","IL","39.183055","-88.3404","-6","1" +"62446","Mount Erie","IL","38.48679","-88.21636","-6","1" +"62447","Neoga","IL","39.32205","-88.45037","-6","1" +"62448","Newton","IL","38.974018","-88.17881","-6","1" +"62449","Oblong","IL","39.006483","-87.90005","-6","1" +"62450","Olney","IL","38.72456","-88.08658","-6","1" +"62451","Palestine","IL","39.006924","-87.6117","-6","1" +"62452","Parkersburg","IL","38.588301","-88.03692","-6","1" +"62454","Robinson","IL","39.004728","-87.7495","-6","1" +"62458","Saint Elmo","IL","39.042992","-88.87463","-6","1" +"62459","Sainte Marie","IL","38.93148","-88.0252","-6","1" +"62460","Saint Francisville","IL","38.596277","-87.65542","-6","1" +"62461","Shumway","IL","39.194021","-88.6656","-6","1" +"62462","Sigel","IL","39.223922","-88.47715","-6","1" +"62463","Stewardson","IL","39.2807","-88.62403","-6","1" +"62464","Stoy","IL","38.98981","-87.839627","-6","1" +"62465","Strasburg","IL","39.354837","-88.63491","-6","1" +"62466","Sumner","IL","38.732726","-87.85152","-6","1" +"62467","Teutopolis","IL","39.125573","-88.45609","-6","1" +"62468","Toledo","IL","39.273828","-88.25646","-6","1" +"62469","Trilla","IL","39.35239","-88.33275","-6","1" +"62471","Vandalia","IL","38.961799","-89.10978","-6","1" +"62473","Watson","IL","39.012089","-88.56383","-6","1" +"62474","Westfield","IL","39.4505","-87.99681","-6","1" +"62475","West Liberty","IL","38.868463","-88.05466","-6","1" +"62476","West Salem","IL","38.527107","-88.00583","-6","1" +"62477","West Union","IL","39.229885","-87.6664","-6","1" +"62478","West York","IL","39.175832","-87.72312","-6","1" +"62479","Wheeler","IL","39.038732","-88.31569","-6","1" +"62480","Willow Hill","IL","38.994595","-88.00464","-6","1" +"62481","Yale","IL","39.122158","-88.01982","-6","1" +"62501","Argenta","IL","39.984292","-88.81584","-6","1" +"62510","Assumption","IL","39.530502","-89.03829","-6","1" +"62511","Atwater","IL","39.346468","-89.73278","-6","1" +"62512","Beason","IL","40.139482","-89.2073","-6","1" +"62513","Blue Mound","IL","39.716269","-89.13269","-6","1" +"62514","Boody","IL","39.759905","-89.05465","-6","1" +"62515","Buffalo","IL","39.861289","-89.37836","-6","1" +"62517","Bulpitt","IL","39.591537","-89.42755","-6","1" +"62518","Chestnut","IL","40.05232","-89.18832","-6","1" +"62519","Cornland","IL","39.936817","-89.40159","-6","1" +"62520","Dawson","IL","39.824457","-89.45643","-6","1" +"62521","Decatur","IL","39.828586","-88.92907","-6","1" +"62522","Decatur","IL","39.840482","-89.00569","-6","1" +"62523","Decatur","IL","39.844086","-88.95327","-6","1" +"62524","Decatur","IL","39.853981","-88.981511","-6","1" +"62525","Decatur","IL","39.853981","-88.981511","-6","1" +"62526","Decatur","IL","39.878041","-88.95637","-6","1" +"62527","Decatur","IL","39.853981","-88.981511","-6","1" +"62530","Divernon","IL","39.568077","-89.65467","-6","1" +"62531","Edinburg","IL","39.66363","-89.39224","-6","1" +"62532","Elwin","IL","39.777583","-88.97972","-6","1" +"62533","Farmersville","IL","39.442669","-89.64068","-6","1" +"62534","Findlay","IL","39.529092","-88.7821","-6","1" +"62535","Forsyth","IL","39.925806","-88.95928","-6","1" +"62536","Glenarm","IL","39.642083","-89.65936","-6","1" +"62537","Harristown","IL","39.867151","-89.11324","-6","1" +"62538","Harvel","IL","39.359529","-89.52648","-6","1" +"62539","Illiopolis","IL","39.855984","-89.2487","-6","1" +"62540","Kincaid","IL","39.58755","-89.41265","-6","1" +"62541","Lake Fork","IL","39.969864","-89.35051","-6","1" +"62543","Latham","IL","39.965691","-89.15936","-6","1" +"62544","Macon","IL","39.693983","-88.98068","-6","1" +"62545","Mechanicsburg","IL","39.77386","-89.39012","-6","1" +"62546","Morrisonville","IL","39.430427","-89.44719","-6","1" +"62547","Mount Auburn","IL","39.771541","-89.24331","-6","1" +"62548","Mount Pulaski","IL","39.993254","-89.29707","-6","1" +"62549","Mt Zion","IL","39.777116","-88.87171","-6","1" +"62550","Moweaqua","IL","39.617542","-89.00559","-6","1" +"62551","Niantic","IL","39.838505","-89.15191","-6","1" +"62552","Oakley","IL","39.869841","-88.81261","-6","1" +"62553","Oconee","IL","39.279357","-89.10462","-6","1" +"62554","Oreana","IL","39.93706","-88.86332","-6","1" +"62555","Owaneco","IL","39.476356","-89.21607","-6","1" +"62556","Palmer","IL","39.465887","-89.39095","-6","1" +"62557","Pana","IL","39.3928","-89.08194","-6","1" +"62558","Pawnee","IL","39.580159","-89.54402","-6","1" +"62560","Raymond","IL","39.312686","-89.59541","-6","1" +"62561","Riverton","IL","39.85973","-89.52972","-6","1" +"62563","Rochester","IL","39.71984","-89.51229","-6","1" +"62565","Shelbyville","IL","39.409126","-88.80153","-6","1" +"62567","Stonington","IL","39.638951","-89.18982","-6","1" +"62568","Taylorville","IL","39.548928","-89.29692","-6","1" +"62570","Tovey","IL","39.588585","-89.44945","-6","1" +"62571","Tower Hill","IL","39.385344","-88.95588","-6","1" +"62572","Waggoner","IL","39.370091","-89.67132","-6","1" +"62573","Warrensburg","IL","39.940934","-89.06707","-6","1" +"62601","Alexander","IL","39.754308","-90.02786","-6","1" +"62605","Emden","IL","40.300508","-89.480688","-6","1" +"62610","Alsey","IL","39.564501","-90.43698","-6","1" +"62611","Arenzville","IL","39.883346","-90.39332","-6","1" +"62612","Ashland","IL","39.891861","-90.03125","-6","1" +"62613","Athens","IL","39.982768","-89.68326","-6","1" +"62615","Auburn","IL","39.588902","-89.75177","-6","1" +"62616","Philadelphia","IL","39.852164","-90.143114","-6","1" +"62617","Bath","IL","40.167991","-90.16313","-6","1" +"62618","Beardstown","IL","40.005505","-90.42314","-6","1" +"62621","Bluffs","IL","39.740558","-90.53937","-6","1" +"62622","Bluff Springs","IL","39.979614","-90.352444","-6","1" +"62623","Oakford","IL","40.104623","-89.96382","-6","1" +"62624","Browning","IL","40.153557","-90.35255","-6","1" +"62625","Cantrall","IL","39.909732","-89.68831","-6","1" +"62626","Carlinville","IL","39.280289","-89.8757","-6","1" +"62627","Chandlerville","IL","40.051603","-90.14057","-6","1" +"62628","Chapin","IL","39.770936","-90.39307","-6","1" +"62629","Chatham","IL","39.676558","-89.69902","-6","1" +"62630","Chesterfield","IL","39.260146","-90.06937","-6","1" +"62631","Concord","IL","39.817322","-90.36618","-6","1" +"62633","Easton","IL","40.214759","-89.87721","-6","1" +"62634","Elkhart","IL","40.02489","-89.46592","-6","1" +"62635","Emden","IL","40.291512","-89.47436","-6","1" +"62638","Franklin","IL","39.609647","-90.08116","-6","1" +"62639","Frederick","IL","40.04195","-90.46831","-6","1" +"62640","Girard","IL","39.436584","-89.8028","-6","1" +"62642","Greenview","IL","40.087711","-89.72066","-6","1" +"62643","Hartsburg","IL","40.247835","-89.44123","-6","1" +"62644","Havana","IL","40.296415","-90.05163","-6","1" +"62648","Herrin","IL","37.803216","-89.058643","-6","1" +"62649","Hettick","IL","39.348487","-90.08365","-6","1" +"62650","Jacksonville","IL","39.730234","-90.22941","-6","1" +"62651","Jacksonville","IL","39.698311","-90.26153","-6","1" +"62652","Milton","IL","39.564228","-90.651349","-6","1" +"62655","Kilbourne","IL","40.147371","-90.00698","-6","1" +"62656","Lincoln","IL","40.149927","-89.36746","-6","1" +"62659","Lincoln'S New Salem","IL","40.031115","-89.786723","-6","1" +"62660","Literberry","IL","39.858933","-90.200747","-6","1" +"62661","Loami","IL","39.669508","-89.84805","-6","1" +"62662","Lowder","IL","39.749457","-89.606017","-6","1" +"62663","Manchester","IL","39.544196","-90.32677","-6","1" +"62664","Mason City","IL","40.200537","-89.70427","-6","1" +"62665","Meredosia","IL","39.818631","-90.55791","-6","1" +"62666","Middletown","IL","40.088774","-89.56744","-6","1" +"62667","Modesto","IL","39.487357","-89.99143","-6","1" +"62668","Murrayville","IL","39.576392","-90.24769","-6","1" +"62670","New Berlin","IL","39.735761","-89.88669","-6","1" +"62671","New Holland","IL","40.186852","-89.56053","-6","1" +"62672","Nilwood","IL","39.397248","-89.80769","-6","1" +"62673","Oakford","IL","40.095009","-89.96998","-6","1" +"62674","Palmyra","IL","39.429687","-90.01499","-6","1" +"62675","Petersburg","IL","40.008726","-89.85029","-6","1" +"62676","Hillyard","IL","39.128248","-89.923215","-6","1" +"62677","Pleasant Plains","IL","39.847253","-89.88059","-6","1" +"62681","Rushville","IL","40.134957","-90.55222","-6","1" +"62682","San Jose","IL","40.29916","-89.60101","-6","1" +"62683","Scottville","IL","39.260862","-89.926068","-6","1" +"62684","Sherman","IL","39.901588","-89.58805","-6","1" +"62685","Shipman","IL","39.14665","-90.00059","-6","1" +"62686","Standard City","IL","39.350726","-89.78689","-6","1" +"62688","Tallula","IL","39.944264","-89.93366","-6","1" +"62689","Thayer","IL","39.539071","-89.761","-6","1" +"62690","Virden","IL","39.503383","-89.76667","-6","1" +"62691","Virginia","IL","39.952909","-90.21218","-6","1" +"62692","Waverly","IL","39.583983","-89.9396","-6","1" +"62693","Williamsville","IL","39.956803","-89.54209","-6","1" +"62694","Winchester","IL","39.628929","-90.46107","-6","1" +"62695","Woodson","IL","39.627307","-90.22101","-6","1" +"62701","Springfield","IL","39.80095","-89.64999","-6","1" +"62702","Springfield","IL","39.819","-89.64379","-6","1" +"62703","Springfield","IL","39.7715","-89.63612","-6","1" +"62704","Springfield","IL","39.7778","-89.67982","-6","1" +"62705","Springfield","IL","39.749457","-89.606017","-6","1" +"62706","Springfield","IL","39.79885","-89.653399","-6","1" +"62707","Springfield","IL","39.757896","-89.66363","-6","1" +"62708","Springfield","IL","39.806089","-89.586356","-6","1" +"62709","Springfield","IL","39.749457","-89.606017","-6","1" +"62713","Springfield","IL","39.749457","-89.606017","-6","1" +"62715","Springfield","IL","39.749457","-89.606017","-6","1" +"62716","Springfield","IL","39.848201","-89.536369","-6","1" +"62718","Springfield","IL","39.778044","-89.646555","-6","1" +"62719","Springfield","IL","39.749457","-89.606017","-6","1" +"62720","Springfield","IL","39.749457","-89.606017","-6","1" +"62721","Springfield","IL","39.749457","-89.606017","-6","1" +"62722","Springfield","IL","39.749457","-89.606017","-6","1" +"62723","Springfield","IL","39.749457","-89.606017","-6","1" +"62726","Springfield","IL","39.749457","-89.606017","-6","1" +"62736","Springfield","IL","39.749457","-89.606017","-6","1" +"62739","Springfield","IL","39.749457","-89.606017","-6","1" +"62746","Springfield","IL","39.749457","-89.606017","-6","1" +"62756","Springfield","IL","39.749457","-89.606017","-6","1" +"62757","Springfield","IL","39.749457","-89.606017","-6","1" +"62761","Springfield","IL","39.852361","-89.541017","-6","1" +"62762","Springfield","IL","39.749457","-89.606017","-6","1" +"62763","Springfield","IL","39.749457","-89.606017","-6","1" +"62764","Springfield","IL","39.749457","-89.606017","-6","1" +"62765","Springfield","IL","39.749457","-89.606017","-6","1" +"62766","Springfield","IL","39.749457","-89.606017","-6","1" +"62767","Springfield","IL","39.749457","-89.606017","-6","1" +"62769","Springfield","IL","39.749457","-89.606017","-6","1" +"62776","Springfield","IL","39.749457","-89.606017","-6","1" +"62777","Springfield","IL","39.749457","-89.606017","-6","1" +"62781","Springfield","IL","39.749457","-89.606017","-6","1" +"62786","Springfield","IL","39.749457","-89.606017","-6","1" +"62791","Springfield","IL","39.749457","-89.606017","-6","1" +"62792","Ullin","IL","37.277483","-89.186317","-6","1" +"62794","Springfield","IL","39.749457","-89.606017","-6","1" +"62796","Springfield","IL","39.749457","-89.606017","-6","1" +"62801","Centralia","IL","38.523736","-89.1257","-6","1" +"62803","Hoyleton","IL","38.460331","-89.30296","-6","1" +"62805","Akin","IL","37.994296","-88.941665","-6","1" +"62806","Albion","IL","38.375576","-88.07169","-6","1" +"62807","Alma","IL","38.735571","-88.91864","-6","1" +"62808","Ashley","IL","38.319427","-89.19145","-6","1" +"62809","Barnhill","IL","38.268959","-88.34267","-6","1" +"62810","Belle Rive","IL","38.218349","-88.73999","-6","1" +"62811","Bellmont","IL","38.384799","-87.90949","-6","1" +"62812","Benton","IL","38.000245","-88.92407","-6","1" +"62814","Bluford","IL","38.362934","-88.72896","-6","1" +"62815","Bone Gap","IL","38.452172","-87.9939","-6","1" +"62816","Bonnie","IL","38.192726","-88.93138","-6","1" +"62817","Broughton","IL","37.954727","-88.47128","-6","1" +"62818","Browns","IL","38.378706","-87.97291","-6","1" +"62819","Buckner","IL","37.980455","-89.01261","-6","1" +"62820","Burnt Prairie","IL","38.247883","-88.22944","-6","1" +"62821","Carmi","IL","38.087838","-88.15583","-6","1" +"62822","Christopher","IL","37.973175","-89.05291","-6","1" +"62823","Cisne","IL","38.51684","-88.43531","-6","1" +"62824","Clay City","IL","38.689663","-88.35141","-6","1" +"62825","Coello","IL","37.996241","-89.06852","-6","1" +"62827","Crossville","IL","38.160972","-88.03291","-6","1" +"62828","Dahlgren","IL","38.190536","-88.62439","-6","1" +"62829","Dale","IL","37.999757","-88.50469","-6","1" +"62830","Dix","IL","38.441538","-88.96888","-6","1" +"62831","Du Bois","IL","38.22669","-89.20884","-6","1" +"62832","Du Quoin","IL","38.011729","-89.24688","-6","1" +"62833","Ellery","IL","38.361654","-88.16484","-6","1" +"62834","Emma","IL","37.97622","-88.120182","-6","1" +"62835","Enfield","IL","38.101667","-88.33357","-6","1" +"62836","Ewing","IL","38.096551","-88.82763","-6","1" +"62837","Fairfield","IL","38.374627","-88.35735","-6","1" +"62838","Farina","IL","38.857185","-88.7591","-6","1" +"62839","Flora","IL","38.667752","-88.48855","-6","1" +"62840","Frankfort Heights","IL","37.994296","-88.941665","-6","1" +"62841","Freeman Spur","IL","37.80308","-89.009201","-6","1" +"62842","Geff","IL","38.460323","-88.37124","-6","1" +"62843","Golden Gate","IL","38.365545","-88.19454","-6","1" +"62844","Grayville","IL","38.257064","-88.00353","-6","1" +"62845","Herald","IL","38.073931","-88.142657","-6","1" +"62846","Ina","IL","38.149474","-88.89634","-6","1" +"62847","Iola","IL","38.757302","-88.473594","-6","1" +"62848","Irvington","IL","38.436236","-89.16184","-6","1" +"62849","Iuka","IL","38.594744","-88.77464","-6","1" +"62850","Johnsonville","IL","38.513119","-88.58911","-6","1" +"62851","Keenes","IL","38.423947","-88.6692","-6","1" +"62852","Keensburg","IL","38.351613","-87.86464","-6","1" +"62853","Kell","IL","38.516025","-88.91954","-6","1" +"62854","Kinmundy","IL","38.768452","-88.82814","-6","1" +"62855","Lancaster","IL","38.403424","-87.818672","-6","1" +"62856","Logan","IL","37.994296","-88.941665","-6","1" +"62857","Loogootee","IL","38.911662","-88.87747","-6","1" +"62858","Louisville","IL","38.806292","-88.48012","-6","1" +"62859","McLeansboro","IL","38.090004","-88.53431","-6","1" +"62860","Macedonia","IL","38.041978","-88.73257","-6","1" +"62861","Maunie","IL","38.032574","-88.04663","-6","1" +"62862","Mill Shoals","IL","38.219997","-88.3121","-6","1" +"62863","Mount Carmel","IL","38.415676","-87.81077","-6","1" +"62864","Mount Vernon","IL","38.322558","-88.90842","-6","1" +"62865","Mulkeytown","IL","37.963264","-89.06906","-6","1" +"62866","Nason","IL","38.16542","-88.967551","-6","1" +"62867","New Haven","IL","37.914363","-88.12264","-6","1" +"62868","Noble","IL","38.696562","-88.23716","-6","1" +"62869","Norris City","IL","37.971434","-88.30419","-6","1" +"62870","Odin","IL","38.614141","-89.04738","-6","1" +"62871","Omaha","IL","37.877628","-88.29114","-6","1" +"62872","Opdyke","IL","38.281485","-88.7909","-6","1" +"62874","Orient","IL","37.921795","-88.97892","-6","1" +"62875","Patoka","IL","38.751756","-89.09581","-6","1" +"62876","Radom","IL","38.282464","-89.19356","-6","1" +"62877","Richview","IL","38.388876","-89.19244","-6","1" +"62878","Rinard","IL","38.578119","-88.49714","-6","1" +"62879","Sailor Springs","IL","38.764802","-88.35875","-6","1" +"62880","Saint Peter","IL","38.875494","-88.89365","-6","1" +"62881","Salem","IL","38.623789","-88.95361","-6","1" +"62882","Sandoval","IL","38.60823","-89.11963","-6","1" +"62883","Scheller","IL","38.164136","-89.11908","-6","1" +"62884","Sesser","IL","38.085829","-89.04697","-6","1" +"62885","Shobonier","IL","38.859515","-89.054","-6","1" +"62886","Sims","IL","38.374398","-88.53537","-6","1" +"62887","Springerton","IL","38.185822","-88.36923","-6","1" +"62888","Tamaroa","IL","38.127516","-89.22926","-6","1" +"62889","Texico","IL","38.455562","-88.8232","-6","1" +"62890","Thompsonville","IL","37.913984","-88.74922","-6","1" +"62891","Valier","IL","38.01492","-89.04226","-6","1" +"62892","Vernon","IL","38.804938","-89.08366","-6","1" +"62893","Walnut Hill","IL","38.469244","-89.03707","-6","1" +"62894","Waltonville","IL","38.212746","-89.03866","-6","1" +"62895","Wayne City","IL","38.34239","-88.58448","-6","1" +"62896","West Frankfort","IL","37.894496","-88.93037","-6","1" +"62897","Whittington","IL","38.084617","-88.92096","-6","1" +"62898","Woodlawn","IL","38.335675","-89.04867","-6","1" +"62899","Xenia","IL","38.661358","-88.64744","-6","1" +"62901","Carbondale","IL","37.707763","-89.19246","-6","1" +"62902","Carbondale","IL","37.758646","-89.415831","-6","1" +"62903","Carbondale","IL","37.758646","-89.415831","-6","1" +"62905","Alto Pass","IL","37.571235","-89.33462","-6","1" +"62906","Anna","IL","37.457806","-89.21408","-6","1" +"62907","Ava","IL","37.871546","-89.50721","-6","1" +"62908","Belknap","IL","37.308412","-88.88076","-6","1" +"62909","Boles","IL","37.44725","-88.876792","-6","1" +"62910","Brookport","IL","37.140282","-88.58186","-6","1" +"62912","Buncombe","IL","37.477639","-89.02992","-6","1" +"62913","Cache","IL","37.152775","-89.325581","-6","1" +"62914","Cairo","IL","37.025325","-89.18974","-6","1" +"62915","Cambria","IL","37.782057","-89.12184","-6","1" +"62916","Campbell Hill","IL","37.933269","-89.55501","-6","1" +"62917","Carrier Mills","IL","37.692923","-88.65284","-6","1" +"62918","Carterville","IL","37.766029","-89.08355","-6","1" +"62919","Cave In Rock","IL","37.495812","-88.16099","-6","1" +"62920","Cobden","IL","37.540571","-89.25489","-6","1" +"62921","Colp","IL","37.804876","-89.08118","-6","1" +"62922","Creal Springs","IL","37.613705","-88.83922","-6","1" +"62923","Cypress","IL","37.34","-89.03177","-6","1" +"62924","De Soto","IL","37.82526","-89.20301","-6","1" +"62926","Dongola","IL","37.363981","-89.15783","-6","1" +"62927","Dowell","IL","37.940448","-89.24091","-6","1" +"62928","Eddyville","IL","37.501552","-88.58141","-6","1" +"62930","Eldorado","IL","37.822259","-88.44456","-6","1" +"62931","Elizabethtown","IL","37.511139","-88.28284","-6","1" +"62932","Elkville","IL","37.907619","-89.23151","-6","1" +"62933","Energy","IL","37.774517","-89.02583","-6","1" +"62934","Equality","IL","37.716434","-88.37184","-6","1" +"62935","Galatia","IL","37.836537","-88.62298","-6","1" +"62938","Golconda","IL","37.374723","-88.52571","-6","1" +"62939","Goreville","IL","37.558235","-88.96661","-6","1" +"62940","Gorham","IL","37.727109","-89.47618","-6","1" +"62941","Grand Chain","IL","37.239385","-88.95184","-6","1" +"62942","Grand Tower","IL","37.629601","-89.48077","-6","1" +"62943","Grantsburg","IL","37.342538","-88.73381","-6","1" +"62944","Hamletsburg","IL","37.333591","-88.561428","-6","1" +"62946","Harrisburg","IL","37.725834","-88.54208","-6","1" +"62947","Herod","IL","37.567779","-88.39925","-6","1" +"62948","Herrin","IL","37.804014","-89.02702","-6","1" +"62949","Hurst","IL","37.835684","-89.14346","-6","1" +"62950","Jacob","IL","37.75858","-89.56055","-6","1" +"62951","Johnston City","IL","37.820724","-88.92647","-6","1" +"62952","Jonesboro","IL","37.42084","-89.31217","-6","1" +"62953","Joppa","IL","37.20812","-88.84304","-6","1" +"62954","Junction","IL","37.703552","-88.26498","-6","1" +"62955","Karbers Ridge","IL","37.500757","-88.238292","-6","1" +"62956","Karnak","IL","37.279433","-88.93959","-6","1" +"62957","McClure","IL","37.305331","-89.43066","-6","1" +"62958","Makanda","IL","37.612173","-89.17587","-6","1" +"62959","Marion","IL","37.724504","-88.92968","-6","1" +"62960","Metropolis","IL","37.18308","-88.73327","-6","1" +"62961","Millcreek","IL","37.340918","-89.254203","-6","1" +"62962","Miller City","IL","37.097546","-89.33547","-6","1" +"62963","Mound City","IL","37.08751","-89.16532","-6","1" +"62964","Mounds","IL","37.119739","-89.20174","-6","1" +"62965","Muddy","IL","37.801972","-88.548695","-6","1" +"62966","Murphysboro","IL","37.771806","-89.33971","-6","1" +"62967","New Burnside","IL","37.582136","-88.76394","-6","1" +"62969","Olive Branch","IL","37.159227","-89.34153","-6","1" +"62970","Olmsted","IL","37.199769","-89.10964","-6","1" +"62971","Oraville","IL","37.758646","-89.415831","-6","1" +"62972","Ozark","IL","37.548762","-88.74145","-6","1" +"62973","Perks","IL","37.311333","-89.083056","-6","1" +"62974","Pittsburg","IL","37.780592","-88.82344","-6","1" +"62975","Pomona","IL","37.618822","-89.3617","-6","1" +"62976","Pulaski","IL","37.214012","-89.21039","-6","1" +"62977","Raleigh","IL","37.844963","-88.54416","-6","1" +"62979","Ridgway","IL","37.796784","-88.24393","-6","1" +"62982","Rosiclare","IL","37.426076","-88.34815","-6","1" +"62983","Royalton","IL","37.884066","-89.11128","-6","1" +"62984","Shawneetown","IL","37.712847","-88.16553","-6","1" +"62985","Simpson","IL","37.458878","-88.69466","-6","1" +"62987","Stonefort","IL","37.635792","-88.67912","-6","1" +"62988","Tamms","IL","37.240381","-89.28271","-6","1" +"62990","Thebes","IL","37.223589","-89.42243","-6","1" +"62991","Tunnel Hill","IL","37.540479","-88.86601","-6","1" +"62992","Ullin","IL","37.272477","-89.17123","-6","1" +"62993","Unity","IL","37.150263","-89.27351","-6","1" +"62994","Vergennes","IL","37.901441","-89.33485","-6","1" +"62995","Vienna","IL","37.422815","-88.88016","-6","1" +"62996","Villa Ridge","IL","37.152714","-89.1632","-6","1" +"62997","Willisville","IL","37.983687","-89.5905","-6","1" +"62998","Wolf Lake","IL","37.508233","-89.43987","-6","1" +"62999","Zeigler","IL","37.8974","-89.05385","-6","1" +"63001","Allenton","MO","38.638318","-90.427118","-6","1" +"63005","Chesterfield","MO","38.646981","-90.63155","-6","1" +"63006","Chesterfield","MO","38.638318","-90.427118","-6","1" +"63010","Arnold","MO","38.42727","-90.38515","-6","1" +"63011","Ballwin","MO","38.601403","-90.55209","-6","1" +"63012","Barnhart","MO","38.337458","-90.42316","-6","1" +"63013","Beaufort","MO","38.415995","-91.1603","-6","1" +"63014","Berger","MO","38.654011","-91.33928","-6","1" +"63015","Catawissa","MO","38.401406","-90.74276","-6","1" +"63016","Cedar Hill","MO","38.352825","-90.63595","-6","1" +"63017","Chesterfield","MO","38.647023","-90.53918","-6","1" +"63019","Crystal City","MO","38.226997","-90.38215","-6","1" +"63020","De Soto","MO","38.120303","-90.55426","-6","1" +"63021","Ballwin","MO","38.576253","-90.53117","-6","1" +"63022","Ballwin","MO","38.638318","-90.427118","-6","1" +"63023","Dittmer","MO","38.280328","-90.70519","-6","1" +"63024","Ballwin","MO","38.638318","-90.427118","-6","1" +"63025","Eureka","MO","38.494203","-90.61304","-6","1" +"63026","Fenton","MO","38.502854","-90.46088","-6","1" +"63028","Festus","MO","38.187767","-90.4077","-6","1" +"63030","Fletcher","MO","38.129238","-90.74342","-6","1" +"63031","Florissant","MO","38.8016","-90.33662","-6","1" +"63032","Florissant","MO","38.638318","-90.427118","-6","1" +"63033","Florissant","MO","38.79505","-90.28578","-6","1" +"63034","Florissant","MO","38.832863","-90.29051","-6","1" +"63036","French Village","MO","37.97861","-90.34637","-6","1" +"63037","Gerald","MO","38.412764","-91.3246","-6","1" +"63038","Glencoe","MO","38.578703","-90.66508","-6","1" +"63039","Gray Summit","MO","38.499489","-90.83398","-6","1" +"63040","Grover","MO","38.575835","-90.61878","-6","1" +"63041","Grubville","MO","38.262811","-90.77513","-6","1" +"63042","Hazelwood","MO","38.7785","-90.37005","-6","1" +"63043","Maryland Heights","MO","38.725331","-90.44451","-6","1" +"63044","Bridgeton","MO","38.757318","-90.42335","-6","1" +"63045","Earth City","MO","38.638318","-90.427118","-6","1" +"63047","Hematite","MO","38.194104","-90.472495","-6","1" +"63048","Herculaneum","MO","38.261863","-90.3902","-6","1" +"63049","High Ridge","MO","38.473921","-90.52696","-6","1" +"63050","Hillsboro","MO","38.259946","-90.5666","-6","1" +"63051","House Springs","MO","38.405287","-90.57059","-6","1" +"63052","Imperial","MO","38.385265","-90.40339","-6","1" +"63053","Kimmswick","MO","38.252726","-90.514875","-6","1" +"63055","Labadie","MO","38.535934","-90.84698","-6","1" +"63056","Leslie","MO","38.404826","-91.22652","-6","1" +"63057","Liguori","MO","38.341918","-90.408223","-6","1" +"63060","Lonedell","MO","38.247062","-90.85642","-6","1" +"63061","Luebbering","MO","38.257711","-90.80694","-6","1" +"63065","Mapaville","MO","38.252726","-90.514875","-6","1" +"63066","Morse Mill","MO","38.280943","-90.652057","-6","1" +"63068","New Haven","MO","38.558836","-91.24469","-6","1" +"63069","Pacific","MO","38.482353","-90.73892","-6","1" +"63070","Pevely","MO","38.279016","-90.40862","-6","1" +"63071","Richwoods","MO","38.137345","-90.83168","-6","1" +"63072","Robertsville","MO","38.369435","-90.81792","-6","1" +"63073","Saint Albans","MO","38.527729","-91.017274","-6","1" +"63074","Saint Ann","MO","38.727184","-90.38551","-6","1" +"63077","Saint Clair","MO","38.336093","-90.98902","-6","1" +"63079","Stanton","MO","38.274398","-91.085533","-6","1" +"63080","Sullivan","MO","38.200244","-91.14089","-6","1" +"63084","Union","MO","38.434806","-91.00353","-6","1" +"63087","Valles Mines","MO","38.024849","-90.44667","-6","1" +"63088","Valley Park","MO","38.553253","-90.49157","-6","1" +"63089","Villa Ridge","MO","38.46292","-90.88421","-6","1" +"63090","Washington","MO","38.535499","-91.02348","-6","1" +"63091","Rosebud","MO","38.387446","-91.39332","-6","1" +"63099","Fenton","MO","38.638318","-90.427118","-6","1" +"63101","Saint Louis","MO","38.631551","-90.193","-6","1" +"63102","Saint Louis","MO","38.6352","-90.18702","-6","1" +"63103","Saint Louis","MO","38.631451","-90.21415","-6","1" +"63104","Saint Louis","MO","38.610701","-90.21362","-6","1" +"63105","Saint Louis","MO","38.645484","-90.32888","-6","1" +"63106","Saint Louis","MO","38.644451","-90.20636","-6","1" +"63107","Saint Louis","MO","38.6628","-90.20949","-6","1" +"63108","Saint Louis","MO","38.646201","-90.25435","-6","1" +"63109","Saint Louis","MO","38.586052","-90.2941","-6","1" +"63110","Saint Louis","MO","38.622601","-90.26182","-6","1" +"63111","Saint Louis","MO","38.559302","-90.25174","-6","1" +"63112","Saint Louis","MO","38.661351","-90.28434","-6","1" +"63113","Saint Louis","MO","38.656701","-90.24397","-6","1" +"63114","Saint Louis","MO","38.702651","-90.36109","-6","1" +"63115","Saint Louis","MO","38.676851","-90.24009","-6","1" +"63116","Saint Louis","MO","38.580552","-90.26307","-6","1" +"63117","Saint Louis","MO","38.628402","-90.32636","-6","1" +"63118","Saint Louis","MO","38.594901","-90.2278","-6","1" +"63119","Saint Louis","MO","38.590652","-90.35168","-6","1" +"63120","Saint Louis","MO","38.691901","-90.25992","-6","1" +"63121","Saint Louis","MO","38.706301","-90.29609","-6","1" +"63122","Saint Louis","MO","38.582702","-90.40966","-6","1" +"63123","Saint Louis","MO","38.549452","-90.32525","-6","1" +"63124","Saint Louis","MO","38.645802","-90.37687","-6","1" +"63125","Saint Louis","MO","38.524066","-90.2895","-6","1" +"63126","Saint Louis","MO","38.552303","-90.37921","-6","1" +"63127","Saint Louis","MO","38.53987","-90.40024","-6","1" +"63128","Saint Louis","MO","38.500734","-90.37113","-6","1" +"63129","Saint Louis","MO","38.469953","-90.32161","-6","1" +"63130","Saint Louis","MO","38.663951","-90.32348","-6","1" +"63131","Saint Louis","MO","38.618582","-90.43643","-6","1" +"63132","Saint Louis","MO","38.675784","-90.37463","-6","1" +"63133","Saint Louis","MO","38.679684","-90.30186","-6","1" +"63134","Saint Louis","MO","38.738217","-90.33904","-6","1" +"63135","Saint Louis","MO","38.74785","-90.30258","-6","1" +"63136","Saint Louis","MO","38.73835","-90.26154","-6","1" +"63137","Saint Louis","MO","38.748183","-90.21864","-6","1" +"63138","Saint Louis","MO","38.787849","-90.21041","-6","1" +"63139","Saint Louis","MO","38.610901","-90.29174","-6","1" +"63140","Saint Louis","MO","38.73965","-90.32178","-6","1" +"63141","Saint Louis","MO","38.662302","-90.45363","-6","1" +"63143","Saint Louis","MO","38.612452","-90.31822","-6","1" +"63144","Saint Louis","MO","38.619152","-90.34964","-6","1" +"63145","Saint Louis","MO","38.638318","-90.427118","-6","1" +"63146","Saint Louis","MO","38.688585","-90.44689","-6","1" +"63147","Saint Louis","MO","38.692861","-90.21905","-6","1" +"63150","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63151","Saint Louis","MO","38.638318","-90.427118","-6","1" +"63153","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63155","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63156","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63157","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63158","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63160","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63163","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63164","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63166","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63167","Saint Louis","MO","38.638318","-90.427118","-6","1" +"63169","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63171","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63177","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63178","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63179","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63180","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63182","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63188","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63195","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63196","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63197","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63198","Saint Louis","MO","38.638318","-90.427118","-6","1" +"63199","Saint Louis","MO","38.6531","-90.243462","-6","1" +"63301","Saint Charles","MO","38.808583","-90.50687","-6","1" +"63302","Saint Charles","MO","38.581299","-90.872987","-6","1" +"63303","Saint Charles","MO","38.762715","-90.53903","-6","1" +"63304","Saint Charles","MO","38.72926","-90.65332","-6","1" +"63330","Annada","MO","39.257008","-90.82317","-6","1" +"63332","Augusta","MO","38.590155","-90.89093","-6","1" +"63333","Bellflower","MO","39.03288","-91.32983","-6","1" +"63334","Bowling Green","MO","39.318552","-91.18265","-6","1" +"63336","Clarksville","MO","39.354092","-90.93137","-6","1" +"63338","Cottleville","MO","38.750949","-90.536784","-6","1" +"63339","Curryville","MO","39.334216","-91.37684","-6","1" +"63341","Defiance","MO","38.68879","-90.78593","-6","1" +"63342","Dutzow","MO","38.605967","-90.996216","-6","1" +"63343","Elsberry","MO","39.151543","-90.8136","-6","1" +"63344","Eolia","MO","39.239548","-91.01577","-6","1" +"63345","Farber","MO","39.267199","-91.56669","-6","1" +"63346","Flinthill","MO","38.750949","-90.536784","-6","1" +"63347","Foley","MO","39.069965","-90.75875","-6","1" +"63348","Foristell","MO","38.814432","-90.94433","-6","1" +"63349","Hawk Point","MO","38.96624","-91.14919","-6","1" +"63350","High Hill","MO","38.898823","-91.3682","-6","1" +"63351","Jonesburg","MO","38.862422","-91.31284","-6","1" +"63352","Laddonia","MO","39.249616","-91.64872","-6","1" +"63353","Louisiana","MO","39.449012","-91.07518","-6","1" +"63357","Marthasville","MO","38.647611","-91.09159","-6","1" +"63359","Middletown","MO","39.151911","-91.34909","-6","1" +"63361","Montgomery City","MO","38.973583","-91.53556","-6","1" +"63362","Moscow Mills","MO","38.952724","-90.89199","-6","1" +"63363","New Florence","MO","38.881628","-91.44852","-6","1" +"63365","New Melle","MO","38.716287","-90.875127","-6","1" +"63366","O Fallon","MO","38.786335","-90.72121","-6","1" +"63367","Lake Saint Louis","MO","38.796601","-90.78525","-6","1" +"63369","Old Monroe","MO","38.935776","-90.77801","-6","1" +"63370","Olney","MO","39.085749","-91.2243","-6","1" +"63371","Paynesville","MO","39.25597","-90.883751","-6","1" +"63373","Portage Des Sioux","MO","38.935496","-90.3683","-6","1" +"63375","Perryville","MO","37.73473","-89.856609","-6","1" +"63376","Saint Peters","MO","38.778579","-90.62045","-6","1" +"63377","Silex","MO","39.110908","-91.08017","-6","1" +"63378","Treloar","MO","38.770187","-91.188586","-6","1" +"63379","Troy","MO","38.991916","-90.98649","-6","1" +"63381","Truxton","MO","38.995145","-91.2336","-6","1" +"63382","Vandalia","MO","39.310099","-91.48862","-6","1" +"63383","Warrenton","MO","38.818852","-91.17","-6","1" +"63384","Wellsville","MO","39.081392","-91.56266","-6","1" +"63385","Wentzville","MO","38.808884","-90.85922","-6","1" +"63386","West Alton","MO","38.876781","-90.23706","-6","1" +"63387","Whiteside","MO","39.184054","-91.02078","-6","1" +"63388","Williamsburg","MO","38.886456","-91.76344","-6","1" +"63389","Winfield","MO","39.00006","-90.77209","-6","1" +"63390","Wright City","MO","38.797388","-91.03468","-6","1" +"63401","Hannibal","MO","39.695798","-91.40084","-6","1" +"63430","Alexandria","MO","40.381613","-91.50598","-6","1" +"63431","Anabel","MO","39.753475","-92.3224","-6","1" +"63432","Arbela","MO","40.497304","-91.9947","-6","1" +"63433","Ashburn","MO","39.549602","-91.18155","-6","1" +"63434","Bethel","MO","39.906312","-91.96806","-6","1" +"63435","Canton","MO","40.178309","-91.57389","-6","1" +"63436","Center","MO","39.501697","-91.5367","-6","1" +"63437","Clarence","MO","39.742551","-92.24825","-6","1" +"63438","Durham","MO","39.952258","-91.69953","-6","1" +"63439","Emden","MO","39.788052","-91.85812","-6","1" +"63440","Ewing","MO","39.98803","-91.73595","-6","1" +"63441","Frankford","MO","39.484069","-91.32296","-6","1" +"63442","Granger","MO","40.453333","-92.1474","-6","1" +"63443","Hunnewell","MO","39.677082","-91.8584","-6","1" +"63445","Kahoka","MO","40.415683","-91.71817","-6","1" +"63446","Knox City","MO","40.14036","-92.01104","-6","1" +"63447","La Belle","MO","40.109412","-91.91078","-6","1" +"63448","La Grange","MO","40.044294","-91.51803","-6","1" +"63450","Lentner","MO","39.650093","-92.14536","-6","1" +"63451","Leonard","MO","39.922732","-92.19521","-6","1" +"63452","Lewistown","MO","40.101973","-91.79502","-6","1" +"63453","Luray","MO","40.489269","-91.87248","-6","1" +"63454","Maywood","MO","39.93264","-91.63745","-6","1" +"63456","Monroe City","MO","39.645523","-91.72967","-6","1" +"63457","Monticello","MO","40.143679","-91.7066","-6","1" +"63458","Newark","MO","39.98354","-91.99255","-6","1" +"63459","New London","MO","39.584889","-91.38258","-6","1" +"63460","Novelty","MO","40.011886","-92.20242","-6","1" +"63461","Palmyra","MO","39.793879","-91.54631","-6","1" +"63462","Perry","MO","39.430693","-91.68647","-6","1" +"63463","Philadelphia","MO","39.814354","-91.74251","-6","1" +"63464","Plevna","MO","39.972337","-92.06553","-6","1" +"63465","Revere","MO","40.526542","-91.68075","-6","1" +"63466","Saint Patrick","MO","40.431201","-91.685103","-6","1" +"63467","Saverton","MO","39.650045","-91.270502","-6","1" +"63468","Shelbina","MO","39.677131","-92.01662","-6","1" +"63469","Shelbyville","MO","39.820466","-92.03371","-6","1" +"63471","Taylor","MO","39.925941","-91.49636","-6","1" +"63472","Wayland","MO","40.396289","-91.58325","-6","1" +"63473","Williamstown","MO","40.246729","-91.77368","-6","1" +"63474","Wyaconda","MO","40.354422","-91.91063","-6","1" +"63477","La Belle","MO","40.114109","-91.912383","-6","1" +"63501","Kirksville","MO","40.183335","-92.58341","-6","1" +"63530","Atlanta","MO","39.911723","-92.46408","-6","1" +"63531","Baring","MO","40.281881","-92.23595","-6","1" +"63532","Bevier","MO","39.75496","-92.57057","-6","1" +"63533","Brashear","MO","40.181653","-92.39699","-6","1" +"63534","Callao","MO","39.7418","-92.63582","-6","1" +"63535","Coatsville","MO","40.569026","-92.64152","-6","1" +"63536","Downing","MO","40.486993","-92.36284","-6","1" +"63537","Edina","MO","40.164349","-92.1671","-6","1" +"63538","Elmer","MO","39.952779","-92.68007","-6","1" +"63539","Ethel","MO","39.893011","-92.74503","-6","1" +"63540","Gibbs","MO","40.096431","-92.41809","-6","1" +"63541","Glenwood","MO","40.513638","-92.60818","-6","1" +"63543","Gorin","MO","40.361121","-92.01979","-6","1" +"63544","Green Castle","MO","40.244242","-92.85127","-6","1" +"63545","Green City","MO","40.256611","-92.98277","-6","1" +"63546","Greentop","MO","40.335091","-92.52631","-6","1" +"63547","Hurdland","MO","40.145396","-92.30285","-6","1" +"63548","Lancaster","MO","40.524127","-92.51071","-6","1" +"63549","La Plata","MO","40.018881","-92.50308","-6","1" +"63551","Livonia","MO","40.496773","-92.72414","-6","1" +"63552","Macon","MO","39.747736","-92.46878","-6","1" +"63555","Memphis","MO","40.469438","-92.18031","-6","1" +"63556","Milan","MO","40.184189","-93.12043","-6","1" +"63557","New Boston","MO","39.963355","-92.88684","-6","1" +"63558","New Cambria","MO","39.728897","-92.74979","-6","1" +"63559","Novinger","MO","40.228235","-92.72531","-6","1" +"63560","Pollock","MO","40.367584","-93.11823","-6","1" +"63561","Queen City","MO","40.410297","-92.55728","-6","1" +"63563","Rutledge","MO","40.303327","-92.07913","-6","1" +"63565","Unionville","MO","40.472841","-92.97298","-6","1" +"63566","Winigan","MO","40.031642","-92.9641","-6","1" +"63567","Worthington","MO","40.411635","-92.69113","-6","1" +"63588","Clay","MO","36.018996","-90.159327","-6","1" +"63601","Park Hills","MO","37.844197","-90.53","-6","1" +"63620","Annapolis","MO","37.383001","-90.6596","-6","1" +"63621","Arcadia","MO","37.520078","-90.61694","-6","1" +"63622","Belgrade","MO","37.790928","-90.89305","-6","1" +"63623","Belleview","MO","37.682669","-90.88172","-6","1" +"63624","Bismarck","MO","37.740163","-90.63962","-6","1" +"63625","Black","MO","37.538148","-90.96827","-6","1" +"63626","Blackwell","MO","38.053566","-90.64229","-6","1" +"63627","Bloomsdale","MO","38.051824","-90.25527","-6","1" +"63628","Bonne Terre","MO","37.929597","-90.5614","-6","1" +"63629","Bunker","MO","37.416192","-91.22224","-6","1" +"63630","Cadet","MO","38.020743","-90.74557","-6","1" +"63631","Caledonia","MO","37.753408","-90.78593","-6","1" +"63632","Cascade","MO","37.119566","-90.444953","-6","1" +"63633","Centerville","MO","37.442703","-91.02077","-6","1" +"63636","Des Arc","MO","37.292529","-90.60432","-6","1" +"63637","Doe Run","MO","37.73411","-90.51428","-6","1" +"63638","Ellington","MO","37.210461","-91.00798","-6","1" +"63640","Farmington","MO","37.779206","-90.41404","-6","1" +"63645","Fredericktown","MO","37.54834","-90.30599","-6","1" +"63646","Glover","MO","37.505462","-90.845047","-6","1" +"63648","Irondale","MO","37.827126","-90.68325","-6","1" +"63650","Ironton","MO","37.614822","-90.63284","-6","1" +"63651","Knob Lick","MO","37.675442","-90.367713","-6","1" +"63653","Leadwood","MO","37.863193","-90.58935","-6","1" +"63654","Lesterville","MO","37.478054","-90.83766","-6","1" +"63655","Marquand","MO","37.416023","-90.18886","-6","1" +"63656","Middle Brook","MO","37.611019","-90.77656","-6","1" +"63660","Mineral Point","MO","37.913799","-90.71264","-6","1" +"63661","New Offenburg","MO","37.89872","-90.191972","-6","1" +"63662","Patton","MO","37.513967","-90.02477","-6","1" +"63663","Pilot Knob","MO","37.624572","-90.64526","-6","1" +"63664","Potosi","MO","37.91496","-90.86797","-6","1" +"63665","Redford","MO","37.313752","-90.84892","-6","1" +"63666","Reynolds","MO","37.327153","-91.024337","-6","1" +"63670","Sainte Genevieve","MO","37.91259","-90.15155","-6","1" +"63673","Saint Mary","MO","37.833644","-89.98417","-6","1" +"63674","Tiff","MO","38.038731","-90.65623","-6","1" +"63675","Vulcan","MO","37.326021","-90.68542","-6","1" +"63701","Cape Girardeau","MO","37.32564","-89.5659","-6","1" +"63702","Cape Girardeau","MO","37.350624","-89.509405","-6","1" +"63703","Cape Girardeau","MO","37.291432","-89.54065","-6","1" +"63705","Cape Girardeau","MO","37.366166","-89.643941","-6","1" +"63730","Advance","MO","37.101789","-89.91359","-6","1" +"63732","Altenburg","MO","37.584014","-89.6032","-6","1" +"63735","Bell City","MO","36.992718","-89.78369","-6","1" +"63736","Benton","MO","37.093104","-89.53997","-6","1" +"63737","Brazeau","MO","37.663253","-89.652912","-6","1" +"63738","Brownwood","MO","37.082526","-89.95595","-6","1" +"63739","Burfordville","MO","37.360527","-89.79907","-6","1" +"63740","Chaffee","MO","37.182556","-89.68379","-6","1" +"63742","Commerce","MO","37.157131","-89.44651","-6","1" +"63743","Daisy","MO","37.522361","-89.81419","-6","1" +"63744","Delta","MO","37.197279","-89.739429","-6","1" +"63745","Dutchtown","MO","37.24237","-89.69768","-6","1" +"63746","Farrar","MO","37.734776","-89.811616","-6","1" +"63747","Friedheim","MO","37.555405","-89.80068","-6","1" +"63748","Frohna","MO","37.671971","-89.61644","-6","1" +"63750","Gipsy","MO","37.146953","-90.1887","-6","1" +"63751","Glenallen","MO","37.332487","-90.08675","-6","1" +"63752","Gordonville","MO","37.30925","-89.69889","-6","1" +"63753","Grassy","MO","37.212218","-90.13105","-6","1" +"63755","Jackson","MO","37.413716","-89.65428","-6","1" +"63758","Kelso","MO","37.189843","-89.549","-6","1" +"63760","Leopold","MO","37.247942","-89.88904","-6","1" +"63763","McGee","MO","37.052849","-90.16705","-6","1" +"63764","Marble Hill","MO","37.309447","-89.98127","-6","1" +"63766","Millersville","MO","37.437077","-89.85836","-6","1" +"63767","Morley","MO","37.043378","-89.61264","-6","1" +"63769","Oak Ridge","MO","37.509022","-89.76337","-6","1" +"63770","Old Appleton","MO","37.593256","-89.70949","-6","1" +"63771","Oran","MO","37.076536","-89.67823","-6","1" +"63772","Painton","MO","37.04613","-89.779248","-6","1" +"63774","Perkins","MO","37.094857","-89.77451","-6","1" +"63775","Perryville","MO","37.716811","-89.87601","-6","1" +"63776","McBride","MO","37.734776","-89.811616","-6","1" +"63779","Pocahontas","MO","37.500656","-89.639595","-6","1" +"63780","Scott City","MO","37.21183","-89.52687","-6","1" +"63781","Sedgewickville","MO","37.527341","-89.92735","-6","1" +"63782","Sturdivant","MO","37.101911","-90.0292","-6","1" +"63783","Uniontown","MO","37.605626","-89.6774","-6","1" +"63784","Vanduser","MO","36.990215","-89.6911","-6","1" +"63785","Whitewater","MO","37.265867","-89.82401","-6","1" +"63787","Zalma","MO","37.115431","-90.10392","-6","1" +"63801","Sikeston","MO","36.891163","-89.58355","-6","1" +"63804","Blodgett","MO","37.005572","-89.525934","-6","1" +"63820","Anniston","MO","36.824596","-89.32516","-6","1" +"63821","Arbyrd","MO","36.048279","-90.23343","-6","1" +"63822","Bernie","MO","36.662399","-90.00768","-6","1" +"63823","Bertrand","MO","36.905584","-89.44945","-6","1" +"63824","Blodgett","MO","37.00384","-89.52535","-6","1" +"63825","Bloomfield","MO","36.91732","-89.93679","-6","1" +"63826","Braggadocio","MO","36.180226","-89.84072","-6","1" +"63827","Bragg City","MO","36.27471","-89.87346","-6","1" +"63828","Canalou","MO","36.754415","-89.68706","-6","1" +"63829","Cardwell","MO","36.041645","-90.29776","-6","1" +"63830","Caruthersville","MO","36.174029","-89.67548","-6","1" +"63832","Wyatt","MO","36.916675","-89.222096","-6","1" +"63833","Catron","MO","36.642019","-89.73149","-6","1" +"63834","Charleston","MO","36.915335","-89.31308","-6","1" +"63837","Clarkton","MO","36.450404","-89.97623","-6","1" +"63838","Conran","MO","36.603844","-89.650005","-6","1" +"63839","Cooter","MO","36.053078","-89.81679","-6","1" +"63840","Deering","MO","36.213318","-89.748102","-6","1" +"63841","Dexter","MO","36.784453","-89.97428","-6","1" +"63845","East Prairie","MO","36.74432","-89.36142","-6","1" +"63846","Essex","MO","36.818652","-89.81622","-6","1" +"63847","Gibson","MO","36.442124","-90.03097","-6","1" +"63848","Gideon","MO","36.449337","-89.89562","-6","1" +"63849","Gobler","MO","36.124101","-89.99144","-6","1" +"63850","Grayridge","MO","36.822129","-89.7817","-6","1" +"63851","Hayti","MO","36.235881","-89.74861","-6","1" +"63852","Holcomb","MO","36.37451","-90.00544","-6","1" +"63853","Holland","MO","36.058612","-89.87038","-6","1" +"63855","Hornersville","MO","36.048254","-90.08539","-6","1" +"63857","Kennett","MO","36.237128","-90.04866","-6","1" +"63859","Independence","MO","36.267961","-90.031801","-6","1" +"63860","Kewanee","MO","36.67088","-89.57338","-6","1" +"63862","Lilbourn","MO","36.588424","-89.63377","-6","1" +"63863","Malden","MO","36.569283","-89.97423","-6","1" +"63866","Marston","MO","36.521724","-89.6073","-6","1" +"63867","Matthews","MO","36.751798","-89.55184","-6","1" +"63868","Morehouse","MO","36.845481","-89.69113","-6","1" +"63869","New Madrid","MO","36.59793","-89.54435","-6","1" +"63870","Parma","MO","36.611902","-89.83489","-6","1" +"63871","Pascola","MO","36.267825","-89.822514","-6","1" +"63872","Clay","MO","36.101239","-90.114179","-6","1" +"63873","Portageville","MO","36.436042","-89.68851","-6","1" +"63874","Risco","MO","36.550379","-89.81874","-6","1" +"63875","Rives","MO","36.313319","-90.165758","-6","1" +"63876","Senath","MO","36.131733","-90.17023","-6","1" +"63877","Steele","MO","36.079378","-89.84896","-6","1" +"63878","Tallapoosa","MO","36.507559","-89.81877","-6","1" +"63879","Wardell","MO","36.349977","-89.80605","-6","1" +"63880","Whiteoak","MO","36.330522","-90.0261","-6","1" +"63881","Wolf Island","MO","36.779519","-89.206329","-6","1" +"63882","Wyatt","MO","36.911648","-89.22208","-6","1" +"63901","Poplar Bluff","MO","36.759357","-90.41689","-6","1" +"63902","Poplar Bluff","MO","36.712451","-90.407013","-6","1" +"63931","Briar","MO","36.66101","-90.850785","-6","1" +"63932","Broseley","MO","36.687259","-90.23594","-6","1" +"63933","Campbell","MO","36.509916","-90.09694","-6","1" +"63934","Clubb","MO","37.20739","-90.38829","-6","1" +"63935","Doniphan","MO","36.624115","-90.8615","-6","1" +"63936","Dudley","MO","36.808827","-90.12915","-6","1" +"63937","Ellsinore","MO","36.936583","-90.75026","-6","1" +"63938","Fagus","MO","36.512944","-90.26609","-6","1" +"63939","Fairdealing","MO","36.647754","-90.68117","-6","1" +"63940","Fisk","MO","36.772841","-90.21801","-6","1" +"63941","Fremont","MO","36.918139","-91.1528","-6","1" +"63942","Gatewood","MO","36.546354","-91.05402","-6","1" +"63943","Grandin","MO","36.828561","-90.81359","-6","1" +"63944","Greenville","MO","37.068349","-90.42152","-6","1" +"63945","Harviell","MO","36.637085","-90.52687","-6","1" +"63947","Hiram","MO","37.19068","-90.2507","-6","1" +"63950","Lodi","MO","37.119566","-90.444953","-6","1" +"63951","Lowndes","MO","37.124019","-90.27247","-6","1" +"63952","Mill Spring","MO","37.028626","-90.65619","-6","1" +"63953","Naylor","MO","36.585908","-90.61875","-6","1" +"63954","Neelyville","MO","36.559031","-90.48646","-6","1" +"63955","Oxly","MO","36.604837","-90.68582","-6","1" +"63956","Patterson","MO","37.199631","-90.52353","-6","1" +"63957","Piedmont","MO","37.151397","-90.69685","-6","1" +"63960","Puxico","MO","36.956662","-90.13128","-6","1" +"63961","Qulin","MO","36.58479","-90.25221","-6","1" +"63962","Rombauer","MO","36.712451","-90.407013","-6","1" +"63963","Shook","MO","37.072189","-90.30884","-6","1" +"63964","Silva","MO","37.248929","-90.42887","-6","1" +"63965","Van Buren","MO","36.985902","-90.99852","-6","1" +"63966","Wappapello","MO","36.947396","-90.28499","-6","1" +"63967","Williamsville","MO","36.944333","-90.48271","-6","1" +"64001","Alma","MO","39.10223","-93.53531","-6","1" +"64011","Bates City","MO","38.980527","-94.07705","-6","1" +"64012","Belton","MO","38.810856","-94.53201","-6","1" +"64013","Blue Springs","MO","38.964518","-94.370275","-6","1" +"64014","Blue Springs","MO","39.017559","-94.25767","-6","1" +"64015","Blue Springs","MO","39.016612","-94.2987","-6","1" +"64016","Buckner","MO","39.118608","-94.20783","-6","1" +"64017","Camden","MO","39.203641","-94.03213","-6","1" +"64018","Camden Point","MO","39.446161","-94.73858","-6","1" +"64019","Centerview","MO","38.763144","-93.86635","-6","1" +"64020","Concordia","MO","38.97688","-93.5895","-6","1" +"64021","Corder","MO","39.116219","-93.63663","-6","1" +"64022","Dover","MO","39.192552","-93.68661","-6","1" +"64024","Excelsior Springs","MO","39.340332","-94.22601","-6","1" +"64028","Farley","MO","39.283928","-94.830159","-6","1" +"64029","Grain Valley","MO","39.012404","-94.21156","-6","1" +"64030","Grandview","MO","38.883548","-94.52503","-6","1" +"64034","Greenwood","MO","38.843576","-94.34213","-6","1" +"64035","Hardin","MO","39.29596","-93.82164","-6","1" +"64036","Henrietta","MO","39.214233","-93.9294","-6","1" +"64037","Higginsville","MO","39.058604","-93.73366","-6","1" +"64040","Holden","MO","38.712465","-93.9882","-6","1" +"64048","Holt","MO","39.44609","-94.35335","-6","1" +"64050","Independence","MO","39.09888","-94.41447","-6","1" +"64051","Independence","MO","39.080369","-94.387956","-6","1" +"64052","Independence","MO","39.076405","-94.44943","-6","1" +"64053","Independence","MO","39.107845","-94.46556","-6","1" +"64054","Independence","MO","39.108704","-94.44115","-6","1" +"64055","Independence","MO","39.053255","-94.4061","-6","1" +"64056","Independence","MO","39.115776","-94.34846","-6","1" +"64057","Independence","MO","39.069165","-94.35087","-6","1" +"64058","Independence","MO","39.150754","-94.34502","-6","1" +"64060","Kearney","MO","39.365318","-94.3578","-6","1" +"64061","Kingsville","MO","38.765972","-94.09708","-6","1" +"64062","Lawson","MO","39.443609","-94.17063","-6","1" +"64063","Lees Summit","MO","38.913857","-94.36397","-6","1" +"64064","Lees Summit","MO","38.98861","-94.36474","-6","1" +"64065","Lees Summit","MO","38.966641","-94.392885","-6","1" +"64066","Levasy","MO","39.134657","-94.13247","-6","1" +"64067","Lexington","MO","39.176165","-93.86963","-6","1" +"64068","Liberty","MO","39.246179","-94.41763","-6","1" +"64069","Liberty","MO","39.282869","-94.408998","-6","1" +"64070","Lone Jack","MO","38.895469","-94.15315","-6","1" +"64071","Mayview","MO","39.049517","-93.8359","-6","1" +"64072","Missouri City","MO","39.237332","-94.29621","-6","1" +"64073","Mosby","MO","39.314899","-94.293888","-6","1" +"64074","Napoleon","MO","39.093759","-94.0858","-6","1" +"64075","Oak Grove","MO","38.99535","-94.14225","-6","1" +"64076","Odessa","MO","38.98915","-93.95373","-6","1" +"64077","Orrick","MO","39.22471","-94.13971","-6","1" +"64078","Peculiar","MO","38.706077","-94.46049","-6","1" +"64079","Platte City","MO","39.356596","-94.78814","-6","1" +"64080","Pleasant Hill","MO","38.776782","-94.26207","-6","1" +"64081","Lees Summit","MO","38.908657","-94.40285","-6","1" +"64082","Lees Summit","MO","38.850243","-94.3957","-6","1" +"64083","Raymore","MO","38.803528","-94.45103","-6","1" +"64084","Rayville","MO","39.378901","-94.07822","-6","1" +"64085","Richmond","MO","39.311978","-93.96947","-6","1" +"64086","Lees Summit","MO","38.92811","-94.32392","-6","1" +"64087","Liberty","MO","39.282869","-94.408998","-6","1" +"64088","Sibley","MO","39.15207","-94.18355","-6","1" +"64089","Smithville","MO","39.389339","-94.56774","-6","1" +"64090","Strasburg","MO","38.760865","-94.16376","-6","1" +"64092","Waldron","MO","39.228875","-94.805673","-6","1" +"64093","Warrensburg","MO","38.772117","-93.73519","-6","1" +"64096","Waverly","MO","39.214193","-93.53825","-6","1" +"64097","Wellington","MO","39.120155","-93.96495","-6","1" +"64098","Weston","MO","39.445387","-94.89833","-6","1" +"64101","Kansas City","MO","39.103037","-94.60066","-6","1" +"64102","Kansas City","MO","39.093854","-94.60411","-6","1" +"64105","Kansas City","MO","39.104204","-94.58868","-6","1" +"64106","Kansas City","MO","39.103704","-94.57311","-6","1" +"64108","Kansas City","MO","39.084554","-94.58296","-6","1" +"64109","Kansas City","MO","39.065954","-94.56643","-6","1" +"64110","Kansas City","MO","39.033505","-94.57286","-6","1" +"64111","Kansas City","MO","39.056505","-94.59439","-6","1" +"64112","Kansas City","MO","39.037605","-94.59537","-6","1" +"64113","Kansas City","MO","39.013638","-94.59471","-6","1" +"64114","Kansas City","MO","38.966056","-94.59641","-6","1" +"64116","Kansas City","MO","39.14912","-94.57314","-6","1" +"64117","Kansas City","MO","39.165253","-94.53158","-6","1" +"64118","Kansas City","MO","39.213082","-94.57248","-6","1" +"64119","Kansas City","MO","39.202654","-94.51816","-6","1" +"64120","Kansas City","MO","39.125304","-94.53234","-6","1" +"64121","Kansas City","MO","39.035038","-94.356728","-6","1" +"64123","Kansas City","MO","39.113604","-94.52287","-6","1" +"64124","Kansas City","MO","39.107304","-94.53985","-6","1" +"64125","Kansas City","MO","39.104887","-94.49541","-6","1" +"64126","Kansas City","MO","39.092304","-94.49948","-6","1" +"64127","Kansas City","MO","39.089704","-94.53968","-6","1" +"64128","Kansas City","MO","39.066754","-94.5365","-6","1" +"64129","Kansas City","MO","39.051455","-94.4966","-6","1" +"64130","Kansas City","MO","39.034838","-94.54507","-6","1" +"64131","Kansas City","MO","38.972473","-94.57656","-6","1" +"64132","Kansas City","MO","38.991406","-94.551","-6","1" +"64133","Kansas City","MO","39.013905","-94.4591","-6","1" +"64134","Kansas City","MO","38.928206","-94.49832","-6","1" +"64136","Kansas City","MO","39.01543","-94.39967","-6","1" +"64137","Kansas City","MO","38.929356","-94.53932","-6","1" +"64138","Kansas City","MO","38.969806","-94.47256","-6","1" +"64139","Kansas City","MO","38.959277","-94.40868","-6","1" +"64141","Kansas City","MO","39.035038","-94.356728","-6","1" +"64142","Kansas City","MO","39.035038","-94.356728","-6","1" +"64144","Kansas City","MO","39.282869","-94.408998","-6","1" +"64145","Kansas City","MO","38.896407","-94.59666","-6","1" +"64146","Kansas City","MO","38.899843","-94.57323","-6","1" +"64147","Kansas City","MO","38.849841","-94.54555","-6","1" +"64148","Kansas City","MO","39.035038","-94.356728","-6","1" +"64149","Kansas City","MO","38.872285","-94.46712","-6","1" +"64150","Riverside","MO","39.174903","-94.62241","-6","1" +"64151","Kansas City","MO","39.215652","-94.63021","-6","1" +"64152","Kansas City","MO","39.216635","-94.69991","-6","1" +"64153","Kansas City","MO","39.281602","-94.71439","-6","1" +"64154","Kansas City","MO","39.261679","-94.63353","-6","1" +"64155","Kansas City","MO","39.276828","-94.57344","-6","1" +"64156","Kansas City","MO","39.281486","-94.51296","-6","1" +"64157","Kansas City","MO","39.283535","-94.4705","-6","1" +"64158","Kansas City","MO","39.230259","-94.47794","-6","1" +"64160","Kansas City","MO","39.282869","-94.408998","-6","1" +"64161","Kansas City","MO","39.164953","-94.4669","-6","1" +"64163","Kansas City","MO","39.31835","-94.67635","-6","1" +"64164","Kansas City","MO","39.335365","-94.62462","-6","1" +"64165","Kansas City","MO","39.317974","-94.57545","-6","1" +"64166","Kansas City","MO","39.322849","-94.50755","-6","1" +"64167","Kansas City","MO","39.3173","-94.48655","-6","1" +"64168","Kansas City","MO","39.343225","-94.85161","-6","1" +"64170","Kansas City","MO","39.035038","-94.356728","-6","1" +"64171","Kansas City","MO","39.035038","-94.356728","-6","1" +"64172","Kansas City","MO","39.035038","-94.356728","-6","1" +"64173","Kansas City","MO","39.035038","-94.356728","-6","1" +"64179","Kansas City","MO","39.035038","-94.356728","-6","1" +"64180","Kansas City","MO","39.035038","-94.356728","-6","1" +"64183","Kansas City","MO","39.035038","-94.356728","-6","1" +"64184","Kansas City","MO","39.035038","-94.356728","-6","1" +"64185","Kansas City","MO","39.035038","-94.356728","-6","1" +"64187","Kansas City","MO","39.035038","-94.356728","-6","1" +"64188","Kansas City","MO","39.035038","-94.356728","-6","1" +"64189","Kansas City","MO","39.035038","-94.356728","-6","1" +"64190","Kansas City","MO","39.343225","-94.85161","-6","1" +"64191","Kansas City","MO","39.035038","-94.356728","-6","1" +"64192","Kansas City","MO","38.953942","-94.5237","-6","1" +"64193","Kansas City","MO","39.035038","-94.356728","-6","1" +"64194","Kansas City","MO","39.035038","-94.356728","-6","1" +"64195","Kansas City","MO","39.343225","-94.85161","-6","1" +"64196","Kansas City","MO","39.035038","-94.356728","-6","1" +"64197","Kansas City","MO","39.035038","-94.356728","-6","1" +"64198","Kansas City","MO","39.035038","-94.356728","-6","1" +"64199","Kansas City","MO","39.035038","-94.356728","-6","1" +"64401","Agency","MO","39.627397","-94.72215","-6","1" +"64402","Albany","MO","40.247423","-94.33216","-6","1" +"64420","Allendale","MO","40.478118","-94.423294","-6","1" +"64421","Amazonia","MO","39.90444","-94.92726","-6","1" +"64422","Amity","MO","39.898708","-94.47948","-6","1" +"64423","Barnard","MO","40.192991","-94.85162","-6","1" +"64424","Bethany","MO","40.266201","-94.0304","-6","1" +"64426","Blythedale","MO","40.528127","-93.8743","-6","1" +"64427","Bolckow","MO","40.115496","-94.85573","-6","1" +"64428","Burlington Junction","MO","40.44627","-95.06768","-6","1" +"64429","Cameron","MO","39.743859","-94.23378","-6","1" +"64430","Clarksdale","MO","39.827889","-94.56785","-6","1" +"64431","Clearmont","MO","40.527919","-94.9968","-6","1" +"64432","Clyde","MO","40.266289","-94.66893","-6","1" +"64433","Conception","MO","40.242954","-94.68406","-6","1" +"64434","Conception Junction","MO","40.264258","-94.73379","-6","1" +"64436","Cosby","MO","39.850535","-94.69403","-6","1" +"64437","Craig","MO","40.135643","-95.33869","-6","1" +"64438","Darlington","MO","40.183995","-94.40163","-6","1" +"64439","Dearborn","MO","39.527667","-94.76577","-6","1" +"64440","De Kalb","MO","39.585185","-94.90957","-6","1" +"64441","Denver","MO","40.386181","-94.28975","-6","1" +"64442","Eagleville","MO","40.481133","-93.99079","-6","1" +"64443","Easton","MO","39.742355","-94.65253","-6","1" +"64444","Edgerton","MO","39.493351","-94.62989","-6","1" +"64445","Elmo","MO","40.527275","-95.12039","-6","1" +"64446","Fairfax","MO","40.321432","-95.41748","-6","1" +"64447","Fairport","MO","39.892645","-94.404415","-6","1" +"64448","Faucett","MO","39.599578","-94.81076","-6","1" +"64449","Fillmore","MO","40.041181","-94.9786","-6","1" +"64451","Forest City","MO","39.982831","-95.18778","-6","1" +"64453","Gentry","MO","40.33816","-94.44985","-6","1" +"64454","Gower","MO","39.61222","-94.5929","-6","1" +"64455","Graham","MO","40.187914","-95.02142","-6","1" +"64456","Grant City","MO","40.496954","-94.38993","-6","1" +"64457","Guilford","MO","40.162731","-94.68236","-6","1" +"64458","Hatfield","MO","40.527055","-94.15484","-6","1" +"64459","Helena","MO","39.917997","-94.64152","-6","1" +"64461","Hopkins","MO","40.521372","-94.8073","-6","1" +"64463","King City","MO","40.057066","-94.49898","-6","1" +"64464","Polk","MO","40.024499","-94.551058","-6","1" +"64465","Lathrop","MO","39.535467","-94.30633","-6","1" +"64466","Maitland","MO","40.17606","-95.08755","-6","1" +"64467","Martinsville","MO","40.390465","-94.15285","-6","1" +"64468","Maryville","MO","40.341716","-94.87498","-6","1" +"64469","Maysville","MO","39.91125","-94.35231","-6","1" +"64470","Mound City","MO","40.148933","-95.23256","-6","1" +"64471","New Hampton","MO","40.264749","-94.19587","-6","1" +"64473","Oregon","MO","39.986725","-95.09514","-6","1" +"64474","Osborn","MO","39.771525","-94.38471","-6","1" +"64475","Parnell","MO","40.43702","-94.6186","-6","1" +"64476","Pickering","MO","40.447373","-94.84243","-6","1" +"64477","Plattsburg","MO","39.571712","-94.4603","-6","1" +"64478","Quitman","MO","40.287996","-95.082241","-6","1" +"64479","Ravenwood","MO","40.351697","-94.67399","-6","1" +"64480","Rea","MO","40.061613","-94.71818","-6","1" +"64481","Ridgeway","MO","40.358817","-93.90776","-6","1" +"64482","Rock Port","MO","40.437038","-95.53297","-6","1" +"64483","Rosendale","MO","40.03722","-94.83935","-6","1" +"64484","Rushville","MO","39.544889","-95.03076","-6","1" +"64485","Savannah","MO","39.94728","-94.8358","-6","1" +"64486","Sheridan","MO","40.530798","-94.62495","-6","1" +"64487","Skidmore","MO","40.30191","-95.09462","-6","1" +"64489","Stanberry","MO","40.218842","-94.5455","-6","1" +"64490","Stewartsville","MO","39.74226","-94.51483","-6","1" +"64491","Tarkio","MO","40.452497","-95.3661","-6","1" +"64492","Trimble","MO","39.474988","-94.54614","-6","1" +"64493","Turney","MO","39.634086","-94.31921","-6","1" +"64494","Union Star","MO","39.981974","-94.60288","-6","1" +"64496","Watson","MO","40.497797","-95.63121","-6","1" +"64497","Weatherby","MO","39.933989","-94.22274","-6","1" +"64498","Westboro","MO","40.554988","-95.34418","-6","1" +"64499","Worth","MO","40.402118","-94.44024","-6","1" +"64501","Saint Joseph","MO","39.766144","-94.84504","-6","1" +"64502","Saint Joseph","MO","39.676333","-94.857364","-6","1" +"64503","Saint Joseph","MO","39.741794","-94.83237","-6","1" +"64504","Saint Joseph","MO","39.707694","-94.87354","-6","1" +"64505","Saint Joseph","MO","39.812344","-94.84286","-6","1" +"64506","Saint Joseph","MO","39.787394","-94.80941","-6","1" +"64507","Saint Joseph","MO","39.748827","-94.80299","-6","1" +"64508","Saint Joseph","MO","39.676333","-94.857364","-6","1" +"64600","Blue Mound","MO","39.689033","-93.555456","-6","1" +"64601","Chillicothe","MO","39.790132","-93.54803","-6","1" +"64620","Altamont","MO","39.900508","-94.08876","-6","1" +"64621","Fairview","MO","39.630482","-93.478696","-6","1" +"64622","Bogard","MO","39.48743","-93.5483","-6","1" +"64623","Bosworth","MO","39.470242","-93.3395","-6","1" +"64624","Braymer","MO","39.581772","-93.79569","-6","1" +"64625","Breckenridge","MO","39.757364","-93.80512","-6","1" +"64628","Brookfield","MO","39.792042","-93.04973","-6","1" +"64629","Braymer","MO","39.591141","-93.792393","-6","1" +"64630","Browning","MO","40.037077","-93.17023","-6","1" +"64631","Bucklin","MO","39.79373","-92.88165","-6","1" +"64632","Cainsville","MO","40.448528","-93.77349","-6","1" +"64633","Carrollton","MO","39.355424","-93.48123","-6","1" +"64635","Chula","MO","39.931666","-93.45736","-6","1" +"64636","Coffey","MO","40.109791","-93.98136","-6","1" +"64637","Cowgill","MO","39.575445","-93.91742","-6","1" +"64638","Dawn","MO","39.616309","-93.62076","-6","1" +"64639","De Witt","MO","39.382255","-93.22876","-6","1" +"64640","Gallatin","MO","39.912973","-93.96536","-6","1" +"64641","Galt","MO","40.165088","-93.39425","-6","1" +"64642","Gilman City","MO","40.154895","-93.8395","-6","1" +"64643","Hale","MO","39.610631","-93.35686","-6","1" +"64644","Hamilton","MO","39.731689","-93.99009","-6","1" +"64645","Harris","MO","40.299574","-93.33273","-6","1" +"64646","Humphreys","MO","40.115577","-93.31489","-6","1" +"64647","Jameson","MO","40.036453","-93.97143","-6","1" +"64648","Jamesport","MO","39.977935","-93.80694","-6","1" +"64649","Kidder","MO","39.780045","-94.09563","-6","1" +"64650","Kingston","MO","39.637805","-94.04897","-6","1" +"64651","Laclede","MO","39.785731","-93.17676","-6","1" +"64652","Laredo","MO","40.025913","-93.43981","-6","1" +"64653","Linneus","MO","39.884096","-93.19234","-6","1" +"64654","Lock Springs","MO","39.96054","-93.988865","-6","1" +"64655","Lucerne","MO","40.448227","-93.25995","-6","1" +"64656","Ludlow","MO","39.671985","-93.67718","-6","1" +"64657","McFall","MO","40.130633","-94.21671","-6","1" +"64658","Marceline","MO","39.668998","-92.92916","-6","1" +"64659","Meadville","MO","39.78583","-93.30007","-6","1" +"64660","Mendon","MO","39.57756","-93.09683","-6","1" +"64661","Mercer","MO","40.522402","-93.54965","-6","1" +"64664","Mooresville","MO","39.743993","-93.71189","-6","1" +"64665","Mount Moriah","MO","40.30922","-93.794818","-6","1" +"64667","Newtown","MO","40.385432","-93.33102","-6","1" +"64668","Norborne","MO","39.344835","-93.69201","-6","1" +"64670","Pattonsburg","MO","40.051163","-94.12713","-6","1" +"64671","Polo","MO","39.541896","-94.05158","-6","1" +"64672","Powersville","MO","40.542119","-93.25234","-6","1" +"64673","Princeton","MO","40.391564","-93.58237","-6","1" +"64674","Purdin","MO","39.958661","-93.16074","-6","1" +"64676","Rothville","MO","39.657285","-93.07282","-6","1" +"64677","Purdin","MO","39.869353","-93.00865","-6","1" +"64679","Spickard","MO","40.230884","-93.56742","-6","1" +"64680","Stet","MO","39.410971","-93.431928","-6","1" +"64681","Sumner","MO","39.647537","-93.23128","-6","1" +"64682","Tina","MO","39.542571","-93.46006","-6","1" +"64683","Trenton","MO","40.07823","-93.61143","-6","1" +"64686","Utica","MO","39.743","-93.62835","-6","1" +"64687","Wakenda","MO","39.315544","-93.377455","-6","1" +"64688","Wheeling","MO","39.808311","-93.37642","-6","1" +"64689","Winston","MO","39.868966","-94.14693","-6","1" +"64701","Harrisonville","MO","38.641509","-94.34126","-6","1" +"64720","Adrian","MO","38.40388","-94.34512","-6","1" +"64722","Amoret","MO","38.266148","-94.55686","-6","1" +"64723","Amsterdam","MO","38.363183","-94.57551","-6","1" +"64724","Appleton City","MO","38.171591","-94.02233","-6","1" +"64725","Archie","MO","38.493639","-94.35764","-6","1" +"64726","Blairstown","MO","38.526134","-93.93112","-6","1" +"64728","Bronaugh","MO","37.692776","-94.50225","-6","1" +"64730","Butler","MO","38.259528","-94.32317","-6","1" +"64733","Chilhowee","MO","38.581879","-93.82496","-6","1" +"64734","Cleveland","MO","38.671517","-94.57953","-6","1" +"64735","Clinton","MO","38.364214","-93.76042","-6","1" +"64738","Collins","MO","37.899548","-93.65335","-6","1" +"64739","Creighton","MO","38.506491","-94.09323","-6","1" +"64740","Deepwater","MO","38.250989","-93.7365","-6","1" +"64741","Deerfield","MO","37.825966","-94.55673","-6","1" +"64742","Drexel","MO","38.505786","-94.56078","-6","1" +"64743","East Lynne","MO","38.668901","-94.22863","-6","1" +"64744","El Dorado Springs","MO","37.853003","-94.00271","-6","1" +"64745","Foster","MO","38.164781","-94.50955","-6","1" +"64746","Freeman","MO","38.616741","-94.49465","-6","1" +"64747","Garden City","MO","38.575037","-94.18376","-6","1" +"64748","Golden City","MO","37.371365","-94.09057","-6","1" +"64750","Harwood","MO","37.943914","-94.12773","-6","1" +"64751","Horton","MO","37.946913","-94.42222","-6","1" +"64752","Hume","MO","38.081874","-94.5645","-6","1" +"64755","Jasper","MO","37.326648","-94.31032","-6","1" +"64756","Jerico Springs","MO","37.621338","-94.01643","-6","1" +"64759","Lamar","MO","37.507321","-94.2761","-6","1" +"64761","Leeton","MO","38.585719","-93.68518","-6","1" +"64762","Liberal","MO","37.555366","-94.51496","-6","1" +"64763","Lowry City","MO","38.137769","-93.73225","-6","1" +"64765","Metz","MO","37.849889","-94.338133","-6","1" +"64766","Milford","MO","37.501451","-94.345591","-6","1" +"64767","Milo","MO","37.747201","-94.22416","-6","1" +"64769","Mindenmines","MO","37.499513","-94.57635","-6","1" +"64770","Montrose","MO","38.277754","-93.98973","-6","1" +"64771","Moundville","MO","37.766787","-94.45313","-6","1" +"64772","Nevada","MO","37.838563","-94.35075","-6","1" +"64776","Osceola","MO","38.039239","-93.67676","-6","1" +"64777","Passaic","MO","38.251879","-94.331993","-6","1" +"64778","Richards","MO","37.906353","-94.53424","-6","1" +"64779","Rich Hill","MO","38.086255","-94.38241","-6","1" +"64780","Rockville","MO","38.054666","-94.07515","-6","1" +"64781","Roscoe","MO","37.981824","-93.80721","-6","1" +"64783","Schell City","MO","38.005777","-94.10004","-6","1" +"64784","Sheldon","MO","37.665823","-94.26399","-6","1" +"64788","Urich","MO","38.429061","-94.00494","-6","1" +"64789","Vista","MO","38.024133","-93.781478","-6","1" +"64790","Walker","MO","37.903772","-94.21822","-6","1" +"64801","Joplin","MO","37.09416","-94.50169","-6","1" +"64802","Joplin","MO","37.206219","-94.335453","-6","1" +"64803","Joplin","MO","37.206219","-94.335453","-6","1" +"64804","Joplin","MO","37.047161","-94.51124","-6","1" +"64810","Goodman","MO","36.739448","-94.405903","-6","1" +"64830","Alba","MO","37.236623","-94.42087","-6","1" +"64831","Anderson","MO","36.658583","-94.44972","-6","1" +"64832","Asbury","MO","37.292467","-94.5856","-6","1" +"64833","Avilla","MO","37.195692","-94.12946","-6","1" +"64834","Carl Junction","MO","37.174256","-94.55543","-6","1" +"64835","Carterville","MO","37.149458","-94.44019","-6","1" +"64836","Carthage","MO","37.168985","-94.31164","-6","1" +"64840","Diamond","MO","37.002574","-94.32419","-6","1" +"64841","Duenweg","MO","37.081103","-94.41181","-6","1" +"64842","Fairview","MO","36.799869","-94.10161","-6","1" +"64843","Goodman","MO","36.734769","-94.42691","-6","1" +"64844","Granby","MO","36.913607","-94.24731","-6","1" +"64847","Lanagan","MO","36.61041","-94.4509","-6","1" +"64848","La Russell","MO","37.172786","-94.00043","-6","1" +"64849","Neck City","MO","37.256327","-94.44382","-6","1" +"64850","Neosho","MO","36.86429","-94.39016","-6","1" +"64853","Newtonia","MO","36.828416","-94.152072","-6","1" +"64854","Noel","MO","36.547736","-94.47579","-6","1" +"64855","Oronogo","MO","37.260443","-94.48079","-6","1" +"64856","Pineville","MO","36.571849","-94.28956","-6","1" +"64857","Purcell","MO","37.241939","-94.43498","-6","1" +"64858","Racine","MO","36.898694","-94.52788","-6","1" +"64859","Reeds","MO","37.146249","-94.16048","-6","1" +"64861","Rocky Comfort","MO","36.712525","-94.14484","-6","1" +"64862","Sarcoxie","MO","37.086771","-94.12545","-6","1" +"64863","South West City","MO","36.530266","-94.60271","-6","1" +"64864","Saginaw","MO","36.902332","-94.338957","-6","1" +"64865","Seneca","MO","36.833365","-94.59415","-6","1" +"64866","Stark City","MO","36.871373","-94.15805","-6","1" +"64867","Stella","MO","36.73901","-94.22947","-6","1" +"64868","Tiff City","MO","36.632573","-94.342802","-6","1" +"64869","Waco","MO","37.206219","-94.335453","-6","1" +"64870","Webb City","MO","37.155108","-94.47465","-6","1" +"64873","Wentworth","MO","37.011487","-94.05116","-6","1" +"64874","Wheaton","MO","36.760347","-94.05456","-6","1" +"64930","Washington","MO","39.781173","-94.600647","-6","1" +"64944","Kansas City","MO","39.035038","-94.356728","-6","1" +"64999","Kansas City","MO","39.035038","-94.356728","-6","1" +"65001","Argyle","MO","38.287405","-92.02352","-6","1" +"65010","Ashland","MO","38.784123","-92.24395","-6","1" +"65011","Barnett","MO","38.361276","-92.72167","-6","1" +"65013","Belle","MO","38.279787","-91.74108","-6","1" +"65014","Bland","MO","38.31417","-91.62432","-6","1" +"65016","Bonnots Mill","MO","38.575173","-91.90722","-6","1" +"65017","Brumley","MO","38.084663","-92.49693","-6","1" +"65018","California","MO","38.624862","-92.56443","-6","1" +"65020","Camdenton","MO","38.032648","-92.78269","-6","1" +"65022","Cedar City","MO","38.599175","-92.178057","-6","1" +"65023","Centertown","MO","38.630396","-92.39311","-6","1" +"65024","Chamois","MO","38.633533","-91.78052","-6","1" +"65025","Clarksburg","MO","38.662989","-92.67253","-6","1" +"65026","Eldon","MO","38.311355","-92.58395","-6","1" +"65031","Etterville","MO","38.223649","-92.438629","-6","1" +"65032","Eugene","MO","38.351597","-92.3956","-6","1" +"65034","Fortuna","MO","38.561436","-92.80171","-6","1" +"65035","Freeburg","MO","38.341076","-91.92629","-6","1" +"65036","Gasconade","MO","38.675775","-91.58968","-6","1" +"65037","Gravois Mills","MO","38.232201","-92.82494","-6","1" +"65038","Laurie","MO","38.196429","-92.867804","-6","1" +"65039","Hartsburg","MO","38.692923","-92.28803","-6","1" +"65040","Henley","MO","38.35222","-92.31857","-6","1" +"65041","Hermann","MO","38.659798","-91.47293","-6","1" +"65042","High Point","MO","38.674914","-92.610941","-6","1" +"65043","Holts Summit","MO","38.632055","-92.11831","-6","1" +"65046","Jamestown","MO","38.77066","-92.48206","-6","1" +"65047","Kaiser","MO","38.14008","-92.58331","-6","1" +"65048","Koeltztown","MO","38.364291","-92.00546","-6","1" +"65049","Lake Ozark","MO","38.192972","-92.67262","-6","1" +"65050","Latham","MO","38.543408","-92.69655","-6","1" +"65051","Linn","MO","38.477953","-91.81695","-6","1" +"65052","Linn Creek","MO","38.058473","-92.6855","-6","1" +"65053","Lohman","MO","38.543762","-92.35461","-6","1" +"65054","Loose Creek","MO","38.483274","-91.95135","-6","1" +"65055","McGirk","MO","38.674914","-92.610941","-6","1" +"65058","Meta","MO","38.280617","-92.166","-6","1" +"65059","Mokane","MO","38.674735","-91.8776","-6","1" +"65061","Morrison","MO","38.607257","-91.64049","-6","1" +"65062","Mount Sterling","MO","38.493511","-91.65954","-6","1" +"65063","New Bloomfield","MO","38.723957","-92.08132","-6","1" +"65064","Olean","MO","38.407056","-92.48693","-6","1" +"65065","Osage Beach","MO","38.130807","-92.66935","-6","1" +"65066","Owensville","MO","38.33895","-91.49522","-6","1" +"65067","Portland","MO","38.751905","-91.69826","-6","1" +"65068","Prairie Home","MO","38.798727","-92.6068","-6","1" +"65069","Rhineland","MO","38.748204","-91.57242","-6","1" +"65072","Rocky Mount","MO","38.248494","-92.71511","-6","1" +"65074","Russellville","MO","38.485815","-92.46675","-6","1" +"65075","Saint Elizabeth","MO","38.259655","-92.25872","-6","1" +"65076","Saint Thomas","MO","38.36528","-92.19491","-6","1" +"65077","Steedman","MO","38.78615","-91.80921","-6","1" +"65078","Stover","MO","38.364491","-93.00645","-6","1" +"65079","Sunrise Beach","MO","38.156071","-92.75899","-6","1" +"65080","Tebbetts","MO","38.634516","-91.9766","-6","1" +"65081","Tipton","MO","38.642614","-92.79811","-6","1" +"65082","Tuscumbia","MO","38.217129","-92.43221","-6","1" +"65083","Ulman","MO","38.142363","-92.43502","-6","1" +"65084","Versailles","MO","38.428609","-92.84968","-6","1" +"65085","Westphalia","MO","38.417602","-92.02791","-6","1" +"65101","Jefferson City","MO","38.535897","-92.13905","-6","1" +"65102","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65103","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65104","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65105","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65106","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65107","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65108","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65109","Jefferson City","MO","38.568287","-92.25329","-6","1" +"65110","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65111","Jefferson City","MO","38.530921","-92.249342","-6","1" +"65201","Columbia","MO","38.926838","-92.29003","-6","1" +"65202","Columbia","MO","39.00234","-92.30033","-6","1" +"65203","Columbia","MO","38.925204","-92.36887","-6","1" +"65205","Columbia","MO","39.044719","-92.349574","-6","1" +"65211","Columbia","MO","38.903318","-92.102153","-6","1" +"65212","Columbia","MO","38.937608","-92.33043","-6","1" +"65215","Columbia","MO","38.953238","-92.320783","-6","1" +"65216","Columbia","MO","38.903318","-92.102153","-6","1" +"65217","Columbia","MO","38.903318","-92.102153","-6","1" +"65218","Columbia","MO","38.903318","-92.102153","-6","1" +"65230","Armstrong","MO","39.29161","-92.70579","-6","1" +"65231","Auxvasse","MO","39.0159","-91.8983","-6","1" +"65232","Benton City","MO","39.168227","-91.75007","-6","1" +"65233","Boonville","MO","38.935305","-92.73932","-6","1" +"65236","Brunswick","MO","39.436768","-93.11175","-6","1" +"65237","Bunceton","MO","38.782638","-92.81139","-6","1" +"65239","Cairo","MO","39.522573","-92.43041","-6","1" +"65240","Centralia","MO","39.212252","-92.13684","-6","1" +"65243","Clark","MO","39.278949","-92.36456","-6","1" +"65244","Clifton Hill","MO","39.487134","-92.67946","-6","1" +"65246","Dalton","MO","39.370265","-92.99396","-6","1" +"65247","Excello","MO","39.626821","-92.4927","-6","1" +"65248","Fayette","MO","39.148876","-92.67027","-6","1" +"65250","Franklin","MO","39.024196","-92.81278","-6","1" +"65251","Fulton","MO","38.852436","-91.95808","-6","1" +"65254","Glasgow","MO","39.235444","-92.84612","-6","1" +"65255","Hallsville","MO","39.104503","-92.23452","-6","1" +"65256","Harrisburg","MO","39.137047","-92.45914","-6","1" +"65257","Higbee","MO","39.286571","-92.53612","-6","1" +"65258","Holliday","MO","39.516668","-92.13198","-6","1" +"65259","Huntsville","MO","39.442539","-92.55356","-6","1" +"65260","Jacksonville","MO","39.580455","-92.41023","-6","1" +"65261","Keytesville","MO","39.500486","-92.9155","-6","1" +"65262","Kingdom City","MO","38.959191","-91.92948","-6","1" +"65263","Madison","MO","39.460422","-92.22005","-6","1" +"65264","Martinsburg","MO","39.09551","-91.67592","-6","1" +"65265","Mexico","MO","39.179316","-91.88404","-6","1" +"65270","Moberly","MO","39.420353","-92.4344","-6","1" +"65274","New Franklin","MO","39.015654","-92.68811","-6","1" +"65275","Paris","MO","39.463743","-92.00144","-6","1" +"65276","Pilot Grove","MO","38.849336","-92.93735","-6","1" +"65278","Renick","MO","39.342316","-92.41251","-6","1" +"65279","Rocheport","MO","39.014478","-92.53946","-6","1" +"65280","Rush Hill","MO","39.213975","-91.73545","-6","1" +"65281","Salisbury","MO","39.461414","-92.80488","-6","1" +"65282","Santa Fe","MO","39.369471","-91.81864","-6","1" +"65283","Stoutsville","MO","39.539711","-91.86679","-6","1" +"65284","Sturgeon","MO","39.208685","-92.29136","-6","1" +"65285","Thompson","MO","39.199784","-91.99901","-6","1" +"65286","Triplett","MO","39.506878","-93.20442","-6","1" +"65287","Wooldridge","MO","38.884926","-92.52188","-6","1" +"65299","Mid Missouri","MO","38.903318","-92.102153","-6","1" +"65301","Sedalia","MO","38.702964","-93.23231","-6","1" +"65302","Sedalia","MO","38.724577","-93.281672","-6","1" +"65305","Whiteman Air Force Base","MO","38.732758","-93.55485","-6","1" +"65320","Arrow Rock","MO","39.070941","-92.94664","-6","1" +"65321","Blackburn","MO","39.093236","-93.46794","-6","1" +"65322","Blackwater","MO","38.975799","-92.96","-6","1" +"65323","Calhoun","MO","38.459369","-93.62914","-6","1" +"65324","Climax Springs","MO","38.151604","-92.99055","-6","1" +"65325","Cole Camp","MO","38.451021","-93.19156","-6","1" +"65326","Edwards","MO","38.203621","-93.14236","-6","1" +"65327","Emma","MO","38.972563","-93.49429","-6","1" +"65329","Florence","MO","38.609313","-92.97655","-6","1" +"65330","Gilliam","MO","39.226389","-92.96214","-6","1" +"65332","Green Ridge","MO","38.61917","-93.41123","-6","1" +"65333","Houstonia","MO","38.901528","-93.32101","-6","1" +"65334","Hughesville","MO","38.825456","-93.25182","-6","1" +"65335","Ionia","MO","38.503623","-93.33085","-6","1" +"65336","Knob Noster","MO","38.76699","-93.56712","-6","1" +"65337","La Monte","MO","38.780854","-93.4275","-6","1" +"65338","Lincoln","MO","38.34463","-93.26634","-6","1" +"65339","Malta Bend","MO","39.180956","-93.37889","-6","1" +"65340","Marshall","MO","39.10518","-93.18783","-6","1" +"65344","Miami","MO","39.310853","-93.22589","-6","1" +"65345","Mora","MO","38.55338","-93.11417","-6","1" +"65347","Nelson","MO","38.99158","-93.04083","-6","1" +"65348","Otterville","MO","38.708894","-92.99077","-6","1" +"65349","Slater","MO","39.221658","-93.06252","-6","1" +"65350","Smithton","MO","38.671012","-93.09353","-6","1" +"65351","Sweet Springs","MO","38.982222","-93.40798","-6","1" +"65354","Syracuse","MO","38.675515","-92.9168","-6","1" +"65355","Warsaw","MO","38.242861","-93.36354","-6","1" +"65360","Windsor","MO","38.525725","-93.51705","-6","1" +"65401","Rolla","MO","37.94384","-91.77105","-6","1" +"65402","Rolla","MO","37.963208","-91.817936","-6","1" +"65409","Rolla","MO","37.876191","-91.777182","-6","1" +"65432","Cuba","MO","38.062095","-91.391848","-6","1" +"65433","Bendavis","MO","37.309426","-92.214372","-6","1" +"65436","Beulah","MO","37.624096","-91.96543","-6","1" +"65438","Birch Tree","MO","36.95653","-91.49134","-6","1" +"65439","Bixby","MO","37.672965","-91.1097","-6","1" +"65440","Boss","MO","37.615344","-91.1704","-6","1" +"65441","Bourbon","MO","38.126316","-91.20688","-6","1" +"65443","Brinktown","MO","38.125349","-92.08435","-6","1" +"65444","Bucyrus","MO","37.365975","-92.07367","-6","1" +"65446","Cherryville","MO","37.817055","-91.26828","-6","1" +"65449","Cook Station","MO","37.85017","-91.49431","-6","1" +"65452","Crocker","MO","37.95348","-92.26091","-6","1" +"65453","Cuba","MO","38.092097","-91.4163","-6","1" +"65456","Davisville","MO","37.780711","-91.19197","-6","1" +"65457","Devils Elbow","MO","37.829068","-92.05671","-6","1" +"65459","Dixon","MO","37.990962","-92.09833","-6","1" +"65461","Duke","MO","37.68574","-92.04337","-6","1" +"65462","Edgar Springs","MO","37.693916","-91.83904","-6","1" +"65463","Eldridge","MO","37.84762","-92.7831","-6","1" +"65464","Elk Creek","MO","37.191845","-91.91627","-6","1" +"65466","Eminence","MO","37.165828","-91.36574","-6","1" +"65468","Eunice","MO","37.260073","-91.79134","-6","1" +"65470","Falcon","MO","37.532445","-92.39099","-6","1" +"65473","Fort Leonard Wood","MO","37.737264","-92.12685","-6","1" +"65479","Hartshorn","MO","37.353209","-91.63376","-6","1" +"65483","Houston","MO","37.316088","-91.95471","-6","1" +"65484","Huggins","MO","37.366219","-92.20608","-6","1" +"65486","Iberia","MO","38.10273","-92.30496","-6","1" +"65495","Dixon","MO","37.995489","-92.101845","-6","1" +"65501","Jadwin","MO","37.464282","-91.54342","-6","1" +"65529","Jerome","MO","37.926116","-91.98054","-6","1" +"65530","Gilliam","MO","39.235169","-93.001374","-6","1" +"65532","Lake Spring","MO","37.782433","-91.67142","-6","1" +"65534","Laquey","MO","37.689335","-92.28363","-6","1" +"65535","Leasburg","MO","38.091816","-91.29375","-6","1" +"65536","Lebanon","MO","37.678528","-92.64733","-6","1" +"65540","Lecoma","MO","37.767937","-91.75234","-6","1" +"65541","Lenox","MO","37.622778","-91.76321","-6","1" +"65542","Licking","MO","37.489718","-91.87351","-6","1" +"65543","Lynchburg","MO","37.47449","-92.2971","-6","1" +"65546","Montier","MO","37.153294","-91.337506","-6","1" +"65548","Mountain View","MO","36.996408","-91.71697","-6","1" +"65550","Newburg","MO","37.862197","-91.93811","-6","1" +"65552","Plato","MO","37.545213","-92.17323","-6","1" +"65555","Raymondville","MO","37.37815","-91.78576","-6","1" +"65556","Richland","MO","37.828549","-92.40512","-6","1" +"65557","Roby","MO","37.508599","-92.09108","-6","1" +"65559","Saint James","MO","38.011872","-91.61179","-6","1" +"65560","Salem","MO","37.630896","-91.51423","-6","1" +"65564","Solo","MO","37.241589","-91.97203","-6","1" +"65565","Steelville","MO","37.919808","-91.25495","-6","1" +"65566","Viburnum","MO","37.716972","-91.13438","-6","1" +"65567","Stoutland","MO","37.840129","-92.5161","-6","1" +"65570","Success","MO","37.465392","-92.09651","-6","1" +"65571","Summersville","MO","37.184223","-91.65064","-6","1" +"65572","Swedeborg","MO","37.81186","-92.217391","-6","1" +"65573","Teresita","MO","37.153294","-91.337506","-6","1" +"65575","West Plains","MO","36.741969","-91.851732","-6","1" +"65580","Vichy","MO","38.10675","-91.7742","-6","1" +"65582","Vienna","MO","38.175146","-91.94655","-6","1" +"65583","Waynesville","MO","37.820367","-92.19165","-6","1" +"65584","St. Robert","MO","37.827415","-92.135741","-6","1" +"65586","Wesco","MO","37.858464","-91.426693","-6","1" +"65587","Waynesville","MO","37.805756","-92.22218","-6","1" +"65588","Winona","MO","36.996441","-91.30515","-6","1" +"65589","Yukon","MO","37.246525","-91.82976","-6","1" +"65590","Long Lane","MO","37.61082","-92.94184","-6","1" +"65591","Montreal","MO","37.97957","-92.59117","-6","1" +"65601","Aldrich","MO","37.537425","-93.57069","-6","1" +"65602","Springfield","MO","37.859361","-92.705545","-6","1" +"65603","Arcola","MO","37.557203","-93.86589","-6","1" +"65604","Ash Grove","MO","37.270684","-93.59815","-6","1" +"65605","Aurora","MO","36.918018","-93.71063","-6","1" +"65606","Alton","MO","36.679742","-91.36286","-6","1" +"65607","Caplinger Mills","MO","37.736871","-93.842468","-6","1" +"65608","Ava","MO","36.921199","-92.66205","-6","1" +"65609","Bakersfield","MO","36.527558","-92.14776","-6","1" +"65610","Billings","MO","37.042293","-93.52526","-6","1" +"65611","Blue Eye","MO","36.54602","-93.34364","-6","1" +"65612","Bois D Arc","MO","37.218244","-93.53629","-6","1" +"65613","Bolivar","MO","37.616822","-93.40072","-6","1" +"65614","Bradleyville","MO","36.734544","-92.89942","-6","1" +"65615","Branson","MO","36.660981","-93.235798","-6","1" +"65616","Branson","MO","36.64417","-93.25668","-6","1" +"65617","Brighton","MO","37.436062","-93.34884","-6","1" +"65618","Brixey","MO","36.755168","-92.38351","-6","1" +"65619","Brookline Station","MO","37.134829","-93.38497","-6","1" +"65620","Bruner","MO","37.020827","-92.94999","-6","1" +"65622","Buffalo","MO","37.630577","-93.10129","-6","1" +"65623","Butterfield","MO","36.749457","-93.90647","-6","1" +"65624","Cape Fair","MO","36.725025","-93.50573","-6","1" +"65625","Cassville","MO","36.681589","-93.85105","-6","1" +"65626","Caulfield","MO","36.610463","-92.14245","-6","1" +"65627","Cedarcreek","MO","36.569847","-93.01139","-6","1" +"65629","Chadwick","MO","36.897807","-93.00082","-6","1" +"65630","Chestnutridge","MO","36.829356","-93.20341","-6","1" +"65631","Clever","MO","37.015404","-93.43738","-6","1" +"65632","Conway","MO","37.494752","-92.83345","-6","1" +"65633","Crane","MO","36.901929","-93.53989","-6","1" +"65634","Cross Timbers","MO","38.015379","-93.195","-6","1" +"65635","Dadeville","MO","37.508827","-93.70554","-6","1" +"65636","Diggins","MO","37.277247","-92.877874","-6","1" +"65637","Dora","MO","36.753498","-92.17819","-6","1" +"65638","Drury","MO","36.851944","-92.33081","-6","1" +"65640","Dunnegan","MO","37.707827","-93.5614","-6","1" +"65641","Eagle Rock","MO","36.536324","-93.73134","-6","1" +"65644","Elkland","MO","37.509611","-93.03846","-6","1" +"65645","Eudora","MO","37.476695","-93.539707","-6","1" +"65646","Everton","MO","37.339631","-93.70745","-6","1" +"65647","Exeter","MO","36.690297","-93.98011","-6","1" +"65648","Fair Grove","MO","37.391275","-93.16252","-6","1" +"65649","Fair Play","MO","37.618579","-93.61158","-6","1" +"65650","Flemington","MO","37.802535","-93.44334","-6","1" +"65652","Fordland","MO","37.145969","-92.94888","-6","1" +"65653","Forsyth","MO","36.706492","-93.11171","-6","1" +"65654","Freistatt","MO","37.021147","-93.897434","-6","1" +"65655","Gainesville","MO","36.606281","-92.43342","-6","1" +"65656","Galena","MO","36.771898","-93.48394","-6","1" +"65657","Garrison","MO","36.839078","-93.00809","-6","1" +"65658","Golden","MO","36.557301","-93.64371","-6","1" +"65659","Goodson","MO","37.746461","-93.2482","-6","1" +"65660","Graff","MO","37.330625","-92.27211","-6","1" +"65661","Greenfield","MO","37.439717","-93.83934","-6","1" +"65662","Grovespring","MO","37.465808","-92.58794","-6","1" +"65663","Half Way","MO","37.586048","-93.23617","-6","1" +"65664","Halltown","MO","37.193688","-93.62758","-6","1" +"65666","Hardenville","MO","36.651607","-92.442341","-6","1" +"65667","Hartville","MO","37.302013","-92.50741","-6","1" +"65668","Hermitage","MO","37.913567","-93.30305","-6","1" +"65669","Highlandville","MO","36.923067","-93.30696","-6","1" +"65672","Hollister","MO","36.600309","-93.23552","-6","1" +"65673","Hollister","MO","36.617892","-93.216187","-6","1" +"65674","Humansville","MO","37.793322","-93.59877","-6","1" +"65675","Hurley","MO","36.930861","-93.49861","-6","1" +"65676","Isabella","MO","36.569901","-92.62804","-6","1" +"65679","Kirbyville","MO","36.603318","-93.11007","-6","1" +"65680","Kissee Mills","MO","36.660582","-93.01608","-6","1" +"65681","Lampe","MO","36.561455","-93.46715","-6","1" +"65682","Lockwood","MO","37.411943","-93.96162","-6","1" +"65684","Morris","MO","37.298292","-92.162456","-6","1" +"65685","Louisburg","MO","37.751804","-93.16513","-6","1" +"65686","Kimberling City","MO","36.63101","-93.43392","-6","1" +"65688","Brandsville","MO","36.648817","-91.697596","-6","1" +"65689","Cabool","MO","37.132577","-92.09857","-6","1" +"65690","Couch","MO","36.58466","-91.30687","-6","1" +"65692","Koshkonong","MO","36.602467","-91.64615","-6","1" +"65701","McClurg","MO","36.79589","-92.77286","-6","1" +"65702","Macomb","MO","37.073473","-92.4949","-6","1" +"65704","Mansfield","MO","37.128682","-92.5821","-6","1" +"65705","Marionville","MO","37.007586","-93.61839","-6","1" +"65706","Marshfield","MO","37.330958","-92.90929","-6","1" +"65707","Miller","MO","37.220289","-93.84181","-6","1" +"65708","Monett","MO","36.91816","-93.91488","-6","1" +"65710","Morrisville","MO","37.487034","-93.42709","-6","1" +"65711","Mountain Grove","MO","37.176376","-92.27609","-6","1" +"65712","Mount Vernon","MO","37.101742","-93.80738","-6","1" +"65713","Niangua","MO","37.412437","-92.76311","-6","1" +"65714","Nixa","MO","37.045593","-93.30563","-6","1" +"65715","Noble","MO","36.733415","-92.58195","-6","1" +"65717","Norwood","MO","37.093694","-92.41231","-6","1" +"65720","Oldfield","MO","36.935499","-92.93715","-6","1" +"65721","Ozark","MO","37.021086","-93.21541","-6","1" +"65722","Phillipsburg","MO","37.582527","-92.76541","-6","1" +"65723","Pierce City","MO","36.956471","-94.02134","-6","1" +"65724","Pittsburg","MO","37.85245","-93.31817","-6","1" +"65725","Pleasant Hope","MO","37.43378","-93.26457","-6","1" +"65726","Point Lookout","MO","36.616515","-93.241839","-6","1" +"65727","Polk","MO","37.789907","-93.27802","-6","1" +"65728","Ponce De Leon","MO","36.87478","-93.34371","-6","1" +"65729","Pontiac","MO","36.525433","-92.59234","-6","1" +"65730","Powell","MO","36.618869","-94.156","-6","1" +"65731","Powersite","MO","36.655356","-93.12274","-6","1" +"65732","Preston","MO","37.93345","-93.17887","-6","1" +"65733","Protem","AR","36.483329","-92.81449","-6","1" +"65734","Purdy","MO","36.795164","-93.94164","-6","1" +"65735","Quincy","MO","38.059763","-93.48502","-6","1" +"65737","Reeds Spring","MO","36.693007","-93.37153","-6","1" +"65738","Republic","MO","37.124302","-93.47407","-6","1" +"65739","Ridgedale","MO","36.531361","-93.28199","-6","1" +"65740","Rockaway Beach","MO","36.713014","-93.16335","-6","1" +"65741","Rockbridge","MO","36.651607","-92.442341","-6","1" +"65742","Rogersville","MO","37.122896","-93.0784","-6","1" +"65744","Rueter","MO","36.614975","-92.89513","-6","1" +"65745","Seligman","MO","36.530992","-93.95233","-6","1" +"65746","Seymour","MO","37.157055","-92.78857","-6","1" +"65747","Shell Knob","MO","36.587559","-93.58793","-6","1" +"65752","South Greenfield","MO","37.343226","-93.82877","-6","1" +"65753","Sparta","MO","37.000766","-93.07945","-6","1" +"65754","Spokane","MO","36.850549","-93.30942","-6","1" +"65755","Squires","MO","36.802445","-92.62563","-6","1" +"65756","Stotts City","MO","37.103672","-93.95502","-6","1" +"65757","Strafford","MO","37.281619","-93.10971","-6","1" +"65759","Taneyville","MO","36.739739","-93.02965","-6","1" +"65760","Tecumseh","MO","36.606892","-92.26753","-6","1" +"65761","Theodosia","AR","36.489216","-92.69301","-6","1" +"65762","Thornfield","MO","36.681335","-92.66205","-6","1" +"65764","Tunas","MO","37.827158","-92.98423","-6","1" +"65765","Turners","MO","37.25807","-93.343673","-6","1" +"65766","Udall","MO","36.545211","-92.25803","-6","1" +"65767","Urbana","MO","37.844753","-93.17456","-6","1" +"65768","Vanzant","MO","36.919476","-92.25917","-6","1" +"65769","Verona","MO","36.935443","-93.78328","-6","1" +"65770","Walnut Grove","MO","37.410221","-93.54065","-6","1" +"65771","Walnut Shade","MO","36.773538","-93.21227","-6","1" +"65772","Washburn","MO","36.619334","-94.01825","-6","1" +"65773","Wasola","MO","36.757025","-92.53414","-6","1" +"65774","Weaubleau","MO","37.914579","-93.49803","-6","1" +"65775","West Plains","MO","36.719145","-91.87408","-6","1" +"65776","South Fork","MO","36.629135","-91.986785","-6","1" +"65777","Moody","MO","36.524268","-91.98863","-6","1" +"65778","Myrtle","MO","36.531635","-91.29933","-6","1" +"65779","Wheatland","MO","37.939779","-93.38237","-6","1" +"65781","Willard","MO","37.340995","-93.4179","-6","1" +"65783","Windyville","MO","37.715074","-92.92425","-6","1" +"65784","Zanoni","MO","36.695557","-92.32949","-6","1" +"65785","Stockton","MO","37.703022","-93.80653","-6","1" +"65786","Macks Creek","MO","37.968547","-92.9428","-6","1" +"65787","Roach","MO","38.067095","-92.88033","-6","1" +"65788","Peace Valley","MO","36.801103","-91.70972","-6","1" +"65789","Pomona","MO","36.857128","-91.88978","-6","1" +"65790","Pottersville","MO","36.679277","-92.10602","-6","1" +"65791","Thayer","MO","36.543362","-91.52391","-6","1" +"65793","Willow Springs","MO","36.996755","-91.95796","-6","1" +"65801","Springfield","MO","37.25807","-93.343673","-6","1" +"65802","Springfield","MO","37.212639","-93.31817","-6","1" +"65803","Springfield","MO","37.257053","-93.29015","-6","1" +"65804","Springfield","MO","37.161299","-93.2519","-6","1" +"65805","Springfield","MO","37.25807","-93.343673","-6","1" +"65806","Springfield","MO","37.206624","-93.29923","-6","1" +"65807","Springfield","MO","37.168435","-93.31297","-6","1" +"65808","Springfield","MO","37.25807","-93.343673","-6","1" +"65809","Springfield","MO","37.167282","-93.20199","-6","1" +"65810","Springfield","MO","37.120301","-93.31461","-6","1" +"65814","Springfield","MO","37.25807","-93.343673","-6","1" +"65817","Springfield","MO","37.25807","-93.343673","-6","1" +"65890","Springfield","MO","37.25807","-93.343673","-6","1" +"65898","Springfield","MO","37.180349","-93.295137","-6","1" +"65899","Springfield","MO","37.181498","-93.259586","-6","1" +"66002","Atchison","KS","39.553786","-95.13472","-6","1" +"66006","Baldwin City","KS","38.789719","-95.21058","-6","1" +"66007","Basehor","KS","39.145077","-94.94259","-6","1" +"66008","Bendena","KS","39.703642","-95.18541","-6","1" +"66010","Blue Mound","KS","38.102749","-95.0154","-6","1" +"66012","Bonner Springs","KS","39.065703","-94.90453","-6","1" +"66013","Bucyrus","KS","38.733271","-94.6957","-6","1" +"66014","Centerville","KS","38.226434","-94.98779","-6","1" +"66015","Colony","KS","38.067424","-95.40614","-6","1" +"66016","Cummings","KS","39.47305","-95.23992","-6","1" +"66017","Denton","KS","39.720911","-95.27417","-6","1" +"66018","De Soto","KS","38.961396","-94.97681","-6","1" +"66019","Clearview City","KS","38.94575","-95.00349","-6","1" +"66020","Easton","KS","39.331919","-95.11389","-6","1" +"66021","Edgerton","KS","38.762545","-95.00622","-6","1" +"66023","Effingham","KS","39.521275","-95.39413","-6","1" +"66024","Elwood","KS","39.756944","-94.87824","-6","1" +"66025","Eudora","KS","38.917032","-95.06455","-6","1" +"66026","Fontana","KS","38.404804","-94.85125","-6","1" +"66027","Fort Leavenworth","KS","39.348031","-94.93177","-6","1" +"66030","Gardner","KS","38.813839","-94.9265","-6","1" +"66031","New Century","KS","38.824863","-94.899201","-6","1" +"66032","Garnett","KS","38.278069","-95.25997","-6","1" +"66033","Greeley","KS","38.368325","-95.12925","-6","1" +"66035","Highland","KS","39.85881","-95.2569","-6","1" +"66036","Hillsdale","KS","38.658068","-94.852061","-6","1" +"66039","Kincaid","KS","38.088951","-95.17473","-6","1" +"66040","La Cygne","KS","38.35152","-94.73705","-6","1" +"66041","Lancaster","KS","39.589832","-95.31425","-6","1" +"66042","Lane","KS","38.442448","-95.09067","-6","1" +"66043","Lansing","KS","39.258624","-94.89859","-6","1" +"66044","Lawrence","KS","38.983551","-95.23202","-6","1" +"66045","Lawrence","KS","38.952526","-95.275623","-6","1" +"66046","Lawrence","KS","38.932303","-95.22513","-6","1" +"66047","Lawrence","KS","38.920649","-95.31219","-6","1" +"66048","Leavenworth","KS","39.298776","-94.93555","-6","1" +"66049","Lawrence","KS","38.97583","-95.30399","-6","1" +"66050","Lecompton","KS","39.025994","-95.43138","-6","1" +"66051","Olathe","KS","38.899901","-94.831991","-6","1" +"66052","Linwood","KS","39.01201","-95.06283","-6","1" +"66053","Louisburg","KS","38.602219","-94.68121","-6","1" +"66054","McLouth","KS","39.201274","-95.19892","-6","1" +"66056","Mound City","KS","38.141903","-94.82166","-6","1" +"66058","Muscotah","KS","39.548048","-95.52321","-6","1" +"66060","Nortonville","KS","39.415907","-95.32966","-6","1" +"66061","Olathe","KS","38.889784","-94.85558","-6","1" +"66062","Olathe","KS","38.860511","-94.77581","-6","1" +"66063","Olathe","KS","38.899901","-94.831991","-6","1" +"66064","Osawatomie","KS","38.489733","-94.96465","-6","1" +"66066","Oskaloosa","KS","39.214825","-95.32501","-6","1" +"66067","Ottawa","KS","38.614986","-95.27355","-6","1" +"66070","Ozawkie","KS","39.201834","-95.44963","-6","1" +"66071","Paola","KS","38.574804","-94.86706","-6","1" +"66072","Parker","KS","38.328516","-94.98253","-6","1" +"66073","Perry","KS","39.097559","-95.40163","-6","1" +"66075","Pleasanton","KS","38.184882","-94.70142","-6","1" +"66076","Pomona","KS","38.612869","-95.44709","-6","1" +"66077","Potter","KS","39.423964","-95.1287","-6","1" +"66078","Princeton","KS","38.49159","-95.26646","-6","1" +"66079","Rantoul","KS","38.542788","-95.1232","-6","1" +"66080","Richmond","KS","38.398831","-95.2668","-6","1" +"66081","Wolf River","KS","39.773145","-95.233817","-6","1" +"66083","Spring Hill","KS","38.736692","-94.83362","-6","1" +"66085","Stilwell","KS","38.798648","-94.65527","-6","1" +"66086","Tonganoxie","KS","39.112379","-95.08112","-6","1" +"66087","Troy","KS","39.79684","-95.12869","-6","1" +"66088","Valley Falls","KS","39.339975","-95.45781","-6","1" +"66090","Wathena","KS","39.774356","-94.95873","-6","1" +"66091","Welda","KS","38.185196","-95.33705","-6","1" +"66092","Wellsville","KS","38.698415","-95.10414","-6","1" +"66093","Westphalia","KS","38.21086","-95.50973","-6","1" +"66094","White Cloud","KS","39.959033","-95.34005","-6","1" +"66095","Williamsburg","KS","38.455968","-95.44342","-6","1" +"66097","Winchester","KS","39.328743","-95.24608","-6","1" +"66101","Kansas City","KS","39.118054","-94.62568","-6","1" +"66102","Kansas City","KS","39.112204","-94.66643","-6","1" +"66103","Kansas City","KS","39.059254","-94.62453","-6","1" +"66104","Kansas City","KS","39.137003","-94.67203","-6","1" +"66105","Kansas City","KS","39.084954","-94.63125","-6","1" +"66106","Kansas City","KS","39.066732","-94.68872","-6","1" +"66109","Kansas City","KS","39.156275","-94.80033","-6","1" +"66110","Kansas City","KS","39.096551","-94.749538","-6","1" +"66111","Kansas City","KS","39.076554","-94.79019","-6","1" +"66112","Kansas City","KS","39.117009","-94.76614","-6","1" +"66113","Edwardsville","KS","39.073539","-94.723271","-6","1" +"66115","Kansas City","KS","39.141419","-94.61878","-6","1" +"66117","Kansas City","KS","39.096551","-94.749538","-6","1" +"66118","Kansas City","KS","39.105854","-94.61329","-6","1" +"66119","Kansas City","KS","39.096551","-94.749538","-6","1" +"66145","Centralia","KS","39.718697","-96.129009","-6","1" +"66151","Morrill","KS","39.914389","-95.734523","-6","1" +"66160","Kansas City","KS","39.096551","-94.749538","-6","1" +"66201","Shawnee Mission","KS","39.007755","-94.679486","-6","1" +"66202","Shawnee Mission","KS","39.023105","-94.66658","-6","1" +"66203","Shawnee Mission","KS","39.020405","-94.70583","-6","1" +"66204","Shawnee Mission","KS","38.992255","-94.67528","-6","1" +"66205","Shawnee Mission","KS","39.030172","-94.63097","-6","1" +"66206","Shawnee Mission","KS","38.959256","-94.62223","-6","1" +"66207","Shawnee Mission","KS","38.957396","-94.64691","-6","1" +"66208","Shawnee Mission","KS","38.999505","-94.63102","-6","1" +"66209","Shawnee Mission","KS","38.900535","-94.63248","-6","1" +"66210","Shawnee Mission","KS","38.924739","-94.70473","-6","1" +"66211","Shawnee Mission","KS","38.925159","-94.64136","-6","1" +"66212","Shawnee Mission","KS","38.959606","-94.68189","-6","1" +"66213","Shawnee Mission","KS","38.899634","-94.70758","-6","1" +"66214","Shawnee Mission","KS","38.961756","-94.71498","-6","1" +"66215","Shawnee Mission","KS","38.961006","-94.74145","-6","1" +"66216","Shawnee Mission","KS","39.009485","-94.73924","-6","1" +"66217","Shawnee Mission","KS","39.021629","-94.78107","-6","1" +"66218","Shawnee Mission","KS","39.011673","-94.8126","-6","1" +"66219","Shawnee Mission","KS","38.963798","-94.77155","-6","1" +"66220","Shawnee Mission","KS","38.964728","-94.82117","-6","1" +"66221","Shawnee Mission","KS","38.865825","-94.71231","-6","1" +"66222","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66223","Shawnee Mission","KS","38.860552","-94.66594","-6","1" +"66224","Shawnee Mission","KS","38.862007","-94.62127","-6","1" +"66225","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66226","Shawnee Mission","KS","39.029641","-94.84844","-6","1" +"66227","Shawnee Mission","KS","38.972197","-94.86987","-6","1" +"66250","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66251","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66276","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66279","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66282","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66283","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66285","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66286","Shawnee Mission","KS","38.899901","-94.831991","-6","1" +"66352","Robinson","KS","39.814081","-95.409339","-6","1" +"66356","Lincoln","KS","37.57189","-94.654599","-6","1" +"66401","Alma","KS","38.990708","-96.29473","-6","1" +"66402","Auburn","KS","38.918102","-95.84417","-6","1" +"66403","Axtell","KS","39.877691","-96.26985","-6","1" +"66404","Baileyville","KS","39.891751","-96.17343","-6","1" +"66406","Beattie","KS","39.877735","-96.41726","-6","1" +"66407","Belvue","KS","39.207942","-96.18665","-6","1" +"66408","Bern","KS","39.949989","-95.96831","-6","1" +"66409","Berryton","KS","38.935058","-95.55745","-6","1" +"66411","Blue Rapids","KS","39.656045","-96.63791","-6","1" +"66412","Bremen","KS","39.921671","-96.77794","-6","1" +"66413","Burlingame","KS","38.767905","-95.88076","-6","1" +"66414","Carbondale","KS","38.82517","-95.68963","-6","1" +"66415","Centralia","KS","39.697296","-96.14204","-6","1" +"66416","Circleville","KS","39.516144","-95.85396","-6","1" +"66417","Corning","KS","39.655741","-96.03394","-6","1" +"66418","Delia","KS","39.267478","-95.94736","-6","1" +"66419","Denison","KS","39.377827","-95.60496","-6","1" +"66420","Dover","KS","38.964532","-95.917186","-6","1" +"66422","Emmett","KS","39.317301","-96.06113","-6","1" +"66423","Eskridge","KS","38.8421","-96.12775","-6","1" +"66424","Everest","KS","39.681813","-95.41505","-6","1" +"66425","Fairview","KS","39.811818","-95.72861","-6","1" +"66426","Fostoria","KS","39.43982","-96.506769","-6","1" +"66427","Frankfort","KS","39.689409","-96.43876","-6","1" +"66428","Goff","KS","39.671207","-95.92512","-6","1" +"66429","Grantville","KS","39.094823","-95.54874","-6","1" +"66431","Harveyville","KS","38.810071","-95.98397","-6","1" +"66432","Havensville","KS","39.496479","-96.07717","-6","1" +"66434","Hiawatha","KS","39.857155","-95.54497","-6","1" +"66436","Holton","KS","39.466971","-95.7132","-6","1" +"66438","Home","KS","39.853477","-96.50361","-6","1" +"66439","Horton","KS","39.659471","-95.53567","-6","1" +"66440","Hoyt","KS","39.254902","-95.69171","-6","1" +"66441","Junction City","KS","39.01585","-96.83653","-6","1" +"66442","Fort Riley","KS","39.074628","-96.80662","-6","1" +"66449","Leonardville","KS","39.383205","-96.85876","-6","1" +"66450","Louisville","KS","39.251831","-96.31402","-6","1" +"66451","Lyndon","KS","38.602873","-95.67363","-6","1" +"66481","Weir","KS","37.302792","-94.77251","-6","1" +"66501","McFarland","KS","39.053241","-96.23893","-6","1" +"66502","Manhattan","KS","39.184986","-96.56932","-6","1" +"66503","Manhattan","KS","39.241083","-96.64914","-6","1" +"66505","Manhattan","KS","39.304937","-96.675295","-6","1" +"66506","Manhattan","KS","39.194065","-96.57872","-6","1" +"66507","Maple Hill","KS","39.076048","-96.0343","-6","1" +"66508","Marysville","KS","39.852696","-96.63963","-6","1" +"66509","Mayetta","KS","39.337531","-95.75535","-6","1" +"66510","Melvern","KS","38.503219","-95.63079","-6","1" +"66512","Meriden","KS","39.201628","-95.55387","-6","1" +"66514","Milford","KS","39.149612","-96.90611","-6","1" +"66515","Morrill","KS","39.936121","-95.70325","-6","1" +"66516","Netawaka","KS","39.626301","-95.72954","-6","1" +"66517","Ogden","KS","39.113103","-96.70935","-6","1" +"66518","Oketo","KS","39.964921","-96.57004","-6","1" +"66520","Olsburg","KS","39.417531","-96.59975","-6","1" +"66521","Onaga","KS","39.483435","-96.21101","-6","1" +"66522","Oneida","KS","39.865907","-95.9413","-6","1" +"66523","Osage City","KS","38.611619","-95.83132","-6","1" +"66524","Overbrook","KS","38.775185","-95.52869","-6","1" +"66526","Paxico","KS","39.06583","-96.15801","-6","1" +"66527","Powhattan","KS","39.747135","-95.68096","-6","1" +"66528","Quenemo","KS","38.60969","-95.54333","-6","1" +"66531","Riley","KS","39.303014","-96.84635","-6","1" +"66532","Robinson","KS","39.8202","-95.36776","-6","1" +"66533","Rossville","KS","39.143168","-95.95263","-6","1" +"66534","Sabetha","KS","39.889544","-95.82289","-6","1" +"66535","Saint George","KS","39.21939","-96.43346","-6","1" +"66536","Saint Marys","KS","39.200733","-96.07148","-6","1" +"66537","Scranton","KS","38.771467","-95.72799","-6","1" +"66538","Seneca","KS","39.840496","-96.04833","-6","1" +"66539","Silver Lake","KS","39.136616","-95.85898","-6","1" +"66540","Soldier","KS","39.502211","-95.97495","-6","1" +"66541","Summerfield","KS","39.977047","-96.3636","-6","1" +"66542","Tecumseh","KS","39.020437","-95.55336","-6","1" +"66543","Vassar","KS","38.647459","-95.61031","-6","1" +"66544","Vermillion","KS","39.694315","-96.28476","-6","1" +"66546","Wakarusa","KS","38.895185","-95.71995","-6","1" +"66547","Wamego","KS","39.220965","-96.31279","-6","1" +"66548","Waterville","KS","39.691428","-96.76189","-6","1" +"66549","Westmoreland","KS","39.427973","-96.4027","-6","1" +"66550","Wetmore","KS","39.654548","-95.81925","-6","1" +"66551","Wheaton","KS","39.471738","-96.257561","-6","1" +"66552","Whiting","KS","39.585484","-95.6202","-6","1" +"66554","Randolph","KS","39.472188","-96.76806","-6","1" +"66555","Marysville","KS","39.783753","-96.522806","-6","1" +"66601","Topeka","KS","38.988075","-95.780662","-6","1" +"66603","Topeka","KS","39.0562","-95.67547","-6","1" +"66604","Topeka","KS","39.04045","-95.71698","-6","1" +"66605","Topeka","KS","39.013988","-95.65056","-6","1" +"66606","Topeka","KS","39.058177","-95.71088","-6","1" +"66607","Topeka","KS","39.044056","-95.64804","-6","1" +"66608","Topeka","KS","39.077066","-95.66824","-6","1" +"66609","Topeka","KS","38.988508","-95.66869","-6","1" +"66610","Topeka","KS","38.981849","-95.79016","-6","1" +"66611","Topeka","KS","39.0161","-95.6979","-6","1" +"66612","Topeka","KS","39.040333","-95.68048","-6","1" +"66614","Topeka","KS","39.015374","-95.76057","-6","1" +"66615","Topeka","KS","39.067174","-95.88115","-6","1" +"66616","Topeka","KS","39.065249","-95.63808","-6","1" +"66617","Topeka","KS","39.130354","-95.63373","-6","1" +"66618","Topeka","KS","39.126429","-95.73302","-6","1" +"66619","Topeka","KS","38.946977","-95.6938","-6","1" +"66620","Topeka","KS","39.042939","-95.769657","-6","1" +"66621","Topeka","KS","39.042939","-95.769657","-6","1" +"66622","Topeka","KS","39.042939","-95.769657","-6","1" +"66624","Topeka","KS","39.042939","-95.769657","-6","1" +"66625","Topeka","KS","39.042939","-95.769657","-6","1" +"66626","Topeka","KS","39.042939","-95.769657","-6","1" +"66628","Topeka","KS","39.042939","-95.769657","-6","1" +"66629","Topeka","KS","39.042939","-95.769657","-6","1" +"66634","Topeka","KS","39.042939","-95.769657","-6","1" +"66635","St. George","KS","39.199103","-96.43889","-6","1" +"66636","Topeka","KS","39.042939","-95.769657","-6","1" +"66637","Topeka","KS","39.042939","-95.769657","-6","1" +"66638","Topeka","KS","39.042939","-95.769657","-6","1" +"66642","Topeka","KS","39.042939","-95.769657","-6","1" +"66647","Topeka","KS","39.042939","-95.769657","-6","1" +"66650","Powhattan","KS","39.672989","-95.788948","-6","1" +"66652","Topeka","KS","39.042939","-95.769657","-6","1" +"66653","Topeka","KS","39.042939","-95.769657","-6","1" +"66658","Topeka","KS","39.042939","-95.769657","-6","1" +"66667","Topeka","KS","39.042939","-95.769657","-6","1" +"66675","Topeka","KS","39.042939","-95.769657","-6","1" +"66683","Topeka","KS","39.042939","-95.769657","-6","1" +"66686","Topeka","KS","39.042939","-95.769657","-6","1" +"66692","Topeka","KS","39.042939","-95.769657","-6","1" +"66699","Topeka","KS","39.042939","-95.769657","-6","1" +"66701","Fort Scott","KS","37.823295","-94.73389","-6","1" +"66710","Altoona","KS","37.551596","-95.65671","-6","1" +"66711","Arcadia","KS","37.644301","-94.64895","-6","1" +"66712","Arma","KS","37.547763","-94.70622","-6","1" +"66713","Baxter Springs","KS","37.026091","-94.74929","-6","1" +"66714","Benedict","KS","37.628076","-95.73245","-6","1" +"66716","Bronson","KS","37.916575","-95.07063","-6","1" +"66717","Buffalo","KS","37.705016","-95.69832","-6","1" +"66720","Chanute","KS","37.666078","-95.45681","-6","1" +"66721","Lincoln","KS","37.59292","-94.729782","-6","1" +"66724","Cherokee","KS","37.347065","-94.82665","-6","1" +"66725","Columbus","KS","37.17473","-94.87713","-6","1" +"66727","Coyville","KS","37.559151","-95.743835","-6","1" +"66728","Crestline","KS","37.16944","-94.704133","-6","1" +"66732","Elsmore","KS","37.799021","-95.18806","-6","1" +"66733","Erie","KS","37.594166","-95.24755","-6","1" +"66734","Farlington","KS","37.616393","-94.82712","-6","1" +"66735","Franklin","KS","37.522439","-94.70402","-6","1" +"66736","Fredonia","KS","37.539672","-95.84307","-6","1" +"66738","Fulton","KS","38.01707","-94.71256","-6","1" +"66739","Galena","KS","37.091398","-94.65462","-6","1" +"66740","Galesburg","KS","37.464733","-95.37039","-6","1" +"66741","Arcadia","KS","37.726754","-94.65864","-6","1" +"66742","Gas","KS","37.923162","-95.346697","-6","1" +"66743","Girard","KS","37.506616","-94.86078","-6","1" +"66746","Hepler","KS","37.66749","-94.95144","-6","1" +"66747","Neodesha","KS","37.424622","-95.681454","-6","1" +"66748","Humboldt","KS","37.802718","-95.43452","-6","1" +"66749","Iola","KS","37.926666","-95.39695","-6","1" +"66751","La Harpe","KS","37.918044","-95.2947","-6","1" +"66752","Ross","KS","37.332679","-94.977587","-6","1" +"66753","McCune","KS","37.364275","-95.00432","-6","1" +"66754","Mapleton","KS","38.017205","-94.8929","-6","1" +"66755","Moran","KS","37.933658","-95.16768","-6","1" +"66756","Mulberry","KS","37.554735","-94.63283","-6","1" +"66757","Neodesha","KS","37.420016","-95.683","-6","1" +"66758","Neosho Falls","KS","38.005429","-95.56976","-6","1" +"66759","New Albany","KS","37.568611","-95.93926","-6","1" +"66760","Opolis","KS","37.344142","-94.62156","-6","1" +"66761","Piqua","KS","37.900385","-95.56255","-6","1" +"66762","Pittsburg","KS","37.408511","-94.70414","-6","1" +"66763","Frontenac","KS","37.455819","-94.69088","-6","1" +"66767","Prescott","KS","38.066976","-94.69495","-6","1" +"66769","Redfield","KS","37.840828","-94.89202","-6","1" +"66770","Riverton","KS","37.074648","-94.71538","-6","1" +"66771","Saint Paul","KS","37.500157","-95.15952","-6","1" +"66772","Savonburg","KS","37.75459","-95.18816","-6","1" +"66773","Scammon","KS","37.27522","-94.82738","-6","1" +"66775","Stark","KS","37.691117","-95.14826","-6","1" +"66776","Thayer","KS","37.478331","-95.48417","-6","1" +"66777","Toronto","KS","37.777886","-95.93877","-6","1" +"66778","Treece","KS","37.000262","-94.84372","-6","1" +"66779","Uniontown","KS","37.848943","-94.97218","-6","1" +"66780","Walnut","KS","37.603419","-95.06279","-6","1" +"66781","Weir","KS","37.300262","-94.75259","-6","1" +"66782","West Mineral","KS","37.284559","-94.92613","-6","1" +"66783","Yates Center","KS","37.873778","-95.7313","-6","1" +"66801","Emporia","KS","38.410549","-96.19736","-6","1" +"66804","Bern","KS","39.964236","-95.972744","-6","1" +"66830","Admire","KS","38.614057","-96.08821","-6","1" +"66833","Allen","KS","38.672825","-96.16385","-6","1" +"66834","Alta Vista","KS","38.862376","-96.47367","-6","1" +"66835","Americus","KS","38.513771","-96.25853","-6","1" +"66838","Burdick","KS","38.536957","-96.78484","-6","1" +"66839","Burlington","KS","38.211108","-95.74293","-6","1" +"66840","Burns","KS","38.064497","-96.89128","-6","1" +"66842","Cassoday","KS","38.018802","-96.66349","-6","1" +"66843","Cedar Point","KS","38.224172","-96.77229","-6","1" +"66845","Cottonwood Falls","KS","38.344157","-96.52969","-6","1" +"66846","Council Grove","KS","38.649811","-96.49331","-6","1" +"66849","Dwight","KS","38.877563","-96.58981","-6","1" +"66850","Elmdale","KS","38.395027","-96.69377","-6","1" +"66851","Florence","KS","38.228452","-96.92825","-6","1" +"66852","Gridley","KS","38.078496","-95.89505","-6","1" +"66853","Hamilton","KS","38.000062","-96.21271","-6","1" +"66854","Hartford","KS","38.281776","-95.9686","-6","1" +"66855","Lamont","KS","37.888276","-96.242059","-6","1" +"66856","Lebo","KS","38.427161","-95.82627","-6","1" +"66857","Le Roy","KS","38.095388","-95.63461","-6","1" +"66858","Lincolnville","KS","38.473549","-96.95611","-6","1" +"66859","Lost Springs","KS","38.556941","-96.96494","-6","1" +"66860","Madison","KS","38.126728","-96.16635","-6","1" +"66861","Marion","KS","38.359189","-97.01768","-6","1" +"66862","Matfield Green","KS","38.14969","-96.51545","-6","1" +"66863","Neal","KS","37.831349","-96.07111","-6","1" +"66864","Neosho Rapids","KS","38.368683","-95.98917","-6","1" +"66865","Olpe","KS","38.241502","-96.20048","-6","1" +"66866","Peabody","KS","38.175115","-97.1049","-6","1" +"66868","Reading","KS","38.532132","-95.97685","-6","1" +"66869","Strong City","KS","38.415712","-96.50104","-6","1" +"66870","Virgil","KS","37.925128","-96.00967","-6","1" +"66871","Waverly","KS","38.382581","-95.62641","-6","1" +"66872","White City","KS","38.79144","-96.73809","-6","1" +"66873","Wilsey","KS","38.682093","-96.663865","-6","1" +"66901","Concordia","KS","39.568803","-97.64627","-6","1" +"66930","Agenda","KS","39.718857","-97.49191","-6","1" +"66932","Athol","KS","39.761524","-98.92213","-6","1" +"66933","Barnes","KS","39.675346","-96.87232","-6","1" +"66935","Belleville","KS","39.824657","-97.62881","-6","1" +"66936","Burr Oak","KS","39.908065","-98.29451","-6","1" +"66937","Clifton","KS","39.594163","-97.26295","-6","1" +"66938","Clyde","KS","39.594485","-97.40544","-6","1" +"66939","Courtland","KS","39.837438","-97.90386","-6","1" +"66940","Cuba","KS","39.81884","-97.44917","-6","1" +"66941","Esbon","KS","39.827165","-98.44356","-6","1" +"66942","Formoso","KS","39.791338","-97.9986","-6","1" +"66943","Greenleaf","KS","39.688224","-96.96583","-6","1" +"66944","Haddam","KS","39.841886","-97.30119","-6","1" +"66945","Hanover","KS","39.888945","-96.88156","-6","1" +"66946","Hollenberg","KS","39.968115","-96.98906","-6","1" +"66948","Jamestown","KS","39.609023","-97.84511","-6","1" +"66949","Jewell","KS","39.652106","-98.18519","-6","1" +"66951","Kensington","KS","39.792636","-99.03877","-6","1" +"66952","Lebanon","KS","39.835476","-98.58668","-6","1" +"66953","Linn","KS","39.689909","-97.10565","-6","1" +"66955","Mahaska","KS","39.966106","-97.3249","-6","1" +"66956","Mankato","KS","39.790935","-98.20722","-6","1" +"66958","Morrowville","KS","39.883769","-97.16491","-6","1" +"66959","Munden","KS","39.933522","-97.53242","-6","1" +"66960","Narka","KS","39.934395","-97.42125","-6","1" +"66961","Norway","KS","39.827894","-97.650902","-6","1" +"66962","Palmer","KS","39.618962","-97.13434","-6","1" +"66963","Randall","KS","39.633913","-98.02957","-6","1" +"66964","Republic","KS","39.931181","-97.81023","-6","1" +"66966","Scandia","KS","39.776903","-97.76394","-6","1" +"66967","Smith Center","KS","39.794538","-98.79561","-6","1" +"66968","Washington","KS","39.815522","-97.06111","-6","1" +"66969","Scandia","KS","39.798339","-97.783181","-6","1" +"66970","Webber","KS","39.936773","-98.04227","-6","1" +"66998","Buffalo","KS","39.588426","-97.788817","-6","1" +"67001","Andale","KS","37.779021","-97.62602","-6","1" +"67002","Andover","KS","37.693585","-97.11321","-6","1" +"67003","Anthony","KS","37.144088","-98.03857","-6","1" +"67004","Argonia","KS","37.270346","-97.76478","-6","1" +"67005","Arkansas City","KS","37.067387","-97.02831","-6","1" +"67008","Atlanta","KS","37.454925","-96.83152","-6","1" +"67009","Attica","KS","37.233697","-98.24779","-6","1" +"67010","Augusta","KS","37.68066","-96.98153","-6","1" +"67012","Beaumont","KS","37.660135","-96.53372","-6","1" +"67013","Belle Plaine","KS","37.390809","-97.29152","-6","1" +"67016","Bentley","KS","37.886437","-97.51828","-6","1" +"67017","Benton","KS","37.818158","-97.10839","-6","1" +"67018","Bluff City","KS","37.076529","-97.87011","-6","1" +"67019","Burden","KS","37.314208","-96.78463","-6","1" +"67020","Burrton","KS","38.008128","-97.67008","-6","1" +"67021","Byers","KS","37.784193","-98.89486","-6","1" +"67022","Caldwell","KS","37.062453","-97.60782","-6","1" +"67023","Cambridge","KS","37.327404","-96.65629","-6","1" +"67024","Cedar Vale","KS","37.104057","-96.48447","-6","1" +"67025","Cheney","KS","37.647611","-97.78765","-6","1" +"67026","Clearwater","KS","37.518342","-97.49452","-6","1" +"67028","Coats","KS","37.469499","-98.93543","-6","1" +"67029","Coldwater","KS","37.259332","-99.33385","-6","1" +"67030","Colwich","KS","37.787206","-97.54135","-6","1" +"67031","Conway Springs","KS","37.400431","-97.65338","-6","1" +"67033","Richland","KS","37.519257","-97.152533","-6","1" +"67035","Cunningham","KS","37.655003","-98.39643","-6","1" +"67036","Danville","KS","37.298982","-97.87357","-6","1" +"67037","Derby","KS","37.557434","-97.25167","-6","1" +"67038","Dexter","KS","37.150816","-96.7426","-6","1" +"67039","Douglass","KS","37.513371","-96.99851","-6","1" +"67041","Elbing","KS","38.054115","-97.12711","-6","1" +"67042","El Dorado","KS","37.830417","-96.84294","-6","1" +"67045","Eureka","KS","37.854192","-96.32433","-6","1" +"67047","Fall River","KS","37.64248","-96.07105","-6","1" +"67049","Freeport","KS","37.173305","-97.84835","-6","1" +"67050","Garden Plain","KS","37.663743","-97.68539","-6","1" +"67051","Geuda Springs","KS","37.104798","-97.19239","-6","1" +"67052","Goddard","KS","37.651845","-97.5739","-6","1" +"67053","Goessel","KS","38.246972","-97.34817","-6","1" +"67054","Greensburg","KS","37.590146","-99.29989","-6","1" +"67055","Greenwich","KS","37.78335","-97.205419","-6","1" +"67056","Halstead","KS","38.007112","-97.5139","-6","1" +"67057","Hardtner","KS","37.041728","-98.67631","-6","1" +"67058","Harper","KS","37.297898","-98.03916","-6","1" +"67059","Haviland","KS","37.658761","-99.09672","-6","1" +"67060","Haysville","KS","37.552425","-97.34785","-6","1" +"67061","Hazelton","KS","37.088979","-98.37544","-6","1" +"67062","Hesston","KS","38.142541","-97.43368","-6","1" +"67063","Hillsboro","KS","38.347058","-97.21489","-6","1" +"67065","Isabel","KS","37.461079","-98.54262","-6","1" +"67066","Iuka","KS","37.746879","-98.75308","-6","1" +"67067","Kechi","KS","37.795395","-97.27309","-6","1" +"67068","Kingman","KS","37.618339","-98.10612","-6","1" +"67069","Ninnescah","KS","37.5731","-98.23619","-6","1" +"67070","Kiowa","KS","37.037218","-98.49342","-6","1" +"67071","Lake City","KS","37.316336","-98.83859","-6","1" +"67072","Latham","KS","37.561112","-96.59795","-6","1" +"67073","Lehigh","KS","38.376681","-97.31611","-6","1" +"67074","Leon","KS","37.686034","-96.7069","-6","1" +"67101","Maize","KS","37.775593","-97.46797","-6","1" +"67102","Maple City","KS","37.043519","-96.75924","-6","1" +"67103","Mayfield","KS","37.26475","-97.55569","-6","1" +"67104","Medicine Lodge","KS","37.286936","-98.60271","-6","1" +"67105","Milan","KS","37.251663","-97.66554","-6","1" +"67106","Milton","KS","37.447829","-97.75943","-6","1" +"67107","Moundridge","KS","38.193313","-97.52827","-6","1" +"67108","Mount Hope","KS","37.831684","-97.67462","-6","1" +"67109","Mullinville","KS","37.581777","-99.47608","-6","1" +"67110","Mulvane","KS","37.474542","-97.22812","-6","1" +"67111","Murdock","KS","37.625625","-97.92699","-6","1" +"67112","Nashville","KS","37.442074","-98.41625","-6","1" +"67114","Newton","KS","38.051679","-97.323","-6","1" +"67117","North Newton","KS","38.073865","-97.34635","-6","1" +"67118","Norwich","KS","37.460764","-97.85182","-6","1" +"67119","Oxford","KS","37.253486","-97.18161","-6","1" +"67120","Peck","KS","37.459433","-97.3804","-6","1" +"67122","Piedmont","KS","37.629754","-96.40529","-6","1" +"67123","Potwin","KS","37.946174","-97.01423","-6","1" +"67124","Pratt","KS","37.642738","-98.75394","-6","1" +"67127","Protection","KS","37.196316","-99.50499","-6","1" +"67128","Rago","KS","37.436662","-98.03131","-6","1" +"67131","Rock","KS","37.42198","-97.00329","-6","1" +"67132","Rosalia","KS","37.813869","-96.57856","-6","1" +"67133","Rose Hill","KS","37.573226","-97.12421","-6","1" +"67134","Sawyer","KS","37.494728","-98.68324","-6","1" +"67135","Sedgwick","KS","37.921185","-97.44004","-6","1" +"67137","Severy","KS","37.647292","-96.22324","-6","1" +"67138","Sharon","KS","37.253964","-98.41429","-6","1" +"67140","South Haven","KS","37.065497","-97.36562","-6","1" +"67142","Spivey","KS","37.468889","-98.21584","-6","1" +"67143","Sun City","KS","37.363445","-98.96044","-6","1" +"67144","Towanda","KS","37.804776","-97.01477","-6","1" +"67146","Udall","KS","37.395382","-97.10432","-6","1" +"67147","Valley Center","KS","37.853935","-97.33059","-6","1" +"67149","Viola","KS","37.538257","-97.62031","-6","1" +"67150","Waldron","KS","37.026317","-98.20814","-6","1" +"67151","Walton","KS","38.13467","-97.25509","-6","1" +"67152","Wellington","KS","37.268972","-97.41247","-6","1" +"67154","Whitewater","KS","37.963712","-97.12193","-6","1" +"67155","Wilmore","KS","37.34323","-99.14364","-6","1" +"67156","Winfield","KS","37.256575","-96.97885","-6","1" +"67159","Zenda","KS","37.422585","-98.30304","-6","1" +"67201","Wichita","KS","37.651974","-97.258997","-6","1" +"67202","Wichita","KS","37.686992","-97.33362","-6","1" +"67203","Wichita","KS","37.703932","-97.36237","-6","1" +"67204","Wichita","KS","37.754443","-97.35763","-6","1" +"67205","Wichita","KS","37.738348","-97.42917","-6","1" +"67206","Wichita","KS","37.703247","-97.23166","-6","1" +"67207","Wichita","KS","37.669803","-97.23289","-6","1" +"67208","Wichita","KS","37.701997","-97.28114","-6","1" +"67209","Wichita","KS","37.67129","-97.4372","-6","1" +"67210","Wichita","KS","37.638946","-97.26652","-6","1" +"67211","Wichita","KS","37.667175","-97.31917","-6","1" +"67212","Wichita","KS","37.700632","-97.4343","-6","1" +"67213","Wichita","KS","37.669067","-97.36204","-6","1" +"67214","Wichita","KS","37.705384","-97.31777","-6","1" +"67215","Wichita","KS","37.626676","-97.42398","-6","1" +"67216","Wichita","KS","37.619858","-97.31751","-6","1" +"67217","Wichita","KS","37.62421","-97.36312","-6","1" +"67218","Wichita","KS","37.670092","-97.27953","-6","1" +"67219","Wichita","KS","37.765919","-97.31997","-6","1" +"67220","Wichita","KS","37.745561","-97.27841","-6","1" +"67221","McConnell A F B","KS","37.628158","-97.26626","-6","1" +"67222","Wichita","KS","37.751267","-97.262371","-6","1" +"67223","Wichita","KS","37.73674","-97.499","-6","1" +"67226","Wichita","KS","37.750904","-97.23115","-6","1" +"67227","Wichita","KS","37.62812","-97.491566","-6","1" +"67228","Wichita","KS","37.774174","-97.171098","-6","1" +"67230","Wichita","KS","37.683392","-97.1706","-6","1" +"67231","Wichita","KS","37.556692","-97.410154","-6","1" +"67232","Wichita","KS","37.639491","-97.171372","-6","1" +"67233","Wichita","KS","37.568951","-97.33449","-6","1" +"67235","Wichita","KS","37.692778","-97.4959","-6","1" +"67236","Wichita","KS","37.542182","-97.287134","-6","1" +"67251","Wichita","KS","37.693588","-97.480419","-6","1" +"67256","Wichita","KS","37.693588","-97.480419","-6","1" +"67257","Wichita","KS","37.693588","-97.480419","-6","1" +"67259","Wichita","KS","37.693588","-97.480419","-6","1" +"67260","Wichita","KS","37.693588","-97.480419","-6","1" +"67275","Wichita","KS","37.693588","-97.480419","-6","1" +"67276","Wichita","KS","37.693588","-97.480419","-6","1" +"67277","Wichita","KS","37.693588","-97.480419","-6","1" +"67278","Wichita","KS","37.693588","-97.480419","-6","1" +"67301","Independence","KS","37.216856","-95.72898","-6","1" +"67330","Altamont","KS","37.180641","-95.30389","-6","1" +"67332","Bartlett","KS","37.051587","-95.2227","-6","1" +"67333","Caney","KS","37.021498","-95.91616","-6","1" +"67334","Chautauqua","KS","37.026172","-96.17845","-6","1" +"67335","Cherryvale","KS","37.278991","-95.54722","-6","1" +"67336","Chetopa","KS","37.047431","-95.08365","-6","1" +"67337","Coffeyville","KS","37.041838","-95.61814","-6","1" +"67339","Howard","KS","37.050156","-95.504561","-6","1" +"67340","Dearing","KS","37.058083","-95.70982","-6","1" +"67341","Dennis","KS","37.347626","-95.41692","-6","1" +"67342","Edna","KS","37.059559","-95.356","-6","1" +"67344","Elk City","KS","37.279439","-95.93171","-6","1" +"67345","Elk Falls","KS","37.37477","-96.19019","-6","1" +"67346","Grenola","KS","37.326384","-96.43368","-6","1" +"67347","Havana","KS","37.103604","-95.9426","-6","1" +"67349","Howard","KS","37.479165","-96.26594","-6","1" +"67351","Liberty","KS","37.135671","-95.58247","-6","1" +"67352","Longton","KS","37.376701","-96.07025","-6","1" +"67353","Moline","KS","37.337559","-96.29965","-6","1" +"67354","Mound Valley","KS","37.200877","-95.41003","-6","1" +"67355","Niotaze","KS","37.053112","-96.01065","-6","1" +"67356","Oswego","KS","37.182538","-95.13678","-6","1" +"67357","Parsons","KS","37.339913","-95.25834","-6","1" +"67360","Peru","KS","37.074399","-96.09053","-6","1" +"67361","Sedan","KS","37.107867","-96.22087","-6","1" +"67363","Sycamore","KS","37.327608","-95.71842","-6","1" +"67364","Tyro","KS","37.035742","-95.82167","-6","1" +"67401","Salina","KS","38.827875","-97.61553","-6","1" +"67402","Salina","KS","38.78359","-97.650446","-6","1" +"67410","Abilene","KS","38.94112","-97.21973","-6","1" +"67411","Fairview","KS","37.872226","-97.005915","-6","1" +"67416","Assaria","KS","38.674468","-97.59811","-6","1" +"67417","Aurora","KS","39.433975","-97.54588","-6","1" +"67418","Barnard","KS","39.18871","-98.04615","-6","1" +"67419","Union","KS","38.362379","-97.944818","-6","1" +"67420","Beloit","KS","39.440546","-98.07736","-6","1" +"67422","Bennington","KS","39.03407","-97.58943","-6","1" +"67423","Beverly","KS","38.980027","-97.97921","-6","1" +"67425","Brookville","KS","38.813761","-97.9286","-6","1" +"67427","Bushton","KS","38.50978","-98.39638","-6","1" +"67428","Canton","KS","38.369576","-97.41789","-6","1" +"67430","Cawker City","KS","39.520894","-98.43768","-6","1" +"67431","Chapman","KS","38.959448","-97.01425","-6","1" +"67432","Clay Center","KS","39.341513","-97.1552","-6","1" +"67435","Sedan","KS","37.125692","-96.190914","-6","1" +"67436","Delphos","KS","39.26795","-97.73798","-6","1" +"67437","Downs","KS","39.50357","-98.55591","-6","1" +"67438","Durham","KS","38.499781","-97.27114","-6","1" +"67439","Ellsworth","KS","38.744056","-98.22729","-6","1" +"67441","Enterprise","KS","38.894257","-97.11391","-6","1" +"67442","Falun","KS","38.660286","-97.75005","-6","1" +"67443","Galva","KS","38.372202","-97.53229","-6","1" +"67444","Geneseo","KS","38.527035","-98.1392","-6","1" +"67445","Glasco","KS","39.367111","-97.82634","-6","1" +"67446","Glen Elder","KS","39.503154","-98.3031","-6","1" +"67447","Green","KS","39.475173","-96.99137","-6","1" +"67448","Gypsum","KS","38.657542","-97.40005","-6","1" +"67449","Herington","KS","38.677306","-96.92129","-6","1" +"67450","Holyrood","KS","38.61616","-98.43104","-6","1" +"67451","Hope","KS","38.689794","-97.12005","-6","1" +"67452","Hunter","KS","39.229204","-98.38455","-6","1" +"67454","Kanopolis","KS","38.703443","-98.13731","-6","1" +"67455","Lincoln","KS","39.034792","-98.17577","-6","1" +"67456","Lindsborg","KS","38.590743","-97.67156","-6","1" +"67457","Little River","KS","38.40198","-98.00626","-6","1" +"67458","Longford","KS","39.171661","-97.30594","-6","1" +"67459","Lorraine","KS","38.57504","-98.33675","-6","1" +"67460","Mcpherson","KS","38.367298","-97.67719","-6","1" +"67464","Marquette","KS","38.590489","-97.89512","-6","1" +"67466","Miltonvale","KS","39.342965","-97.47176","-6","1" +"67467","Minneapolis","KS","39.131275","-97.70794","-6","1" +"67468","Morganville","KS","39.459244","-97.22525","-6","1" +"67470","New Cambria","KS","38.891137","-97.51114","-6","1" +"67472","Chapman","KS","39.248278","-97.410025","-6","1" +"67473","Osborne","KS","39.409385","-98.7059","-6","1" +"67474","Portis","KS","39.579664","-98.70224","-6","1" +"67475","Ramona","KS","38.596837","-97.05274","-6","1" +"67476","Roxbury","KS","38.391722","-97.648402","-6","1" +"67478","Simpson","KS","39.384449","-97.93323","-6","1" +"67479","Smolan","KS","38.702546","-97.642827","-6","1" +"67480","Solomon","KS","38.950725","-97.39924","-6","1" +"67481","Sylvan Grove","KS","39.023406","-98.40165","-6","1" +"67482","Talmage","KS","39.027261","-97.25917","-6","1" +"67483","Tampa","KS","38.538684","-97.15947","-6","1" +"67484","Tescott","KS","38.998387","-97.83261","-6","1" +"67485","Tipton","KS","39.32071","-98.50294","-6","1" +"67487","Wakefield","KS","39.180886","-97.04513","-6","1" +"67488","Durham","KS","39.188023","-97.435986","-6","1" +"67490","Wilson","KS","38.817788","-98.44972","-6","1" +"67491","Windom","KS","38.367098","-97.89977","-6","1" +"67492","Woodbine","KS","38.807138","-96.9568","-6","1" +"67495","Tipton","KS","39.339801","-98.470661","-6","1" +"67501","Hutchinson","KS","38.034292","-97.92382","-6","1" +"67502","Hutchinson","KS","38.094945","-97.929","-6","1" +"67504","Hutchinson","KS","37.953219","-98.085924","-6","1" +"67505","South Hutchinson","KS","38.027185","-97.93976","-6","1" +"67510","Abbyville","KS","37.992099","-98.22479","-6","1" +"67511","Albert","KS","38.442368","-99.04195","-6","1" +"67512","Alden","KS","38.238827","-98.31957","-6","1" +"67513","Alexander","KS","38.446509","-99.53906","-6","1" +"67514","Arlington","KS","37.876541","-98.18757","-6","1" +"67515","Arnold","KS","38.674455","-100.05532","-6","1" +"67516","Bazine","KS","38.400425","-99.68699","-6","1" +"67518","Beeler","KS","38.427837","-100.16811","-6","1" +"67519","Belpre","KS","37.947324","-99.10017","-6","1" +"67520","Bison","KS","38.573848","-99.18943","-6","1" +"67521","Brownell","KS","38.618706","-99.74865","-6","1" +"67522","Buhler","KS","38.122234","-97.74843","-6","1" +"67523","Burdett","KS","38.200452","-99.54314","-6","1" +"67524","Chase","KS","38.360414","-98.37397","-6","1" +"67525","Claflin","KS","38.555566","-98.56309","-6","1" +"67526","Ellinwood","KS","38.347872","-98.56205","-6","1" +"67529","Garfield","KS","38.070818","-99.2477","-6","1" +"67530","Great Bend","KS","38.363151","-98.78495","-6","1" +"67543","Haven","KS","37.898787","-97.79101","-6","1" +"67544","Hoisington","KS","38.562172","-98.76647","-6","1" +"67545","Hudson","KS","38.15141","-98.64732","-6","1" +"67546","Inman","KS","38.224457","-97.80321","-6","1" +"67547","Kinsley","KS","37.918313","-99.43134","-6","1" +"67548","La Crosse","KS","38.560733","-99.3193","-6","1" +"67550","Larned","KS","38.179418","-99.12757","-6","1" +"67552","Lewis","KS","37.876262","-99.23229","-6","1" +"67553","Liebenthal","KS","38.654948","-99.32062","-6","1" +"67554","Lyons","KS","38.356474","-98.2025","-6","1" +"67556","McCracken","KS","38.589291","-99.52231","-6","1" +"67557","Macksville","KS","37.934689","-98.95861","-6","1" +"67559","Nekoma","KS","38.41473","-99.44681","-6","1" +"67560","Ness City","KS","38.443723","-99.92622","-6","1" +"67561","Nickerson","KS","38.137119","-98.08847","-6","1" +"67563","Offerle","KS","37.861674","-99.56069","-6","1" +"67564","Olmitz","KS","38.526757","-98.93228","-6","1" +"67565","Otis","KS","38.587486","-99.04206","-6","1" +"67566","Partridge","KS","37.953609","-98.10291","-6","1" +"67567","Pawnee Rock","KS","38.262021","-98.97856","-6","1" +"67568","Plevna","KS","38.006382","-98.31657","-6","1" +"67570","Pretty Prairie","KS","37.784834","-97.98231","-6","1" +"67572","Ransom","KS","38.660733","-99.90598","-6","1" +"67573","Raymond","KS","38.278487","-98.41672","-6","1" +"67574","Rozel","KS","38.193997","-99.40331","-6","1" +"67575","Rush Center","KS","38.445884","-99.26298","-6","1" +"67576","Saint John","KS","38.014216","-98.79487","-6","1" +"67578","Stafford","KS","37.976752","-98.59126","-6","1" +"67579","Sterling","KS","38.19784","-98.20222","-6","1" +"67581","Sylvia","KS","37.967166","-98.41303","-6","1" +"67583","Turon","KS","37.804591","-98.45617","-6","1" +"67584","Utica","KS","38.669493","-100.19251","-6","1" +"67585","Yoder","KS","37.94119","-97.871147","-6","1" +"67601","Hays","KS","38.881082","-99.32559","-6","1" +"67621","Agra","KS","39.792611","-99.13229","-6","1" +"67622","Almena","KS","39.891365","-99.72471","-6","1" +"67623","Alton","KS","39.461403","-98.95757","-6","1" +"67625","Bogue","KS","39.360896","-99.68559","-6","1" +"67626","Bunker Hill","KS","38.86913","-98.70904","-6","1" +"67627","Catharine","KS","38.927648","-99.216051","-6","1" +"67628","Cedar","KS","39.647706","-98.96837","-6","1" +"67629","Clayton","KS","39.707176","-100.17544","-6","1" +"67630","Belleville","KS","37.097273","-96.100176","-6","1" +"67631","Collyer","KS","39.028141","-100.08722","-6","1" +"67632","Damar","KS","39.336054","-99.60749","-6","1" +"67634","Dorrance","KS","38.834958","-98.60426","-6","1" +"67635","Dresden","KS","39.610945","-100.45129","-6","1" +"67637","Ellis","KS","38.933306","-99.60135","-6","1" +"67638","Gaylord","KS","39.640967","-98.84528","-6","1" +"67639","Glade","KS","39.652794","-99.30712","-6","1" +"67640","Gorham","KS","38.878181","-99.03432","-6","1" +"67642","Hill City","KS","39.360338","-99.8456","-6","1" +"67643","Jennings","KS","39.676204","-100.29331","-6","1" +"67644","Kirwin","KS","39.644576","-99.1437","-6","1" +"67645","Lenora","KS","39.609655","-99.91904","-6","1" +"67646","Logan","KS","39.65573","-99.59094","-6","1" +"67647","Long Island","KS","39.947283","-99.53467","-6","1" +"67648","Lucas","KS","39.059815","-98.55613","-6","1" +"67649","Luray","KS","39.120158","-98.69182","-6","1" +"67650","Morland","KS","39.359896","-100.08518","-6","1" +"67651","Natoma","KS","39.202987","-99.04018","-6","1" +"67653","Norcatur","KS","39.907372","-100.20732","-6","1" +"67654","Norton","KS","39.822766","-99.93288","-6","1" +"67656","Ogallah","KS","38.989828","-99.75144","-6","1" +"67657","Palco","KS","39.22742","-99.61488","-6","1" +"67658","Paradise","KS","39.118835","-98.91517","-6","1" +"67659","Penokee","KS","39.301053","-99.98755","-6","1" +"67660","Pfeifer","KS","38.704467","-99.1815","-6","1" +"67661","Phillipsburg","KS","39.799834","-99.32852","-6","1" +"67663","Plainville","KS","39.212784","-99.31688","-6","1" +"67664","Prairie View","KS","39.823946","-99.56002","-6","1" +"67665","Russell","KS","38.866551","-98.8672","-6","1" +"67666","Towanda","KS","39.684032","-99.598374","-6","1" +"67667","Schoenchen","KS","38.711024","-99.33117","-6","1" +"67669","Stockton","KS","39.436461","-99.32578","-6","1" +"67670","Stuttgart","KS","39.799148","-99.45494","-6","1" +"67671","Victoria","KS","38.861194","-99.15047","-6","1" +"67672","Wa Keeney","KS","39.015522","-99.89944","-6","1" +"67673","Waldo","KS","39.166845","-98.79762","-6","1" +"67674","Walker","KS","38.868064","-99.07886","-6","1" +"67675","Woodston","KS","39.450984","-99.09119","-6","1" +"67701","Colby","KS","39.394701","-101.04485","-6","1" +"67730","Atwood","KS","39.810204","-101.1109","-6","1" +"67731","Bird City","KS","39.758864","-101.54448","-6","1" +"67732","Brewster","KS","39.424782","-101.3533","-6","1" +"67733","Edson","KS","39.356075","-101.51227","-7","1" +"67734","Gem","KS","39.488765","-100.89755","-6","1" +"67735","Goodland","KS","39.332837","-101.75422","-7","1" +"67736","Gove","KS","38.882722","-100.46085","-6","1" +"67737","Grainfield","KS","39.117535","-100.47735","-6","1" +"67738","Grinnell","KS","39.042757","-100.64563","-6","1" +"67739","Herndon","KS","39.893743","-100.78687","-6","1" +"67740","Hoxie","KS","39.356622","-100.3861","-6","1" +"67741","Kanorado","KS","39.358034","-102.00483","-7","1" +"67743","Levant","KS","39.406853","-101.23341","-6","1" +"67744","Ludell","KS","39.857038","-100.93866","-6","1" +"67745","McDonald","KS","39.792736","-101.36332","-6","1" +"67747","Monument","KS","39.071265","-101.04488","-6","1" +"67748","Oakley","KS","39.11329","-100.83926","-6","1" +"67749","Oberlin","KS","39.832075","-100.53872","-6","1" +"67751","Park","KS","39.116982","-100.35656","-6","1" +"67752","Quinter","KS","39.038252","-100.2322","-6","1" +"67753","Rexford","KS","39.40544","-100.74875","-6","1" +"67756","Saint Francis","KS","39.773872","-101.82167","-6","1" +"67757","Selden","KS","39.534756","-100.59954","-6","1" +"67758","Sharon Springs","KS","38.865428","-101.73575","-7","1" +"67761","Wallace","KS","38.912898","-101.50937","-7","1" +"67762","Weskan","KS","38.930464","-101.99084","-7","1" +"67764","Winona","KS","38.942421","-101.20603","-6","1" +"67801","Dodge City","KS","37.755267","-100.02632","-6","1" +"67831","Ashland","KS","37.196075","-99.77662","-6","1" +"67834","Bucklin","KS","37.523175","-99.63435","-6","1" +"67835","Cimarron","KS","37.84899","-100.32811","-6","1" +"67836","Coolidge","KS","38.043992","-102.00832","-7","1" +"67837","Copeland","KS","37.554849","-100.67514","-6","1" +"67838","Deerfield","KS","38.039676","-101.12571","-6","1" +"67839","Dighton","KS","38.514924","-100.43776","-6","1" +"67840","Englewood","KS","37.040749","-99.98903","-6","1" +"67841","Ensign","KS","37.629346","-100.22704","-6","1" +"67842","Ford","KS","37.549041","-99.74869","-6","1" +"67844","Fowler","KS","37.401983","-100.2073","-6","1" +"67845","Bloom","KS","39.296417","-98.524566","-6","1" +"67846","Garden City","KS","37.976008","-100.82503","-6","1" +"67849","Hanston","KS","38.134219","-99.73853","-6","1" +"67850","Healy","KS","38.591591","-100.62302","-6","1" +"67851","Holcomb","KS","38.089121","-101.01535","-6","1" +"67852","Holcomb","KS","37.989353","-100.993268","-6","1" +"67853","Ingalls","KS","37.842421","-100.49796","-6","1" +"67854","Jetmore","KS","38.080626","-99.96701","-6","1" +"67855","Johnson","KS","37.557733","-101.68074","-6","1" +"67856","Garfield","KS","38.140691","-100.415419","-6","1" +"67857","Kendall","KS","37.974098","-101.5325","-6","1" +"67858","Sodville","KS","37.513348","-99.692418","-6","1" +"67859","Kismet","KS","37.23521","-100.75208","-6","1" +"67860","Lakin","KS","37.995238","-101.2722","-6","1" +"67861","Leoti","KS","38.503037","-101.39536","-6","1" +"67862","Manter","KS","37.585473","-101.91157","-6","1" +"67863","Marienthal","KS","38.551037","-101.22087","-6","1" +"67864","Meade","KS","37.21313","-100.34464","-6","1" +"67865","Minneola","KS","37.394383","-99.96723","-6","1" +"67867","Montezuma","KS","37.586422","-100.46228","-6","1" +"67868","Pierceville","KS","37.881899","-100.67849","-6","1" +"67869","Plains","KS","37.257151","-100.58189","-6","1" +"67870","Satanta","KS","37.496762","-101.00775","-6","1" +"67871","Scott City","KS","38.48461","-100.93476","-6","1" +"67876","Spearville","KS","37.845029","-99.72578","-6","1" +"67877","Sublette","KS","37.525821","-100.84391","-6","1" +"67878","Syracuse","KS","38.022874","-101.80781","-7","1" +"67879","Tribune","KS","38.478369","-101.7871","-7","1" +"67880","Ulysses","KS","37.569601","-101.33268","-6","1" +"67882","Wright","KS","37.805301","-99.88021","-6","1" +"67901","Liberal","KS","37.067979","-100.92813","-6","1" +"67905","Liberal","KS","37.021641","-100.938049","-6","1" +"67938","Colfax","KS","39.43042","-97.462993","-6","1" +"67950","Elkhart","KS","37.011254","-101.88893","-6","1" +"67951","Hugoton","KS","37.185269","-101.349","-6","1" +"67952","Moscow","KS","37.30755","-101.18541","-6","1" +"67953","Richfield","KS","37.23606","-101.83681","-6","1" +"67954","Rolla","KS","37.163412","-101.61909","-6","1" +"68001","Abie","NE","41.334744","-96.94965","-6","1" +"68002","Arlington","NE","41.47502","-96.34446","-6","1" +"68003","Ashland","NE","41.068476","-96.38189","-6","1" +"68004","Bancroft","NE","42.009508","-96.62313","-6","1" +"68005","Bellevue","NE","41.146848","-95.90796","-6","1" +"68007","Bennington","NE","41.36753","-96.17269","-6","1" +"68008","Blair","NE","41.538439","-96.14965","-6","1" +"68009","Blair","NE","41.53827","-96.182295","-6","1" +"68010","Boys Town","NE","41.25973","-96.12833","-6","1" +"68014","Bruno","NE","41.28216","-96.9594","-6","1" +"68015","Cedar Bluffs","NE","41.386373","-96.64986","-6","1" +"68016","Cedar Creek","NE","41.03664","-96.10884","-6","1" +"68017","Ceresco","NE","41.064961","-96.64953","-6","1" +"68018","Colon","NE","41.309443","-96.61679","-6","1" +"68019","Craig","NE","41.761217","-96.37407","-6","1" +"68020","Decatur","NE","41.988034","-96.26545","-6","1" +"68022","Elkhorn","NE","41.274881","-96.24565","-6","1" +"68023","Fort Calhoun","NE","41.463418","-96.02777","-6","1" +"68025","Fremont","NE","41.434796","-96.48869","-6","1" +"68026","Fremont","NE","41.567907","-96.617443","-6","1" +"68028","Gretna","NE","41.118694","-96.25535","-6","1" +"68029","Herman","NE","41.665663","-96.25866","-6","1" +"68030","Homer","NE","42.326727","-96.48475","-6","1" +"68031","Hooper","NE","41.62307","-96.55172","-6","1" +"68032","Linwood","NE","41.344868","-96.964345","-6","1" +"68033","Ithaca","NE","41.134234","-96.5315","-6","1" +"68034","Kennard","NE","41.465023","-96.2123","-6","1" +"68035","Leshara","NE","41.330124","-96.42899","-6","1" +"68036","Linwood","NE","41.391914","-96.96036","-6","1" +"68037","Louisville","NE","40.992426","-96.14841","-6","1" +"68038","Lyons","NE","41.948587","-96.45359","-6","1" +"68039","Macy","NE","42.110959","-96.3393","-6","1" +"68040","Malmo","NE","41.285973","-96.73951","-6","1" +"68041","Mead","NE","41.22091","-96.47719","-6","1" +"68042","Memphis","NE","41.095604","-96.43168","-6","1" +"68044","Nickerson","NE","41.53608","-96.44999","-6","1" +"68045","Oakland","NE","41.830827","-96.49444","-6","1" +"68046","Papillion","NE","41.151899","-96.04484","-6","1" +"68047","Pender","NE","42.112028","-96.73093","-6","1" +"68048","Plattsmouth","NE","40.999245","-95.91589","-6","1" +"68050","Prague","NE","41.309115","-96.83506","-6","1" +"68054","Richfield","NE","41.108443","-96.07452","-6","1" +"68055","Rosalie","NE","42.053783","-96.50536","-6","1" +"68056","St Columbans","NE","41.092703","-96.090546","-6","1" +"68057","Scribner","NE","41.653831","-96.708","-6","1" +"68058","South Bend","NE","41.003188","-96.24529","-6","1" +"68059","Springfield","NE","41.074548","-96.15635","-6","1" +"68061","Tekamah","NE","41.783203","-96.21577","-6","1" +"68062","Thurston","NE","42.187938","-96.67747","-6","1" +"68063","Uehling","NE","41.733433","-96.50454","-6","1" +"68064","Valley","NE","41.328149","-96.3396","-6","1" +"68065","Valparaiso","NE","41.077766","-96.84586","-6","1" +"68066","Wahoo","NE","41.199626","-96.6226","-6","1" +"68067","Walthill","NE","42.148163","-96.48276","-6","1" +"68068","Washington","NE","41.396848","-96.20759","-6","1" +"68069","Waterloo","NE","41.255649","-96.30195","-6","1" +"68070","Weston","NE","41.200338","-96.78359","-6","1" +"68071","Winnebago","NE","42.232805","-96.48868","-6","1" +"68072","Winslow","NE","41.61023","-96.503281","-6","1" +"68073","Yutan","NE","41.249536","-96.40258","-6","1" +"68101","Omaha","NE","41.291736","-96.171104","-6","1" +"68102","Omaha","NE","41.260566","-95.9362","-6","1" +"68103","Omaha","NE","41.291736","-96.171104","-6","1" +"68104","Omaha","NE","41.292445","-96.0006","-6","1" +"68105","Omaha","NE","41.240854","-95.96383","-6","1" +"68106","Omaha","NE","41.242313","-95.99897","-6","1" +"68107","Omaha","NE","41.205198","-95.95539","-6","1" +"68108","Omaha","NE","41.240562","-95.93353","-6","1" +"68109","Omaha","NE","41.291736","-96.171104","-6","1" +"68110","Omaha","NE","41.292321","-95.93427","-6","1" +"68111","Omaha","NE","41.294547","-95.96434","-6","1" +"68112","Omaha","NE","41.334947","-95.95924","-6","1" +"68113","Offutt A F B","NE","41.127805","-95.90649","-6","1" +"68114","Omaha","NE","41.264531","-96.04798","-6","1" +"68116","Omaha","NE","41.294069","-96.15352","-6","1" +"68117","Omaha","NE","41.208364","-95.99675","-6","1" +"68118","Omaha","NE","41.263194","-96.17108","-6","1" +"68119","Omaha","NE","41.291736","-96.171104","-6","1" +"68120","Omaha","NE","41.291736","-96.171104","-6","1" +"68122","Omaha","NE","41.348081","-96.04609","-6","1" +"68123","Bellevue","NE","41.117337","-95.95126","-6","1" +"68124","Omaha","NE","41.235064","-96.05073","-6","1" +"68127","Omaha","NE","41.203029","-96.05009","-6","1" +"68128","La Vista","NE","41.183458","-96.05318","-6","1" +"68130","Omaha","NE","41.240036","-96.18017","-6","1" +"68131","Omaha","NE","41.264418","-95.96383","-6","1" +"68132","Omaha","NE","41.26565","-95.99741","-6","1" +"68133","Papillion","NE","41.144085","-96.00547","-6","1" +"68134","Omaha","NE","41.296748","-96.05181","-6","1" +"68135","Omaha","NE","41.203791","-96.17862","-6","1" +"68136","Omaha","NE","41.177298","-96.18662","-6","1" +"68137","Omaha","NE","41.204631","-96.12108","-6","1" +"68138","Omaha","NE","41.175935","-96.13394","-6","1" +"68139","Omaha","NE","41.291736","-96.171104","-6","1" +"68142","Omaha","NE","41.365763","-96.10608","-6","1" +"68144","Omaha","NE","41.235248","-96.11505","-6","1" +"68145","Omaha","NE","41.291736","-96.171104","-6","1" +"68147","Bellevue","NE","41.179338","-95.95592","-6","1" +"68152","Omaha","NE","41.344394","-96.00077","-6","1" +"68154","Omaha","NE","41.264952","-96.11422","-6","1" +"68155","Omaha","NE","41.291736","-96.171104","-6","1" +"68157","Omaha","NE","41.182198","-95.99058","-6","1" +"68164","Omaha","NE","41.296198","-96.11027","-6","1" +"68172","Omaha","NE","41.291736","-96.171104","-6","1" +"68175","Omaha","NE","41.291736","-96.171104","-6","1" +"68176","Omaha","NE","41.291736","-96.171104","-6","1" +"68178","Omaha","NE","41.291736","-96.171104","-6","1" +"68179","Omaha","NE","41.291736","-96.171104","-6","1" +"68180","Omaha","NE","41.291736","-96.171104","-6","1" +"68181","Omaha","NE","41.291736","-96.171104","-6","1" +"68182","Omaha","NE","41.291736","-96.171104","-6","1" +"68183","Omaha","NE","41.291736","-96.171104","-6","1" +"68198","Omaha","NE","41.291736","-96.171104","-6","1" +"68226","Central City","NE","41.12044","-97.992289","-6","1" +"68278","Omaha","NE","41.264333","-95.946368","-6","1" +"68301","Adams","NE","40.472055","-96.52637","-6","1" +"68303","Alexandria","NE","40.247793","-97.41164","-6","1" +"68304","Alvo","NE","40.874192","-96.38842","-6","1" +"68305","Auburn","NE","40.376356","-95.84422","-6","1" +"68307","Avoca","NE","40.789284","-96.13068","-6","1" +"68309","Barneston","NE","40.048634","-96.57326","-6","1" +"68310","Beatrice","NE","40.264193","-96.74604","-6","1" +"68313","Beaver Crossing","NE","40.781788","-97.26849","-6","1" +"68314","Bee","NE","41.009984","-97.03437","-6","1" +"68315","Belvidere","NE","40.248038","-97.5574","-6","1" +"68316","Benedict","NE","41.014534","-97.60967","-6","1" +"68317","Bennet","NE","40.680749","-96.50073","-6","1" +"68318","Blue Springs","NE","40.14601","-96.66049","-6","1" +"68319","Bradshaw","NE","40.910954","-97.76081","-6","1" +"68320","Brock","NE","40.487422","-95.96011","-6","1" +"68321","Brownville","NE","40.400172","-95.69665","-6","1" +"68322","Bruning","NE","40.328889","-97.54836","-6","1" +"68323","Burchard","NE","40.135672","-96.35497","-6","1" +"68324","Burr","NE","40.549923","-96.29776","-6","1" +"68325","Byron","NE","40.042191","-97.76979","-6","1" +"68326","Carleton","NE","40.29141","-97.68109","-6","1" +"68327","Chester","NE","40.015959","-97.61926","-6","1" +"68328","Clatonia","NE","40.473614","-96.84511","-6","1" +"68329","Cook","NE","40.50482","-96.17229","-6","1" +"68330","Cordova","NE","40.716216","-97.3522","-6","1" +"68331","Cortland","NE","40.481866","-96.70362","-6","1" +"68332","Crab Orchard","NE","40.327774","-96.40254","-6","1" +"68333","Crete","NE","40.620175","-96.96099","-6","1" +"68335","Davenport","NE","40.29735","-97.81152","-6","1" +"68336","Davey","NE","40.965773","-96.67667","-6","1" +"68337","Dawson","NE","40.11127","-95.83868","-6","1" +"68338","Daykin","NE","40.327793","-97.26389","-6","1" +"68339","Denton","NE","40.739508","-96.84873","-6","1" +"68340","Deshler","NE","40.135651","-97.73636","-6","1" +"68341","De Witt","NE","40.389849","-96.91229","-6","1" +"68342","Diller","NE","40.105725","-96.93428","-6","1" +"68343","Dorchester","NE","40.632861","-97.13139","-6","1" +"68344","Douglas","NE","40.56985","-96.3806","-6","1" +"68345","Du Bois","NE","40.034277","-96.02099","-6","1" +"68346","Dunbar","NE","40.666814","-96.02796","-6","1" +"68347","Eagle","NE","40.805678","-96.4362","-6","1" +"68348","Elk Creek","NE","40.289859","-96.13044","-6","1" +"68349","Elmwood","NE","40.837204","-96.29537","-6","1" +"68350","Endicott","NE","40.061702","-97.07633","-6","1" +"68351","Exeter","NE","40.652298","-97.43684","-6","1" +"68352","Fairbury","NE","40.151358","-97.20374","-6","1" +"68354","Fairmont","NE","40.633747","-97.58041","-6","1" +"68355","Falls City","NE","40.097217","-95.58631","-6","1" +"68357","Filley","NE","40.298643","-96.54833","-6","1" +"68358","Firth","NE","40.533257","-96.60568","-6","1" +"68359","Friend","NE","40.630445","-97.28305","-6","1" +"68360","Garland","NE","40.95178","-96.96787","-6","1" +"68361","Geneva","NE","40.516034","-97.60056","-6","1" +"68362","Gilead","NE","40.163122","-97.42863","-6","1" +"68364","Goehner","NE","40.832663","-97.22019","-6","1" +"68365","Grafton","NE","40.627475","-97.72408","-6","1" +"68366","Greenwood","NE","40.974167","-96.43555","-6","1" +"68367","Gresham","NE","41.03937","-97.39671","-6","1" +"68368","Hallam","NE","40.563073","-96.78914","-6","1" +"68370","Hebron","NE","40.154291","-97.54895","-6","1" +"68371","Henderson","NE","40.763846","-97.77856","-6","1" +"68372","Hickman","NE","40.612736","-96.62295","-6","1" +"68374","Holmesville","NE","40.211775","-96.64233","-6","1" +"68375","Hubbell","NE","40.025484","-97.47265","-6","1" +"68376","Humboldt","NE","40.172733","-95.9426","-6","1" +"68377","Jansen","NE","40.20808","-97.02445","-6","1" +"68378","Johnson","NE","40.394814","-96.01864","-6","1" +"68380","Lewiston","NE","40.242528","-96.40309","-6","1" +"68381","Liberty","NE","40.081107","-96.4838","-6","1" +"68382","Lorton","NE","40.653589","-96.086904","-6","1" +"68401","McCool Junction","NE","40.744844","-97.58296","-6","1" +"68402","Malcolm","NE","40.918054","-96.84839","-6","1" +"68403","Manley","NE","40.918749","-96.16547","-6","1" +"68404","Martell","NE","40.617147","-96.7559","-6","1" +"68405","Milford","NE","40.772835","-97.05841","-6","1" +"68406","Milligan","NE","40.501404","-97.39726","-6","1" +"68407","Murdock","NE","40.912199","-96.24729","-6","1" +"68409","Murray","NE","40.915826","-95.93611","-6","1" +"68410","Nebraska City","NE","40.661439","-95.87023","-6","1" +"68413","Nehawka","NE","40.833188","-96.00315","-6","1" +"68414","Nemaha","NE","40.32194","-95.67683","-6","1" +"68415","Odell","NE","40.052388","-96.81761","-6","1" +"68416","Ohiowa","NE","40.401484","-97.45367","-6","1" +"68417","Otoe","NE","40.728493","-96.09516","-6","1" +"68418","Palmyra","NE","40.702467","-96.3845","-6","1" +"68419","Panama","NE","40.596093","-96.50816","-6","1" +"68420","Pawnee City","NE","40.106605","-96.15968","-6","1" +"68421","Peru","NE","40.48863","-95.73152","-6","1" +"68422","Pickrell","NE","40.385662","-96.71396","-6","1" +"68423","Pleasant Dale","NE","40.806723","-96.93931","-6","1" +"68424","Plymouth","NE","40.298729","-97.00106","-6","1" +"68428","Raymond","NE","40.969816","-96.82364","-6","1" +"68429","Reynolds","NE","40.059775","-97.380646","-6","1" +"68430","Roca","NE","40.679251","-96.66579","-6","1" +"68431","Rulo","NE","40.056628","-95.43297","-6","1" +"68433","Salem","NE","40.060469","-95.74181","-6","1" +"68434","Seward","NE","40.909197","-97.11206","-6","1" +"68436","Shickley","NE","40.43034","-97.73815","-6","1" +"68437","Shubert","NE","40.240436","-95.63981","-6","1" +"68438","Sprague","NE","40.626661","-96.745622","-6","1" +"68439","Staplehurst","NE","40.996127","-97.2052","-6","1" +"68440","Steele City","NE","40.05097","-97.03057","-6","1" +"68441","Steinauer","NE","40.224384","-96.24072","-6","1" +"68442","Stella","NE","40.229899","-95.77517","-6","1" +"68443","Sterling","NE","40.450262","-96.37773","-6","1" +"68444","Strang","NE","40.409283","-97.58391","-6","1" +"68445","Swanton","NE","40.400494","-97.09357","-6","1" +"68446","Syracuse","NE","40.656899","-96.18201","-6","1" +"68447","Table Rock","NE","40.188015","-96.08978","-6","1" +"68448","Talmage","NE","40.537185","-96.02353","-6","1" +"68450","Tecumseh","NE","40.373895","-96.2097","-6","1" +"68452","Ong","NE","40.394354","-97.84507","-6","1" +"68453","Tobias","NE","40.412117","-97.33094","-6","1" +"68454","Unadilla","NE","40.698235","-96.28913","-6","1" +"68455","Union","NE","40.820408","-95.89714","-6","1" +"68456","Utica","NE","40.898329","-97.32084","-6","1" +"68457","Verdon","NE","40.152937","-95.69982","-6","1" +"68458","Virginia","NE","40.239986","-96.49182","-6","1" +"68460","Waco","NE","40.897974","-97.45072","-6","1" +"68461","Walton","NE","40.764867","-96.53044","-6","1" +"68462","Waverly","NE","40.924298","-96.52581","-6","1" +"68463","Weeping Water","NE","40.87142","-96.14188","-6","1" +"68464","Western","NE","40.410478","-97.20746","-6","1" +"68465","Wilber","NE","40.487481","-96.99849","-6","1" +"68466","Wymore","NE","40.087289","-96.65361","-6","1" +"68467","York","NE","40.865237","-97.58884","-6","1" +"68501","Lincoln","NE","40.865142","-96.823133","-6","1" +"68502","Lincoln","NE","40.789051","-96.69589","-6","1" +"68503","Lincoln","NE","40.823602","-96.67552","-6","1" +"68504","Lincoln","NE","40.8442","-96.65563","-6","1" +"68505","Lincoln","NE","40.82655","-96.62564","-6","1" +"68506","Lincoln","NE","40.785557","-96.64599","-6","1" +"68507","Lincoln","NE","40.85115","-96.62914","-6","1" +"68508","Lincoln","NE","40.814191","-96.70744","-6","1" +"68509","Lincoln","NE","40.784451","-96.688799","-6","1" +"68510","Lincoln","NE","40.807106","-96.65634","-6","1" +"68512","Lincoln","NE","40.7448","-96.69574","-6","1" +"68514","Lincoln","NE","40.940125","-96.662138","-6","1" +"68516","Lincoln","NE","40.749224","-96.64566","-6","1" +"68517","Lincoln","NE","40.92185","-96.61495","-6","1" +"68520","Lincoln","NE","40.798632","-96.59023","-6","1" +"68521","Lincoln","NE","40.855645","-96.71298","-6","1" +"68522","Lincoln","NE","40.790601","-96.74974","-6","1" +"68523","Lincoln","NE","40.740529","-96.76178","-6","1" +"68524","Lincoln","NE","40.859321","-96.79586","-6","1" +"68526","Lincoln","NE","40.740833","-96.59122","-6","1" +"68527","Lincoln","NE","40.849249","-96.53061","-6","1" +"68528","Lincoln","NE","40.816765","-96.78598","-6","1" +"68529","Lincoln","NE","40.879752","-96.779796","-6","1" +"68531","Lincoln","NE","40.900801","-96.720143","-6","1" +"68532","Lincoln","NE","40.796876","-96.8585","-6","1" +"68542","Lincoln","NE","40.784451","-96.688799","-6","1" +"68544","Lincoln","NE","40.784451","-96.688799","-6","1" +"68572","Lincoln","NE","40.784451","-96.688799","-6","1" +"68583","Lincoln","NE","40.784451","-96.688799","-6","1" +"68588","Lincoln","NE","40.820645","-96.692843","-6","1" +"68601","Columbus","NE","41.437838","-97.37192","-6","1" +"68602","Columbus","NE","41.53808","-97.541795","-6","1" +"68620","Albion","NE","41.708281","-98.0246","-6","1" +"68621","Ames","NE","41.482181","-96.63929","-6","1" +"68622","Bartlett","NE","41.909737","-98.51413","-6","1" +"68623","Belgrade","NE","41.441371","-98.1094","-6","1" +"68624","Bellwood","NE","41.342529","-97.23485","-6","1" +"68626","Brainard","NE","41.177056","-97.00012","-6","1" +"68627","Cedar Rapids","NE","41.552082","-98.17449","-6","1" +"68628","Clarks","NE","41.212516","-97.83118","-6","1" +"68629","Clarkson","NE","41.70879","-97.12748","-6","1" +"68631","Creston","NE","41.692408","-97.35456","-6","1" +"68632","David City","NE","41.259891","-97.12638","-6","1" +"68633","Dodge","NE","41.706209","-96.89662","-6","1" +"68634","Duncan","NE","41.388893","-97.49439","-6","1" +"68635","Dwight","NE","41.083432","-97.01583","-6","1" +"68636","Elgin","NE","42.009216","-98.13311","-6","1" +"68637","Ericson","NE","41.76983","-98.64132","-6","1" +"68638","Fullerton","NE","41.375063","-97.96381","-6","1" +"68640","Genoa","NE","41.44996","-97.75199","-6","1" +"68641","Howells","NE","41.73427","-97.01367","-6","1" +"68642","Humphrey","NE","41.690401","-97.49723","-6","1" +"68643","Leigh","NE","41.691648","-97.24781","-6","1" +"68644","Lindsay","NE","41.707169","-97.6865","-6","1" +"68647","Monroe","NE","41.504301","-97.60921","-6","1" +"68648","Morse Bluff","NE","41.400937","-96.78066","-6","1" +"68649","North Bend","NE","41.484782","-96.77567","-6","1" +"68651","Osceola","NE","41.21361","-97.56993","-6","1" +"68652","Petersburg","NE","41.861111","-98.04549","-6","1" +"68653","Platte Center","NE","41.545453","-97.48974","-6","1" +"68654","Polk","NE","41.068368","-97.78036","-6","1" +"68655","Primrose","NE","41.632602","-98.24319","-6","1" +"68658","Rising City","NE","41.192785","-97.29532","-6","1" +"68659","Rogers","NE","41.546604","-96.93521","-6","1" +"68660","Saint Edward","NE","41.574309","-97.86898","-6","1" +"68661","Schuyler","NE","41.472784","-97.06915","-6","1" +"68662","Shelby","NE","41.184669","-97.41634","-6","1" +"68663","Silver Creek","NE","41.306574","-97.70019","-6","1" +"68664","Snyder","NE","41.704483","-96.78794","-6","1" +"68665","Spalding","NE","41.693462","-98.38523","-6","1" +"68666","Stromsburg","NE","41.113813","-97.60295","-6","1" +"68667","Surprise","NE","41.106694","-97.30554","-6","1" +"68669","Ulysses","NE","41.08293","-97.22235","-6","1" +"68701","Norfolk","NE","42.026209","-97.41741","-6","1" +"68702","Norfolk","NE","41.916476","-97.601348","-6","1" +"68710","Allen","NE","42.450185","-96.85153","-6","1" +"68711","Amelia","NE","42.214277","-98.98515","-6","1" +"68713","Atkinson","NE","42.573338","-98.94136","-6","1" +"68714","Bassett","NE","42.53961","-99.52938","-6","1" +"68715","Battle Creek","NE","41.993408","-97.60196","-6","1" +"68716","Beemer","NE","41.944906","-96.8338","-6","1" +"68717","Belden","NE","42.408389","-97.20918","-6","1" +"68718","Bloomfield","NE","42.651113","-97.67271","-6","1" +"68719","Bristow","NE","42.845614","-98.56946","-6","1" +"68720","Brunswick","NE","42.337964","-98.01432","-6","1" +"68722","Butte","NE","42.923088","-98.85921","-6","1" +"68723","Carroll","NE","42.281323","-97.20373","-6","1" +"68724","Center","NE","42.62177","-97.87578","-6","1" +"68725","Chambers","NE","42.182794","-98.77798","-6","1" +"68726","Clearwater","NE","42.163976","-98.21846","-6","1" +"68727","Coleridge","NE","42.509494","-97.20526","-6","1" +"68728","Concord","NE","42.379899","-96.96331","-6","1" +"68729","Creighton","NE","42.469145","-97.9023","-6","1" +"68730","Crofton","NE","42.774493","-97.51543","-6","1" +"68731","Dakota City","NE","42.424303","-96.43904","-6","1" +"68732","Dixon","NE","42.459805","-96.98116","-6","1" +"68733","Emerson","NE","42.288154","-96.73644","-6","1" +"68734","Emmet","NE","42.475789","-98.79953","-6","1" +"68735","Ewing","NE","42.189511","-98.42285","-6","1" +"68736","Fordyce","NE","42.750269","-97.3801","-6","1" +"68737","Foster","NE","42.272213","-97.67446","-6","1" +"68738","Hadar","NE","42.264356","-97.601337","-6","1" +"68739","Hartington","NE","42.624108","-97.25267","-6","1" +"68740","Hoskins","NE","42.145982","-97.3009","-6","1" +"68741","Hubbard","NE","42.367879","-96.58297","-6","1" +"68742","Inman","NE","42.376443","-98.51848","-6","1" +"68743","Jackson","NE","42.460155","-96.60668","-6","1" +"68745","Laurel","NE","42.437732","-97.09057","-6","1" +"68746","Lynch","NE","42.787371","-98.43592","-6","1" +"68747","Mclean","NE","42.402076","-97.4751","-6","1" +"68748","Madison","NE","41.836046","-97.45212","-6","1" +"68749","Magnet","NE","42.609687","-97.250378","-6","1" +"68751","Maskell","NE","42.481711","-96.926042","-6","1" +"68752","Meadow Grove","NE","41.995961","-97.70788","-6","1" +"68753","Mills","NE","42.855832","-99.44391","-6","1" +"68755","Naper","NE","42.946169","-99.11638","-6","1" +"68756","Neligh","NE","42.150892","-98.02352","-6","1" +"68757","Newcastle","NE","42.660607","-96.92796","-6","1" +"68758","Newman Grove","NE","41.769497","-97.79839","-6","1" +"68759","Newport","NE","42.700145","-99.31812","-6","1" +"68760","Niobrara","NE","42.776379","-98.07011","-6","1" +"68761","Oakdale","NE","42.049818","-97.96188","-6","1" +"68763","Oneill","NE","42.516792","-98.60341","-6","1" +"68764","Orchard","NE","42.395137","-98.22358","-6","1" +"68765","Osmond","NE","42.35077","-97.61574","-6","1" +"68766","Page","NE","42.41927","-98.40272","-6","1" +"68767","Pierce","NE","42.200994","-97.54527","-6","1" +"68768","Pilger","NE","41.999564","-97.06804","-6","1" +"68769","Plainview","NE","42.331689","-97.80618","-6","1" +"68770","Ponca","NE","42.563297","-96.76399","-6","1" +"68771","Randolph","NE","42.377338","-97.35618","-6","1" +"68772","Rose","NE","42.231317","-99.59463","-6","1" +"68773","Royal","NE","42.367457","-98.12019","-6","1" +"68774","Saint Helena","NE","42.821095","-97.27699","-6","1" +"68776","South Sioux City","NE","42.467095","-96.4187","-6","1" +"68777","Spencer","NE","42.843338","-98.68298","-6","1" +"68778","Springview","NE","42.880251","-99.8661","-6","1" +"68779","Stanton","NE","41.955429","-97.21583","-6","1" +"68780","Stuart","NE","42.591725","-99.13746","-6","1" +"68781","Tilden","NE","42.028202","-97.84085","-6","1" +"68782","Verdel","NE","42.811418","-98.191178","-6","1" +"68783","Verdigre","NE","42.620877","-98.12001","-6","1" +"68784","Wakefield","NE","42.242742","-96.87191","-6","1" +"68785","Waterbury","NE","42.437174","-96.72103","-6","1" +"68786","Wausa","NE","42.50198","-97.55717","-6","1" +"68787","Wayne","NE","42.221382","-97.03303","-6","1" +"68788","West Point","NE","41.841032","-96.72569","-6","1" +"68789","Winnetoon","NE","42.534339","-97.99902","-6","1" +"68790","Winside","NE","42.175272","-97.17016","-6","1" +"68791","Wisner","NE","42.000682","-96.9295","-6","1" +"68792","Wynot","NE","42.749481","-97.14372","-6","1" +"68797","Sutton","NE","40.607095","-97.859489","-6","1" +"68801","Grand Island","NE","40.922826","-98.33087","-6","1" +"68802","Grand Island","NE","40.872457","-98.50213","-6","1" +"68803","Grand Island","NE","40.916866","-98.38749","-6","1" +"68810","Alda","NE","40.860494","-98.47051","-6","1" +"68812","Amherst","NE","40.887707","-99.2839","-6","1" +"68813","Anselmo","NE","41.726833","-99.82976","-6","1" +"68814","Ansley","NE","41.296709","-99.38123","-6","1" +"68815","Arcadia","NE","41.420141","-99.1444","-6","1" +"68816","Archer","NE","41.172932","-98.12755","-6","1" +"68817","Ashton","NE","41.251967","-98.78701","-6","1" +"68818","Aurora","NE","40.83605","-98.00493","-6","1" +"68819","Berwyn","NE","41.348094","-99.4839","-6","1" +"68820","Boelus","NE","41.09121","-98.69726","-6","1" +"68821","Brewster","NE","41.976053","-99.81717","-6","1" +"68822","Broken Bow","NE","41.400263","-99.63075","-6","1" +"68823","Burwell","NE","41.820617","-99.12531","-6","1" +"68824","Cairo","NE","40.99858","-98.60417","-6","1" +"68825","Callaway","NE","41.288656","-99.95439","-6","1" +"68826","Central City","NE","41.12561","-98.00225","-6","1" +"68827","Chapman","NE","41.031618","-98.17004","-6","1" +"68828","Comstock","NE","41.556172","-99.24938","-6","1" +"68831","Dannebrog","NE","41.125399","-98.57308","-6","1" +"68832","Doniphan","NE","40.763643","-98.38794","-6","1" +"68833","Dunning","NE","41.824292","-100.15245","-6","1" +"68834","Eddyville","NE","41.013936","-99.6325","-6","1" +"68835","Elba","NE","41.336945","-98.61248","-6","1" +"68836","Elm Creek","NE","40.708697","-99.37512","-6","1" +"68837","Elyria","NE","41.6477","-99.05046","-6","1" +"68838","Farwell","NE","41.217633","-98.67027","-6","1" +"68840","Gibbon","NE","40.754582","-98.86414","-6","1" +"68841","Giltner","NE","40.769633","-98.16372","-6","1" +"68842","Greeley","NE","41.517347","-98.49117","-6","1" +"68843","Hampton","NE","40.894366","-97.89355","-6","1" +"68844","Hazard","NE","41.067301","-99.04756","-6","1" +"68845","Kearney","NE","40.713265","-99.11839","-6","1" +"68846","Hordville","NE","41.068227","-97.89516","-6","1" +"68847","Kearney","NE","40.709895","-99.05499","-6","1" +"68848","Kearney","NE","40.686053","-99.069318","-6","1" +"68849","Kearney","NE","40.849654","-99.074058","-6","1" +"68850","Lexington","NE","40.786048","-99.7424","-6","1" +"68852","Litchfield","NE","41.158146","-99.12336","-6","1" +"68853","Loup City","NE","41.286479","-98.96733","-6","1" +"68854","Marquette","NE","41.019927","-98.00297","-6","1" +"68855","Mason City","NE","41.168004","-99.33514","-6","1" +"68856","Merna","NE","41.488642","-99.81791","-6","1" +"68858","Miller","NE","40.966548","-99.37818","-6","1" +"68859","North Loup","NE","41.48443","-98.79933","-6","1" +"68860","Oconto","NE","41.146805","-99.77117","-6","1" +"68861","Odessa","NE","40.699986","-99.25626","-6","1" +"68862","Ord","NE","41.597942","-98.93307","-6","1" +"68863","Overton","NE","40.752213","-99.52687","-6","1" +"68864","Palmer","NE","41.244441","-98.22475","-6","1" +"68865","Phillips","NE","40.895553","-98.20719","-6","1" +"68866","Pleasanton","NE","40.982236","-99.11132","-6","1" +"68868","Martin","NE","40.718287","-98.52983","-6","1" +"68869","Ravenna","NE","41.014592","-98.88267","-6","1" +"68870","Riverdale","NE","40.817442","-99.15387","-6","1" +"68871","Rockville","NE","41.121028","-98.82619","-6","1" +"68872","Saint Libory","NE","41.097169","-98.31587","-6","1" +"68873","Saint Paul","NE","41.230069","-98.47449","-6","1" +"68874","Sargent","NE","41.639578","-99.41055","-6","1" +"68875","Scotia","NE","41.523574","-98.68461","-6","1" +"68876","Shelton","NE","40.786865","-98.74701","-6","1" +"68878","Sumner","NE","40.970793","-99.48582","-6","1" +"68879","Taylor","NE","41.826783","-99.49058","-6","1" +"68880","Weissert","NE","41.393902","-99.728097","-6","1" +"68881","Westerville","NE","41.44271","-99.35516","-6","1" +"68882","Wolbach","NE","41.413885","-98.4231","-6","1" +"68883","Wood River","NE","40.807789","-98.5978","-6","1" +"68901","Hastings","NE","40.589299","-98.38131","-6","1" +"68902","Hastings","NE","40.589594","-98.397248","-6","1" +"68920","Alma","NE","40.142462","-99.35398","-6","1" +"68922","Arapahoe","NE","40.318156","-99.89562","-6","1" +"68923","Atlanta","NE","40.370382","-99.47144","-6","1" +"68924","Axtell","NE","40.493457","-99.11348","-6","1" +"68925","Ayr","NE","40.431821","-98.43946","-6","1" +"68926","Beaver City","NE","40.106595","-99.8225","-6","1" +"68927","Bertrand","NE","40.534445","-99.61498","-6","1" +"68928","Bladen","NE","40.320042","-98.59331","-6","1" +"68929","Bloomington","NE","40.121789","-99.04457","-6","1" +"68930","Blue Hill","NE","40.284783","-98.43446","-6","1" +"68932","Campbell","NE","40.303479","-98.73884","-6","1" +"68933","Clay Center","NE","40.523823","-98.04812","-6","1" +"68934","Deweese","NE","40.34357","-98.15079","-6","1" +"68935","Edgar","NE","40.365387","-97.96363","-6","1" +"68936","Edison","NE","40.310905","-99.7648","-6","1" +"68937","Elwood","NE","40.627711","-99.86334","-6","1" +"68938","Fairfield","NE","40.425264","-98.10957","-6","1" +"68939","Franklin","NE","40.103792","-98.94389","-6","1" +"68940","Funk","NE","40.532115","-99.24602","-6","1" +"68941","Glenvil","NE","40.459158","-98.28892","-6","1" +"68942","Guide Rock","NE","40.084405","-98.30306","-6","1" +"68943","Hardy","NE","40.023871","-97.9101","-6","1" +"68944","Harvard","NE","40.635514","-98.09442","-6","1" +"68945","Heartwell","NE","40.568436","-98.78434","-6","1" +"68946","Hendley","NE","40.099617","-99.97619","-6","1" +"68947","Hildreth","NE","40.306853","-99.05694","-6","1" +"68948","Holbrook","NE","40.34435","-100.03595","-6","1" +"68949","Holdrege","NE","40.434479","-99.37311","-6","1" +"68950","Holstein","NE","40.465821","-98.65405","-6","1" +"68952","Inavale","NE","40.142355","-98.66952","-6","1" +"68954","Inland","NE","40.60418","-98.23217","-6","1" +"68955","Juniata","NE","40.595599","-98.53981","-6","1" +"68956","Kenesaw","NE","40.642616","-98.67681","-6","1" +"68957","Lawrence","NE","40.275161","-98.24659","-6","1" +"68958","Loomis","NE","40.507276","-99.50047","-6","1" +"68959","Minden","NE","40.491484","-98.92412","-6","1" +"68960","Naponee","NE","40.085446","-99.14622","-6","1" +"68961","Nelson","NE","40.19484","-98.03859","-6","1" +"68963","Norman","NE","40.478879","-98.792699","-6","1" +"68964","Oak","NE","40.230878","-97.89427","-6","1" +"68966","Orleans","NE","40.145771","-99.46708","-6","1" +"68967","Oxford","NE","40.247784","-99.62187","-6","1" +"68969","Ragan","NE","40.176513","-99.404864","-6","1" +"68970","Red Cloud","NE","40.090341","-98.52808","-6","1" +"68971","Republican City","NE","40.113307","-99.23875","-6","1" +"68972","Riverton","NE","40.083133","-98.78853","-6","1" +"68973","Roseland","NE","40.459642","-98.55892","-6","1" +"68974","Ruskin","NE","40.126094","-97.87696","-6","1" +"68975","Saronville","NE","40.605538","-97.94955","-6","1" +"68976","Smithfield","NE","40.576873","-99.74003","-6","1" +"68977","Stamford","NE","40.092127","-99.63058","-6","1" +"68978","Superior","NE","40.03686","-98.07828","-6","1" +"68979","Sutton","NE","40.603945","-97.85433","-6","1" +"68980","Trumbull","NE","40.674132","-98.26496","-6","1" +"68981","Upland","NE","40.287173","-98.88958","-6","1" +"68982","Wilcox","NE","40.338567","-99.18638","-6","1" +"69001","McCook","NE","40.225039","-100.63052","-6","1" +"69020","Bartley","NE","40.241652","-100.3015","-6","1" +"69021","Benkelman","NE","40.097723","-101.54055","-7","1" +"69022","Cambridge","NE","40.317358","-100.17857","-6","1" +"69023","Champion","NE","40.489063","-101.88349","-7","1" +"69024","Culbertson","NE","40.242582","-100.85376","-6","1" +"69025","Curtis","NE","40.618751","-100.50729","-6","1" +"69026","Danbury","NE","40.049447","-100.44338","-6","1" +"69027","Enders","NE","40.429297","-101.53601","-7","1" +"69028","Eustis","NE","40.656225","-100.05391","-6","1" +"69029","Farnam","NE","40.756879","-100.21881","-6","1" +"69030","Haigler","NE","40.032262","-101.96041","-7","1" +"69031","Hamlet","NE","40.383691","-101.23172","-6","1" +"69032","Hayes Center","NE","40.560493","-100.95654","-6","1" +"69033","Imperial","NE","40.530405","-101.67576","-7","1" +"69034","Indianola","NE","40.236212","-100.42375","-6","1" +"69036","Lebanon","NE","40.056031","-100.28026","-6","1" +"69037","Max","NE","40.142872","-101.40758","-7","1" +"69038","Maywood","NE","40.638541","-100.65778","-6","1" +"69039","Moorefield","NE","40.646065","-100.35262","-6","1" +"69040","Palisade","NE","40.358455","-101.11224","-6","1" +"69041","Parks","NE","40.133487","-101.7201","-7","1" +"69042","Stockville","NE","40.519197","-100.37754","-6","1" +"69043","Stratton","NE","40.150605","-101.23375","-6","1" +"69044","Trenton","NE","40.160252","-101.01311","-6","1" +"69045","Wauneta","NE","40.484407","-101.35561","-7","1" +"69046","Wilsonville","NE","40.106363","-100.11077","-6","1" +"69101","North Platte","NE","41.129363","-100.77502","-6","1" +"69103","North Platte","NE","41.046447","-100.746912","-6","1" +"69120","Arnold","NE","41.398865","-100.22265","-6","1" +"69121","Arthur","NE","41.569138","-101.68816","-7","1" +"69122","Big Springs","NE","41.058171","-102.08926","-7","1" +"69123","Brady","NE","41.036035","-100.34398","-6","1" +"69125","Broadwater","NE","41.583579","-102.85851","-7","1" +"69127","Brule","NE","41.091667","-101.89092","-7","1" +"69128","Bushnell","NE","41.173278","-103.9024","-7","1" +"69129","Chappell","NE","41.104806","-102.40905","-7","1" +"69130","Cozad","NE","40.868727","-99.97697","-6","1" +"69131","Dalton","NE","41.406407","-103.00711","-7","1" +"69132","Dickens","NE","40.808779","-100.96318","-6","1" +"69133","Dix","NE","41.207381","-103.47126","-7","1" +"69134","Elsie","NE","40.847471","-101.38031","-7","1" +"69135","Elsmere","NE","42.211636","-100.2201","-6","1" +"69138","Gothenburg","NE","40.952436","-100.15719","-6","1" +"69140","Grant","NE","40.850141","-101.75824","-7","1" +"69141","Gurley","NE","41.318554","-102.97377","-7","1" +"69142","Halsey","NE","41.931243","-100.27285","-6","1" +"69143","Hershey","NE","41.186837","-101.03117","-6","1" +"69144","Keystone","NE","41.250772","-101.60141","-7","1" +"69145","Kimball","NE","41.24058","-103.6608","-7","1" +"69146","Lemoyne","NE","41.296221","-101.77851","-7","1" +"69147","Lewellen","NE","41.376624","-102.05512","-7","1" +"69148","Lisco","NE","41.521238","-102.55973","-7","1" +"69149","Lodgepole","NE","41.168155","-102.63874","-7","1" +"69150","Madrid","NE","40.845229","-101.5378","-7","1" +"69151","Maxwell","NE","41.020868","-100.54009","-6","1" +"69152","Mullen","NE","42.088889","-101.09299","-7","1" +"69153","Ogallala","NE","41.115512","-101.69819","-7","1" +"69154","Oshkosh","NE","41.402127","-102.35025","-7","1" +"69155","Paxton","NE","41.154635","-101.37877","-7","1" +"69156","Potter","NE","41.233268","-103.28325","-7","1" +"69157","Purdum","NE","42.1088","-100.3151","-6","1" +"69160","Sidney","NE","41.220549","-102.995925","-7","1" +"69161","Seneca","NE","42.07739","-100.74359","-6","1" +"69162","Sidney","NE","41.162214","-103.01949","-7","1" +"69163","Stapleton","NE","41.437215","-100.53006","-6","1" +"69165","Sutherland","NE","41.194109","-101.17899","-6","1" +"69166","Thedford","NE","41.918663","-100.52739","-6","1" +"69167","Tryon","NE","41.560479","-100.98254","-6","1" +"69168","Venango","NE","40.734776","-101.98221","-7","1" +"69169","Wallace","NE","40.820868","-101.17982","-6","1" +"69170","Wellfleet","NE","40.770008","-100.73442","-6","1" +"69171","Willow Island","NE","40.892469","-100.070257","-6","1" +"69190","Oshkosh","NE","41.615307","-102.331762","-7","1" +"69201","Valentine","NE","42.716711","-100.64716","-6","1" +"69210","Ainsworth","NE","42.530382","-99.88206","-6","1" +"69211","Cody","NE","42.838967","-101.36663","-7","1" +"69212","Crookston","NE","42.914711","-100.78789","-6","1" +"69214","Johnstown","NE","42.61416","-100.03899","-6","1" +"69216","Kilgore","NE","42.939915","-100.92827","-7","1" +"69217","Long Pine","NE","42.519402","-99.70826","-6","1" +"69218","Merriman","NE","42.848109","-101.65674","-7","1" +"69219","Nenzel","NE","42.686576","-101.09984","-7","1" +"69220","Sparks","NE","42.940698","-100.25556","-6","1" +"69221","Wood Lake","NE","42.63002","-100.26756","-6","1" +"69301","Alliance","NE","42.13928","-102.84937","-7","1" +"69331","Angora","NE","41.823881","-102.96652","-7","1" +"69333","Ashby","NE","41.861313","-101.98548","-7","1" +"69334","Bayard","NE","41.777948","-103.31277","-7","1" +"69335","Bingham","NE","41.996022","-102.18247","-7","1" +"69336","Bridgeport","NE","41.660814","-103.10517","-7","1" +"69337","Chadron","NE","42.808213","-103.00219","-7","1" +"69339","Crawford","NE","42.672974","-103.39841","-7","1" +"69340","Ellsworth","NE","42.23242","-102.19792","-7","1" +"69341","Gering","NE","41.803503","-103.65998","-7","1" +"69343","Gordon","NE","42.567701","-102.00083","-7","1" +"69345","Harrisburg","NE","41.549736","-103.72421","-7","1" +"69346","Harrison","NE","42.624764","-103.83101","-7","1" +"69347","Hay Springs","NE","42.580176","-102.65443","-7","1" +"69348","Hemingford","NE","42.369213","-103.17741","-7","1" +"69349","Henry","NE","41.992583","-104.04977","-7","1" +"69350","Hyannis","NE","41.926792","-101.73705","-7","1" +"69351","Lakeside","NE","42.21773","-102.42833","-7","1" +"69352","Lyman","NE","41.849619","-103.99465","-7","1" +"69353","Mcgrew","NE","41.746944","-103.416351","-7","1" +"69354","Marsland","NE","42.485817","-103.21227","-7","1" +"69355","Melbeta","NE","41.781984","-103.51728","-7","1" +"69356","Minatare","NE","41.863357","-103.47009","-7","1" +"69357","Mitchell","NE","41.940693","-103.78815","-7","1" +"69358","Morrill","NE","41.986025","-103.95935","-7","1" +"69360","Rushville","NE","42.737843","-102.48573","-7","1" +"69361","Scottsbluff","NE","41.885553","-103.65241","-7","1" +"69363","Scottsbluff","NE","41.851012","-103.70726","-7","1" +"69365","Whiteclay","NE","42.963117","-102.51068","-7","1" +"69366","Whitman","NE","41.92305","-101.56145","-7","1" +"69367","Whitney","NE","42.755969","-103.2562","-7","1" +"70000","Laplace","LA","30.08677","-90.513522","-6","1" +"70001","Metairie","LA","29.984096","-90.16902","-6","1" +"70002","Metairie","LA","30.011517","-90.16245","-6","1" +"70003","Metairie","LA","29.997168","-90.2138","-6","1" +"70004","Metairie","LA","29.677893","-90.0901","-6","1" +"70005","Metairie","LA","29.999453","-90.13398","-6","1" +"70006","Metairie","LA","30.013985","-90.19128","-6","1" +"70009","Metairie","LA","29.677893","-90.0901","-6","1" +"70010","Metairie","LA","29.677893","-90.0901","-6","1" +"70011","Metairie","LA","29.677893","-90.0901","-6","1" +"70021","Jefferson","LA","29.960375","-90.156143","-6","1" +"70030","Des Allemands","LA","29.810193","-90.44769","-6","1" +"70031","Ama","LA","29.942703","-90.29969","-6","1" +"70032","Arabi","LA","29.958802","-89.99902","-6","1" +"70033","Metairie","LA","29.677893","-90.0901","-6","1" +"70036","Barataria","LA","29.715795","-90.12419","-6","1" +"70037","Belle Chasse","LA","29.822707","-90.00616","-6","1" +"70038","Boothville","LA","29.307982","-89.38007","-6","1" +"70039","Boutte","LA","29.900075","-90.38655","-6","1" +"70040","Braithwaite","LA","29.749706","-89.94043","-6","1" +"70041","Buras","LA","29.351783","-89.51381","-6","1" +"70042","Carlisle","LA","29.380066","-89.477464","-6","1" +"70043","Chalmette","LA","29.946404","-89.96118","-6","1" +"70044","Chalmette","LA","29.96765","-89.951441","-6","1" +"70046","Davant","LA","29.61829","-89.872599","-6","1" +"70047","Destrehan","LA","29.969128","-90.37563","-6","1" +"70048","Reserve","LA","30.071155","-90.546138","-6","1" +"70049","Edgard","LA","30.033974","-90.5538","-6","1" +"70050","Empire","LA","29.384033","-89.59696","-6","1" +"70051","Garyville","LA","30.058276","-90.61738","-6","1" +"70052","Gramercy","LA","30.053907","-90.68915","-6","1" +"70053","Gretna","LA","29.915355","-90.05335","-6","1" +"70054","Gretna","LA","29.677893","-90.0901","-6","1" +"70055","Metairie","LA","29.677893","-90.0901","-6","1" +"70056","Gretna","LA","29.894261","-90.03072","-6","1" +"70057","Hahnville","LA","29.967081","-90.41012","-6","1" +"70058","Harvey","LA","29.878578","-90.06903","-6","1" +"70059","Harvey","LA","29.677893","-90.0901","-6","1" +"70060","Metairie","LA","29.677893","-90.0901","-6","1" +"70062","Kenner","LA","29.991051","-90.2469","-6","1" +"70063","Kenner","LA","29.677893","-90.0901","-6","1" +"70064","Kenner","LA","29.677893","-90.0901","-6","1" +"70065","Kenner","LA","30.022853","-90.25133","-6","1" +"70066","Killona","LA","29.999471","-90.48708","-6","1" +"70067","Lafitte","LA","29.652752","-90.1012","-6","1" +"70068","La Place","LA","30.073941","-90.48516","-6","1" +"70069","La Place","LA","30.091158","-90.483189","-6","1" +"70070","Luling","LA","29.907162","-90.35142","-6","1" +"70071","Lutcher","LA","30.04401","-90.69956","-6","1" +"70072","Marrero","LA","29.869283","-90.10933","-6","1" +"70073","Marrero","LA","29.677893","-90.0901","-6","1" +"70075","Meraux","LA","29.935089","-89.92089","-6","1" +"70076","Mount Airy","LA","30.055429","-90.64073","-6","1" +"70078","New Sarpy","LA","29.981674","-90.38595","-6","1" +"70079","Norco","LA","30.007089","-90.41389","-6","1" +"70080","Paradis","LA","29.878373","-90.43063","-6","1" +"70081","Pilottown","LA","29.285081","-89.364034","-6","1" +"70082","Pointe A La Hache","LA","29.572751","-89.78139","-6","1" +"70083","Port Sulphur","LA","29.529091","-89.7883","-6","1" +"70084","Reserve","LA","30.059516","-90.55987","-6","1" +"70085","Saint Bernard","LA","29.86089","-89.82225","-6","1" +"70086","Saint James","LA","30.013027","-90.85714","-6","1" +"70087","Saint Rose","LA","29.962601","-90.30965","-6","1" +"70090","Vacherie","LA","29.979997","-90.71178","-6","1" +"70091","Venice","LA","29.277457","-89.35898","-6","1" +"70092","Violet","LA","29.902193","-89.89726","-6","1" +"70093","Violet","LA","29.877893","-89.878719","-6","1" +"70094","Westwego","LA","29.91534","-90.17737","-6","1" +"70096","Westwego","LA","29.677893","-90.0901","-6","1" +"70112","New Orleans","LA","29.956804","-90.07757","-6","1" +"70113","New Orleans","LA","29.943505","-90.08408","-6","1" +"70114","New Orleans","LA","29.938155","-90.03667","-6","1" +"70115","New Orleans","LA","29.927305","-90.10197","-6","1" +"70116","New Orleans","LA","29.968054","-90.06403","-6","1" +"70117","New Orleans","LA","29.970404","-90.03036","-6","1" +"70118","New Orleans","LA","29.952305","-90.12347","-6","1" +"70119","New Orleans","LA","29.974504","-90.08747","-6","1" +"70121","New Orleans","LA","29.961875","-90.16037","-6","1" +"70122","New Orleans","LA","30.006353","-90.06264","-6","1" +"70123","New Orleans","LA","29.952605","-90.20536","-6","1" +"70124","New Orleans","LA","30.006003","-90.10947","-6","1" +"70125","New Orleans","LA","29.951705","-90.10411","-6","1" +"70126","New Orleans","LA","30.016002","-90.01972","-6","1" +"70127","New Orleans","LA","30.033475","-89.97736","-6","1" +"70128","New Orleans","LA","30.05031","-89.95638","-6","1" +"70129","New Orleans","LA","30.063059","-89.88511","-6","1" +"70130","New Orleans","LA","29.938005","-90.07195","-6","1" +"70131","New Orleans","LA","29.917005","-89.98982","-6","1" +"70139","New Orleans","LA","30.032997","-89.882564","-6","1" +"70140","New Orleans","LA","29.95612","-90.078312","-6","1" +"70141","New Orleans","LA","29.677893","-90.0901","-6","1" +"70142","New Orleans","LA","30.032997","-89.882564","-6","1" +"70143","New Orleans","LA","30.032997","-89.882564","-6","1" +"70144","New Orleans","LA","29.930433","-90.038021","-6","1" +"70145","New Orleans","LA","30.032997","-89.882564","-6","1" +"70146","New Orleans","LA","30.032997","-89.882564","-6","1" +"70148","New Orleans","LA","30.030902","-90.068022","-6","1" +"70149","New Orleans","LA","30.032997","-89.882564","-6","1" +"70150","New Orleans","LA","30.032997","-89.882564","-6","1" +"70151","New Orleans","LA","30.032997","-89.882564","-6","1" +"70152","New Orleans","LA","30.032997","-89.882564","-6","1" +"70153","New Orleans","LA","30.032997","-89.882564","-6","1" +"70154","New Orleans","LA","30.032997","-89.882564","-6","1" +"70155","New Orleans","LA","29.940138","-90.109823","-6","1" +"70156","New Orleans","LA","30.032997","-89.882564","-6","1" +"70157","New Orleans","LA","30.032997","-89.882564","-6","1" +"70158","New Orleans","LA","29.922905","-90.070922","-6","1" +"70159","New Orleans","LA","30.032997","-89.882564","-6","1" +"70160","New Orleans","LA","30.032997","-89.882564","-6","1" +"70161","New Orleans","LA","30.032997","-89.882564","-6","1" +"70162","New Orleans","LA","30.032997","-89.882564","-6","1" +"70163","New Orleans","LA","29.95006","-90.07532","-6","1" +"70164","New Orleans","LA","30.032997","-89.882564","-6","1" +"70165","New Orleans","LA","30.032997","-89.882564","-6","1" +"70166","New Orleans","LA","30.032997","-89.882564","-6","1" +"70167","New Orleans","LA","30.032997","-89.882564","-6","1" +"70170","New Orleans","LA","30.032997","-89.882564","-6","1" +"70172","New Orleans","LA","30.032997","-89.882564","-6","1" +"70174","New Orleans","LA","30.032997","-89.882564","-6","1" +"70175","New Orleans","LA","30.032997","-89.882564","-6","1" +"70176","New Orleans","LA","30.032997","-89.882564","-6","1" +"70177","New Orleans","LA","30.032997","-89.882564","-6","1" +"70178","New Orleans","LA","30.032997","-89.882564","-6","1" +"70179","New Orleans","LA","30.032997","-89.882564","-6","1" +"70181","New Orleans","LA","29.677893","-90.0901","-6","1" +"70182","New Orleans","LA","30.067646","-89.815993","-6","1" +"70183","New Orleans","LA","29.677893","-90.0901","-6","1" +"70184","New Orleans","LA","30.032997","-89.882564","-6","1" +"70185","New Orleans","LA","30.032997","-89.882564","-6","1" +"70186","New Orleans","LA","30.032997","-89.882564","-6","1" +"70187","New Orleans","LA","30.032997","-89.882564","-6","1" +"70189","New Orleans","LA","30.032997","-89.882564","-6","1" +"70190","New Orleans","LA","30.032997","-89.882564","-6","1" +"70195","New Orleans","LA","30.032997","-89.882564","-6","1" +"70199","New Orleans","LA","29.987528","-90.079501","-6","1" +"70301","Thibodaux","LA","29.797776","-90.81809","-6","1" +"70302","Thibodaux","LA","29.458689","-90.502848","-6","1" +"70310","Thibodaux","LA","29.803282","-90.816914","-6","1" +"70339","Pierre Part","LA","29.931838","-91.19813","-6","1" +"70340","Amelia","LA","29.688425","-91.220844","-6","1" +"70341","Belle Rose","LA","30.030819","-91.07576","-6","1" +"70342","Berwick","LA","29.692515","-91.22938","-6","1" +"70343","Bourg","LA","29.553952","-90.59881","-6","1" +"70344","Chauvin","LA","29.385126","-90.61939","-6","1" +"70345","Cut Off","LA","29.523897","-90.34043","-6","1" +"70346","Donaldsonville","LA","30.103905","-91.00104","-6","1" +"70352","Donner","LA","29.696385","-90.944418","-6","1" +"70353","Dulac","LA","29.384672","-90.69689","-6","1" +"70354","Galliano","LA","29.435146","-90.30479","-6","1" +"70355","Gheens","LA","29.670214","-90.46202","-6","1" +"70356","Gibson","LA","29.658394","-90.97455","-6","1" +"70357","Golden Meadow","LA","29.275485","-90.24378","-6","1" +"70358","Grand Isle","LA","29.227769","-90.01211","-6","1" +"70359","Gray","LA","29.696636","-90.77238","-6","1" +"70360","Houma","LA","29.593377","-90.7475","-6","1" +"70361","Houma","LA","29.382117","-90.865568","-6","1" +"70363","Houma","LA","29.560581","-90.6903","-6","1" +"70364","Houma","LA","29.626988","-90.72076","-6","1" +"70369","Houma","LA","30.285602","-92.096266","-6","1" +"70371","Kraemer","LA","29.865202","-90.596159","-6","1" +"70372","Labadieville","LA","29.829135","-90.9636","-6","1" +"70373","Larose","LA","29.535139","-90.44546","-6","1" +"70374","Lockport","LA","29.620122","-90.49218","-6","1" +"70375","Mathews","LA","29.697038","-90.55223","-6","1" +"70376","Modeste","LA","30.204707","-90.869481","-6","1" +"70377","Montegut","LA","29.428462","-90.52556","-6","1" +"70380","Morgan City","LA","29.694806","-91.18252","-6","1" +"70381","Morgan City","LA","29.694629","-91.259347","-6","1" +"70384","Cankton","LA","30.350849","-92.107422","-6","1" +"70390","Napoleonville","LA","29.91599","-91.02187","-6","1" +"70391","Paincourtville","LA","29.990967","-91.05456","-6","1" +"70392","Patterson","LA","29.69828","-91.31347","-6","1" +"70393","Plattenville","LA","29.995157","-91.02586","-6","1" +"70394","Raceland","LA","29.715302","-90.6097","-6","1" +"70395","Schriever","LA","29.718856","-90.83425","-6","1" +"70397","Theriot","LA","29.352141","-90.82604","-6","1" +"70401","Hammond","LA","30.517866","-90.47254","-6","1" +"70402","Hammond","LA","30.513982","-90.480403","-6","1" +"70403","Hammond","LA","30.484785","-90.4762","-6","1" +"70404","Hammond","LA","30.505061","-90.422504","-6","1" +"70420","Abita Springs","LA","30.482725","-90.00103","-6","1" +"70421","Akers","LA","30.612371","-90.405312","-6","1" +"70422","Amite","LA","30.723034","-90.52108","-6","1" +"70426","Angie","LA","30.932125","-89.86251","-6","1" +"70427","Bogalusa","LA","30.762908","-89.87774","-6","1" +"70428","Sun","LA","30.591363","-89.941408","-6","1" +"70429","Bogalusa","LA","30.83503","-90.037115","-6","1" +"70431","Bush","LA","30.613004","-89.93089","-6","1" +"70432","Covington","LA","30.496278","-90.131145","-6","1" +"70433","Covington","LA","30.470793","-90.10491","-6","1" +"70434","Covington","LA","30.492753","-90.125666","-6","1" +"70435","Covington","LA","30.53978","-90.07953","-6","1" +"70436","Fluker","LA","30.793858","-90.51026","-6","1" +"70437","Folsom","LA","30.616777","-90.1898","-6","1" +"70438","Franklinton","LA","30.844465","-90.12066","-6","1" +"70440","Mandeville","LA","30.375852","-90.07828","-6","1" +"70441","Greensburg","LA","30.867259","-90.74688","-6","1" +"70442","Husser","LA","30.686968","-90.32332","-6","1" +"70443","Independence","LA","30.628735","-90.51744","-6","1" +"70444","Kentwood","LA","30.923938","-90.50206","-6","1" +"70445","Lacombe","LA","30.327126","-89.93118","-6","1" +"70446","Loranger","LA","30.623502","-90.35689","-6","1" +"70447","Madisonville","LA","30.424049","-90.18519","-6","1" +"70448","Mandeville","LA","30.367119","-90.05999","-6","1" +"70449","Maurepas","LA","30.272335","-90.72701","-6","1" +"70450","Mount Hermon","LA","30.944302","-90.26252","-6","1" +"70451","Natalbany","LA","30.546528","-90.48375","-6","1" +"70452","Pearl River","LA","30.401481","-89.76917","-6","1" +"70453","Pine Grove","LA","30.702471","-90.77604","-6","1" +"70454","Ponchatoula","LA","30.427599","-90.41728","-6","1" +"70455","Robert","LA","30.520782","-90.30638","-6","1" +"70456","Roseland","LA","30.769493","-90.51064","-6","1" +"70457","Saint Benedict","LA","30.42551","-89.881256","-6","1" +"70458","Slidell","LA","30.269565","-89.77587","-6","1" +"70459","Slidell","LA","30.42551","-89.881256","-6","1" +"70460","Slidell","LA","30.298048","-89.81176","-6","1" +"70461","Slidell","LA","30.266707","-89.73049","-6","1" +"70462","Springfield","LA","30.386031","-90.57297","-6","1" +"70463","Sun","LA","30.658471","-89.90398","-6","1" +"70464","Talisheek","LA","30.534785","-89.88582","-6","1" +"70465","Tangipahoa","LA","30.875453","-90.51254","-6","1" +"70466","Tickfaw","LA","30.560995","-90.50196","-6","1" +"70467","Angie","LA","30.90169","-89.820725","-6","1" +"70469","Slidell","LA","30.42551","-89.881256","-6","1" +"70470","Mandeville","LA","30.42551","-89.881256","-6","1" +"70471","Mandeville","LA","30.400949","-90.08105","-6","1" +"70494","Ponchatoula","LA","30.432586","-90.452775","-6","1" +"70499","Franklinton","LA","30.847346","-90.154156","-6","1" +"70501","Lafayette","LA","30.2334","-92.00959","-6","1" +"70502","Lafayette","LA","30.319799","-92.026969","-6","1" +"70503","Lafayette","LA","30.185867","-92.04706","-6","1" +"70504","Lafayette","LA","30.21385","-92.01866","-6","1" +"70505","Lafayette","LA","30.202251","-92.01877","-6","1" +"70506","Lafayette","LA","30.211901","-92.05912","-6","1" +"70507","Lafayette","LA","30.2786","-92.02759","-6","1" +"70508","Lafayette","LA","30.163368","-92.01974","-6","1" +"70509","Lafayette","LA","30.156506","-92.000019","-6","1" +"70510","Abbeville","LA","29.943573","-92.14872","-6","1" +"70511","Abbeville","LA","30.032434","-92.176655","-6","1" +"70512","Arnaudville","LA","30.411741","-91.91702","-6","1" +"70513","Avery Island","LA","29.907136","-91.90578","-6","1" +"70514","Baldwin","LA","29.841827","-91.54679","-6","1" +"70515","Basile","LA","30.47461","-92.58568","-6","1" +"70516","Branch","LA","30.365586","-92.30363","-6","1" +"70517","Breaux Bridge","LA","30.301254","-91.86169","-6","1" +"70518","Broussard","LA","30.134801","-91.95251","-6","1" +"70519","Cade","LA","30.079692","-91.911387","-6","1" +"70520","Carencro","LA","30.327199","-92.0433","-6","1" +"70521","Cecilia","LA","30.336379","-91.84786","-6","1" +"70522","Centerville","LA","29.75226","-91.439679","-6","1" +"70523","Charenton","LA","29.883266","-91.5301","-6","1" +"70524","Chataignier","LA","30.566122","-92.32115","-6","1" +"70525","Church Point","LA","30.414588","-92.21772","-6","1" +"70526","Crowley","LA","30.213767","-92.37921","-6","1" +"70527","Crowley","LA","30.228409","-92.301795","-6","1" +"70528","Delcambre","LA","29.945707","-91.98682","-6","1" +"70529","Duson","LA","30.198258","-92.16211","-6","1" +"70531","Egan","LA","30.237007","-92.51199","-6","1" +"70532","Elton","LA","30.477275","-92.69691","-6","1" +"70533","Erath","LA","29.941157","-92.03811","-6","1" +"70534","Estherwood","LA","30.182784","-92.46576","-6","1" +"70535","Eunice","LA","30.492895","-92.41578","-6","1" +"70537","Evangeline","LA","30.261809","-92.5677","-6","1" +"70538","Franklin","LA","29.759314","-91.52561","-6","1" +"70540","Garden City","LA","29.761665","-91.46569","-6","1" +"70541","Grand Coteau","LA","30.419571","-92.04753","-6","1" +"70542","Gueydan","LA","30.005408","-92.54417","-6","1" +"70543","Iota","LA","30.328683","-92.49549","-6","1" +"70544","Jeanerette","LA","29.910582","-91.6698","-6","1" +"70546","Jennings","LA","30.242533","-92.66375","-6","1" +"70548","Kaplan","LA","29.984184","-92.3207","-6","1" +"70549","Lake Arthur","LA","30.082515","-92.72596","-6","1" +"70550","Lawtell","LA","30.517709","-92.1835","-6","1" +"70551","Leonville","LA","30.475194","-91.973736","-6","1" +"70552","Loreauville","LA","30.076638","-91.71294","-6","1" +"70554","Mamou","LA","30.63","-92.42652","-6","1" +"70555","Maurice","LA","30.101305","-92.13152","-6","1" +"70556","Mermentau","LA","30.188258","-92.57614","-6","1" +"70558","Milton","LA","30.101464","-92.06338","-6","1" +"70559","Morse","LA","30.142775","-92.51166","-6","1" +"70560","New Iberia","LA","29.975453","-91.84073","-6","1" +"70562","New Iberia","LA","29.739932","-91.6331","-6","1" +"70563","New Iberia","LA","30.022348","-91.78314","-6","1" +"70569","Lydia","LA","29.909643","-91.812552","-6","1" +"70570","Opelousas","LA","30.530965","-92.09521","-6","1" +"70571","Opelousas","LA","30.57445","-92.086077","-6","1" +"70575","Perry","LA","29.866543","-92.158982","-6","1" +"70576","Pine Prairie","LA","30.781744","-92.41968","-6","1" +"70577","Port Barre","LA","30.549089","-91.93006","-6","1" +"70578","Rayne","LA","30.234581","-92.26431","-6","1" +"70580","Reddell","LA","30.675449","-92.42562","-6","1" +"70581","Roanoke","LA","30.24711","-92.73951","-6","1" +"70582","Saint Martinville","LA","30.148473","-91.8003","-6","1" +"70583","Scott","LA","30.244311","-92.10099","-6","1" +"70584","Sunset","LA","30.394648","-92.07786","-6","1" +"70585","Turkey Creek","LA","30.871853","-92.40532","-6","1" +"70586","Ville Platte","LA","30.710639","-92.30628","-6","1" +"70589","Washington","LA","30.653805","-92.05479","-6","1" +"70591","Welsh","LA","30.246368","-92.83199","-6","1" +"70592","Youngsville","LA","30.103107","-91.99993","-6","1" +"70593","Lafayette","LA","30.20812","-92.095109","-6","1" +"70594","Raceland","LA","29.700243","-90.570722","-6","1" +"70596","Lafayette","LA","30.20812","-92.095109","-6","1" +"70598","Lafayette","LA","30.20812","-92.095109","-6","1" +"70601","Lake Charles","LA","30.226399","-93.20496","-6","1" +"70602","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70605","Lake Charles","LA","30.165907","-93.24905","-6","1" +"70606","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70607","Lake Charles","LA","30.129908","-93.19632","-6","1" +"70609","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70611","Lake Charles","LA","30.32797","-93.2109","-6","1" +"70612","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70615","Lake Charles","LA","30.239906","-93.14977","-6","1" +"70616","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70629","Lake Charles","LA","30.264232","-93.326527","-6","1" +"70630","Bell City","LA","30.077002","-93.03224","-6","1" +"70631","Cameron","LA","29.778234","-93.40907","-6","1" +"70632","Creole","LA","29.836547","-93.0363","-6","1" +"70633","Dequincy","LA","30.44431","-93.41221","-6","1" +"70634","Deridder","LA","30.835881","-93.27071","-6","1" +"70637","Dry Creek","LA","30.685067","-92.98065","-6","1" +"70638","Elizabeth","LA","30.86741","-92.79442","-6","1" +"70639","Evans","LA","30.994164","-93.49998","-6","1" +"70640","Fenton","LA","30.366126","-92.91837","-6","1" +"70642","Fullerton","LA","31.111979","-93.200936","-6","1" +"70643","Grand Chenier","LA","29.77124","-92.88732","-6","1" +"70644","Grant","LA","30.799893","-92.94408","-6","1" +"70645","Hackberry","LA","29.995358","-93.37575","-6","1" +"70646","Hayes","LA","30.107308","-92.91992","-6","1" +"70647","Iowa","LA","30.243213","-93.00386","-6","1" +"70648","Kinder","LA","30.494379","-92.85992","-6","1" +"70650","Lacassine","LA","30.235892","-92.91527","-6","1" +"70651","Leblanc","LA","30.518729","-92.96199","-6","1" +"70652","Longville","LA","30.599065","-93.2561","-6","1" +"70653","Merryville","LA","30.685274","-93.55827","-6","1" +"70654","Mittie","LA","30.710561","-92.89081","-6","1" +"70655","Oberlin","LA","30.620456","-92.74582","-6","1" +"70656","Pitkin","LA","30.937089","-92.94802","-6","1" +"70657","Ragley","LA","30.472103","-93.13957","-6","1" +"70658","Reeves","LA","30.518748","-93.02735","-6","1" +"70659","Rosepine","LA","30.921274","-93.28194","-6","1" +"70660","Singer","LA","30.586251","-93.42135","-6","1" +"70661","Starks","LA","30.338939","-93.66472","-6","1" +"70662","Sugartown","LA","30.811926","-93.00582","-6","1" +"70663","Sulphur","LA","30.245205","-93.3636","-6","1" +"70664","Sulphur","LA","30.264232","-93.326527","-6","1" +"70665","Sulphur","LA","30.154028","-93.42412","-6","1" +"70668","Vinton","LA","30.183689","-93.59815","-6","1" +"70669","Westlake","LA","30.251665","-93.27047","-6","1" +"70704","Baker","LA","30.51589","-91.080373","-6","1" +"70706","Denham Springs","LA","30.608471","-90.92758","-6","1" +"70707","Gonzales","LA","30.204707","-90.869481","-6","1" +"70710","Addis","LA","30.350306","-91.26121","-6","1" +"70711","Albany","LA","30.508318","-90.58546","-6","1" +"70712","Angola","LA","30.949066","-91.59294","-6","1" +"70714","Baker","LA","30.584787","-91.14763","-6","1" +"70715","Batchelor","LA","30.822847","-91.70531","-6","1" +"70716","Bayou Goula","LA","30.261384","-91.36026","-6","1" +"70717","Blanks","LA","30.547187","-91.59119","-6","1" +"70718","Brittany","LA","30.201004","-90.868876","-6","1" +"70719","Brusly","LA","30.384402","-91.25549","-6","1" +"70720","Bueche","LA","30.587305","-91.33252","-6","1" +"70721","Carville","LA","30.216906","-91.07975","-6","1" +"70722","Clinton","LA","30.823174","-90.921","-6","1" +"70723","Convent","LA","30.063433","-90.84644","-6","1" +"70725","Darrow","LA","30.130584","-90.95909","-6","1" +"70726","Denham Springs","LA","30.468526","-90.92827","-6","1" +"70727","Denham Springs","LA","30.337495","-90.843449","-6","1" +"70728","Duplessis","LA","30.295446","-90.945836","-6","1" +"70729","Erwinville","LA","30.546033","-91.41898","-6","1" +"70730","Ethel","LA","30.810733","-91.11541","-6","1" +"70732","Fordoche","LA","30.605673","-91.61612","-6","1" +"70733","French Settlement","LA","30.307865","-90.80054","-6","1" +"70734","Geismar","LA","30.211172","-91.00875","-6","1" +"70736","Glynn","LA","30.633678","-91.33786","-6","1" +"70737","Gonzales","LA","30.229237","-90.92251","-6","1" +"70738","Burnside","LA","30.204707","-90.869481","-6","1" +"70739","Greenwell Springs","LA","30.585687","-90.98014","-6","1" +"70740","Grosse Tete","LA","30.399271","-91.42148","-6","1" +"70743","Hester","LA","30.019278","-90.77619","-6","1" +"70744","Holden","LA","30.535477","-90.67464","-6","1" +"70747","Innis","LA","30.878083","-91.67672","-6","1" +"70748","Jackson","LA","30.826285","-91.22812","-6","1" +"70749","Jarreau","LA","30.622391","-91.41468","-6","1" +"70750","Krotz Springs","LA","30.514159","-91.74246","-6","1" +"70751","Labarre","LA","30.7513","-91.566273","-6","1" +"70752","Lakeland","LA","30.587852","-91.39994","-6","1" +"70753","Lettsworth","LA","30.917437","-91.7126","-6","1" +"70754","Livingston","LA","30.447866","-90.75228","-6","1" +"70755","Livonia","LA","30.568308","-91.55075","-6","1" +"70756","Lottie","LA","30.548421","-91.6325","-6","1" +"70757","Maringouin","LA","30.483791","-91.51619","-6","1" +"70759","Morganza","LA","30.720494","-91.58029","-6","1" +"70760","New Roads","LA","30.700337","-91.44032","-6","1" +"70761","Norwood","LA","30.972292","-91.07895","-6","1" +"70762","Oscar","LA","30.609979","-91.46181","-6","1" +"70763","Paulina","LA","30.03318","-90.73674","-6","1" +"70764","Plaquemine","LA","30.270694","-91.24853","-6","1" +"70765","Plaquemine","LA","30.261384","-91.36026","-6","1" +"70767","Port Allen","LA","30.473536","-91.26324","-6","1" +"70769","Prairieville","LA","30.31144","-90.93955","-6","1" +"70770","Pride","LA","30.642585","-90.99489","-6","1" +"70772","Rosedale","LA","30.439483","-91.46806","-6","1" +"70773","Rougon","LA","30.613588","-91.36361","-6","1" +"70774","Saint Amant","LA","30.212699","-90.81947","-6","1" +"70775","Saint Francisville","LA","30.857355","-91.37308","-6","1" +"70776","Saint Gabriel","LA","30.264611","-91.09595","-6","1" +"70777","Slaughter","LA","30.722133","-91.10915","-6","1" +"70778","Sorrento","LA","30.182068","-90.85707","-6","1" +"70780","Sunshine","LA","30.287104","-91.15362","-6","1" +"70781","Torbert","LA","30.561065","-91.48607","-6","1" +"70782","Tunica","LA","30.934986","-91.53701","-6","1" +"70783","Ventress","LA","30.680083","-91.39852","-6","1" +"70784","Wakefield","LA","30.917453","-91.358149","-6","1" +"70785","Walker","LA","30.521962","-90.84035","-6","1" +"70786","Watson","LA","30.550219","-90.958219","-6","1" +"70787","Weyanoke","LA","30.962103","-91.47351","-6","1" +"70788","White Castle","LA","30.153959","-91.1593","-6","1" +"70789","Wilson","LA","30.925815","-91.09672","-6","1" +"70791","Zachary","LA","30.655578","-91.14015","-6","1" +"70792","Uncle Sam","LA","30.027914","-90.802759","-6","1" +"70801","Baton Rouge","LA","30.44884","-91.18633","-6","1" +"70802","Baton Rouge","LA","30.44629","-91.17305","-6","1" +"70803","Baton Rouge","LA","30.405002","-91.186834","-6","1" +"70804","Baton Rouge","LA","30.386267","-91.133905","-6","1" +"70805","Baton Rouge","LA","30.485639","-91.15612","-6","1" +"70806","Baton Rouge","LA","30.44495","-91.13806","-6","1" +"70807","Baton Rouge","LA","30.534088","-91.17865","-6","1" +"70808","Baton Rouge","LA","30.411391","-91.1497","-6","1" +"70809","Baton Rouge","LA","30.403341","-91.08035","-6","1" +"70810","Baton Rouge","LA","30.361609","-91.09041","-6","1" +"70811","Baton Rouge","LA","30.525121","-91.13185","-6","1" +"70812","Baton Rouge","LA","30.504989","-91.1188","-6","1" +"70813","Baton Rouge","LA","30.520111","-91.194863","-6","1" +"70814","Baton Rouge","LA","30.484756","-91.06862","-6","1" +"70815","Baton Rouge","LA","30.45514","-91.06358","-6","1" +"70816","Baton Rouge","LA","30.425791","-91.03815","-6","1" +"70817","Baton Rouge","LA","30.387642","-90.99921","-6","1" +"70818","Baton Rouge","LA","30.537938","-91.04812","-6","1" +"70819","Baton Rouge","LA","30.46534","-91.01659","-6","1" +"70820","Baton Rouge","LA","30.373865","-91.17065","-6","1" +"70821","Baton Rouge","LA","30.461252","-91.044723","-6","1" +"70822","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70823","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70825","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70826","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70827","Baton Rouge","LA","30.433837","-91.082468","-6","1" +"70831","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70832","Elton","LA","30.484853","-92.694679","-6","1" +"70833","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70835","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70836","Baton Rouge","LA","30.388292","-91.08631","-6","1" +"70837","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70848","Baton Rouge","LA","30.433083","-91.102808","-6","1" +"70874","Baton Rouge","LA","30.590238","-91.2054","-6","1" +"70879","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70883","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70884","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70892","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70893","Baton Rouge","LA","30.412991","-91.171456","-6","1" +"70894","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70895","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70896","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70898","Baton Rouge","LA","30.51589","-91.080373","-6","1" +"70952","Youngsville","LA","30.117148","-91.990319","-6","1" +"71001","Arcadia","LA","32.57761","-92.9062","-6","1" +"71002","Ashland","LA","32.129489","-93.08273","-6","1" +"71003","Athens","LA","32.642811","-93.01709","-6","1" +"71004","Belcher","LA","32.765739","-93.88028","-6","1" +"71006","Benton","LA","32.697056","-93.6991","-6","1" +"71007","Bethany","LA","32.420611","-94.00923","-6","1" +"71008","Bienville","LA","32.331964","-92.95173","-6","1" +"71009","Blanchard","LA","32.579853","-93.89317","-6","1" +"71016","Castor","LA","32.204949","-93.10383","-6","1" +"71018","Cotton Valley","LA","32.803257","-93.40802","-6","1" +"71019","Coushatta","LA","32.050033","-93.31928","-6","1" +"71021","Cullen","LA","32.969535","-93.44959","-6","1" +"71023","Doyline","LA","32.487485","-93.39035","-6","1" +"71024","Dubberly","LA","32.502528","-93.21326","-6","1" +"71025","East Point","LA","32.062391","-93.367949","-6","1" +"71027","Frierson","LA","32.234006","-93.69008","-6","1" +"71028","Gibsland","LA","32.518748","-93.05705","-6","1" +"71029","Gilliam","LA","32.828541","-93.83918","-6","1" +"71030","Gloster","LA","32.191147","-93.8191","-6","1" +"71031","Goldonna","LA","32.01716","-92.9059","-6","1" +"71032","Grand Cane","LA","32.110359","-93.78584","-6","1" +"71033","Greenwood","LA","32.453029","-93.99683","-6","1" +"71034","Hall Summit","LA","32.176112","-93.30398","-6","1" +"71036","Harmon","LA","32.062391","-93.367949","-6","1" +"71037","Haughton","LA","32.569798","-93.55133","-6","1" +"71038","Haynesville","LA","32.954851","-93.11344","-6","1" +"71039","Heflin","LA","32.429157","-93.29549","-6","1" +"71040","Homer","LA","32.78288","-93.03176","-6","1" +"71043","Hosston","LA","32.890777","-93.87995","-6","1" +"71044","Ida","LA","32.983957","-93.89254","-6","1" +"71045","Jamestown","LA","32.342739","-93.16075","-6","1" +"71046","Keatchie","LA","32.168532","-93.95402","-6","1" +"71047","Keithville","LA","32.309864","-93.87089","-6","1" +"71048","Lisbon","LA","32.830135","-92.85568","-6","1" +"71049","Logansport","LA","31.991863","-93.98356","-6","1" +"71050","Longstreet","LA","32.117539","-93.913834","-6","1" +"71051","Elm Grove","LA","32.31718","-93.50366","-6","1" +"71052","Mansfield","LA","32.031067","-93.68585","-6","1" +"71053","South Mansfield","LA","32.048905","-93.608059","-6","1" +"71055","Minden","LA","32.631009","-93.28751","-6","1" +"71058","Minden","LA","32.576948","-93.250705","-6","1" +"71059","Mansfield","LA","32.044529","-93.691972","-6","1" +"71060","Mooringsport","LA","32.679068","-93.97534","-6","1" +"71061","Oil City","LA","32.748354","-93.97188","-6","1" +"71063","Pelican","LA","31.920574","-93.48365","-6","1" +"71064","Plain Dealing","LA","32.913383","-93.68912","-6","1" +"71065","Pleasant Hill","LA","31.810803","-93.5082","-6","1" +"71066","Powhatan","LA","31.874172","-93.19719","-6","1" +"71067","Princeton","LA","32.596886","-93.5026","-6","1" +"71068","Ringgold","LA","32.304429","-93.33008","-6","1" +"71069","Rodessa","LA","32.978828","-93.99733","-6","1" +"71070","Saline","LA","32.122435","-92.98414","-6","1" +"71071","Sarepta","LA","32.924798","-93.45295","-6","1" +"71072","Shongaloo","LA","32.941481","-93.3102","-6","1" +"71073","Sibley","LA","32.535107","-93.30297","-6","1" +"71075","Springhill","LA","32.994597","-93.45992","-6","1" +"71076","Castor","LA","32.25043","-93.155616","-6","1" +"71078","Stonewall","LA","32.278422","-93.79469","-6","1" +"71079","Summerfield","LA","32.937726","-92.80471","-6","1" +"71080","Taylor","LA","32.366002","-93.101086","-6","1" +"71082","Vivian","LA","32.849008","-93.97599","-6","1" +"71095","Jamestown","LA","32.34205","-93.203923","-6","1" +"71101","Shreveport","LA","32.505352","-93.74861","-6","1" +"71102","Shreveport","LA","32.607556","-93.75256","-6","1" +"71103","Shreveport","LA","32.490777","-93.76761","-6","1" +"71104","Shreveport","LA","32.484232","-93.73671","-6","1" +"71105","Shreveport","LA","32.457903","-93.7133","-6","1" +"71106","Shreveport","LA","32.426104","-93.74542","-6","1" +"71107","Shreveport","LA","32.56443","-93.8305","-6","1" +"71108","Shreveport","LA","32.449286","-93.78","-6","1" +"71109","Shreveport","LA","32.474453","-93.80022","-6","1" +"71110","Barksdale AFB","LA","32.477994","-93.61918","-6","1" +"71111","Bossier City","LA","32.552315","-93.70836","-6","1" +"71112","Bossier City","LA","32.478752","-93.6704","-6","1" +"71113","Bossier City","LA","32.62762","-93.608968","-6","1" +"71115","Shreveport","LA","32.350987","-93.62938","-6","1" +"71118","Shreveport","LA","32.397255","-93.8043","-6","1" +"71119","Shreveport","LA","32.487601","-93.89064","-6","1" +"71120","Shreveport","LA","32.607556","-93.75256","-6","1" +"71129","Shreveport","LA","32.42067","-93.8877","-6","1" +"71130","Shreveport","LA","32.607556","-93.75256","-6","1" +"71133","Shreveport","LA","32.607556","-93.75256","-6","1" +"71134","Shreveport","LA","32.607556","-93.75256","-6","1" +"71135","Shreveport","LA","32.607556","-93.75256","-6","1" +"71136","Shreveport","LA","32.607556","-93.75256","-6","1" +"71137","Shreveport","LA","32.607556","-93.75256","-6","1" +"71138","Shreveport","LA","32.607556","-93.75256","-6","1" +"71148","Shreveport","LA","32.607556","-93.75256","-6","1" +"71149","Shreveport","LA","32.607556","-93.75256","-6","1" +"71151","Shreveport","LA","32.607556","-93.75256","-6","1" +"71152","Shreveport","LA","32.607556","-93.75256","-6","1" +"71153","Shreveport","LA","32.607556","-93.75256","-6","1" +"71154","Shreveport","LA","32.607556","-93.75256","-6","1" +"71156","Shreveport","LA","32.607556","-93.75256","-6","1" +"71161","Shreveport","LA","32.607556","-93.75256","-6","1" +"71162","Shreveport","LA","32.607556","-93.75256","-6","1" +"71163","Shreveport","LA","32.607556","-93.75256","-6","1" +"71164","Shreveport","LA","32.607556","-93.75256","-6","1" +"71165","Shreveport","LA","32.607556","-93.75256","-6","1" +"71166","Shreveport","LA","32.607556","-93.75256","-6","1" +"71171","Bossier City","LA","32.62762","-93.608968","-6","1" +"71172","Bossier City","LA","32.62762","-93.608968","-6","1" +"71201","Monroe","LA","32.519393","-92.10755","-6","1" +"71202","Monroe","LA","32.456862","-92.08881","-6","1" +"71203","Monroe","LA","32.547067","-92.04384","-6","1" +"71207","Monroe","LA","32.490777","-92.159354","-6","1" +"71208","Monroe","LA","32.496764","-92.075615","-6","1" +"71209","Monroe","LA","32.527693","-92.075583","-6","1" +"71210","Monroe","LA","32.490777","-92.159354","-6","1" +"71211","Monroe","LA","32.490777","-92.159354","-6","1" +"71212","Monroe","LA","32.528593","-92.072683","-6","1" +"71213","Monroe","LA","32.490777","-92.159354","-6","1" +"71218","Archibald","LA","32.350427","-91.7722","-6","1" +"71219","Baskin","LA","32.308243","-91.71527","-6","1" +"71220","Bastrop","LA","32.814969","-91.90678","-6","1" +"71221","Bastrop","LA","32.823863","-91.843528","-6","1" +"71222","Bernice","LA","32.829213","-92.65296","-6","1" +"71223","Bonita","LA","32.919093","-91.67737","-6","1" +"71225","Calhoun","LA","32.507942","-92.34923","-6","1" +"71226","Chatham","LA","32.277816","-92.45283","-6","1" +"71227","Choudrant","LA","32.533389","-92.49164","-6","1" +"71229","Collinston","LA","32.678312","-91.89546","-6","1" +"71230","Crowville","LA","32.138935","-91.691899","-6","1" +"71232","Delhi","LA","32.438621","-91.50809","-6","1" +"71233","Delta","LA","32.341594","-91.216458","-6","1" +"71234","Downsville","LA","32.641967","-92.3529","-6","1" +"71235","Dubach","LA","32.683644","-92.67179","-6","1" +"71237","Epps","LA","32.597244","-91.47664","-6","1" +"71238","Eros","LA","32.361562","-92.37517","-6","1" +"71240","Fairbanks","LA","32.490777","-92.159354","-6","1" +"71241","Farmerville","LA","32.764289","-92.37657","-6","1" +"71242","Forest","LA","32.82388","-91.398944","-6","1" +"71243","Fort Necessity","LA","31.950754","-91.78463","-6","1" +"71245","Grambling","LA","32.526277","-92.71794","-6","1" +"71247","Hodge","LA","32.272141","-92.72489","-6","1" +"71249","Jigger","LA","32.138935","-91.691899","-6","1" +"71250","Jones","LA","32.978295","-91.61945","-6","1" +"71251","Jonesboro","LA","32.229884","-92.69763","-6","1" +"71253","Kilbourne","LA","32.995821","-91.31686","-6","1" +"71254","Lake Providence","LA","32.806899","-91.20759","-6","1" +"71256","Lillie","LA","32.957004","-92.70152","-6","1" +"71259","Mangham","LA","32.286179","-91.80804","-6","1" +"71260","Marion","LA","32.885372","-92.23581","-6","1" +"71261","Mer Rouge","LA","32.770852","-91.74361","-6","1" +"71263","Oak Grove","LA","32.887552","-91.4107","-6","1" +"71264","Oak Ridge","LA","32.601149","-91.79917","-6","1" +"71266","Pioneer","LA","32.714211","-91.45776","-6","1" +"71268","Quitman","LA","32.341112","-92.72027","-6","1" +"71269","Rayville","LA","32.457301","-91.78754","-6","1" +"71270","Ruston","LA","32.52476","-92.64696","-6","1" +"71272","Ruston","LA","32.525825","-92.649298","-6","1" +"71273","Ruston","LA","32.606535","-92.648384","-6","1" +"71275","Simsboro","LA","32.513699","-92.80633","-6","1" +"71276","Sondheimer","LA","32.582205","-91.11541","-6","1" +"71277","Spearsville","LA","32.957393","-92.57935","-6","1" +"71279","Start","LA","32.49191","-91.856326","-6","1" +"71280","Sterlington","LA","32.700356","-92.08283","-6","1" +"71281","Swartz","LA","32.490777","-92.159354","-6","1" +"71282","Tallulah","LA","32.397286","-91.17657","-6","1" +"71284","Tallulah","LA","32.341594","-91.216458","-6","1" +"71286","Transylvania","LA","32.660116","-91.20531","-6","1" +"71291","West Monroe","LA","32.526944","-92.1599","-6","1" +"71292","West Monroe","LA","32.456034","-92.18276","-6","1" +"71294","West Monroe","LA","32.490777","-92.159354","-6","1" +"71295","Winnsboro","LA","32.156791","-91.72874","-6","1" +"71301","Alexandria","LA","31.294532","-92.46015","-6","1" +"71302","Alexandria","LA","31.261716","-92.42469","-6","1" +"71303","Alexandria","LA","31.302432","-92.50515","-6","1" +"71306","Alexandria","LA","31.075638","-92.446135","-6","1" +"71307","Alexandria","LA","31.203393","-92.526927","-6","1" +"71309","Alexandria","LA","31.30473","-92.619593","-6","1" +"71315","Alexandria","LA","31.139651","-92.398384","-6","1" +"71316","Acme","LA","31.252471","-91.77031","-6","1" +"71320","Bordelonville","LA","31.1741","-91.72501","-6","1" +"71322","Bunkie","LA","30.920328","-92.16809","-6","1" +"71323","Center Point","LA","31.247945","-92.21624","-6","1" +"71324","Chase","LA","32.138935","-91.691899","-6","1" +"71325","Cheneyville","LA","30.996931","-92.32228","-6","1" +"71326","Clayton","LA","31.755985","-91.57852","-6","1" +"71327","Cottonport","LA","30.98676","-92.04319","-6","1" +"71328","Deville","LA","31.365331","-92.19546","-6","1" +"71329","Dupont","LA","31.095889","-91.97899","-6","1" +"71330","Echo","LA","31.110171","-92.23657","-6","1" +"71331","Effie","LA","31.21968","-92.07345","-6","1" +"71333","Evergreen","LA","30.930026","-92.08955","-6","1" +"71334","Ferriday","LA","31.667978","-91.51382","-6","1" +"71336","Gilbert","LA","32.037425","-91.64475","-6","1" +"71339","Hamburg","LA","31.024614","-91.92715","-6","1" +"71340","Harrisonburg","LA","31.765818","-91.82382","-6","1" +"71341","Hessmer","LA","31.060792","-92.15702","-6","1" +"71342","Jena","LA","31.654792","-92.12872","-6","1" +"71343","Jonesville","LA","31.586986","-91.86725","-6","1" +"71345","Lebeau","LA","30.728695","-91.9727","-6","1" +"71346","Lecompte","LA","31.114462","-92.40455","-6","1" +"71348","Libuse","LA","31.203393","-92.526927","-6","1" +"71350","Mansura","LA","31.067379","-92.05447","-6","1" +"71351","Marksville","LA","31.140727","-92.08056","-6","1" +"71353","Melville","LA","30.698425","-91.75288","-6","1" +"71354","Monterey","LA","31.381317","-91.76914","-6","1" +"71355","Moreauville","LA","31.05305","-91.91001","-6","1" +"71356","Morrow","LA","30.835875","-92.06564","-6","1" +"71357","Newellton","LA","32.090387","-91.24121","-6","1" +"71358","Palmetto","LA","30.717386","-91.89085","-6","1" +"71359","Pineville","LA","31.203393","-92.526927","-6","1" +"71360","Pineville","LA","31.352105","-92.4006","-6","1" +"71361","Pineville","LA","31.36923","-92.419836","-6","1" +"71362","Plaucheville","LA","30.945975","-91.95294","-6","1" +"71363","Rhinehart","LA","31.596272","-91.77941","-6","1" +"71365","Ruby","LA","31.203393","-92.526927","-6","1" +"71366","Saint Joseph","LA","31.924224","-91.31265","-6","1" +"71367","Saint Landry","LA","30.895994","-92.3126","-6","1" +"71368","Sicily Island","LA","31.85889","-91.67463","-6","1" +"71369","Simmesport","LA","30.966506","-91.82242","-6","1" +"71371","Trout","LA","31.695553","-92.22751","-6","1" +"71373","Vidalia","LA","31.540784","-91.48698","-6","1" +"71375","Waterproof","LA","31.796575","-91.4343","-6","1" +"71377","Wildsville","LA","31.615767","-91.78713","-6","1" +"71378","Wisner","LA","31.938233","-91.70832","-6","1" +"71401","Aimwell","LA","31.769334","-91.97998","-6","1" +"71403","Anacoco","LA","31.215039","-93.42301","-6","1" +"71404","Atlanta","LA","31.755314","-92.75474","-6","1" +"71405","Ball","LA","31.415125","-92.394536","-6","1" +"71406","Belmont","LA","31.733049","-93.51746","-6","1" +"71407","Bentley","LA","31.527479","-92.48404","-6","1" +"71409","Boyce","LA","31.332031","-92.67485","-6","1" +"71410","Calvin","LA","31.963299","-92.77985","-6","1" +"71411","Campti","LA","31.903462","-93.09805","-6","1" +"71414","Clarence","LA","31.817257","-93.02552","-6","1" +"71415","Clarks","LA","32.026445","-92.13951","-6","1" +"71416","Cloutierville","LA","31.541077","-92.89842","-6","1" +"71417","Colfax","LA","31.5254","-92.6815","-6","1" +"71418","Columbia","LA","32.130124","-92.06755","-6","1" +"71419","Converse","LA","31.80442","-93.71835","-6","1" +"71422","Dodson","LA","32.08115","-92.63979","-6","1" +"71423","Dry Prong","LA","31.563093","-92.54954","-6","1" +"71424","Elmer","LA","31.168617","-92.6977","-6","1" +"71425","Enterprise","LA","31.899409","-91.91043","-6","1" +"71426","Fisher","LA","31.492622","-93.46457","-6","1" +"71427","Flatwoods","LA","31.378139","-92.88735","-6","1" +"71428","Flora","LA","31.612444","-93.097958","-6","1" +"71429","Florien","LA","31.398236","-93.44422","-6","1" +"71430","Forest Hill","LA","31.050239","-92.52474","-6","1" +"71431","Gardner","LA","31.258681","-92.677545","-6","1" +"71432","Georgetown","LA","31.759474","-92.38927","-6","1" +"71433","Glenmora","LA","31.004922","-92.62099","-6","1" +"71434","Gorum","LA","31.440908","-92.94724","-6","1" +"71435","Grayson","LA","32.024884","-92.16421","-6","1" +"71436","McNary","LA","30.97759","-92.572039","-6","1" +"71438","Hineston","LA","31.118135","-92.79996","-6","1" +"71439","Hornbeck","LA","31.330255","-93.38882","-6","1" +"71440","Joyce","LA","31.951166","-92.565884","-6","1" +"71441","Kelly","LA","31.95047","-92.15107","-6","1" +"71443","Kurthwood","LA","31.1019","-93.361238","-6","1" +"71444","Lacamp","LA","31.120174","-93.104943","-6","1" +"71446","Leesville","LA","31.138723","-93.22745","-6","1" +"71447","Lena","LA","31.452874","-92.79465","-6","1" +"71448","Longleaf","LA","31.203393","-92.526927","-6","1" +"71449","Many","LA","31.514631","-93.54869","-6","1" +"71450","Marthaville","LA","31.77112","-93.41547","-6","1" +"71452","Melrose","LA","31.612618","-92.98075","-6","1" +"71454","Montgomery","LA","31.671252","-92.85932","-6","1" +"71455","Mora","LA","31.371519","-92.97318","-6","1" +"71456","Natchez","LA","31.660742","-92.98886","-6","1" +"71457","Natchitoches","LA","31.751287","-93.09021","-6","1" +"71458","Natchitoches","LA","31.747563","-93.079055","-6","1" +"71459","Leesville","LA","31.072209","-93.21762","-6","1" +"71460","Negreet","LA","31.448907","-93.621234","-6","1" +"71461","Newllano","LA","31.114793","-93.27979","-6","1" +"71462","Noble","LA","31.672295","-93.71997","-6","1" +"71463","Oakdale","LA","30.806617","-92.65224","-6","1" +"71465","Olla","LA","31.861406","-92.19259","-6","1" +"71466","Otis","LA","31.200922","-92.72641","-6","1" +"71467","Pollock","LA","31.529155","-92.39418","-6","1" +"71468","Provencal","LA","31.494144","-93.17508","-6","1" +"71469","Robeline","LA","31.693192","-93.29586","-6","1" +"71471","Saint Maurice","LA","31.749699","-92.927989","-6","1" +"71472","Sieper","LA","31.206148","-92.80459","-6","1" +"71473","Sikes","LA","32.100491","-92.43442","-6","1" +"71474","Simpson","LA","31.252873","-93.02395","-6","1" +"71475","Slagle","LA","31.111979","-93.200936","-6","1" +"71477","Tioga","LA","31.399855","-92.604193","-6","1" +"71479","Tullos","LA","31.823038","-92.34017","-6","1" +"71480","Urania","LA","31.861708","-92.29141","-6","1" +"71481","Verda","LA","31.592547","-92.58483","-6","1" +"71483","Winnfield","LA","31.915828","-92.6445","-6","1" +"71485","Woodworth","LA","31.163538","-92.50144","-6","1" +"71486","Zwolle","LA","31.597407","-93.66397","-6","1" +"71496","Leesville","LA","31.110298","-93.289988","-6","1" +"71497","Natchitoches","LA","31.747563","-93.079055","-6","1" +"71545","Montgomery","LA","31.66581","-92.890325","-6","1" +"71601","Pine Bluff","AR","34.215648","-91.98841","-6","1" +"71602","White Hall","AR","34.261359","-92.09592","-6","1" +"71603","Pine Bluff","AR","34.189398","-92.04495","-6","1" +"71611","Pine Bluff","AR","34.261465","-91.955115","-6","1" +"71612","White Hall","AR","34.277534","-91.832539","-6","1" +"71613","Pine Bluff","AR","34.157876","-92.071284","-6","1" +"71630","Arkansas City","AR","33.608935","-91.20577","-6","1" +"71631","Banks","AR","33.580919","-92.26477","-6","1" +"71635","Crossett","AR","33.125032","-91.97037","-6","1" +"71638","Dermott","AR","33.525266","-91.47922","-6","1" +"71639","Dumas","AR","33.900515","-91.50041","-6","1" +"71640","Eudora","AR","33.118147","-91.26107","-6","1" +"71642","Fountain Hill","AR","33.375479","-91.86188","-6","1" +"71643","Gould","AR","34.004537","-91.5784","-6","1" +"71644","Grady","AR","34.110042","-91.70488","-6","1" +"71646","Hamburg","AR","33.224814","-91.79176","-6","1" +"71647","Hermitage","AR","33.384421","-92.14897","-6","1" +"71649","Jennie","AR","33.283901","-91.25206","-6","1" +"71650","Jerome","AR","33.590601","-91.732829","-6","1" +"71651","Jersey","AR","33.346473","-92.31954","-6","1" +"71652","Kingsland","AR","33.914079","-92.33251","-6","1" +"71653","Lake Village","AR","33.351501","-91.27133","-6","1" +"71654","McGehee","AR","33.628723","-91.38236","-6","1" +"71655","Monticello","AR","33.62086","-91.76272","-6","1" +"71656","Monticello","AR","33.592575","-91.81237","-6","1" +"71657","Monticello","AR","33.590601","-91.732829","-6","1" +"71658","Montrose","AR","33.323463","-91.54633","-6","1" +"71659","Moscow","AR","34.154012","-91.80062","-6","1" +"71660","New Edinburg","AR","33.736301","-92.18447","-6","1" +"71661","Parkdale","AR","33.133126","-91.53103","-6","1" +"71662","Pickens","AR","33.818318","-91.214054","-6","1" +"71663","Portland","AR","33.236401","-91.47982","-6","1" +"71665","Rison","AR","33.941582","-92.14575","-6","1" +"71666","McGehee","AR","33.763205","-91.27239","-6","1" +"71667","Star City","AR","33.945654","-91.83957","-6","1" +"71670","Tillar","AR","33.737729","-91.41876","-6","1" +"71671","Warren","AR","33.608004","-92.08101","-6","1" +"71674","Watson","AR","33.873022","-91.24235","-6","1" +"71675","Wilmar","AR","33.592313","-91.93607","-6","1" +"71676","Wilmot","AR","33.059255","-91.55866","-6","1" +"71677","Winchester","AR","33.749668","-91.4657","-6","1" +"71678","Yorktown","AR","33.978738","-91.699077","-6","1" +"71691","Warren","AR","33.608542","-92.081022","-6","1" +"71701","Camden","AR","33.578096","-92.81368","-6","1" +"71711","Camden","AR","33.589009","-92.842649","-6","1" +"71720","Bearden","AR","33.733334","-92.64664","-6","1" +"71721","Beirne","AR","34.055486","-93.189406","-6","1" +"71722","Bluff City","AR","33.704074","-93.13364","-6","1" +"71724","Calion","AR","33.326096","-92.53866","-6","1" +"71725","Carthage","AR","34.058224","-92.56519","-6","1" +"71726","Chidester","AR","33.686264","-93.01966","-6","1" +"71728","Curtis","AR","34.010316","-93.097627","-6","1" +"71730","El Dorado","AR","33.218456","-92.64911","-6","1" +"71731","El Dorado","AR","33.198024","-92.52891","-6","1" +"71740","Emerson","AR","33.091077","-93.18468","-6","1" +"71742","Fordyce","AR","33.834201","-92.43421","-6","1" +"71743","Gurdon","AR","33.913838","-93.13855","-6","1" +"71744","Hampton","AR","33.521575","-92.47898","-6","1" +"71745","Harrell","AR","33.525889","-92.39227","-6","1" +"71747","Huttig","AR","33.050688","-92.18501","-6","1" +"71748","Ivan","AR","33.97547","-92.647817","-6","1" +"71749","Junction City","AR","33.067477","-92.76449","-6","1" +"71750","Lawson","AR","33.198024","-92.52891","-6","1" +"71751","Louann","AR","33.397936","-92.77116","-6","1" +"71752","McNeil","AR","33.362351","-93.20045","-6","1" +"71753","Magnolia","AR","33.249608","-93.20427","-6","1" +"71754","Magnolia","AR","33.242571","-93.22996","-6","1" +"71758","Mount Holly","AR","33.325889","-92.90485","-6","1" +"71759","Norphlet","AR","33.323051","-92.66095","-6","1" +"71762","Smackover","AR","33.350296","-92.7379","-6","1" +"71763","Sparkman","AR","33.91855","-92.80484","-6","1" +"71764","Stephens","AR","33.4125","-93.06263","-6","1" +"71765","Strong","AR","33.123334","-92.34988","-6","1" +"71766","Thornton","AR","33.741892","-92.48834","-6","1" +"71767","Hampton","AR","33.535994","-92.543915","-6","1" +"71768","Urbana","AR","33.198024","-92.52891","-6","1" +"71769","Village","AR","33.236156","-93.234494","-6","1" +"71770","Waldo","AR","33.34937","-93.31176","-6","1" +"71772","Whelen Springs","AR","33.832537","-93.1238","-6","1" +"71801","Hope","AR","33.657969","-93.59486","-6","1" +"71802","Hope","AR","33.765584","-93.559162","-6","1" +"71820","Alleene","AR","33.780463","-94.24384","-6","1" +"71822","Ashdown","AR","33.675597","-94.13465","-6","1" +"71823","Ben Lomond","AR","33.822226","-94.13294","-6","1" +"71825","Blevins","AR","33.867903","-93.57136","-6","1" +"71826","Bradley","AR","33.102083","-93.67372","-6","1" +"71827","Buckner","AR","33.378452","-93.43692","-6","1" +"71828","Cale","AR","33.70082","-93.294126","-6","1" +"71831","Columbus","AR","33.793524","-93.807007","-6","1" +"71832","De Queen","AR","34.038226","-94.33597","-6","1" +"71833","Dierks","AR","34.152505","-94.03786","-6","1" +"71834","Doddridge","AR","33.09863","-93.95261","-6","1" +"71835","Emmet","AR","33.70485","-93.46779","-6","1" +"71836","Foreman","AR","33.731908","-94.38751","-6","1" +"71837","Fouke","AR","33.271824","-93.85202","-6","1" +"71838","Fulton","AR","33.638783","-93.80828","-6","1" +"71839","Garland City","AR","33.312764","-93.71734","-6","1" +"71840","Genoa","AR","33.316578","-93.854484","-6","1" +"71841","Gillham","AR","34.163393","-94.3049","-6","1" +"71842","Horatio","AR","33.927425","-94.30834","-6","1" +"71844","Laneburg","AR","33.70082","-93.294126","-6","1" +"71845","Lewisville","AR","33.326251","-93.58986","-6","1" +"71846","Lockesburg","AR","33.961768","-94.14717","-6","1" +"71847","McCaskill","AR","33.920355","-93.63751","-6","1" +"71851","Mineral Springs","AR","33.859173","-93.92692","-6","1" +"71852","Nashville","AR","33.985613","-93.85214","-6","1" +"71853","Ogden","AR","33.582879","-94.01151","-6","1" +"71854","Texarkana","AR","33.428618","-93.99236","-6","1" +"71855","Ozan","AR","33.865305","-93.7512","-6","1" +"71857","Prescott","AR","33.806886","-93.36595","-6","1" +"71858","Rosston","AR","33.551439","-93.28269","-6","1" +"71859","Saratoga","AR","33.740704","-93.91747","-6","1" +"71860","Stamps","AR","33.35996","-93.49293","-6","1" +"71861","Taylor","AR","33.108043","-93.47283","-6","1" +"71862","Washington","AR","33.761309","-93.71273","-6","1" +"71864","Willisville","AR","33.70082","-93.294126","-6","1" +"71865","Wilton","AR","33.741986","-94.14867","-6","1" +"71866","Winthrop","AR","33.865609","-94.38408","-6","1" +"71901","Hot Springs National Park","AR","34.506487","-93.01941","-6","1" +"71902","Hot Springs National Park","AR","34.581374","-93.099403","-6","1" +"71903","Hot Springs National Park","AR","34.581374","-93.099403","-6","1" +"71907","Hot Springs","AR","34.532516","-93.048397","-6","1" +"71909","Hot Springs Village","AR","34.657742","-92.9811","-6","1" +"71910","Hot Springs Village","AR","34.581374","-93.099403","-6","1" +"71913","Hot Springs National Park","AR","34.47056","-93.08805","-6","1" +"71914","Hot Springs National Park","AR","34.513682","-92.968531","-6","1" +"71920","Alpine","AR","34.055486","-93.189406","-6","1" +"71921","Amity","AR","34.257603","-93.45822","-6","1" +"71922","Antoine","AR","34.033062","-93.42614","-6","1" +"71923","Arkadelphia","AR","34.111837","-93.05585","-6","1" +"71929","Bismarck","AR","34.285033","-93.19533","-6","1" +"71932","Board Camp","AR","34.537164","-94.0972","-6","1" +"71933","Bonnerdale","AR","34.397266","-93.4063","-6","1" +"71935","Caddo Gap","AR","34.373399","-93.70591","-6","1" +"71937","Cove","AR","34.398483","-94.39398","-6","1" +"71940","Delight","AR","34.082845","-93.51733","-6","1" +"71941","Donaldson","AR","34.254277","-92.95971","-6","1" +"71942","Friendship","AR","34.223546","-93.002367","-6","1" +"71943","Glenwood","AR","34.320028","-93.5993","-6","1" +"71944","Grannis","AR","34.24238","-94.35535","-6","1" +"71945","Hatfield","AR","34.496472","-94.3691","-6","1" +"71946","Hatton","AR","34.459413","-94.200221","-6","1" +"71949","Jessieville","AR","34.727093","-93.03315","-6","1" +"71950","Kirby","AR","34.251107","-93.76005","-6","1" +"71951","Hot Springs National Park","AR","34.581374","-93.099403","-6","1" +"71952","Langley","AR","34.29627","-93.83656","-6","1" +"71953","Mena","AR","34.588479","-94.21567","-6","1" +"71956","Mountain Pine","AR","34.663502","-93.23591","-6","1" +"71957","Mount Ida","AR","34.571277","-93.58361","-6","1" +"71958","Murfreesboro","AR","34.118589","-93.69401","-6","1" +"71959","Newhope","AR","34.229742","-93.88694","-6","1" +"71960","Norman","AR","34.480095","-93.72298","-6","1" +"71961","Oden","AR","34.606137","-93.82391","-6","1" +"71962","Okolona","AR","34.072187","-93.33704","-6","1" +"71964","Pearcy","AR","34.424114","-93.24096","-6","1" +"71965","Pencil Bluff","AR","34.655204","-93.73748","-6","1" +"71966","Oden","AR","34.542995","-93.66463","-6","1" +"71968","Royal","AR","34.522254","-93.25662","-6","1" +"71969","Sims","AR","34.679542","-93.61788","-6","1" +"71970","Story","AR","34.669401","-93.4857","-6","1" +"71971","Umpire","AR","34.299569","-94.03479","-6","1" +"71972","Vandervoort","AR","34.381056","-94.19716","-6","1" +"71973","Wickes","AR","34.302177","-94.35083","-6","1" +"71998","Arkadelphia","AR","34.055486","-93.189406","-6","1" +"71999","Arkadelphia","AR","34.055486","-93.189406","-6","1" +"72001","Adona","AR","35.058503","-92.88762","-6","1" +"72002","Alexander","AR","34.644387","-92.50223","-6","1" +"72003","Almyra","AR","34.403216","-91.40953","-6","1" +"72004","Altheimer","AR","34.252213","-91.7679","-6","1" +"72005","Amagon","AR","35.569503","-91.10435","-6","1" +"72006","Augusta","AR","35.251768","-91.35603","-6","1" +"72007","Austin","AR","34.998573","-91.98417","-6","1" +"72010","Bald Knob","AR","35.321261","-91.54989","-6","1" +"72011","Bauxite","AR","34.523858","-92.46989","-6","1" +"72012","Beebe","AR","35.095774","-91.90636","-6","1" +"72013","Bee Branch","AR","35.452494","-92.36279","-6","1" +"72014","Beedeville","AR","35.429694","-91.10723","-6","1" +"72015","Benton","AR","34.564734","-92.59562","-6","1" +"72016","Bigelow","AR","34.993579","-92.62183","-6","1" +"72017","Biscoe","AR","34.864607","-91.40408","-6","1" +"72018","Benton","AR","34.597345","-92.622857","-6","1" +"72019","North Little Rock","AR","34.804791","-92.28925","-6","1" +"72020","Bradford","AR","35.461798","-91.46353","-6","1" +"72021","Brinkley","AR","34.867846","-91.19271","-6","1" +"72022","Bryant","AR","34.606079","-92.49472","-6","1" +"72023","Cabot","AR","34.967043","-92.03537","-6","1" +"72024","Carlisle","AR","34.776306","-91.74635","-6","1" +"72025","Casa","AR","35.043093","-93.00689","-6","1" +"72026","Casscoe","AR","34.505369","-91.30213","-6","1" +"72027","Center Ridge","AR","35.365909","-92.57876","-6","1" +"72028","Choctaw","AR","35.57727","-92.545572","-6","1" +"72029","Clarendon","AR","34.697068","-91.29347","-6","1" +"72030","Cleveland","AR","35.423473","-92.67942","-6","1" +"72031","Clinton","AR","35.586064","-92.48355","-6","1" +"72032","Conway","AR","35.075467","-92.43401","-6","1" +"72033","Conway","AR","35.105306","-92.354915","-6","1" +"72034","Conway","AR","35.074617","-92.444426","-6","1" +"72035","Conway","AR","35.105306","-92.354915","-6","1" +"72036","Cotton Plant","AR","35.011873","-91.25449","-6","1" +"72037","Coy","AR","34.541185","-91.875767","-6","1" +"72038","Crocketts Bluff","AR","34.438327","-91.26907","-6","1" +"72039","Damascus","AR","35.339128","-92.4036","-6","1" +"72040","Des Arc","AR","34.955641","-91.52399","-6","1" +"72041","De Valls Bluff","AR","34.745671","-91.46945","-6","1" +"72042","De Witt","AR","34.283347","-91.32515","-6","1" +"72043","Diaz","AR","35.633263","-91.26187","-6","1" +"72044","Edgemont","AR","35.624351","-92.16056","-6","1" +"72045","El Paso","AR","35.141743","-92.07641","-6","1" +"72046","England","AR","34.53785","-91.92159","-6","1" +"72047","Enola","AR","35.220931","-92.21721","-6","1" +"72048","Ethel","AR","34.28965","-91.13632","-6","1" +"72051","Fox","AR","35.814005","-92.32243","-6","1" +"72052","Garner","AR","35.144271","-91.77722","-6","1" +"72053","College Station","AR","34.708292","-92.22764","-6","1" +"72055","Gillett","AR","34.109348","-91.36875","-6","1" +"72057","Grapevine","AR","34.14741","-92.31641","-6","1" +"72058","Greenbrier","AR","35.236993","-92.37573","-6","1" +"72059","Gregory","AR","35.179148","-91.259428","-6","1" +"72060","Griffithville","AR","35.091184","-91.58451","-6","1" +"72061","Guy","AR","35.311481","-92.27505","-6","1" +"72063","Hattieville","AR","35.320423","-92.7496","-6","1" +"72064","Hazen","AR","34.781079","-91.59288","-6","1" +"72065","Hensley","AR","34.52109","-92.29743","-6","1" +"72066","Hickory Plains","AR","34.785525","-91.573785","-6","1" +"72067","Higden","AR","35.564065","-92.1649","-6","1" +"72068","Higginson","AR","35.169853","-91.70833","-6","1" +"72069","Holly Grove","AR","34.584347","-91.14873","-6","1" +"72070","Houston","AR","35.023369","-92.71047","-6","1" +"72071","Howell","AR","35.179148","-91.259428","-6","1" +"72072","Humnoke","AR","34.516932","-91.76502","-6","1" +"72073","Humphrey","AR","34.396301","-91.66201","-6","1" +"72074","Hunter","AR","35.04369","-91.12029","-6","1" +"72075","Jacksonport","AR","35.640464","-91.30412","-6","1" +"72076","Jacksonville","AR","34.879419","-92.12244","-6","1" +"72078","Jacksonville","AR","34.751918","-92.392487","-6","1" +"72079","Jefferson","AR","34.401717","-92.20272","-6","1" +"72080","Jerusalem","AR","35.567694","-92.82756","-6","1" +"72081","Judsonia","AR","35.319143","-91.65148","-6","1" +"72082","Kensett","AR","35.233947","-91.67048","-6","1" +"72083","Keo","AR","34.604268","-92.01479","-6","1" +"72084","Leola","AR","34.17618","-92.65463","-6","1" +"72085","Letona","AR","35.362742","-91.8275","-6","1" +"72086","Lonoke","AR","34.7964","-91.90949","-6","1" +"72087","Lonsdale","AR","34.581202","-92.8236","-6","1" +"72088","Fairfield Bay","AR","35.598238","-92.26358","-6","1" +"72089","Bryant","AR","34.635041","-92.65974","-6","1" +"72098","Jacksonville","AR","34.89522","-92.140701","-6","1" +"72099","Little Rock Air Force Base","AR","34.908539","-92.11722","-6","1" +"72101","McCrory","AR","35.224432","-91.15291","-6","1" +"72102","McRae","AR","35.125583","-91.82508","-6","1" +"72103","Mabelvale","AR","34.598551","-92.38169","-6","1" +"72104","Malvern","AR","34.364093","-92.8146","-6","1" +"72105","Jones Mill","AR","34.437118","-92.89278","-6","1" +"72106","Mayflower","AR","34.969848","-92.42483","-6","1" +"72107","Menifee","AR","35.145915","-92.54648","-6","1" +"72108","Monroe","AR","34.726737","-91.10958","-6","1" +"72110","Morrilton","AR","35.156491","-92.75858","-6","1" +"72111","Mount Vernon","AR","35.227869","-92.13033","-6","1" +"72112","Newport","AR","35.586065","-91.24695","-6","1" +"72113","Maumelle","AR","34.854746","-92.39981","-6","1" +"72114","North Little Rock","AR","34.763924","-92.26463","-6","1" +"72115","North Little Rock","AR","34.751918","-92.392487","-6","1" +"72116","North Little Rock","AR","34.799541","-92.24764","-6","1" +"72117","North Little Rock","AR","34.777238","-92.17913","-6","1" +"72118","North Little Rock","AR","34.813269","-92.30229","-6","1" +"72119","North Little Rock","AR","34.80165","-92.259781","-6","1" +"72120","Sherwood","AR","34.855962","-92.21997","-6","1" +"72121","Pangburn","AR","35.432905","-91.81901","-6","1" +"72122","Paron","AR","34.774077","-92.7549","-6","1" +"72123","Patterson","AR","35.256759","-91.23819","-6","1" +"72124","North Little Rock","AR","34.751918","-92.392487","-6","1" +"72125","Perry","AR","35.056424","-92.79432","-6","1" +"72126","Perryville","AR","34.965699","-92.86841","-6","1" +"72127","Plumerville","AR","35.155206","-92.61975","-6","1" +"72128","Poyen","AR","34.32012","-92.63984","-6","1" +"72129","Prattsville","AR","34.330808","-92.54349","-6","1" +"72130","Prim","AR","35.638247","-92.06612","-6","1" +"72131","Quitman","AR","35.402236","-92.20204","-6","1" +"72132","Redfield","AR","34.443452","-92.1854","-6","1" +"72133","Reydell","AR","34.165734","-91.57169","-6","1" +"72134","Roe","AR","34.640886","-91.3892","-6","1" +"72135","Roland","AR","34.880442","-92.55142","-6","1" +"72136","Romance","AR","35.230036","-92.01106","-6","1" +"72137","Rose Bud","AR","35.341123","-92.06141","-6","1" +"72139","Russell","AR","35.36083","-91.50875","-6","1" +"72140","Saint Charles","AR","34.383661","-91.15428","-6","1" +"72141","Scotland","AR","35.51921","-92.66488","-6","1" +"72142","Scott","AR","34.689349","-92.07792","-6","1" +"72143","Searcy","AR","35.239022","-91.73776","-6","1" +"72145","Searcy","AR","35.277393","-91.732556","-6","1" +"72149","Searcy","AR","35.247376","-91.73139","-6","1" +"72150","Sheridan","AR","34.31985","-92.39319","-6","1" +"72152","Sherrill","AR","34.352844","-91.98078","-6","1" +"72153","Shirley","AR","35.619538","-92.32589","-6","1" +"72156","Solgohachia","AR","35.284619","-92.6754","-6","1" +"72157","Springfield","AR","35.290158","-92.55715","-6","1" +"72158","Benton","AR","34.635041","-92.65974","-6","1" +"72160","Stuttgart","AR","34.479852","-91.53854","-6","1" +"72164","Sweet Home","AR","34.687292","-92.2399","-6","1" +"72165","Thida","AR","35.594246","-91.45052","-6","1" +"72166","Tichnor","AR","34.061917","-91.24828","-6","1" +"72167","Traskwood","AR","34.433276","-92.66087","-6","1" +"72168","Tucker","AR","34.434204","-91.98585","-6","1" +"72169","Tupelo","AR","35.391629","-91.22927","-6","1" +"72170","Ulm","AR","34.576099","-91.46138","-6","1" +"72173","Vilonia","AR","35.102318","-92.22148","-6","1" +"72175","Wabbaseka","AR","34.351954","-91.77681","-6","1" +"72176","Ward","AR","35.008529","-91.92244","-6","1" +"72178","West Point","AR","35.203213","-91.606367","-6","1" +"72179","Wilburn","AR","35.505158","-91.87084","-6","1" +"72180","Woodson","AR","34.528857","-92.21175","-6","1" +"72181","Wooster","AR","35.163915","-92.45297","-6","1" +"72182","Wright","AR","34.429059","-92.059863","-6","1" +"72183","Wrightsville","AR","34.600398","-92.19513","-6","1" +"72189","McCrory","AR","35.179148","-91.259428","-6","1" +"72190","North Little Rock","AR","34.751918","-92.392487","-6","1" +"72199","North Little Rock","AR","34.827174","-92.284718","-6","1" +"72201","Little Rock","AR","34.745692","-92.27987","-6","1" +"72202","Little Rock","AR","34.739224","-92.27765","-6","1" +"72203","Little Rock","AR","34.883484","-92.390766","-6","1" +"72204","Little Rock","AR","34.729159","-92.34019","-6","1" +"72205","Little Rock","AR","34.752391","-92.3355","-6","1" +"72206","Little Rock","AR","34.690671","-92.26865","-6","1" +"72207","Little Rock","AR","34.771291","-92.34242","-6","1" +"72209","Little Rock","AR","34.674192","-92.35557","-6","1" +"72210","Little Rock","AR","34.71542","-92.47087","-6","1" +"72211","Little Rock","AR","34.749723","-92.41345","-6","1" +"72212","Little Rock","AR","34.783505","-92.40807","-6","1" +"72214","Little Rock","AR","34.762141","-92.228248","-6","1" +"72215","Little Rock","AR","34.751918","-92.392487","-6","1" +"72216","Little Rock","AR","34.817834","-92.235668","-6","1" +"72217","Little Rock","AR","34.830158","-92.170174","-6","1" +"72219","Little Rock","AR","34.751918","-92.392487","-6","1" +"72221","Little Rock","AR","34.751918","-92.392487","-6","1" +"72222","Little Rock","AR","34.751918","-92.392487","-6","1" +"72223","Little Rock","AR","34.796399","-92.46821","-6","1" +"72225","Little Rock","AR","34.751918","-92.392487","-6","1" +"72227","Little Rock","AR","34.771024","-92.37117","-6","1" +"72231","Little Rock","AR","34.80189","-92.189397","-6","1" +"72259","Little Rock","AR","34.661442","-92.318651","-6","1" +"72295","Little Rock","AR","34.751918","-92.392487","-6","1" +"72301","West Memphis","AR","35.150009","-90.17636","-6","1" +"72303","West Memphis","AR","35.137366","-90.285543","-6","1" +"72310","Armorel","AR","35.852046","-89.972762","-6","1" +"72311","Aubrey","AR","34.719877","-90.89796","-6","1" +"72312","Barton","AR","34.546696","-90.767879","-6","1" +"72313","Bassett","AR","35.712249","-90.028429","-6","1" +"72314","Birdeye","AR","35.357184","-90.677331","-6","1" +"72315","Blytheville","AR","35.925991","-89.91767","-6","1" +"72316","Blytheville","AR","35.694942","-89.966819","-6","1" +"72319","Gosnell","AR","35.694942","-89.966819","-6","1" +"72320","Brickeys","AR","34.764633","-90.54588","-6","1" +"72321","Burdette","AR","35.818518","-89.93751","-6","1" +"72322","Caldwell","AR","35.061156","-90.81547","-6","1" +"72324","Cherry Valley","AR","35.387053","-90.76307","-6","1" +"72325","Clarkedale","AR","35.286354","-90.253781","-6","1" +"72326","Colt","AR","35.111687","-90.8989","-6","1" +"72327","Crawfordsville","AR","35.232817","-90.33123","-6","1" +"72328","Crumrod","AR","34.131527","-90.97793","-6","1" +"72329","Driver","AR","35.621318","-90.00576","-6","1" +"72330","Dyess","AR","35.601699","-90.20386","-6","1" +"72331","Earle","AR","35.266812","-90.46421","-6","1" +"72332","Edmondson","AR","35.103643","-90.31096","-6","1" +"72333","Elaine","AR","34.305697","-90.85597","-6","1" +"72335","Forrest City","AR","35.010683","-90.78048","-6","1" +"72336","Forrest City","AR","35.100867","-90.726069","-6","1" +"72338","Frenchmans Bayou","AR","35.443275","-90.17801","-6","1" +"72339","Gilmore","AR","35.411831","-90.27537","-6","1" +"72340","Goodwin","AR","34.935463","-91.02712","-6","1" +"72341","Haynes","AR","34.903767","-90.76129","-6","1" +"72342","Helena","AR","34.485028","-90.64636","-6","1" +"72345","Marked Tree","AR","35.531429","-90.414113","-6","1" +"72346","Heth","AR","35.079258","-90.46399","-6","1" +"72347","Hickory Ridge","AR","35.396138","-90.99703","-6","1" +"72348","Hughes","AR","34.935197","-90.44153","-6","1" +"72350","Joiner","AR","35.512756","-90.14514","-6","1" +"72351","Keiser","AR","35.673312","-90.0974","-6","1" +"72352","La Grange","AR","34.769714","-90.755195","-6","1" +"72353","Lambrook","AR","34.297754","-91.00403","-6","1" +"72354","Lepanto","AR","35.624419","-90.3249","-6","1" +"72355","Lexa","AR","34.554466","-90.76901","-6","1" +"72358","Luxora","AR","35.777085","-89.89214","-6","1" +"72359","Madison","AR","35.013693","-90.72317","-6","1" +"72360","Marianna","AR","34.764904","-90.77793","-6","1" +"72364","Marion","AR","35.200501","-90.20234","-6","1" +"72365","Marked Tree","AR","35.534421","-90.41892","-6","1" +"72366","Marvell","AR","34.550982","-90.94433","-6","1" +"72367","Mellwood","AR","34.189902","-90.97694","-6","1" +"72368","Moro","AR","34.805649","-91.00582","-6","1" +"72369","Oneida","AR","34.459854","-90.78022","-6","1" +"72370","Osceola","AR","35.696385","-90.02631","-6","1" +"72372","Palestine","AR","34.981162","-90.96503","-6","1" +"72373","Parkin","AR","35.292009","-90.5875","-6","1" +"72374","Poplar Grove","AR","34.554559","-90.84231","-6","1" +"72376","Proctor","AR","35.102775","-90.31884","-6","1" +"72377","Rivervale","AR","35.679593","-90.34153","-6","1" +"72379","Snow Lake","AR","34.044682","-91.0194","-6","1" +"72381","Tomato","AR","35.694942","-89.966819","-6","1" +"72383","Turner","AR","34.498519","-91.05167","-6","1" +"72384","Turrell","AR","35.375704","-90.22848","-6","1" +"72385","Twist","AR","35.296539","-90.772419","-6","1" +"72386","Tyronza","AR","35.473821","-90.36077","-6","1" +"72387","Vanndale","AR","35.328336","-90.77134","-6","1" +"72389","Wabash","AR","34.358049","-90.88366","-6","1" +"72390","West Helena","AR","34.546274","-90.65869","-6","1" +"72391","West Ridge","AR","35.694942","-89.966819","-6","1" +"72392","Wheatley","AR","34.929287","-91.09866","-6","1" +"72394","Widener","AR","35.05102","-90.63521","-6","1" +"72395","Wilson","AR","35.585875","-90.04742","-6","1" +"72396","Wynne","AR","35.229779","-90.83237","-6","1" +"72397","McCrory","AR","35.296539","-90.772419","-6","1" +"72401","Jonesboro","AR","35.844795","-90.68443","-6","1" +"72402","Jonesboro","AR","35.80881","-90.652887","-6","1" +"72403","Jonesboro","AR","35.830541","-90.703915","-6","1" +"72404","Jonesboro","AR","35.781707","-90.74506","-6","1" +"72410","Alicia","AR","35.930405","-91.07664","-6","1" +"72411","Bay","AR","35.747274","-90.569","-6","1" +"72412","Beech Grove","AR","36.128323","-90.69114","-6","1" +"72413","Biggers","AR","36.323353","-90.81054","-6","1" +"72414","Black Oak","AR","35.823762","-90.37402","-6","1" +"72415","Black Rock","AR","36.120567","-91.15045","-6","1" +"72416","Bono","AR","35.927057","-90.79589","-6","1" +"72417","Brookland","AR","35.92007","-90.57059","-6","1" +"72419","Caraway","AR","35.755308","-90.32581","-6","1" +"72421","Cash","AR","35.786094","-90.97073","-6","1" +"72422","Corning","AR","36.410344","-90.56479","-6","1" +"72423","Tuckerman","AR","35.723939","-91.203248","-6","1" +"72424","Datto","AR","36.384555","-90.73187","-6","1" +"72425","Delaplaine","AR","36.21405","-90.74383","-6","1" +"72426","Dell","AR","35.855743","-90.04314","-6","1" +"72427","Egypt","AR","35.867472","-90.94537","-6","1" +"72428","Etowah","AR","35.744651","-90.22249","-6","1" +"72429","Fisher","AR","35.49293","-90.95873","-6","1" +"72430","Greenway","AR","36.334551","-90.19067","-6","1" +"72431","Grubbs","AR","35.650914","-91.07618","-6","1" +"72432","Harrisburg","AR","35.555062","-90.71725","-6","1" +"72433","Hoxie","AR","36.042319","-90.99827","-6","1" +"72434","Imboden","AR","36.21601","-91.15872","-6","1" +"72435","Knobel","AR","36.315305","-90.57906","-6","1" +"72436","Lafe","AR","36.205251","-90.49913","-6","1" +"72437","Lake City","AR","35.82847","-90.44247","-6","1" +"72438","Leachville","AR","35.941576","-90.22683","-6","1" +"72439","Light","AR","36.06805","-90.748876","-6","1" +"72440","Lynn","AR","35.995653","-91.26055","-6","1" +"72441","McDougal","AR","36.437727","-90.38816","-6","1" +"72442","Manila","AR","35.83821","-90.17029","-6","1" +"72443","Marmaduke","AR","36.179815","-90.39082","-6","1" +"72444","Maynard","AR","36.422163","-90.88239","-6","1" +"72445","Minturn","AR","35.972767","-91.02349","-6","1" +"72447","Monette","AR","35.910391","-90.34016","-6","1" +"72448","Marmaduke","AR","36.189695","-90.379616","-6","1" +"72449","O Kean","AR","36.167303","-90.81515","-6","1" +"72450","Paragould","AR","36.065711","-90.5102","-6","1" +"72451","Paragould","AR","36.11635","-90.525077","-6","1" +"72452","Paragould","AR","36.047718","-90.516585","-6","1" +"72453","Peach Orchard","AR","36.28117","-90.66941","-6","1" +"72454","Piggott","AR","36.393325","-90.20277","-6","1" +"72455","Pocahontas","AR","36.304912","-91.0141","-6","1" +"72456","Pollard","AR","36.438645","-90.30302","-6","1" +"72457","Portia","AR","36.092999","-91.06249","-6","1" +"72458","Powhatan","AR","36.065739","-91.15181","-6","1" +"72459","Ravenden","AR","36.20619","-91.27997","-6","1" +"72460","Ravenden Springs","AR","36.322642","-91.22327","-6","1" +"72461","Rector","AR","36.260606","-90.28187","-6","1" +"72462","Reyno","AR","36.362896","-90.75676","-6","1" +"72464","Saint Francis","AR","36.458348","-90.14377","-6","1" +"72465","Sedgwick","AR","35.964317","-90.895421","-6","1" +"72466","Smithville","AR","36.051063","-91.28209","-6","1" +"72467","State University","AR","35.843125","-90.67579","-6","1" +"72469","Strawberry","AR","35.961971","-91.33713","-6","1" +"72470","Success","AR","36.460317","-90.70524","-6","1" +"72471","Swifton","AR","35.821708","-91.1314","-6","1" +"72472","Trumann","AR","35.623029","-90.52742","-6","1" +"72473","Tuckerman","AR","35.731301","-91.20318","-6","1" +"72474","Walcott","AR","36.041332","-90.671802","-6","1" +"72475","Waldenburg","AR","35.564737","-90.93254","-6","1" +"72476","Walnut Ridge","AR","36.068015","-90.94429","-6","1" +"72477","Maynard","AR","36.417305","-90.896784","-6","1" +"72478","Warm Springs","AR","36.464979","-91.053","-6","1" +"72479","Weiner","AR","35.62608","-90.89575","-6","1" +"72482","Williford","AR","36.279796","-91.37245","-6","1" +"72501","Batesville","AR","35.78108","-91.63835","-6","1" +"72503","Batesville","AR","35.734617","-91.534303","-6","1" +"72512","Horseshoe Bend","AR","36.225645","-91.75019","-6","1" +"72513","Ash Flat","AR","36.24564","-91.63703","-6","1" +"72515","Bexar","AR","36.293095","-92.0417","-6","1" +"72516","Boswell","AR","36.064329","-91.944673","-6","1" +"72517","Brockwell","AR","36.126021","-91.96619","-6","1" +"72519","Calico Rock","AR","36.132092","-92.16638","-6","1" +"72520","Camp","AR","36.388724","-91.7353","-6","1" +"72521","Cave City","AR","35.956342","-91.53548","-6","1" +"72522","Charlotte","AR","35.819494","-91.45128","-6","1" +"72523","Concord","AR","35.648717","-91.84428","-6","1" +"72524","Cord","AR","35.836565","-91.30334","-6","1" +"72525","Cherokee Village","AR","36.302469","-91.59744","-6","1" +"72526","Cushman","AR","35.873117","-91.7544","-6","1" +"72527","Desha","AR","35.733939","-91.68913","-6","1" +"72528","Dolph","AR","36.245162","-92.12962","-6","1" +"72529","Cherokee Village","AR","36.294732","-91.55777","-6","1" +"72530","Drasco","AR","35.615841","-91.9451","-6","1" +"72531","Elizabeth","AR","36.317264","-92.17314","-6","1" +"72532","Evening Shade","AR","36.088921","-91.59919","-6","1" +"72533","Fifty Six","AR","35.965754","-92.2303","-6","1" +"72534","Floral","AR","35.588979","-91.74043","-6","1" +"72536","Franklin","AR","36.155897","-91.75644","-6","1" +"72537","Gamaliel","AR","36.428401","-92.23701","-6","1" +"72538","Gepp","AR","36.427702","-92.11109","-6","1" +"72539","Glencoe","AR","36.327307","-91.72234","-6","1" +"72540","Guion","AR","35.929689","-91.92632","-6","1" +"72542","Hardy","AR","36.303556","-91.48573","-6","1" +"72543","Heber Springs","AR","35.489516","-92.02327","-6","1" +"72544","Henderson","AR","36.388751","-92.20206","-6","1" +"72545","Heber Springs","AR","35.535238","-92.021291","-6","1" +"72546","Ida","AR","35.581607","-91.930535","-6","1" +"72550","Locust Grove","AR","35.710614","-91.7639","-6","1" +"72553","Magness","AR","35.698168","-91.48003","-6","1" +"72554","Mammoth Spring","AR","36.445205","-91.5553","-6","1" +"72555","Marcella","AR","35.758314","-91.86797","-6","1" +"72556","Melbourne","AR","36.035962","-91.92696","-6","1" +"72557","Moko","AR","36.374704","-91.804608","-6","1" +"72559","Salem","AR","34.640273","-92.558295","-6","1" +"72560","Mountain View","AR","35.863114","-92.11108","-6","1" +"72561","Mount Pleasant","AR","35.959567","-91.76948","-6","1" +"72562","Newark","AR","35.725631","-91.42605","-6","1" +"72564","Oil Trough","AR","35.623263","-91.44076","-6","1" +"72565","Oxford","AR","36.204582","-91.92355","-6","1" +"72566","Pineville","AR","36.186879","-92.08691","-6","1" +"72567","Pleasant Grove","AR","35.819261","-91.88291","-6","1" +"72568","Pleasant Plains","AR","35.561834","-91.62566","-6","1" +"72569","Poughkeepsie","AR","36.085113","-91.46586","-6","1" +"72571","Rosie","AR","35.643961","-91.55966","-6","1" +"72572","Saffell","AR","35.892646","-91.25768","-6","1" +"72573","Sage","AR","36.058198","-91.80836","-6","1" +"72575","Salado","AR","35.691868","-91.598917","-6","1" +"72576","Salem","AR","36.359511","-91.83303","-6","1" +"72577","Sidney","AR","36.033231","-91.70461","-6","1" +"72578","Sturkie","AR","36.479925","-91.8863","-6","1" +"72579","Sulphur Rock","AR","35.785607","-91.47502","-6","1" +"72581","Tumbling Shoals","AR","35.555144","-91.99286","-6","1" +"72583","Viola","AR","36.400178","-91.98711","-6","1" +"72584","Violet Hill","AR","36.136468","-91.82757","-6","1" +"72585","Wideman","AR","36.170391","-92.02036","-6","1" +"72587","Wiseman","AR","36.226478","-91.82045","-6","1" +"72601","Harrison","AR","36.236984","-93.09345","-6","1" +"72602","Harrison","AR","36.355213","-93.122554","-6","1" +"72610","Alco","AR","35.883787","-92.41591","-6","1" +"72611","Alpena","AR","36.272469","-93.31302","-6","1" +"72613","Beaver","AR","36.431111","-93.699392","-6","1" +"72615","Bergman","AR","36.308349","-93.032099","-6","1" +"72616","Berryville","AR","36.350821","-93.56324","-6","1" +"72617","Big Flat","AR","36.004445","-92.37364","-6","1" +"72619","Bull Shoals","AR","36.380815","-92.5856","-6","1" +"72623","Clarkridge","AR","36.484192","-92.29736","-6","1" +"72624","Compton","AR","36.0717","-93.35157","-6","1" +"72626","Cotter","AR","36.276949","-92.53279","-6","1" +"72628","Deer","AR","35.839126","-93.27737","-6","1" +"72629","Dennard","AR","35.755793","-92.54556","-6","1" +"72630","Diamond City","AR","36.461305","-92.91702","-6","1" +"72631","Eureka Springs","AR","36.443322","-93.77474","-6","1" +"72632","Eureka Springs","AR","36.392122","-93.7476","-6","1" +"72633","Everton","AR","36.150276","-92.89576","-6","1" +"72634","Flippin","AR","36.263145","-92.57635","-6","1" +"72635","Gassville","AR","36.297345","-92.48429","-6","1" +"72636","Gilbert","AR","35.916744","-92.681408","-6","1" +"72638","Green Forest","AR","36.327014","-93.40111","-6","1" +"72639","Harriet","AR","36.021569","-92.48605","-6","1" +"72640","Hasty","AR","36.000804","-93.01818","-6","1" +"72641","Jasper","AR","35.979619","-93.23783","-6","1" +"72642","Lakeview","AR","36.378546","-92.53817","-6","1" +"72644","Lead Hill","AR","36.424286","-92.925","-6","1" +"72645","Leslie","AR","35.800025","-92.57586","-6","1" +"72648","Marble Falls","AR","36.083655","-93.12978","-6","1" +"72650","Marshall","AR","35.896883","-92.66479","-6","1" +"72651","Midway","AR","36.389591","-92.48025","-6","1" +"72653","Mountain Home","AR","36.329026","-92.35781","-6","1" +"72654","Mountain Home","AR","36.23638","-92.372635","-6","1" +"72655","Mount Judea","AR","35.927363","-93.0179","-6","1" +"72657","Timbo","AR","35.91896","-92.127207","-6","1" +"72658","Norfork","AR","36.193278","-92.29362","-6","1" +"72659","Norfork","AR","36.23638","-92.372635","-6","1" +"72660","Oak Grove","AR","36.492129","-93.3744","-6","1" +"72661","Oakland","AR","36.459703","-92.60271","-6","1" +"72662","Omaha","AR","36.427675","-93.19473","-6","1" +"72663","Onia","AR","35.927802","-92.32249","-6","1" +"72666","Parthenon","AR","35.955198","-93.25985","-6","1" +"72668","Peel","AR","36.427511","-92.76948","-6","1" +"72669","Pindall","AR","36.087461","-92.88803","-6","1" +"72670","Ponca","AR","35.924868","-93.232298","-6","1" +"72672","Pyatt","AR","36.264469","-92.84044","-6","1" +"72675","Saint Joe","AR","36.021564","-92.77395","-6","1" +"72677","Summit","AR","36.255295","-92.68844","-6","1" +"72679","Tilly","AR","35.721896","-92.82678","-6","1" +"72680","Timbo","AR","35.880462","-92.29117","-6","1" +"72682","Valley Springs","AR","36.136628","-92.75237","-6","1" +"72683","Vendor","AR","35.906856","-93.13425","-6","1" +"72685","Western Grove","AR","36.062264","-92.96277","-6","1" +"72686","Witts Springs","AR","35.747154","-92.90985","-6","1" +"72687","Yellville","AR","36.242942","-92.69011","-6","1" +"72701","Fayetteville","AR","36.040467","-94.13376","-6","1" +"72702","Fayetteville","AR","35.99403","-94.219977","-6","1" +"72703","Fayetteville","AR","36.107078","-94.11592","-6","1" +"72704","Fayetteville","AR","36.096998","-94.2486","-6","1" +"72711","Avoca","AR","36.40137","-94.07106","-6","1" +"72712","Bentonville","AR","36.362525","-94.23308","-6","1" +"72714","Bella Vista","AR","36.458041","-94.23551","-6","1" +"72715","Bella Vista","AR","36.472567","-94.31606","-6","1" +"72716","Bentonville","AR","36.299507","-93.956801","-6","1" +"72717","Canehill","AR","35.852946","-94.4219","-6","1" +"72718","Cave Springs","AR","36.267484","-94.22806","-6","1" +"72719","Centerton","AR","36.36157","-94.29398","-6","1" +"72721","Combs","AR","35.829657","-93.8354","-6","1" +"72722","Decatur","AR","36.3389","-94.46394","-6","1" +"72727","Elkins","AR","35.970492","-93.94296","-6","1" +"72728","Elm Springs","AR","36.210013","-94.254573","-6","1" +"72729","Evansville","AR","35.797242","-94.47662","-6","1" +"72730","Farmington","AR","36.03667","-94.25261","-6","1" +"72732","Garfield","AR","36.434311","-93.96045","-6","1" +"72733","Gateway","AR","36.486424","-93.927748","-6","1" +"72734","Gentry","AR","36.269478","-94.46137","-6","1" +"72735","Goshen","AR","36.087551","-93.966645","-6","1" +"72736","Gravette","AR","36.412233","-94.45226","-6","1" +"72737","Greenland","AR","35.928186","-94.152899","-6","1" +"72738","Hindsville","AR","36.155775","-93.88706","-6","1" +"72739","Hiwasse","AR","36.437635","-94.33047","-6","1" +"72740","Huntsville","AR","36.1161","-93.68605","-6","1" +"72741","Johnson","AR","35.99403","-94.219977","-6","1" +"72742","Kingston","AR","35.992386","-93.47918","-6","1" +"72744","Lincoln","AR","35.954697","-94.42735","-6","1" +"72745","Lowell","AR","36.247575","-94.11371","-6","1" +"72747","Maysville","AR","36.381787","-94.58854","-6","1" +"72749","Morrow","AR","35.864399","-94.43534","-6","1" +"72751","Pea Ridge","AR","36.460576","-94.13334","-6","1" +"72752","Pettigrew","AR","35.824911","-93.56071","-6","1" +"72753","Prairie Grove","AR","35.951426","-94.32246","-6","1" +"72756","Rogers","AR","36.342235","-94.07141","-6","1" +"72757","Rogers","AR","36.371981","-94.115649","-6","1" +"72758","Rogers","AR","36.306616","-94.14622","-6","1" +"72760","Saint Paul","AR","35.82635","-93.73715","-6","1" +"72761","Siloam Springs","AR","36.179905","-94.50208","-6","1" +"72762","Springdale","AR","36.186059","-94.1937","-6","1" +"72764","Springdale","AR","36.182407","-94.1082","-6","1" +"72765","Springdale","AR","36.172541","-94.153512","-6","1" +"72766","Springdale","AR","35.99403","-94.219977","-6","1" +"72768","Sulphur Springs","AR","36.484548","-94.46911","-6","1" +"72769","Summers","AR","36.027493","-94.50146","-6","1" +"72770","Tontitown","AR","36.14998","-94.242884","-6","1" +"72773","Wesley","AR","36.019883","-93.8651","-6","1" +"72774","West Fork","AR","35.896307","-94.19661","-6","1" +"72776","Witter","AR","35.934679","-93.64583","-6","1" +"72801","Russellville","AR","35.278429","-93.13682","-6","1" +"72802","Russellville","AR","35.308848","-93.10909","-6","1" +"72811","Russellville","AR","35.314678","-93.113308","-6","1" +"72812","Russellville","AR","35.423102","-93.054388","-6","1" +"72820","Alix","AR","35.415616","-93.73383","-6","1" +"72821","Altus","AR","35.44477","-93.747","-6","1" +"72822","Russellville","AR","35.329457","-93.112368","-6","1" +"72823","Atkins","AR","35.261843","-92.90795","-6","1" +"72824","Belleville","AR","35.108311","-93.42594","-6","1" +"72826","Blue Mountain","AR","35.161856","-93.65615","-6","1" +"72827","Bluffton","AR","34.832089","-93.71111","-6","1" +"72828","Briggsville","AR","34.929705","-93.53009","-6","1" +"72829","Centerville","AR","35.110131","-93.17279","-6","1" +"72830","Clarksville","AR","35.490105","-93.4851","-6","1" +"72832","Coal Hill","AR","35.435619","-93.67368","-6","1" +"72833","Danville","AR","35.044021","-93.4195","-6","1" +"72834","Dardanelle","AR","35.199221","-93.17973","-6","1" +"72835","Delaware","AR","35.299773","-93.35469","-6","1" +"72837","Dover","AR","35.460782","-93.10863","-6","1" +"72838","Gravelly","AR","34.88007","-93.70593","-6","1" +"72839","Hagarville","AR","35.651525","-93.29708","-6","1" +"72840","Hartman","AR","35.437519","-93.61675","-6","1" +"72841","Harvey","AR","34.866017","-93.77678","-6","1" +"72842","Havana","AR","35.111397","-93.58735","-6","1" +"72843","Hector","AR","35.517382","-92.95354","-6","1" +"72845","Knoxville","AR","35.376739","-93.35706","-6","1" +"72846","Lamar","AR","35.470638","-93.36042","-6","1" +"72847","London","AR","35.380528","-93.28528","-6","1" +"72851","New Blaine","AR","35.289176","-93.44323","-6","1" +"72852","Oark","AR","35.689689","-93.55764","-6","1" +"72853","Ola","AR","35.014918","-93.25496","-6","1" +"72854","Ozone","AR","35.686766","-93.42258","-6","1" +"72855","Paris","AR","35.293281","-93.72139","-6","1" +"72856","Pelsor","AR","35.794196","-93.04185","-6","1" +"72857","Plainview","AR","34.865448","-93.33057","-6","1" +"72858","Pottsville","AR","35.228264","-93.03947","-6","1" +"72860","Rover","AR","34.949945","-93.40287","-6","1" +"72863","Scranton","AR","35.358493","-93.52793","-6","1" +"72865","Subiaco","AR","35.306084","-93.57336","-6","1" +"72901","Fort Smith","AR","35.373791","-94.41371","-6","1" +"72902","Fort Smith","AR","35.38619","-94.409114","-6","1" +"72903","Fort Smith","AR","35.357041","-94.36914","-6","1" +"72904","Fort Smith","AR","35.406185","-94.39103","-6","1" +"72905","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72906","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72908","Fort Smith","AR","35.301623","-94.41283","-6","1" +"72913","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72914","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72916","Fort Smith","AR","35.265119","-94.37789","-6","1" +"72917","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72918","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72919","Fort Smith","AR","35.191046","-94.23816","-6","1" +"72921","Alma","AR","35.48891","-94.20897","-6","1" +"72923","Barling","AR","35.332908","-94.30853","-6","1" +"72924","Bates","AR","34.882558","-94.079724","-6","1" +"72926","Boles","AR","34.734204","-94.05784","-6","1" +"72927","Booneville","AR","35.105966","-93.97531","-6","1" +"72928","Branch","AR","35.297936","-93.94723","-6","1" +"72930","Cecil","AR","35.426502","-94.04509","-6","1" +"72932","Cedarville","AR","35.604409","-94.37313","-6","1" +"72933","Charleston","AR","35.312232","-94.0371","-6","1" +"72934","Chester","AR","35.668554","-94.27583","-6","1" +"72935","Dyer","AR","35.478787","-94.11998","-6","1" +"72936","Greenwood","AR","35.200061","-94.24376","-6","1" +"72937","Hackett","AR","35.15875","-94.39462","-6","1" +"72938","Hartford","AR","35.026991","-94.36684","-6","1" +"72940","Huntington","AR","35.105477","-94.26995","-6","1" +"72941","Lavaca","AR","35.348089","-94.17279","-6","1" +"72943","Magazine","AR","35.184949","-93.80443","-6","1" +"72944","Mansfield","AR","35.057119","-94.234","-6","1" +"72945","Midland","AR","35.090489","-94.35097","-6","1" +"72946","Mountainburg","AR","35.649503","-94.15357","-6","1" +"72947","Mulberry","AR","35.528854","-94.05225","-6","1" +"72948","Natural Dam","AR","35.72446","-94.41065","-6","1" +"72949","Ozark","AR","35.549469","-93.81819","-6","1" +"72950","Parks","AR","34.779465","-93.90077","-6","1" +"72951","Ratcliff","AR","35.312316","-93.8805","-6","1" +"72952","Rudy","AR","35.562293","-94.31088","-6","1" +"72955","Uniontown","AR","35.594579","-94.44989","-6","1" +"72956","Van Buren","AR","35.456536","-94.34581","-6","1" +"72957","Van Buren","AR","35.494412","-94.318648","-6","1" +"72958","Waldron","AR","34.907335","-94.13624","-6","1" +"72959","Winslow","AR","35.797792","-94.11367","-6","1" +"73001","Albert","OK","35.203206","-98.357423","-6","1" +"73002","Alex","OK","34.936221","-97.74453","-6","1" +"73003","Edmond","OK","35.681402","-97.5331","-6","1" +"73004","Amber","OK","35.152892","-97.85582","-6","1" +"73005","Anadarko","OK","35.050671","-98.23984","-6","1" +"73006","Apache","OK","34.894964","-98.38697","-6","1" +"73007","Arcadia","OK","35.685368","-97.32739","-6","1" +"73008","Bethany","OK","35.506456","-97.63934","-6","1" +"73009","Binger","OK","35.292476","-98.35804","-6","1" +"73010","Blanchard","OK","35.118392","-97.66381","-6","1" +"73011","Bradley","OK","34.868514","-97.71386","-6","1" +"73012","Bray","OK","34.48532","-97.852223","-6","1" +"73013","Edmond","OK","35.623805","-97.47909","-6","1" +"73014","Calumet","OK","35.587497","-98.14506","-6","1" +"73015","Carnegie","OK","35.113271","-98.58643","-6","1" +"73016","Cashion","OK","35.805831","-97.68754","-6","1" +"73017","Cement","OK","34.932493","-98.11946","-6","1" +"73018","Chickasha","OK","35.040526","-97.94723","-6","1" +"73019","Norman","OK","35.208566","-97.44451","-6","1" +"73020","Choctaw","OK","35.465363","-97.26645","-6","1" +"73021","Colony","OK","35.34525","-98.66403","-6","1" +"73022","Concho","OK","35.618487","-97.99188","-6","1" +"73023","Chickasha","OK","35.031247","-97.881959","-6","1" +"73024","Corn","OK","35.370775","-98.80897","-6","1" +"73026","Norman","OK","35.22704","-97.28198","-6","1" +"73027","Coyle","OK","35.975057","-97.25088","-6","1" +"73028","Crescent","OK","35.96375","-97.63071","-6","1" +"73029","Cyril","OK","34.907566","-98.19738","-6","1" +"73030","Davis","OK","34.485896","-97.14753","-6","1" +"73031","Dibble","OK","35.027","-97.62801","-6","1" +"73032","Dougherty","OK","34.400476","-97.05041","-6","1" +"73033","Eakly","OK","35.303547","-98.55543","-6","1" +"73034","Edmond","OK","35.683768","-97.44686","-6","1" +"73036","El Reno","OK","35.519046","-97.95534","-6","1" +"73038","Fort Cobb","OK","35.137863","-98.43667","-6","1" +"73040","Geary","OK","35.631117","-98.35764","-6","1" +"73041","Gotebo","OK","35.045196","-98.87586","-6","1" +"73042","Gracemont","OK","35.218293","-98.2484","-6","1" +"73043","Greenfield","OK","35.730049","-98.38577","-6","1" +"73044","Guthrie","OK","35.857303","-97.43176","-6","1" +"73045","Harrah","OK","35.491184","-97.16132","-6","1" +"73047","Hinton","OK","35.463837","-98.32451","-6","1" +"73048","Hydro","OK","35.471566","-98.54418","-6","1" +"73049","Jones","OK","35.572909","-97.29596","-6","1" +"73050","Langston","OK","35.941421","-97.25495","-6","1" +"73051","Lexington","OK","35.039068","-97.29276","-6","1" +"73052","Lindsay","OK","34.839562","-97.60045","-6","1" +"73053","Lookeba","OK","35.372736","-98.41223","-6","1" +"73054","Luther","OK","35.662619","-97.18976","-6","1" +"73055","Marlow","OK","34.637595","-97.93235","-6","1" +"73056","Marshall","OK","36.153239","-97.62988","-6","1" +"73057","Maysville","OK","34.828663","-97.42481","-6","1" +"73058","Meridian","OK","35.821107","-97.23455","-6","1" +"73059","Minco","OK","35.313109","-98.01237","-6","1" +"73061","Morrison","OK","36.323723","-97.00904","-6","1" +"73062","Mountain View","OK","35.062348","-98.73519","-6","1" +"73063","Mulhall","OK","36.06773","-97.43987","-6","1" +"73064","Mustang","OK","35.388059","-97.73626","-6","1" +"73065","Newcastle","OK","35.240232","-97.60908","-6","1" +"73066","Nicoma Park","OK","35.491226","-97.32434","-6","1" +"73067","Ninnekah","OK","34.909551","-97.9436","-6","1" +"73068","Noble","OK","35.138421","-97.32689","-6","1" +"73069","Norman","OK","35.228649","-97.45629","-6","1" +"73070","Norman","OK","35.187611","-97.397509","-6","1" +"73071","Norman","OK","35.225702","-97.42394","-6","1" +"73072","Norman","OK","35.212681","-97.48672","-6","1" +"73073","Orlando","OK","36.151316","-97.36279","-6","1" +"73074","Paoli","OK","34.831083","-97.2718","-6","1" +"73075","Pauls Valley","OK","34.741677","-97.22846","-6","1" +"73077","Perry","OK","36.308588","-97.28809","-6","1" +"73078","Piedmont","OK","35.654827","-97.76238","-6","1" +"73079","Pocasset","OK","35.210855","-98.01195","-6","1" +"73080","Purcell","OK","35.017656","-97.39646","-6","1" +"73082","Rush Springs","OK","34.790635","-97.93807","-6","1" +"73083","Edmond","OK","35.666481","-97.465436","-6","1" +"73084","Spencer","OK","35.52106","-97.34173","-6","1" +"73085","Yukon","OK","35.489527","-97.750009","-6","1" +"73086","Sulphur","OK","34.49284","-96.98606","-6","1" +"73089","Tuttle","OK","35.279882","-97.78458","-6","1" +"73090","Union City","OK","35.394725","-97.93552","-6","1" +"73092","Verden","OK","35.109275","-98.08247","-6","1" +"73093","Washington","OK","35.089882","-97.48837","-6","1" +"73094","Washita","OK","35.203206","-98.357423","-6","1" +"73095","Wayne","OK","34.913215","-97.30452","-6","1" +"73096","Weatherford","OK","35.527593","-98.71259","-6","1" +"73097","Wheatland","OK","35.397259","-97.65189","-6","1" +"73098","Wynnewood","OK","34.634693","-97.16322","-6","1" +"73099","Yukon","OK","35.506204","-97.74814","-6","1" +"73101","Oklahoma City","OK","35.491608","-97.562817","-6","1" +"73102","Oklahoma City","OK","35.47156","-97.52036","-6","1" +"73103","Oklahoma City","OK","35.489709","-97.51819","-6","1" +"73104","Oklahoma City","OK","35.47596","-97.50586","-6","1" +"73105","Oklahoma City","OK","35.509659","-97.50211","-6","1" +"73106","Oklahoma City","OK","35.482309","-97.53499","-6","1" +"73107","Oklahoma City","OK","35.484558","-97.57336","-6","1" +"73108","Oklahoma City","OK","35.447126","-97.55824","-6","1" +"73109","Oklahoma City","OK","35.43366","-97.52496","-6","1" +"73110","Oklahoma City","OK","35.459478","-97.39721","-6","1" +"73111","Oklahoma City","OK","35.504109","-97.47889","-6","1" +"73112","Oklahoma City","OK","35.517857","-97.57284","-6","1" +"73113","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73114","Oklahoma City","OK","35.568806","-97.52544","-6","1" +"73115","Oklahoma City","OK","35.440311","-97.44201","-6","1" +"73116","Oklahoma City","OK","35.544864","-97.55637","-6","1" +"73117","Oklahoma City","OK","35.476457","-97.47411","-6","1" +"73118","Oklahoma City","OK","35.515008","-97.53106","-6","1" +"73119","Oklahoma City","OK","35.42306","-97.56051","-6","1" +"73120","Oklahoma City","OK","35.579488","-97.56496","-6","1" +"73121","Oklahoma City","OK","35.50356","-97.44693","-6","1" +"73122","Oklahoma City","OK","35.520506","-97.6133","-6","1" +"73123","Oklahoma City","OK","35.535989","-97.202331","-6","1" +"73124","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73125","Oklahoma City","OK","35.465418","-97.521816","-6","1" +"73126","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73127","Oklahoma City","OK","35.481507","-97.6423","-6","1" +"73128","Oklahoma City","OK","35.441759","-97.62721","-6","1" +"73129","Oklahoma City","OK","35.431361","-97.49267","-6","1" +"73130","Oklahoma City","OK","35.459512","-97.35183","-6","1" +"73131","Oklahoma City","OK","35.576357","-97.46924","-6","1" +"73132","Oklahoma City","OK","35.552755","-97.63571","-6","1" +"73134","Oklahoma City","OK","35.612359","-97.57152","-6","1" +"73135","Oklahoma City","OK","35.40017","-97.43249","-6","1" +"73136","Oklahoma City","OK","35.61534","-97.326151","-6","1" +"73137","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73139","Oklahoma City","OK","35.388461","-97.52713","-6","1" +"73140","Oklahoma City","OK","35.518509","-97.427464","-6","1" +"73141","Oklahoma City","OK","35.498461","-97.39314","-6","1" +"73142","Oklahoma City","OK","35.605785","-97.63042","-6","1" +"73143","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73144","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73145","Oklahoma City","OK","35.433093","-97.39844","-6","1" +"73146","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73147","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73148","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73149","Oklahoma City","OK","35.395362","-97.49701","-6","1" +"73150","Oklahoma City","OK","35.407113","-97.33996","-6","1" +"73151","Oklahoma City","OK","35.568867","-97.4055","-6","1" +"73152","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73153","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73154","Oklahoma City","OK","35.523758","-97.525467","-6","1" +"73155","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73156","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73157","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73159","Oklahoma City","OK","35.386411","-97.55731","-6","1" +"73160","Oklahoma City","OK","35.34377","-97.48596","-6","1" +"73162","Oklahoma City","OK","35.579254","-97.63765","-6","1" +"73163","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73164","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73165","Oklahoma City","OK","35.338689","-97.36747","-6","1" +"73167","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73169","Oklahoma City","OK","35.388023","-97.64135","-6","1" +"73170","Oklahoma City","OK","35.338716","-97.53569","-6","1" +"73172","Oklahoma City","OK","35.517456","-97.621769","-6","1" +"73173","Oklahoma City","OK","35.355645","-97.64479","-6","1" +"73177","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73178","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73179","Oklahoma City","OK","35.416826","-97.62787","-6","1" +"73180","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73184","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73185","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73189","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73190","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73193","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73194","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73196","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73197","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73198","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73199","Oklahoma City","OK","35.551409","-97.407537","-6","1" +"73301","Austin","TX","30.326374","-97.771258","-6","1" +"73344","Austin","TX","30.326374","-97.771258","-6","1" +"73367","Sterling","OK","34.752406","-98.171022","-6","1" +"73371","Ames","OK","36.248359","-98.189412","-6","1" +"73401","Ardmore","OK","34.184742","-97.12655","-6","1" +"73402","Ardmore","OK","34.288884","-97.248074","-6","1" +"73403","Ardmore","OK","34.288884","-97.248074","-6","1" +"73425","Countyline","OK","34.447003","-97.55801","-6","1" +"73430","Burneyville","OK","33.925768","-97.36956","-6","1" +"73432","Coleman","OK","34.252682","-96.43358","-6","1" +"73433","Elmore City","OK","34.625144","-97.39901","-6","1" +"73434","Foster","OK","34.647208","-97.55044","-6","1" +"73435","Fox","OK","34.354547","-97.4843","-6","1" +"73436","Gene Autry","OK","34.293948","-97.033905","-6","1" +"73437","Graham","OK","34.363418","-97.43017","-6","1" +"73438","Healdton","OK","34.238486","-97.48895","-6","1" +"73439","Kingston","OK","33.938714","-96.71234","-6","1" +"73440","Lebanon","OK","33.975243","-96.90609","-6","1" +"73441","Leon","OK","33.877679","-97.42814","-6","1" +"73442","Loco","OK","34.329621","-97.68182","-6","1" +"73443","Lone Grove","OK","34.175234","-97.28894","-6","1" +"73444","Hennepin","OK","34.499735","-97.36406","-6","1" +"73445","Ravia","OK","34.244011","-96.751093","-6","1" +"73446","Madill","OK","34.092658","-96.74851","-6","1" +"73447","Mannsville","OK","34.225742","-96.86109","-6","1" +"73448","Marietta","OK","33.9401","-97.11031","-6","1" +"73449","Mead","OK","33.990978","-96.54409","-6","1" +"73450","Milburn","OK","34.273995","-96.54837","-6","1" +"73453","Overbrook","OK","34.033426","-97.24379","-6","1" +"73455","Ravia","OK","34.240761","-96.75726","-6","1" +"73456","Ringling","OK","34.165558","-97.62121","-6","1" +"73458","Springer","OK","34.337522","-97.23958","-6","1" +"73459","Thackerville","OK","33.794716","-97.13848","-6","1" +"73460","Tishomingo","OK","34.253452","-96.68124","-6","1" +"73461","Wapanucka","OK","34.367986","-96.43012","-6","1" +"73463","Wilson","OK","34.149455","-97.43096","-6","1" +"73476","Pernell","OK","34.680871","-97.300429","-6","1" +"73481","Ratliff City","OK","34.43664","-97.50121","-6","1" +"73487","Tatums","OK","34.481151","-97.46209","-6","1" +"73488","Tussy","OK","34.4836","-97.54783","-6","1" +"73491","Velma","OK","34.462809","-97.65419","-6","1" +"73501","Lawton","OK","34.608348","-98.39414","-6","1" +"73502","Lawton","OK","34.630879","-98.457646","-6","1" +"73503","Fort Sill","OK","34.69727","-98.46808","-6","1" +"73505","Lawton","OK","34.613973","-98.46255","-6","1" +"73506","Lawton","OK","34.630879","-98.457646","-6","1" +"73507","Lawton","OK","34.621373","-98.4001","-6","1" +"73520","Addington","OK","34.243494","-97.93843","-6","1" +"73521","Altus","OK","34.638773","-99.31787","-6","1" +"73522","Altus","OK","34.723795","-99.383928","-6","1" +"73523","Altus AFB","OK","34.598197","-99.440839","-6","1" +"73526","Blair","OK","34.776114","-99.30835","-6","1" +"73527","Cache","OK","34.613786","-98.62492","-6","1" +"73528","Chattanooga","OK","34.425098","-98.65892","-6","1" +"73529","Comanche","OK","34.372622","-97.97809","-6","1" +"73530","Davidson","OK","34.254376","-99.05182","-6","1" +"73531","Devol","OK","34.209826","-98.54891","-6","1" +"73532","Duke","OK","34.649815","-99.55555","-6","1" +"73533","Duncan","OK","34.502833","-97.95185","-6","1" +"73534","Duncan","OK","34.518944","-97.973331","-6","1" +"73536","Duncan","OK","34.48532","-97.852223","-6","1" +"73537","Eldorado","OK","34.49515","-99.67861","-6","1" +"73538","Elgin","OK","34.747379","-98.27805","-6","1" +"73539","Elmer","OK","34.457367","-99.28051","-6","1" +"73540","Faxon","OK","34.465332","-98.56181","-6","1" +"73541","Fletcher","OK","34.809495","-98.19821","-6","1" +"73542","Frederick","OK","34.410061","-98.96701","-6","1" +"73543","Geronimo","OK","34.478901","-98.37791","-6","1" +"73544","Gould","OK","34.681369","-99.74534","-6","1" +"73546","Grandfield","OK","34.239154","-98.72275","-6","1" +"73547","Granite","OK","34.976173","-99.3952","-6","1" +"73548","Hastings","OK","34.239192","-98.11312","-6","1" +"73549","Headrick","OK","34.645375","-99.15211","-6","1" +"73550","Hollis","OK","34.688567","-99.90944","-6","1" +"73551","Hollister","OK","34.325802","-98.86104","-6","1" +"73552","Indiahoma","OK","34.62256","-98.75386","-6","1" +"73553","Loveland","OK","34.330239","-98.70098","-6","1" +"73554","Mangum","OK","34.855652","-99.52012","-6","1" +"73555","Manitou","OK","34.50847","-98.96369","-6","1" +"73556","Martha","OK","34.751924","-99.39383","-6","1" +"73557","Medicine Park","OK","34.72775","-98.5008","-6","1" +"73558","Meers","OK","34.630879","-98.457646","-6","1" +"73559","Mountain Park","OK","34.696985","-98.96184","-6","1" +"73560","Olustee","OK","34.571329","-99.45164","-6","1" +"73561","Oscar","OK","34.023916","-97.64801","-6","1" +"73562","Randlett","OK","34.188182","-98.43533","-6","1" +"73564","Roosevelt","OK","34.834172","-98.97568","-6","1" +"73565","Ryan","OK","34.008894","-97.93581","-6","1" +"73566","Snyder","OK","34.637179","-98.96532","-6","1" +"73567","Sterling","OK","34.748538","-98.16905","-6","1" +"73568","Temple","OK","34.273576","-98.23377","-6","1" +"73569","Terral","OK","33.916049","-97.8621","-6","1" +"73570","Tipton","OK","34.500298","-99.12375","-6","1" +"73571","Vinson","OK","34.924584","-99.86736","-6","1" +"73572","Walters","OK","34.359739","-98.3455","-6","1" +"73573","Waurika","OK","34.16127","-97.99784","-6","1" +"73575","Duncan","OK","34.48532","-97.852223","-6","1" +"73601","Clinton","OK","35.508248","-98.96917","-6","1" +"73620","Arapaho","OK","35.591351","-99.00873","-6","1" +"73622","Bessie","OK","35.399588","-99.00641","-6","1" +"73624","Burns Flat","OK","35.355453","-99.17705","-6","1" +"73625","Butler","OK","35.675986","-99.19074","-6","1" +"73626","Canute","OK","35.394","-99.28001","-6","1" +"73627","Carter","OK","35.215997","-99.47006","-6","1" +"73628","Cheyenne","OK","35.603809","-99.6728","-6","1" +"73632","Cordell","OK","35.283812","-98.94987","-6","1" +"73638","Crawford","OK","35.819529","-99.77425","-6","1" +"73639","Custer City","OK","35.70364","-98.93351","-6","1" +"73641","Dill City","OK","35.26727","-99.18162","-6","1" +"73642","Durham","OK","35.851512","-99.90119","-6","1" +"73644","Elk City","OK","35.405935","-99.41658","-6","1" +"73645","Erick","OK","35.250612","-99.88029","-6","1" +"73646","Fay","OK","35.826514","-98.62902","-6","1" +"73647","Foss","OK","35.45544","-99.1744","-6","1" +"73648","Elk City","OK","35.26946","-99.680146","-6","1" +"73650","Hammon","OK","35.646142","-99.38849","-6","1" +"73651","Hobart","OK","35.018385","-99.09374","-6","1" +"73654","Leedey","OK","35.837115","-99.36845","-6","1" +"73655","Lone Wolf","OK","35.006152","-99.24851","-6","1" +"73656","Mayfield","OK","35.26946","-99.680146","-6","1" +"73658","Oakwood","OK","35.934444","-98.70827","-6","1" +"73659","Putnam","OK","35.848743","-98.9029","-6","1" +"73660","Reydon","OK","35.610122","-99.91743","-6","1" +"73661","Rocky","OK","35.167368","-99.0517","-6","1" +"73662","Sayre","OK","35.321815","-99.65314","-6","1" +"73663","Seiling","OK","36.13196","-98.91683","-6","1" +"73664","Sentinel","OK","35.167499","-99.21043","-6","1" +"73666","Sweetwater","OK","35.458562","-99.87143","-6","1" +"73667","Taloga","OK","36.033979","-98.99491","-6","1" +"73668","Texola","OK","35.219721","-99.99228","-6","1" +"73669","Thomas","OK","35.739994","-98.75502","-6","1" +"73673","Willow","OK","35.04655","-99.58042","-6","1" +"73701","Enid","OK","36.411133","-97.85026","-6","1" +"73702","Enid","OK","36.379072","-97.782595","-6","1" +"73703","Enid","OK","36.402666","-97.92836","-6","1" +"73705","Enid","OK","36.379072","-97.782595","-6","1" +"73706","Enid","OK","36.379072","-97.782595","-6","1" +"73716","Aline","OK","36.49556","-98.49057","-6","1" +"73717","Alva","OK","36.804875","-98.69707","-6","1" +"73718","Ames","OK","36.224663","-98.14881","-6","1" +"73719","Amorita","OK","36.949448","-98.28297","-6","1" +"73720","Bison","OK","36.200563","-97.88883","-6","1" +"73722","Burlington","OK","36.920802","-98.38429","-6","1" +"73724","Canton","OK","36.06141","-98.64291","-6","1" +"73726","Carmen","OK","36.580451","-98.47567","-6","1" +"73727","Carrier","OK","36.481331","-98.04144","-6","1" +"73728","Cherokee","OK","36.751276","-98.37108","-6","1" +"73729","Cleo Springs","OK","36.404703","-98.43861","-6","1" +"73730","Covington","OK","36.311257","-97.5597","-6","1" +"73731","Dacoma","OK","36.648048","-98.58222","-6","1" +"73733","Douglas","OK","36.239024","-97.68299","-6","1" +"73734","Dover","OK","35.978156","-97.8868","-6","1" +"73735","Drummond","OK","36.285664","-98.04193","-6","1" +"73736","Fairmont","OK","36.347664","-97.69316","-6","1" +"73737","Fairview","OK","36.281915","-98.52463","-6","1" +"73738","Garber","OK","36.455282","-97.55974","-6","1" +"73739","Goltry","OK","36.521836","-98.13462","-6","1" +"73741","Helena","OK","36.557263","-98.27451","-6","1" +"73742","Hennessey","OK","36.105884","-97.88304","-6","1" +"73743","Hillsdale","OK","36.563732","-97.99385","-6","1" +"73744","Hitchcock","OK","35.966488","-98.29013","-6","1" +"73746","Hopeton","OK","36.692876","-98.65816","-6","1" +"73747","Isabella","OK","36.221983","-98.32899","-6","1" +"73749","Jet","OK","36.702485","-98.1728","-6","1" +"73750","Kingfisher","OK","35.856216","-97.93743","-6","1" +"73753","Kremlin","OK","36.56225","-97.83368","-6","1" +"73754","Lahoma","OK","36.389599","-98.09063","-6","1" +"73755","Longdale","OK","36.14001","-98.57918","-6","1" +"73756","Loyal","OK","36.007004","-98.11234","-6","1" +"73757","Lucien","OK","36.267701","-97.45245","-6","1" +"73758","Manchester","OK","36.949144","-98.04938","-6","1" +"73759","Medford","OK","36.832446","-97.72414","-6","1" +"73760","Meno","OK","36.371779","-98.16808","-6","1" +"73761","Nash","OK","36.685205","-98.03095","-6","1" +"73762","Okarche","OK","35.713606","-97.97217","-6","1" +"73763","Okeene","OK","36.116401","-98.33352","-6","1" +"73764","Omega","OK","35.867757","-98.17995","-6","1" +"73766","Pond Creek","OK","36.662715","-97.83063","-6","1" +"73768","Ringwood","OK","36.383753","-98.27411","-6","1" +"73770","Southard","OK","36.058133","-98.588383","-6","1" +"73771","Wakita","OK","36.844573","-97.962","-6","1" +"73772","Watonga","OK","35.870276","-98.43772","-6","1" +"73773","Waukomis","OK","36.273144","-97.90335","-6","1" +"73801","Woodward","OK","36.433665","-99.40838","-6","1" +"73802","Woodward","OK","36.543405","-99.29047","-6","1" +"73832","Arnett","OK","36.122573","-99.712","-6","1" +"73834","Buffalo","OK","36.851116","-99.5897","-6","1" +"73835","Camargo","OK","35.986173","-99.23866","-6","1" +"73838","Chester","OK","36.253795","-98.89818","-6","1" +"73840","Fargo","OK","36.403804","-99.64674","-6","1" +"73841","Fort Supply","OK","36.557966","-99.57425","-6","1" +"73842","Freedom","OK","36.803902","-99.18304","-6","1" +"73843","Gage","OK","36.41954","-99.84131","-6","1" +"73844","Gate","OK","36.853151","-100.06947","-6","1" +"73847","Knowles","OK","36.903089","-100.22748","-6","1" +"73848","Laverne","OK","36.673357","-99.88179","-6","1" +"73851","May","OK","36.614425","-99.77153","-6","1" +"73852","Mooreland","OK","36.456875","-99.13004","-6","1" +"73853","Mutual","OK","36.223999","-99.1237","-6","1" +"73855","Rosston","OK","36.863262","-99.88181","-6","1" +"73857","Sharon","OK","36.283175","-99.32679","-6","1" +"73858","Shattuck","OK","36.226355","-99.89028","-6","1" +"73859","Vici","OK","36.140186","-99.26866","-6","1" +"73860","Waynoka","OK","36.56306","-98.86623","-6","1" +"73901","Adams","OK","36.756145","-101.07462","-6","1" +"73931","Balko","OK","36.601946","-100.76553","-6","1" +"73932","Beaver","OK","36.710457","-100.47888","-6","1" +"73933","Boise City","OK","36.740652","-102.54473","-6","1" +"73937","Felt","OK","36.563865","-102.78868","-6","1" +"73938","Forgan","OK","36.914169","-100.61244","-6","1" +"73939","Goodwell","OK","36.691413","-101.738","-6","1" +"73942","Guymon","OK","36.739447","-101.48851","-6","1" +"73944","Hardesty","OK","36.605467","-101.1204","-6","1" +"73945","Hooker","OK","36.832751","-101.25618","-6","1" +"73946","Kenton","OK","36.922263","-102.92339","-6","1" +"73947","Keyes","OK","36.844919","-102.2005","-6","1" +"73949","Texhoma","OK","36.56879","-101.91782","-6","1" +"73950","Turpin","OK","36.852475","-100.89584","-6","1" +"73951","Tyrone","OK","36.95279","-101.06337","-6","1" +"74001","Avant","OK","36.487394","-96.06384","-6","1" +"74002","Barnsdall","OK","36.549109","-96.146","-6","1" +"74003","Bartlesville","OK","36.741589","-96.00614","-6","1" +"74004","Bartlesville","OK","36.711386","-95.894042","-6","1" +"74005","Bartlesville","OK","36.711386","-95.894042","-6","1" +"74006","Bartlesville","OK","36.733398","-95.92404","-6","1" +"74008","Bixby","OK","35.951402","-95.88361","-6","1" +"74009","Bowring","OK","36.665794","-96.398424","-6","1" +"74010","Bristow","OK","35.843486","-96.38183","-6","1" +"74011","Broken Arrow","OK","35.992283","-95.80542","-6","1" +"74012","Broken Arrow","OK","36.045907","-95.80694","-6","1" +"74013","Broken Arrow","OK","36.139826","-96.029725","-6","1" +"74014","Broken Arrow","OK","36.053246","-95.70957","-6","1" +"74015","Catoosa","OK","36.188136","-95.73199","-6","1" +"74016","Chelsea","OK","36.546415","-95.44592","-6","1" +"74017","Claremore","OK","36.327143","-95.61192","-6","1" +"74018","Claremore","OK","36.343579","-95.605964","-6","1" +"74020","Cleveland","OK","36.260645","-96.39586","-6","1" +"74021","Collinsville","OK","36.369251","-95.8397","-6","1" +"74022","Copan","OK","36.909076","-95.96577","-6","1" +"74023","Cushing","OK","35.973286","-96.75751","-6","1" +"74026","Davenport","OK","35.710256","-96.76333","-6","1" +"74027","Delaware","OK","36.793303","-95.63631","-6","1" +"74028","Depew","OK","35.805114","-96.53926","-6","1" +"74029","Dewey","OK","36.808722","-95.92617","-6","1" +"74030","Drumright","OK","35.987421","-96.58776","-6","1" +"74031","Foyil","OK","36.336457","-95.571646","-6","1" +"74032","Glencoe","OK","36.214419","-96.91672","-6","1" +"74033","Glenpool","OK","35.951244","-96.00803","-6","1" +"74034","Hallett","OK","36.232452","-96.56882","-6","1" +"74035","Hominy","OK","36.417205","-96.38379","-6","1" +"74036","Inola","OK","36.145085","-95.51443","-6","1" +"74037","Jenks","OK","36.012562","-95.98241","-6","1" +"74038","Jennings","OK","36.164934","-96.56083","-6","1" +"74039","Kellyville","OK","35.931488","-96.22915","-6","1" +"74041","Kiefer","OK","35.94876","-96.06237","-6","1" +"74042","Lenapah","OK","36.857305","-95.61423","-6","1" +"74043","Leonard","OK","35.918277","-95.798809","-6","1" +"74044","Mannford","OK","36.111943","-96.37159","-6","1" +"74045","Maramec","OK","36.241861","-96.68338","-6","1" +"74046","Milfay","OK","35.901277","-96.326053","-6","1" +"74047","Mounds","OK","35.853188","-96.00205","-6","1" +"74048","Nowata","OK","36.690587","-95.62751","-6","1" +"74050","Oakhurst","OK","36.074141","-96.0619","-6","1" +"74051","Ochelata","OK","36.60234","-95.97544","-6","1" +"74052","Oilton","OK","36.084211","-96.5794","-6","1" +"74053","Oologah","OK","36.437088","-95.71144","-6","1" +"74054","Osage","OK","36.276739","-96.36831","-6","1" +"74055","Owasso","OK","36.278298","-95.8305","-6","1" +"74056","Pawhuska","OK","36.764056","-96.32123","-6","1" +"74058","Pawnee","OK","36.358645","-96.77143","-6","1" +"74059","Perkins","OK","35.968675","-97.04258","-6","1" +"74060","Prue","OK","36.24973","-96.2674","-6","1" +"74061","Ramona","OK","36.533868","-95.90865","-6","1" +"74062","Ripley","OK","36.024668","-96.90773","-6","1" +"74063","Sand Springs","OK","36.139385","-96.16523","-6","1" +"74064","McCord","OK","36.68125","-97.032304","-6","1" +"74066","Sapulpa","OK","35.996582","-96.1194","-6","1" +"74067","Sapulpa","OK","36.019575","-96.093682","-6","1" +"74068","Shamrock","OK","35.910408","-96.57768","-6","1" +"74070","Skiatook","OK","36.381305","-96.03998","-6","1" +"74071","Slick","OK","35.778763","-96.26802","-6","1" +"74072","S Coffeyville","OK","36.957786","-95.57108","-6","1" +"74073","Sperry","OK","36.306323","-96.02081","-6","1" +"74074","Stillwater","OK","36.105571","-97.07631","-6","1" +"74075","Stillwater","OK","36.149394","-97.05784","-6","1" +"74076","Stillwater","OK","36.072372","-97.055141","-6","1" +"74077","Stillwater","OK","36.093665","-96.987458","-6","1" +"74078","Stillwater","OK","36.093665","-96.987458","-6","1" +"74079","Stroud","OK","35.744531","-96.66342","-6","1" +"74080","Talala","OK","36.527631","-95.6992","-6","1" +"74081","Terlton","OK","36.169806","-96.44005","-6","1" +"74082","Vera","OK","36.450115","-95.881381","-6","1" +"74083","Wann","OK","36.935821","-95.78336","-6","1" +"74084","Wynona","OK","36.542944","-96.31853","-6","1" +"74085","Yale","OK","36.10865","-96.70231","-6","1" +"74101","Tulsa","OK","36.039147","-95.868667","-6","1" +"74102","Tulsa","OK","36.063095","-95.804231","-6","1" +"74103","Tulsa","OK","36.156892","-95.99508","-6","1" +"74104","Tulsa","OK","36.146143","-95.95414","-6","1" +"74105","Tulsa","OK","36.099044","-95.96615","-6","1" +"74106","Tulsa","OK","36.184692","-95.98512","-6","1" +"74107","Tulsa","OK","36.102042","-96.03144","-6","1" +"74108","Tulsa","OK","36.146897","-95.79958","-6","1" +"74110","Tulsa","OK","36.181143","-95.95424","-6","1" +"74112","Tulsa","OK","36.148444","-95.90841","-6","1" +"74114","Tulsa","OK","36.126894","-95.94657","-6","1" +"74115","Tulsa","OK","36.180144","-95.91129","-6","1" +"74116","Tulsa","OK","36.169454","-95.8242","-6","1" +"74117","Tulsa","OK","36.235961","-95.88514","-6","1" +"74119","Tulsa","OK","36.142743","-95.98872","-6","1" +"74120","Tulsa","OK","36.151143","-95.97747","-6","1" +"74121","Tulsa","OK","36.139826","-96.029725","-6","1" +"74126","Tulsa","OK","36.236691","-95.98674","-6","1" +"74127","Tulsa","OK","36.160341","-96.03435","-6","1" +"74128","Tulsa","OK","36.146577","-95.85194","-6","1" +"74129","Tulsa","OK","36.126446","-95.86763","-6","1" +"74130","Tulsa","OK","36.239642","-95.95847","-6","1" +"74131","Tulsa","OK","36.057536","-96.07119","-6","1" +"74132","Tulsa","OK","36.051893","-96.02752","-6","1" +"74133","Tulsa","OK","36.04309","-95.88417","-6","1" +"74134","Tulsa","OK","36.114797","-95.82105","-6","1" +"74135","Tulsa","OK","36.101245","-95.92475","-6","1" +"74136","Tulsa","OK","36.059495","-95.93922","-6","1" +"74137","Tulsa","OK","36.025405","-95.92953","-6","1" +"74141","Tulsa","OK","36.139826","-96.029725","-6","1" +"74145","Tulsa","OK","36.096296","-95.8847","-6","1" +"74146","Tulsa","OK","36.102112","-95.85244","-6","1" +"74147","Tulsa","OK","36.139826","-96.029725","-6","1" +"74148","Tulsa","OK","36.139826","-96.029725","-6","1" +"74149","Tulsa","OK","36.139826","-96.029725","-6","1" +"74150","Tulsa","OK","36.139826","-96.029725","-6","1" +"74152","Tulsa","OK","36.139826","-96.029725","-6","1" +"74153","Tulsa","OK","36.139826","-96.029725","-6","1" +"74155","Tulsa","OK","36.139826","-96.029725","-6","1" +"74156","Tulsa","OK","36.302391","-95.960472","-6","1" +"74157","Tulsa","OK","36.139826","-96.029725","-6","1" +"74158","Tulsa","OK","36.139826","-96.029725","-6","1" +"74159","Tulsa","OK","36.077221","-96.083477","-6","1" +"74169","Tulsa","OK","36.139826","-96.029725","-6","1" +"74170","Tulsa","OK","36.139826","-96.029725","-6","1" +"74171","Tulsa","OK","36.054345","-95.957721","-6","1" +"74172","Tulsa","OK","36.154342","-95.992323","-6","1" +"74177","Tulsa","OK","36.048045","-95.957771","-6","1" +"74182","Tulsa","OK","36.139826","-96.029725","-6","1" +"74183","Tulsa","OK","36.139826","-96.029725","-6","1" +"74184","Tulsa","OK","36.139826","-96.029725","-6","1" +"74186","Tulsa","OK","36.139826","-96.029725","-6","1" +"74187","Tulsa","OK","36.139826","-96.029725","-6","1" +"74189","Tulsa","OK","36.139826","-96.029725","-6","1" +"74192","Tulsa","OK","36.139826","-96.029725","-6","1" +"74193","Tulsa","OK","36.139826","-96.029725","-6","1" +"74194","Tulsa","OK","36.139826","-96.029725","-6","1" +"74301","Vinita","OK","36.631673","-95.17303","-6","1" +"74328","Colcord","OK","36.260756","-94.69267","-6","1" +"74330","Adair","OK","36.434328","-95.25512","-6","1" +"74331","Afton","OK","36.618326","-94.93424","-6","1" +"74332","Big Cabin","OK","36.51509","-95.22924","-6","1" +"74333","Bluejacket","OK","36.802232","-95.07782","-6","1" +"74334","Dodge","OK","36.597953","-94.647526","-6","1" +"74335","Cardin","OK","36.975692","-94.85161","-6","1" +"74336","Jay","OK","36.422876","-94.796399","-6","1" +"74337","Chouteau","OK","36.167467","-95.31925","-6","1" +"74338","Colcord","OK","36.227439","-94.67798","-6","1" +"74339","Commerce","OK","36.932957","-94.87134","-6","1" +"74340","Disney","OK","36.48721","-94.98452","-6","1" +"74342","Eucha","OK","36.420495","-94.92621","-6","1" +"74343","Fairland","OK","36.747928","-94.84022","-6","1" +"74344","Grove","OK","36.599689","-94.76673","-6","1" +"74345","Grove","OK","36.603587","-94.72974","-6","1" +"74346","Jay","OK","36.444215","-94.78345","-6","1" +"74347","Kansas","OK","36.19","-94.79595","-6","1" +"74349","Ketchum","OK","36.523163","-95.02428","-6","1" +"74350","Langley","OK","36.46898","-95.04967","-6","1" +"74352","Locust Grove","OK","36.148065","-95.16801","-6","1" +"74353","Mazie","OK","36.292495","-95.222792","-6","1" +"74354","Miami","OK","36.880746","-94.87142","-6","1" +"74355","Miami","OK","36.83408","-94.877031","-6","1" +"74358","North Miami","OK","36.915805","-94.88039","-6","1" +"74359","Oaks","OK","36.415938","-94.787091","-6","1" +"74360","Picher","OK","36.981521","-94.83278","-6","1" +"74361","Pryor","OK","36.294174","-95.30295","-6","1" +"74362","Pryor","OK","36.292495","-95.222792","-6","1" +"74363","Quapaw","OK","36.947372","-94.72912","-6","1" +"74364","Rose","OK","36.197948","-94.96707","-6","1" +"74365","Salina","OK","36.296196","-95.10556","-6","1" +"74366","Spavinaw","OK","36.394258","-95.04869","-6","1" +"74367","Strang","OK","36.412084","-95.12924","-6","1" +"74368","Twin Oaks","OK","36.20822","-94.85945","-6","1" +"74369","Welch","OK","36.897777","-95.15249","-6","1" +"74370","Wyandotte","OK","36.777702","-94.68768","-6","1" +"74399","Commerce","OK","36.932944","-94.873005","-6","1" +"74401","Muskogee","OK","35.739681","-95.40711","-6","1" +"74402","Muskogee","OK","35.764223","-95.306916","-6","1" +"74403","Muskogee","OK","35.719962","-95.33691","-6","1" +"74421","Beggs","OK","35.755522","-96.04744","-6","1" +"74422","Boynton","OK","35.645974","-95.66931","-6","1" +"74423","Braggs","OK","35.668132","-95.18582","-6","1" +"74425","Canadian","OK","35.172538","-95.62824","-6","1" +"74426","Checotah","OK","35.443872","-95.54393","-6","1" +"74427","Cookson","OK","35.700818","-94.92552","-6","1" +"74428","Council Hill","OK","35.550269","-95.64874","-6","1" +"74429","Coweta","OK","35.94785","-95.6377","-6","1" +"74430","Crowder","OK","35.124644","-95.66668","-6","1" +"74431","Dewar","OK","35.458946","-95.94597","-6","1" +"74432","Eufaula","OK","35.280145","-95.57854","-6","1" +"74434","Fort Gibson","OK","35.799294","-95.23355","-6","1" +"74435","Gore","OK","35.566657","-95.09627","-6","1" +"74436","Haskell","OK","35.815497","-95.68608","-6","1" +"74437","Henryetta","OK","35.447961","-95.95038","-6","1" +"74438","Hitchita","OK","35.520519","-95.75122","-6","1" +"74440","Hoyt","OK","35.269955","-95.30205","-6","1" +"74441","Hulbert","OK","35.966254","-95.15436","-6","1" +"74442","Indianola","OK","35.152295","-95.78957","-6","1" +"74444","Moodys","OK","36.053001","-94.96682","-6","1" +"74445","Morris","OK","35.616464","-95.84645","-6","1" +"74446","Okay","OK","35.852293","-95.31717","-6","1" +"74447","Okmulgee","OK","35.628612","-95.9734","-6","1" +"74450","Oktaha","OK","35.59824","-95.48434","-6","1" +"74451","Park Hill","OK","35.742956","-94.96737","-6","1" +"74452","Peggs","OK","36.10862","-95.11169","-6","1" +"74454","Porter","OK","35.867529","-95.52647","-6","1" +"74455","Porum","OK","35.355394","-95.28635","-6","1" +"74456","Preston","OK","35.712025","-95.99717","-6","1" +"74457","Proctor","OK","36.053046","-94.7768","-6","1" +"74458","Redbird","OK","35.963567","-95.513856","-6","1" +"74459","Rentiesville","OK","35.519193","-95.49447","-6","1" +"74460","Schulter","OK","35.51833","-95.9576","-6","1" +"74461","Stidham","OK","35.384048","-95.70731","-6","1" +"74462","Stigler","OK","35.272967","-95.16328","-6","1" +"74463","Taft","OK","35.76342","-95.54788","-6","1" +"74464","Tahlequah","OK","35.923658","-94.97185","-6","1" +"74465","Tahlequah","OK","35.900074","-95.040008","-6","1" +"74466","Tullahassee","OK","35.963567","-95.513856","-6","1" +"74467","Wagoner","OK","35.961019","-95.3611","-6","1" +"74468","Wainwright","OK","35.61546","-95.56851","-6","1" +"74469","Warner","OK","35.493581","-95.30914","-6","1" +"74470","Webbers Falls","OK","35.490036","-95.15158","-6","1" +"74471","Welling","OK","35.837827","-94.87402","-6","1" +"74472","Whitefield","OK","35.259201","-95.24701","-6","1" +"74477","Wagoner","OK","35.963567","-95.513856","-6","1" +"74501","Mcalester","OK","34.944399","-95.75709","-6","1" +"74502","Mcalester","OK","34.947259","-95.720708","-6","1" +"74520","Ada","OK","34.772557","-96.661745","-6","1" +"74521","Albion","OK","34.660204","-95.09814","-6","1" +"74522","Alderson","OK","34.902286","-95.69073","-6","1" +"74523","Antlers","OK","34.229335","-95.61603","-6","1" +"74525","Atoka","OK","34.347553","-96.11276","-6","1" +"74528","Blanco","OK","34.722059","-95.76125","-6","1" +"74529","Blocker","OK","34.947259","-95.720708","-6","1" +"74530","Bromide","OK","34.416915","-96.49278","-6","1" +"74531","Calvin","OK","34.932628","-96.23929","-6","1" +"74533","Caney","OK","34.217672","-96.19634","-6","1" +"74534","Centrahoma","OK","34.612564","-96.35556","-6","1" +"74535","Clarita","OK","34.488403","-96.43356","-6","1" +"74536","Clayton","OK","34.590491","-95.36797","-6","1" +"74538","Coalgate","OK","34.553763","-96.23084","-6","1" +"74540","Daisy","OK","34.540822","-95.71825","-6","1" +"74542","Atoka","OK","34.4187","-96.039727","-6","1" +"74543","Finley","OK","34.373618","-95.43604","-6","1" +"74545","Gowen","OK","34.877067","-95.47832","-6","1" +"74546","Haileyville","OK","34.855223","-95.57691","-6","1" +"74547","Hartshorne","OK","34.84294","-95.57413","-6","1" +"74549","Honobia","OK","34.536633","-94.93507","-6","1" +"74552","Kinta","OK","35.127495","-95.23098","-6","1" +"74553","Kiowa","OK","34.708098","-95.90485","-6","1" +"74554","Krebs","OK","34.926507","-95.72048","-6","1" +"74555","Lane","OK","34.249448","-95.96199","-6","1" +"74556","Lehigh","OK","34.471798","-96.20366","-6","1" +"74557","Moyers","OK","34.391572","-95.67366","-6","1" +"74558","Nashoba","OK","34.497876","-95.1316","-6","1" +"74559","Panola","OK","34.869457","-95.221099","-6","1" +"74560","Pittsburg","OK","34.66625","-95.78885","-6","1" +"74561","Quinton","OK","35.119128","-95.39008","-6","1" +"74562","Rattan","OK","34.263342","-95.30693","-6","1" +"74563","Red Oak","OK","34.948771","-95.1037","-6","1" +"74565","Savanna","OK","34.831398","-95.83967","-6","1" +"74567","Snow","OK","34.454702","-95.41013","-6","1" +"74569","Stringtown","OK","34.491359","-95.94157","-6","1" +"74570","Stuart","OK","34.858091","-96.09233","-6","1" +"74571","Talihina","OK","34.729815","-95.03625","-6","1" +"74572","Tupelo","OK","34.626083","-96.43083","-6","1" +"74574","Tuskahoma","OK","34.646758","-95.27642","-6","1" +"74576","Wardville","OK","34.665422","-96.03074","-6","1" +"74577","Whitesboro","OK","34.689854","-94.8558","-6","1" +"74578","Wilburton","OK","34.886021","-95.29859","-6","1" +"74601","Ponca City","OK","36.707393","-97.10167","-6","1" +"74602","Ponca City","OK","36.695368","-97.137693","-6","1" +"74603","Ponca City","OK","36.796349","-97.106166","-6","1" +"74604","Ponca City","OK","36.704703","-97.00798","-6","1" +"74630","Billings","OK","36.52791","-97.43304","-6","1" +"74631","Blackwell","OK","36.800787","-97.29289","-6","1" +"74632","Braman","OK","36.939016","-97.33875","-6","1" +"74633","Burbank","OK","36.694585","-96.73934","-6","1" +"74636","Deer Creek","OK","36.810451","-97.51795","-6","1" +"74637","Fairfax","OK","36.577618","-96.69529","-6","1" +"74640","Hunter","OK","36.585776","-97.61334","-6","1" +"74641","Kaw City","OK","36.807276","-96.86091","-6","1" +"74643","Lamont","OK","36.69588","-97.56931","-6","1" +"74644","Marland","OK","36.554757","-97.14483","-6","1" +"74646","Nardin","OK","36.821862","-97.45366","-6","1" +"74647","Newkirk","OK","36.904817","-97.06078","-6","1" +"74650","Ralston","OK","36.500388","-96.74013","-6","1" +"74651","Red Rock","OK","36.473704","-97.20505","-6","1" +"74652","Shidler","OK","36.830328","-96.68054","-6","1" +"74653","Tonkawa","OK","36.665613","-97.32967","-6","1" +"74701","Durant","OK","34.009209","-96.38612","-6","1" +"74702","Durant","OK","33.921979","-96.191767","-6","1" +"74720","Achille","OK","33.83464","-96.39018","-6","1" +"74721","Albany","OK","33.888549","-96.17244","-6","1" +"74722","Battiest","OK","34.454046","-94.94148","-6","1" +"74723","Bennington","OK","33.997865","-96.02963","-6","1" +"74724","Bethel","OK","34.402346","-94.79763","-6","1" +"74726","Bokchito","OK","33.98526","-96.15629","-6","1" +"74727","Boswell","OK","34.026768","-95.8613","-6","1" +"74728","Broken Bow","OK","34.142978","-94.80269","-6","1" +"74729","Caddo","OK","34.137095","-96.26936","-6","1" +"74730","Calera","OK","33.920767","-96.44073","-6","1" +"74731","Cartwright","OK","33.869195","-96.57617","-6","1" +"74733","Colbert","OK","33.84836","-96.5029","-6","1" +"74734","Eagletown","OK","34.138965","-94.55407","-6","1" +"74735","Fort Towson","OK","34.052225","-95.25701","-6","1" +"74736","Garvin","OK","33.917419","-94.96494","-6","1" +"74737","Golden","OK","34.032184","-94.89649","-6","1" +"74738","Grant","OK","33.917165","-95.4894","-6","1" +"74740","Haworth","OK","33.784733","-94.60436","-6","1" +"74741","Hendrix","OK","33.77061","-96.29927","-6","1" +"74743","Hugo","OK","34.010943","-95.51651","-6","1" +"74745","Idabel","OK","33.883578","-94.83154","-6","1" +"74747","Kemp","OK","33.769093","-96.3549","-6","1" +"74748","Kenefic","OK","34.163069","-96.47772","-6","1" +"74750","Millerton","OK","33.98471","-95.01088","-6","1" +"74752","Pickens","OK","34.061674","-94.808868","-6","1" +"74753","Platter","OK","33.918732","-96.5464","-6","1" +"74754","Ringold","OK","34.199682","-95.12064","-6","1" +"74755","Rufe","OK","34.127277","-95.11846","-6","1" +"74756","Sawyer","OK","34.023191","-95.36911","-6","1" +"74759","Soper","OK","34.038263","-95.70851","-6","1" +"74760","Spencerville","OK","34.146827","-95.37358","-6","1" +"74761","Swink","OK","34.01528","-95.20104","-6","1" +"74764","Valliant","OK","34.038794","-95.07793","-6","1" +"74766","Wright City","OK","34.148691","-94.95546","-6","1" +"74801","Shawnee","OK","35.327341","-96.93544","-6","1" +"74802","Shawnee","OK","35.365621","-96.959601","-6","1" +"74804","Shawnee","OK","35.375188","-96.93162","-6","1" +"74807","Shawnee","OK","35.306375","-96.935924","-6","1" +"74818","Seminole","OK","35.162228","-96.609139","-6","1" +"74820","Ada","OK","34.780243","-96.68761","-6","1" +"74821","Ada","OK","34.735301","-96.669321","-6","1" +"74824","Agra","OK","35.883914","-96.86735","-6","1" +"74825","Allen","OK","34.817511","-96.4108","-6","1" +"74826","Asher","OK","35.012407","-96.91873","-6","1" +"74827","Atwood","OK","34.949547","-96.33356","-6","1" +"74829","Boley","OK","35.49596","-96.48051","-6","1" +"74830","Bowlegs","OK","35.147566","-96.6696","-6","1" +"74831","Byars","OK","34.891218","-97.06278","-6","1" +"74832","Carney","OK","35.815581","-97.01061","-6","1" +"74833","Castle","OK","35.54247","-96.39471","-6","1" +"74834","Chandler","OK","35.702159","-96.88961","-6","1" +"74836","Connerville","OK","34.451503","-96.63092","-6","1" +"74837","Cromwell","OK","35.348331","-96.46385","-6","1" +"74839","Dustin","OK","35.262169","-96.05434","-6","1" +"74840","Earlsboro","OK","35.29689","-96.78325","-6","1" +"74842","Fittstown","OK","34.597595","-96.61818","-6","1" +"74843","Fitzhugh","OK","34.648631","-96.73885","-6","1" +"74844","Francis","OK","34.878209","-96.58838","-6","1" +"74845","Hanna","OK","35.203729","-95.90822","-6","1" +"74848","Holdenville","OK","35.088636","-96.38778","-6","1" +"74849","Konawa","OK","34.969783","-96.73899","-6","1" +"74850","Lamar","OK","35.104311","-96.09067","-6","1" +"74851","Mcloud","OK","35.4122","-97.0984","-6","1" +"74852","Macomb","OK","35.123383","-97.00869","-6","1" +"74853","Wetumka","OK","35.235118","-96.24114","-6","1" +"74854","Maud","OK","35.129805","-96.77625","-6","1" +"74855","Meeker","OK","35.507952","-96.89689","-6","1" +"74856","Mill Creek","OK","34.395266","-96.81667","-6","1" +"74857","Newalla","OK","35.351612","-97.19507","-6","1" +"74859","Okemah","OK","35.44116","-96.30798","-6","1" +"74860","Paden","OK","35.514019","-96.56969","-6","1" +"74864","Prague","OK","35.490727","-96.69141","-6","1" +"74865","Roff","OK","34.618331","-96.81397","-6","1" +"74866","Saint Louis","OK","35.062235","-96.8355","-6","1" +"74867","Sasakwa","OK","34.948211","-96.53394","-6","1" +"74868","Seminole","OK","35.249655","-96.65915","-6","1" +"74869","Sparks","OK","35.601113","-96.7777","-6","1" +"74871","Stonewall","OK","34.630936","-96.55756","-6","1" +"74872","Stratford","OK","34.793533","-96.97738","-6","1" +"74873","Tecumseh","OK","35.231608","-96.9767","-6","1" +"74875","Tryon","OK","35.876736","-96.95179","-6","1" +"74878","Wanette","OK","35.012317","-97.06156","-6","1" +"74880","Weleetka","OK","35.369606","-96.13412","-6","1" +"74881","Wellston","OK","35.694734","-97.07043","-6","1" +"74883","Wetumka","OK","35.232465","-96.23571","-6","1" +"74884","Wewoka","OK","35.166644","-96.5066","-6","1" +"74894","Konawa","OK","34.955971","-96.754575","-6","1" +"74901","Arkoma","OK","35.347792","-94.44274","-6","1" +"74902","Pocola","OK","35.241727","-94.46967","-6","1" +"74930","Bokoshe","OK","35.184593","-94.79752","-6","1" +"74931","Bunch","OK","35.690088","-94.76307","-6","1" +"74932","Cameron","OK","35.138765","-94.54108","-6","1" +"74935","Fanshawe","OK","34.951143","-94.90421","-6","1" +"74936","Gans","OK","35.392525","-94.70368","-6","1" +"74937","Heavener","OK","34.866897","-94.58622","-6","1" +"74939","Hodgen","OK","34.712466","-94.65008","-6","1" +"74940","Howe","OK","34.956272","-94.63333","-6","1" +"74941","Keota","OK","35.26773","-94.87609","-6","1" +"74942","Leflore","OK","34.898768","-94.98141","-6","1" +"74943","Lequire","OK","35.077265","-95.08613","-6","1" +"74944","Mccurtain","OK","35.127447","-94.98545","-6","1" +"74945","Marble City","OK","35.595915","-94.8089","-6","1" +"74946","Moffett","OK","35.41483","-94.45263","-6","1" +"74947","Monroe","OK","34.991767","-94.51763","-6","1" +"74948","Muldrow","OK","35.431711","-94.56575","-6","1" +"74949","Muse","OK","34.669198","-94.75729","-6","1" +"74951","Panama","OK","35.172259","-94.67008","-6","1" +"74953","Poteau","OK","35.052793","-94.61829","-6","1" +"74954","Roland","OK","35.413049","-94.50476","-6","1" +"74955","Sallisaw","OK","35.467031","-94.78647","-6","1" +"74956","Shady Point","OK","35.122751","-94.72058","-6","1" +"74957","Smithville","OK","34.503213","-94.67157","-6","1" +"74959","Spiro","OK","35.247209","-94.62105","-6","1" +"74960","Stilwell","OK","35.815628","-94.65023","-6","1" +"74962","Vian","OK","35.543155","-94.96628","-6","1" +"74963","Watson","OK","34.37769","-94.55278","-6","1" +"74964","Watts","OK","36.114272","-94.6335","-6","1" +"74965","Westville","OK","35.998632","-94.59266","-6","1" +"74966","Wister","OK","34.943609","-94.81453","-6","1" +"74968","Muldrow","OK","35.398035","-94.63761","-6","1" +"75001","Addison","TX","32.96129","-96.83751","-6","1" +"75002","Allen","TX","33.092846","-96.62447","-6","1" +"75006","Carrollton","TX","32.960374","-96.89163","-6","1" +"75007","Carrollton","TX","33.00542","-96.89773","-6","1" +"75008","Carrollton","TX","33.20743","-97.116282","-6","1" +"75009","Celina","TX","33.327927","-96.76129","-6","1" +"75010","Carrollton","TX","33.030556","-96.89328","-6","1" +"75011","Carrollton","TX","32.767268","-96.777626","-6","1" +"75013","Allen","TX","33.106582","-96.69402","-6","1" +"75014","Irving","TX","32.767268","-96.777626","-6","1" +"75015","Irving","TX","32.767268","-96.777626","-6","1" +"75016","Irving","TX","32.767268","-96.777626","-6","1" +"75017","Irving","TX","32.767268","-96.777626","-6","1" +"75019","Coppell","TX","32.967341","-96.98656","-6","1" +"75020","Denison","TX","33.754053","-96.57867","-6","1" +"75021","Denison","TX","33.742641","-96.51427","-6","1" +"75022","Flower Mound","TX","33.024778","-97.10206","-6","1" +"75023","Plano","TX","33.054671","-96.73506","-6","1" +"75024","Plano","TX","33.07707","-96.79859","-6","1" +"75025","Plano","TX","33.086868","-96.74504","-6","1" +"75026","Plano","TX","33.19359","-96.569879","-6","1" +"75027","Flower Mound","TX","33.20743","-97.116282","-6","1" +"75028","Flower Mound","TX","33.033214","-97.05965","-6","1" +"75029","Lewisville","TX","33.20743","-97.116282","-6","1" +"75030","Rowlett","TX","32.91747","-96.534737","-6","1" +"75032","Rockwall","TX","32.867103","-96.44129","-6","1" +"75034","Frisco","TX","33.143792","-96.83938","-6","1" +"75035","Frisco","TX","33.130086","-96.78177","-6","1" +"75037","Irving","TX","32.767268","-96.777626","-6","1" +"75038","Irving","TX","32.872386","-96.98524","-6","1" +"75039","Irving","TX","32.876474","-96.94129","-6","1" +"75040","Garland","TX","32.920574","-96.62639","-6","1" +"75041","Garland","TX","32.881525","-96.64601","-6","1" +"75042","Garland","TX","32.915625","-96.67399","-6","1" +"75043","Garland","TX","32.854893","-96.60211","-6","1" +"75044","Garland","TX","32.960375","-96.66188","-6","1" +"75045","Garland","TX","32.913695","-96.627131","-6","1" +"75046","Garland","TX","32.767268","-96.777626","-6","1" +"75047","Garland","TX","32.767268","-96.777626","-6","1" +"75048","Garland","TX","32.975723","-96.58661","-6","1" +"75049","Garland","TX","32.767268","-96.777626","-6","1" +"75050","Grand Prairie","TX","32.759922","-97.01216","-6","1" +"75051","Grand Prairie","TX","32.728982","-97.00428","-6","1" +"75052","Grand Prairie","TX","32.675604","-97.02346","-6","1" +"75053","Grand Prairie","TX","32.767268","-96.777626","-6","1" +"75054","Grand Prairie","TX","32.767268","-96.777626","-6","1" +"75056","The Colony","TX","33.081421","-96.88957","-6","1" +"75057","Lewisville","TX","33.04867","-96.99321","-6","1" +"75058","Gunter","TX","33.453628","-96.73436","-6","1" +"75059","Irving","TX","32.86372","-96.934998","-6","1" +"75060","Irving","TX","32.80268","-96.95499","-6","1" +"75061","Irving","TX","32.826729","-96.9614","-6","1" +"75062","Irving","TX","32.846645","-96.96733","-6","1" +"75063","Irving","TX","32.916865","-96.97349","-6","1" +"75065","Lake Dallas","TX","33.12635","-97.02525","-6","1" +"75066","Carrollton","TX","32.959222","-96.853877","-6","1" +"75067","Lewisville","TX","33.020118","-97.00771","-6","1" +"75068","Little Elm","TX","33.173008","-96.95485","-6","1" +"75069","McKinney","TX","33.195073","-96.60363","-6","1" +"75070","McKinney","TX","33.212203","-96.67522","-6","1" +"75071","Frisco","TX","33.225107","-96.638614","-6","1" +"75074","Plano","TX","33.028921","-96.68102","-6","1" +"75075","Plano","TX","33.024721","-96.74038","-6","1" +"75076","Pottsboro","TX","33.818635","-96.69338","-6","1" +"75077","Lewisville","TX","33.075138","-97.0529","-6","1" +"75078","Prosper","TX","33.240766","-96.79944","-6","1" +"75080","Richardson","TX","32.969523","-96.74093","-6","1" +"75081","Richardson","TX","32.948974","-96.70916","-6","1" +"75082","Richardson","TX","32.993405","-96.65901","-6","1" +"75083","Richardson","TX","32.767268","-96.777626","-6","1" +"75085","Richardson","TX","32.767268","-96.777626","-6","1" +"75086","Plano","TX","33.002395","-96.615837","-6","1" +"75087","Rockwall","TX","32.93382","-96.45446","-6","1" +"75088","Rowlett","TX","32.897459","-96.5497","-6","1" +"75089","Rowlett","TX","32.923924","-96.54697","-6","1" +"75090","Sherman","TX","33.632806","-96.59106","-6","1" +"75091","Sherman","TX","33.678665","-96.662289","-6","1" +"75092","Sherman","TX","33.649938","-96.65387","-6","1" +"75093","Plano","TX","33.03505","-96.80492","-6","1" +"75094","Plano","TX","33.009681","-96.61113","-6","1" +"75097","Weston","TX","33.351238","-96.664632","-6","1" +"75098","Wylie","TX","33.011975","-96.53607","-6","1" +"75099","Coppell","TX","32.77103","-96.79963","-6","1" +"75101","Bardwell","TX","32.267846","-96.6967","-6","1" +"75102","Barry","TX","32.075079","-96.64311","-6","1" +"75103","Canton","TX","32.532449","-95.88","-6","1" +"75104","Cedar Hill","TX","32.588536","-96.94949","-6","1" +"75105","Chatfield","TX","32.241963","-96.37917","-6","1" +"75106","Cedar Hill","TX","32.767268","-96.777626","-6","1" +"75109","Angus","TX","32.03049","-96.383005","-6","1" +"75110","Corsicana","TX","32.078228","-96.44612","-6","1" +"75114","Crandall","TX","32.629178","-96.44339","-6","1" +"75115","Desoto","TX","32.599286","-96.85882","-6","1" +"75116","Duncanville","TX","32.658384","-96.91265","-6","1" +"75117","Edgewood","TX","32.696777","-95.86881","-6","1" +"75118","Elmo","TX","32.599614","-96.302743","-6","1" +"75119","Ennis","TX","32.331239","-96.61962","-6","1" +"75120","Ennis","TX","32.334709","-96.633546","-6","1" +"75121","Copeville","TX","33.079946","-96.41788","-6","1" +"75123","Desoto","TX","32.767268","-96.777626","-6","1" +"75124","Eustace","TX","32.310343","-96.00312","-6","1" +"75125","Ferris","TX","32.533551","-96.65684","-6","1" +"75126","Forney","TX","32.745373","-96.46038","-6","1" +"75127","Fruitvale","TX","32.68309","-95.79436","-6","1" +"75132","Fate","TX","32.941014","-96.38095","-6","1" +"75134","Lancaster","TX","32.620385","-96.7812","-6","1" +"75135","Caddo Mills","TX","33.075653","-96.23774","-6","1" +"75137","Duncanville","TX","32.634835","-96.91343","-6","1" +"75138","Duncanville","TX","32.767268","-96.777626","-6","1" +"75140","Grand Saline","TX","32.661299","-95.71738","-6","1" +"75141","Hutchins","TX","32.644647","-96.71036","-6","1" +"75142","Kaufman","TX","32.574299","-96.30377","-6","1" +"75143","Kemp","TX","32.348007","-96.21035","-6","1" +"75144","Kerens","TX","32.120271","-96.22474","-6","1" +"75146","Lancaster","TX","32.590063","-96.75892","-6","1" +"75147","Mabank","TX","32.314256","-96.11068","-6","1" +"75148","Malakoff","TX","32.183649","-96.01862","-6","1" +"75149","Mesquite","TX","32.767329","-96.60759","-6","1" +"75150","Mesquite","TX","32.818392","-96.63355","-6","1" +"75151","Corsicana","TX","32.062395","-96.473459","-6","1" +"75152","Palmer","TX","32.425222","-96.68103","-6","1" +"75153","Powell","TX","32.142925","-96.32632","-6","1" +"75154","Red Oak","TX","32.526123","-96.82325","-6","1" +"75155","Rice","TX","32.226257","-96.48147","-6","1" +"75156","Gun Barrel City","TX","32.290819","-96.114108","-6","1" +"75157","Rosser","TX","32.455407","-96.439495","-6","1" +"75158","Scurry","TX","32.466891","-96.38502","-6","1" +"75159","Seagoville","TX","32.628858","-96.53811","-6","1" +"75160","Terrell","TX","32.747747","-96.28923","-6","1" +"75161","Terrell","TX","32.727366","-96.187","-6","1" +"75163","Trinidad","TX","32.17548","-96.10935","-6","1" +"75164","Josephine","TX","33.065217","-96.31152","-6","1" +"75165","Waxahachie","TX","32.397024","-96.83283","-6","1" +"75166","Lavon","TX","33.022051","-96.43601","-6","1" +"75167","Waxahachie","TX","32.380958","-96.91801","-6","1" +"75168","Waxahachie","TX","32.374937","-96.716638","-6","1" +"75169","Wills Point","TX","32.725386","-96.00238","-6","1" +"75172","Wilmer","TX","32.598845","-96.6831","-6","1" +"75173","Nevada","TX","33.048275","-96.42153","-6","1" +"75180","Mesquite","TX","32.72203","-96.61634","-6","1" +"75181","Mesquite","TX","32.735812","-96.55886","-6","1" +"75182","Sunnyvale","TX","32.803646","-96.56965","-6","1" +"75185","Mesquite","TX","32.740332","-96.561846","-6","1" +"75187","Mesquite","TX","32.767268","-96.777626","-6","1" +"75189","Royse City","TX","32.960512","-96.31278","-6","1" +"75201","Dallas","TX","32.787629","-96.79941","-6","1" +"75202","Dallas","TX","32.77988","-96.80502","-6","1" +"75203","Dallas","TX","32.745831","-96.80672","-6","1" +"75204","Dallas","TX","32.800333","-96.78952","-6","1" +"75205","Dallas","TX","32.836094","-96.79524","-6","1" +"75206","Dallas","TX","32.826128","-96.7712","-6","1" +"75207","Dallas","TX","32.78643","-96.81992","-6","1" +"75208","Dallas","TX","32.751464","-96.83864","-6","1" +"75209","Dallas","TX","32.845978","-96.82552","-6","1" +"75210","Dallas","TX","32.77103","-96.74732","-6","1" +"75211","Dallas","TX","32.736931","-96.88253","-6","1" +"75212","Dallas","TX","32.78238","-96.86945","-6","1" +"75214","Dallas","TX","32.825628","-96.74872","-6","1" +"75215","Dallas","TX","32.76103","-96.77035","-6","1" +"75216","Dallas","TX","32.710082","-96.7972","-6","1" +"75217","Dallas","TX","32.72238","-96.67582","-6","1" +"75218","Dallas","TX","32.842726","-96.69937","-6","1" +"75219","Dallas","TX","32.812462","-96.81412","-6","1" +"75220","Dallas","TX","32.867977","-96.86306","-6","1" +"75221","Dallas","TX","32.814728","-96.787725","-6","1" +"75222","Dallas","TX","32.767268","-96.777626","-6","1" +"75223","Dallas","TX","32.792879","-96.74918","-6","1" +"75224","Dallas","TX","32.716065","-96.83987","-6","1" +"75225","Dallas","TX","32.862876","-96.7904","-6","1" +"75226","Dallas","TX","32.783978","-96.77662","-6","1" +"75227","Dallas","TX","32.77003","-96.69","-6","1" +"75228","Dallas","TX","32.825227","-96.67955","-6","1" +"75229","Dallas","TX","32.895376","-96.85985","-6","1" +"75230","Dallas","TX","32.901176","-96.79054","-6","1" +"75231","Dallas","TX","32.874317","-96.74764","-6","1" +"75232","Dallas","TX","32.664034","-96.83886","-6","1" +"75233","Dallas","TX","32.704398","-96.87222","-6","1" +"75234","Dallas","TX","32.925975","-96.88322","-6","1" +"75235","Dallas","TX","32.828128","-96.84612","-6","1" +"75236","Dallas","TX","32.685533","-96.91746","-6","1" +"75237","Dallas","TX","32.666984","-96.87633","-6","1" +"75238","Dallas","TX","32.873926","-96.70922","-6","1" +"75239","Dallas","TX","32.767268","-96.777626","-6","1" +"75240","Dallas","TX","32.938774","-96.78543","-6","1" +"75241","Dallas","TX","32.669383","-96.77439","-6","1" +"75242","Dallas","TX","32.767268","-96.777626","-6","1" +"75243","Dallas","TX","32.912225","-96.73688","-6","1" +"75244","Dallas","TX","32.922624","-96.83616","-6","1" +"75245","Dallas","TX","32.922499","-96.535191","-6","1" +"75246","Dallas","TX","32.791878","-96.77365","-6","1" +"75247","Dallas","TX","32.817978","-96.87928","-6","1" +"75248","Dallas","TX","32.968123","-96.78863","-6","1" +"75249","Dallas","TX","32.639661","-96.95317","-6","1" +"75250","Dallas","TX","32.767268","-96.777626","-6","1" +"75251","Dallas","TX","32.919104","-96.77497","-6","1" +"75252","Dallas","TX","32.998132","-96.79088","-6","1" +"75253","Dallas","TX","32.679924","-96.60367","-6","1" +"75254","Dallas","TX","32.946069","-96.794496","-6","1" +"75255","Dallas","TX","32.669783","-96.614921","-6","1" +"75258","Dallas","TX","32.767268","-96.777626","-6","1" +"75260","Dallas","TX","32.767268","-96.777626","-6","1" +"75261","Dallas","TX","32.767268","-96.777626","-6","1" +"75262","Dallas","TX","32.767268","-96.777626","-6","1" +"75263","Dallas","TX","32.767268","-96.777626","-6","1" +"75264","Dallas","TX","32.767268","-96.777626","-6","1" +"75265","Dallas","TX","32.767268","-96.777626","-6","1" +"75266","Dallas","TX","32.767268","-96.777626","-6","1" +"75267","Dallas","TX","32.767268","-96.777626","-6","1" +"75270","Dallas","TX","32.78133","-96.80198","-6","1" +"75275","Dallas","TX","32.767268","-96.777626","-6","1" +"75277","Dallas","TX","32.767268","-96.777626","-6","1" +"75283","Dallas","TX","32.767268","-96.777626","-6","1" +"75284","Dallas","TX","32.767268","-96.777626","-6","1" +"75285","Dallas","TX","32.767268","-96.777626","-6","1" +"75286","Dallas","TX","32.767268","-96.777626","-6","1" +"75287","Dallas","TX","32.998786","-96.84436","-6","1" +"75294","Dallas","TX","32.767268","-96.777626","-6","1" +"75295","Dallas","TX","32.767268","-96.777626","-6","1" +"75301","Dallas","TX","32.767268","-96.777626","-6","1" +"75303","Dallas","TX","32.767268","-96.777626","-6","1" +"75310","Dallas","TX","32.767268","-96.777626","-6","1" +"75312","Dallas","TX","32.767268","-96.777626","-6","1" +"75313","Dallas","TX","32.767268","-96.777626","-6","1" +"75315","Dallas","TX","32.767268","-96.777626","-6","1" +"75320","Dallas","TX","32.767268","-96.777626","-6","1" +"75323","Dallas","TX","32.767268","-96.777626","-6","1" +"75326","Dallas","TX","32.767268","-96.777626","-6","1" +"75336","Dallas","TX","32.767268","-96.777626","-6","1" +"75339","Dallas","TX","32.767268","-96.777626","-6","1" +"75342","Dallas","TX","32.767268","-96.777626","-6","1" +"75346","Dallas","TX","32.767268","-96.777626","-6","1" +"75350","Dallas","TX","32.767268","-96.777626","-6","1" +"75353","Dallas","TX","32.767268","-96.777626","-6","1" +"75354","Dallas","TX","32.767268","-96.777626","-6","1" +"75355","Dallas","TX","32.767268","-96.777626","-6","1" +"75356","Dallas","TX","32.767268","-96.777626","-6","1" +"75357","Dallas","TX","32.767268","-96.777626","-6","1" +"75359","Dallas","TX","32.767268","-96.777626","-6","1" +"75360","Dallas","TX","32.767268","-96.777626","-6","1" +"75363","Dallas","TX","32.767268","-96.777626","-6","1" +"75364","Dallas","TX","32.767268","-96.777626","-6","1" +"75367","Dallas","TX","32.767268","-96.777626","-6","1" +"75368","Dallas","TX","32.767268","-96.777626","-6","1" +"75370","Dallas","TX","32.767268","-96.777626","-6","1" +"75371","Dallas","TX","32.767268","-96.777626","-6","1" +"75372","Dallas","TX","32.767268","-96.777626","-6","1" +"75373","Dallas","TX","32.767268","-96.777626","-6","1" +"75374","Dallas","TX","32.767268","-96.777626","-6","1" +"75376","Dallas","TX","32.767268","-96.777626","-6","1" +"75378","Dallas","TX","32.767268","-96.777626","-6","1" +"75379","Dallas","TX","32.767268","-96.777626","-6","1" +"75380","Dallas","TX","32.767268","-96.777626","-6","1" +"75381","Dallas","TX","32.767268","-96.777626","-6","1" +"75382","Dallas","TX","32.767268","-96.777626","-6","1" +"75386","Dallas","TX","32.767268","-96.777626","-6","1" +"75387","Dallas","TX","32.767268","-96.777626","-6","1" +"75388","Dallas","TX","32.767268","-96.777626","-6","1" +"75389","Dallas","TX","32.767268","-96.777626","-6","1" +"75390","Dallas","TX","32.767268","-96.777626","-6","1" +"75391","Dallas","TX","32.767268","-96.777626","-6","1" +"75392","Dallas","TX","32.767268","-96.777626","-6","1" +"75393","Dallas","TX","32.767268","-96.777626","-6","1" +"75394","Dallas","TX","32.767268","-96.777626","-6","1" +"75395","Dallas","TX","32.767268","-96.777626","-6","1" +"75396","Dallas","TX","32.767268","-96.777626","-6","1" +"75397","Dallas","TX","32.767268","-96.777626","-6","1" +"75398","Dallas","TX","32.767268","-96.777626","-6","1" +"75401","Greenville","TX","33.15023","-96.11289","-6","1" +"75402","Greenville","TX","33.082411","-96.08977","-6","1" +"75403","Greenville","TX","33.218505","-96.048665","-6","1" +"75404","Greenville","TX","33.056265","-96.080973","-6","1" +"75407","Princeton","TX","33.14572","-96.49664","-6","1" +"75408","Anna","TX","33.349316","-96.548597","-6","1" +"75409","Anna","TX","33.356094","-96.51907","-6","1" +"75410","Alba","TX","32.793512","-95.63182","-6","1" +"75411","Arthur City","TX","33.86751","-95.60594","-6","1" +"75412","Bagwell","TX","33.815996","-95.14402","-6","1" +"75413","Bailey","TX","33.43515","-96.16671","-6","1" +"75414","Bells","TX","33.615634","-96.41899","-6","1" +"75415","Ben Franklin","TX","33.460447","-95.75734","-6","1" +"75416","Blossom","TX","33.675155","-95.37293","-6","1" +"75417","Bogata","TX","33.462828","-95.193","-6","1" +"75418","Bonham","TX","33.583772","-96.1818","-6","1" +"75420","Brashear","TX","33.052712","-95.72124","-6","1" +"75421","Brookston","TX","33.642542","-95.69761","-6","1" +"75422","Campbell","TX","33.146779","-95.93998","-6","1" +"75423","Celeste","TX","33.291418","-96.20273","-6","1" +"75424","Blue Ridge","TX","33.321604","-96.39502","-6","1" +"75425","Chicota","TX","33.65973","-95.582906","-6","1" +"75426","Clarksville","TX","33.626445","-95.03534","-6","1" +"75428","Commerce","TX","33.25868","-95.91061","-6","1" +"75429","Commerce","TX","33.237722","-95.90886","-6","1" +"75431","Como","TX","33.027493","-95.46605","-6","1" +"75432","Cooper","TX","33.377005","-95.68573","-6","1" +"75433","Cumby","TX","33.13307","-95.81773","-6","1" +"75434","Cunningham","TX","33.423626","-95.3567","-6","1" +"75435","Deport","TX","33.507909","-95.31828","-6","1" +"75436","Detroit","TX","33.670159","-95.2609","-6","1" +"75437","Dike","TX","33.253911","-95.47125","-6","1" +"75438","Dodd City","TX","33.595318","-96.07311","-6","1" +"75439","Ector","TX","33.573304","-96.27386","-6","1" +"75440","Emory","TX","32.882305","-95.73842","-6","1" +"75441","Enloe","TX","33.432974","-95.65815","-6","1" +"75442","Farmersville","TX","33.171899","-96.35096","-6","1" +"75443","Gober","TX","33.469719","-96.111103","-6","1" +"75444","Golden","TX","32.730279","-95.56286","-6","1" +"75446","Honey Grove","TX","33.589851","-95.90242","-6","1" +"75447","Ivanhoe","TX","33.774197","-96.12045","-6","1" +"75448","Klondike","TX","33.31215","-95.81737","-6","1" +"75449","Ladonia","TX","33.427504","-95.95578","-6","1" +"75450","Lake Creek","TX","33.404332","-95.52546","-6","1" +"75451","Leesburg","TX","32.971224","-95.11339","-6","1" +"75452","Leonard","TX","33.385224","-96.24782","-6","1" +"75453","Lone Oak","TX","32.952736","-95.94594","-6","1" +"75454","Melissa","TX","33.277317","-96.57345","-6","1" +"75455","Mount Pleasant","TX","33.166739","-94.9814","-6","1" +"75456","Mount Pleasant","TX","33.19045","-94.967456","-6","1" +"75457","Mount Vernon","TX","33.151104","-95.21965","-6","1" +"75458","Merit","TX","33.242656","-96.291572","-6","1" +"75459","Howe","TX","33.518979","-96.63523","-6","1" +"75460","Paris","TX","33.660274","-95.55958","-6","1" +"75461","Paris","TX","33.663213","-95.460797","-6","1" +"75462","Paris","TX","33.638587","-95.48589","-6","1" +"75468","Pattonville","TX","33.536414","-95.39817","-6","1" +"75469","Pecan Gap","TX","33.434737","-95.83057","-6","1" +"75470","Petty","TX","33.60355","-95.81202","-6","1" +"75471","Pickton","TX","33.041578","-95.39527","-6","1" +"75472","Point","TX","32.906194","-95.87967","-6","1" +"75473","Powderly","TX","33.801663","-95.50309","-6","1" +"75474","Quinlan","TX","32.896295","-96.06999","-6","1" +"75475","Randolph","TX","33.485315","-96.25525","-6","1" +"75476","Ravenna","TX","33.695647","-96.23381","-6","1" +"75477","Roxton","TX","33.543006","-95.72382","-6","1" +"75478","Saltillo","TX","33.17329","-95.36663","-6","1" +"75479","Savoy","TX","33.613097","-96.34474","-6","1" +"75480","Scroggins","TX","33.04314","-95.19302","-6","1" +"75481","Sulphur Bluff","TX","33.323467","-95.39168","-6","1" +"75482","Sulphur Springs","TX","33.143752","-95.60102","-6","1" +"75483","Sulphur Springs","TX","33.168606","-95.585464","-6","1" +"75485","Westminster","TX","33.362227","-96.46299","-6","1" +"75486","Sumner","TX","33.734091","-95.76203","-6","1" +"75487","Talco","TX","33.346151","-95.15014","-6","1" +"75488","Telephone","TX","33.76225","-96.00418","-6","1" +"75489","Tom Bean","TX","33.521578","-96.48373","-6","1" +"75490","Trenton","TX","33.435618","-96.3324","-6","1" +"75491","Whitewright","TX","33.494285","-96.39598","-6","1" +"75492","Windom","TX","33.566266","-96.01082","-6","1" +"75493","Winfield","TX","33.165327","-95.11279","-6","1" +"75494","Winnsboro","TX","32.922912","-95.28299","-6","1" +"75495","Van Alstyne","TX","33.426635","-96.5637","-6","1" +"75496","Wolfe City","TX","33.350543","-96.05705","-6","1" +"75497","Yantis","TX","32.906074","-95.55779","-6","1" +"75499","Savoy","TX","33.602194","-96.365174","-6","1" +"75501","Texarkana","TX","33.414708","-94.08984","-6","1" +"75502","Texarkana","TX","33.424125","-94.055214","-6","1" +"75503","Texarkana","TX","33.476844","-94.09637","-6","1" +"75504","Texarkana","TX","33.476552","-94.39495","-6","1" +"75505","Texarkana","TX","33.46238","-94.0715","-6","1" +"75507","Texarkana","TX","33.393447","-94.340437","-6","1" +"75550","Annona","TX","33.530829","-94.90585","-6","1" +"75551","Atlanta","TX","33.118611","-94.1773","-6","1" +"75554","Avery","TX","33.563837","-94.78066","-6","1" +"75555","Bivins","TX","32.930895","-94.13542","-6","1" +"75556","Bloomburg","TX","33.142532","-94.05585","-6","1" +"75558","Cookville","TX","33.236743","-94.84359","-6","1" +"75559","De Kalb","TX","33.515778","-94.61355","-6","1" +"75560","Douglassville","TX","33.189862","-94.37468","-6","1" +"75561","Hooks","TX","33.480224","-94.2648","-6","1" +"75562","Kildare","TX","32.941359","-94.25152","-6","1" +"75563","Linden","TX","33.005009","-94.37603","-6","1" +"75564","Lodi","TX","32.880182","-94.27725","-6","1" +"75565","McLeod","TX","32.950857","-94.07429","-6","1" +"75566","Marietta","TX","33.157897","-94.50853","-6","1" +"75567","Maud","TX","33.328596","-94.31589","-6","1" +"75568","Naples","TX","33.206258","-94.63009","-6","1" +"75569","Nash","TX","33.441774","-94.12531","-6","1" +"75570","New Boston","TX","33.465282","-94.41954","-6","1" +"75571","Omaha","TX","33.183401","-94.75227","-6","1" +"75572","Queen City","TX","33.210952","-94.13364","-6","1" +"75573","Redwater","TX","33.353249","-94.25971","-6","1" +"75574","Simms","TX","33.328878","-94.53657","-6","1" +"75599","Texarkana","TX","33.476552","-94.39495","-6","1" +"75601","Longview","TX","32.505248","-94.73172","-6","1" +"75602","Longview","TX","32.474499","-94.712","-6","1" +"75603","Longview","TX","32.396207","-94.70063","-6","1" +"75604","Longview","TX","32.523779","-94.80692","-6","1" +"75605","Longview","TX","32.557684","-94.74353","-6","1" +"75606","Longview","TX","32.369393","-94.616062","-6","1" +"75607","Longview","TX","32.51121","-94.783493","-6","1" +"75608","Longview","TX","32.570051","-94.848063","-6","1" +"75615","Longview","TX","32.51121","-94.783493","-6","1" +"75630","Avinger","TX","32.854406","-94.55859","-6","1" +"75631","Beckville","TX","32.237924","-94.46427","-6","1" +"75633","Carthage","TX","32.145212","-94.31256","-6","1" +"75636","Cason","TX","33.035716","-94.81589","-6","1" +"75637","Clayton","TX","32.102729","-94.493543","-6","1" +"75638","Daingerfield","TX","33.02583","-94.72481","-6","1" +"75639","De Berry","TX","32.285877","-94.1811","-6","1" +"75640","Diana","TX","32.723482","-94.69544","-6","1" +"75641","Easton","TX","32.382771","-94.57945","-6","1" +"75642","Elysian Fields","TX","32.386275","-94.210541","-6","1" +"75643","Gary","TX","32.019931","-94.37287","-6","1" +"75644","Gilmer","TX","32.727128","-94.9577","-6","1" +"75645","Gilmer","TX","32.690553","-94.863311","-6","1" +"75647","Gladewater","TX","32.531814","-94.94358","-6","1" +"75650","Hallsville","TX","32.507527","-94.55839","-6","1" +"75651","Harleton","TX","32.6941","-94.54519","-6","1" +"75652","Henderson","TX","32.194938","-94.75852","-6","1" +"75653","Henderson","TX","32.204724","-94.8845","-6","1" +"75654","Henderson","TX","32.104159","-94.85568","-6","1" +"75656","Hughes Springs","TX","32.998759","-94.61948","-6","1" +"75657","Jefferson","TX","32.768011","-94.34908","-6","1" +"75658","Joinerville","TX","32.195927","-94.906515","-6","1" +"75659","Jonesville","TX","32.507491","-94.110636","-6","1" +"75660","Judson","TX","32.51121","-94.783493","-6","1" +"75661","Karnack","TX","32.66797","-94.16846","-6","1" +"75662","Kilgore","TX","32.387151","-94.87439","-6","1" +"75663","Kilgore","TX","32.386976","-94.895098","-6","1" +"75666","Laird Hill","TX","32.301898","-94.928795","-6","1" +"75667","Laneville","TX","31.981458","-94.85741","-6","1" +"75668","Lone Star","TX","32.920957","-94.69722","-6","1" +"75669","Long Branch","TX","32.03719","-94.57688","-6","1" +"75670","Marshall","TX","32.547424","-94.37958","-6","1" +"75671","Marshall","TX","32.522659","-94.389476","-6","1" +"75672","Marshall","TX","32.513986","-94.30704","-6","1" +"75680","Minden","TX","32.00923","-94.71766","-6","1" +"75681","Mount Enterprise","TX","31.934633","-94.68886","-6","1" +"75682","New London","TX","32.25416","-94.932215","-6","1" +"75683","Ore City","TX","32.809766","-94.70513","-6","1" +"75684","Overton","TX","32.26958","-94.94935","-6","1" +"75685","Panola","TX","32.183774","-94.308713","-6","1" +"75686","Pittsburg","TX","32.97708","-94.96809","-6","1" +"75687","Price","TX","32.151755","-94.955432","-6","1" +"75688","Scottsville","TX","32.55397","-94.239351","-6","1" +"75689","Selman City","TX","32.1826","-94.935456","-6","1" +"75691","Tatum","TX","32.312616","-94.53692","-6","1" +"75692","Waskom","TX","32.472069","-94.09556","-6","1" +"75693","White Oak","TX","32.533965","-94.86062","-6","1" +"75694","Woodlawn","TX","32.653731","-94.342725","-6","1" +"75701","Tyler","TX","32.325214","-95.29467","-6","1" +"75702","Tyler","TX","32.360498","-95.3071","-6","1" +"75703","Tyler","TX","32.264365","-95.31347","-6","1" +"75704","Tyler","TX","32.388631","-95.41373","-6","1" +"75705","Tyler","TX","32.364281","-95.08971","-6","1" +"75706","Tyler","TX","32.456565","-95.33155","-6","1" +"75707","Tyler","TX","32.292394","-95.20749","-6","1" +"75708","Tyler","TX","32.40331","-95.22276","-6","1" +"75709","Tyler","TX","32.31265","-95.39191","-6","1" +"75710","Tyler","TX","32.347549","-95.306528","-6","1" +"75711","Tyler","TX","32.539879","-95.419983","-6","1" +"75712","Tyler","TX","32.411237","-95.289903","-6","1" +"75713","Tyler","TX","32.411237","-95.289903","-6","1" +"75750","Arp","TX","32.254414","-95.06517","-6","1" +"75751","Athens","TX","32.184027","-95.84625","-6","1" +"75752","Winona","TX","32.223828","-95.785482","-6","1" +"75754","Ben Wheeler","TX","32.412451","-95.66711","-6","1" +"75755","Big Sandy","TX","32.649482","-95.1259","-6","1" +"75756","Brownsboro","TX","32.306045","-95.60507","-6","1" +"75757","Bullard","TX","32.136787","-95.3671","-6","1" +"75758","Chandler","TX","32.251068","-95.49667","-6","1" +"75759","Cuney","TX","32.034127","-95.41776","-6","1" +"75760","Cushing","TX","31.817889","-94.8631","-6","1" +"75762","Flint","TX","32.207845","-95.41859","-6","1" +"75763","Frankston","TX","32.072339","-95.50433","-6","1" +"75764","Gallatin","TX","31.893439","-95.15272","-6","1" +"75765","Hawkins","TX","32.617073","-95.22445","-6","1" +"75766","Jacksonville","TX","31.953855","-95.25281","-6","1" +"75770","Larue","TX","32.132651","-95.64632","-6","1" +"75771","Lindale","TX","32.522902","-95.42126","-6","1" +"75772","Maydelle","TX","31.800846","-95.300142","-6","1" +"75773","Mineola","TX","32.674657","-95.46982","-6","1" +"75778","Murchison","TX","32.33383","-95.7102","-6","1" +"75779","Neches","TX","31.794191","-95.661964","-6","1" +"75780","New Summerfield","TX","31.782048","-95.164021","-6","1" +"75782","Poynor","TX","32.075703","-95.59919","-6","1" +"75783","Quitman","TX","32.810076","-95.4355","-6","1" +"75784","Reklaw","TX","31.883205","-94.9689","-6","1" +"75785","Rusk","TX","31.79364","-95.16761","-6","1" +"75788","Sacul","TX","31.825527","-94.91759","-6","1" +"75789","Troup","TX","32.137225","-95.10105","-6","1" +"75790","Van","TX","32.533765","-95.63493","-6","1" +"75791","Whitehouse","TX","32.226082","-95.21751","-6","1" +"75792","Winona","TX","32.476905","-95.13088","-6","1" +"75798","Tyler","TX","32.411237","-95.289903","-6","1" +"75799","Tyler","TX","32.411237","-95.289903","-6","1" +"75801","Palestine","TX","31.779481","-95.63325","-6","1" +"75802","Palestine","TX","31.926836","-95.579561","-6","1" +"75803","Palestine","TX","31.760418","-95.656779","-6","1" +"75806","Little Elm","TX","33.169075","-96.904315","-6","1" +"75825","Alto","TX","31.64775","-95.082239","-6","1" +"75831","Buffalo","TX","31.453732","-96.03725","-6","1" +"75832","Cayuga","TX","31.794191","-95.661964","-6","1" +"75833","Centerville","TX","31.27575","-95.90131","-6","1" +"75834","Centralia","TX","31.105786","-95.138794","-6","1" +"75835","Crockett","TX","31.315837","-95.47393","-6","1" +"75838","Donie","TX","31.476671","-96.22212","-6","1" +"75839","Elkhart","TX","31.627557","-95.53225","-6","1" +"75840","Fairfield","TX","31.763713","-96.10808","-6","1" +"75844","Grapeland","TX","31.505916","-95.46315","-6","1" +"75845","Groveton","TX","31.090648","-95.07826","-6","1" +"75846","Jewett","TX","31.346581","-96.17433","-6","1" +"75847","Kennard","TX","31.355453","-95.15421","-6","1" +"75848","Kirvin","TX","31.83272","-96.32126","-6","1" +"75849","Latexo","TX","31.398448","-95.4737","-6","1" +"75850","Leona","TX","31.134863","-95.93312","-6","1" +"75851","Lovelady","TX","31.104197","-95.46434","-6","1" +"75852","Midway","TX","30.984335","-95.71669","-6","1" +"75853","Montalba","TX","31.930882","-95.82974","-6","1" +"75855","Oakwood","TX","31.579572","-95.85303","-6","1" +"75856","Pennington","TX","31.21349","-95.23475","-6","1" +"75858","Ratcliff","TX","31.369811","-95.09184","-6","1" +"75859","Streetman","TX","31.889748","-96.25435","-6","1" +"75860","Teague","TX","31.625567","-96.27068","-6","1" +"75861","Tennessee Colony","TX","31.829314","-95.86383","-6","1" +"75862","Trinity","TX","30.94481","-95.33298","-6","1" +"75865","Woodlake","TX","31.105786","-95.138794","-6","1" +"75875","Rusk","TX","31.806615","-95.154008","-6","1" +"75880","Tennessee Colony","TX","31.794191","-95.661964","-6","1" +"75882","Palestine","TX","31.794191","-95.661964","-6","1" +"75884","Tennessee Colony","TX","31.794191","-95.661964","-6","1" +"75886","Tennessee Colony","TX","31.794191","-95.661964","-6","1" +"75901","Lufkin","TX","31.330567","-94.68667","-6","1" +"75902","Lufkin","TX","31.362315","-94.761103","-6","1" +"75903","Lufkin","TX","31.276647","-94.56759","-6","1" +"75904","Lufkin","TX","31.339891","-94.76295","-6","1" +"75915","Lufkin","TX","31.287257","-94.577084","-6","1" +"75925","Alto","TX","31.626263","-95.05495","-6","1" +"75926","Apple Springs","TX","31.243006","-94.96448","-6","1" +"75928","Bon Wier","TX","30.680344","-93.68535","-6","1" +"75929","Broaddus","TX","31.242362","-94.17675","-6","1" +"75930","Bronson","TX","31.340382","-94.02062","-6","1" +"75931","Brookeland","TX","31.109064","-93.99031","-6","1" +"75932","Burkeville","TX","31.067439","-93.61936","-6","1" +"75933","Call","TX","30.580648","-93.81112","-6","1" +"75934","Camden","TX","30.907239","-94.7312","-6","1" +"75935","Center","TX","31.769105","-94.18997","-6","1" +"75936","Chester","TX","30.942336","-94.58376","-6","1" +"75937","Chireno","TX","31.467506","-94.37459","-6","1" +"75938","Colmesneil","TX","30.916106","-94.35108","-6","1" +"75939","Corrigan","TX","30.998982","-94.7994","-6","1" +"75941","Diboll","TX","31.195633","-94.77725","-6","1" +"75942","Doucette","TX","30.819095","-94.40497","-6","1" +"75943","Douglass","TX","31.654777","-94.90988","-6","1" +"75944","Etoile","TX","31.368872","-94.40817","-6","1" +"75946","Garrison","TX","31.834379","-94.52629","-6","1" +"75947","Geneva","TX","31.373062","-93.821948","-6","1" +"75948","Hemphill","TX","31.332569","-93.75338","-6","1" +"75949","Huntington","TX","31.226939","-94.5321","-6","1" +"75951","Jasper","TX","30.941282","-94.03455","-6","1" +"75954","Joaquin","TX","31.95015","-94.05761","-6","1" +"75956","Kirbyville","TX","30.670556","-93.93811","-6","1" +"75957","Timpson","TX","31.902986","-94.391148","-6","1" +"75958","Martinsville","TX","31.534162","-94.639022","-6","1" +"75959","Milam","TX","31.511711","-93.86086","-6","1" +"75960","Moscow","TX","30.903688","-94.80916","-6","1" +"75961","Nacogdoches","TX","31.626011","-94.60338","-6","1" +"75962","Nacogdoches","TX","31.699494","-94.607432","-6","1" +"75963","Nacogdoches","TX","31.604573","-94.664127","-6","1" +"75964","Nacogdoches","TX","31.61099","-94.70503","-6","1" +"75965","Nacogdoches","TX","31.649582","-94.638278","-6","1" +"75966","Newton","TX","30.831678","-93.74869","-6","1" +"75968","Pineland","TX","31.234368","-93.94399","-6","1" +"75969","Pollok","TX","31.436494","-94.87815","-6","1" +"75972","San Augustine","TX","31.514959","-94.16169","-6","1" +"75973","Shelbyville","TX","31.735326","-93.90706","-6","1" +"75974","Tenaha","TX","31.943273","-94.24291","-6","1" +"75975","Timpson","TX","31.903614","-94.40775","-6","1" +"75976","Wells","TX","31.506076","-94.94939","-6","1" +"75977","Wiergate","TX","31.038417","-93.80057","-6","1" +"75978","Woden","TX","31.502292","-94.52803","-6","1" +"75979","Woodville","TX","30.768601","-94.40671","-6","1" +"75980","Zavalla","TX","31.154673","-94.363","-6","1" +"75990","Woodville","TX","30.792674","-94.354476","-6","1" +"76001","Arlington","TX","32.634203","-97.14403","-6","1" +"76002","Arlington","TX","32.632349","-97.0963","-6","1" +"76003","Arlington","TX","32.741685","-97.225324","-6","1" +"76004","Arlington","TX","32.771419","-97.291484","-6","1" +"76005","Arlington","TX","32.771419","-97.291484","-6","1" +"76006","Arlington","TX","32.778047","-97.08088","-6","1" +"76007","Arlington","TX","32.771419","-97.291484","-6","1" +"76008","Aledo","TX","32.690922","-97.64013","-6","1" +"76009","Alvarado","TX","32.408183","-97.20956","-6","1" +"76010","Arlington","TX","32.723382","-97.08498","-6","1" +"76011","Arlington","TX","32.753672","-97.08706","-6","1" +"76012","Arlington","TX","32.752048","-97.13514","-6","1" +"76013","Arlington","TX","32.721632","-97.14698","-6","1" +"76014","Arlington","TX","32.694666","-97.08748","-6","1" +"76015","Arlington","TX","32.691393","-97.13546","-6","1" +"76016","Arlington","TX","32.686863","-97.19234","-6","1" +"76017","Arlington","TX","32.659277","-97.16435","-6","1" +"76018","Arlington","TX","32.65392","-97.08724","-6","1" +"76019","Arlington","TX","32.771419","-97.291484","-6","1" +"76020","Azle","TX","32.905693","-97.54845","-6","1" +"76021","Bedford","TX","32.851678","-97.13849","-6","1" +"76022","Bedford","TX","32.831228","-97.14593","-6","1" +"76023","Boyd","TX","33.068301","-97.59099","-6","1" +"76025","Plano","TX","33.104374","-96.766109","-6","1" +"76028","Burleson","TX","32.535841","-97.30681","-6","1" +"76031","Cleburne","TX","32.343115","-97.40081","-6","1" +"76033","Cleburne","TX","32.350907","-97.410254","-6","1" +"76034","Colleyville","TX","32.885062","-97.14923","-6","1" +"76035","Cresson","TX","32.546387","-97.64633","-6","1" +"76036","Crowley","TX","32.573816","-97.38491","-6","1" +"76039","Euless","TX","32.858727","-97.08453","-6","1" +"76040","Euless","TX","32.826172","-97.09721","-6","1" +"76041","Forreston","TX","32.244026","-96.86701","-6","1" +"76043","Glen Rose","TX","32.228184","-97.77198","-6","1" +"76044","Godley","TX","32.442679","-97.52595","-6","1" +"76048","Granbury","TX","32.424695","-97.78894","-6","1" +"76049","Granbury","TX","32.440376","-97.72002","-6","1" +"76050","Grandview","TX","32.27442","-97.19282","-6","1" +"76051","Grapevine","TX","32.93195","-97.08498","-6","1" +"76052","Haslet","TX","32.972998","-97.35592","-6","1" +"76053","Hurst","TX","32.821378","-97.181","-6","1" +"76054","Hurst","TX","32.858398","-97.17681","-6","1" +"76055","Itasca","TX","32.157903","-97.15014","-6","1" +"76058","Joshua","TX","32.461964","-97.40774","-6","1" +"76059","Keene","TX","32.39286","-97.3275","-6","1" +"76060","Kennedale","TX","32.645257","-97.21458","-6","1" +"76061","Lillian","TX","32.502674","-97.16347","-6","1" +"76063","Mansfield","TX","32.57701","-97.13485","-6","1" +"76064","Maypearl","TX","32.307456","-97.02761","-6","1" +"76065","Midlothian","TX","32.484094","-96.98672","-6","1" +"76066","Millsap","TX","32.715412","-98.00165","-6","1" +"76067","Mineral Wells","TX","32.810275","-98.10707","-6","1" +"76068","Mineral Wells","TX","32.759769","-98.316175","-6","1" +"76070","Nemo","TX","32.259829","-97.65485","-6","1" +"76071","Newark","TX","33.003717","-97.48974","-6","1" +"76073","Paradise","TX","33.122273","-97.71691","-6","1" +"76077","Rainbow","TX","32.28122","-97.70927","-6","1" +"76078","Rhome","TX","33.072675","-97.473","-6","1" +"76082","Springtown","TX","32.964932","-97.69803","-6","1" +"76084","Venus","TX","32.434322","-97.09988","-6","1" +"76085","Weatherford","TX","32.847183","-97.6986","-6","1" +"76086","Weatherford","TX","32.77516","-97.77987","-6","1" +"76087","Weatherford","TX","32.703008","-97.74814","-6","1" +"76088","Weatherford","TX","32.842085","-97.90477","-6","1" +"76092","Southlake","TX","32.946678","-97.14523","-6","1" +"76093","Rio Vista","TX","32.220267","-97.39036","-6","1" +"76094","Arlington","TX","32.771419","-97.291484","-6","1" +"76095","Bedford","TX","32.771419","-97.291484","-6","1" +"76096","Arlington","TX","32.771419","-97.291484","-6","1" +"76097","Burleson","TX","32.524393","-97.2609","-6","1" +"76098","Azle","TX","32.895716","-97.563622","-6","1" +"76099","Grapevine","TX","32.771419","-97.291484","-6","1" +"76101","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76102","Fort Worth","TX","32.75388","-97.32987","-6","1" +"76103","Fort Worth","TX","32.745681","-97.26563","-6","1" +"76104","Fort Worth","TX","32.730265","-97.32002","-6","1" +"76105","Fort Worth","TX","32.724831","-97.26992","-6","1" +"76106","Fort Worth","TX","32.798429","-97.354","-6","1" +"76107","Fort Worth","TX","32.738481","-97.38424","-6","1" +"76108","Fort Worth","TX","32.762563","-97.48079","-6","1" +"76109","Fort Worth","TX","32.699565","-97.37808","-6","1" +"76110","Fort Worth","TX","32.706331","-97.33787","-6","1" +"76111","Fort Worth","TX","32.778479","-97.30099","-6","1" +"76112","Fort Worth","TX","32.744032","-97.21957","-6","1" +"76113","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76114","Fort Worth","TX","32.781329","-97.40099","-6","1" +"76115","Fort Worth","TX","32.680333","-97.33579","-6","1" +"76116","Fort Worth","TX","32.72228","-97.44409","-6","1" +"76117","Haltom City","TX","32.805379","-97.27036","-6","1" +"76118","Fort Worth","TX","32.80533","-97.22264","-6","1" +"76119","Fort Worth","TX","32.691033","-97.26479","-6","1" +"76120","Fort Worth","TX","32.762631","-97.17527","-6","1" +"76121","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76122","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76123","Fort Worth","TX","32.623807","-97.37548","-6","1" +"76124","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76126","Fort Worth","TX","32.649476","-97.49124","-6","1" +"76127","Naval Air Station/ Jrb","TX","32.772063","-97.42165","-6","1" +"76129","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76130","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76131","Fort Worth","TX","32.873017","-97.34622","-6","1" +"76132","Fort Worth","TX","32.670345","-97.4143","-6","1" +"76133","Fort Worth","TX","32.655401","-97.37765","-6","1" +"76134","Fort Worth","TX","32.649855","-97.33358","-6","1" +"76135","Fort Worth","TX","32.823629","-97.45167","-6","1" +"76136","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76137","Fort Worth","TX","32.86814","-97.28566","-6","1" +"76140","Fort Worth","TX","32.630268","-97.27102","-6","1" +"76147","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76148","Fort Worth","TX","32.869384","-97.25123","-6","1" +"76150","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76153","Fort Worth","TX","32.667134","-97.348895","-6","1" +"76155","Fort Worth","TX","32.830932","-97.04778","-6","1" +"76161","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76162","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76163","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76164","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76177","Fort Worth","TX","32.949819","-97.31406","-6","1" +"76178","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76179","Fort Worth","TX","32.876475","-97.41249","-6","1" +"76180","North Richland Hills","TX","32.855666","-97.21818","-6","1" +"76181","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76182","North Richland Hills","TX","32.771419","-97.291484","-6","1" +"76185","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76191","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76192","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76193","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76195","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76196","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76197","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76198","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76199","Fort Worth","TX","32.771419","-97.291484","-6","1" +"76201","Denton","TX","33.226598","-97.13061","-6","1" +"76202","Denton","TX","33.225523","-97.108546","-6","1" +"76203","Denton","TX","33.246457","-97.127027","-6","1" +"76204","Denton","TX","33.20743","-97.116282","-6","1" +"76205","Denton","TX","33.16156","-97.10376","-6","1" +"76206","Denton","TX","33.169379","-97.150558","-6","1" +"76207","Denton","TX","33.236827","-97.16941","-6","1" +"76208","Denton","TX","33.198442","-97.06078","-6","1" +"76209","Denton","TX","33.23552","-97.112743","-6","1" +"76210","Corinth","TX","33.143186","-97.088337","-6","1" +"76225","Alvord","TX","33.360331","-97.69158","-6","1" +"76226","Argyle","TX","33.105309","-97.16294","-6","1" +"76227","Aubrey","TX","33.274761","-96.99457","-6","1" +"76228","Bellevue","TX","33.586753","-98.07694","-6","1" +"76230","Bowie","TX","33.54007","-97.88575","-6","1" +"76233","Collinsville","TX","33.542765","-96.89419","-6","1" +"76234","Decatur","TX","33.263039","-97.55657","-6","1" +"76238","Era","TX","33.491311","-97.39136","-6","1" +"76239","Forestburg","TX","33.530807","-97.54944","-6","1" +"76240","Gainesville","TX","33.627942","-97.13636","-6","1" +"76241","Gainesville","TX","33.610384","-97.03692","-6","1" +"76244","Keller","TX","32.771419","-97.291484","-6","1" +"76245","Gordonville","TX","33.842878","-96.82348","-6","1" +"76246","Greenwood","TX","33.41798","-97.46457","-6","1" +"76247","Justin","TX","33.08704","-97.30384","-6","1" +"76248","Keller","TX","32.92704","-97.2506","-6","1" +"76249","Krum","TX","33.270036","-97.24859","-6","1" +"76250","Lindsay","TX","33.62109","-97.20652","-6","1" +"76251","Montague","TX","33.660084","-97.71727","-6","1" +"76252","Muenster","TX","33.661889","-97.38029","-6","1" +"76253","Myra","TX","33.624401","-97.31704","-6","1" +"76255","Nocona","TX","33.824724","-97.69688","-6","1" +"76258","Pilot Point","TX","33.385645","-96.95213","-6","1" +"76259","Ponder","TX","33.187644","-97.29676","-6","1" +"76261","Ringgold","TX","33.817816","-97.94159","-6","1" +"76262","Roanoke","TX","33.000177","-97.21871","-6","1" +"76263","Rosston","TX","33.487842","-97.421155","-6","1" +"76264","Sadler","TX","33.748414","-96.83792","-6","1" +"76265","Saint Jo","TX","33.701692","-97.53029","-6","1" +"76266","Sanger","TX","33.358871","-97.18944","-6","1" +"76267","Slidell","TX","33.378039","-97.39219","-6","1" +"76268","Southmayd","TX","33.621928","-96.7649","-6","1" +"76270","Sunset","TX","33.446897","-97.77217","-6","1" +"76271","Tioga","TX","33.469076","-96.91632","-6","1" +"76272","Valley View","TX","33.482548","-97.12259","-6","1" +"76273","Whitesboro","TX","33.705904","-96.91786","-6","1" +"76299","Roanoke","TX","33.20743","-97.116282","-6","1" +"76301","Wichita Falls","TX","33.916497","-98.47132","-6","1" +"76302","Wichita Falls","TX","33.85379","-98.4801","-6","1" +"76303","Wichita Falls","TX","33.897073","-98.459792","-6","1" +"76304","Wichita Falls","TX","33.931024","-98.499077","-6","1" +"76305","Wichita Falls","TX","33.996515","-98.51781","-6","1" +"76306","Wichita Falls","TX","33.942496","-98.51923","-6","1" +"76307","Wichita Falls","TX","33.877746","-98.494595","-6","1" +"76308","Wichita Falls","TX","33.859798","-98.54064","-6","1" +"76309","Wichita Falls","TX","33.892447","-98.53215","-6","1" +"76310","Wichita Falls","TX","33.841948","-98.5624","-6","1" +"76311","Sheppard AFB","TX","33.970725","-98.49127","-6","1" +"76345","Fort Worth","TX","32.38253","-98.404816","-6","1" +"76351","Archer City","TX","33.574426","-98.63462","-6","1" +"76352","Bluegrove","TX","33.811665","-98.184762","-6","1" +"76354","Burkburnett","TX","34.085289","-98.58881","-6","1" +"76356","Terral","OK","33.897998","-97.936166","-6","1" +"76357","Byers","TX","34.06722","-98.18119","-6","1" +"76360","Electra","TX","33.963228","-98.97235","-6","1" +"76363","Goree","TX","33.481208","-99.51447","-6","1" +"76364","Harrold","TX","34.081642","-99.062","-6","1" +"76365","Henrietta","TX","33.761291","-98.19145","-6","1" +"76366","Holliday","TX","33.760814","-98.72148","-6","1" +"76367","Iowa Park","TX","33.958681","-98.68492","-6","1" +"76369","Kamay","TX","34.023386","-98.687748","-6","1" +"76370","Megargel","TX","33.445341","-98.92106","-6","1" +"76371","Munday","TX","33.463284","-99.63839","-6","1" +"76372","Newcastle","TX","33.224562","-98.86043","-6","1" +"76373","Oklaunion","TX","34.147838","-99.11818","-6","1" +"76374","Olney","TX","33.364868","-98.75201","-6","1" +"76377","Petrolia","TX","34.011464","-98.22961","-6","1" +"76379","Scotland","TX","33.646685","-98.48719","-6","1" +"76380","Seymour","TX","33.594956","-99.28506","-6","1" +"76384","Vernon","TX","34.142094","-99.29649","-6","1" +"76385","Vernon","TX","34.146356","-99.214088","-6","1" +"76388","Weinert","TX","33.336436","-99.64257","-6","1" +"76389","Windthorst","TX","33.554607","-98.42076","-6","1" +"76401","Stephenville","TX","32.242816","-98.21058","-6","1" +"76402","Stephenville","TX","32.215275","-98.207997","-6","1" +"76420","Albany","TX","33.036724","-98.595422","-6","1" +"76424","Breckenridge","TX","32.761058","-98.92225","-6","1" +"76426","Bridgeport","TX","33.197313","-97.80932","-6","1" +"76427","Bryson","TX","33.165414","-98.38244","-6","1" +"76429","Caddo","TX","32.74154","-98.67089","-6","1" +"76430","Albany","TX","32.742591","-99.27519","-6","1" +"76431","Chico","TX","33.293652","-97.8597","-6","1" +"76432","Blanket","TX","31.82741","-98.80286","-6","1" +"76433","Bluff Dale","TX","32.318616","-98.03345","-6","1" +"76435","Carbon","TX","32.236449","-98.83268","-6","1" +"76436","Carlton","TX","31.917085","-98.17418","-6","1" +"76437","Cisco","TX","32.39492","-98.99444","-6","1" +"76439","Dennis","TX","32.632495","-97.957483","-6","1" +"76442","Comanche","TX","31.906683","-98.60618","-6","1" +"76443","Cross Plains","TX","32.103546","-99.17874","-6","1" +"76444","De Leon","TX","32.122804","-98.55799","-6","1" +"76445","Desdemona","TX","32.298841","-98.55194","-6","1" +"76446","Dublin","TX","32.07881","-98.35073","-6","1" +"76448","Eastland","TX","32.398681","-98.7959","-6","1" +"76449","Graford","TX","32.908714","-98.35727","-6","1" +"76450","Graham","TX","33.081863","-98.60091","-6","1" +"76452","Energy","TX","31.758351","-98.40613","-6","1" +"76453","Gordon","TX","32.572618","-98.36399","-6","1" +"76454","Gorman","TX","32.214932","-98.68404","-6","1" +"76455","Gustine","TX","31.833414","-98.37248","-6","1" +"76457","Hico","TX","31.944207","-98.02763","-6","1" +"76458","Jacksboro","TX","33.200265","-98.15778","-6","1" +"76459","Jermyn","TX","33.277727","-98.39461","-6","1" +"76460","Loving","TX","33.332336","-98.48413","-6","1" +"76461","Lingleville","TX","32.221433","-98.342798","-6","1" +"76462","Lipan","TX","32.517753","-98.03379","-6","1" +"76463","Mingus","TX","32.493233","-98.41805","-6","1" +"76464","Moran","TX","32.57665","-99.18511","-6","1" +"76465","Morgan Mill","TX","32.215275","-98.207997","-6","1" +"76466","Olden","TX","32.428128","-98.74853","-6","1" +"76467","Paluxy","TX","32.341365","-97.932083","-6","1" +"76468","Proctor","TX","31.989197","-98.42529","-6","1" +"76469","Putnam","TX","32.37338","-99.19762","-6","1" +"76470","Ranger","TX","32.497298","-98.67402","-6","1" +"76471","Rising Star","TX","32.105459","-98.96537","-6","1" +"76472","Santo","TX","32.617128","-98.17476","-6","1" +"76474","Sidney","TX","31.963873","-98.78317","-6","1" +"76475","Strawn","TX","32.628147","-98.48517","-6","1" +"76476","Tolar","TX","32.387648","-97.93959","-6","1" +"76481","South Bend","TX","32.970869","-98.71204","-6","1" +"76483","Throckmorton","TX","33.155666","-99.2174","-6","1" +"76484","Palo Pinto","TX","32.722689","-98.33271","-6","1" +"76485","Peaster","TX","32.779315","-97.805502","-6","1" +"76486","Perrin","TX","33.024726","-98.05788","-6","1" +"76487","Poolville","TX","33.009411","-97.89968","-6","1" +"76490","Whitt","TX","32.95802","-98.01942","-6","1" +"76491","Woodson","TX","33.029698","-99.03622","-6","1" +"76501","Temple","TX","31.093215","-97.31086","-6","1" +"76502","Temple","TX","31.086483","-97.40076","-6","1" +"76503","Temple","TX","31.053986","-97.320306","-6","1" +"76504","Temple","TX","31.09954","-97.35766","-6","1" +"76505","Temple","TX","31.036287","-97.492017","-6","1" +"76508","Temple","TX","31.036287","-97.492017","-6","1" +"76511","Bartlett","TX","30.798697","-97.42363","-6","1" +"76513","Belton","TX","31.073329","-97.48642","-6","1" +"76518","Buckholts","TX","30.851275","-97.13837","-6","1" +"76519","Burlington","TX","31.002164","-97.0358","-6","1" +"76520","Cameron","TX","30.851922","-96.96323","-6","1" +"76522","Copperas Cove","TX","31.131076","-97.91666","-6","1" +"76523","Davilla","TX","30.785114","-97.28058","-6","1" +"76524","Eddy","TX","31.279614","-97.22336","-6","1" +"76525","Evant","TX","31.485242","-98.19084","-6","1" +"76526","Flat","TX","31.295568","-97.582152","-6","1" +"76527","Florence","TX","30.833293","-97.8049","-6","1" +"76528","Gatesville","TX","31.43211","-97.72602","-6","1" +"76530","Granger","TX","30.715207","-97.43449","-6","1" +"76531","Hamilton","TX","31.696154","-98.14834","-6","1" +"76533","Heidenheimer","TX","31.049621","-97.493616","-6","1" +"76534","Holland","TX","30.883556","-97.396","-6","1" +"76537","Jarrell","TX","30.808903","-97.59923","-6","1" +"76538","Jonesboro","TX","31.629515","-97.90249","-6","1" +"76539","Kempner","TX","31.071352","-97.97615","-6","1" +"76540","Killeen","TX","31.085833","-97.357099","-6","1" +"76541","Killeen","TX","31.117874","-97.72924","-6","1" +"76542","Killeen","TX","31.027003","-97.76717","-6","1" +"76543","Killeen","TX","31.113828","-97.69246","-6","1" +"76544","Killeen","TX","31.148447","-97.80918","-6","1" +"76545","Killeen","TX","31.036287","-97.492017","-6","1" +"76546","Killeen","TX","31.036287","-97.492017","-6","1" +"76547","Killeen","TX","31.036287","-97.492017","-6","1" +"76548","Harker Heights","TX","31.068459","-97.65552","-6","1" +"76549","Killeen","TX","31.084108","-97.79149","-6","1" +"76550","Lampasas","TX","31.06639","-98.19192","-6","1" +"76552","Leon Junction","TX","31.351234","-97.548468","-6","1" +"76554","Little River","TX","30.985136","-97.35508","-6","1" +"76555","Maysfield","TX","30.784169","-96.96376","-6","1" +"76556","Milano","TX","30.702352","-96.85039","-6","1" +"76557","Moody","TX","31.29697","-97.38491","-6","1" +"76558","Mound","TX","31.351386","-97.644352","-6","1" +"76559","Nolanville","TX","31.081777","-97.6138","-6","1" +"76561","Oglesby","TX","31.430323","-97.52946","-6","1" +"76564","Pendleton","TX","31.036287","-97.492017","-6","1" +"76565","Pottsville","TX","31.650023","-98.36186","-6","1" +"76566","Purmela","TX","31.506687","-97.98997","-6","1" +"76567","Rockdale","TX","30.646291","-97.01149","-6","1" +"76569","Rogers","TX","30.932552","-97.22374","-6","1" +"76570","Rosebud","TX","31.071723","-96.96229","-6","1" +"76571","Salado","TX","30.955509","-97.56503","-6","1" +"76573","Schwertner","TX","30.805512","-97.470456","-6","1" +"76574","Taylor","TX","30.574821","-97.40948","-6","1" +"76576","Salado","TX","30.946345","-97.535883","-6","1" +"76577","Thorndale","TX","30.611416","-97.18458","-6","1" +"76578","Thrall","TX","30.55063","-97.24963","-6","1" +"76579","Troy","TX","31.212196","-97.26563","-6","1" +"76596","Gatesville","TX","31.390196","-97.799309","-6","1" +"76597","Gatesville","TX","31.390196","-97.799309","-6","1" +"76598","Gatesville","TX","31.390196","-97.799309","-6","1" +"76599","Gatesville","TX","31.470598","-97.734728","-6","1" +"76607","Milford","TX","32.127507","-96.947689","-6","1" +"76618","Richland","TX","31.930849","-96.429154","-6","1" +"76621","Abbott","TX","31.884263","-97.08385","-6","1" +"76622","Aquilla","TX","31.824495","-97.23306","-6","1" +"76623","Avalon","TX","32.221421","-96.7832","-6","1" +"76624","Axtell","TX","31.661554","-96.95451","-6","1" +"76626","Blooming Grove","TX","32.098474","-96.71501","-6","1" +"76627","Blum","TX","32.122106","-97.41864","-6","1" +"76628","Brandon","TX","32.045029","-96.96601","-6","1" +"76629","Bremond","TX","31.160528","-96.6778","-6","1" +"76630","Bruceville","TX","31.337382","-97.22762","-6","1" +"76631","Bynum","TX","31.978157","-96.9725","-6","1" +"76632","Chilton","TX","31.287625","-97.06076","-6","1" +"76633","China Spring","TX","31.669085","-97.3201","-6","1" +"76634","Clifton","TX","31.798454","-97.52516","-6","1" +"76635","Coolidge","TX","31.734571","-96.66388","-6","1" +"76636","Covington","TX","32.177765","-97.27284","-6","1" +"76637","Cranfills Gap","TX","31.771383","-97.82298","-6","1" +"76638","Crawford","TX","31.555885","-97.41024","-6","1" +"76639","Dawson","TX","31.881324","-96.70164","-6","1" +"76640","Elm Mott","TX","31.686152","-97.08602","-6","1" +"76641","Frost","TX","32.044273","-96.78624","-6","1" +"76642","Groesbeck","TX","31.510726","-96.51529","-6","1" +"76643","Hewitt","TX","31.453789","-97.19502","-6","1" +"76644","Laguna Park","TX","31.897381","-97.64097","-6","1" +"76645","Hillsboro","TX","32.015496","-97.12263","-6","1" +"76648","Hubbard","TX","31.84121","-96.80817","-6","1" +"76649","Iredell","TX","32.001365","-97.88196","-6","1" +"76650","Irene","TX","31.987167","-97.108113","-6","1" +"76651","Italy","TX","32.175783","-96.88018","-6","1" +"76652","Kopperl","TX","32.109599","-97.54276","-6","1" +"76653","Kosse","TX","31.304634","-96.61211","-6","1" +"76654","Leroy","TX","31.553646","-97.203166","-6","1" +"76655","Lorena","TX","31.393062","-97.16178","-6","1" +"76656","Lott","TX","31.185062","-97.04389","-6","1" +"76657","McGregor","TX","31.416926","-97.40095","-6","1" +"76660","Malone","TX","31.928342","-96.88213","-6","1" +"76661","Marlin","TX","31.310649","-96.87859","-6","1" +"76664","Mart","TX","31.549368","-96.8233","-6","1" +"76665","Meridian","TX","31.922473","-97.69159","-6","1" +"76666","Mertens","TX","32.046241","-96.90003","-6","1" +"76667","Mexia","TX","31.669823","-96.48721","-6","1" +"76670","Milford","TX","32.111683","-96.97377","-6","1" +"76671","Morgan","TX","32.011671","-97.5324","-6","1" +"76673","Mount Calm","TX","31.74658","-96.89776","-6","1" +"76675","Otto","TX","31.416468","-96.81813","-6","1" +"76676","Penelope","TX","31.861594","-96.93466","-6","1" +"76677","Perry","TX","31.254242","-96.937574","-6","1" +"76678","Prairie Hill","TX","31.652858","-96.78857","-6","1" +"76679","Purdon","TX","31.949312","-96.61514","-6","1" +"76680","Reagan","TX","31.190291","-96.81034","-6","1" +"76681","Richland","TX","31.90869","-96.40744","-6","1" +"76682","Riesel","TX","31.475763","-96.9179","-6","1" +"76683","Riesel","TX","31.503892","-97.179773","-6","1" +"76684","Ross","TX","31.717293","-97.118754","-6","1" +"76685","Satin","TX","31.35797","-97.02091","-6","1" +"76686","Tehuacana","TX","31.752538","-96.54327","-6","1" +"76687","Thornton","TX","31.376261","-96.49614","-6","1" +"76689","Valley Mills","TX","31.662435","-97.50214","-6","1" +"76690","Walnut Springs","TX","32.078488","-97.76708","-6","1" +"76691","West","TX","31.783019","-97.07945","-6","1" +"76692","Whitney","TX","31.975949","-97.35499","-6","1" +"76693","Wortham","TX","31.787449","-96.44885","-6","1" +"76701","Waco","TX","31.551955","-97.13833","-6","1" +"76702","Waco","TX","31.547516","-97.14433","-6","1" +"76703","Waco","TX","31.553646","-97.203166","-6","1" +"76704","Waco","TX","31.571266","-97.12201","-6","1" +"76705","Waco","TX","31.609834","-97.08821","-6","1" +"76706","Waco","TX","31.514267","-97.11807","-6","1" +"76707","Waco","TX","31.552266","-97.15957","-6","1" +"76708","Waco","TX","31.584132","-97.18558","-6","1" +"76710","Waco","TX","31.535916","-97.18588","-6","1" +"76711","Waco","TX","31.520296","-97.15099","-6","1" +"76712","Woodway","TX","31.514067","-97.23546","-6","1" +"76714","Waco","TX","31.553646","-97.203166","-6","1" +"76715","Waco","TX","31.553646","-97.203166","-6","1" +"76716","Waco","TX","31.553646","-97.203166","-6","1" +"76795","Waco","TX","31.553646","-97.203166","-6","1" +"76797","Waco","TX","31.553646","-97.203166","-6","1" +"76798","Waco","TX","31.547466","-97.11997","-6","1" +"76799","Waco","TX","31.541116","-97.16148","-6","1" +"76801","Brownwood","TX","31.73003","-99.00605","-6","1" +"76802","Early","TX","31.747887","-98.93928","-6","1" +"76803","Brownwood","TX","31.763882","-98.936021","-6","1" +"76804","Brownwood","TX","31.77419","-99.09213","-6","1" +"76820","Art","TX","30.720372","-99.100089","-6","1" +"76821","Ballinger","TX","31.754011","-99.93695","-6","1" +"76823","Bangs","TX","31.714347","-99.14462","-6","1" +"76824","Bend","TX","31.086845","-98.51817","-6","1" +"76825","Brady","TX","31.121411","-99.3407","-6","1" +"76827","Brookesmith","TX","31.542459","-99.13604","-6","1" +"76828","Burkett","TX","32.023828","-99.23597","-6","1" +"76831","Castell","TX","30.776619","-98.95072","-6","1" +"76832","Cherokee","TX","30.98609","-98.67201","-6","1" +"76834","Coleman","TX","31.847973","-99.45514","-6","1" +"76836","Doole","TX","31.217152","-99.347156","-6","1" +"76837","Eden","TX","31.201871","-99.90601","-6","1" +"76841","Fort McKavett","TX","30.834326","-100.09843","-6","1" +"76842","Fredonia","TX","30.92753","-99.08975","-6","1" +"76844","Goldthwaite","TX","31.460782","-98.52618","-6","1" +"76845","Gouldbusk","TX","31.547652","-99.47679","-6","1" +"76848","Hext","TX","30.847791","-99.52617","-6","1" +"76849","Junction","TX","30.478782","-99.77444","-6","1" +"76852","Lohn","TX","31.404745","-99.49265","-6","1" +"76853","Lometa","TX","31.238292","-98.40241","-6","1" +"76854","London","TX","30.646698","-99.54107","-6","1" +"76855","Lowake","TX","31.333614","-99.85837","-6","1" +"76856","Mason","TX","30.75159","-99.23238","-6","1" +"76857","May","TX","31.917862","-98.95325","-6","1" +"76858","Melvin","TX","31.230813","-99.62583","-6","1" +"76859","Menard","TX","30.873091","-99.8296","-6","1" +"76861","Miles","TX","31.58901","-100.1911","-6","1" +"76862","Millersview","TX","31.445119","-99.70831","-6","1" +"76864","Mullin","TX","31.561427","-98.73632","-6","1" +"76865","Norton","TX","31.849628","-100.15332","-6","1" +"76866","Paint Rock","TX","31.472654","-99.92215","-6","1" +"76867","Pear Valley","TX","31.217152","-99.347156","-6","1" +"76869","Pontotoc","TX","30.909853","-98.98395","-6","1" +"76870","Priddy","TX","31.651485","-98.50831","-6","1" +"76871","Richland Springs","TX","31.292292","-98.96012","-6","1" +"76872","Rochelle","TX","31.314477","-99.17492","-6","1" +"76873","Rockwood","TX","31.51161","-99.37166","-6","1" +"76874","Roosevelt","TX","30.480128","-100.1175","-6","1" +"76875","Rowena","TX","31.611317","-100.033","-6","1" +"76877","San Saba","TX","31.190826","-98.74134","-6","1" +"76878","Santa Anna","TX","31.722813","-99.2959","-6","1" +"76880","Star","TX","31.477095","-98.630919","-6","1" +"76882","Talpa","TX","31.801928","-99.68057","-6","1" +"76883","Telegraph","TX","29.956952","-100.227509","-6","1" +"76884","Valera","TX","31.753561","-99.54774","-6","1" +"76885","Valley Spring","TX","30.904481","-98.79242","-6","1" +"76886","Veribest","TX","31.349348","-100.494912","-6","1" +"76887","Voca","TX","30.973049","-99.17091","-6","1" +"76888","Voss","TX","31.589203","-99.62601","-6","1" +"76890","Zephyr","TX","31.685153","-98.77741","-6","1" +"76901","San Angelo","TX","31.474132","-100.5198","-6","1" +"76902","San Angelo","TX","31.39577","-100.68959","-6","1" +"76903","San Angelo","TX","31.468911","-100.4387","-6","1" +"76904","San Angelo","TX","31.344515","-100.47217","-6","1" +"76905","San Angelo","TX","31.515684","-100.34896","-6","1" +"76906","San Angelo","TX","31.372754","-100.495114","-6","1" +"76908","Goodfellow AFB","TX","31.39577","-100.68959","-6","1" +"76909","San Angelo","TX","31.39577","-100.68959","-6","1" +"76930","Barnhart","TX","31.148007","-101.18632","-6","1" +"76932","Big Lake","TX","31.304669","-101.50841","-6","1" +"76933","Bronte","TX","31.887436","-100.28655","-6","1" +"76934","Carlsbad","TX","31.603027","-100.65431","-6","1" +"76935","Christoval","TX","31.088429","-100.41072","-6","1" +"76936","Eldorado","TX","30.860483","-100.53988","-6","1" +"76937","Eola","TX","31.377623","-100.10134","-6","1" +"76939","Knickerbocker","TX","31.250101","-100.592015","-6","1" +"76940","Mereta","TX","31.45195","-100.12886","-6","1" +"76941","Mertzon","TX","31.330315","-100.93381","-6","1" +"76943","Ozona","TX","30.620199","-101.24517","-6","1" +"76945","Robert Lee","TX","31.890079","-100.5669","-6","1" +"76949","Silver","TX","32.047723","-100.69452","-6","1" +"76950","Sonora","TX","30.453299","-100.56983","-6","1" +"76951","Sterling City","TX","31.818347","-101.0455","-6","1" +"76953","Tennyson","TX","31.716571","-100.35906","-6","1" +"76955","Vancourt","TX","31.305402","-100.12871","-6","1" +"76957","Wall","TX","31.359844","-100.206705","-6","1" +"76958","Water Valley","TX","31.663529","-100.71789","-6","1" +"77000","Houston","TX","29.711257","-95.304936","-6","1" +"77001","Houston","TX","29.813142","-95.309789","-6","1" +"77002","Houston","TX","29.755578","-95.36531","-6","1" +"77003","Houston","TX","29.749278","-95.34741","-6","1" +"77004","Houston","TX","29.728779","-95.3657","-6","1" +"77005","Houston","TX","29.717529","-95.42821","-6","1" +"77006","Houston","TX","29.741878","-95.38944","-6","1" +"77007","Houston","TX","29.772627","-95.40319","-6","1" +"77008","Houston","TX","29.798777","-95.40951","-6","1" +"77009","Houston","TX","29.79326","-95.36735","-6","1" +"77010","Houston","TX","29.754728","-95.36216","-6","1" +"77011","Houston","TX","29.742378","-95.30726","-6","1" +"77012","Houston","TX","29.719778","-95.27906","-6","1" +"77013","Houston","TX","29.78146","-95.24289","-6","1" +"77014","Houston","TX","29.979063","-95.47294","-6","1" +"77015","Houston","TX","29.778526","-95.18118","-6","1" +"77016","Houston","TX","29.857007","-95.30886","-6","1" +"77017","Houston","TX","29.687829","-95.25478","-6","1" +"77018","Houston","TX","29.825476","-95.42619","-6","1" +"77019","Houston","TX","29.752528","-95.39923","-6","1" +"77020","Houston","TX","29.775927","-95.31836","-6","1" +"77021","Houston","TX","29.695879","-95.3573","-6","1" +"77022","Houston","TX","29.825176","-95.37798","-6","1" +"77023","Houston","TX","29.725961","-95.3227","-6","1" +"77024","Houston","TX","29.773994","-95.51771","-6","1" +"77025","Houston","TX","29.69023","-95.43474","-6","1" +"77026","Houston","TX","29.79437","-95.33395","-6","1" +"77027","Houston","TX","29.739029","-95.44364","-6","1" +"77028","Houston","TX","29.827315","-95.28631","-6","1" +"77029","Houston","TX","29.760794","-95.26043","-6","1" +"77030","Houston","TX","29.704584","-95.40466","-6","1" +"77031","Houston","TX","29.654132","-95.54311","-6","1" +"77032","Houston","TX","29.944922","-95.34152","-6","1" +"77033","Houston","TX","29.66913","-95.33834","-6","1" +"77034","Houston","TX","29.63643","-95.21789","-6","1" +"77035","Houston","TX","29.654108","-95.47692","-6","1" +"77036","Houston","TX","29.70053","-95.53514","-6","1" +"77037","Houston","TX","29.885451","-95.39552","-6","1" +"77038","Houston","TX","29.917814","-95.44138","-6","1" +"77039","Houston","TX","29.909123","-95.33683","-6","1" +"77040","Houston","TX","29.878345","-95.53337","-6","1" +"77041","Houston","TX","29.85873","-95.57243","-6","1" +"77042","Houston","TX","29.741565","-95.55996","-6","1" +"77043","Houston","TX","29.802473","-95.5618","-6","1" +"77044","Houston","TX","29.88277","-95.16782","-6","1" +"77045","Houston","TX","29.629111","-95.43841","-6","1" +"77046","Houston","TX","29.733181","-95.43131","-6","1" +"77047","Houston","TX","29.616182","-95.37767","-6","1" +"77048","Houston","TX","29.633081","-95.33761","-6","1" +"77049","Houston","TX","29.832668","-95.1742","-6","1" +"77050","Houston","TX","29.896156","-95.28687","-6","1" +"77051","Houston","TX","29.66543","-95.36871","-6","1" +"77052","Houston","TX","29.676829","-95.177587","-6","1" +"77053","Houston","TX","29.596666","-95.45981","-6","1" +"77054","Houston","TX","29.683865","-95.39772","-6","1" +"77055","Houston","TX","29.798877","-95.49629","-6","1" +"77056","Houston","TX","29.747328","-95.46931","-6","1" +"77057","Houston","TX","29.745129","-95.49131","-6","1" +"77058","Houston","TX","29.55283","-95.10265","-6","1" +"77059","Houston","TX","29.601776","-95.11734","-6","1" +"77060","Houston","TX","29.933367","-95.39916","-6","1" +"77061","Houston","TX","29.66028","-95.28446","-6","1" +"77062","Houston","TX","29.57493","-95.13238","-6","1" +"77063","Houston","TX","29.734379","-95.52269","-6","1" +"77064","Houston","TX","29.923638","-95.55919","-6","1" +"77065","Houston","TX","29.927675","-95.60547","-6","1" +"77066","Houston","TX","29.959439","-95.49694","-6","1" +"77067","Houston","TX","29.952354","-95.45065","-6","1" +"77068","Houston","TX","30.007886","-95.48532","-6","1" +"77069","Houston","TX","29.984672","-95.52887","-6","1" +"77070","Houston","TX","29.978801","-95.57655","-6","1" +"77071","Houston","TX","29.647637","-95.51718","-6","1" +"77072","Houston","TX","29.700898","-95.59002","-6","1" +"77073","Houston","TX","30.008745","-95.41273","-6","1" +"77074","Houston","TX","29.689781","-95.51161","-6","1" +"77075","Houston","TX","29.620881","-95.26018","-6","1" +"77076","Houston","TX","29.858525","-95.38178","-6","1" +"77077","Houston","TX","29.750897","-95.61255","-6","1" +"77078","Houston","TX","29.849424","-95.25951","-6","1" +"77079","Houston","TX","29.773018","-95.60125","-6","1" +"77080","Houston","TX","29.816866","-95.52309","-6","1" +"77081","Houston","TX","29.70828","-95.48361","-6","1" +"77082","Houston","TX","29.722704","-95.6314","-6","1" +"77083","Houston","TX","29.691714","-95.64978","-6","1" +"77084","Houston","TX","29.839155","-95.66391","-6","1" +"77085","Houston","TX","29.621746","-95.48695","-6","1" +"77086","Houston","TX","29.920981","-95.49556","-6","1" +"77087","Houston","TX","29.686579","-95.30386","-6","1" +"77088","Houston","TX","29.879213","-95.45028","-6","1" +"77089","Houston","TX","29.589831","-95.22251","-6","1" +"77090","Houston","TX","30.012711","-95.45132","-6","1" +"77091","Houston","TX","29.852975","-95.43586","-6","1" +"77092","Houston","TX","29.833326","-95.47644","-6","1" +"77093","Houston","TX","29.862024","-95.33967","-6","1" +"77094","Houston","TX","29.770722","-95.6988","-6","1" +"77095","Houston","TX","29.896656","-95.64842","-6","1" +"77096","Houston","TX","29.674336","-95.48123","-6","1" +"77097","Houston","TX","29.83399","-95.434241","-6","1" +"77098","Houston","TX","29.735529","-95.41405","-6","1" +"77099","Houston","TX","29.668489","-95.5869","-6","1" +"77201","Houston","TX","29.83399","-95.434241","-6","1" +"77202","Houston","TX","29.83399","-95.434241","-6","1" +"77203","Houston","TX","29.83399","-95.434241","-6","1" +"77204","Houston","TX","29.83399","-95.434241","-6","1" +"77205","Houston","TX","29.83399","-95.434241","-6","1" +"77206","Houston","TX","29.83399","-95.434241","-6","1" +"77207","Houston","TX","29.83399","-95.434241","-6","1" +"77208","Houston","TX","29.83399","-95.434241","-6","1" +"77209","Houston","TX","29.612816","-95.158517","-6","1" +"77210","Houston","TX","29.83399","-95.434241","-6","1" +"77212","Houston","TX","29.83399","-95.434241","-6","1" +"77213","Houston","TX","29.83399","-95.434241","-6","1" +"77215","Houston","TX","29.83399","-95.434241","-6","1" +"77216","Houston","TX","29.83399","-95.434241","-6","1" +"77217","Houston","TX","29.83399","-95.434241","-6","1" +"77218","Houston","TX","29.83399","-95.434241","-6","1" +"77219","Houston","TX","29.83399","-95.434241","-6","1" +"77220","Houston","TX","29.83399","-95.434241","-6","1" +"77221","Houston","TX","29.83399","-95.434241","-6","1" +"77222","Houston","TX","29.83399","-95.434241","-6","1" +"77223","Houston","TX","29.83399","-95.434241","-6","1" +"77224","Houston","TX","29.83399","-95.434241","-6","1" +"77225","Houston","TX","29.83399","-95.434241","-6","1" +"77226","Houston","TX","29.83399","-95.434241","-6","1" +"77227","Houston","TX","29.83399","-95.434241","-6","1" +"77228","Houston","TX","29.83399","-95.434241","-6","1" +"77229","Houston","TX","29.83399","-95.434241","-6","1" +"77230","Houston","TX","29.83399","-95.434241","-6","1" +"77231","Houston","TX","29.83399","-95.434241","-6","1" +"77233","Houston","TX","29.83399","-95.434241","-6","1" +"77234","Houston","TX","29.83399","-95.434241","-6","1" +"77235","Houston","TX","29.83399","-95.434241","-6","1" +"77236","Houston","TX","29.83399","-95.434241","-6","1" +"77237","Houston","TX","29.83399","-95.434241","-6","1" +"77238","Houston","TX","29.83399","-95.434241","-6","1" +"77240","Houston","TX","29.83399","-95.434241","-6","1" +"77241","Houston","TX","29.83399","-95.434241","-6","1" +"77242","Houston","TX","29.83399","-95.434241","-6","1" +"77243","Houston","TX","29.83399","-95.434241","-6","1" +"77244","Houston","TX","29.83399","-95.434241","-6","1" +"77245","Houston","TX","29.83399","-95.434241","-6","1" +"77248","Houston","TX","29.83399","-95.434241","-6","1" +"77249","Houston","TX","29.83399","-95.434241","-6","1" +"77251","Houston","TX","29.83399","-95.434241","-6","1" +"77252","Houston","TX","29.83399","-95.434241","-6","1" +"77253","Houston","TX","29.83399","-95.434241","-6","1" +"77254","Houston","TX","29.83399","-95.434241","-6","1" +"77255","Houston","TX","29.83399","-95.434241","-6","1" +"77256","Houston","TX","29.83399","-95.434241","-6","1" +"77257","Houston","TX","29.83399","-95.434241","-6","1" +"77258","Houston","TX","29.83399","-95.434241","-6","1" +"77259","Houston","TX","29.83399","-95.434241","-6","1" +"77261","Houston","TX","29.83399","-95.434241","-6","1" +"77262","Houston","TX","29.83399","-95.434241","-6","1" +"77263","Houston","TX","29.83399","-95.434241","-6","1" +"77265","Houston","TX","29.83399","-95.434241","-6","1" +"77266","Houston","TX","29.83399","-95.434241","-6","1" +"77267","Houston","TX","29.83399","-95.434241","-6","1" +"77268","Houston","TX","29.83399","-95.434241","-6","1" +"77269","Houston","TX","29.83399","-95.434241","-6","1" +"77270","Houston","TX","29.83399","-95.434241","-6","1" +"77271","Houston","TX","29.83399","-95.434241","-6","1" +"77272","Houston","TX","29.83399","-95.434241","-6","1" +"77273","Houston","TX","29.83399","-95.434241","-6","1" +"77274","Houston","TX","29.83399","-95.434241","-6","1" +"77275","Houston","TX","29.83399","-95.434241","-6","1" +"77277","Houston","TX","29.83399","-95.434241","-6","1" +"77279","Houston","TX","29.83399","-95.434241","-6","1" +"77280","Houston","TX","29.83399","-95.434241","-6","1" +"77281","Houston","TX","29.83399","-95.434241","-6","1" +"77282","Houston","TX","29.83399","-95.434241","-6","1" +"77284","Houston","TX","29.83399","-95.434241","-6","1" +"77287","Houston","TX","29.83399","-95.434241","-6","1" +"77288","Houston","TX","29.83399","-95.434241","-6","1" +"77289","Houston","TX","29.83399","-95.434241","-6","1" +"77290","Houston","TX","29.83399","-95.434241","-6","1" +"77291","Houston","TX","29.83399","-95.434241","-6","1" +"77292","Houston","TX","29.744341","-95.332598","-6","1" +"77293","Houston","TX","29.83399","-95.434241","-6","1" +"77297","Houston","TX","29.83399","-95.434241","-6","1" +"77298","Houston","TX","29.83399","-95.434241","-6","1" +"77299","Houston","TX","29.83399","-95.434241","-6","1" +"77301","Conroe","TX","30.313308","-95.45085","-6","1" +"77302","Conroe","TX","30.238563","-95.38927","-6","1" +"77303","Conroe","TX","30.368543","-95.40217","-6","1" +"77304","Conroe","TX","30.33146","-95.50703","-6","1" +"77305","Conroe","TX","30.290638","-95.383202","-6","1" +"77306","Conroe","TX","30.289893","-95.32698","-6","1" +"77315","North Houston","TX","29.83399","-95.434241","-6","1" +"77316","Montgomery","TX","30.329017","-95.64985","-6","1" +"77318","Willis","TX","30.434486","-95.55009","-6","1" +"77320","Huntsville","TX","30.805099","-95.50719","-6","1" +"77325","Humble","TX","29.83399","-95.434241","-6","1" +"77326","Ace","TX","30.519883","-94.81869","-6","1" +"77327","Cleveland","TX","30.35469","-95.04514","-6","1" +"77328","Cleveland","TX","30.188885","-94.804065","-6","1" +"77331","Coldspring","TX","30.619313","-95.13802","-6","1" +"77332","Dallardsville","TX","30.817866","-94.869052","-6","1" +"77333","Dobbin","TX","30.353346","-95.77833","-6","1" +"77334","Dodge","TX","30.758511","-95.3688","-6","1" +"77335","Goodrich","TX","30.595651","-94.94597","-6","1" +"77336","Huffman","TX","30.045495","-95.10714","-6","1" +"77337","Hufsmith","TX","29.83399","-95.434241","-6","1" +"77338","Humble","TX","30.005691","-95.28488","-6","1" +"77339","Humble","TX","30.053368","-95.21807","-6","1" +"77340","Huntsville","TX","30.680641","-95.50776","-6","1" +"77341","Huntsville","TX","30.714476","-95.54977","-6","1" +"77342","Huntsville","TX","30.78128","-95.59527","-6","1" +"77343","Huntsville","TX","30.78128","-95.59527","-6","1" +"77344","Huntsville","TX","30.78128","-95.59527","-6","1" +"77345","Humble","TX","30.062436","-95.16945","-6","1" +"77346","Humble","TX","30.001902","-95.16962","-6","1" +"77347","Humble","TX","29.83399","-95.434241","-6","1" +"77348","Huntsville","TX","30.78128","-95.59527","-6","1" +"77349","Huntsville","TX","30.78128","-95.59527","-6","1" +"77350","Leggett","TX","30.856814","-94.856052","-6","1" +"77351","Livingston","TX","30.712538","-94.89915","-6","1" +"77353","Magnolia","TX","30.180626","-95.70925","-6","1" +"77354","Magnolia","TX","30.194267","-95.63918","-6","1" +"77355","Magnolia","TX","30.158706","-95.74464","-6","1" +"77356","Montgomery","TX","30.412229","-95.6529","-6","1" +"77357","New Caney","TX","30.170751","-95.17832","-6","1" +"77358","New Waverly","TX","30.545212","-95.46752","-6","1" +"77359","Oakhurst","TX","30.735628","-95.30405","-6","1" +"77360","Onalaska","TX","30.818886","-95.11108","-6","1" +"77362","Pinehurst","TX","30.152265","-95.67556","-6","1" +"77363","Plantersville","TX","30.281863","-95.85326","-6","1" +"77364","Pointblank","TX","30.756728","-95.20485","-6","1" +"77365","Porter","TX","30.102209","-95.25748","-6","1" +"77367","Riverside","TX","30.848603","-95.39644","-6","1" +"77368","Romayor","TX","30.453845","-94.83674","-6","1" +"77369","Rye","TX","30.480319","-94.75643","-6","1" +"77371","Shepherd","TX","30.488028","-94.99963","-6","1" +"77372","Splendora","TX","30.220237","-95.16723","-6","1" +"77373","Spring","TX","30.056394","-95.38961","-6","1" +"77374","Thicket","TX","30.378705","-94.64906","-6","1" +"77375","Tomball","TX","30.073775","-95.61882","-6","1" +"77376","Votaw","TX","30.437704","-94.68614","-6","1" +"77377","Tomball","TX","29.83399","-95.434241","-6","1" +"77378","Willis","TX","30.439428","-95.44677","-6","1" +"77379","Spring","TX","30.024749","-95.53215","-6","1" +"77380","Spring","TX","30.143485","-95.46821","-6","1" +"77381","Spring","TX","30.17873","-95.5021","-6","1" +"77382","Spring","TX","30.214741","-95.53212","-6","1" +"77383","Spring","TX","29.83399","-95.434241","-6","1" +"77384","Conroe","TX","30.233865","-95.49679","-6","1" +"77385","Conroe","TX","30.18771","-95.43893","-6","1" +"77386","Spring","TX","30.128862","-95.41896","-6","1" +"77387","Spring","TX","30.378446","-95.557004","-6","1" +"77388","Spring","TX","30.055195","-95.46826","-6","1" +"77389","Spring","TX","30.10824","-95.51716","-6","1" +"77391","Spring","TX","29.83399","-95.434241","-6","1" +"77393","Spring","TX","30.329016","-95.463474","-6","1" +"77396","Humble","TX","29.951621","-95.26785","-6","1" +"77399","Livingston","TX","30.817866","-94.869052","-6","1" +"77401","Bellaire","TX","29.70403","-95.46099","-6","1" +"77402","Bellaire","TX","29.83399","-95.434241","-6","1" +"77404","Bay City","TX","28.798156","-95.651058","-6","1" +"77406","Richmond","TX","29.50401","-95.919107","-6","1" +"77410","Cypress","TX","29.83399","-95.434241","-6","1" +"77411","Alief","TX","29.83399","-95.434241","-6","1" +"77412","Altair","TX","29.575183","-96.46831","-6","1" +"77413","Barker","TX","29.83399","-95.434241","-6","1" +"77414","Bay City","TX","28.945269","-95.9357","-6","1" +"77415","Cedar Lane","TX","28.936476","-95.72292","-6","1" +"77417","Beasley","TX","29.483573","-95.93931","-6","1" +"77418","Bellville","TX","29.983095","-96.26843","-6","1" +"77419","Blessing","TX","28.872088","-96.2316","-6","1" +"77420","Boling","TX","29.249812","-95.92241","-6","1" +"77422","Brazoria","TX","29.011241","-95.58071","-6","1" +"77423","Brookshire","TX","29.80038","-95.98452","-6","1" +"77426","Chappell Hill","TX","30.132693","-96.25388","-6","1" +"77428","Collegeport","TX","28.718954","-96.16969","-6","1" +"77429","Cypress","TX","29.982746","-95.66597","-6","1" +"77430","Damon","TX","29.290602","-95.70739","-6","1" +"77431","Danciger","TX","29.173701","-95.820719","-6","1" +"77432","Danevang","TX","29.064542","-96.21454","-6","1" +"77433","Cypress","TX","29.884175","-95.72219","-6","1" +"77434","Eagle Lake","TX","29.575458","-96.32079","-6","1" +"77435","East Bernard","TX","29.520049","-96.08527","-6","1" +"77436","Egypt","TX","29.375762","-96.227967","-6","1" +"77437","El Campo","TX","29.197701","-96.2774","-6","1" +"77439","San Leon","TX","29.487774","-94.951647","-6","1" +"77440","Elmaton","TX","28.887522","-96.14826","-6","1" +"77441","Fulshear","TX","29.685917","-95.91804","-6","1" +"77442","Garwood","TX","29.424483","-96.45923","-6","1" +"77443","Glen Flora","TX","29.346878","-96.19287","-6","1" +"77444","Guy","TX","29.29995","-95.79753","-6","1" +"77445","Hempstead","TX","30.096649","-96.06979","-6","1" +"77446","Prairie View","TX","30.082131","-95.99178","-6","1" +"77447","Hockley","TX","30.065152","-95.8144","-6","1" +"77448","Hungerford","TX","29.401714","-96.07526","-6","1" +"77449","Katy","TX","29.825908","-95.7301","-6","1" +"77450","Katy","TX","29.758799","-95.74751","-6","1" +"77451","Kendleton","TX","29.447947","-96.0007","-6","1" +"77452","Kenney","TX","29.849283","-96.313271","-6","1" +"77453","Lane City","TX","29.170387","-96.014159","-6","1" +"77454","Lissie","TX","29.553544","-96.22224","-6","1" +"77455","Louise","TX","29.095463","-96.40324","-6","1" +"77456","Markham","TX","28.964146","-96.07346","-6","1" +"77457","Matagorda","TX","28.67494","-95.9653","-6","1" +"77458","Midfield","TX","28.939249","-96.2147","-6","1" +"77459","Missouri City","TX","29.564347","-95.54762","-6","1" +"77460","Nada","TX","29.60466","-96.524899","-6","1" +"77461","Needville","TX","29.401461","-95.82334","-6","1" +"77462","Newgulf","TX","29.298532","-96.241147","-6","1" +"77463","Old Ocean","TX","29.135066","-95.78335","-6","1" +"77464","Orchard","TX","29.602015","-95.96882","-6","1" +"77465","Palacios","TX","28.735638","-96.22273","-6","1" +"77466","Pattison","TX","29.818871","-95.99945","-6","1" +"77467","Pierce","TX","29.238931","-96.1716","-6","1" +"77468","Pledger","TX","29.177817","-95.89195","-6","1" +"77469","Richmond","TX","29.584172","-95.747","-6","1" +"77470","Rock Island","TX","29.520292","-96.57348","-6","1" +"77471","Rosenberg","TX","29.549455","-95.81901","-6","1" +"77473","San Felipe","TX","29.799608","-96.10123","-6","1" +"77474","Sealy","TX","29.776375","-96.16474","-6","1" +"77475","Sheridan","TX","29.488245","-96.65185","-6","1" +"77476","Simonton","TX","29.686804","-95.99738","-6","1" +"77477","Stafford","TX","29.626187","-95.57145","-6","1" +"77478","Sugar Land","TX","29.627737","-95.62444","-6","1" +"77479","Sugar Land","TX","29.573345","-95.63213","-6","1" +"77480","Sweeny","TX","29.055954","-95.71344","-6","1" +"77481","Thompsons","TX","29.478032","-95.58329","-6","1" +"77482","Van Vleck","TX","29.035651","-95.89207","-6","1" +"77483","Wadsworth","TX","28.83088","-95.93391","-6","1" +"77484","Waller","TX","30.068888","-95.92499","-6","1" +"77485","Wallis","TX","29.632221","-96.07144","-6","1" +"77486","West Columbia","TX","29.152396","-95.66319","-6","1" +"77487","Sugar Land","TX","29.525461","-95.756462","-6","1" +"77488","Wharton","TX","29.307347","-96.09055","-6","1" +"77489","Missouri City","TX","29.601141","-95.51772","-6","1" +"77491","Katy","TX","29.83399","-95.434241","-6","1" +"77492","Katy","TX","29.83399","-95.434241","-6","1" +"77493","Katy","TX","29.810279","-95.82011","-6","1" +"77494","Katy","TX","29.760833","-95.81104","-6","1" +"77496","Sugar Land","TX","29.525461","-95.756462","-6","1" +"77497","Stafford","TX","29.525461","-95.756462","-6","1" +"77501","Pasadena","TX","29.83399","-95.434241","-6","1" +"77502","Pasadena","TX","29.680079","-95.19966","-6","1" +"77503","Pasadena","TX","29.695028","-95.15798","-6","1" +"77504","Pasadena","TX","29.64878","-95.18813","-6","1" +"77505","Pasadena","TX","29.650492","-95.14632","-6","1" +"77506","Pasadena","TX","29.705678","-95.20216","-6","1" +"77507","Pasadena","TX","29.624686","-95.06111","-6","1" +"77508","Pasadena","TX","29.569927","-95.106637","-6","1" +"77510","Santa Fe","TX","29.371171","-95.08552","-6","1" +"77511","Alvin","TX","29.41148","-95.24475","-6","1" +"77512","Alvin","TX","29.362879","-95.27605","-6","1" +"77514","Anahuac","TX","29.689054","-94.66375","-6","1" +"77515","Angleton","TX","29.16866","-95.44541","-6","1" +"77516","Angleton","TX","29.183991","-95.465083","-6","1" +"77517","Santa Fe","TX","29.382307","-95.12768","-6","1" +"77518","Bacliff","TX","29.504389","-94.98779","-6","1" +"77519","Batson","TX","30.249734","-94.60291","-6","1" +"77520","Baytown","TX","29.74877","-94.94389","-6","1" +"77521","Baytown","TX","29.784579","-94.97588","-6","1" +"77522","Baytown","TX","29.83399","-95.434241","-6","1" +"77530","Channelview","TX","29.786656","-95.12214","-6","1" +"77531","Clute","TX","29.038068","-95.40114","-6","1" +"77532","Crosby","TX","29.920121","-95.07327","-6","1" +"77533","Daisetta","TX","30.112587","-94.64704","-6","1" +"77534","Danbury","TX","29.226396","-95.33797","-6","1" +"77535","Dayton","TX","30.044219","-94.88864","-6","1" +"77536","Deer Park","TX","29.687657","-95.1201","-6","1" +"77537","Dickinson","TX","29.469835","-95.005317","-6","1" +"77538","Devers","TX","29.981421","-94.55067","-6","1" +"77539","Dickinson","TX","29.468772","-95.02689","-6","1" +"77541","Freeport","TX","28.975247","-95.34357","-6","1" +"77542","Freeport","TX","29.183991","-95.465083","-6","1" +"77545","Fresno","TX","29.526728","-95.45984","-6","1" +"77546","Friendswood","TX","29.516873","-95.19472","-6","1" +"77547","Galena Park","TX","29.737178","-95.23906","-6","1" +"77549","Friendswood","TX","29.330501","-94.800238","-6","1" +"77550","Galveston","TX","29.298448","-94.79316","-6","1" +"77551","Galveston","TX","29.279937","-94.82683","-6","1" +"77552","Galveston","TX","29.22051","-94.944391","-6","1" +"77553","Galveston","TX","29.328547","-94.79422","-6","1" +"77554","Galveston","TX","29.221289","-94.94455","-6","1" +"77555","Galveston","TX","29.330501","-94.800238","-6","1" +"77560","Hankamer","TX","29.860106","-94.58468","-6","1" +"77561","Hardin","TX","30.154264","-94.72677","-6","1" +"77562","Highlands","TX","29.81953","-95.05298","-6","1" +"77563","Hitchcock","TX","29.339307","-95.00317","-6","1" +"77564","Hull","TX","30.159698","-94.65504","-6","1" +"77565","Kemah","TX","29.541285","-95.02996","-6","1" +"77566","Lake Jackson","TX","29.036879","-95.44103","-6","1" +"77567","League City","TX","29.545836","-95.041532","-6","1" +"77568","La Marque","TX","29.366684","-94.97392","-6","1" +"77571","La Porte","TX","29.666781","-95.04487","-6","1" +"77572","La Porte","TX","29.83399","-95.434241","-6","1" +"77573","League City","TX","29.502759","-95.08906","-6","1" +"77574","League City","TX","29.511582","-95.058153","-6","1" +"77575","Liberty","TX","30.066734","-94.76595","-6","1" +"77577","Liverpool","TX","29.289673","-95.27709","-6","1" +"77578","Manvel","TX","29.487395","-95.35807","-6","1" +"77580","Mont Belvieu","TX","29.856137","-94.842939","-6","1" +"77581","Pearland","TX","29.56218","-95.26982","-6","1" +"77582","Raywood","TX","30.023932","-94.66678","-6","1" +"77583","Rosharon","TX","29.429256","-95.45332","-6","1" +"77584","Pearland","TX","29.543654","-95.34036","-6","1" +"77585","Saratoga","TX","30.304796","-94.52727","-6","1" +"77586","Seabrook","TX","29.576638","-95.03486","-6","1" +"77587","South Houston","TX","29.66223","-95.23106","-6","1" +"77588","Pearland","TX","29.512687","-95.254188","-6","1" +"77590","Texas City","TX","29.395283","-94.91759","-6","1" +"77591","Texas City","TX","29.389583","-94.99167","-6","1" +"77592","Texas City","TX","29.330501","-94.800238","-6","1" +"77593","League City","TX","29.506921","-95.111987","-6","1" +"77597","Wallisville","TX","29.843158","-94.70376","-6","1" +"77598","Webster","TX","29.539581","-95.13467","-6","1" +"77611","Bridge City","TX","30.026093","-93.84071","-6","1" +"77612","Buna","TX","30.433087","-93.96897","-6","1" +"77613","China","TX","30.043401","-94.35853","-6","1" +"77614","Deweyville","TX","30.293684","-93.74329","-6","1" +"77615","Evadale","TX","30.316847","-94.07395","-6","1" +"77616","Fred","TX","30.564151","-94.2076","-6","1" +"77617","Gilchrist","TX","29.507243","-94.52028","-6","1" +"77619","Groves","TX","29.947563","-93.91857","-6","1" +"77622","Hamshire","TX","29.870794","-94.2896","-6","1" +"77623","High Island","TX","29.571106","-94.4045","-6","1" +"77624","Hillister","TX","30.664543","-94.30391","-6","1" +"77625","Kountze","TX","30.372553","-94.33671","-6","1" +"77626","Mauriceville","TX","30.203996","-93.886646","-6","1" +"77627","Nederland","TX","29.974013","-93.99986","-6","1" +"77629","Nome","TX","30.031927","-94.42374","-6","1" +"77630","Orange","TX","30.089757","-93.77408","-6","1" +"77631","Orange","TX","30.054793","-93.903108","-6","1" +"77632","Orange","TX","30.182584","-93.79964","-6","1" +"77633","Brenham","TX","30.158637","-96.407936","-6","1" +"77639","Orangefield","TX","30.063101","-93.859903","-6","1" +"77640","Port Arthur","TX","29.879796","-93.95575","-6","1" +"77641","Port Arthur","TX","29.847569","-94.129733","-6","1" +"77642","Port Arthur","TX","29.921564","-93.92694","-6","1" +"77643","Port Arthur","TX","29.962144","-93.867932","-6","1" +"77650","Port Bolivar","TX","29.43186","-94.68252","-6","1" +"77651","Port Neches","TX","29.980863","-93.96038","-6","1" +"77655","Sabine Pass","TX","29.732092","-93.90117","-6","1" +"77656","Silsbee","TX","30.390569","-94.18056","-6","1" +"77657","Lumberton","TX","30.240473","-94.20172","-6","1" +"77659","Sour Lake","TX","30.150405","-94.41515","-6","1" +"77660","Spurger","TX","30.635615","-94.1705","-6","1" +"77661","Stowell","TX","29.780948","-94.390045","-6","1" +"77662","Vidor","TX","30.142953","-94.00797","-6","1" +"77663","Village Mills","TX","30.520625","-94.43631","-6","1" +"77664","Warren","TX","30.600866","-94.40604","-6","1" +"77665","Winnie","TX","29.820542","-94.39965","-6","1" +"77670","Vidor","TX","30.054793","-93.903108","-6","1" +"77701","Beaumont","TX","30.074112","-94.10358","-6","1" +"77702","Beaumont","TX","30.085112","-94.12607","-6","1" +"77703","Beaumont","TX","30.112312","-94.11736","-6","1" +"77704","Beaumont","TX","30.12355","-94.153941","-6","1" +"77705","Beaumont","TX","30.009609","-94.11401","-6","1" +"77706","Beaumont","TX","30.092679","-94.16377","-6","1" +"77707","Beaumont","TX","30.065029","-94.18031","-6","1" +"77708","Beaumont","TX","30.141361","-94.16488","-6","1" +"77709","Voth","TX","30.176361","-94.187683","-6","1" +"77710","Beaumont","TX","29.847569","-94.129733","-6","1" +"77713","Beaumont","TX","30.090135","-94.2467","-6","1" +"77720","Beaumont","TX","29.847569","-94.129733","-6","1" +"77725","Beaumont","TX","29.847569","-94.129733","-6","1" +"77726","Beaumont","TX","30.111843","-94.190147","-6","1" +"77735","Tomball","TX","30.095391","-95.628023","-6","1" +"77801","Bryan","TX","30.637348","-96.36015","-6","1" +"77802","Bryan","TX","30.655348","-96.34056","-6","1" +"77803","Bryan","TX","30.678097","-96.37639","-6","1" +"77805","Bryan","TX","30.65212","-96.341012","-6","1" +"77806","Bryan","TX","30.65212","-96.341012","-6","1" +"77807","Bryan","TX","30.68416","-96.46101","-6","1" +"77808","Bryan","TX","30.762815","-96.31744","-6","1" +"77830","Anderson","TX","30.536223","-96.0229","-6","1" +"77831","Bedias","TX","30.74577","-95.91892","-6","1" +"77833","Brenham","TX","30.183651","-96.40258","-6","1" +"77834","Brenham","TX","30.231333","-96.290358","-6","1" +"77835","Burton","TX","30.181677","-96.61373","-6","1" +"77836","Caldwell","TX","30.517099","-96.67247","-6","1" +"77837","Calvert","TX","30.993313","-96.6808","-6","1" +"77838","Chriesman","TX","30.513118","-96.618047","-6","1" +"77839","Clay","TX","30.341403","-96.526669","-6","1" +"77840","College Station","TX","30.614647","-96.32641","-6","1" +"77841","College Station","TX","30.57258","-96.327044","-6","1" +"77842","College Station","TX","30.65212","-96.341012","-6","1" +"77843","College Station","TX","30.65212","-96.341012","-6","1" +"77844","College Station","TX","30.65212","-96.341012","-6","1" +"77845","College Station","TX","30.571905","-96.29882","-6","1" +"77850","Concord","TX","31.313816","-95.993482","-6","1" +"77852","Deanville","TX","30.513118","-96.618047","-6","1" +"77853","Dime Box","TX","30.3555","-96.85437","-6","1" +"77855","Flynn","TX","31.134863","-96.11889","-6","1" +"77856","Franklin","TX","31.049092","-96.44131","-6","1" +"77857","Gause","TX","30.796177","-96.70685","-6","1" +"77859","Hearne","TX","30.876658","-96.60205","-6","1" +"77861","Iola","TX","30.752599","-96.09691","-6","1" +"77862","Kurten","TX","30.65212","-96.341012","-6","1" +"77863","Lyons","TX","30.359245","-96.591535","-6","1" +"77864","Madisonville","TX","30.956147","-95.91606","-6","1" +"77865","Marquez","TX","31.222211","-96.24043","-6","1" +"77866","Millican","TX","30.466986","-96.20408","-6","1" +"77867","Mumford","TX","30.748833","-96.57391","-6","1" +"77868","Navasota","TX","30.374501","-96.07999","-6","1" +"77869","Navasota","TX","30.65212","-96.341012","-6","1" +"77870","New Baden","TX","31.050207","-96.42982","-6","1" +"77871","Normangee","TX","31.058563","-96.15852","-6","1" +"77872","North Zulch","TX","30.892212","-96.10346","-6","1" +"77873","Richards","TX","30.56335","-95.8337","-6","1" +"77874","Waller","TX","30.049881","-95.929015","-6","1" +"77875","Roans Prairie","TX","30.607534","-95.957945","-6","1" +"77876","Shiro","TX","30.647831","-95.83191","-6","1" +"77878","Snook","TX","30.490162","-96.4698","-6","1" +"77879","Somerville","TX","30.368922","-96.52359","-6","1" +"77880","Washington","TX","30.281022","-96.16922","-6","1" +"77881","Wellborn","TX","30.65212","-96.341012","-6","1" +"77882","Wheelock","TX","30.896204","-96.40959","-6","1" +"77889","Sienna Plantation","TX","29.472186","-95.483489","-6","1" +"77901","Victoria","TX","28.806417","-96.99356","-6","1" +"77902","Victoria","TX","28.925513","-97.100624","-6","1" +"77903","Victoria","TX","28.794935","-96.974119","-6","1" +"77904","Victoria","TX","28.873664","-97.00715","-6","1" +"77905","Victoria","TX","28.737085","-97.0146","-6","1" +"77950","Austwell","TX","28.390776","-96.84723","-6","1" +"77951","Bloomington","TX","28.642875","-96.89172","-6","1" +"77954","Cuero","TX","29.09649","-97.28798","-6","1" +"77957","Edna","TX","28.966755","-96.65939","-6","1" +"77960","Fannin","TX","28.694847","-97.24182","-6","1" +"77961","Francitas","TX","28.861398","-96.34404","-6","1" +"77962","Ganado","TX","29.02864","-96.50513","-6","1" +"77963","Goliad","TX","28.685027","-97.40221","-6","1" +"77964","Hallettsville","TX","29.369619","-96.86644","-6","1" +"77965","Hallettsville","TX","29.444297","-96.952091","-6","1" +"77967","Hochheim","TX","29.098894","-97.365742","-6","1" +"77968","Inez","TX","28.888476","-96.82316","-6","1" +"77969","La Salle","TX","28.77203","-96.63732","-6","1" +"77970","La Ward","TX","28.865213","-96.4397","-6","1" +"77971","Lolita","TX","28.853152","-96.52727","-6","1" +"77972","Long Mott","TX","28.525453","-96.694818","-6","1" +"77973","Mcfaddin","TX","28.532052","-96.9902","-6","1" +"77974","Meyersville","TX","28.897693","-97.29589","-6","1" +"77975","Moulton","TX","29.57449","-97.12675","-6","1" +"77976","Nursery","TX","28.954273","-97.090604","-6","1" +"77977","Placedo","TX","28.691718","-96.82657","-6","1" +"77978","Point Comfort","TX","28.672399","-96.55725","-6","1" +"77979","Port Lavaca","TX","28.604717","-96.63023","-6","1" +"77982","Port O Connor","TX","28.430193","-96.4417","-6","1" +"77983","Seadrift","TX","28.405373","-96.70325","-6","1" +"77984","Shiner","TX","29.442934","-97.18691","-6","1" +"77985","Speaks","TX","29.347975","-96.900331","-6","1" +"77986","Sublime","TX","29.487564","-96.794605","-6","1" +"77987","Sweet Home","TX","29.347975","-96.900331","-6","1" +"77988","Telferner","TX","28.846861","-96.88966","-6","1" +"77989","Thomaston","TX","28.997449","-97.153868","-6","1" +"77990","Tivoli","TX","28.459757","-96.88598","-6","1" +"77991","Vanderbilt","TX","28.82037","-96.61273","-6","1" +"77993","Weesatche","TX","28.835825","-97.444155","-6","1" +"77994","Westhoff","TX","29.195217","-97.47799","-6","1" +"77995","Yoakum","TX","29.254632","-97.13046","-6","1" +"77999","Texas City","TX","29.495537","-94.961797","-6","1" +"78001","Artesia Wells","TX","28.265415","-99.2821","-6","1" +"78002","Atascosa","TX","29.288108","-98.72878","-6","1" +"78003","Bandera","TX","29.718152","-99.06605","-6","1" +"78004","Bergheim","TX","29.903508","-98.55789","-6","1" +"78005","Bigfoot","TX","28.976757","-98.84426","-6","1" +"78006","Boerne","TX","29.851666","-98.72932","-6","1" +"78007","Calliham","TX","28.453052","-98.37384","-6","1" +"78008","Campbellton","TX","28.759107","-98.2173","-6","1" +"78009","Castroville","TX","29.356455","-98.88062","-6","1" +"78010","Center Point","TX","29.944906","-99.0559","-6","1" +"78011","Charlotte","TX","28.795637","-98.71951","-6","1" +"78012","Christine","TX","28.790841","-98.496","-6","1" +"78013","Comfort","TX","29.972473","-98.91084","-6","1" +"78014","Cotulla","TX","28.43544","-99.21676","-6","1" +"78015","Boerne","TX","29.743603","-98.64854","-6","1" +"78016","Devine","TX","29.158899","-98.933","-6","1" +"78017","Dilley","TX","28.728991","-99.23388","-6","1" +"78019","Encinal","TX","28.062471","-99.4289","-6","1" +"78021","Fowlerton","TX","28.52856","-98.80845","-6","1" +"78022","George West","TX","28.260148","-98.14978","-6","1" +"78023","Helotes","TX","29.61403","-98.74185","-6","1" +"78024","Hunt","TX","30.055926","-99.42213","-6","1" +"78025","Ingram","TX","30.102854","-99.27685","-6","1" +"78026","Jourdanton","TX","28.85458","-98.5528","-6","1" +"78027","Kendalia","TX","30.002501","-98.57124","-6","1" +"78028","Kerrville","TX","30.042529","-99.15152","-6","1" +"78029","Kerrville","TX","30.033226","-99.140974","-6","1" +"78039","La Coste","TX","29.312661","-98.81591","-6","1" +"78040","Laredo","TX","27.514845","-99.49991","-6","1" +"78041","Laredo","TX","27.542244","-99.49233","-6","1" +"78042","Laredo","TX","27.565464","-99.476792","-6","1" +"78043","Laredo","TX","27.538658","-99.38274","-6","1" +"78044","Laredo","TX","27.363738","-99.481919","-6","1" +"78045","Laredo","TX","27.648832","-99.53371","-6","1" +"78046","Laredo","TX","27.435814","-99.45996","-6","1" +"78047","Laredo","TX","27.564249","-99.471719","-6","1" +"78049","Laredo","TX","27.732094","-99.505138","-6","1" +"78050","Leming","TX","29.072689","-98.48916","-6","1" +"78052","Lytle","TX","29.227628","-98.79895","-6","1" +"78053","McCoy","TX","28.906103","-98.2802","-6","1" +"78054","Macdona","TX","29.325602","-98.732187","-6","1" +"78055","Medina","TX","29.833279","-99.32589","-6","1" +"78056","Mico","TX","29.54825","-98.90353","-6","1" +"78057","Moore","TX","29.047934","-99.0416","-6","1" +"78058","Mountain Home","TX","30.070414","-99.69191","-6","1" +"78059","Natalia","TX","29.19085","-98.84676","-6","1" +"78060","Oakville","TX","28.421814","-98.071902","-6","1" +"78061","Pearsall","TX","28.888468","-99.09005","-6","1" +"78062","Peggy","TX","28.919999","-98.552942","-6","1" +"78063","Pipe Creek","TX","29.641551","-98.93407","-6","1" +"78064","Pleasanton","TX","28.958803","-98.4639","-6","1" +"78065","Poteet","TX","29.057172","-98.58398","-6","1" +"78066","Rio Medina","TX","29.466279","-98.89162","-6","1" +"78067","San Ygnacio","TX","27.198571","-99.36781","-6","1" +"78069","Somerset","TX","29.200169","-98.67235","-6","1" +"78070","Spring Branch","TX","29.898176","-98.40135","-6","1" +"78071","Three Rivers","TX","28.492487","-98.1764","-6","1" +"78072","Tilden","TX","28.314027","-98.49899","-6","1" +"78073","Von Ormy","TX","29.227135","-98.60919","-6","1" +"78074","Waring","TX","29.950969","-98.79093","-6","1" +"78075","Whitsett","TX","28.633209","-98.27924","-6","1" +"78076","Zapata","TX","26.9052","-99.21863","-6","1" +"78081","Judsonia","AR","29.542778","-98.20799","-6","1" +"78093","Laredo","TX","27.492996","-99.463668","-6","1" +"78101","Adkins","TX","29.326804","-98.21887","-6","1" +"78102","Beeville","TX","28.426202","-97.74806","-6","1" +"78104","Beeville","TX","28.393116","-97.776017","-6","1" +"78107","Berclair","TX","28.53232","-97.5888","-6","1" +"78108","Cibolo","TX","29.574127","-98.23308","-6","1" +"78109","Converse","TX","29.50198","-98.30582","-6","1" +"78111","Ecleto","TX","28.944864","-97.882815","-6","1" +"78112","Elmendorf","TX","29.221682","-98.36902","-6","1" +"78113","Falls City","TX","28.972553","-98.06964","-6","1" +"78114","Floresville","TX","29.150937","-98.17929","-6","1" +"78115","Geronimo","TX","29.54508","-98.040833","-6","1" +"78116","Gillett","TX","29.112202","-97.78275","-6","1" +"78117","Hobson","TX","28.956196","-97.95012","-6","1" +"78118","Karnes City","TX","28.894382","-97.90102","-6","1" +"78119","Kenedy","TX","28.779344","-97.85626","-6","1" +"78121","La Vernia","TX","29.351202","-98.11528","-6","1" +"78122","Leesville","TX","29.425729","-97.7365","-6","1" +"78123","McQueeney","TX","29.598103","-98.04346","-6","1" +"78124","Marion","TX","29.570379","-98.14606","-6","1" +"78125","Mineral","TX","28.535247","-97.93937","-6","1" +"78126","San Antonio","TX","29.55302","-98.486871","-6","1" +"78130","New Braunfels","TX","29.699844","-98.10754","-6","1" +"78131","New Braunfels","TX","29.79918","-98.338419","-6","1" +"78132","New Braunfels","TX","29.749204","-98.17653","-6","1" +"78133","Canyon Lake","TX","29.883884","-98.25219","-6","1" +"78134","New Braunfels","TX","29.687579","-98.120104","-6","1" +"78135","New Braunfels","TX","29.738502","-98.087157","-6","1" +"78136","McQueeney","TX","29.619401","-98.060419","-6","1" +"78140","Nixon","TX","29.292655","-97.76167","-6","1" +"78141","Nordheim","TX","28.919157","-97.61607","-6","1" +"78142","Normanna","TX","28.52604","-97.78256","-6","1" +"78143","Pandora","TX","29.248705","-97.84412","-6","1" +"78144","Panna Maria","TX","28.954252","-97.89674","-6","1" +"78145","Pawnee","TX","28.650728","-98.00056","-6","1" +"78146","Pettus","TX","28.615464","-97.81591","-6","1" +"78147","Poth","TX","29.072412","-98.07786","-6","1" +"78148","Universal City","TX","29.550223","-98.29936","-6","1" +"78150","Universal City","TX","29.437532","-98.461582","-6","1" +"78151","Runge","TX","28.878902","-97.71427","-6","1" +"78152","Saint Hedwig","TX","29.432262","-98.20151","-6","1" +"78154","Schertz","TX","29.577359","-98.2787","-6","1" +"78155","Seguin","TX","29.56478","-97.96283","-6","1" +"78156","Seguin","TX","29.611797","-97.971208","-6","1" +"78159","Smiley","TX","29.269305","-97.60044","-6","1" +"78160","Stockdale","TX","29.237074","-97.95439","-6","1" +"78161","Sutherland Springs","TX","29.273819","-98.05424","-6","1" +"78162","Tuleta","TX","28.424535","-97.732736","-6","1" +"78163","Bulverde","TX","29.758619","-98.44199","-6","1" +"78164","Yorktown","TX","28.988817","-97.51773","-6","1" +"78201","San Antonio","TX","29.466781","-98.52519","-6","1" +"78202","San Antonio","TX","29.428132","-98.46279","-6","1" +"78203","San Antonio","TX","29.414983","-98.46239","-6","1" +"78204","San Antonio","TX","29.403583","-98.5063","-6","1" +"78205","San Antonio","TX","29.425932","-98.48931","-6","1" +"78206","San Antonio","TX","29.437532","-98.461582","-6","1" +"78207","San Antonio","TX","29.423932","-98.5235","-6","1" +"78208","San Antonio","TX","29.439832","-98.45879","-6","1" +"78209","San Antonio","TX","29.48618","-98.4568","-6","1" +"78210","San Antonio","TX","29.397934","-98.46669","-6","1" +"78211","San Antonio","TX","29.362185","-98.54644","-6","1" +"78212","San Antonio","TX","29.460381","-98.49649","-6","1" +"78213","San Antonio","TX","29.510562","-98.52203","-6","1" +"78214","San Antonio","TX","29.363335","-98.49049","-6","1" +"78215","San Antonio","TX","29.438032","-98.48114","-6","1" +"78216","San Antonio","TX","29.528515","-98.49219","-6","1" +"78217","San Antonio","TX","29.543865","-98.41755","-6","1" +"78218","San Antonio","TX","29.49428","-98.40431","-6","1" +"78219","San Antonio","TX","29.448379","-98.39908","-6","1" +"78220","San Antonio","TX","29.411583","-98.41833","-6","1" +"78221","San Antonio","TX","29.326586","-98.50217","-6","1" +"78222","San Antonio","TX","29.379902","-98.38926","-6","1" +"78223","San Antonio","TX","29.352352","-98.43215","-6","1" +"78224","San Antonio","TX","29.333436","-98.53934","-6","1" +"78225","San Antonio","TX","29.387734","-98.52492","-6","1" +"78226","San Antonio","TX","29.392167","-98.55468","-6","1" +"78227","San Antonio","TX","29.405424","-98.63832","-6","1" +"78228","San Antonio","TX","29.457281","-98.5665","-6","1" +"78229","San Antonio","TX","29.499454","-98.57166","-6","1" +"78230","San Antonio","TX","29.539562","-98.55253","-6","1" +"78231","San Antonio","TX","29.574677","-98.53946","-6","1" +"78232","San Antonio","TX","29.584698","-98.46987","-6","1" +"78233","San Antonio","TX","29.552128","-98.36775","-6","1" +"78234","San Antonio","TX","29.457389","-98.45537","-6","1" +"78235","San Antonio","TX","29.33906","-98.42793","-6","1" +"78236","San Antonio","TX","29.389767","-98.61251","-6","1" +"78237","San Antonio","TX","29.422583","-98.56584","-6","1" +"78238","San Antonio","TX","29.479874","-98.61509","-6","1" +"78239","San Antonio","TX","29.51613","-98.36161","-6","1" +"78240","San Antonio","TX","29.518413","-98.60869","-6","1" +"78241","San Antonio","TX","29.437532","-98.461582","-6","1" +"78242","San Antonio","TX","29.353735","-98.61423","-6","1" +"78243","San Antonio","TX","29.437532","-98.461582","-6","1" +"78244","San Antonio","TX","29.475598","-98.35434","-6","1" +"78245","San Antonio","TX","29.412338","-98.70484","-6","1" +"78246","San Antonio","TX","29.437532","-98.461582","-6","1" +"78247","San Antonio","TX","29.581304","-98.40889","-6","1" +"78248","San Antonio","TX","29.589826","-98.52524","-6","1" +"78249","San Antonio","TX","29.569934","-98.61282","-6","1" +"78250","San Antonio","TX","29.510204","-98.66784","-6","1" +"78251","San Antonio","TX","29.466061","-98.67004","-6","1" +"78252","San Antonio","TX","29.335577","-98.70173","-6","1" +"78253","San Antonio","TX","29.461353","-98.75976","-6","1" +"78254","San Antonio","TX","29.523294","-98.74504","-6","1" +"78255","San Antonio","TX","29.665822","-98.66812","-6","1" +"78256","San Antonio","TX","29.623533","-98.62493","-6","1" +"78257","San Antonio","TX","29.646618","-98.6099","-6","1" +"78258","San Antonio","TX","29.649797","-98.50406","-6","1" +"78259","San Antonio","TX","29.627332","-98.42781","-6","1" +"78260","San Antonio","TX","29.707273","-98.47969","-6","1" +"78261","San Antonio","TX","29.698045","-98.42624","-6","1" +"78262","San Antonio","TX","29.449332","-98.290394","-6","1" +"78263","San Antonio","TX","29.358153","-98.31978","-6","1" +"78264","San Antonio","TX","29.193828","-98.51795","-6","1" +"78265","San Antonio","TX","29.437532","-98.461582","-6","1" +"78266","San Antonio","TX","29.641132","-98.30856","-6","1" +"78268","San Antonio","TX","29.437532","-98.461582","-6","1" +"78269","San Antonio","TX","29.437532","-98.461582","-6","1" +"78270","San Antonio","TX","29.437532","-98.461582","-6","1" +"78275","San Antonio","TX","29.437532","-98.461582","-6","1" +"78278","San Antonio","TX","29.437532","-98.461582","-6","1" +"78279","San Antonio","TX","29.437532","-98.461582","-6","1" +"78280","San Antonio","TX","29.437532","-98.461582","-6","1" +"78283","San Antonio","TX","29.437532","-98.461582","-6","1" +"78284","San Antonio","TX","29.442632","-98.491344","-6","1" +"78285","San Antonio","TX","29.437532","-98.461582","-6","1" +"78286","San Antonio","TX","29.437532","-98.461582","-6","1" +"78287","San Antonio","TX","29.437532","-98.461582","-6","1" +"78288","San Antonio","TX","29.437532","-98.461582","-6","1" +"78289","San Antonio","TX","29.437532","-98.461582","-6","1" +"78291","San Antonio","TX","29.437532","-98.461582","-6","1" +"78292","San Antonio","TX","29.437532","-98.461582","-6","1" +"78293","San Antonio","TX","29.437532","-98.461582","-6","1" +"78294","San Antonio","TX","29.437532","-98.461582","-6","1" +"78295","San Antonio","TX","29.437532","-98.461582","-6","1" +"78296","San Antonio","TX","29.437532","-98.461582","-6","1" +"78297","San Antonio","TX","29.437532","-98.461582","-6","1" +"78298","San Antonio","TX","29.437532","-98.461582","-6","1" +"78299","San Antonio","TX","29.437532","-98.461582","-6","1" +"78301","McAllen","TX","26.200001","-98.231166","-6","1" +"78330","Agua Dulce","TX","27.782267","-97.90134","-6","1" +"78331","Alice","TX","27.750684","-98.082694","-6","1" +"78332","Alice","TX","27.737965","-98.09302","-6","1" +"78333","Alice","TX","27.659473","-98.012331","-6","1" +"78335","Aransas Pass","TX","27.912454","-97.188437","-6","1" +"78336","Aransas Pass","TX","27.915764","-97.15436","-6","1" +"78337","Rancho Alegre","TX","27.738511","-98.098534","-6","1" +"78338","Armstrong","TX","26.870238","-97.77433","-6","1" +"78339","Banquete","TX","27.807025","-97.79801","-6","1" +"78340","Bayside","TX","28.103283","-97.20757","-6","1" +"78341","Benavides","TX","27.592468","-98.414188","-6","1" +"78342","Ben Bolt","TX","27.659473","-98.012331","-6","1" +"78343","Bishop","TX","27.60549","-97.78572","-6","1" +"78344","Bruni","TX","27.43254","-98.81271","-6","1" +"78347","Chapman Ranch","TX","27.593816","-97.46214","-6","1" +"78349","Concepcion","TX","27.316167","-98.29797","-6","1" +"78350","Dinero","TX","28.421814","-98.071902","-6","1" +"78351","Driscoll","TX","27.672549","-97.75105","-6","1" +"78352","Edroy","TX","27.973465","-97.68169","-6","1" +"78353","Encino","TX","26.894094","-98.21561","-6","1" +"78355","Falfurrias","TX","27.217893","-98.16479","-6","1" +"78357","Freer","TX","27.939823","-98.57624","-6","1" +"78358","Fulton","TX","28.065865","-97.04066","-6","1" +"78359","Gregory","TX","27.920604","-97.29248","-6","1" +"78360","Guerra","TX","27.071318","-98.686327","-6","1" +"78361","Hebbronville","TX","27.17199","-98.73083","-6","1" +"78362","Ingleside","TX","27.866143","-97.20712","-6","1" +"78363","Kingsville","TX","27.496472","-97.86808","-6","1" +"78364","Kingsville","TX","27.342872","-97.70355","-6","1" +"78368","Mathis","TX","28.101323","-97.82968","-6","1" +"78369","Mirando City","TX","27.44333","-98.99944","-6","1" +"78370","Odem","TX","27.955312","-97.59288","-6","1" +"78371","Oilton","TX","27.467237","-98.97431","-6","1" +"78372","Orange Grove","TX","27.963592","-98.07031","-6","1" +"78373","Port Aransas","TX","27.818477","-97.07998","-6","1" +"78374","Portland","TX","27.884565","-97.32054","-6","1" +"78375","Premont","TX","27.368433","-98.12184","-6","1" +"78376","Realitos","TX","27.363706","-98.56442","-6","1" +"78377","Refugio","TX","28.327234","-97.24787","-6","1" +"78379","Riviera","TX","27.299073","-97.78433","-6","1" +"78380","Robstown","TX","27.782255","-97.68609","-6","1" +"78381","Rockport","TX","28.013108","-97.09364","-6","1" +"78382","Rockport","TX","28.047744","-97.04818","-6","1" +"78383","Sandia","TX","28.066598","-97.92891","-6","1" +"78384","San Diego","TX","27.683506","-98.38142","-6","1" +"78385","Sarita","TX","27.17914","-97.82511","-6","1" +"78387","Sinton","TX","28.054995","-97.5133","-6","1" +"78389","Skidmore","TX","28.237359","-97.69331","-6","1" +"78390","Taft","TX","27.977641","-97.37032","-6","1" +"78391","Tynan","TX","28.169309","-97.75404","-6","1" +"78393","Woodsboro","TX","28.206223","-97.30778","-6","1" +"78401","Corpus Christi","TX","27.795805","-97.40019","-6","1" +"78402","Corpus Christi","TX","27.829732","-97.4016","-6","1" +"78403","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78404","Corpus Christi","TX","27.770056","-97.4001","-6","1" +"78405","Corpus Christi","TX","27.777922","-97.42695","-6","1" +"78406","Corpus Christi","TX","27.776304","-97.51253","-6","1" +"78407","Corpus Christi","TX","27.802404","-97.42599","-6","1" +"78408","Corpus Christi","TX","27.796171","-97.43796","-6","1" +"78409","Corpus Christi","TX","27.806753","-97.50971","-6","1" +"78410","Corpus Christi","TX","27.846568","-97.59435","-6","1" +"78411","Corpus Christi","TX","27.733058","-97.38542","-6","1" +"78412","Corpus Christi","TX","27.709309","-97.35225","-6","1" +"78413","Corpus Christi","TX","27.687792","-97.40165","-6","1" +"78414","Corpus Christi","TX","27.672334","-97.37051","-6","1" +"78415","Corpus Christi","TX","27.727083","-97.4289","-6","1" +"78416","Corpus Christi","TX","27.752356","-97.43465","-6","1" +"78417","Corpus Christi","TX","27.729855","-97.44503","-6","1" +"78418","Corpus Christi","TX","27.633433","-97.26792","-6","1" +"78419","Corpus Christi","TX","27.723611","-97.380884","-6","1" +"78426","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78427","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78460","Corpus Christi","TX","27.889868","-97.879743","-6","1" +"78461","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78463","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78465","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78466","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78467","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78468","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78469","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78470","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78471","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78472","Corpus Christi","TX","27.740225","-97.579207","-6","1" +"78473","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78474","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78475","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78476","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78477","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78478","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78480","Corpus Christi","TX","27.777","-97.463213","-6","1" +"78501","Mcallen","TX","26.213105","-98.23579","-6","1" +"78502","Mcallen","TX","26.25671","-98.198929","-6","1" +"78503","Mcallen","TX","26.172018","-98.25042","-6","1" +"78504","Mcallen","TX","26.26273","-98.23082","-6","1" +"78505","Mcallen","TX","26.409709","-98.224206","-6","1" +"78512","Mission","TX","26.232613","-98.348534","-6","1" +"78516","Alamo","TX","26.175021","-98.11969","-6","1" +"78520","Brownsville","TX","25.928274","-97.51618","-6","1" +"78521","Brownsville","TX","25.918758","-97.42739","-6","1" +"78522","Brownsville","TX","26.188911","-97.764271","-6","1" +"78523","Brownsville","TX","25.981006","-97.520941","-6","1" +"78526","Brownsville","TX","25.969007","-97.47211","-6","1" +"78535","Combes","TX","26.245051","-97.74157","-6","1" +"78536","Delmita","TX","26.421394","-98.848757","-6","1" +"78537","Donna","TX","26.165352","-98.05568","-6","1" +"78538","Edcouch","TX","26.344688","-97.96961","-6","1" +"78539","Edinburg","TX","26.344128","-98.18011","-6","1" +"78540","Edinburg","TX","26.319405","-98.190922","-6","1" +"78541","Edinburg","TX","26.319427","-98.154881","-6","1" +"78543","Elsa","TX","26.298611","-97.99464","-6","1" +"78545","Falcon Heights","TX","26.561861","-99.13392","-6","1" +"78547","Garciasville","TX","26.321652","-98.69525","-6","1" +"78548","Grulla","TX","26.270824","-98.64891","-6","1" +"78549","Hargill","TX","26.44489","-98.01478","-6","1" +"78550","Harlingen","TX","26.206602","-97.68776","-6","1" +"78551","Harlingen","TX","26.244651","-97.720569","-6","1" +"78552","Harlingen","TX","26.195591","-97.75321","-6","1" +"78553","Harlingen","TX","26.125242","-97.475663","-6","1" +"78555","McAllen","TX","26.250709","-97.711367","-6","1" +"78557","Hidalgo","TX","26.105725","-98.24639","-6","1" +"78558","La Blanca","TX","26.305113","-98.03375","-6","1" +"78559","La Feria","TX","26.149453","-97.82923","-6","1" +"78560","La Joya","TX","26.244317","-98.49574","-6","1" +"78561","Lasara","TX","26.561287","-97.429952","-6","1" +"78562","La Villa","TX","26.301385","-97.92547","-6","1" +"78563","Linn","TX","26.633158","-98.21578","-6","1" +"78564","Lopeno","TX","26.945418","-99.203985","-6","1" +"78565","Los Ebanos","TX","26.247488","-98.55962","-6","1" +"78566","Los Fresnos","TX","26.099562","-97.43927","-6","1" +"78567","Los Indios","TX","26.041669","-97.693736","-6","1" +"78568","Lozano","TX","26.190402","-97.542263","-6","1" +"78569","Lyford","TX","26.39381","-97.7113","-6","1" +"78570","Mercedes","TX","26.169728","-97.91232","-6","1" +"78571","Salado","TX","30.916863","-97.485039","-6","1" +"78572","Mission","TX","26.234417","-98.34205","-6","1" +"78573","Mission","TX","26.409709","-98.224206","-6","1" +"78574","Sebastian","TX","26.244013","-98.31176","-6","1" +"78575","Olmito","TX","26.023905","-97.54457","-6","1" +"78576","Penitas","TX","26.24901","-98.45014","-6","1" +"78577","Pharr","TX","26.201284","-98.18619","-6","1" +"78578","Port Isabel","TX","26.080434","-97.25024","-6","1" +"78579","Progreso","TX","26.087777","-97.9719","-6","1" +"78580","Raymondville","TX","26.500175","-97.81013","-6","1" +"78582","Rio Grande City","TX","26.445982","-98.69332","-6","1" +"78583","Rio Hondo","TX","26.259032","-97.52948","-6","1" +"78584","Roma","TX","26.493058","-99.00718","-6","1" +"78585","Salineno","TX","26.510436","-98.746365","-6","1" +"78586","San Benito","TX","26.111261","-97.63519","-6","1" +"78587","La Victoria","TX","26.316452","-98.639793","-6","1" +"78588","San Isidro","TX","26.720155","-98.46845","-6","1" +"78589","San Juan","TX","26.190444","-98.15301","-6","1" +"78590","San Perlita","TX","26.455519","-97.585805","-6","1" +"78591","Santa Elena","TX","26.749896","-98.583016","-6","1" +"78592","Santa Maria","TX","26.078355","-97.84169","-6","1" +"78593","Santa Rosa","TX","26.27109","-97.82904","-6","1" +"78594","Sebastian","TX","26.344765","-97.80031","-6","1" +"78595","Sullivan City","TX","26.272363","-98.5587","-6","1" +"78596","Weslaco","TX","26.162609","-97.98512","-6","1" +"78597","South Padre Island","TX","26.117636","-97.17019","-6","1" +"78598","Port Mansfield","TX","26.558995","-97.42738","-6","1" +"78599","Weslaco","TX","26.409709","-98.224206","-6","1" +"78602","Bastrop","TX","30.120443","-97.30991","-6","1" +"78603","Bebe","TX","29.447211","-97.494649","-6","1" +"78604","Belmont","TX","29.447211","-97.494649","-6","1" +"78605","Bertram","TX","30.760216","-98.03579","-6","1" +"78606","Blanco","TX","30.096855","-98.43411","-6","1" +"78607","Bluffton","TX","30.833543","-98.47938","-6","1" +"78608","Briggs","TX","30.9306","-97.90929","-6","1" +"78609","Buchanan Dam","TX","30.744225","-98.43167","-6","1" +"78610","Buda","TX","30.07703","-97.8178","-6","1" +"78611","Burnet","TX","30.767327","-98.30109","-6","1" +"78612","Cedar Creek","TX","30.130116","-97.49055","-6","1" +"78613","Cedar Park","TX","30.501272","-97.83087","-6","1" +"78614","Cost","TX","29.406434","-97.5869","-6","1" +"78615","Coupland","TX","30.460373","-97.3935","-6","1" +"78616","Dale","TX","29.928764","-97.56317","-6","1" +"78617","Del Valle","TX","30.166225","-97.62496","-6","1" +"78618","Doss","TX","30.486818","-99.17526","-6","1" +"78619","Driftwood","TX","30.103644","-98.03875","-6","1" +"78620","Dripping Springs","TX","30.24108","-98.10753","-6","1" +"78621","Elgin","TX","30.338279","-97.36611","-6","1" +"78622","Fentress","TX","29.760052","-97.77727","-6","1" +"78623","Fischer","TX","29.960139","-98.21846","-6","1" +"78624","Fredericksburg","TX","30.279267","-98.88389","-6","1" +"78626","Georgetown","TX","30.643058","-97.64713","-6","1" +"78627","Georgetown","TX","30.673597","-97.646143","-6","1" +"78628","Georgetown","TX","30.674349","-97.72338","-6","1" +"78629","Gonzales","TX","29.510439","-97.45352","-6","1" +"78630","Cedar Park","TX","30.656817","-97.602552","-6","1" +"78631","Harper","TX","30.334152","-99.2956","-6","1" +"78632","Harwood","TX","29.698718","-97.45739","-6","1" +"78634","Hutto","TX","30.540874","-97.54611","-6","1" +"78635","Hye","TX","30.217838","-98.53788","-6","1" +"78636","Johnson City","TX","30.286655","-98.39837","-6","1" +"78638","Kingsbury","TX","29.655639","-97.77219","-6","1" +"78639","Kingsland","TX","30.663209","-98.44588","-6","1" +"78640","Kyle","TX","29.996916","-97.84756","-6","1" +"78641","Leander","TX","30.547001","-97.87006","-6","1" +"78642","Liberty Hill","TX","30.702882","-97.9269","-6","1" +"78643","Llano","TX","30.721302","-98.66557","-6","1" +"78644","Lockhart","TX","29.872165","-97.68093","-6","1" +"78645","Leander","TX","30.453776","-97.97507","-6","1" +"78646","Leander","TX","30.656817","-97.602552","-6","1" +"78648","Luling","TX","29.694257","-97.6533","-6","1" +"78650","McDade","TX","30.283941","-97.23563","-6","1" +"78651","McNeil","TX","30.326374","-97.771258","-6","1" +"78652","Manchaca","TX","30.12848","-97.8438","-6","1" +"78653","Manor","TX","30.351225","-97.54731","-6","1" +"78654","Marble Falls","TX","30.566681","-98.30756","-6","1" +"78655","Martindale","TX","29.838163","-97.84178","-6","1" +"78656","Maxwell","TX","29.887939","-97.83613","-6","1" +"78657","Marble Falls","TX","30.538867","-98.36511","-6","1" +"78658","Ottine","TX","29.592212","-97.58922","-6","1" +"78659","Paige","TX","30.210685","-97.11662","-6","1" +"78660","Pflugerville","TX","30.450122","-97.623","-6","1" +"78661","Prairie Lea","TX","29.72057","-97.73519","-6","1" +"78662","Red Rock","TX","29.950887","-97.42728","-6","1" +"78663","Round Mountain","TX","30.44858","-98.38421","-6","1" +"78664","Round Rock","TX","30.514401","-97.65549","-6","1" +"78665","Sandy","TX","30.219829","-98.358613","-6","1" +"78666","San Marcos","TX","29.876944","-97.94668","-6","1" +"78667","San Marcos","TX","30.054378","-98.003574","-6","1" +"78669","Spicewood","TX","30.427733","-98.08062","-6","1" +"78670","Staples","TX","29.777564","-97.81966","-6","1" +"78671","Stonewall","TX","30.230188","-98.62152","-6","1" +"78672","Tow","TX","30.864936","-98.45361","-6","1" +"78673","Walburg","TX","30.741495","-97.589147","-6","1" +"78674","Weir","TX","30.674667","-97.59286","-6","1" +"78675","Willow City","TX","30.460464","-98.71911","-6","1" +"78676","Wimberley","TX","30.022492","-98.13294","-6","1" +"78677","Wrightsboro","TX","29.447211","-97.494649","-6","1" +"78680","Round Rock","TX","30.656817","-97.602552","-6","1" +"78681","Round Rock","TX","30.518975","-97.71439","-6","1" +"78682","Round Rock","TX","30.656817","-97.602552","-6","1" +"78683","Round Rock","TX","30.656817","-97.602552","-6","1" +"78691","Pflugerville","TX","30.326374","-97.771258","-6","1" +"78701","Austin","TX","30.27127","-97.74103","-6","1" +"78702","Austin","TX","30.265158","-97.71879","-6","1" +"78703","Austin","TX","30.290907","-97.76277","-6","1" +"78704","Austin","TX","30.246309","-97.76087","-6","1" +"78705","Austin","TX","30.292424","-97.73856","-6","1" +"78708","Austin","TX","30.326374","-97.771258","-6","1" +"78709","Austin","TX","30.326374","-97.771258","-6","1" +"78710","Austin","TX","30.351953","-97.715123","-6","1" +"78711","Austin","TX","30.326374","-97.771258","-6","1" +"78712","Austin","TX","30.285207","-97.735394","-6","1" +"78713","Austin","TX","30.468583","-97.843336","-6","1" +"78714","Austin","TX","30.335787","-97.443751","-6","1" +"78715","Austin","TX","30.450088","-97.486509","-6","1" +"78716","Austin","TX","30.316223","-97.85877","-6","1" +"78717","Austin","TX","30.494623","-97.75687","-6","1" +"78718","Austin","TX","30.326374","-97.771258","-6","1" +"78719","Austin","TX","30.163458","-97.67711","-6","1" +"78720","Austin","TX","30.326374","-97.771258","-6","1" +"78721","Austin","TX","30.272926","-97.68665","-6","1" +"78722","Austin","TX","30.289307","-97.71659","-6","1" +"78723","Austin","TX","30.306507","-97.68651","-6","1" +"78724","Austin","TX","30.294148","-97.62863","-6","1" +"78725","Austin","TX","30.231583","-97.60992","-6","1" +"78726","Austin","TX","30.439053","-97.83503","-6","1" +"78727","Austin","TX","30.425652","-97.71419","-6","1" +"78728","Austin","TX","30.451803","-97.67989","-6","1" +"78729","Austin","TX","30.451348","-97.76588","-6","1" +"78730","Austin","TX","30.359935","-97.83125","-6","1" +"78731","Austin","TX","30.344305","-97.7638","-6","1" +"78732","Austin","TX","30.382724","-97.89459","-6","1" +"78733","Austin","TX","30.329704","-97.8751","-6","1" +"78734","Austin","TX","30.378675","-97.95028","-6","1" +"78735","Austin","TX","30.250761","-97.84469","-6","1" +"78736","Austin","TX","30.245558","-97.94177","-6","1" +"78737","Austin","TX","30.19025","-97.95854","-6","1" +"78738","Austin","TX","30.340111","-97.98869","-6","1" +"78739","Austin","TX","30.17207","-97.87284","-6","1" +"78741","Austin","TX","30.231252","-97.716","-6","1" +"78742","Austin","TX","30.23358","-97.67831","-6","1" +"78744","Austin","TX","30.188377","-97.74038","-6","1" +"78745","Austin","TX","30.207559","-97.79575","-6","1" +"78746","Austin","TX","30.287739","-97.8022","-6","1" +"78747","Austin","TX","30.132855","-97.76187","-6","1" +"78748","Austin","TX","30.17202","-97.82265","-6","1" +"78749","Austin","TX","30.216108","-97.85828","-6","1" +"78750","Austin","TX","30.438933","-97.80383","-6","1" +"78751","Austin","TX","30.310707","-97.723","-6","1" +"78752","Austin","TX","30.332506","-97.70571","-6","1" +"78753","Austin","TX","30.374654","-97.67621","-6","1" +"78754","Austin","TX","30.354234","-97.64679","-6","1" +"78755","Austin","TX","30.326374","-97.771258","-6","1" +"78756","Austin","TX","30.320206","-97.74177","-6","1" +"78757","Austin","TX","30.349455","-97.73328","-6","1" +"78758","Austin","TX","30.384204","-97.70392","-6","1" +"78759","Austin","TX","30.406169","-97.75743","-6","1" +"78760","Austin","TX","30.326374","-97.771258","-6","1" +"78761","Austin","TX","30.326374","-97.771258","-6","1" +"78762","Austin","TX","30.326374","-97.771258","-6","1" +"78763","Austin","TX","30.335398","-97.559807","-6","1" +"78764","Austin","TX","30.445502","-97.659533","-6","1" +"78765","Austin","TX","30.326374","-97.771258","-6","1" +"78766","Austin","TX","30.442202","-97.62333","-6","1" +"78767","Austin","TX","30.222007","-97.896285","-6","1" +"78768","Austin","TX","30.326374","-97.771258","-6","1" +"78769","Austin","TX","30.326374","-97.771258","-6","1" +"78771","Austin","TX","30.326374","-97.771258","-6","1" +"78772","Austin","TX","30.326374","-97.771258","-6","1" +"78773","Austin","TX","30.326374","-97.771258","-6","1" +"78774","Austin","TX","30.326374","-97.771258","-6","1" +"78778","Austin","TX","30.326374","-97.771258","-6","1" +"78779","Austin","TX","30.326374","-97.771258","-6","1" +"78780","Austin","TX","30.326374","-97.771258","-6","1" +"78781","Austin","TX","30.326374","-97.771258","-6","1" +"78782","Austin","TX","30.326374","-97.771258","-6","1" +"78783","Austin","TX","30.326374","-97.771258","-6","1" +"78785","Austin","TX","30.326374","-97.771258","-6","1" +"78786","Austin","TX","30.326374","-97.771258","-6","1" +"78787","Austin","TX","30.326374","-97.771258","-6","1" +"78788","Austin","TX","30.326374","-97.771258","-6","1" +"78789","Austin","TX","30.326374","-97.771258","-6","1" +"78801","Uvalde","TX","29.252882","-99.8165","-6","1" +"78802","Uvalde","TX","29.223697","-99.779351","-6","1" +"78827","Asherton","TX","28.442081","-99.76064","-6","1" +"78828","Barksdale","TX","29.782887","-100.08547","-6","1" +"78829","Batesville","TX","28.883474","-99.58416","-6","1" +"78830","Big Wells","TX","28.555795","-99.50744","-6","1" +"78832","Brackettville","TX","29.313559","-100.42452","-6","1" +"78833","Camp Wood","TX","29.664428","-99.99968","-6","1" +"78834","Carrizo Springs","TX","28.524292","-99.83827","-6","1" +"78835","Burton","TX","30.178439","-96.591092","-6","1" +"78836","Catarina","TX","28.34884","-99.61238","-6","1" +"78837","Comstock","TX","29.933388","-101.40061","-6","1" +"78838","Concan","TX","29.541648","-99.71817","-6","1" +"78839","Crystal City","TX","28.68906","-99.81278","-6","1" +"78840","Del Rio","TX","29.404267","-100.88116","-6","1" +"78841","Del Rio","TX","29.346518","-100.928864","-6","1" +"78842","Del Rio","TX","29.411955","-100.934216","-6","1" +"78843","Laughlin A F B","TX","29.356379","-100.79269","-6","1" +"78847","Del Rio","TX","29.763171","-101.230032","-6","1" +"78850","D Hanis","TX","29.334701","-99.33534","-6","1" +"78851","Dryden","TX","30.075997","-101.95574","-6","1" +"78852","Eagle Pass","TX","28.716242","-100.48058","-6","1" +"78853","Eagle Pass","TX","28.679006","-100.478373","-6","1" +"78860","El Indio","TX","28.513787","-100.31647","-6","1" +"78861","Hondo","TX","29.379516","-99.12665","-6","1" +"78870","Knippa","TX","29.297821","-99.62754","-6","1" +"78871","Langtry","TX","29.763171","-101.230032","-6","1" +"78872","La Pryor","TX","28.950547","-99.85032","-6","1" +"78873","Leakey","TX","29.756509","-99.76665","-6","1" +"78877","Quemado","TX","28.917675","-100.60332","-6","1" +"78879","Rio Frio","TX","29.628266","-99.73847","-6","1" +"78880","Rocksprings","TX","30.065334","-100.17202","-6","1" +"78881","Sabinal","TX","29.361493","-99.50497","-6","1" +"78883","Tarpley","TX","29.671077","-99.34384","-6","1" +"78884","Utopia","TX","29.634216","-99.48894","-6","1" +"78885","Vanderpool","TX","29.785042","-99.55361","-6","1" +"78886","Yancey","TX","29.143045","-99.19045","-6","1" +"78931","Bleiblerville","TX","29.849283","-96.313271","-6","1" +"78932","Carmine","TX","30.141287","-96.6909","-6","1" +"78933","Cat Spring","TX","29.773128","-96.39342","-6","1" +"78934","Columbus","TX","29.712052","-96.56134","-6","1" +"78935","Alleyton","TX","29.698797","-96.45594","-6","1" +"78938","Ellinger","TX","29.838528","-96.70389","-6","1" +"78940","Fayetteville","TX","29.941521","-96.65977","-6","1" +"78941","Flatonia","TX","29.719856","-97.1249","-6","1" +"78942","Giddings","TX","30.182175","-96.93171","-6","1" +"78943","Glidden","TX","29.699797","-96.59314","-6","1" +"78944","Industry","TX","29.975083","-96.50081","-6","1" +"78945","La Grange","TX","29.909764","-96.8745","-6","1" +"78946","Ledbetter","TX","30.186858","-96.78185","-6","1" +"78947","Lexington","TX","30.414806","-97.03904","-6","1" +"78948","Lincoln","TX","30.2984","-96.95358","-6","1" +"78949","Muldoon","TX","29.847433","-97.07988","-6","1" +"78950","New Ulm","TX","29.909257","-96.49617","-6","1" +"78951","Oakland","TX","29.60466","-96.524899","-6","1" +"78952","Plum","TX","29.896219","-96.943868","-6","1" +"78953","Rosanky","TX","29.846862","-97.3318","-6","1" +"78954","Round Top","TX","30.057137","-96.67796","-6","1" +"78956","Schulenburg","TX","29.680723","-96.91964","-6","1" +"78957","Smithville","TX","30.010487","-97.16036","-6","1" +"78959","Waelder","TX","29.697311","-97.29077","-6","1" +"78960","Warda","TX","30.070257","-96.91939","-6","1" +"78961","Round Top","TX","29.665518","-97.039741","-6","1" +"78962","Weimar","TX","29.698373","-96.75932","-6","1" +"78963","West Point","TX","29.930184","-97.0269","-6","1" +"78972","Austin","TX","30.31536","-97.663293","-6","1" +"79001","Adrian","TX","35.2195","-102.71795","-6","1" +"79002","Alanreed","TX","35.201105","-100.74939","-6","1" +"79003","Allison","TX","35.629034","-100.09291","-6","1" +"79005","Booker","TX","36.427031","-100.51097","-6","1" +"79007","Borger","TX","35.665899","-101.40666","-6","1" +"79008","Borger","TX","35.631621","-101.599447","-6","1" +"79009","Bovina","TX","34.51748","-102.89478","-6","1" +"79010","Boys Ranch","TX","35.459732","-102.14757","-6","1" +"79011","Briscoe","TX","35.662917","-100.21999","-6","1" +"79012","Bushland","TX","35.191525","-102.08831","-6","1" +"79013","Cactus","TX","36.044769","-102.01155","-6","1" +"79014","Canadian","TX","35.866528","-100.31313","-6","1" +"79015","Canyon","TX","34.971029","-101.9212","-6","1" +"79016","Canyon","TX","34.96539","-101.895894","-6","1" +"79018","Channing","TX","35.718644","-102.25186","-6","1" +"79019","Claude","TX","35.062127","-101.41617","-6","1" +"79021","Cotton Center","TX","33.980231","-102.02668","-6","1" +"79022","Dalhart","TX","36.090281","-102.60769","-6","1" +"79024","Darrouzett","TX","36.441178","-100.33123","-6","1" +"79025","Dawn","TX","34.92765","-102.21997","-6","1" +"79027","Dimmitt","TX","34.539266","-102.37108","-6","1" +"79029","Dumas","TX","35.893121","-101.95908","-6","1" +"79031","Earth","TX","34.235871","-102.40636","-6","1" +"79032","Edmonson","TX","34.281443","-101.898","-6","1" +"79033","Farnsworth","TX","36.317403","-100.97272","-6","1" +"79034","Follett","TX","36.397469","-100.16168","-6","1" +"79035","Friona","TX","34.631714","-102.72658","-6","1" +"79036","Fritch","TX","35.625603","-101.61413","-6","1" +"79039","Groom","TX","35.235628","-101.10183","-6","1" +"79040","Gruver","TX","36.27128","-101.49483","-6","1" +"79041","Hale Center","TX","34.043076","-101.89695","-6","1" +"79042","Happy","TX","34.759887","-101.83116","-6","1" +"79043","Hart","TX","34.423414","-102.12132","-6","1" +"79044","Hartley","TX","35.890235","-102.3595","-6","1" +"79045","Hereford","TX","34.854898","-102.41824","-6","1" +"79046","Higgins","TX","36.113986","-100.09235","-6","1" +"79051","Kerrick","OK","36.531076","-102.33198","-6","1" +"79052","Kress","TX","34.356732","-101.76769","-6","1" +"79053","Lazbuddie","TX","34.39174","-102.60242","-6","1" +"79054","Lefors","TX","35.444006","-100.80119","-6","1" +"79056","Lipscomb","TX","36.232046","-100.27971","-6","1" +"79057","Mclean","TX","35.263424","-100.61635","-6","1" +"79058","Masterson","TX","35.837775","-101.892846","-6","1" +"79059","Miami","TX","35.724847","-100.6961","-6","1" +"79061","Mobeetie","TX","35.534558","-100.44105","-6","1" +"79062","Morse","TX","36.004239","-101.54672","-6","1" +"79063","Nazareth","TX","34.543766","-102.12349","-6","1" +"79064","Olton","TX","34.18788","-102.13325","-6","1" +"79065","Pampa","TX","35.533093","-100.96041","-6","1" +"79066","Pampa","TX","35.533384","-100.956013","-6","1" +"79068","Panhandle","TX","35.335288","-101.39752","-6","1" +"79070","Perryton","TX","36.336972","-100.82966","-6","1" +"79072","Plainview","TX","34.191002","-101.72506","-6","1" +"79073","Plainview","TX","34.068903","-101.826997","-6","1" +"79077","Samnorwood","TX","34.840485","-100.204928","-6","1" +"79078","Sanford","TX","35.71177","-101.54716","-6","1" +"79079","Shamrock","TX","35.227015","-100.27501","-6","1" +"79080","Skellytown","TX","35.655035","-101.22477","-6","1" +"79081","Spearman","TX","36.185112","-101.18783","-6","1" +"79082","Springlake","TX","34.209814","-102.29761","-6","1" +"79083","Stinnett","TX","35.844445","-101.48031","-6","1" +"79084","Stratford","TX","36.28116","-102.02187","-6","1" +"79085","Summerfield","TX","34.743735","-102.506442","-6","1" +"79086","Sunray","TX","36.057372","-101.76599","-6","1" +"79087","Texline","TX","36.316305","-102.97676","-6","1" +"79088","Tulia","TX","34.541042","-101.72921","-6","1" +"79091","Umbarger","TX","34.938094","-102.11087","-6","1" +"79092","Vega","TX","35.209649","-102.42611","-6","1" +"79093","Waka","TX","36.280101","-101.04673","-6","1" +"79094","Wayside","TX","34.965329","-101.357838","-6","1" +"79095","Wellington","TX","34.858194","-100.20763","-6","1" +"79096","Wheeler","TX","35.459147","-100.20106","-6","1" +"79097","White Deer","TX","35.432364","-101.16687","-6","1" +"79098","Wildorado","TX","35.151101","-102.18977","-6","1" +"79101","Amarillo","TX","35.206402","-101.83924","-6","1" +"79102","Amarillo","TX","35.197852","-101.84543","-6","1" +"79103","Amarillo","TX","35.184253","-101.81073","-6","1" +"79104","Amarillo","TX","35.199652","-101.79486","-6","1" +"79105","Amarillo","TX","35.401475","-101.895089","-6","1" +"79106","Amarillo","TX","35.204652","-101.88353","-6","1" +"79107","Amarillo","TX","35.228302","-101.81946","-6","1" +"79108","Amarillo","TX","35.296948","-101.78641","-6","1" +"79109","Amarillo","TX","35.171903","-101.87581","-6","1" +"79110","Amarillo","TX","35.157403","-101.86114","-6","1" +"79111","Amarillo","TX","35.226552","-101.67875","-6","1" +"79114","Amarillo","TX","35.050003","-101.817485","-6","1" +"79116","Amarillo","TX","35.245398","-101.999047","-6","1" +"79117","Amarillo","TX","35.308889","-101.843033","-6","1" +"79118","Amarillo","TX","35.100501","-101.80606","-6","1" +"79119","Amarillo","TX","35.097488","-101.98105","-6","1" +"79120","Amarillo","TX","35.196352","-101.803412","-6","1" +"79121","Amarillo","TX","35.173704","-101.92914","-6","1" +"79123","Amarillo","TX","35.401475","-101.895089","-6","1" +"79124","Amarillo","TX","35.244819","-101.95391","-6","1" +"79159","Amarillo","TX","35.216029","-102.071415","-6","1" +"79160","Amarillo","TX","35.401475","-101.895089","-6","1" +"79163","Amarillo","TX","35.401475","-101.895089","-6","1" +"79164","Amarillo","TX","35.401475","-101.895089","-6","1" +"79165","Amarillo","TX","35.401475","-101.895089","-6","1" +"79166","Amarillo","TX","35.401475","-101.895089","-6","1" +"79167","Amarillo","TX","35.401475","-101.895089","-6","1" +"79168","Amarillo","TX","35.401475","-101.895089","-6","1" +"79170","Amarillo","TX","35.401475","-101.895089","-6","1" +"79171","Amarillo","TX","35.401475","-101.895089","-6","1" +"79172","Amarillo","TX","35.401475","-101.895089","-6","1" +"79174","Amarillo","TX","35.401475","-101.895089","-6","1" +"79175","Amarillo","TX","35.401475","-101.895089","-6","1" +"79178","Amarillo","TX","35.401475","-101.895089","-6","1" +"79180","Amarillo","TX","35.401475","-101.895089","-6","1" +"79181","Amarillo","TX","35.401475","-101.895089","-6","1" +"79182","Amarillo","TX","35.401475","-101.895089","-6","1" +"79184","Amarillo","TX","35.401475","-101.895089","-6","1" +"79185","Amarillo","TX","35.401475","-101.895089","-6","1" +"79186","Amarillo","TX","35.401475","-101.895089","-6","1" +"79187","Amarillo","TX","35.401475","-101.895089","-6","1" +"79189","Amarillo","TX","35.401475","-101.895089","-6","1" +"79201","Childress","TX","34.38587","-100.28401","-6","1" +"79220","Afton","TX","33.749303","-100.76393","-6","1" +"79221","Aiken","TX","34.071514","-101.30313","-6","1" +"79222","Carey","TX","34.529678","-100.207642","-6","1" +"79223","Cee Vee","TX","34.216509","-100.47198","-6","1" +"79224","Chalk","TX","34.074854","-100.258156","-6","1" +"79225","Chillicothe","TX","34.261752","-99.5202","-6","1" +"79226","Clarendon","TX","34.971719","-100.90662","-6","1" +"79227","Crowell","TX","33.929907","-99.74194","-6","1" +"79229","Dickens","TX","33.654512","-100.75517","-6","1" +"79230","Dodson","TX","34.698438","-100.06623","-6","1" +"79231","Dougherty","TX","33.943005","-101.09236","-6","1" +"79232","Dumont","TX","33.773871","-100.61443","-6","1" +"79233","Estelline","TX","34.545031","-100.43729","-6","1" +"79234","Flomot","TX","34.241416","-100.93789","-6","1" +"79235","Floydada","TX","33.941748","-101.30072","-6","1" +"79236","Guthrie","TX","33.652122","-100.35199","-6","1" +"79237","Hedley","TX","34.874151","-100.63288","-6","1" +"79238","Kirkland","TX","34.529678","-100.207642","-6","1" +"79239","Lakeview","TX","34.637427","-100.76388","-6","1" +"79240","Lelia Lake","TX","34.896396","-100.76721","-6","1" +"79241","Lockney","TX","34.192619","-101.38934","-6","1" +"79243","Mcadoo","TX","33.787306","-100.98464","-6","1" +"79244","Matador","TX","34.070936","-100.82488","-6","1" +"79245","Memphis","TX","34.715551","-100.53964","-6","1" +"79247","Odell","TX","34.345924","-99.41669","-6","1" +"79248","Paducah","TX","34.006473","-100.21246","-6","1" +"79250","Petersburg","TX","33.870404","-101.60467","-6","1" +"79251","Quail","TX","34.975549","-100.44628","-6","1" +"79252","Quanah","TX","34.297126","-99.77713","-6","1" +"79255","Quitaque","TX","34.362997","-101.05209","-6","1" +"79256","Roaring Springs","TX","33.915528","-100.81731","-6","1" +"79257","Silverton","TX","34.444761","-101.32582","-6","1" +"79258","South Plains","TX","34.071514","-101.30313","-6","1" +"79259","Tell","TX","34.391847","-100.40597","-6","1" +"79261","Turkey","TX","34.408268","-100.87132","-6","1" +"79301","Earth","TX","34.230527","-102.41085","-6","1" +"79311","Abernathy","TX","33.857895","-101.88156","-6","1" +"79312","Amherst","TX","34.017448","-102.3858","-6","1" +"79313","Anton","TX","33.823216","-102.16413","-6","1" +"79314","Bledsoe","TX","33.616833","-103.01952","-6","1" +"79316","Brownfield","TX","33.153528","-102.29568","-6","1" +"79320","Bula","TX","33.861914","-102.67355","-6","1" +"79321","Sudan","TX","34.061309","-102.521814","-6","1" +"79322","Crosbyton","TX","33.653787","-101.22866","-6","1" +"79323","Denver City","TX","32.976623","-102.84661","-6","1" +"79324","Enochs","TX","33.895013","-102.78117","-6","1" +"79325","Farwell","TX","34.389202","-102.89928","-6","1" +"79326","Fieldton","TX","34.04877","-102.20958","-6","1" +"79329","Idalou","TX","33.701827","-101.69093","-6","1" +"79330","Justiceburg","TX","33.04993","-101.14146","-6","1" +"79331","Lamesa","TX","32.714521","-101.94086","-6","1" +"79336","Levelland","TX","33.609208","-102.41478","-6","1" +"79338","Levelland","TX","33.593213","-102.362709","-6","1" +"79339","Littlefield","TX","33.894823","-102.32282","-6","1" +"79342","Loop","TX","32.893447","-102.30958","-6","1" +"79343","Lorenzo","TX","33.605628","-101.5205","-6","1" +"79344","Maple","TX","33.855245","-102.95319","-6","1" +"79345","Meadow","TX","33.344598","-102.28814","-6","1" +"79346","Morton","TX","33.688713","-102.81775","-6","1" +"79347","Muleshoe","TX","34.206848","-102.78511","-6","1" +"79350","New Deal","TX","33.751374","-101.83672","-6","1" +"79351","Odonnell","TX","32.951473","-101.83895","-6","1" +"79353","Pep","TX","33.783555","-102.59146","-6","1" +"79355","Plains","TX","33.16997","-102.86992","-6","1" +"79356","Post","TX","33.245276","-101.37638","-6","1" +"79357","Ralls","TX","33.667836","-101.38794","-6","1" +"79358","Ropesville","TX","33.425342","-102.16505","-6","1" +"79359","Seagraves","TX","32.922387","-102.56265","-6","1" +"79360","Seminole","TX","32.718232","-102.73458","-6","1" +"79363","Shallowater","TX","33.701024","-102.01948","-6","1" +"79364","Slaton","TX","33.437291","-101.65054","-6","1" +"79366","Ransom Canyon","TX","33.531908","-101.69479","-6","1" +"79367","Smyer","TX","33.588639","-102.16126","-6","1" +"79368","Seminole","TX","33.044702","-102.099276","-6","1" +"79369","Spade","TX","33.91843","-102.15822","-6","1" +"79370","Spur","TX","33.478848","-100.89669","-6","1" +"79371","Sudan","TX","34.068183","-102.52625","-6","1" +"79372","Sundown","TX","33.45798","-102.48829","-6","1" +"79373","Tahoka","TX","33.199867","-101.81949","-6","1" +"79376","Tokio","TX","33.203713","-102.62018","-6","1" +"79377","Welch","TX","32.931786","-102.14673","-6","1" +"79378","Wellman","TX","33.037656","-102.44248","-6","1" +"79379","Whiteface","TX","33.600017","-102.61953","-6","1" +"79380","Whitharral","TX","33.733418","-102.33103","-6","1" +"79381","Wilson","TX","33.327782","-101.76906","-6","1" +"79382","Wolfforth","TX","33.483465","-102.02033","-6","1" +"79383","New Home","TX","33.330983","-101.91065","-6","1" +"79401","Lubbock","TX","33.578935","-101.8316","-6","1" +"79402","Lubbock","TX","33.592235","-101.851144","-6","1" +"79403","Lubbock","TX","33.614934","-101.8067","-6","1" +"79404","Lubbock","TX","33.549785","-101.82634","-6","1" +"79405","Lubbock","TX","33.570035","-101.84984","-6","1" +"79406","Lubbock","TX","33.583798","-101.87525","-6","1" +"79407","Lubbock","TX","33.567134","-101.98329","-6","1" +"79408","Lubbock","TX","33.565926","-101.92669","-6","1" +"79409","Lubbock","TX","33.610018","-101.821292","-6","1" +"79410","Lubbock","TX","33.570135","-101.88901","-6","1" +"79411","Lubbock","TX","33.570435","-101.86184","-6","1" +"79412","Lubbock","TX","33.549135","-101.85846","-6","1" +"79413","Lubbock","TX","33.547735","-101.88881","-6","1" +"79414","Lubbock","TX","33.550335","-101.91661","-6","1" +"79415","Lubbock","TX","33.62386","-101.88057","-6","1" +"79416","Lubbock","TX","33.591877","-101.94754","-6","1" +"79423","Lubbock","TX","33.496603","-101.86923","-6","1" +"79424","Lubbock","TX","33.513337","-101.93239","-6","1" +"79430","Lubbock","TX","33.610018","-101.821292","-6","1" +"79452","Lubbock","TX","33.610018","-101.821292","-6","1" +"79453","Lubbock","TX","33.610018","-101.821292","-6","1" +"79457","Lubbock","TX","33.610018","-101.821292","-6","1" +"79464","Lubbock","TX","33.489623","-102.010895","-6","1" +"79490","Lubbock","TX","33.610018","-101.821292","-6","1" +"79491","Lubbock","TX","33.610018","-101.821292","-6","1" +"79493","Lubbock","TX","33.610018","-101.821292","-6","1" +"79499","Lubbock","TX","33.610018","-101.821292","-6","1" +"79501","Anson","TX","32.754555","-99.89507","-6","1" +"79502","Aspermont","TX","33.151713","-100.25449","-6","1" +"79503","Avoca","TX","32.882154","-99.69298","-6","1" +"79504","Baird","TX","32.333638","-99.35055","-6","1" +"79505","Benjamin","TX","33.565259","-99.84811","-6","1" +"79506","Blackwell","TX","32.106949","-100.31228","-6","1" +"79508","Buffalo Gap","TX","32.280068","-99.82808","-6","1" +"79510","Clyde","TX","32.337156","-99.51701","-6","1" +"79511","Coahoma","TX","32.38737","-101.28147","-6","1" +"79512","Colorado City","TX","32.368824","-100.93689","-6","1" +"79516","Dunn","TX","32.747707","-100.9153","-6","1" +"79517","Fluvanna","TX","32.883354","-101.20597","-6","1" +"79518","Girard","TX","33.361766","-100.6895","-6","1" +"79519","Goldsboro","TX","32.043108","-99.70865","-6","1" +"79520","Hamlin","TX","32.88019","-100.13583","-6","1" +"79521","Haskell","TX","33.147497","-99.70246","-6","1" +"79525","Hawley","TX","32.616906","-99.82211","-6","1" +"79526","Hermleigh","TX","32.627475","-100.76416","-6","1" +"79527","Ira","TX","32.584546","-101.06523","-6","1" +"79528","Jayton","TX","33.238378","-100.57389","-6","1" +"79529","Knox City","TX","33.423156","-99.82014","-6","1" +"79530","Lawn","TX","32.128112","-99.7639","-6","1" +"79532","Loraine","TX","32.409433","-100.71285","-6","1" +"79533","Lueders","TX","32.80699","-99.60862","-6","1" +"79534","McCaulley","TX","32.766833","-100.21048","-6","1" +"79535","Maryneal","TX","32.249241","-100.449","-6","1" +"79536","Merkel","TX","32.473679","-100.02753","-6","1" +"79537","Nolan","TX","32.269772","-100.23572","-6","1" +"79538","Novice","TX","32.011087","-99.63167","-6","1" +"79539","O Brien","TX","33.379469","-99.89708","-6","1" +"79540","Old Glory","TX","33.151135","-100.04142","-6","1" +"79541","Ovalo","TX","32.151983","-99.84483","-6","1" +"79543","Roby","TX","32.739964","-100.38106","-6","1" +"79544","Rochester","TX","33.308203","-99.86203","-6","1" +"79545","Roscoe","TX","32.422985","-100.55397","-6","1" +"79546","Rotan","TX","32.87144","-100.46635","-6","1" +"79547","Rule","TX","33.196822","-99.90554","-6","1" +"79548","Rule","TX","33.067644","-99.94686","-6","1" +"79549","Snyder","TX","32.760229","-100.95344","-6","1" +"79550","Snyder","TX","32.747707","-100.9153","-6","1" +"79552","Stamford","TX","32.944761","-99.800304","-6","1" +"79553","Stamford","TX","32.943145","-99.81595","-6","1" +"79556","Sweetwater","TX","32.465621","-100.39814","-6","1" +"79560","Sylvester","TX","32.684029","-100.1998","-6","1" +"79561","Trent","TX","32.504094","-100.15822","-6","1" +"79562","Tuscola","TX","32.230821","-99.90025","-6","1" +"79563","Tye","TX","32.442465","-99.87238","-6","1" +"79565","Westbrook","TX","32.358785","-101.07207","-6","1" +"79566","Wingate","TX","32.109191","-100.10582","-6","1" +"79567","Winters","TX","31.965685","-99.93471","-6","1" +"79571","Haskell","TX","33.158381","-99.718725","-6","1" +"79601","Abilene","TX","32.500532","-99.69803","-6","1" +"79602","Abilene","TX","32.40769","-99.72107","-6","1" +"79603","Abilene","TX","32.466724","-99.76927","-6","1" +"79604","Abilene","TX","32.428796","-99.795167","-6","1" +"79605","Abilene","TX","32.432975","-99.77096","-6","1" +"79606","Abilene","TX","32.360362","-99.79886","-6","1" +"79607","Dyess AFB","TX","32.417269","-99.82203","-6","1" +"79608","Abilene","TX","32.302132","-99.890737","-6","1" +"79643","Ozona","TX","30.711061","-101.215979","-6","1" +"79697","Abilene","TX","32.302132","-99.890737","-6","1" +"79698","Abilene","TX","32.475074","-99.73484","-6","1" +"79699","Abilene","TX","32.466474","-99.711665","-6","1" +"79701","Midland","TX","31.995623","-102.08108","-6","1" +"79702","Midland","TX","31.963698","-102.080064","-6","1" +"79703","Midland","TX","31.984823","-102.13015","-6","1" +"79704","Midland","TX","31.869259","-102.031726","-6","1" +"79705","Midland","TX","32.029022","-102.08618","-6","1" +"79706","Midland","TX","31.880341","-101.96324","-6","1" +"79707","Midland","TX","32.021056","-102.16008","-6","1" +"79708","Midland","TX","31.869259","-102.031726","-6","1" +"79710","Midland","TX","31.869259","-102.031726","-6","1" +"79711","Midland","TX","31.869259","-102.031726","-6","1" +"79712","Midland","TX","31.869259","-102.031726","-6","1" +"79713","Ackerly","TX","32.520297","-101.73528","-6","1" +"79714","Andrews","TX","32.345871","-102.56767","-6","1" +"79718","Balmorhea","TX","30.966245","-103.73108","-6","1" +"79719","Barstow","TX","31.461562","-103.39895","-6","1" +"79720","Big Spring","TX","32.21649","-101.4532","-6","1" +"79721","Big Spring","TX","32.27328","-101.373968","-6","1" +"79730","Coyanosa","TX","31.17942","-103.03594","-6","1" +"79731","Crane","TX","31.389079","-102.35059","-6","1" +"79733","Forsan","TX","32.110298","-101.3655","-6","1" +"79734","Fort Davis","TX","30.626134","-103.98274","-6","1" +"79735","Fort Stockton","TX","30.877528","-102.852","-6","1" +"79738","Gail","TX","32.723865","-101.45811","-6","1" +"79739","Garden City","TX","31.807661","-101.51475","-6","1" +"79740","Girvin","TX","31.019602","-102.47675","-6","1" +"79741","Goldsmith","TX","31.983989","-102.64729","-6","1" +"79742","Grandfalls","TX","31.34197","-102.8564","-6","1" +"79743","Imperial","TX","31.253704","-102.696","-6","1" +"79744","Iraan","TX","30.899378","-101.98029","-6","1" +"79745","Kermit","TX","31.847071","-103.08399","-6","1" +"79748","Knott","TX","32.388962","-101.66373","-6","1" +"79749","Lenorah","TX","32.255909","-101.81824","-6","1" +"79752","McCamey","TX","31.156902","-102.19598","-6","1" +"79754","Mentone","TX","31.72285","-103.57449","-6","1" +"79755","Midkiff","TX","31.608083","-101.86524","-6","1" +"79756","Monahans","TX","31.568459","-102.89658","-6","1" +"79757","Wickett","TX","31.566763","-103.014646","-6","1" +"79758","Gardendale","TX","32.020274","-102.35512","-6","1" +"79759","Notrees","TX","31.840191","-102.74709","-6","1" +"79760","Odessa","TX","31.765163","-102.354346","-6","1" +"79761","Odessa","TX","31.854455","-102.35906","-6","1" +"79762","Odessa","TX","31.890374","-102.35398","-6","1" +"79763","Odessa","TX","31.817344","-102.42315","-6","1" +"79764","Odessa","TX","31.86577","-102.45367","-6","1" +"79765","Odessa","TX","31.910706","-102.28644","-6","1" +"79766","Odessa","TX","31.749504","-102.32177","-6","1" +"79768","Odessa","TX","31.869142","-102.542944","-6","1" +"79769","Odessa","TX","31.746572","-102.566993","-6","1" +"79770","Orla","TX","31.383297","-103.556598","-6","1" +"79772","Pecos","TX","31.388404","-103.52515","-6","1" +"79776","Penwell","TX","31.730204","-102.62831","-6","1" +"79777","Pyote","TX","31.535153","-103.12722","-6","1" +"79778","Rankin","TX","31.2244","-101.94317","-6","1" +"79779","Royalty","TX","31.459448","-103.188993","-6","1" +"79780","Saragosa","TX","31.026706","-103.65509","-6","1" +"79781","Sheffield","TX","30.703917","-101.87223","-6","1" +"79782","Stanton","TX","32.09023","-101.81691","-6","1" +"79783","Tarzan","TX","32.369835","-102.03317","-6","1" +"79785","Toyah","TX","31.306912","-103.79377","-6","1" +"79786","Toyahvale","TX","31.383297","-103.556598","-6","1" +"79788","Wickett","TX","31.569032","-103.00689","-6","1" +"79789","Wink","TX","31.753101","-103.15737","-6","1" +"79821","Anthony","TX","31.977553","-106.60469","-7","1" +"79830","Alpine","TX","30.011559","-103.56444","-6","1" +"79831","Alpine","TX","30.349136","-103.69271","-6","1" +"79832","Alpine","TX","30.363139","-103.653904","-6","1" +"79834","Big Bend National Park","TX","29.321321","-103.21085","-6","1" +"79835","Canutillo","TX","31.932926","-106.59577","-7","1" +"79836","Clint","TX","31.570185","-106.2133","-7","1" +"79837","Dell City","TX","31.937024","-105.19353","-7","1" +"79838","Fabens","TX","31.490587","-106.15381","-7","1" +"79839","Fort Hancock","TX","31.270689","-105.6653","-7","1" +"79841","Sierra Blanca","TX","32.624796","-103.597991","-7","1" +"79842","Marathon","TX","30.12169","-103.22091","-6","1" +"79843","Marfa","TX","30.217129","-104.22045","-6","1" +"79845","Presidio","TX","29.597409","-104.27058","-6","1" +"79846","Redford","TX","29.444333","-104.11628","-6","1" +"79847","Salt Flat","TX","31.820395","-105.30882","-7","1" +"79848","Sanderson","TX","30.144953","-102.39894","-6","1" +"79849","San Elizario","TX","31.577344","-106.2672","-7","1" +"79850","Shafter","TX","29.943719","-104.386683","-6","1" +"79851","Sierra Blanca","TX","31.182009","-105.34084","-7","1" +"79852","Terlingua","TX","29.441286","-103.63643","-6","1" +"79853","Tornillo","TX","31.447738","-106.09049","-7","1" +"79854","Valentine","TX","30.647349","-104.52192","-6","1" +"79855","Van Horn","TX","31.099326","-104.69511","-6","1" +"79858","Fabens","TX","31.509199","-106.151727","-7","1" +"79870","Alpine","TX","30.354251","-103.658391","-6","1" +"79901","El Paso","TX","31.759558","-106.48011","-7","1" +"79902","El Paso","TX","31.775458","-106.4945","-7","1" +"79903","El Paso","TX","31.786221","-106.44583","-7","1" +"79904","El Paso","TX","31.852156","-106.44181","-7","1" +"79905","El Paso","TX","31.768758","-106.43047","-7","1" +"79906","El Paso","TX","31.809263","-106.43081","-7","1" +"79907","El Paso","TX","31.70831","-106.32749","-7","1" +"79908","El Paso","TX","31.912449","-106.32501","-7","1" +"79910","El Paso","TX","31.694842","-106.299987","-7","1" +"79911","El Paso","TX","31.694842","-106.299987","-7","1" +"79912","El Paso","TX","31.848055","-106.54487","-7","1" +"79913","El Paso","TX","31.93728","-106.572393","-7","1" +"79914","El Paso","TX","31.694842","-106.299987","-7","1" +"79915","El Paso","TX","31.743038","-106.36957","-7","1" +"79916","El Paso","TX","31.744353","-106.287923","-7","1" +"79917","El Paso","TX","31.694842","-106.299987","-7","1" +"79918","El Paso","TX","31.831782","-106.390656","-7","1" +"79920","El Paso","TX","31.821439","-106.461405","-7","1" +"79922","El Paso","NM","31.789109","-106.54291","-7","1" +"79923","El Paso","TX","31.694842","-106.299987","-7","1" +"79924","El Paso","TX","31.901737","-106.41827","-7","1" +"79925","El Paso","TX","31.782408","-106.36353","-7","1" +"79926","El Paso","TX","31.694842","-106.299987","-7","1" +"79927","El Paso","TX","31.684338","-106.20788","-7","1" +"79928","El Paso","TX","31.674736","-106.197528","-7","1" +"79929","El Paso","TX","31.694842","-106.299987","-7","1" +"79930","El Paso","TX","31.803457","-106.45758","-7","1" +"79931","El Paso","TX","31.694842","-106.299987","-7","1" +"79932","El Paso","TX","31.865696","-106.59982","-7","1" +"79934","El Paso","TX","31.943633","-106.42402","-7","1" +"79935","El Paso","TX","31.784541","-106.33705","-7","1" +"79936","El Paso","TX","31.766355","-106.29828","-7","1" +"79937","El Paso","TX","31.694842","-106.299987","-7","1" +"79938","El Paso","TX","31.852355","-106.09325","-7","1" +"79940","El Paso","TX","31.694842","-106.299987","-7","1" +"79941","El Paso","TX","31.694842","-106.299987","-7","1" +"79942","El Paso","TX","31.694842","-106.299987","-7","1" +"79943","El Paso","TX","31.694842","-106.299987","-7","1" +"79944","El Paso","TX","31.694842","-106.299987","-7","1" +"79945","El Paso","TX","31.694842","-106.299987","-7","1" +"79946","El Paso","TX","31.694842","-106.299987","-7","1" +"79947","El Paso","TX","31.694842","-106.299987","-7","1" +"79948","El Paso","TX","31.694842","-106.299987","-7","1" +"79949","El Paso","TX","31.694842","-106.299987","-7","1" +"79950","El Paso","TX","31.694842","-106.299987","-7","1" +"79951","El Paso","TX","31.694842","-106.299987","-7","1" +"79952","El Paso","TX","31.694842","-106.299987","-7","1" +"79953","El Paso","TX","31.694842","-106.299987","-7","1" +"79954","El Paso","TX","31.694842","-106.299987","-7","1" +"79955","El Paso","TX","31.694842","-106.299987","-7","1" +"79958","El Paso","TX","31.694842","-106.299987","-7","1" +"79960","El Paso","TX","31.694842","-106.299987","-7","1" +"79961","El Paso","TX","31.694842","-106.299987","-7","1" +"79966","El Paso","TX","31.694842","-106.299987","-7","1" +"79968","El Paso","TX","31.770458","-106.504843","-7","1" +"79973","El Paso","TX","31.694842","-106.299987","-7","1" +"79974","El Paso","TX","31.694842","-106.299987","-7","1" +"79975","El Paso","TX","31.694842","-106.299987","-7","1" +"79976","El Paso","TX","31.694842","-106.299987","-7","1" +"79977","El Paso","TX","31.694842","-106.299987","-7","1" +"79978","El Paso","TX","31.799275","-106.382757","-7","1" +"79980","El Paso","TX","31.694842","-106.299987","-7","1" +"79982","El Paso","TX","31.694842","-106.299987","-7","1" +"79983","El Paso","TX","31.694842","-106.299987","-7","1" +"79984","El Paso","TX","31.694842","-106.299987","-7","1" +"79985","El Paso","TX","31.694842","-106.299987","-7","1" +"79986","El Paso","TX","31.694842","-106.299987","-7","1" +"79987","El Paso","TX","31.694842","-106.299987","-7","1" +"79988","El Paso","TX","31.694842","-106.299987","-7","1" +"79989","El Paso","TX","31.694842","-106.299987","-7","1" +"79990","El Paso","TX","31.694842","-106.299987","-7","1" +"79991","El Paso","TX","31.694842","-106.299987","-7","1" +"79992","El Paso","TX","31.694842","-106.299987","-7","1" +"79993","El Paso","TX","31.694842","-106.299987","-7","1" +"79994","El Paso","TX","31.694842","-106.299987","-7","1" +"79995","El Paso","TX","31.694842","-106.299987","-7","1" +"79996","El Paso","TX","31.694842","-106.299987","-7","1" +"79997","El Paso","TX","31.694842","-106.299987","-7","1" +"79998","El Paso","TX","31.694842","-106.299987","-7","1" +"79999","El Paso","TX","31.694842","-106.299987","-7","1" +"80000","Aurora","CO","39.669637","-104.773083","-7","1" +"80001","Arvada","CO","39.522014","-105.223945","-7","1" +"80002","Arvada","CO","39.795006","-105.0981","-7","1" +"80003","Arvada","CO","39.825357","-105.06439","-7","1" +"80004","Arvada","CO","39.81431","-105.12263","-7","1" +"80005","Arvada","CO","39.843304","-105.11896","-7","1" +"80006","Arvada","CO","39.522014","-105.223945","-7","1" +"80007","Arvada","CO","39.833442","-105.18591","-7","1" +"80010","Aurora","CO","39.739387","-104.8621","-7","1" +"80011","Aurora","CO","39.739737","-104.80905","-7","1" +"80012","Aurora","CO","39.698387","-104.83956","-7","1" +"80013","Aurora","CO","39.659105","-104.7791","-7","1" +"80014","Aurora","CO","39.665637","-104.83421","-7","1" +"80015","Aurora","CO","39.623896","-104.77723","-7","1" +"80016","Aurora","CO","39.595115","-104.7485","-7","1" +"80017","Aurora","CO","39.695269","-104.78439","-7","1" +"80018","Aurora","CO","39.689244","-104.7166","-7","1" +"80019","Aurora","CO","39.784036","-104.72289","-7","1" +"80020","Broomfield","CO","39.93404","-105.05454","-7","1" +"80021","Broomfield","CO","39.881608","-105.09953","-7","1" +"80022","Commerce City","CO","39.836586","-104.9039","-7","1" +"80024","Dupont","CO","39.844685","-104.91851","-7","1" +"80025","Eldorado Springs","CO","39.92926","-105.28863","-7","1" +"80026","Lafayette","CO","40.002156","-105.10036","-7","1" +"80027","Louisville","CO","39.963322","-105.15053","-7","1" +"80028","Louisville","CO","40.087835","-105.373507","-7","1" +"80030","Westminster","CO","39.830936","-105.03736","-7","1" +"80031","Westminster","CO","39.866785","-105.04143","-7","1" +"80033","Wheat Ridge","CO","39.774341","-105.10036","-7","1" +"80034","Wheat Ridge","CO","39.522014","-105.223945","-7","1" +"80035","Westminster","CO","39.80797","-104.407918","-7","1" +"80036","Westminster","CO","39.80797","-104.407918","-7","1" +"80037","Commerce City","CO","39.80797","-104.407918","-7","1" +"80038","Broomfield","CO","40.087835","-105.373507","-7","1" +"80040","Aurora","CO","39.80797","-104.407918","-7","1" +"80041","Aurora","CO","39.738752","-104.408349","-7","1" +"80042","Aurora","CO","39.80797","-104.407918","-7","1" +"80044","Aurora","CO","39.738752","-104.408349","-7","1" +"80045","Aurora","CO","39.746736","-104.838361","-7","1" +"80046","Aurora","CO","39.738752","-104.408349","-7","1" +"80047","Aurora","CO","39.738752","-104.408349","-7","1" +"80061","Westminster","CO","39.862286","-105.072049","-7","1" +"80101","Agate","CO","39.378712","-104.02409","-7","1" +"80102","Bennett","CO","39.760573","-104.431","-7","1" +"80103","Byers","CO","39.746563","-104.17162","-7","1" +"80104","Castle Rock","CO","39.385141","-104.85962","-7","1" +"80105","Deer Trail","CO","39.631741","-104.01594","-7","1" +"80106","Elbert","CO","39.148692","-104.5635","-7","1" +"80107","Elizabeth","CO","39.397242","-104.58696","-7","1" +"80108","Castle Rock","CO","39.453833","-104.885409","-7","1" +"80109","Castle Rock","CO","39.380857","-104.89947","-7","1" +"80110","Englewood","CO","39.646847","-104.99076","-7","1" +"80111","Englewood","CO","39.610431","-104.88139","-7","1" +"80112","Englewood","CO","39.579454","-104.88288","-7","1" +"80115","Aurora","CO","39.636562","-104.82093","-7","1" +"80116","Franktown","CO","39.355957","-104.7241","-7","1" +"80117","Kiowa","CO","39.382543","-104.42847","-7","1" +"80118","Larkspur","CO","39.206652","-104.90983","-7","1" +"80120","Littleton","CO","39.599687","-105.00658","-7","1" +"80121","Littleton","CO","39.607386","-104.95805","-7","1" +"80122","Littleton","CO","39.582604","-104.95834","-7","1" +"80123","Littleton","CO","39.616114","-105.07393","-7","1" +"80124","Littleton","CO","39.543478","-104.89644","-7","1" +"80125","Littleton","CO","39.479365","-105.06708","-7","1" +"80126","Littleton","CO","39.544549","-104.96808","-7","1" +"80127","Littleton","CO","39.599755","-105.13052","-7","1" +"80128","Littleton","CO","39.576838","-105.07882","-7","1" +"80129","Littleton","CO","39.539556","-105.009739","-7","1" +"80130","Lone Tree","CO","39.541571","-104.92152","-7","1" +"80131","Louviers","CO","39.347863","-104.994708","-7","1" +"80132","Monument","CO","39.098692","-104.8684","-7","1" +"80133","Palmer Lake","CO","39.113371","-104.90493","-7","1" +"80134","Parker","CO","39.508608","-104.78031","-7","1" +"80135","Sedalia","CO","39.340969","-105.05404","-7","1" +"80136","Strasburg","CO","39.776934","-104.30997","-7","1" +"80137","Watkins","CO","39.749664","-104.60811","-7","1" +"80138","Parker","CO","39.523171","-104.70607","-7","1" +"80139","Parker","CO","39.51474","-104.744145","-7","1" +"80150","Englewood","CO","39.738752","-104.408349","-7","1" +"80151","Englewood","CO","39.738752","-104.408349","-7","1" +"80154","Englewood","CO","39.738752","-104.408349","-7","1" +"80155","Englewood","CO","39.738752","-104.408349","-7","1" +"80160","Littleton","CO","39.738752","-104.408349","-7","1" +"80161","Littleton","CO","39.738752","-104.408349","-7","1" +"80162","Littleton","CO","39.522014","-105.223945","-7","1" +"80163","Littleton","CO","39.347863","-104.994708","-7","1" +"80165","Littleton","CO","39.738752","-104.408349","-7","1" +"80166","Littleton","CO","39.738752","-104.408349","-7","1" +"80201","Denver","CO","39.726303","-104.856808","-7","1" +"80202","Denver","CO","39.751586","-104.99699","-7","1" +"80203","Denver","CO","39.731286","-104.98306","-7","1" +"80204","Denver","CO","39.734686","-105.01966","-7","1" +"80205","Denver","CO","39.758986","-104.96678","-7","1" +"80206","Denver","CO","39.731237","-104.95243","-7","1" +"80207","Denver","CO","39.759386","-104.91945","-7","1" +"80208","Denver","CO","39.738752","-104.408349","-7","1" +"80209","Denver","CO","39.706535","-104.96698","-7","1" +"80210","Denver","CO","39.679437","-104.96473","-7","1" +"80211","Denver","CO","39.767536","-105.01973","-7","1" +"80212","Denver","CO","39.770336","-105.04688","-7","1" +"80214","Denver","CO","39.745526","-105.06251","-7","1" +"80215","Denver","CO","39.744437","-105.10441","-7","1" +"80216","Denver","CO","39.784622","-104.96214","-7","1" +"80217","Denver","CO","39.738752","-104.408349","-7","1" +"80218","Denver","CO","39.731237","-104.97133","-7","1" +"80219","Denver","CO","39.698137","-105.03483","-7","1" +"80220","Denver","CO","39.734387","-104.91678","-7","1" +"80221","Denver","CO","39.816536","-105.01123","-7","1" +"80222","Denver","CO","39.669237","-104.92766","-7","1" +"80223","Denver","CO","39.699156","-104.99999","-7","1" +"80224","Denver","CO","39.688437","-104.91348","-7","1" +"80225","Denver","CO","39.69709","-105.12044","-7","1" +"80226","Denver","CO","39.71222","-105.08918","-7","1" +"80227","Denver","CO","39.668576","-105.09191","-7","1" +"80228","Denver","CO","39.688278","-105.14558","-7","1" +"80229","Denver","CO","39.859585","-104.95943","-7","1" +"80230","Denver","CO","39.721763","-104.89627","-7","1" +"80231","Denver","CO","39.681687","-104.88338","-7","1" +"80232","Denver","CO","39.690387","-105.08866","-7","1" +"80233","Denver","CO","39.903043","-104.9544","-7","1" +"80234","Denver","CO","39.9091","-105.00829","-7","1" +"80235","Denver","CO","39.648328","-105.08431","-7","1" +"80236","Denver","CO","39.652454","-105.04089","-7","1" +"80237","Denver","CO","39.643637","-104.90406","-7","1" +"80238","Denver","CO","39.738752","-104.408349","-7","1" +"80239","Denver","CO","39.788236","-104.83034","-7","1" +"80241","Denver","CO","39.929566","-104.94931","-7","1" +"80243","Denver","CO","39.738752","-104.408349","-7","1" +"80244","Denver","CO","39.738752","-104.408349","-7","1" +"80246","Denver","CO","39.705318","-104.93113","-7","1" +"80247","Denver","CO","39.693573","-104.876649","-7","1" +"80248","Denver","CO","39.738752","-104.408349","-7","1" +"80249","Denver","CO","39.793686","-104.73913","-7","1" +"80250","Denver","CO","39.738752","-104.408349","-7","1" +"80251","Denver","CO","39.738752","-104.408349","-7","1" +"80252","Denver","CO","39.738752","-104.408349","-7","1" +"80254","Denver","CO","39.738752","-104.408349","-7","1" +"80255","Denver","CO","39.738752","-104.408349","-7","1" +"80256","Denver","CO","39.74739","-104.992842","-7","1" +"80257","Denver","CO","39.738752","-104.408349","-7","1" +"80259","Denver","CO","39.746239","-104.991334","-7","1" +"80260","Denver","CO","39.868635","-105.00805","-7","1" +"80261","Denver","CO","39.737929","-104.985036","-7","1" +"80262","Denver","CO","39.731038","-104.938391","-7","1" +"80263","Denver","CO","39.738752","-104.408349","-7","1" +"80264","Denver","CO","39.742486","-104.98563","-7","1" +"80265","Denver","CO","39.738752","-104.408349","-7","1" +"80266","Denver","CO","39.747179","-104.991511","-7","1" +"80270","Denver","CO","39.738752","-104.408349","-7","1" +"80271","Denver","CO","39.738752","-104.408349","-7","1" +"80273","Denver","CO","39.727293","-104.987535","-7","1" +"80274","Denver","CO","39.743934","-104.987577","-7","1" +"80275","Denver","CO","39.738752","-104.408349","-7","1" +"80279","Denver","CO","39.738752","-104.408349","-7","1" +"80280","Denver","CO","39.716675","-104.906942","-7","1" +"80281","Denver","CO","39.74394","-104.987577","-7","1" +"80290","Denver","CO","39.744086","-104.98696","-7","1" +"80291","Denver","CO","39.74394","-104.987577","-7","1" +"80292","Denver","CO","39.74739","-104.992842","-7","1" +"80293","Denver","CO","39.746286","-104.99008","-7","1" +"80294","Denver","CO","39.749436","-104.98948","-7","1" +"80295","Denver","CO","39.745486","-104.986336","-7","1" +"80296","Sherrelwood","CO","39.832432","-104.987535","-7","1" +"80299","Denver","CO","39.738752","-104.408349","-7","1" +"80301","Boulder","CO","40.044385","-105.21928","-7","1" +"80302","Boulder","CO","40.020885","-105.29673","-7","1" +"80303","Boulder","CO","39.989135","-105.22883","-7","1" +"80304","Boulder","CO","40.039784","-105.27938","-7","1" +"80305","Boulder","CO","39.979691","-105.252586","-7","1" +"80306","Boulder","CO","40.102219","-105.384694","-7","1" +"80307","Boulder","CO","40.087835","-105.373507","-7","1" +"80308","Boulder","CO","40.027672","-105.3868","-7","1" +"80309","Boulder","CO","40.087835","-105.373507","-7","1" +"80310","Boulder","CO","40.087835","-105.373507","-7","1" +"80314","Boulder","CO","40.087835","-105.373507","-7","1" +"80321","Boulder","CO","40.087835","-105.373507","-7","1" +"80322","Boulder","CO","40.087835","-105.373507","-7","1" +"80323","Boulder","CO","40.087835","-105.373507","-7","1" +"80328","Boulder","CO","40.087835","-105.373507","-7","1" +"80329","Boulder","CO","40.087835","-105.373507","-7","1" +"80401","Golden","CO","39.735745","-105.19337","-7","1" +"80402","Golden","CO","39.522014","-105.223945","-7","1" +"80403","Golden","CO","39.827903","-105.32256","-7","1" +"80419","Golden","CO","39.522014","-105.223945","-7","1" +"80420","Alma","CO","39.293921","-106.06889","-7","1" +"80421","Bailey","CO","39.460306","-105.476","-7","1" +"80422","Black Hawk","CO","39.813744","-105.50875","-7","1" +"80423","Bond","CO","39.871619","-106.57267","-7","1" +"80424","Breckenridge","CO","39.478893","-106.03747","-7","1" +"80425","Buffalo Creek","CO","39.361089","-105.22472","-7","1" +"80426","Burns","CO","39.885527","-106.93018","-7","1" +"80427","Central City","CO","39.804776","-105.53422","-7","1" +"80428","Clark","CO","40.854473","-106.92438","-7","1" +"80429","Climax","CO","39.225758","-106.311697","-7","1" +"80430","Coalmont","CO","40.436948","-106.49424","-7","1" +"80432","Como","CO","39.24344","-105.79431","-7","1" +"80433","Conifer","CO","39.514738","-105.31198","-7","1" +"80434","Cowdrey","CO","40.92301","-106.33104","-7","1" +"80435","Dillon","CO","39.607479","-105.97937","-7","1" +"80436","Dumont","CO","39.766277","-105.61523","-7","1" +"80437","Evergreen","CO","39.522014","-105.223945","-7","1" +"80438","Empire","CO","39.762835","-105.71302","-7","1" +"80439","Evergreen","CO","39.642572","-105.36812","-7","1" +"80440","Fairplay","CO","39.22106","-106.0065","-7","1" +"80442","Fraser","CO","39.949217","-105.83438","-7","1" +"80443","Frisco","CO","39.532506","-106.14029","-7","1" +"80444","Georgetown","CO","39.694915","-105.7258","-7","1" +"80446","Granby","CO","40.142434","-105.95502","-7","1" +"80447","Grand Lake","CO","40.23832","-105.84688","-7","1" +"80448","Grant","CO","39.459109","-105.72873","-7","1" +"80449","Hartsel","CO","38.993175","-105.79916","-7","1" +"80451","Hot Sulphur Springs","CO","40.101485","-106.11862","-7","1" +"80452","Idaho Springs","CO","39.737369","-105.56054","-7","1" +"80453","Idledale","CO","39.668426","-105.244245","-7","1" +"80454","Indian Hills","CO","39.631254","-105.26071","-7","1" +"80455","Jamestown","CO","40.094785","-105.39844","-7","1" +"80456","Jefferson","CO","39.310793","-105.74027","-7","1" +"80457","Kittredge","CO","39.653899","-105.30102","-7","1" +"80459","Kremmling","CO","40.14711","-106.42854","-7","1" +"80461","Leadville","CO","39.231776","-106.31399","-7","1" +"80463","McCoy","CO","39.912186","-106.74302","-7","1" +"80465","Morrison","CO","39.620748","-105.18121","-7","1" +"80466","Nederland","CO","39.964486","-105.50805","-7","1" +"80467","Oak Creek","CO","40.266778","-106.92849","-7","1" +"80468","Parshall","CO","39.967717","-106.16205","-7","1" +"80469","Phippsburg","CO","40.218412","-106.94494","-7","1" +"80470","Pine","CO","39.45658","-105.36876","-7","1" +"80471","Pinecliffe","CO","39.947386","-105.459269","-7","1" +"80473","Rand","CO","40.455817","-106.20137","-7","1" +"80474","Rollinsville","CO","39.908923","-105.57057","-7","1" +"80475","Shawnee","CO","39.439493","-105.602959","-7","1" +"80476","Silver Plume","CO","39.695974","-105.73155","-7","1" +"80477","Steamboat Springs","CO","40.348242","-106.92691","-7","1" +"80478","Tabernash","CO","40.00167","-105.8686","-7","1" +"80479","Toponas","CO","40.041288","-106.8557","-7","1" +"80480","Walden","CO","40.621621","-106.24457","-7","1" +"80481","Ward","CO","40.10613","-105.48044","-7","1" +"80482","Winter Park","CO","39.915508","-105.78359","-7","1" +"80483","Yampa","CO","40.149432","-106.90681","-7","1" +"80487","Steamboat Springs","CO","40.502772","-106.87521","-7","1" +"80488","Steamboat Springs","CO","40.619661","-106.860746","-7","1" +"80497","Silverthorne","CO","39.641146","-106.108002","-7","1" +"80498","Silverthorne","CO","39.722417","-106.13744","-7","1" +"80501","Longmont","CO","40.171484","-105.10033","-7","1" +"80502","Longmont","CO","40.087835","-105.373507","-7","1" +"80503","Longmont","CO","40.156035","-105.17365","-7","1" +"80504","Longmont","CO","40.160138","-105.01772","-7","1" +"80509","Colorado Springs","CO","38.828692","-104.84063","-7","1" +"80510","Allenspark","CO","40.223935","-105.52421","-7","1" +"80511","Estes Park","CO","40.628112","-105.569245","-7","1" +"80512","Bellvue","CO","40.700258","-105.64876","-7","1" +"80513","Berthoud","CO","40.294423","-105.08431","-7","1" +"80514","Dacono","CO","40.083475","-104.93581","-7","1" +"80515","Drake","CO","40.412496","-105.41818","-7","1" +"80516","Erie","CO","40.051051","-105.02767","-7","1" +"80517","Estes Park","CO","40.370415","-105.51722","-7","1" +"80520","Firestone","CO","40.115501","-104.93637","-7","1" +"80521","Fort Collins","CO","40.586282","-105.10494","-7","1" +"80522","Fort Collins","CO","40.642907","-105.057005","-7","1" +"80523","Fort Collins","CO","40.45553","-105.464832","-7","1" +"80524","Fort Collins","CO","40.606962","-105.05106","-7","1" +"80525","Fort Collins","CO","40.532354","-105.0535","-7","1" +"80526","Fort Collins","CO","40.539432","-105.11576","-7","1" +"80527","Fort Collins","CO","40.540565","-105.280009","-7","1" +"80528","Fort Collins","CO","40.502779","-105.01123","-7","1" +"80530","Frederick","CO","40.104211","-104.93576","-7","1" +"80532","Glen Haven","CO","40.497758","-105.43325","-7","1" +"80533","Hygiene","CO","40.181515","-105.232695","-7","1" +"80534","Johnstown","CO","40.335398","-104.91477","-7","1" +"80535","Laporte","CO","40.67069","-105.17388","-7","1" +"80536","Livermore","CO","40.878334","-105.40415","-7","1" +"80537","Loveland","CO","40.383636","-105.10349","-7","1" +"80538","Loveland","CO","40.435645","-105.08726","-7","1" +"80539","Loveland","CO","40.38636","-105.163377","-7","1" +"80540","Lyons","CO","40.253033","-105.33762","-7","1" +"80541","Masonville","CO","40.529278","-105.372014","-7","1" +"80542","Mead","CO","40.234505","-104.99747","-7","1" +"80543","Milliken","CO","40.332926","-104.85394","-7","1" +"80544","Niwot","CO","40.177043","-105.275045","-7","1" +"80545","Red Feather Lakes","CO","40.824993","-105.63525","-7","1" +"80546","Severance","CO","40.524987","-104.850544","-7","1" +"80547","Timnath","CO","40.528966","-104.98083","-7","1" +"80549","Wellington","CO","40.762264","-105.01233","-7","1" +"80550","Windsor","CO","40.47997","-104.90227","-7","1" +"80551","Windsor","CO","40.464092","-104.885116","-7","1" +"80553","Fort Collins","CO","40.628112","-105.569245","-7","1" +"80601","Brighton","CO","39.973251","-104.82407","-7","1" +"80602","Thornton","CO","39.958987","-104.908921","-7","1" +"80603","Lochbuie","CO","39.943831","-104.629665","-7","1" +"80610","Ault","CO","40.61798","-104.66762","-7","1" +"80611","Briggsdale","CO","40.581437","-104.26915","-7","1" +"80612","Carr","CO","40.886476","-104.87448","-7","1" +"80614","Eastlake","CO","39.80797","-104.407918","-7","1" +"80615","Eaton","CO","40.529241","-104.71181","-7","1" +"80620","Evans","CO","40.378019","-104.70357","-7","1" +"80621","Fort Lupton","CO","40.090367","-104.79723","-7","1" +"80622","Galeton","CO","40.536158","-104.500735","-7","1" +"80623","Gilcrest","CO","40.28319","-104.77878","-7","1" +"80624","Gill","CO","40.481168","-104.5151","-7","1" +"80630","Greeley","CO","40.405094","-104.800547","-7","1" +"80631","Greeley","CO","40.421845","-104.69175","-7","1" +"80632","Greeley","CO","40.376626","-104.762899","-7","1" +"80633","Greeley","CO","40.500919","-104.31497","-7","1" +"80634","Greeley","CO","40.407853","-104.75498","-7","1" +"80638","Greeley","CO","40.500919","-104.31497","-7","1" +"80639","Greeley","CO","40.399281","-104.70172","-7","1" +"80640","Henderson","CO","39.885202","-104.88339","-7","1" +"80642","Hudson","CO","40.060539","-104.62943","-7","1" +"80643","Keenesburg","CO","40.078242","-104.49916","-7","1" +"80644","Kersey","CO","40.363777","-104.51964","-7","1" +"80645","La Salle","CO","40.332131","-104.68704","-7","1" +"80646","Lucerne","CO","40.48243","-104.70542","-7","1" +"80648","Nunn","CO","40.746862","-104.76208","-7","1" +"80649","Orchard","CO","40.310272","-104.15685","-7","1" +"80650","Pierce","CO","40.637244","-104.75847","-7","1" +"80651","Platteville","CO","40.228533","-104.84267","-7","1" +"80652","Roggen","CO","40.095142","-104.28784","-7","1" +"80653","Weldona","CO","40.36593","-104.00612","-7","1" +"80654","Wiggins","CO","40.196296","-104.07361","-7","1" +"80701","Fort Morgan","CO","40.226357","-103.80625","-7","1" +"80705","Log Lane Village","CO","40.270801","-103.82915","-7","1" +"80720","Akron","CO","40.124199","-103.18362","-7","1" +"80721","Amherst","CO","40.681557","-102.16663","-7","1" +"80722","Atwood","CO","40.53158","-103.26151","-7","1" +"80723","Brush","CO","40.23045","-103.60824","-7","1" +"80726","Crook","CO","40.888254","-102.78823","-7","1" +"80727","Eckley","CO","40.086896","-102.48265","-7","1" +"80728","Fleming","CO","40.620805","-102.84813","-7","1" +"80729","Grover","CO","40.877461","-104.22705","-7","1" +"80731","Haxtun","CO","40.593911","-102.58831","-7","1" +"80732","Hereford","CO","40.975104","-104.305265","-7","1" +"80733","Hillrose","CO","40.340456","-103.51203","-7","1" +"80734","Holyoke","CO","40.582954","-102.30451","-7","1" +"80735","Idalia","CO","39.709824","-102.24035","-7","1" +"80736","Iliff","CO","40.798956","-103.04649","-7","1" +"80737","Julesburg","CO","40.916929","-102.21858","-7","1" +"80740","Lindon","CO","39.724528","-103.38353","-7","1" +"80741","Merino","CO","40.508131","-103.41815","-7","1" +"80742","New Raymer","CO","40.603869","-103.87807","-7","1" +"80743","Otis","CO","40.215063","-102.95628","-7","1" +"80744","Ovid","CO","40.888124","-102.3726","-7","1" +"80745","Padroni","CO","40.825947","-103.27669","-7","1" +"80746","Paoli","CO","40.610554","-102.472203","-7","1" +"80747","Peetz","CO","40.964518","-103.11162","-7","1" +"80749","Sedgwick","CO","40.86845","-102.54595","-7","1" +"80750","Snyder","CO","40.382063","-103.60936","-7","1" +"80751","Sterling","CO","40.633845","-103.21574","-7","1" +"80754","Stoneham","CO","40.686028","-103.65736","-7","1" +"80755","Vernon","CO","39.940858","-102.36417","-7","1" +"80757","Woodrow","CO","39.836887","-103.61156","-7","1" +"80758","Wray","CO","40.064734","-102.21336","-7","1" +"80759","Yuma","CO","40.169249","-102.69005","-7","1" +"80801","Anton","CO","39.727493","-103.10362","-7","1" +"80802","Arapahoe","CO","38.834807","-102.1746","-7","1" +"80804","Arriba","CO","39.317411","-103.24869","-7","1" +"80805","Bethune","CO","39.302035","-102.44357","-7","1" +"80807","Burlington","CO","39.3124","-102.25094","-7","1" +"80808","Calhan","CO","38.977375","-104.32017","-7","1" +"80809","Cascade","CO","38.911701","-104.98731","-7","1" +"80810","Cheyenne Wells","CO","38.846982","-102.37913","-7","1" +"80812","Cope","CO","39.648325","-102.88722","-7","1" +"80813","Cripple Creek","CO","38.75604","-105.1497","-7","1" +"80814","Divide","CO","38.927344","-105.18746","-7","1" +"80815","Flagler","CO","39.348989","-103.07103","-7","1" +"80816","Florissant","CO","38.876897","-105.30711","-7","1" +"80817","Fountain","CO","38.674013","-104.69627","-7","1" +"80818","Genoa","CO","39.386933","-103.48219","-7","1" +"80819","Green Mountain Falls","CO","38.940813","-105.01363","-7","1" +"80820","Guffey","CO","38.783844","-105.63616","-7","1" +"80821","Hugo","CO","39.020889","-103.48045","-7","1" +"80822","Joes","CO","39.633953","-102.69795","-7","1" +"80823","Karval","CO","38.709972","-103.54469","-7","1" +"80824","Kirk","CO","39.650653","-102.52694","-7","1" +"80825","Kit Carson","CO","38.765737","-102.78889","-7","1" +"80826","Limon","CO","39.041435","-103.604851","-7","1" +"80827","Lake George","CO","39.031989","-105.46846","-7","1" +"80828","Limon","CO","39.273148","-103.69416","-7","1" +"80829","Manitou Springs","CO","38.853663","-104.93485","-7","1" +"80830","Matheson","CO","39.089871","-103.89534","-7","1" +"80831","Peyton","CO","38.96634","-104.54313","-7","1" +"80832","Ramah","CO","39.034273","-104.07125","-7","1" +"80833","Rush","CO","38.694617","-103.96314","-7","1" +"80834","Seibert","CO","39.315812","-102.88573","-7","1" +"80835","Simla","CO","39.172831","-104.08793","-7","1" +"80836","Stratton","CO","39.29782","-102.59745","-7","1" +"80840","U S A F Academy","CO","39.008109","-104.84248","-7","1" +"80841","U S A F Academy","CO","38.82469","-104.562027","-7","1" +"80860","Victor","CO","38.719345","-105.12429","-7","1" +"80861","Vona","CO","39.36479","-102.75387","-7","1" +"80862","Wild Horse","CO","38.922655","-103.02115","-7","1" +"80863","Woodland Park","CO","38.996004","-105.06335","-7","1" +"80864","Yoder","CO","38.688075","-104.17321","-7","1" +"80866","Woodland Park","CO","39.085706","-105.23659","-7","1" +"80901","Colorado Springs","CO","38.861469","-104.857828","-7","1" +"80902","Colorado Springs","CO","38.942365","-104.807081","-7","1" +"80903","Colorado Springs","CO","38.834282","-104.81654","-7","1" +"80904","Colorado Springs","CO","38.850558","-104.86481","-7","1" +"80905","Colorado Springs","CO","38.837542","-104.83632","-7","1" +"80906","Colorado Springs","CO","38.791242","-104.82492","-7","1" +"80907","Colorado Springs","CO","38.873692","-104.81869","-7","1" +"80908","Colorado Springs","CO","39.035216","-104.69575","-7","1" +"80909","Colorado Springs","CO","38.851493","-104.77856","-7","1" +"80910","Colorado Springs","CO","38.813044","-104.77158","-7","1" +"80911","Colorado Springs","CO","38.746807","-104.7232","-7","1" +"80912","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80913","Colorado Springs","CO","38.743871","-104.76387","-7","1" +"80914","Colorado Springs","CO","38.819195","-104.701177","-7","1" +"80915","Colorado Springs","CO","38.858644","-104.70892","-7","1" +"80916","Colorado Springs","CO","38.808934","-104.73823","-7","1" +"80917","Colorado Springs","CO","38.888394","-104.73975","-7","1" +"80918","Colorado Springs","CO","38.916226","-104.76602","-7","1" +"80919","Colorado Springs","CO","38.925451","-104.85255","-7","1" +"80920","Colorado Springs","CO","38.952366","-104.76701","-7","1" +"80921","Colorado Springs","CO","39.044969","-104.83755","-7","1" +"80922","Colorado Springs","CO","38.897344","-104.70145","-7","1" +"80924","Breckenridge","CO","39.527772","-106.039412","-7","1" +"80925","Colorado Springs","CO","38.758252","-104.6555","-7","1" +"80926","Colorado Springs","CO","38.652352","-104.87298","-7","1" +"80928","Colorado Springs","CO","38.629157","-104.45068","-7","1" +"80929","Colorado Springs","CO","38.831149","-104.65178","-7","1" +"80930","Colorado Springs","CO","38.811434","-104.50403","-7","1" +"80931","Colorado Springs","CO","38.953003","-104.60923","-7","1" +"80932","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80933","Colorado Springs","CO","38.939371","-105.011786","-7","1" +"80934","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80935","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80936","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80937","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80940","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80941","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80942","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80943","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80944","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80945","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80946","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80947","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80949","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80950","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80960","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80962","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80970","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80977","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80995","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"80997","Colorado Springs","CO","38.82469","-104.562027","-7","1" +"81001","Pueblo","CO","38.282872","-104.57029","-7","1" +"81002","Pueblo","CO","38.128626","-104.552299","-7","1" +"81003","Pueblo","CO","38.281052","-104.62567","-7","1" +"81004","Pueblo","CO","38.197344","-104.6331","-7","1" +"81005","Pueblo","CO","38.235865","-104.66972","-7","1" +"81006","Pueblo","CO","38.243266","-104.52912","-7","1" +"81007","Pueblo","CO","38.333601","-104.74329","-7","1" +"81008","Pueblo","CO","38.370203","-104.61964","-7","1" +"81009","Pueblo","CO","38.128626","-104.552299","-7","1" +"81010","Pueblo","CO","38.128626","-104.552299","-7","1" +"81011","Pueblo","CO","38.128626","-104.552299","-7","1" +"81012","Pueblo","CO","38.128626","-104.552299","-7","1" +"81013","Pueblo","CO","38.128626","-104.552299","-7","1" +"81014","Pueblo","CO","38.128626","-104.552299","-7","1" +"81015","Pueblo","CO","38.128626","-104.552299","-7","1" +"81019","Colorado City","CO","37.887346","-104.613617","-7","1" +"81020","Aguilar","CO","37.400041","-104.66016","-7","1" +"81021","Arlington","CO","38.414313","-103.37824","-7","1" +"81022","Avondale","CO","38.089719","-104.37807","-7","1" +"81023","Beulah","CO","38.069421","-104.95609","-7","1" +"81024","Boncarbo","CO","37.229888","-104.71063","-7","1" +"81025","Boone","CO","38.243711","-104.23282","-7","1" +"81027","Branson","CO","37.095478","-103.84302","-7","1" +"81029","Campo","CO","37.136682","-102.5296","-7","1" +"81030","Cheraw","CO","38.107901","-103.51113","-7","1" +"81033","Crowley","CO","38.193627","-103.85543","-7","1" +"81034","Crowley","CO","38.317851","-103.779959","-7","1" +"81036","Eads","CO","38.467553","-102.80439","-7","1" +"81038","Fort Lyon","CO","37.955547","-103.072469","-7","1" +"81039","Fowler","CO","38.002861","-104.03445","-7","1" +"81040","Gardner","CO","37.777997","-105.20072","-7","1" +"81041","Granada","CO","37.962678","-102.33025","-7","1" +"81042","Gulnare","CO","37.315263","-104.73461","-7","1" +"81043","Hartman","CO","38.119932","-102.21952","-7","1" +"81044","Hasty","CO","38.039941","-102.94569","-7","1" +"81045","Haswell","CO","38.45313","-103.16965","-7","1" +"81046","Hoehne","CO","37.279584","-104.358375","-7","1" +"81047","Holly","CO","38.060575","-102.19677","-7","1" +"81049","Kim","CO","37.242629","-103.47108","-7","1" +"81050","La Junta","CO","37.995879","-103.54001","-7","1" +"81052","Lamar","CO","38.08759","-102.61855","-7","1" +"81054","Las Animas","CO","38.037435","-103.18631","-7","1" +"81055","La Veta","CO","37.499829","-105.02943","-7","1" +"81057","McClave","CO","38.136132","-102.88325","-7","1" +"81058","Manzanola","CO","38.107593","-103.86848","-7","1" +"81059","Model","CO","37.513166","-104.02959","-7","1" +"81062","Olney Springs","CO","38.193937","-103.92275","-7","1" +"81063","Ordway","CO","38.253191","-103.76209","-7","1" +"81064","Pritchett","CO","37.315497","-102.95462","-7","1" +"81066","Red Wing","CO","37.730256","-105.31806","-7","1" +"81067","Rocky Ford","CO","38.042083","-103.72231","-7","1" +"81069","Rye","CO","37.909758","-104.89892","-7","1" +"81071","Sheridan Lake","CO","38.44672","-102.24844","-7","1" +"81073","Springfield","CO","37.409787","-102.61726","-7","1" +"81074","Starkville","CO","37.121029","-104.523155","-7","1" +"81076","Sugar City","CO","38.26144","-103.67101","-7","1" +"81077","Swink","CO","38.015189","-103.62827","-7","1" +"81079","Colorado City","CO","37.951881","-104.858227","-7","1" +"81081","Trinchera","CO","37.096255","-104.14826","-7","1" +"81082","Trinidad","CO","37.191882","-104.47809","-7","1" +"81084","Two Buttes","CO","37.567773","-102.39192","-7","1" +"81087","Vilas","CO","37.377938","-102.42882","-7","1" +"81089","Walsenburg","CO","37.621071","-104.80456","-7","1" +"81090","Walsh","CO","37.347009","-102.26776","-7","1" +"81091","Weston","CO","37.193451","-104.97188","-7","1" +"81092","Wiley","CO","38.17924","-102.75161","-7","1" +"81101","Alamosa","CO","37.471802","-105.83471","-7","1" +"81102","Alamosa","CO","37.476026","-105.881779","-7","1" +"81120","Antonito","CO","37.086403","-106.08325","-7","1" +"81121","Arboles","CO","37.039131","-107.42271","-7","1" +"81122","Bayfield","CO","37.329743","-107.59026","-7","1" +"81123","Blanca","CO","37.419263","-105.58024","-7","1" +"81124","Capulin","CO","37.291966","-106.12085","-7","1" +"81125","Center","CO","37.773899","-106.08966","-7","1" +"81126","Chama","CO","37.175339","-105.34164","-7","1" +"81127","Chimney Rock","CO","37.218131","-107.34452","-7","1" +"81128","Chromo","CO","37.086533","-106.75491","-7","1" +"81129","Conejos","CO","37.101134","-106.02648","-7","1" +"81130","Creede","CO","37.705276","-106.95429","-7","1" +"81131","Crestone","CO","37.945768","-105.69706","-7","1" +"81132","Del Norte","CO","37.731981","-106.39774","-7","1" +"81133","Fort Garland","CO","37.375698","-105.37293","-7","1" +"81134","Garcia","CO","37.092195","-105.530023","-7","1" +"81135","Homelake","CO","37.615741","-106.375292","-7","1" +"81136","Hooper","CO","37.779885","-105.81264","-7","1" +"81137","Ignacio","CO","37.099348","-107.64223","-7","1" +"81138","Jaroso","CO","37.197731","-105.429395","-7","1" +"81140","La Jara","CO","37.274108","-106.05178","-7","1" +"81141","Manassa","CO","37.144944","-105.90161","-7","1" +"81143","Moffat","CO","38.142453","-105.91579","-7","1" +"81144","Monte Vista","CO","37.569501","-106.14946","-7","1" +"81146","Mosca","CO","37.620038","-105.73101","-7","1" +"81147","Pagosa Springs","CO","37.241179","-107.11287","-7","1" +"81148","Romeo","CO","37.171583","-105.98648","-7","1" +"81149","Saguache","CO","38.120209","-106.22626","-7","1" +"81151","Sanford","CO","37.23354","-105.7477","-7","1" +"81152","San Luis","CO","37.134458","-105.54778","-7","1" +"81153","San Pablo","CO","37.127132","-105.3675","-7","1" +"81154","South Fork","CO","37.671046","-106.63177","-7","1" +"81155","Villa Grove","CO","38.327695","-106.14476","-7","1" +"81157","Pagosa Springs","CO","37.270438","-107.093153","-7","1" +"81201","Salida","CO","38.533464","-106.03468","-7","1" +"81210","Almont","CO","38.778749","-106.62831","-7","1" +"81211","Buena Vista","CO","38.867111","-106.14664","-7","1" +"81212","Canon City","CO","38.464212","-105.27973","-7","1" +"81215","Canon City","CO","38.477563","-105.476577","-7","1" +"81220","Cimarron","CO","38.321598","-107.4166","-7","1" +"81221","Coal Creek","CO","38.36154","-105.14752","-7","1" +"81222","Coaldale","CO","38.374462","-105.76738","-7","1" +"81223","Cotopaxi","CO","38.357344","-105.53192","-7","1" +"81224","Crested Butte","CO","38.865307","-106.96556","-7","1" +"81225","Crested Butte","CO","38.901649","-106.96755","-7","1" +"81226","Florence","CO","38.387091","-105.1226","-7","1" +"81227","Monarch","CO","38.545757","-106.243422","-7","1" +"81228","Granite","CO","39.030747","-106.256615","-7","1" +"81230","Gunnison","CO","38.464132","-106.95776","-7","1" +"81231","Gunnison","CO","38.702309","-106.940201","-7","1" +"81232","Hillside","CO","38.285533","-105.642451","-7","1" +"81233","Howard","CO","38.442267","-105.85054","-7","1" +"81235","Lake City","CO","37.961233","-107.29953","-7","1" +"81236","Nathrop","CO","38.720234","-106.18801","-7","1" +"81237","Ohio City","CO","38.590788","-106.602838","-7","1" +"81239","Parlin","CO","38.618553","-106.54811","-7","1" +"81240","Penrose","CO","38.439499","-105.02111","-7","1" +"81241","Pitkin","CO","38.607617","-106.52037","-7","1" +"81242","Poncha Springs","CO","38.471892","-106.097284","-7","1" +"81243","Powderhorn","CO","38.249778","-107.15542","-7","1" +"81244","Rockvale","CO","38.353064","-105.18642","-7","1" +"81246","Canon City","CO","38.477563","-105.476577","-7","1" +"81247","Gunnison","CO","38.457513","-107.292081","-7","1" +"81248","Sargents","CO","38.410975","-106.47812","-7","1" +"81251","Twin Lakes","CO","39.096394","-106.32916","-7","1" +"81252","Westcliffe","CO","38.130741","-105.45798","-7","1" +"81253","Wetmore","CO","38.186991","-105.07615","-7","1" +"81260","Basalt","CO","39.361605","-107.025486","-7","1" +"81290","Florence","CO","38.358421","-105.106881","-7","1" +"81301","Durango","CO","37.295888","-107.84945","-7","1" +"81302","Durango","CO","37.357249","-107.935945","-7","1" +"81303","Durango","CO","37.222311","-107.653131","-7","1" +"81310","Durango","CO","37.28211","-107.856609","-7","1" +"81320","Cahone","CO","37.696224","-108.78271","-7","1" +"81321","Cortez","CO","37.344985","-108.60355","-7","1" +"81323","Dolores","CO","37.515311","-108.45204","-7","1" +"81324","Dove Creek","CO","37.775543","-108.92455","-7","1" +"81325","Egnar","CO","38.027131","-108.83162","-7","1" +"81326","Hesperus","CO","37.131282","-108.15728","-7","1" +"81327","Lewis","CO","37.534825","-108.65188","-7","1" +"81328","Mancos","CO","37.363564","-108.29691","-7","1" +"81329","Marvel","CO","37.092605","-108.125194","-7","1" +"81330","Mesa Verde National Park","CO","37.237814","-108.50424","-7","1" +"81331","Pleasant View","CO","37.590205","-108.76998","-7","1" +"81332","Rico","CO","37.713158","-108.02585","-7","1" +"81334","Towaoc","CO","37.178946","-108.88769","-7","1" +"81335","Yellow Jacket","CO","37.508184","-108.78311","-7","1" +"81401","Montrose","CO","38.436409","-107.8625","-7","1" +"81402","Montrose","CO","38.485093","-107.885975","-7","1" +"81410","Austin","CO","38.79053","-107.97404","-7","1" +"81411","Bedrock","CO","38.318109","-108.92858","-7","1" +"81413","Cedaredge","CO","38.941926","-107.92669","-7","1" +"81414","Cory","CO","38.788697","-107.986174","-7","1" +"81415","Crawford","CO","38.636112","-107.59315","-7","1" +"81416","Delta","CO","38.733901","-108.08219","-7","1" +"81418","Eckert","CO","38.842439","-107.96085","-7","1" +"81419","Hotchkiss","CO","38.819199","-107.73704","-7","1" +"81420","Lazear","CO","38.781745","-107.780778","-7","1" +"81421","Maher","CO","38.942927","-107.939831","-7","1" +"81422","Naturita","CO","38.296229","-108.68079","-7","1" +"81423","Norwood","CO","38.082231","-108.2586","-7","1" +"81424","Nucla","CO","38.29545","-108.50164","-7","1" +"81425","Olathe","CO","38.605432","-108.0098","-7","1" +"81426","Ophir","CO","37.860092","-107.86975","-7","1" +"81427","Ouray","CO","38.016388","-107.67438","-7","1" +"81428","Paonia","CO","38.877695","-107.58799","-7","1" +"81429","Paradox","CO","38.371101","-108.969823","-7","1" +"81430","Placerville","CO","38.08677","-108.00332","-7","1" +"81431","Redvale","CO","38.153484","-108.43921","-7","1" +"81432","Ridgway","CO","38.131449","-107.77322","-7","1" +"81433","Silverton","CO","37.868294","-107.62223","-7","1" +"81434","Somerset","CO","38.994185","-107.35526","-7","1" +"81435","Telluride","CO","37.932874","-107.88874","-7","1" +"81501","Grand Junction","CO","39.072831","-108.55","-7","1" +"81502","Grand Junction","CO","39.017876","-108.481354","-7","1" +"81503","Grand Junction","CO","39.059221","-108.58311","-7","1" +"81504","Grand Junction","CO","39.085481","-108.49019","-7","1" +"81505","Grand Junction","CO","39.112514","-108.60506","-7","1" +"81506","Grand Junction","CO","39.106039","-108.54679","-7","1" +"81516","Snowmass Village","CO","39.225729","-106.937134","-7","1" +"81520","Clifton","CO","39.085981","-108.44444","-7","1" +"81521","Fruita","CO","39.159971","-108.72071","-7","1" +"81522","Gateway","CO","38.715101","-109.01087","-7","1" +"81523","Glade Park","CO","38.958934","-108.85126","-7","1" +"81524","Loma","CO","39.238633","-108.78893","-7","1" +"81525","Mack","CO","39.244427","-108.93781","-7","1" +"81526","Palisade","CO","39.1013","-108.367","-7","1" +"81527","Whitewater","CO","38.833235","-108.58155","-7","1" +"81601","Glenwood Springs","CO","39.533318","-107.32107","-7","1" +"81602","Glenwood Springs","CO","39.511742","-107.325336","-7","1" +"81610","Dinosaur","CO","40.334542","-108.76266","-7","1" +"81611","Aspen","CO","39.196857","-106.8191","-7","1" +"81612","Aspen","CO","39.223416","-106.882774","-7","1" +"81613","Snowmass Village","CO","39.212626","-106.941907","-7","1" +"81615","Snowmass Village","CO","39.214104","-106.94528","-7","1" +"81620","Avon","CO","39.63298","-106.51534","-7","1" +"81621","Basalt","CO","39.379423","-106.97082","-7","1" +"81623","Carbondale","CO","39.335504","-107.1882","-7","1" +"81624","Collbran","CO","39.220166","-107.93414","-7","1" +"81625","Craig","CO","40.566113","-107.60818","-7","1" +"81626","Craig","CO","40.667669","-107.783276","-7","1" +"81628","El Jebel","CO","39.39787","-107.089239","-7","1" +"81630","De Beque","CO","39.378823","-108.34069","-7","1" +"81631","Eagle","CO","39.622314","-106.7751","-7","1" +"81632","Edwards","CO","39.620748","-106.6148","-7","1" +"81633","Dinosaur","CO","40.377031","-108.398991","-7","1" +"81635","Parachute","CO","39.493283","-108.11571","-7","1" +"81636","Battlement Mesa","CO","39.430535","-108.023924","-7","1" +"81637","Gypsum","CO","39.690233","-107.02552","-7","1" +"81638","Hamilton","CO","40.298366","-107.51756","-7","1" +"81639","Hayden","CO","40.48806","-107.26093","-7","1" +"81640","Maybell","CO","40.594344","-108.39974","-7","1" +"81641","Meeker","CO","40.042797","-107.92158","-7","1" +"81642","Meredith","CO","39.342438","-106.63444","-7","1" +"81643","Mesa","CO","39.102266","-108.16033","-7","1" +"81645","Minturn","CO","39.459323","-106.37859","-7","1" +"81646","Molina","CO","39.139927","-108.00498","-7","1" +"81647","New Castle","CO","39.567059","-107.54974","-7","1" +"81648","Rangely","CO","40.011447","-108.77528","-7","1" +"81649","Red Cliff","CO","39.451885","-106.32403","-7","1" +"81650","Rifle","CO","39.603225","-107.89755","-7","1" +"81652","Silt","CO","39.508481","-107.66873","-7","1" +"81653","Slater","CO","40.929768","-107.18886","-7","1" +"81654","Snowmass","CO","39.254607","-106.97888","-7","1" +"81655","Wolcott","CO","39.731182","-106.62705","-7","1" +"81656","Woody Creek","CO","39.30179","-106.81878","-7","1" +"81657","Vail","CO","39.634566","-106.37077","-7","1" +"81658","Vail","CO","39.624171","-106.497314","-7","1" +"82001","Cheyenne","WY","41.141281","-104.80208","-7","1" +"82002","Cheyenne","WY","41.327351","-104.666365","-7","1" +"82003","Cheyenne","WY","41.219107","-104.661244","-7","1" +"82005","Fe Warren AFB","WY","41.139057","-104.862947","-7","1" +"82006","Cheyenne","WY","41.327351","-104.666365","-7","1" +"82007","Cheyenne","WY","41.101731","-104.80582","-7","1" +"82008","Cheyenne","WY","41.327351","-104.666365","-7","1" +"82009","Cheyenne","WY","41.275932","-104.88279","-7","1" +"82010","Cheyenne","WY","41.327351","-104.666365","-7","1" +"82050","Albin","WY","41.425769","-104.18805","-7","1" +"82051","Bosler","WY","41.601379","-105.65207","-7","1" +"82052","Buford","WY","41.105595","-105.3549","-7","1" +"82053","Burns","WY","41.209041","-104.35907","-7","1" +"82054","Carpenter","WY","41.064212","-104.34107","-7","1" +"82055","Centennial","WY","41.33144","-106.17649","-7","1" +"82058","Garrett","WY","42.22772","-105.66184","-7","1" +"82059","Granite Canon","WY","41.051097","-105.19216","-7","1" +"82060","Hillsdale","WY","41.210012","-104.48095","-7","1" +"82061","Horse Creek","WY","41.422733","-105.19881","-7","1" +"82063","Jelm","CO","40.932966","-105.87705","-7","1" +"82070","Laramie","WY","41.232815","-105.75364","-7","1" +"82071","Laramie","WY","41.715061","-105.797388","-7","1" +"82072","Laramie","WY","41.344843","-105.58626","-7","1" +"82073","Laramie","WY","41.307065","-105.624667","-7","1" +"82081","Meriden","WY","41.552531","-104.39118","-7","1" +"82082","Pine Bluffs","NE","41.181106","-104.00078","-7","1" +"82083","Rock River","WY","41.724691","-105.99071","-7","1" +"82084","Tie Siding","WY","41.024827","-105.46188","-7","1" +"82190","Yellowstone National Park","WY","44.890668","-110.89421","-7","1" +"82201","Wheatland","WY","42.038694","-105.05069","-7","1" +"82210","Chugwater","WY","41.742212","-104.82923","-7","1" +"82212","Fort Laramie","WY","42.321548","-104.53453","-7","1" +"82213","Glendo","WY","42.489239","-104.97591","-7","1" +"82214","Guernsey","WY","42.27774","-104.76034","-7","1" +"82215","Hartville","WY","42.382338","-104.71135","-7","1" +"82217","Hawk Springs","WY","41.76916","-104.24488","-7","1" +"82218","Huntley","WY","41.865935","-104.11451","-7","1" +"82219","Jay Em","WY","42.507335","-104.4242","-7","1" +"82221","Lagrange","WY","41.646277","-104.2877","-7","1" +"82222","Lance Creek","WY","43.149226","-104.61635","-7","1" +"82223","Lingle","WY","42.121155","-104.37708","-7","1" +"82224","Lost Springs","WY","42.792664","-104.94156","-7","1" +"82225","Lusk","WY","43.034269","-104.35784","-7","1" +"82226","Lusk","WY","42.757317","-104.448288","-7","1" +"82227","Manville","WY","42.785056","-104.75034","-7","1" +"82229","Shawnee","WY","42.787675","-105.063337","-7","1" +"82240","Torrington","WY","42.119328","-104.19228","-7","1" +"82242","Van Tassell","WY","42.706475","-104.12045","-7","1" +"82243","Veteran","WY","41.979994","-104.38969","-7","1" +"82244","Yoder","WY","41.907756","-104.3721","-7","1" +"82301","Rawlins","WY","41.971581","-107.29475","-7","1" +"82310","Jeffrey City","WY","42.444748","-107.7646","-7","1" +"82321","Baggs","WY","41.347337","-107.71062","-7","1" +"82322","Bairoil","WY","42.180259","-107.73911","-7","1" +"82323","Dixon","WY","41.034747","-107.53257","-7","1" +"82324","Elk Mountain","WY","41.620507","-106.43594","-7","1" +"82325","Encampment","WY","41.159654","-106.66284","-7","1" +"82327","Hanna","WY","42.041677","-106.60352","-7","1" +"82329","Medicine Bow","WY","42.196315","-106.32113","-7","1" +"82331","Saratoga","WY","41.475612","-106.75888","-7","1" +"82332","Savery","WY","41.330666","-107.23106","-7","1" +"82334","Sinclair","WY","41.780239","-107.117226","-7","1" +"82335","Walcott","WY","41.804594","-106.78063","-7","1" +"82336","Wamsutter","WY","41.765078","-108.16076","-7","1" +"82354","Sinclair","WY","41.778225","-107.119867","-7","1" +"82401","Worland","WY","43.993124","-107.97365","-7","1" +"82410","Basin","WY","44.369517","-108.04905","-7","1" +"82411","Burlington","WY","44.436009","-108.44195","-7","1" +"82412","Byron","WY","44.794477","-108.53415","-7","1" +"82414","Cody","WY","44.566114","-109.20826","-7","1" +"82420","Cowley","WY","44.929728","-108.45634","-7","1" +"82421","Deaver","WY","44.909434","-108.58917","-7","1" +"82422","Emblem","WY","44.498455","-108.3809","-7","1" +"82423","Frannie","WY","44.979667","-108.64076","-7","1" +"82426","Greybull","WY","44.500759","-108.03102","-7","1" +"82427","Hamilton Dome","WY","43.76976","-108.454106","-7","1" +"82428","Hyattville","WY","44.255087","-107.63702","-7","1" +"82430","Kirby","WY","43.808024","-108.18385","-7","1" +"82431","Lovell","WY","44.791974","-108.32833","-7","1" +"82432","Manderson","WY","44.24825","-107.9263","-7","1" +"82433","Meeteetse","WY","44.20528","-108.92718","-7","1" +"82434","Otto","WY","44.396661","-108.28605","-7","1" +"82435","Powell","WY","44.789953","-108.86789","-7","1" +"82440","Ralston","WY","44.718546","-108.86538","-7","1" +"82441","Shell","WY","44.632199","-107.67034","-7","1" +"82442","Ten Sleep","WY","43.885863","-107.36569","-7","1" +"82443","Thermopolis","WY","43.694009","-108.31942","-7","1" +"82450","Wapiti","WY","44.463071","-109.415501","-7","1" +"82501","Riverton","WY","43.013826","-108.34879","-7","1" +"82504","Vista West","WY","42.878665","-106.438937","-7","1" +"82510","Arapahoe","WY","42.981091","-108.60194","-7","1" +"82512","Crowheart","WY","43.428698","-109.21806","-7","1" +"82513","Dubois","WY","43.557529","-109.70709","-7","1" +"82514","Fort Washakie","WY","42.971973","-108.92886","-7","1" +"82515","Hudson","WY","42.86682","-108.53339","-7","1" +"82516","Kinnear","WY","43.14687","-108.89349","-7","1" +"82520","Lander","WY","42.729832","-108.63154","-7","1" +"82523","Pavillion","WY","43.312211","-108.56038","-7","1" +"82524","Saint Stephens","WY","42.998588","-108.57191","-7","1" +"82601","Casper","WY","42.896822","-106.29799","-7","1" +"82602","Casper","WY","42.889576","-106.35696","-7","1" +"82604","Casper","WY","42.791242","-106.53986","-7","1" +"82605","Casper","WY","42.966192","-106.807047","-7","1" +"82609","Casper","WY","42.844915","-106.27255","-7","1" +"82615","Shirley Basin","WY","41.71694","-106.999195","-7","1" +"82620","Alcova","WY","42.65723","-107.12523","-7","1" +"82630","Arminto","WY","42.966192","-106.807047","-7","1" +"82631","Bill","WY","42.894249","-105.485243","-7","1" +"82633","Douglas","WY","42.935874","-105.37303","-7","1" +"82635","Edgerton","WY","43.410459","-106.2421","-7","1" +"82636","Evansville","WY","42.828639","-106.15952","-7","1" +"82637","Glenrock","WY","42.796442","-105.91078","-7","1" +"82638","Hiland","WY","42.966192","-106.807047","-7","1" +"82639","Kaycee","WY","43.602698","-106.65945","-7","1" +"82640","Linch","WY","43.551448","-106.14153","-7","1" +"82642","Lysite","WY","43.228052","-107.68195","-7","1" +"82643","Midwest","WY","43.363864","-106.27476","-7","1" +"82644","Mills","WY","42.842615","-106.37103","-7","1" +"82646","Natrona","WY","42.966192","-106.807047","-7","1" +"82648","Powder River","WY","42.966192","-106.807047","-7","1" +"82649","Shoshoni","WY","43.232318","-108.15555","-7","1" +"82701","Newcastle","WY","43.738237","-104.44387","-7","1" +"82703","Laramie","WY","41.327892","-105.616339","-7","1" +"82710","Aladdin","WY","44.776684","-104.22425","-7","1" +"82711","Alva","WY","44.706167","-104.45138","-7","1" +"82712","Beulah","WY","44.447058","-104.12853","-7","1" +"82713","Carlile","WY","44.525891","-104.767846","-7","1" +"82714","Devils Tower","WY","44.553925","-104.68992","-7","1" +"82715","Four Corners","WY","43.840033","-104.568128","-7","1" +"82716","Gillette","WY","44.356533","-105.52661","-7","1" +"82717","Gillette","WY","44.374954","-105.38624","-7","1" +"82718","Gillette","WY","43.939968","-105.52445","-7","1" +"82720","Hulett","WY","44.81103","-104.72952","-7","1" +"82721","Moorcroft","WY","44.453553","-104.92334","-7","1" +"82723","Osage","WY","43.992349","-104.45121","-7","1" +"82725","Recluse","WY","44.876211","-105.74228","-7","1" +"82727","Rozet","WY","44.221574","-105.23842","-7","1" +"82729","Sundance","WY","44.376421","-104.398","-7","1" +"82730","Upton","WY","44.062053","-104.71043","-7","1" +"82731","Weston","WY","44.799642","-105.24695","-7","1" +"82732","Wright","WY","43.715486","-105.35878","-7","1" +"82779","Sundance","WY","44.408744","-104.371298","-7","1" +"82801","Sheridan","WY","44.801249","-106.96782","-7","1" +"82831","Arvada","WY","44.681337","-106.08209","-7","1" +"82832","Banner","WY","44.602518","-106.76367","-7","1" +"82833","Big Horn","WY","44.615453","-107.10625","-7","1" +"82834","Buffalo","WY","44.301141","-106.67638","-7","1" +"82835","Clearmont","WY","44.770838","-106.42404","-7","1" +"82836","Dayton","WY","44.787512","-107.48172","-7","1" +"82837","Leiter","WY","44.74323","-106.23963","-7","1" +"82838","Parkman","WY","44.947602","-107.38903","-7","1" +"82839","Ranchester","WY","44.889239","-107.14202","-7","1" +"82840","Saddlestring","WY","44.497609","-106.870963","-7","1" +"82842","Story","WY","44.576978","-106.9081","-7","1" +"82844","Wolf","WY","44.788759","-107.21937","-7","1" +"82845","Wyarno","WY","44.725332","-106.66324","-7","1" +"82901","Rock Springs","WY","41.594542","-109.16304","-7","1" +"82902","Rock Springs","WY","41.631408","-108.963931","-7","1" +"82922","Bondurant","WY","43.1856","-110.38625","-7","1" +"82923","Boulder","WY","42.75073","-109.61933","-7","1" +"82925","Cora","WY","43.081275","-109.92672","-7","1" +"82929","Little America","WY","41.587387","-109.82274","-7","1" +"82930","Evanston","WY","41.267546","-110.90607","-7","1" +"82931","Evanston","WY","41.261943","-110.919995","-7","1" +"82932","Farson","WY","42.026986","-109.40903","-7","1" +"82933","Fort Bridger","WY","41.299766","-110.43728","-7","1" +"82934","Granger","WY","41.610852","-109.97361","-7","1" +"82935","Green River","WY","41.659162","-109.63919","-7","1" +"82936","Lontetree","WY","41.081086","-110.22391","-7","1" +"82937","Lyman","WY","41.399751","-110.36624","-7","1" +"82938","McKinnon","WY","41.181959","-109.48709","-7","1" +"82939","Mountain View","WY","41.246498","-110.33778","-7","1" +"82941","Pinedale","WY","42.874606","-109.85694","-7","1" +"82942","Point Of Rocks","WY","41.689968","-108.81963","-7","1" +"82943","Reliance","WY","41.702635","-109.22044","-7","1" +"82944","Robertson","WY","41.10401","-110.53733","-7","1" +"82945","Superior","WY","41.761851","-108.97139","-7","1" +"83001","Jackson","WY","43.468383","-110.75714","-7","1" +"83002","Jackson","WY","43.50537","-110.786527","-7","1" +"83011","Kelly","WY","43.639867","-110.57908","-7","1" +"83012","Moose","WY","43.701492","-110.83215","-7","1" +"83013","Moran","WY","44.04215","-110.97876","-7","1" +"83014","Wilson","WY","43.520413","-110.86418","-7","1" +"83025","Teton Village","WY","43.443851","-110.694002","-7","1" +"83101","Kemmerer","WY","41.890875","-110.40687","-7","1" +"83110","Afton","WY","42.681301","-110.92196","-7","1" +"83111","Auburn","WY","42.801664","-111.0048","-7","1" +"83112","Bedford","WY","42.877387","-110.92859","-7","1" +"83113","Big Piney","WY","42.557035","-110.11482","-7","1" +"83114","Cokeville","WY","42.039281","-110.85188","-7","1" +"83115","Daniel","WY","42.926318","-110.18889","-7","1" +"83116","Diamondville","WY","41.779266","-110.53868","-7","1" +"83118","Etna","WY","43.062245","-111.01917","-7","1" +"83119","Fairview","WY","42.683338","-110.99847","-7","1" +"83120","Freedom","ID","43.001889","-111.0932","-7","1" +"83121","Frontier","WY","41.814385","-110.53743","-7","1" +"83122","Grover","WY","42.803357","-110.93182","-7","1" +"83123","La Barge","WY","42.243979","-110.24195","-7","1" +"83124","Opal","WY","41.767699","-110.27732","-7","1" +"83126","Smoot","WY","42.607888","-110.91808","-7","1" +"83127","Thayne","WY","42.96067","-110.98262","-7","1" +"83128","Alpine","WY","43.129462","-110.93247","-7","1" +"83201","Pocatello","ID","42.883214","-112.43968","-7","1" +"83202","Pocatello","ID","42.96866","-112.43182","-7","1" +"83203","Fort Hall","ID","43.040466","-112.48638","-7","1" +"83204","Pocatello","ID","42.847727","-112.50329","-7","1" +"83205","Pocatello","ID","42.80616","-112.410283","-7","1" +"83206","Pocatello","ID","42.639474","-112.313836","-7","1" +"83209","Pocatello","ID","42.639474","-112.313836","-7","1" +"83210","Aberdeen","ID","42.97228","-112.83218","-7","1" +"83211","American Falls","ID","42.75159","-112.91931","-7","1" +"83212","Arbon","ID","42.514471","-112.54626","-7","1" +"83213","Arco","ID","43.65183","-113.31639","-7","1" +"83214","Arimo","ID","42.539952","-112.23971","-7","1" +"83215","Atomic City","ID","43.442618","-112.81316","-7","1" +"83217","Bancroft","ID","42.768812","-111.87207","-7","1" +"83218","Basalt","ID","43.317823","-112.16356","-7","1" +"83220","Bern","ID","42.339083","-111.37641","-7","1" +"83221","Blackfoot","ID","43.211238","-112.39454","-7","1" +"83223","Bloomington","ID","42.188641","-111.40853","-7","1" +"83226","Challis","ID","44.53742","-114.18803","-7","1" +"83227","Clayton","ID","44.20719","-114.5981","-7","1" +"83228","Clifton","ID","42.213131","-112.01429","-7","1" +"83229","Cobalt","ID","44.968059","-113.816735","-7","1" +"83230","Conda","ID","42.719102","-111.596651","-7","1" +"83232","Dayton","ID","42.129892","-111.97605","-7","1" +"83233","Dingle","ID","42.177359","-111.217381","-7","1" +"83234","Downey","ID","42.43627","-112.11647","-7","1" +"83235","Ellis","ID","44.633935","-113.99217","-7","1" +"83236","Firth","ID","43.287888","-112.12765","-7","1" +"83237","Franklin","ID","42.021688","-111.79977","-7","1" +"83238","Geneva","ID","42.324873","-111.09002","-7","1" +"83239","Georgetown","ID","42.483479","-111.35333","-7","1" +"83241","Grace","ID","42.525021","-111.7509","-7","1" +"83243","Holbrook","ID","42.217418","-112.64211","-7","1" +"83244","Howe","ID","43.854175","-113.04362","-7","1" +"83245","Inkom","ID","42.79471","-112.23562","-7","1" +"83246","Lava Hot Springs","ID","42.616477","-112.01889","-7","1" +"83250","McCammon","ID","42.659404","-112.21484","-7","1" +"83251","Mackay","ID","43.969772","-113.74907","-7","1" +"83252","Malad City","ID","42.192579","-112.32902","-7","1" +"83253","May","ID","44.486997","-113.80293","-7","1" +"83254","Montpelier","ID","42.327996","-111.32637","-7","1" +"83255","Moore","ID","43.774709","-113.45086","-7","1" +"83256","Moreland","ID","43.222648","-112.442253","-7","1" +"83261","Paris","ID","42.22771","-111.39651","-7","1" +"83262","Pingree","ID","43.115708","-112.59511","-7","1" +"83263","Preston","ID","42.165399","-111.82369","-7","1" +"83271","Rockland","ID","42.542266","-112.84484","-7","1" +"83272","Saint Charles","ID","42.127915","-111.3922","-7","1" +"83274","Shelley","ID","43.366017","-112.11712","-7","1" +"83276","Soda Springs","ID","42.693133","-111.57731","-7","1" +"83277","Springfield","ID","43.074319","-112.68229","-7","1" +"83278","Stanley","ID","44.248203","-114.93551","-7","1" +"83281","Swanlake","ID","42.305798","-111.96206","-7","1" +"83283","Thatcher","ID","42.344123","-111.67297","-7","1" +"83285","Wayan","ID","43.027278","-111.22042","-7","1" +"83286","Weston","ID","42.055593","-111.98144","-7","1" +"83287","Fish Haven","ID","42.021829","-111.42742","-7","1" +"83301","Twin Falls","ID","42.530288","-114.47509","-7","1" +"83302","Rogerson","ID","42.096094","-115.02366","-7","1" +"83303","Twin Falls","ID","42.456273","-114.519536","-7","1" +"83311","Albion","ID","42.390977","-113.59744","-7","1" +"83312","Almo","ID","42.08685","-113.64135","-7","1" +"83313","Bellevue","ID","43.39918","-114.25865","-7","1" +"83314","Bliss","ID","42.937947","-114.95287","-7","1" +"83316","Buhl","ID","42.596953","-114.81886","-7","1" +"83318","Burley","ID","42.496588","-113.79857","-7","1" +"83320","Carey","ID","43.356224","-113.89078","-7","1" +"83321","Castleford","ID","42.371508","-114.90993","-7","1" +"83322","Corral","ID","43.377947","-114.96964","-7","1" +"83323","Declo","ID","42.510364","-113.41808","-7","1" +"83324","Dietrich","ID","42.883302","-114.2441","-7","1" +"83325","Eden","ID","42.59465","-114.25578","-7","1" +"83327","Fairfield","ID","43.365909","-114.77559","-7","1" +"83328","Filer","ID","42.565542","-114.61919","-7","1" +"83330","Gooding","ID","42.944346","-114.70605","-7","1" +"83332","Hagerman","ID","42.811892","-114.9251","-7","1" +"83333","Hailey","ID","43.527659","-114.31153","-7","1" +"83334","Hansen","ID","42.482046","-114.299","-7","1" +"83335","Hazelton","ID","42.599276","-114.05941","-7","1" +"83336","Heyburn","ID","42.562839","-113.7864","-7","1" +"83337","Hill City","ID","43.312973","-115.04088","-7","1" +"83338","Jerome","ID","42.710124","-114.46394","-7","1" +"83340","Ketchum","ID","43.750744","-114.5198","-7","1" +"83341","Kimberly","ID","42.509557","-114.37441","-7","1" +"83342","Malta","ID","42.232525","-113.35296","-7","1" +"83343","Minidoka","ID","42.772955","-113.509762","-7","1" +"83344","Murtaugh","ID","42.444159","-114.12157","-7","1" +"83346","Oakley","ID","42.261085","-113.8869","-7","1" +"83347","Paul","ID","42.71554","-113.86281","-7","1" +"83348","Picabo","ID","43.304395","-114.06444","-7","1" +"83349","Richfield","ID","43.078896","-114.18795","-7","1" +"83350","Rupert","ID","42.671054","-113.62976","-7","1" +"83352","Shoshone","ID","43.036666","-114.40997","-7","1" +"83353","Sun Valley","ID","43.661373","-114.18191","-7","1" +"83354","Sun Valley","ID","43.681156","-114.33214","-7","1" +"83355","Wendell","ID","42.76079","-114.71025","-7","1" +"83401","Idaho Falls","ID","43.528891","-111.98136","-7","1" +"83402","Idaho Falls","ID","43.497685","-112.07391","-7","1" +"83403","Idaho Falls","ID","43.421132","-111.333376","-7","1" +"83404","Idaho Falls","ID","43.465998","-112.01425","-7","1" +"83405","Idaho Falls","ID","43.323306","-111.782152","-7","1" +"83406","Idaho Falls","ID","43.458004","-111.95925","-7","1" +"83415","Idaho Falls","ID","43.323306","-111.782152","-7","1" +"83420","Ashton","ID","44.060947","-111.40548","-7","1" +"83421","Chester","ID","44.004709","-111.55527","-7","1" +"83422","Driggs","ID","43.726688","-111.11484","-7","1" +"83423","Dubois","ID","44.164718","-112.34258","-7","1" +"83424","Felt","ID","43.882935","-111.21512","-7","1" +"83425","Hamer","ID","43.951754","-112.23219","-7","1" +"83427","Iona","ID","43.403744","-111.83881","-7","1" +"83428","Irwin","ID","43.369671","-111.23417","-7","1" +"83429","Island Park","ID","44.490674","-111.36631","-7","1" +"83431","Lewisville","ID","43.694827","-112.01477","-7","1" +"83433","Macks Inn","ID","44.496112","-111.32682","-7","1" +"83434","Menan","ID","43.759605","-111.99508","-7","1" +"83435","Monteview","ID","43.964437","-112.54642","-7","1" +"83436","Newdale","ID","43.879722","-111.49617","-7","1" +"83438","Parker","ID","44.319199","-111.60171","-7","1" +"83440","Rexburg","ID","43.80991","-111.80942","-7","1" +"83441","Rexburg","ID","43.776095","-111.691047","-7","1" +"83442","Rigby","ID","43.67511","-111.87407","-7","1" +"83443","Ririe","ID","43.570104","-111.59911","-7","1" +"83444","Roberts","ID","43.722695","-112.15002","-7","1" +"83445","Saint Anthony","ID","43.957025","-111.70208","-7","1" +"83446","Spencer","ID","44.397984","-112.20206","-7","1" +"83447","Squirrel","ID","44.319199","-111.60171","-7","1" +"83448","Sugar City","ID","43.860023","-111.70879","-7","1" +"83449","Swan Valley","ID","43.450364","-111.33201","-7","1" +"83450","Terreton","ID","43.857435","-112.42474","-7","1" +"83451","Teton","ID","43.890719","-111.64522","-7","1" +"83452","Tetonia","ID","43.81958","-111.16768","-7","1" +"83454","Ucon","ID","43.593567","-111.957274","-7","1" +"83455","Victor","ID","43.636332","-111.14842","-7","1" +"83460","Rexburg","ID","43.776095","-111.691047","-7","1" +"83462","Carmen","ID","45.338175","-113.8584","-7","1" +"83463","Gibbonsville","ID","45.593774","-113.9625","-7","1" +"83464","Leadore","ID","44.525291","-113.29547","-7","1" +"83465","Lemhi","ID","44.817505","-113.67277","-7","1" +"83466","North Fork","ID","45.486818","-114.07866","-7","1" +"83467","Salmon","ID","45.101697","-113.90306","-7","1" +"83468","Tendoy","ID","44.926709","-113.68966","-7","1" +"83469","Shoup","ID","45.234391","-114.31565","-7","1" +"83501","Lewiston","ID","46.388753","-116.98484","-8","1" +"83520","Ahsahka","ID","46.505902","-116.3187","-8","1" +"83522","Cottonwood","ID","46.041157","-116.38568","-8","1" +"83523","Craigmont","ID","46.223309","-116.48168","-8","1" +"83524","Culdesac","ID","46.363204","-116.63906","-8","1" +"83525","Elk City","ID","45.920694","-115.25273","-8","1" +"83526","Ferdinand","ID","46.154136","-116.40471","-8","1" +"83530","Grangeville","ID","45.923869","-116.13146","-8","1" +"83531","Fenn","ID","45.889314","-115.557407","-8","1" +"83533","Greencreek","ID","46.106803","-116.25403","-8","1" +"83534","Culdesac","ID","46.375238","-116.666843","-8","1" +"83535","Juliaetta","ID","46.542771","-116.7202","-8","1" +"83536","Kamiah","ID","46.224145","-116.03726","-8","1" +"83537","Kendrick","ID","46.635799","-116.54146","-8","1" +"83539","Kooskia","ID","46.122654","-115.72485","-8","1" +"83540","Lapwai","ID","46.39708","-116.78649","-8","1" +"83541","Lenore","ID","46.52808","-116.46896","-8","1" +"83542","Lucile","ID","45.548413","-116.301","-8","1" +"83543","Nezperce","ID","46.256652","-116.24922","-8","1" +"83544","Orofino","ID","46.485334","-116.20071","-8","1" +"83545","Peck","ID","46.460115","-116.43823","-8","1" +"83546","Pierce","ID","46.525642","-115.82276","-8","1" +"83547","Pollock","ID","45.291282","-116.35695","-7","1" +"83548","Reubens","ID","46.332945","-116.52939","-8","1" +"83549","Riggins","ID","45.405792","-116.36431","-7","1" +"83551","Spalding","ID","46.400349","-116.804544","-8","1" +"83552","Stites","ID","46.093893","-115.9769","-8","1" +"83553","Weippe","ID","46.368447","-115.90101","-8","1" +"83554","White Bird","ID","45.717554","-116.26936","-8","1" +"83555","Winchester","ID","46.216165","-116.62363","-8","1" +"83601","Atlanta","ID","43.801588","-115.13085","-7","1" +"83602","Banks","ID","44.066434","-116.13976","-7","1" +"83604","Bruneau","ID","42.87616","-115.88714","-7","1" +"83605","Caldwell","ID","43.658834","-116.67755","-7","1" +"83606","Caldwell","ID","43.724917","-116.798923","-7","1" +"83607","Caldwell","ID","43.675651","-116.73825","-7","1" +"83610","Cambridge","ID","44.647796","-116.69","-7","1" +"83611","Cascade","ID","44.476882","-115.9729","-7","1" +"83612","Council","ID","44.829994","-116.55344","-7","1" +"83615","Donnelly","ID","44.699961","-116.05992","-7","1" +"83616","Eagle","ID","43.705551","-116.36346","-7","1" +"83617","Emmett","ID","43.888285","-116.5143","-7","1" +"83619","Fruitland","ID","44.002031","-116.91129","-7","1" +"83620","Fruitvale","ID","44.878097","-116.43395","-7","1" +"83622","Garden Valley","ID","44.103121","-115.9354","-7","1" +"83623","Glenns Ferry","ID","42.965519","-115.32724","-7","1" +"83624","Grand View","ID","43.004691","-116.07225","-7","1" +"83626","Greenleaf","ID","43.670142","-116.82367","-7","1" +"83627","Hammett","ID","42.939818","-115.49697","-7","1" +"83628","Homedale","ID","43.598319","-116.9484","-7","1" +"83629","Horseshoe Bend","ID","43.933688","-116.1889","-7","1" +"83630","Huston","ID","43.602661","-116.790284","-7","1" +"83631","Idaho City","ID","43.85128","-115.87903","-7","1" +"83632","Indian Valley","ID","44.554347","-116.4388","-7","1" +"83633","King Hill","ID","42.969692","-115.17427","-7","1" +"83634","Kuna","ID","43.463644","-116.39311","-7","1" +"83635","Lake Fork","ID","44.68367","-115.453583","-7","1" +"83636","Letha","ID","43.896275","-116.646209","-7","1" +"83637","Lowman","ID","44.08857","-115.48797","-7","1" +"83638","McCall","ID","44.854428","-116.04991","-7","1" +"83639","Marsing","ID","43.534319","-116.84062","-7","1" +"83641","Melba","ID","43.370358","-116.57555","-7","1" +"83642","Meridian","ID","43.609434","-116.39642","-7","1" +"83643","Mesa","ID","44.605095","-116.48879","-7","1" +"83644","Middleton","ID","43.720076","-116.60253","-7","1" +"83645","Midvale","ID","44.426905","-116.62405","-7","1" +"83647","Mountain Home","ID","43.208029","-115.62345","-7","1" +"83648","Mountain Home A F B","ID","43.06997","-115.85201","-7","1" +"83650","Murphy","ID","43.135267","-116.46584","-7","1" +"83651","Nampa","ID","43.583454","-116.58697","-7","1" +"83652","Nampa","ID","43.70713","-116.620774","-7","1" +"83653","Nampa","ID","43.585149","-116.752963","-7","1" +"83654","New Meadows","ID","45.077791","-116.34335","-7","1" +"83655","New Plymouth","ID","43.96929","-116.81389","-7","1" +"83656","Notus","ID","43.725546","-116.8008","-7","1" +"83657","Ola","ID","44.279564","-116.29949","-7","1" +"83660","Parma","ID","43.790319","-116.93469","-7","1" +"83661","Payette","ID","44.079947","-116.89433","-7","1" +"83666","Placerville","ID","43.948003","-115.98055","-7","1" +"83669","Star","ID","43.697658","-116.49155","-7","1" +"83670","Sweet","ID","44.017756","-116.31264","-7","1" +"83671","Warren","ID","45.273532","-115.69194","-7","1" +"83672","Weiser","ID","44.310781","-116.93326","-7","1" +"83676","Wilder","ID","43.653878","-116.90117","-7","1" +"83677","Yellow Pine","ID","45.01781","-115.55397","-7","1" +"83680","Meridian","ID","43.459855","-116.243984","-7","1" +"83686","Nampa","ID","43.529812","-116.57761","-7","1" +"83687","Nampa","ID","43.590212","-116.53781","-7","1" +"83701","Boise","ID","43.603768","-116.272921","-7","1" +"83702","Boise","ID","43.627734","-116.20756","-7","1" +"83703","Boise","ID","43.668396","-116.25707","-7","1" +"83704","Boise","ID","43.63123","-116.28716","-7","1" +"83705","Boise","ID","43.583139","-116.2252","-7","1" +"83706","Boise","ID","43.593523","-116.19903","-7","1" +"83707","Boise","ID","43.38469","-115.997118","-7","1" +"83708","Boise","ID","43.459855","-116.243984","-7","1" +"83709","Boise","ID","43.572671","-116.29527","-7","1" +"83711","Boise","ID","43.459855","-116.243984","-7","1" +"83712","Boise","ID","43.595763","-116.16367","-7","1" +"83713","Boise","ID","43.638314","-116.33059","-7","1" +"83714","Boise","ID","43.641774","-116.26507","-7","1" +"83715","Boise","ID","43.459855","-116.243984","-7","1" +"83716","Boise","ID","43.601772","-116.02721","-7","1" +"83717","Boise","ID","43.459855","-116.243984","-7","1" +"83719","Boise","ID","43.459855","-116.243984","-7","1" +"83720","Boise","ID","43.459855","-116.243984","-7","1" +"83721","Boise","ID","43.459855","-116.243984","-7","1" +"83722","Boise","ID","43.459855","-116.243984","-7","1" +"83723","Boise","ID","43.459855","-116.243984","-7","1" +"83724","Boise","ID","43.619477","-116.195159","-7","1" +"83725","Boise","ID","43.459855","-116.243984","-7","1" +"83726","Boise","ID","43.459855","-116.243984","-7","1" +"83727","Boise","ID","43.459855","-116.243984","-7","1" +"83728","Boise","ID","43.459855","-116.243984","-7","1" +"83729","Boise","ID","43.459855","-116.243984","-7","1" +"83730","Boise","ID","43.459855","-116.243984","-7","1" +"83731","Boise","ID","43.459855","-116.243984","-7","1" +"83732","Boise","ID","43.459855","-116.243984","-7","1" +"83733","Boise","ID","43.459855","-116.243984","-7","1" +"83735","Boise","ID","43.459855","-116.243984","-7","1" +"83744","Boise","ID","43.459855","-116.243984","-7","1" +"83756","Boise","ID","43.459855","-116.243984","-7","1" +"83757","Boise","ID","43.459855","-116.243984","-7","1" +"83788","Boise","ID","43.606453","-116.28116","-7","1" +"83799","Boise","ID","43.459855","-116.243984","-7","1" +"83801","Athol","ID","47.943718","-116.66605","-8","1" +"83802","Avery","ID","47.173432","-115.80199","-8","1" +"83803","Bayview","ID","47.982523","-116.56168","-8","1" +"83804","Blanchard","ID","48.021497","-116.98833","-8","1" +"83805","Bonners Ferry","ID","48.770783","-116.41051","-8","1" +"83806","Bovill","ID","46.868617","-116.39726","-8","1" +"83808","Calder","ID","47.269078","-116.12134","-8","1" +"83809","Careywood","ID","48.055621","-116.5854","-8","1" +"83810","Cataldo","ID","47.532742","-116.46535","-8","1" +"83811","Clark Fork","ID","48.119781","-116.15905","-8","1" +"83812","Clarkia","ID","46.999999","-116.26693","-8","1" +"83813","Cocolalla","ID","48.108672","-116.64794","-8","1" +"83814","Coeur D Alene","ID","47.66655","-116.7757","-8","1" +"83815","Coeur D Alene","ID","47.718227","-116.78897","-8","1" +"83816","Coeur D Alene","ID","47.678798","-116.682718","-8","1" +"83821","Coolin","ID","48.582545","-116.83491","-8","1" +"83822","Oldtown","ID","48.168577","-117.02483","-8","1" +"83823","Deary","ID","46.79844","-116.54841","-8","1" +"83824","Desmet","ID","47.123919","-116.94417","-8","1" +"83825","Dover","ID","48.36875","-116.545493","-8","1" +"83826","Eastport","ID","48.974293","-116.1865","-8","1" +"83827","Elk River","ID","46.779767","-116.17964","-8","1" +"83830","Fernwood","ID","47.10625","-116.38764","-8","1" +"83832","Genesee","ID","46.552921","-116.91914","-8","1" +"83833","Harrison","ID","47.498424","-116.74475","-8","1" +"83834","Harvard","ID","46.973846","-116.71663","-8","1" +"83835","Hayden","ID","47.773595","-116.74907","-8","1" +"83836","Hope","ID","48.229101","-116.27423","-8","1" +"83837","Kellogg","ID","47.542783","-116.11848","-8","1" +"83839","Kingston","ID","47.566703","-116.20774","-8","1" +"83840","Kootenai","ID","48.314378","-116.515276","-8","1" +"83841","Laclede","ID","48.161421","-116.76728","-8","1" +"83842","Medimont","ID","47.456917","-116.57917","-8","1" +"83843","Moscow","ID","46.727636","-116.98067","-8","1" +"83844","Moscow","ID","46.836284","-116.684553","-8","1" +"83845","Moyie Springs","ID","48.720842","-116.13626","-8","1" +"83846","Mullan","ID","47.466971","-115.78377","-8","1" +"83847","Naples","ID","48.575219","-116.41475","-8","1" +"83848","Nordman","ID","48.649023","-116.89426","-8","1" +"83849","Osburn","ID","47.517239","-116.01495","-8","1" +"83850","Pinehurst","ID","47.512203","-116.24128","-8","1" +"83851","Plummer","ID","47.322203","-116.88379","-8","1" +"83852","Ponderay","ID","48.30476","-116.53305","-8","1" +"83853","Porthill","ID","48.953737","-116.53078","-8","1" +"83854","Post Falls","ID","47.720306","-116.94564","-8","1" +"83855","Potlatch","ID","46.95597","-116.91671","-8","1" +"83856","Priest River","ID","48.315799","-116.90904","-8","1" +"83857","Princeton","ID","46.871275","-116.82431","-8","1" +"83858","Rathdrum","ID","47.818931","-116.8783","-8","1" +"83860","Sagle","ID","48.205853","-116.5571","-8","1" +"83861","Saint Maries","ID","47.274904","-116.57392","-8","1" +"83862","Samuels","ID","48.36875","-116.545493","-8","1" +"83864","Sandpoint","ID","48.362033","-116.55101","-8","1" +"83865","Colburn","ID","48.363251","-116.625594","-8","1" +"83866","Santa","ID","47.161756","-116.42113","-8","1" +"83867","Silverton","ID","47.495306","-115.9555","-8","1" +"83868","Smelterville","ID","47.542989","-116.18156","-8","1" +"83869","Spirit Lake","ID","47.97618","-116.86895","-8","1" +"83870","Tensed","ID","47.155827","-116.89647","-8","1" +"83871","Troy","ID","46.747944","-116.74693","-8","1" +"83872","Viola","ID","46.861905","-116.96316","-8","1" +"83873","Wallace","ID","47.533448","-115.88759","-8","1" +"83874","Murray","ID","47.626188","-115.83204","-8","1" +"83876","Worley","ID","47.446701","-116.90486","-8","1" +"83877","Post Falls","ID","47.678798","-116.682718","-8","1" +"83888","Sandpoint","ID","48.36875","-116.545493","-8","1" +"84001","Altamont","UT","40.395531","-110.27969","-7","1" +"84002","Altonah","UT","40.45679","-110.32673","-7","1" +"84003","American Fork","UT","40.394235","-111.79449","-7","1" +"84004","Alpine","UT","40.465161","-111.76279","-7","1" +"84006","Bingham Canyon","UT","40.563896","-112.1281","-7","1" +"84007","Bluebell","UT","40.349644","-110.19776","-7","1" +"84008","Bonanza","UT","40.443106","-109.505593","-7","1" +"84010","Bountiful","UT","40.876312","-111.87249","-7","1" +"84011","Bountiful","UT","40.963547","-112.115984","-7","1" +"84013","Cedar Valley","UT","40.288953","-112.09859","-7","1" +"84014","Centerville","UT","40.927244","-111.87682","-7","1" +"84015","Clearfield","UT","41.126476","-112.04427","-7","1" +"84016","Clearfield","UT","40.892995","-111.888121","-7","1" +"84017","Coalville","UT","40.88097","-111.37752","-7","1" +"84018","Croydon","UT","41.084479","-111.53153","-7","1" +"84020","Draper","UT","40.514843","-111.87294","-7","1" +"84021","Duchesne","UT","40.169399","-110.46066","-7","1" +"84022","Dugway","UT","40.212316","-112.70012","-7","1" +"84023","Dutch John","UT","40.881951","-109.46319","-7","1" +"84024","Echo","UT","40.959532","-111.42743","-7","1" +"84025","Farmington","UT","40.988347","-111.88847","-7","1" +"84026","Fort Duchesne","UT","40.294693","-109.82903","-7","1" +"84027","Fruitland","UT","40.156858","-110.95449","-7","1" +"84028","Garden City","UT","41.91021","-111.40328","-7","1" +"84029","Grantsville","UT","40.689007","-112.6698","-7","1" +"84030","Gusher","UT","40.160179","-109.547839","-7","1" +"84031","Hanna","UT","40.535823","-110.46651","-7","1" +"84032","Heber City","UT","40.511413","-111.33259","-7","1" +"84033","Henefer","UT","40.996895","-111.50264","-7","1" +"84034","Ibapah","UT","40.105506","-113.94372","-7","1" +"84035","Jensen","UT","40.443203","-109.25255","-7","1" +"84036","Kamas","UT","40.625883","-111.20141","-7","1" +"84037","Kaysville","UT","41.032893","-111.93004","-7","1" +"84038","Laketown","UT","41.797569","-111.3702","-7","1" +"84039","Lapoint","UT","40.401201","-109.81677","-7","1" +"84040","Layton","UT","41.086894","-111.9271","-7","1" +"84041","Layton","UT","41.07221","-111.97625","-7","1" +"84042","Lindon","UT","40.338552","-111.7162","-7","1" +"84043","Lehi","UT","40.366648","-111.89052","-7","1" +"84044","Magna","UT","40.700162","-112.08318","-7","1" +"84046","Manila","UT","40.978642","-109.74719","-7","1" +"84047","Midvale","UT","40.614997","-111.88704","-7","1" +"84049","Midway","UT","40.518775","-111.49837","-7","1" +"84050","Morgan","UT","41.059771","-111.71141","-7","1" +"84051","Mountain Home","UT","40.42204","-110.38597","-7","1" +"84052","Myton","UT","40.065834","-110.14823","-7","1" +"84053","Neola","UT","40.440294","-110.02525","-7","1" +"84054","North Salt Lake","UT","40.843012","-111.90581","-7","1" +"84055","Oakley","UT","40.80725","-111.204","-7","1" +"84056","Hill AFB","UT","41.118815","-112.01151","-7","1" +"84057","Orem","UT","40.311854","-111.70561","-7","1" +"84058","Orem","UT","40.278086","-111.71067","-7","1" +"84059","Orem","UT","40.176975","-111.536036","-7","1" +"84060","Park City","UT","40.648541","-111.49362","-7","1" +"84061","Peoa","UT","40.732935","-111.35283","-7","1" +"84062","Pleasant Grove","UT","40.38584","-111.73333","-7","1" +"84063","Randlett","UT","40.176006","-109.70579","-7","1" +"84064","Randolph","UT","41.656963","-111.16584","-7","1" +"84065","Riverton","UT","40.503746","-111.96327","-7","1" +"84066","Roosevelt","UT","40.328012","-110.01689","-7","1" +"84067","Roy","UT","41.173226","-112.05093","-7","1" +"84068","Park City","UT","40.66797","-111.505365","-7","1" +"84069","Rush Valley","UT","40.366554","-112.45813","-7","1" +"84070","Sandy","UT","40.581595","-111.88821","-7","1" +"84071","Stockton","UT","40.336367","-112.33819","-7","1" +"84072","Tabiona","UT","40.362986","-110.70128","-7","1" +"84073","Talmage","UT","40.352343","-110.46935","-7","1" +"84074","Tooele","UT","40.560528","-112.29455","-7","1" +"84075","Syracuse","UT","41.086069","-112.06279","-7","1" +"84076","Tridell","UT","40.446132","-109.87476","-7","1" +"84078","Vernal","UT","40.514262","-109.54223","-7","1" +"84079","Vernal","UT","40.160179","-109.547839","-7","1" +"84080","Vernon","UT","40.105195","-112.31673","-7","1" +"84082","Wallsburg","UT","40.371817","-111.41809","-7","1" +"84083","Wendover","UT","40.773372","-114.0093","-7","1" +"84084","West Jordan","UT","40.627668","-111.97566","-7","1" +"84085","Whiterocks","UT","40.529949","-109.91425","-7","1" +"84086","Woodruff","UT","41.376622","-111.22578","-7","1" +"84087","Woods Cross","UT","40.888711","-111.90909","-7","1" +"84088","West Jordan","UT","40.594222","-111.97889","-7","1" +"84089","Clearfield","UT","40.963547","-112.115984","-7","1" +"84090","Sandy","UT","40.668068","-111.908297","-7","1" +"84091","Sandy","UT","40.668068","-111.908297","-7","1" +"84092","Sandy","UT","40.558748","-111.80902","-7","1" +"84093","Sandy","UT","40.594948","-111.83448","-7","1" +"84094","Sandy","UT","40.569598","-111.86217","-7","1" +"84095","South Jordan","UT","40.561598","-111.96088","-7","1" +"84097","Orem","UT","40.301444","-111.67485","-7","1" +"84098","Park City","UT","40.726899","-111.53674","-7","1" +"84101","Salt Lake City","UT","40.754746","-111.89875","-7","1" +"84102","Salt Lake City","UT","40.759246","-111.86371","-7","1" +"84103","Salt Lake City","UT","40.777746","-111.87491","-7","1" +"84104","Salt Lake City","UT","40.750628","-111.94077","-7","1" +"84105","Salt Lake City","UT","40.737132","-111.86044","-7","1" +"84106","Salt Lake City","UT","40.706246","-111.85657","-7","1" +"84107","Salt Lake City","UT","40.659997","-111.88394","-7","1" +"84108","Salt Lake City","UT","40.744646","-111.81123","-7","1" +"84109","Salt Lake City","UT","40.705747","-111.79973","-7","1" +"84110","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84111","Salt Lake City","UT","40.7547","-111.88361","-7","1" +"84112","Salt Lake City","UT","40.76784","-111.83805","-7","1" +"84113","Salt Lake City","UT","40.763322","-111.83364","-7","1" +"84114","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84115","Salt Lake City","UT","40.718113","-111.88938","-7","1" +"84116","Salt Lake City","UT","40.790309","-111.94018","-7","1" +"84117","Salt Lake City","UT","40.662797","-111.83797","-7","1" +"84118","Salt Lake City","UT","40.650496","-111.99591","-7","1" +"84119","Salt Lake City","UT","40.696596","-111.95239","-7","1" +"84120","Salt Lake City","UT","40.688246","-111.99899","-7","1" +"84121","Salt Lake City","UT","40.625621","-111.8158","-7","1" +"84122","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84123","Salt Lake City","UT","40.659514","-111.92226","-7","1" +"84124","Salt Lake City","UT","40.680064","-111.8222","-7","1" +"84125","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84126","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84127","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84128","Salt Lake City","UT","40.694746","-112.04004","-7","1" +"84130","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84131","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84132","Salt Lake City","UT","40.772743","-111.838541","-7","1" +"84133","Salt Lake City","UT","40.769046","-111.889319","-7","1" +"84134","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84135","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84136","Salt Lake City","UT","40.768546","-111.887869","-7","1" +"84137","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84138","Salt Lake City","UT","40.671614","-111.74828","-7","1" +"84139","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84140","Salt Lake City","UT","40.771345","-111.93087","-7","1" +"84141","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84142","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84143","Salt Lake City","UT","40.786886","-111.900832","-7","1" +"84144","Salt Lake City","UT","40.767946","-111.890819","-7","1" +"84145","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84147","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84148","Salt Lake City","UT","40.756796","-111.837567","-7","1" +"84150","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84151","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84152","Salt Lake City","UT","40.728579","-111.66273","-7","1" +"84153","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84157","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84158","Salt Lake City","UT","40.768996","-111.762115","-7","1" +"84165","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84170","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84171","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84180","Salt Lake City","UT","40.770248","-111.90077","-7","1" +"84184","Salt Lake City","UT","40.676839","-111.956811","-7","1" +"84185","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84189","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84190","Salt Lake City","UT","40.668068","-111.908297","-7","1" +"84199","Salt Lake City","UT","40.725946","-111.93942","-7","1" +"84201","Ogden","UT","41.244261","-112.007924","-7","1" +"84244","Ogden","UT","41.255285","-111.956721","-7","1" +"84252","Green River","UT","38.995483","-110.160534","-7","1" +"84301","Bear River City","UT","41.615276","-112.12561","-7","1" +"84302","Brigham City","UT","41.508605","-112.04736","-7","1" +"84304","Cache Junction","UT","41.832776","-111.99738","-7","1" +"84305","Clarkston","UT","41.938629","-112.0433","-7","1" +"84306","Collinston","UT","41.804848","-112.07009","-7","1" +"84307","Corinne","UT","41.535714","-112.30373","-7","1" +"84308","Cornish","UT","41.944253","-111.973275","-7","1" +"84309","Deweyville","UT","41.714101","-112.08846","-7","1" +"84310","Eden","UT","41.364638","-111.81304","-7","1" +"84311","Fielding","UT","41.81571","-112.11338","-7","1" +"84312","Garland","UT","41.76645","-112.15829","-7","1" +"84313","Grouse Creek","UT","41.307779","-113.56365","-7","1" +"84314","Honeyville","UT","41.644833","-112.09427","-7","1" +"84315","Hooper","UT","41.172593","-112.10675","-7","1" +"84316","Howell","UT","41.773176","-112.45965","-7","1" +"84317","Huntsville","UT","41.288679","-111.70449","-7","1" +"84318","Hyde Park","UT","41.801888","-111.81535","-7","1" +"84319","Hyrum","UT","41.630767","-111.84549","-7","1" +"84320","Lewiston","UT","41.968475","-111.86587","-7","1" +"84321","Logan","UT","41.730637","-111.78042","-7","1" +"84322","Logan","UT","41.641189","-111.896571","-7","1" +"84323","Logan","UT","41.684253","-111.783783","-7","1" +"84324","Mantua","UT","41.492466","-111.94275","-7","1" +"84325","Mendon","UT","41.721715","-111.97114","-7","1" +"84326","Millville","UT","41.682506","-111.825","-7","1" +"84327","Newton","UT","41.867966","-111.99026","-7","1" +"84328","Paradise","UT","41.508503","-111.79102","-7","1" +"84329","Park Valley","UT","41.689359","-113.44562","-7","1" +"84330","Plymouth","UT","41.875803","-112.13957","-7","1" +"84331","Portage","UT","41.909031","-112.32322","-7","1" +"84332","Providence","UT","41.701304","-111.8096","-7","1" +"84333","Richmond","UT","41.919806","-111.81676","-7","1" +"84334","Riverside","UT","41.791414","-112.14671","-7","1" +"84335","Smithfield","UT","41.833371","-111.85897","-7","1" +"84336","Snowville","UT","41.792609","-112.91032","-7","1" +"84337","Tremonton","UT","41.688721","-112.22327","-7","1" +"84338","Trenton","UT","41.935384","-111.94607","-7","1" +"84339","Wellsville","UT","41.641328","-111.92716","-7","1" +"84340","Willard","UT","41.368481","-112.05538","-7","1" +"84341","Logan","UT","41.780998","-111.80904","-7","1" +"84346","South Willard","UT","41.346348","-112.063983","-7","1" +"84401","Ogden","UT","41.224911","-111.98346","-7","1" +"84402","Ogden","UT","41.255285","-111.956721","-7","1" +"84403","Ogden","UT","41.188093","-111.94608","-7","1" +"84404","Ogden","UT","41.270319","-112.01932","-7","1" +"84405","Ogden","UT","41.165551","-111.9675","-7","1" +"84407","Ogden","UT","41.238547","-111.965867","-7","1" +"84408","Ogden","UT","41.195593","-111.948474","-7","1" +"84409","Ogden","UT","41.255285","-111.956721","-7","1" +"84412","Ogden","UT","41.255285","-111.956721","-7","1" +"84414","Ogden","UT","41.314075","-111.96366","-7","1" +"84415","Ogden","UT","41.255285","-111.956721","-7","1" +"84501","Price","UT","39.578473","-110.78678","-7","1" +"84510","Aneth","UT","37.198216","-109.11245","-7","1" +"84511","Blanding","UT","37.562925","-109.46245","-7","1" +"84512","Bluff","UT","37.158935","-109.52773","-7","1" +"84513","Castle Dale","UT","39.222858","-111.00605","-7","1" +"84515","Cisco","UT","38.999877","-109.615008","-7","1" +"84516","Clawson","UT","39.088224","-111.05489","-7","1" +"84518","Cleveland","UT","39.350034","-110.87184","-7","1" +"84520","East Carbon","UT","39.569596","-110.34199","-7","1" +"84521","Elmo","UT","39.367253","-110.78956","-7","1" +"84522","Emery","UT","38.889362","-111.17706","-7","1" +"84523","Ferron","UT","39.109059","-111.13617","-7","1" +"84525","Green River","UT","38.983076","-110.35905","-7","1" +"84526","Helper","UT","39.694641","-110.98561","-7","1" +"84527","Hiawatha","UT","39.640779","-110.560697","-7","1" +"84528","Huntington","UT","39.343592","-110.9778","-7","1" +"84529","Kenilworth","UT","39.6866","-110.80479","-7","1" +"84530","La Sal","UT","38.236886","-109.15445","-7","1" +"84531","Mexican Hat","UT","37.183505","-109.93383","-7","1" +"84532","Moab","UT","38.572778","-109.49392","-7","1" +"84533","Lake Powell","UT","37.655431","-110.03772","-7","1" +"84534","Montezuma Creek","UT","37.237899","-109.28709","-7","1" +"84535","Monticello","UT","37.886087","-109.30629","-7","1" +"84536","Monument Valley","AZ","36.990184","-110.2123","-7","0" +"84537","Orangeville","UT","39.36696","-111.16518","-7","1" +"84539","Sunnyside","UT","39.661026","-110.58819","-7","1" +"84540","Thompson","UT","39.210907","-109.44491","-7","1" +"84542","Wellington","UT","39.543105","-110.72865","-7","1" +"84601","Provo","UT","40.230954","-111.68006","-7","1" +"84602","Provo","UT","40.356343","-111.732476","-7","1" +"84603","Provo","UT","40.203908","-111.626081","-7","1" +"84604","Provo","UT","40.280454","-111.6491","-7","1" +"84605","Provo","UT","40.176975","-111.536036","-7","1" +"84606","Provo","UT","40.226302","-111.64439","-7","1" +"84620","Aurora","UT","38.917381","-111.92835","-7","1" +"84621","Axtell","UT","39.050838","-111.84775","-7","1" +"84622","Centerfield","UT","39.114649","-111.80511","-7","1" +"84623","Chester","UT","39.465357","-111.57686","-7","1" +"84624","Delta","UT","39.349079","-112.5433","-7","1" +"84626","Elberta","UT","39.92519","-111.99559","-7","1" +"84627","Ephraim","UT","39.353561","-111.5783","-7","1" +"84628","Eureka","UT","39.855141","-112.14995","-7","1" +"84629","Fairview","UT","39.701506","-111.42865","-7","1" +"84630","Fayette","UT","39.272741","-111.77838","-7","1" +"84631","Fillmore","UT","38.951694","-112.31666","-7","1" +"84632","Fountain Green","UT","39.633383","-111.62844","-7","1" +"84633","Goshen","UT","39.949142","-111.89623","-7","1" +"84634","Gunnison","UT","39.193513","-111.85047","-7","1" +"84635","Hinckley","UT","39.314609","-112.79181","-7","1" +"84636","Holden","UT","39.099629","-112.2823","-7","1" +"84637","Kanosh","UT","38.811791","-112.70637","-7","1" +"84638","Leamington","UT","39.532384","-112.27113","-7","1" +"84639","Levan","UT","39.47178","-111.94431","-7","1" +"84640","Lynndyl","UT","39.522214","-112.36913","-7","1" +"84642","Manti","UT","39.230151","-111.57601","-7","1" +"84643","Mayfield","UT","39.111512","-111.69904","-7","1" +"84644","Meadow","UT","39.06433","-113.032141","-7","1" +"84645","Mona","UT","39.859432","-111.85402","-7","1" +"84646","Moroni","UT","39.526133","-111.58299","-7","1" +"84647","Mount Pleasant","UT","39.545778","-111.43798","-7","1" +"84648","Nephi","UT","39.692424","-111.88229","-7","1" +"84649","Oak City","UT","39.370295","-112.32369","-7","1" +"84650","Oasis","UT","39.291167","-112.62826","-7","1" +"84651","Payson","UT","40.025007","-111.72117","-7","1" +"84652","Redmond","UT","38.974463","-111.92215","-7","1" +"84653","Salem","UT","40.043907","-111.66405","-7","1" +"84654","Salina","UT","38.915722","-111.72893","-7","1" +"84655","Santaquin","UT","40.03148","-111.85302","-7","1" +"84656","Scipio","UT","39.240818","-112.14804","-7","1" +"84657","Sigurd","UT","38.834889","-111.943","-7","1" +"84660","Spanish Fork","UT","40.10637","-111.65408","-7","1" +"84662","Spring City","UT","39.461825","-111.47818","-7","1" +"84663","Springville","UT","40.168205","-111.59577","-7","1" +"84664","Mapleton","UT","40.123394","-111.56665","-7","1" +"84665","Sterling","UT","39.133489","-111.740853","-7","1" +"84667","Wales","UT","39.458682","-111.67126","-7","1" +"84701","Richfield","UT","38.765929","-112.08397","-7","1" +"84710","Alton","UT","37.474045","-112.53409","-7","1" +"84711","Annabella","UT","38.707639","-112.05826","-7","1" +"84712","Antimony","UT","38.070706","-111.97354","-7","1" +"84713","Beaver","UT","38.35906","-112.6926","-7","1" +"84714","Beryl","UT","37.798268","-113.6718","-7","1" +"84715","Bicknell","UT","38.338787","-111.54921","-7","1" +"84716","Boulder","UT","37.94512","-111.09991","-7","1" +"84717","Bryce Canyon","UT","37.6153","-112.17088","-7","1" +"84718","Cannonville","UT","37.576034","-112.08849","-7","1" +"84719","Brian Head","UT","37.663896","-112.81081","-7","1" +"84720","Cedar City","UT","37.75164","-113.16557","-7","1" +"84721","Cedar City","UT","37.656843","-113.3695","-7","1" +"84722","Central","UT","37.416058","-113.62554","-7","1" +"84723","Circleville","UT","38.180655","-112.25563","-7","1" +"84724","Elsinore","UT","38.686793","-112.14565","-7","1" +"84725","Enterprise","UT","37.533546","-113.76108","-7","1" +"84726","Escalante","UT","37.76737","-111.6841","-7","1" +"84728","Garrison","UT","38.970536","-113.7085","-7","1" +"84729","Glendale","UT","37.351773","-112.61182","-7","1" +"84730","Glenwood","UT","38.764683","-111.98379","-7","1" +"84731","Greenville","UT","38.218885","-112.82508","-7","1" +"84732","Greenwich","UT","38.446294","-111.9101","-7","1" +"84733","Gunlock","UT","37.179347","-113.8136","-7","1" +"84734","Hanksville","UT","38.289429","-110.66366","-7","1" +"84735","Hatch","UT","37.61127","-112.55601","-7","1" +"84736","Henrieville","UT","37.565311","-111.99144","-7","1" +"84737","Hurricane","UT","37.130927","-113.24183","-7","1" +"84738","Ivins","UT","37.164561","-113.67582","-7","1" +"84739","Joseph","UT","38.620071","-112.23422","-7","1" +"84740","Junction","UT","38.238084","-112.23014","-7","1" +"84741","Kanab","UT","37.162224","-112.11431","-7","1" +"84742","Kanarraville","UT","37.522753","-113.203633","-7","1" +"84743","Kingston","UT","38.230935","-112.18455","-7","1" +"84744","Koosharem","UT","38.510659","-111.88029","-7","1" +"84745","La Verkin","UT","37.219954","-113.25581","-7","1" +"84746","Leeds","UT","37.237225","-113.33562","-7","1" +"84747","Loa","UT","38.41744","-111.67612","-7","1" +"84749","Lyman","UT","38.386384","-111.5911","-7","1" +"84750","Marysvale","UT","38.439428","-112.2208","-7","1" +"84751","Milford","UT","38.348238","-113.1063","-7","1" +"84752","Minersville","UT","38.217377","-112.93204","-7","1" +"84753","Modena","UT","37.873645","-113.88673","-7","1" +"84754","Monroe","UT","38.618547","-111.88908","-7","1" +"84755","Mount Carmel","UT","37.261273","-112.79836","-7","1" +"84756","Newcastle","UT","37.692401","-113.627239","-7","1" +"84757","New Harmony","UT","37.391483","-113.2821","-7","1" +"84758","Orderville","UT","37.26947","-112.64419","-7","1" +"84759","Panguitch","UT","37.777031","-112.40819","-7","1" +"84760","Paragonah","UT","37.911834","-112.68799","-7","1" +"84761","Parowan","UT","37.886163","-112.83945","-7","1" +"84762","Duck Creek Village","UT","37.48474","-112.71064","-7","1" +"84763","Rockville","UT","37.160144","-113.042525","-7","1" +"84764","Bryce","UT","37.638578","-112.20857","-7","1" +"84765","Santa Clara","UT","37.136937","-113.64916","-7","1" +"84766","Sevier","UT","38.568765","-112.35173","-7","1" +"84767","Springdale","UT","37.186249","-113.013922","-7","1" +"84770","Saint George","UT","37.118352","-113.5987","-7","1" +"84771","Saint George","UT","37.309231","-113.476182","-7","1" +"84772","Summit","UT","37.800295","-112.93517","-7","1" +"84773","Teasdale","UT","38.28419","-111.53072","-7","1" +"84774","Toquerville","UT","37.250749","-113.27491","-7","1" +"84775","Torrey","UT","38.340186","-111.0022","-7","1" +"84776","Tropic","UT","37.650853","-112.07946","-7","1" +"84779","Virgin","UT","37.294867","-113.10279","-7","1" +"84780","Washington","UT","37.144146","-113.49671","-7","1" +"84781","Pine Valley","UT","37.391737","-113.51806","-7","1" +"84782","Veyo","UT","37.359887","-113.66976","-7","1" +"84783","Dammeron Valley","UT","37.287005","-113.66144","-7","1" +"84784","Hildale","UT","37.004364","-112.978418","-7","1" +"84790","Saint George","UT","37.075039","-113.55568","-7","1" +"84791","Saint George","UT","37.309231","-113.476182","-7","1" +"84821","Logan","UT","41.717612","-111.868898","-7","1" +"84910","North Salt Lake","UT","40.858481","-111.898438","-7","1" +"84915","Clinton","UT","41.142472","-112.066211","-7","1" +"84947","Lyman","UT","38.399138","-111.591641","-7","1" +"85001","Phoenix","AZ","33.703967","-112.351835","-7","0" +"85002","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85003","Phoenix","AZ","33.451143","-112.07838","-7","0" +"85004","Phoenix","AZ","33.451093","-112.07057","-7","0" +"85005","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85006","Phoenix","AZ","33.466392","-112.04875","-7","0" +"85007","Phoenix","AZ","33.449995","-112.09024","-7","0" +"85008","Phoenix","AZ","33.466393","-112.0008","-7","0" +"85009","Phoenix","AZ","33.45635","-112.12378","-7","0" +"85010","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85011","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85012","Phoenix","AZ","33.505251","-112.0703","-7","0" +"85013","Phoenix","AZ","33.50711","-112.08483","-7","0" +"85014","Phoenix","AZ","33.511325","-112.05711","-7","0" +"85015","Phoenix","AZ","33.50689","-112.10262","-7","0" +"85016","Phoenix","AZ","33.503742","-112.03235","-7","0" +"85017","Phoenix","AZ","33.514092","-112.12285","-7","0" +"85018","Phoenix","AZ","33.498076","-111.98603","-7","0" +"85019","Phoenix","AZ","33.511992","-112.1417","-7","0" +"85020","Phoenix","AZ","33.563663","-112.05519","-7","0" +"85021","Phoenix","AZ","33.559437","-112.09281","-7","0" +"85022","Phoenix","AZ","33.630497","-112.0521","-7","0" +"85023","Phoenix","AZ","33.638271","-112.09341","-7","0" +"85024","Phoenix","AZ","33.675564","-112.04717","-7","0" +"85025","Phoenix","AZ","33.422621","-111.723635","-7","0" +"85026","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85027","Phoenix","AZ","33.698731","-112.11429","-7","0" +"85028","Phoenix","AZ","33.585037","-112.00815","-7","0" +"85029","Phoenix","AZ","33.598841","-112.12023","-7","0" +"85030","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85031","Phoenix","AZ","33.493496","-112.17108","-7","0" +"85032","Phoenix","AZ","33.62414","-112.00416","-7","0" +"85033","Phoenix","AZ","33.496091","-112.21405","-7","0" +"85034","Phoenix","AZ","33.437772","-112.0281","-7","0" +"85035","Phoenix","AZ","33.472492","-112.1875","-7","0" +"85036","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85037","Phoenix","AZ","33.493006","-112.25539","-7","0" +"85038","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85039","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85040","Phoenix","AZ","33.393323","-112.02857","-7","0" +"85041","Phoenix","AZ","33.386995","-112.10076","-7","0" +"85042","Phoenix","AZ","33.381234","-112.027663","-7","0" +"85043","Phoenix","AZ","33.435405","-112.20009","-7","0" +"85044","Phoenix","AZ","33.333591","-111.99246","-7","0" +"85045","Phoenix","AZ","33.29974","-112.09812","-7","0" +"85046","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85048","Phoenix","AZ","33.302098","-112.02477","-7","0" +"85050","Phoenix","AZ","33.683603","-111.99271","-7","0" +"85051","Phoenix","AZ","33.559783","-112.13361","-7","0" +"85053","Phoenix","AZ","33.629911","-112.13122","-7","0" +"85054","Phoenix","AZ","33.689558","-111.96463","-7","0" +"85055","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85060","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85061","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85062","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85063","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85064","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85065","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85066","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85067","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85068","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85069","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85070","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85071","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85072","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85073","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85074","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85075","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85076","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85077","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85078","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85079","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85080","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85082","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85085","Phoenix","AZ","33.77776","-112.07945","-7","0" +"85086","Anthem","AZ","33.831866","-112.06339","-7","0" +"85087","New River","AZ","33.921493","-112.09992","-7","0" +"85089","New River","AZ","33.909138","-112.140771","-7","0" +"85097","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85098","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85099","Phoenix","AZ","33.276539","-112.18717","-7","0" +"85123","Mesa","AZ","33.427135","-111.758483","-7","0" +"85200","Mesa","AZ","33.423596","-111.594435","-7","0" +"85201","Mesa","AZ","33.432177","-111.84701","-7","0" +"85202","Mesa","AZ","33.381097","-111.8756","-7","0" +"85203","Mesa","AZ","33.437493","-111.806","-7","0" +"85204","Mesa","AZ","33.400127","-111.78594","-7","0" +"85205","Mesa","AZ","33.426932","-111.71686","-7","0" +"85206","Mesa","AZ","33.400306","-111.72452","-7","0" +"85207","Mesa","AZ","33.436767","-111.64338","-7","0" +"85208","Mesa","AZ","33.393967","-111.64302","-7","0" +"85210","Mesa","AZ","33.391233","-111.84129","-7","0" +"85211","Mesa","AZ","33.466313","-111.837345","-7","0" +"85212","Mesa","AZ","33.35035","-111.64535","-7","0" +"85213","Mesa","AZ","33.434192","-111.76892","-7","0" +"85214","Mesa","AZ","33.276539","-112.18717","-7","0" +"85215","Mesa","AZ","33.479868","-111.6935","-7","0" +"85216","Mesa","AZ","33.276539","-112.18717","-7","0" +"85217","Apache Junction","AZ","33.393398","-111.478975","-7","0" +"85218","Gold Camp","AZ","33.349996","-111.418233","-7","0" +"85219","Apache Junction","AZ","33.402969","-111.46337","-7","0" +"85220","Apache Junction","AZ","33.416083","-111.5762","-7","0" +"85221","Bapchule","AZ","33.126134","-111.90545","-7","0" +"85222","Casa Grande","AZ","32.878138","-111.73499","-7","0" +"85223","Arizona City","AZ","32.749664","-111.68022","-7","0" +"85224","Chandler","AZ","33.328951","-111.8735","-7","0" +"85225","Chandler","AZ","33.316349","-111.83064","-7","0" +"85226","Chandler","AZ","33.312208","-111.93177","-7","0" +"85227","Chandler Heights","AZ","33.212186","-111.686171","-7","0" +"85228","Coolidge","AZ","32.967829","-111.52617","-7","0" +"85230","Casa Grande","AZ","32.742949","-111.78945","-7","0" +"85231","Eloy","AZ","32.712323","-111.57673","-7","0" +"85232","Florence","AZ","32.961615","-111.31629","-7","0" +"85233","Gilbert","AZ","33.348593","-111.80833","-7","0" +"85234","Gilbert","AZ","33.36344","-111.75093","-7","0" +"85235","Hayden","AZ","32.995762","-110.7804","-7","0" +"85236","Higley","AZ","33.305783","-111.70835","-7","0" +"85237","Kearny","AZ","33.09977","-110.97202","-7","0" +"85239","Maricopa","AZ","32.989261","-112.11505","-7","0" +"85240","Chandler","AZ","33.222982","-111.858805","-7","0" +"85241","Picacho","AZ","32.712136","-111.49949","-7","0" +"85242","Queen Creek","AZ","33.227266","-111.61087","-7","0" +"85244","Chandler","AZ","33.321316","-111.888824","-7","0" +"85245","Red Rock","AZ","32.623115","-111.37672","-7","0" +"85246","Chandler","AZ","33.276539","-112.18717","-7","0" +"85247","Sacaton","AZ","33.107581","-111.75128","-7","0" +"85248","Chandler","AZ","33.239097","-111.86355","-7","0" +"85249","Chandler","AZ","33.237229","-111.8004","-7","0" +"85250","Scottsdale","AZ","33.521433","-111.90944","-7","0" +"85251","Scottsdale","AZ","33.494152","-111.92079","-7","0" +"85252","Scottsdale","AZ","33.499529","-111.868432","-7","0" +"85253","Paradise Valley","AZ","33.544596","-111.95645","-7","0" +"85254","Scottsdale","AZ","33.617504","-111.95416","-7","0" +"85255","Scottsdale","AZ","33.697268","-111.88321","-7","0" +"85256","Scottsdale","AZ","33.491302","-111.83509","-7","0" +"85257","Scottsdale","AZ","33.467347","-111.91741","-7","0" +"85258","Scottsdale","AZ","33.566635","-111.89337","-7","0" +"85259","Scottsdale","AZ","33.596995","-111.82628","-7","0" +"85260","Scottsdale","AZ","33.606004","-111.88699","-7","0" +"85261","Scottsdale","AZ","33.276539","-112.18717","-7","0" +"85262","Scottsdale","AZ","33.798581","-111.8708","-7","0" +"85263","Rio Verde","AZ","33.722594","-111.67915","-7","0" +"85264","Fort Mcdowell","AZ","33.617643","-111.67554","-7","0" +"85266","Scottsdale","AZ","33.276539","-112.18717","-7","0" +"85267","Scottsdale","AZ","33.276539","-112.18717","-7","0" +"85268","Fountain Hills","AZ","33.604811","-111.72852","-7","0" +"85269","Fountain Hills","AZ","33.276539","-112.18717","-7","0" +"85271","Scottsdale","AZ","33.276539","-112.18717","-7","0" +"85272","Stanfield","AZ","32.852769","-111.97564","-7","0" +"85273","Superior","AZ","33.28591","-111.11015","-7","0" +"85274","Mesa","AZ","33.276539","-112.18717","-7","0" +"85275","Mesa","AZ","33.276539","-112.18717","-7","0" +"85277","Mesa","AZ","33.276539","-112.18717","-7","0" +"85278","Apache Junction","AZ","32.983653","-111.326045","-7","0" +"85279","Florence","AZ","32.983653","-111.326045","-7","0" +"85280","Tempe","AZ","33.401395","-111.931298","-7","0" +"85281","Tempe","AZ","33.426885","-111.92733","-7","0" +"85282","Tempe","AZ","33.394067","-111.92873","-7","0" +"85283","Tempe","AZ","33.365951","-111.93155","-7","0" +"85284","Tempe","AZ","33.338333","-111.92962","-7","0" +"85285","Tempe","AZ","33.276539","-112.18717","-7","0" +"85286","New River","AZ","33.850506","-112.05927","-7","0" +"85287","Tempe","AZ","33.428511","-111.934865","-7","0" +"85288","Scottsdale","AZ","33.672973","-111.889286","-7","0" +"85289","Tempe","AZ","33.276539","-112.18717","-7","0" +"85290","Tortilla Flat","AZ","33.276539","-112.18717","-7","0" +"85291","Valley Farms","AZ","33.013502","-111.42979","-7","0" +"85292","Winkelman","AZ","32.945838","-110.72198","-7","0" +"85296","Gilbert","AZ","33.319722","-111.76078","-7","0" +"85297","Gilbert","AZ","33.272322","-111.714171","-7","0" +"85299","Gilbert","AZ","33.276539","-112.18717","-7","0" +"85301","Glendale","AZ","33.534128","-112.1767","-7","0" +"85302","Glendale","AZ","33.568143","-112.17699","-7","0" +"85303","Glendale","AZ","33.528166","-112.22189","-7","0" +"85304","Glendale","AZ","33.594069","-112.17531","-7","0" +"85305","Glendale","AZ","33.529373","-112.25225","-7","0" +"85306","Glendale","AZ","33.624546","-112.1767","-7","0" +"85307","Glendale","AZ","33.529314","-112.30607","-7","0" +"85308","Glendale","AZ","33.657722","-112.17825","-7","0" +"85309","Luke AFB","AZ","33.533985","-112.37688","-7","0" +"85310","Glendale","AZ","33.701173","-112.17614","-7","0" +"85311","Glendale","AZ","33.276539","-112.18717","-7","0" +"85312","Glendale","AZ","33.276539","-112.18717","-7","0" +"85313","Glendale","AZ","33.276539","-112.18717","-7","0" +"85317","Carefree","AZ","33.820609","-111.886707","-7","0" +"85318","Glendale","AZ","33.276539","-112.18717","-7","0" +"85320","Aguila","AZ","33.945183","-113.19837","-7","0" +"85321","Ajo","AZ","32.331853","-112.78694","-7","0" +"85322","Arlington","AZ","33.274422","-112.78934","-7","0" +"85323","Avondale","AZ","33.454441","-112.32401","-7","0" +"85324","Black Canyon City","AZ","34.10865","-112.10088","-7","0" +"85325","Bouse","AZ","33.946064","-113.9537","-7","0" +"85326","Buckeye","AZ","33.354418","-112.56941","-7","0" +"85327","Cave Creek","AZ","33.276539","-112.18717","-7","0" +"85328","Cibola","AZ","33.326956","-114.68562","-7","0" +"85329","Cashion","AZ","33.431242","-112.29588","-7","0" +"85330","Wickenburg","AZ","33.973301","-112.722998","-7","0" +"85331","Cave Creek","AZ","33.789204","-111.96301","-7","0" +"85332","Congress","AZ","34.177939","-112.9307","-7","0" +"85333","Dateland","AZ","32.921712","-113.45703","-7","0" +"85334","Ehrenberg","AZ","33.631915","-114.49095","-7","0" +"85335","El Mirage","AZ","33.596823","-112.32364","-7","0" +"85336","Gadsden","AZ","32.532458","-114.78056","-7","0" +"85337","Gila Bend","AZ","32.971684","-112.7946","-7","0" +"85338","Goodyear","AZ","33.430922","-112.38482","-7","0" +"85339","Laveen","AZ","33.352795","-112.16752","-7","0" +"85340","Litchfield Park","AZ","33.50835","-112.40523","-7","0" +"85341","Lukeville","AZ","31.970131","-111.890713","-7","0" +"85342","Morristown","AZ","33.939162","-112.49976","-7","0" +"85343","Palo Verde","AZ","33.276539","-112.18717","-7","0" +"85344","Parker","AZ","34.100704","-114.30462","-7","0" +"85345","Peoria","AZ","33.573602","-112.23984","-7","0" +"85346","Quartzsite","AZ","33.654343","-114.23325","-7","0" +"85347","Roll","AZ","32.744976","-113.85421","-7","0" +"85348","Salome","AZ","33.730443","-113.62376","-7","0" +"85349","San Luis","AZ","32.494054","-114.77866","-7","0" +"85350","Somerton","AZ","32.58193","-114.71199","-7","0" +"85351","Sun City","AZ","33.60642","-112.28316","-7","0" +"85352","Tacna","AZ","32.693448","-113.976313","-7","0" +"85353","Tolleson","AZ","33.426423","-112.28299","-7","0" +"85354","Tonopah","AZ","33.452432","-113.01652","-7","0" +"85355","Waddell","AZ","33.569705","-112.44792","-7","0" +"85356","Wellton","AZ","32.676125","-114.13546","-7","0" +"85357","Wenden","AZ","33.843519","-113.53441","-7","0" +"85358","Wickenburg","AZ","33.276539","-112.18717","-7","0" +"85359","Quartzsite","AZ","33.66688","-114.239557","-7","0" +"85360","Wikieup","AZ","34.681394","-113.5935","-7","0" +"85361","Wittmann","AZ","33.739904","-112.59778","-7","0" +"85362","Yarnell","AZ","34.286193","-112.69667","-7","0" +"85363","Youngtown","AZ","33.588225","-112.30263","-7","0" +"85364","Yuma","AZ","32.704499","-114.64644","-7","0" +"85365","Yuma","AZ","32.700018","-114.52671","-7","0" +"85366","Yuma","AZ","32.609959","-114.631172","-7","0" +"85367","Yuma","AZ","32.654701","-114.40884","-7","0" +"85369","Yuma","AZ","32.751632","-114.074901","-7","0" +"85371","Poston","AZ","34.031791","-114.390171","-7","0" +"85372","Sun City","AZ","33.276539","-112.18717","-7","0" +"85373","Sun City","AZ","33.66156","-112.28931","-7","0" +"85374","Surprise","AZ","33.643508","-112.38502","-7","0" +"85375","Sun City West","AZ","33.683352","-112.36474","-7","0" +"85376","Sun City West","AZ","33.276539","-112.18717","-7","0" +"85377","Carefree","AZ","33.276539","-112.18717","-7","0" +"85378","Surprise","AZ","33.276539","-112.18717","-7","0" +"85379","Surprise","AZ","33.616888","-112.40158","-7","0" +"85380","Peoria","AZ","33.276539","-112.18717","-7","0" +"85381","Peoria","AZ","33.60864","-112.22791","-7","0" +"85382","Peoria","AZ","33.689869","-112.24838","-7","0" +"85383","Peoria","AZ","33.700837","-112.244827","-7","0" +"85385","Peoria","AZ","33.276539","-112.18717","-7","0" +"85387","Surprise","AZ","33.276539","-112.18717","-7","0" +"85390","Wickenburg","AZ","33.961122","-112.76952","-7","0" +"85395","Peoria","AZ","33.580089","-112.246311","-7","0" +"85439","San Luis","AZ","32.491745","-114.784135","-7","0" +"85501","Globe","AZ","33.53457","-110.75681","-7","0" +"85502","Globe","AZ","33.421919","-110.81268","-7","0" +"85522","Thatcher","AZ","32.850901","-109.767893","-7","0" +"85530","Bylas","AZ","33.053797","-110.22921","-7","0" +"85531","Central","AZ","32.872122","-109.79267","-7","0" +"85532","Claypool","AZ","33.415409","-110.814893","-7","0" +"85533","Clifton","AZ","33.122043","-109.2841","-7","0" +"85534","Duncan","AZ","32.731748","-109.11471","-7","0" +"85535","Eden","AZ","32.963028","-109.91803","-7","0" +"85536","Fort Thomas","AZ","33.02874","-109.98719","-7","0" +"85539","Miami","AZ","33.383937","-110.90026","-7","0" +"85540","Morenci","AZ","33.044523","-109.32904","-7","0" +"85541","Payson","AZ","34.243578","-111.28137","-7","0" +"85542","Peridot","AZ","33.262553","-110.5231","-7","0" +"85543","Pima","AZ","32.90375","-109.84995","-7","0" +"85544","Pine","AZ","34.394226","-111.46865","-7","0" +"85545","Roosevelt","AZ","33.624008","-111.01062","-7","0" +"85546","Safford","AZ","32.800222","-109.69052","-7","0" +"85547","Payson","AZ","34.257457","-111.28775","-7","0" +"85548","Safford","AZ","32.797009","-109.752196","-7","0" +"85550","San Carlos","AZ","33.37214","-110.11686","-7","0" +"85551","Solomon","AZ","32.842769","-109.696449","-7","0" +"85552","Thatcher","AZ","32.816055","-109.76487","-7","0" +"85553","Tonto Basin","AZ","33.830708","-111.30102","-7","0" +"85554","Young","AZ","34.093715","-110.96487","-7","0" +"85601","Arivaca","AZ","31.579152","-111.33413","-7","0" +"85602","Benson","AZ","32.010164","-110.3182","-7","0" +"85603","Bisbee","AZ","31.406229","-109.8958","-7","0" +"85605","Bowie","AZ","32.314118","-109.46196","-7","0" +"85606","Cochise","AZ","32.054694","-109.81342","-7","0" +"85607","Douglas","AZ","31.382775","-109.55035","-7","0" +"85608","Douglas","AZ","31.569536","-109.23407","-7","0" +"85609","Dragoon","AZ","32.036365","-110.04581","-7","0" +"85610","Elfrida","AZ","31.724946","-109.64646","-7","0" +"85611","Elgin","AZ","31.588594","-110.51857","-7","0" +"85613","Fort Huachuca","AZ","31.541437","-110.30004","-7","0" +"85614","Green Valley","AZ","31.857504","-111.00904","-7","0" +"85615","Hereford","AZ","31.429017","-110.23013","-7","0" +"85616","Huachuca City","AZ","31.684819","-110.34743","-7","0" +"85617","McNeal","AZ","31.536321","-109.67608","-7","0" +"85618","Mammoth","AZ","32.70874","-110.63925","-7","0" +"85619","Mount Lemmon","AZ","32.441496","-110.75682","-7","0" +"85620","Naco","AZ","31.385182","-109.919794","-7","0" +"85621","Nogales","AZ","31.37737","-110.9264","-7","0" +"85622","Green Valley","AZ","31.853334","-110.932803","-7","0" +"85623","Oracle","AZ","32.625543","-110.77201","-7","0" +"85624","Patagonia","AZ","31.504439","-110.70794","-7","0" +"85625","Pearce","AZ","31.911838","-109.7723","-7","0" +"85626","Pirtleville","AZ","31.357528","-109.611545","-7","0" +"85627","Pomerene","AZ","32.09881","-110.09917","-7","0" +"85628","Nogales","AZ","31.531998","-110.909305","-7","0" +"85629","Sahuarita","AZ","31.939718","-110.97527","-7","0" +"85630","Saint David","AZ","31.898039","-110.21803","-7","0" +"85631","San Manuel","AZ","32.597198","-110.60293","-7","0" +"85632","San Simon","AZ","32.048448","-109.19635","-7","0" +"85633","Sasabe","AZ","31.632739","-111.49066","-7","0" +"85634","Sells","AZ","31.998543","-111.93712","-7","0" +"85635","Sierra Vista","AZ","31.562546","-110.24288","-7","0" +"85636","Sierra Vista","AZ","31.668685","-110.280111","-7","0" +"85637","Sonoita","AZ","31.733433","-110.66869","-7","0" +"85638","Tombstone","AZ","31.714525","-110.06684","-7","0" +"85639","Topawa","AZ","31.773676","-111.76494","-7","0" +"85640","Tumacacori","AZ","31.586392","-111.0416","-7","0" +"85641","Vail","AZ","32.00196","-110.67442","-7","0" +"85643","Willcox","AZ","32.356537","-109.88461","-7","0" +"85644","Willcox","AZ","32.30069","-109.878211","-7","0" +"85645","Amado","AZ","31.718671","-111.09908","-7","0" +"85646","Tubac","AZ","31.623432","-111.06352","-7","0" +"85648","Rio Rico","AZ","31.488579","-110.98926","-7","0" +"85650","Sierra Vista","AZ","31.492003","-110.24699","-7","0" +"85652","Cortaro","AZ","32.420055","-111.113178","-7","0" +"85653","Marana","AZ","32.454488","-111.26232","-7","0" +"85654","Rillito","AZ","32.417221","-111.17135","-7","0" +"85655","Douglas","AZ","31.880077","-109.754263","-7","0" +"85662","Nogales","AZ","31.531998","-110.909305","-7","0" +"85670","Fort Huachuca","AZ","31.880077","-109.754263","-7","0" +"85671","Sierra Vista","AZ","31.880077","-109.754263","-7","0" +"85701","Tucson","AZ","32.216743","-110.9696","-7","0" +"85702","Tucson","AZ","31.970131","-111.890713","-7","0" +"85703","Tucson","AZ","31.970131","-111.890713","-7","0" +"85704","Tucson","AZ","32.32764","-110.98801","-7","0" +"85705","Tucson","AZ","32.260316","-110.98534","-7","0" +"85706","Tucson","AZ","32.128649","-110.92497","-7","0" +"85707","Tucson","AZ","32.169577","-110.875093","-7","0" +"85708","Tucson","AZ","32.196846","-110.89189","-7","0" +"85709","Tucson","AZ","32.200813","-110.897966","-7","0" +"85710","Tucson","AZ","32.213291","-110.82559","-7","0" +"85711","Tucson","AZ","32.216326","-110.88511","-7","0" +"85712","Tucson","AZ","32.249551","-110.8878","-7","0" +"85713","Tucson","AZ","32.194909","-110.9757","-7","0" +"85714","Tucson","AZ","32.170277","-110.95525","-7","0" +"85715","Tucson","AZ","32.247175","-110.82864","-7","0" +"85716","Tucson","AZ","32.242275","-110.92533","-7","0" +"85717","Tucson","AZ","31.970131","-111.890713","-7","0" +"85718","Tucson","AZ","32.31346","-110.92282","-7","0" +"85719","Tucson","AZ","32.240625","-110.94791","-7","0" +"85720","Tucson","AZ","31.970131","-111.890713","-7","0" +"85721","Tucson","AZ","32.233761","-110.949996","-7","0" +"85722","Tucson","AZ","31.970131","-111.890713","-7","0" +"85723","Tucson","AZ","31.970131","-111.890713","-7","0" +"85724","Tucson","AZ","32.240571","-110.944343","-7","0" +"85725","Tucson","AZ","31.970131","-111.890713","-7","0" +"85726","Tucson","AZ","32.202726","-110.945346","-7","0" +"85728","Tucson","AZ","31.970131","-111.890713","-7","0" +"85730","Tucson","AZ","32.179227","-110.81032","-7","0" +"85731","Tucson","AZ","32.088034","-110.708174","-7","0" +"85732","Tucson","AZ","32.084775","-110.71225","-7","0" +"85733","Tucson","AZ","31.970131","-111.890713","-7","0" +"85734","Tucson","AZ","32.065082","-110.935337","-7","0" +"85735","Tucson","AZ","32.13918","-111.23968","-7","0" +"85736","Tucson","AZ","31.979764","-111.29398","-7","0" +"85737","Tucson","AZ","32.417144","-110.96354","-7","0" +"85738","Catalina","AZ","31.970131","-111.890713","-7","0" +"85739","Tucson","AZ","32.521096","-110.9087","-7","0" +"85740","Tucson","AZ","31.970131","-111.890713","-7","0" +"85741","Tucson","AZ","32.338126","-111.04259","-7","0" +"85742","Tucson","AZ","32.385588","-111.05582","-7","0" +"85743","Tucson","AZ","32.335122","-111.14888","-7","0" +"85744","Tucson","AZ","31.970131","-111.890713","-7","0" +"85745","Tucson","AZ","32.242724","-111.0209","-7","0" +"85746","Tucson","AZ","32.126223","-111.04599","-7","0" +"85747","Tucson","AZ","32.109302","-110.77573","-7","0" +"85748","Tucson","AZ","32.216926","-110.76851","-7","0" +"85749","Tucson","AZ","32.299275","-110.74419","-7","0" +"85750","Tucson","AZ","32.292078","-110.84384","-7","0" +"85751","Tucson","AZ","32.161972","-110.714678","-7","0" +"85752","Tucson","AZ","31.970131","-111.890713","-7","0" +"85754","Tucson","AZ","31.970131","-111.890713","-7","0" +"85775","Tucson","AZ","31.970131","-111.890713","-7","0" +"85777","Tucson","AZ","32.071764","-110.859106","-7","0" +"85807","New River","AZ","33.876452","-112.088337","-7","0" +"85901","Show Low","AZ","34.271427","-110.03676","-7","0" +"85902","Show Low","AZ","34.298092","-110.035185","-7","0" +"85911","Cibecue","AZ","34.102913","-110.55639","-7","0" +"85912","White Mountain Lake","AZ","34.266588","-110.203073","-7","0" +"85920","Alpine","AZ","33.836157","-109.19785","-7","0" +"85922","Blue","AZ","33.681485","-109.24946","-7","0" +"85923","Clay Springs","AZ","34.364618","-110.29487","-7","0" +"85924","Concho","AZ","34.448733","-109.7114","-7","0" +"85925","Eagar","AZ","34.109777","-109.34532","-7","0" +"85926","Fort Apache","AZ","34.074253","-109.86356","-7","0" +"85927","Greer","AZ","33.801744","-109.58336","-7","0" +"85928","Heber","AZ","34.563994","-110.55929","-7","0" +"85929","Lakeside","AZ","34.162407","-109.9952","-7","0" +"85930","Mcnary","AZ","34.04421","-109.73709","-7","0" +"85931","Forest Lakes","AZ","34.393887","-110.83591","-7","0" +"85932","Nutrioso","AZ","33.927014","-109.22149","-7","0" +"85933","Overgaard","AZ","34.392829","-110.52048","-7","0" +"85934","Pinedale","AZ","34.270743","-110.26032","-7","0" +"85935","Pinetop","AZ","34.121008","-109.91503","-7","0" +"85936","Saint Johns","AZ","34.558663","-109.40254","-7","0" +"85937","Snowflake","AZ","34.560896","-110.03633","-7","0" +"85938","Springerville","AZ","34.094597","-109.22291","-7","0" +"85939","Taylor","AZ","34.442667","-110.09181","-7","0" +"85940","Vernon","AZ","34.268984","-109.67514","-7","0" +"85941","Whiteriver","AZ","33.849439","-110.03334","-7","0" +"85942","Woodruff","AZ","34.778649","-109.96697","-7","0" +"86001","Flagstaff","AZ","35.279872","-111.72256","-7","0" +"86002","Flagstaff","AZ","35.630842","-112.052427","-7","0" +"86003","Flagstaff","AZ","35.630842","-112.052427","-7","0" +"86004","Flagstaff","AZ","35.253002","-111.44851","-7","0" +"86011","Flagstaff","AZ","35.630842","-112.052427","-7","0" +"86015","Bellemont","AZ","35.235694","-111.83","-7","0" +"86016","Gray Mountain","AZ","35.675689","-111.49474","-7","0" +"86017","Munds Park","AZ","34.9372","-111.62931","-7","0" +"86018","Parks","AZ","35.197566","-111.93253","-7","0" +"86020","Cameron","AZ","36.182818","-111.5472","-7","0" +"86021","Colorado City","AZ","36.985868","-112.9791","-7","0" +"86022","Fredonia","AZ","36.844685","-112.47107","-7","0" +"86023","Grand Canyon","AZ","35.862292","-112.06498","-7","0" +"86024","Happy Jack","AZ","34.690846","-111.16676","-7","0" +"86025","Holbrook","AZ","34.936261","-110.14698","-7","0" +"86028","Petrified Forest Natl Pk","AZ","35.237487","-109.52295","-7","0" +"86029","Sun Valley","AZ","35.285746","-110.288704","-7","0" +"86030","Hotevilla","AZ","36.115339","-110.61562","-7","0" +"86031","Indian Wells","AZ","35.48041","-110.09228","-7","0" +"86032","Joseph City","AZ","35.101925","-110.42509","-7","0" +"86033","Kayenta","AZ","36.608485","-110.18425","-7","0" +"86034","Keams Canyon","AZ","35.765669","-110.18617","-7","0" +"86035","Leupp","AZ","35.335107","-110.99972","-7","0" +"86036","Marble Canyon","AZ","36.618595","-111.85444","-7","0" +"86038","Mormon Lake","AZ","34.908287","-111.463026","-7","0" +"86039","Kykotsmovi Village","AZ","36.00059","-110.5201","-7","0" +"86040","Page","AZ","36.726377","-111.4284","-7","0" +"86042","Polacca","AZ","35.835642","-110.36628","-7","0" +"86043","Second Mesa","AZ","35.777227","-110.50131","-7","0" +"86044","Tonalea","AZ","36.507554","-110.86804","-7","0" +"86045","Tuba City","AZ","36.061184","-111.06828","-7","0" +"86046","Williams","AZ","35.378832","-112.23657","-7","0" +"86047","Winslow","AZ","35.258309","-110.53128","-7","0" +"86052","North Rim","AZ","36.499283","-112.23039","-7","0" +"86053","Kaibito","AZ","36.556111","-111.10495","-7","0" +"86054","Shonto","AZ","36.630103","-110.65072","-7","0" +"86231","Bagdad","AZ","34.581245","-113.16874","-7","0" +"86301","Prescott","AZ","34.589477","-112.44726","-7","0" +"86302","Prescott","AZ","34.574921","-112.491528","-7","0" +"86303","Prescott","AZ","34.515939","-112.45399","-7","0" +"86304","Prescott","AZ","34.59668","-112.49066","-7","0" +"86305","Prescott","AZ","34.70062","-112.63753","-7","0" +"86312","Prescott Valley","AZ","34.668291","-112.307777","-7","0" +"86313","Prescott","AZ","34.706724","-112.39773","-7","0" +"86314","Prescott Valley","AZ","34.621743","-112.32176","-7","0" +"86320","Ash Fork","AZ","35.178163","-112.56465","-7","0" +"86321","Bagdad","AZ","34.543627","-113.11473","-7","0" +"86322","Camp Verde","AZ","34.556478","-111.84375","-7","0" +"86323","Chino Valley","AZ","34.765452","-112.45931","-7","0" +"86324","Clarkdale","AZ","34.767841","-112.06438","-7","0" +"86325","Cornville","AZ","34.718836","-111.90168","-7","0" +"86326","Cottonwood","AZ","34.723788","-112.01002","-7","0" +"86327","Dewey","AZ","34.533237","-112.20644","-7","0" +"86329","Humboldt","AZ","34.518883","-112.25234","-7","0" +"86330","Iron Springs","AZ","34.706724","-112.39773","-7","0" +"86331","Jerome","AZ","34.74428","-112.14586","-7","0" +"86332","Kirkland","AZ","34.426513","-112.6261","-7","0" +"86333","Mayer","AZ","34.339938","-112.13612","-7","0" +"86334","Paulden","AZ","34.910591","-112.46252","-7","0" +"86335","Rimrock","AZ","34.653475","-111.75103","-7","0" +"86336","Sedona","AZ","34.876638","-111.80666","-7","0" +"86337","Seligman","AZ","35.334394","-113.05774","-7","0" +"86338","Skull Valley","AZ","34.557983","-112.70556","-7","0" +"86339","Sedona","AZ","34.907188","-111.728572","-7","0" +"86340","Sedona","AZ","34.706724","-112.39773","-7","0" +"86341","Sedona","AZ","34.776648","-111.76788","-7","0" +"86342","Lake Montezuma","AZ","34.641736","-111.787154","-7","0" +"86343","Crown King","AZ","34.201191","-112.3501","-7","0" +"86344","Paulden","AZ","34.907296","-112.492365","-7","0" +"86351","Sedona","AZ","34.782453","-111.76764","-7","0" +"86361","Bagdad","AZ","34.572995","-113.183806","-7","0" +"86366","Cottonwood","AZ","34.704667","-111.989364","-7","0" +"86401","Kingman","AZ","35.25925","-113.95225","-7","0" +"86402","Kingman","AZ","35.263249","-114.063651","-7","0" +"86403","Lake Havasu City","AZ","34.483582","-114.33694","-7","0" +"86404","Lake Havasu City","AZ","34.546899","-114.32546","-7","0" +"86405","Lake Havasu City","AZ","35.605301","-113.642712","-7","0" +"86406","Lake Havasu City","AZ","34.469945","-114.27861","-7","0" +"86411","Hackberry","AZ","35.605301","-113.642712","-7","0" +"86412","Hualapai","AZ","35.397172","-113.843241","-7","0" +"86413","Golden Valley","AZ","35.190896","-114.24036","-7","0" +"86422","Bullhead City","AZ","35.109303","-114.574004","-7","0" +"86426","Fort Mohave","AZ","35.013495","-114.58524","-7","0" +"86427","Fort Mohave","AZ","35.00429","-114.581228","-7","0" +"86429","Bullhead City","AZ","35.172854","-114.54696","-7","0" +"86430","Bullhead City","AZ","35.256802","-114.49451","-7","0" +"86431","Chloride","AZ","35.413284","-114.21626","-7","0" +"86432","Littlefield","AZ","36.903232","-113.94024","-7","0" +"86433","Oatman","AZ","35.030577","-114.38928","-7","0" +"86434","Peach Springs","AZ","35.482227","-113.5121","-7","0" +"86435","Supai","AZ","36.198652","-112.51013","-7","0" +"86436","Topock","AZ","34.782526","-114.4663","-7","0" +"86437","Valentine","AZ","35.386906","-113.66065","-7","0" +"86438","Yucca","AZ","34.805546","-114.14175","-7","0" +"86439","Bullhead City","AZ","35.095848","-114.619445","-7","0" +"86440","Mohave Valley","AZ","34.888406","-114.57354","-7","0" +"86441","Dolan Springs","AZ","35.607935","-114.30203","-7","0" +"86442","Bullhead City","AZ","35.097719","-114.59734","-7","0" +"86443","Temple Bar Marina","AZ","35.210634","-114.179228","-7","0" +"86444","Meadview","AZ","35.950442","-114.07783","-7","0" +"86445","Willow Beach","AZ","35.605301","-113.642712","-7","0" +"86446","Mohave Valley","AZ","34.849946","-114.591728","-7","0" +"86502","Chambers","AZ","35.213287","-109.54223","-7","0" +"86503","Chinle","AZ","36.165779","-109.61956","-7","0" +"86504","Fort Defiance","AZ","35.771067","-109.17878","-7","0" +"86505","Ganado","AZ","35.665344","-109.65344","-7","0" +"86506","Houck","AZ","35.368902","-109.22194","-7","0" +"86507","Lukachukai","AZ","36.423229","-109.29689","-7","0" +"86508","Lupton","AZ","35.325261","-109.07847","-7","0" +"86510","Pinon","AZ","36.110934","-110.20181","-7","0" +"86511","Saint Michaels","AZ","35.610285","-109.2093","-7","0" +"86512","Sanders","AZ","35.15632","-109.32309","-7","0" +"86514","Teec Nos Pos","AZ","36.88092","-109.33634","-7","0" +"86515","Window Rock","AZ","35.672842","-109.06495","-7","0" +"86520","Blue Gap","AZ","36.045603","-110.00633","-7","0" +"86535","Dennehotso","AZ","36.798893","-109.86488","-7","0" +"86538","Many Farms","AZ","36.374317","-109.6007","-7","0" +"86540","Nazlini","AZ","35.952827","-109.41297","-7","0" +"86544","Red Valley","AZ","36.59559","-109.11872","-7","0" +"86545","Rock Point","AZ","36.662243","-109.59931","-7","0" +"86547","Round Rock","AZ","36.494915","-109.45613","-7","0" +"86549","Sawmill","AZ","35.958014","-109.17551","-7","0" +"86551","Big Park","AZ","34.780464","-111.759944","-7","0" +"86556","Tsaile","AZ","36.272262","-109.17516","-7","0" +"86631","Jerome","AZ","34.748879","-112.115853","-7","0" +"87001","Algodones","NM","35.388701","-106.42793","-7","1" +"87002","Belen","NM","34.646779","-106.7648","-7","1" +"87004","Bernalillo","NM","35.32151","-106.55322","-7","1" +"87005","Bluewater","NM","35.20912","-108.07182","-7","1" +"87006","Bosque","NM","34.511223","-106.80927","-7","1" +"87007","Casa Blanca","NM","35.047954","-107.45148","-7","1" +"87008","Cedar Crest","NM","35.136495","-106.37296","-7","1" +"87009","Cedarvale","NM","34.650925","-105.880597","-7","1" +"87010","Cerrillos","NM","35.409522","-106.15202","-7","1" +"87011","Claunch","NM","34.032895","-106.03034","-7","1" +"87012","Coyote","NM","36.195444","-106.6583","-7","1" +"87013","Cuba","NM","35.869051","-107.40227","-7","1" +"87014","Cubero","NM","35.166618","-107.5052","-7","1" +"87015","Edgewood","NM","35.075777","-106.19155","-7","1" +"87016","Estancia","NM","34.775863","-106.12269","-7","1" +"87017","Gallina","NM","36.187444","-106.76581","-7","1" +"87018","Counselor","NM","36.203634","-107.49441","-7","1" +"87020","Grants","NM","35.122129","-107.90777","-7","1" +"87021","Milan","NM","35.192539","-107.893691","-7","1" +"87022","Isleta","NM","34.906197","-106.69301","-7","1" +"87023","Jarales","NM","34.598268","-106.7592","-7","1" +"87024","Jemez Pueblo","NM","35.624111","-106.73752","-7","1" +"87025","Jemez Springs","NM","35.822802","-106.62093","-7","1" +"87026","Laguna","NM","34.999815","-107.24109","-7","1" +"87027","La Jara","NM","36.151633","-107.00449","-7","1" +"87028","La Joya","NM","34.34886","-106.8053","-7","1" +"87029","Lindrith","NM","36.343007","-107.09858","-7","1" +"87031","Los Lunas","NM","34.786133","-106.70536","-7","1" +"87032","McIntosh","NM","34.862981","-106.01328","-7","1" +"87034","Pueblo Of Acoma","NM","34.900203","-107.65365","-7","1" +"87035","Moriarty","NM","35.001195","-105.99524","-7","1" +"87036","Mountainair","NM","34.500604","-106.27612","-7","1" +"87037","Nageezi","NM","36.17798","-107.80037","-7","1" +"87038","New Laguna","NM","35.05463","-107.44137","-7","1" +"87040","Paguate","NM","35.132004","-107.36564","-7","1" +"87041","Pena Blanca","NM","35.584234","-106.32728","-7","1" +"87042","Peralta","NM","34.83436","-106.68375","-7","1" +"87043","Placitas","NM","35.303843","-106.44361","-7","1" +"87044","Ponderosa","NM","35.700027","-106.65317","-7","1" +"87045","Prewitt","NM","35.408295","-107.98853","-7","1" +"87046","Regina","NM","35.71742","-106.935844","-7","1" +"87047","Sandia Park","NM","35.179121","-106.28742","-7","1" +"87048","Corrales","NM","35.229614","-106.62141","-7","1" +"87049","San Fidel","NM","35.087772","-107.63451","-7","1" +"87051","San Rafael","NM","35.15105","-107.87701","-7","1" +"87052","Santo Domingo Pueblo","NM","35.509184","-106.35022","-7","1" +"87053","San Ysidro","NM","35.527064","-106.80866","-7","1" +"87056","Stanley","NM","35.230514","-105.91598","-7","1" +"87057","Tajique","NM","34.650925","-105.880597","-7","1" +"87059","Tijeras","NM","35.017604","-106.31044","-7","1" +"87060","Tome","NM","34.740708","-106.73362","-7","1" +"87061","Torreon","NM","34.783472","-106.36553","-7","1" +"87062","Veguita","NM","34.460462","-106.71879","-7","1" +"87063","Willard","NM","34.43283","-105.95532","-7","1" +"87064","Youngsville","NM","36.111907","-106.54779","-7","1" +"87068","Bosque Farms","NM","34.864034","-106.6895","-7","1" +"87070","Clines Corners","NM","35.00993","-105.97201","-7","1" +"87072","Cochiti Pueblo","NM","35.612925","-106.34845","-7","1" +"87083","Cochiti Lake","NM","35.648976","-106.33885","-7","1" +"87101","Albuquerque","NM","35.199592","-106.644831","-7","1" +"87102","Albuquerque","NM","35.083946","-106.64792","-7","1" +"87103","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87104","Albuquerque","NM","35.101727","-106.67238","-7","1" +"87105","Albuquerque","NM","35.031329","-106.68695","-7","1" +"87106","Albuquerque","NM","35.078246","-106.61747","-7","1" +"87107","Albuquerque","NM","35.134094","-106.64073","-7","1" +"87108","Albuquerque","NM","35.073343","-106.58232","-7","1" +"87109","Albuquerque","NM","35.155811","-106.56662","-7","1" +"87110","Albuquerque","NM","35.106396","-106.57927","-7","1" +"87111","Albuquerque","NM","35.135303","-106.52223","-7","1" +"87112","Albuquerque","NM","35.100796","-106.52067","-7","1" +"87113","Albuquerque","NM","35.179635","-106.59384","-7","1" +"87114","Albuquerque","NM","35.196446","-106.67336","-7","1" +"87115","Albuquerque","NM","35.054947","-106.546128","-7","1" +"87116","Albuquerque","NM","35.053147","-106.55102","-7","1" +"87117","Kirtland AFB","NM","35.056747","-106.571978","-7","1" +"87118","Albuquerque","NM","35.051847","-106.59427","-7","1" +"87119","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87120","Albuquerque","NM","35.146144","-106.70851","-7","1" +"87121","Albuquerque","NM","35.051247","-106.74258","-7","1" +"87122","Albuquerque","NM","35.18076","-106.52021","-7","1" +"87123","Albuquerque","NM","35.067447","-106.50645","-7","1" +"87124","Rio Rancho","NM","35.290647","-106.71469","-7","1" +"87125","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87131","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87140","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87144","Rio Rancho","NM","35.295331","-106.645081","-7","1" +"87153","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87154","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87158","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87174","Rio Rancho","NM","35.044339","-106.672872","-7","1" +"87176","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87180","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87181","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87184","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87185","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87187","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87190","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87191","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87192","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87193","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87194","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87195","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87196","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87197","Albuquerque","NM","35.108573","-106.243911","-7","1" +"87198","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87199","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87201","Albuquerque","NM","35.044339","-106.672872","-7","1" +"87301","Gallup","NM","35.534253","-108.84857","-7","1" +"87302","Gallup","NM","35.480924","-108.176693","-7","1" +"87305","Gallup","NM","35.376892","-108.78661","-7","1" +"87310","Brimhall","NM","35.766353","-108.57046","-7","1" +"87311","Church Rock","NM","35.598798","-108.51792","-7","1" +"87312","Continental Divide","NM","35.442033","-108.32473","-7","1" +"87313","Crownpoint","NM","35.761481","-108.10225","-7","1" +"87315","Fence Lake","NM","34.737855","-108.61359","-7","1" +"87316","Fort Wingate","NM","35.463071","-108.54595","-7","1" +"87317","Gamerco","NM","35.597972","-108.76657","-7","1" +"87319","Mentmore","NM","35.486269","-108.90414","-7","1" +"87320","Mexican Springs","NM","35.799367","-108.8731","-7","1" +"87321","Ramah","NM","34.999427","-108.41304","-7","1" +"87322","Rehoboth","NM","35.533134","-108.65253","-7","1" +"87323","Thoreau","NM","35.495133","-108.19993","-7","1" +"87325","Tohatchi","NM","36.002113","-108.6655","-7","1" +"87326","Vanderwagen","NM","35.295558","-108.81277","-7","1" +"87327","Zuni","NM","35.06947","-108.72493","-7","1" +"87328","Navajo","AZ","35.923348","-109.08296","-7","0" +"87347","Jamestown","NM","35.453355","-108.45374","-7","1" +"87357","Pinehill","NM","34.888629","-108.27933","-7","1" +"87364","Sheep Springs","NM","36.119846","-108.71665","-7","1" +"87365","Smith Lake","NM","35.480924","-108.176693","-7","1" +"87375","Yatahey","NM","35.680001","-108.79265","-7","1" +"87378","Navajo","NM","35.902329","-109.031853","-7","1" +"87401","Farmington","NM","36.625357","-108.19225","-7","1" +"87402","Farmington","NM","36.785816","-108.14505","-7","1" +"87410","Aztec","NM","36.837421","-107.96667","-7","1" +"87412","Blanco","NM","36.681819","-107.48121","-7","1" +"87413","Bloomfield","NM","36.579374","-107.87907","-7","1" +"87415","Flora Vista","NM","36.813748","-108.09508","-7","1" +"87416","Fruitland","NM","36.654783","-108.45001","-7","1" +"87417","Kirtland","NM","36.763088","-108.3674","-7","1" +"87418","La Plata","NM","36.927309","-108.15934","-7","1" +"87419","Navajo Dam","NM","36.901026","-107.52505","-7","1" +"87420","Shiprock","NM","36.748026","-108.80023","-7","1" +"87421","Waterflow","NM","36.877607","-108.62606","-7","1" +"87455","Newcomb","NM","36.272472","-108.79107","-7","1" +"87461","Sanostee","NM","36.475414","-108.81089","-7","1" +"87499","Farmington","NM","36.774472","-108.06925","-7","1" +"87501","Santa Fe","NM","35.755312","-105.99936","-7","1" +"87502","Santa Fe","NM","35.439937","-106.123698","-7","1" +"87503","Santa Fe","NM","35.521181","-105.981847","-7","1" +"87504","Santa Fe","NM","35.893597","-106.007499","-7","1" +"87505","Santa Fe","NM","35.616662","-105.97926","-7","1" +"87506","Santa Fe","NM","35.606283","-106.075722","-7","1" +"87507","Santa Fe","NM","35.615216","-105.952788","-7","1" +"87508","Santa Fe","NM","35.469938","-105.754453","-7","1" +"87509","Santa Fe","NM","35.521181","-105.981847","-7","1" +"87510","Abiquiu","NM","36.2996","-106.40596","-7","1" +"87511","Alcalde","NM","36.097705","-106.04254","-7","1" +"87512","Amalia","NM","36.962335","-105.41628","-7","1" +"87513","Arroyo Hondo","NM","36.534541","-105.67244","-7","1" +"87514","Arroyo Seco","NM","36.546104","-105.50586","-7","1" +"87515","Canjilon","NM","36.476265","-106.40996","-7","1" +"87516","Canones","NM","36.082439","-106.46786","-7","1" +"87517","Carson","NM","36.333259","-105.81143","-7","1" +"87518","Cebolla","NM","36.522263","-106.54918","-7","1" +"87519","Cerro","NM","36.756688","-105.63855","-7","1" +"87520","Chama","NM","36.874229","-106.55118","-7","1" +"87521","Chamisal","NM","36.126615","-105.74651","-7","1" +"87522","Chimayo","NM","35.997094","-105.94533","-7","1" +"87523","Cordova","NM","36.005591","-105.903255","-7","1" +"87524","Costilla","NM","36.959631","-105.5809","-7","1" +"87525","Taos Ski Valley","NM","36.575944","-105.50602","-7","1" +"87527","Dixon","NM","36.1566","-105.84161","-7","1" +"87528","Dulce","NM","36.818905","-106.9757","-7","1" +"87529","El Prado","NM","36.468402","-105.60547","-7","1" +"87530","El Rito","NM","36.387967","-106.23407","-7","1" +"87531","Embudo","NM","36.248813","-105.87995","-7","1" +"87532","Espanola","NM","35.990548","-106.08036","-7","1" +"87533","Espanola","NM","36.618928","-106.75512","-7","1" +"87535","Glorieta","NM","35.759271","-105.74841","-7","1" +"87537","Hernandez","NM","36.094021","-106.17472","-7","1" +"87538","Ilfeld","NM","35.456288","-104.679611","-7","1" +"87539","La Madera","NM","36.422525","-106.06145","-7","1" +"87540","Lamy","NM","35.434943","-105.91873","-7","1" +"87543","Llano","NM","36.129822","-105.66493","-7","1" +"87544","Los Alamos","NM","35.86849","-106.29536","-7","1" +"87545","Los Alamos","NM","35.863858","-106.295255","-7","1" +"87548","Medanales","NM","36.17634","-106.18489","-7","1" +"87549","Ojo Caliente","NM","36.362617","-106.02523","-7","1" +"87551","Los Ojos","NM","36.700526","-106.63695","-7","1" +"87552","Pecos","NM","35.622261","-105.6422","-7","1" +"87553","Penasco","NM","36.191998","-105.71543","-7","1" +"87554","Petaca","NM","36.465416","-106.578513","-7","1" +"87556","Questa","NM","36.735033","-105.58602","-7","1" +"87557","Ranchos De Taos","NM","36.377149","-105.67963","-7","1" +"87558","Red River","NM","36.705987","-105.3955","-7","1" +"87560","Ribera","NM","35.249513","-105.57658","-7","1" +"87562","Rowe","NM","35.498227","-105.67671","-7","1" +"87564","San Cristobal","NM","36.610705","-105.64442","-7","1" +"87565","San Jose","NM","35.454443","-105.50337","-7","1" +"87566","San Juan Pueblo","NM","36.074403","-106.07952","-7","1" +"87567","Santa Cruz","NM","35.994909","-106.03282","-7","1" +"87569","Serafina","NM","35.345618","-105.26233","-7","1" +"87571","Taos","NM","36.414942","-105.5808","-7","1" +"87573","Tererro","NM","35.795217","-105.65799","-7","1" +"87574","Tesuque","NM","35.787442","-105.915713","-7","1" +"87575","Tierra Amarilla","NM","36.64863","-106.54091","-7","1" +"87576","Trampas","NM","36.504515","-105.62924","-7","1" +"87577","Tres Piedras","NM","36.631809","-105.9267","-7","1" +"87578","Truchas","NM","36.036721","-105.78702","-7","1" +"87579","Vadito","NM","36.160484","-105.56045","-7","1" +"87580","Valdez","NM","36.546068","-105.60728","-7","1" +"87581","Vallecitos","NM","36.537146","-106.13395","-7","1" +"87582","Velarde","NM","36.14773","-105.98866","-7","1" +"87583","Villanueva","NM","35.276415","-105.33759","-7","1" +"87585","Santa Fe","NM","35.632858","-106.044394","-7","1" +"87592","Santa Fe","NM","35.521181","-105.981847","-7","1" +"87594","Santa Fe","NM","35.521181","-105.981847","-7","1" +"87701","Las Vegas","NM","35.594103","-105.08142","-7","1" +"87710","Angel Fire","NM","36.363506","-105.24877","-7","1" +"87711","Anton Chico","NM","35.203048","-105.15426","-7","1" +"87712","Buena Vista","NM","35.881516","-105.18498","-7","1" +"87713","Chacon","NM","36.14795","-105.37302","-7","1" +"87714","Cimarron","NM","36.59956","-105.01333","-7","1" +"87715","Cleveland","NM","36.006137","-105.39831","-7","1" +"87718","Eagle Nest","NM","36.595247","-105.29165","-7","1" +"87722","Guadalupita","NM","36.188161","-105.23043","-7","1" +"87723","Holman","NM","36.045092","-105.3833","-7","1" +"87724","La Loma","NM","35.173408","-104.98272","-7","1" +"87728","Maxwell","NM","36.565525","-104.52049","-7","1" +"87729","Miami","NM","36.358816","-104.82618","-7","1" +"87730","Mills","NM","36.132502","-104.23902","-7","1" +"87731","Montezuma","NM","35.711505","-105.41406","-7","1" +"87732","Mora","NM","35.971938","-105.34137","-7","1" +"87733","Mosquero","NM","35.80364","-103.90051","-7","1" +"87734","Ocate","NM","36.197152","-105.10727","-7","1" +"87735","Ojo Feliz","NM","36.074211","-105.11586","-7","1" +"87736","Rainsville","NM","35.974115","-105.17633","-7","1" +"87740","Raton","NM","36.78767","-104.38693","-7","1" +"87742","Rociada","NM","35.856035","-105.42596","-7","1" +"87743","Roy","NM","36.004279","-103.86353","-7","1" +"87745","Sapello","NM","35.751778","-105.2258","-7","1" +"87746","Solano","NM","35.804116","-103.902091","-7","1" +"87747","Springer","NM","36.366344","-104.39211","-7","1" +"87749","Ute Park","NM","36.606924","-104.692463","-7","1" +"87750","Valmora","NM","35.798216","-104.85007","-7","1" +"87752","Wagon Mound","NM","36.02239","-104.65018","-7","1" +"87753","Watrous","NM","35.880398","-104.98925","-7","1" +"87801","Socorro","NM","33.953237","-106.93722","-7","1" +"87820","Aragon","NM","33.871414","-108.57547","-7","1" +"87821","Datil","NM","33.934215","-108.05889","-7","1" +"87823","Lemitar","NM","34.150585","-106.92814","-7","1" +"87824","Luna","NM","33.879513","-108.91977","-7","1" +"87825","Magdalena","NM","34.139451","-107.36816","-7","1" +"87827","Pie Town","NM","34.387137","-108.14528","-7","1" +"87828","Polvadera","NM","34.201613","-106.92146","-7","1" +"87829","Quemado","NM","34.330192","-108.63899","-7","1" +"87830","Reserve","NM","33.638186","-108.66387","-7","1" +"87831","San Acacia","NM","34.326229","-106.87734","-7","1" +"87832","San Antonio","NM","34.046275","-106.60285","-7","1" +"87901","Truth Or Consequences","NM","33.148245","-107.18741","-7","1" +"87910","Truth or Consequences","NM","33.127764","-107.260088","-7","1" +"87930","Arrey","NM","32.807462","-107.32655","-7","1" +"87931","Caballo","NM","32.969955","-107.36322","-7","1" +"87933","Derry","NM","32.791076","-107.28652","-7","1" +"87935","Elephant Butte","NM","33.208473","-107.22065","-7","1" +"87936","Garfield","NM","32.760034","-107.27535","-7","1" +"87937","Hatch","NM","32.603957","-107.16806","-7","1" +"87939","Monticello","NM","33.377012","-107.43337","-7","1" +"87940","Rincon","NM","32.620805","-107.02161","-7","1" +"87941","Salem","NM","32.699873","-107.13794","-7","1" +"87942","Williamsburg","NM","33.095526","-107.35393","-7","1" +"87943","Winston","NM","33.252863","-107.69183","-7","1" +"87945","Williamsburg","NM","33.116336","-107.28747","-7","1" +"88001","Las Cruces","NM","32.300193","-106.76078","-7","1" +"88002","White Sands Missile Range","NM","32.355099","-106.46884","-7","1" +"88003","Las Cruces","NM","32.279944","-106.7541","-7","1" +"88004","Las Cruces","NM","32.204171","-106.93052","-7","1" +"88005","Las Cruces","NM","32.347752","-106.81463","-7","1" +"88006","Las Cruces","NM","32.305193","-106.786259","-7","1" +"88007","Las Cruces","NM","32.356091","-106.830111","-7","1" +"88008","Santa Teresa","NM","31.879712","-106.71763","-7","1" +"88009","Playas","NM","31.859178","-108.53985","-7","1" +"88011","Las Cruces","NM","32.312506","-106.70306","-7","1" +"88012","Las Cruces","NM","32.417871","-106.6977","-7","1" +"88018","Sunland Park","NM","31.840649","-106.615936","-7","1" +"88020","Animas","NM","31.861247","-108.81515","-7","1" +"88021","Anthony","NM","32.013822","-106.5443","-7","1" +"88022","Arenas Valley","NM","32.781205","-108.15795","-7","1" +"88023","Bayard","NM","32.774869","-108.10736","-7","1" +"88024","Berino","NM","32.068299","-106.61689","-7","1" +"88025","Buckhorn","NM","33.034435","-108.70302","-7","1" +"88026","Santa Clara","NM","32.775681","-108.15359","-7","1" +"88027","Chamberino","NM","32.036669","-106.68516","-7","1" +"88028","Cliff","NM","32.53667","-108.327898","-7","1" +"88029","Columbus","NM","31.823645","-107.73529","-7","1" +"88030","Deming","NM","32.223023","-107.71282","-7","1" +"88031","Deming","NM","32.239815","-107.74042","-7","1" +"88032","Dona Ana","NM","32.393919","-106.800976","-7","1" +"88033","Fairacres","NM","32.19563","-107.10461","-7","1" +"88034","Faywood","NM","32.693536","-107.906536","-7","1" +"88036","Fort Bayard","NM","32.815317","-108.15086","-7","1" +"88038","Gila","NM","32.961804","-108.44042","-7","1" +"88039","Glenwood","NM","33.401692","-108.63575","-7","1" +"88040","Hachita","NM","31.928038","-108.3645","-7","1" +"88041","Hanover","NM","32.726051","-107.97807","-7","1" +"88042","Hillsboro","NM","32.834372","-107.59761","-7","1" +"88043","Hurley","NM","32.673398","-108.11625","-7","1" +"88044","La Mesa","NM","32.149321","-106.72283","-7","1" +"88045","Lordsburg","NM","32.350444","-108.73956","-7","1" +"88046","Mesilla","NM","32.267993","-106.805867","-7","1" +"88047","Mesilla Park","NM","32.213198","-106.71991","-7","1" +"88048","Mesquite","NM","32.152569","-106.66112","-7","1" +"88049","Mimbres","NM","33.029102","-108.14114","-7","1" +"88051","Mule Creek","NM","33.091874","-108.94007","-7","1" +"88052","Organ","NM","32.437435","-106.60256","-7","1" +"88053","Pinos Altos","NM","32.872349","-108.21816","-7","1" +"88054","Radium Springs","NM","32.488841","-106.914575","-7","1" +"88055","Redrock","NM","32.802474","-108.90341","-7","1" +"88056","Rodeo","NM","31.766132","-108.93389","-7","1" +"88058","San Miguel","NM","32.41815","-106.820075","-7","1" +"88061","Silver City","NM","32.729758","-108.30206","-7","1" +"88062","Silver City","NM","32.728228","-108.137931","-7","1" +"88063","Sunland Park","NM","31.799253","-106.57771","-7","1" +"88065","Tyrone","NM","32.707876","-108.30257","-7","1" +"88072","Vado","NM","32.123655","-106.63846","-7","1" +"88081","Chaparral","NM","32.031665","-106.400486","-7","1" +"88085","Las Cruces","NM","32.336251","-106.792993","-7","1" +"88100","Grady","NM","34.6705","-103.329901","-7","1" +"88101","Clovis","NM","34.432846","-103.22589","-7","1" +"88102","Clovis","NM","34.628472","-103.391269","-7","1" +"88103","Cannon AFB","NM","34.401452","-103.326445","-7","1" +"88112","Broadview","NM","34.857544","-103.15193","-7","1" +"88113","Causey","NM","33.843464","-103.10002","-7","1" +"88114","Crossroads","NM","33.526887","-103.32392","-7","1" +"88115","Dora","NM","33.931311","-103.35459","-7","1" +"88116","Elida","NM","33.79692","-103.87575","-7","1" +"88118","Floyd","NM","34.215025","-103.61576","-7","1" +"88119","Fort Sumner","NM","34.346673","-104.24242","-7","1" +"88120","Grady","NM","34.865507","-103.40619","-7","1" +"88121","House","NM","34.706943","-103.97475","-7","1" +"88122","Kenna","NM","33.883159","-103.709525","-7","1" +"88123","Lingo","NM","33.717607","-103.145119","-7","1" +"88124","Melrose","NM","34.528601","-103.62567","-7","1" +"88125","Milnesand","NM","33.628946","-103.1837","-7","1" +"88126","Pep","NM","33.793145","-103.27741","-7","1" +"88130","Portales","NM","34.166231","-103.34255","-7","1" +"88132","Rogers","NM","33.922767","-103.16138","-7","1" +"88133","Saint Vrain","NM","34.475607","-103.46686","-7","1" +"88134","Taiban","NM","34.429099","-103.96633","-7","1" +"88135","Texico","NM","34.511478","-103.06869","-7","1" +"88136","Yeso","NM","34.321787","-104.7305","-7","1" +"88201","Roswell","NM","33.485178","-104.55089","-7","1" +"88202","Roswell","NM","33.303825","-104.431788","-7","1" +"88203","Roswell","NM","33.363439","-104.524894","-7","1" +"88210","Artesia","NM","32.795467","-104.38083","-7","1" +"88211","Artesia","NM","32.753571","-104.328113","-7","1" +"88213","Caprock","NM","33.455761","-103.63843","-7","1" +"88220","Carlsbad","NM","32.408311","-104.29134","-7","1" +"88221","Carlsbad","NM","32.342033","-104.293691","-7","1" +"88230","Dexter","NM","33.244151","-104.3334","-7","1" +"88231","Eunice","NM","32.439762","-103.23598","-7","1" +"88232","Hagerman","NM","33.060827","-104.33708","-7","1" +"88240","Hobbs","NM","32.70778","-103.16616","-7","1" +"88241","Hobbs","NM","32.7475","-103.216516","-7","1" +"88242","Hobbs","NM","32.787805","-103.14592","-7","1" +"88244","Hobbs","NM","32.785417","-103.433804","-7","1" +"88250","Hope","NM","32.735982","-104.88576","-7","1" +"88252","Jal","NM","32.188493","-103.26808","-7","1" +"88253","Lake Arthur","NM","32.954421","-104.45187","-7","1" +"88254","Lakewood","NM","32.65886","-104.45128","-7","1" +"88255","Loco Hills","NM","32.74209","-103.96139","-7","1" +"88256","Loving","NM","32.27936","-103.98784","-7","1" +"88260","Lovington","NM","32.901887","-103.44623","-7","1" +"88262","McDonald","NM","33.148388","-103.35216","-7","1" +"88263","Malaga","NM","32.079363","-103.972","-7","1" +"88264","Maljamar","NM","32.878526","-103.71399","-7","1" +"88265","Monument","NM","32.590107","-103.30857","-7","1" +"88267","Tatum","NM","33.270355","-103.42377","-7","1" +"88268","Whites City","NM","32.188634","-104.36153","-7","1" +"88301","Carrizozo","NM","33.710312","-105.88218","-7","1" +"88310","Alamogordo","NM","32.839921","-105.97561","-7","1" +"88311","Alamogordo","NM","32.695546","-105.612595","-7","1" +"88312","Alto","NM","33.420542","-105.63599","-7","1" +"88314","Bent","NM","33.158737","-105.85196","-7","1" +"88315","Boles Acres","NM","32.806612","-105.99002","-7","1" +"88316","Capitan","NM","33.722955","-105.41326","-7","1" +"88317","Cloudcroft","NM","32.943661","-105.68568","-7","1" +"88318","Corona","NM","34.156361","-105.33238","-7","1" +"88321","Encino","NM","34.750736","-105.51307","-7","1" +"88323","Fort Stanton","NM","33.492448","-105.53021","-7","1" +"88324","Glencoe","NM","33.429637","-105.48489","-7","1" +"88325","High Rolls Mountain Park","NM","32.902131","-105.81338","-7","1" +"88330","Holloman Air Force Base","NM","32.841331","-106.07948","-7","1" +"88332","La Luz","NM","32.980058","-105.938768","-7","1" +"88336","Hondo","NM","33.285158","-105.26783","-7","1" +"88337","La Luz","NM","33.001397","-105.91512","-7","1" +"88338","Lincoln","NM","33.479136","-105.35812","-7","1" +"88339","Mayhill","NM","32.923979","-105.40542","-7","1" +"88340","Mescalero","NM","33.157278","-105.73266","-7","1" +"88341","Nogal","NM","33.520074","-105.73072","-7","1" +"88342","Orogrande","NM","32.405061","-106.079686","-7","1" +"88343","Picacho","NM","33.267631","-105.01969","-7","1" +"88344","Pinon","NM","32.663082","-105.36135","-7","1" +"88345","Ruidoso","NM","33.350032","-105.66637","-7","1" +"88346","Ruidoso Downs","NM","33.342426","-105.56694","-7","1" +"88347","Sacramento","NM","32.789854","-105.60437","-7","1" +"88348","San Patricio","NM","33.415814","-105.36046","-7","1" +"88349","Sunspot","NM","32.8672","-105.781129","-7","1" +"88350","Timberon","NM","32.629637","-105.68663","-7","1" +"88351","Tinnie","NM","33.480197","-105.01755","-7","1" +"88352","Tularosa","NM","33.098649","-106.02058","-7","1" +"88353","Vaughn","NM","34.585906","-105.14392","-7","1" +"88354","Weed","NM","32.783249","-105.47306","-7","1" +"88355","Ruidoso","NM","33.330502","-105.693322","-7","1" +"88401","Tucumcari","NM","35.103769","-103.77676","-7","1" +"88410","Amistad","NM","35.890633","-103.20194","-7","1" +"88411","Bard","NM","35.174099","-103.18444","-7","1" +"88414","Capulin","NM","36.740696","-103.99329","-7","1" +"88415","Clayton","NM","36.387827","-103.22216","-7","1" +"88416","Conchas Dam","NM","35.387857","-104.18276","-7","1" +"88417","Cuervo","NM","35.014908","-104.41778","-7","1" +"88418","Des Moines","NM","36.734124","-103.74791","-7","1" +"88419","Folsom","NM","36.896078","-103.56942","-7","1" +"88421","Garita","NM","35.313786","-104.47567","-7","1" +"88422","Gladstone","NM","36.353757","-103.96571","-7","1" +"88424","Grenville","NM","36.458919","-103.62143","-7","1" +"88426","Logan","NM","35.348463","-103.39045","-7","1" +"88427","McAlister","NM","34.770332","-103.81162","-7","1" +"88429","Mount Dora","NM","36.369783","-103.505541","-7","1" +"88430","Nara Visa","NM","35.644244","-103.21973","-7","1" +"88431","Newkirk","NM","35.157683","-104.2151","-7","1" +"88433","Quay","NM","34.916697","-103.778184","-7","1" +"88434","San Jon","NM","35.098357","-103.34027","-7","1" +"88435","Santa Rosa","NM","34.862953","-104.81362","-7","1" +"88436","Sedan","NM","36.137255","-103.12311","-7","1" +"88437","Seneca","NM","36.710694","-103.14925","-7","1" +"88439","Trementina","NM","35.456288","-104.679611","-7","1" +"88441","Bell Ranch","NM","35.456288","-104.679611","-7","1" +"88510","El Paso","TX","31.694842","-106.299987","-7","1" +"88511","El Paso","TX","31.694842","-106.299987","-7","1" +"88512","El Paso","TX","31.694842","-106.299987","-7","1" +"88513","El Paso","TX","31.694842","-106.299987","-7","1" +"88514","El Paso","TX","31.694842","-106.299987","-7","1" +"88515","El Paso","TX","31.694842","-106.299987","-7","1" +"88516","El Paso","TX","31.694842","-106.299987","-7","1" +"88517","El Paso","TX","31.694842","-106.299987","-7","1" +"88518","El Paso","TX","31.694842","-106.299987","-7","1" +"88519","El Paso","TX","31.694842","-106.299987","-7","1" +"88520","El Paso","TX","31.694842","-106.299987","-7","1" +"88521","El Paso","TX","31.694842","-106.299987","-7","1" +"88523","El Paso","TX","31.694842","-106.299987","-7","1" +"88524","El Paso","TX","31.694842","-106.299987","-7","1" +"88525","El Paso","TX","31.694842","-106.299987","-7","1" +"88526","El Paso","TX","31.694842","-106.299987","-7","1" +"88527","El Paso","TX","31.694842","-106.299987","-7","1" +"88528","El Paso","TX","31.694842","-106.299987","-7","1" +"88529","El Paso","TX","31.694842","-106.299987","-7","1" +"88530","El Paso","TX","31.694842","-106.299987","-7","1" +"88531","El Paso","TX","31.694842","-106.299987","-7","1" +"88532","El Paso","TX","31.694842","-106.299987","-7","1" +"88533","El Paso","TX","31.694842","-106.299987","-7","1" +"88534","El Paso","TX","31.694842","-106.299987","-7","1" +"88535","El Paso","TX","31.694842","-106.299987","-7","1" +"88536","El Paso","TX","31.694842","-106.299987","-7","1" +"88538","El Paso","TX","31.694842","-106.299987","-7","1" +"88539","El Paso","TX","31.694842","-106.299987","-7","1" +"88540","El Paso","TX","31.694842","-106.299987","-7","1" +"88541","El Paso","TX","31.694842","-106.299987","-7","1" +"88542","El Paso","TX","31.694842","-106.299987","-7","1" +"88543","El Paso","TX","31.694842","-106.299987","-7","1" +"88544","El Paso","TX","31.694842","-106.299987","-7","1" +"88545","El Paso","TX","31.694842","-106.299987","-7","1" +"88546","El Paso","TX","31.694842","-106.299987","-7","1" +"88547","El Paso","TX","31.694842","-106.299987","-7","1" +"88548","El Paso","TX","31.694842","-106.299987","-7","1" +"88549","El Paso","TX","31.694842","-106.299987","-7","1" +"88550","El Paso","TX","31.694842","-106.299987","-7","1" +"88553","El Paso","TX","31.694842","-106.299987","-7","1" +"88554","El Paso","TX","31.694842","-106.299987","-7","1" +"88555","El Paso","TX","31.694842","-106.299987","-7","1" +"88556","El Paso","TX","31.694842","-106.299987","-7","1" +"88557","El Paso","TX","31.694842","-106.299987","-7","1" +"88558","El Paso","TX","31.694842","-106.299987","-7","1" +"88559","El Paso","TX","31.694842","-106.299987","-7","1" +"88560","El Paso","TX","31.694842","-106.299987","-7","1" +"88561","El Paso","TX","31.694842","-106.299987","-7","1" +"88562","El Paso","TX","31.694842","-106.299987","-7","1" +"88563","El Paso","TX","31.694842","-106.299987","-7","1" +"88565","El Paso","TX","31.694842","-106.299987","-7","1" +"88566","El Paso","TX","31.694842","-106.299987","-7","1" +"88567","El Paso","TX","31.694842","-106.299987","-7","1" +"88568","El Paso","TX","31.694842","-106.299987","-7","1" +"88569","El Paso","TX","31.694842","-106.299987","-7","1" +"88570","El Paso","TX","31.694842","-106.299987","-7","1" +"88571","El Paso","TX","31.694842","-106.299987","-7","1" +"88572","El Paso","TX","31.694842","-106.299987","-7","1" +"88573","El Paso","TX","31.694842","-106.299987","-7","1" +"88574","El Paso","TX","31.694842","-106.299987","-7","1" +"88575","El Paso","TX","31.694842","-106.299987","-7","1" +"88576","El Paso","TX","31.694842","-106.299987","-7","1" +"88577","El Paso","TX","31.694842","-106.299987","-7","1" +"88578","El Paso","TX","31.694842","-106.299987","-7","1" +"88579","El Paso","TX","31.694842","-106.299987","-7","1" +"88580","El Paso","TX","31.694842","-106.299987","-7","1" +"88581","El Paso","TX","31.694842","-106.299987","-7","1" +"88582","El Paso","TX","31.694842","-106.299987","-7","1" +"88583","El Paso","TX","31.694842","-106.299987","-7","1" +"88584","El Paso","TX","31.694842","-106.299987","-7","1" +"88585","El Paso","TX","31.694842","-106.299987","-7","1" +"88586","El Paso","TX","31.694842","-106.299987","-7","1" +"88587","El Paso","TX","31.694842","-106.299987","-7","1" +"88588","El Paso","TX","31.694842","-106.299987","-7","1" +"88589","El Paso","TX","31.694842","-106.299987","-7","1" +"88590","El Paso","TX","31.694842","-106.299987","-7","1" +"88595","El Paso","TX","31.694842","-106.299987","-7","1" +"88603","Roswell","NM","33.361658","-104.528038","-7","1" +"88901","The Lakes","NV","36.322484","-114.819717","-8","1" +"88905","The Lakes","NV","35.927901","-114.972061","-8","1" +"89001","Alamo","NV","37.381946","-115.31502","-8","1" +"89003","Beatty","NV","37.027453","-116.84011","-8","1" +"89004","Blue Diamond","NV","36.046247","-115.40483","-8","1" +"89005","Boulder City","NV","35.968615","-114.83354","-8","1" +"89006","Boulder City","NV","35.927901","-114.972061","-8","1" +"89007","Bunkerville","NV","36.766887","-114.13298","-8","1" +"89008","Caliente","NV","37.488849","-114.45374","-8","1" +"89009","Henderson","NV","35.927901","-114.972061","-8","1" +"89010","Dyer","NV","37.751707","-118.08592","-8","1" +"89011","Henderson","NV","36.121607","-114.92514","-8","1" +"89012","Henderson","NV","36.017578","-115.05438","-8","1" +"89013","Goldfield","NV","37.571495","-117.31507","-8","1" +"89014","Henderson","NV","36.045811","-115.0778","-8","1" +"89015","Henderson","NV","36.030927","-114.96787","-8","1" +"89016","Henderson","NV","35.927901","-114.972061","-8","1" +"89017","Hiko","NV","37.592182","-115.28676","-8","1" +"89018","Indian Springs","NV","36.573712","-115.67024","-8","1" +"89019","Jean","NV","35.801952","-115.57819","-8","1" +"89020","Amargosa Valley","NV","36.52513","-116.46173","-8","1" +"89021","Logandale","NV","36.616546","-114.47184","-8","1" +"89022","Manhattan","NV","38.738647","-117.0789","-8","1" +"89023","Mercury","NV","37.583805","-116.598559","-8","1" +"89024","Mesquite","AZ","36.789432","-114.01042","-7","0" +"89025","Moapa","NV","36.674946","-114.66488","-8","1" +"89026","Jean","NV","35.927901","-114.972061","-8","1" +"89027","Mesquite","NV","36.804651","-114.08749","-8","1" +"89028","Laughlin","NV","35.013978","-114.6447","-8","1" +"89029","Laughlin","NV","35.138674","-114.62875","-8","1" +"89030","North Las Vegas","NV","36.206419","-115.12318","-8","1" +"89031","North Las Vegas","NV","36.256479","-115.16139","-8","1" +"89032","North Las Vegas","NV","36.224218","-115.1763","-8","1" +"89033","North Las Vegas","NV","36.284511","-115.134488","-8","1" +"89036","North Las Vegas","NV","35.927901","-114.972061","-8","1" +"89039","Cal Nev Ari","NV","35.28299","-114.87299","-8","1" +"89040","Overton","NV","36.540495","-114.45478","-8","1" +"89041","Pahrump","NV","36.655797","-116.004795","-8","1" +"89042","Panaca","NV","37.785734","-114.38399","-8","1" +"89043","Pioche","NV","38.122239","-114.40318","-8","1" +"89045","Round Mountain","NV","37.583805","-116.598559","-8","1" +"89046","Searchlight","NV","35.525338","-114.91149","-8","1" +"89047","Silverpeak","NV","37.751386","-117.64225","-8","1" +"89048","Pahrump","NV","36.218341","-116.00994","-8","1" +"89049","Tonopah","NV","38.307931","-116.92779","-8","1" +"89052","Henderson","NV","35.979863","-115.09895","-8","1" +"89053","Henderson","NV","35.927901","-114.972061","-8","1" +"89060","Pahrump","NV","36.264185","-116.038857","-8","1" +"89061","Pahrump","NV","36.119299","-115.938992","-8","1" +"89070","Indian Springs","NV","35.927901","-114.972061","-8","1" +"89074","Henderson","NV","36.038181","-115.086999","-8","1" +"89081","Indian Springs","NV","36.573377","-115.674671","-8","1" +"89084","North Las Vegas","NV","36.281388","-115.148644","-8","1" +"89086","North Las Vegas","NV","36.28094","-115.132695","-8","1" +"89101","Las Vegas","NV","36.17022","-115.12785","-8","1" +"89102","Las Vegas","NV","36.145303","-115.18358","-8","1" +"89103","Las Vegas","NV","36.113211","-115.21849","-8","1" +"89104","Las Vegas","NV","36.151108","-115.10857","-8","1" +"89106","Las Vegas","NV","36.184219","-115.16292","-8","1" +"89107","Las Vegas","NV","36.171219","-115.21682","-8","1" +"89108","Las Vegas","NV","36.205718","-115.22363","-8","1" +"89109","Las Vegas","NV","36.126038","-115.14796","-8","1" +"89110","Las Vegas","NV","36.172744","-115.05795","-8","1" +"89111","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89112","Las Vegas","NV","36.157764","-115.025559","-8","1" +"89113","Las Vegas","NV","36.067495","-115.26039","-8","1" +"89114","Las Vegas","NV","36.011339","-115.101508","-8","1" +"89115","Las Vegas","NV","36.233655","-115.06881","-8","1" +"89116","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89117","Las Vegas","NV","36.140974","-115.28205","-8","1" +"89118","Las Vegas","NV","36.084361","-115.2103","-8","1" +"89119","Las Vegas","NV","36.088922","-115.13905","-8","1" +"89120","Las Vegas","NV","36.087623","-115.08872","-8","1" +"89121","Las Vegas","NV","36.121972","-115.0903","-8","1" +"89122","Las Vegas","NV","36.10524","-115.04592","-8","1" +"89123","Las Vegas","NV","36.026532","-115.14848","-8","1" +"89124","Las Vegas","NV","36.101538","-115.39948","-8","1" +"89125","Las Vegas","NV","36.223528","-115.265529","-8","1" +"89126","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89127","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89128","Las Vegas","NV","36.193501","-115.265","-8","1" +"89129","Las Vegas","NV","36.231139","-115.28461","-8","1" +"89130","Las Vegas","NV","36.257531","-115.22728","-8","1" +"89131","Las Vegas","NV","36.294596","-115.24685","-8","1" +"89132","Las Vegas","NV","36.018981","-115.151937","-8","1" +"89133","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89134","Las Vegas","NV","36.204548","-115.31207","-8","1" +"89135","Las Vegas","NV","36.131341","-115.32331","-8","1" +"89136","Summerlin South","NV","36.129519","-115.322782","-8","1" +"89137","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89138","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89139","Las Vegas","NV","36.031873","-115.20342","-8","1" +"89141","Las Vegas","NV","35.998778","-115.19588","-8","1" +"89142","Las Vegas","NV","36.148417","-115.04767","-8","1" +"89143","Las Vegas","NV","36.326315","-115.25788","-8","1" +"89144","Las Vegas","NV","36.181142","-115.32557","-8","1" +"89145","Las Vegas","NV","36.167731","-115.26791","-8","1" +"89146","Las Vegas","NV","36.141119","-115.22493","-8","1" +"89147","Las Vegas","NV","36.113059","-115.27343","-8","1" +"89148","Las Vegas","NV","36.049095","-115.28485","-8","1" +"89149","Las Vegas","NV","36.266266","-115.28656","-8","1" +"89150","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89151","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89152","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89153","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89154","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89155","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89156","Las Vegas","NV","36.201612","-115.03358","-8","1" +"89158","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89159","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89160","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89163","The Lakes","NV","35.927901","-114.972061","-8","1" +"89164","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89170","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89173","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89177","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89180","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89185","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89191","Nellis AFB","NV","36.370315","-115.23128","-8","1" +"89193","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89195","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89199","Las Vegas","NV","35.927901","-114.972061","-8","1" +"89301","Ely","NV","39.282855","-114.9208","-8","1" +"89310","Austin","NV","39.748753","-117.01152","-8","1" +"89311","Baker","NV","38.941805","-114.12592","-8","1" +"89314","Duckwater","NV","38.944921","-115.70749","-8","1" +"89315","Ely","NV","39.332636","-114.824507","-8","1" +"89316","Eureka","NV","39.717627","-116.02944","-8","1" +"89317","Lund","NV","38.835421","-115.02628","-8","1" +"89318","McGill","NV","39.4163","-114.77624","-8","1" +"89319","Ruth","NV","39.342631","-114.885945","-8","1" +"89402","Crystal Bay","NV","39.239457","-119.971133","-8","1" +"89403","Dayton","NV","39.25468","-119.51494","-8","1" +"89404","Denio","NV","41.826461","-118.71295","-8","1" +"89405","Empire","NV","40.555197","-119.35093","-8","1" +"89406","Fallon","NV","39.461072","-118.69306","-8","1" +"89407","Fallon","NV","39.525628","-118.842431","-8","1" +"89408","Fernley","NV","39.617711","-119.17374","-8","1" +"89409","Gabbs","NV","38.872139","-117.78194","-8","1" +"89410","Gardnerville","NV","38.878641","-119.69753","-8","1" +"89411","Genoa","NV","39.012361","-119.83288","-8","1" +"89412","Gerlach","NV","40.652505","-119.356505","-8","1" +"89413","Glenbrook","NV","39.083284","-119.93964","-8","1" +"89414","Golconda","NV","40.926644","-117.31706","-8","1" +"89415","Hawthorne","NV","38.505507","-118.70342","-8","1" +"89418","Imlay","NV","40.700131","-118.11473","-8","1" +"89419","Lovelock","NV","40.21672","-118.39475","-8","1" +"89420","Luning","NV","38.555308","-118.21818","-8","1" +"89421","McDermitt","NV","41.953624","-117.72501","-8","1" +"89422","Mina","NV","38.271173","-118.19513","-8","1" +"89423","Minden","NV","39.009564","-119.75557","-8","1" +"89424","Nixon","NV","39.835829","-119.35634","-8","1" +"89425","Orovada","NV","41.656001","-117.95538","-8","1" +"89426","Paradise Valley","NV","41.596722","-117.40232","-8","1" +"89427","Schurz","NV","38.966064","-118.67848","-8","1" +"89428","Silver City","NV","39.262835","-119.64083","-8","1" +"89429","Silver Springs","NV","39.367838","-119.24618","-8","1" +"89430","Smith","NV","38.784128","-119.31697","-8","1" +"89431","Sparks","NV","39.542711","-119.75445","-8","1" +"89432","Sparks","NV","40.541218","-119.586934","-8","1" +"89433","Sun Valley","NV","39.59218","-119.77467","-8","1" +"89434","Sparks","NV","39.544183","-119.70003","-8","1" +"89435","Sparks","NV","40.541218","-119.586934","-8","1" +"89436","Sparks","NV","39.624698","-119.70585","-8","1" +"89438","Valmy","NV","41.263287","-118.174506","-8","1" +"89439","Verdi","CA","39.523693","-120.03012","-8","1" +"89440","Virginia City","NV","39.298192","-119.65351","-8","1" +"89442","Wadsworth","NV","39.659593","-119.30527","-8","1" +"89444","Wellington","NV","38.738712","-119.34585","-8","1" +"89445","Winnemucca","NV","41.02951","-117.94402","-8","1" +"89446","Winnemucca","NV","41.076358","-117.760165","-8","1" +"89447","Yerington","NV","38.94675","-119.11544","-8","1" +"89448","Zephyr Cove","NV","39.006963","-119.94762","-8","1" +"89449","Stateline","NV","38.968383","-119.91364","-8","1" +"89450","Incline Village","NV","39.256357","-119.946371","-8","1" +"89451","Incline Village","NV","39.245257","-119.95204","-8","1" +"89452","Incline Village","NV","39.259103","-119.956585","-8","1" +"89460","Gardnerville Ranchos","NV","38.903324","-119.763147","-8","1" +"89496","Fallon","NV","39.537979","-118.343592","-8","1" +"89501","Reno","NV","39.52616","-119.81367","-8","1" +"89502","Reno","NV","39.499862","-119.77497","-8","1" +"89503","Reno","NV","39.53636","-119.8373","-8","1" +"89504","Reno","NV","40.541218","-119.586934","-8","1" +"89505","Reno","NV","39.52241","-119.835275","-8","1" +"89506","Reno","NV","39.659801","-119.87918","-8","1" +"89507","Reno","NV","39.54231","-119.816374","-8","1" +"89509","Reno","NV","39.496243","-119.83072","-8","1" +"89510","Reno","NV","39.87107","-119.71313","-8","1" +"89511","Reno","NV","39.403178","-119.7606","-8","1" +"89512","Reno","NV","39.54641","-119.79664","-8","1" +"89513","Reno","NV","39.631922","-119.293722","-8","1" +"89515","Reno","NV","40.541218","-119.586934","-8","1" +"89520","Reno","NV","40.541218","-119.586934","-8","1" +"89521","Reno","NV","39.395387","-119.72735","-8","1" +"89523","Reno","NV","39.523088","-119.89808","-8","1" +"89533","Reno","NV","39.543941","-119.906109","-8","1" +"89557","Reno","NV","40.541218","-119.586934","-8","1" +"89564","Reno","NV","40.541218","-119.586934","-8","1" +"89570","Reno","NV","40.541218","-119.586934","-8","1" +"89595","Reno","NV","40.541218","-119.586934","-8","1" +"89599","Reno","NV","40.541218","-119.586934","-8","1" +"89701","Carson City","NV","39.147877","-119.74536","-8","1" +"89702","Carson City","NV","39.135503","-119.75875","-8","1" +"89703","Carson City","NV","39.164966","-119.79382","-8","1" +"89704","Washoe Valley","NV","39.27521","-119.7908","-8","1" +"89705","Carson City","NV","39.091507","-119.79896","-8","1" +"89706","Carson City","NV","39.200035","-119.72732","-8","1" +"89710","Carson City","NV","39.167833","-119.776409","-8","1" +"89711","Carson City","NV","39.167833","-119.776409","-8","1" +"89712","Carson City","NV","39.167833","-119.776409","-8","1" +"89713","Carson City","NV","39.167833","-119.776409","-8","1" +"89714","Carson City","NV","39.167833","-119.776409","-8","1" +"89721","Carson City","NV","39.167833","-119.776409","-8","1" +"89779","Kingsbury","NV","38.971319","-119.922973","-8","1" +"89801","Elko","NV","40.883028","-115.75016","-8","1" +"89802","Elko","NV","41.059414","-115.529596","-8","1" +"89803","Elko","NV","40.81488","-115.79241","-8","1" +"89815","Spring Creek","NV","40.644201","-115.64745","-8","1" +"89820","Battle Mountain","NV","40.489736","-117.08692","-8","1" +"89821","Crescent Valley","NV","40.450972","-116.51585","-8","1" +"89822","Carlin","NV","40.715963","-116.11426","-8","1" +"89823","Deeth","NV","41.252236","-115.40266","-8","1" +"89824","Halleck","NV","41.029538","-115.4113","-8","1" +"89825","Jackpot","NV","41.890872","-114.44545","-8","1" +"89826","Jarbidge","NV","41.905845","-115.43542","-8","1" +"89828","Lamoille","NV","40.79727","-115.44828","-8","1" +"89830","Montello","NV","41.247573","-114.21077","-8","1" +"89831","Mountain City","NV","41.796309","-116.05489","-8","1" +"89832","Owyhee","NV","41.951703","-116.17725","-8","1" +"89833","Ruby Valley","NV","40.453542","-115.33257","-8","1" +"89834","Tuscarora","NV","41.328852","-116.12251","-8","1" +"89835","Wells","NV","41.208288","-114.86098","-8","1" +"89883","West Wendover","NV","40.854751","-114.14713","-8","1" +"89912","Gerlach-Empire","NV","40.651432","-119.357959","-8","1" +"90001","Los Angeles","CA","33.972914","-118.24878","-8","1" +"90002","Los Angeles","CA","33.948315","-118.24845","-8","1" +"90003","Los Angeles","CA","33.962714","-118.276","-8","1" +"90004","Los Angeles","CA","34.07711","-118.30755","-8","1" +"90005","Los Angeles","CA","34.058911","-118.30848","-8","1" +"90006","Los Angeles","CA","34.048351","-118.2943","-8","1" +"90007","Los Angeles","CA","34.026448","-118.2829","-8","1" +"90008","Los Angeles","CA","34.009754","-118.33705","-8","1" +"90009","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90010","Los Angeles","CA","34.062709","-118.31481","-8","1" +"90011","Los Angeles","CA","34.007063","-118.25868","-8","1" +"90012","Los Angeles","CA","34.061611","-118.23944","-8","1" +"90013","Los Angeles","CA","34.044662","-118.24255","-8","1" +"90014","Los Angeles","CA","34.042912","-118.25193","-8","1" +"90015","Los Angeles","CA","34.038993","-118.26516","-8","1" +"90016","Los Angeles","CA","34.029711","-118.35255","-8","1" +"90017","Los Angeles","CA","34.052561","-118.26434","-8","1" +"90018","Los Angeles","CA","34.029112","-118.3183","-8","1" +"90019","Los Angeles","CA","34.048411","-118.34015","-8","1" +"90020","Los Angeles","CA","34.06646","-118.30863","-8","1" +"90021","Los Angeles","CA","34.029313","-118.24182","-8","1" +"90022","Los Angeles","CA","34.023662","-118.15581","-8","1" +"90023","Los Angeles","CA","34.023039","-118.20231","-8","1" +"90024","Los Angeles","CA","34.063209","-118.43643","-8","1" +"90025","Los Angeles","CA","34.045006","-118.44527","-8","1" +"90026","Los Angeles","CA","34.07851","-118.26596","-8","1" +"90027","Los Angeles","CA","34.111208","-118.28842","-8","1" +"90028","Los Angeles","CA","34.098859","-118.32745","-8","1" +"90029","Los Angeles","CA","34.090259","-118.29455","-8","1" +"90030","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90031","Los Angeles","CA","34.07871","-118.2161","-8","1" +"90032","Los Angeles","CA","34.08166","-118.17568","-8","1" +"90033","Los Angeles","CA","34.050411","-118.21195","-8","1" +"90034","Los Angeles","CA","34.03056","-118.39804","-8","1" +"90035","Los Angeles","CA","34.05266","-118.38531","-8","1" +"90036","Los Angeles","CA","34.07036","-118.34926","-8","1" +"90037","Los Angeles","CA","34.002063","-118.28737","-8","1" +"90038","Los Angeles","CA","34.089459","-118.3285","-8","1" +"90039","Los Angeles","CA","34.110425","-118.25832","-8","1" +"90040","Los Angeles","CA","33.997492","-118.15284","-8","1" +"90041","Los Angeles","CA","34.137557","-118.20765","-8","1" +"90042","Los Angeles","CA","34.114558","-118.19233","-8","1" +"90043","Los Angeles","CA","33.987463","-118.334","-8","1" +"90044","Los Angeles","CA","33.953814","-118.29158","-8","1" +"90045","Los Angeles","CA","33.960041","-118.3949","-8","1" +"90046","Los Angeles","CA","34.098908","-118.36241","-8","1" +"90047","Los Angeles","CA","33.958464","-118.30998","-8","1" +"90048","Los Angeles","CA","34.073759","-118.37376","-8","1" +"90049","Los Angeles","CA","34.067409","-118.47528","-8","1" +"90050","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90051","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90052","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90053","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90054","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90055","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90056","Los Angeles","CA","33.986212","-118.37099","-8","1" +"90057","Los Angeles","CA","34.061911","-118.27687","-8","1" +"90058","Los Angeles","CA","34.000219","-118.22605","-8","1" +"90059","Los Angeles","CA","33.927471","-118.24778","-8","1" +"90060","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90061","Los Angeles","CA","33.923365","-118.27591","-8","1" +"90062","Los Angeles","CA","34.003213","-118.3078","-8","1" +"90063","Los Angeles","CA","34.045161","-118.1865","-8","1" +"90064","Los Angeles","CA","34.03457","-118.42843","-8","1" +"90065","Los Angeles","CA","34.107559","-118.22663","-8","1" +"90066","Los Angeles","CA","34.002011","-118.43083","-8","1" +"90067","Los Angeles","CA","34.056709","-118.41183","-8","1" +"90068","Los Angeles","CA","34.122058","-118.3379","-8","1" +"90069","West Hollywood","CA","34.090975","-118.3813","-8","1" +"90070","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90071","Los Angeles","CA","34.052709","-118.2559","-8","1" +"90072","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90073","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90074","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90075","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90076","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90077","Los Angeles","CA","34.101007","-118.45077","-8","1" +"90078","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90079","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90080","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90081","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90082","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90083","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90084","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90086","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90087","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90088","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90089","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90091","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90093","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90094","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90095","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90096","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90097","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90099","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90101","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90102","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90103","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90174","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90185","Los Angeles","CA","33.786594","-118.298662","-8","1" +"90201","Bell","CA","33.972814","-118.17385","-8","1" +"90202","Bell Gardens","CA","33.786594","-118.298662","-8","1" +"90204","Inglewood","CA","33.944714","-118.356908","-8","1" +"90209","Beverly Hills","CA","33.786594","-118.298662","-8","1" +"90210","Beverly Hills","CA","34.088808","-118.40612","-8","1" +"90211","Beverly Hills","CA","34.066009","-118.38271","-8","1" +"90212","Beverly Hills","CA","34.060859","-118.40191","-8","1" +"90213","Beverly Hills","CA","33.786594","-118.298662","-8","1" +"90220","Compton","CA","33.890566","-118.23666","-8","1" +"90221","Compton","CA","33.893265","-118.204","-8","1" +"90222","Compton","CA","33.910716","-118.23624","-8","1" +"90223","Compton","CA","33.786594","-118.298662","-8","1" +"90224","Compton","CA","33.786594","-118.298662","-8","1" +"90230","Culver City","CA","33.997179","-118.40145","-8","1" +"90231","Culver City","CA","33.786594","-118.298662","-8","1" +"90232","Culver City","CA","34.021611","-118.39168","-8","1" +"90233","Culver City","CA","33.786594","-118.298662","-8","1" +"90239","Downey","CA","33.786594","-118.298662","-8","1" +"90240","Downey","CA","33.958363","-118.11987","-8","1" +"90241","Downey","CA","33.942289","-118.12901","-8","1" +"90242","Downey","CA","33.92018","-118.14291","-8","1" +"90245","El Segundo","CA","33.921313","-118.40843","-8","1" +"90247","Gardena","CA","33.891265","-118.2975","-8","1" +"90248","Gardena","CA","33.870466","-118.28813","-8","1" +"90249","Gardena","CA","33.899265","-118.319","-8","1" +"90250","Hawthorne","CA","33.914614","-118.35092","-8","1" +"90251","Hawthorne","CA","33.786594","-118.298662","-8","1" +"90254","Hermosa Beach","CA","33.866314","-118.39968","-8","1" +"90255","Huntington Park","CA","33.978404","-118.21773","-8","1" +"90260","Lawndale","CA","33.888364","-118.35355","-8","1" +"90261","Lawndale","CA","33.895363","-118.37689","-8","1" +"90262","Lynwood","CA","33.924642","-118.20186","-8","1" +"90263","Malibu","CA","34.035087","-118.70752","-8","1" +"90264","Malibu","CA","33.786594","-118.298662","-8","1" +"90265","Malibu","CA","34.051056","-118.80768","-8","1" +"90266","Manhattan Beach","CA","33.88898","-118.40535","-8","1" +"90267","Manhattan Beach","CA","33.786594","-118.298662","-8","1" +"90270","Maywood","CA","33.988813","-118.18642","-8","1" +"90272","Pacific Palisades","CA","34.050505","-118.53374","-8","1" +"90274","Palos Verdes Peninsula","CA","33.784099","-118.38752","-8","1" +"90275","Rancho Palos Verdes","CA","33.758216","-118.36425","-8","1" +"90276","Redondo Beach","CA","33.845064","-118.395107","-8","1" +"90277","Redondo Beach","CA","33.828815","-118.38322","-8","1" +"90278","Redondo Beach","CA","33.871214","-118.37177","-8","1" +"90280","South Gate","CA","33.944264","-118.1949","-8","1" +"90290","Topanga","CA","34.101447","-118.59933","-8","1" +"90291","Venice","CA","33.992411","-118.46531","-8","1" +"90292","Marina Del Rey","CA","33.976373","-118.45458","-8","1" +"90293","Playa Del Rey","CA","33.957012","-118.44167","-8","1" +"90294","Venice","CA","33.786594","-118.298662","-8","1" +"90295","Marina Del Rey","CA","33.786594","-118.298662","-8","1" +"90296","Playa Del Rey","CA","33.786594","-118.298662","-8","1" +"90301","Inglewood","CA","33.955913","-118.35868","-8","1" +"90302","Inglewood","CA","33.975263","-118.35558","-8","1" +"90303","Inglewood","CA","33.934164","-118.33255","-8","1" +"90304","Inglewood","CA","33.936163","-118.36076","-8","1" +"90305","Inglewood","CA","33.960263","-118.3252","-8","1" +"90306","Inglewood","CA","33.786594","-118.298662","-8","1" +"90307","Inglewood","CA","33.786594","-118.298662","-8","1" +"90308","Inglewood","CA","33.786594","-118.298662","-8","1" +"90309","Inglewood","CA","33.786594","-118.298662","-8","1" +"90310","Inglewood","CA","33.786594","-118.298662","-8","1" +"90311","Inglewood","CA","33.786594","-118.298662","-8","1" +"90312","Inglewood","CA","33.786594","-118.298662","-8","1" +"90313","Inglewood","CA","33.786594","-118.298662","-8","1" +"90397","Inglewood","CA","33.786594","-118.298662","-8","1" +"90398","Inglewood","CA","33.786594","-118.298662","-8","1" +"90401","Santa Monica","CA","34.01491","-118.4922","-8","1" +"90402","Santa Monica","CA","34.036759","-118.50121","-8","1" +"90403","Santa Monica","CA","34.032159","-118.49022","-8","1" +"90404","Santa Monica","CA","34.026959","-118.47432","-8","1" +"90405","Santa Monica","CA","34.009276","-118.47286","-8","1" +"90406","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90407","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90408","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90409","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90410","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90411","Santa Monica","CA","33.786594","-118.298662","-8","1" +"90421","Santa Monica","CA","34.010328","-118.494107","-8","1" +"90501","Torrance","CA","33.828766","-118.31367","-8","1" +"90502","Torrance","CA","33.833416","-118.29198","-8","1" +"90503","Torrance","CA","33.840264","-118.35587","-8","1" +"90504","Torrance","CA","33.870414","-118.33065","-8","1" +"90505","Torrance","CA","33.810848","-118.35096","-8","1" +"90506","Torrance","CA","33.786594","-118.298662","-8","1" +"90507","Torrance","CA","33.786594","-118.298662","-8","1" +"90508","Torrance","CA","33.786594","-118.298662","-8","1" +"90509","Torrance","CA","33.786594","-118.298662","-8","1" +"90510","Torrance","CA","33.786594","-118.298662","-8","1" +"90601","Whittier","CA","34.002333","-118.03562","-8","1" +"90602","Whittier","CA","33.967562","-118.03384","-8","1" +"90603","Whittier","CA","33.941363","-117.99477","-8","1" +"90604","Whittier","CA","33.929163","-118.009","-8","1" +"90605","Whittier","CA","33.945413","-118.03362","-8","1" +"90606","Whittier","CA","33.978312","-118.06778","-8","1" +"90607","Whittier","CA","33.786594","-118.298662","-8","1" +"90608","Whittier","CA","33.786594","-118.298662","-8","1" +"90609","Whittier","CA","33.786594","-118.298662","-8","1" +"90610","Whittier","CA","33.786594","-118.298662","-8","1" +"90612","Whittier","CA","33.786594","-118.298662","-8","1" +"90620","Buena Park","CA","33.841014","-118.00969","-8","1" +"90621","Buena Park","CA","33.875714","-117.99404","-8","1" +"90622","Buena Park","CA","33.640302","-117.769442","-8","1" +"90623","La Palma","CA","33.849327","-118.04395","-8","1" +"90624","Buena Park","CA","33.640302","-117.769442","-8","1" +"90630","Cypress","CA","33.817481","-118.0399","-8","1" +"90631","La Habra","CA","33.934513","-117.95159","-8","1" +"90632","La Habra","CA","33.640302","-117.769442","-8","1" +"90633","La Habra","CA","33.640302","-117.769442","-8","1" +"90637","La Mirada","CA","33.786594","-118.298662","-8","1" +"90638","La Mirada","CA","33.90213","-118.00966","-8","1" +"90639","La Mirada","CA","33.905813","-118.018247","-8","1" +"90640","Montebello","CA","34.014212","-118.11358","-8","1" +"90650","Norwalk","CA","33.906914","-118.08339","-8","1" +"90651","Norwalk","CA","33.786594","-118.298662","-8","1" +"90652","Norwalk","CA","33.786594","-118.298662","-8","1" +"90659","Norwalk","CA","33.786594","-118.298662","-8","1" +"90660","Pico Rivera","CA","33.989013","-118.08912","-8","1" +"90661","Pico Rivera","CA","33.786594","-118.298662","-8","1" +"90662","Pico Rivera","CA","33.786594","-118.298662","-8","1" +"90665","Pico Rivera","CA","33.786594","-118.298662","-8","1" +"90670","Santa Fe Springs","CA","33.933551","-118.06821","-8","1" +"90671","Santa Fe Springs","CA","33.786594","-118.298662","-8","1" +"90680","Stanton","CA","33.803565","-117.99596","-8","1" +"90701","Artesia","CA","33.867215","-118.08062","-8","1" +"90702","Artesia","CA","33.786594","-118.298662","-8","1" +"90703","Cerritos","CA","33.868314","-118.06754","-8","1" +"90704","Avalon","CA","33.368642","-118.40835","-8","1" +"90706","Bellflower","CA","33.888165","-118.1276","-8","1" +"90707","Bellflower","CA","33.786594","-118.298662","-8","1" +"90710","Harbor City","CA","33.797317","-118.30065","-8","1" +"90711","Lakewood","CA","33.786594","-118.298662","-8","1" +"90712","Lakewood","CA","33.851965","-118.1468","-8","1" +"90713","Lakewood","CA","33.847265","-118.11337","-8","1" +"90714","Lakewood","CA","33.851215","-118.1339","-8","1" +"90715","Lakewood","CA","33.840965","-118.07775","-8","1" +"90716","Hawaiian Gardens","CA","33.828565","-118.07364","-8","1" +"90717","Lomita","CA","33.793384","-118.31611","-8","1" +"90720","Los Alamitos","CA","33.794028","-118.07218","-8","1" +"90721","Los Alamitos","CA","33.640302","-117.769442","-8","1" +"90723","Paramount","CA","33.899915","-118.16231","-8","1" +"90731","San Pedro","CA","33.732368","-118.28905","-8","1" +"90732","San Pedro","CA","33.736718","-118.31123","-8","1" +"90733","San Pedro","CA","33.786594","-118.298662","-8","1" +"90734","San Pedro","CA","33.786594","-118.298662","-8","1" +"90740","Seal Beach","CA","33.759283","-118.08239","-8","1" +"90742","Sunset Beach","CA","33.718167","-118.07179","-8","1" +"90743","Surfside","CA","33.72975","-118.0863","-8","1" +"90744","Wilmington","CA","33.784018","-118.25897","-8","1" +"90745","Carson","CA","33.823765","-118.2668","-8","1" +"90746","Carson","CA","33.857416","-118.25633","-8","1" +"90747","Carson","CA","33.867138","-118.253825","-8","1" +"90748","Wilmington","CA","33.786594","-118.298662","-8","1" +"90749","Carson","CA","33.786594","-118.298662","-8","1" +"90755","Long Beach","CA","33.801783","-118.168691","-8","1" +"90774","Los Angeles","CA","33.783038","-118.238683","-8","1" +"90801","Long Beach","CA","33.804309","-118.200957","-8","1" +"90802","Long Beach","CA","33.769018","-118.19225","-8","1" +"90803","Long Beach","CA","33.761117","-118.12986","-8","1" +"90804","Long Beach","CA","33.783467","-118.15182","-8","1" +"90805","Long Beach","CA","33.865916","-118.18362","-8","1" +"90806","Long Beach","CA","33.801767","-118.1858","-8","1" +"90807","Long Beach","CA","33.828366","-118.18235","-8","1" +"90808","Long Beach","CA","33.823316","-118.11329","-8","1" +"90809","Long Beach","CA","33.786594","-118.298662","-8","1" +"90810","Long Beach","CA","33.816217","-118.21495","-8","1" +"90813","Long Beach","CA","33.781011","-118.19197","-8","1" +"90814","Long Beach","CA","33.771167","-118.14482","-8","1" +"90815","Long Beach","CA","33.795049","-118.11824","-8","1" +"90822","Long Beach","CA","33.776094","-118.11848","-8","1" +"90831","Long Beach","CA","33.767817","-118.199401","-8","1" +"90832","Long Beach","CA","33.786594","-118.298662","-8","1" +"90833","Long Beach","CA","33.767817","-118.199401","-8","1" +"90834","Long Beach","CA","33.767817","-118.199401","-8","1" +"90835","Long Beach","CA","33.767817","-118.199401","-8","1" +"90840","Long Beach","CA","33.784266","-118.115698","-8","1" +"90842","Long Beach","CA","33.786594","-118.298662","-8","1" +"90844","Long Beach","CA","33.786594","-118.298662","-8","1" +"90845","Long Beach","CA","33.786594","-118.298662","-8","1" +"90846","Long Beach","CA","33.824918","-118.150352","-8","1" +"90847","Long Beach","CA","33.786594","-118.298662","-8","1" +"90848","Long Beach","CA","33.786594","-118.298662","-8","1" +"90853","Long Beach","CA","33.786594","-118.298662","-8","1" +"90879","Rancho Palos Verdes","CA","33.769667","-118.313405","-8","1" +"90888","Long Beach","CA","33.786594","-118.298662","-8","1" +"91001","Altadena","CA","34.192102","-118.14206","-8","1" +"91003","Altadena","CA","33.786594","-118.298662","-8","1" +"91006","Arcadia","CA","34.134057","-118.02662","-8","1" +"91007","Arcadia","CA","34.126957","-118.05216","-8","1" +"91009","Duarte","CA","33.786594","-118.298662","-8","1" +"91010","Duarte","CA","34.137707","-117.96569","-8","1" +"91011","La Canada Flintridge","CA","34.211171","-118.19776","-8","1" +"91012","La Canada Flintridge","CA","33.786594","-118.298662","-8","1" +"91016","Monrovia","CA","34.140806","-118.00184","-8","1" +"91017","Monrovia","CA","33.786594","-118.298662","-8","1" +"91020","Montrose","CA","34.211494","-118.23104","-8","1" +"91021","Montrose","CA","33.786594","-118.298662","-8","1" +"91023","Mount Wilson","CA","33.786594","-118.298662","-8","1" +"91024","Sierra Madre","CA","34.164806","-118.0509","-8","1" +"91025","Sierra Madre","CA","33.786594","-118.298662","-8","1" +"91030","South Pasadena","CA","34.112958","-118.15577","-8","1" +"91031","South Pasadena","CA","33.786594","-118.298662","-8","1" +"91040","Sunland","CA","34.261221","-118.31887","-8","1" +"91041","Sunland","CA","33.786594","-118.298662","-8","1" +"91042","Tujunga","CA","34.256952","-118.28453","-8","1" +"91043","Tujunga","CA","33.786594","-118.298662","-8","1" +"91046","Verdugo City","CA","33.786594","-118.298662","-8","1" +"91050","Pasadena","CA","33.786594","-118.298662","-8","1" +"91051","Pasadena","CA","33.786594","-118.298662","-8","1" +"91066","Arcadia","CA","33.786594","-118.298662","-8","1" +"91077","Arcadia","CA","33.786594","-118.298662","-8","1" +"91101","Pasadena","CA","34.146607","-118.1391","-8","1" +"91102","Pasadena","CA","33.786594","-118.298662","-8","1" +"91103","Pasadena","CA","34.166706","-118.159","-8","1" +"91104","Pasadena","CA","34.169356","-118.12392","-8","1" +"91105","Pasadena","CA","34.137857","-118.16329","-8","1" +"91106","Pasadena","CA","34.142557","-118.12715","-8","1" +"91107","Pasadena","CA","34.151066","-118.08974","-8","1" +"91108","San Marino","CA","34.122658","-118.11296","-8","1" +"91109","Pasadena","CA","33.786594","-118.298662","-8","1" +"91110","Pasadena","CA","33.786594","-118.298662","-8","1" +"91114","Pasadena","CA","33.786594","-118.298662","-8","1" +"91115","Pasadena","CA","33.786594","-118.298662","-8","1" +"91116","Pasadena","CA","33.786594","-118.298662","-8","1" +"91117","Pasadena","CA","33.786594","-118.298662","-8","1" +"91118","San Marino","CA","33.786594","-118.298662","-8","1" +"91121","Pasadena","CA","33.786594","-118.298662","-8","1" +"91123","Pasadena","CA","33.786594","-118.298662","-8","1" +"91124","Pasadena","CA","33.786594","-118.298662","-8","1" +"91125","Pasadena","CA","33.786594","-118.298662","-8","1" +"91126","Pasadena","CA","33.786594","-118.298662","-8","1" +"91129","Pasadena","CA","33.786594","-118.298662","-8","1" +"91131","Pasadena","CA","33.786594","-118.298662","-8","1" +"91175","Pasadena","CA","33.786594","-118.298662","-8","1" +"91182","Pasadena","CA","33.786594","-118.298662","-8","1" +"91184","Pasadena","CA","33.786594","-118.298662","-8","1" +"91185","Pasadena","CA","33.786594","-118.298662","-8","1" +"91186","Pasadena","CA","33.786594","-118.298662","-8","1" +"91187","Pasadena","CA","33.786594","-118.298662","-8","1" +"91188","Pasadena","CA","33.786594","-118.298662","-8","1" +"91189","Pasadena","CA","33.786594","-118.298662","-8","1" +"91191","Pasadena","CA","33.786594","-118.298662","-8","1" +"91201","Glendale","CA","34.17013","-118.29158","-8","1" +"91202","Glendale","CA","34.166567","-118.26994","-8","1" +"91203","Glendale","CA","34.152757","-118.2658","-8","1" +"91204","Glendale","CA","34.135259","-118.25948","-8","1" +"91205","Glendale","CA","34.138514","-118.243","-8","1" +"91206","Glendale","CA","34.156674","-118.22937","-8","1" +"91207","Glendale","CA","34.165373","-118.24532","-8","1" +"91208","Glendale","CA","34.189605","-118.22857","-8","1" +"91209","Glendale","CA","33.786594","-118.298662","-8","1" +"91210","Glendale","CA","33.786594","-118.298662","-8","1" +"91214","La Crescenta","CA","34.232003","-118.24753","-8","1" +"91221","Glendale","CA","33.786594","-118.298662","-8","1" +"91222","Glendale","CA","33.786594","-118.298662","-8","1" +"91224","La Crescenta","CA","33.786594","-118.298662","-8","1" +"91225","Glendale","CA","33.786594","-118.298662","-8","1" +"91226","Glendale","CA","33.786594","-118.298662","-8","1" +"91301","Agoura Hills","CA","34.139536","-118.7607","-8","1" +"91302","Calabasas","CA","34.133513","-118.66464","-8","1" +"91303","Canoga Park","CA","34.198204","-118.60206","-8","1" +"91304","Canoga Park","CA","34.218654","-118.62538","-8","1" +"91305","Canoga Park","CA","33.786594","-118.298662","-8","1" +"91306","Winnetka","CA","34.209407","-118.57735","-8","1" +"91307","West Hills","CA","34.197737","-118.64797","-8","1" +"91308","West Hills","CA","33.786594","-118.298662","-8","1" +"91309","Canoga Park","CA","33.786594","-118.298662","-8","1" +"91310","Castaic","CA","33.786594","-118.298662","-8","1" +"91311","Chatsworth","CA","34.259052","-118.59426","-8","1" +"91312","Chatsworth","CA","33.786594","-118.298662","-8","1" +"91313","Chatsworth","CA","33.786594","-118.298662","-8","1" +"91316","Encino","CA","34.168753","-118.51636","-8","1" +"91319","Newbury Park","CA","34.032383","-119.1343","-8","1" +"91320","Newbury Park","CA","34.175038","-118.93956","-8","1" +"91321","Newhall","CA","34.377782","-118.51489","-8","1" +"91322","Newhall","CA","33.786594","-118.298662","-8","1" +"91324","Northridge","CA","34.240353","-118.55038","-8","1" +"91325","Northridge","CA","34.235055","-118.51766","-8","1" +"91326","Northridge","CA","34.276154","-118.54581","-8","1" +"91327","Northridge","CA","33.786594","-118.298662","-8","1" +"91328","Northridge","CA","33.786594","-118.298662","-8","1" +"91329","Northridge","CA","33.786594","-118.298662","-8","1" +"91330","Northridge","CA","33.786594","-118.298662","-8","1" +"91331","Pacoima","CA","34.254751","-118.42406","-8","1" +"91333","Pacoima","CA","33.786594","-118.298662","-8","1" +"91334","Pacoima","CA","33.786594","-118.298662","-8","1" +"91335","Reseda","CA","34.200104","-118.54099","-8","1" +"91337","Reseda","CA","33.786594","-118.298662","-8","1" +"91340","San Fernando","CA","34.284935","-118.43821","-8","1" +"91341","San Fernando","CA","33.786594","-118.298662","-8","1" +"91342","Sylmar","CA","34.307877","-118.42904","-8","1" +"91343","North Hills","CA","34.239503","-118.48224","-8","1" +"91344","Granada Hills","CA","34.277648","-118.50047","-8","1" +"91345","Mission Hills","CA","34.264635","-118.45961","-8","1" +"91346","Mission Hills","CA","33.786594","-118.298662","-8","1" +"91350","Santa Clarita","CA","34.481172","-118.42821","-8","1" +"91351","Canyon Country","CA","34.424794","-118.44513","-8","1" +"91352","Sun Valley","CA","34.224089","-118.37563","-8","1" +"91353","Sun Valley","CA","33.786594","-118.298662","-8","1" +"91354","Valencia","CA","34.445313","-118.55252","-8","1" +"91355","Valencia","CA","34.406519","-118.56214","-8","1" +"91356","Tarzana","CA","34.164255","-118.54472","-8","1" +"91357","Tarzana","CA","33.786594","-118.298662","-8","1" +"91358","Thousand Oaks","CA","34.032383","-119.1343","-8","1" +"91359","Westlake Village","CA","34.032383","-119.1343","-8","1" +"91360","Thousand Oaks","CA","34.208837","-118.87348","-8","1" +"91361","Westlake Village","CA","34.14348","-118.85608","-8","1" +"91362","Thousand Oaks","CA","34.190804","-118.83704","-8","1" +"91363","Westlake Village","CA","33.786594","-118.298662","-8","1" +"91364","Woodland Hills","CA","34.158214","-118.60061","-8","1" +"91365","Woodland Hills","CA","33.786594","-118.298662","-8","1" +"91367","Woodland Hills","CA","34.176238","-118.61992","-8","1" +"91371","Woodland Hills","CA","33.786594","-118.298662","-8","1" +"91372","Calabasas","CA","33.786594","-118.298662","-8","1" +"91376","Agoura Hills","CA","33.786594","-118.298662","-8","1" +"91377","Oak Park","CA","34.182875","-118.76893","-8","1" +"91380","Santa Clarita","CA","33.786594","-118.298662","-8","1" +"91381","Stevenson Ranch","CA","34.384663","-118.58704","-8","1" +"91382","Santa Clarita","CA","33.786594","-118.298662","-8","1" +"91383","Santa Clarita","CA","33.786594","-118.298662","-8","1" +"91384","Castaic","CA","34.478797","-118.65255","-8","1" +"91385","Valencia","CA","33.786594","-118.298662","-8","1" +"91386","Canyon Country","CA","33.786594","-118.298662","-8","1" +"91387","Santa Clarita","CA","34.421537","-118.419181","-8","1" +"91388","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91390","Santa Clarita","CA","34.490004","-118.300826","-8","1" +"91392","Sylmar","CA","33.786594","-118.298662","-8","1" +"91393","North Hills","CA","33.786594","-118.298662","-8","1" +"91394","Granada Hills","CA","33.786594","-118.298662","-8","1" +"91395","Mission Hills","CA","33.786594","-118.298662","-8","1" +"91396","Winnetka","CA","33.786594","-118.298662","-8","1" +"91399","Woodland Hills","CA","33.786594","-118.298662","-8","1" +"91401","Van Nuys","CA","34.176505","-118.43308","-8","1" +"91402","Panorama City","CA","34.223753","-118.44322","-8","1" +"91403","Sherman Oaks","CA","34.152513","-118.46396","-8","1" +"91404","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91405","Van Nuys","CA","34.199704","-118.44724","-8","1" +"91406","Van Nuys","CA","34.201491","-118.49376","-8","1" +"91407","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91408","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91409","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91410","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91411","Van Nuys","CA","34.178305","-118.45858","-8","1" +"91412","Panorama City","CA","33.786594","-118.298662","-8","1" +"91413","Sherman Oaks","CA","33.786594","-118.298662","-8","1" +"91416","Encino","CA","33.786594","-118.298662","-8","1" +"91423","Sherman Oaks","CA","34.153628","-118.43222","-8","1" +"91426","Encino","CA","33.786594","-118.298662","-8","1" +"91436","Encino","CA","34.155625","-118.48925","-8","1" +"91470","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91482","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91495","Sherman Oaks","CA","33.786594","-118.298662","-8","1" +"91496","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91497","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91499","Van Nuys","CA","33.786594","-118.298662","-8","1" +"91501","Burbank","CA","34.186755","-118.30153","-8","1" +"91502","Burbank","CA","34.177606","-118.30954","-8","1" +"91503","Burbank","CA","33.786594","-118.298662","-8","1" +"91504","Burbank","CA","34.201254","-118.32993","-8","1" +"91505","Burbank","CA","34.166906","-118.34366","-8","1" +"91506","Burbank","CA","34.169663","-118.32364","-8","1" +"91507","Burbank","CA","33.786594","-118.298662","-8","1" +"91508","Burbank","CA","33.786594","-118.298662","-8","1" +"91510","Burbank","CA","33.786594","-118.298662","-8","1" +"91521","Burbank","CA","33.786594","-118.298662","-8","1" +"91522","Burbank","CA","33.786594","-118.298662","-8","1" +"91523","Burbank","CA","33.786594","-118.298662","-8","1" +"91526","Burbank","CA","33.786594","-118.298662","-8","1" +"91601","North Hollywood","CA","34.168206","-118.37246","-8","1" +"91602","North Hollywood","CA","34.152476","-118.36841","-8","1" +"91603","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91604","Studio City","CA","34.143856","-118.39429","-8","1" +"91605","North Hollywood","CA","34.208142","-118.4011","-8","1" +"91606","North Hollywood","CA","34.185698","-118.38836","-8","1" +"91607","Valley Village","CA","34.165706","-118.39986","-8","1" +"91608","Universal City","CA","34.139397","-118.35034","-8","1" +"91609","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91610","Toluca Lake","CA","33.786594","-118.298662","-8","1" +"91611","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91612","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91614","Studio City","CA","33.786594","-118.298662","-8","1" +"91615","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91616","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91617","Valley Village","CA","33.786594","-118.298662","-8","1" +"91618","North Hollywood","CA","33.786594","-118.298662","-8","1" +"91671","Los Angeles","CA","34.175205","-118.382212","-8","1" +"91701","Alta Loma","CA","34.131659","-117.5924","-8","1" +"91702","Azusa","CA","34.128907","-117.90309","-8","1" +"91706","Baldwin Park","CA","34.087108","-117.96966","-8","1" +"91708","Chino","CA","34.839964","-115.967051","-8","1" +"91709","Chino Hills","CA","33.975267","-117.72305","-8","1" +"91710","Chino","CA","34.015963","-117.68737","-8","1" +"91711","Claremont","CA","34.110009","-117.71973","-8","1" +"91714","City Of Industry","CA","33.786594","-118.298662","-8","1" +"91715","City Of Industry","CA","33.786594","-118.298662","-8","1" +"91716","City Of Industry","CA","33.786594","-118.298662","-8","1" +"91718","Corona","CA","33.752886","-116.055617","-8","1" +"91719","Corona","CA","33.735688","-117.42049","-8","1" +"91720","Corona","CA","33.752886","-116.055617","-8","1" +"91722","Covina","CA","34.097708","-117.90698","-8","1" +"91723","Covina","CA","34.085809","-117.88694","-8","1" +"91724","Covina","CA","34.088771","-117.85817","-8","1" +"91729","Rancho Cucamonga","CA","34.839964","-115.967051","-8","1" +"91730","Rancho Cucamonga","CA","34.104555","-117.58734","-8","1" +"91731","El Monte","CA","34.076642","-118.03942","-8","1" +"91732","El Monte","CA","34.070659","-118.01383","-8","1" +"91733","South El Monte","CA","34.05051","-118.04834","-8","1" +"91734","El Monte","CA","33.786594","-118.298662","-8","1" +"91735","El Monte","CA","33.786594","-118.298662","-8","1" +"91737","Alta Loma","CA","34.147849","-117.57847","-8","1" +"91739","Rancho Cucamonga","CA","34.127819","-117.5246","-8","1" +"91740","Glendora","CA","34.119245","-117.8548","-8","1" +"91741","Glendora","CA","34.140207","-117.85704","-8","1" +"91743","Guasti","CA","34.066655","-117.58831","-8","1" +"91744","La Puente","CA","34.029561","-117.93975","-8","1" +"91745","Hacienda Heights","CA","34.000578","-117.96943","-8","1" +"91746","La Puente","CA","34.046889","-117.98464","-8","1" +"91747","La Puente","CA","33.786594","-118.298662","-8","1" +"91748","Rowland Heights","CA","33.985012","-117.89705","-8","1" +"91749","La Puente","CA","33.786594","-118.298662","-8","1" +"91750","La Verne","CA","34.117047","-117.77097","-8","1" +"91752","Mira Loma","CA","34.001846","-117.52759","-8","1" +"91754","Monterey Park","CA","34.048207","-118.14161","-8","1" +"91755","Monterey Park","CA","34.05471","-118.11823","-8","1" +"91756","Monterey Park","CA","33.786594","-118.298662","-8","1" +"91758","Ontario","CA","34.839964","-115.967051","-8","1" +"91759","Mt Baldy","CA","34.231581","-117.66106","-8","1" +"91760","Norco","CA","33.752886","-116.055617","-8","1" +"91761","Ontario","CA","34.036085","-117.6086","-8","1" +"91762","Ontario","CA","34.057561","-117.66563","-8","1" +"91763","Montclair","CA","34.07041","-117.69938","-8","1" +"91764","Ontario","CA","34.077327","-117.6222","-8","1" +"91765","Diamond Bar","CA","34.004172","-117.81673","-8","1" +"91766","Pomona","CA","34.045584","-117.75305","-8","1" +"91767","Pomona","CA","34.080143","-117.73861","-8","1" +"91768","Pomona","CA","34.06521","-117.77932","-8","1" +"91769","Pomona","CA","33.786594","-118.298662","-8","1" +"91770","Rosemead","CA","34.066143","-118.08475","-8","1" +"91771","Rosemead","CA","33.786594","-118.298662","-8","1" +"91772","Rosemead","CA","33.786594","-118.298662","-8","1" +"91773","San Dimas","CA","34.103341","-117.81814","-8","1" +"91775","San Gabriel","CA","34.114041","-118.09035","-8","1" +"91776","San Gabriel","CA","34.089059","-118.0951","-8","1" +"91778","San Gabriel","CA","33.786594","-118.298662","-8","1" +"91780","Temple City","CA","34.101608","-118.05606","-8","1" +"91784","Upland","CA","34.138575","-117.66356","-8","1" +"91785","Upland","CA","34.839964","-115.967051","-8","1" +"91786","Upland","CA","34.101659","-117.65776","-8","1" +"91788","Walnut","CA","33.786594","-118.298662","-8","1" +"91789","Walnut","CA","34.018361","-117.85438","-8","1" +"91790","West Covina","CA","34.068059","-117.93835","-8","1" +"91791","West Covina","CA","34.063645","-117.89743","-8","1" +"91792","West Covina","CA","34.020711","-117.89932","-8","1" +"91793","West Covina","CA","33.786594","-118.298662","-8","1" +"91795","Walnut","CA","33.786594","-118.298662","-8","1" +"91797","Pomona","CA","33.786594","-118.298662","-8","1" +"91798","Ontario","CA","34.839964","-115.967051","-8","1" +"91799","Pomona","CA","33.786594","-118.298662","-8","1" +"91801","Alhambra","CA","34.090409","-118.127","-8","1" +"91802","Alhambra","CA","33.786594","-118.298662","-8","1" +"91803","Alhambra","CA","34.072959","-118.1462","-8","1" +"91804","Alhambra","CA","33.786594","-118.298662","-8","1" +"91841","Alhambra","CA","33.786594","-118.298662","-8","1" +"91896","Alhambra","CA","33.786594","-118.298662","-8","1" +"91899","Alhambra","CA","33.786594","-118.298662","-8","1" +"91901","Alpine","CA","32.823102","-116.73864","-8","1" +"91902","Bonita","CA","32.663803","-117.02456","-8","1" +"91903","Alpine","CA","33.016928","-116.846046","-8","1" +"91905","Boulevard","CA","32.672239","-116.31497","-8","1" +"91906","Campo","CA","32.664307","-116.46513","-8","1" +"91908","Bonita","CA","33.016928","-116.846046","-8","1" +"91909","Chula Vista","CA","33.016928","-116.846046","-8","1" +"91910","Chula Vista","CA","32.638654","-117.06686","-8","1" +"91911","Chula Vista","CA","32.608799","-117.0607","-8","1" +"91912","Chula Vista","CA","33.016928","-116.846046","-8","1" +"91913","Chula Vista","CA","32.642486","-116.98973","-8","1" +"91914","Chula Vista","CA","32.662563","-116.95413","-8","1" +"91915","Chula Vista","CA","32.638072","-116.95195","-8","1" +"91916","Descanso","CA","32.890384","-116.62459","-8","1" +"91917","Dulzura","CA","32.616539","-116.71187","-8","1" +"91921","Chula Vista","CA","33.016928","-116.846046","-8","1" +"91927","La Presa","CA","32.701452","-117.002054","-8","1" +"91931","Guatay","CA","32.852086","-116.55559","-8","1" +"91932","Imperial Beach","CA","32.579555","-117.11708","-8","1" +"91933","Imperial Beach","CA","33.016928","-116.846046","-8","1" +"91934","Jacumba","CA","32.624424","-116.17025","-8","1" +"91935","Jamul","CA","32.718186","-116.82606","-8","1" +"91941","La Mesa","CA","32.761801","-117.01273","-8","1" +"91942","La Mesa","CA","32.785","-117.0186","-8","1" +"91943","La Mesa","CA","33.016928","-116.846046","-8","1" +"91944","La Mesa","CA","33.016928","-116.846046","-8","1" +"91945","Lemon Grove","CA","32.733451","-117.0337","-8","1" +"91946","Lemon Grove","CA","33.016928","-116.846046","-8","1" +"91947","Lincoln Acres","CA","33.016928","-116.846046","-8","1" +"91948","Mount Laguna","CA","32.875267","-116.42826","-8","1" +"91950","National City","CA","32.670903","-117.09272","-8","1" +"91951","National City","CA","33.016928","-116.846046","-8","1" +"91962","Pine Valley","CA","32.773317","-116.49139","-8","1" +"91963","Potrero","CA","32.620782","-116.60671","-8","1" +"91976","Spring Valley","CA","33.016928","-116.846046","-8","1" +"91977","Spring Valley","CA","32.721145","-116.99612","-8","1" +"91978","Spring Valley","CA","32.732539","-116.95091","-8","1" +"91979","Spring Valley","CA","33.016928","-116.846046","-8","1" +"91980","Tecate","CA","32.588485","-116.63034","-8","1" +"91987","Tecate","CA","33.016928","-116.846046","-8","1" +"91990","Potrero","CA","33.016928","-116.846046","-8","1" +"92002","Carlsbad","CA","33.198032","-117.234701","-8","1" +"92003","Bonsall","CA","33.289265","-117.20011","-8","1" +"92004","Borrego Springs","CA","33.184028","-116.26597","-8","1" +"92007","Cardiff By The Sea","CA","33.026742","-117.27816","-8","1" +"92008","Carlsbad","CA","33.158137","-117.32646","-8","1" +"92009","Carlsbad","CA","33.097841","-117.26744","-8","1" +"92013","Carlsbad","CA","33.016928","-116.846046","-8","1" +"92014","Del Mar","CA","32.961812","-117.25967","-8","1" +"92018","Carlsbad","CA","33.016928","-116.846046","-8","1" +"92019","El Cajon","CA","32.788736","-116.90487","-8","1" +"92020","El Cajon","CA","32.7991","-116.97334","-8","1" +"92021","El Cajon","CA","32.8201","-116.91234","-8","1" +"92022","El Cajon","CA","33.016928","-116.846046","-8","1" +"92023","Encinitas","CA","33.016928","-116.846046","-8","1" +"92024","Encinitas","CA","33.053092","-117.26855","-8","1" +"92025","Escondido","CA","33.106862","-117.07077","-8","1" +"92026","Escondido","CA","33.181543","-117.11136","-8","1" +"92027","Escondido","CA","33.142706","-117.03049","-8","1" +"92028","Fallbrook","CA","33.380359","-117.20605","-8","1" +"92029","Escondido","CA","33.087868","-117.11558","-8","1" +"92030","Escondido","CA","33.016928","-116.846046","-8","1" +"92031","Adelanto","CA","34.587473","-117.406293","-8","1" +"92033","Escondido","CA","33.016928","-116.846046","-8","1" +"92036","Julian","CA","33.02757","-116.53109","-8","1" +"92037","La Jolla","CA","32.838761","-117.26159","-8","1" +"92038","La Jolla","CA","33.016928","-116.846046","-8","1" +"92039","La Jolla","CA","33.016928","-116.846046","-8","1" +"92040","Lakeside","CA","32.873849","-116.90477","-8","1" +"92046","Escondido","CA","33.016928","-116.846046","-8","1" +"92049","Oceanside","CA","33.016928","-116.846046","-8","1" +"92051","Oceanside","CA","33.016928","-116.846046","-8","1" +"92052","Oceanside","CA","33.016928","-116.846046","-8","1" +"92054","Oceanside","CA","33.202463","-117.36077","-8","1" +"92055","Camp Pendleton","CA","33.016928","-116.846046","-8","1" +"92056","Oceanside","CA","33.195354","-117.28232","-8","1" +"92057","Oceanside","CA","33.240926","-117.29851","-8","1" +"92058","Oceanside","CA","33.016928","-116.846046","-8","1" +"92059","Pala","CA","33.369249","-117.07236","-8","1" +"92060","Palomar Mountain","CA","33.308217","-116.8471","-8","1" +"92061","Pauma Valley","CA","33.311881","-116.96499","-8","1" +"92064","Poway","CA","32.973645","-117.03701","-8","1" +"92065","Ramona","CA","33.035844","-116.8513","-8","1" +"92066","Ranchita","CA","33.209313","-116.54244","-8","1" +"92067","Rancho Santa Fe","CA","33.016492","-117.20264","-8","1" +"92068","San Luis Rey","CA","33.016928","-116.846046","-8","1" +"92069","San Marcos","CA","33.144908","-117.17128","-8","1" +"92070","Santa Ysabel","CA","33.166768","-116.71061","-8","1" +"92071","Santee","CA","32.84681","-116.98983","-8","1" +"92072","Santee","CA","33.016928","-116.846046","-8","1" +"92074","Poway","CA","33.016928","-116.846046","-8","1" +"92075","Solana Beach","CA","32.997543","-117.26087","-8","1" +"92078","San Marcos","CA","33.122029","-117.15605","-8","1" +"92079","San Marcos","CA","33.016928","-116.846046","-8","1" +"92082","Valley Center","CA","33.261748","-117.01027","-8","1" +"92083","Vista","CA","33.179587","-117.24461","-8","1" +"92084","Vista","CA","33.213309","-117.21474","-8","1" +"92085","Vista","CA","33.016928","-116.846046","-8","1" +"92086","Warner Springs","CA","33.337152","-116.69355","-8","1" +"92088","Fallbrook","CA","33.016928","-116.846046","-8","1" +"92090","El Cajon","CA","33.016928","-116.846046","-8","1" +"92091","Rancho Santa Fe","CA","32.993541","-117.21311","-8","1" +"92092","La Jolla","CA","33.016928","-116.846046","-8","1" +"92093","La Jolla","CA","33.016928","-116.846046","-8","1" +"92096","San Marcos","CA","33.016928","-116.846046","-8","1" +"92101","San Diego","CA","32.719601","-117.16246","-8","1" +"92102","San Diego","CA","32.714992","-117.12537","-8","1" +"92103","San Diego","CA","32.746018","-117.16715","-8","1" +"92104","San Diego","CA","32.742892","-117.12774","-8","1" +"92105","San Diego","CA","32.741256","-117.0951","-8","1" +"92106","San Diego","CA","32.7259","-117.23079","-8","1" +"92107","San Diego","CA","32.7409","-117.24434","-8","1" +"92108","San Diego","CA","32.7736","-117.13785","-8","1" +"92109","San Diego","CA","32.791246","-117.24343","-8","1" +"92110","San Diego","CA","32.766482","-117.20077","-8","1" +"92111","San Diego","CA","32.804972","-117.16871","-8","1" +"92112","San Diego","CA","33.016928","-116.846046","-8","1" +"92113","San Diego","CA","32.697402","-117.12001","-8","1" +"92114","San Diego","CA","32.706954","-117.0542","-8","1" +"92115","San Diego","CA","32.7603","-117.07031","-8","1" +"92116","San Diego","CA","32.76235","-117.12246","-8","1" +"92117","San Diego","CA","32.823865","-117.19966","-8","1" +"92118","Coronado","CA","32.682727","-117.17441","-8","1" +"92119","San Diego","CA","32.80225","-117.02431","-8","1" +"92120","San Diego","CA","32.794449","-117.07221","-8","1" +"92121","San Diego","CA","32.899996","-117.20722","-8","1" +"92122","San Diego","CA","32.856447","-117.21143","-8","1" +"92123","San Diego","CA","32.803799","-117.13595","-8","1" +"92124","San Diego","CA","32.822815","-117.09844","-8","1" +"92126","San Diego","CA","32.914346","-117.14116","-8","1" +"92127","San Diego","CA","33.022384","-117.10694","-8","1" +"92128","San Diego","CA","32.998855","-117.07054","-8","1" +"92129","San Diego","CA","32.961014","-117.1251","-8","1" +"92130","San Diego","CA","32.946776","-117.21918","-8","1" +"92131","San Diego","CA","32.918035","-117.08438","-8","1" +"92132","San Diego","CA","32.643703","-117.138414","-7","1" +"92133","San Diego","CA","32.733507","-117.216451","-8","1" +"92134","San Diego","CA","32.562106","-117.07166","-8","1" +"92135","San Diego","CA","33.016928","-116.846046","-8","1" +"92136","San Diego","CA","32.68342","-117.121913","-8","1" +"92137","San Diego","CA","32.85377","-117.119744","-8","1" +"92138","San Diego","CA","33.016928","-116.846046","-8","1" +"92139","San Diego","CA","32.677286","-117.05241","-8","1" +"92140","San Diego","CA","32.74344","-117.200412","-8","1" +"92142","San Diego","CA","33.016928","-116.846046","-8","1" +"92143","San Ysidro","CA","33.016928","-116.846046","-8","1" +"92145","San Diego","CA","32.889139","-117.100486","-8","1" +"92147","San Diego","CA","33.016928","-116.846046","-8","1" +"92149","San Diego","CA","33.016928","-116.846046","-8","1" +"92150","San Diego","CA","33.016928","-116.846046","-8","1" +"92152","San Diego","CA","33.016928","-116.846046","-8","1" +"92153","San Diego","CA","33.016928","-116.846046","-8","1" +"92154","San Diego","CA","32.574398","-117.05633","-8","1" +"92155","San Diego","CA","32.671602","-117.165665","-8","1" +"92158","San Diego","CA","33.016928","-116.846046","-8","1" +"92159","San Diego","CA","33.016928","-116.846046","-8","1" +"92160","San Diego","CA","33.016928","-116.846046","-8","1" +"92161","San Diego","CA","32.871846","-117.229119","-8","1" +"92162","San Diego","CA","33.016928","-116.846046","-8","1" +"92163","San Diego","CA","33.016928","-116.846046","-8","1" +"92164","San Diego","CA","33.016928","-116.846046","-8","1" +"92165","San Diego","CA","33.016928","-116.846046","-8","1" +"92166","San Diego","CA","33.016928","-116.846046","-8","1" +"92167","San Diego","CA","33.016928","-116.846046","-8","1" +"92168","San Diego","CA","33.016928","-116.846046","-8","1" +"92169","San Diego","CA","33.016928","-116.846046","-8","1" +"92170","San Diego","CA","33.016928","-116.846046","-8","1" +"92171","San Diego","CA","33.016928","-116.846046","-8","1" +"92172","San Diego","CA","33.016928","-116.846046","-8","1" +"92173","San Ysidro","CA","32.556264","-117.05057","-8","1" +"92174","San Diego","CA","33.016928","-116.846046","-8","1" +"92175","San Diego","CA","33.016928","-116.846046","-8","1" +"92176","San Diego","CA","33.016928","-116.846046","-8","1" +"92177","San Diego","CA","33.016928","-116.846046","-8","1" +"92178","Coronado","CA","33.016928","-116.846046","-8","1" +"92179","San Diego","CA","32.572602","-116.918724","-8","1" +"92182","San Diego","CA","32.775088","-117.076176","-8","1" +"92184","San Diego","CA","33.016928","-116.846046","-8","1" +"92186","San Diego","CA","33.016928","-116.846046","-8","1" +"92187","San Diego","CA","33.016928","-116.846046","-8","1" +"92190","San Diego","CA","33.016928","-116.846046","-8","1" +"92191","San Diego","CA","33.016928","-116.846046","-8","1" +"92192","San Diego","CA","33.016928","-116.846046","-8","1" +"92193","San Diego","CA","33.016928","-116.846046","-8","1" +"92194","San Diego","CA","33.016928","-116.846046","-8","1" +"92195","San Diego","CA","33.016928","-116.846046","-8","1" +"92196","San Diego","CA","33.016928","-116.846046","-8","1" +"92197","San Diego","CA","33.016928","-116.846046","-8","1" +"92198","San Diego","CA","33.016928","-116.846046","-8","1" +"92199","San Diego","CA","32.751575","-117.191848","-8","1" +"92201","Indio","CA","33.715271","-116.235","-8","1" +"92202","Indio","CA","33.752886","-116.055617","-8","1" +"92203","Indio","CA","33.75307","-116.24688","-8","1" +"92210","Indian Wells","CA","33.70129","-116.34148","-8","1" +"92211","Palm Desert","CA","33.759409","-116.32317","-8","1" +"92220","Banning","CA","33.920803","-116.87897","-8","1" +"92222","Bard","CA","32.782242","-114.561905","-8","1" +"92223","Beaumont","CA","33.945265","-116.9759","-8","1" +"92225","Blythe","CA","33.628333","-114.61905","-8","1" +"92226","Blythe","CA","33.59869","-114.652517","-8","1" +"92227","Brawley","CA","32.98975","-115.50475","-8","1" +"92230","Cabazon","CA","33.911404","-116.76834","-8","1" +"92231","Calexico","CA","32.683491","-115.48277","-8","1" +"92232","Calexico","CA","33.026203","-115.284581","-8","1" +"92233","Calipatria","CA","33.131764","-115.51208","-8","1" +"92234","Cathedral City","CA","33.807761","-116.46473","-8","1" +"92235","Cathedral City","CA","33.752886","-116.055617","-8","1" +"92236","Coachella","CA","33.679872","-116.17656","-8","1" +"92239","Desert Center","CA","33.830029","-115.40124","-8","1" +"92240","Desert Hot Springs","CA","33.952303","-116.50804","-8","1" +"92241","Desert Hot Springs","CA","33.904371","-116.38634","-8","1" +"92242","Earp","CA","34.137179","-114.35823","-8","1" +"92243","El Centro","CA","32.783359","-115.57746","-8","1" +"92244","El Centro","CA","32.79475","-115.692714","-8","1" +"92249","Heber","CA","32.726931","-115.51245","-8","1" +"92250","Holtville","CA","32.800259","-115.35369","-8","1" +"92251","Imperial","CA","32.853471","-115.58942","-8","1" +"92252","Joshua Tree","CA","34.175926","-116.29137","-8","1" +"92253","La Quinta","CA","33.675373","-116.29649","-8","1" +"92254","Mecca","CA","33.543836","-115.99404","-8","1" +"92255","Palm Desert","CA","33.752886","-116.055617","-8","1" +"92256","Morongo Valley","CA","34.066626","-116.55951","-8","1" +"92257","Niland","CA","33.330929","-115.61583","-8","1" +"92258","North Palm Springs","CA","33.921502","-116.56703","-8","1" +"92259","Ocotillo","CA","32.722049","-115.95998","-8","1" +"92260","Palm Desert","CA","33.715672","-116.38496","-8","1" +"92261","Palm Desert","CA","33.660374","-116.408249","-8","1" +"92262","Palm Springs","CA","33.842984","-116.54344","-8","1" +"92263","Palm Springs","CA","33.761076","-116.535887","-8","1" +"92264","Palm Springs","CA","33.798669","-116.51887","-8","1" +"92266","Palo Verde","CA","33.387467","-114.71352","-8","1" +"92267","Parker Dam","CA","34.286985","-114.17251","-8","1" +"92268","Pioneertown","CA","34.203249","-116.56565","-8","1" +"92270","Rancho Mirage","CA","33.762944","-116.42249","-8","1" +"92271","Rancho Mirage","CA","33.53163","-114.892368","-8","1" +"92273","Seeley","CA","32.792631","-115.69162","-8","1" +"92274","Thermal","CA","33.466287","-116.0688","-8","1" +"92275","Salton City","CA","33.289347","-115.9565","-8","1" +"92276","Thousand Palms","CA","33.821318","-116.38023","-8","1" +"92277","Twentynine Palms","CA","34.165696","-116.03343","-8","1" +"92278","Twentynine Palms","CA","34.360235","-116.20964","-8","1" +"92280","Vidal","CA","34.143497","-114.62411","-8","1" +"92281","Westmorland","CA","33.037061","-115.6194","-8","1" +"92282","White Water","CA","33.941487","-116.64506","-8","1" +"92283","Winterhaven","CA","32.786759","-114.62591","-8","1" +"92284","Yucca Valley","CA","34.161795","-116.41246","-8","1" +"92285","Landers","CA","34.31039","-116.45012","-8","1" +"92286","Yucca Valley","CA","34.180251","-116.350003","-8","1" +"92292","Palm Springs","CA","33.752886","-116.055617","-8","1" +"92301","Adelanto","CA","34.641695","-117.50803","-8","1" +"92304","Amboy","CA","34.548138","-115.65796","-8","1" +"92305","Angelus Oaks","CA","34.172474","-116.87593","-8","1" +"92307","Apple Valley","CA","34.538622","-117.17729","-8","1" +"92308","Apple Valley","CA","34.447959","-117.19222","-8","1" +"92309","Baker","CA","35.27295","-116.06504","-8","1" +"92310","Fort Irwin","CA","35.262763","-116.69452","-8","1" +"92311","Barstow","CA","34.894181","-117.03636","-8","1" +"92312","Barstow","CA","34.201638","-116.906215","-8","1" +"92313","Grand Terrace","CA","34.030714","-117.31174","-8","1" +"92314","Big Bear City","CA","34.255388","-116.85442","-8","1" +"92315","Big Bear Lake","CA","34.241295","-116.90328","-8","1" +"92316","Bloomington","CA","34.064062","-117.39432","-8","1" +"92317","Blue Jay","CA","34.245607","-117.23","-8","1" +"92318","Bryn Mawr","CA","34.048544","-117.23274","-8","1" +"92320","Calimesa","CA","33.984551","-117.03767","-8","1" +"92321","Cedar Glen","CA","34.254199","-117.17563","-8","1" +"92322","Cedarpines Park","CA","34.839964","-115.967051","-8","1" +"92323","Cima","CA","35.187237","-115.39727","-8","1" +"92324","Colton","CA","34.061931","-117.31995","-8","1" +"92325","Crestline","CA","34.242567","-117.28654","-8","1" +"92326","Crest Park","CA","34.839964","-115.967051","-8","1" +"92327","Daggett","CA","34.866837","-116.86379","-8","1" +"92328","Death Valley","CA","35.945641","-117.20296","-8","1" +"92329","Phelan","CA","34.839964","-115.967051","-8","1" +"92332","Essex","CA","35.00224","-115.23936","-8","1" +"92333","Fawnskin","CA","34.268344","-116.93842","-8","1" +"92334","Fontana","CA","34.839964","-115.967051","-8","1" +"92335","Fontana","CA","34.088911","-117.45213","-8","1" +"92336","Fontana","CA","34.125147","-117.45818","-8","1" +"92337","Fontana","CA","34.046992","-117.481","-8","1" +"92338","Ludlow","CA","34.720285","-116.1982","-8","1" +"92339","Forest Falls","CA","34.087114","-116.923","-8","1" +"92340","Hesperia","CA","34.839964","-115.967051","-8","1" +"92341","Green Valley Lake","CA","34.241477","-117.07449","-8","1" +"92342","Helendale","CA","34.761696","-117.33444","-8","1" +"92345","Hesperia","CA","34.399992","-117.33999","-8","1" +"92346","Highland","CA","34.12716","-117.20073","-8","1" +"92347","Hinkley","CA","34.956205","-117.21994","-8","1" +"92350","Loma Linda","CA","34.839964","-115.967051","-8","1" +"92352","Lake Arrowhead","CA","34.25629","-117.19132","-8","1" +"92354","Loma Linda","CA","34.050764","-117.25327","-8","1" +"92356","Lucerne Valley","CA","34.481229","-116.90601","-8","1" +"92357","Loma Linda","CA","34.839964","-115.967051","-8","1" +"92358","Lytle Creek","CA","34.229288","-117.52082","-8","1" +"92359","Mentone","CA","34.083512","-117.09688","-8","1" +"92363","Needles","CA","34.808718","-114.62664","-8","1" +"92364","Nipton","CA","35.46019","-115.49467","-8","1" +"92365","Newberry Springs","CA","34.896333","-116.63644","-8","1" +"92366","Mountain Pass","CA","34.839964","-115.967051","-8","1" +"92368","Oro Grande","CA","34.634147","-117.30614","-8","1" +"92369","Patton","CA","34.839964","-115.967051","-8","1" +"92371","Phelan","CA","34.453465","-117.53392","-8","1" +"92372","Pinon Hills","CA","34.44654","-117.63411","-8","1" +"92373","Redlands","CA","34.034714","-117.17305","-8","1" +"92374","Redlands","CA","34.063264","-117.16888","-8","1" +"92375","Redlands","CA","34.839964","-115.967051","-8","1" +"92376","Rialto","CA","34.109511","-117.37617","-8","1" +"92377","Rialto","CA","34.151243","-117.39873","-8","1" +"92378","Rimforest","CA","34.839964","-115.967051","-8","1" +"92382","Running Springs","CA","34.205626","-117.10499","-8","1" +"92384","Shoshone","CA","35.947562","-116.27037","-8","1" +"92385","Skyforest","CA","34.839964","-115.967051","-8","1" +"92386","Sugarloaf","CA","34.244448","-116.82962","-8","1" +"92389","Tecopa","CA","35.848556","-116.22627","-8","1" +"92391","Twin Peaks","CA","34.839964","-115.967051","-8","1" +"92392","Victorville","CA","34.489466","-117.35321","-8","1" +"92393","Victorville","CA","34.839964","-115.967051","-8","1" +"92394","Victorville","CA","34.55965","-117.35773","-8","1" +"92396","Winchester","CA","33.714421","-117.069361","-8","1" +"92397","Wrightwood","CA","34.35876","-117.62752","-8","1" +"92398","Yermo","CA","34.909491","-116.84058","-8","1" +"92399","Yucaipa","CA","34.033564","-117.03776","-8","1" +"92401","San Bernardino","CA","34.105079","-117.29075","-8","1" +"92402","San Bernardino","CA","34.21392","-117.127166","-8","1" +"92403","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92404","San Bernardino","CA","34.14856","-117.26298","-8","1" +"92405","San Bernardino","CA","34.141659","-117.29722","-8","1" +"92406","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92407","San Bernardino","CA","34.198189","-117.35826","-8","1" +"92408","San Bernardino","CA","34.080662","-117.27357","-8","1" +"92410","San Bernardino","CA","34.106965","-117.2975","-8","1" +"92411","San Bernardino","CA","34.12051","-117.3176","-8","1" +"92412","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92413","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92414","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92415","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92416","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92418","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92420","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92423","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92424","San Bernardino","CA","34.839964","-115.967051","-8","1" +"92427","San Bernardino","CA","34.262243","-116.861506","-8","1" +"92501","Riverside","CA","33.991181","-117.37074","-8","1" +"92502","Riverside","CA","33.752886","-116.055617","-8","1" +"92503","Riverside","CA","33.91355","-117.46052","-8","1" +"92504","Riverside","CA","33.926315","-117.40937","-8","1" +"92505","Riverside","CA","33.921765","-117.48812","-8","1" +"92506","Riverside","CA","33.943615","-117.37239","-8","1" +"92507","Riverside","CA","33.978965","-117.33646","-8","1" +"92508","Riverside","CA","33.890313","-117.32122","-8","1" +"92509","Riverside","CA","33.998751","-117.44695","-8","1" +"92513","Riverside","CA","33.752886","-116.055617","-8","1" +"92514","Riverside","CA","33.752886","-116.055617","-8","1" +"92515","Riverside","CA","33.752886","-116.055617","-8","1" +"92516","Riverside","CA","33.752886","-116.055617","-8","1" +"92517","Riverside","CA","33.752886","-116.055617","-8","1" +"92518","March Air Force Base","CA","33.891084","-117.2726","-8","1" +"92519","Riverside","CA","33.752886","-116.055617","-8","1" +"92521","Riverside","CA","33.752886","-116.055617","-8","1" +"92522","Riverside","CA","33.752886","-116.055617","-8","1" +"92530","Lake Elsinore","CA","33.675893","-117.34946","-8","1" +"92531","Lake Elsinore","CA","33.752886","-116.055617","-8","1" +"92532","Lake Elsinore","CA","33.696543","-117.3247","-8","1" +"92536","Aguanga","CA","33.485978","-116.82004","-8","1" +"92539","Anza","CA","33.55055","-116.67362","-8","1" +"92543","Hemet","CA","33.73542","-116.97401","-8","1" +"92544","Hemet","CA","33.708843","-116.90948","-8","1" +"92545","Hemet","CA","33.736743","-117.0217","-8","1" +"92546","Hemet","CA","33.752886","-116.055617","-8","1" +"92548","Homeland","CA","33.749656","-117.11706","-8","1" +"92549","Idyllwild","CA","33.750795","-116.72562","-8","1" +"92551","Moreno Valley","CA","33.889035","-117.22046","-8","1" +"92552","Moreno Valley","CA","33.752886","-116.055617","-8","1" +"92553","Moreno Valley","CA","33.923243","-117.24211","-8","1" +"92554","Moreno Valley","CA","33.521993","-115.915905","-8","1" +"92555","Moreno Valley","CA","33.922823","-117.16837","-8","1" +"92556","Moreno Valley","CA","33.752886","-116.055617","-8","1" +"92557","Moreno Valley","CA","33.957957","-117.24833","-8","1" +"92561","Mountain Center","CA","33.632049","-116.55878","-8","1" +"92562","Murrieta","CA","33.568617","-117.25264","-8","1" +"92563","Murrieta","CA","33.571185","-117.15362","-8","1" +"92564","Murrieta","CA","33.752886","-116.055617","-8","1" +"92567","Nuevo","CA","33.819818","-117.11778","-8","1" +"92570","Perris","CA","33.784051","-117.29812","-8","1" +"92571","Perris","CA","33.822068","-117.21514","-8","1" +"92572","Perris","CA","33.752886","-116.055617","-8","1" +"92581","San Jacinto","CA","33.752886","-116.055617","-8","1" +"92582","San Jacinto","CA","33.796153","-117.00046","-8","1" +"92583","San Jacinto","CA","33.788491","-116.95125","-8","1" +"92584","Menifee","CA","33.66035","-117.18987","-8","1" +"92585","Sun City","CA","33.742936","-117.17432","-8","1" +"92586","Sun City","CA","33.70602","-117.1974","-8","1" +"92587","Sun City","CA","33.692876","-117.25038","-8","1" +"92589","Temecula","CA","33.752886","-116.055617","-8","1" +"92590","Temecula","CA","33.479467","-117.20933","-8","1" +"92591","Temecula","CA","33.52775","-117.12056","-8","1" +"92592","Temecula","CA","33.495343","-117.07657","-8","1" +"92593","Temecula","CA","33.752886","-116.055617","-8","1" +"92595","Wildomar","CA","33.614385","-117.2608","-8","1" +"92596","Winchester","CA","33.653216","-117.07986","-8","1" +"92599","Perris","CA","33.752886","-116.055617","-8","1" +"92602","Irvine","CA","33.73297","-117.76932","-8","1" +"92603","Irvine","CA","33.648871","-117.764637","-8","1" +"92604","Irvine","CA","33.68762","-117.78852","-8","1" +"92605","Huntington Beach","CA","33.640302","-117.769442","-8","1" +"92606","Irvine","CA","33.695576","-117.80588","-8","1" +"92607","Laguna Niguel","CA","33.640302","-117.769442","-8","1" +"92610","Foothill Ranch","CA","33.685479","-117.6669","-8","1" +"92612","Irvine","CA","33.650813","-117.81771","-8","1" +"92614","Irvine","CA","33.680408","-117.82592","-8","1" +"92615","Huntington Beach","CA","33.640302","-117.769442","-8","1" +"92616","Irvine","CA","33.640302","-117.769442","-8","1" +"92618","Irvine","CA","33.659639","-117.73948","-8","1" +"92619","Irvine","CA","33.66985","-117.765939","-8","1" +"92620","Irvine","CA","33.714889","-117.7633","-8","1" +"92623","Irvine","CA","33.686519","-117.830788","-8","1" +"92624","Capistrano Beach","CA","33.460727","-117.66467","-8","1" +"92625","Corona Del Mar","CA","33.600172","-117.86823","-8","1" +"92626","Costa Mesa","CA","33.677224","-117.90863","-8","1" +"92627","Costa Mesa","CA","33.647028","-117.91506","-8","1" +"92628","Costa Mesa","CA","33.640302","-117.769442","-8","1" +"92629","Dana Point","CA","33.475302","-117.70327","-8","1" +"92630","Lake Forest","CA","33.640223","-117.69108","-8","1" +"92635","Laguna Hills","CA","33.573176","-117.698173","-8","1" +"92646","Huntington Beach","CA","33.666269","-117.9693","-8","1" +"92647","Huntington Beach","CA","33.725167","-118.00509","-8","1" +"92648","Huntington Beach","CA","33.673468","-118.00243","-8","1" +"92649","Huntington Beach","CA","33.720017","-118.04614","-8","1" +"92650","East Irvine","CA","33.640302","-117.769442","-8","1" +"92651","Laguna Beach","CA","33.535325","-117.77192","-8","1" +"92652","Laguna Beach","CA","33.640302","-117.769442","-8","1" +"92653","Laguna Hills","CA","33.602823","-117.71295","-8","1" +"92654","Laguna Hills","CA","33.601673","-117.716885","-8","1" +"92655","Midway City","CA","33.745166","-117.98569","-8","1" +"92656","Aliso Viejo","CA","33.581533","-117.72474","-8","1" +"92657","Newport Coast","CA","33.610717","-117.8325","-8","1" +"92658","Newport Beach","CA","33.640302","-117.769442","-8","1" +"92659","Newport Beach","CA","33.611198","-117.886731","-8","1" +"92660","Newport Beach","CA","33.634821","-117.87453","-8","1" +"92661","Newport Beach","CA","33.601822","-117.89966","-8","1" +"92662","Newport Beach","CA","33.606271","-117.89243","-7","1" +"92663","Newport Beach","CA","33.619221","-117.93087","-8","1" +"92670","Placentia","CA","33.870714","-117.879342","-8","1" +"92672","San Clemente","CA","33.427078","-117.61401","-8","1" +"92673","San Clemente","CA","33.462927","-117.62414","-8","1" +"92674","San Clemente","CA","33.438428","-117.623131","-8","1" +"92675","San Juan Capistrano","CA","33.500843","-117.65866","-8","1" +"92676","Silverado","CA","33.743168","-117.63563","-8","1" +"92677","Laguna Niguel","CA","33.531938","-117.7025","-8","1" +"92678","Trabuco Canyon","CA","33.673979","-117.59457","-8","1" +"92679","Trabuco Canyon","CA","33.639227","-117.58518","-8","1" +"92680","Garden Grove","CA","33.792124","-117.993561","-8","1" +"92683","Westminster","CA","33.751418","-117.99392","-8","1" +"92684","Westminster","CA","33.640302","-117.769442","-8","1" +"92685","Westminster","CA","33.640302","-117.769442","-8","1" +"92688","Rancho Santa Margarita","CA","33.639994","-117.60351","-8","1" +"92690","Mission Viejo","CA","33.640302","-117.769442","-8","1" +"92691","Mission Viejo","CA","33.611272","-117.66681","-8","1" +"92692","Mission Viejo","CA","33.615462","-117.64093","-8","1" +"92693","San Juan Capistrano","CA","33.555323","-117.564","-8","1" +"92694","Ladera Ranch","CA","33.570763","-117.63463","-8","1" +"92697","Irvine","CA","33.640302","-117.769442","-8","1" +"92698","Aliso Viejo","CA","33.640302","-117.769442","-8","1" +"92701","Santa Ana","CA","33.747017","-117.86248","-8","1" +"92702","Santa Ana","CA","33.640302","-117.769442","-8","1" +"92703","Santa Ana","CA","33.747067","-117.90433","-8","1" +"92704","Santa Ana","CA","33.724167","-117.90623","-8","1" +"92705","Santa Ana","CA","33.762117","-117.81828","-8","1" +"92706","Santa Ana","CA","33.765916","-117.88139","-8","1" +"92707","Santa Ana","CA","33.719118","-117.87143","-8","1" +"92708","Fountain Valley","CA","33.708618","-117.95629","-8","1" +"92709","Irvine","CA","33.640302","-117.769442","-8","1" +"92710","Irvine","CA","33.711552","-117.809881","-8","1" +"92711","Santa Ana","CA","33.640302","-117.769442","-8","1" +"92712","Santa Ana","CA","33.640302","-117.769442","-8","1" +"92728","Fountain Valley","CA","33.640302","-117.769442","-8","1" +"92735","Santa Ana","CA","33.640302","-117.769442","-8","1" +"92780","Tustin","CA","33.741651","-117.82127","-8","1" +"92781","Tustin","CA","33.640302","-117.769442","-8","1" +"92782","Tustin","CA","33.739571","-117.78618","-8","1" +"92799","Santa Ana","CA","33.640302","-117.769442","-8","1" +"92801","Anaheim","CA","33.844814","-117.95381","-8","1" +"92802","Anaheim","CA","33.806965","-117.92594","-8","1" +"92803","Anaheim","CA","33.640302","-117.769442","-8","1" +"92804","Anaheim","CA","33.818165","-117.97304","-8","1" +"92805","Anaheim","CA","33.835665","-117.90807","-8","1" +"92806","Anaheim","CA","33.835465","-117.87362","-8","1" +"92807","Anaheim","CA","33.850515","-117.79113","-8","1" +"92808","Anaheim","CA","33.858151","-117.73864","-8","1" +"92811","Atwood","CA","33.640302","-117.769442","-8","1" +"92812","Anaheim","CA","33.640302","-117.769442","-8","1" +"92814","Anaheim","CA","33.640302","-117.769442","-8","1" +"92815","Anaheim","CA","33.640302","-117.769442","-8","1" +"92816","Anaheim","CA","33.640302","-117.769442","-8","1" +"92817","Anaheim","CA","33.640302","-117.769442","-8","1" +"92821","Brea","CA","33.923463","-117.89559","-8","1" +"92822","Brea","CA","33.640302","-117.769442","-8","1" +"92823","Brea","CA","33.918965","-117.83252","-8","1" +"92825","Anaheim","CA","33.640302","-117.769442","-8","1" +"92831","Fullerton","CA","33.878981","-117.89325","-8","1" +"92832","Fullerton","CA","33.869114","-117.92985","-8","1" +"92833","Fullerton","CA","33.874314","-117.9637","-8","1" +"92834","Fullerton","CA","33.640302","-117.769442","-8","1" +"92835","Fullerton","CA","33.903164","-117.91224","-8","1" +"92836","Fullerton","CA","33.640302","-117.769442","-8","1" +"92837","Fullerton","CA","33.640302","-117.769442","-8","1" +"92838","Fullerton","CA","33.640302","-117.769442","-8","1" +"92840","Garden Grove","CA","33.785166","-117.93406","-8","1" +"92841","Garden Grove","CA","33.786915","-117.98224","-8","1" +"92842","Garden Grove","CA","33.640302","-117.769442","-8","1" +"92843","Garden Grove","CA","33.763033","-117.9355","-8","1" +"92844","Garden Grove","CA","33.765516","-117.9731","-8","1" +"92845","Garden Grove","CA","33.782916","-118.02619","-8","1" +"92846","Garden Grove","CA","33.640302","-117.769442","-8","1" +"92850","Anaheim","CA","33.640302","-117.769442","-8","1" +"92856","Orange","CA","33.640302","-117.769442","-8","1" +"92857","Orange","CA","33.640302","-117.769442","-8","1" +"92859","Orange","CA","33.640302","-117.769442","-8","1" +"92860","Norco","CA","33.925885","-117.55978","-8","1" +"92861","Villa Park","CA","33.812662","-117.81623","-8","1" +"92862","Orange","CA","33.640302","-117.769442","-8","1" +"92863","Orange","CA","33.640302","-117.769442","-8","1" +"92864","Orange","CA","33.640302","-117.769442","-8","1" +"92865","Orange","CA","33.8318","-117.84739","-8","1" +"92866","Orange","CA","33.785091","-117.84569","-8","1" +"92867","Orange","CA","33.811566","-117.82919","-8","1" +"92868","Orange","CA","33.787266","-117.87494","-8","1" +"92869","Orange","CA","33.792687","-117.79975","-8","1" +"92870","Placentia","CA","33.883314","-117.85446","-8","1" +"92871","Placentia","CA","33.640302","-117.769442","-8","1" +"92877","Corona","CA","33.752886","-116.055617","-8","1" +"92878","Corona","CA","33.752886","-116.055617","-8","1" +"92879","Corona","CA","33.8808","-117.54068","-8","1" +"92880","Corona","CA","33.903803","-117.60221","-8","1" +"92881","Corona","CA","33.839516","-117.53581","-8","1" +"92882","Corona","CA","33.866555","-117.59167","-8","1" +"92883","Corona","CA","33.771548","-117.47884","-8","1" +"92885","Yorba Linda","CA","33.640302","-117.769442","-8","1" +"92886","Yorba Linda","CA","33.888062","-117.80407","-8","1" +"92887","Yorba Linda","CA","33.883223","-117.73856","-8","1" +"92899","Anaheim","CA","33.640302","-117.769442","-8","1" +"93001","Ventura","CA","34.311203","-119.30164","-8","1" +"93002","Ventura","CA","34.032383","-119.1343","-8","1" +"93003","Ventura","CA","34.268736","-119.2249","-8","1" +"93004","Ventura","CA","34.278812","-119.16784","-8","1" +"93005","Ventura","CA","34.032383","-119.1343","-8","1" +"93006","Ventura","CA","34.032383","-119.1343","-8","1" +"93007","Ventura","CA","34.032383","-119.1343","-8","1" +"93009","Ventura","CA","34.356248","-119.146228","-8","1" +"93010","Camarillo","CA","34.231754","-119.05258","-8","1" +"93011","Camarillo","CA","34.032383","-119.1343","-8","1" +"93012","Camarillo","CA","34.218756","-118.99213","-8","1" +"93013","Carpinteria","CA","34.402194","-119.52308","-8","1" +"93014","Carpinteria","CA","34.262834","-119.848555","-8","1" +"93015","Fillmore","CA","34.396646","-118.90082","-8","1" +"93016","Fillmore","CA","34.032383","-119.1343","-8","1" +"93020","Moorpark","CA","34.032383","-119.1343","-8","1" +"93021","Moorpark","CA","34.292898","-118.87134","-8","1" +"93022","Oak View","CA","34.401466","-119.30082","-8","1" +"93023","Ojai","CA","34.456957","-119.25307","-8","1" +"93024","Ojai","CA","34.032383","-119.1343","-8","1" +"93030","Oxnard","CA","34.21707","-119.1769","-8","1" +"93031","Oxnard","CA","34.032383","-119.1343","-8","1" +"93032","Oxnard","CA","34.032383","-119.1343","-8","1" +"93033","Oxnard","CA","34.166933","-119.16113","-8","1" +"93034","Oxnard","CA","34.032383","-119.1343","-8","1" +"93035","Oxnard","CA","34.179304","-119.22189","-8","1" +"93036","Oxnard","CA","34.22942","-119.178814","-8","1" +"93040","Piru","CA","34.424363","-118.73908","-8","1" +"93041","Port Hueneme","CA","34.154072","-119.18829","-8","1" +"93042","Point Mugu Nawc","CA","34.113389","-119.112432","-8","1" +"93043","Port Hueneme Cbc Base","CA","34.162124","-119.207364","-8","1" +"93044","Port Hueneme","CA","34.032383","-119.1343","-8","1" +"93060","Santa Paula","CA","34.367474","-119.07317","-8","1" +"93061","Santa Paula","CA","34.032383","-119.1343","-8","1" +"93062","Simi Valley","CA","34.032383","-119.1343","-8","1" +"93063","Simi Valley","CA","34.279343","-118.69607","-8","1" +"93064","Brandeis","CA","34.258203","-118.710724","-8","1" +"93065","Simi Valley","CA","34.265003","-118.77177","-8","1" +"93066","Somis","CA","34.287679","-119.02059","-8","1" +"93067","Summerland","CA","34.421895","-119.60084","-8","1" +"93093","Simi Valley","CA","34.032383","-119.1343","-8","1" +"93094","Simi Valley","CA","34.032383","-119.1343","-8","1" +"93099","Simi Valley","CA","34.032383","-119.1343","-8","1" +"93101","Santa Barbara","CA","34.420163","-119.7065","-8","1" +"93102","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93103","Santa Barbara","CA","34.428191","-119.68412","-8","1" +"93105","Santa Barbara","CA","34.44005","-119.75496","-8","1" +"93106","Santa Barbara","CA","34.432896","-119.837072","-8","1" +"93107","Santa Barbara","CA","34.421795","-119.863722","-8","1" +"93108","Santa Barbara","CA","34.433687","-119.63184","-8","1" +"93109","Santa Barbara","CA","34.40323","-119.72069","-8","1" +"93110","Santa Barbara","CA","34.439579","-119.76788","-8","1" +"93111","Santa Barbara","CA","34.443529","-119.80297","-8","1" +"93116","Goleta","CA","34.262834","-119.848555","-8","1" +"93117","Goleta","CA","34.443746","-119.94215","-8","1" +"93118","Goleta","CA","34.262834","-119.848555","-8","1" +"93120","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93121","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93130","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93140","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93150","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93160","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93190","Santa Barbara","CA","34.262834","-119.848555","-8","1" +"93199","Goleta","CA","34.262834","-119.848555","-8","1" +"93201","Alpaugh","CA","35.889586","-119.49352","-8","1" +"93202","Armona","CA","36.311439","-119.70823","-8","1" +"93203","Arvin","CA","35.161923","-118.84655","-8","1" +"93204","Avenal","CA","35.930766","-120.10057","-8","1" +"93205","Bodfish","CA","35.576134","-118.46745","-8","1" +"93206","Buttonwillow","CA","35.37825","-119.41664","-8","1" +"93207","California Hot Springs","CA","35.87137","-118.6821","-8","1" +"93208","Camp Nelson","CA","36.062748","-118.60663","-8","1" +"93210","Coalinga","CA","36.194736","-120.30865","-8","1" +"93212","Corcoran","CA","36.085342","-119.5548","-8","1" +"93215","Delano","CA","35.774967","-119.23371","-8","1" +"93216","Delano","CA","35.771876","-119.26984","-8","1" +"93217","Earlimart","CA","35.89151","-119.263225","-8","1" +"93218","Ducor","CA","35.842485","-119.01483","-8","1" +"93219","Earlimart","CA","35.87368","-119.26362","-8","1" +"93220","Edison","CA","35.357018","-118.810069","-8","1" +"93221","Exeter","CA","36.304696","-119.11383","-8","1" +"93222","Frazier Park","CA","34.850984","-119.16626","-8","1" +"93223","Farmersville","CA","36.300574","-119.20552","-8","1" +"93224","Fellows","CA","35.202535","-119.56093","-8","1" +"93225","Frazier Park","CA","34.815266","-119.00404","-8","1" +"93226","Glennville","CA","35.727428","-118.72424","-8","1" +"93227","Goshen","CA","36.357151","-119.425371","-8","1" +"93230","Hanford","CA","36.327063","-119.6451","-8","1" +"93231","Hanford","CA","36.138861","-119.894727","-8","1" +"93232","Hanford","CA","36.138861","-119.894727","-8","1" +"93234","Huron","CA","36.209815","-120.0847","-8","1" +"93235","Ivanhoe","CA","36.387879","-119.21908","-8","1" +"93237","Kaweah","CA","36.472713","-118.902899","-8","1" +"93238","Kernville","CA","35.784367","-118.43769","-8","1" +"93239","Kettleman City","CA","36.015318","-120.00772","-8","1" +"93240","Lake Isabella","CA","35.617148","-118.45299","-8","1" +"93241","Lamont","CA","35.256873","-118.91325","-8","1" +"93242","Laton","CA","36.43465","-119.71753","-8","1" +"93243","Lebec","CA","34.851405","-118.87993","-8","1" +"93244","Lemon Cove","CA","36.417743","-119.00457","-8","1" +"93245","Lemoore","CA","36.312075","-119.80349","-8","1" +"93246","Lemoore","CA","36.138861","-119.894727","-8","1" +"93247","Lindsay","CA","36.201983","-119.08589","-8","1" +"93249","Lost Hills","CA","35.689717","-119.91961","-8","1" +"93250","McFarland","CA","35.670747","-119.21336","-8","1" +"93251","McKittrick","CA","35.364749","-119.70242","-8","1" +"93252","Maricopa","CA","35.040362","-119.41514","-8","1" +"93254","New Cuyama","CA","34.956385","-119.74696","-8","1" +"93255","Onyx","CA","35.666835","-118.01701","-8","1" +"93256","Pixley","CA","35.957119","-119.31287","-8","1" +"93257","Porterville","CA","36.055121","-119.01595","-8","1" +"93258","Porterville","CA","36.033126","-119.007265","-8","1" +"93260","Posey","CA","35.846291","-118.63298","-8","1" +"93261","Richgrove","CA","35.801627","-119.11699","-8","1" +"93262","Sequoia National Park","CA","36.596251","-118.73425","-8","1" +"93263","Shafter","CA","35.490517","-119.26495","-8","1" +"93265","Springville","CA","36.150892","-118.76204","-8","1" +"93266","Stratford","CA","36.177361","-119.82042","-8","1" +"93267","Strathmore","CA","36.141864","-119.09411","-8","1" +"93268","Taft","CA","35.162776","-119.4303","-8","1" +"93270","Terra Bella","CA","35.94901","-119.03742","-8","1" +"93271","Three Rivers","CA","36.431565","-118.86296","-8","1" +"93272","Tipton","CA","36.059363","-119.32025","-8","1" +"93274","Tulare","CA","36.201451","-119.34994","-8","1" +"93275","Tulare","CA","36.26699","-118.776902","-8","1" +"93276","Tupman","CA","35.305512","-119.38925","-8","1" +"93277","Visalia","CA","36.311","-119.32637","-8","1" +"93278","Visalia","CA","36.126621","-118.819365","-8","1" +"93279","Visalia","CA","36.393615","-119.118982","-8","1" +"93280","Wasco","CA","35.605045","-119.37143","-8","1" +"93282","Waukena","CA","36.12763","-119.52202","-8","1" +"93283","Weldon","CA","35.614134","-118.27824","-8","1" +"93285","Wofford Heights","CA","35.714118","-118.48416","-8","1" +"93286","Woodlake","CA","36.431121","-119.10642","-8","1" +"93287","Woody","CA","35.702936","-118.8844","-8","1" +"93291","Visalia","CA","36.351009","-119.33655","-8","1" +"93292","Visalia","CA","36.358928","-119.24027","-8","1" +"93301","Bakersfield","CA","35.381408","-119.01935","-8","1" +"93302","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93303","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93304","Bakersfield","CA","35.344209","-119.02225","-8","1" +"93305","Bakersfield","CA","35.387058","-118.98647","-8","1" +"93306","Bakersfield","CA","35.396411","-118.92268","-8","1" +"93307","Bakersfield","CA","35.324767","-118.96329","-8","1" +"93308","Bakersfield","CA","35.487491","-119.00896","-8","1" +"93309","Bakersfield","CA","35.340759","-119.06497","-8","1" +"93311","Bakersfield","CA","35.200467","-119.17399","-8","1" +"93312","Bakersfield","CA","35.39068","-119.18583","-8","1" +"93313","Bakersfield","CA","35.19766","-119.05698","-8","1" +"93325","Lake of the Woods","CA","34.819232","-119.000391","-8","1" +"93380","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93381","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93382","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93383","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93384","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93385","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93386","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93387","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93388","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93389","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93390","Bakersfield","CA","35.294405","-118.905173","-8","1" +"93401","San Luis Obispo","CA","35.262548","-120.65196","-8","1" +"93402","Los Osos","CA","35.313222","-120.83468","-8","1" +"93403","San Luis Obispo","CA","35.347065","-120.455345","-8","1" +"93405","San Luis Obispo","CA","35.277189","-120.70305","-8","1" +"93406","San Luis Obispo","CA","35.347065","-120.455345","-8","1" +"93407","San Luis Obispo","CA","35.347065","-120.455345","-8","1" +"93408","San Luis Obispo","CA","35.347065","-120.455345","-8","1" +"93409","San Luis Obispo","CA","35.221085","-120.636399","-8","1" +"93410","San Luis Obispo","CA","35.347065","-120.455345","-8","1" +"93412","Los Osos","CA","35.347065","-120.455345","-8","1" +"93420","Arroyo Grande","CA","35.119678","-120.55116","-8","1" +"93421","Arroyo Grande","CA","35.347065","-120.455345","-8","1" +"93422","Atascadero","CA","35.474913","-120.676","-8","1" +"93423","Atascadero","CA","35.428241","-120.769493","-8","1" +"93424","Avila Beach","CA","35.18554","-120.72583","-8","1" +"93426","Bradley","CA","35.834919","-120.98093","-8","1" +"93427","Buellton","CA","34.613014","-120.2051","-8","1" +"93428","Cambria","CA","35.563246","-121.07736","-8","1" +"93429","Casmalia","CA","34.842293","-120.5318","-8","1" +"93430","Cayucos","CA","35.459347","-120.88947","-8","1" +"93432","Creston","CA","35.495242","-120.48392","-8","1" +"93433","Grover Beach","CA","35.120934","-120.61952","-8","1" +"93434","Guadalupe","CA","34.958896","-120.58014","-8","1" +"93435","Harmony","CA","35.508282","-121.03551","-8","1" +"93436","Lompoc","CA","34.639682","-120.4471","-8","1" +"93437","Lompoc","CA","34.73489","-120.53467","-8","1" +"93438","Lompoc","CA","34.262834","-119.848555","-8","1" +"93440","Los Alamos","CA","34.75465","-120.27032","-8","1" +"93441","Los Olivos","CA","34.709973","-120.09201","-8","1" +"93442","Morro Bay","CA","35.373047","-120.83844","-8","1" +"93443","Morro Bay","CA","35.347065","-120.455345","-8","1" +"93444","Nipomo","CA","35.032408","-120.49446","-8","1" +"93445","Oceano","CA","35.097599","-120.61327","-8","1" +"93446","Paso Robles","CA","35.640589","-120.70418","-8","1" +"93447","Paso Robles","CA","35.664837","-120.64542","-8","1" +"93448","Pismo Beach","CA","35.347065","-120.455345","-8","1" +"93449","Pismo Beach","CA","35.150886","-120.65401","-8","1" +"93450","San Ardo","CA","35.964022","-120.87339","-8","1" +"93451","San Miguel","CA","35.818054","-120.63645","-8","1" +"93452","San Simeon","CA","35.664386","-121.21965","-8","1" +"93453","Santa Margarita","CA","35.323098","-120.08301","-8","1" +"93454","Santa Maria","CA","34.900809","-120.34876","-8","1" +"93455","Santa Maria","CA","34.87455","-120.42806","-8","1" +"93456","Santa Maria","CA","35.027682","-120.196818","-8","1" +"93457","Santa Maria","CA","34.836252","-120.53421","-8","1" +"93458","Santa Maria","CA","34.956344","-120.45243","-8","1" +"93460","Santa Ynez","CA","34.626931","-120.0661","-8","1" +"93461","Shandon","CA","35.636185","-120.27185","-8","1" +"93463","Solvang","CA","34.608938","-120.13838","-8","1" +"93464","Solvang","CA","34.674436","-120.111465","-8","1" +"93465","Templeton","CA","35.54464","-120.72428","-8","1" +"93483","Grover Beach","CA","35.347065","-120.455345","-8","1" +"93492","Morro Bay","CA","35.372861","-120.859391","-8","1" +"93501","Mojave","CA","35.04535","-118.16141","-8","1" +"93502","Mojave","CA","35.068161","-118.224785","-8","1" +"93504","California City","CA","35.187133","-117.885359","-8","1" +"93505","California City","CA","35.139327","-117.91473","-8","1" +"93510","Acton","CA","34.497245","-118.18951","-8","1" +"93512","Benton","CA","37.583838","-118.23615","-8","1" +"93513","Big Pine","CA","37.1363","-118.27335","-8","1" +"93514","Bishop","CA","37.282192","-118.38717","-8","1" +"93515","Bishop","CA","36.626033","-117.218616","-8","1" +"93516","Boron","CA","35.030694","-117.67264","-8","1" +"93517","Bridgeport","CA","38.21053","-119.31968","-8","1" +"93518","Caliente","CA","35.381552","-118.54748","-8","1" +"93519","Cantil","CA","35.177369","-118.035049","-8","1" +"93522","Darwin","CA","36.269728","-117.59002","-8","1" +"93523","Edwards","CA","35.044352","-117.8578","-8","1" +"93524","Edwards","CA","35.294405","-118.905173","-8","1" +"93526","Independence","CA","36.851729","-118.20743","-8","1" +"93527","Inyokern","CA","35.734418","-117.89313","-8","1" +"93528","Johannesburg","CA","35.366197","-117.63618","-8","1" +"93529","June Lake","CA","37.765218","-119.07769","-8","1" +"93530","Keeler","CA","36.495772","-117.88289","-8","1" +"93531","Keene","CA","35.241311","-118.59338","-8","1" +"93532","Lake Hughes","CA","34.676708","-118.45592","-8","1" +"93534","Lancaster","CA","34.698696","-118.15015","-8","1" +"93535","Lancaster","CA","34.691946","-117.97756","-8","1" +"93536","Lancaster","CA","34.728857","-118.32683","-8","1" +"93539","Lancaster","CA","33.786594","-118.298662","-8","1" +"93540","Lake Isabella","CA","35.60345","-118.476436","-8","1" +"93541","Lee Vining","CA","37.973204","-119.12029","-8","1" +"93542","Little Lake","CA","36.626033","-117.218616","-8","1" +"93543","Littlerock","CA","34.533321","-117.94904","-8","1" +"93544","Llano","CA","34.493392","-117.77444","-8","1" +"93545","Lone Pine","CA","36.589514","-118.07367","-8","1" +"93546","Mammoth Lakes","CA","37.621587","-118.86279","-8","1" +"93549","Olancha","CA","36.228484","-117.97084","-8","1" +"93550","Palmdale","CA","34.56548","-118.08549","-8","1" +"93551","Palmdale","CA","34.606146","-118.18495","-8","1" +"93552","Palmdale","CA","34.561207","-118.0375","-8","1" +"93553","Pearblossom","CA","34.487552","-117.89885","-8","1" +"93554","Randsburg","CA","35.409108","-117.69966","-8","1" +"93555","Ridgecrest","CA","35.599177","-117.68065","-8","1" +"93556","Ridgecrest","CA","35.294405","-118.905173","-8","1" +"93558","Red Mountain","CA","34.839964","-115.967051","-8","1" +"93560","Rosamond","CA","34.88923","-118.33629","-8","1" +"93561","Tehachapi","CA","35.132673","-118.50781","-8","1" +"93562","Trona","CA","35.764433","-117.38202","-8","1" +"93563","Valyermo","CA","34.394253","-117.69475","-8","1" +"93564","Rosamond","CA","34.900151","-118.246691","-8","1" +"93581","Tehachapi","CA","35.294405","-118.905173","-8","1" +"93584","Lancaster","CA","33.786594","-118.298662","-8","1" +"93586","Lancaster","CA","33.786594","-118.298662","-8","1" +"93590","Palmdale","CA","33.786594","-118.298662","-8","1" +"93591","Palmdale","CA","34.596742","-117.84467","-8","1" +"93592","Trona","CA","34.839964","-115.967051","-8","1" +"93596","Boron","CA","35.294405","-118.905173","-8","1" +"93599","Palmdale","CA","33.786594","-118.298662","-8","1" +"93601","Ahwahnee","CA","37.388698","-119.72439","-8","1" +"93602","Auberry","CA","37.077273","-119.42982","-8","1" +"93603","Badger","CA","36.678073","-118.9601","-8","1" +"93604","Bass Lake","CA","37.364625","-119.51261","-8","1" +"93605","Big Creek","CA","37.191503","-119.26372","-8","1" +"93606","Biola","CA","36.802534","-120.01902","-8","1" +"93607","Burrel","CA","36.589797","-119.899405","-8","1" +"93608","Cantua Creek","CA","36.523482","-120.38428","-8","1" +"93609","Caruthers","CA","36.534599","-119.83592","-8","1" +"93610","Chowchilla","CA","37.100417","-120.27864","-8","1" +"93611","Clovis","CA","36.840057","-119.66107","-8","1" +"93612","Clovis","CA","36.813456","-119.70826","-8","1" +"93613","Clovis","CA","37.036529","-119.511704","-8","1" +"93614","Coarsegold","CA","37.206505","-119.7207","-8","1" +"93615","Cutler","CA","36.506019","-119.2866","-8","1" +"93616","Del Rey","CA","36.657266","-119.59309","-8","1" +"93618","Dinuba","CA","36.538017","-119.38887","-8","1" +"93620","Dos Palos","CA","37.029613","-120.64014","-8","1" +"93621","Dunlap","CA","36.774951","-119.13779","-8","1" +"93622","Firebaugh","CA","36.800027","-120.57996","-8","1" +"93623","Fish Camp","CA","37.463177","-119.64498","-8","1" +"93624","Five Points","CA","36.40263","-120.12855","-8","1" +"93625","Fowler","CA","36.6265","-119.67526","-8","1" +"93626","Friant","CA","37.024461","-119.68496","-8","1" +"93627","Helm","CA","36.523726","-120.10669","-8","1" +"93628","Hume","CA","36.780156","-118.91524","-8","1" +"93630","Kerman","CA","36.722616","-120.10081","-8","1" +"93631","Kingsburg","CA","36.506063","-119.54587","-8","1" +"93633","Kings Canyon National Pk","CA","36.734051","-118.958777","-8","1" +"93634","Lakeshore","CA","37.237216","-119.23304","-8","1" +"93635","Los Banos","CA","37.048385","-120.86983","-8","1" +"93637","Madera","CA","36.914819","-120.15817","-8","1" +"93638","Madera","CA","36.991476","-119.98729","-8","1" +"93639","Madera","CA","37.160622","-119.945035","-8","1" +"93640","Mendota","CA","36.701905","-120.42801","-8","1" +"93641","Miramonte","CA","36.697311","-119.01864","-8","1" +"93642","Mono Hot Springs","CA","36.746375","-119.639658","-8","1" +"93643","North Fork","CA","37.232047","-119.52006","-8","1" +"93644","Oakhurst","CA","37.405699","-119.56754","-8","1" +"93645","O Neals","CA","37.146284","-119.67379","-8","1" +"93646","Orange Cove","CA","36.623699","-119.30892","-8","1" +"93647","Orosi","CA","36.565252","-119.24273","-8","1" +"93648","Parlier","CA","36.61365","-119.52873","-8","1" +"93649","Piedra","CA","36.841665","-119.349639","-8","1" +"93650","Fresno","CA","36.841454","-119.79832","-8","1" +"93651","Prather","CA","37.004865","-119.50748","-8","1" +"93652","Raisin","CA","36.600348","-119.90272","-8","1" +"93653","Raymond","CA","37.236305","-119.92498","-8","1" +"93654","Reedley","CA","36.608675","-119.43761","-8","1" +"93656","Riverdale","CA","36.45185","-119.93651","-8","1" +"93657","Sanger","CA","36.72845","-119.53571","-8","1" +"93660","San Joaquin","CA","36.600172","-120.15338","-8","1" +"93661","Santa Rita Park","CA","37.186872","-120.650351","-8","1" +"93662","Selma","CA","36.566779","-119.62201","-8","1" +"93664","Shaver Lake","CA","37.103957","-119.2644","-8","1" +"93665","South Dos Palos","CA","36.961248","-120.65439","-8","1" +"93666","Sultana","CA","36.545749","-119.33907","-8","1" +"93667","Tollhouse","CA","36.981035","-119.38254","-8","1" +"93668","Tranquillity","CA","36.641742","-120.28909","-8","1" +"93669","Wishon","CA","37.284459","-119.53472","-8","1" +"93670","Yettem","CA","36.471833","-119.259352","-8","1" +"93673","Traver","CA","36.455501","-119.48495","-8","1" +"93675","Squaw Valley","CA","36.713181","-119.18327","-8","1" +"93688","Tranquillity","CA","36.648474","-120.248818","-8","1" +"93701","Fresno","CA","36.749444","-119.78872","-8","1" +"93702","Fresno","CA","36.741199","-119.7553","-8","1" +"93703","Fresno","CA","36.767299","-119.765","-8","1" +"93704","Fresno","CA","36.794748","-119.80097","-8","1" +"93705","Fresno","CA","36.786948","-119.82747","-8","1" +"93706","Fresno","CA","36.691036","-119.83321","-8","1" +"93707","Fresno","CA","36.746375","-119.639658","-8","1" +"93708","Fresno","CA","36.746375","-119.639658","-8","1" +"93709","Fresno","CA","36.746375","-119.639658","-8","1" +"93710","Fresno","CA","36.825582","-119.76358","-8","1" +"93711","Fresno","CA","36.831723","-119.83198","-8","1" +"93712","Fresno","CA","36.746375","-119.639658","-8","1" +"93714","Fresno","CA","36.746375","-119.639658","-8","1" +"93715","Fresno","CA","36.746375","-119.639658","-8","1" +"93716","Fresno","CA","36.746375","-119.639658","-8","1" +"93717","Fresno","CA","36.746375","-119.639658","-8","1" +"93718","Fresno","CA","36.746375","-119.639658","-8","1" +"93720","Fresno","CA","36.865587","-119.75917","-8","1" +"93721","Fresno","CA","36.733193","-119.78473","-8","1" +"93722","Fresno","CA","36.801603","-119.88878","-8","1" +"93724","Fresno","CA","36.746375","-119.639658","-8","1" +"93725","Fresno","CA","36.658599","-119.74097","-8","1" +"93726","Fresno","CA","36.795249","-119.76293","-8","1" +"93727","Fresno","CA","36.753177","-119.69703","-8","1" +"93728","Fresno","CA","36.758598","-119.81022","-8","1" +"93729","Fresno","CA","36.746375","-119.639658","-8","1" +"93740","Fresno","CA","36.746375","-119.639658","-8","1" +"93741","Fresno","CA","36.746375","-119.639658","-8","1" +"93744","Fresno","CA","36.746375","-119.639658","-8","1" +"93745","Fresno","CA","36.746375","-119.639658","-8","1" +"93747","Fresno","CA","36.746375","-119.639658","-8","1" +"93750","Fresno","CA","36.746375","-119.639658","-8","1" +"93755","Fresno","CA","36.746375","-119.639658","-8","1" +"93759","Fresno","CA","36.746375","-119.639658","-8","1" +"93760","Fresno","CA","36.746375","-119.639658","-8","1" +"93761","Fresno","CA","36.746375","-119.639658","-8","1" +"93762","Fresno","CA","36.746375","-119.639658","-8","1" +"93764","Fresno","CA","36.746375","-119.639658","-8","1" +"93765","Fresno","CA","36.746375","-119.639658","-8","1" +"93771","Fresno","CA","36.746375","-119.639658","-8","1" +"93772","Fresno","CA","36.746375","-119.639658","-8","1" +"93773","Fresno","CA","36.746375","-119.639658","-8","1" +"93774","Fresno","CA","36.746375","-119.639658","-8","1" +"93775","Fresno","CA","36.746375","-119.639658","-8","1" +"93776","Fresno","CA","36.746375","-119.639658","-8","1" +"93777","Fresno","CA","36.746375","-119.639658","-8","1" +"93778","Fresno","CA","36.746375","-119.639658","-8","1" +"93779","Fresno","CA","36.746375","-119.639658","-8","1" +"93780","Fresno","CA","36.746375","-119.639658","-8","1" +"93782","Fresno","CA","36.746375","-119.639658","-8","1" +"93784","Fresno","CA","36.746375","-119.639658","-8","1" +"93786","Fresno","CA","36.746375","-119.639658","-8","1" +"93790","Fresno","CA","36.746375","-119.639658","-8","1" +"93791","Fresno","CA","36.746375","-119.639658","-8","1" +"93792","Fresno","CA","36.746375","-119.639658","-8","1" +"93793","Fresno","CA","36.746375","-119.639658","-8","1" +"93794","Fresno","CA","36.746375","-119.639658","-8","1" +"93825","Wofford Heights","CA","35.717406","-118.466755","-8","1" +"93844","Fresno","CA","36.746375","-119.639658","-8","1" +"93888","Fresno","CA","36.746375","-119.639658","-8","1" +"93901","Salinas","CA","36.665879","-121.65497","-8","1" +"93902","Salinas","CA","36.35433","-121.132928","-8","1" +"93905","Salinas","CA","36.681161","-121.61538","-8","1" +"93906","Salinas","CA","36.709717","-121.63997","-8","1" +"93907","Salinas","CA","36.754058","-121.66472","-8","1" +"93908","Salinas","CA","36.619954","-121.65145","-8","1" +"93912","Salinas","CA","36.35433","-121.132928","-8","1" +"93915","Salinas","CA","36.35433","-121.132928","-8","1" +"93920","Big Sur","CA","36.133401","-121.63798","-8","1" +"93921","Carmel","CA","36.555248","-121.9212","-8","1" +"93922","Carmel","CA","36.543261","-121.926315","-8","1" +"93923","Carmel","CA","36.517261","-121.89436","-8","1" +"93924","Carmel Valley","CA","36.447533","-121.68611","-8","1" +"93925","Chualar","CA","36.581329","-121.46597","-8","1" +"93926","Gonzales","CA","36.518179","-121.42557","-8","1" +"93927","Greenfield","CA","36.300819","-121.2904","-8","1" +"93928","Jolon","CA","36.015388","-121.24839","-8","1" +"93930","King City","CA","36.21106","-121.05986","-8","1" +"93932","Lockwood","CA","35.987276","-121.04788","-8","1" +"93933","Marina","CA","36.678155","-121.79724","-8","1" +"93940","Monterey","CA","36.586193","-121.88667","-8","1" +"93942","Monterey","CA","36.35433","-121.132928","-8","1" +"93943","Monterey","CA","36.35433","-121.132928","-8","1" +"93944","Monterey","CA","36.606225","-121.908915","-8","1" +"93950","Pacific Grove","CA","36.619065","-121.92102","-8","1" +"93953","Pebble Beach","CA","36.59081","-121.9461","-8","1" +"93954","San Lucas","CA","36.126393","-120.91784","-8","1" +"93955","Seaside","CA","36.615813","-121.83461","-8","1" +"93960","Soledad","CA","36.41176","-121.32617","-8","1" +"93962","Spreckels","CA","36.624606","-121.64655","-8","1" +"94002","Belmont","CA","37.516687","-122.29026","-8","1" +"94003","Belmont","CA","37.381144","-122.334825","-8","1" +"94005","Brisbane","CA","37.682882","-122.40422","-8","1" +"94010","Burlingame","CA","37.574936","-122.36332","-8","1" +"94011","Burlingame","CA","37.381144","-122.334825","-8","1" +"94012","Burlingame","CA","37.381144","-122.334825","-8","1" +"94014","Daly City","CA","37.699182","-122.45035","-8","1" +"94015","Daly City","CA","37.682583","-122.48209","-8","1" +"94016","Daly City","CA","37.381144","-122.334825","-8","1" +"94017","Daly City","CA","37.381144","-122.334825","-8","1" +"94018","El Granada","CA","37.510085","-122.473404","-8","1" +"94019","Half Moon Bay","CA","37.47584","-122.44323","-8","1" +"94020","La Honda","CA","37.28842","-122.22457","-8","1" +"94021","Loma Mar","CA","37.271753","-122.27672","-8","1" +"94022","Los Altos","CA","37.37714","-122.12412","-8","1" +"94023","Los Altos","CA","37.189396","-121.705327","-8","1" +"94024","Los Altos","CA","37.353741","-122.08717","-8","1" +"94025","Menlo Park","CA","37.451688","-122.18385","-8","1" +"94026","Menlo Park","CA","37.381144","-122.334825","-8","1" +"94027","Atherton","CA","37.458615","-122.20009","-8","1" +"94028","Portola Valley","CA","37.374421","-122.213","-8","1" +"94029","Menlo Park","CA","37.381144","-122.334825","-8","1" +"94030","Millbrae","CA","37.600735","-122.40135","-8","1" +"94031","Millbrae","CA","37.381144","-122.334825","-8","1" +"94035","Mountain View","CA","37.189396","-121.705327","-8","1" +"94037","Montara","CA","37.539839","-122.50819","-8","1" +"94038","Moss Beach","CA","37.52489","-122.50991","-8","1" +"94039","Mountain View","CA","37.189396","-121.705327","-8","1" +"94040","Mountain View","CA","37.380207","-122.08787","-8","1" +"94041","Mountain View","CA","37.38949","-122.07846","-8","1" +"94042","Mountain View","CA","37.189396","-121.705327","-8","1" +"94043","Mountain View","CA","37.40679","-122.07461","-8","1" +"94044","Pacifica","CA","37.613806","-122.48229","-8","1" +"94045","Pacifica","CA","37.381144","-122.334825","-8","1" +"94059","Redwood City","CA","37.381144","-122.334825","-8","1" +"94060","Pescadero","CA","37.203092","-122.33718","-8","1" +"94061","Redwood City","CA","37.463911","-122.23396","-8","1" +"94062","Redwood City","CA","37.444879","-122.26253","-8","1" +"94063","Redwood City","CA","37.483504","-122.2144","-8","1" +"94064","Redwood City","CA","37.381144","-122.334825","-8","1" +"94065","Redwood City","CA","37.533538","-122.24602","-8","1" +"94066","San Bruno","CA","37.625908","-122.42363","-8","1" +"94067","San Bruno","CA","37.381144","-122.334825","-8","1" +"94070","San Carlos","CA","37.499175","-122.26655","-8","1" +"94071","San Carlos","CA","37.381144","-122.334825","-8","1" +"94074","San Gregorio","CA","37.317278","-122.36526","-8","1" +"94080","South San Francisco","CA","37.652857","-122.4301","-8","1" +"94083","South San Francisco","CA","37.381144","-122.334825","-8","1" +"94085","Sunnyvale","CA","37.38894","-122.017956","-8","1" +"94086","Sunnyvale","CA","37.378341","-122.02398","-8","1" +"94087","Sunnyvale","CA","37.350091","-122.03602","-8","1" +"94088","Sunnyvale","CA","37.189396","-121.705327","-8","1" +"94089","Sunnyvale","CA","37.406289","-122.00838","-8","1" +"94090","Sunnyvale","CA","37.189396","-121.705327","-8","1" +"94096","San Bruno","CA","37.381144","-122.334825","-8","1" +"94098","San Bruno","CA","37.381144","-122.334825","-8","1" +"94099","South San Francisco","CA","37.381144","-122.334825","-8","1" +"94101","San Francisco","CA","37.784827","-122.727802","-8","1" +"94102","San Francisco","CA","37.779329","-122.41915","-8","1" +"94103","San Francisco","CA","37.772329","-122.41087","-8","1" +"94104","San Francisco","CA","37.791728","-122.4019","-8","1" +"94105","San Francisco","CA","37.789228","-122.3957","-8","1" +"94106","San Francisco","CA","37.784827","-122.727802","-8","1" +"94107","San Francisco","CA","37.766529","-122.39577","-8","1" +"94108","San Francisco","CA","37.792678","-122.40793","-8","1" +"94109","San Francisco","CA","37.792778","-122.42188","-8","1" +"94110","San Francisco","CA","37.74873","-122.41545","-8","1" +"94111","San Francisco","CA","37.798228","-122.40027","-8","1" +"94112","San Francisco","CA","37.720931","-122.44241","-8","1" +"94114","San Francisco","CA","37.758434","-122.43512","-8","1" +"94115","San Francisco","CA","37.786129","-122.43736","-8","1" +"94116","San Francisco","CA","37.743381","-122.48578","-8","1" +"94117","San Francisco","CA","37.770937","-122.44276","-8","1" +"94118","San Francisco","CA","37.782029","-122.46158","-8","1" +"94119","San Francisco","CA","37.784827","-122.727802","-8","1" +"94120","San Francisco","CA","37.784827","-122.727802","-8","1" +"94121","San Francisco","CA","37.778729","-122.49265","-8","1" +"94122","San Francisco","CA","37.75838","-122.48478","-8","1" +"94123","San Francisco","CA","37.801028","-122.43836","-8","1" +"94124","San Francisco","CA","37.732797","-122.39348","-8","1" +"94125","San Francisco","CA","37.784827","-122.727802","-8","1" +"94126","San Francisco","CA","37.784827","-122.727802","-8","1" +"94127","San Francisco","CA","37.734964","-122.4597","-8","1" +"94128","San Francisco","CA","37.621964","-122.39534","-8","1" +"94129","San Francisco","CA","37.79984","-122.46167","-8","1" +"94130","San Francisco","CA","37.819423","-122.36966","-8","1" +"94131","San Francisco","CA","37.741797","-122.4378","-8","1" +"94132","San Francisco","CA","37.724231","-122.47958","-8","1" +"94133","San Francisco","CA","37.801878","-122.41018","-8","1" +"94134","San Francisco","CA","37.719581","-122.41085","-8","1" +"94135","San Francisco","CA","37.784827","-122.727802","-8","1" +"94136","San Francisco","CA","37.784827","-122.727802","-8","1" +"94137","San Francisco","CA","37.784827","-122.727802","-8","1" +"94138","San Francisco","CA","37.784827","-122.727802","-8","1" +"94139","San Francisco","CA","37.784827","-122.727802","-8","1" +"94140","San Francisco","CA","37.784827","-122.727802","-8","1" +"94141","San Francisco","CA","37.784827","-122.727802","-8","1" +"94142","San Francisco","CA","37.784827","-122.727802","-8","1" +"94143","San Francisco","CA","37.76313","-122.458582","-8","1" +"94144","San Francisco","CA","37.784827","-122.727802","-8","1" +"94145","San Francisco","CA","37.784827","-122.727802","-8","1" +"94146","San Francisco","CA","37.784827","-122.727802","-8","1" +"94147","San Francisco","CA","37.784827","-122.727802","-8","1" +"94150","San Francisco","CA","37.784827","-122.727802","-8","1" +"94151","San Francisco","CA","37.784827","-122.727802","-8","1" +"94152","San Francisco","CA","37.784827","-122.727802","-8","1" +"94153","San Francisco","CA","37.784827","-122.727802","-8","1" +"94154","San Francisco","CA","37.784827","-122.727802","-8","1" +"94155","San Francisco","CA","37.784827","-122.727802","-8","1" +"94156","San Francisco","CA","37.784827","-122.727802","-8","1" +"94157","San Francisco","CA","37.784827","-122.727802","-8","1" +"94159","San Francisco","CA","37.784827","-122.727802","-8","1" +"94160","San Francisco","CA","37.784827","-122.727802","-8","1" +"94161","San Francisco","CA","37.784827","-122.727802","-8","1" +"94162","San Francisco","CA","37.784827","-122.727802","-8","1" +"94163","San Francisco","CA","37.784827","-122.727802","-8","1" +"94164","San Francisco","CA","37.784827","-122.727802","-8","1" +"94165","San Francisco","CA","37.784827","-122.727802","-8","1" +"94166","San Francisco","CA","37.784827","-122.727802","-8","1" +"94167","San Francisco","CA","37.784827","-122.727802","-8","1" +"94168","San Francisco","CA","37.784827","-122.727802","-8","1" +"94169","San Francisco","CA","37.784827","-122.727802","-8","1" +"94170","San Francisco","CA","37.784827","-122.727802","-8","1" +"94171","San Francisco","CA","37.784827","-122.727802","-8","1" +"94172","San Francisco","CA","37.784827","-122.727802","-8","1" +"94175","San Francisco","CA","37.784827","-122.727802","-8","1" +"94177","San Francisco","CA","37.784827","-122.727802","-8","1" +"94188","San Francisco","CA","37.784827","-122.727802","-8","1" +"94203","Sacramento","CA","38.380456","-121.555406","-8","1" +"94204","Sacramento","CA","38.377411","-121.444429","-8","1" +"94205","Sacramento","CA","38.377411","-121.444429","-8","1" +"94206","Sacramento","CA","38.377411","-121.444429","-8","1" +"94207","Sacramento","CA","38.377411","-121.444429","-8","1" +"94208","Sacramento","CA","38.377411","-121.444429","-8","1" +"94209","Sacramento","CA","38.377411","-121.444429","-8","1" +"94211","Sacramento","CA","38.377411","-121.444429","-8","1" +"94229","Sacramento","CA","38.377411","-121.444429","-8","1" +"94230","Sacramento","CA","38.377411","-121.444429","-8","1" +"94232","Sacramento","CA","38.377411","-121.444429","-8","1" +"94234","Sacramento","CA","38.377411","-121.444429","-8","1" +"94235","Sacramento","CA","38.377411","-121.444429","-8","1" +"94236","Sacramento","CA","38.377411","-121.444429","-8","1" +"94237","Sacramento","CA","38.377411","-121.444429","-8","1" +"94239","Sacramento","CA","38.377411","-121.444429","-8","1" +"94240","Sacramento","CA","38.377411","-121.444429","-8","1" +"94243","Sacramento","CA","38.377411","-121.444429","-8","1" +"94244","Sacramento","CA","38.377411","-121.444429","-8","1" +"94245","Sacramento","CA","38.377411","-121.444429","-8","1" +"94246","Sacramento","CA","38.377411","-121.444429","-8","1" +"94247","Sacramento","CA","38.377411","-121.444429","-8","1" +"94248","Sacramento","CA","38.377411","-121.444429","-8","1" +"94249","Sacramento","CA","38.377411","-121.444429","-8","1" +"94250","Sacramento","CA","38.377411","-121.444429","-8","1" +"94252","Sacramento","CA","38.377411","-121.444429","-8","1" +"94253","Sacramento","CA","38.377411","-121.444429","-8","1" +"94254","Sacramento","CA","38.377411","-121.444429","-8","1" +"94256","Sacramento","CA","38.377411","-121.444429","-8","1" +"94257","Sacramento","CA","38.377411","-121.444429","-8","1" +"94258","Sacramento","CA","38.377411","-121.444429","-8","1" +"94259","Sacramento","CA","38.377411","-121.444429","-8","1" +"94261","Sacramento","CA","38.377411","-121.444429","-8","1" +"94262","Sacramento","CA","38.377411","-121.444429","-8","1" +"94263","Sacramento","CA","38.377411","-121.444429","-8","1" +"94267","Sacramento","CA","38.377411","-121.444429","-8","1" +"94268","Sacramento","CA","38.377411","-121.444429","-8","1" +"94269","Sacramento","CA","38.377411","-121.444429","-8","1" +"94271","Sacramento","CA","38.377411","-121.444429","-8","1" +"94273","Sacramento","CA","38.377411","-121.444429","-8","1" +"94274","Sacramento","CA","38.377411","-121.444429","-8","1" +"94277","Sacramento","CA","38.377411","-121.444429","-8","1" +"94278","Sacramento","CA","38.377411","-121.444429","-8","1" +"94279","Sacramento","CA","38.377411","-121.444429","-8","1" +"94280","Sacramento","CA","38.377411","-121.444429","-8","1" +"94282","Sacramento","CA","38.377411","-121.444429","-8","1" +"94283","Sacramento","CA","38.377411","-121.444429","-8","1" +"94284","Sacramento","CA","38.377411","-121.444429","-8","1" +"94285","Sacramento","CA","38.377411","-121.444429","-8","1" +"94286","Sacramento","CA","38.377411","-121.444429","-8","1" +"94287","Sacramento","CA","38.377411","-121.444429","-8","1" +"94288","Sacramento","CA","38.377411","-121.444429","-8","1" +"94289","Sacramento","CA","38.377411","-121.444429","-8","1" +"94290","Sacramento","CA","38.377411","-121.444429","-8","1" +"94291","Sacramento","CA","38.377411","-121.444429","-8","1" +"94293","Sacramento","CA","38.377411","-121.444429","-8","1" +"94294","Sacramento","CA","38.377411","-121.444429","-8","1" +"94295","Sacramento","CA","38.377411","-121.444429","-8","1" +"94296","Sacramento","CA","38.377411","-121.444429","-8","1" +"94297","Sacramento","CA","38.377411","-121.444429","-8","1" +"94298","Sacramento","CA","38.377411","-121.444429","-8","1" +"94299","Sacramento","CA","38.377411","-121.444429","-8","1" +"94301","Palo Alto","CA","37.443688","-122.15071","-8","1" +"94302","Palo Alto","CA","37.189396","-121.705327","-8","1" +"94303","Palo Alto","CA","37.449888","-122.12749","-8","1" +"94304","Palo Alto","CA","37.397823","-122.16605","-8","1" +"94305","Stanford","CA","37.427039","-122.16496","-8","1" +"94306","Palo Alto","CA","37.419389","-122.13273","-8","1" +"94307","Palo Alto","CA","37.381144","-122.334825","-8","1" +"94308","Palo Alto","CA","37.381144","-122.334825","-8","1" +"94309","Palo Alto","CA","37.189396","-121.705327","-8","1" +"94310","Palo Alto","CA","37.189396","-121.705327","-8","1" +"94401","San Mateo","CA","37.570385","-122.32044","-8","1" +"94402","San Mateo","CA","37.551586","-122.32773","-8","1" +"94403","San Mateo","CA","37.539686","-122.30266","-8","1" +"94404","San Mateo","CA","37.554335","-122.27032","-8","1" +"94405","San Mateo","CA","37.381144","-122.334825","-8","1" +"94406","San Mateo","CA","37.381144","-122.334825","-8","1" +"94407","San Mateo","CA","37.381144","-122.334825","-8","1" +"94408","San Mateo","CA","37.381144","-122.334825","-8","1" +"94409","San Mateo","CA","37.381144","-122.334825","-8","1" +"94420","Foster City","CA","37.562385","-122.251078","-8","1" +"94497","San Mateo","CA","37.534736","-122.32588","-8","1" +"94501","Alameda","CA","37.769528","-122.25937","-8","1" +"94502","Alameda","CA","37.734379","-122.23952","-8","1" +"94503","American Canyon","CA","38.170372","-122.25605","-8","1" +"94506","Danville","CA","37.804064","-121.91202","-8","1" +"94507","Alamo","CA","37.856683","-122.02488","-8","1" +"94508","Angwin","CA","38.568307","-122.45084","-8","1" +"94509","Antioch","CA","37.991571","-121.80207","-8","1" +"94510","Benicia","CA","38.071769","-122.15517","-8","1" +"94511","Bethel Island","CA","38.040395","-121.63852","-8","1" +"94512","Birds Landing","CA","38.159894","-121.84195","-8","1" +"94513","Brentwood","CA","37.932123","-121.70381","-8","1" +"94514","Byron","CA","37.847704","-121.60812","-8","1" +"94515","Calistoga","CA","38.597907","-122.60952","-8","1" +"94516","Canyon","CA","37.777208","-121.955399","-8","1" +"94517","Clayton","CA","37.923523","-121.91172","-8","1" +"94518","Concord","CA","37.954122","-122.02506","-8","1" +"94519","Concord","CA","37.984271","-122.01437","-8","1" +"94520","Concord","CA","37.986321","-122.03988","-8","1" +"94521","Concord","CA","37.957772","-121.97709","-8","1" +"94522","Concord","CA","37.777208","-121.955399","-8","1" +"94523","Pleasant Hill","CA","37.951672","-122.07317","-8","1" +"94524","Concord","CA","37.777208","-121.955399","-8","1" +"94525","Crockett","CA","38.05282","-122.2234","-8","1" +"94526","Danville","CA","37.811676","-121.98647","-8","1" +"94527","Concord","CA","37.953542","-121.957778","-8","1" +"94528","Diablo","CA","37.838744","-121.96672","-8","1" +"94529","Concord","CA","37.777208","-121.955399","-8","1" +"94530","El Cerrito","CA","37.917774","-122.30426","-8","1" +"94531","Antioch","CA","37.920852","-121.723919","-8","1" +"94533","Fairfield","CA","38.269582","-122.03701","-8","1" +"94534","Fairfield","CA","38.245844","-122.101917","-8","1" +"94535","Travis AFB","CA","38.277661","-121.9192","-8","1" +"94536","Fremont","CA","37.562218","-121.99433","-8","1" +"94537","Fremont","CA","37.680181","-121.921498","-8","1" +"94538","Fremont","CA","37.527237","-121.9679","-8","1" +"94539","Fremont","CA","37.515014","-121.92916","-8","1" +"94540","Hayward","CA","37.680181","-121.921498","-8","1" +"94541","Hayward","CA","37.674431","-122.08883","-8","1" +"94542","Hayward","CA","37.657381","-122.05076","-8","1" +"94543","Hayward","CA","37.680181","-121.921498","-8","1" +"94544","Hayward","CA","37.633732","-122.06101","-8","1" +"94545","Hayward","CA","37.635582","-122.10418","-8","1" +"94546","Castro Valley","CA","37.702063","-122.07934","-8","1" +"94547","Hercules","CA","38.005122","-122.25784","-8","1" +"94548","Knightsen","CA","37.972622","-121.665205","-8","1" +"94549","Lafayette","CA","37.895695","-122.11785","-8","1" +"94550","Livermore","CA","37.65778","-121.73011","-8","1" +"94551","Livermore","CA","37.680181","-121.921498","-8","1" +"94552","Castro Valley","CA","37.69768","-122.02503","-8","1" +"94553","Martinez","CA","37.998912","-122.11501","-8","1" +"94555","Fremont","CA","37.571581","-122.0509","-8","1" +"94556","Moraga","CA","37.839426","-122.12426","-8","1" +"94557","Hayward","CA","37.680181","-121.921498","-8","1" +"94558","Napa","CA","38.337243","-122.30027","-8","1" +"94559","Napa","CA","38.291164","-122.28671","-8","1" +"94560","Newark","CA","37.535586","-122.03362","-8","1" +"94561","Oakley","CA","37.992124","-121.71328","-8","1" +"94562","Oakville","CA","38.437887","-122.399101","-8","1" +"94563","Orinda","CA","37.878625","-122.18296","-8","1" +"94564","Pinole","CA","37.997509","-122.29208","-8","1" +"94565","Pittsburg","CA","38.017917","-121.90502","-8","1" +"94566","Pleasanton","CA","37.658898","-121.87149","-8","1" +"94567","Pope Valley","CA","38.658204","-122.40441","-8","1" +"94568","Dublin","CA","37.714179","-121.92567","-8","1" +"94569","Port Costa","CA","38.04337","-122.18994","-8","1" +"94570","Moraga","CA","37.777208","-121.955399","-8","1" +"94571","Rio Vista","CA","38.156909","-121.72075","-8","1" +"94572","Rodeo","CA","38.031271","-122.26213","-8","1" +"94573","Rutherford","CA","38.466508","-122.414189","-8","1" +"94574","Saint Helena","CA","38.511241","-122.45695","-8","1" +"94575","Moraga","CA","37.777208","-121.955399","-8","1" +"94576","Deer Park","CA","38.553087","-122.47725","-8","1" +"94577","San Leandro","CA","37.722279","-122.15702","-8","1" +"94578","San Leandro","CA","37.703427","-122.128","-8","1" +"94579","San Leandro","CA","37.68858","-122.15421","-8","1" +"94580","San Lorenzo","CA","37.678531","-122.13199","-8","1" +"94581","Napa","CA","38.509569","-122.3539","-8","1" +"94583","San Ramon","CA","37.75735","-121.95213","-8","1" +"94585","Suisun City","CA","38.231364","-122.05414","-8","1" +"94586","Sunol","CA","37.593883","-121.88281","-8","1" +"94587","Union City","CA","37.592184","-122.04577","-8","1" +"94588","Pleasanton","CA","37.68973","-121.89244","-8","1" +"94589","Vallejo","CA","38.152068","-122.25074","-8","1" +"94590","Vallejo","CA","38.105219","-122.24571","-8","1" +"94591","Vallejo","CA","38.099119","-122.21035","-8","1" +"94592","Vallejo","CA","38.115015","-122.29055","-8","1" +"94595","Walnut Creek","CA","37.879757","-122.07143","-8","1" +"94596","Walnut Creek","CA","37.905924","-122.05858","-8","1" +"94597","Walnut Creek","CA","37.777208","-121.955399","-8","1" +"94598","Walnut Creek","CA","37.91878","-122.02618","-8","1" +"94599","Yountville","CA","38.403011","-122.36228","-8","1" +"94601","Oakland","CA","37.776835","-122.21792","-8","1" +"94602","Oakland","CA","37.799727","-122.21211","-8","1" +"94603","Oakland","CA","37.738379","-122.17332","-8","1" +"94604","Oakland","CA","37.680181","-121.921498","-8","1" +"94605","Oakland","CA","37.763028","-122.16305","-8","1" +"94606","Oakland","CA","37.793177","-122.24352","-8","1" +"94607","Oakland","CA","37.806427","-122.28898","-8","1" +"94608","Emeryville","CA","37.834724","-122.28316","-8","1" +"94609","Oakland","CA","37.834926","-122.264","-8","1" +"94610","Oakland","CA","37.812377","-122.24199","-8","1" +"94611","Oakland","CA","37.827126","-122.22289","-8","1" +"94612","Oakland","CA","37.809427","-122.27172","-8","1" +"94613","Oakland","CA","37.781098","-122.186573","-8","1" +"94614","Oakland","CA","37.727739","-122.204573","-8","1" +"94615","Oakland","CA","37.806677","-122.30038","-8","1" +"94617","Oakland","CA","37.807827","-122.271652","-8","1" +"94618","Oakland","CA","37.843726","-122.24369","-8","1" +"94619","Oakland","CA","37.790027","-122.18615","-8","1" +"94620","Piedmont","CA","37.680181","-121.921498","-8","1" +"94621","Oakland","CA","37.753978","-122.18969","-8","1" +"94623","Oakland","CA","37.680181","-121.921498","-8","1" +"94624","Oakland","CA","37.680181","-121.921498","-8","1" +"94625","Oakland","CA","37.803927","-122.319655","-8","1" +"94626","Oakland","CA","37.819314","-122.303136","-8","1" +"94627","Oakland","CA","37.680181","-121.921498","-8","1" +"94643","Oakland","CA","37.680181","-121.921498","-8","1" +"94649","Oakland","CA","37.680181","-121.921498","-8","1" +"94659","Oakland","CA","37.680181","-121.921498","-8","1" +"94660","Oakland","CA","37.680181","-121.921498","-8","1" +"94661","Oakland","CA","37.680181","-121.921498","-8","1" +"94662","Emeryville","CA","37.680181","-121.921498","-8","1" +"94666","Oakland","CA","37.680181","-121.921498","-8","1" +"94701","Berkeley","CA","37.860576","-122.29673","-8","1" +"94702","Berkeley","CA","37.865026","-122.2859","-8","1" +"94703","Berkeley","CA","37.862526","-122.27582","-8","1" +"94704","Berkeley","CA","37.868575","-122.25855","-8","1" +"94705","Berkeley","CA","37.856926","-122.25084","-8","1" +"94706","Albany","CA","37.889125","-122.29371","-8","1" +"94707","Berkeley","CA","37.894625","-122.27917","-8","1" +"94708","Berkeley","CA","37.894625","-122.26372","-8","1" +"94709","Berkeley","CA","37.879625","-122.2668","-8","1" +"94710","Berkeley","CA","37.869976","-122.2981","-8","1" +"94712","Berkeley","CA","37.680181","-121.921498","-8","1" +"94720","Berkeley","CA","37.866825","-122.253582","-8","1" +"94801","Richmond","CA","37.941424","-122.36628","-8","1" +"94802","Richmond","CA","37.777208","-121.955399","-8","1" +"94803","El Sobrante","CA","37.969673","-122.29413","-8","1" +"94804","Richmond","CA","37.926509","-122.3408","-8","1" +"94805","Richmond","CA","37.941824","-122.32553","-8","1" +"94806","San Pablo","CA","37.972623","-122.33873","-8","1" +"94807","Richmond","CA","37.777208","-121.955399","-8","1" +"94808","Richmond","CA","37.777208","-121.955399","-8","1" +"94820","El Sobrante","CA","37.777208","-121.955399","-8","1" +"94850","Richmond","CA","37.777208","-121.955399","-8","1" +"94901","San Rafael","CA","37.972423","-122.51484","-8","1" +"94903","San Rafael","CA","38.019022","-122.54589","-8","1" +"94904","Greenbrae","CA","37.950069","-122.54284","-8","1" +"94912","San Rafael","CA","38.068036","-122.740988","-8","1" +"94913","San Rafael","CA","38.068036","-122.740988","-8","1" +"94914","Kentfield","CA","38.068036","-122.740988","-8","1" +"94915","San Rafael","CA","38.07392","-122.55944","-8","1" +"94920","Belvedere Tiburon","CA","37.892476","-122.47541","-8","1" +"94922","Bodega","CA","38.345572","-122.96676","-8","1" +"94923","Bodega Bay","CA","38.347701","-123.05869","-8","1" +"94924","Bolinas","CA","37.907675","-122.70201","-8","1" +"94925","Corte Madera","CA","37.924242","-122.516","-8","1" +"94926","Cotati","CA","38.463088","-122.989975","-8","1" +"94927","Rohnert Park","CA","38.463088","-122.989975","-8","1" +"94928","Rohnert Park","CA","38.347174","-122.69537","-8","1" +"94929","Dillon Beach","CA","38.246611","-122.95916","-8","1" +"94930","Fairfax","CA","37.98779","-122.59962","-8","1" +"94931","Cotati","CA","38.328614","-122.71044","-8","1" +"94933","Forest Knolls","CA","38.012489","-122.68886","-8","1" +"94937","Inverness","CA","38.099205","-122.87751","-8","1" +"94938","Lagunitas","CA","38.017617","-122.6943","-8","1" +"94939","Larkspur","CA","37.936151","-122.5355","-8","1" +"94940","Marshall","CA","38.180029","-122.88357","-8","1" +"94941","Mill Valley","CA","37.898058","-122.54134","-8","1" +"94942","Mill Valley","CA","38.068036","-122.740988","-8","1" +"94945","Novato","CA","38.117065","-122.56316","-8","1" +"94946","Nicasio","CA","38.050454","-122.67866","-8","1" +"94947","Novato","CA","38.098221","-122.59809","-8","1" +"94948","Novato","CA","38.148858","-122.573745","-8","1" +"94949","Novato","CA","38.06317","-122.54111","-8","1" +"94950","Olema","CA","38.054433","-122.77762","-8","1" +"94951","Penngrove","CA","38.314531","-122.66097","-8","1" +"94952","Petaluma","CA","38.243734","-122.69345","-8","1" +"94953","Petaluma","CA","38.463088","-122.989975","-8","1" +"94954","Petaluma","CA","38.243299","-122.6069","-8","1" +"94955","Petaluma","CA","38.463088","-122.989975","-8","1" +"94956","Point Reyes Station","CA","38.081566","-122.81988","-8","1" +"94957","Ross","CA","38.022322","-122.561689","-8","1" +"94960","San Anselmo","CA","37.981623","-122.56884","-8","1" +"94963","San Geronimo","CA","38.012082","-122.66389","-8","1" +"94964","San Quentin","CA","37.943365","-122.49029","-8","1" +"94965","Sausalito","CA","37.855527","-122.49949","-8","1" +"94966","Sausalito","CA","38.068036","-122.740988","-8","1" +"94970","Stinson Beach","CA","37.903396","-122.65043","-8","1" +"94971","Tomales","CA","38.245851","-122.90644","-8","1" +"94972","Valley Ford","CA","38.335515","-122.9392","-8","1" +"94973","Woodacre","CA","38.007639","-122.63914","-8","1" +"94974","San Quentin","CA","38.068036","-122.740988","-8","1" +"94975","Petaluma","CA","38.463088","-122.989975","-8","1" +"94976","Corte Madera","CA","38.068036","-122.740988","-8","1" +"94977","Larkspur","CA","38.068036","-122.740988","-8","1" +"94978","Fairfax","CA","38.068036","-122.740988","-8","1" +"94979","San Anselmo","CA","38.068036","-122.740988","-8","1" +"94991","San Rafael","CA","37.970726","-122.524012","-8","1" +"94998","Novato","CA","38.117269","-122.568442","-8","1" +"94999","Petaluma","CA","38.267466","-122.658097","-8","1" +"95001","Aptos","CA","37.05297","-121.949418","-8","1" +"95002","Alviso","CA","37.427439","-121.97521","-8","1" +"95003","Aptos","CA","36.979333","-121.8944","-8","1" +"95004","Aromas","CA","36.885056","-121.63082","-8","1" +"95005","Ben Lomond","CA","37.084347","-122.08524","-8","1" +"95006","Boulder Creek","CA","37.151813","-122.13679","-8","1" +"95007","Brookdale","CA","37.10548","-122.1047","-8","1" +"95008","Campbell","CA","37.278843","-121.95446","-8","1" +"95009","Campbell","CA","37.189396","-121.705327","-8","1" +"95010","Capitola","CA","36.9761","-121.95316","-8","1" +"95011","Campbell","CA","37.189396","-121.705327","-8","1" +"95012","Castroville","CA","36.768856","-121.75105","-8","1" +"95013","Coyote","CA","37.189396","-121.705327","-8","1" +"95014","Cupertino","CA","37.317909","-122.04779","-8","1" +"95015","Cupertino","CA","37.189396","-121.705327","-8","1" +"95017","Davenport","CA","37.085986","-122.22638","-8","1" +"95018","Felton","CA","37.057708","-122.05967","-8","1" +"95019","Freedom","CA","36.935552","-121.77972","-8","1" +"95020","Gilroy","CA","37.016943","-121.56581","-8","1" +"95021","Gilroy","CA","36.986148","-121.497349","-8","1" +"95022","Palo Alto","CA","37.32477","-122.184276","-8","1" +"95023","Hollister","CA","36.862243","-121.38006","-8","1" +"95024","Hollister","CA","36.85443","-121.411909","-8","1" +"95026","Holy City","CA","37.189396","-121.705327","-8","1" +"95030","Los Gatos","CA","37.228594","-121.98396","-8","1" +"95031","Los Gatos","CA","37.189396","-121.705327","-8","1" +"95032","Los Gatos","CA","37.241193","-121.9534","-8","1" +"95033","Los Gatos","CA","37.160012","-121.9881","-8","1" +"95035","Milpitas","CA","37.436451","-121.89438","-8","1" +"95036","Milpitas","CA","37.456807","-121.913632","-8","1" +"95037","Morgan Hill","CA","37.137595","-121.66211","-8","1" +"95038","Morgan Hill","CA","37.225787","-121.617894","-8","1" +"95039","Moss Landing","CA","36.812905","-121.78299","-8","1" +"95041","Mount Hermon","CA","37.050798","-122.0569","-8","1" +"95042","New Almaden","CA","37.189396","-121.705327","-8","1" +"95043","Paicines","CA","36.504586","-121.01515","-8","1" +"95044","Redwood Estates","CA","37.189396","-121.705327","-8","1" +"95045","San Juan Bautista","CA","36.829052","-121.52848","-8","1" +"95046","San Martin","CA","37.088746","-121.60048","-8","1" +"95050","Santa Clara","CA","37.347791","-121.95131","-8","1" +"95051","Santa Clara","CA","37.346241","-121.9846","-8","1" +"95052","Santa Clara","CA","37.189396","-121.705327","-8","1" +"95053","Santa Clara","CA","37.189396","-121.705327","-8","1" +"95054","Santa Clara","CA","37.39324","-121.96066","-8","1" +"95055","Santa Clara","CA","37.189396","-121.705327","-8","1" +"95056","Santa Clara","CA","37.189396","-121.705327","-8","1" +"95060","Santa Cruz","CA","36.980556","-122.04603","-8","1" +"95061","Santa Cruz","CA","37.007399","-122.075125","-8","1" +"95062","Santa Cruz","CA","36.9707","-121.99086","-8","1" +"95063","Santa Cruz","CA","36.9634","-121.973771","-8","1" +"95064","Santa Cruz","CA","37.000199","-122.06026","-8","1" +"95065","Santa Cruz","CA","37.010322","-121.98523","-8","1" +"95066","Scotts Valley","CA","37.057575","-122.01507","-8","1" +"95067","Scotts Valley","CA","37.05297","-121.949418","-8","1" +"95070","Saratoga","CA","37.270543","-122.02305","-8","1" +"95071","Saratoga","CA","37.189396","-121.705327","-8","1" +"95073","Soquel","CA","37.007916","-121.95072","-8","1" +"95075","Tres Pinos","CA","36.761702","-121.274795","-8","1" +"95076","Watsonville","CA","36.922902","-121.77224","-8","1" +"95077","Watsonville","CA","37.05297","-121.949418","-8","1" +"95101","San Jose","CA","37.189396","-121.705327","-8","1" +"95102","San Jose","CA","37.189396","-121.705327","-8","1" +"95103","San Jose","CA","37.189396","-121.705327","-8","1" +"95106","San Jose","CA","37.189396","-121.705327","-8","1" +"95108","San Jose","CA","37.189396","-121.705327","-8","1" +"95109","San Jose","CA","37.189396","-121.705327","-8","1" +"95110","San Jose","CA","37.335545","-121.89877","-8","1" +"95111","San Jose","CA","37.284042","-121.82664","-8","1" +"95112","San Jose","CA","37.348541","-121.88627","-8","1" +"95113","San Jose","CA","37.333941","-121.89154","-8","1" +"95114","San Jose","CA","37.189396","-121.705327","-8","1" +"95115","San Jose","CA","37.189396","-121.705327","-8","1" +"95116","San Jose","CA","37.34964","-121.8544","-8","1" +"95117","San Jose","CA","37.311042","-121.96162","-8","1" +"95118","San Jose","CA","37.257643","-121.89072","-8","1" +"95119","San Jose","CA","37.232244","-121.79092","-8","1" +"95120","San Jose","CA","37.213624","-121.85671","-8","1" +"95121","San Jose","CA","37.305714","-121.81145","-8","1" +"95122","San Jose","CA","37.329641","-121.83359","-8","1" +"95123","San Jose","CA","37.244426","-121.83246","-8","1" +"95124","San Jose","CA","37.256743","-121.92312","-8","1" +"95125","San Jose","CA","37.295092","-121.89649","-8","1" +"95126","San Jose","CA","37.326341","-121.9178","-8","1" +"95127","San Jose","CA","37.369473","-121.82077","-8","1" +"95128","San Jose","CA","37.316983","-121.93555","-8","1" +"95129","San Jose","CA","37.307742","-121.99976","-8","1" +"95130","San Jose","CA","37.289642","-121.98311","-8","1" +"95131","San Jose","CA","37.38631","-121.88987","-8","1" +"95132","San Jose","CA","37.405989","-121.84775","-8","1" +"95133","San Jose","CA","37.37354","-121.85784","-8","1" +"95134","San Jose","CA","37.412539","-121.94461","-8","1" +"95135","San Jose","CA","37.299474","-121.75446","-8","1" +"95136","San Jose","CA","37.269343","-121.84939","-8","1" +"95137","San Jose","CA","37.189396","-121.705327","-8","1" +"95138","San Jose","CA","37.255915","-121.77536","-8","1" +"95139","San Jose","CA","37.226194","-121.76514","-8","1" +"95140","Mount Hamilton","CA","37.388718","-121.63845","-8","1" +"95141","San Jose","CA","37.178745","-121.741809","-8","1" +"95142","San Jose","CA","37.189396","-121.705327","-8","1" +"95148","San Jose","CA","37.330496","-121.79141","-8","1" +"95150","San Jose","CA","37.189396","-121.705327","-8","1" +"95151","San Jose","CA","37.187349","-121.75722","-8","1" +"95152","San Jose","CA","37.189396","-121.705327","-8","1" +"95153","San Jose","CA","37.216184","-121.743632","-8","1" +"95154","San Jose","CA","37.189396","-121.705327","-8","1" +"95155","San Jose","CA","37.189396","-121.705327","-8","1" +"95156","San Jose","CA","37.189396","-121.705327","-8","1" +"95157","San Jose","CA","37.189396","-121.705327","-8","1" +"95158","San Jose","CA","37.189396","-121.705327","-8","1" +"95159","San Jose","CA","37.189396","-121.705327","-8","1" +"95160","San Jose","CA","37.189396","-121.705327","-8","1" +"95161","San Jose","CA","37.189396","-121.705327","-8","1" +"95164","San Jose","CA","37.189396","-121.705327","-8","1" +"95170","San Jose","CA","37.189396","-121.705327","-8","1" +"95171","San Jose","CA","37.189396","-121.705327","-8","1" +"95172","San Jose","CA","37.189396","-121.705327","-8","1" +"95173","San Jose","CA","37.189396","-121.705327","-8","1" +"95190","San Jose","CA","37.189396","-121.705327","-8","1" +"95191","San Jose","CA","37.189396","-121.705327","-8","1" +"95192","San Jose","CA","37.189396","-121.705327","-8","1" +"95193","San Jose","CA","37.189396","-121.705327","-8","1" +"95194","San Jose","CA","37.189396","-121.705327","-8","1" +"95196","San Jose","CA","37.189396","-121.705327","-8","1" +"95201","Stockton","CA","37.672196","-121.298794","-8","1" +"95202","Stockton","CA","37.958723","-121.28805","-8","1" +"95203","Stockton","CA","37.954823","-121.30735","-8","1" +"95204","Stockton","CA","37.974273","-121.3147","-8","1" +"95205","Stockton","CA","37.962873","-121.26401","-8","1" +"95206","Stockton","CA","37.922024","-121.3025","-8","1" +"95207","Stockton","CA","38.004172","-121.3237","-8","1" +"95208","Stockton","CA","37.889849","-121.253872","-8","1" +"95209","Stockton","CA","38.035499","-121.34378","-8","1" +"95210","Stockton","CA","38.025086","-121.29722","-8","1" +"95211","Stockton","CA","37.981073","-121.308008","-8","1" +"95212","Stockton","CA","38.038906","-121.24213","-8","1" +"95213","Stockton","CA","37.904777","-121.226782","-8","1" +"95215","Stockton","CA","37.955474","-121.19064","-8","1" +"95219","Stockton","CA","38.004922","-121.40022","-8","1" +"95220","Acampo","CA","38.200193","-121.23505","-8","1" +"95221","Altaville","CA","38.077","-120.55401","-8","1" +"95222","Angels Camp","CA","38.087437","-120.58072","-8","1" +"95223","Arnold","CA","38.282255","-120.28875","-8","1" +"95224","Avery","CA","38.208553","-120.34876","-8","1" +"95225","Burson","CA","38.183288","-120.89487","-8","1" +"95226","Campo Seco","CA","38.229515","-120.86341","-8","1" +"95227","Clements","CA","38.205817","-121.05361","-8","1" +"95228","Copperopolis","CA","37.942532","-120.65786","-8","1" +"95229","Douglas Flat","CA","38.110355","-120.45436","-8","1" +"95230","Farmington","CA","37.959439","-120.82329","-8","1" +"95231","French Camp","CA","37.882742","-121.27978","-8","1" +"95232","Glencoe","CA","38.356552","-120.58318","-8","1" +"95233","Hathaway Pines","CA","38.186102","-120.36328","-8","1" +"95234","Holt","CA","37.889849","-121.253872","-8","1" +"95236","Linden","CA","38.018456","-121.05675","-8","1" +"95237","Lockeford","CA","38.162818","-121.14855","-8","1" +"95240","Lodi","CA","38.12463","-121.25039","-8","1" +"95241","Lodi","CA","37.889849","-121.253872","-8","1" +"95242","Lodi","CA","38.132618","-121.32282","-8","1" +"95245","Mokelumne Hill","CA","38.300688","-120.62632","-8","1" +"95246","Mountain Ranch","CA","38.26127","-120.50328","-8","1" +"95247","Murphys","CA","38.146124","-120.45458","-8","1" +"95248","Rail Road Flat","CA","38.325626","-120.485154","-8","1" +"95249","San Andreas","CA","38.192823","-120.64285","-8","1" +"95250","Sheep Ranch","CA","38.256839","-120.38102","-8","1" +"95251","Vallecito","CA","38.075897","-120.46544","-8","1" +"95252","Valley Springs","CA","38.145601","-120.85733","-8","1" +"95253","Victor","CA","38.114669","-121.203656","-8","1" +"95254","Wallace","CA","38.192911","-120.95775","-8","1" +"95255","West Point","CA","38.421689","-120.46947","-8","1" +"95257","Wilseyville","CA","38.377741","-120.45741","-8","1" +"95258","Woodbridge","CA","38.154118","-121.306","-8","1" +"95267","Stockton","CA","37.889849","-121.253872","-8","1" +"95269","Stockton","CA","37.889849","-121.253872","-8","1" +"95290","Stockton","CA","37.953473","-121.285257","-8","1" +"95296","Lyoth","CA","37.889849","-121.253872","-8","1" +"95297","Stockton","CA","37.889849","-121.253872","-8","1" +"95298","Stockton","CA","37.889849","-121.253872","-8","1" +"95301","Atwater","CA","37.35115","-120.6056","-8","1" +"95303","Ballico","CA","37.46994","-120.67607","-8","1" +"95304","Banta","CA","37.889849","-121.253872","-8","1" +"95305","Big Oak Flat","CA","37.824554","-120.25764","-8","1" +"95306","Catheys Valley","CA","37.432168","-120.09682","-8","1" +"95307","Ceres","CA","37.584282","-120.95064","-8","1" +"95309","Chinese Camp","CA","37.807938","-120.440467","-8","1" +"95310","Columbia","CA","38.060956","-120.39216","-8","1" +"95311","Coulterville","CA","37.74614","-120.15123","-8","1" +"95312","Cressey","CA","37.420143","-120.66525","-8","1" +"95313","Crows Landing","CA","37.413659","-121.05649","-8","1" +"95314","Dardanelle","CA","38.033541","-119.92502","-8","1" +"95315","Delhi","CA","37.428227","-120.77519","-8","1" +"95316","Denair","CA","37.552329","-120.78463","-8","1" +"95317","El Nido","CA","37.127525","-120.50574","-8","1" +"95318","El Portal","CA","37.673629","-119.81305","-8","1" +"95319","Empire","CA","37.637531","-120.906593","-8","1" +"95320","Escalon","CA","37.797806","-121.00179","-8","1" +"95321","Groveland","CA","37.840248","-120.04541","-8","1" +"95322","Gustine","CA","37.187494","-121.03232","-8","1" +"95323","Hickman","CA","37.6194","-120.7141","-8","1" +"95324","Hilmar","CA","37.400932","-120.87972","-8","1" +"95325","Hornitos","CA","37.46336","-120.2561","-8","1" +"95326","Hughson","CA","37.59471","-120.86419","-8","1" +"95327","Jamestown","CA","37.867243","-120.49157","-8","1" +"95328","Keyes","CA","37.5596","-120.9141","-8","1" +"95329","La Grange","CA","37.694235","-120.42421","-8","1" +"95330","Lathrop","CA","37.816876","-121.28541","-8","1" +"95333","Le Grand","CA","37.245423","-120.27116","-8","1" +"95334","Livingston","CA","37.38025","-120.72614","-8","1" +"95335","Long Barn","CA","38.119056","-120.1014","-8","1" +"95336","Manteca","CA","37.812815","-121.21416","-8","1" +"95337","Manteca","CA","37.782332","-121.23578","-8","1" +"95338","Mariposa","CA","37.505484","-119.92527","-8","1" +"95340","Merced","CA","37.294648","-120.47474","-8","1" +"95341","Merced","CA","37.186872","-120.650351","-8","1" +"95342","Atwater","CA","37.367315","-120.570634","-8","1" +"95343","Merced","CA","37.186872","-120.650351","-8","1" +"95344","Merced","CA","37.378234","-120.617808","-8","1" +"95345","Midpines","CA","37.576262","-119.94865","-8","1" +"95346","Mi Wuk Village","CA","38.079632","-120.16872","-8","1" +"95347","Moccasin","CA","37.805371","-120.375945","-8","1" +"95348","Merced","CA","37.342056","-120.50154","-8","1" +"95350","Modesto","CA","37.671778","-121.01249","-8","1" +"95351","Modesto","CA","37.626067","-120.99955","-8","1" +"95352","Modesto","CA","37.60396","-120.937052","-8","1" +"95353","Modesto","CA","37.60396","-120.937052","-8","1" +"95354","Modesto","CA","37.644481","-120.98043","-8","1" +"95355","Modesto","CA","37.673513","-120.95566","-8","1" +"95356","Modesto","CA","37.704138","-121.02187","-8","1" +"95357","Modesto","CA","37.667196","-120.9061","-8","1" +"95358","Modesto","CA","37.622898","-121.05181","-8","1" +"95360","Newman","CA","37.312014","-121.0314","-8","1" +"95361","Oakdale","CA","37.776528","-120.84756","-8","1" +"95363","Patterson","CA","37.477477","-121.14555","-8","1" +"95364","Pinecrest","CA","38.275328","-119.89619","-8","1" +"95365","Planada","CA","37.297403","-120.32285","-8","1" +"95366","Ripon","CA","37.742895","-121.12546","-8","1" +"95367","Riverbank","CA","37.731272","-120.94365","-8","1" +"95368","Salida","CA","37.708727","-121.08928","-8","1" +"95369","Snelling","CA","37.521832","-120.46555","-8","1" +"95370","Sonora","CA","37.995238","-120.3437","-8","1" +"95372","Soulsbyville","CA","37.991855","-120.25829","-8","1" +"95373","Standard","CA","37.986377","-120.241412","-8","1" +"95374","Stevinson","CA","37.322619","-120.88299","-8","1" +"95375","Strawberry","CA","38.184096","-120.021342","-8","1" +"95376","Tracy","CA","37.728417","-121.42399","-8","1" +"95377","Tracy","CA","37.72374","-121.447131","-8","1" +"95378","Tracy","CA","37.889849","-121.253872","-8","1" +"95379","Tuolumne","CA","37.957978","-120.2297","-8","1" +"95380","Turlock","CA","37.48858","-120.85196","-8","1" +"95381","Turlock","CA","37.60396","-120.937052","-8","1" +"95382","Turlock","CA","37.523901","-120.8516","-8","1" +"95383","Twain Harte","CA","38.055888","-120.23002","-8","1" +"95385","Vernalis","CA","37.609781","-121.26784","-8","1" +"95386","Waterford","CA","37.645632","-120.73812","-8","1" +"95387","Westley","CA","37.539768","-121.24702","-8","1" +"95388","Winton","CA","37.400193","-120.61094","-8","1" +"95389","Yosemite National Park","CA","37.699662","-119.67529","-8","1" +"95390","Riverbank","CA","37.60396","-120.937052","-8","1" +"95397","Modesto","CA","37.60396","-120.937052","-8","1" +"95401","Santa Rosa","CA","38.440111","-122.74563","-8","1" +"95402","Santa Rosa","CA","38.440061","-122.710598","-8","1" +"95403","Santa Rosa","CA","38.480494","-122.74976","-8","1" +"95404","Santa Rosa","CA","38.457611","-122.69317","-8","1" +"95405","Santa Rosa","CA","38.438161","-122.67419","-8","1" +"95406","Santa Rosa","CA","38.459575","-122.715654","-8","1" +"95407","Santa Rosa","CA","38.404991","-122.7275","-8","1" +"95408","Santa Rosa","CA","38.463088","-122.989975","-8","1" +"95409","Santa Rosa","CA","38.460594","-122.6422","-8","1" +"95410","Albion","CA","39.216157","-123.71376","-8","1" +"95412","Annapolis","CA","38.717819","-123.32757","-8","1" +"95415","Boonville","CA","39.026811","-123.38621","-8","1" +"95416","Boyes Hot Springs","CA","38.463088","-122.989975","-8","1" +"95417","Branscomb","CA","39.670239","-123.64423","-8","1" +"95418","Calpella","CA","39.213324","-123.277143","-8","1" +"95419","Camp Meeker","CA","38.424554","-122.96067","-8","1" +"95420","Caspar","CA","39.365356","-123.80469","-8","1" +"95421","Cazadero","CA","38.562843","-123.16785","-8","1" +"95422","Clearlake","CA","38.956206","-122.63523","-8","1" +"95423","Clearlake Oaks","CA","39.037173","-122.65445","-8","1" +"95424","Clearlake Park","CA","38.971518","-122.66423","-8","1" +"95425","Cloverdale","CA","38.795668","-122.997","-8","1" +"95426","Cobb","CA","38.835146","-122.72234","-8","1" +"95427","Comptche","CA","39.240872","-123.54765","-8","1" +"95428","Covelo","CA","39.825781","-123.23026","-8","1" +"95429","Dos Rios","CA","39.761199","-123.33547","-8","1" +"95430","Duncans Mills","CA","38.449265","-123.05495","-8","1" +"95431","Eldridge","CA","38.347913","-122.51753","-8","1" +"95432","Elk","CA","39.103897","-123.64617","-8","1" +"95433","El Verano","CA","38.313864","-122.513093","-8","1" +"95435","Finley","CA","39.00686","-122.859625","-8","1" +"95436","Forestville","CA","38.495857","-122.90636","-8","1" +"95437","Fort Bragg","CA","39.43695","-123.76087","-8","1" +"95439","Fulton","CA","38.494643","-122.77226","-8","1" +"95441","Geyserville","CA","38.710228","-122.95704","-8","1" +"95442","Glen Ellen","CA","38.367948","-122.52468","-8","1" +"95443","Glenhaven","CA","39.03276","-122.74082","-8","1" +"95444","Graton","CA","38.434663","-122.8689","-8","1" +"95445","Gualala","CA","38.813417","-123.55762","-8","1" +"95446","Guerneville","CA","38.509737","-123.00084","-8","1" +"95448","Healdsburg","CA","38.614088","-122.87626","-8","1" +"95449","Hopland","CA","38.955142","-123.08125","-8","1" +"95450","Jenner","CA","38.506229","-123.22938","-8","1" +"95451","Kelseyville","CA","38.939725","-122.78548","-8","1" +"95452","Kenwood","CA","38.414061","-122.54668","-8","1" +"95453","Lakeport","CA","39.051698","-122.92071","-8","1" +"95454","Laytonville","CA","39.745588","-123.5223","-8","1" +"95456","Littleriver","CA","39.268774","-123.75568","-8","1" +"95457","Lower Lake","CA","38.911393","-122.599","-8","1" +"95458","Lucerne","CA","39.090421","-122.78972","-8","1" +"95459","Manchester","CA","38.996389","-123.66468","-8","1" +"95460","Mendocino","CA","39.311858","-123.79166","-8","1" +"95461","Middletown","CA","38.791139","-122.61069","-8","1" +"95462","Monte Rio","CA","38.471368","-123.01469","-8","1" +"95463","Navarro","CA","39.173321","-123.55081","-8","1" +"95464","Nice","CA","39.12558","-122.84653","-8","1" +"95465","Occidental","CA","38.409993","-122.98347","-8","1" +"95466","Philo","CA","39.089273","-123.50186","-8","1" +"95468","Point Arena","CA","38.898385","-123.65746","-8","1" +"95469","Potter Valley","CA","39.383027","-123.07856","-8","1" +"95470","Redwood Valley","CA","39.285782","-123.22064","-8","1" +"95471","Rio Nido","CA","38.522499","-122.97967","-8","1" +"95472","Sebastopol","CA","38.393314","-122.83666","-8","1" +"95473","Sebastopol","CA","38.325851","-122.505846","-8","1" +"95476","Sonoma","CA","38.277147","-122.47058","-8","1" +"95480","Stewarts Point","CA","38.654705","-123.3999","-8","1" +"95481","Talmage","CA","39.131856","-123.16221","-8","1" +"95482","Ukiah","CA","39.154946","-123.20088","-8","1" +"95485","Upper Lake","CA","39.172397","-122.90474","-8","1" +"95486","Villa Grande","CA","38.464487","-123.037996","-8","1" +"95487","Vineburg","CA","38.463088","-122.989975","-8","1" +"95488","Westport","CA","39.727052","-123.79238","-8","1" +"95490","Willits","CA","39.451662","-123.37285","-8","1" +"95492","Windsor","CA","38.54486","-122.80785","-8","1" +"95493","Witter Springs","CA","39.19607","-122.96649","-8","1" +"95494","Yorkville","CA","38.916201","-123.26509","-8","1" +"95497","The Sea Ranch","CA","38.725628","-123.47625","-8","1" +"95501","Eureka","CA","40.793739","-124.16102","-8","1" +"95502","Eureka","CA","40.814595","-124.08052","-8","1" +"95503","Eureka","CA","40.757091","-124.1513","-8","1" +"95511","Alderpoint","CA","40.169518","-123.60216","-8","1" +"95514","Blocksburg","CA","40.325767","-123.69266","-8","1" +"95517","Diamond Springs","CA","38.692808","-120.818771","-8","1" +"95518","Arcata","CA","40.881383","-123.984232","-8","1" +"95519","Mckinleyville","CA","40.963482","-124.07286","-8","1" +"95521","Arcata","CA","40.867469","-124.07519","-8","1" +"95522","Arcata","CA","40.878317","-124.075673","-8","1" +"95524","Bayside","CA","40.822884","-124.06711","-8","1" +"95525","Blue Lake","CA","40.907437","-123.88348","-8","1" +"95526","Bridgeville","CA","40.413386","-123.53267","-8","1" +"95527","Burnt Ranch","CA","40.877334","-123.45661","-8","1" +"95528","Carlotta","CA","40.489925","-123.97132","-8","1" +"95531","Crescent City","CA","41.782681","-124.16703","-8","1" +"95532","Crescent City","CA","41.852985","-124.15721","-8","1" +"95534","Cutten","CA","40.733552","-123.944021","-8","1" +"95536","Ferndale","CA","40.561448","-124.25781","-8","1" +"95537","Fields Landing","CA","40.725444","-124.21697","-8","1" +"95538","Fort Dick","CA","41.892473","-124.145734","-8","1" +"95540","Fortuna","CA","40.583488","-124.14367","-8","1" +"95542","Garberville","CA","40.0985","-123.80654","-8","1" +"95543","Gasquet","CA","41.888557","-123.80079","-8","1" +"95545","Honeydew","CA","40.281369","-124.08998","-8","1" +"95546","Hoopa","CA","41.161505","-123.72444","-8","1" +"95547","Hydesville","CA","40.546202","-124.08412","-8","1" +"95548","Klamath","CA","41.51823","-124.03075","-8","1" +"95549","Kneeland","CA","40.691578","-123.87189","-8","1" +"95550","Korbel","CA","40.766645","-123.83488","-8","1" +"95551","Loleta","CA","40.659753","-124.22153","-8","1" +"95552","Mad River","CA","40.390478","-123.41309","-8","1" +"95553","Miranda","CA","40.210793","-123.86447","-8","1" +"95554","Myers Flat","CA","40.2959","-123.77902","-8","1" +"95555","Orick","CA","41.296122","-124.05351","-8","1" +"95556","Orleans","CA","41.300573","-123.54411","-8","1" +"95558","Petrolia","CA","40.272963","-124.21494","-8","1" +"95559","Phillipsville","CA","40.196116","-123.77315","-8","1" +"95560","Redway","CA","40.131417","-123.85855","-8","1" +"95562","Rio Dell","CA","40.494813","-124.11637","-8","1" +"95563","Salyer","CA","40.89197","-123.56149","-8","1" +"95564","Samoa","CA","40.79348","-124.19929","-8","1" +"95565","Scotia","CA","40.459978","-124.06059","-8","1" +"95567","Smith River","CA","41.949739","-124.15098","-8","1" +"95568","Somes Bar","CA","41.455226","-123.47671","-8","1" +"95569","Redcrest","CA","40.35983","-123.87105","-8","1" +"95570","Trinidad","CA","41.081726","-124.13112","-8","1" +"95571","Weott","CA","40.322683","-123.92367","-8","1" +"95573","Willow Creek","CA","40.945039","-123.65806","-8","1" +"95585","Leggett","CA","39.860285","-123.71685","-8","1" +"95587","Piercy","CA","39.96266","-123.74471","-8","1" +"95589","Whitethorn","CA","40.033316","-124.02379","-8","1" +"95592","Vallejo","CA","38.098737","-122.271251","-8","1" +"95595","Zenia","CA","40.202464","-123.46646","-8","1" +"95601","Amador City","CA","38.426602","-120.8275","-8","1" +"95602","Auburn","CA","38.976837","-121.09142","-8","1" +"95603","Auburn","CA","38.909605","-121.07971","-8","1" +"95604","Auburn","CA","39.106287","-120.536032","-8","1" +"95605","West Sacramento","CA","38.592155","-121.52805","-8","1" +"95606","Brooks","CA","38.857328","-122.21486","-8","1" +"95607","Capay","CA","38.706727","-122.125","-8","1" +"95608","Carmichael","CA","38.628371","-121.32702","-8","1" +"95609","Carmichael","CA","38.650335","-121.327214","-8","1" +"95610","Citrus Heights","CA","38.696912","-121.27125","-8","1" +"95611","Citrus Heights","CA","38.377411","-121.444429","-8","1" +"95612","Clarksburg","CA","38.383366","-121.57819","-8","1" +"95613","Coloma","CA","38.79829","-120.88578","-8","1" +"95614","Cool","CA","38.880294","-120.97426","-8","1" +"95615","Courtland","CA","38.333568","-121.54853","-8","1" +"95616","Davis","CA","38.549256","-121.73655","-8","1" +"95617","Davis","CA","38.619545","-121.961532","-8","1" +"95618","El Macero","CA","38.546306","-121.68682","-8","1" +"95619","Diamond Springs","CA","38.689067","-120.82071","-8","1" +"95620","Dixon","CA","38.427208","-121.81348","-8","1" +"95621","Citrus Heights","CA","38.695252","-121.3081","-8","1" +"95623","El Dorado","CA","38.639643","-120.84556","-8","1" +"95624","Elk Grove","CA","38.421068","-121.36059","-8","1" +"95625","Elmira","CA","38.35011","-121.90799","-8","1" +"95626","Elverta","CA","38.727451","-121.45433","-8","1" +"95627","Esparto","CA","38.744062","-121.99929","-8","1" +"95628","Fair Oaks","CA","38.654803","-121.26529","-8","1" +"95629","Fiddletown","CA","38.527556","-120.69292","-8","1" +"95630","Folsom","CA","38.672127","-121.15783","-8","1" +"95631","Foresthill","CA","39.033312","-120.82172","-8","1" +"95632","Galt","CA","38.267544","-121.29723","-8","1" +"95633","Garden Valley","CA","38.839773","-120.82881","-8","1" +"95634","Georgetown","CA","38.930207","-120.78557","-8","1" +"95635","Greenwood","CA","38.919588","-120.90406","-8","1" +"95636","Grizzly Flats","CA","38.634753","-120.53353","-8","1" +"95637","Guinda","CA","38.830508","-122.19944","-8","1" +"95638","Herald","CA","38.317665","-121.16166","-8","1" +"95639","Hood","CA","38.367276","-121.51487","-8","1" +"95640","Ione","CA","38.346132","-120.94516","-8","1" +"95641","Isleton","CA","38.161756","-121.60428","-8","1" +"95642","Jackson","CA","38.359772","-120.75324","-8","1" +"95644","Kit Carson","CA","38.463282","-120.550021","-8","1" +"95645","Knights Landing","CA","38.851198","-121.73354","-8","1" +"95646","Kirkwood","CA","38.688329","-120.05516","-8","1" +"95648","Lincoln","CA","38.902873","-121.29795","-8","1" +"95650","Loomis","CA","38.817508","-121.17225","-8","1" +"95651","Lotus","CA","38.817357","-120.92213","-8","1" +"95652","Mcclellan AFB","CA","38.666653","-121.389613","-8","1" +"95653","Madison","CA","38.678663","-121.96907","-8","1" +"95654","Martell","CA","38.463282","-120.550021","-8","1" +"95655","Mather","CA","38.558073","-121.28737","-8","1" +"95656","Mount Aukum","CA","38.54723","-120.707891","-8","1" +"95658","Newcastle","CA","38.87672","-121.14213","-8","1" +"95659","Nicolaus","CA","38.868919","-121.56398","-8","1" +"95660","North Highlands","CA","38.676103","-121.37656","-8","1" +"95661","Roseville","CA","38.731976","-121.2531","-8","1" +"95662","Orangevale","CA","38.682803","-121.2231","-8","1" +"95663","Penryn","CA","38.859227","-121.17565","-8","1" +"95664","Pilot Hill","CA","38.811695","-121.02427","-8","1" +"95665","Pine Grove","CA","38.40097","-120.64952","-8","1" +"95666","Pioneer","CA","38.529753","-120.41411","-8","1" +"95667","Placerville","CA","38.724682","-120.79533","-8","1" +"95668","Pleasant Grove","CA","38.8323","-121.51661","-8","1" +"95669","Plymouth","CA","38.480569","-120.86895","-8","1" +"95670","Rancho Cordova","CA","38.605355","-121.28247","-8","1" +"95671","Represa","CA","38.377411","-121.444429","-8","1" +"95672","Rescue","CA","38.71203","-121.0023","-8","1" +"95673","Rio Linda","CA","38.688069","-121.44874","-8","1" +"95674","Rio Oso","CA","38.961976","-121.48166","-8","1" +"95675","River Pines","CA","38.545656","-120.74287","-8","1" +"95676","Robbins","CA","38.909351","-121.71843","-8","1" +"95677","Rocklin","CA","38.789165","-121.23825","-8","1" +"95678","Roseville","CA","38.752434","-121.28933","-8","1" +"95679","Rumsey","CA","38.867147","-122.224813","-8","1" +"95680","Ryde","CA","38.232898","-121.568427","-8","1" +"95681","Sheridan","CA","38.997612","-121.37967","-8","1" +"95682","Shingle Springs","CA","38.641158","-120.97109","-8","1" +"95683","Sloughhouse","CA","38.492811","-121.10036","-8","1" +"95684","Somerset","CA","38.60766","-120.5937","-8","1" +"95685","Sutter Creek","CA","38.394464","-120.79015","-8","1" +"95686","Thornton","CA","38.228976","-121.44032","-8","1" +"95687","Vacaville","CA","38.34401","-121.95333","-8","1" +"95688","Vacaville","CA","38.380528","-121.99192","-8","1" +"95689","Volcano","CA","38.473857","-120.59421","-8","1" +"95690","Walnut Grove","CA","38.240477","-121.56507","-8","1" +"95691","West Sacramento","CA","38.569193","-121.54496","-8","1" +"95692","Wheatland","CA","39.030716","-121.43497","-8","1" +"95693","Wilton","CA","38.382367","-121.23708","-8","1" +"95694","Winters","CA","38.537434","-121.97757","-8","1" +"95695","Woodland","CA","38.697238","-121.80944","-8","1" +"95696","Vacaville","CA","38.34896","-121.908324","-8","1" +"95697","Yolo","CA","38.751038","-121.832156","-8","1" +"95698","Zamora","CA","38.782731","-121.89811","-8","1" +"95699","Drytown","CA","38.437001","-120.845706","-8","1" +"95701","Alta","CA","39.217668","-120.78346","-8","1" +"95703","Applegate","CA","38.995732","-120.99703","-8","1" +"95709","Camino","CA","38.748112","-120.67463","-8","1" +"95712","Chicago Park","CA","39.167276","-120.964275","-8","1" +"95713","Colfax","CA","39.092062","-120.93471","-8","1" +"95714","Dutch Flat","CA","39.204434","-120.83816","-8","1" +"95715","Emigrant Gap","CA","39.277658","-120.7067","-8","1" +"95717","Gold Run","CA","39.177026","-120.8451","-8","1" +"95720","Kyburz","CA","38.771209","-120.26765","-8","1" +"95721","Echo Lake","CA","38.823996","-120.05956","-8","1" +"95722","Meadow Vista","CA","39.005098","-121.01891","-8","1" +"95724","Norden","CA","39.26599","-120.64145","-8","1" +"95726","Pollock Pines","CA","38.749713","-120.53386","-8","1" +"95728","Soda Springs","CA","39.311156","-120.41039","-8","1" +"95735","Twin Bridges","CA","38.805745","-120.13213","-8","1" +"95736","Weimar","CA","39.01004","-120.97814","-8","1" +"95741","Rancho Cordova","CA","38.377411","-121.444429","-8","1" +"95742","Rancho Cordova","CA","38.607756","-121.18367","-8","1" +"95743","Rancho Cordova","CA","38.377411","-121.444429","-8","1" +"95746","Granite Bay","CA","38.743811","-121.19013","-8","1" +"95747","Roseville","CA","38.768829","-121.33629","-8","1" +"95749","San Andreas","CA","38.195804","-120.679713","-8","1" +"95758","Elk Grove","CA","38.406432","-121.43673","-8","1" +"95759","Elk Grove","CA","38.377411","-121.444429","-8","1" +"95762","El Dorado Hills","CA","38.684324","-121.06879","-8","1" +"95763","Folsom","CA","38.377411","-121.444429","-8","1" +"95765","Rocklin","CA","38.817993","-121.2631","-8","1" +"95771","Spring Garden","CA","40.036998","-121.831299","-8","1" +"95776","Woodland","CA","38.681254","-121.74189","-8","1" +"95798","West Sacramento","CA","38.619545","-121.961532","-8","1" +"95799","West Sacramento","CA","38.619545","-121.961532","-8","1" +"95812","Sacramento","CA","38.377411","-121.444429","-8","1" +"95813","Sacramento","CA","38.377411","-121.444429","-8","1" +"95814","Sacramento","CA","38.580255","-121.49125","-8","1" +"95815","Sacramento","CA","38.611854","-121.44553","-8","1" +"95816","Sacramento","CA","38.571661","-121.46827","-8","1" +"95817","Sacramento","CA","38.551106","-121.45996","-8","1" +"95818","Sacramento","CA","38.556576","-121.49285","-8","1" +"95819","Sacramento","CA","38.568855","-121.44099","-8","1" +"95820","Sacramento","CA","38.535795","-121.44663","-8","1" +"95821","Sacramento","CA","38.623304","-121.38181","-8","1" +"95822","Sacramento","CA","38.51394","-121.49201","-8","1" +"95823","Sacramento","CA","38.477508","-121.44561","-8","1" +"95824","Sacramento","CA","38.518356","-121.44378","-8","1" +"95825","Sacramento","CA","38.594205","-121.40726","-8","1" +"95826","Sacramento","CA","38.550098","-121.37492","-8","1" +"95827","Sacramento","CA","38.566506","-121.32515","-8","1" +"95828","Sacramento","CA","38.484747","-121.4024","-8","1" +"95829","Sacramento","CA","38.476196","-121.34715","-8","1" +"95830","Sacramento","CA","38.498156","-121.2651","-8","1" +"95831","Sacramento","CA","38.494971","-121.53059","-8","1" +"95832","Sacramento","CA","38.464667","-121.49643","-8","1" +"95833","Sacramento","CA","38.616891","-121.49623","-8","1" +"95834","Sacramento","CA","38.642805","-121.50466","-8","1" +"95835","Sacramento","CA","38.664824","-121.52061","-8","1" +"95836","Sacramento","CA","38.707236","-121.54983","-8","1" +"95837","Sacramento","CA","38.700244","-121.60207","-8","1" +"95838","Sacramento","CA","38.641223","-121.4417","-8","1" +"95840","Sacramento","CA","38.377411","-121.444429","-8","1" +"95841","Sacramento","CA","38.66152","-121.34361","-8","1" +"95842","Sacramento","CA","38.687718","-121.349","-8","1" +"95843","Antelope","CA","38.716874","-121.3698","-8","1" +"95851","Sacramento","CA","38.377411","-121.444429","-8","1" +"95852","Sacramento","CA","38.377411","-121.444429","-8","1" +"95853","Sacramento","CA","38.377411","-121.444429","-8","1" +"95857","Sacramento","CA","38.377411","-121.444429","-8","1" +"95860","Sacramento","CA","38.377411","-121.444429","-8","1" +"95864","Sacramento","CA","38.587805","-121.37809","-8","1" +"95865","Sacramento","CA","38.377411","-121.444429","-8","1" +"95866","Sacramento","CA","38.377411","-121.444429","-8","1" +"95867","Sacramento","CA","38.377411","-121.444429","-8","1" +"95873","Sacramento","CA","38.377411","-121.444429","-8","1" +"95887","Sacramento","CA","38.377411","-121.444429","-8","1" +"95894","Sacramento","CA","38.377411","-121.444429","-8","1" +"95899","Sacramento","CA","38.377411","-121.444429","-8","1" +"95901","Marysville","CA","39.15973","-121.53735","-8","1" +"95903","Beale AFB","CA","39.125997","-121.36637","-8","1" +"95910","Alleghany","CA","39.465229","-120.84496","-8","1" +"95912","Arbuckle","CA","38.97159","-122.02725","-8","1" +"95913","Artois","CA","39.633265","-122.21009","-8","1" +"95914","Bangor","CA","39.425854","-121.35852","-8","1" +"95915","Belden","CA","39.912222","-120.834958","-8","1" +"95916","Berry Creek","CA","39.661519","-121.38193","-8","1" +"95917","Biggs","CA","39.413477","-121.71162","-8","1" +"95918","Browns Valley","CA","39.282171","-121.34733","-8","1" +"95919","Brownsville","CA","39.453457","-121.26543","-8","1" +"95920","Butte City","CA","39.44223","-121.95216","-8","1" +"95922","Camptonville","CA","39.469943","-121.07321","-8","1" +"95923","Canyondam","CA","40.187554","-121.1152","-8","1" +"95924","Cedar Ridge","CA","39.26599","-120.64145","-8","1" +"95925","Challenge","CA","39.466279","-121.20936","-8","1" +"95926","Chico","CA","39.745973","-121.84259","-8","1" +"95927","Chico","CA","39.805255","-121.684124","-8","1" +"95928","Chico","CA","39.720955","-121.81888","-8","1" +"95929","Chico","CA","39.731406","-121.801215","-8","1" +"95930","Clipper Mills","CA","39.563522","-121.13191","-8","1" +"95931","College City","CA","39.169245","-122.290204","-8","1" +"95932","Colusa","CA","39.254875","-122.04572","-8","1" +"95934","Crescent Mills","CA","40.074042","-120.93973","-8","1" +"95935","Dobbins","CA","39.381883","-121.21763","-8","1" +"95936","Downieville","CA","39.567001","-120.8384","-8","1" +"95937","Dunnigan","CA","38.931025","-121.94518","-8","1" +"95938","Durham","CA","39.624259","-121.79152","-8","1" +"95939","Elk Creek","CA","39.535446","-122.57667","-8","1" +"95940","Feather Falls","CA","39.585648","-121.259009","-8","1" +"95941","Forbestown","CA","39.51642","-121.26853","-8","1" +"95942","Forest Ranch","CA","40.044865","-121.59415","-8","1" +"95943","Glenn","CA","39.605289","-122.03231","-8","1" +"95944","Goodyears Bar","CA","39.545514","-120.88512","-8","1" +"95945","Grass Valley","CA","39.202725","-121.02076","-8","1" +"95946","Penn Valley","CA","39.207828","-121.20021","-8","1" +"95947","Greenville","CA","40.144573","-120.88311","-8","1" +"95948","Gridley","CA","39.35217","-121.71129","-8","1" +"95949","Grass Valley","CA","39.13255","-121.0981","-8","1" +"95950","Grimes","CA","39.070128","-121.8981","-8","1" +"95951","Hamilton City","CA","39.738889","-122.01675","-8","1" +"95953","Live Oak","CA","39.25209","-121.69439","-8","1" +"95954","Magalia","CA","39.888074","-121.59048","-8","1" +"95955","Maxwell","CA","39.283329","-122.20206","-8","1" +"95956","Meadow Valley","CA","39.93935","-121.06047","-8","1" +"95957","Meridian","CA","39.070323","-121.83065","-8","1" +"95958","Nelson","CA","39.556251","-121.803777","-8","1" +"95959","Nevada City","CA","39.299405","-120.95144","-8","1" +"95960","North San Juan","CA","39.396152","-121.08227","-8","1" +"95961","Olivehurst","CA","39.089929","-121.55053","-8","1" +"95962","Oregon House","CA","39.355688","-121.2548","-8","1" +"95963","Orland","CA","39.760968","-122.218","-8","1" +"95965","Oroville","CA","39.558586","-121.58923","-8","1" +"95966","Oroville","CA","39.491076","-121.49468","-8","1" +"95967","Paradise","CA","39.723898","-121.572986","-8","1" +"95968","Palermo","CA","39.434644","-121.55043","-8","1" +"95969","Paradise","CA","39.750422","-121.61026","-8","1" +"95970","Princeton","CA","39.415041","-122.02487","-8","1" +"95971","Quincy","CA","39.957324","-120.98366","-8","1" +"95972","Rackerby","CA","39.441356","-121.31354","-8","1" +"95973","Chico","CA","39.793465","-121.87946","-8","1" +"95974","Richvale","CA","39.496465","-121.74712","-8","1" +"95975","Rough And Ready","CA","39.224179","-121.14539","-8","1" +"95976","Chico","CA","39.723898","-121.572986","-8","1" +"95977","Smartville","CA","39.19322","-121.28975","-8","1" +"95978","Stirling City","CA","39.904478","-121.52805","-8","1" +"95979","Stonyford","CA","39.331444","-122.47943","-8","1" +"95980","Storrie","CA","39.918503","-121.337404","-8","1" +"95981","Strawberry Valley","CA","39.584801","-121.08762","-8","1" +"95982","Sutter","CA","39.16855","-121.76465","-8","1" +"95983","Taylorsville","CA","40.06686","-120.77442","-8","1" +"95984","Twain","CA","40.017767","-121.05989","-8","1" +"95986","Washington","CA","39.340422","-120.79166","-8","1" +"95987","Williams","CA","39.139543","-122.20563","-8","1" +"95988","Willows","CA","39.499754","-122.20773","-8","1" +"95991","Yuba City","CA","39.114138","-121.6196","-8","1" +"95992","Yuba City","CA","39.020133","-121.681345","-8","1" +"95993","Yuba City","CA","39.109272","-121.68033","-8","1" +"96001","Redding","CA","40.56816","-122.41519","-8","1" +"96002","Redding","CA","40.539302","-122.33279","-8","1" +"96003","Redding","CA","40.641389","-122.34206","-8","1" +"96006","Adin","CA","41.190742","-120.90294","-8","1" +"96007","Anderson","CA","40.45453","-122.31101","-8","1" +"96008","Bella Vista","CA","40.732501","-122.11264","-8","1" +"96009","Bieber","CA","41.119727","-121.1362","-8","1" +"96010","Big Bar","CA","40.723792","-123.34016","-8","1" +"96011","Big Bend","CA","41.027553","-121.91847","-8","1" +"96013","Burney","CA","40.926289","-121.68452","-8","1" +"96014","Callahan","CA","41.32211","-122.81535","-8","1" +"96015","Canby","CA","41.425912","-120.90316","-8","1" +"96016","Cassel","CA","40.929301","-121.55711","-8","1" +"96017","Castella","CA","41.109487","-122.33133","-8","1" +"96019","Shasta Lake","CA","40.682393","-122.36824","-8","1" +"96020","Chester","CA","40.289788","-121.23263","-8","1" +"96021","Corning","CA","39.918271","-122.21393","-8","1" +"96022","Cottonwood","CA","40.360583","-122.33544","-8","1" +"96023","Dorris","CA","41.963883","-121.89165","-8","1" +"96024","Douglas City","CA","40.606673","-122.92335","-8","1" +"96025","Dunsmuir","CA","41.221077","-122.28003","-8","1" +"96027","Etna","CA","41.414707","-122.96832","-8","1" +"96028","Fall River Mills","CA","41.056097","-121.49021","-8","1" +"96029","Flournoy","CA","39.861821","-122.48014","-8","1" +"96031","Forks Of Salmon","CA","41.228397","-123.20187","-8","1" +"96032","Fort Jones","CA","41.615475","-122.87744","-8","1" +"96033","French Gulch","CA","40.736679","-122.61121","-8","1" +"96034","Gazelle","CA","41.441194","-122.64688","-8","1" +"96035","Gerber","CA","40.039257","-122.16555","-8","1" +"96037","Greenview","CA","41.53101","-122.95666","-8","1" +"96038","Grenada","CA","41.604392","-122.52666","-8","1" +"96039","Happy Camp","CA","41.82087","-123.43126","-8","1" +"96040","Hat Creek","CA","40.788512","-121.47668","-8","1" +"96041","Hayfork","CA","40.524496","-123.18307","-8","1" +"96044","Hornbrook","CA","41.925752","-122.52253","-8","1" +"96046","Hyampom","CA","40.639108","-123.47525","-8","1" +"96047","Igo","CA","40.472993","-122.63707","-8","1" +"96048","Junction City","CA","40.850776","-122.92043","-8","1" +"96049","Redding","CA","40.709783","-122.311628","-8","1" +"96050","Klamath River","CA","41.831947","-122.9206","-8","1" +"96051","Lakehead","CA","40.939342","-122.42246","-8","1" +"96052","Lewiston","CA","40.743423","-122.81414","-8","1" +"96053","Mcarthur","CA","40.446063","-120.664132","-8","1" +"96054","Lookout","CA","41.285897","-121.16094","-8","1" +"96055","Los Molinos","CA","40.041399","-122.09793","-8","1" +"96056","Mcarthur","CA","41.114424","-121.332","-8","1" +"96057","Mccloud","CA","41.263103","-122.10297","-8","1" +"96058","Macdoel","CA","41.790562","-121.94214","-8","1" +"96059","Manton","CA","40.437443","-121.84678","-8","1" +"96061","Mill Creek","CA","40.310324","-121.43316","-8","1" +"96062","Millville","CA","40.577799","-122.10148","-8","1" +"96063","Mineral","CA","40.371043","-121.58245","-8","1" +"96064","Montague","CA","41.736424","-122.40008","-8","1" +"96065","Montgomery Creek","CA","40.876184","-121.88975","-8","1" +"96067","Mount Shasta","CA","41.317771","-122.31207","-8","1" +"96068","Nubieber","CA","41.102891","-121.19828","-8","1" +"96069","Oak Run","CA","40.705474","-122.021","-8","1" +"96070","Obrien","CA","40.735153","-122.1944","-8","1" +"96071","Old Station","CA","40.646417","-121.4418","-8","1" +"96073","Palo Cedro","CA","40.562648","-122.2255","-8","1" +"96074","Paskenta","CA","39.878018","-122.57972","-8","1" +"96075","Paynes Creek","CA","40.338253","-121.84025","-8","1" +"96076","Platina","CA","40.366349","-122.94566","-8","1" +"96078","Proberta","CA","40.12517","-122.204141","-8","1" +"96079","Shasta Lake","CA","40.686639","-122.334778","-8","1" +"96080","Red Bluff","CA","40.183837","-122.24074","-8","1" +"96084","Round Mountain","CA","40.871548","-121.98807","-8","1" +"96085","Scott Bar","CA","41.734832","-123.07218","-8","1" +"96086","Seiad Valley","CA","41.86235","-123.24091","-8","1" +"96087","Shasta","CA","40.608728","-122.51427","-8","1" +"96088","Shingletown","CA","40.504853","-121.83501","-8","1" +"96089","Shasta Lake","CA","40.657893","-122.427333","-8","1" +"96090","Tehama","CA","40.024337","-122.12378","-8","1" +"96091","Trinity Center","CA","41.004651","-122.71541","-8","1" +"96092","Vina","CA","39.941595","-122.03746","-8","1" +"96093","Weaverville","CA","40.734483","-122.93982","-8","1" +"96094","Weed","CA","41.460403","-122.38544","-8","1" +"96095","Whiskeytown","CA","40.607134","-122.54626","-8","1" +"96096","Whitmore","CA","40.63446","-121.91202","-8","1" +"96097","Yreka","CA","41.749249","-122.64479","-8","1" +"96099","Redding","CA","40.704337","-122.387808","-8","1" +"96101","Alturas","CA","41.439363","-120.58771","-8","1" +"96103","Blairsden-Graeagle","CA","39.779486","-120.64058","-8","1" +"96104","Cedarville","CA","41.527226","-120.13826","-8","1" +"96105","Chilcoot","CA","39.862832","-120.17303","-8","1" +"96106","Clio","CA","39.743835","-120.58114","-8","1" +"96107","Coleville","CA","38.475853","-119.49014","-8","1" +"96108","Davis Creek","CA","41.736074","-120.3778","-8","1" +"96109","Doyle","CA","40.030098","-120.11304","-8","1" +"96110","Eagleville","CA","41.251918","-120.12897","-8","1" +"96111","Floriston","CA","39.392752","-120.021212","-8","1" +"96112","Fort Bidwell","CA","41.90749","-120.14789","-8","1" +"96113","Herlong","CA","40.158794","-120.18597","-8","1" +"96114","Janesville","CA","40.295652","-120.51775","-8","1" +"96115","Lake City","CA","41.688163","-120.23924","-8","1" +"96116","Likely","CA","41.268746","-120.42843","-8","1" +"96117","Litchfield","CA","40.446122","-120.35776","-8","1" +"96118","Loyalton","CA","39.663256","-120.24835","-8","1" +"96119","Madeline","CA","41.021344","-120.52472","-8","1" +"96120","Markleeville","CA","38.76467","-119.85236","-8","1" +"96121","Milford","CA","40.169038","-120.37815","-8","1" +"96122","Portola","CA","39.801047","-120.48359","-8","1" +"96123","Ravendale","CA","40.800556","-120.36374","-8","1" +"96124","Calpine","CA","39.663242","-120.43806","-8","1" +"96125","Sierra City","CA","39.598792","-120.63432","-8","1" +"96126","Sierraville","CA","39.560357","-120.35662","-8","1" +"96127","Susanville","CA","40.446063","-120.664132","-8","1" +"96128","Standish","CA","40.34863","-120.4065","-8","1" +"96129","Beckwourth","CA","39.772064","-120.405095","-8","1" +"96130","Susanville","CA","40.474951","-120.67685","-8","1" +"96132","Termo","CA","40.921124","-120.62265","-8","1" +"96133","Topaz","CA","38.651141","-119.49874","-8","1" +"96134","Tulelake","CA","41.874847","-121.43738","-8","1" +"96135","Vinton","CA","40.02349","-120.79861","-8","1" +"96136","Wendel","CA","40.283378","-120.12859","-8","1" +"96137","Westwood","CA","40.290007","-121.05272","-8","1" +"96140","Carnelian Bay","CA","39.223151","-120.08627","-8","1" +"96141","Homewood","CA","39.093271","-120.16325","-8","1" +"96142","Tahoma","CA","39.037696","-120.12438","-8","1" +"96143","Kings Beach","CA","39.241961","-120.02809","-8","1" +"96145","Tahoe City","CA","39.177383","-120.14607","-8","1" +"96146","Olympic Valley","CA","39.180983","-120.21804","-8","1" +"96148","Tahoe Vista","CA","39.243877","-120.05437","-8","1" +"96150","South Lake Tahoe","CA","38.908741","-120.00992","-8","1" +"96151","South Lake Tahoe","CA","38.90392","-119.995024","-8","1" +"96152","South Lake Tahoe","CA","38.927149","-119.999032","-8","1" +"96154","South Lake Tahoe","CA","38.87529","-120.0188","-8","1" +"96155","South Lake Tahoe","CA","38.844909","-120.042996","-8","1" +"96156","South Lake Tahoe","CA","38.935245","-119.967631","-8","1" +"96157","South Lake Tahoe","CA","38.934409","-119.976707","-8","1" +"96158","South Lake Tahoe","CA","38.898142","-119.998419","-8","1" +"96160","Truckee","CA","39.3781","-120.186383","-8","1" +"96161","Truckee","CA","39.339574","-120.22805","-8","1" +"96162","Truckee","CA","39.26599","-120.64145","-8","1" +"96163","Truckee","CA","39.320012","-120.160271","-8","1" +"96222","Cottonwood","CA","40.385673","-122.279739","-8","1" +"96371","Kawela Bay","HI","21.703","-157.996233","-10","0" +"96373","Hawaiian Ocean View","HI","19.112099","-155.798594","-10","0" +"96385","Volcano","HI","19.44707","-155.243925","-10","0" +"96477","Kaneohe","HI","21.41345","-157.80575","-10","0" +"96701","Aiea","HI","21.389167","-157.93091","-10","0" +"96703","Anahola","HI","22.148133","-159.31765","-10","0" +"96704","Captain Cook","HI","19.307543","-155.88338","-10","0" +"96705","Eleele","HI","21.910767","-159.58222","-10","0" +"96706","Ewa Beach","HI","21.338055","-158.02499","-10","0" +"96707","Kapolei","HI","21.345535","-158.08587","-10","0" +"96708","Haiku","HI","20.899634","-156.27315","-10","0" +"96709","Kapolei","HI","23.573339","-164.701172","-10","0" +"96710","Hakalau","HI","19.857045","-155.15249","-10","0" +"96712","Haleiwa","HI","21.630633","-158.07448","-10","0" +"96713","Hana","HI","20.739217","-156.03893","-10","0" +"96714","Hanalei","HI","22.208401","-159.4896","-10","0" +"96715","Hanamaulu","HI","21.979991","-159.512392","-10","0" +"96716","Hanapepe","HI","21.917153","-159.59407","-10","0" +"96717","Hauula","HI","21.60625","-157.90949","-10","0" +"96718","Hawaii National Park","HI","19.435739","-155.26648","-10","0" +"96719","Hawi","HI","20.241109","-155.84459","-10","0" +"96720","Hilo","HI","19.713562","-155.09842","-10","0" +"96721","Hilo","HI","19.593456","-155.438015","-10","0" +"96722","Princeville","HI","22.223635","-159.49025","-10","0" +"96725","Holualoa","HI","19.410727","-155.7478","-10","0" +"96726","Honaunau","HI","19.278298","-155.845329","-10","0" +"96727","Honokaa","HI","20.089087","-155.51679","-10","0" +"96728","Honomu","HI","19.866007","-155.12172","-10","0" +"96729","Hoolehua","HI","21.168775","-157.08588","-10","0" +"96730","Kaaawa","HI","21.554467","-157.85108","-10","0" +"96731","Kahuku","HI","21.68762","-157.95903","-10","0" +"96732","Kahului","HI","20.883951","-156.46579","-10","0" +"96733","Kahului","HI","20.866638","-156.646667","-10","0" +"96734","Kailua","HI","21.3949","-157.74529","-10","0" +"96737","Ocean View","HI","19.101978","-155.76114","-10","0" +"96738","Waikoloa","HI","19.947774","-155.78634","-10","0" +"96739","Keauhou","HI","19.593456","-155.438015","-10","0" +"96740","Kailua Kona","HI","19.675386","-155.97588","-10","0" +"96741","Kalaheo","HI","21.999721","-159.4776","-10","0" +"96742","Kalaupapa","HI","21.191665","-156.9818","-10","0" +"96743","Kamuela","HI","20.040191","-155.69999","-10","0" +"96744","Kaneohe","HI","21.501854","-157.87926","-10","0" +"96745","Kailua Kona","HI","19.593456","-155.438015","-10","0" +"96746","Kapaa","HI","22.077472","-159.34463","-10","0" +"96747","Kaumakani","HI","21.920292","-159.62428","-10","0" +"96748","Kaunakakai","HI","21.111246","-156.9741","-10","0" +"96749","Keaau","HI","19.625495","-155.01121","-10","0" +"96750","Kealakekua","HI","19.526845","-155.9215","-10","0" +"96751","Kealia","HI","22.111837","-159.31283","-10","0" +"96752","Kekaha","HI","21.97313","-159.71766","-10","0" +"96753","Kihei","HI","20.771418","-156.45769","-10","0" +"96754","Kilauea","HI","22.212733","-159.40787","-10","0" +"96755","Kapaau","HI","20.222668","-155.78664","-10","0" +"96756","Koloa","HI","21.910013","-159.48044","-10","0" +"96757","Kualapuu","HI","21.156174","-157.03622","-10","0" +"96759","Kunia","HI","21.4603","-158.06446","-10","0" +"96760","Kurtistown","HI","19.5604","-155.05686","-10","0" +"96761","Lahaina","HI","20.913335","-156.65765","-10","0" +"96762","Laie","HI","21.6485","-157.92556","-10","0" +"96763","Lanai City","HI","20.823607","-156.9274","-10","0" +"96764","Laupahoehoe","HI","19.983584","-155.25963","-10","0" +"96765","Lawai","HI","21.930922","-159.499342","-10","0" +"96766","Lihue","HI","21.98081","-159.37746","-10","0" +"96767","Lahaina","HI","20.866638","-156.646667","-10","0" +"96768","Makawao","HI","20.865115","-156.33158","-10","0" +"96769","Makaweli","HI","21.946244","-159.65981","-10","0" +"96770","Maunaloa","HI","21.15058","-157.1977","-10","0" +"96771","Mountain View","HI","19.516132","-155.11305","-10","0" +"96772","Naalehu","HI","19.110687","-155.58738","-10","0" +"96773","Ninole","HI","19.942301","-155.18112","-10","0" +"96774","Ookala","HI","19.996769","-155.31153","-10","0" +"96775","Paauhau","HI","19.593456","-155.438015","-10","0" +"96776","Paauilo","HI","20.022513","-155.37514","-10","0" +"96777","Pahala","HI","19.226749","-155.49217","-10","0" +"96778","Pahoa","HI","19.494625","-154.9266","-10","0" +"96779","Paia","HI","20.906999","-156.38202","-10","0" +"96780","Papaaloa","HI","19.946758","-155.2086","-10","0" +"96781","Papaikou","HI","19.800318","-155.10649","-10","0" +"96782","Pearl City","HI","21.408333","-157.9669","-10","0" +"96783","Pepeekeo","HI","19.843259","-155.10548","-10","0" +"96784","Puunene","HI","20.866638","-156.646667","-10","0" +"96785","Volcano","HI","19.447717","-155.21012","-10","0" +"96786","Wahiawa","HI","21.501722","-158.03543","-10","0" +"96788","Pukalani","HI","20.855864","-156.325923","-10","0" +"96789","Mililani","HI","21.459206","-158.0116","-10","0" +"96790","Kula","HI","20.724391","-156.34031","-10","0" +"96791","Waialua","HI","21.572131","-158.13489","-10","0" +"96792","Waianae","HI","21.434246","-158.17092","-10","0" +"96793","Wailuku","HI","20.889294","-156.50497","-10","0" +"96795","Waimanalo","HI","21.33743","-157.70599","-10","0" +"96796","Waimea","HI","21.997746","-159.7187","-10","0" +"96797","Waipahu","HI","21.403487","-158.01389","-10","0" +"96799","Pago Pago","AS","-7.209975","-170.7716","-10","0" +"96801","Honolulu","HI","24.859832","-168.021815","-10","0" +"96802","Honolulu","HI","24.859832","-168.021815","-10","0" +"96803","Honolulu","HI","24.859832","-168.021815","-10","0" +"96804","Honolulu","HI","24.859832","-168.021815","-10","0" +"96805","Honolulu","HI","24.859832","-168.021815","-10","0" +"96806","Honolulu","HI","24.859832","-168.021815","-10","0" +"96807","Honolulu","HI","24.859832","-168.021815","-10","0" +"96808","Honolulu","HI","24.859832","-168.021815","-10","0" +"96809","Honolulu","HI","24.859832","-168.021815","-10","0" +"96810","Honolulu","HI","24.859832","-168.021815","-10","0" +"96811","Honolulu","HI","24.859832","-168.021815","-10","0" +"96812","Honolulu","HI","24.859832","-168.021815","-10","0" +"96813","Honolulu","HI","21.313033","-157.85615","-10","0" +"96814","Honolulu","HI","21.300167","-157.84777","-10","0" +"96815","Honolulu","HI","21.2782","-157.82199","-10","0" +"96816","Honolulu","HI","21.284","-157.79925","-10","0" +"96817","Honolulu","HI","21.3307","-157.85913","-10","0" +"96818","Honolulu","HI","21.36425","-157.96316","-10","0" +"96819","Honolulu","HI","21.3452","-157.88165","-10","0" +"96820","Honolulu","HI","24.859832","-168.021815","-10","0" +"96821","Honolulu","HI","21.287967","-157.75456","-10","0" +"96822","Honolulu","HI","21.31275","-157.82195","-10","0" +"96823","Honolulu","HI","24.859832","-168.021815","-10","0" +"96824","Honolulu","HI","24.859832","-168.021815","-10","0" +"96825","Honolulu","HI","21.2946","-157.69721","-10","0" +"96826","Honolulu","HI","21.2951","-157.83066","-10","0" +"96827","Honolulu","HI","24.859832","-168.021815","-10","0" +"96828","Honolulu","HI","24.859832","-168.021815","-10","0" +"96830","Honolulu","HI","24.859832","-168.021815","-10","0" +"96835","Honolulu","HI","24.859832","-168.021815","-10","0" +"96836","Honolulu","HI","24.859832","-168.021815","-10","0" +"96837","Honolulu","HI","24.859832","-168.021815","-10","0" +"96838","Honolulu","HI","24.859832","-168.021815","-10","0" +"96839","Honolulu","HI","24.859832","-168.021815","-10","0" +"96840","Honolulu","HI","24.859832","-168.021815","-10","0" +"96841","Honolulu","HI","24.859832","-168.021815","-10","0" +"96842","Honolulu","HI","24.859832","-168.021815","-10","0" +"96843","Honolulu","HI","24.859832","-168.021815","-10","0" +"96844","Honolulu","HI","24.859832","-168.021815","-10","0" +"96845","Honolulu","HI","24.859832","-168.021815","-10","0" +"96846","Honolulu","HI","24.859832","-168.021815","-10","0" +"96847","Honolulu","HI","24.859832","-168.021815","-10","0" +"96848","Honolulu","HI","24.859832","-168.021815","-10","0" +"96849","Honolulu","HI","24.859832","-168.021815","-10","0" +"96850","Honolulu","HI","24.859832","-168.021815","-10","0" +"96853","Hickam AFB","HI","24.859832","-168.021815","-10","0" +"96854","Wheeler Army Airfield","HI","24.859832","-168.021815","-10","0" +"96857","Schofield Barracks","HI","24.859832","-168.021815","-10","0" +"96858","Fort Shafter","HI","24.859832","-168.021815","-10","0" +"96859","Tripler Army Medical Ctr","HI","24.859832","-168.021815","-10","0" +"96860","Pearl Harbor","HI","24.859832","-168.021815","-10","0" +"96861","Camp H M Smith","HI","24.859832","-168.021815","-10","0" +"96862","Barbers Point N A S","HI","21.3017","-158.08174","-10","0" +"96863","M C B H Kaneohe Bay","HI","21.439867","-157.74772","-10","0" +"96885","Volcano","HI","19.433152","-155.238743","-10","0" +"96898","Wake Island","HI","24.859832","-168.021815","-10","0" +"97001","Antelope","OR","44.904051","-120.67244","-8","1" +"97002","Aurora","OR","45.234609","-122.79749","-8","1" +"97004","Beavercreek","OR","45.255392","-122.4749","-8","1" +"97005","Beaverton","OR","45.49106","-122.80359","-8","1" +"97006","Beaverton","OR","45.517695","-122.85826","-8","1" +"97007","Beaverton","OR","45.469079","-122.85602","-8","1" +"97008","Beaverton","OR","45.46059","-122.80683","-8","1" +"97009","Boring","OR","45.428663","-122.3809","-8","1" +"97010","Bridal Veil","OR","45.582981","-122.101103","-8","1" +"97011","Brightwood","OR","45.371086","-122.01227","-8","1" +"97013","Canby","OR","45.247004","-122.68208","-8","1" +"97014","Cascade Locks","OR","45.655523","-121.89435","-8","1" +"97015","Clackamas","OR","45.416785","-122.52859","-8","1" +"97016","Clatskanie","OR","46.078338","-123.26993","-8","1" +"97017","Colton","OR","45.181819","-122.39802","-8","1" +"97018","Columbia City","OR","45.891952","-122.8132","-8","1" +"97019","Corbett","OR","45.514515","-122.23283","-8","1" +"97020","Donald","OR","45.224154","-122.83989","-8","1" +"97021","Dufur","OR","45.430024","-121.17922","-8","1" +"97022","Eagle Creek","OR","45.349244","-122.33554","-8","1" +"97023","Estacada","OR","45.267354","-122.28464","-8","1" +"97024","Fairview","OR","45.542239","-122.44553","-8","1" +"97026","Gervais","OR","45.10649","-122.90363","-8","1" +"97027","Gladstone","OR","45.385642","-122.59272","-8","1" +"97028","Government Camp","OR","45.305113","-121.78441","-8","1" +"97029","Grass Valley","OR","45.335199","-120.7798","-8","1" +"97030","Gresham","OR","45.507752","-122.4323","-8","1" +"97031","Hood River","OR","45.673147","-121.5368","-8","1" +"97032","Hubbard","OR","45.183167","-122.80193","-8","1" +"97033","Kent","OR","45.195235","-120.59745","-8","1" +"97034","Lake Oswego","OR","45.40765","-122.6811","-8","1" +"97035","Lake Oswego","OR","45.41387","-122.72492","-8","1" +"97036","Marylhurst","OR","45.173284","-122.259861","-8","1" +"97037","Maupin","OR","45.093643","-121.10814","-8","1" +"97038","Molalla","OR","45.10799","-122.56555","-8","1" +"97039","Moro","OR","45.479419","-120.75969","-8","1" +"97040","Mosier","OR","45.636848","-121.40926","-8","1" +"97041","Mount Hood Parkdale","OR","45.503224","-121.59252","-8","1" +"97042","Mulino","OR","45.21307","-122.54321","-8","1" +"97044","Odell","OR","45.643738","-121.536658","-8","1" +"97045","Oregon City","OR","45.344246","-122.58464","-8","1" +"97048","Rainier","OR","46.054948","-122.95714","-8","1" +"97049","Rhododendron","OR","45.369468","-121.92558","-8","1" +"97050","Rufus","OR","45.693219","-120.73221","-8","1" +"97051","Saint Helens","OR","45.862489","-122.84824","-8","1" +"97053","Warren","OR","45.821358","-122.86404","-8","1" +"97054","Deer Island","OR","45.946314","-122.90416","-8","1" +"97055","Sandy","OR","45.375143","-122.21021","-8","1" +"97056","Scappoose","OR","45.778892","-122.92065","-8","1" +"97057","Shaniko","OR","45.263301","-121.088513","-8","1" +"97058","The Dalles","OR","45.594257","-121.18944","-8","1" +"97060","Troutdale","OR","45.529551","-122.39156","-8","1" +"97062","Tualatin","OR","45.373991","-122.77127","-8","1" +"97063","Tygh Valley","OR","45.262423","-121.23304","-8","1" +"97064","Vernonia","OR","45.862577","-123.206","-8","1" +"97065","Wasco","OR","45.585405","-120.69234","-8","1" +"97067","Welches","OR","45.333824","-121.95765","-8","1" +"97068","West Linn","OR","45.361991","-122.64443","-8","1" +"97070","Wilsonville","OR","45.308105","-122.77266","-8","1" +"97071","Woodburn","OR","45.144415","-122.84521","-8","1" +"97075","Beaverton","OR","45.548616","-123.114725","-8","1" +"97076","Beaverton","OR","45.548616","-123.114725","-8","1" +"97077","Beaverton","OR","45.548616","-123.114725","-8","1" +"97078","Beaverton","OR","45.451976","-122.789257","-8","1" +"97080","Gresham","OR","45.481342","-122.40856","-8","1" +"97101","Amity","OR","45.100504","-123.22834","-8","1" +"97102","Arch Cape","OR","45.819042","-123.95827","-8","1" +"97103","Astoria","OR","46.155007","-123.7417","-8","1" +"97104","Hillsboro","OR","45.546914","-122.928208","-8","1" +"97106","Banks","OR","45.644591","-123.12811","-8","1" +"97107","Bay City","OR","45.534203","-123.88468","-8","1" +"97108","Beaver","OR","45.284763","-123.6908","-8","1" +"97109","Buxton","OR","45.729085","-123.20234","-8","1" +"97110","Cannon Beach","OR","45.894287","-123.961","-8","1" +"97111","Carlton","OR","45.287751","-123.19334","-8","1" +"97112","Cloverdale","OR","45.257176","-123.89141","-8","1" +"97113","Cornelius","OR","45.515181","-123.05089","-8","1" +"97114","Dayton","OR","45.211339","-123.08114","-8","1" +"97115","Dundee","OR","45.272559","-123.01631","-8","1" +"97116","Forest Grove","OR","45.541009","-123.13043","-8","1" +"97117","Gales Creek","OR","45.622824","-123.25977","-8","1" +"97118","Garibaldi","OR","45.561139","-123.91004","-8","1" +"97119","Gaston","OR","45.43957","-123.17165","-8","1" +"97121","Hammond","OR","46.187903","-123.96437","-8","1" +"97122","Hebo","OR","45.187837","-123.82026","-8","1" +"97123","Hillsboro","OR","45.491024","-122.95745","-8","1" +"97124","Hillsboro","OR","45.545841","-122.94605","-8","1" +"97125","Manning","OR","45.662196","-123.22518","-8","1" +"97127","Lafayette","OR","45.2455","-123.11304","-8","1" +"97128","Mcminnville","OR","45.210104","-123.20747","-8","1" +"97130","Manzanita","OR","45.720836","-123.93471","-8","1" +"97131","Nehalem","OR","45.715015","-123.88233","-8","1" +"97132","Newberg","OR","45.310304","-122.972","-8","1" +"97133","North Plains","OR","45.65749","-123.0242","-8","1" +"97134","Oceanside","OR","45.461852","-123.96804","-8","1" +"97135","Pacific City","OR","45.201302","-123.95999","-8","1" +"97136","Rockaway Beach","OR","45.620062","-123.93449","-8","1" +"97137","Saint Paul","OR","45.215261","-122.97186","-8","1" +"97138","Seaside","OR","45.926112","-123.81524","-8","1" +"97140","Sherwood","OR","45.352086","-122.85376","-8","1" +"97141","Tillamook","OR","45.459109","-123.80389","-8","1" +"97143","Netarts","OR","45.438112","-123.9483","-8","1" +"97144","Timber","OR","45.744404","-123.3235","-8","1" +"97145","Tolovana Park","OR","45.868839","-123.95909","-8","1" +"97146","Warrenton","OR","46.136322","-123.91753","-8","1" +"97147","Wheeler","OR","45.688054","-123.8842","-8","1" +"97148","Yamhill","OR","45.352399","-123.22502","-8","1" +"97149","Neskowin","OR","45.101518","-123.9737","-8","1" +"97180","Sherwood","OR","45.354615","-122.850808","-8","1" +"97201","Portland","OR","45.49894","-122.68781","-8","1" +"97202","Portland","OR","45.481791","-122.64055","-8","1" +"97203","Portland","OR","45.589689","-122.73875","-8","1" +"97204","Portland","OR","45.51854","-122.6755","-8","1" +"97205","Portland","OR","45.52054","-122.68573","-8","1" +"97206","Portland","OR","45.482341","-122.60007","-8","1" +"97207","Portland","OR","45.480324","-122.711117","-8","1" +"97208","Portland","OR","45.532165","-122.564824","-8","1" +"97209","Portland","OR","45.52889","-122.68458","-8","1" +"97210","Portland","OR","45.534839","-122.7095","-8","1" +"97211","Portland","OR","45.56544","-122.64635","-8","1" +"97212","Portland","OR","45.54424","-122.64353","-8","1" +"97213","Portland","OR","45.53704","-122.59979","-8","1" +"97214","Portland","OR","45.51379","-122.6458","-8","1" +"97215","Portland","OR","45.514241","-122.60089","-8","1" +"97216","Portland","OR","45.515674","-122.56087","-8","1" +"97217","Portland","OR","45.574439","-122.68665","-8","1" +"97218","Portland","OR","45.56099","-122.59987","-8","1" +"97219","Portland","OR","45.45867","-122.70611","-8","1" +"97220","Portland","OR","45.546205","-122.56027","-8","1" +"97221","Portland","OR","45.49759","-122.72945","-8","1" +"97222","Portland","OR","45.442634","-122.61833","-8","1" +"97223","Portland","OR","45.43884","-122.78224","-8","1" +"97224","Portland","OR","45.406292","-122.78441","-8","1" +"97225","Portland","OR","45.497856","-122.76988","-8","1" +"97226","Raleigh Hills","OR","45.484854","-122.625257","-8","1" +"97227","Portland","OR","45.543831","-122.67497","-8","1" +"97228","Portland","OR","45.580557","-122.374776","-8","1" +"97229","Portland","OR","45.540967","-122.81728","-8","1" +"97230","Portland","OR","45.539473","-122.50488","-8","1" +"97231","Portland","OR","45.651279","-122.82465","-8","1" +"97232","Portland","OR","45.52874","-122.6446","-8","1" +"97233","Portland","OR","45.513242","-122.49985","-8","1" +"97236","Portland","OR","45.474722","-122.50997","-8","1" +"97238","Portland","OR","45.580557","-122.374776","-8","1" +"97239","Portland","OR","45.488031","-122.693796","-8","1" +"97240","Portland","OR","45.580557","-122.374776","-8","1" +"97242","Portland","OR","45.580557","-122.374776","-8","1" +"97251","Portland","OR","45.580557","-122.374776","-8","1" +"97253","Portland","OR","45.580557","-122.374776","-8","1" +"97254","Portland","OR","45.596678","-122.59418","-8","1" +"97255","Portland","OR","45.580557","-122.374776","-8","1" +"97256","Portland","OR","45.580557","-122.374776","-8","1" +"97257","Grants Pass","OR","42.421567","-123.33749","-8","1" +"97258","Portland","OR","45.580557","-122.374776","-8","1" +"97259","Portland","OR","45.580557","-122.374776","-8","1" +"97264","Chiloquin","OR","42.577154","-121.860525","-8","1" +"97266","Portland","OR","45.478641","-122.56233","-8","1" +"97267","Portland","OR","45.408882","-122.61476","-8","1" +"97268","Portland","OR","45.173284","-122.259861","-8","1" +"97269","Portland","OR","45.173284","-122.259861","-8","1" +"97271","Portland","OR","45.580557","-122.374776","-8","1" +"97272","Portland","OR","45.580557","-122.374776","-8","1" +"97280","Portland","OR","45.580557","-122.374776","-8","1" +"97281","Portland","OR","45.548616","-123.114725","-8","1" +"97282","Portland","OR","45.580557","-122.374776","-8","1" +"97283","Portland","OR","45.580557","-122.374776","-8","1" +"97286","Portland","OR","45.580557","-122.374776","-8","1" +"97290","Portland","OR","45.580557","-122.374776","-8","1" +"97291","Portland","OR","45.548616","-123.114725","-8","1" +"97292","Portland","OR","45.580557","-122.374776","-8","1" +"97293","Portland","OR","45.580557","-122.374776","-8","1" +"97294","Portland","OR","45.580557","-122.374776","-8","1" +"97296","Portland","OR","45.580557","-122.374776","-8","1" +"97298","Portland","OR","45.548616","-123.114725","-8","1" +"97299","Portland","OR","45.580557","-122.374776","-8","1" +"97301","Salem","OR","44.926644","-122.98694","-8","1" +"97302","Salem","OR","44.906492","-123.05129","-8","1" +"97303","Salem","OR","44.984008","-123.01992","-8","1" +"97304","Salem","OR","44.970181","-123.08033","-8","1" +"97305","Salem","OR","44.995029","-122.95801","-8","1" +"97306","Salem","OR","44.858446","-123.05368","-8","1" +"97307","Keizer","OR","44.984465","-122.457024","-8","1" +"97308","Salem","OR","44.984465","-122.457024","-8","1" +"97309","Salem","OR","44.984465","-122.457024","-8","1" +"97310","Salem","OR","44.927141","-122.986105","-8","1" +"97311","Salem","OR","44.943841","-123.028607","-8","1" +"97312","Salem","OR","44.936357","-123.038116","-8","1" +"97313","Salem","OR","44.984941","-122.998756","-8","1" +"97314","Salem","OR","44.965541","-123.006606","-8","1" +"97321","Albany","OR","44.635395","-123.0896","-8","1" +"97322","Albany","OR","44.62205","-123.061329","-8","1" +"97324","Alsea","OR","44.369264","-123.62349","-8","1" +"97325","Aumsville","OR","44.838001","-122.8593","-8","1" +"97326","Blodgett","OR","44.637701","-123.62496","-8","1" +"97327","Brownsville","OR","44.390881","-122.97168","-8","1" +"97329","Cascadia","OR","44.400432","-122.35469","-8","1" +"97330","Corvallis","OR","44.608694","-123.2752","-8","1" +"97331","Corvallis","OR","44.565648","-123.27906","-8","1" +"97333","Corvallis","OR","44.52789","-123.2791","-8","1" +"97335","Crabtree","OR","44.634439","-122.893292","-8","1" +"97336","Crawfordsville","OR","44.359301","-122.850752","-8","1" +"97338","Dallas","OR","44.920815","-123.33432","-8","1" +"97339","Corvallis","OR","44.49893","-123.445033","-8","1" +"97341","Depoe Bay","OR","44.821446","-124.05729","-8","1" +"97342","Detroit","OR","44.727388","-122.08703","-8","1" +"97343","Eddyville","OR","44.643659","-123.76213","-8","1" +"97344","Falls City","OR","44.865209","-123.44807","-8","1" +"97345","Foster","OR","44.407794","-122.60034","-8","1" +"97346","Gates","OR","44.754247","-122.39736","-8","1" +"97347","Grand Ronde","OR","45.060436","-123.66311","-8","1" +"97348","Halsey","OR","44.381732","-123.12153","-8","1" +"97350","Idanha","OR","44.696507","-122.07246","-8","1" +"97351","Independence","OR","44.849012","-123.18673","-8","1" +"97352","Jefferson","OR","44.736025","-123.02553","-8","1" +"97355","Lebanon","OR","44.527304","-122.85512","-8","1" +"97357","Logsden","OR","44.745464","-123.81722","-8","1" +"97358","Lyons","OR","44.794701","-122.53703","-8","1" +"97359","Marion","OR","44.984465","-122.457024","-8","1" +"97360","Mill City","OR","44.75067","-122.47727","-8","1" +"97361","Monmouth","OR","44.789252","-123.30325","-8","1" +"97362","Mount Angel","OR","45.067719","-122.79115","-8","1" +"97364","Neotsu","OR","44.997061","-123.98589","-8","1" +"97365","Newport","OR","44.649252","-124.05039","-8","1" +"97366","South Beach","OR","44.567998","-124.05401","-8","1" +"97367","Lincoln City","OR","44.950573","-124.00655","-8","1" +"97368","Otis","OR","45.009935","-123.91182","-8","1" +"97369","Otter Rock","OR","44.758819","-124.06328","-8","1" +"97370","Philomath","OR","44.578526","-123.43709","-8","1" +"97371","Rickreall","OR","44.964115","-123.20681","-8","1" +"97372","Rose Lodge","OR","44.659979","-123.892016","-8","1" +"97373","Saint Benedict","OR","44.984465","-122.457024","-8","1" +"97374","Scio","OR","44.702164","-122.81401","-8","1" +"97375","Scotts Mills","OR","45.004218","-122.59658","-8","1" +"97376","Seal Rock","OR","44.505655","-124.04512","-8","1" +"97377","Shedd","OR","44.46448","-123.10916","-8","1" +"97378","Sheridan","OR","45.089532","-123.40787","-8","1" +"97380","Siletz","OR","44.738154","-123.91023","-8","1" +"97381","Silverton","OR","45.003489","-122.78012","-8","1" +"97383","Stayton","OR","44.798379","-122.7601","-8","1" +"97384","Mehama","OR","44.790267","-122.618719","-8","1" +"97385","Sublimity","OR","44.850245","-122.7645","-8","1" +"97386","Sweet Home","OR","44.391863","-122.72856","-8","1" +"97388","Gleneden Beach","OR","44.885","-123.994219","-8","1" +"97389","Tangent","OR","44.538801","-123.09787","-8","1" +"97390","Tidewater","OR","44.309872","-123.83344","-8","1" +"97391","Toledo","OR","44.626888","-123.91515","-8","1" +"97392","Turner","OR","44.807739","-122.9485","-8","1" +"97394","Waldport","OR","44.424255","-124.04868","-8","1" +"97396","Willamina","OR","45.140178","-123.49286","-8","1" +"97401","Eugene","OR","44.06092","-123.08275","-8","1" +"97402","Eugene","OR","44.062231","-123.16804","-8","1" +"97403","Eugene","OR","44.03858","-123.05562","-8","1" +"97404","Eugene","OR","44.101227","-123.13604","-8","1" +"97405","Eugene","OR","44.004396","-123.12203","-8","1" +"97406","Agness","OR","42.625928","-124.05435","-8","1" +"97407","Allegany","OR","43.246918","-124.231068","-8","1" +"97408","Eugene","OR","44.122004","-123.06447","-8","1" +"97409","Alvadore","OR","44.127631","-123.266648","-8","1" +"97410","Azalea","OR","42.790958","-123.14894","-8","1" +"97411","Bandon","OR","43.113799","-124.39911","-8","1" +"97412","Blachly","OR","44.196459","-123.53776","-8","1" +"97413","Blue River","OR","44.178746","-122.14591","-8","1" +"97414","Broadbent","OR","42.977978","-124.1716","-8","1" +"97415","Brookings","OR","42.098285","-124.27265","-8","1" +"97416","Camas Valley","OR","43.054446","-123.6864","-8","1" +"97417","Canyonville","OR","42.934754","-123.25498","-8","1" +"97419","Cheshire","OR","44.181193","-123.38603","-8","1" +"97420","Coos Bay","OR","43.357357","-124.21086","-8","1" +"97423","Coquille","OR","43.187219","-124.16396","-8","1" +"97424","Cottage Grove","OR","43.77182","-123.05667","-8","1" +"97425","Crescent Lake","OR","43.472276","-121.92768","-8","1" +"97426","Creswell","OR","43.911542","-123.03036","-8","1" +"97427","Culp Creek","OR","43.685176","-122.79827","-8","1" +"97428","Curtin","OR","43.745797","-123.18191","-8","1" +"97429","Days Creek","OR","42.971648","-123.06467","-8","1" +"97430","Deadwood","OR","44.164325","-123.70193","-8","1" +"97431","Dexter","OR","43.892577","-122.81992","-8","1" +"97432","Dillard","OR","43.113502","-123.418068","-8","1" +"97434","Dorena","OR","43.740859","-122.88828","-8","1" +"97435","Drain","OR","43.703855","-123.35279","-8","1" +"97436","Elkton","OR","43.647537","-123.58719","-8","1" +"97437","Elmira","OR","44.099732","-123.38787","-8","1" +"97438","Fall Creek","OR","43.958389","-122.75701","-8","1" +"97439","Florence","OR","44.009099","-124.08307","-8","1" +"97440","Eugene","OR","43.863845","-122.99879","-8","1" +"97441","Gardiner","OR","43.760271","-124.12028","-8","1" +"97442","Glendale","OR","42.771195","-123.38578","-8","1" +"97443","Glide","OR","43.242312","-123.03325","-8","1" +"97444","Gold Beach","OR","42.451203","-124.39036","-8","1" +"97446","Harrisburg","OR","44.278808","-123.12026","-8","1" +"97447","Idleyld Park","OR","43.333008","-122.78475","-8","1" +"97448","Junction City","OR","44.204189","-123.2294","-8","1" +"97449","Lakeside","OR","43.58119","-124.1557","-8","1" +"97450","Langlois","OR","42.915024","-124.37576","-8","1" +"97451","Lorane","OR","43.80135","-123.24938","-8","1" +"97452","Lowell","OR","43.864671","-122.70932","-8","1" +"97453","Mapleton","OR","44.018992","-123.87221","-8","1" +"97454","Marcola","OR","44.227201","-122.8169","-8","1" +"97455","Pleasant Hill","OR","43.960764","-122.91541","-8","1" +"97456","Monroe","OR","44.333016","-123.36508","-8","1" +"97457","Myrtle Creek","OR","43.042614","-123.2322","-8","1" +"97458","Myrtle Point","OR","43.075356","-124.05682","-8","1" +"97459","North Bend","OR","43.434529","-124.20994","-8","1" +"97460","Norway","OR","43.138755","-124.127089","-8","1" +"97461","Noti","OR","44.099562","-123.46265","-8","1" +"97462","Oakland","OR","43.443648","-123.36727","-8","1" +"97463","Oakridge","OR","43.747181","-122.44717","-8","1" +"97464","Ophir","OR","42.739889","-124.51056","-8","1" +"97465","Port Orford","OR","42.746529","-124.47596","-8","1" +"97466","Powers","OR","42.873137","-124.07835","-8","1" +"97467","Reedsport","OR","43.68516","-124.00262","-8","1" +"97468","Remote","OR","43.138755","-124.127089","-8","1" +"97469","Riddle","OR","42.935498","-123.39902","-8","1" +"97470","Roseburg","OR","43.227287","-123.35138","-8","1" +"97472","Saginaw","OR","43.863845","-122.99879","-8","1" +"97473","Scottsburg","OR","43.669352","-123.8141","-8","1" +"97476","Sixes","OR","42.813437","-124.35756","-8","1" +"97477","Springfield","OR","44.061057","-123.01769","-8","1" +"97478","Springfield","OR","44.070824","-122.90709","-8","1" +"97479","Sutherlin","OR","43.397697","-123.27314","-8","1" +"97480","Swisshome","OR","44.127179","-123.83519","-8","1" +"97481","Tenmile","OR","43.098515","-123.55647","-8","1" +"97482","Thurston","OR","43.863845","-122.99879","-8","1" +"97484","Tiller","OR","42.879291","-122.89532","-8","1" +"97486","Umpqua","OR","43.38382","-123.53031","-8","1" +"97487","Veneta","OR","44.023225","-123.38399","-8","1" +"97488","Vida","OR","44.112618","-122.42255","-8","1" +"97489","Walterville","OR","44.131706","-122.6367","-8","1" +"97490","Walton","OR","44.004968","-123.63206","-8","1" +"97491","Wedderburn","OR","42.609252","-124.388576","-8","1" +"97492","Westfir","OR","43.756923","-122.51777","-8","1" +"97493","Westlake","OR","43.905878","-124.03929","-8","1" +"97494","Wilbur","OR","43.32843","-123.333177","-8","1" +"97495","Winchester","OR","43.333141","-123.325617","-8","1" +"97496","Winston","OR","43.094626","-123.43658","-8","1" +"97497","Wolf Creek","OR","42.676455","-123.324","-8","1" +"97498","Yachats","OR","44.326381","-124.0557","-8","1" +"97499","Yoncalla","OR","43.593788","-123.26602","-8","1" +"97501","Medford","OR","42.313498","-122.87944","-8","1" +"97502","Central Point","OR","42.387399","-122.92154","-8","1" +"97503","White City","OR","42.471919","-122.87201","-8","1" +"97504","Medford","OR","42.334496","-122.83547","-8","1" +"97520","Ashland","OR","42.169751","-122.61772","-8","1" +"97522","Butte Falls","OR","42.530663","-122.54822","-8","1" +"97523","Cave Junction","OR","42.139958","-123.60245","-8","1" +"97524","Eagle Point","OR","42.484283","-122.74031","-8","1" +"97525","Gold Hill","OR","42.432422","-123.08639","-8","1" +"97526","Grants Pass","OR","42.4631","-123.33162","-8","1" +"97527","Grants Pass","OR","42.405162","-123.3624","-8","1" +"97528","Grants Pass","OR","42.396421","-123.535027","-8","1" +"97530","Jacksonville","OR","42.224913","-123.04526","-8","1" +"97531","Kerby","OR","42.208018","-123.65551","-8","1" +"97532","Merlin","OR","42.542134","-123.5078","-8","1" +"97533","Murphy","OR","42.308007","-123.327323","-8","1" +"97534","O Brien","OR","42.055397","-123.7031","-8","1" +"97535","Phoenix","OR","42.270808","-122.81805","-8","1" +"97536","Prospect","OR","42.780226","-122.51485","-8","1" +"97537","Rogue River","OR","42.528269","-123.1515","-8","1" +"97538","Selma","OR","42.259678","-123.54778","-8","1" +"97539","Shady Cove","OR","42.612422","-122.81342","-8","1" +"97540","Talent","OR","42.227162","-122.78933","-8","1" +"97541","Trail","OR","42.713888","-122.7541","-8","1" +"97543","Wilderville","OR","42.365473","-123.50865","-8","1" +"97544","Williams","OR","42.155392","-123.2978","-8","1" +"97567","Lincoln City","OR","44.996054","-123.997304","-8","1" +"97587","Lostine","OR","45.487784","-117.430085","-8","1" +"97601","Klamath Falls","OR","42.282428","-121.88447","-8","1" +"97602","Klamath Falls","OR","42.804981","-121.584833","-8","1" +"97603","Klamath Falls","OR","42.169323","-121.70298","-8","1" +"97604","Crater Lake","OR","43.023645","-122.27443","-8","1" +"97620","Adel","OR","42.227477","-119.88141","-8","1" +"97621","Beatty","OR","42.476579","-121.23055","-8","1" +"97622","Bly","OR","42.334534","-120.97637","-8","1" +"97623","Bonanza","OR","42.202475","-121.33346","-8","1" +"97624","Chiloquin","OR","42.606472","-121.81297","-8","1" +"97625","Dairy","OR","42.330162","-121.55984","-8","1" +"97626","Fort Klamath","OR","42.686498","-122.04524","-8","1" +"97627","Keno","OR","42.086887","-121.98101","-8","1" +"97630","Lakeview","OR","42.199446","-120.42459","-8","1" +"97631","Monmouth","OR","44.855049","-123.237656","-8","1" +"97632","Malin","OR","42.026248","-121.41706","-8","1" +"97633","Merrill","OR","42.025618","-121.58306","-8","1" +"97634","Midland","OR","42.129926","-121.81778","-8","1" +"97635","New Pine Creek","CA","41.924974","-120.28989","-8","1" +"97636","Paisley","OR","42.693563","-120.55234","-8","1" +"97637","Plush","OR","42.543512","-119.86512","-8","1" +"97638","Silver Lake","OR","43.189402","-121.00466","-8","1" +"97639","Sprague River","OR","42.440695","-121.43464","-8","1" +"97640","Summer Lake","OR","42.961806","-120.77072","-8","1" +"97641","Christmas Valley","OR","43.256842","-120.65084","-8","1" +"97701","Bend","OR","44.091256","-121.29769","-8","1" +"97702","Bend","OR","44.020483","-121.30891","-8","1" +"97707","Bend","OR","43.84783","-121.46569","-8","1" +"97708","Bend","OR","44.001834","-120.94952","-8","1" +"97709","Bend","OR","44.001834","-120.94952","-8","1" +"97710","Fields","OR","42.130152","-118.5582","-8","1" +"97711","Ashwood","OR","44.738812","-120.75257","-8","1" +"97712","Brothers","OR","43.785416","-120.51518","-8","1" +"97720","Burns","OR","43.600795","-118.96382","-8","1" +"97721","Princeton","OR","43.036496","-118.61882","-8","1" +"97722","Diamond","OR","42.965788","-118.68196","-8","1" +"97730","Camp Sherman","OR","44.46723","-121.64724","-8","1" +"97731","Chemult","OR","43.189824","-121.88616","-8","1" +"97732","Crane","OR","43.40878","-118.45927","-8","1" +"97733","Crescent","OR","43.437958","-121.73063","-8","1" +"97734","Culver","OR","44.498302","-121.21084","-8","1" +"97735","Fort Rock","OR","43.331581","-121.01016","-8","1" +"97736","Frenchglen","OR","42.727146","-119.05385","-8","1" +"97737","Gilchrist","OR","43.521016","-121.65255","-8","1" +"97738","Hines","OR","43.471016","-119.21005","-8","1" +"97739","La Pine","OR","43.692251","-121.53865","-8","1" +"97740","Lawen","OR","43.019785","-119.069624","-8","1" +"97741","Madras","OR","44.64079","-121.12506","-8","1" +"97750","Mitchell","OR","44.611941","-120.11346","-8","1" +"97751","Paulina","OR","44.113537","-119.79377","-8","1" +"97752","Post","OR","44.119652","-120.30118","-8","1" +"97753","Powell Butte","OR","44.229401","-121.03751","-8","1" +"97754","Prineville","OR","44.238306","-120.75682","-8","1" +"97756","Redmond","OR","44.272796","-121.19173","-8","1" +"97758","Riley","OR","43.547855","-119.54235","-8","1" +"97759","Sisters","OR","44.322689","-121.54897","-8","1" +"97760","Terrebonne","OR","44.384155","-121.20181","-8","1" +"97761","Warm Springs","OR","44.814466","-121.32302","-8","1" +"97795","Roseburg North","OR","43.276877","-123.348568","-8","1" +"97801","Pendleton","OR","45.665146","-118.789","-8","1" +"97810","Adams","OR","45.719133","-118.46578","-8","1" +"97812","Arlington","OR","45.57852","-120.17301","-8","1" +"97813","Athena","OR","45.81667","-118.4966","-8","1" +"97814","Baker City","OR","44.796517","-117.82092","-8","1" +"97817","Bates","OR","44.705882","-118.79339","-8","1" +"97818","Boardman","OR","45.816575","-119.76236","-8","1" +"97819","Bridgeport","OR","44.489628","-117.73478","-8","1" +"97820","Canyon City","OR","44.335525","-118.95076","-8","1" +"97821","Cayuse","OR","45.683276","-118.45808","-8","1" +"97823","Condon","OR","45.232817","-120.17139","-8","1" +"97824","Cove","OR","45.331655","-117.83718","-8","1" +"97825","Dayville","OR","44.474491","-119.54241","-8","1" +"97826","Echo","OR","45.720228","-119.22894","-8","1" +"97827","Elgin","OR","45.564451","-117.88306","-8","1" +"97828","Enterprise","OR","45.547098","-117.26823","-8","1" +"97830","Fossil","OR","44.978549","-120.14934","-8","1" +"97831","Fox","OR","44.477794","-118.947769","-8","1" +"97833","Haines","OR","44.930122","-117.98289","-8","1" +"97834","Halfway","OR","44.919974","-117.13838","-8","1" +"97835","Helix","OR","45.866696","-118.74565","-8","1" +"97836","Heppner","OR","45.343509","-119.53938","-8","1" +"97837","Hereford","OR","44.499533","-118.06076","-8","1" +"97838","Hermiston","OR","45.846442","-119.28423","-8","1" +"97839","Lexington","OR","45.512792","-119.64344","-8","1" +"97840","Oxbow","OR","44.973266","-116.8565","-8","1" +"97841","Imbler","OR","45.463939","-117.9624","-8","1" +"97842","Imnaha","OR","45.479993","-116.79861","-8","1" +"97843","Ione","OR","45.493783","-119.87071","-8","1" +"97844","Irrigon","OR","45.886463","-119.51737","-8","1" +"97845","John Day","OR","44.408646","-118.95122","-8","1" +"97846","Joseph","OR","45.336407","-117.17791","-8","1" +"97848","Kimberly","OR","44.675475","-119.57602","-8","1" +"97850","La Grande","OR","45.32627","-118.08197","-8","1" +"97856","Long Creek","OR","44.743532","-119.11886","-8","1" +"97857","Lostine","OR","45.464512","-117.44227","-8","1" +"97859","Meacham","OR","45.529778","-118.43996","-8","1" +"97861","Mikkalo","OR","45.438822","-120.206698","-8","1" +"97862","Milton Freewater","OR","45.938511","-118.36952","-8","1" +"97864","Monument","OR","44.811965","-119.41539","-8","1" +"97865","Mount Vernon","OR","44.421744","-119.14737","-8","1" +"97867","North Powder","OR","45.048141","-117.96742","-8","1" +"97868","Pilot Rock","OR","45.402303","-118.76751","-8","1" +"97869","Prairie City","OR","44.441241","-118.69325","-8","1" +"97870","Richland","OR","44.798064","-117.2181","-8","1" +"97872","Ritter","OR","44.947425","-119.14087","-8","1" +"97873","Seneca","OR","44.138142","-118.9767","-8","1" +"97874","Spray","OR","44.741727","-119.82803","-8","1" +"97875","Stanfield","OR","45.786324","-119.21099","-8","1" +"97876","Summerville","OR","45.52535","-118.01193","-8","1" +"97877","Sumpter","OR","44.744446","-118.2229","-8","1" +"97880","Ukiah","OR","45.085144","-118.944","-8","1" +"97882","Umatilla","OR","45.915993","-119.33008","-8","1" +"97883","Union","OR","45.201699","-117.83083","-8","1" +"97884","Unity","OR","44.471344","-118.20623","-8","1" +"97885","Wallowa","OR","45.568843","-117.52645","-8","1" +"97886","Weston","OR","45.800879","-118.28859","-8","1" +"97901","Adrian","OR","43.661247","-117.07192","-7","1" +"97902","Arock","OR","42.915641","-117.497988","-7","1" +"97903","Brogan","OR","44.187379","-117.62629","-7","1" +"97904","Drewsey","OR","43.834833","-118.47434","-8","1" +"97905","Durkee","OR","44.578393","-117.48787","-8","1" +"97906","Harper","OR","43.875636","-117.57157","-7","1" +"97907","Huntington","OR","44.410083","-117.30995","-8","1" +"97908","Ironside","OR","44.30411","-117.9161","-7","1" +"97909","Jamieson","OR","44.207973","-117.45677","-7","1" +"97910","Jordan Valley","ID","42.749306","-116.8863","-7","1" +"97911","Juntura","OR","43.722896","-118.07394","-7","1" +"97913","Nyssa","ID","43.909576","-116.97103","-7","1" +"97914","Ontario","OR","44.057074","-116.99148","-7","1" +"97917","Riverside","OR","43.509919","-118.098586","-7","1" +"97918","Vale","OR","44.029403","-117.33282","-7","1" +"97920","Westfall","OR","44.032437","-117.7115","-7","1" +"98001","Auburn","WA","47.303722","-122.26608","-8","1" +"98002","Auburn","WA","47.304221","-122.21602","-8","1" +"98003","Federal Way","WA","47.311072","-122.31188","-8","1" +"98004","Bellevue","WA","47.618371","-122.20308","-8","1" +"98005","Bellevue","WA","47.611021","-122.16858","-8","1" +"98006","Bellevue","WA","47.562975","-122.1526","-8","1" +"98007","Bellevue","WA","47.610935","-122.14104","-8","1" +"98008","Bellevue","WA","47.609222","-122.1155","-8","1" +"98009","Bellevue","WA","47.432251","-121.803388","-8","1" +"98010","Black Diamond","WA","47.317802","-122.01479","-8","1" +"98011","Bothell","WA","47.751471","-122.20257","-8","1" +"98012","Bothell","WA","47.84311","-122.20457","-8","1" +"98013","Burton","WA","47.432251","-121.803388","-8","1" +"98014","Carnation","WA","47.648232","-121.91265","-8","1" +"98015","Bellevue","WA","47.432251","-121.803388","-8","1" +"98019","Duvall","WA","47.7353","-121.96222","-8","1" +"98020","Edmonds","WA","47.803668","-122.37096","-8","1" +"98021","Bothell","WA","47.790653","-122.22021","-8","1" +"98022","Enumclaw","WA","47.193729","-121.91915","-8","1" +"98023","Federal Way","WA","47.309021","-122.36178","-8","1" +"98024","Fall City","WA","47.565642","-121.88638","-8","1" +"98025","Hobart","WA","47.430704","-121.88496","-8","1" +"98026","Edmonds","WA","47.821568","-122.33651","-8","1" +"98027","Issaquah","WA","47.522828","-122.02921","-8","1" +"98028","Kenmore","WA","47.75287","-122.24736","-8","1" +"98029","Issaquah","WA","47.572401","-122.02065","-8","1" +"98030","Kent","WA","47.369098","-122.192276","-8","1" +"98031","Kent","WA","47.388461","-122.19644","-8","1" +"98032","Kent","WA","47.388254","-122.25932","-8","1" +"98033","Kirkland","WA","47.67903","-122.1934","-8","1" +"98034","Kirkland","WA","47.71828","-122.19702","-8","1" +"98035","Kent","WA","47.432251","-121.803388","-8","1" +"98036","Lynnwood","WA","47.808816","-122.28394","-8","1" +"98037","Lynnwood","WA","47.848237","-122.28348","-8","1" +"98038","Maple Valley","WA","47.381989","-122.03553","-8","1" +"98039","Medina","WA","47.626571","-122.2328","-8","1" +"98040","Mercer Island","WA","47.569271","-122.23233","-8","1" +"98041","Bothell","WA","47.432251","-121.803388","-8","1" +"98042","Kent","WA","47.363382","-122.11451","-8","1" +"98043","Mountlake Terrace","WA","47.790969","-122.30539","-8","1" +"98045","North Bend","WA","47.483057","-121.73254","-8","1" +"98046","Lynnwood","WA","48.037258","-121.682271","-8","1" +"98047","Pacific","WA","47.26619","-122.24463","-8","1" +"98050","Preston","WA","47.536015","-121.931195","-8","1" +"98051","Ravensdale","WA","47.359414","-121.88657","-8","1" +"98052","Redmond","WA","47.677471","-122.12138","-8","1" +"98053","Redmond","WA","47.640972","-122.03318","-8","1" +"98054","Redondo","WA","47.432251","-121.803388","-8","1" +"98055","Renton","WA","47.467422","-122.21005","-8","1" +"98056","Renton","WA","47.510739","-122.18372","-8","1" +"98057","Renton","WA","47.432251","-121.803388","-8","1" +"98058","Renton","WA","47.448322","-122.14584","-8","1" +"98059","Renton","WA","47.493031","-122.14169","-8","1" +"98060","Seattle","WA","47.432251","-121.803388","-8","1" +"98061","Rollingbay","WA","47.680763","-122.576199","-8","1" +"98062","Seahurst","WA","47.432251","-121.803388","-8","1" +"98063","Federal Way","WA","47.432251","-121.803388","-8","1" +"98064","Kent","WA","47.432251","-121.803388","-8","1" +"98065","Snoqualmie","WA","47.530639","-121.83053","-8","1" +"98067","Bellevue","WA","47.617634","-122.140193","-8","1" +"98068","Snoqualmie Pass","WA","47.397811","-121.39603","-8","1" +"98070","Vashon","WA","47.416198","-122.46821","-8","1" +"98071","Auburn","WA","47.432251","-121.803388","-8","1" +"98072","Woodinville","WA","47.758786","-122.10205","-8","1" +"98073","Redmond","WA","47.432251","-121.803388","-8","1" +"98074","Sammamish","WA","47.625364","-122.045347","-8","1" +"98075","Sammamish","WA","47.584879","-122.033685","-8","1" +"98082","Bothell","WA","47.432251","-121.803388","-8","1" +"98083","Kirkland","WA","47.432251","-121.803388","-8","1" +"98092","Auburn","WA","47.297285","-122.16328","-8","1" +"98093","Federal Way","WA","47.311041","-122.113791","-8","1" +"98101","Seattle","WA","47.61067","-122.33438","-8","1" +"98102","Seattle","WA","47.63287","-122.32253","-8","1" +"98103","Seattle","WA","47.671346","-122.34166","-8","1" +"98104","Seattle","WA","47.60252","-122.32855","-8","1" +"98105","Seattle","WA","47.66377","-122.30118","-8","1" +"98106","Seattle","WA","47.53282","-122.35443","-8","1" +"98107","Seattle","WA","47.66747","-122.37468","-8","1" +"98108","Seattle","WA","47.546188","-122.31514","-8","1" +"98109","Seattle","WA","47.630648","-122.34675","-8","1" +"98110","Bainbridge Island","WA","47.65526","-122.53508","-8","1" +"98111","Seattle","WA","47.432251","-121.803388","-8","1" +"98112","Seattle","WA","47.629653","-122.29752","-8","1" +"98113","Shoreline","WA","47.763669","-122.35384","-8","1" +"98114","Seattle","WA","47.432251","-121.803388","-8","1" +"98115","Seattle","WA","47.68382","-122.30122","-8","1" +"98116","Seattle","WA","47.57487","-122.39392","-8","1" +"98117","Seattle","WA","47.685919","-122.37838","-8","1" +"98118","Seattle","WA","47.543348","-122.27496","-8","1" +"98119","Seattle","WA","47.63877","-122.36694","-8","1" +"98121","Seattle","WA","47.61487","-122.34578","-8","1" +"98122","Seattle","WA","47.61157","-122.30406","-8","1" +"98124","Seattle","WA","47.432251","-121.803388","-8","1" +"98125","Seattle","WA","47.716648","-122.30308","-8","1" +"98126","Seattle","WA","47.54687","-122.3748","-8","1" +"98129","Seattle","WA","47.432251","-121.803388","-8","1" +"98130","Seattle","WA","47.432251","-121.803388","-8","1" +"98131","Seattle","WA","47.432251","-121.803388","-8","1" +"98132","Seattle","WA","47.432251","-121.803388","-8","1" +"98133","Seattle","WA","47.733852","-122.34461","-8","1" +"98134","Seattle","WA","47.57867","-122.33441","-8","1" +"98136","Seattle","WA","47.538887","-122.38803","-8","1" +"98138","Seattle","WA","47.432251","-121.803388","-8","1" +"98140","Seattle","WA","47.432251","-121.803388","-8","1" +"98144","Seattle","WA","47.58577","-122.30081","-8","1" +"98145","Seattle","WA","47.432251","-121.803388","-8","1" +"98146","Seattle","WA","47.501753","-122.35688","-8","1" +"98148","Seattle","WA","47.443756","-122.33068","-8","1" +"98150","Seattle","WA","47.432251","-121.803388","-8","1" +"98151","Seattle","WA","47.432251","-121.803388","-8","1" +"98154","Seattle","WA","47.60632","-122.33357","-8","1" +"98155","Seattle","WA","47.753019","-122.30373","-8","1" +"98158","Seattle","WA","47.432251","-121.803388","-8","1" +"98160","Seattle","WA","47.432251","-121.803388","-8","1" +"98161","Seattle","WA","47.432251","-121.803388","-8","1" +"98164","Seattle","WA","47.606139","-122.33186","-8","1" +"98166","Seattle","WA","47.458821","-122.34943","-8","1" +"98168","Seattle","WA","47.491327","-122.3027","-8","1" +"98171","Seattle","WA","47.432251","-121.803388","-8","1" +"98174","Seattle","WA","47.604718","-122.33523","-8","1" +"98177","Seattle","WA","47.740886","-122.36978","-8","1" +"98178","Seattle","WA","47.497971","-122.24664","-8","1" +"98181","Seattle","WA","47.432251","-121.803388","-8","1" +"98184","Seattle","WA","47.432251","-121.803388","-8","1" +"98185","Seattle","WA","47.432251","-121.803388","-8","1" +"98188","Seattle","WA","47.450321","-122.27472","-8","1" +"98190","Seattle","WA","47.432251","-121.803388","-8","1" +"98191","Seattle","WA","47.432251","-121.803388","-8","1" +"98195","Seattle","WA","47.432251","-121.803388","-8","1" +"98198","Seattle","WA","47.397521","-122.315","-8","1" +"98199","Seattle","WA","47.64767","-122.39758","-8","1" +"98201","Everett","WA","47.986274","-122.20222","-8","1" +"98203","Everett","WA","47.943468","-122.21792","-8","1" +"98204","Everett","WA","47.90296","-122.25064","-8","1" +"98205","Everett","WA","47.993436","-122.12723","-8","1" +"98206","Everett","WA","47.859918","-122.284785","-8","1" +"98207","Everett","WA","48.037258","-121.682271","-8","1" +"98208","Everett","WA","47.893451","-122.19797","-8","1" +"98220","Acme","WA","48.681582","-122.1977","-8","1" +"98221","Anacortes","WA","48.495234","-122.61976","-8","1" +"98222","Blakely Island","WA","48.586563","-122.80317","-8","1" +"98223","Arlington","WA","48.203856","-122.05288","-8","1" +"98224","Baring","WA","47.763755","-121.47607","-8","1" +"98225","Bellingham","WA","48.747578","-122.48508","-8","1" +"98226","Bellingham","WA","48.759079","-122.43597","-8","1" +"98227","Bellingham","WA","48.814753","-121.988548","-8","1" +"98228","Bellingham","WA","48.814753","-121.988548","-8","1" +"98229","Bellingham","WA","48.725417","-122.435478","-8","1" +"98230","Blaine","WA","48.961443","-122.73714","-8","1" +"98231","Blaine","WA","48.814753","-121.988548","-8","1" +"98232","Bow","WA","48.559548","-122.41375","-8","1" +"98233","Burlington","WA","48.486892","-122.33366","-8","1" +"98235","Clearlake","WA","48.461672","-122.23308","-8","1" +"98236","Clinton","WA","47.962134","-122.40089","-8","1" +"98237","Concrete","WA","48.497601","-121.70018","-8","1" +"98238","Conway","WA","48.337796","-122.34517","-8","1" +"98239","Coupeville","WA","48.204162","-122.66723","-8","1" +"98240","Custer","WA","48.931679","-122.63256","-8","1" +"98241","Darrington","WA","48.265483","-121.56075","-8","1" +"98243","Deer Harbor","WA","48.612763","-123.02057","-8","1" +"98244","Deming","WA","48.841442","-122.12547","-8","1" +"98245","Eastsound","WA","48.672312","-122.91972","-8","1" +"98246","Bow","WA","48.558127","-121.417034","-8","1" +"98247","Everson","WA","48.900256","-122.32095","-8","1" +"98248","Ferndale","WA","48.852655","-122.61807","-8","1" +"98249","Freeland","WA","48.029176","-122.54222","-8","1" +"98250","Friday Harbor","WA","48.55113","-123.07563","-8","1" +"98251","Gold Bar","WA","47.851713","-121.66644","-8","1" +"98252","Granite Falls","WA","48.070852","-121.82242","-8","1" +"98253","Greenbank","WA","48.085852","-122.57129","-8","1" +"98255","Hamilton","WA","48.525461","-121.9887","-8","1" +"98256","Index","WA","47.84138","-121.50689","-8","1" +"98257","La Conner","WA","48.393063","-122.50476","-8","1" +"98258","Lake Stevens","WA","48.028355","-122.06327","-8","1" +"98259","North Lakewood","WA","48.037258","-121.682271","-8","1" +"98260","Langley","WA","48.030555","-122.44856","-8","1" +"98261","Lopez Island","WA","48.481655","-122.88271","-8","1" +"98262","Lummi Island","WA","48.699642","-122.66658","-8","1" +"98263","Lyman","WA","48.534462","-122.058644","-8","1" +"98264","Lynden","WA","48.943476","-122.45723","-8","1" +"98266","Maple Falls","WA","48.853213","-122.247881","-8","1" +"98267","Marblemount","WA","48.499159","-121.43163","-8","1" +"98270","Marysville","WA","48.061269","-122.1588","-8","1" +"98271","Marysville","WA","48.093129","-122.21614","-8","1" +"98272","Monroe","WA","47.860245","-121.93734","-8","1" +"98273","Mount Vernon","WA","48.414576","-122.35196","-8","1" +"98274","Mount Vernon","WA","48.371026","-122.24432","-8","1" +"98275","Mukilteo","WA","47.916148","-122.30293","-8","1" +"98276","Nooksack","WA","48.834208","-122.335734","-8","1" +"98277","Oak Harbor","WA","48.303774","-122.65093","-8","1" +"98278","Oak Harbor","WA","48.310127","-122.655862","-8","1" +"98279","Olga","WA","48.63205","-122.81372","-8","1" +"98280","Orcas","WA","48.594255","-122.91828","-8","1" +"98281","Point Roberts","WA","48.99201","-123.05047","-8","1" +"98282","Camano","WA","48.185511","-122.48209","-8","1" +"98283","Rockport","WA","48.509814","-121.48418","-8","1" +"98284","Sedro Woolley","WA","48.518653","-122.16545","-8","1" +"98286","Shaw Island","WA","48.575362","-122.96643","-8","1" +"98287","Silvana","WA","48.037258","-121.682271","-8","1" +"98288","Skykomish","WA","47.658047","-121.41445","-8","1" +"98290","Snohomish","WA","47.930902","-122.03976","-8","1" +"98291","Snohomish","WA","47.909511","-122.050108","-8","1" +"98292","Stanwood","WA","48.222046","-122.38961","-8","1" +"98293","Startup","WA","47.870275","-121.76849","-8","1" +"98294","Sultan","WA","47.86527","-121.78899","-8","1" +"98295","Sumas","WA","48.971298","-122.20146","-8","1" +"98296","Snohomish","WA","47.846083","-122.11068","-8","1" +"98297","Waldron","WA","48.701835","-123.02636","-8","1" +"98303","Anderson Island","WA","47.16438","-122.69584","-8","1" +"98304","Ashford","WA","46.75523","-122.01544","-8","1" +"98305","Beaver","WA","48.066605","-124.30909","-8","1" +"98310","Bremerton","WA","47.58675","-122.62371","-8","1" +"98311","Bremerton","WA","47.629717","-122.63493","-8","1" +"98312","Bremerton","WA","47.564437","-122.71293","-8","1" +"98314","Bremerton","WA","47.559317","-122.64915","-8","1" +"98315","Silverdale","WA","47.720777","-122.71309","-8","1" +"98319","Duvall","WA","47.741268","-121.978279","-8","1" +"98320","Brinnon","WA","47.705616","-122.92868","-8","1" +"98321","Buckley","WA","47.155649","-122.05255","-8","1" +"98322","Burley","WA","47.687971","-122.729304","-8","1" +"98323","Carbonado","WA","47.035525","-121.951","-8","1" +"98324","Carlsborg","WA","48.18315","-123.872972","-8","1" +"98325","Chimacum","WA","47.974586","-122.78382","-8","1" +"98326","Clallam Bay","WA","48.181608","-124.41188","-8","1" +"98327","Dupont","WA","47.088719","-122.64326","-8","1" +"98328","Eatonville","WA","46.884733","-122.29237","-8","1" +"98329","Gig Harbor","WA","47.378121","-122.7222","-8","1" +"98330","Elbe","WA","46.761546","-122.17858","-8","1" +"98331","Forks","WA","47.838423","-124.35888","-8","1" +"98332","Gig Harbor","WA","47.364321","-122.60011","-8","1" +"98333","Fox Island","WA","47.244053","-122.6199","-8","1" +"98335","Gig Harbor","WA","47.301252","-122.60562","-8","1" +"98336","Glenoma","WA","46.53619","-122.11766","-8","1" +"98337","Bremerton","WA","47.569167","-122.63479","-8","1" +"98338","Graham","WA","47.028423","-122.291","-8","1" +"98339","Port Hadlock","WA","48.036882","-122.7599","-8","1" +"98340","Hansville","WA","47.910628","-122.57489","-8","1" +"98342","Indianola","WA","47.74878","-122.53051","-8","1" +"98343","Joyce","WA","48.18315","-123.872972","-8","1" +"98344","Kapowsin","WA","46.989916","-122.222642","-8","1" +"98345","Keyport","WA","47.702342","-122.62554","-8","1" +"98346","Kingston","WA","47.807359","-122.51962","-8","1" +"98348","La Grande","WA","47.066193","-122.113223","-8","1" +"98349","Lakebay","WA","47.268551","-122.76897","-8","1" +"98350","La Push","WA","47.905815","-124.62202","-8","1" +"98351","Longbranch","WA","47.200168","-122.77537","-8","1" +"98352","Sumner","WA","47.066193","-122.113223","-8","1" +"98353","Manchester","WA","47.553289","-122.54535","-8","1" +"98354","Milton","WA","47.248208","-122.31737","-8","1" +"98355","Mineral","WA","46.711036","-122.0348","-8","1" +"98356","Morton","WA","46.562676","-122.29514","-8","1" +"98357","Neah Bay","WA","48.35306","-124.64076","-8","1" +"98358","Nordland","WA","48.058323","-122.68794","-8","1" +"98359","Olalla","WA","47.43025","-122.57159","-8","1" +"98360","Orting","WA","47.039607","-122.14691","-8","1" +"98361","Packwood","WA","46.580048","-121.61674","-8","1" +"98362","Port Angeles","WA","48.097144","-123.40628","-8","1" +"98363","Port Angeles","WA","48.102836","-123.63765","-8","1" +"98364","Port Gamble","WA","47.854503","-122.59122","-8","1" +"98365","Port Ludlow","WA","47.907561","-122.69416","-8","1" +"98366","Port Orchard","WA","47.53587","-122.59905","-8","1" +"98367","Port Orchard","WA","47.470971","-122.66335","-8","1" +"98368","Port Townsend","WA","48.100255","-122.79736","-8","1" +"98370","Poulsbo","WA","47.743302","-122.63041","-8","1" +"98371","Puyallup","WA","47.196272","-122.31577","-8","1" +"98372","Puyallup","WA","47.198591","-122.27131","-8","1" +"98373","Puyallup","WA","47.147862","-122.31864","-8","1" +"98374","Puyallup","WA","47.140045","-122.26012","-8","1" +"98375","Puyallup","WA","47.112477","-122.32247","-8","1" +"98376","Quilcene","WA","47.826111","-122.85233","-8","1" +"98377","Randle","WA","46.525156","-121.85094","-8","1" +"98378","Retsil","WA","47.687971","-122.729304","-8","1" +"98380","Seabeck","WA","47.596122","-122.89456","-8","1" +"98381","Sekiu","WA","48.283826","-124.37144","-8","1" +"98382","Sequim","WA","48.079979","-123.09916","-8","1" +"98383","Silverdale","WA","47.667257","-122.69055","-8","1" +"98384","South Colby","WA","47.521803","-122.539637","-8","1" +"98385","South Prairie","WA","47.138345","-122.09819","-8","1" +"98386","Southworth","WA","47.51037","-122.499139","-8","1" +"98387","Spanaway","WA","47.077796","-122.40517","-8","1" +"98388","Steilacoom","WA","47.164965","-122.6005","-8","1" +"98389","South Prairie","WA","47.137872","-122.09356","-8","1" +"98390","Sumner","WA","47.196364","-122.1887","-8","1" +"98392","Suquamish","WA","47.735065","-122.55751","-8","1" +"98393","Tracyton","WA","47.626717","-122.649953","-8","1" +"98394","Vaughn","WA","47.336226","-122.78309","-8","1" +"98395","Wauna","WA","47.266017","-122.832799","-8","1" +"98396","Wilkeson","WA","47.106024","-122.0451","-8","1" +"98397","Longmire","WA","47.066193","-122.113223","-8","1" +"98398","Paradise Inn","WA","47.066193","-122.113223","-8","1" +"98401","Tacoma","WA","47.253671","-122.444335","-8","1" +"98402","Tacoma","WA","47.247671","-122.43971","-8","1" +"98403","Tacoma","WA","47.263971","-122.45879","-8","1" +"98404","Tacoma","WA","47.212421","-122.4156","-8","1" +"98405","Tacoma","WA","47.248953","-122.46599","-8","1" +"98406","Tacoma","WA","47.26302","-122.49518","-8","1" +"98407","Tacoma","WA","47.28392","-122.50433","-8","1" +"98408","Tacoma","WA","47.209021","-122.44498","-8","1" +"98409","Tacoma","WA","47.208987","-122.48053","-8","1" +"98411","Tacoma","WA","47.066193","-122.113223","-8","1" +"98412","Tacoma","WA","47.066193","-122.113223","-8","1" +"98413","Tacoma","WA","47.066193","-122.113223","-8","1" +"98415","Tacoma","WA","47.066193","-122.113223","-8","1" +"98416","Tacoma","WA","47.264577","-122.482076","-8","1" +"98418","Tacoma","WA","47.066193","-122.113223","-8","1" +"98421","Tacoma","WA","47.250681","-122.41213","-8","1" +"98422","Tacoma","WA","47.296007","-122.39835","-8","1" +"98424","Tacoma","WA","47.242186","-122.35916","-8","1" +"98430","Camp Murray","WA","47.066193","-122.113223","-8","1" +"98431","Tacoma","WA","47.066193","-122.113223","-8","1" +"98433","Tacoma","WA","47.080682","-122.57987","-8","1" +"98434","Tacoma","WA","47.066193","-122.113223","-8","1" +"98438","Tacoma","WA","47.151297","-122.567631","-8","1" +"98439","Lakewood","WA","47.12562","-122.52294","-8","1" +"98442","Tacoma","WA","47.308061","-122.418495","-8","1" +"98443","Tacoma","WA","47.202874","-122.37678","-8","1" +"98444","Tacoma","WA","47.153571","-122.4485","-8","1" +"98445","Tacoma","WA","47.148269","-122.41196","-8","1" +"98446","Tacoma","WA","47.1309","-122.37589","-8","1" +"98447","Tacoma","WA","47.066193","-122.113223","-8","1" +"98448","Parkland","WA","47.136544","-122.422431","-8","1" +"98450","Tacoma","WA","47.066193","-122.113223","-8","1" +"98455","Tacoma","WA","47.066193","-122.113223","-8","1" +"98460","Tacoma","WA","47.066193","-122.113223","-8","1" +"98464","Tacoma","WA","47.066193","-122.113223","-8","1" +"98465","Tacoma","WA","47.247735","-122.52818","-8","1" +"98466","Tacoma","WA","47.230402","-122.53272","-8","1" +"98467","University Place","WA","47.203946","-122.52996","-8","1" +"98468","Oakville","WA","46.843337","-123.228797","-8","1" +"98471","Tacoma","WA","47.066193","-122.113223","-8","1" +"98477","Tacoma","WA","47.066193","-122.113223","-8","1" +"98481","Tacoma","WA","47.066193","-122.113223","-8","1" +"98485","South Prairie","WA","47.140655","-122.100892","-8","1" +"98492","Lakewood","WA","47.066193","-122.113223","-8","1" +"98493","Tacoma","WA","47.066193","-122.113223","-8","1" +"98494","Tacoma","WA","47.066193","-122.113223","-8","1" +"98497","Lakewood","WA","47.066193","-122.113223","-8","1" +"98498","Lakewood","WA","47.16062","-122.55877","-8","1" +"98499","Lakewood","WA","47.16632","-122.50844","-8","1" +"98500","Tumwater","WA","46.985519","-122.907649","-8","1" +"98501","Olympia","WA","47.014718","-122.8819","-8","1" +"98502","Olympia","WA","47.071484","-122.97702","-8","1" +"98503","Lacey","WA","47.027082","-122.80359","-8","1" +"98504","Olympia","WA","46.978118","-122.702393","-8","1" +"98505","Olympia","WA","47.065404","-122.976187","-8","1" +"98506","Olympia","WA","47.069339","-122.87249","-8","1" +"98507","Olympia","WA","46.978118","-122.702393","-8","1" +"98508","Olympia","WA","46.978118","-122.702393","-8","1" +"98509","Lacey","WA","46.978118","-122.702393","-8","1" +"98512","Olympia","WA","46.969793","-122.99802","-8","1" +"98513","Olympia","WA","47.00581","-122.75285","-8","1" +"98516","Olympia","WA","47.085046","-122.78376","-8","1" +"98520","Aberdeen","WA","46.972965","-123.81923","-8","1" +"98522","Adna","WA","46.571323","-123.298384","-8","1" +"98524","Allyn","WA","47.374343","-122.8388","-8","1" +"98526","Amanda Park","WA","47.463965","-124.02938","-8","1" +"98527","Bay Center","WA","46.630051","-123.95463","-8","1" +"98528","Belfair","WA","47.445292","-122.88417","-8","1" +"98530","Bucoda","WA","46.797382","-122.85123","-8","1" +"98531","Centralia","WA","46.728383","-122.95142","-8","1" +"98532","Chehalis","WA","46.630721","-123.01599","-8","1" +"98533","Cinebar","WA","46.588026","-122.53345","-8","1" +"98535","Copalis Beach","WA","47.118566","-124.16027","-8","1" +"98536","Copalis Crossing","WA","47.179475","-124.14241","-8","1" +"98537","Cosmopolis","WA","46.899189","-123.6907","-8","1" +"98538","Curtis","WA","46.483547","-123.1016","-8","1" +"98539","Doty","WA","46.637787","-123.2798","-8","1" +"98540","East Olympia","WA","46.978118","-122.702393","-8","1" +"98541","Elma","WA","47.03575","-123.40713","-8","1" +"98542","Ethel","WA","46.532624","-122.74407","-8","1" +"98544","Galvin","WA","46.734909","-123.02536","-8","1" +"98546","Grapeview","WA","47.321442","-122.92935","-8","1" +"98547","Grayland","WA","46.781978","-124.08111","-8","1" +"98548","Hoodsport","WA","47.446725","-123.21175","-8","1" +"98550","Hoquiam","WA","47.026913","-123.91732","-8","1" +"98552","Humptulips","WA","47.355226","-123.90189","-8","1" +"98554","Lebam","WA","46.561375","-123.54788","-8","1" +"98555","Lilliwaup","WA","47.521614","-123.06888","-8","1" +"98556","Littlerock","WA","46.902376","-123.017043","-8","1" +"98557","Mccleary","WA","47.054419","-123.2739","-8","1" +"98558","Mckenna","WA","46.955863","-122.55585","-8","1" +"98559","Malone","WA","46.959091","-123.32595","-8","1" +"98560","Matlock","WA","47.26332","-123.43097","-8","1" +"98561","Menlo","WA","46.514625","-123.76903","-8","1" +"98562","Moclips","WA","47.254009","-124.20789","-8","1" +"98563","Montesano","WA","47.034615","-123.60332","-8","1" +"98564","Mossyrock","WA","46.50494","-122.48668","-8","1" +"98565","Napavine","WA","46.580105","-122.90699","-8","1" +"98566","Neilton","WA","47.387674","-123.890317","-8","1" +"98568","Oakville","WA","46.84066","-123.25649","-8","1" +"98569","Ocean Shores","WA","46.983877","-124.15607","-8","1" +"98570","Onalaska","WA","46.593526","-122.65346","-8","1" +"98571","Pacific Beach","WA","47.216861","-124.1974","-8","1" +"98572","Pe Ell","WA","46.569107","-123.30578","-8","1" +"98575","Quinault","WA","47.489864","-123.81031","-8","1" +"98576","Rainier","WA","46.871178","-122.67573","-8","1" +"98577","Raymond","WA","46.668744","-123.67708","-8","1" +"98579","Rochester","WA","46.814438","-123.08647","-8","1" +"98580","Roy","WA","46.954282","-122.48754","-8","1" +"98581","Ryderwood","WA","46.373347","-123.05308","-8","1" +"98582","Salkum","WA","46.513653","-122.62556","-8","1" +"98583","Satsop","WA","47.002178","-123.483596","-8","1" +"98584","Shelton","WA","47.224044","-123.10538","-8","1" +"98585","Silver Creek","WA","46.528282","-122.57616","-8","1" +"98586","South Bend","WA","46.560786","-123.85214","-8","1" +"98587","Taholah","WA","47.32251","-124.25814","-8","1" +"98588","Tahuya","WA","47.433993","-123.02078","-8","1" +"98589","Tenino","WA","46.857968","-122.8326","-8","1" +"98590","Tokeland","WA","46.737458","-123.98121","-8","1" +"98591","Toledo","WA","46.433226","-122.80083","-8","1" +"98592","Union","WA","47.33179","-123.07403","-8","1" +"98593","Vader","WA","46.40521","-122.9827","-8","1" +"98595","Westport","WA","46.887187","-124.10735","-8","1" +"98596","Winlock","WA","46.493247","-122.92262","-8","1" +"98597","Yelm","WA","46.893352","-122.56719","-8","1" +"98599","Olympia","WA","46.978118","-122.702393","-8","1" +"98601","Amboy","WA","45.935656","-122.43726","-8","1" +"98602","Appleton","WA","45.844123","-121.29141","-8","1" +"98603","Ariel","WA","46.001752","-122.45624","-8","1" +"98604","Battle Ground","WA","45.791345","-122.51789","-8","1" +"98605","Bingen","WA","45.719294","-121.47838","-8","1" +"98606","Brush Prairie","WA","45.73451","-122.48034","-8","1" +"98607","Camas","WA","45.60916","-122.40547","-8","1" +"98609","Carrolls","WA","46.071482","-122.864838","-8","1" +"98610","Carson","WA","45.801513","-121.91147","-8","1" +"98611","Castle Rock","WA","46.308371","-122.8987","-8","1" +"98612","Cathlamet","WA","46.208318","-123.34624","-8","1" +"98613","Centerville","WA","45.722786","-120.96163","-8","1" +"98614","Chinook","WA","46.282397","-123.93844","-8","1" +"98616","Cougar","WA","46.06517","-122.29411","-8","1" +"98617","Dallesport","WA","45.632051","-121.16835","-8","1" +"98619","Glenwood","WA","46.018228","-121.28904","-8","1" +"98620","Goldendale","WA","45.846697","-120.75703","-8","1" +"98621","Grays River","WA","46.348706","-123.58307","-8","1" +"98622","Heisson","WA","45.801586","-122.520347","-8","1" +"98623","Husum","WA","45.807631","-121.487682","-8","1" +"98624","Ilwaco","WA","46.312541","-124.02968","-8","1" +"98625","Kalama","WA","46.015873","-122.79718","-8","1" +"98626","Kelso","WA","46.150433","-122.88566","-8","1" +"98628","Klickitat","WA","45.82786","-121.09804","-8","1" +"98629","La Center","WA","45.8768","-122.62193","-8","1" +"98631","Long Beach","WA","46.365773","-124.05022","-8","1" +"98632","Longview","WA","46.156082","-122.98043","-8","1" +"98635","Lyle","WA","45.726451","-121.19784","-8","1" +"98637","Nahcotta","WA","46.514625","-123.76903","-8","1" +"98638","Naselle","WA","46.370075","-123.76506","-8","1" +"98639","North Bonneville","WA","45.650041","-121.97167","-8","1" +"98640","Ocean Park","WA","46.501781","-124.04801","-8","1" +"98641","Oysterville","WA","46.554","-124.02626","-8","1" +"98642","Ridgefield","WA","45.795825","-122.69804","-8","1" +"98643","Rosburg","WA","46.302905","-123.62473","-8","1" +"98644","Seaview","WA","46.332077","-124.05517","-8","1" +"98645","Silverlake","WA","46.318482","-122.7757","-8","1" +"98647","Skamokawa","WA","46.296658","-123.46828","-8","1" +"98648","Stevenson","WA","45.669604","-121.91332","-8","1" +"98649","Toutle","WA","46.352771","-122.66054","-8","1" +"98650","Trout Lake","WA","45.981582","-121.5395","-8","1" +"98651","Underwood","WA","45.730656","-121.57558","-8","1" +"98653","Lyle","WA","45.694098","-121.286091","-8","1" +"98655","Hazel Dell North","WA","45.678557","-122.663954","-8","1" +"98660","Vancouver","WA","45.652255","-122.69009","-8","1" +"98661","Vancouver","WA","45.63873","-122.62846","-8","1" +"98662","Vancouver","WA","45.671806","-122.57894","-8","1" +"98663","Vancouver","WA","45.647667","-122.66162","-8","1" +"98664","Vancouver","WA","45.62104","-122.57947","-8","1" +"98665","Vancouver","WA","45.681271","-122.66712","-8","1" +"98666","Vancouver","WA","45.801586","-122.520347","-8","1" +"98667","Vancouver","WA","45.801586","-122.520347","-8","1" +"98668","Vancouver","WA","45.801586","-122.520347","-8","1" +"98670","Wahkiacus","WA","45.859065","-121.14615","-8","1" +"98671","Washougal","WA","45.594465","-122.28112","-8","1" +"98672","White Salmon","WA","45.786727","-121.47523","-8","1" +"98673","Wishram","WA","45.661878","-120.94997","-8","1" +"98674","Woodland","WA","45.928662","-122.70284","-8","1" +"98675","Yacolt","WA","45.843674","-122.39221","-8","1" +"98682","Vancouver","WA","45.67309","-122.51319","-8","1" +"98683","Vancouver","WA","45.604075","-122.51035","-8","1" +"98684","Vancouver","WA","45.627459","-122.52023","-8","1" +"98685","Vancouver","WA","45.709555","-122.68473","-8","1" +"98686","Vancouver","WA","45.712623","-122.63419","-8","1" +"98687","Vancouver","WA","45.801586","-122.520347","-8","1" +"98731","Waller","WA","47.185462","-122.353089","-8","1" +"98801","Wenatchee","WA","47.425497","-120.32881","-8","1" +"98802","East Wenatchee","WA","47.436898","-120.25742","-8","1" +"98807","Wenatchee","WA","47.905787","-120.520211","-8","1" +"98811","Ardenvoir","WA","47.737028","-120.37126","-8","1" +"98812","Brewster","WA","48.112268","-119.75203","-8","1" +"98813","Bridgeport","WA","47.999618","-119.66129","-8","1" +"98814","Carlton","WA","48.231421","-120.12065","-8","1" +"98815","Cashmere","WA","47.522546","-120.48966","-8","1" +"98816","Chelan","WA","47.880774","-120.08379","-8","1" +"98817","Chelan Falls","WA","47.79955","-119.98921","-8","1" +"98819","Conconully","WA","48.559477","-119.75474","-8","1" +"98821","Dryden","WA","47.541723","-120.5614","-8","1" +"98822","Entiat","WA","47.782158","-120.35944","-8","1" +"98823","Ephrata","WA","47.297368","-119.57129","-8","1" +"98824","George","WA","47.079243","-119.860117","-8","1" +"98826","Leavenworth","WA","47.728186","-120.73874","-8","1" +"98827","Loomis","WA","48.885618","-119.68939","-8","1" +"98828","Malaga","WA","47.333821","-120.19929","-8","1" +"98829","Malott","WA","48.267188","-119.73538","-8","1" +"98830","Mansfield","WA","47.880616","-119.54481","-8","1" +"98831","Manson","WA","47.915227","-120.12934","-8","1" +"98832","Marlin","WA","47.290624","-119.03268","-8","1" +"98833","Mazama","WA","48.634796","-120.47681","-8","1" +"98834","Methow","WA","48.138528","-120.02851","-8","1" +"98836","Monitor","WA","47.481133","-120.41354","-8","1" +"98837","Moses Lake","WA","47.133606","-119.28455","-8","1" +"98840","Okanogan","WA","48.343356","-119.57656","-8","1" +"98841","Omak","WA","48.403174","-119.39066","-8","1" +"98843","Orondo","WA","47.745842","-120.09326","-8","1" +"98844","Oroville","WA","48.9332","-119.38169","-8","1" +"98845","Palisades","WA","47.466573","-119.82091","-8","1" +"98846","Pateros","WA","48.03925","-119.9395","-8","1" +"98847","Peshastin","WA","47.552462","-120.60457","-8","1" +"98848","Quincy","WA","47.18227","-119.85868","-8","1" +"98849","Riverside","WA","48.528793","-119.45276","-8","1" +"98850","Rock Island","WA","47.360902","-120.11338","-8","1" +"98851","Soap Lake","WA","47.400024","-119.4624","-8","1" +"98852","Stehekin","WA","48.494944","-120.73348","-8","1" +"98853","Stratford","WA","47.417461","-119.28312","-8","1" +"98855","Tonasket","WA","48.689509","-119.32169","-8","1" +"98856","Twisp","WA","48.359904","-120.13051","-8","1" +"98857","Warden","WA","46.970666","-119.0672","-8","1" +"98858","Waterville","WA","47.63205","-119.90423","-8","1" +"98859","Wauconda","WA","48.810894","-118.93303","-8","1" +"98860","Wilson Creek","WA","47.458634","-119.13921","-8","1" +"98862","Winthrop","WA","48.488543","-120.24261","-8","1" +"98901","Yakima","WA","46.616199","-120.46481","-8","1" +"98902","Yakima","WA","46.595248","-120.53102","-8","1" +"98903","Yakima","WA","46.550348","-120.62097","-8","1" +"98904","Yakima","WA","46.56451","-120.694658","-8","1" +"98907","Yakima","WA","46.628757","-120.573967","-8","1" +"98908","Yakima","WA","46.605303","-120.61762","-8","1" +"98909","Yakima","WA","46.637538","-120.794978","-8","1" +"98920","Brownstown","WA","46.56451","-120.694658","-8","1" +"98921","Buena","WA","46.421218","-120.315141","-8","1" +"98922","Cle Elum","WA","47.19377","-120.91733","-8","1" +"98923","Cowiche","WA","46.662006","-120.71558","-8","1" +"98925","Easton","WA","47.3042","-121.24849","-8","1" +"98926","Ellensburg","WA","47.009726","-120.52364","-8","1" +"98929","Goose Prairie","WA","46.915735","-121.241591","-8","1" +"98930","Grandview","WA","46.260129","-119.90614","-8","1" +"98932","Granger","WA","46.345166","-120.1843","-8","1" +"98933","Harrah","WA","46.406875","-120.62421","-8","1" +"98934","Kittitas","WA","46.984565","-120.41782","-8","1" +"98935","Mabton","WA","46.177732","-120.02966","-8","1" +"98936","Moxee","WA","46.540842","-120.33322","-8","1" +"98937","Naches","WA","46.71207","-120.97097","-8","1" +"98938","Outlook","WA","46.364164","-120.09871","-8","1" +"98939","Parker","WA","46.56451","-120.694658","-8","1" +"98940","Ronald","WA","47.33394","-121.02979","-8","1" +"98941","Roslyn","WA","47.224876","-120.99286","-8","1" +"98942","Selah","WA","46.726395","-120.56997","-8","1" +"98943","South Cle Elum","WA","47.186592","-120.95503","-8","1" +"98944","Sunnyside","WA","46.342102","-119.99","-8","1" +"98946","Thorp","WA","47.087352","-120.71232","-8","1" +"98947","Tieton","WA","46.707735","-120.75713","-8","1" +"98948","Toppenish","WA","46.35653","-120.33462","-8","1" +"98950","Vantage","WA","46.880413","-119.98939","-8","1" +"98951","Wapato","WA","46.457731","-120.46721","-8","1" +"98952","White Swan","WA","46.377579","-120.7144","-8","1" +"98953","Zillah","WA","46.418933","-120.26699","-8","1" +"98991","Roslyn","WA","47.221837","-120.993126","-8","1" +"99001","Airway Heights","WA","47.642922","-117.59149","-8","1" +"99003","Chattaroy","WA","47.921687","-117.29378","-8","1" +"99004","Cheney","WA","47.466974","-117.60575","-8","1" +"99005","Colbert","WA","47.844289","-117.37274","-8","1" +"99006","Deer Park","WA","47.966471","-117.48145","-8","1" +"99008","Edwall","WA","47.50505","-117.93432","-8","1" +"99009","Elk","WA","48.041663","-117.24891","-8","1" +"99011","Fairchild Air Force Base","WA","47.595572","-117.67344","-8","1" +"99012","Fairfield","WA","47.383651","-117.18568","-8","1" +"99013","Ford","WA","47.889348","-117.82325","-8","1" +"99014","Four Lakes","WA","47.55988","-117.595751","-8","1" +"99015","Freeman","WA","47.653568","-117.431742","-8","1" +"99016","Greenacres","WA","47.648693","-117.15116","-8","1" +"99017","Lamont","WA","47.197445","-117.85558","-8","1" +"99018","Latah","WA","47.277842","-117.13639","-8","1" +"99019","Liberty Lake","WA","47.656171","-117.08628","-8","1" +"99020","Marshall","WA","47.563191","-117.4959","-8","1" +"99021","Mead","WA","47.81108","-117.22306","-8","1" +"99022","Medical Lake","WA","47.583754","-117.68812","-8","1" +"99023","Mica","WA","47.554592","-117.18352","-8","1" +"99025","Newman Lake","WA","47.751434","-117.06934","-8","1" +"99026","Nine Mile Falls","WA","47.801194","-117.59325","-8","1" +"99027","Otis Orchards","WA","47.703698","-117.12007","-8","1" +"99029","Reardan","WA","47.693129","-117.86164","-8","1" +"99030","Rockford","WA","47.463725","-117.11319","-8","1" +"99031","Spangle","WA","47.432691","-117.37449","-8","1" +"99032","Sprague","WA","47.273264","-117.99082","-8","1" +"99033","Tekoa","WA","47.222328","-117.08133","-8","1" +"99034","Tumtum","WA","47.858074","-117.74582","-8","1" +"99036","Valleyford","WA","47.52507","-117.27054","-8","1" +"99037","Veradale","WA","47.643346","-117.19993","-8","1" +"99039","Waverly","WA","47.329704","-117.244981","-8","1" +"99040","Wellpinit","WA","47.863857","-118.03661","-8","1" +"99066","Deer Park","WA","47.951939","-117.472694","-8","1" +"99101","Addy","WA","48.305861","-117.94318","-8","1" +"99102","Albion","WA","46.793604","-117.25208","-8","1" +"99103","Almira","WA","47.721863","-118.95554","-8","1" +"99104","Belmont","WA","47.079345","-117.176954","-8","1" +"99105","Benge","WA","46.866805","-118.13247","-8","1" +"99107","Boyds","WA","48.84269","-118.182764","-8","1" +"99109","Chewelah","WA","48.269784","-117.73437","-8","1" +"99110","Clayton","WA","48.012084","-117.57306","-8","1" +"99111","Colfax","WA","46.875136","-117.4092","-8","1" +"99113","Colton","WA","46.577614","-117.16133","-8","1" +"99114","Colville","WA","48.658512","-117.7671","-8","1" +"99115","Coulee City","WA","47.646132","-119.3827","-8","1" +"99116","Coulee Dam","WA","47.995847","-118.95862","-8","1" +"99117","Creston","WA","47.757764","-118.49343","-8","1" +"99118","Curlew","WA","48.890892","-118.64475","-8","1" +"99119","Cusick","WA","48.504786","-117.31689","-8","1" +"99121","Danville","WA","48.977629","-118.51457","-8","1" +"99122","Davenport","WA","47.671143","-118.18938","-8","1" +"99123","Electric City","WA","47.907923","-119.06531","-8","1" +"99124","Elmer City","WA","47.998468","-118.95248","-8","1" +"99125","Endicott","WA","46.941628","-117.7293","-8","1" +"99126","Evans","WA","48.733324","-117.97348","-8","1" +"99127","Saint John","WA","46.838747","-117.644337","-8","1" +"99128","Farmington","ID","47.091551","-116.99158","-8","1" +"99129","Fruitland","WA","48.003202","-118.21339","-8","1" +"99130","Garfield","WA","46.983768","-117.19597","-8","1" +"99131","Gifford","WA","48.290089","-118.09326","-8","1" +"99133","Grand Coulee","WA","47.947097","-119.00713","-8","1" +"99134","Harrington","WA","47.460312","-118.38258","-8","1" +"99135","Hartline","WA","47.641983","-119.08897","-8","1" +"99136","Hay","WA","46.669207","-117.96015","-8","1" +"99137","Hunters","WA","48.174649","-118.11361","-8","1" +"99138","Inchelium","WA","48.207661","-118.2979","-8","1" +"99139","Ione","WA","48.736168","-117.4111","-8","1" +"99140","Keller","WA","48.080515","-118.69498","-8","1" +"99141","Kettle Falls","WA","48.690209","-118.10045","-8","1" +"99143","Lacrosse","WA","46.792982","-117.91313","-8","1" +"99144","Lamona","WA","47.60894","-118.399551","-8","1" +"99146","Laurier","WA","48.92816","-118.2897","-8","1" +"99147","Lincoln","WA","47.60894","-118.399551","-8","1" +"99148","Loon Lake","WA","48.102048","-117.6013","-8","1" +"99149","Malden","WA","47.227436","-117.47364","-8","1" +"99150","Malo","WA","48.810879","-118.59088","-8","1" +"99151","Marcus","WA","48.664206","-118.06417","-8","1" +"99152","Metaline","WA","48.858688","-117.39106","-8","1" +"99153","Metaline Falls","WA","48.858518","-117.29833","-8","1" +"99154","Mohler","WA","47.376884","-118.3799","-8","1" +"99155","Nespelem","WA","48.17266","-119.00126","-8","1" +"99156","Newport","WA","48.159752","-117.16984","-8","1" +"99157","Northport","WA","48.897876","-117.81647","-8","1" +"99158","Oakesdale","WA","47.136249","-117.25463","-8","1" +"99159","Odessa","WA","47.338736","-118.70235","-8","1" +"99160","Orient","WA","48.86407","-118.20557","-8","1" +"99161","Palouse","WA","46.905132","-117.10575","-8","1" +"99163","Pullman","WA","46.732705","-117.18648","-8","1" +"99164","Pullman","WA","46.838747","-117.644337","-8","1" +"99165","Pullman","WA","46.838747","-117.644337","-8","1" +"99166","Republic","WA","48.657684","-118.72647","-8","1" +"99167","Rice","WA","48.406582","-118.11029","-8","1" +"99169","Ritzville","WA","47.107228","-118.43136","-8","1" +"99170","Rosalia","WA","47.240334","-117.37365","-8","1" +"99171","Saint John","WA","47.11653","-117.63938","-8","1" +"99173","Springdale","WA","48.030848","-117.79563","-8","1" +"99174","Steptoe","WA","46.838747","-117.644337","-8","1" +"99176","Thornton","WA","47.117965","-117.41047","-8","1" +"99179","Uniontown","WA","46.516794","-117.08202","-8","1" +"99180","Usk","WA","48.295497","-117.29236","-8","1" +"99181","Valley","WA","48.144634","-117.74564","-8","1" +"99185","Wilbur","WA","47.756616","-118.70628","-8","1" +"99201","Spokane","WA","47.663945","-117.43185","-8","1" +"99202","Spokane","WA","47.656692","-117.37899","-8","1" +"99203","Spokane","WA","47.629091","-117.40636","-8","1" +"99204","Spokane","WA","47.648941","-117.43174","-8","1" +"99205","Spokane","WA","47.69399","-117.43979","-8","1" +"99206","Spokane","WA","47.646994","-117.25912","-8","1" +"99207","Spokane","WA","47.693741","-117.38829","-8","1" +"99208","Spokane","WA","47.740491","-117.43916","-8","1" +"99209","Spokane","WA","47.646148","-117.793734","-8","1" +"99210","Spokane","WA","47.653568","-117.431742","-8","1" +"99211","Spokane","WA","47.653568","-117.431742","-8","1" +"99212","Spokane","WA","47.668926","-117.30668","-8","1" +"99213","Spokane","WA","47.656726","-117.282483","-8","1" +"99214","Spokane","WA","47.653568","-117.431742","-8","1" +"99215","Spokane","WA","47.653568","-117.431742","-8","1" +"99216","Spokane","WA","47.665819","-117.21699","-8","1" +"99217","Spokane","WA","47.707542","-117.33776","-8","1" +"99218","Spokane","WA","47.751674","-117.4124","-8","1" +"99219","Spokane","WA","47.653568","-117.431742","-8","1" +"99220","Spokane","WA","47.653568","-117.431742","-8","1" +"99223","Spokane","WA","47.614744","-117.35892","-8","1" +"99224","Spokane","WA","47.632573","-117.49326","-8","1" +"99228","Spokane","WA","47.653568","-117.431742","-8","1" +"99251","Spokane","WA","47.653568","-117.431742","-8","1" +"99252","Spokane","WA","47.653568","-117.431742","-8","1" +"99256","Spokane","WA","47.653568","-117.431742","-8","1" +"99258","Spokane","WA","47.653568","-117.431742","-8","1" +"99260","Spokane","WA","47.653568","-117.431742","-8","1" +"99299","Spokane","WA","47.653568","-117.431742","-8","1" +"99301","Pasco","WA","46.270249","-119.09462","-8","1" +"99302","Pasco","WA","46.234957","-119.094271","-8","1" +"99309","Mattawa","WA","46.731046","-119.901931","-8","1" +"99319","Desert Aire","WA","46.68039","-119.911288","-8","1" +"99320","Benton City","WA","46.263399","-119.47909","-8","1" +"99321","Beverly","WA","46.834349","-119.93088","-8","1" +"99322","Bickleton","WA","45.963054","-120.25547","-8","1" +"99323","Burbank","WA","46.191158","-118.87987","-8","1" +"99324","College Place","WA","46.044936","-118.38466","-8","1" +"99326","Connell","WA","46.675704","-118.8823","-8","1" +"99327","Cunningham","WA","46.828931","-118.829153","-8","1" +"99328","Dayton","WA","46.319087","-117.96887","-8","1" +"99329","Dixie","WA","46.138753","-118.15325","-8","1" +"99330","Eltopia","WA","46.467186","-119.06888","-8","1" +"99332","Hatton","WA","46.776386","-118.82892","-8","1" +"99333","Hooper","WA","46.838747","-117.644337","-8","1" +"99335","Kahlotus","WA","46.648121","-118.55652","-8","1" +"99336","Kennewick","WA","46.210957","-119.16369","-8","1" +"99337","Kennewick","WA","46.169982","-119.10456","-8","1" +"99338","Kennewick","WA","46.192356","-119.23982","-8","1" +"99341","Lind","WA","46.912194","-118.63676","-8","1" +"99343","Mesa","WA","46.581454","-119.12107","-8","1" +"99344","Othello","WA","46.843397","-119.17443","-8","1" +"99345","Paterson","WA","45.922025","-119.67687","-8","1" +"99346","Plymouth","WA","45.960734","-119.35637","-8","1" +"99347","Pomeroy","WA","46.44754","-117.57295","-8","1" +"99348","Prescott","WA","46.408852","-118.44876","-8","1" +"99349","Mattawa","WA","46.726526","-119.8857","-8","1" +"99350","Prosser","WA","46.208571","-119.74507","-8","1" +"99352","Richland","WA","46.279657","-119.28137","-8","1" +"99353","West Richland","WA","46.297139","-119.35457","-8","1" +"99356","Roosevelt","WA","45.816528","-120.28372","-8","1" +"99357","Royal City","WA","46.922079","-119.67175","-8","1" +"99359","Starbuck","WA","46.523206","-118.19393","-8","1" +"99360","Touchet","WA","46.059286","-118.67264","-8","1" +"99361","Waitsburg","WA","46.209202","-118.15884","-8","1" +"99362","Walla Walla","OR","45.986775","-118.07919","-8","1" +"99363","Wallula","WA","46.059013","-118.88468","-8","1" +"99371","Washtucna","WA","46.782783","-118.2869","-8","1" +"99401","Anatone","WA","46.086657","-117.2491","-8","1" +"99402","Asotin","WA","46.230508","-117.12916","-8","1" +"99403","Clarkston","WA","46.400365","-117.08313","-8","1" +"99501","Anchorage","AK","61.216799","-149.87828","-9","1" +"99502","Anchorage","AK","61.153693","-149.95932","-9","1" +"99503","Anchorage","AK","61.19026","-149.89341","-9","1" +"99504","Anchorage","AK","61.204466","-149.74633","-9","1" +"99505","Fort Richardson","AK","61.261518","-149.66336","-9","1" +"99506","Elmendorf AFB","AK","61.224384","-149.77461","-9","1" +"99507","Anchorage","AK","61.154834","-149.82865","-9","1" +"99508","Anchorage","AK","61.203953","-149.8144","-9","1" +"99509","Anchorage","AK","61.108864","-149.440311","-9","1" +"99510","Anchorage","AK","61.144568","-149.878418","-9","1" +"99511","Anchorage","AK","61.068324","-149.800476","-9","1" +"99512","Anchorage","AK","61.203954","-149.808426","-9","1" +"99513","Anchorage","AK","61.214877","-149.88617","-9","1" +"99514","Anchorage","AK","61.108864","-149.440311","-9","1" +"99515","Anchorage","AK","61.122943","-149.88852","-9","1" +"99516","Anchorage","AK","61.101142","-149.77311","-9","1" +"99517","Anchorage","AK","61.188276","-149.93438","-9","1" +"99518","Anchorage","AK","61.156565","-149.88335","-9","1" +"99519","Anchorage","AK","61.108864","-149.440311","-9","1" +"99520","Anchorage","AK","61.108864","-149.440311","-9","1" +"99521","Anchorage","AK","61.108864","-149.440311","-9","1" +"99522","Anchorage","AK","61.108864","-149.440311","-9","1" +"99523","Anchorage","AK","61.108864","-149.440311","-9","1" +"99524","Anchorage","AK","61.108864","-149.440311","-9","1" +"99536","Kennewick","WA","46.216706","-119.160173","-8","1" +"99540","Indian","AK","60.973454","-149.4583","-9","1" +"99546","Adak","AK","51.87957","-176.63675","-10","1" +"99547","Atka","AK","52.227555","-174.19628","-10","1" +"99548","Chignik Lake","AK","56.252156","-158.74638","-9","1" +"99549","Port Heiden","AK","56.946256","-158.62832","-9","1" +"99550","Port Lions","AK","57.867089","-152.88568","-9","1" +"99551","Akiachak","AK","60.88981","-161.42393","-9","1" +"99552","Akiak","AK","60.911865","-161.22577","-9","1" +"99553","Akutan","AK","54.098693","-165.88176","-9","1" +"99554","Alakanuk","AK","62.683391","-164.65455","-9","1" +"99555","Aleknagik","AK","59.269535","-158.62458","-9","1" +"99556","Anchor Point","AK","59.798363","-151.73566","-9","1" +"99557","Aniak","AK","61.570981","-158.88072","-9","1" +"99558","Anvik","AK","62.632905","-160.21336","-9","1" +"99559","Bethel","AK","60.766603","-161.88006","-9","1" +"99561","Chefornak","AK","60.143735","-164.25283","-9","1" +"99563","Chevak","AK","61.527953","-165.57029","-9","1" +"99564","Chignik","AK","56.298297","-158.4044","-9","1" +"99565","Chignik Lagoon","AK","56.307535","-158.53502","-9","1" +"99566","Chitina","AK","61.555701","-144.14233","-9","1" +"99567","Chugiak","AK","61.413717","-149.42644","-9","1" +"99568","Clam Gulch","AK","60.23458","-151.3934","-9","1" +"99569","Clarks Point","AK","58.83256","-158.55254","-9","1" +"99571","Cold Bay","AK","55.315003","-162.634","-9","1" +"99572","Cooper Landing","AK","60.484146","-149.78153","-9","1" +"99573","Copper Center","AK","61.832347","-145.2308","-9","1" +"99574","Cordova","AK","60.474512","-145.40256","-9","1" +"99575","Crooked Creek","AK","61.859821","-158.12888","-9","1" +"99576","Dillingham","AK","59.068709","-158.44407","-9","1" +"99577","Eagle River","AK","61.310222","-149.51689","-9","1" +"99578","Eek","AK","60.214239","-162.03799","-9","1" +"99579","Egegik","AK","58.217621","-157.34841","-9","1" +"99580","Ekwok","AK","59.360233","-157.4838","-9","1" +"99581","Emmonak","AK","62.729019","-164.29917","-9","1" +"99583","False Pass","AK","54.849999","-163.42011","-9","1" +"99584","Flat","AK","65.226375","-151.025085","-9","1" +"99585","Marshall","AK","61.878073","-162.08481","-9","1" +"99586","Gakona","AK","62.667589","-144.49059","-9","1" +"99587","Girdwood","AK","60.952049","-149.0838","-9","1" +"99588","Glennallen","AK","62.12042","-145.58592","-9","1" +"99589","Goodnews Bay","AK","59.125873","-161.59999","-9","1" +"99590","Grayling","AK","62.90813","-160.06675","-9","1" +"99591","Saint George Island","AK","56.605546","-169.55958","-10","1" +"99599","Anchorage","AK","61.187188","-149.880393","-9","1" +"99602","Holy Cross","AK","62.198048","-159.77341","-9","1" +"99603","Homer","AK","59.665074","-151.4493","-9","1" +"99604","Hooper Bay","AK","61.52898","-166.09619","-9","1" +"99605","Hope","AK","60.911003","-149.62708","-9","1" +"99606","Iliamna","AK","59.748806","-154.8124","-9","1" +"99607","Kalskag","AK","61.535511","-160.30165","-9","1" +"99608","Karluk","AK","57.578081","-154.36255","-9","1" +"99609","Kasigluk","AK","60.873178","-162.5196","-9","1" +"99610","Kasilof","AK","60.318451","-151.28948","-9","1" +"99611","Kenai","AK","60.587598","-151.23355","-9","1" +"99612","King Cove","AK","55.063736","-162.3124","-9","1" +"99613","King Salmon","AK","58.687446","-156.64007","-9","1" +"99614","Kipnuk","AK","59.937619","-164.04392","-9","1" +"99615","Kodiak","AK","57.74663","-152.51142","-9","1" +"99619","Kodiak","AK","58.268704","-155.797078","-9","1" +"99620","Kotlik","AK","62.945434","-163.76142","-9","1" +"99621","Kwethluk","AK","60.810509","-161.4219","-9","1" +"99622","Kwigillingok","AK","59.870295","-163.16752","-9","1" +"99624","Larsen Bay","AK","57.529161","-154.00286","-9","1" +"99625","Levelock","AK","59.116273","-156.84802","-9","1" +"99626","Lower Kalskag","AK","61.518175","-160.37019","-9","1" +"99627","McGrath","AK","62.94914","-155.57265","-9","1" +"99628","Manokotak","AK","58.981087","-159.0558","-9","1" +"99630","Mekoryuk","AK","60.364246","-166.28601","-9","1" +"99631","Moose Pass","AK","60.499602","-149.40247","-9","1" +"99632","Mountain Village","AK","62.090075","-163.72393","-9","1" +"99633","Naknek","AK","58.745436","-156.95331","-9","1" +"99634","Napakiak","AK","60.695049","-161.9909","-9","1" +"99635","Nikiski","AK","60.784804","-151.06473","-9","1" +"99636","New Stuyahok","AK","59.452339","-157.31368","-9","1" +"99637","Toksook Bay","AK","60.532936","-165.10529","-9","1" +"99638","Nikolski","AK","52.785684","-169.19469","-10","1" +"99639","Ninilchik","AK","59.992821","-151.54194","-9","1" +"99640","Nondalton","AK","59.971286","-154.85008","-9","1" +"99641","Nunapitchuk","AK","60.898967","-162.43712","-9","1" +"99643","Old Harbor","AK","57.19926","-153.30438","-9","1" +"99644","Ouzinkie","AK","57.929664","-152.46085","-9","1" +"99645","Palmer","AK","61.598203","-149.04109","-9","1" +"99646","Palmer","AK","61.586896","-149.094699","-9","1" +"99647","Pedro Bay","AK","59.781241","-154.10833","-9","1" +"99648","Perryville","AK","55.91076","-159.15591","-9","1" +"99649","Pilot Point","AK","57.508178","-157.39907","-9","1" +"99650","Pilot Station","AK","61.93605","-162.8834","-9","1" +"99651","Platinum","AK","59.00689","-161.81529","-9","1" +"99652","Big Lake","AK","61.556311","-149.89098","-9","1" +"99653","Port Alsworth","AK","60.102331","-154.55708","-9","1" +"99654","Wasilla","AK","61.580187","-149.48821","-9","1" +"99655","Quinhagak","AK","59.754016","-161.90079","-9","1" +"99656","Red Devil","AK","61.810587","-157.3437","-9","1" +"99657","Russian Mission","AK","61.785228","-161.36476","-9","1" +"99658","Saint Marys","AK","62.048263","-163.1937","-9","1" +"99659","Saint Michael","AK","63.477448","-162.03841","-9","1" +"99660","Saint Paul Island","AK","57.130894","-170.27203","-10","1" +"99661","Sand Point","AK","55.311735","-160.48813","-9","1" +"99662","Scammon Bay","AK","61.783788","-165.53972","-9","1" +"99663","Seldovia","AK","59.422698","-151.71513","-9","1" +"99664","Seward","AK","60.151652","-149.41271","-9","1" +"99665","Shageluk","AK","62.655998","-159.53113","-9","1" +"99666","Sheldon Point","AK","62.495675","-164.97188","-9","1" +"99667","Skwentna","AK","61.898872","-151.51587","-9","1" +"99668","Sleetmute","AK","61.683931","-157.15202","-9","1" +"99669","Soldotna","AK","60.489536","-151.02091","-9","1" +"99670","South Naknek","AK","58.71163","-157.01746","-9","1" +"99671","Stebbins","AK","63.511893","-162.27463","-9","1" +"99672","Sterling","AK","60.532394","-150.74033","-9","1" +"99674","Sutton","AK","61.751348","-148.69632","-9","1" +"99675","Takotna","AK","62.969642","-156.10264","-9","1" +"99676","Talkeetna","AK","62.298254","-149.87542","-9","1" +"99677","Tatitlek","AK","60.863764","-146.68013","-9","1" +"99678","Togiak","AK","59.101934","-160.50353","-9","1" +"99679","Tuluksak","AK","61.102912","-160.96325","-9","1" +"99680","Tuntutuliak","AK","60.343879","-162.66587","-9","1" +"99681","Tununak","AK","60.582127","-165.25645","-9","1" +"99682","Tyonek","AK","61.067777","-151.14169","-9","1" +"99683","Trapper Creek","AK","62.415294","-150.37044","-9","1" +"99684","Unalakleet","AK","63.882081","-160.76294","-9","1" +"99685","Unalaska","AK","53.872017","-166.52287","-10","1" +"99686","Valdez","AK","61.128176","-146.2357","-9","1" +"99687","Wasilla","AK","61.391728","-149.99002","-9","1" +"99688","Willow","AK","61.796774","-150.07792","-9","1" +"99689","Yakutat","AK","59.538728","-139.71052","-9","1" +"99690","Nightmute","AK","60.527618","-164.81976","-9","1" +"99691","Nikolai","AK","62.999213","-154.41957","-9","1" +"99692","Dutch Harbor","AK","53.883729","-166.5485","-10","1" +"99693","Whittier","AK","60.639257","-148.54211","-9","1" +"99694","Houston","AK","61.629635","-149.79507","-9","1" +"99695","Anchorage","AK","61.402544","-150.57485","-9","1" +"99697","Kodiak","AK","57.564289","-153.40755","-9","1" +"99699","Funny River","AK","60.516935","-150.719924","-9","1" +"99701","Fairbanks","AK","64.83507","-147.72045","-9","1" +"99702","Eielson AFB","AK","64.661627","-147.02121","-9","1" +"99703","Fort Wainwright","AK","64.827164","-147.6265","-9","1" +"99704","Clear","AK","64.289856","-149.17778","-9","1" +"99705","North Pole","AK","64.777233","-147.3649","-9","1" +"99706","Fairbanks","AK","64.852055","-147.937747","-9","1" +"99707","Fairbanks","AK","64.699839","-147.405134","-9","1" +"99708","Fairbanks","AK","64.947462","-147.856443","-9","1" +"99709","Fairbanks","AK","64.854937","-147.87406","-9","1" +"99710","Fairbanks","AK","64.948648","-147.535549","-9","1" +"99711","Fairbanks","AK","64.826445","-147.38884","-9","1" +"99712","Fairbanks","AK","64.926041","-147.49573","-9","1" +"99714","Salcha","AK","64.464105","-146.91648","-9","1" +"99716","Two Rivers","AK","64.874591","-146.898195","-9","1" +"99720","Allakaket","AK","66.557586","-152.6559","-9","1" +"99721","Anaktuvuk Pass","AK","68.148216","-151.72854","-9","1" +"99722","Arctic Village","AK","68.121828","-145.52768","-9","1" +"99723","Barrow","AK","71.299525","-156.74891","-9","1" +"99724","Beaver","AK","66.359719","-147.39743","-9","1" +"99725","Ester","AK","64.842326","-148.02197","-9","1" +"99726","Bettles Field","AK","66.917381","-151.50508","-9","1" +"99727","Buckland","AK","65.979144","-161.12225","-9","1" +"99729","Cantwell","AK","63.255516","-148.39873","-9","1" +"99730","Central","AK","65.551022","-144.71982","-9","1" +"99732","Chicken","AK","64.070738","-141.87489","-9","1" +"99733","Circle","AK","65.796306","-144.06388","-9","1" +"99734","Prudhoe Bay","AK","66.693255","-153.993988","-9","1" +"99736","Deering","AK","66.075713","-162.71822","-9","1" +"99737","Delta Junction","AK","63.978355","-145.4623","-9","1" +"99738","Eagle","AK","64.778099","-141.19257","-9","1" +"99739","Elim","AK","64.620513","-162.27718","-9","1" +"99740","Fort Yukon","AK","66.566652","-145.28231","-9","1" +"99741","Galena","AK","64.739082","-156.89456","-9","1" +"99742","Gambell","AK","63.776098","-171.70088","-9","1" +"99743","Healy","AK","64.010218","-149.10712","-9","1" +"99744","Anderson","AK","64.349263","-149.19265","-9","1" +"99745","Hughes","AK","66.044094","-154.25703","-9","1" +"99746","Huslia","AK","65.701858","-156.38713","-9","1" +"99747","Kaktovik","AK","70.13346","-143.62436","-9","1" +"99748","Kaltag","AK","64.324887","-158.73204","-9","1" +"99749","Kiana","AK","66.97172","-160.43016","-9","1" +"99750","Kivalina","AK","67.733313","-164.54522","-9","1" +"99751","Kobuk","AK","66.908604","-156.88828","-9","1" +"99752","Kotzebue","AK","66.897192","-162.58544","-9","1" +"99753","Koyuk","AK","64.932225","-161.15597","-9","1" +"99754","Koyukuk","AK","64.881745","-157.70439","-9","1" +"99755","Denali National Park","AK","63.657441","-148.83396","-9","1" +"99756","Manley Hot Springs","AK","65.021337","-150.50318","-9","1" +"99757","Lake Minchumina","AK","63.893902","-152.30201","-9","1" +"99758","Minto","AK","65.152583","-149.39156","-9","1" +"99759","Point Lay","AK","69.741023","-163.00861","-9","1" +"99760","Nenana","AK","64.560888","-149.07674","-9","1" +"99761","Noatak","AK","67.572031","-162.97508","-9","1" +"99762","Nome","AK","64.532616","-165.10883","-9","1" +"99763","Noorvik","AK","66.83713","-161.03664","-9","1" +"99764","Northway","AK","62.980725","-141.82852","-9","1" +"99765","Nulato","AK","64.730035","-158.11178","-9","1" +"99766","Point Hope","AK","68.347052","-166.76291","-9","1" +"99767","Rampart","AK","65.507883","-150.1636","-9","1" +"99768","Ruby","AK","64.737306","-155.48769","-9","1" +"99769","Savoonga","AK","63.686038","-170.4087","-9","1" +"99770","Selawik","AK","66.597998","-160.01772","-9","1" +"99771","Shaktoolik","AK","64.343258","-161.16785","-9","1" +"99772","Shishmaref","AK","66.259417","-165.73202","-9","1" +"99773","Shungnak","AK","66.887401","-157.14287","-9","1" +"99774","Stevens Village","AK","66.005296","-149.10303","-9","1" +"99775","Fairbanks","AK","64.860846","-147.82681","-9","1" +"99776","Tanacross","AK","63.376206","-143.35699","-9","1" +"99777","Tanana","AK","65.172029","-152.08258","-9","1" +"99778","Teller","AK","65.250432","-166.35474","-9","1" +"99779","Tetlin","AK","63.135294","-142.5323","-9","1" +"99780","Tok","AK","63.341767","-142.93704","-9","1" +"99781","Venetie","AK","67.015569","-146.41736","-9","1" +"99782","Wainwright","AK","70.640902","-160.02481","-9","1" +"99783","Wales","AK","65.612116","-168.08928","-9","1" +"99784","White Mountain","AK","64.684323","-163.44257","-9","1" +"99785","Brevig Mission","AK","65.342744","-166.51023","-9","1" +"99786","Ambler","AK","67.083658","-157.86225","-9","1" +"99788","Chalkyitsik","AK","66.653222","-143.72717","-9","1" +"99789","Nuiqsut","AK","70.215197","-151.02746","-9","1" +"99790","Fairbanks","AK","64.856055","-146.27598","-9","1" +"99791","Atqasuk","AK","70.477663","-157.41805","-9","1" +"99801","Juneau","AK","58.358599","-134.54749","-9","1" +"99802","Juneau","AK","58.405657","-134.58969","-9","1" +"99803","Juneau","AK","58.377074","-134.617383","-9","1" +"99811","Juneau","AK","58.38348","-134.197786","-9","1" +"99820","Angoon","AK","57.48765","-134.57222","-9","1" +"99821","Auke Bay","AK","58.449413","-134.700348","-9","1" +"99824","Douglas","AK","58.276192","-134.39781","-9","1" +"99825","Elfin Cove","AK","58.068878","-136.27833","-9","1" +"99826","Gustavus","AK","58.434052","-135.73088","-9","1" +"99827","Haines","AK","59.279037","-135.6122","-9","1" +"99829","Hoonah","AK","58.109608","-135.43154","-9","1" +"99830","Kake","AK","56.975011","-133.9323","-9","1" +"99832","Pelican","AK","57.959709","-136.22032","-9","1" +"99833","Petersburg","AK","56.784206","-132.97354","-9","1" +"99835","Sitka","AK","57.064376","-135.3227","-9","1" +"99836","Port Alexander","AK","56.53595","-132.827948","-9","1" +"99840","Skagway","AK","59.465159","-135.31355","-9","1" +"99841","Tenakee Springs","AK","57.777622","-135.20777","-9","1" +"99850","Juneau","AK","58.411303","-135.40874","-9","1" +"99901","Ketchikan","AK","55.368644","-131.6762","-9","1" +"99903","Meyers Chuck","AK","55.742045","-132.25002","-9","1" +"99918","Coffman Cove","AK","56.009124","-132.82018","-9","1" +"99919","Thorne Bay","AK","55.677232","-132.55624","-9","1" +"99921","Craig","AK","55.456449","-133.02648","-9","1" +"99922","Hydaburg","AK","55.209339","-132.82545","-9","1" +"99923","Hyder","AK","55.941442","-130.0545","-9","1" +"99925","Klawock","AK","55.555164","-133.07316","-9","1" +"99926","Metlakatla","AK","55.123897","-131.56883","-9","1" +"99927","Point Baker","AK","56.337957","-133.60689","-9","1" +"99928","Ward Cove","AK","55.395359","-131.67537","-9","1" +"99929","Wrangell","AK","56.409507","-132.33822","-9","1" +"99950","Ketchikan","AK","55.875767","-131.46633","-9","1" From ee4652702340a2da4fa716d635aa7d99ff7f6b99 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 03:59:41 -0500 Subject: [PATCH 153/270] Fix tests --- core/math/integers/integers-tests.factor | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/math/integers/integers-tests.factor b/core/math/integers/integers-tests.factor index 93567ee71a..d576bb312f 100755 --- a/core/math/integers/integers-tests.factor +++ b/core/math/integers/integers-tests.factor @@ -192,6 +192,8 @@ unit-test [ f ] [ 0 power-of-2? ] unit-test [ t ] [ 1 power-of-2? ] unit-test +: ratio>float [ >bignum ] bi@ /f ; + [ 5. ] [ 5 1 ratio>float ] unit-test [ 4. ] [ 4 1 ratio>float ] unit-test [ 2. ] [ 2 1 ratio>float ] unit-test @@ -214,6 +216,6 @@ unit-test drop random-integer random-integer - [ >float / ] [ ratio>float ] 2bi 0.1 ~ + [ >float / ] [ /f ] 2bi 0.1 ~ ] all? ] unit-test From 2c99f7c0a0681143dfc5e5d0cdf6b8d55ee2f736 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 29 Apr 2008 04:59:15 -0500 Subject: [PATCH 154/270] update: Update the clean image location --- extra/update/update.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/update/update.factor b/extra/update/update.factor index 9b10ea746f..1d25a9792e 100644 --- a/extra/update/update.factor +++ b/extra/update/update.factor @@ -22,7 +22,8 @@ IN: update ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : remote-clean-image ( -- url ) - "http://factorcode.org/images/clean/" my-boot-image-name append ; + { "http://factorcode.org/images/clean/" platform "/" my-boot-image-name } + to-string ; : download-clean-image ( -- ) remote-clean-image download ; From 453f55cc5dd18f0af4531f92e91d5f3137c0588a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 05:58:34 -0500 Subject: [PATCH 155/270] Rename session-manager to sessions --- extra/http/http-tests.factor | 4 +- .../server/sessions/sessions-tests.factor | 61 +++++------ extra/http/server/sessions/sessions.factor | 101 ++++++++++-------- extra/webapps/counter/counter.factor | 29 +++++ extra/webapps/counter/counter.fhtml | 10 ++ .../factor-website/factor-website.factor | 2 +- 6 files changed, 126 insertions(+), 81 deletions(-) create mode 100644 extra/webapps/counter/counter.factor create mode 100644 extra/webapps/counter/counter.fhtml diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index e624f56573..0791ce9401 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -194,7 +194,7 @@ test-db [ - + sessions-in-db >>sessions "" add-responder add-quit-action @@ -225,7 +225,7 @@ test-db [ [ "text/plain" [ "Hi" write ] >>body ] >>display - + sessions-in-db >>sessions "" add-responder add-quit-action diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index c95ff30069..b4cf0bd679 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -1,16 +1,12 @@ IN: http.server.sessions.tests USING: tools.test http http.server.sessions -http.server.sessions.storage http.server.sessions.storage.db http.server.actions http.server math namespaces kernel accessors prettyprint io.streams.string io.files splitting destructors sequences db db.sqlite continuations ; : with-session [ - >r - [ session-manager get swap save-session-after ] - [ \ session set ] bi - r> call + >r [ save-session-after ] [ session set ] bi r> call ] with-destructors ; inline TUPLE: foo ; @@ -31,18 +27,18 @@ M: foo call-responder* "id" get session-id-key set-query-param "/" >>path request set - { } session-manager get call-responder + { } sessions get call-responder [ write-response-body drop ] with-string-writer ] with-destructors ; -: session-manager-mock-test +: sessions-mock-test [ "GET" >>method "cookies" get >>cookies "/" >>path request set - { } session-manager get call-responder + { } sessions get call-responder [ write-response-body drop ] with-string-writer ] with-destructors ; @@ -60,14 +56,15 @@ M: foo call-responder* init-sessions-table [ ] [ - - sessions-in-db >>sessions - session-manager set + + sessions set ] unit-test [ - empty-session - 123 >>id session set + [ ] [ + empty-session + 123 >>id session set + ] unit-test [ ] [ 3 "x" sset ] unit-test @@ -81,39 +78,38 @@ M: foo call-responder* ] with-scope [ t ] [ - session-manager get begin-session id>> - session-manager get sessions>> get-session session? + begin-session id>> + get-session session? ] unit-test [ { 5 0 } ] [ [ - session-manager get begin-session + begin-session dup [ 5 "a" sset ] with-session dup [ "a" sget , ] with-session dup [ "x" sget , ] with-session - id>> session-manager get sessions>> delete-session + drop ] { } make ] unit-test [ 0 ] [ - session-manager get begin-session id>> - session-manager get sessions>> get-session [ "x" sget ] with-session + begin-session id>> + get-session [ "x" sget ] with-session ] unit-test [ { 5 0 } ] [ [ - session-manager get begin-session id>> - dup session-manager get sessions>> get-session [ 5 "a" sset ] with-session - dup session-manager get sessions>> get-session [ "a" sget , ] with-session - dup session-manager get sessions>> get-session [ "x" sget , ] with-session - session-manager get sessions>> delete-session + begin-session id>> + dup get-session [ 5 "a" sset ] with-session + dup get-session [ "a" sget , ] with-session + dup get-session [ "x" sget , ] with-session + drop ] { } make ] unit-test [ ] [ - - sessions-in-db >>sessions - session-manager set + + sessions set ] unit-test [ @@ -121,7 +117,7 @@ M: foo call-responder* "GET" >>method "/" >>path request set - { "etc" } session-manager get call-responder response set + { "etc" } sessions get call-responder response set [ "1" ] [ [ response get write-response-body drop ] with-string-writer ] unit-test response get ] with-destructors @@ -129,9 +125,9 @@ M: foo call-responder* [ ] [ response get cookies>> "cookies" set ] unit-test - [ "2" ] [ session-manager-mock-test ] unit-test - [ "3" ] [ session-manager-mock-test ] unit-test - [ "4" ] [ session-manager-mock-test ] unit-test + [ "2" ] [ sessions-mock-test ] unit-test + [ "3" ] [ sessions-mock-test ] unit-test + [ "4" ] [ sessions-mock-test ] unit-test [ [ ] [ @@ -142,8 +138,7 @@ M: foo call-responder* request set [ - { } - sessions-in-db >>sessions + { } call-responder ] with-destructors response set ] unit-test diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor index df2a5bbd28..a428fb79b9 100755 --- a/extra/http/server/sessions/sessions.factor +++ b/extra/http/server/sessions/sessions.factor @@ -1,13 +1,10 @@ ! Copyright (C) 2008 Doug Coleman, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs kernel math.parser namespaces random -accessors quotations hashtables sequences continuations -fry calendar combinators destructors -http -http.server -http.server.sessions.storage -http.server.sessions.storage.null -html.elements ; +USING: assocs kernel math.intervals math.parser namespaces +random accessors quotations hashtables sequences continuations +fry calendar combinators destructors alarms +db db.tuples db.types +http http.server html.elements ; IN: http.server.sessions TUPLE: session id expires namespace changed? ; @@ -16,6 +13,28 @@ TUPLE: session id expires namespace changed? ; session new swap >>id ; +session "SESSIONS" +{ + { "id" "ID" +random-id+ system-random-generator } + { "expires" "EXPIRES" BIG-INTEGER +not-null+ } + { "namespace" "NAMESPACE" FACTOR-BLOB } +} define-persistent + +: get-session ( id -- session ) + dup [ select-tuple ] when ; + +: init-sessions-table session ensure-table ; + +: expired-sessions ( -- session ) + f + -1.0/0.0 now timestamp>millis [a,b] >>expires + select-tuples ; + +: start-expiring-sessions ( db seq -- ) + '[ + , , [ expired-sessions [ delete-tuple ] each ] with-db + ] 5 minutes every drop ; + GENERIC: init-session* ( responder -- ) M: object init-session* drop ; @@ -24,12 +43,11 @@ M: dispatcher init-session* default>> init-session* ; M: filter-responder init-session* responder>> init-session* ; -TUPLE: session-manager < filter-responder sessions timeout domain ; +TUPLE: sessions < filter-responder timeout domain ; -: ( responder -- responder' ) - session-manager new +: ( responder -- responder' ) + sessions new swap >>responder - null-sessions >>sessions 20 minutes >>timeout ; : (session-changed) ( session -- ) @@ -50,11 +68,11 @@ TUPLE: session-manager < filter-responder sessions timeout domain ; [ namespace>> swap change-at ] keep (session-changed) ; inline -: init-session ( session managed -- ) - >r session r> '[ , init-session* ] with-variable ; +: init-session ( session -- ) + session [ sessions get init-session* ] with-variable ; : cutoff-time ( -- time ) - session-manager get timeout>> from-now timestamp>millis ; + sessions get timeout>> from-now timestamp>millis ; : touch-session ( session -- ) cutoff-time >>expires drop ; @@ -64,57 +82,50 @@ TUPLE: session-manager < filter-responder sessions timeout domain ; H{ } clone >>namespace dup touch-session ; -: begin-session ( responder -- session ) - >r empty-session r> - [ init-session ] - [ sessions>> new-session ] - [ drop ] - 2tri ; +: begin-session ( -- session ) + empty-session [ init-session ] [ insert-tuple ] [ ] tri ; ! Destructor -TUPLE: session-saver manager session ; +TUPLE: session-saver session ; C: session-saver M: session-saver dispose - [ session>> ] [ manager>> sessions>> ] bi - over changed?>> [ - [ drop touch-session ] [ update-session ] 2bi - ] [ 2drop ] if ; + session>> dup changed?>> [ + [ touch-session ] [ update-tuple ] bi + ] [ drop ] if ; -: save-session-after ( manager session -- ) +: save-session-after ( session -- ) add-always-destructor ; -: existing-session ( path manager session -- response ) - [ nip session set ] - [ save-session-after ] - [ drop responder>> ] 2tri - call-responder ; +: existing-session ( path session -- response ) + [ session set ] [ save-session-after ] bi + sessions get responder>> call-responder ; : session-id-key "factorsessid" ; -: cookie-session-id ( -- id/f ) - request get session-id-key get-cookie +: cookie-session-id ( request -- id/f ) + session-id-key get-cookie dup [ value>> string>number ] when ; -: post-session-id ( -- id/f ) - session-id-key request get post-data>> at string>number ; +: post-session-id ( request -- id/f ) + session-id-key swap post-data>> at string>number ; : request-session-id ( -- id/f ) - request get method>> { + request get dup method>> { { "GET" [ cookie-session-id ] } { "HEAD" [ cookie-session-id ] } { "POST" [ post-session-id ] } } case ; -: request-session ( responder -- session/f ) - >r request-session-id r> sessions>> get-session ; +: request-session ( -- session/f ) + request-session-id get-session ; : ( id -- cookie ) session-id-key - "$session-manager" resolve-base-path >>path - session-manager get timeout>> from-now >>expires - session-manager get domain>> >>domain ; + "$sessions" resolve-base-path >>path + sessions get timeout>> from-now >>expires + sessions get domain>> >>domain ; : put-session-cookie ( response -- response' ) session get id>> number>string put-cookie ; @@ -126,8 +137,8 @@ M: session-saver dispose session get id>> number>string =value input/> ; -M: session-manager call-responder* ( path responder -- response ) +M: sessions call-responder* ( path responder -- response ) [ session-form-field ] add-form-hook - dup session-manager set - dup request-session [ dup begin-session ] unless* + sessions set + request-session [ begin-session ] unless* existing-session put-session-cookie ; diff --git a/extra/webapps/counter/counter.factor b/extra/webapps/counter/counter.factor new file mode 100644 index 0000000000..37b4c8e5e1 --- /dev/null +++ b/extra/webapps/counter/counter.factor @@ -0,0 +1,29 @@ +USING: math kernel accessors http.server http.server.actions +http.server.sessions http.server.templating.fhtml locals ; +IN: webapps.counter + +SYMBOL: count + +TUPLE: counter-app < dispatcher ; + +M: counter-app init-session* + drop 0 count sset ; + +:: ( quot -- action ) + [ + count quot schange + "" f + ] >>display ; + +: ( -- action ) + [ + "text/html" + "resource:extra/webapps/counter/counter.fhtml" >>body + ] >>display ; + +: ( -- responder ) + counter-app new-dispatcher + [ 1+ ] "inc" add-responder + [ 1- ] "dec" add-responder + "" add-responder + ; diff --git a/extra/webapps/counter/counter.fhtml b/extra/webapps/counter/counter.fhtml new file mode 100644 index 0000000000..521096f105 --- /dev/null +++ b/extra/webapps/counter/counter.fhtml @@ -0,0 +1,10 @@ +<% USING: io math.parser http.server.sessions webapps.counter ; %> + + + +

    <% count sget number>string write %>

    + + ++ + -- + + diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor index 0c7b95525e..4136024f03 100644 --- a/extra/webapps/factor-website/factor-website.factor +++ b/extra/webapps/factor-website/factor-website.factor @@ -47,7 +47,7 @@ IN: webapps.factor-website "page" factor-template >>template - + sessions-in-db >>sessions test-db ; From d2fe9f6abb1c969bf570826182fc8655eff9a159 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 06:01:01 -0500 Subject: [PATCH 156/270] Fix unit tests --- core/math/integers/integers-tests.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/math/integers/integers-tests.factor b/core/math/integers/integers-tests.factor index d576bb312f..db50d262ad 100755 --- a/core/math/integers/integers-tests.factor +++ b/core/math/integers/integers-tests.factor @@ -1,5 +1,5 @@ -USING: kernel math namespaces prettyprint -math.private continuations tools.test sequences ; +USING: kernel math math.functions namespaces prettyprint +math.private continuations tools.test sequences random ; IN: math.integers.tests [ "-8" ] [ -8 unparse ] unit-test From 3d9801a22e2f835a67aa3e7891d1e725e0280390 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 06:01:31 -0500 Subject: [PATCH 157/270] Remove unused vocab --- .../http/server/sessions/storage/db/db.factor | 40 ------------------- .../server/sessions/storage/null/null.factor | 16 -------- .../server/sessions/storage/storage.factor | 12 ------ 3 files changed, 68 deletions(-) delete mode 100755 extra/http/server/sessions/storage/db/db.factor delete mode 100644 extra/http/server/sessions/storage/null/null.factor delete mode 100755 extra/http/server/sessions/storage/storage.factor diff --git a/extra/http/server/sessions/storage/db/db.factor b/extra/http/server/sessions/storage/db/db.factor deleted file mode 100755 index 0d8ad84985..0000000000 --- a/extra/http/server/sessions/storage/db/db.factor +++ /dev/null @@ -1,40 +0,0 @@ -! Copyright (C) 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: assocs accessors kernel http.server.sessions.storage -http.server.sessions http.server db db.tuples db.types math.parser -math.intervals fry random calendar sequences alarms ; -IN: http.server.sessions.storage.db - -SINGLETON: sessions-in-db - -session "SESSIONS" -{ - ! { "id" "ID" +random-id+ system-random-generator } - { "id" "ID" INTEGER +db-assigned-id+ } - { "expires" "EXPIRES" BIG-INTEGER +not-null+ } - { "namespace" "NAMESPACE" FACTOR-BLOB } -} define-persistent - -: init-sessions-table session ensure-table ; - -M: sessions-in-db get-session ( id storage -- session/f ) - drop dup [ select-tuple ] when ; - -M: sessions-in-db update-session ( session storage -- ) - drop update-tuple ; - -M: sessions-in-db delete-session ( id storage -- ) - drop delete-tuple ; - -M: sessions-in-db new-session ( session storage -- ) - drop insert-tuple ; - -: expired-sessions ( -- session ) - f - USE: math now timestamp>millis [ 60 60 * 1000 * - ] keep [a,b] >>expires - select-tuples ; - -: start-expiring-sessions ( db seq -- ) - '[ - , , [ expired-sessions [ delete-tuple ] each ] with-db - ] 5 minutes every drop ; diff --git a/extra/http/server/sessions/storage/null/null.factor b/extra/http/server/sessions/storage/null/null.factor deleted file mode 100644 index e915d57f83..0000000000 --- a/extra/http/server/sessions/storage/null/null.factor +++ /dev/null @@ -1,16 +0,0 @@ -! Copyright (C) 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: kernel http.server.sessions.storage ; -IN: http.server.sessions.storage.null - -SINGLETON: null-sessions - -: null-sessions-error "No session storage installed" throw ; - -M: null-sessions get-session null-sessions-error ; - -M: null-sessions update-session null-sessions-error ; - -M: null-sessions delete-session null-sessions-error ; - -M: null-sessions new-session null-sessions-error ; diff --git a/extra/http/server/sessions/storage/storage.factor b/extra/http/server/sessions/storage/storage.factor deleted file mode 100755 index c605600f7b..0000000000 --- a/extra/http/server/sessions/storage/storage.factor +++ /dev/null @@ -1,12 +0,0 @@ -! Copyright (C) 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: calendar ; -IN: http.server.sessions.storage - -GENERIC: get-session ( id storage -- session ) - -GENERIC: update-session ( session storage -- ) - -GENERIC: delete-session ( id storage -- ) - -GENERIC: new-session ( session storage -- ) From 4c6a05de50dee1fcb12f593fb0a82ee2b0d9d9c9 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 20:43:50 -0500 Subject: [PATCH 158/270] Minor fix: use blank? --- extra/csv/csv.factor | 5 +- extra/usa-cities/usa-cities.factor | 51 +++++++++++++++++++++ extra/{zip-codes => usa-cities}/zipcode.csv | 0 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 extra/usa-cities/usa-cities.factor rename extra/{zip-codes => usa-cities}/zipcode.csv (100%) diff --git a/extra/csv/csv.factor b/extra/csv/csv.factor index ff95be2ead..d774c2d6a4 100644 --- a/extra/csv/csv.factor +++ b/extra/csv/csv.factor @@ -4,7 +4,8 @@ ! Simple CSV Parser ! Phil Dawes phil@phildawes.net -USING: kernel sequences io namespaces combinators ; +USING: kernel sequences io namespaces combinators +unicode.categories ; IN: csv DEFER: quoted-field @@ -29,7 +30,7 @@ DEFER: quoted-field ! trims whitespace from either end of string : trim-whitespace ( str -- str ) - [ "\s\t" member? ] trim ; inline + [ blank? ] trim ; inline : quoted-field ( -- endchar ) "\"" read-until ! " diff --git a/extra/usa-cities/usa-cities.factor b/extra/usa-cities/usa-cities.factor new file mode 100644 index 0000000000..c74673607b --- /dev/null +++ b/extra/usa-cities/usa-cities.factor @@ -0,0 +1,51 @@ +USING: io.files io.encodings.ascii sequences sequences.lib +math.parser combinators kernel memoize csv symbols inspector +words accessors math.order sorting ; +IN: zip-codes + +SINGLETONS: AK AL AR AS AZ CA CO CT DC DE FL GA HI IA ID IL IN +KS KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK +OR PA PR RI SC SD TN TX UT VA VI VT WA WI WV WY ; + +: states ( -- seq ) + { + AK AL AR AS AZ CA CO CT DC DE FL GA HI IA ID IL IN KS KY + LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK + OR PA PR RI SC SD TN TX UT VA VI VT WA WI WV WY + } ; inline + +ERROR: no-such-state name ; + +M: no-such-state summary drop "No such state" ; + +MEMO: string>state ( string -- state ) + dup states [ word-name = ] with find nip + [ ] [ no-such-state ] ?if ; + +TUPLE: city +first-zip name state latitude longitude gmt-offset dst-offset ; + +MEMO: cities ( -- seq ) + "resource:extra/zip-codes/zipcode.csv" ascii + csv rest-slice [ + 7 firstn { + [ string>number ] + [ ] + [ string>state ] + [ string>number ] + [ string>number ] + [ string>number ] + [ string>number ] + } spread city boa + ] map ; + +MEMO: cities-named ( name -- cities ) + cities [ name>> = ] with filter ; + +MEMO: cities-named-in ( name state -- cities ) + cities [ + tuck [ name>> = ] [ state>> = ] 2bi* and + ] with with filter ; + +: find-zip-code ( code -- city ) + cities [ first-zip>> <=> ] binsearch* ; diff --git a/extra/zip-codes/zipcode.csv b/extra/usa-cities/zipcode.csv similarity index 100% rename from extra/zip-codes/zipcode.csv rename to extra/usa-cities/zipcode.csv From 191ac9efb8a3b5b1de99dc03334b239dcb2e1876 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 20:44:07 -0500 Subject: [PATCH 159/270] USA cities database added --- extra/symbols/symbols.factor | 7 ++++++- extra/usa-cities/usa-cities.factor | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/extra/symbols/symbols.factor b/extra/symbols/symbols.factor index f6254f19de..50733a620e 100755 --- a/extra/symbols/symbols.factor +++ b/extra/symbols/symbols.factor @@ -1,9 +1,14 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: parser sequences words kernel ; +USING: parser sequences words kernel classes.singleton ; IN: symbols : SYMBOLS: ";" parse-tokens [ create-in dup reset-generic define-symbol ] each ; parsing + +: SINGLETONS: + ";" parse-tokens + [ create-class-in dup save-location define-singleton-class ] each ; + parsing diff --git a/extra/usa-cities/usa-cities.factor b/extra/usa-cities/usa-cities.factor index c74673607b..b82d058009 100644 --- a/extra/usa-cities/usa-cities.factor +++ b/extra/usa-cities/usa-cities.factor @@ -1,7 +1,9 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. USING: io.files io.encodings.ascii sequences sequences.lib math.parser combinators kernel memoize csv symbols inspector words accessors math.order sorting ; -IN: zip-codes +IN: usa-cities SINGLETONS: AK AL AR AS AZ CA CO CT DC DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK From a452ca9105f87c25a534b411db0ade585e89e197 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:02:46 -0500 Subject: [PATCH 160/270] Improved usa-cities --- extra/usa-cities/usa-cities.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/usa-cities/usa-cities.factor b/extra/usa-cities/usa-cities.factor index b82d058009..0149c6832b 100644 --- a/extra/usa-cities/usa-cities.factor +++ b/extra/usa-cities/usa-cities.factor @@ -28,7 +28,7 @@ TUPLE: city first-zip name state latitude longitude gmt-offset dst-offset ; MEMO: cities ( -- seq ) - "resource:extra/zip-codes/zipcode.csv" ascii + "resource:extra/usa-cities/zipcode.csv" ascii csv rest-slice [ 7 firstn { [ string>number ] From 214949104497ecdc8f1169c25c47879caa607cd3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:03:01 -0500 Subject: [PATCH 161/270] Rename delete-tuple to delete-tuples --- extra/db/queries/queries.factor | 2 +- extra/db/tuples/tuples-tests.factor | 4 ++-- extra/db/tuples/tuples.factor | 6 +++--- extra/semantic-db/semantic-db.factor | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/extra/db/queries/queries.factor b/extra/db/queries/queries.factor index 43ca4f369c..6dab4f80b8 100644 --- a/extra/db/queries/queries.factor +++ b/extra/db/queries/queries.factor @@ -112,7 +112,7 @@ M: string where ( spec obj -- ) object-where ; ] interleave drop ] if ; -M: db ( tuple table -- sql ) +M: db ( tuple table -- sql ) [ "delete from " 0% 0% where-clause diff --git a/extra/db/tuples/tuples-tests.factor b/extra/db/tuples/tuples-tests.factor index 8e6b9bfbe4..4da82d92d6 100755 --- a/extra/db/tuples/tuples-tests.factor +++ b/extra/db/tuples/tuples-tests.factor @@ -68,7 +68,7 @@ SYMBOL: person4 ] [ T{ person f f f 10 3.14 } select-tuples ] unit-test - [ ] [ person1 get delete-tuple ] unit-test + [ ] [ person1 get delete-tuples ] unit-test [ f ] [ T{ person f 1 } select-tuple ] unit-test [ ] [ person3 get insert-tuple ] unit-test @@ -418,7 +418,7 @@ TUPLE: does-not-persist ; \ bind-tuple must-infer \ insert-tuple must-infer \ update-tuple must-infer -\ delete-tuple must-infer +\ delete-tuples must-infer \ select-tuple must-infer \ define-persistent must-infer \ ensure-table must-infer diff --git a/extra/db/tuples/tuples.factor b/extra/db/tuples/tuples.factor index 835b4b45d3..5747fa7de7 100755 --- a/extra/db/tuples/tuples.factor +++ b/extra/db/tuples/tuples.factor @@ -40,7 +40,7 @@ HOOK: drop-sql-statement db ( class -- obj ) HOOK: db ( class -- obj ) HOOK: db ( class -- obj ) HOOK: db ( class -- obj ) -HOOK: db ( tuple class -- obj ) +HOOK: db ( tuple class -- obj ) HOOK: db ( tuple class -- tuple ) HOOK: insert-tuple* db ( tuple statement -- ) @@ -136,8 +136,8 @@ M: retryable execute-statement* ( statement type -- ) db get db-update-statements [ ] cache [ bind-tuple ] keep execute-statement ; -: delete-tuple ( tuple -- ) - dup dup class [ +: delete-tuples ( tuple -- ) + dup dup class [ [ bind-tuple ] keep execute-statement ] with-disposal ; diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 3ecda97584..8953281359 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -20,7 +20,7 @@ node "node" node create-table ; : delete-node ( node-id -- ) - delete-tuple ; + delete-tuples ; : create-node* ( str -- node-id ) dup insert-tuple id>> ; @@ -43,7 +43,7 @@ TUPLE: arc id relation subject object ; f dup insert-tuple id>> >>id insert-tuple ; : delete-arc ( arc-id -- ) - dup delete-node delete-tuple ; + dup delete-node delete-tuples ; : create-arc* ( relation subject object -- arc-id ) dup insert-arc id>> ; From 9453ce2f30e32108553a6eda6c663d130b3d1beb Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:03:41 -0500 Subject: [PATCH 162/270] Slightly shorter code generated by locals --- extra/locals/locals.factor | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/extra/locals/locals.factor b/extra/locals/locals.factor index eb10735c06..8c8fa96fa5 100755 --- a/extra/locals/locals.factor +++ b/extra/locals/locals.factor @@ -81,16 +81,24 @@ C: quote UNION: special local quote local-word local-reader local-writer ; : load-locals-quot ( args -- quot ) - dup [ local-reader? ] contains? [ - [ - local-reader? [ 1array >r ] [ >r ] ? - ] map concat + dup empty? [ + drop [ ] ] [ - length [ load-locals ] curry >quotation + dup [ local-reader? ] contains? [ + [ + local-reader? [ 1array >r ] [ >r ] ? + ] map concat + ] [ + length [ load-locals ] curry >quotation + ] if ] if ; : drop-locals-quot ( args -- quot ) - length [ drop-locals ] curry ; + dup empty? [ + drop [ ] + ] [ + length [ drop-locals ] curry + ] if ; : point-free-body ( quot args -- newquot ) >r 1 head-slice* r> [ localize ] curry map concat ; From fb08017eef767404ca397bcd97e461c79910e03a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:03:53 -0500 Subject: [PATCH 163/270] B word in syntax sets a breakpoint for convenience --- extra/tools/walker/walker.factor | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extra/tools/walker/walker.factor b/extra/tools/walker/walker.factor index 6bf3c53768..ef6dac66f6 100755 --- a/extra/tools/walker/walker.factor +++ b/extra/tools/walker/walker.factor @@ -259,3 +259,8 @@ SYMBOL: +stopped+ ] 3curry "Walker on " self thread-name append spawn [ associate-thread ] keep ; + +! For convenience +IN: syntax + +: B break ; From 5f94dc38765ea8897ec76ae144d7be8939f94c95 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:04:06 -0500 Subject: [PATCH 164/270] Working on user admin tool --- extra/http/http-tests.factor | 5 +- extra/http/server/auth/admin/admin.factor | 89 +++++++++++++++++++ extra/http/server/auth/admin/admin.xml | 24 +++++ extra/http/server/auth/admin/user-list.xml | 9 ++ extra/http/server/auth/admin/user-summary.xml | 9 ++ extra/http/server/auth/admin/user.xml | 53 +++++++++++ extra/http/server/auth/login/edit-profile.xml | 2 +- extra/http/server/auth/login/login.factor | 4 +- .../auth/providers/assoc/assoc-tests.factor | 8 +- .../server/auth/providers/db/db-tests.factor | 10 ++- extra/http/server/auth/providers/db/db.factor | 4 +- .../server/auth/providers/providers.factor | 4 +- .../components/inspector/inspector.factor | 17 ++++ extra/http/server/crud/crud.factor | 2 +- extra/http/server/sessions/sessions.factor | 15 ++-- .../factor-website/factor-website.factor | 6 +- extra/webapps/pastebin/pastebin.factor | 6 +- 17 files changed, 233 insertions(+), 34 deletions(-) create mode 100644 extra/http/server/auth/admin/admin.factor create mode 100644 extra/http/server/auth/admin/admin.xml create mode 100644 extra/http/server/auth/admin/user-list.xml create mode 100644 extra/http/server/auth/admin/user-summary.xml create mode 100644 extra/http/server/auth/admin/user.xml create mode 100644 extra/http/server/components/inspector/inspector.factor diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 0791ce9401..39e708c879 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -134,8 +134,7 @@ read-response-test-1' 1array [ ! Live-fire exercise USING: http.server http.server.static http.server.sessions -http.server.sessions.storage.db http.server.actions -http.server.auth.login http.server.db http.client +http.server.actions http.server.auth.login http.server.db http.client io.server io.files io io.encodings.ascii accessors namespaces threads ; @@ -195,7 +194,6 @@ test-db [ - sessions-in-db >>sessions "" add-responder add-quit-action @@ -226,7 +224,6 @@ test-db [ [ "text/plain" [ "Hi" write ] >>body ] >>display - sessions-in-db >>sessions "" add-responder add-quit-action test-db diff --git a/extra/http/server/auth/admin/admin.factor b/extra/http/server/auth/admin/admin.factor new file mode 100644 index 0000000000..2b7fa2b162 --- /dev/null +++ b/extra/http/server/auth/admin/admin.factor @@ -0,0 +1,89 @@ +! Copyright (C) 2008 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel sequences accessors namespaces combinators +locals db.tuples +http.server.templating.chloe +http.server.boilerplate +http.server.auth.providers +http.server.auth.providers.db +http.server.auth.login +http.server.forms +http.server.components.inspector +http.server.components +http.server.validators +http.server.actions +http.server.crud +http.server ; +IN: http.server.auth.admin + +: admin-template ( name -- template ) + "resource:extra/http/server/auth/admin/" swap ".xml" 3append ; + +: ( -- form ) + "user" + "user" admin-template >>edit-template + "user-summary" admin-template >>summary-template + "username" add-field + "realname" add-field + "new-password" add-field + "verify-password" add-field + "email" add-field + "profile" add-field ; + +: ( -- form ) + "user-list" + "user-list" admin-template >>view-template + "list" +plain+ add-field ; + +:: ( form ctor next -- action ) + + { { "username" [ ] } } >>get-params + + [ + blank-values + + "username" get ctor call + + "username" get [ select-tuple ] when + + { + [ username>> "username" set-value ] + [ realname>> "realname" set-value ] + [ email>> "email" set-value ] + [ profile>> "profile" set-value ] + } cleave + ] >>init + + [ form edit-form ] >>display + + [ + blank-values + + form validate-form + + "username" value find-user + "realname" value >>realname + "email" value >>email + + { "new-password" "verify-password" } + [ value empty? ] all? [ + same-password-twice + "new-password" value >>password + ] unless + + update-tuple + + next f + ] >>submit ; + +TUPLE: user-admin < dispatcher ; + +:: ( -- responder ) + [let | ctor [ [ ] ] | + user-admin new-dispatcher + ctor "" add-responder + ctor "$user-admin" "edit" add-responder + + "admin" admin-template >>template + + ] ; diff --git a/extra/http/server/auth/admin/admin.xml b/extra/http/server/auth/admin/admin.xml new file mode 100644 index 0000000000..1d7a1461fd --- /dev/null +++ b/extra/http/server/auth/admin/admin.xml @@ -0,0 +1,24 @@ + + + + + + + + +

    + + + +
    diff --git a/extra/http/server/auth/admin/user-list.xml b/extra/http/server/auth/admin/user-list.xml new file mode 100644 index 0000000000..520b7f2512 --- /dev/null +++ b/extra/http/server/auth/admin/user-list.xml @@ -0,0 +1,9 @@ + + + + + Users + + + + diff --git a/extra/http/server/auth/admin/user-summary.xml b/extra/http/server/auth/admin/user-summary.xml new file mode 100644 index 0000000000..c426e7c072 --- /dev/null +++ b/extra/http/server/auth/admin/user-summary.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/extra/http/server/auth/admin/user.xml b/extra/http/server/auth/admin/user.xml new file mode 100644 index 0000000000..5112178fa6 --- /dev/null +++ b/extra/http/server/auth/admin/user.xml @@ -0,0 +1,53 @@ + + + + + Edit User + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User name:
    Real name:
    New password:
    Verify:
    E-mail:
    Profile:
    + +

    + + + + passwords do not match + +

    + +
    + +
    diff --git a/extra/http/server/auth/login/edit-profile.xml b/extra/http/server/auth/login/edit-profile.xml index c19b18c947..107dbba2b8 100644 --- a/extra/http/server/auth/login/edit-profile.xml +++ b/extra/http/server/auth/login/edit-profile.xml @@ -4,7 +4,7 @@ Edit Profile - + diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 716996dc5a..34adb10cf4 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -125,11 +125,11 @@ SYMBOL: user-exists? same-password-twice - - "username" value >>username + "username" value "realname" value >>realname "new-password" value >>password "email" value >>email + H{ } clone >>profile users new-user [ user-exists? on diff --git a/extra/http/server/auth/providers/assoc/assoc-tests.factor b/extra/http/server/auth/providers/assoc/assoc-tests.factor index a8f17d6f5d..82a2b54b0e 100755 --- a/extra/http/server/auth/providers/assoc/assoc-tests.factor +++ b/extra/http/server/auth/providers/assoc/assoc-tests.factor @@ -6,17 +6,17 @@ namespaces accessors kernel ; "provider" set [ t ] [ - - "slava" >>username + "slava" "foobar" >>password "slava@factorcode.org" >>email + H{ } clone >>profile "provider" get new-user username>> "slava" = ] unit-test [ f ] [ - - "slava" >>username + "slava" + H{ } clone >>profile "provider" get new-user ] unit-test diff --git a/extra/http/server/auth/providers/db/db-tests.factor b/extra/http/server/auth/providers/db/db-tests.factor index 6daddac304..1a5298f050 100755 --- a/extra/http/server/auth/providers/db/db-tests.factor +++ b/extra/http/server/auth/providers/db/db-tests.factor @@ -6,22 +6,24 @@ io.files accessors kernel ; users-in-db "provider" set +[ "auth-test.db" temp-file delete-file ] ignore-errors + "auth-test.db" temp-file sqlite-db [ init-users-table [ t ] [ - - "slava" >>username + "slava" "foobar" >>password "slava@factorcode.org" >>email + H{ } clone >>profile "provider" get new-user username>> "slava" = ] unit-test [ f ] [ - - "slava" >>username + "slava" + H{ } clone >>profile "provider" get new-user ] unit-test diff --git a/extra/http/server/auth/providers/db/db.factor b/extra/http/server/auth/providers/db/db.factor index dba91791f6..a14ed2d00a 100755 --- a/extra/http/server/auth/providers/db/db.factor +++ b/extra/http/server/auth/providers/db/db.factor @@ -20,9 +20,7 @@ user "USERS" SINGLETON: users-in-db : find-user ( username -- user ) - - swap >>username - select-tuple ; + select-tuple ; M: users-in-db get-user drop diff --git a/extra/http/server/auth/providers/providers.factor b/extra/http/server/auth/providers/providers.factor index a867b2381e..0394e7a08b 100755 --- a/extra/http/server/auth/providers/providers.factor +++ b/extra/http/server/auth/providers/providers.factor @@ -6,7 +6,9 @@ IN: http.server.auth.providers TUPLE: user username realname password email ticket profile ; -: user new H{ } clone >>profile ; +: ( username -- user ) + user new + swap >>username ; GENERIC: get-user ( username provider -- user/f ) diff --git a/extra/http/server/components/inspector/inspector.factor b/extra/http/server/components/inspector/inspector.factor new file mode 100644 index 0000000000..25ee631a06 --- /dev/null +++ b/extra/http/server/components/inspector/inspector.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2008 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +USING: splitting kernel io sequences inspector accessors +http.server.components ; +IN: http.server.components.inspector + +SINGLETON: inspector-renderer + +M: inspector-renderer render-view* + drop describe ; + +TUPLE: inspector < component ; + +M: inspector component-string drop ; + +: ( id -- component ) + inspector inspector-renderer new-component ; diff --git a/extra/http/server/crud/crud.factor b/extra/http/server/crud/crud.factor index 90af25df5b..28c1b02005 100755 --- a/extra/http/server/crud/crud.factor +++ b/extra/http/server/crud/crud.factor @@ -51,7 +51,7 @@ IN: http.server.crud { { "id" [ v-number ] } } >>post-params [ - "id" get ctor call delete-tuple + "id" get ctor call delete-tuples next f ] >>submit ; diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor index a428fb79b9..dae9fcbe26 100755 --- a/extra/http/server/sessions/sessions.factor +++ b/extra/http/server/sessions/sessions.factor @@ -16,7 +16,7 @@ TUPLE: session id expires namespace changed? ; session "SESSIONS" { { "id" "ID" +random-id+ system-random-generator } - { "expires" "EXPIRES" BIG-INTEGER +not-null+ } + { "expires" "EXPIRES" TIMESTAMP +not-null+ } { "namespace" "NAMESPACE" FACTOR-BLOB } } define-persistent @@ -25,14 +25,13 @@ session "SESSIONS" : init-sessions-table session ensure-table ; -: expired-sessions ( -- session ) - f - -1.0/0.0 now timestamp>millis [a,b] >>expires - select-tuples ; - : start-expiring-sessions ( db seq -- ) '[ - , , [ expired-sessions [ delete-tuple ] each ] with-db + , , [ + session new + -1.0/0.0 now [a,b] >>expires + delete-tuples + ] with-db ] 5 minutes every drop ; GENERIC: init-session* ( responder -- ) @@ -72,7 +71,7 @@ TUPLE: sessions < filter-responder timeout domain ; session [ sessions get init-session* ] with-variable ; : cutoff-time ( -- time ) - sessions get timeout>> from-now timestamp>millis ; + sessions get timeout>> from-now ; : touch-session ( session -- ) cutoff-time >>expires drop ; diff --git a/extra/webapps/factor-website/factor-website.factor b/extra/webapps/factor-website/factor-website.factor index 4136024f03..9b3ce57d02 100644 --- a/extra/webapps/factor-website/factor-website.factor +++ b/extra/webapps/factor-website/factor-website.factor @@ -6,9 +6,9 @@ http.server http.server.db http.server.flows http.server.sessions +http.server.auth.admin http.server.auth.login http.server.auth.providers.db -http.server.sessions.storage.db http.server.boilerplate http.server.templating.chloe webapps.pastebin @@ -16,7 +16,7 @@ webapps.planet webapps.todo ; IN: webapps.factor-website -: test-db "test.db" resource-path sqlite-db ; +: test-db "resource:test.db" sqlite-db ; : factor-template ( path -- template ) "resource:extra/webapps/factor-website/" swap ".xml" 3append ; @@ -39,6 +39,7 @@ IN: webapps.factor-website "todo" add-responder "pastebin" add-responder "planet" add-responder + "user-admin" add-responder users-in-db >>users allow-registration @@ -48,7 +49,6 @@ IN: webapps.factor-website "page" factor-template >>template - sessions-in-db >>sessions test-db ; : init-factor-website ( -- ) diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor index 616da67eee..76e7a1464a 100644 --- a/extra/webapps/pastebin/pastebin.factor +++ b/extra/webapps/pastebin/pastebin.factor @@ -197,9 +197,9 @@ annotation "ANNOTATION" { { "id" [ v-number ] } } >>post-params [ - "id" get ctor call delete-tuple + "id" get ctor call delete-tuples - "id" get f select-tuples [ delete-tuple ] each + "id" get f delete-tuples next f ] >>submit ; @@ -209,7 +209,7 @@ annotation "ANNOTATION" { { "id" [ v-number ] } { "aid" [ v-number ] } } >>post-params [ - "id" get "aid" get ctor call delete-tuple + "id" get "aid" get ctor call delete-tuples "id" get next ] >>submit ; From 4d03cb8c75ad0b1956f84f457107fcb4da602926 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 21:08:57 -0500 Subject: [PATCH 165/270] Workaround to make http.client work with old http.server --- extra/http/http.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/http/http.factor b/extra/http/http.factor index 3402b42ca7..9729542ea4 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -329,7 +329,8 @@ SYMBOL: max-post-request [ host>> ] [ port>> ] bi ; : request-host ( request -- string ) - [ host>> ] [ drop ":" ] [ port>> number>string ] tri 3append ; + [ host>> ] [ port>> ] bi + dup 80 = [ drop ] [ ":" swap number>string 3append ] if ; : write-request-header ( request -- request ) dup header>> >hashtable From 634754d0b0865e59040bf50fa1e323c163b354d7 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 29 Apr 2008 23:15:50 -0500 Subject: [PATCH 166/270] Trying to get CSV tests to pass --- extra/csv/csv-tests.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/csv/csv-tests.factor b/extra/csv/csv-tests.factor index bf70ed3009..edd22751b5 100644 --- a/extra/csv/csv-tests.factor +++ b/extra/csv/csv-tests.factor @@ -1,4 +1,5 @@ USING: io.streams.string csv tools.test shuffle ; +IN: csv.tests ! I like to name my unit tests : named-unit-test ( name output input -- ) @@ -32,7 +33,7 @@ USING: io.streams.string csv tools.test shuffle ; "Fields with leading or trailing spaces must be delimited by double-quote characters. (See comment about leading and trailing spaces above)" [ { { "1997" "Ford" "E350" " Super luxurious truck " } } ] [ "1997,Ford,E350,\" Super luxurious truck \"" - csv ] unit-test + csv ] named-unit-test "Fields may always be delimited by double-quote characters, whether necessary or not." [ { { "1997" "Ford" "E350" } } ] From 5e9332b634b8d11bde1ea5b60feb4eff8f710d6c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 30 Apr 2008 04:53:01 -0500 Subject: [PATCH 167/270] More work on user admin tool --- extra/http/server/auth/admin/admin.factor | 85 ++++++++++++++++--- extra/http/server/auth/admin/admin.xml | 2 +- extra/http/server/auth/admin/edit-user.xml | 60 +++++++++++++ .../auth/admin/{user.xml => new-user.xml} | 16 ++-- extra/http/server/auth/auth.factor | 11 +-- extra/http/server/auth/login/login.factor | 21 +++-- extra/http/server/auth/providers/db/db.factor | 11 ++- .../server/auth/providers/providers.factor | 5 +- .../http/server/components/components.factor | 2 - extra/http/server/sessions/sessions.factor | 12 ++- extra/webapps/pastebin/pastebin.xml | 2 +- extra/webapps/planet/planet.xml | 2 +- extra/webapps/todo/todo.factor | 14 ++- 13 files changed, 189 insertions(+), 54 deletions(-) create mode 100644 extra/http/server/auth/admin/edit-user.xml rename extra/http/server/auth/admin/{user.xml => new-user.xml} (76%) diff --git a/extra/http/server/auth/admin/admin.factor b/extra/http/server/auth/admin/admin.factor index 2b7fa2b162..c9d2769292 100644 --- a/extra/http/server/auth/admin/admin.factor +++ b/extra/http/server/auth/admin/admin.factor @@ -11,6 +11,7 @@ http.server.forms http.server.components.inspector http.server.components http.server.validators +http.server.sessions http.server.actions http.server.crud http.server ; @@ -19,12 +20,21 @@ IN: http.server.auth.admin : admin-template ( name -- template ) "resource:extra/http/server/auth/admin/" swap ".xml" 3append ; -: ( -- form ) +: ( -- form ) "user" - "user" admin-template >>edit-template - "user-summary" admin-template >>summary-template + "new-user" admin-template >>edit-template "username" add-field "realname" add-field + "new-password" t >>required add-field + "verify-password" t >>required add-field + "email" add-field ; + +: ( -- form ) + "user" + "edit-user" admin-template >>edit-template + "user-summary" admin-template >>summary-template + "username" hidden >>renderer add-field + "realname" add-field "new-password" add-field "verify-password" add-field "email" add-field @@ -33,19 +43,15 @@ IN: http.server.auth.admin : ( -- form ) "user-list" "user-list" admin-template >>view-template - "list" +plain+ add-field ; + "list" +unordered+ add-field ; -:: ( form ctor next -- action ) +:: ( form ctor next -- action ) - { { "username" [ ] } } >>get-params - [ blank-values "username" get ctor call - "username" get [ select-tuple ] when - { [ username>> "username" set-value ] [ realname>> "realname" set-value ] @@ -61,7 +67,49 @@ IN: http.server.auth.admin form validate-form - "username" value find-user + same-password-twice + + user new "username" value >>username select-tuple [ + user-exists? on + validation-failed + ] when + + "username" value + "realname" value >>realname + "email" value >>email + "new-password" value >>password + H{ } clone >>profile + + insert-tuple + + next f + ] >>submit ; + +:: ( form ctor next -- action ) + + { { "username" [ v-required ] } } >>get-params + + [ + blank-values + + "username" get ctor call select-tuple + + { + [ username>> "username" set-value ] + [ realname>> "realname" set-value ] + [ email>> "email" set-value ] + [ profile>> "profile" set-value ] + } cleave + ] >>init + + [ form edit-form ] >>display + + [ + blank-values + + form validate-form + + "username" value select-tuple "realname" value >>realname "email" value >>email @@ -76,13 +124,28 @@ IN: http.server.auth.admin next f ] >>submit ; +:: ( ctor next -- action ) + + { { "username" [ ] } } >>post-params + + [ + "username" get + [ select-tuple 1 >>deleted update-tuple ] + [ logout-all-sessions ] + bi + + next f + ] >>submit ; + TUPLE: user-admin < dispatcher ; :: ( -- responder ) [let | ctor [ [ ] ] | user-admin new-dispatcher ctor "" add-responder - ctor "$user-admin" "edit" add-responder + ctor "$user-admin" "new" add-responder + ctor "$user-admin" "edit" add-responder + ctor "$user-admin" "delete" add-responder "admin" admin-template >>template diff --git a/extra/http/server/auth/admin/admin.xml b/extra/http/server/auth/admin/admin.xml index 1d7a1461fd..d3c0ff4c90 100644 --- a/extra/http/server/auth/admin/admin.xml +++ b/extra/http/server/auth/admin/admin.xml @@ -6,7 +6,7 @@
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User name:
    Real name:
    New password:
    Verify:
    E-mail:
    Profile:
    + +

    + + + + passwords do not match + +

    + +
    + + + + + + +
    diff --git a/extra/http/server/auth/admin/user.xml b/extra/http/server/auth/admin/new-user.xml similarity index 76% rename from extra/http/server/auth/admin/user.xml rename to extra/http/server/auth/admin/new-user.xml index 5112178fa6..6b5b2523d7 100644 --- a/extra/http/server/auth/admin/user.xml +++ b/extra/http/server/auth/admin/new-user.xml @@ -2,9 +2,9 @@ - Edit User + New User - + @@ -32,16 +32,15 @@ - - - - -
    E-mail:
    Profile:

    - + + + + username taken + passwords do not match @@ -49,5 +48,4 @@

    -
    diff --git a/extra/http/server/auth/auth.factor b/extra/http/server/auth/auth.factor index 6b5a426102..a25baf3ed2 100755 --- a/extra/http/server/auth/auth.factor +++ b/extra/http/server/auth/auth.factor @@ -7,7 +7,6 @@ http.server.auth.providers ; IN: http.server.auth SYMBOL: logged-in-user -SYMBOL: user-profile-changed? GENERIC: init-user-profile ( responder -- ) @@ -19,16 +18,18 @@ M: dispatcher init-user-profile M: filter-responder init-user-profile responder>> init-user-profile ; -: uid ( -- string ) logged-in-user sget username>> ; +: profile ( -- assoc ) logged-in-user get profile>> ; -: profile ( -- assoc ) logged-in-user sget profile>> ; +: user-changed ( -- ) + logged-in-user get t >>changed? drop ; : uget ( key -- value ) profile at ; : uset ( value key -- ) - profile set-at user-profile-changed? on ; + profile set-at + user-changed ; : uchange ( quot key -- ) profile swap change-at - user-profile-changed? on ; inline + user-changed ; inline diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 34adb10cf4..453f4cc4d6 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -35,9 +35,7 @@ TUPLE: user-saver user ; C: user-saver M: user-saver dispose - user-profile-changed? get [ - user>> users update-user - ] [ drop ] if ; + user>> dup changed?>> [ users update-user ] [ drop ] if ; : save-user-after ( user -- ) add-always-destructor ; @@ -59,7 +57,7 @@ M: user-saver dispose add-field ; : successful-login ( user -- response ) - logged-in-user sset + username>> set-uid "$login" end-flow ; :: ( -- action ) @@ -160,7 +158,7 @@ SYMBOL: user-exists? [ blank-values - logged-in-user sget + logged-in-user get [ username>> "username" set-value ] [ realname>> "realname" set-value ] [ email>> "email" set-value ] @@ -175,7 +173,7 @@ SYMBOL: user-exists? form validate-form - logged-in-user sget + logged-in-user get { "password" "new-password" "verify-password" } [ value empty? ] all? [ @@ -190,9 +188,9 @@ SYMBOL: user-exists? "realname" value >>realname "email" value >>email - drop + t >>changed? - user-profile-changed? on + drop "$login" end-flow ] >>submit @@ -330,7 +328,7 @@ SYMBOL: lost-password-from : ( -- action ) [ - f logged-in-user sset + f set-uid "$login/login" end-flow ] >>submit ; @@ -345,8 +343,9 @@ C: protected "$login/login" f ; M: protected call-responder* ( path responder -- response ) - logged-in-user sget dup [ - save-user-after + uid dup [ + users get-user + [ logged-in-user set ] [ save-user-after ] bi call-next-method ] [ 3drop show-login-page diff --git a/extra/http/server/auth/providers/db/db.factor b/extra/http/server/auth/providers/db/db.factor index a14ed2d00a..66d3a00a42 100755 --- a/extra/http/server/auth/providers/db/db.factor +++ b/extra/http/server/auth/providers/db/db.factor @@ -13,23 +13,22 @@ user "USERS" { "email" "EMAIL" { VARCHAR 256 } } { "ticket" "TICKET" { VARCHAR 256 } } { "profile" "PROFILE" FACTOR-BLOB } + { "deleted" "DELETED" INTEGER +not-null+ } } define-persistent : init-users-table user ensure-table ; SINGLETON: users-in-db -: find-user ( username -- user ) - select-tuple ; - M: users-in-db get-user - drop - find-user ; + drop select-tuple ; M: users-in-db new-user drop [ - dup username>> find-user [ + user new + over username>> >>username + select-tuple [ drop f ] [ dup insert-tuple diff --git a/extra/http/server/auth/providers/providers.factor b/extra/http/server/auth/providers/providers.factor index 0394e7a08b..512ddc5f5b 100755 --- a/extra/http/server/auth/providers/providers.factor +++ b/extra/http/server/auth/providers/providers.factor @@ -4,11 +4,12 @@ USING: kernel accessors random math.parser locals sequences math crypto.sha2 ; IN: http.server.auth.providers -TUPLE: user username realname password email ticket profile ; +TUPLE: user username realname password email ticket profile deleted changed? ; : ( username -- user ) user new - swap >>username ; + swap >>username + 0 >>deleted ; GENERIC: get-user ( username provider -- user/f ) diff --git a/extra/http/server/components/components.factor b/extra/http/server/components/components.factor index f0e7955947..cb109fc847 100755 --- a/extra/http/server/components/components.factor +++ b/extra/http/server/components/components.factor @@ -30,8 +30,6 @@ TUPLE: hidden < field ; : hidden ( -- renderer ) T{ hidden f "hidden" } ; inline -M: hidden render-view* 2drop ; - ! Component protocol SYMBOL: components diff --git a/extra/http/server/sessions/sessions.factor b/extra/http/server/sessions/sessions.factor index dae9fcbe26..fe32327c24 100755 --- a/extra/http/server/sessions/sessions.factor +++ b/extra/http/server/sessions/sessions.factor @@ -7,7 +7,7 @@ db db.tuples db.types http http.server html.elements ; IN: http.server.sessions -TUPLE: session id expires namespace changed? ; +TUPLE: session id expires uid namespace changed? ; : ( id -- session ) session new @@ -17,6 +17,7 @@ session "SESSIONS" { { "id" "ID" +random-id+ system-random-generator } { "expires" "EXPIRES" TIMESTAMP +not-null+ } + { "uid" "UID" { VARCHAR 255 } } { "namespace" "NAMESPACE" FACTOR-BLOB } } define-persistent @@ -67,6 +68,12 @@ TUPLE: sessions < filter-responder timeout domain ; [ namespace>> swap change-at ] keep (session-changed) ; inline +: uid ( -- uid ) + session get uid>> ; + +: set-uid ( uid -- ) + session get [ (>>uid) ] [ (session-changed) ] bi ; + : init-session ( session -- ) session [ sessions get init-session* ] with-variable ; @@ -141,3 +148,6 @@ M: sessions call-responder* ( path responder -- response ) sessions set request-session [ begin-session ] unless* existing-session put-session-cookie ; + +: logout-all-sessions ( uid -- ) + session new swap >>uid delete-tuples ; diff --git a/extra/webapps/pastebin/pastebin.xml b/extra/webapps/pastebin/pastebin.xml index 99fede727e..461a7be384 100644 --- a/extra/webapps/pastebin/pastebin.xml +++ b/extra/webapps/pastebin/pastebin.xml @@ -11,7 +11,7 @@ | New Paste | Atom Feed - + | Edit Profile diff --git a/extra/webapps/planet/planet.xml b/extra/webapps/planet/planet.xml index fdbfe6d841..abdc535274 100644 --- a/extra/webapps/planet/planet.xml +++ b/extra/webapps/planet/planet.xml @@ -12,7 +12,7 @@ | Atom Feed | Admin - + | Edit Profile diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index d04c8d97bd..e1ebc65bb5 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -2,10 +2,16 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel locals sequences namespaces db db.types db.tuples -http.server.components http.server.components.farkup -http.server.forms http.server.templating.chloe -http.server.boilerplate http.server.crud http.server.auth -http.server.actions http.server.db +http.server.sessions +http.server.components +http.server.components.farkup +http.server.forms +http.server.templating.chloe +http.server.boilerplate +http.server.crud +http.server.auth +http.server.actions +http.server.db http.server.auth.login http.server ; IN: webapps.todo From a145d1bac376d317cf0ee282fc20db2042fa9e2d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 30 Apr 2008 04:53:11 -0500 Subject: [PATCH 168/270] Fix typo --- core/combinators/combinators-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/combinators/combinators-docs.factor b/core/combinators/combinators-docs.factor index 54c62c44fa..61752ac7d6 100755 --- a/core/combinators/combinators-docs.factor +++ b/core/combinators/combinators-docs.factor @@ -95,7 +95,7 @@ HELP: case "If there is no case matching " { $snippet "obj" } ", the default case is taken. If the last element of " { $snippet "cases" } " is a quotation, the quotation is called with " { $snippet "obj" } " on the stack. Otherwise, a " { $link no-cond } " error is rasied." $nl "The following two phrases are equivalent:" - { $code "{ { X [ Y ] } { Y [ T ] } } case" } + { $code "{ { X [ Y ] } { Z [ T ] } } case" } { $code "dup X = [ drop Y ] [ dup Z = [ drop T ] [ no-case ] if ] if" } } { $examples From 39c578ee5606e7d9317c6f81c479a9d5818cde68 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Wed, 30 Apr 2008 12:28:39 +0100 Subject: [PATCH 169/270] CSV: fixed case where there's whitespace padding inside quotes. tests now run ok --- extra/csv/csv.factor | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/extra/csv/csv.factor b/extra/csv/csv.factor index d774c2d6a4..fbb3677491 100644 --- a/extra/csv/csv.factor +++ b/extra/csv/csv.factor @@ -10,34 +10,35 @@ IN: csv DEFER: quoted-field +! trims whitespace from either end of string +: trim-whitespace ( str -- str ) + [ blank? ] trim ; inline + +: skip-to-field-end ( -- endchar ) + ",\n" read-until nip ; inline + : not-quoted-field ( -- endchar ) ",\"\n" read-until ! " dup { { CHAR: " [ drop drop quoted-field ] } ! " - { CHAR: , [ swap % ] } - { CHAR: \n [ swap % ] } - { f [ swap % ] } ! eof + { CHAR: , [ swap trim-whitespace % ] } + { CHAR: \n [ swap trim-whitespace % ] } + { f [ swap trim-whitespace % ] } ! eof } case ; : maybe-escaped-quote ( -- endchar ) - read1 - dup - { { CHAR: " [ , quoted-field ] } ! " is an escaped quote - { CHAR: \s [ drop not-quoted-field ] } - { CHAR: \t [ drop not-quoted-field ] } - [ drop ] + read1 dup + { { CHAR: " [ , quoted-field ] } ! " is an escaped quote + { CHAR: , [ ] } ! end of quoted field + [ 2drop skip-to-field-end ] ! end of quoted field + padding } case ; - -! trims whitespace from either end of string -: trim-whitespace ( str -- str ) - [ blank? ] trim ; inline : quoted-field ( -- endchar ) "\"" read-until ! " drop % maybe-escaped-quote ; : field ( -- sep string ) - [ not-quoted-field ] "" make trim-whitespace ; + [ not-quoted-field ] "" make ; ! trim-whitespace : (row) ( -- sep ) field , From 7140a018b160151cfe136da4557b92283c91cc70 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Wed, 30 Apr 2008 17:50:40 +0100 Subject: [PATCH 170/270] Added with-delimiter word to csv module to handle non comma delimiters --- extra/csv/csv-docs.factor | 7 +++++++ extra/csv/csv-tests.factor | 6 ++++++ extra/csv/csv.factor | 31 ++++++++++++++++++++----------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/extra/csv/csv-docs.factor b/extra/csv/csv-docs.factor index c16ed46522..c9f39900ab 100644 --- a/extra/csv/csv-docs.factor +++ b/extra/csv/csv-docs.factor @@ -12,3 +12,10 @@ HELP: csv-row { "row" "an array of fields" } } { $description "parses a row from a csv stream" } ; + + +HELP: with-delimiter +{ $values { "char" "field delimiter (e.g. CHAR: \t)" } + { "quot" "a quotation" } } +{ $description "Sets the field delimiter for csv or csv-row words " +} ; diff --git a/extra/csv/csv-tests.factor b/extra/csv/csv-tests.factor index edd22751b5..6ab26c7e40 100644 --- a/extra/csv/csv-tests.factor +++ b/extra/csv/csv-tests.factor @@ -46,6 +46,7 @@ IN: csv.tests [ "Year,Make,Model\n1997,Ford,E350\n2000,Mercury,Cougar" csv ] named-unit-test + ! !!!!!!!! other tests @@ -59,3 +60,8 @@ IN: csv.tests "trims leading and trailing whitespace - n.b. this isn't really conformant, but lots of csv seems to assume this" [ { { "foo yeah" "bah" "baz" } } ] [ " foo yeah , bah ,baz\n" csv ] named-unit-test + + +"allows setting of delimiting character" +[ { { "foo" "bah" "baz" } } ] +[ "foo\tbah\tbaz\n" CHAR: \t [ csv ] with-delimiter ] named-unit-test diff --git a/extra/csv/csv.factor b/extra/csv/csv.factor index fbb3677491..3953ce057b 100644 --- a/extra/csv/csv.factor +++ b/extra/csv/csv.factor @@ -4,32 +4,33 @@ ! Simple CSV Parser ! Phil Dawes phil@phildawes.net -USING: kernel sequences io namespaces combinators -unicode.categories ; +USING: kernel sequences io namespaces combinators unicode.categories vars ; IN: csv DEFER: quoted-field +VAR: delimiter + ! trims whitespace from either end of string : trim-whitespace ( str -- str ) [ blank? ] trim ; inline : skip-to-field-end ( -- endchar ) - ",\n" read-until nip ; inline + "\n" delimiter> suffix read-until nip ; inline : not-quoted-field ( -- endchar ) - ",\"\n" read-until ! " + "\"\n" delimiter> suffix read-until ! " dup - { { CHAR: " [ drop drop quoted-field ] } ! " - { CHAR: , [ swap trim-whitespace % ] } - { CHAR: \n [ swap trim-whitespace % ] } - { f [ swap trim-whitespace % ] } ! eof + { { CHAR: " [ drop drop quoted-field ] } ! " + { delimiter> [ swap trim-whitespace % ] } + { CHAR: \n [ swap trim-whitespace % ] } + { f [ swap trim-whitespace % ] } ! eof } case ; : maybe-escaped-quote ( -- endchar ) read1 dup - { { CHAR: " [ , quoted-field ] } ! " is an escaped quote - { CHAR: , [ ] } ! end of quoted field + { { CHAR: " [ , quoted-field ] } ! " is an escaped quote + { delimiter> [ ] } ! end of quoted field [ 2drop skip-to-field-end ] ! end of quoted field + padding } case ; @@ -42,7 +43,7 @@ DEFER: quoted-field : (row) ( -- sep ) field , - dup CHAR: , = [ drop (row) ] when ; + dup delimiter> = [ drop (row) ] when ; : row ( -- eof? array[string] ) [ (row) ] { } make ; @@ -54,8 +55,16 @@ DEFER: quoted-field row append-if-row-not-empty [ (csv) ] when ; +: init-vars ( -- ) + delimiter> [ CHAR: , >delimiter ] unless ; inline + : csv-row ( stream -- row ) + init-vars [ row nip ] with-stream ; : csv ( stream -- rows ) + init-vars [ [ (csv) ] { } make ] with-stream ; + +: with-delimiter ( char quot -- ) + delimiter swap with-variable ; inline From 7584e02805f7ffd09543eaab896ff118c6616a92 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 30 Apr 2008 16:11:55 -0500 Subject: [PATCH 171/270] New checksum protocol --- core/bootstrap/image/image.factor | 12 +++-- core/bootstrap/primitives.factor | 17 +++++++ core/bootstrap/syntax.factor | 1 + .../byte-vectors/byte-vectors-docs.factor | 0 .../byte-vectors/byte-vectors-tests.factor | 0 .../byte-vectors/byte-vectors.factor | 19 +------ {extra => core}/byte-vectors/summary.txt | 0 {extra => core}/byte-vectors/tags.txt | 0 core/checksums/checksums-docs.factor | 51 +++++++++++++++++++ core/checksums/checksums.factor | 25 +++++++++ core/{io => checksums}/crc32/authors.txt | 0 core/checksums/crc32/crc32-docs.factor | 11 ++++ core/checksums/crc32/crc32-tests.factor | 6 +++ core/{io => checksums}/crc32/crc32.factor | 26 +++++++--- core/{io => checksums}/crc32/summary.txt | 0 core/io/crc32/crc32-docs.factor | 17 ------- core/io/crc32/crc32-tests.factor | 5 -- core/optimizer/known-words/known-words.factor | 4 +- core/prettyprint/backend/backend.factor | 13 +++-- core/source-files/source-files.factor | 6 +-- core/syntax/syntax.factor | 3 +- extra/benchmark/crc32/crc32.factor | 6 +-- extra/benchmark/md5/md5.factor | 4 +- .../reverse-complement-tests.factor | 12 ++--- extra/benchmark/sha1/sha1.factor | 4 +- .../bootstrap/image/download/download.factor | 6 +-- extra/bootstrap/image/upload/upload.factor | 9 ++-- extra/{crypto => checksums}/md5/authors.txt | 0 extra/checksums/md5/md5-docs.factor | 11 ++++ extra/checksums/md5/md5-tests.factor | 10 ++++ extra/{crypto => checksums}/md5/md5.factor | 24 +++------ extra/{crypto => checksums}/sha1/authors.txt | 0 extra/checksums/sha1/sha1-docs.factor | 11 ++++ .../sha1/sha1-tests.factor | 10 ++-- extra/{crypto => checksums}/sha1/sha1.factor | 28 ++++------ extra/{crypto => checksums}/sha2/authors.txt | 0 extra/checksums/sha2/sha2-docs.factor | 11 ++++ .../sha2/sha2-tests.factor | 14 ++--- extra/{crypto => checksums}/sha2/sha2.factor | 15 +++--- extra/crypto/common/common.factor | 8 ++- extra/crypto/hmac/hmac.factor | 7 +-- extra/crypto/md5/md5-docs.factor | 18 ------- extra/crypto/md5/md5-tests.factor | 10 ---- extra/help/handbook/handbook.factor | 3 +- .../server/auth/providers/providers.factor | 2 +- extra/tools/vocabs/vocabs.factor | 6 +-- 46 files changed, 268 insertions(+), 177 deletions(-) rename {extra => core}/byte-vectors/byte-vectors-docs.factor (100%) rename {extra => core}/byte-vectors/byte-vectors-tests.factor (100%) rename {extra => core}/byte-vectors/byte-vectors.factor (61%) rename {extra => core}/byte-vectors/summary.txt (100%) rename {extra => core}/byte-vectors/tags.txt (100%) create mode 100644 core/checksums/checksums-docs.factor create mode 100644 core/checksums/checksums.factor rename core/{io => checksums}/crc32/authors.txt (100%) create mode 100644 core/checksums/crc32/crc32-docs.factor create mode 100644 core/checksums/crc32/crc32-tests.factor rename core/{io => checksums}/crc32/crc32.factor (59%) rename core/{io => checksums}/crc32/summary.txt (100%) delete mode 100644 core/io/crc32/crc32-docs.factor delete mode 100644 core/io/crc32/crc32-tests.factor rename extra/{crypto => checksums}/md5/authors.txt (100%) create mode 100755 extra/checksums/md5/md5-docs.factor create mode 100755 extra/checksums/md5/md5-tests.factor rename extra/{crypto => checksums}/md5/md5.factor (88%) rename extra/{crypto => checksums}/sha1/authors.txt (100%) create mode 100644 extra/checksums/sha1/sha1-docs.factor rename extra/{crypto => checksums}/sha1/sha1-tests.factor (69%) rename extra/{crypto => checksums}/sha1/sha1.factor (83%) rename extra/{crypto => checksums}/sha2/authors.txt (100%) create mode 100644 extra/checksums/sha2/sha2-docs.factor rename extra/{crypto => checksums}/sha2/sha2-tests.factor (51%) rename extra/{crypto => checksums}/sha2/sha2.factor (94%) delete mode 100755 extra/crypto/md5/md5-docs.factor delete mode 100755 extra/crypto/md5/md5-tests.factor diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor index b3be0c41e7..2f354bfee5 100755 --- a/core/bootstrap/image/image.factor +++ b/core/bootstrap/image/image.factor @@ -305,12 +305,12 @@ M: wrapper ' [ emit ] emit-object ; ! Strings -: emit-chars ( seq -- ) +: emit-bytes ( seq -- ) bootstrap-cell big-endian get [ [ be> ] map ] [ [ le> ] map ] if emit-seq ; -: pack-string ( string -- newstr ) +: pad-bytes ( seq -- newseq ) dup length bootstrap-cell align 0 pad-right ; : emit-string ( string -- ptr ) @@ -318,7 +318,7 @@ M: wrapper ' dup length emit-fixnum f ' emit f ' emit - pack-string emit-chars + pad-bytes emit-bytes ] emit-object ; M: string ' @@ -335,7 +335,11 @@ M: string ' [ 0 emit-fixnum ] emit-object ] bi* ; -M: byte-array ' byte-array emit-dummy-array ; +M: byte-array ' + byte-array type-number object tag-number [ + dup length emit-fixnum + pad-bytes emit-bytes + ] emit-object ; M: bit-array ' bit-array emit-dummy-array ; diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index bcd75e9854..6149e83893 100755 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -59,6 +59,7 @@ num-types get f builtins set "arrays" "bit-arrays" "byte-arrays" + "byte-vectors" "classes.private" "classes.tuple" "classes.tuple.private" @@ -452,6 +453,22 @@ tuple } } define-tuple-class +"byte-vector" "byte-vectors" create +tuple +{ + { + { "byte-array" "byte-arrays" } + "underlying" + { "underlying" "growable" } + { "set-underlying" "growable" } + } { + { "array-capacity" "sequences.private" } + "fill" + { "length" "sequences" } + { "set-fill" "growable" } + } +} define-tuple-class + "curry" "kernel" create tuple { diff --git a/core/bootstrap/syntax.factor b/core/bootstrap/syntax.factor index 4b74804749..7d703d3093 100755 --- a/core/bootstrap/syntax.factor +++ b/core/bootstrap/syntax.factor @@ -16,6 +16,7 @@ IN: bootstrap.syntax "?{" "BIN:" "B{" + "BV{" "C:" "CHAR:" "DEFER:" diff --git a/extra/byte-vectors/byte-vectors-docs.factor b/core/byte-vectors/byte-vectors-docs.factor similarity index 100% rename from extra/byte-vectors/byte-vectors-docs.factor rename to core/byte-vectors/byte-vectors-docs.factor diff --git a/extra/byte-vectors/byte-vectors-tests.factor b/core/byte-vectors/byte-vectors-tests.factor similarity index 100% rename from extra/byte-vectors/byte-vectors-tests.factor rename to core/byte-vectors/byte-vectors-tests.factor diff --git a/extra/byte-vectors/byte-vectors.factor b/core/byte-vectors/byte-vectors.factor similarity index 61% rename from extra/byte-vectors/byte-vectors.factor rename to core/byte-vectors/byte-vectors.factor index a8351dc781..e80b797a8d 100755 --- a/extra/byte-vectors/byte-vectors.factor +++ b/core/byte-vectors/byte-vectors.factor @@ -1,20 +1,9 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel kernel.private math sequences -sequences.private growable byte-arrays prettyprint.backend -parser accessors ; +sequences.private growable byte-arrays ; IN: byte-vectors -TUPLE: byte-vector underlying fill ; - -M: byte-vector underlying underlying>> { byte-array } declare ; - -M: byte-vector set-underlying (>>underlying) ; - -M: byte-vector length fill>> { array-capacity } declare ; - -M: byte-vector set-fill (>>fill) ; - vector ( byte-array length -- byte-vector ) @@ -43,9 +32,3 @@ M: byte-vector equal? M: byte-array new-resizable drop ; INSTANCE: byte-vector growable - -: BV{ \ } [ >byte-vector ] parse-literal ; parsing - -M: byte-vector >pprint-sequence ; - -M: byte-vector pprint-delims drop \ BV{ \ } ; diff --git a/extra/byte-vectors/summary.txt b/core/byte-vectors/summary.txt similarity index 100% rename from extra/byte-vectors/summary.txt rename to core/byte-vectors/summary.txt diff --git a/extra/byte-vectors/tags.txt b/core/byte-vectors/tags.txt similarity index 100% rename from extra/byte-vectors/tags.txt rename to core/byte-vectors/tags.txt diff --git a/core/checksums/checksums-docs.factor b/core/checksums/checksums-docs.factor new file mode 100644 index 0000000000..c352f02af4 --- /dev/null +++ b/core/checksums/checksums-docs.factor @@ -0,0 +1,51 @@ +USING: help.markup help.syntax kernel math sequences quotations +math.private byte-arrays strings ; +IN: checksums + +HELP: checksum +{ $class-description "The class of checksum algorithms." } ; + +HELP: hex-string +{ $values { "seq" "a sequence" } { "str" "a string" } } +{ $description "Converts a sequence of values from 0-255 to a string of hex numbers from 0-ff." } +{ $examples + { $example "USING: checksums io ;" "B{ 1 2 3 4 } hex-string print" "01020304" } +} +{ $notes "Numbers are zero-padded on the left." } ; + +HELP: checksum-stream +{ $values { "stream" "an input stream" } { "checksum" "a checksum specifier" } { "value" byte-array } } +{ $contract "Computes the checksum of all data read from the stream." } +{ $side-effects "stream" } ; + +HELP: checksum-bytes +{ $values { "bytes" "a sequence of bytes" } { "checksum" "a checksum specifier" } { "value" byte-array } } +{ $contract "Computes the checksum of all data in a sequence." } ; + +HELP: checksum-lines +{ $values { "lines" "a sequence of sequences of bytes" } { "checksum" "a checksum specifier" } { "value" byte-array } } +{ $contract "Computes the checksum of all data in a sequence." } ; + +HELP: checksum-file +{ $values { "path" "a pathname specifier" } { "checksum" "a checksum specifier" } { "value" byte-array } } +{ $contract "Computes the checksum of all data in a file." } ; + +ARTICLE: "checksums" "Checksums" +"A " { $emphasis "checksum" } " is a function mapping sequences of bytes to fixed-length strings. While checksums are not one-to-one, a good checksum should have a low probability of collision. Additionally, some checksum algorithms are designed to be hard to reverse, in the sense that finding an input string which hashes to a given checksum string requires a brute-force search." +$nl +"Checksums are instances of a class:" +{ $subsection checksum } +"Operations on checksums:" +{ $subsection checksum-bytes } +{ $subsection checksum-stream } +{ $subsection checksum-lines } +"Checksums should implement at least one of " { $link checksum-bytes } " and " { $link checksum-stream } ". Implementing " { $link checksum-lines } " is optional." +$nl +"Utilities:" +{ $subsection checksum-file } +{ $subsection hex-string } +"Checksum implementations:" +{ $subsection "checksums.crc32" } +{ $vocab-subsection "MD5 checksum" "checksums.md5" } +{ $vocab-subsection "SHA1 checksum" "checksums.sha1" } +{ $vocab-subsection "SHA2 checksum" "checksums.sha2" } ; diff --git a/core/checksums/checksums.factor b/core/checksums/checksums.factor new file mode 100644 index 0000000000..849d7821dd --- /dev/null +++ b/core/checksums/checksums.factor @@ -0,0 +1,25 @@ +! Copyright (c) 2008 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +USING: sequences math.parser io io.streams.byte-array +io.encodings.binary io.files kernel ; +IN: checksums + +MIXIN: checksum + +GENERIC: checksum-bytes ( bytes checksum -- value ) + +GENERIC: checksum-stream ( stream checksum -- value ) + +GENERIC: checksum-lines ( lines checksum -- value ) + +M: checksum checksum-bytes >r binary r> checksum-stream ; + +M: checksum checksum-stream >r contents r> checksum-bytes ; + +M: checksum checksum-lines >r B{ CHAR: \n } join r> checksum-bytes ; + +: checksum-file ( path checksum -- n ) + >r binary r> checksum-stream ; + +: hex-string ( seq -- str ) + [ >hex 2 CHAR: 0 pad-left ] { } map-as concat ; diff --git a/core/io/crc32/authors.txt b/core/checksums/crc32/authors.txt similarity index 100% rename from core/io/crc32/authors.txt rename to core/checksums/crc32/authors.txt diff --git a/core/checksums/crc32/crc32-docs.factor b/core/checksums/crc32/crc32-docs.factor new file mode 100644 index 0000000000..0f277bcd16 --- /dev/null +++ b/core/checksums/crc32/crc32-docs.factor @@ -0,0 +1,11 @@ +USING: help.markup help.syntax math ; +IN: checksums.crc32 + +HELP: crc32 +{ $class-description "The CRC32 checksum algorithm." } ; + +ARTICLE: "checksums.crc32" "CRC32 checksum" +"The CRC32 checksum algorithm provides a quick but unreliable way to detect changes in data." +{ $subsection crc32 } ; + +ABOUT: "checksums.crc32" diff --git a/core/checksums/crc32/crc32-tests.factor b/core/checksums/crc32/crc32-tests.factor new file mode 100644 index 0000000000..6fe4b995ee --- /dev/null +++ b/core/checksums/crc32/crc32-tests.factor @@ -0,0 +1,6 @@ +USING: checksums checksums.crc32 kernel math tools.test namespaces ; + +[ B{ 0 0 0 0 } ] [ "" crc32 checksum-bytes ] unit-test + +[ B{ HEX: cb HEX: f4 HEX: 39 HEX: 26 } ] [ "123456789" crc32 checksum-bytes ] unit-test + diff --git a/core/io/crc32/crc32.factor b/core/checksums/crc32/crc32.factor similarity index 59% rename from core/io/crc32/crc32.factor rename to core/checksums/crc32/crc32.factor index afe7e4bfb7..e1f0b9417b 100755 --- a/core/io/crc32/crc32.factor +++ b/core/checksums/crc32/crc32.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. USING: kernel math sequences sequences.private namespaces words io io.binary io.files io.streams.string quotations -definitions ; -IN: io.crc32 +definitions checksums ; +IN: checksums.crc32 : crc32-polynomial HEX: edb88320 ; inline @@ -20,10 +20,20 @@ IN: io.crc32 mask-byte crc32-table nth-unsafe >bignum swap -8 shift bitxor ; inline -: crc32 ( seq -- n ) - >r HEX: ffffffff dup r> [ (crc32) ] each bitxor ; +SINGLETON: crc32 -: lines-crc32 ( seq -- n ) - HEX: ffffffff tuck [ - [ (crc32) ] each CHAR: \n (crc32) - ] reduce bitxor ; +INSTANCE: crc32 checksum + +: init-crc32 drop >r HEX: ffffffff dup r> ; inline + +: finish-crc32 bitxor 4 >be ; inline + +M: crc32 checksum-bytes + init-crc32 + [ (crc32) ] each + finish-crc32 ; + +M: crc32 checksum-lines + init-crc32 + [ [ (crc32) ] each CHAR: \n (crc32) ] each + finish-crc32 ; diff --git a/core/io/crc32/summary.txt b/core/checksums/crc32/summary.txt similarity index 100% rename from core/io/crc32/summary.txt rename to core/checksums/crc32/summary.txt diff --git a/core/io/crc32/crc32-docs.factor b/core/io/crc32/crc32-docs.factor deleted file mode 100644 index 7f85ee2b4e..0000000000 --- a/core/io/crc32/crc32-docs.factor +++ /dev/null @@ -1,17 +0,0 @@ -USING: help.markup help.syntax math ; -IN: io.crc32 - -HELP: crc32 -{ $values { "seq" "a sequence of bytes" } { "n" integer } } -{ $description "Computes the CRC32 checksum of a sequence of bytes." } ; - -HELP: lines-crc32 -{ $values { "seq" "a sequence of strings" } { "n" integer } } -{ $description "Computes the CRC32 checksum of a sequence of lines of bytes." } ; - -ARTICLE: "io.crc32" "CRC32 checksum calculation" -"The CRC32 checksum algorithm provides a quick but unreliable way to detect changes in data." -{ $subsection crc32 } -{ $subsection lines-crc32 } ; - -ABOUT: "io.crc32" diff --git a/core/io/crc32/crc32-tests.factor b/core/io/crc32/crc32-tests.factor deleted file mode 100644 index 5eafae23cb..0000000000 --- a/core/io/crc32/crc32-tests.factor +++ /dev/null @@ -1,5 +0,0 @@ -USING: io.crc32 kernel math tools.test namespaces ; - -[ 0 ] [ "" crc32 ] unit-test -[ HEX: cbf43926 ] [ "123456789" crc32 ] unit-test - diff --git a/core/optimizer/known-words/known-words.factor b/core/optimizer/known-words/known-words.factor index 6e1aacff44..d1dbefe26b 100755 --- a/core/optimizer/known-words/known-words.factor +++ b/core/optimizer/known-words/known-words.factor @@ -4,7 +4,7 @@ IN: optimizer.known-words USING: alien arrays generic hashtables inference.dataflow inference.class kernel assocs math math.private kernel.private sequences words parser vectors strings sbufs io namespaces -assocs quotations sequences.private io.binary io.crc32 +assocs quotations sequences.private io.binary io.streams.string layouts splitting math.intervals math.floats.private classes.tuple classes.tuple.private classes classes.algebra optimizer.def-use optimizer.backend @@ -126,8 +126,6 @@ sequences.private combinators ; \ >sbuf { string } "specializer" set-word-prop -\ crc32 { string } "specializer" set-word-prop - \ split, { string string } "specializer" set-word-prop \ memq? { array } "specializer" set-word-prop diff --git a/core/prettyprint/backend/backend.factor b/core/prettyprint/backend/backend.factor index e13a991e2b..f992b9ca01 100755 --- a/core/prettyprint/backend/backend.factor +++ b/core/prettyprint/backend/backend.factor @@ -1,10 +1,11 @@ ! Copyright (C) 2003, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays byte-arrays bit-arrays generic hashtables io -assocs kernel math namespaces sequences strings sbufs io.styles -vectors words prettyprint.config prettyprint.sections quotations -io io.files math.parser effects classes.tuple math.order -classes.tuple.private classes float-arrays ; +USING: arrays byte-arrays byte-vectors bit-arrays generic +hashtables io assocs kernel math namespaces sequences strings +sbufs io.styles vectors words prettyprint.config +prettyprint.sections quotations io io.files math.parser effects +classes.tuple math.order classes.tuple.private classes +float-arrays ; IN: prettyprint.backend GENERIC: pprint* ( obj -- ) @@ -140,6 +141,7 @@ M: compose pprint-delims drop \ [ \ ] ; M: array pprint-delims drop \ { \ } ; M: byte-array pprint-delims drop \ B{ \ } ; M: bit-array pprint-delims drop \ ?{ \ } ; +M: byte-vector pprint-delims drop \ BV{ \ } ; M: float-array pprint-delims drop \ F{ \ } ; M: vector pprint-delims drop \ V{ \ } ; M: hashtable pprint-delims drop \ H{ \ } ; @@ -152,6 +154,7 @@ GENERIC: >pprint-sequence ( obj -- seq ) M: object >pprint-sequence ; M: vector >pprint-sequence ; +M: byte-vector >pprint-sequence ; M: curry >pprint-sequence ; M: compose >pprint-sequence ; M: hashtable >pprint-sequence >alist ; diff --git a/core/source-files/source-files.factor b/core/source-files/source-files.factor index 5ef2d46790..36a1806e12 100755 --- a/core/source-files/source-files.factor +++ b/core/source-files/source-files.factor @@ -3,8 +3,8 @@ USING: arrays definitions generic assocs kernel math namespaces prettyprint sequences strings vectors words quotations inspector io.styles io combinators sorting splitting math.parser effects -continuations debugger io.files io.crc32 vocabs hashtables -graphs compiler.units io.encodings.utf8 accessors ; +continuations debugger io.files checksums checksums.crc32 vocabs +hashtables graphs compiler.units io.encodings.utf8 accessors ; IN: source-files SYMBOL: source-files @@ -15,7 +15,7 @@ checksum uses definitions ; : record-checksum ( lines source-file -- ) - >r lines-crc32 r> set-source-file-checksum ; + >r crc32 checksum-lines r> set-source-file-checksum ; : (xref-source) ( source-file -- pathname uses ) dup source-file-path diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor index b2f063ddf1..2e1c46fac1 100755 --- a/core/syntax/syntax.factor +++ b/core/syntax/syntax.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2004, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien arrays bit-arrays byte-arrays +USING: alien arrays bit-arrays byte-arrays byte-vectors definitions generic hashtables kernel math namespaces parser sequences strings sbufs vectors words quotations io assocs splitting classes.tuple generic.standard @@ -79,6 +79,7 @@ IN: bootstrap.syntax "{" [ \ } [ >array ] parse-literal ] define-syntax "V{" [ \ } [ >vector ] parse-literal ] define-syntax "B{" [ \ } [ >byte-array ] parse-literal ] define-syntax + "BV{" [ \ } [ >byte-vector ] parse-literal ] define-syntax "?{" [ \ } [ >bit-array ] parse-literal ] define-syntax "F{" [ \ } [ >float-array ] parse-literal ] define-syntax "H{" [ \ } [ >hashtable ] parse-literal ] define-syntax diff --git a/extra/benchmark/crc32/crc32.factor b/extra/benchmark/crc32/crc32.factor index ec424e89c9..0e5482da30 100755 --- a/extra/benchmark/crc32/crc32.factor +++ b/extra/benchmark/crc32/crc32.factor @@ -1,10 +1,10 @@ -USING: io.crc32 io.encodings.ascii io.files kernel math ; +USING: checksums checksums.crc32 io.encodings.ascii io.files kernel math ; IN: benchmark.crc32 : crc32-primes-list ( -- ) 10 [ - "extra/math/primes/list/list.factor" resource-path - ascii file-contents crc32 drop + "resource:extra/math/primes/list/list.factor" + crc32 checksum-file drop ] times ; MAIN: crc32-primes-list diff --git a/extra/benchmark/md5/md5.factor b/extra/benchmark/md5/md5.factor index 3043725acd..8a259c1217 100644 --- a/extra/benchmark/md5/md5.factor +++ b/extra/benchmark/md5/md5.factor @@ -1,7 +1,7 @@ -USING: crypto.md5 io.files kernel ; +USING: checksums checksums.md5 io.files kernel ; IN: benchmark.md5 : md5-primes-list ( -- ) - "extra/math/primes/list/list.factor" resource-path file>md5 drop ; + "resource:extra/math/primes/list/list.factor" md5 checksum-file drop ; MAIN: md5-primes-list diff --git a/extra/benchmark/reverse-complement/reverse-complement-tests.factor b/extra/benchmark/reverse-complement/reverse-complement-tests.factor index c66de87cb5..883124105b 100755 --- a/extra/benchmark/reverse-complement/reverse-complement-tests.factor +++ b/extra/benchmark/reverse-complement/reverse-complement-tests.factor @@ -1,13 +1,13 @@ IN: benchmark.reverse-complement.tests -USING: tools.test benchmark.reverse-complement crypto.md5 +USING: tools.test benchmark.reverse-complement +checksums checksums.md5 io.files kernel ; [ "c071aa7e007a9770b2fb4304f55a17e5" ] [ - "extra/benchmark/reverse-complement/reverse-complement-test-in.txt" - "extra/benchmark/reverse-complement/reverse-complement-test-out.txt" - [ resource-path ] bi@ + "resource:extra/benchmark/reverse-complement/reverse-complement-test-in.txt" + "resource:extra/benchmark/reverse-complement/reverse-complement-test-out.txt" reverse-complement - "extra/benchmark/reverse-complement/reverse-complement-test-out.txt" - resource-path file>md5str + "resource:extra/benchmark/reverse-complement/reverse-complement-test-out.txt" + md5 checksum-file hex-string ] unit-test diff --git a/extra/benchmark/sha1/sha1.factor b/extra/benchmark/sha1/sha1.factor index 897d83ea0e..c43f780135 100644 --- a/extra/benchmark/sha1/sha1.factor +++ b/extra/benchmark/sha1/sha1.factor @@ -1,7 +1,7 @@ -USING: crypto.sha1 io.files kernel ; +USING: checksum checksums.sha1 io.files kernel ; IN: benchmark.sha1 : sha1-primes-list ( -- ) - "extra/math/primes/list/list.factor" resource-path file>sha1 drop ; + "resource:extra/math/primes/list/list.factor" sha1 checksum-file drop ; MAIN: sha1-primes-list diff --git a/extra/bootstrap/image/download/download.factor b/extra/bootstrap/image/download/download.factor index a186954ef0..46aca6cc6b 100644 --- a/extra/bootstrap/image/download/download.factor +++ b/extra/bootstrap/image/download/download.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: bootstrap.image.download -USING: http.client crypto.md5 splitting assocs kernel io.files -bootstrap.image sequences io ; +USING: http.client checksums checksums.md5 splitting assocs +kernel io.files bootstrap.image sequences io ; : url "http://factorcode.org/images/latest/" ; @@ -12,7 +12,7 @@ bootstrap.image sequences io ; : need-new-image? ( image -- ? ) dup exists? - [ dup file>md5str swap download-checksums at = not ] + [ [ md5 checksum-file hex-string ] [ download-checksums at ] bi = not ] [ drop t ] if ; : download-image ( arch -- ) diff --git a/extra/bootstrap/image/upload/upload.factor b/extra/bootstrap/image/upload/upload.factor index ab26a4ff13..30d0428744 100755 --- a/extra/bootstrap/image/upload/upload.factor +++ b/extra/bootstrap/image/upload/upload.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. +USING: http.client checksums checksums.md5 splitting assocs +kernel io.files bootstrap.image sequences io namespaces +io.launcher math io.encodings.ascii ; IN: bootstrap.image.upload -USING: http.client crypto.md5 splitting assocs kernel io.files -bootstrap.image sequences io namespaces io.launcher math io.encodings.ascii ; SYMBOL: upload-images-destination @@ -17,7 +18,9 @@ SYMBOL: upload-images-destination : compute-checksums ( -- ) checksums ascii [ - boot-image-names [ dup write bl file>md5str print ] each + boot-image-names [ + [ write bl ] [ md5 checksum-file hex-string print ] bi + ] each ] with-file-writer ; : upload-images ( -- ) diff --git a/extra/crypto/md5/authors.txt b/extra/checksums/md5/authors.txt similarity index 100% rename from extra/crypto/md5/authors.txt rename to extra/checksums/md5/authors.txt diff --git a/extra/checksums/md5/md5-docs.factor b/extra/checksums/md5/md5-docs.factor new file mode 100755 index 0000000000..dca039d1d3 --- /dev/null +++ b/extra/checksums/md5/md5-docs.factor @@ -0,0 +1,11 @@ +USING: help.markup help.syntax ; +IN: checksums.md5 + +HELP: md5 +{ $description "MD5 checksum algorithm." } ; + +ARTICLE: "checksums.md5" "MD5 checksum" +"The MD5 checksum algorithm implements a one-way hash function. While it is widely used, many weaknesses are known and it should not be used in new applications (" { $url "http://www.schneier.com/blog/archives/2005/03/more_hash_funct.html" } ")." +{ $subsection md5 } ; + +ABOUT: "checksums.md5" diff --git a/extra/checksums/md5/md5-tests.factor b/extra/checksums/md5/md5-tests.factor new file mode 100755 index 0000000000..8e314f7c28 --- /dev/null +++ b/extra/checksums/md5/md5-tests.factor @@ -0,0 +1,10 @@ +USING: kernel math namespaces checksums checksums.md5 tools.test byte-arrays ; + +[ "d41d8cd98f00b204e9800998ecf8427e" ] [ "" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "0cc175b9c0f1b6a831c399e269772661" ] [ "a" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "900150983cd24fb0d6963f7d28e17f72" ] [ "abc" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "f96b697d7cb7938d525a2f31aaf161d0" ] [ "message digest" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "c3fcd3d76192e4007dfb496cca67e13b" ] [ "abcdefghijklmnopqrstuvwxyz" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "d174ab98d277d9f5a5611c2c9f419d9f" ] [ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" >byte-array md5 checksum-bytes hex-string ] unit-test +[ "57edf4a22be3c955ac49da2e2107b67a" ] [ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" >byte-array md5 checksum-bytes hex-string ] unit-test + diff --git a/extra/crypto/md5/md5.factor b/extra/checksums/md5/md5.factor similarity index 88% rename from extra/crypto/md5/md5.factor rename to extra/checksums/md5/md5.factor index 45e10da74d..78494a40c0 100755 --- a/extra/crypto/md5/md5.factor +++ b/extra/checksums/md5/md5.factor @@ -3,8 +3,8 @@ USING: kernel io io.binary io.files io.streams.byte-array math math.functions math.parser namespaces splitting strings sequences crypto.common byte-arrays locals sequences.private -io.encodings.binary symbols math.bitfields.lib ; -IN: crypto.md5 +io.encodings.binary symbols math.bitfields.lib checksums ; +IN: checksums.md5 md5) ( -- ) +: stream>md5 ( -- ) 64 read [ process-md5-block ] keep - length 64 = [ (stream>md5) ] when ; + length 64 = [ stream>md5 ] when ; : get-md5 ( -- str ) [ a b c d ] [ get 4 >le ] map concat >byte-array ; PRIVATE> -: stream>md5 ( stream -- byte-array ) - [ initialize-md5 (stream>md5) get-md5 ] with-stream ; +SINGLETON: md5 -: byte-array>md5 ( byte-array -- checksum ) - binary stream>md5 ; +INSTANCE: md5 checksum -: byte-array>md5str ( byte-array -- md5-string ) - byte-array>md5 hex-string ; - -: file>md5 ( path -- byte-array ) - binary stream>md5 ; - -: file>md5str ( path -- md5-string ) - file>md5 hex-string ; +M: md5 checksum-stream ( stream -- byte-array ) + drop [ initialize-md5 stream>md5 get-md5 ] with-stream ; diff --git a/extra/crypto/sha1/authors.txt b/extra/checksums/sha1/authors.txt similarity index 100% rename from extra/crypto/sha1/authors.txt rename to extra/checksums/sha1/authors.txt diff --git a/extra/checksums/sha1/sha1-docs.factor b/extra/checksums/sha1/sha1-docs.factor new file mode 100644 index 0000000000..8b8bf1cfa9 --- /dev/null +++ b/extra/checksums/sha1/sha1-docs.factor @@ -0,0 +1,11 @@ +USING: help.markup help.syntax ; +IN: checksums.sha1 + +HELP: sha1 +{ $description "SHA1 checksum algorithm." } ; + +ARTICLE: "checksums.sha1" "SHA1 checksum" +"The SHA1 checksum algorithm implements a one-way hash function. It is generally considered to be stronger than MD5, however there is a known algorithm for finding collisions more effectively than a brute-force search (" { $url "http://www.schneier.com/blog/archives/2005/02/sha1_broken.html" } ")." +{ $subsection sha1 } ; + +ABOUT: "checksums.sha1" diff --git a/extra/crypto/sha1/sha1-tests.factor b/extra/checksums/sha1/sha1-tests.factor similarity index 69% rename from extra/crypto/sha1/sha1-tests.factor rename to extra/checksums/sha1/sha1-tests.factor index 14307355c2..808d37d1e4 100755 --- a/extra/crypto/sha1/sha1-tests.factor +++ b/extra/checksums/sha1/sha1-tests.factor @@ -1,14 +1,14 @@ -USING: arrays kernel math namespaces sequences tools.test crypto.sha1 ; +USING: arrays kernel math namespaces sequences tools.test checksums checksums.sha1 ; -[ "a9993e364706816aba3e25717850c26c9cd0d89d" ] [ "abc" byte-array>sha1str ] unit-test -[ "84983e441c3bd26ebaae4aa1f95129e5e54670f1" ] [ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" byte-array>sha1str ] unit-test +[ "a9993e364706816aba3e25717850c26c9cd0d89d" ] [ "abc" sha1 checksum-bytes hex-string ] unit-test +[ "84983e441c3bd26ebaae4aa1f95129e5e54670f1" ] [ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" sha1 checksum-bytes hex-string ] unit-test ! [ "34aa973cd4c4daa4f61eeb2bdbad27316534016f" ] [ 1000000 CHAR: a fill string>sha1str ] unit-test ! takes a long time... [ "dea356a2cddd90c7a7ecedc5ebb563934f460452" ] [ "0123456701234567012345670123456701234567012345670123456701234567" -10 swap concat byte-array>sha1str ] unit-test +10 swap concat sha1 checksum-bytes hex-string ] unit-test [ ";\u00009b\u0000fd\u0000cdK\u0000a3^s\u0000d0*\u0000e3\\\u0000b5\u000013<\u0000e8wA\u0000b2\u000083\u0000d20\u0000f1\u0000e6\u0000cc\u0000d8\u00001e\u00009c\u000004\u0000d7PT]\u0000ce,\u000001\u000012\u000080\u000096\u000099" ] [ "\u000066\u000053\u0000f1\u00000c\u00001a\u0000fa\u0000b5\u00004c\u000061\u0000c8\u000025\u000075\u0000a8\u00004a\u0000fe\u000030\u0000d8\u0000aa\u00001a\u00003a\u000096\u000096\u0000b3\u000018\u000099\u000092\u0000bf\u0000e1\u0000cb\u00007f\u0000a6\u0000a7" - byte-array>sha1-interleave + sha1-interleave ] unit-test diff --git a/extra/crypto/sha1/sha1.factor b/extra/checksums/sha1/sha1.factor similarity index 83% rename from extra/crypto/sha1/sha1.factor rename to extra/checksums/sha1/sha1.factor index 3a74d1f5db..2efab873bc 100755 --- a/extra/crypto/sha1/sha1.factor +++ b/extra/checksums/sha1/sha1.factor @@ -1,8 +1,8 @@ USING: arrays combinators crypto.common kernel io io.encodings.binary io.files io.streams.byte-array math.vectors strings sequences namespaces math parser sequences vectors -io.binary hashtables symbols math.bitfields.lib ; -IN: crypto.sha1 +io.binary hashtables symbols math.bitfields.lib checksums ; +IN: checksums.sha1 ! Implemented according to RFC 3174. @@ -99,30 +99,22 @@ SYMBOLS: h0 h1 h2 h3 h4 A B C D E w K ; [ (process-sha1-block) ] each ] if ; -: (stream>sha1) ( -- ) +: stream>sha1 ( -- ) 64 read [ process-sha1-block ] keep - length 64 = [ (stream>sha1) ] when ; + length 64 = [ stream>sha1 ] when ; : get-sha1 ( -- str ) [ [ h0 h1 h2 h3 h4 ] [ get 4 >be % ] each ] "" make ; -: stream>sha1 ( stream -- sha1 ) - [ initialize-sha1 (stream>sha1) get-sha1 ] with-stream ; +SINGLETON: sha1 -: byte-array>sha1 ( string -- sha1 ) - binary stream>sha1 ; +INSTANCE: sha1 checksum -: byte-array>sha1str ( string -- str ) - byte-array>sha1 hex-string ; +M: sha1 checksum-stream ( stream -- sha1 ) + drop [ initialize-sha1 stream>sha1 get-sha1 ] with-stream ; -: byte-array>sha1-bignum ( string -- n ) - byte-array>sha1 be> ; - -: file>sha1 ( file -- sha1 ) - binary stream>sha1 ; - -: byte-array>sha1-interleave ( string -- seq ) +: sha1-interleave ( string -- seq ) [ zero? ] left-trim dup length odd? [ rest ] when - seq>2seq [ byte-array>sha1 ] bi@ + seq>2seq [ sha1 checksum-bytes ] bi@ 2seq>seq ; diff --git a/extra/crypto/sha2/authors.txt b/extra/checksums/sha2/authors.txt similarity index 100% rename from extra/crypto/sha2/authors.txt rename to extra/checksums/sha2/authors.txt diff --git a/extra/checksums/sha2/sha2-docs.factor b/extra/checksums/sha2/sha2-docs.factor new file mode 100644 index 0000000000..c39831b266 --- /dev/null +++ b/extra/checksums/sha2/sha2-docs.factor @@ -0,0 +1,11 @@ +USING: help.markup help.syntax ; +IN: checksums.sha2 + +HELP: sha-256 +{ $description "SHA-256 checksum algorithm." } ; + +ARTICLE: "checksums.sha2" "SHA2 checksum" +"The SHA2 checksum algorithm implements a one-way hash function. It is generally considered to be pretty strong." +{ $subsection sha-256 } ; + +ABOUT: "checksums.sha2" diff --git a/extra/crypto/sha2/sha2-tests.factor b/extra/checksums/sha2/sha2-tests.factor similarity index 51% rename from extra/crypto/sha2/sha2-tests.factor rename to extra/checksums/sha2/sha2-tests.factor index 8fe655f205..2f4e3c51c4 100755 --- a/extra/crypto/sha2/sha2-tests.factor +++ b/extra/checksums/sha2/sha2-tests.factor @@ -1,7 +1,7 @@ -USING: arrays kernel math namespaces sequences tools.test crypto.sha2 ; -[ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ] [ "" byte-array>sha-256-string ] unit-test -[ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" ] [ "abc" byte-array>sha-256-string ] unit-test -[ "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650" ] [ "message digest" byte-array>sha-256-string ] unit-test -[ "71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73" ] [ "abcdefghijklmnopqrstuvwxyz" byte-array>sha-256-string ] unit-test -[ "db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0" ] [ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" byte-array>sha-256-string ] unit-test -[ "f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e" ] [ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" byte-array>sha-256-string ] unit-test +USING: arrays kernel math namespaces sequences tools.test checksums.sha2 checksums ; +[ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ] [ "" sha-256 checksum-bytes hex-string ] unit-test +[ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" ] [ "abc" sha-256 checksum-bytes hex-string ] unit-test +[ "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650" ] [ "message digest" sha-256 checksum-bytes hex-string ] unit-test +[ "71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73" ] [ "abcdefghijklmnopqrstuvwxyz" sha-256 checksum-bytes hex-string ] unit-test +[ "db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0" ] [ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" sha-256 checksum-bytes hex-string ] unit-test +[ "f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e" ] [ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" sha-256 checksum-bytes hex-string ] unit-test diff --git a/extra/crypto/sha2/sha2.factor b/extra/checksums/sha2/sha2.factor similarity index 94% rename from extra/crypto/sha2/sha2.factor rename to extra/checksums/sha2/sha2.factor index 0acc5c1388..e5f16c9c11 100755 --- a/extra/crypto/sha2/sha2.factor +++ b/extra/checksums/sha2/sha2.factor @@ -1,6 +1,6 @@ USING: crypto.common kernel splitting math sequences namespaces -io.binary symbols math.bitfields.lib ; -IN: crypto.sha2 +io.binary symbols math.bitfields.lib checksums ; +IN: checksums.sha2 -: byte-array>sha-256 ( string -- string ) - [ +SINGLETON: sha-256 + +INSTANCE: sha-256 checksum + +M: sha-256 checksum-bytes + drop [ K-256 K set initial-H-256 H set 4 word-size set 64 block-size set byte-array>sha2 ] with-scope ; - -: byte-array>sha-256-string ( string -- hexstring ) - byte-array>sha-256 hex-string ; diff --git a/extra/crypto/common/common.factor b/extra/crypto/common/common.factor index a714727ad9..efe4653eba 100644 --- a/extra/crypto/common/common.factor +++ b/extra/crypto/common/common.factor @@ -1,5 +1,6 @@ USING: arrays kernel io io.binary sbufs splitting strings sequences -namespaces math math.parser parser hints math.bitfields.lib ; +namespaces math math.parser parser hints math.bitfields.lib +assocs ; IN: crypto.common : w+ ( int int -- int ) + 32 bits ; inline @@ -39,9 +40,6 @@ SYMBOL: big-endian? : update-old-new ( old new -- ) [ get >r get r> ] 2keep >r >r w+ dup r> set r> set ; inline -: hex-string ( seq -- str ) - [ [ >hex 2 48 pad-left % ] each ] "" make ; - : slice3 ( n seq -- a b c ) >r dup 3 + r> first3 ; : seq>2seq ( seq -- seq1 seq2 ) @@ -50,7 +48,7 @@ SYMBOL: big-endian? : 2seq>seq ( seq1 seq2 -- seq ) #! { aceg } { bdfh } -> { abcdefgh } - [ 2array flip concat ] keep like ; + [ zip concat ] keep like ; : mod-nth ( n seq -- elt ) #! 5 "abcd" -> b diff --git a/extra/crypto/hmac/hmac.factor b/extra/crypto/hmac/hmac.factor index 91d404aead..9770a3a266 100755 --- a/extra/crypto/hmac/hmac.factor +++ b/extra/crypto/hmac/hmac.factor @@ -1,6 +1,7 @@ -USING: arrays combinators crypto.common crypto.md5 crypto.sha1 -crypto.md5.private io io.binary io.files io.streams.byte-array -kernel math math.vectors memoize sequences io.encodings.binary ; +USING: arrays combinators crypto.common checksums checksums.md5 +checksums.sha1 crypto.md5.private io io.binary io.files +io.streams.byte-array kernel math math.vectors memoize sequences +io.encodings.binary ; IN: crypto.hmac : sha1-hmac ( Ko Ki -- hmac ) diff --git a/extra/crypto/md5/md5-docs.factor b/extra/crypto/md5/md5-docs.factor deleted file mode 100755 index 667e0449ae..0000000000 --- a/extra/crypto/md5/md5-docs.factor +++ /dev/null @@ -1,18 +0,0 @@ -USING: help.markup help.syntax kernel math sequences quotations -crypto.common byte-arrays ; -IN: crypto.md5 - -HELP: stream>md5 -{ $values { "stream" "a stream" } { "byte-array" "md5 hash" } } -{ $description "Take the MD5 hash until end of stream." } -{ $notes "Used to implement " { $link byte-array>md5 } " and " { $link file>md5 } ". Call " { $link hex-string } " to convert to the canonical string representation." } ; - -HELP: byte-array>md5 -{ $values { "byte-array" byte-array } { "checksum" "an md5 hash" } } -{ $description "Outputs the MD5 hash of a byte array." } -{ $notes "Call " { $link hex-string } " to convert to the canonical string representation." } ; - -HELP: file>md5 -{ $values { "path" "a path" } { "byte-array" "byte-array md5 hash" } } -{ $description "Outputs the MD5 hash of a file." } -{ $notes "Call " { $link hex-string } " to convert to the canonical string representation." } ; diff --git a/extra/crypto/md5/md5-tests.factor b/extra/crypto/md5/md5-tests.factor deleted file mode 100755 index 73bd240455..0000000000 --- a/extra/crypto/md5/md5-tests.factor +++ /dev/null @@ -1,10 +0,0 @@ -USING: kernel math namespaces crypto.md5 tools.test byte-arrays ; - -[ "d41d8cd98f00b204e9800998ecf8427e" ] [ "" >byte-array byte-array>md5str ] unit-test -[ "0cc175b9c0f1b6a831c399e269772661" ] [ "a" >byte-array byte-array>md5str ] unit-test -[ "900150983cd24fb0d6963f7d28e17f72" ] [ "abc" >byte-array byte-array>md5str ] unit-test -[ "f96b697d7cb7938d525a2f31aaf161d0" ] [ "message digest" >byte-array byte-array>md5str ] unit-test -[ "c3fcd3d76192e4007dfb496cca67e13b" ] [ "abcdefghijklmnopqrstuvwxyz" >byte-array byte-array>md5str ] unit-test -[ "d174ab98d277d9f5a5611c2c9f419d9f" ] [ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" >byte-array byte-array>md5str ] unit-test -[ "57edf4a22be3c955ac49da2e2107b67a" ] [ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" >byte-array byte-array>md5str ] unit-test - diff --git a/extra/help/handbook/handbook.factor b/extra/help/handbook/handbook.factor index ce875b32d1..a9e94466c4 100755 --- a/extra/help/handbook/handbook.factor +++ b/extra/help/handbook/handbook.factor @@ -204,7 +204,8 @@ ARTICLE: "io" "Input and output" { $heading "Other features" } { $subsection "network-streams" } { $subsection "io.launcher" } -{ $subsection "io.timeouts" } ; +{ $subsection "io.timeouts" } +{ $subsection "checksums" } ; ARTICLE: "tools" "Developer tools" { $subsection "tools.vocabs" } diff --git a/extra/http/server/auth/providers/providers.factor b/extra/http/server/auth/providers/providers.factor index 512ddc5f5b..121f065292 100755 --- a/extra/http/server/auth/providers/providers.factor +++ b/extra/http/server/auth/providers/providers.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel accessors random math.parser locals -sequences math crypto.sha2 ; +sequences math ; IN: http.server.auth.providers TUPLE: user username realname password email ticket profile deleted changed? ; diff --git a/extra/tools/vocabs/vocabs.factor b/extra/tools/vocabs/vocabs.factor index e265f233e3..effa17c179 100755 --- a/extra/tools/vocabs/vocabs.factor +++ b/extra/tools/vocabs/vocabs.factor @@ -3,8 +3,8 @@ USING: io.files kernel io.encodings.utf8 vocabs.loader vocabs sequences namespaces math.parser arrays hashtables assocs memoize inspector sorting splitting combinators source-files -io debugger continuations compiler.errors init io.crc32 -sets ; +io debugger continuations compiler.errors init +checksums checksums.crc32 sets ; IN: tools.vocabs : vocab-tests-file ( vocab -- path ) @@ -63,7 +63,7 @@ SYMBOL: failures dup source-files get at [ dup source-file-path dup exists? [ - utf8 file-lines lines-crc32 + utf8 file-lines crc32 checksum-lines swap source-file-checksum = not ] [ 2drop f From 77caac1401926034bd1063ff9a3ccca3b8927881 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 30 Apr 2008 16:12:08 -0500 Subject: [PATCH 172/270] Remove file --- extra/crypto/common/common-docs.factor | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 extra/crypto/common/common-docs.factor diff --git a/extra/crypto/common/common-docs.factor b/extra/crypto/common/common-docs.factor deleted file mode 100644 index 559c7934d0..0000000000 --- a/extra/crypto/common/common-docs.factor +++ /dev/null @@ -1,13 +0,0 @@ -USING: help.markup help.syntax kernel math sequences quotations -math.private ; -IN: crypto.common - -HELP: hex-string -{ $values { "seq" "a sequence" } { "str" "a string" } } -{ $description "Converts a sequence of values from 0-255 to a string of hex numbers from 0-ff." } -{ $examples - { $example "USING: crypto.common io ;" "B{ 1 2 3 4 } hex-string print" "01020304" } -} -{ $notes "Numbers are zero-padded on the left." } ; - - From eafdb19f903f97ae06583b9863c3f466c633c185 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 30 Apr 2008 16:12:14 -0500 Subject: [PATCH 173/270] Cleanups --- extra/opengl/opengl.factor | 2 +- extra/webapps/counter/counter.factor | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/extra/opengl/opengl.factor b/extra/opengl/opengl.factor index ab9ae38ac1..ee58a4e345 100755 --- a/extra/opengl/opengl.factor +++ b/extra/opengl/opengl.factor @@ -87,7 +87,7 @@ MACRO: all-enabled-client-state ( seq quot -- ) : adjust-points [ [ 1 + 0.5 * ] map ] bi@ ; -: scale-points 2array flip [ v* ] with map [ v+ ] with map ; +: scale-points zip [ v* ] with map [ v+ ] with map ; : circle-points ( loc dim steps -- points ) circle-steps unit-circle adjust-points scale-points ; diff --git a/extra/webapps/counter/counter.factor b/extra/webapps/counter/counter.factor index 37b4c8e5e1..3cc1eb567b 100644 --- a/extra/webapps/counter/counter.factor +++ b/extra/webapps/counter/counter.factor @@ -1,5 +1,6 @@ USING: math kernel accessors http.server http.server.actions -http.server.sessions http.server.templating.fhtml locals ; +http.server.sessions http.server.templating +http.server.templating.fhtml locals ; IN: webapps.counter SYMBOL: count @@ -15,11 +16,11 @@ M: counter-app init-session* "" f ] >>display ; +: counter-template ( -- template ) + "resource:extra/webapps/counter/counter.fhtml" ; + : ( -- action ) - [ - "text/html" - "resource:extra/webapps/counter/counter.fhtml" >>body - ] >>display ; + [ counter-template serve-template ] >>display ; : ( -- responder ) counter-app new-dispatcher From ce2412c4c84f15a01f66a20d5a47f6d9bb47b494 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Thu, 1 May 2008 10:11:19 +1000 Subject: [PATCH 174/270] early tangle working with latest git --- extra/semantic-db/semantic-db.factor | 6 ++--- extra/tangle/tangle.factor | 36 ++++++++-------------------- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/extra/semantic-db/semantic-db.factor b/extra/semantic-db/semantic-db.factor index 22b08322d2..1c3dd2d54e 100755 --- a/extra/semantic-db/semantic-db.factor +++ b/extra/semantic-db/semantic-db.factor @@ -15,7 +15,7 @@ node "node" { "content" "content" TEXT } } define-persistent -: delete-node ( node -- ) delete-tuple ; +: delete-node ( node -- ) delete-tuples ; : create-node ( content -- node ) f swap dup insert-tuple ; : load-node ( id -- node ) f select-tuple ; @@ -33,7 +33,7 @@ TUPLE: arc id subject object relation ; : ( id -- arc ) arc new swap >>id ; -: delete-arc ( arc -- ) delete-tuple ; +: delete-arc ( arc -- ) delete-tuples ; : create-arc ( subject object relation -- ) [ id>> ] 3apply insert-tuple ; @@ -76,7 +76,7 @@ TUPLE: arc id subject object relation ; arc "arc" { - { "id" "id" +native-id+ +autoincrement+ } + { "id" "id" +db-assigned-id+ +autoincrement+ } { "relation" "relation" INTEGER +not-null+ } { "subject" "subject" INTEGER +not-null+ } { "object" "object" INTEGER +not-null+ } diff --git a/extra/tangle/tangle.factor b/extra/tangle/tangle.factor index c6a1faa27b..9dad155777 100644 --- a/extra/tangle/tangle.factor +++ b/extra/tangle/tangle.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Alex Chapman ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs db db.sqlite db.postgresql http.server http.server.actions io kernel namespaces semantic-db sequences strings ; +USING: accessors assocs db db.sqlite db.postgresql http http.server http.server.actions io kernel math.parser namespaces semantic-db sequences strings ; IN: tangle GENERIC: render* ( content templater -- output ) @@ -13,37 +13,21 @@ M: echo-template render* drop ; ! METHOD: render* { string echo-template } drop ; M: object render render* write ; -TUPLE: tangle db templater ; +TUPLE: tangle db seq templater ; C: tangle -TUPLE: sqlite-tangle ; -TUPLE: postgres-tangle ; - -: make-tangle ( db templater type -- tangle ) - new [ ] dip tuck set-delegate ; - -: ( db templater -- tangle ) sqlite-tangle make-tangle ; -: ( db templater -- tangle ) postgres-tangle make-tangle ; - : with-tangle ( tangle quot -- ) - [ db>> ] dip with-db ; - -: init-db ( tangle -- tangle ) - dup [ init-semantic-db ] with-tangle ; - -GENERIC# new-db 1 ( tangle obj -- tangle ) -M: sqlite-tangle new-db ( tangle filename -- tangle ) - sqlite-db >>db init-db ; -M: postgres-tangle new-db ( tangle args -- tangle ) - postgresql-db >>db init-db ; + [ [ db>> ] [ seq>> ] bi ] dip with-db ; TUPLE: node-responder tangle ; C: node-responder +: node-response ( responder id -- responder ) + load-node [ node-content ] [ "Unknown node" ] if* >>body ; + M: node-responder call-responder* ( path responder -- response ) - "text/plain" nip params get - [ "node-id" swap at* [ >>body ] [ drop ] if ] when* nip ; - -: test-tangle ( -- ) - f f main-responder set ; + dup tangle>> [ + "text/plain" nip request get request-params + [ "node-id" swap at* [ string>number node-response ] [ drop ] if ] when* nip + ] with-tangle ; From eac64bccab46a11de5f3459fd208b4899bb6a52c Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Wed, 30 Apr 2008 19:39:54 -0500 Subject: [PATCH 175/270] Moving VALUE: into unicode.syntax.backend --- extra/unicode/breaks/breaks.factor | 2 +- extra/unicode/data/data.factor | 10 +--------- extra/unicode/syntax/backend/backend.factor | 8 ++++++++ 3 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 extra/unicode/syntax/backend/backend.factor diff --git a/extra/unicode/breaks/breaks.factor b/extra/unicode/breaks/breaks.factor index ee3c8729c4..2117567e9f 100644 --- a/extra/unicode/breaks/breaks.factor +++ b/extra/unicode/breaks/breaks.factor @@ -1,6 +1,6 @@ USING: unicode.categories kernel math combinators splitting sequences math.parser io.files io assocs arrays namespaces -math.ranges unicode.normalize +math.ranges unicode.normalize unicode.syntax.backend unicode.syntax unicode.data compiler.units alien.syntax io.encodings.ascii ; IN: unicode.breaks diff --git a/extra/unicode/data/data.factor b/extra/unicode/data/data.factor index 58d836464c..b1e6fc5f8b 100755 --- a/extra/unicode/data/data.factor +++ b/extra/unicode/data/data.factor @@ -1,16 +1,8 @@ USING: assocs math kernel sequences io.files hashtables -quotations splitting arrays math.parser hash2 +quotations splitting arrays math.parser hash2 unicode.syntax.backend byte-arrays words namespaces words compiler.units parser io.encodings.ascii ; IN: unicode.data -<< -: VALUE: - CREATE-WORD { f } clone [ first ] curry define ; parsing - -: set-value ( value word -- ) - word-def first set-first ; ->> - ! Convenience functions : ?between? ( n/f from to -- ? ) pick [ between? ] [ 3drop f ] if ; diff --git a/extra/unicode/syntax/backend/backend.factor b/extra/unicode/syntax/backend/backend.factor new file mode 100644 index 0000000000..d1065da5c8 --- /dev/null +++ b/extra/unicode/syntax/backend/backend.factor @@ -0,0 +1,8 @@ +USING: kernel parser sequences definitions ; +IN: unicode.syntax.backend + +: VALUE: + CREATE-WORD { f } clone [ first ] curry define ; parsing + +: set-value ( value word -- ) + word-def first set-first ; From b7291869866bf8b4148cd19c1963f179d72b5d37 Mon Sep 17 00:00:00 2001 From: Alex Chapman Date: Thu, 1 May 2008 11:49:55 +1000 Subject: [PATCH 176/270] morse: add a default speed to play at --- extra/morse/morse-tests.factor | 2 +- extra/morse/morse.factor | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/extra/morse/morse-tests.factor b/extra/morse/morse-tests.factor index c87fa483e3..dabb93579d 100644 --- a/extra/morse/morse-tests.factor +++ b/extra/morse/morse-tests.factor @@ -10,4 +10,4 @@ USING: arrays morse strings tools.test ; [ "morse code" ] [ "-- --- .-. ... . / -.-. --- -.. ." morse> ] unit-test [ "hello, world!" ] [ "Hello, World!" >morse morse> ] unit-test [ ] [ "sos" 0.075 play-as-morse ] unit-test -[ ] [ "Factor rocks!" 0.05 play-as-morse ] unit-test +[ ] [ "Factor rocks!" play-as-morse ] unit-test diff --git a/extra/morse/morse.factor b/extra/morse/morse.factor index d0b9e4003a..ecade14cdb 100644 --- a/extra/morse/morse.factor +++ b/extra/morse/morse.factor @@ -167,8 +167,10 @@ SYMBOLS: source dot-buffer dash-buffer intra-char-gap-buffer letter-gap-buffer ; PRIVATE> -: play-as-morse ( str unit-length -- ) +: play-as-morse* ( str unit-length -- ) [ [ letter-gap ] [ ch>morse play-char ] interleave ] swap playing-morse ; +: play-as-morse ( str -- ) + 0.05 play-as-morse* ; From 594f335dfebd4cf483d12a652f666d75d9fc1a44 Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Wed, 30 Apr 2008 21:04:57 -0500 Subject: [PATCH 177/270] Adding IANA encodings table --- extra/io/encodings/iana/iana.factor | 41 ++++++++++++++++++++- extra/unicode/syntax/backend/backend.factor | 2 +- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/extra/io/encodings/iana/iana.factor b/extra/io/encodings/iana/iana.factor index 08b40f802c..1bbb80482d 100644 --- a/extra/io/encodings/iana/iana.factor +++ b/extra/io/encodings/iana/iana.factor @@ -1,7 +1,27 @@ -USING: kernel strings unicode.syntax.backend ; +USING: kernel strings unicode.syntax.backend io.files assocs +splitting sequences io namespaces sets +io.encodings.ascii io.encodings.utf8 io.encodings.utf16 io.encodings.8-bit ; +IN: io.encodings.iana VALUE: n>e-table -VALUE: e>n-table + +: e>n-table H{ + { ascii "US-ASCII" } + { utf8 "UTF-8" } + { utf16 "UTF-16" } + { utf16be "UTF-16BE" } + { utf16le "UTF-16LE" } + { latin1 "ISO-8859-1" } + { latin2 "ISO-8859-2" } + { latin3 "ISO-8859-3" } + { latin4 "ISO-8859-4" } + { latin/cyrillic "ISO-8859-5" } + { latin/arabic "ISO-8859-6" } + { latin/greek "ISO-8859-7" } + { latin/hebrew "ISO-8859-8" } + { latin5 "ISO-8859-9" } + { latin6 "ISO-8859-10" } +} ; : name>encoding ( string -- encoding ) n>e-table at ; @@ -9,4 +29,21 @@ VALUE: e>n-table : encoding>name ( encoding -- string ) e>n-table at ; +: parse-iana ( stream -- synonym-set ) + lines { "" } split [ + [ " " split ] map + [ first { "Name:" "Alias:" } member? ] filter + [ second ] map { "None" } diff + ] map ; +: make-n>e ( stream -- n>e ) ! encodings is string => symbol + parse-iana [ [ + dup [ + e>n-table value-at + [ swap [ set ] with each ] + [ drop ] if* + ] with each + ] each ] H{ } make-assoc ; + +"resource:extra/io/encodings/iana/character-sets" +ascii make-n>e \ n>e-table set-value diff --git a/extra/unicode/syntax/backend/backend.factor b/extra/unicode/syntax/backend/backend.factor index d1065da5c8..5c463e8fc4 100644 --- a/extra/unicode/syntax/backend/backend.factor +++ b/extra/unicode/syntax/backend/backend.factor @@ -1,4 +1,4 @@ -USING: kernel parser sequences definitions ; +USING: kernel parser sequences words ; IN: unicode.syntax.backend : VALUE: From ada6e4ed0b5fd51659b348c27e1f3f9ef90e0c6f Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Wed, 30 Apr 2008 21:08:18 -0500 Subject: [PATCH 178/270] Fixing delegate regression --- extra/delegate/delegate.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/delegate/delegate.factor b/extra/delegate/delegate.factor index 59e2210ae0..39eccfd194 100755 --- a/extra/delegate/delegate.factor +++ b/extra/delegate/delegate.factor @@ -54,7 +54,7 @@ M: tuple-class group-words >r protocol-words r> diff ; : forget-old-definitions ( protocol new-wordlist -- ) - >r users-and-words r> + >r [ protocol-users ] [ protocol-words ] bi r> swap diff forget-all-methods ; : added-words ( protocol wordlist -- added-words ) From 82679024ce4e19dc95c29947e7c3b6414b52da66 Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Wed, 30 Apr 2008 21:09:27 -0500 Subject: [PATCH 179/270] Deleting inaccurate comment --- extra/io/encodings/iana/iana.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/io/encodings/iana/iana.factor b/extra/io/encodings/iana/iana.factor index 1bbb80482d..9d5fabd439 100644 --- a/extra/io/encodings/iana/iana.factor +++ b/extra/io/encodings/iana/iana.factor @@ -36,7 +36,7 @@ VALUE: n>e-table [ second ] map { "None" } diff ] map ; -: make-n>e ( stream -- n>e ) ! encodings is string => symbol +: make-n>e ( stream -- n>e ) parse-iana [ [ dup [ e>n-table value-at From 0bde52d63b9cf49500bcfed11bc95310ec7d71c0 Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Wed, 30 Apr 2008 22:06:13 -0500 Subject: [PATCH 180/270] Docs and tests for io.encodings.iana --- extra/io/encodings/iana/authors.txt | 1 + extra/io/encodings/iana/iana-docs.factor | 12 ++++++++++++ extra/io/encodings/iana/iana-tests.factor | 5 +++++ extra/io/encodings/iana/iana.factor | 6 ++++++ extra/io/encodings/iana/summary.txt | 1 + 5 files changed, 25 insertions(+) create mode 100644 extra/io/encodings/iana/authors.txt create mode 100644 extra/io/encodings/iana/iana-docs.factor create mode 100644 extra/io/encodings/iana/iana-tests.factor create mode 100644 extra/io/encodings/iana/summary.txt diff --git a/extra/io/encodings/iana/authors.txt b/extra/io/encodings/iana/authors.txt new file mode 100644 index 0000000000..f990dd0ed2 --- /dev/null +++ b/extra/io/encodings/iana/authors.txt @@ -0,0 +1 @@ +Daniel Ehrenberg diff --git a/extra/io/encodings/iana/iana-docs.factor b/extra/io/encodings/iana/iana-docs.factor new file mode 100644 index 0000000000..3542012a85 --- /dev/null +++ b/extra/io/encodings/iana/iana-docs.factor @@ -0,0 +1,12 @@ +USING: help.syntax help.markup ; +IN: io.encodings.iana + +HELP: name>encoding +{ $values { "string" "an encoding name" } { "encoding" "an encoding descriptor" } } +{ "Given an IANA-registered encoding name, find the encoding descriptor that represents it, or " { $code f } " if it is not found (either not implemented in Factor or not registered)." } ; + +HELP: encoding>name +{ $values { "encoding" "an encoding descriptor" } { "name" "an encoding name" } } +{ "Given an encoding descriptor, return the preferred IANA name." } ; + +{ name>encoding encoding>name } related-words diff --git a/extra/io/encodings/iana/iana-tests.factor b/extra/io/encodings/iana/iana-tests.factor new file mode 100644 index 0000000000..8cee07b984 --- /dev/null +++ b/extra/io/encodings/iana/iana-tests.factor @@ -0,0 +1,5 @@ +USING: io.encodings.iana io.encodings.ascii tools.test ; + +[ ascii ] [ "US-ASCII" name>encoding ] unit-test +[ ascii ] [ "ASCII" name>encoding ] unit-test +[ "US-ASCII" ] [ ascii encoding>name ] unit-test diff --git a/extra/io/encodings/iana/iana.factor b/extra/io/encodings/iana/iana.factor index 9d5fabd439..301b027637 100644 --- a/extra/io/encodings/iana/iana.factor +++ b/extra/io/encodings/iana/iana.factor @@ -1,8 +1,11 @@ +! Copyright (C) 2008 Daniel Ehrenberg +! See http://factorcode.org/license.txt for BSD license. USING: kernel strings unicode.syntax.backend io.files assocs splitting sequences io namespaces sets io.encodings.ascii io.encodings.utf8 io.encodings.utf16 io.encodings.8-bit ; IN: io.encodings.iana +e-table : e>n-table H{ @@ -22,6 +25,7 @@ VALUE: n>e-table { latin5 "ISO-8859-9" } { latin6 "ISO-8859-10" } } ; +PRIVATE> : name>encoding ( string -- encoding ) n>e-table at ; @@ -29,6 +33,7 @@ VALUE: n>e-table : encoding>name ( encoding -- string ) e>n-table at ; +e-table [ drop ] if* ] with each ] each ] H{ } make-assoc ; +PRIVATE> "resource:extra/io/encodings/iana/character-sets" ascii make-n>e \ n>e-table set-value diff --git a/extra/io/encodings/iana/summary.txt b/extra/io/encodings/iana/summary.txt new file mode 100644 index 0000000000..c95d76344c --- /dev/null +++ b/extra/io/encodings/iana/summary.txt @@ -0,0 +1 @@ +Tables for IANA encoding names From 59e24e8ab07be0ab303a63c1eb46f90c99fdca58 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Thu, 1 May 2008 11:54:09 +0100 Subject: [PATCH 181/270] csv: Applied patch from from Philip Fominykh to fix newline-after-quote bug --- extra/csv/csv-tests.factor | 7 +++++-- extra/csv/csv.factor | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/extra/csv/csv-tests.factor b/extra/csv/csv-tests.factor index 6ab26c7e40..7e96dbc0a6 100644 --- a/extra/csv/csv-tests.factor +++ b/extra/csv/csv-tests.factor @@ -46,9 +46,7 @@ IN: csv.tests [ "Year,Make,Model\n1997,Ford,E350\n2000,Mercury,Cougar" csv ] named-unit-test - - ! !!!!!!!! other tests [ { { "Phil Dawes" } } ] @@ -65,3 +63,8 @@ IN: csv.tests "allows setting of delimiting character" [ { { "foo" "bah" "baz" } } ] [ "foo\tbah\tbaz\n" CHAR: \t [ csv ] with-delimiter ] named-unit-test + +"Quoted field followed immediately by newline" +[ { { "foo" "bar" } + { "1" "2" } } ] +[ "foo,\"bar\"\n1,2" csv ] named-unit-test diff --git a/extra/csv/csv.factor b/extra/csv/csv.factor index 3953ce057b..b1953f5b57 100644 --- a/extra/csv/csv.factor +++ b/extra/csv/csv.factor @@ -31,6 +31,7 @@ VAR: delimiter read1 dup { { CHAR: " [ , quoted-field ] } ! " is an escaped quote { delimiter> [ ] } ! end of quoted field + { CHAR: \n [ ] } [ 2drop skip-to-field-end ] ! end of quoted field + padding } case ; From c832abae8696c6c7fb0bd34c1e29f0d4a3a6f2db Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 16:23:11 -0500 Subject: [PATCH 182/270] Fix M:: --- extra/locals/locals-tests.factor | 7 +++++++ extra/locals/locals.factor | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/extra/locals/locals-tests.factor b/extra/locals/locals-tests.factor index c13be40c8f..bb2fd9893c 100755 --- a/extra/locals/locals-tests.factor +++ b/extra/locals/locals-tests.factor @@ -230,3 +230,10 @@ DEFER: xyzzy [ "xxx" "yyy" ] [ "yyy" "xxx" let*-test-4 ] unit-test +GENERIC: next-method-test ( a -- b ) + +M: integer next-method-test 3 + ; + +M:: fixnum next-method-test ( a -- b ) a call-next-method 1 + ; + +[ 5 ] [ 1 next-method-test ] unit-test diff --git a/extra/locals/locals.factor b/extra/locals/locals.factor index 8c8fa96fa5..d18017f69b 100755 --- a/extra/locals/locals.factor +++ b/extra/locals/locals.factor @@ -279,7 +279,9 @@ M: wlet local-rewrite* : (::) CREATE-WORD parse-locals-definition ; -: (M::) CREATE-METHOD parse-locals-definition ; +: (M::) + CREATE-METHOD + [ parse-locals-definition ] with-method-definition ; PRIVATE> From d3660002c589578e3d95b304b64ec58ea95a87bc Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 16:23:35 -0500 Subject: [PATCH 183/270] Change parser so that M:: can use call-next-method --- core/parser/parser.factor | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 23c0c0a1a5..76c831cf13 100755 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -421,14 +421,17 @@ ERROR: bad-number ; SYMBOL: current-class SYMBOL: current-generic -: (M:) - CREATE-METHOD +: with-method-definition ( quot -- parsed ) [ + >r [ "method-class" word-prop current-class set ] [ "method-generic" word-prop current-generic set ] [ ] tri - parse-definition - ] with-scope ; + r> call + ] with-scope ; inline + +: (M:) + CREATE-METHOD [ parse-definition ] with-method-definition ; : scan-object ( -- object ) scan-word dup parsing? From 0994c4f29e0c78bd8e75c593878929dab9378541 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 16:23:52 -0500 Subject: [PATCH 184/270] Tighten farkup a bit --- extra/farkup/farkup.factor | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/extra/farkup/farkup.factor b/extra/farkup/farkup.factor index 527ba8b4fa..1b8e698758 100755 --- a/extra/farkup/farkup.factor +++ b/extra/farkup/farkup.factor @@ -63,8 +63,12 @@ MEMO: eq ( -- parser ) ] with-html-stream ] with-string-writer ; +: check-url ( href -- href' ) + dup { "http://" "https://" "ftp://" } [ head? ] with contains? + [ drop "/" ] unless ; + : escape-link ( href text -- href-esc text-esc ) - >r escape-quoted-string r> escape-string ; + >r check-url escape-quoted-string r> escape-string ; : make-link ( href text -- seq ) escape-link From 79f91f6b7dff5355b0076bc1c216b54c8ceca18a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 16:24:50 -0500 Subject: [PATCH 185/270] Working on user capabilities --- extra/checksums/null/null.factor | 8 +++ extra/http/http-tests.factor | 16 +++-- extra/http/http.factor | 27 ++++++-- extra/http/server/auth/admin/admin.factor | 13 +++- extra/http/server/auth/auth.factor | 8 ++- extra/http/server/auth/login/login.factor | 64 +++++++++++++------ .../auth/providers/assoc/assoc-tests.factor | 22 ++++--- .../server/auth/providers/db/db-tests.factor | 26 ++++---- extra/http/server/auth/providers/db/db.factor | 3 +- .../server/auth/providers/providers.factor | 5 +- .../server/boilerplate/boilerplate.factor | 17 ++--- .../server/callbacks/callbacks-tests.factor | 2 +- extra/http/server/components/code/code.factor | 2 +- .../http/server/components/components.factor | 46 +++++++++---- .../server/components/farkup/farkup.factor | 2 +- .../components/inspector/inspector.factor | 4 +- extra/http/server/forms/forms.factor | 4 +- extra/http/server/server.factor | 15 +++-- .../server/sessions/sessions-tests.factor | 2 +- extra/http/server/static/static.factor | 39 ++++++----- .../http/server/templating/templating.factor | 3 +- extra/webapps/pastebin/pastebin.factor | 9 ++- extra/webapps/planet/planet.factor | 9 ++- extra/webapps/todo/edit-todo.xml | 16 ++--- extra/webapps/todo/todo.factor | 2 +- extra/webapps/todo/view-todo.xml | 4 +- 26 files changed, 233 insertions(+), 135 deletions(-) create mode 100644 extra/checksums/null/null.factor diff --git a/extra/checksums/null/null.factor b/extra/checksums/null/null.factor new file mode 100644 index 0000000000..d2dc305ac2 --- /dev/null +++ b/extra/checksums/null/null.factor @@ -0,0 +1,8 @@ +USING: checksums ; +IN: checksums.null + +SINGLETON: null + +INSTANCE: null checksum + +M: null checksum-bytes ; diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 39e708c879..1f1ce361b2 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -1,6 +1,6 @@ USING: http tools.test multiline tuple-syntax io.streams.string kernel arrays splitting sequences -assocs io.sockets db db.sqlite ; +assocs io.sockets db db.sqlite continuations ; IN: http.tests [ "hello%20world" ] [ "hello world" url-encode ] unit-test @@ -93,7 +93,7 @@ Host: www.sex.com STRING: read-response-test-1 HTTP/1.1 404 not found -Content-Type: text/html +Content-Type: text/html; charset=UTF8 blah ; @@ -103,8 +103,10 @@ blah version: "1.1" code: 404 message: "not found" - header: H{ { "content-type" "text/html" } } + header: H{ { "content-type" "text/html; charset=UTF8" } } cookies: V{ } + content-type: "text/html" + content-charset: "UTF8" } ] [ read-response-test-1 lf>crlf @@ -114,7 +116,7 @@ blah STRING: read-response-test-1' HTTP/1.1 404 not found -content-type: text/html +content-type: text/html; charset=UTF8 ; @@ -140,11 +142,13 @@ accessors namespaces threads ; : add-quit-action - [ stop-server "text/html" [ "Goodbye" write ] >>body ] >>display + [ stop-server [ "Goodbye" write ] ] >>display "quit" add-responder ; : test-db "test.db" temp-file sqlite-db ; +[ test-db drop delete-file ] ignore-errors + test-db [ init-sessions-table ] with-db @@ -191,7 +195,7 @@ test-db [ [ ] [ [ - + f "" add-responder diff --git a/extra/http/http.factor b/extra/http/http.factor index 9729542ea4..c5f57d4c04 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -291,6 +291,12 @@ SYMBOL: max-post-request : extract-cookies ( request -- request ) dup "cookie" header [ parse-cookies >>cookies ] when* ; +: parse-content-type-attributes ( string -- attributes ) + " " split [ empty? not ] filter [ "=" split1 >r >lower r> ] { } map>assoc ; + +: parse-content-type ( content-type -- type encoding ) + ";" split1 parse-content-type-attributes "charset" swap at ; + : read-request ( -- request ) read-method @@ -377,6 +383,8 @@ code message header cookies +content-type +content-charset body ; : @@ -403,7 +411,10 @@ body ; : read-response-header read-header >>header - dup "set-cookie" header [ parse-cookies >>cookies ] when* ; + extract-cookies + dup "content-type" header [ + parse-content-type [ >>content-type ] [ >>content-charset ] bi* + ] when* ; : read-response ( -- response ) @@ -422,10 +433,15 @@ body ; : write-response-message ( response -- response ) dup message>> write crlf ; +: unparse-content-type ( request -- content-type ) + [ content-type>> "application/octet-stream" or ] + [ content-charset>> ] bi + [ "; charset=" swap 3append ] when* ; + : write-response-header ( response -- response ) dup header>> clone - over cookies>> f like - [ unparse-cookies "set-cookie" pick set-at ] when* + over cookies>> f like [ unparse-cookies "set-cookie" pick set-at ] when* + over unparse-content-type "content-type" pick set-at write-header ; GENERIC: write-response-body* ( body -- ) @@ -453,9 +469,6 @@ M: response write-full-response ( request response -- ) dup write-response swap method>> "HEAD" = [ write-response-body ] unless ; -: set-content-type ( request/response content-type -- request/response ) - "content-type" set-header ; - : get-cookie ( request/response name -- cookie/f ) >r cookies>> r> '[ , _ name>> = ] find nip ; @@ -466,7 +479,7 @@ M: response write-full-response ( request response -- ) [ name>> dupd get-cookie [ dupd delete-cookie ] when* ] keep over cookies>> push ; -TUPLE: raw-response +TUPLE: raw-response version code message diff --git a/extra/http/server/auth/admin/admin.factor b/extra/http/server/auth/admin/admin.factor index c9d2769292..0dc5d3560e 100644 --- a/extra/http/server/auth/admin/admin.factor +++ b/extra/http/server/auth/admin/admin.factor @@ -7,6 +7,7 @@ http.server.boilerplate http.server.auth.providers http.server.auth.providers.db http.server.auth.login +http.server.auth http.server.forms http.server.components.inspector http.server.components @@ -28,6 +29,7 @@ IN: http.server.auth.admin "new-password" t >>required add-field "verify-password" t >>required add-field "email" add-field ; + ! "capabilities" add-field ; : ( -- form ) "user" @@ -39,6 +41,7 @@ IN: http.server.auth.admin "verify-password" add-field "email" add-field "profile" add-field ; + ! "capabilities" add-field ; : ( -- form ) "user-list" @@ -77,7 +80,7 @@ IN: http.server.auth.admin "username" value "realname" value >>realname "email" value >>email - "new-password" value >>password + "new-password" value >>encoded-password H{ } clone >>profile insert-tuple @@ -116,7 +119,7 @@ IN: http.server.auth.admin { "new-password" "verify-password" } [ value empty? ] all? [ same-password-twice - "new-password" value >>password + "new-password" value >>encoded-password ] unless update-tuple @@ -139,6 +142,10 @@ IN: http.server.auth.admin TUPLE: user-admin < dispatcher ; +SYMBOL: can-administer-users? + +can-administer-users? define-capability + :: ( -- responder ) [let | ctor [ [ ] ] | user-admin new-dispatcher @@ -148,5 +155,5 @@ TUPLE: user-admin < dispatcher ; ctor "$user-admin" "delete" add-responder "admin" admin-template >>template - + { can-administer-users? } ] ; diff --git a/extra/http/server/auth/auth.factor b/extra/http/server/auth/auth.factor index a25baf3ed2..36fcff4b2e 100755 --- a/extra/http/server/auth/auth.factor +++ b/extra/http/server/auth/auth.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs namespaces kernel +USING: accessors assocs namespaces kernel sequences http.server http.server.sessions http.server.auth.providers ; @@ -33,3 +33,9 @@ M: filter-responder init-user-profile : uchange ( quot key -- ) profile swap change-at user-changed ; inline + +SYMBOL: capabilities + +V{ } clone capabilities set-global + +: define-capability ( word -- ) capabilities get push-new ; diff --git a/extra/http/server/auth/login/login.factor b/extra/http/server/auth/login/login.factor index 453f4cc4d6..9eb79649b9 100755 --- a/extra/http/server/auth/login/login.factor +++ b/extra/http/server/auth/login/login.factor @@ -1,16 +1,23 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: accessors quotations assocs kernel splitting -base64 io combinators sequences io.files namespaces hashtables -fry io.sockets arrays threads locals qualified continuations +combinators sequences namespaces hashtables +fry arrays threads locals qualified random +io +io.sockets +io.encodings.utf8 +io.encodings.string +io.binary +continuations destructors - +checksums +checksums.sha2 html.elements http http.server http.server.auth http.server.auth.providers -http.server.auth.providers.null +http.server.auth.providers.db http.server.actions http.server.components http.server.flows @@ -25,9 +32,24 @@ QUALIFIED: smtp SYMBOL: login-failed? -TUPLE: login < dispatcher users ; +TUPLE: login < dispatcher users checksum ; -: users login get users>> ; +: users ( -- provider ) + login get users>> ; + +: encode-password ( string salt -- bytes ) + [ utf8 encode ] [ 4 >be ] bi* append + login get checksum>> checksum-bytes ; + +: >>encoded-password ( user string -- user ) + 32 random-bits [ encode-password ] keep + [ >>password ] [ >>salt ] bi* ; inline + +: valid-login? ( password user -- ? ) + [ salt>> encode-password ] [ password>> ] bi = ; + +: check-login ( password username -- user/f ) + users get-user dup [ [ valid-login? ] keep and ] [ 2drop f ] if ; ! Destructor TUPLE: user-saver user ; @@ -72,8 +94,7 @@ M: user-saver dispose form validate-form - "password" value "username" value - users check-login [ + "password" value "username" value check-login [ successful-login ] [ login-failed? on @@ -125,7 +146,7 @@ SYMBOL: user-exists? "username" value "realname" value >>realname - "new-password" value >>password + "new-password" value >>encoded-password "email" value >>email H{ } clone >>profile @@ -179,10 +200,10 @@ SYMBOL: user-exists? [ value empty? ] all? [ same-password-twice - "password" value uid users check-login + "password" value uid check-login [ login-failed? on validation-failed ] unless - "new-password" value >>password + "new-password" value >>encoded-password ] unless "realname" value >>realname @@ -314,7 +335,7 @@ SYMBOL: lost-password-from "ticket" value "username" value users claim-ticket [ - "new-password" value >>password + "new-password" value >>encoded-password users update-user "recover-4" login-template serve-template @@ -334,7 +355,7 @@ SYMBOL: lost-password-from ! ! ! Authentication logic -TUPLE: protected < filter-responder ; +TUPLE: protected < filter-responder capabilities ; C: protected @@ -342,11 +363,17 @@ C: protected begin-flow "$login/login" f ; +: check-capabilities ( responder user -- ? ) + [ capabilities>> ] [ profile>> ] bi* '[ , at ] all? ; + M: protected call-responder* ( path responder -- response ) uid dup [ - users get-user - [ logged-in-user set ] [ save-user-after ] bi - call-next-method + users get-user 2dup check-capabilities [ + [ logged-in-user set ] [ save-user-after ] bi + call-next-method + ] [ + 3drop show-login-page + ] if ] [ 3drop show-login-page ] if ; @@ -364,12 +391,13 @@ M: login call-responder* ( path responder -- response ) swap >>default "login" add-responder "logout" add-responder - no-users >>users ; + users-in-db >>users + sha-256 >>checksum ; ! ! ! Configuration : allow-edit-profile ( login -- login ) - + f "edit-profile" add-responder ; : allow-registration ( login -- login ) diff --git a/extra/http/server/auth/providers/assoc/assoc-tests.factor b/extra/http/server/auth/providers/assoc/assoc-tests.factor index 82a2b54b0e..09022b0921 100755 --- a/extra/http/server/auth/providers/assoc/assoc-tests.factor +++ b/extra/http/server/auth/providers/assoc/assoc-tests.factor @@ -1,33 +1,35 @@ IN: http.server.auth.providers.assoc.tests -USING: http.server.auth.providers +USING: http.server.actions http.server.auth.providers http.server.auth.providers.assoc tools.test namespaces accessors kernel ; - "provider" set + + >>users +login set [ t ] [ "slava" - "foobar" >>password + "foobar" >>encoded-password "slava@factorcode.org" >>email H{ } clone >>profile - "provider" get new-user + users new-user username>> "slava" = ] unit-test [ f ] [ "slava" H{ } clone >>profile - "provider" get new-user + users new-user ] unit-test -[ f ] [ "fdasf" "slava" "provider" get check-login >boolean ] unit-test +[ f ] [ "fdasf" "slava" check-login >boolean ] unit-test -[ ] [ "foobar" "slava" "provider" get check-login "user" set ] unit-test +[ ] [ "foobar" "slava" check-login "user" set ] unit-test [ t ] [ "user" get >boolean ] unit-test -[ ] [ "user" get "fdasf" >>password drop ] unit-test +[ ] [ "user" get "fdasf" >>encoded-password drop ] unit-test -[ t ] [ "fdasf" "slava" "provider" get check-login >boolean ] unit-test +[ t ] [ "fdasf" "slava" check-login >boolean ] unit-test -[ f ] [ "foobar" "slava" "provider" get check-login >boolean ] unit-test +[ f ] [ "foobar" "slava" check-login >boolean ] unit-test diff --git a/extra/http/server/auth/providers/db/db-tests.factor b/extra/http/server/auth/providers/db/db-tests.factor index 1a5298f050..a6a92356b6 100755 --- a/extra/http/server/auth/providers/db/db-tests.factor +++ b/extra/http/server/auth/providers/db/db-tests.factor @@ -1,10 +1,14 @@ IN: http.server.auth.providers.db.tests -USING: http.server.auth.providers +USING: http.server.actions +http.server.auth.login +http.server.auth.providers http.server.auth.providers.db tools.test namespaces db db.sqlite db.tuples continuations io.files accessors kernel ; -users-in-db "provider" set + + users-in-db >>users +login set [ "auth-test.db" temp-file delete-file ] ignore-errors @@ -14,30 +18,30 @@ users-in-db "provider" set [ t ] [ "slava" - "foobar" >>password + "foobar" >>encoded-password "slava@factorcode.org" >>email H{ } clone >>profile - "provider" get new-user + users new-user username>> "slava" = ] unit-test [ f ] [ "slava" H{ } clone >>profile - "provider" get new-user + users new-user ] unit-test - [ f ] [ "fdasf" "slava" "provider" get check-login >boolean ] unit-test + [ f ] [ "fdasf" "slava" check-login >boolean ] unit-test - [ ] [ "foobar" "slava" "provider" get check-login "user" set ] unit-test + [ ] [ "foobar" "slava" check-login "user" set ] unit-test [ t ] [ "user" get >boolean ] unit-test - [ ] [ "user" get "fdasf" >>password drop ] unit-test + [ ] [ "user" get "fdasf" >>encoded-password drop ] unit-test - [ ] [ "user" get "provider" get update-user ] unit-test + [ ] [ "user" get users update-user ] unit-test - [ t ] [ "fdasf" "slava" "provider" get check-login >boolean ] unit-test + [ t ] [ "fdasf" "slava" check-login >boolean ] unit-test - [ f ] [ "foobar" "slava" "provider" get check-login >boolean ] unit-test + [ f ] [ "foobar" "slava" check-login >boolean ] unit-test ] with-db diff --git a/extra/http/server/auth/providers/db/db.factor b/extra/http/server/auth/providers/db/db.factor index 66d3a00a42..b72f94f3bd 100755 --- a/extra/http/server/auth/providers/db/db.factor +++ b/extra/http/server/auth/providers/db/db.factor @@ -9,7 +9,8 @@ user "USERS" { { "username" "USERNAME" { VARCHAR 256 } +user-assigned-id+ } { "realname" "REALNAME" { VARCHAR 256 } } - { "password" "PASSWORD" { VARCHAR 256 } +not-null+ } + { "password" "PASSWORD" BLOB +not-null+ } + { "salt" "SALT" INTEGER +not-null+ } { "email" "EMAIL" { VARCHAR 256 } } { "ticket" "TICKET" { VARCHAR 256 } } { "profile" "PROFILE" FACTOR-BLOB } diff --git a/extra/http/server/auth/providers/providers.factor b/extra/http/server/auth/providers/providers.factor index 121f065292..f4c7dbbf1d 100755 --- a/extra/http/server/auth/providers/providers.factor +++ b/extra/http/server/auth/providers/providers.factor @@ -4,7 +4,7 @@ USING: kernel accessors random math.parser locals sequences math ; IN: http.server.auth.providers -TUPLE: user username realname password email ticket profile deleted changed? ; +TUPLE: user username realname password salt email ticket profile deleted changed? ; : ( username -- user ) user new @@ -17,9 +17,6 @@ GENERIC: update-user ( user provider -- ) GENERIC: new-user ( user provider -- user/f ) -: check-login ( password username provider -- user/f ) - get-user dup [ [ password>> = ] keep and ] [ 2drop f ] if ; - ! Password recovery support :: issue-ticket ( email username provider -- user/f ) diff --git a/extra/http/server/boilerplate/boilerplate.factor b/extra/http/server/boilerplate/boilerplate.factor index 1dc5effbe2..e0a4037e31 100644 --- a/extra/http/server/boilerplate/boilerplate.factor +++ b/extra/http/server/boilerplate/boilerplate.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel namespaces boxes sequences strings -io io.streams.string arrays +io io.streams.string arrays locals html.elements http http.server @@ -47,7 +47,7 @@ SYMBOL: nested-template? SYMBOL: next-template : call-next-template ( -- ) - next-template get write ; + next-template get write-html ; M: f call-template* drop call-next-template ; @@ -68,9 +68,10 @@ M: f call-template* drop call-next-template ; bi* ] with-scope ; inline -M: boilerplate call-responder* - tuck call-next-method - dup "content-type" header "text/html" = [ - clone swap template>> - [ [ with-boilerplate ] 2curry ] curry change-body - ] [ nip ] if ; +M:: boilerplate call-responder* ( path responder -- ) + path responder call-next-method + dup content-type>> "text/html" = [ + clone [| body | + [ body responder template>> with-boilerplate ] + ] change-body + ] when ; diff --git a/extra/http/server/callbacks/callbacks-tests.factor b/extra/http/server/callbacks/callbacks-tests.factor index cca5942328..31ea164a58 100755 --- a/extra/http/server/callbacks/callbacks-tests.factor +++ b/extra/http/server/callbacks/callbacks-tests.factor @@ -24,7 +24,7 @@ splitting kernel hashtables continuations ; [ [ "hello" print - "text/html" swap '[ , write ] >>body + '[ , write ] ] show-page "byebye" print [ 123 ] show-final diff --git a/extra/http/server/components/code/code.factor b/extra/http/server/components/code/code.factor index 90b70c7bcc..8bf07700e8 100644 --- a/extra/http/server/components/code/code.factor +++ b/extra/http/server/components/code/code.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: splitting kernel io sequences xmode.code2html accessors -http.server.components ; +http.server.components xml.entities ; IN: http.server.components.code TUPLE: code-renderer < text-renderer mode ; diff --git a/extra/http/server/components/components.factor b/extra/http/server/components/components.factor index cb109fc847..eb97092fb7 100755 --- a/extra/http/server/components/components.factor +++ b/extra/http/server/components/components.factor @@ -3,7 +3,7 @@ USING: accessors namespaces kernel io math.parser assocs classes words classes.tuple arrays sequences splitting mirrors hashtables fry combinators continuations math -calendar.format html.elements +calendar.format html.elements xml.entities http.server.validators ; IN: http.server.components @@ -18,13 +18,13 @@ TUPLE: field type ; C: field -M: field render-view* drop write ; +M: field render-view* drop escape-string write ; M: field render-edit* > =type [ =id ] [ =name ] bi =value input/> ; : render-error ( message -- ) - write ; + escape-string write ; TUPLE: hidden < field ; @@ -232,7 +232,7 @@ TUPLE: text-renderer rows cols ; text-renderer new-text-renderer ; M: text-renderer render-view* - drop write ; + drop escape-string write ; M: text-renderer render-edit* ; TUPLE: text < string ; @@ -261,7 +261,7 @@ TUPLE: html-text-renderer < text-renderer ; html-text-renderer new-text-renderer ; M: html-text-renderer render-view* - drop write ; + drop escape-string write ; TUPLE: html-text < text ; @@ -286,7 +286,7 @@ GENERIC: link-href ( obj -- url ) SINGLETON: link-renderer M: link-renderer render-view* - drop link-title write ; + drop link-title escape-string write ; TUPLE: link < string ; @@ -341,15 +341,19 @@ TUPLE: choice-renderer choices ; C: choice-renderer M: choice-renderer render-view* - drop write ; + drop escape-string write ; + +: render-option ( text selected? -- ) + ; + +: render-options ( text selected -- ) + [ [ drop ] [ member? ] 2bi render-option ] curry each ; M: choice-renderer render-edit* ; TUPLE: choice < string ; @@ -357,3 +361,19 @@ TUPLE: choice < string ; : ( id choices -- component ) swap choice new-string swap >>renderer ; + +! Menu +TUPLE: menu-renderer choices size ; + +C: menu-renderer + +M: menu-renderer render-edit* + ; + +TUPLE: menu < string ; + +: ( id choices -- component ) + swap menu new-string + swap >>renderer ; diff --git a/extra/http/server/components/farkup/farkup.factor b/extra/http/server/components/farkup/farkup.factor index a8d320f82f..87b7170bbf 100755 --- a/extra/http/server/components/farkup/farkup.factor +++ b/extra/http/server/components/farkup/farkup.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: splitting kernel io sequences farkup accessors -http.server.components ; +http.server.components xml.entities ; IN: http.server.components.farkup TUPLE: farkup-renderer < text-renderer ; diff --git a/extra/http/server/components/inspector/inspector.factor b/extra/http/server/components/inspector/inspector.factor index 25ee631a06..42366b57e4 100644 --- a/extra/http/server/components/inspector/inspector.factor +++ b/extra/http/server/components/inspector/inspector.factor @@ -1,13 +1,13 @@ ! Copyright (C) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. USING: splitting kernel io sequences inspector accessors -http.server.components ; +http.server.components xml.entities html ; IN: http.server.components.inspector SINGLETON: inspector-renderer M: inspector-renderer render-view* - drop describe ; + drop [ describe ] with-html-stream ; TUPLE: inspector < component ; diff --git a/extra/http/server/forms/forms.factor b/extra/http/server/forms/forms.factor index 60f3da25b6..92fb25bb16 100644 --- a/extra/http/server/forms/forms.factor +++ b/extra/http/server/forms/forms.factor @@ -37,9 +37,7 @@ M: form init V{ } clone >>components ; ] with-form ; : ( form template -- response ) - [ components>> components set ] - [ "text/html" swap >>body ] - bi* ; + [ components>> components set ] [ ] bi* ; : view-form ( form -- response ) dup view-template>> ; diff --git a/extra/http/server/server.factor b/extra/http/server/server.factor index ad04812c63..f6dd6c57bb 100755 --- a/extra/http/server/server.factor +++ b/extra/http/server/server.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2003, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: assocs kernel namespaces io io.timeouts strings splitting -threads http sequences prettyprint io.server logging calendar -html.elements accessors math.parser combinators.lib -tools.vocabs debugger html continuations random combinators +threads sequences prettyprint io.server logging calendar +http html html.elements accessors math.parser combinators.lib +tools.vocabs debugger continuations random combinators destructors io.encodings.8-bit fry classes words ; IN: http.server @@ -22,7 +22,10 @@ GENERIC: call-responder* ( path responder -- response ) 200 >>code "Document follows" >>message - swap set-content-type ; + swap >>content-type ; + +: ( quot -- response ) + "text/html" swap >>body ; TUPLE: trivial-responder response ; @@ -38,9 +41,7 @@ M: trivial-responder call-responder* nip response>> call ; ; : ( code message -- response ) - 2dup '[ , , trivial-response-body ] - "text/html" - swap >>body + 2dup '[ , , trivial-response-body ] swap >>message swap >>code ; diff --git a/extra/http/server/sessions/sessions-tests.factor b/extra/http/server/sessions/sessions-tests.factor index b4cf0bd679..0d98bf2150 100755 --- a/extra/http/server/sessions/sessions-tests.factor +++ b/extra/http/server/sessions/sessions-tests.factor @@ -143,7 +143,7 @@ M: foo call-responder* ] with-destructors response set ] unit-test - [ "text/plain" ] [ response get "content-type" header ] unit-test + [ "text/plain" ] [ response get content-type>> ] unit-test [ f ] [ response get cookies>> empty? ] unit-test ] with-scope diff --git a/extra/http/server/static/static.factor b/extra/http/server/static/static.factor index af6018fbdc..f0a367f0fb 100755 --- a/extra/http/server/static/static.factor +++ b/extra/http/server/static/static.factor @@ -1,21 +1,20 @@ ! Copyright (C) 2004, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: calendar html io io.files kernel math math.parser http -http.server namespaces parser sequences strings assocs -hashtables debugger http.mime sorting html.elements logging -calendar.format accessors io.encodings.binary fry ; +USING: calendar html io io.files kernel math math.order +math.parser http http.server namespaces parser sequences strings +assocs hashtables debugger http.mime sorting html.elements +logging calendar.format accessors io.encodings.binary fry ; IN: http.server.static ! special maps mime types to quots with effect ( path -- ) TUPLE: file-responder root hook special ; -: file-http-date ( filename -- string ) - file-info modified>> timestamp>http-string ; - -: last-modified-matches? ( filename -- ? ) - file-http-date dup [ - request get "if-modified-since" header = - ] when ; +: modified-since? ( filename -- ? ) + request get "if-modified-since" header dup [ + [ file-info modified>> ] [ rfc822>timestamp ] bi* after? + ] [ + 2drop t + ] if ; : <304> ( -- response ) 304 "Not modified" ; @@ -26,16 +25,17 @@ TUPLE: file-responder root hook special ; : ( root -- responder ) [ - swap - [ file-info size>> "content-length" set-header ] - [ file-http-date "last-modified" set-header ] - [ '[ , binary stdio get stream-copy ] >>body ] - tri + swap [ + file-info + [ size>> "content-length" set-header ] + [ modified>> "last-modified" set-header ] bi + ] + [ '[ , binary stdio get stream-copy ] >>body ] bi ] ; : serve-static ( filename mime-type -- response ) - over last-modified-matches? - [ 2drop <304> ] [ file-responder get hook>> call ] if ; + over modified-since? + [ file-responder get hook>> call ] [ 2drop <304> ] if ; : serving-path ( filename -- filename ) file-responder get root>> right-trim-separators @@ -65,8 +65,7 @@ TUPLE: file-responder root hook special ; ] simple-html-document ; : list-directory ( directory -- response ) - "text/html" - swap '[ , directory. ] >>body ; + '[ , directory. ] ; : find-index ( filename -- path ) "index.html" append-path dup exists? [ drop f ] unless ; diff --git a/extra/http/server/templating/templating.factor b/extra/http/server/templating/templating.factor index 610ec78fed..73f6095eae 100644 --- a/extra/http/server/templating/templating.factor +++ b/extra/http/server/templating/templating.factor @@ -24,5 +24,4 @@ M: template write-response-body* call-template ; ! responder integration : serve-template ( template -- response ) - "text/html" - swap '[ , call-template ] >>body ; + '[ , call-template ] ; diff --git a/extra/webapps/pastebin/pastebin.factor b/extra/webapps/pastebin/pastebin.factor index 76e7a1464a..144900d6ec 100644 --- a/extra/webapps/pastebin/pastebin.factor +++ b/extra/webapps/pastebin/pastebin.factor @@ -8,6 +8,7 @@ http.server.actions http.server.components http.server.components.code http.server.templating.chloe +http.server.auth http.server.auth.login http.server.boilerplate http.server.validators @@ -236,13 +237,17 @@ annotation "ANNOTATION" TUPLE: pastebin < dispatcher ; +SYMBOL: can-delete-pastes? + +can-delete-pastes? define-capability + : ( -- responder ) pastebin new-dispatcher "list" add-main-responder "feed.xml" add-responder [ ] "view-paste" add-responder - [ ] "$pastebin/list" "delete-paste" add-responder - [ ] "$pastebin/view-paste" "delete-annotation" add-responder + [ ] "$pastebin/list" { can-delete-pastes? } "delete-paste" add-responder + [ ] "$pastebin/view-paste" { can-delete-pastes? } "delete-annotation" add-responder [ ] "$pastebin/view-paste" add-responder [ now >>date ] "$pastebin/view-paste" "new-paste" add-responder [ now >>date ] "$pastebin/view-paste" "annotate" add-responder diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index d3260e1c70..c8aeab35a8 100755 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -11,7 +11,8 @@ http.server.actions http.server.boilerplate http.server.templating.chloe http.server.components -http.server.auth.login ; +http.server.auth.login +http.server.auth ; IN: webapps.planet TUPLE: planet-factor < dispatcher postings ; @@ -159,11 +160,15 @@ blog "BLOGS" blog-form blog-ctor "$planet-factor/admin" "edit-blog" add-responder ] ; +SYMBOL: can-administer-planet-factor? + +can-administer-planet-factor? define-capability + : ( -- responder ) planet-factor new-dispatcher dup "list" add-main-responder dup "feed.xml" add-responder - dup "admin" add-responder + dup { can-administer-planet-factor? } "admin" add-responder "planet" planet-template >>template ; diff --git a/extra/webapps/todo/edit-todo.xml b/extra/webapps/todo/edit-todo.xml index ef1e1fd26a..9b7e9e667a 100644 --- a/extra/webapps/todo/edit-todo.xml +++ b/extra/webapps/todo/edit-todo.xml @@ -4,22 +4,22 @@ Edit Item - - + + - - - + + +
    Summary:
    Priority:
    Description:
    Summary:
    Priority:
    Description:
    - View + View | - - + + diff --git a/extra/webapps/todo/todo.factor b/extra/webapps/todo/todo.factor index e1ebc65bb5..8bfda1aad5 100755 --- a/extra/webapps/todo/todo.factor +++ b/extra/webapps/todo/todo.factor @@ -76,5 +76,5 @@ TUPLE: todo-list < dispatcher ; ctor "$todo-list/list" "delete" add-responder "todo" todo-template >>template - + f ] ; diff --git a/extra/webapps/todo/view-todo.xml b/extra/webapps/todo/view-todo.xml index f77396c73c..1bd73f48e1 100644 --- a/extra/webapps/todo/view-todo.xml +++ b/extra/webapps/todo/view-todo.xml @@ -5,8 +5,8 @@ View Item - - + +
    Summary:
    Priority:
    Summary:
    Priority:
    From 1bd8b19ff5627851c91fb6cd099930f396fb2898 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 20:01:57 -0500 Subject: [PATCH 186/270] Rename subassoc? to assoc-subset?, add subset? word for sequences --- core/assocs/assocs-docs.factor | 4 ++-- core/assocs/assocs-tests.factor | 14 +++++++------- core/assocs/assocs.factor | 4 ++-- core/sets/sets-docs.factor | 16 +++++++++++++++- core/sets/sets.factor | 6 ++++++ 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/core/assocs/assocs-docs.factor b/core/assocs/assocs-docs.factor index de62ccd878..6170eddf52 100755 --- a/core/assocs/assocs-docs.factor +++ b/core/assocs/assocs-docs.factor @@ -68,7 +68,7 @@ ARTICLE: "assocs-lookup" "Lookup and querying of assocs" ARTICLE: "assocs-sets" "Set-theoretic operations on assocs" "It is often useful to use the keys of an associative mapping as a set, exploiting the constant or logarithmic lookup time of most implementations (" { $link "alists" } " being a notable exception)." -{ $subsection subassoc? } +{ $subsection assoc-subset? } { $subsection assoc-intersect } { $subsection update } { $subsection assoc-union } @@ -215,7 +215,7 @@ HELP: assoc-all? { $values { "assoc" assoc } { "quot" "a quotation with stack effect " { $snippet "( key value -- ? )" } } { "?" "a boolean" } } { $description "Tests if all entries in the assoc satisfy a predicate by applying the quotation to each entry in turn. a predicate quotation to entry in the assoc. Iteration stops if an entry is found for which the quotation outputs " { $link f } ". If the assoc is empty, always outputs " { $link t } "." } ; -HELP: subassoc? +HELP: assoc-subset? { $values { "assoc1" assoc } { "assoc2" assoc } { "?" "a new assoc" } } { $description "Tests if " { $snippet "assoc2" } " contains all key/value pairs of " { $snippet "assoc1" } "." } ; diff --git a/core/assocs/assocs-tests.factor b/core/assocs/assocs-tests.factor index 19e323bdae..30f2ec23c4 100755 --- a/core/assocs/assocs-tests.factor +++ b/core/assocs/assocs-tests.factor @@ -3,13 +3,13 @@ USING: kernel math namespaces tools.test vectors sequences sequences.private hashtables io prettyprint assocs continuations ; -[ t ] [ H{ } dup subassoc? ] unit-test -[ f ] [ H{ { 1 3 } } H{ } subassoc? ] unit-test -[ t ] [ H{ } H{ { 1 3 } } subassoc? ] unit-test -[ t ] [ H{ { 1 3 } } H{ { 1 3 } } subassoc? ] unit-test -[ f ] [ H{ { 1 3 } } H{ { 1 "hey" } } subassoc? ] unit-test -[ f ] [ H{ { 1 f } } H{ } subassoc? ] unit-test -[ t ] [ H{ { 1 f } } H{ { 1 f } } subassoc? ] unit-test +[ t ] [ H{ } dup assoc-subset? ] unit-test +[ f ] [ H{ { 1 3 } } H{ } assoc-subset? ] unit-test +[ t ] [ H{ } H{ { 1 3 } } assoc-subset? ] unit-test +[ t ] [ H{ { 1 3 } } H{ { 1 3 } } assoc-subset? ] unit-test +[ f ] [ H{ { 1 3 } } H{ { 1 "hey" } } assoc-subset? ] unit-test +[ f ] [ H{ { 1 f } } H{ } assoc-subset? ] unit-test +[ t ] [ H{ { 1 f } } H{ { 1 f } } assoc-subset? ] unit-test ! Test some combinators [ diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor index e68c311836..92db38573a 100755 --- a/core/assocs/assocs.factor +++ b/core/assocs/assocs.factor @@ -98,11 +98,11 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc ) : assoc-stack ( key seq -- value ) dup length 1- swap (assoc-stack) ; -: subassoc? ( assoc1 assoc2 -- ? ) +: assoc-subset? ( assoc1 assoc2 -- ? ) [ swapd at* [ = ] [ 2drop f ] if ] curry assoc-all? ; : assoc= ( assoc1 assoc2 -- ? ) - 2dup subassoc? >r swap subassoc? r> and ; + [ assoc-subset? ] [ swap assoc-subset? ] 2bi and ; : assoc-hashcode ( n assoc -- code ) [ diff --git a/core/sets/sets-docs.factor b/core/sets/sets-docs.factor index 55ef3ccddd..f4e2557a71 100644 --- a/core/sets/sets-docs.factor +++ b/core/sets/sets-docs.factor @@ -2,7 +2,7 @@ USING: kernel help.markup help.syntax sequences ; IN: sets ARTICLE: "sets" "Set-theoretic operations on sequences" -"Set-theoretic operations on sequences are defined on the " { $vocab-link "sets" } " vocabulary. These operations use hashtables internally to achieve linear running time." +"Set-theoretic operations on sequences are defined on the " { $vocab-link "sets" } " vocabulary. All of these operations use hashtables internally to achieve linear running time." $nl "Remove duplicates:" { $subsection prune } @@ -12,8 +12,14 @@ $nl { $subsection diff } { $subsection intersect } { $subsection union } +{ $subsection subset? } +{ $subsection set= } +"A word used to implement the above:" +{ $subsection unique } { $see-also member? memq? contains? all? "assocs-sets" } ; +ABOUT: "sets" + HELP: unique { $values { "seq" "a sequence" } { "assoc" "an assoc" } } { $description "Outputs a new assoc where the keys and values are equal." } @@ -59,3 +65,11 @@ HELP: union } ; { diff intersect union } related-words + +HELP: subset? +{ $values { "seq1" sequence } { "seq2" sequence } { "?" "a boolean" } } +{ $description "Tests if every element of " { $snippet "seq1" } " is contained in " { $snippet "seq2" } "." } ; + +HELP: set= +{ $values { "seq1" sequence } { "seq2" sequence } { "?" "a boolean" } } +{ $description "Tests if both sequences contain the same elements, disregrading order and duplicates." } ; diff --git a/core/sets/sets.factor b/core/sets/sets.factor index 78a92155fc..b0d26e0f30 100644 --- a/core/sets/sets.factor +++ b/core/sets/sets.factor @@ -29,3 +29,9 @@ IN: sets : union ( seq1 seq2 -- newseq ) append prune ; + +: subset? ( seq1 seq2 -- ? ) + unique [ key? ] curry all? ; + +: set= ( seq1 seq2 -- ? ) + [ unique ] bi@ = ; From a1ea2655ed1e9e9e38873db78618dde429767eb2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 20:02:34 -0500 Subject: [PATCH 187/270] Fix problems found by builder --- core/checksums/checksums.factor | 2 +- extra/benchmark/sha1/sha1.factor | 2 +- extra/crypto/hmac/hmac.factor | 6 +++--- extra/farkup/farkup.factor | 6 ++++-- extra/io/encodings/iana/iana-docs.factor | 2 +- extra/io/encodings/iana/iana.factor | 4 ++-- extra/xmode/code2html/responder/responder.factor | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/core/checksums/checksums.factor b/core/checksums/checksums.factor index 849d7821dd..08a13297d1 100644 --- a/core/checksums/checksums.factor +++ b/core/checksums/checksums.factor @@ -18,7 +18,7 @@ M: checksum checksum-stream >r contents r> checksum-bytes ; M: checksum checksum-lines >r B{ CHAR: \n } join r> checksum-bytes ; -: checksum-file ( path checksum -- n ) +: checksum-file ( path checksum -- value ) >r binary r> checksum-stream ; : hex-string ( seq -- str ) diff --git a/extra/benchmark/sha1/sha1.factor b/extra/benchmark/sha1/sha1.factor index c43f780135..d5ff5673c2 100644 --- a/extra/benchmark/sha1/sha1.factor +++ b/extra/benchmark/sha1/sha1.factor @@ -1,4 +1,4 @@ -USING: checksum checksums.sha1 io.files kernel ; +USING: checksums checksums.sha1 io.files kernel ; IN: benchmark.sha1 : sha1-primes-list ( -- ) diff --git a/extra/crypto/hmac/hmac.factor b/extra/crypto/hmac/hmac.factor index 9770a3a266..fe77aa8969 100755 --- a/extra/crypto/hmac/hmac.factor +++ b/extra/crypto/hmac/hmac.factor @@ -1,19 +1,19 @@ USING: arrays combinators crypto.common checksums checksums.md5 -checksums.sha1 crypto.md5.private io io.binary io.files +checksums.sha1 checksums.md5.private io io.binary io.files io.streams.byte-array kernel math math.vectors memoize sequences io.encodings.binary ; IN: crypto.hmac : sha1-hmac ( Ko Ki -- hmac ) initialize-sha1 process-sha1-block - (stream>sha1) get-sha1 + stream>sha1 get-sha1 initialize-sha1 >r process-sha1-block r> process-sha1-block get-sha1 ; : md5-hmac ( Ko Ki -- hmac ) initialize-md5 process-md5-block - (stream>md5) get-md5 + stream>md5 get-md5 initialize-md5 >r process-md5-block r> process-md5-block get-md5 ; diff --git a/extra/farkup/farkup.factor b/extra/farkup/farkup.factor index 1b8e698758..15b7b4b72c 100755 --- a/extra/farkup/farkup.factor +++ b/extra/farkup/farkup.factor @@ -64,8 +64,10 @@ MEMO: eq ( -- parser ) ] with-string-writer ; : check-url ( href -- href' ) - dup { "http://" "https://" "ftp://" } [ head? ] with contains? - [ drop "/" ] unless ; + CHAR: : over member? [ + dup { "http://" "https://" "ftp://" } [ head? ] with contains? + [ drop "/" ] unless + ] when ; : escape-link ( href text -- href-esc text-esc ) >r check-url escape-quoted-string r> escape-string ; diff --git a/extra/io/encodings/iana/iana-docs.factor b/extra/io/encodings/iana/iana-docs.factor index 3542012a85..d4a7a65797 100644 --- a/extra/io/encodings/iana/iana-docs.factor +++ b/extra/io/encodings/iana/iana-docs.factor @@ -2,7 +2,7 @@ USING: help.syntax help.markup ; IN: io.encodings.iana HELP: name>encoding -{ $values { "string" "an encoding name" } { "encoding" "an encoding descriptor" } } +{ $values { "name" "an encoding name" } { "encoding" "an encoding descriptor" } } { "Given an IANA-registered encoding name, find the encoding descriptor that represents it, or " { $code f } " if it is not found (either not implemented in Factor or not registered)." } ; HELP: encoding>name diff --git a/extra/io/encodings/iana/iana.factor b/extra/io/encodings/iana/iana.factor index 301b027637..24badaf683 100644 --- a/extra/io/encodings/iana/iana.factor +++ b/extra/io/encodings/iana/iana.factor @@ -27,10 +27,10 @@ VALUE: n>e-table } ; PRIVATE> -: name>encoding ( string -- encoding ) +: name>encoding ( name -- encoding ) n>e-table at ; -: encoding>name ( encoding -- string ) +: encoding>name ( encoding -- name ) e>n-table at ; swap - [ file-http-date "last-modified" set-header ] + [ "last-modified" set-header ] [ '[ , From 583d036e8a30c739b2fe801ed758c3a76c870404 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 20:02:45 -0500 Subject: [PATCH 188/270] Use subset? word --- core/optimizer/def-use/def-use-tests.factor | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/optimizer/def-use/def-use-tests.factor b/core/optimizer/def-use/def-use-tests.factor index 914018437a..ef829da9f2 100755 --- a/core/optimizer/def-use/def-use-tests.factor +++ b/core/optimizer/def-use/def-use-tests.factor @@ -11,10 +11,6 @@ namespaces assocs kernel sequences math tools.test words ; dataflow compute-def-use drop compute-dead-literals keys [ value-literal ] map ; -: subset? [ member? ] curry all? ; - -: set= 2dup subset? >r swap subset? r> and ; - [ { [ + ] } ] [ [ [ 1 2 3 ] [ + ] over drop drop ] kill-set ] unit-test From 5bae9bf6efcf64c9d864e623c777d2fc7daf004d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 1 May 2008 20:03:02 -0500 Subject: [PATCH 189/270] Implemented user capabilities --- extra/http/http-tests.factor | 6 +++ extra/http/http.factor | 38 ++++++++++---- extra/http/server/auth/admin/admin.factor | 36 ++++++++++--- extra/http/server/auth/admin/admin.xml | 2 +- extra/http/server/auth/admin/edit-user.xml | 5 ++ extra/http/server/auth/admin/new-user.xml | 5 ++ extra/http/server/auth/basic/basic.factor | 2 +- extra/http/server/auth/login/login.factor | 4 +- .../auth/providers/assoc/assoc-tests.factor | 4 +- extra/http/server/auth/providers/db/db.factor | 1 + .../server/auth/providers/providers.factor | 5 +- .../http/server/components/components.factor | 43 ++++++++++++---- extra/http/server/static/static.factor | 16 ++++-- extra/webapps/factor-website/page.css | 48 +++++++++++++++++ extra/webapps/factor-website/page.xml | 51 +------------------ extra/webapps/planet/planet.xml | 5 +- extra/webapps/todo/todo.xml | 2 +- 17 files changed, 183 insertions(+), 90 deletions(-) create mode 100644 extra/webapps/factor-website/page.css diff --git a/extra/http/http-tests.factor b/extra/http/http-tests.factor index 1f1ce361b2..831becd264 100755 --- a/extra/http/http-tests.factor +++ b/extra/http/http-tests.factor @@ -24,6 +24,12 @@ IN: http.tests [ "/bar" ] [ "http://foo.com/bar" url>path ] unit-test [ "/bar" ] [ "/bar" url>path ] unit-test +[ "a=b&a=c" ] [ { { "a" { "b" "c" } } } assoc>query ] unit-test + +[ H{ { "a" "b" } } ] [ "a=b" query>assoc ] unit-test + +[ H{ { "a" { "b" "c" } } } ] [ "a=b&a=c" query>assoc ] unit-test + : lf>crlf "\n" split "\r\n" join ; STRING: read-request-test-1 diff --git a/extra/http/http.factor b/extra/http/http.factor index c5f57d4c04..315250692b 100755 --- a/extra/http/http.factor +++ b/extra/http/http.factor @@ -119,21 +119,41 @@ IN: http header-value>string check-header-string write crlf ] assoc-each crlf ; +: add-query-param ( value key assoc -- ) + [ + at [ + { + { [ dup string? ] [ swap 2array ] } + { [ dup array? ] [ swap suffix ] } + { [ dup not ] [ drop ] } + } cond + ] when* + ] 2keep set-at ; + : query>assoc ( query -- assoc ) dup [ - "&" split [ - "=" split1 [ dup [ url-decode ] when ] bi@ - ] H{ } map>assoc + "&" split H{ } clone [ + [ + >r "=" split1 [ dup [ url-decode ] when ] bi@ swap r> + add-query-param + ] curry each + ] keep ] when ; : assoc>query ( hash -- str ) [ - [ url-encode ] - [ dup number? [ number>string ] when url-encode ] - bi* - "=" swap 3append - ] { } assoc>map - "&" join ; + { + { [ dup number? ] [ number>string ] } + { [ dup string? ] [ 1array ] } + { [ dup sequence? ] [ ] } + } cond + ] assoc-map + [ + [ + >r url-encode r> + [ url-encode "=" swap 3append , ] with each + ] assoc-each + ] { } make "&" join ; TUPLE: cookie name value path domain expires max-age http-only ; diff --git a/extra/http/server/auth/admin/admin.factor b/extra/http/server/auth/admin/admin.factor index 0dc5d3560e..e762103d7b 100644 --- a/extra/http/server/auth/admin/admin.factor +++ b/extra/http/server/auth/admin/admin.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel sequences accessors namespaces combinators -locals db.tuples +USING: kernel sequences accessors namespaces combinators words +assocs locals db.tuples arrays splitting strings qualified + http.server.templating.chloe http.server.boilerplate http.server.auth.providers @@ -10,17 +11,26 @@ http.server.auth.login http.server.auth http.server.forms http.server.components.inspector -http.server.components http.server.validators http.server.sessions http.server.actions http.server.crud http.server ; +EXCLUDE: http.server.components => string? number? ; IN: http.server.auth.admin : admin-template ( name -- template ) "resource:extra/http/server/auth/admin/" swap ".xml" 3append ; +: words>strings ( seq -- seq' ) + [ [ word-vocabulary ] [ drop ":" ] [ word-name ] tri 3append ] map ; + +: strings>words ( seq -- seq' ) + [ ":" split1 swap lookup ] map ; + +: ( id -- component ) + capabilities get words>strings ; + : ( -- form ) "user" "new-user" admin-template >>edit-template @@ -28,8 +38,8 @@ IN: http.server.auth.admin "realname" add-field "new-password" t >>required add-field "verify-password" t >>required add-field - "email" add-field ; - ! "capabilities" add-field ; + "email" add-field + "capabilities" add-field ; : ( -- form ) "user" @@ -40,8 +50,8 @@ IN: http.server.auth.admin "new-password" add-field "verify-password" add-field "email" add-field - "profile" add-field ; - ! "capabilities" add-field ; + "profile" add-field + "capabilities" add-field ; : ( -- form ) "user-list" @@ -102,6 +112,7 @@ IN: http.server.auth.admin [ realname>> "realname" set-value ] [ email>> "email" set-value ] [ profile>> "profile" set-value ] + [ capabilities>> words>strings "capabilities" set-value ] } cleave ] >>init @@ -122,6 +133,11 @@ IN: http.server.auth.admin "new-password" value >>encoded-password ] unless + "capabilities" value { + { [ dup string? ] [ 1array ] } + { [ dup array? ] [ ] } + } cond strings>words >>capabilities + update-tuple next f @@ -157,3 +173,9 @@ can-administer-users? define-capability "admin" admin-template >>template { can-administer-users? } ] ; + +: make-admin ( username -- ) + + select-tuple + [ can-administer-users? suffix ] change-capabilities + update-tuple ; diff --git a/extra/http/server/auth/admin/admin.xml b/extra/http/server/auth/admin/admin.xml index d3c0ff4c90..1864c3c4bf 100644 --- a/extra/http/server/auth/admin/admin.xml +++ b/extra/http/server/auth/admin/admin.xml @@ -2,7 +2,7 @@ - +