diff --git a/.gitignore b/.gitignore
index e3c0bdea9..21ad3efcd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@
/log/*
!/log/.keep
/tmp
+.env
diff --git a/.rubocop.yml b/.rubocop.yml
index ffd0357df..72b6c3e0b 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,16 +1,36 @@
+Rails:
+ Enabled: true
+
AllCops:
- RunRailsCops: true
+ TargetRailsVersion: 4.0
Exclude:
- 'bin/*'
- 'db/schema.rb'
- 'db/seeds.rb'
- 'vendor/bundle/**/*'
+Layout/DotPosition:
+ EnforcedStyle: trailing
+
+Layout/SpaceInsideHashLiteralBraces:
+ EnforcedStyle: no_space
+
+Layout/AccessModifierIndentation:
+ EnforcedStyle: outdent
+
Metrics/AbcSize:
Exclude:
- 'app/controllers/passwords_controller.rb'
- 'app/controllers/sessions_controller.rb'
- 'app/controllers/users_controller.rb'
+ - 'lib/thing_importer.rb'
+ - 'lib/adoption_mover.rb'
+
+Metrics/BlockLength:
+ Exclude:
+ - 'config/initializers/*'
+ - 'lib/adoption_mover.rb' # removing heredocs would decrease readibility
+ ExcludedMethods: ['test']
Metrics/BlockNesting:
Max: 2
@@ -24,14 +44,13 @@ Metrics/MethodLength:
Max: 10
Exclude:
- 'db/migrate/*.rb'
+ - 'lib/thing_importer.rb' # removing heredocs would decrease readibility
+ - 'lib/adoption_mover.rb' # removing heredocs would decrease readibility
Metrics/ParameterLists:
Max: 4
CountKeywordArgs: true
-Style/AccessModifierIndentation:
- EnforcedStyle: outdent
-
Style/CollectionMethods:
PreferredMethods:
map: 'collect'
@@ -42,16 +61,16 @@ Style/CollectionMethods:
Style/Documentation:
Enabled: false
-Style/DotPosition:
- EnforcedStyle: trailing
-
Style/DoubleNegation:
Enabled: false
-Style/SpaceInsideHashLiteralBraces:
- EnforcedStyle: no_space
+Style/TrailingCommaInArguments:
+ EnforcedStyleForMultiline: 'comma'
+
+Style/TrailingCommaInArrayLiteral:
+ EnforcedStyleForMultiline: 'comma'
-Style/TrailingComma:
+Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: 'comma'
Style/WordArray:
diff --git a/.ruby-version b/.ruby-version
index 585940699..437459cd9 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.2.3
+2.5.0
diff --git a/.travis.yml b/.travis.yml
index 72ea1467d..22e8c7e3c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,19 @@
-before_script: bundle exec rake db:create db:schema:load
+dist: trusty
+sudo: false
+language: ruby
bundler_args: "--without assets:development:production"
+addons:
+ postgresql: "9.6"
cache: bundler
-language: ruby
-rvm:
- - 2.2.3
+before_script: bundle exec rake db:create db:schema:load
script:
- - bundle exec rake
- - bundle exec rubocop
-sudo: false
+- bundle exec rake
+- bundle exec rubocop
deploy:
+ provider: heroku
api_key:
- secure: Ck6BzHMtPmYsBY/PbVnfIE6wnSe9s6fYDkvzYZtT/2qud4j4ElhV9el0ZbDhiTmix0PMwcCnN/Tpw5GbLVaHncDaJkvb6ucEBNyC7xECjNAFsxE6lu3yKATsY2hta7OQ8NwLlvAZpzCLMZQf9lzoSNbh2h/p+CwSNR7vOkw0FNc=
- app: adopt-a-hydrant
+ secure: RYcEa08NYClwvVGXEuxdkTPmWIasRPXIhVFhy3ievSYAlL6kRy44QoTApp26p+gDMImP1UIGcjI37RkPvqiONdmR70n2kVVYpbFYql5aJ3GjVYYYAwXqt6dHnFjt2Bi4mWhVH8ydyqxC7mQ8quW8a+yHkf/YSXhMv5IC1TmPnv4I+vyjAxK/Ru20768E5hn0UlcdYWGpNq81ZZhJzk26KZIEJDVOokJTY4dBDxXYEYsgSpTpAkN5KRipFJNosWPl2ASbEmOXzR23tmoHN4VcmAKhZ4ePwqupWN3G7VhkF5q3FA/1VB5AuNmUuvhr1G5lO9ZoIHStqPrm4G28PwAJF058QHyQOZk309F7bTRpfiY0nu77pnO09Ze/lK98NGygog+9YTQDzF43qwjPdIIn1Az06ng2QWAaur9QGoG3lGKuhadUKdSuFETpH/dVMfV+9DiPbYcIoTigDNLUhC8Pp4atFN1ltz7kLhRkJT8l4gPpWPNOQrQC1ZwVJyM1yCasetGIIcGWXa7pI9qq55P+ERseFTNB5WNmsSQb97eXTGKjaRCcpmLnXxUQ5sG6lxi/ZMJ2L/K4X15PfLHFwMhsc2jWgfvGWqmPYwuNXsqPeUNuNW/GY5dNAqKasa1fmURwJDzxCu/x1XsyktcCzGbY1HOEaYv+5HjV0Ycrj4ca4iY=
+ app: adoptadrainsf-staging
on:
- repo: codeforamerica/adopt-a-hydrant
- provider: heroku
- strategy: git
+ repo: sfbrigade/adopt-a-drain
+ branch: production
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..db37966a0
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,7 @@
+FROM ruby:2.2.3
+RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
+RUN mkdir /myapp
+WORKDIR /myapp
+ADD Gemfile /myapp/Gemfile
+ADD Gemfile.lock /myapp/Gemfile.lock
+RUN bundle install
diff --git a/Gemfile b/Gemfile
index e38e20aca..1a1b484c9 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,22 +1,25 @@
-source 'https://rubygems.org'
-ruby '2.2.3'
+# frozen_string_literal: true
-gem 'rails', '~> 4.2.4'
+source 'https://rubygems.org'
+ruby '2.5.0'
-gem 'arel'
-gem 'devise'
-gem 'geokit'
-gem 'haml'
-gem 'http_accept_language'
-gem 'nokogiri'
+gem 'airbrake', '~> 7.3'
+gem 'devise', '~> 4.3'
+gem 'geokit', '~> 1.0'
+gem 'haml', '~> 5.0'
+gem 'http_accept_language', '~> 2.0'
+gem 'local_time', '~> 2.0'
+gem 'obscenity', '~> 1.0', '>= 1.0.2'
gem 'pg'
-gem 'rails_12factor'
-gem 'rails_admin'
-gem 'validates_formatting_of'
+gem 'rails', '~> 4.2.10'
+gem 'rails_admin', '~> 1.3'
+gem 'validates_formatting_of', '~> 0.9.0'
-platforms :ruby_18 do
- gem 'fastercsv'
-end
+gem 'paranoia', '~> 2.4'
+gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw]
+
+gem 'byebug', groups: %i[development test]
+gem 'dotenv-rails', groups: %i[development test]
group :assets do
gem 'sass-rails', '>= 4.0.3'
@@ -29,6 +32,7 @@ end
group :production do
gem 'puma'
+ gem 'rails_12factor'
gem 'skylight'
end
@@ -36,6 +40,5 @@ group :test do
gem 'coveralls', require: false
gem 'rubocop'
gem 'simplecov', require: false
- gem 'sqlite3'
gem 'webmock'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 876911634..c432f5dc8 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,222 +1,247 @@
GEM
remote: https://rubygems.org/
specs:
- actionmailer (4.2.4)
- actionpack (= 4.2.4)
- actionview (= 4.2.4)
- activejob (= 4.2.4)
+ actionmailer (4.2.10)
+ actionpack (= 4.2.10)
+ actionview (= 4.2.10)
+ activejob (= 4.2.10)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
- actionpack (4.2.4)
- actionview (= 4.2.4)
- activesupport (= 4.2.4)
+ actionpack (4.2.10)
+ actionview (= 4.2.10)
+ activesupport (= 4.2.10)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (4.2.4)
- activesupport (= 4.2.4)
+ actionview (4.2.10)
+ activesupport (= 4.2.10)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
- activejob (4.2.4)
- activesupport (= 4.2.4)
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
+ activejob (4.2.10)
+ activesupport (= 4.2.10)
globalid (>= 0.3.0)
- activemodel (4.2.4)
- activesupport (= 4.2.4)
+ activemodel (4.2.10)
+ activesupport (= 4.2.10)
builder (~> 3.1)
- activerecord (4.2.4)
- activemodel (= 4.2.4)
- activesupport (= 4.2.4)
+ activerecord (4.2.10)
+ activemodel (= 4.2.10)
+ activesupport (= 4.2.10)
arel (~> 6.0)
- activesupport (4.2.4)
+ activesupport (4.2.10)
i18n (~> 0.7)
- json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
- addressable (2.3.8)
- arel (6.0.3)
- ast (2.1.0)
- astrolabe (1.3.1)
- parser (~> 2.2)
- bcrypt (3.1.10)
- builder (3.2.2)
- coffee-rails (4.1.0)
+ addressable (2.5.2)
+ public_suffix (>= 2.0.2, < 4.0)
+ airbrake (7.3.0)
+ airbrake-ruby (~> 2.5)
+ airbrake-ruby (2.9.0)
+ arel (6.0.4)
+ ast (2.4.0)
+ bcrypt (3.1.11)
+ builder (3.2.3)
+ byebug (10.0.2)
+ coffee-rails (4.2.2)
coffee-script (>= 2.2.0)
- railties (>= 4.0.0, < 5.0)
+ railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
- coffee-script-source (1.9.1.1)
- coveralls (0.8.3)
- json (~> 1.8)
- rest-client (>= 1.6.8, < 2)
- simplecov (~> 0.10.0)
+ coffee-script-source (1.12.2)
+ concurrent-ruby (1.0.5)
+ coveralls (0.8.21)
+ json (>= 1.8, < 3)
+ simplecov (~> 0.14.1)
term-ansicolor (~> 1.3)
- thor (~> 0.19.1)
- crack (0.4.2)
+ thor (~> 0.19.4)
+ tins (~> 1.6)
+ crack (0.4.3)
safe_yaml (~> 1.0.0)
- devise (3.5.2)
+ crass (1.0.4)
+ devise (4.4.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
- railties (>= 3.2.6, < 5)
+ railties (>= 4.1.0, < 6.0)
responders
- thread_safe (~> 0.1)
warden (~> 1.2.3)
docile (1.1.5)
- domain_name (0.5.25)
- unf (>= 0.0.5, < 1.0.0)
+ dotenv (2.4.0)
+ dotenv-rails (2.4.0)
+ dotenv (= 2.4.0)
+ railties (>= 3.2, < 6.0)
erubis (2.7.0)
- execjs (2.6.0)
- fastercsv (1.5.5)
- font-awesome-rails (4.4.0.0)
- railties (>= 3.2, < 5.0)
- geokit (1.10.0)
- globalid (0.3.6)
- activesupport (>= 4.1.0)
- haml (4.0.7)
+ execjs (2.7.0)
+ ffi (1.9.23)
+ font-awesome-rails (4.7.0.3)
+ railties (>= 3.2, < 5.2)
+ geokit (1.11.0)
+ globalid (0.4.1)
+ activesupport (>= 4.2.0)
+ haml (5.0.4)
+ temple (>= 0.8.0)
tilt
- hashdiff (0.2.2)
- http-cookie (1.0.2)
- domain_name (~> 0.5)
- http_accept_language (2.0.5)
- i18n (0.7.0)
- jquery-rails (4.0.5)
- rails-dom-testing (~> 1.0)
+ hashdiff (0.3.7)
+ http_accept_language (2.1.1)
+ i18n (0.9.5)
+ concurrent-ruby (~> 1.0)
+ jquery-rails (4.3.1)
+ rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5)
railties (>= 3.2.16)
- json (1.8.3)
- kaminari (0.16.3)
- actionpack (>= 3.0.0)
- activesupport (>= 3.0.0)
- loofah (2.0.3)
+ json (2.1.0)
+ kaminari (1.1.1)
+ activesupport (>= 4.1.0)
+ kaminari-actionview (= 1.1.1)
+ kaminari-activerecord (= 1.1.1)
+ kaminari-core (= 1.1.1)
+ kaminari-actionview (1.1.1)
+ actionview
+ kaminari-core (= 1.1.1)
+ kaminari-activerecord (1.1.1)
+ activerecord
+ kaminari-core (= 1.1.1)
+ kaminari-core (1.1.1)
+ local_time (2.0.0)
+ loofah (2.2.2)
+ crass (~> 1.0.2)
nokogiri (>= 1.5.9)
- mail (2.6.3)
- mime-types (>= 1.16, < 3)
- mime-types (2.6.2)
- mini_portile (0.6.2)
- minitest (5.8.1)
+ mail (2.7.0)
+ mini_mime (>= 0.1.1)
+ mini_mime (1.0.0)
+ mini_portile2 (2.3.0)
+ minitest (5.11.3)
nested_form (0.3.2)
- netrc (0.10.3)
- nokogiri (1.6.6.2)
- mini_portile (~> 0.6.0)
+ nokogiri (1.8.2)
+ mini_portile2 (~> 2.3.0)
+ obscenity (1.0.2)
orm_adapter (0.5.0)
- parser (2.2.3.0)
- ast (>= 1.1, < 3.0)
- pg (0.18.3)
+ parallel (1.12.1)
+ paranoia (2.4.1)
+ activerecord (>= 4.0, < 5.3)
+ parser (2.5.1.0)
+ ast (~> 2.4.0)
+ pg (0.21.0)
powerpack (0.1.1)
- puma (2.14.0)
- rack (1.6.4)
- rack-pjax (0.8.0)
+ public_suffix (3.0.2)
+ puma (3.11.4)
+ rack (1.6.10)
+ rack-pjax (1.0.0)
nokogiri (~> 1.5)
- rack (~> 1.1)
+ rack (>= 1.1)
rack-test (0.6.3)
rack (>= 1.0)
- rails (4.2.4)
- actionmailer (= 4.2.4)
- actionpack (= 4.2.4)
- actionview (= 4.2.4)
- activejob (= 4.2.4)
- activemodel (= 4.2.4)
- activerecord (= 4.2.4)
- activesupport (= 4.2.4)
+ rails (4.2.10)
+ actionmailer (= 4.2.10)
+ actionpack (= 4.2.10)
+ actionview (= 4.2.10)
+ activejob (= 4.2.10)
+ activemodel (= 4.2.10)
+ activerecord (= 4.2.10)
+ activesupport (= 4.2.10)
bundler (>= 1.3.0, < 2.0)
- railties (= 4.2.4)
+ railties (= 4.2.10)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
- rails-dom-testing (1.0.7)
- activesupport (>= 4.2.0.beta, < 5.0)
- nokogiri (~> 1.6.0)
+ rails-dom-testing (1.0.9)
+ activesupport (>= 4.2.0, < 5.0)
+ nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
- rails-html-sanitizer (1.0.2)
- loofah (~> 2.0)
+ rails-html-sanitizer (1.0.4)
+ loofah (~> 2.2, >= 2.2.2)
rails_12factor (0.0.3)
rails_serve_static_assets
rails_stdout_logging
- rails_admin (0.7.0)
+ rails_admin (1.3.0)
builder (~> 3.1)
coffee-rails (~> 4.0)
font-awesome-rails (>= 3.0, < 5)
- haml (~> 4.0)
+ haml (>= 4.0, < 6)
jquery-rails (>= 3.0, < 5)
jquery-ui-rails (~> 5.0)
- kaminari (~> 0.14)
+ kaminari (>= 0.14, < 2.0)
nested_form (~> 0.3)
- rack-pjax (~> 0.7)
- rails (~> 4.0)
- remotipart (~> 1.0)
- safe_yaml (~> 1.0)
+ rack-pjax (>= 0.7)
+ rails (>= 4.0, < 6)
+ remotipart (~> 1.3)
sass-rails (>= 4.0, < 6)
- rails_serve_static_assets (0.0.4)
- rails_stdout_logging (0.0.4)
- railties (4.2.4)
- actionpack (= 4.2.4)
- activesupport (= 4.2.4)
+ rails_serve_static_assets (0.0.5)
+ rails_stdout_logging (0.0.5)
+ railties (4.2.10)
+ actionpack (= 4.2.10)
+ activesupport (= 4.2.10)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- rainbow (2.0.0)
- rake (10.4.2)
- remotipart (1.2.1)
- responders (2.1.0)
- railties (>= 4.2.0, < 5)
- rest-client (1.8.0)
- http-cookie (>= 1.0.2, < 2.0)
- mime-types (>= 1.16, < 3.0)
- netrc (~> 0.7)
- rubocop (0.34.2)
- astrolabe (~> 1.3)
- parser (>= 2.2.2.5, < 3.0)
+ rainbow (3.0.0)
+ rake (12.3.1)
+ rb-fsevent (0.10.3)
+ rb-inotify (0.9.10)
+ ffi (>= 0.5.0, < 2)
+ remotipart (1.3.1)
+ responders (2.4.0)
+ actionpack (>= 4.2.0, < 5.3)
+ railties (>= 4.2.0, < 5.3)
+ rubocop (0.55.0)
+ parallel (~> 1.10)
+ parser (>= 2.5)
powerpack (~> 0.1)
- rainbow (>= 1.99.1, < 3.0)
- ruby-progressbar (~> 1.4)
- ruby-progressbar (1.7.5)
+ rainbow (>= 2.2.2, < 4.0)
+ ruby-progressbar (~> 1.7)
+ unicode-display_width (~> 1.0, >= 1.0.1)
+ ruby-progressbar (1.9.0)
safe_yaml (1.0.4)
- sass (3.4.19)
- sass-rails (5.0.4)
- railties (>= 4.0.0, < 5.0)
+ sass (3.5.6)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sass-rails (5.0.7)
+ railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
- simplecov (0.10.0)
+ simplecov (0.14.1)
docile (~> 1.1.0)
- json (~> 1.8)
+ json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
- simplecov-html (0.10.0)
- skylight (0.8.1)
- activesupport (>= 3.0.0)
- spring (1.4.0)
- sprockets (3.4.0)
+ simplecov-html (0.10.2)
+ skylight (2.0.0)
+ skylight-core (= 2.0.0)
+ skylight-core (2.0.0)
+ activesupport (>= 4.2.0)
+ spring (2.0.2)
+ activesupport (>= 4.2)
+ sprockets (3.7.1)
+ concurrent-ruby (~> 1.0)
rack (> 1, < 3)
- sprockets-rails (2.3.3)
- actionpack (>= 3.0)
- activesupport (>= 3.0)
- sprockets (>= 2.8, < 4.0)
- sqlite3 (1.3.11)
- term-ansicolor (1.3.2)
+ sprockets-rails (3.2.1)
+ actionpack (>= 4.0)
+ activesupport (>= 4.0)
+ sprockets (>= 3.0.0)
+ temple (0.8.0)
+ term-ansicolor (1.6.0)
tins (~> 1.0)
- thor (0.19.1)
- thread_safe (0.3.5)
- tilt (2.0.1)
- tins (1.6.0)
- tzinfo (1.2.2)
+ thor (0.19.4)
+ thread_safe (0.3.6)
+ tilt (2.0.8)
+ tins (1.15.0)
+ tzinfo (1.2.5)
thread_safe (~> 0.1)
- uglifier (2.7.2)
- execjs (>= 0.3.0)
- json (>= 1.8.0)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.7.1)
+ uglifier (4.1.10)
+ execjs (>= 0.3.0, < 3)
+ unicode-display_width (1.3.2)
validates_formatting_of (0.9.0)
activemodel
- warden (1.2.3)
+ warden (1.2.7)
rack (>= 1.0)
- webmock (1.22.1)
+ webmock (3.4.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
@@ -225,28 +250,34 @@ PLATFORMS
ruby
DEPENDENCIES
- arel
+ airbrake (~> 7.3)
+ byebug
coveralls
- devise
- fastercsv
- geokit
- haml
- http_accept_language
- nokogiri
+ devise (~> 4.3)
+ dotenv-rails
+ geokit (~> 1.0)
+ haml (~> 5.0)
+ http_accept_language (~> 2.0)
+ local_time (~> 2.0)
+ obscenity (~> 1.0, >= 1.0.2)
+ paranoia (~> 2.4)
pg
puma
- rails (~> 4.2.4)
+ rails (~> 4.2.10)
rails_12factor
- rails_admin
+ rails_admin (~> 1.3)
rubocop
sass-rails (>= 4.0.3)
simplecov
skylight
spring
- sqlite3
+ tzinfo-data
uglifier
- validates_formatting_of
+ validates_formatting_of (~> 0.9.0)
webmock
+RUBY VERSION
+ ruby 2.5.0p0
+
BUNDLED WITH
- 1.10.6
+ 1.16.1
diff --git a/README.md b/README.md
index adb15319d..838b85531 100644
--- a/README.md
+++ b/README.md
@@ -1,39 +1,67 @@
-# Adopt-a-Hydrant
+# Adopt-a-Drain
-[][travis]
-[][gemnasium]
-[][coveralls]
+[](https://gitter.im/sfbrigade/adopt-a-drain?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[travis]: http://travis-ci.org/codeforamerica/adopt-a-hydrant
-[gemnasium]: https://gemnasium.com/codeforamerica/adopt-a-hydrant
-[coveralls]: https://coveralls.io/r/codeforamerica/adopt-a-hydrant
+[][travis]
+[][gemnasium]
+[][coveralls]
-Claim responsibility for shoveling out a fire hydrant after it snows.
+[travis]: http://travis-ci.org/sfbrigade/adopt-a-drain
+[gemnasium]: https://gemnasium.com/sfbrigade/adopt-a-drain
+[coveralls]: https://coveralls.io/r/sfbrigade/adopt-a-drain
+
+Claim responsibility for cleaning out a storm drain after it rains.
## Screenshot
-
+
## Demo
You can see a running version of the application at
-[http://adopt-a-hydrant.herokuapp.com/][demo].
+[http://adopt-a-drain.herokuapp.com/][demo].
-[demo]: http://adopt-a-hydrant.herokuapp.com/
+[demo]: http://adopt-a-drain.herokuapp.com/
## Installation
This application requires [Postgres](http://www.postgresql.org/) to be installed
- git clone git://github.com/codeforamerica/adopt-a-hydrant.git
- cd adopt-a-hydrant
+ git clone git://github.com/sfbrigade/adopt-a-drain.git
+ cd adopt-a-drain
bundle install
bundle exec rake db:create
bundle exec rake db:schema:load
+See the [wiki](https://github.com/sfbrigade/adopt-a-drain/wiki/Windows-Development-Environment) for a guide on how to install this application on Windows.
+
+## Docker
+
+To setup a local development environment with
+[Docker](https://docs.docker.com/engine/installation/).
+
+```
+# Override database settings as the docker host:
+echo DB_HOST=db > .env
+echo DB_USER=postgres >> .env
+
+# Setup your docker based postgres database:
+docker-compose run --rm web bundle exec rake db:setup
+
+# Load data:
+docker-compose run --rm web bundle exec rake data:load_things
+# OR: don't load all that data, and load the seed data:
+# docker-compose run --rm web bundle exec rake db:seed
+
+# Start the web server:
+docker-compose up
+
+# Visit your website http://localhost:3000 (or the IP of your docker-machine)
+```
+
## Usage
rails server
## Seed Data
- bundle exec rake db:seed
+ bundle exec rake data:load_drains
## Deploying to Heroku
A successful deployment to Heroku requires a few setup steps:
@@ -67,7 +95,7 @@ A successful deployment to Heroku requires a few setup steps:
`heroku run bundle exec rake db:seed`
Keep in mind that the Heroku free Postgres plan only allows up to 10,000 rows,
-so if your city has more than 10,000 fire hydrants (or other thing to be
+so if your city has more than 10,000 fire drains (or other thing to be
adopted), you will need to upgrade to the $9/month plan.
### Google Analytics
@@ -78,7 +106,7 @@ variables:
heroku config:set GOOGLE_ANALYTICS_ID=your_id
heroku config:set GOOGLE_ANALYTICS_DOMAIN=your_domain_name
-An example ID is `UA-12345678-9`, and an example domain is `adoptahydrant.org`.
+An example ID is `UA-12345678-9`, and an example domain is `adoptadrain.org`.
## Contributing
In the spirit of [free software][free-sw], **everyone** is encouraged to help
@@ -101,9 +129,9 @@ Here are some ways *you* can contribute:
* by reviewing patches
* [financially][]
-[locales]: https://github.com/codeforamerica/adopt-a-hydrant/tree/master/config/locales
-[issues]: https://github.com/codeforamerica/adopt-a-hydrant/issues
-[financially]: https://secure.codeforamerica.org/page/contribute
+[locales]: https://github.com/sfbrigade/adopt-a-drain/tree/master/config/locales
+[issues]: https://github.com/sfbrigade/adopt-a-drain/issues
+[financially]: https://secure.sfbrigade.org/page/contribute
## Submitting an Issue
We use the [GitHub issue tracker][issues] to track bugs and features. Before
@@ -128,11 +156,11 @@ Ideally, a bug report should include a pull request with failing specs.
9. [Submit a pull request.][pr]
[fork]: http://help.github.com/fork-a-repo/
-[branch]: http://learn.github.com/p/branching.html
+[branch]: https://guides.github.com/introduction/flow/
[pr]: http://help.github.com/send-pull-requests/
## Supported Ruby Version
-This library aims to support and is [tested against][travis] Ruby version 2.1.2.
+This library aims to support and is [tested against][travis] Ruby version 2.2.2.
If something doesn't work on this version, it should be considered a bug.
@@ -147,10 +175,6 @@ timely fashion. If critical issues for a particular implementation exist at the
time of a major release, support for that Ruby version may be dropped.
## Copyright
-Copyright (c) 2014 Code for America. See [LICENSE][] for details.
-
-[license]: https://github.com/codeforamerica/adopt-a-hydrant/blob/master/LICENSE.md
-
-[][tracker]
+Copyright (c) 2015 Code for San Francisco. See [LICENSE.md](https://github.com/sfbrigade/adopt-a-drain/blob/master/LICENSE.md) for details.
-[tracker]: http://stats.codeforamerica.org/projects/adopt-a-hydrant
+[license]: https://github.com/sfbrigade/adopt-a-drain/blob/master/LICENSE.md
diff --git a/Rakefile b/Rakefile
index ba6b733dd..0cfbf42e9 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,6 +1,17 @@
+# frozen_string_literal: true
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
-require File.expand_path('../config/application', __FILE__)
+require File.expand_path('config/application', __dir__)
+
+begin
+ require 'rubocop/rake_task'
+ RuboCop::RakeTask.new
+rescue LoadError
+ puts 'Could not load rubocop'
+end
Rails.application.load_tasks
+
+task default: %i[rubocop test]
diff --git a/adopt.png b/adopt.png
new file mode 100644
index 000000000..c3f0a87d3
Binary files /dev/null and b/adopt.png differ
diff --git a/app.json b/app.json
new file mode 100644
index 000000000..95187e045
--- /dev/null
+++ b/app.json
@@ -0,0 +1,41 @@
+{
+ "name": "adopt-a-drain",
+ "description": "Adopt-a-Drain SF Review App",
+ "scripts": {
+ "postdeploy": "bundle exec rake db:schema:load db:seed"
+ },
+ "env": {
+ "GOOGLE_MAPS_JAVASCRIPT_API_KEY": {
+ "required": true
+ },
+ "HEROKU_APP_NAME": {
+ "required": true
+ },
+ "LANG": {
+ "required": true
+ },
+ "RACK_ENV": {
+ "required": true
+ },
+ "RAILS_ENV": {
+ "required": true
+ },
+ "RAILS_SERVE_STATIC_FILES": {
+ "required": true
+ },
+ "SECRET_KEY_BASE": {
+ "generator": "secret"
+ }
+ },
+ "formation": {},
+ "addons": [
+ "airbrake",
+ "heroku-postgresql",
+ "sendgrid"
+ ],
+ "buildpacks": [
+ {
+ "url": "heroku/ruby"
+ }
+ ]
+}
diff --git a/app/assets/images/adoptadrain-event.png b/app/assets/images/adoptadrain-event.png
new file mode 100644
index 000000000..671060d18
Binary files /dev/null and b/app/assets/images/adoptadrain-event.png differ
diff --git a/app/assets/images/icons/facebook.png b/app/assets/images/icons/facebook.png
new file mode 100644
index 000000000..22c5d72aa
Binary files /dev/null and b/app/assets/images/icons/facebook.png differ
diff --git a/app/assets/images/icons/github.png b/app/assets/images/icons/github.png
new file mode 100644
index 000000000..ce70d2266
Binary files /dev/null and b/app/assets/images/icons/github.png differ
diff --git a/app/assets/images/icons/instagram.png b/app/assets/images/icons/instagram.png
new file mode 100644
index 000000000..3606be05a
Binary files /dev/null and b/app/assets/images/icons/instagram.png differ
diff --git a/app/assets/images/icons/linkedin.png b/app/assets/images/icons/linkedin.png
new file mode 100644
index 000000000..60cecb286
Binary files /dev/null and b/app/assets/images/icons/linkedin.png differ
diff --git a/app/assets/images/icons/twitter.png b/app/assets/images/icons/twitter.png
new file mode 100644
index 000000000..4bd55ee5f
Binary files /dev/null and b/app/assets/images/icons/twitter.png differ
diff --git a/app/assets/images/icons/youtube.png b/app/assets/images/icons/youtube.png
new file mode 100644
index 000000000..6e9194372
Binary files /dev/null and b/app/assets/images/icons/youtube.png differ
diff --git a/app/assets/images/logos/90_DPW_color logo.svg b/app/assets/images/logos/90_DPW_color logo.svg
new file mode 100644
index 000000000..e0ab249e9
--- /dev/null
+++ b/app/assets/images/logos/90_DPW_color logo.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/assets/images/logos/DataSFLogo.png b/app/assets/images/logos/DataSFLogo.png
new file mode 100644
index 000000000..0d688a1f7
Binary files /dev/null and b/app/assets/images/logos/DataSFLogo.png differ
diff --git a/app/assets/images/logos/SFPWlogo.jpg b/app/assets/images/logos/SFPWlogo.jpg
new file mode 100644
index 000000000..c71b25ebe
Binary files /dev/null and b/app/assets/images/logos/SFPWlogo.jpg differ
diff --git a/app/assets/images/logos/SFWPS-Horz-4c.svg b/app/assets/images/logos/SFWPS-Horz-4c.svg
new file mode 100644
index 000000000..20c8edb0f
--- /dev/null
+++ b/app/assets/images/logos/SFWPS-Horz-4c.svg
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/assets/images/logos/adopt-a-drain-horizontal.png b/app/assets/images/logos/adopt-a-drain-horizontal.png
new file mode 100644
index 000000000..73822c5cd
Binary files /dev/null and b/app/assets/images/logos/adopt-a-drain-horizontal.png differ
diff --git a/app/assets/images/logos/adopt-a-drain-sfpuc.png b/app/assets/images/logos/adopt-a-drain-sfpuc.png
new file mode 100644
index 000000000..7de2d93c5
Binary files /dev/null and b/app/assets/images/logos/adopt-a-drain-sfpuc.png differ
diff --git a/app/assets/images/logos/adopt-a-drain.png b/app/assets/images/logos/adopt-a-drain.png
new file mode 100644
index 000000000..0b3402a9c
Binary files /dev/null and b/app/assets/images/logos/adopt-a-drain.png differ
diff --git a/app/assets/images/logos/adopt-a-drain_large.png b/app/assets/images/logos/adopt-a-drain_large.png
new file mode 100644
index 000000000..29b1b5f44
Binary files /dev/null and b/app/assets/images/logos/adopt-a-drain_large.png differ
diff --git a/app/assets/images/logos/adopt-a-hydrant.png b/app/assets/images/logos/adopt-a-hydrant.png
deleted file mode 100644
index 122a91d67..000000000
Binary files a/app/assets/images/logos/adopt-a-hydrant.png and /dev/null differ
diff --git a/app/assets/images/logos/adopt-a-hydrant_large.png b/app/assets/images/logos/adopt-a-hydrant_large.png
deleted file mode 100644
index 8ed7b3106..000000000
Binary files a/app/assets/images/logos/adopt-a-hydrant_large.png and /dev/null differ
diff --git a/app/assets/images/logos/cfa.jpg b/app/assets/images/logos/cfa.jpg
new file mode 100644
index 000000000..61379670b
Binary files /dev/null and b/app/assets/images/logos/cfa.jpg differ
diff --git a/app/assets/images/logos/cfa.png b/app/assets/images/logos/cfa.png
deleted file mode 100644
index 59e1dd30b..000000000
Binary files a/app/assets/images/logos/cfa.png and /dev/null differ
diff --git a/app/assets/images/logos/codeforsanfrancisco.png b/app/assets/images/logos/codeforsanfrancisco.png
new file mode 100644
index 000000000..88f22d3d2
Binary files /dev/null and b/app/assets/images/logos/codeforsanfrancisco.png differ
diff --git a/app/assets/images/logos/dtlogo.png b/app/assets/images/logos/dtlogo.png
new file mode 100644
index 000000000..8a39525e7
Binary files /dev/null and b/app/assets/images/logos/dtlogo.png differ
diff --git a/app/assets/images/logos/sfgov.png b/app/assets/images/logos/sfgov.png
new file mode 100644
index 000000000..fa1c07369
Binary files /dev/null and b/app/assets/images/logos/sfgov.png differ
diff --git a/app/assets/images/logos/sfpuc.png b/app/assets/images/logos/sfpuc.png
new file mode 100644
index 000000000..549fcf30d
Binary files /dev/null and b/app/assets/images/logos/sfpuc.png differ
diff --git a/app/assets/images/logos/sfpw.jpg b/app/assets/images/logos/sfpw.jpg
new file mode 100644
index 000000000..a6eee994e
Binary files /dev/null and b/app/assets/images/logos/sfpw.jpg differ
diff --git a/app/assets/images/markers/adopted.png b/app/assets/images/markers/adopted.png
new file mode 100755
index 000000000..96e9e2fe6
Binary files /dev/null and b/app/assets/images/markers/adopted.png differ
diff --git a/app/assets/images/markers/adoptedbyyou.png b/app/assets/images/markers/adoptedbyyou.png
new file mode 100755
index 000000000..cae618ee8
Binary files /dev/null and b/app/assets/images/markers/adoptedbyyou.png differ
diff --git a/app/assets/images/markers/tobay.png b/app/assets/images/markers/tobay.png
new file mode 100755
index 000000000..fd68ecd31
Binary files /dev/null and b/app/assets/images/markers/tobay.png differ
diff --git a/app/assets/images/markers/tosewer.png b/app/assets/images/markers/tosewer.png
new file mode 100755
index 000000000..c4262f9f6
Binary files /dev/null and b/app/assets/images/markers/tosewer.png differ
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index c28e5badc..28bed2d63 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -11,3 +11,4 @@
// about supported directives.
//
//= require_tree .
+//= require local-time
diff --git a/app/assets/javascripts/bootstrap.js b/app/assets/javascripts/bootstrap.js
index ca868671c..5debfd7de 100644
--- a/app/assets/javascripts/bootstrap.js
+++ b/app/assets/javascripts/bootstrap.js
@@ -1,1726 +1,2363 @@
-/* ===================================================
- * bootstrap-transition.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ 'use strict';
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
+ }
+}(jQuery);
- $(function () {
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.5
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- "use strict"
-
- /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
- * ======================================================= */
-
- $.support.transition = (function () {
- var thisBody = document.body || document.documentElement
- , thisStyle = thisBody.style
- , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
-
- return support && {
- end: (function () {
- var transitionEnd = "TransitionEnd"
- if ( $.browser.webkit ) {
- transitionEnd = "webkitTransitionEnd"
- } else if ( $.browser.mozilla ) {
- transitionEnd = "transitionend"
- } else if ( $.browser.opera ) {
- transitionEnd = "oTransitionEnd"
- }
- return transitionEnd
- }())
- }
- })()
- })
++function ($) {
+ 'use strict';
-}( window.jQuery );/* ==========================================================
- * bootstrap-alert.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* ALERT CLASS DEFINITION
- * ====================== */
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
- var dismiss = '[data-dismiss="alert"]'
- , Alert = function ( el ) {
- $(el).on('click', dismiss, this.close)
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
}
+ }
- Alert.prototype = {
+ return false // explicit for ie8 ( ._.)
+ }
- constructor: Alert
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
- , close: function ( e ) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
+ $(function () {
+ $.support.transition = transitionEnd()
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
+ if (!$.support.transition) return
- $parent = $(selector)
- $parent.trigger('close')
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
- e && e.preventDefault()
+}(jQuery);
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.5
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- $parent
- .trigger('close')
- .removeClass('in')
- function removeElement() {
- $parent
- .trigger('closed')
- .remove()
- }
++function ($) {
+ 'use strict';
- $.support.transition && $parent.hasClass('fade') ?
- $parent.on($.support.transition.end, removeElement) :
- removeElement()
- }
+ // ALERT CLASS DEFINITION
+ // ======================
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
}
+ Alert.VERSION = '3.3.5'
- /* ALERT PLUGIN DEFINITION
- * ======================= */
+ Alert.TRANSITION_DURATION = 150
- $.fn.alert = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('alert')
- if (!data) $this.data('alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
- $.fn.alert.Constructor = Alert
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+ var $parent = $(selector)
- /* ALERT DATA-API
- * ============== */
+ if (e) e.preventDefault()
- $(function () {
- $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
- })
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
-}( window.jQuery );/* ============================================================
- * bootstrap-button.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- /* BUTTON PUBLIC CLASS DEFINITION
- * ============================== */
-
- var Button = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.button.defaults, options)
- }
-
- Button.prototype = {
-
- constructor: Button
-
- , setState: function ( state ) {
- var d = 'disabled'
- , $el = this.$element
- , data = $el.data()
- , val = $el.is('input') ? 'val' : 'html'
-
- state = state + 'Text'
- data.resetText || $el.data('resetText', $el[val]())
-
- $el[val](data[state] || this.options[state])
-
- // push to event loop to allow forms to submit
- setTimeout(function () {
- state == 'loadingText' ?
- $el.addClass(d).attr(d, d) :
- $el.removeClass(d).removeAttr(d)
- }, 0)
- }
+ $parent.trigger(e = $.Event('close.bs.alert'))
- , toggle: function () {
- var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+ if (e.isDefaultPrevented()) return
- $parent && $parent
- .find('.active')
- .removeClass('active')
+ $parent.removeClass('in')
- this.$element.toggleClass('active')
- }
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
}
- /* BUTTON PLUGIN DEFINITION
- * ======================== */
+ // ALERT PLUGIN DEFINITION
+ // =======================
- $.fn.button = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
- , data = $this.data('button')
- , options = typeof option == 'object' && option
- if (!data) $this.data('button', (data = new Button(this, options)))
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
+ var data = $this.data('bs.alert')
- $.fn.button.defaults = {
- loadingText: 'loading...'
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
}
- $.fn.button.Constructor = Button
-
+ var old = $.fn.alert
- /* BUTTON DATA-API
- * =============== */
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
- $(function () {
- $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- $btn.button('toggle')
- })
- })
-}( window.jQuery );/* ==========================================================
- * bootstrap-carousel.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* CAROUSEL CLASS DEFINITION
- * ========================= */
+ // ALERT NO CONFLICT
+ // =================
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.carousel.defaults, options)
- this.options.slide && this.slide(this.options.slide)
- this.options.pause == 'hover' && this.$element
- .on('mouseenter', $.proxy(this.pause, this))
- .on('mouseleave', $.proxy(this.cycle, this))
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
}
- Carousel.prototype = {
- cycle: function () {
- this.interval = setInterval($.proxy(this.next, this), this.options.interval)
- return this
- }
+ // ALERT DATA-API
+ // ==============
- , to: function (pos) {
- var $active = this.$element.find('.active')
- , children = $active.parent().children()
- , activePos = children.index($active)
- , that = this
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
- if (pos > (children.length - 1) || pos < 0) return
+}(jQuery);
- if (this.sliding) {
- return this.$element.one('slid', function () {
- that.to(pos)
- })
- }
+/* ========================================================================
+ * Bootstrap: button.js v3.3.5
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- if (activePos == pos) {
- return this.pause().cycle()
- }
- return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
- }
++function ($) {
+ 'use strict';
- , pause: function () {
- clearInterval(this.interval)
- this.interval = null
- return this
- }
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
- , next: function () {
- if (this.sliding) return
- return this.slide('next')
- }
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
- , prev: function () {
- if (this.sliding) return
- return this.slide('prev')
- }
+ Button.VERSION = '3.3.5'
- , slide: function (type, next) {
- var $active = this.$element.find('.active')
- , $next = next || $active[type]()
- , isCycling = this.interval
- , direction = type == 'next' ? 'left' : 'right'
- , fallback = type == 'next' ? 'first' : 'last'
- , that = this
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
- this.sliding = true
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
- isCycling && this.pause()
+ state += 'Text'
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+ if (data.resetText == null) $el.data('resetText', $el[val]())
- if ($next.hasClass('active')) return
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
- if (!$.support.transition && this.$element.hasClass('slide')) {
- this.$element.trigger('slide')
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger('slid')
- } else {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- this.$element.trigger('slide')
- this.$element.one($.support.transition.end, function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () { that.$element.trigger('slid') }, 0)
- })
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
}
+ }, this), 0)
+ }
- isCycling && this.cycle()
-
- return this
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
}
-
}
- /* CAROUSEL PLUGIN DEFINITION
- * ========================== */
+ // BUTTON PLUGIN DEFINITION
+ // ========================
- $.fn.carousel = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- , data = $this.data('carousel')
- , options = typeof option == 'object' && option
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (typeof option == 'string' || (option = options.slide)) data[option]()
- else data.cycle()
- })
- }
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
- $.fn.carousel.defaults = {
- interval: 5000
- , pause: 'hover'
- }
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
- $.fn.carousel.Constructor = Carousel
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+ var old = $.fn.button
- /* CAROUSEL DATA-API
- * ================= */
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
- $(function () {
- $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
- $target.carousel(options)
- e.preventDefault()
- })
- })
-}( window.jQuery );/* =============================================================
- * bootstrap-collapse.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- var Collapse = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.collapse.defaults, options)
-
- if (this.options["parent"]) {
- this.$parent = $(this.options["parent"])
- }
+ // BUTTON NO CONFLICT
+ // ==================
- this.options.toggle && this.toggle()
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
}
- Collapse.prototype = {
- constructor: Collapse
+ // BUTTON DATA-API
+ // ===============
- , dimension: function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
- , show: function () {
- var dimension = this.dimension()
- , scroll = $.camelCase(['scroll', dimension].join('-'))
- , actives = this.$parent && this.$parent.find('.in')
- , hasData
+}(jQuery);
- if (actives && actives.length) {
- hasData = actives.data('collapse')
- actives.collapse('hide')
- hasData || actives.data('collapse', null)
- }
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.5
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- this.$element[dimension](0)
- this.transition('addClass', 'show', 'shown')
- this.$element[dimension](this.$element[0][scroll])
- }
++function ($) {
+ 'use strict';
- , hide: function () {
- var dimension = this.dimension()
- this.reset(this.$element[dimension]())
- this.transition('removeClass', 'hide', 'hidden')
- this.$element[dimension](0)
- }
+ // CAROUSEL CLASS DEFINITION
+ // =========================
- , reset: function ( size ) {
- var dimension = this.dimension()
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
- this.$element
- .removeClass('collapse')
- [dimension](size || 'auto')
- [0].offsetWidth
+ Carousel.VERSION = '3.3.5'
- this.$element[size ? 'addClass' : 'removeClass']('collapse')
+ Carousel.TRANSITION_DURATION = 600
- return this
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
}
- , transition: function ( method, startEvent, completeEvent ) {
- var that = this
- , complete = function () {
- if (startEvent == 'show') that.reset()
- that.$element.trigger(completeEvent)
- }
+ e.preventDefault()
+ }
- this.$element
- .trigger(startEvent)
- [method]('in')
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
- $.support.transition && this.$element.hasClass('collapse') ?
- this.$element.one($.support.transition.end, complete) :
- complete()
- }
+ this.interval && clearInterval(this.interval)
- , toggle: function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+ return this
}
- /* COLLAPSIBLE PLUGIN DEFINITION
- * ============================== */
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
- $.fn.collapse = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('collapse')
- , options = typeof option == 'object' && option
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
}
- $.fn.collapse.defaults = {
- toggle: true
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
}
- $.fn.collapse.Constructor = Collapse
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
- /* COLLAPSIBLE DATA-API
- * ==================== */
+ this.interval = clearInterval(this.interval)
- $(function () {
- $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
- var $this = $(this), href
- , target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
- $(target).collapse(option)
- })
- })
+ return this
+ }
-}( window.jQuery );/* ============================================================
- * bootstrap-dropdown.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function( $ ){
-
- "use strict"
-
- /* DROPDOWN CLASS DEFINITION
- * ========================= */
-
- var toggle = '[data-toggle="dropdown"]'
- , Dropdown = function ( element ) {
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
- $('html').on('click.dropdown.data-api', function () {
- $el.parent().removeClass('open')
- })
- }
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
- Dropdown.prototype = {
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
- constructor: Dropdown
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
- , toggle: function ( e ) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
- , isActive
+ if ($next.hasClass('active')) return (this.sliding = false)
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
- $parent = $(selector)
- $parent.length || ($parent = $this.parent())
+ this.sliding = true
- isActive = $parent.hasClass('open')
+ isCycling && this.pause()
- clearMenus()
- !isActive && $parent.toggleClass('open')
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
- return false
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
}
- }
+ isCycling && this.cycle()
- function clearMenus() {
- $(toggle).parent().removeClass('open')
+ return this
}
- /* DROPDOWN PLUGIN DEFINITION
- * ========================== */
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
- $.fn.dropdown = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- , data = $this.data('dropdown')
- if (!data) $this.data('dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
})
}
- $.fn.dropdown.Constructor = Dropdown
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
- * =================================== */
+ // CAROUSEL NO CONFLICT
+ // ====================
- $(function () {
- $('html').on('click.dropdown.data-api', clearMenus)
- $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- })
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
-}( window.jQuery );/* =========================================================
- * bootstrap-modal.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
+ // CAROUSEL DATA-API
+ // =================
-!function( $ ){
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
- "use strict"
+ Plugin.call($target, options)
- /* MODAL CLASS DEFINITION
- * ====================== */
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
- var Modal = function ( content, options ) {
- this.options = options
- this.$element = $(content)
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+ e.preventDefault()
}
- Modal.prototype = {
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
- constructor: Modal
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
- , toggle: function () {
- return this[!this.isShown ? 'show' : 'hide']()
- }
+}(jQuery);
- , show: function () {
- var that = this
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.5
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- if (this.isShown) return
- $('body').addClass('modal-open')
++function ($) {
+ 'use strict';
- this.isShown = true
- this.$element.trigger('show')
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
- escape.call(this)
- backdrop.call(this, function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
- !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
- that.$element
- .show()
+ if (this.options.toggle) this.toggle()
+ }
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
+ Collapse.VERSION = '3.3.5'
- that.$element.addClass('in')
+ Collapse.TRANSITION_DURATION = 350
- transition ?
- that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
- that.$element.trigger('shown')
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
- })
- }
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
- , hide: function ( e ) {
- e && e.preventDefault()
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
- if (!this.isShown) return
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
- var that = this
- this.isShown = false
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
- $('body').removeClass('modal-open')
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
- escape.call(this)
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
- this.$element
- .trigger('hide')
- .removeClass('in')
+ var dimension = this.dimension()
- $.support.transition && this.$element.hasClass('fade') ?
- hideWithTransition.call(this) :
- hideModal.call(this)
- }
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
- }
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+ this.transitioning = 1
- /* MODAL PRIVATE METHODS
- * ===================== */
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
- function hideWithTransition() {
- var that = this
- , timeout = setTimeout(function () {
- that.$element.off($.support.transition.end)
- hideModal.call(that)
- }, 500)
-
- this.$element.one($.support.transition.end, function () {
- clearTimeout(timeout)
- hideModal.call(that)
- })
- }
+ if (!$.support.transition) return complete.call(this)
- function hideModal( that ) {
- this.$element
- .hide()
- .trigger('hidden')
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
- backdrop.call(this)
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
}
- function backdrop( callback ) {
- var that = this
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
- this.$backdrop = $('
')
- .appendTo(document.body)
+ var dimension = this.dimension()
- if (this.options.backdrop != 'static') {
- this.$backdrop.click($.proxy(this.hide, this))
- }
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
- this.$backdrop.addClass('in')
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
- doAnimate ?
- this.$backdrop.one($.support.transition.end, callback) :
- callback()
+ this.transitioning = 1
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
- $.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
- removeBackdrop.call(this)
+ if (!$.support.transition) return complete.call(this)
- } else if (callback) {
- callback()
- }
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
}
- function removeBackdrop() {
- this.$backdrop.remove()
- this.$backdrop = null
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
- function escape() {
- var that = this
- if (this.isShown && this.options.keyboard) {
- $(document).on('keyup.dismiss.modal', function ( e ) {
- e.which == 27 && that.hide()
- })
- } else if (!this.isShown) {
- $(document).off('keyup.dismiss.modal')
- }
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
}
- /* MODAL PLUGIN DEFINITION
- * ======================= */
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
- $.fn.modal = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- , data = $this.data('modal')
- , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
- if (!data) $this.data('modal', (data = new Modal(this, options)))
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
- else if (options.show) data.show()
})
}
- $.fn.modal.defaults = {
- backdrop: true
- , keyboard: true
- , show: true
- }
+ var old = $.fn.collapse
- $.fn.modal.Constructor = Modal
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
- /* MODAL DATA-API
- * ============== */
+ // COLLAPSE NO CONFLICT
+ // ====================
- $(function () {
- $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
- e.preventDefault()
- $target.modal(option)
- })
- })
-}( window.jQuery );/* ===========================================================
- * bootstrap-tooltip.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-!function( $ ) {
-
- "use strict"
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
- * =============================== */
-
- var Tooltip = function ( element, options ) {
- this.init('tooltip', element, options)
- }
+ // COLLAPSE DATA-API
+ // =================
- Tooltip.prototype = {
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
- constructor: Tooltip
+ if (!$this.attr('data-target')) e.preventDefault()
- , init: function ( type, element, options ) {
- var eventIn
- , eventOut
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.enabled = true
+ Plugin.call($target, option)
+ })
- if (this.options.trigger != 'manual') {
- eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
- eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
- this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
- }
+}(jQuery);
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.5
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- , getOptions: function ( options ) {
- options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay
- , hide: options.delay
- }
- }
++function ($) {
+ 'use strict';
- return options
- }
+ // DROPDOWN CLASS DEFINITION
+ // =========================
- , enter: function ( e ) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
- if (!self.options.delay || !self.options.delay.show) {
- self.show()
- } else {
- self.hoverState = 'in'
- setTimeout(function() {
- if (self.hoverState == 'in') {
- self.show()
- }
- }, self.options.delay.show)
- }
- }
+ Dropdown.VERSION = '3.3.5'
- , leave: function ( e ) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+ function getParent($this) {
+ var selector = $this.attr('data-target')
- if (!self.options.delay || !self.options.delay.hide) {
- self.hide()
- } else {
- self.hoverState = 'out'
- setTimeout(function() {
- if (self.hoverState == 'out') {
- self.hide()
- }
- }, self.options.delay.hide)
- }
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
- , show: function () {
- var $tip
- , inside
- , pos
- , actualWidth
- , actualHeight
- , placement
- , tp
-
- if (this.hasContent() && this.enabled) {
- $tip = this.tip()
- this.setContent()
-
- if (this.options.animation) {
- $tip.addClass('fade')
- }
+ var $parent = selector && $(selector)
- placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
- inside = /in/.test(placement)
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
- $tip
- .remove()
- .css({ top: 0, left: 0, display: 'block' })
- .appendTo(inside ? this.$element : document.body)
-
- pos = this.getPosition(inside)
-
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
-
- switch (inside ? placement.split(' ')[1] : placement) {
- case 'bottom':
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'top':
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'left':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
- break
- case 'right':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
- break
- }
+ if (!$parent.hasClass('open')) return
- $tip
- .css(tp)
- .addClass(placement)
- .addClass('in')
- }
- }
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
- , setContent: function () {
- var $tip = this.tip()
- $tip.find('.tooltip-inner').html(this.getTitle())
- $tip.removeClass('fade in top bottom left right')
- }
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
- , hide: function () {
- var that = this
- , $tip = this.tip()
+ if (e.isDefaultPrevented()) return
- $tip.removeClass('in')
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
- function removeWithAnimation() {
- var timeout = setTimeout(function () {
- $tip.off($.support.transition.end).remove()
- }, 500)
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
- $tip.one($.support.transition.end, function () {
- clearTimeout(timeout)
- $tip.remove()
- })
- }
+ if ($this.is('.disabled, :disabled')) return
- $.support.transition && this.$tip.hasClass('fade') ?
- removeWithAnimation() :
- $tip.remove()
- }
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
- , fixTitle: function () {
- var $e = this.$element
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
}
- }
- , hasContent: function () {
- return this.getTitle()
- }
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
- , getPosition: function (inside) {
- return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
- width: this.$element[0].offsetWidth
- , height: this.$element[0].offsetHeight
- })
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
}
- , getTitle: function () {
- var title
- , $e = this.$element
- , o = this.options
+ return false
+ }
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
- title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
+ var $this = $(this)
- return title
- }
+ e.preventDefault()
+ e.stopPropagation()
- , tip: function () {
- return this.$tip = this.$tip || $(this.options.template)
- }
+ if ($this.is('.disabled, :disabled')) return
- , validate: function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
- , enable: function () {
- this.enabled = true
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
}
- , disable: function () {
- this.enabled = false
- }
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
- , toggleEnabled: function () {
- this.enabled = !this.enabled
- }
+ if (!$items.length) return
- , toggle: function () {
- this[this.tip().hasClass('in') ? 'hide' : 'show']()
- }
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+ $items.eq(index).trigger('focus')
}
- /* TOOLTIP PLUGIN DEFINITION
- * ========================= */
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
- $.fn.tooltip = function ( option ) {
+ function Plugin(option) {
return this.each(function () {
var $this = $(this)
- , data = $this.data('tooltip')
- , options = typeof option == 'object' && option
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
}
- $.fn.tooltip.Constructor = Tooltip
+ var old = $.fn.dropdown
- $.fn.tooltip.defaults = {
- animation: true
- , delay: 0
- , selector: false
- , placement: 'top'
- , trigger: 'hover'
- , title: ''
- , template: ''
- }
-
-}( window.jQuery );/* ===========================================================
- * bootstrap-popover.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
-
-
-!function( $ ) {
-
- "use strict"
-
- var Popover = function ( element, options ) {
- this.init('popover', element, options)
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
}
- /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
- ========================================== */
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
- constructor: Popover
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
- , content = this.getContent()
+}(jQuery);
- $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
- $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.5
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
- $tip.removeClass('fade top bottom left right in')
- }
- , hasContent: function () {
- return this.getTitle() || this.getContent()
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
}
+ }
- , getContent: function () {
- var content
- , $e = this.$element
- , o = this.options
+ Modal.VERSION = '3.3.5'
- content = $e.attr('data-content')
- || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
- content = content.toString().replace(/(^\s*|\s*$)/, "")
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
- return content
- }
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
- , tip: function() {
- if (!this.$tip) {
- this.$tip = $(this.options.template)
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
}
- return this.$tip
- }
- })
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
- /* POPOVER PLUGIN DEFINITION
- * ======================= */
+ that.$element.addClass('in')
- $.fn.popover = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('popover')
- , options = typeof option == 'object' && option
- if (!data) $this.data('popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
})
}
- $.fn.popover.Constructor = Popover
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
- placement: 'right'
- , content: ''
- , template: ''
- })
+ e = $.Event('hide.bs.modal')
-}( window.jQuery );/* =============================================================
- * bootstrap-scrollspy.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
-
-!function ( $ ) {
-
- "use strict"
-
- /* SCROLLSPY CLASS DEFINITION
- * ========================== */
-
- function ScrollSpy( element, options) {
- var process = $.proxy(this.process, this)
- , $element = $(element).is('body') ? $(window) : $(element)
- , href
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
- this.$scrollElement = $element.on('scroll.scroll.data-api', process)
- this.selector = (this.options.target
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- || '') + ' .nav li > a'
- this.$body = $('body').on('click.scroll.data-api', this.selector, process)
- this.refresh()
- this.process()
- }
+ this.$element.trigger(e)
- ScrollSpy.prototype = {
+ if (!this.isShown || e.isDefaultPrevented()) return
- constructor: ScrollSpy
+ this.isShown = false
- , refresh: function () {
- this.targets = this.$body
- .find(this.selector)
- .map(function () {
- var href = $(this).attr('href')
- return /^#\w/.test(href) && $(href).length ? href : null
- })
+ this.escape()
+ this.resize()
- this.offsets = $.map(this.targets, function (id) {
- return $(id).position().top
- })
- }
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
- , process: function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- , offsets = this.offsets
- , targets = this.targets
- , activeTarget = this.activeTarget
- , i
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate( targets[i] )
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
}
- }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
- , activate: function (target) {
- var active
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
- this.activeTarget = target
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
- this.$body
- .find(this.selector).parent('.active')
- .removeClass('active')
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
- active = this.$body
- .find(this.selector + '[href="' + target + '"]')
- .parent('li')
- .addClass('active')
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
- if ( active.parent('.dropdown-menu') ) {
- active.closest('li.dropdown').addClass('active')
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
}
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
}
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
}
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
- /* SCROLLSPY PLUGIN DEFINITION
- * =========================== */
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
- $.fn.scrollspy = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('scrollspy')
- , options = typeof option == 'object' && option
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
})
}
- $.fn.scrollspy.Constructor = ScrollSpy
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
- $.fn.scrollspy.defaults = {
- offset: 10
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
}
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
- /* SCROLLSPY DATA-API
- * ================== */
- $(function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- $spy.scrollspy($spy.data())
- })
- })
+ // MODAL PLUGIN DEFINITION
+ // =======================
-}( window.jQuery );/* ========================================================
- * bootstrap-tab.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
-
-
-!function( $ ){
-
- "use strict"
-
- /* TAB CLASS DEFINITION
- * ==================== */
-
- var Tab = function ( element ) {
- this.element = $(element)
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
}
- Tab.prototype = {
+ var old = $.fn.modal
- constructor: Tab
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
- , show: function () {
- var $this = this.element
- , $ul = $this.closest('ul:not(.dropdown-menu)')
- , selector = $this.attr('data-target')
- , previous
- , $target
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
+ // MODAL NO CONFLICT
+ // =================
- if ( $this.parent('li').hasClass('active') ) return
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
- previous = $ul.find('.active a').last()[0]
- $this.trigger({
- type: 'show'
- , relatedTarget: previous
- })
+ // MODAL DATA-API
+ // ==============
- $target = $(selector)
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
- this.activate($this.parent('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $this.trigger({
- type: 'shown'
- , relatedTarget: previous
- })
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
})
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.5
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.5'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
}
+ }
- , activate: function ( element, container, callback) {
- var $active = container.find('> .active')
- , transition = callback
- && $.support.transition
- && $active.hasClass('fade')
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
- element.addClass('active')
+ var triggers = this.options.trigger.split(' ')
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
- if ( element.parent('.dropdown-menu') ) {
- element.closest('li.dropdown').addClass('active')
- }
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
- callback && callback()
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
}
+ }
- transition ?
- $active.one($.support.transition.end, next) :
- next()
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
- $active.removeClass('in')
- }
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
}
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
- /* TAB PLUGIN DEFINITION
- * ===================== */
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
- $.fn.tab = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tab')
- if (!data) $this.data('tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
})
+
+ return options
}
- $.fn.tab.Constructor = Tab
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
- /* TAB DATA-API
- * ============ */
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
- $(function () {
- $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
- e.preventDefault()
- $(this).tab('show')
- })
- })
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
-}( window.jQuery );/* =============================================================
- * bootstrap-typeahead.js v2.0.2
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-!function( $ ){
-
- "use strict"
-
- var Typeahead = function ( element, options ) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
- this.matcher = this.options.matcher || this.matcher
- this.sorter = this.options.sorter || this.sorter
- this.highlighter = this.options.highlighter || this.highlighter
- this.$menu = $(this.options.menu).appendTo('body')
- this.source = this.options.source
- this.shown = false
- this.listen()
- }
-
- Typeahead.prototype = {
-
- constructor: Typeahead
-
- , select: function () {
- var val = this.$menu.find('.active').attr('data-value')
- this.$element.val(val)
- this.$element.change();
- return this.hide()
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
}
- , show: function () {
- var pos = $.extend({}, this.$element.offset(), {
- height: this.$element[0].offsetHeight
- })
+ return false
+ }
- this.$menu.css({
- top: pos.top + pos.height
- , left: pos.left
- })
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
- this.$menu.show()
- this.shown = true
- return this
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
}
- , hide: function () {
- this.$menu.hide()
- this.shown = false
- return this
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
}
- , lookup: function (event) {
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
var that = this
- , items
- , q
- this.query = this.$element.val()
+ var $tip = this.tip()
- if (!this.query) {
- return this.shown ? this.hide() : this
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
}
- items = $.grep(this.source, function (item) {
- if (that.matcher(item)) return item
- })
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
- items = this.sorter(items)
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
- if (!items.length) {
- return this.shown ? this.hide() : this
+ if (prevHoverState == 'out') that.leave(that)
}
- return this.render(items.slice(0, this.options.items)).show()
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
}
+ }
- , matcher: function (item) {
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
- }
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
- , sorter: function (items) {
- var beginswith = []
- , caseSensitive = []
- , caseInsensitive = []
- , item
+ $tip.addClass('in')
- while (item = items.shift()) {
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
- else caseInsensitive.push(item)
- }
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
- return beginswith.concat(caseSensitive, caseInsensitive)
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
}
- , highlighter: function (item) {
- return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
- return '' + match + ' '
- })
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ callback && callback()
}
- , render: function (items) {
- var that = this
+ this.$element.trigger(e)
- items = $(items).map(function (i, item) {
- i = $(that.options.item).attr('data-value', item)
- i.find('a').html(that.highlighter(item))
- return i[0]
- })
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
- items.first().addClass('active')
- this.$menu.html(items)
- return this
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
}
+ }
- , next: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , next = active.next()
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
- if (!next.length) {
- next = $(this.$menu.find('li')[0])
- }
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
- next.addClass('active')
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
}
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
- , prev: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , prev = active.prev()
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
- if (!prev.length) {
- prev = this.$menu.find('li').last()
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
}
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
- prev.addClass('active')
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
}
+ return this.$tip
+ }
- , listen: function () {
- this.$element
- .on('blur', $.proxy(this.blur, this))
- .on('keypress', $.proxy(this.keypress, this))
- .on('keyup', $.proxy(this.keyup, this))
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
- if ($.browser.webkit || $.browser.msie) {
- this.$element.on('keydown', $.proxy(this.keypress, this))
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
}
+ }
- this.$menu
- .on('click', $.proxy(this.click, this))
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
}
+ }
- , keyup: function (e) {
- switch(e.keyCode) {
- case 40: // down arrow
- case 38: // up arrow
- break
-
- case 9: // tab
- case 13: // enter
- if (!this.shown) return
- this.select()
- break
-
- case 27: // escape
- if (!this.shown) return
- this.hide()
- break
-
- default:
- this.lookup()
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
}
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
- e.stopPropagation()
- e.preventDefault()
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
}
- , keypress: function (e) {
- if (!this.shown) return
+ var old = $.fn.tooltip
- switch(e.keyCode) {
- case 9: // tab
- case 13: // enter
- case 27: // escape
- e.preventDefault()
- break
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
- case 38: // up arrow
- e.preventDefault()
- this.prev()
- break
- case 40: // down arrow
- e.preventDefault()
- this.next()
- break
- }
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.5
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
- e.stopPropagation()
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.5'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: ''
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.5
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.5'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
}
- , blur: function (e) {
- var that = this
- setTimeout(function () { that.hide() }, 150)
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
}
- , click: function (e) {
- e.stopPropagation()
- e.preventDefault()
- this.select()
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
}
- , mouseenter: function (e) {
- this.$menu.find('.active').removeClass('active')
- $(e.currentTarget).addClass('active')
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
}
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
}
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
- /* TYPEAHEAD PLUGIN DEFINITION
- * =========================== */
- $.fn.typeahead = function ( option ) {
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
return this.each(function () {
- var $this = $(this)
- , data = $this.data('typeahead')
- , options = typeof option == 'object' && option
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
- $.fn.typeahead.defaults = {
- source: []
- , items: 8
- , menu: ''
- , item: ' '
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
}
- $.fn.typeahead.Constructor = Typeahead
+ // SCROLLSPY DATA-API
+ // ==================
- /* TYPEAHEAD DATA-API
- * ================== */
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
- $(function () {
- $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.5
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.5'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
var $this = $(this)
- if ($this.data('typeahead')) return
- e.preventDefault()
- $this.typeahead($this.data())
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.5
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.5'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
})
})
-}( window.jQuery );
\ No newline at end of file
+}(jQuery);
diff --git a/app/assets/javascripts/constants.js.erb b/app/assets/javascripts/constants.js.erb
new file mode 100644
index 000000000..b9735d31d
--- /dev/null
+++ b/app/assets/javascripts/constants.js.erb
@@ -0,0 +1,9 @@
+this.constants = {
+ abandonConfirmText: 'Are you sure you want to abandon this <%= I18n.t("defaults.thing") %>?',
+ iconBase: '<%= image_path 'markers/' %>',
+ adoptedMarkerImage: '<%= image_path 'markers/adopted.png' %>',
+ adoptedByYouImage: '<%= image_path 'markers/adoptedbyyou.png' %>',
+ toSewerMarkerImage: '<%= image_path 'markers/tosewer.png' %>',
+ toBayOceanMarkerImage: '<%= image_path 'markers/tobay.png' %>',
+ markerShadowImage: '<%= image_path 'markers/shadow.png' %>'
+}
diff --git a/app/assets/javascripts/main.js.erb b/app/assets/javascripts/main.js.erb
index fdfe7a599..924cd0260 100644
--- a/app/assets/javascripts/main.js.erb
+++ b/app/assets/javascripts/main.js.erb
@@ -1,50 +1,218 @@
+// require constants
+
+var constants = window.constants
+
$(function() {
- var center = new google.maps.LatLng(42.358431, -71.059773);
+ var initialLocation;
+ var center = new google.maps.LatLng(37.774929, -122.419416);
+ var browserSupportFlag = new Boolean();
+ var errorClass = 'has-error';
+ var current_user_id = $('#current_user_id').val() ? $('#current_user_id').val() : '';
var mapOptions = {
center: center,
- disableDoubleClickZoom: true,
+ disableDoubleClickZoom: false,
keyboardShortcuts: false,
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP,
- maxZoom: 19,
+ maxZoom: 21,
minZoom: 15,
panControl: false,
rotateControl: false,
scaleControl: false,
- scrollwheel: false,
streetViewControl: true,
- zoom: 15,
- zoomControl: true
+ zoom: 17,
+ zoomControl: true,
+ styles: [
+ {
+ "featureType": "poi.business",
+ "stylers": [
+ {
+ "visibility": "off"
+ },
+ ],
+ },
+ {
+ "featureType": "poi.park",
+ "elementType": "labels.text",
+ "stylers": [
+ {
+ "visibility": "off"
+ },
+ ],
+ },
+ {
+ "featureType": "landscape",
+ "stylers": [
+ {"hue": "#FFBB00"},
+ {"saturation": 43.400000000000006},
+ {"lightness": 37.599999999999994},
+ {"gamma": 1}
+ ]
+ },
+ {
+ "featureType": "road.highway",
+ "stylers": [
+ {"hue": "#FFC200"},
+ {"saturation": -61.8},
+ {"lightness": 45.599999999999994},
+ {"gamma": 1}
+ ]
+ },
+ {
+ "featureType": "road.arterial",
+ "stylers": [
+ {"hue": "#FF0300"},
+ {"saturation": -100},
+ {"lightness": 51.19999999999999},
+ {"gamma": 1}
+ ]
+ },
+ {
+ "featureType": "road.local",
+ "stylers": [
+ {"hue": "#FF0300"},
+ {"saturation": -100},
+ {"lightness": 52},
+ {"gamma": 1}
+ ]
+ },
+ {
+ "featureType": "water",
+ "stylers": [
+ {"hue": "#0078FF"},
+ {"saturation": -13.200000000000003},
+ {"lightness": 2.4000000000000057},
+ {"gamma": 1}
+ ]
+ },
+ {
+ "featureType": "poi",
+ "stylers": [
+ {"hue": "#00FF6A"},
+ {"saturation": -1.0989010989011234},
+ {"lightness": 11.200000000000017},
+ {"gamma": 1}
+ ]
+ }
+ ]
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
- var size = new google.maps.Size(27.0, 37.0);
+ /*
+ // Try W3C Geolocation (Preferred)
+ if(navigator.geolocation) {
+ browserSupportFlag = true;
+ navigator.geolocation.getCurrentPosition(function(position) {
+ initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
+ map.setCenter(initialLocation);
+ map.setZoom(18);
+ }, function() {
+ handleNoGeolocation(browserSupportFlag);
+ });
+ }
+ // Browser doesn't support Geolocation
+ else {
+ browserSupportFlag = false;
+ handleNoGeolocation(browserSupportFlag);
+ }
+
+ function handleNoGeolocation(errorFlag) {
+ map.setCenter(center);
+ }
+ */
+ var iconBase = constants.iconBase;
+ var size = new google.maps.Size(27.0, 38.0);
var origin = new google.maps.Point(0, 0);
var anchor = new google.maps.Point(13.0, 18.0);
- var greenMarkerImage = new google.maps.MarkerImage('<%= image_path 'markers/green.png' %>',
+ var adoptedMarker = new google.maps.MarkerImage(constants.adoptedMarkerImage,
size,
origin,
anchor
);
- var redMarkerImage = new google.maps.MarkerImage('<%= image_path 'markers/red.png' %>',
+ var adoptedByYouMarker = new google.maps.MarkerImage(constants.adoptedByYouImage,
size,
origin,
anchor
);
- var markerShadowImage = new google.maps.MarkerImage('<%= image_path 'markers/shadow.png' %>',
+ var toSewerMarker = new google.maps.MarkerImage(constants.toSewerMarkerImage,
+ size,
+ origin,
+ anchor
+ );
+ var toBayOceanMarker = new google.maps.MarkerImage(constants.toBayOceanMarkerImage,
+ size,
+ origin,
+ anchor
+ );
+ var markerShadowImage = new google.maps.MarkerImage(constants.markerShadowImage,
new google.maps.Size(46.0, 37.0),
origin,
anchor
);
+
+ var legend = document.getElementById('legend');
+
+ var legendItems = document.createElement('div');
+ legendItems.className = "legend-items";
+
+ var icons = {
+ available: {
+ name: 'Drains to Sewer',
+ title: 'Sewer',
+ icon: constants.toSewerMarkerImage
+ },
+ availableBay: {
+ name: 'Drains to Ocean/Bay',
+ title: 'Sewer to ocean/bay',
+ icon: constants.toBayOceanMarkerImage
+ },
+ adopted: {
+ name: 'Adopted',
+ title: 'Adopted by other',
+ icon: constants.adoptedMarkerImage
+ },
+ adopted_by_you: {
+ name: 'Adopted by you',
+ title: 'Adopted by you',
+ icon: constants.adoptedByYouImage
+ }
+ };
+
+ for (var key in icons) {
+ var type = icons[key];
+ var name = type.name;
+ var icon = type.icon;
+ var title = type.title;
+ var div = document.createElement('div');
+ div.innerHTML = ' ' + name;
+ legendItems.appendChild(div);
+ }
+
+ legend.appendChild(legendItems);
+
+ map.controls[google.maps.ControlPosition.BOTTOM_CENTER].push(legend);
+
+ $('#toggleLegend').click(function(){
+ $('#legend .legend-items').slideToggle(function(){
+ var text = $('#legend .show-hide a').html().trim();
+ $('#legend .show-hide a').html( text == 'Hide' ? 'Show' : 'Hide');
+ });
+ });
+
var activeThingId;
var activeMarker;
var activeInfoWindow;
var isWindowOpen = false;
var thingIds = [];
- function addMarker(thingId, point, color) {
- if(color === 'green') {
- var image = greenMarkerImage;
- } else if(color === 'red') {
- var image = redMarkerImage;
+ var adoptedThings = [];
+ function addMarker(thingId, point, type, user_id) {
+ if(type === 'adopted') {
+ var image = adoptedMarker;
+ } else if(type === 'adoptedbyyou') {
+ var image = adoptedByYouMarker;
+ } else if(type === 'tosewer') {
+ var image = toSewerMarker;
+ } else if(type === 'tobayocean') {
+ var image = toBayOceanMarker;
}
var marker = new google.maps.Marker({
animation: google.maps.Animation.DROP,
@@ -54,6 +222,7 @@ $(function() {
shadow: markerShadowImage
});
google.maps.event.addListener(marker, 'click', function() {
+ console.log(marker);
if(activeInfoWindow) {
activeInfoWindow.close();
}
@@ -83,8 +252,12 @@ $(function() {
});
});
thingIds.push(thingId);
+ if (type === 'adopted' || type === 'adoptedbyyou') {
+ adoptedThings.push([user_id, marker]);
+ }
}
function addMarkersAround(lat, lng) {
+ var current_user_id = $('#current_user_id').val() ? $('#current_user_id').val() : '';
var submitButton = $("#address_form input[type='submit']");
$.ajax({
type: 'GET',
@@ -101,10 +274,10 @@ $(function() {
success: function(data) {
$(submitButton).attr("disabled", false);
if(data.errors) {
- $('#address').parent().addClass('error');
+ $('#address').parent().addClass(errorClass);
$('#address').focus();
} else {
- $('#address').parent().removeClass('error');
+ $('#address').parent().removeClass(errorClass);
var i = -1;
$(data).each(function(index, thing) {
if($.inArray(thing.id, thingIds) === -1) {
@@ -115,28 +288,109 @@ $(function() {
}
setTimeout(function() {
var point = new google.maps.LatLng(thing.lat, thing.lng);
+ var type = 'tosewer'
+ if(thing.system_use_code == 'MS4') {
+ type = 'tobayocean';
+ }
if(thing.user_id) {
- var color = 'green';
- } else {
- var color = 'red';
+ type = 'adopted';
+ }
+ if(thing.user_id == current_user_id){
+ type = 'adoptedbyyou'
}
- addMarker(thing.id, point, color);
+ addMarker(thing.id, point, type, thing.user_id);
}, i * 100);
});
}
}
});
}
+ function flipMarkers() {
+ for (var key in adoptedThings) {
+ if(adoptedThings[key][0] == current_user_id) {
+ adoptedThings[key][1].setIcon(adoptedByYouMarker);
+ } else {
+ adoptedThings[key][1].setIcon(adoptedMarker);
+ }
+ }
+ }
+ function showFlash(type, message) {
+ $('#content').prepend(
+ $('
').addClass('alert fade in alert-' + type).data('alert', '').append(
+ $(' ').addClass('close').attr('data-dismiss', 'alert').text('×')).append(
+ $('
').text(message)
+ ));
+ }
+ function zoomTo(lat, lng, zoomLevel) {
+ if (typeof zoomLevel === 'undefined') { zoomLevel = 18; }
+ addMarkersAround(lat, lng);
+ map.setCenter(new google.maps.LatLng(lat, lng));
+ map.setZoom(zoomLevel);
+ }
google.maps.event.addListener(map, 'idle', function() {
var center = map.getCenter();
addMarkersAround(center.lat(), center.lng());
});
- $('#address_form').live('submit', function() {
+
+ $('body').on('submit', '#password_edit_form', function() {
+ var submitButton = $("#password_edit_form input[type='submit']");
+ $(submitButton).attr("disabled", true);
+ if($('#user_password').val() === '') {
+ $(submitButton).attr("disabled", false);
+ $('#user_password').parent().addClass(errorClass);
+ $('#user_password').next(".help-block").html('You must enter a value');
+ $('#user_password').focus();
+ } else {
+ $.ajax({
+ type: 'PUT',
+ url: '/users/password.json',
+ data: {
+ 'utf8': '✓',
+ 'authenticity_token': $('#password_edit_form input[name="authenticity_token"]').val(),
+ 'user': {
+ 'reset_password_token': $('#user_reset_password_token').val(),
+ 'password': $('#user_password').val()
+ }
+ },
+ error: function(jqXHR) {
+ var response = $.parseJSON(jqXHR.responseText);
+ $(submitButton).attr("disabled", false);
+ if(response.errors.user_password) {
+ $('#user_password').parent().addClass(errorClass);
+ $('#user_password').next(".help-block").html(response.errors.user_password);
+ $('#user_password').focus();
+ }
+ if(response.errors.reset_password_token) {
+ $('#user_reset_password_token').parent().addClass(errorClass);
+ $('#user_reset_password_token').next(".help-block").html('Password reset link ' + response.errors.reset_password_token);
+ $('#user_reset_password_token').focus();
+ }
+ },
+ success: function(data) {
+ $('.container-fluid').addClass('signed-in');
+ $('.sidebar').removeClass('sidebar-full');
+ $.ajax({
+ type: 'GET',
+ url: '/sidebar/search',
+ success: function(data) {
+ $('#content').html(data);
+ current_user_id = $('#current_user_id').val();
+ flipMarkers();
+ }
+ });
+ }
+ });
+ }
+ return false;
+ });
+
+ $('body').on('submit', '#address_form', function() {
var submitButton = $("#address_form input[type='submit']");
$(submitButton).attr("disabled", true);
if($('#address').val() === '') {
$(submitButton).attr("disabled", false);
- $('#address').parent().addClass('error');
+ $('#address').parent().addClass(errorClass);
+ $('#address').next(".help-block").html('You must enter a value');
$('#address').focus();
} else {
$.ajax({
@@ -148,27 +402,33 @@ $(function() {
'address': $('#address').val()
},
error: function(jqXHR) {
+ var response = $.parseJSON(jqXHR.responseText);
$(submitButton).attr("disabled", false);
- $('#address').parent().addClass('error');
+ $('#address').parent().addClass(errorClass);
+ $('#address').next(".help-block").html(response.error);
$('#address').focus();
},
success: function(data) {
$(submitButton).attr("disabled", false);
if(data.errors) {
- $('#address').parent().addClass('error');
+ $('#address').parent().addClass(errorClass);
+ $('#address').next(".help-block").html('');
$('#address').focus();
} else {
- $('#address').parent().removeClass('error');
- addMarkersAround(data[0], data[1]);
- var center = new google.maps.LatLng(data[0], data[1]);
- map.setCenter(center);
- map.setZoom(19);
+ $('#address').parent().removeClass(errorClass);
+ $('#address').next(".help-block").html('');
+ zoomTo(data[0], data[1]);
}
}
});
}
return false;
});
+
+ $('body').on('click', '.thing-link', function() {
+ zoomTo($(this).data('lat'), $(this).data('lng'), 20);
+ });
+
// Focus on the first non-empty text input or password field
function setComboFormFocus() {
$('#combo-form input[type="email"], #combo-form input[type="text"]:visible, #combo-form input[type="password"]:visible, #combo-form input[type="submit"]:visible, #combo-form input[type="tel"]:visible, #combo-form button:visible').each(function(index) {
@@ -178,7 +438,8 @@ $(function() {
}
});
}
- $('#combo-form input[type="radio"]').live('click', function() {
+
+ $('.sidebar').on('click', '#combo-form input[type="radio"]', function() {
var radioInput = $(this);
if('new' === radioInput.val()) {
$('#combo-form').data('state', 'user_sign_up');
@@ -209,28 +470,34 @@ $(function() {
});
}
});
- $('#combo-form').live('submit', function() {
+ $('.sidebar').on('submit','#combo-form', function() {
var submitButton = $("#combo-form input[type='submit']");
$(submitButton).attr("disabled", true);
var errors = []
if(!/[\w\.%\+]+@[\w]+\.+[\w]{2,}/.test($('#user_email').val())) {
errors.push($('#user_email'));
- $('#user_email').parent().addClass('error');
+ $('#user_email').parent().addClass(errorClass);
} else {
- $('#user_email').parent().removeClass('error');
+ $('#user_email').parent().removeClass(errorClass);
}
if(!$(this).data('state') || $(this).data('state') === 'user_sign_up') {
- if($('#user_name').val() === '') {
- errors.push($('#user_name'));
- $('#user_name').parent().addClass('error');
+ if($('#user_first_name').val() === '') {
+ errors.push($('#user_first_name'));
+ $('#user_first_name').parent().addClass(errorClass);
+ } else {
+ $('#user_first_name').parent().removeClass(errorClass);
+ }
+ if($('#user_last_name').val() === '') {
+ errors.push($('#user_last_name'));
+ $('#user_last_name').parent().addClass(errorClass);
} else {
- $('#user_name').parent().removeClass('error');
+ $('#user_last_name').parent().removeClass(errorClass);
}
if($('#user_password_confirmation').val().length < 6 || $('#user_password_confirmation').val().length > 20) {
errors.push($('#user_password_confirmation'));
- $('#user_password_confirmation').parent().addClass('error');
+ $('#user_password_confirmation').parent().addClass(errorClass);
} else {
- $('#user_password_confirmation').parent().removeClass('error');
+ $('#user_password_confirmation').parent().removeClass(errorClass);
}
if(errors.length > 0) {
$(submitButton).attr("disabled", false);
@@ -244,7 +511,8 @@ $(function() {
'authenticity_token': $('#combo-form input[name="authenticity_token"]').val(),
'user': {
'email': $('#user_email').val(),
- 'name': $('#user_name').val(),
+ 'first_name': $('#user_first_name').val(),
+ 'last_name': $('#user_last_name').val(),
'organization': $('#user_organization').val(),
'voice_number': $('#user_voice_number').val(),
'sms_number': $('#user_sms_number').val(),
@@ -257,27 +525,31 @@ $(function() {
$(submitButton).attr("disabled", false);
if(data.errors.email) {
errors.push($('#user_email'));
- $('#user_email').parent().addClass('error');
+ $('#user_email').parent().addClass(errorClass);
}
- if(data.errors.name) {
- errors.push($('#user_name'));
- $('#user_name').parent().addClass('error');
+ if(data.errors.first_name) {
+ errors.push($('#user_first_name'));
+ $('#user_first_name').parent().addClass(errorClass);
+ }
+ if(data.errors.last_name) {
+ errors.push($('#user_last_name'));
+ $('#user_last_name').parent().addClass(errorClass);
}
if(data.errors.organization) {
errors.push($('#user_organization'));
- $('#user_organization').parent().addClass('error');
+ $('#user_organization').parent().addClass(errorClass);
}
if(data.errors.voice_number) {
errors.push($('#user_voice_number'));
- $('#user_voice_number').parent().addClass('error');
+ $('#user_voice_number').parent().addClass(errorClass);
}
if(data.errors.sms_number) {
errors.push($('#user_sms_number'));
- $('#user_sms_number').parent().addClass('error');
+ $('#user_sms_number').parent().addClass(errorClass);
}
if(data.errors.password) {
errors.push($('#user_password_confirmation'));
- $('#user_password_confirmation').parent().addClass('error');
+ $('#user_password_confirmation').parent().addClass(errorClass);
}
errors[0].focus();
},
@@ -285,12 +557,9 @@ $(function() {
$.ajax({
type: 'GET',
url: '/sidebar/search',
- data: {
- 'flash': {
- 'notice': "<%= I18n.t("notices.signed_up") %>"
- }
- },
success: function(data) {
+ $('.sidebar').addClass('signed-in');
+ $('.sidebar').removeClass('sidebar-full');
$('#content').html(data);
}
});
@@ -300,9 +569,9 @@ $(function() {
} else if($(this).data('state') === 'user_sign_in') {
if($('#user_password').val().length < 6 || $('#user_password').val().length > 20) {
errors.push($('#user_password'));
- $('#user_password').parent().addClass('error');
+ $('#user_password').parent().addClass(errorClass);
} else {
- $('#user_password').parent().removeClass('error');
+ $('#user_password').parent().removeClass(errorClass);
}
if(errors.length > 0) {
$(submitButton).attr("disabled", false);
@@ -317,25 +586,26 @@ $(function() {
'user': {
'email': $('#user_email').val(),
'password': $('#user_password').val(),
- 'remember_me': $('#user_remember_me').val()
+ 'remember_me': $('#user_remember_me').prop("checked") ? 1 : 0
}
},
error: function(jqXHR) {
+ var response = $.parseJSON(jqXHR.responseText)
$(submitButton).attr("disabled", false);
- $('#user_password').parent().addClass('error');
+ $('#user_password').parent().addClass(errorClass);
+ $('#user_password').next(".help-block").html(response.error);
$('#user_password').focus();
},
success: function(data) {
+ $('.container-fluid').addClass('signed-in');
+ $('.sidebar').removeClass('sidebar-full');
$.ajax({
type: 'GET',
url: '/sidebar/search',
- data: {
- 'flash': {
- 'notice': "<%= I18n.t("notices.signed_in") %>"
- }
- },
success: function(data) {
$('#content').html(data);
+ current_user_id = $('#current_user_id').val();
+ flipMarkers();
}
});
}
@@ -358,20 +628,21 @@ $(function() {
},
error: function(jqXHR) {
$(submitButton).attr("disabled", false);
- $('#user_email').parent().addClass('error');
+ var response = $.parseJSON(jqXHR.responseText);
+ $('#user_email').parent().addClass(errorClass);
+ $('#user_email').next(".help-block").html(response.errors.email);
$('#user_email').focus();
},
success: function() {
+ showFlash('info', 'Password reset sent');
$(submitButton).attr("disabled", false);
- $('#user_remembered_password_link').click();
- $('#user_password').focus();
}
});
}
}
return false;
});
- $('#adoption_form').live('submit', function() {
+ $('#map').on('submit', '#adoption_form', function() {
var submitButton = $("#adoption_form input[type='submit']");
$(submitButton).attr("disabled", true);
$.ajax({
@@ -384,7 +655,7 @@ $(function() {
'authenticity_token': $('#adoption_form input[name="authenticity_token"]').val(),
'thing': {
'user_id': $('#thing_user_id').val(),
- 'name': $('#thing_name').val()
+ 'adopted_name': $('#thing_adopted_name').val()
}
},
error: function(jqXHR) {
@@ -395,16 +666,13 @@ $(function() {
type: 'GET',
url: '/info_window',
data: {
- 'thing_id': activeThingId,
- 'flash': {
- 'notice': "<%= I18n.t("notices.adopted", thing: I18n.t("defaults.thing")) %>"
- }
+ 'thing_id': activeThingId
},
success: function(data) {
activeInfoWindow.close();
activeInfoWindow.setContent(data);
activeInfoWindow.open(map, activeMarker);
- activeMarker.setIcon(greenMarkerImage);
+ activeMarker.setIcon(adoptedByYouMarker);
activeMarker.setAnimation(google.maps.Animation.BOUNCE);
}
});
@@ -412,8 +680,8 @@ $(function() {
});
return false;
});
- $('#abandon_form').live('submit', function() {
- var answer = window.confirm("Are you sure you want to abandon this <%= I18n.t("defaults.thing") %>?")
+ $('#map').on('submit', '#abandon_form', function() {
+ var answer = window.confirm(constants.abandonConfirmText)
if(answer) {
var submitButton = $("#abandon_form input[type='submit']");
$(submitButton).attr("disabled", true);
@@ -427,7 +695,7 @@ $(function() {
'authenticity_token': $('#abandon_form input[name="authenticity_token"]').val(),
'thing': {
'user_id': $('#thing_user_id').val(),
- 'name': $('#thing_name').val()
+ 'adopted_name': $('#thing_adopted_name').val()
}
},
error: function(jqXHR) {
@@ -438,16 +706,13 @@ $(function() {
type: 'GET',
url: '/info_window',
data: {
- 'thing_id': activeThingId,
- 'flash': {
- 'warning': "<%= I18n.t("notices.abandoned", thing: I18n.t("defaults.thing").capitalize) %>"
- }
+ 'thing_id': activeThingId
},
success: function(data) {
activeInfoWindow.close();
activeInfoWindow.setContent(data);
activeInfoWindow.open(map, activeMarker);
- activeMarker.setIcon(redMarkerImage);
+ activeMarker.setIcon(toSewerMarker);
activeMarker.setAnimation(null);
}
});
@@ -456,7 +721,7 @@ $(function() {
}
return false;
});
- $('#edit_profile_link').live('click', function() {
+ $('.sidebar').on('click','#edit_profile_link', function() {
var link = $(this);
$(link).addClass('disabled');
$.ajax({
@@ -471,39 +736,39 @@ $(function() {
});
return false;
});
- $('#edit_form').live('submit', function() {
+ $('.sidebar').on('submit','#edit_form', function() {
var submitButton = $("#edit_form input[type='submit']");
$(submitButton).attr("disabled", true);
var errors = []
if(!/[\w\.%\+\]+@[\w\]+\.+[\w]{2,}/.test($('#user_email').val())) {
errors.push($('#user_email'));
- $('#user_email').parent().addClass('error');
+ $('#user_email').parent().addClass(errorClass);
} else {
- $('#user_email').parent().removeClass('error');
+ $('#user_email').parent().removeClass(errorClass);
}
- if($('#user_name').val() === '') {
- errors.push($('#user_name'));
- $('#user_name').parent().addClass('error');
+ if($('#user_first_name').val() === '') {
+ errors.push($('#user_first_name'));
+ $('#user_first_name').parent().addClass(errorClass);
} else {
- $('#user_name').parent().removeClass('error');
+ $('#user_first_name').parent().removeClass(errorClass);
}
if($('#user_zip').val() != '' && !/^\d{5}(-\d{4})?$/.test($('#user_zip').val())) {
errors.push($('#user_zip'));
- $('#user_zip').parent().addClass('error');
+ $('#user_zip').parent().addClass(errorClass);
} else {
- $('#user_zip').parent().removeClass('error');
+ $('#user_zip').parent().removeClass(errorClass);
}
if($('#user_password').val() && ($('#user_password').val().length < 6 || $('#user_password').val().length > 20)) {
errors.push($('#user_password'));
- $('#user_password').parent().addClass('error');
+ $('#user_password').parent().addClass(errorClass);
} else {
- $('#user_password').parent().removeClass('error');
+ $('#user_password').parent().removeClass(errorClass);
}
if($('#user_current_password').val().length < 6 || $('#user_current_password').val().length > 20) {
errors.push($('#user_current_password'));
- $('#user_current_password').parent().addClass('error');
+ $('#user_current_password').parent().addClass(errorClass);
} else {
- $('#user_current_password').parent().removeClass('error');
+ $('#user_current_password').parent().removeClass(errorClass);
}
if(errors.length > 0) {
$(submitButton).attr("disabled", false);
@@ -520,7 +785,8 @@ $(function() {
'authenticity_token': $('#edit_form input[name="authenticity_token"]').val(),
'user': {
'email': $('#user_email').val(),
- 'name': $('#user_name').val(),
+ 'first_name': $('#user_first_name').val(),
+ 'last_name': $('#user_last_name').val(),
'organization': $('#user_organization').val(),
'voice_number': $('#user_voice_number').val(),
'sms_number': $('#user_sms_number').val(),
@@ -539,51 +805,55 @@ $(function() {
$(submitButton).attr("disabled", false);
if(data.errors.email) {
errors.push($('#user_email'));
- $('#user_email').parent().addClass('error');
+ $('#user_email').parent().addClass(errorClass);
+ }
+ if(data.errors.first_name) {
+ errors.push($('#user_first_name'));
+ $('#user_first_name').parent().addClass(errorClass);
}
- if(data.errors.name) {
- errors.push($('#user_name'));
- $('#user_name').parent().addClass('error');
+ if(data.errors.last_name) {
+ errors.push($('#user_last_name'));
+ $('#user_last_name').parent().addClass(errorClass);
}
if(data.errors.organization) {
errors.push($('#user_organization'));
- $('#user_organization').parent().addClass('error');
+ $('#user_organization').parent().addClass(errorClass);
}
if(data.errors.voice_number) {
errors.push($('#user_voice_number'));
- $('#user_voice_number').parent().addClass('error');
+ $('#user_voice_number').parent().addClass(errorClass);
}
if(data.errors.sms_number) {
errors.push($('#user_sms_number'));
- $('#user_sms_number').parent().addClass('error');
+ $('#user_sms_number').parent().addClass(errorClass);
}
if(data.errors.address_1) {
errors.push($('#user_address_1'));
- $('#user_address_1').parent().addClass('error');
+ $('#user_address_1').parent().addClass(errorClass);
}
if(data.errors.address_2) {
errors.push($('#user_address_2'));
- $('#user_address_2').parent().addClass('error');
+ $('#user_address_2').parent().addClass(errorClass);
}
if(data.errors.city) {
errors.push($('#user_city'));
- $('#user_city').parent().addClass('error');
+ $('#user_city').parent().addClass(errorClass);
}
if(data.errors.state) {
errors.push($('#user_state'));
- $('#user_state').parent().addClass('error');
+ $('#user_state').parent().addClass(errorClass);
}
if(data.errors.zip) {
errors.push($('#user_zip'));
- $('#user_zip').parent().addClass('error');
+ $('#user_zip').parent().addClass(errorClass);
}
if(data.errors.password) {
errors.push($('#user_password'));
- $('#user_password').parent().addClass('error');
+ $('#user_password').parent().addClass(errorClass);
}
if(data.errors.current_password) {
errors.push($('#user_current_password'));
- $('#user_current_password').parent().addClass('error');
+ $('#user_current_password').parent().addClass(errorClass);
}
errors[0].focus();
},
@@ -594,7 +864,7 @@ $(function() {
}
return false;
});
- $('#sign_out_link').live('click', function() {
+ $('.sidebar').on('click','#sign_out_link', function() {
var link = $(this);
$(link).addClass('disabled');
$.ajax({
@@ -604,15 +874,14 @@ $(function() {
$(link).removeClass('disabled');
},
success: function(data) {
+ current_user_id = '';
+ flipMarkers();
$.ajax({
type: 'GET',
url: '/sidebar/combo_form',
- data: {
- 'flash': {
- 'warning': "<%= I18n.t("notices.signed_out") %>"
- }
- },
success: function(data) {
+ $('.sidebar').removeClass('sidebar-full');
+ $('.container-fluid').removeClass('signed-in');
$('#content').html(data);
}
});
@@ -620,8 +889,8 @@ $(function() {
});
return false;
});
- $('#sign_in_form').live('submit', function() {
- var submitButton = $("#sign_in_form input[type='submit']");
+ $('.sidebar').on('submit','#sign_out_form', function() {
+ var submitButton = $("#sign_out_form input[type='submit']");
$(submitButton).attr("disabled", true);
$.ajax({
type: 'GET',
@@ -637,22 +906,23 @@ $(function() {
});
return false;
});
- $('#back_link').live('click', function() {
+ $('.sidebar').on('click','.link', function() {
var link = $(this);
$(link).addClass('disabled');
$.ajax({
type: 'GET',
- url: '/sidebar/search',
+ url: link.attr('href'),
error: function(jqXHR) {
$(link).removeClass('disabled');
},
success: function(data) {
+ console.log(data);
$('#content').html(data);
}
});
return false;
});
- $('#reminder_form').live('submit', function() {
+ $('#reminder_form').on('submit', function() {
var submitButton = $("#reminder_form input[type='submit']");
$(submitButton).attr("disabled", true);
$.ajax({
@@ -674,10 +944,7 @@ $(function() {
type: 'GET',
url: '/info_window',
data: {
- 'thing_id': activeThingId,
- 'flash': {
- 'notice': "<%= I18n.t("notices.reminder_sent") %>"
- }
+ 'thing_id': activeThingId
},
success: function(data) {
activeInfoWindow.close();
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
index f9cd5b348..7b072e460 100644
--- a/app/assets/stylesheets/application.css
+++ b/app/assets/stylesheets/application.css
@@ -10,6 +10,256 @@
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
* file per style scope.
*
- *= require_tree .
+ *= require bootstrap
*= require_self
+ *= require screen
*/
+
+body, html {
+ height: 100%;
+ width: 100%;
+}
+
+div#logos {
+ margin-top: 15px;
+ padding-top: 25px;
+ border-top: thin dotted #b4b4b4;
+}
+
+div#logos img {
+ width: 100%;
+}
+
+.user-things{
+ max-height: 300px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+/*div#logos img.dpw, div#logos img.puc{
+ width: auto;
+ height: 112px;
+}*/
+
+div#logos .row div{
+ text-align: center;
+}
+
+input[type="text"], input[type="email"], input[type="password"], input[type="search"]
+{
+ font-size:16px;
+}
+
+html h1,
+html h2,
+html h3,
+html h4,
+html h5,
+html h6,
+html .h1,
+html .h2,
+html .h3,
+html .h4,
+html .h5,
+html .h6 {
+ font-weight: 600;
+}
+
+h2, .h2 {
+ font-size: 1.20em;
+}
+
+h3, .h3 {
+ font-size: 1.05em;
+}
+
+h5.my-things {
+ font-weight: bold;
+}
+
+.navbar {
+ margin-bottom: 0;
+ text-align: center;
+}
+
+.navbar img {
+ max-width: 130px;
+ margin: 5px;
+}
+
+.sidebar .navbar {
+ background-color: #8DC63F;
+}
+
+.sidebar {
+ height: 90px;
+ overflow: hidden;
+ background-color: #fff;
+ z-index: 2;
+}
+
+.sidebar p.tos {
+ text-align: center;
+ margin-bottom: 15px;
+}
+
+.sidebar p {
+ padding: 0;
+}
+
+.signed-in .sidebar {
+ height: 210px;
+ position: relative;
+}
+
+.signed-in .sidebar-full, .sidebar-full {
+ height: auto;
+ z-index: 2;
+ position: relative;
+}
+
+.search-form .form-group {
+ margin-bottom: 0;
+}
+
+#adoption_form {
+ text-align: center;
+}
+
+.click-to-learn {
+ text-align: center;
+}
+
+.map-container {
+ position: absolute;
+ top:90px;
+ bottom:0;
+ width: 100%;
+ z-index: 0;
+}
+
+.navbar-default {
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.navbar-toggle {
+ margin-top: 30px;
+ margin-right: 15px;
+}
+
+.sidebar-content {
+ margin: 15px;
+}
+
+.signed-in .map-container {
+ top: 210px;
+}
+
+.btn {
+ white-space: normal !important; /* override bootstrap to wrap button text */
+ word-wrap: break-word;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #396B80;
+ border-color: #2e6da4;
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #005596;
+ border-color: #204d74;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #BF2620;
+ border-color: #d43f3a;
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #EE2A24;
+ border-color: #d43f3a;
+}
+
+.btn-default {
+ color: #333;
+ background-color: #FAF0DC;
+ border-color: #ccc;
+}
+
+.break {
+ border-top: thin dotted #b4b4b4;
+ margin: 20px 0;
+}
+
+#legend {
+ background: white;
+ padding: 15px 0 15px 15px;
+ margin-bottom: 20px;
+ border: thin solid #bdbdbd;
+ right: 50px;
+}
+
+#legend div {
+ display: inline-block;
+ margin-right: 15px;
+}
+
+#legend .title {
+ display: block;
+ font-size: 1.2em;
+ font-weight: 700;
+ border-bottom: thin dotted #bdbdbd;
+ margin-bottom: 5px;
+}
+
+#legend .show-hide {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+}
+
+a.guidelines {
+ text-decoration: none;
+}
+
+.user-things dd {
+ margin-left: 20px;
+}
+
+@media (min-width: 768px) {
+ .sidebar, .signed-in .sidebar {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 25%;
+ z-index: 2;
+ overflow: scroll;
+ overflow-x: hidden;
+ }
+
+ .signed-in .map-container, .map-container {
+ width: 75%;
+ top: 0;
+ right: 0;
+ }
+
+ .navbar img {
+ max-width: 60%;
+ margin: 5px;
+ }
+
+ .sidebar button.navbar-toggle {
+ display: none;
+ }
+
+ #legend {
+ right: auto;
+ min-width: 594px;
+ }
+}
diff --git a/app/assets/stylesheets/bootstrap.css b/app/assets/stylesheets/bootstrap.css
index 495188af7..680e76878 100644
--- a/app/assets/stylesheets/bootstrap.css
+++ b/app/assets/stylesheets/bootstrap.css
@@ -1,12 +1,17 @@
/*!
- * Bootstrap v2.0.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
article,
aside,
details,
@@ -15,34 +20,56 @@ figure,
footer,
header,
hgroup,
+main,
+menu,
nav,
-section {
+section,
+summary {
display: block;
}
audio,
canvas,
+progress,
video {
display: inline-block;
- *display: inline;
- *zoom: 1;
+ vertical-align: baseline;
}
audio:not([controls]) {
display: none;
+ height: 0;
}
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
+[hidden],
+template {
+ display: none;
}
-a:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
+a {
+ background-color: transparent;
}
-a:hover,
-a:active {
+a:active,
+a:hover {
outline: 0;
}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
sub,
sup {
position: relative;
@@ -51,3208 +78,5887 @@ sup {
vertical-align: baseline;
}
sup {
- top: -0.5em;
+ top: -.5em;
}
sub {
- bottom: -0.25em;
+ bottom: -.25em;
}
img {
- height: auto;
border: 0;
- -ms-interpolation-mode: bicubic;
- vertical-align: middle;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
}
button,
input,
+optgroup,
select,
textarea {
margin: 0;
- font-size: 100%;
- vertical-align: middle;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
}
button,
-input {
- *overflow: visible;
- line-height: normal;
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0;
}
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- cursor: pointer;
- -webkit-appearance: button;
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
}
input[type="search"] {
- -webkit-appearance: textfield;
-webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
textarea {
overflow: auto;
- vertical-align: top;
}
-.clearfix {
- *zoom: 1;
+optgroup {
+ font-weight: bold;
}
-.clearfix:before,
-.clearfix:after {
- display: table;
- content: "";
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
}
-.clearfix:after {
- clear: both;
+td,
+th {
+ padding: 0;
}
-.hide-text {
- overflow: hidden;
- text-indent: 100%;
- white-space: nowrap;
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
}
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 28px;
- /* Make inputs at least the height of their button counterpart */
+@font-face {
+ font-family: 'Glyphicons Halflings';
- /* Makes inputs behave like true block-level elements */
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
-body {
- margin: 0;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 18px;
- color: #333333;
- background-color: #ffffff;
+.glyphicon-asterisk:before {
+ content: "\2a";
}
-a {
- color: #0088cc;
- text-decoration: none;
+.glyphicon-plus:before {
+ content: "\2b";
}
-a:hover {
- color: #005580;
- text-decoration: underline;
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
}
-.row {
- margin-left: -20px;
- *zoom: 1;
+.glyphicon-minus:before {
+ content: "\2212";
}
-.row:before,
-.row:after {
- display: table;
- content: "";
+.glyphicon-cloud:before {
+ content: "\2601";
}
-.row:after {
- clear: both;
+.glyphicon-envelope:before {
+ content: "\2709";
}
-[class*="span"] {
- float: left;
- margin-left: 20px;
+.glyphicon-pencil:before {
+ content: "\270f";
}
-.container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
+.glyphicon-glass:before {
+ content: "\e001";
}
-.span12 {
- width: 940px;
+.glyphicon-music:before {
+ content: "\e002";
}
-.span11 {
- width: 860px;
+.glyphicon-search:before {
+ content: "\e003";
}
-.span10 {
- width: 780px;
+.glyphicon-heart:before {
+ content: "\e005";
}
-.span9 {
- width: 700px;
+.glyphicon-star:before {
+ content: "\e006";
}
-.span8 {
- width: 620px;
+.glyphicon-star-empty:before {
+ content: "\e007";
}
-.span7 {
- width: 540px;
+.glyphicon-user:before {
+ content: "\e008";
}
-.span6 {
- width: 460px;
+.glyphicon-film:before {
+ content: "\e009";
}
-.span5 {
- width: 380px;
+.glyphicon-th-large:before {
+ content: "\e010";
}
-.span4 {
- width: 300px;
+.glyphicon-th:before {
+ content: "\e011";
}
-.span3 {
- width: 220px;
+.glyphicon-th-list:before {
+ content: "\e012";
}
-.span2 {
- width: 140px;
+.glyphicon-ok:before {
+ content: "\e013";
}
-.span1 {
- width: 60px;
+.glyphicon-remove:before {
+ content: "\e014";
}
-.offset12 {
- margin-left: 980px;
+.glyphicon-zoom-in:before {
+ content: "\e015";
}
-.offset11 {
- margin-left: 900px;
+.glyphicon-zoom-out:before {
+ content: "\e016";
}
-.offset10 {
- margin-left: 820px;
+.glyphicon-off:before {
+ content: "\e017";
}
-.offset9 {
- margin-left: 740px;
+.glyphicon-signal:before {
+ content: "\e018";
}
-.offset8 {
- margin-left: 660px;
+.glyphicon-cog:before {
+ content: "\e019";
}
-.offset7 {
- margin-left: 580px;
+.glyphicon-trash:before {
+ content: "\e020";
}
-.offset6 {
- margin-left: 500px;
+.glyphicon-home:before {
+ content: "\e021";
}
-.offset5 {
- margin-left: 420px;
+.glyphicon-file:before {
+ content: "\e022";
}
-.offset4 {
- margin-left: 340px;
+.glyphicon-time:before {
+ content: "\e023";
}
-.offset3 {
- margin-left: 260px;
+.glyphicon-road:before {
+ content: "\e024";
}
-.offset2 {
- margin-left: 180px;
+.glyphicon-download-alt:before {
+ content: "\e025";
}
-.offset1 {
- margin-left: 100px;
+.glyphicon-download:before {
+ content: "\e026";
}
-.row-fluid {
- width: 100%;
- *zoom: 1;
+.glyphicon-upload:before {
+ content: "\e027";
}
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- content: "";
+.glyphicon-inbox:before {
+ content: "\e028";
}
-.row-fluid:after {
- clear: both;
+.glyphicon-play-circle:before {
+ content: "\e029";
}
-.row-fluid > [class*="span"] {
- float: left;
- margin-left: 2.127659574%;
+.glyphicon-repeat:before {
+ content: "\e030";
}
-.row-fluid > [class*="span"]:first-child {
- margin-left: 0;
+.glyphicon-refresh:before {
+ content: "\e031";
}
-.row-fluid > .span12 {
- width: 99.99999998999999%;
+.glyphicon-list-alt:before {
+ content: "\e032";
}
-.row-fluid > .span11 {
- width: 91.489361693%;
+.glyphicon-lock:before {
+ content: "\e033";
}
-.row-fluid > .span10 {
- width: 82.97872339599999%;
+.glyphicon-flag:before {
+ content: "\e034";
}
-.row-fluid > .span9 {
- width: 74.468085099%;
+.glyphicon-headphones:before {
+ content: "\e035";
}
-.row-fluid > .span8 {
- width: 65.95744680199999%;
+.glyphicon-volume-off:before {
+ content: "\e036";
}
-.row-fluid > .span7 {
- width: 57.446808505%;
+.glyphicon-volume-down:before {
+ content: "\e037";
}
-.row-fluid > .span6 {
- width: 48.93617020799999%;
+.glyphicon-volume-up:before {
+ content: "\e038";
}
-.row-fluid > .span5 {
- width: 40.425531911%;
+.glyphicon-qrcode:before {
+ content: "\e039";
}
-.row-fluid > .span4 {
- width: 31.914893614%;
+.glyphicon-barcode:before {
+ content: "\e040";
}
-.row-fluid > .span3 {
- width: 23.404255317%;
+.glyphicon-tag:before {
+ content: "\e041";
}
-.row-fluid > .span2 {
- width: 14.89361702%;
+.glyphicon-tags:before {
+ content: "\e042";
}
-.row-fluid > .span1 {
- width: 6.382978723%;
+.glyphicon-book:before {
+ content: "\e043";
}
-.container {
- margin-left: auto;
- margin-right: auto;
- *zoom: 1;
+.glyphicon-bookmark:before {
+ content: "\e044";
}
-.container:before,
-.container:after {
- display: table;
- content: "";
+.glyphicon-print:before {
+ content: "\e045";
}
-.container:after {
- clear: both;
+.glyphicon-camera:before {
+ content: "\e046";
}
-.container-fluid {
- padding-left: 20px;
- padding-right: 20px;
- *zoom: 1;
+.glyphicon-font:before {
+ content: "\e047";
}
-.container-fluid:before,
-.container-fluid:after {
- display: table;
- content: "";
+.glyphicon-bold:before {
+ content: "\e048";
}
-.container-fluid:after {
- clear: both;
+.glyphicon-italic:before {
+ content: "\e049";
}
-p {
- margin: 0 0 9px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 18px;
+.glyphicon-text-height:before {
+ content: "\e050";
}
-p small {
- font-size: 11px;
- color: #999999;
+.glyphicon-text-width:before {
+ content: "\e051";
}
-.lead {
- margin-bottom: 18px;
- font-size: 20px;
- font-weight: 200;
- line-height: 27px;
+.glyphicon-align-left:before {
+ content: "\e052";
}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 0;
- font-family: inherit;
- font-weight: bold;
- color: inherit;
- text-rendering: optimizelegibility;
+.glyphicon-align-center:before {
+ content: "\e053";
}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
- font-weight: normal;
- color: #999999;
+.glyphicon-align-right:before {
+ content: "\e054";
}
-h1 {
- font-size: 30px;
- line-height: 36px;
+.glyphicon-align-justify:before {
+ content: "\e055";
}
-h1 small {
- font-size: 18px;
+.glyphicon-list:before {
+ content: "\e056";
}
-h2 {
- font-size: 24px;
- line-height: 36px;
+.glyphicon-indent-left:before {
+ content: "\e057";
}
-h2 small {
- font-size: 18px;
+.glyphicon-indent-right:before {
+ content: "\e058";
}
-h3 {
- line-height: 27px;
- font-size: 18px;
+.glyphicon-facetime-video:before {
+ content: "\e059";
}
-h3 small {
- font-size: 14px;
+.glyphicon-picture:before {
+ content: "\e060";
}
-h4,
-h5,
-h6 {
- line-height: 18px;
+.glyphicon-map-marker:before {
+ content: "\e062";
}
-h4 {
- font-size: 14px;
+.glyphicon-adjust:before {
+ content: "\e063";
}
-h4 small {
- font-size: 12px;
+.glyphicon-tint:before {
+ content: "\e064";
}
-h5 {
- font-size: 12px;
+.glyphicon-edit:before {
+ content: "\e065";
}
-h6 {
- font-size: 11px;
- color: #999999;
- text-transform: uppercase;
+.glyphicon-share:before {
+ content: "\e066";
}
-.page-header {
- padding-bottom: 17px;
- margin: 18px 0;
- border-bottom: 1px solid #eeeeee;
+.glyphicon-check:before {
+ content: "\e067";
}
-.page-header h1 {
- line-height: 1;
+.glyphicon-move:before {
+ content: "\e068";
}
-ul,
-ol {
- padding: 0;
- margin: 0 0 9px 25px;
+.glyphicon-step-backward:before {
+ content: "\e069";
}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin-bottom: 0;
+.glyphicon-fast-backward:before {
+ content: "\e070";
}
-ul {
- list-style: disc;
+.glyphicon-backward:before {
+ content: "\e071";
}
-ol {
- list-style: decimal;
+.glyphicon-play:before {
+ content: "\e072";
}
-li {
- line-height: 18px;
+.glyphicon-pause:before {
+ content: "\e073";
}
-ul.unstyled,
-ol.unstyled {
- margin-left: 0;
- list-style: none;
+.glyphicon-stop:before {
+ content: "\e074";
}
-dl {
- margin-bottom: 18px;
+.glyphicon-forward:before {
+ content: "\e075";
}
-dt,
-dd {
- line-height: 18px;
+.glyphicon-fast-forward:before {
+ content: "\e076";
}
-dt {
- font-weight: bold;
- line-height: 17px;
+.glyphicon-step-forward:before {
+ content: "\e077";
}
-dd {
- margin-left: 9px;
+.glyphicon-eject:before {
+ content: "\e078";
}
-.dl-horizontal dt {
- float: left;
- clear: left;
- width: 120px;
- text-align: right;
+.glyphicon-chevron-left:before {
+ content: "\e079";
}
-.dl-horizontal dd {
- margin-left: 130px;
+.glyphicon-chevron-right:before {
+ content: "\e080";
}
-hr {
- margin: 18px 0;
- border: 0;
- border-top: 1px solid #eeeeee;
- border-bottom: 1px solid #ffffff;
+.glyphicon-plus-sign:before {
+ content: "\e081";
}
-strong {
- font-weight: bold;
+.glyphicon-minus-sign:before {
+ content: "\e082";
}
-em {
- font-style: italic;
+.glyphicon-remove-sign:before {
+ content: "\e083";
}
-.muted {
- color: #999999;
+.glyphicon-ok-sign:before {
+ content: "\e084";
}
-abbr[title] {
- border-bottom: 1px dotted #ddd;
- cursor: help;
+.glyphicon-question-sign:before {
+ content: "\e085";
}
-abbr.initialism {
- font-size: 90%;
- text-transform: uppercase;
+.glyphicon-info-sign:before {
+ content: "\e086";
}
-blockquote {
- padding: 0 0 0 15px;
- margin: 0 0 18px;
- border-left: 5px solid #eeeeee;
+.glyphicon-screenshot:before {
+ content: "\e087";
}
-blockquote p {
- margin-bottom: 0;
- font-size: 16px;
- font-weight: 300;
- line-height: 22.5px;
+.glyphicon-remove-circle:before {
+ content: "\e088";
}
-blockquote small {
- display: block;
- line-height: 18px;
- color: #999999;
+.glyphicon-ok-circle:before {
+ content: "\e089";
}
-blockquote small:before {
- content: '\2014 \00A0';
+.glyphicon-ban-circle:before {
+ content: "\e090";
}
-blockquote.pull-right {
- float: right;
- padding-left: 0;
- padding-right: 15px;
- border-left: 0;
- border-right: 5px solid #eeeeee;
+.glyphicon-arrow-left:before {
+ content: "\e091";
}
-blockquote.pull-right p,
-blockquote.pull-right small {
- text-align: right;
+.glyphicon-arrow-right:before {
+ content: "\e092";
}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
+.glyphicon-arrow-up:before {
+ content: "\e093";
}
-address {
- display: block;
- margin-bottom: 18px;
- line-height: 18px;
- font-style: normal;
+.glyphicon-arrow-down:before {
+ content: "\e094";
}
-small {
- font-size: 100%;
+.glyphicon-share-alt:before {
+ content: "\e095";
}
-cite {
- font-style: normal;
+.glyphicon-resize-full:before {
+ content: "\e096";
}
-code,
-pre {
- padding: 0 3px 2px;
- font-family: Menlo, Monaco, "Courier New", monospace;
- font-size: 12px;
- color: #333333;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
+.glyphicon-resize-small:before {
+ content: "\e097";
}
-code {
- padding: 2px 4px;
- color: #d14;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
}
-pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12.025px;
- line-height: 18px;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- white-space: pre;
- white-space: pre-wrap;
- word-break: break-all;
- word-wrap: break-word;
+.glyphicon-gift:before {
+ content: "\e102";
}
-pre.prettyprint {
- margin-bottom: 18px;
+.glyphicon-leaf:before {
+ content: "\e103";
}
-pre code {
- padding: 0;
- color: inherit;
- background-color: transparent;
- border: 0;
+.glyphicon-fire:before {
+ content: "\e104";
}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
+.glyphicon-eye-open:before {
+ content: "\e105";
}
-form {
- margin: 0 0 18px;
+.glyphicon-eye-close:before {
+ content: "\e106";
}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
+.glyphicon-warning-sign:before {
+ content: "\e107";
}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 27px;
- font-size: 19.5px;
- line-height: 36px;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #eee;
+.glyphicon-plane:before {
+ content: "\e108";
}
-legend small {
- font-size: 13.5px;
- color: #999999;
+.glyphicon-calendar:before {
+ content: "\e109";
}
-label,
-input,
-button,
-select,
-textarea {
- font-size: 13px;
- font-weight: normal;
- line-height: 18px;
+.glyphicon-random:before {
+ content: "\e110";
}
-input,
-button,
-select,
-textarea {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+.glyphicon-comment:before {
+ content: "\e111";
}
-label {
- display: block;
- margin-bottom: 5px;
- color: #333333;
+.glyphicon-magnet:before {
+ content: "\e112";
}
-input,
-textarea,
-select,
-.uneditable-input {
- display: inline-block;
- width: 210px;
- height: 18px;
- padding: 4px;
- margin-bottom: 9px;
- font-size: 13px;
- line-height: 18px;
- color: #555555;
- border: 1px solid #cccccc;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
+.glyphicon-chevron-up:before {
+ content: "\e113";
}
-.uneditable-textarea {
- width: auto;
- height: auto;
+.glyphicon-chevron-down:before {
+ content: "\e114";
}
-label input,
-label textarea,
-label select {
- display: block;
+.glyphicon-retweet:before {
+ content: "\e115";
}
-input[type="image"],
-input[type="checkbox"],
-input[type="radio"] {
- width: auto;
- height: auto;
- padding: 0;
- margin: 3px 0;
- *margin-top: 0;
- /* IE7 */
-
- line-height: normal;
- cursor: pointer;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- border: 0 \9;
- /* IE9 and down */
-
+.glyphicon-shopping-cart:before {
+ content: "\e116";
}
-input[type="image"] {
- border: 0;
+.glyphicon-folder-close:before {
+ content: "\e117";
}
-input[type="file"] {
- width: auto;
- padding: initial;
- line-height: initial;
- border: initial;
- background-color: #ffffff;
- background-color: initial;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+.glyphicon-folder-open:before {
+ content: "\e118";
}
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- width: auto;
- height: auto;
+.glyphicon-resize-vertical:before {
+ content: "\e119";
}
-select,
-input[type="file"] {
- height: 28px;
- /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
- *margin-top: 4px;
- /* For IE7, add top margin to align select with labels */
-
- line-height: 28px;
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
}
-input[type="file"] {
- line-height: 18px \9;
+.glyphicon-hdd:before {
+ content: "\e121";
}
-select {
- width: 220px;
- background-color: #ffffff;
+.glyphicon-bullhorn:before {
+ content: "\e122";
}
-select[multiple],
-select[size] {
- height: auto;
+.glyphicon-bell:before {
+ content: "\e123";
}
-input[type="image"] {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+.glyphicon-certificate:before {
+ content: "\e124";
}
-textarea {
- height: auto;
+.glyphicon-thumbs-up:before {
+ content: "\e125";
}
-input[type="hidden"] {
- display: none;
+.glyphicon-thumbs-down:before {
+ content: "\e126";
}
-.radio,
-.checkbox {
- padding-left: 18px;
+.glyphicon-hand-right:before {
+ content: "\e127";
}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
- float: left;
- margin-left: -18px;
+.glyphicon-hand-left:before {
+ content: "\e128";
}
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
- padding-top: 5px;
+.glyphicon-hand-up:before {
+ content: "\e129";
}
-.radio.inline,
-.checkbox.inline {
- display: inline-block;
- padding-top: 5px;
- margin-bottom: 0;
- vertical-align: middle;
+.glyphicon-hand-down:before {
+ content: "\e130";
}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
- margin-left: 10px;
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
}
-input,
-textarea {
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
- -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
- -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
- -o-transition: border linear 0.2s, box-shadow linear 0.2s;
- transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-input:focus,
-textarea:focus {
- border-color: rgba(82, 168, 236, 0.8);
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- outline: 0;
- outline: thin dotted \9;
- /* IE6-9 */
-
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus,
-select:focus {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
}
-.input-mini {
- width: 60px;
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
}
-.input-small {
- width: 90px;
+.glyphicon-globe:before {
+ content: "\e135";
}
-.input-medium {
- width: 150px;
+.glyphicon-wrench:before {
+ content: "\e136";
}
-.input-large {
- width: 210px;
+.glyphicon-tasks:before {
+ content: "\e137";
}
-.input-xlarge {
- width: 270px;
+.glyphicon-filter:before {
+ content: "\e138";
}
-.input-xxlarge {
- width: 530px;
+.glyphicon-briefcase:before {
+ content: "\e139";
}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input {
- float: none;
- margin-left: 0;
+.glyphicon-fullscreen:before {
+ content: "\e140";
}
-input,
-textarea,
-.uneditable-input {
- margin-left: 0;
+.glyphicon-dashboard:before {
+ content: "\e141";
}
-input.span12, textarea.span12, .uneditable-input.span12 {
- width: 930px;
+.glyphicon-paperclip:before {
+ content: "\e142";
}
-input.span11, textarea.span11, .uneditable-input.span11 {
- width: 850px;
+.glyphicon-heart-empty:before {
+ content: "\e143";
}
-input.span10, textarea.span10, .uneditable-input.span10 {
- width: 770px;
+.glyphicon-link:before {
+ content: "\e144";
}
-input.span9, textarea.span9, .uneditable-input.span9 {
- width: 690px;
+.glyphicon-phone:before {
+ content: "\e145";
}
-input.span8, textarea.span8, .uneditable-input.span8 {
- width: 610px;
+.glyphicon-pushpin:before {
+ content: "\e146";
}
-input.span7, textarea.span7, .uneditable-input.span7 {
- width: 530px;
+.glyphicon-usd:before {
+ content: "\e148";
}
-input.span6, textarea.span6, .uneditable-input.span6 {
- width: 450px;
+.glyphicon-gbp:before {
+ content: "\e149";
}
-input.span5, textarea.span5, .uneditable-input.span5 {
- width: 370px;
+.glyphicon-sort:before {
+ content: "\e150";
}
-input.span4, textarea.span4, .uneditable-input.span4 {
- width: 290px;
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
}
-input.span3, textarea.span3, .uneditable-input.span3 {
- width: 210px;
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
}
-input.span2, textarea.span2, .uneditable-input.span2 {
- width: 130px;
+.glyphicon-sort-by-order:before {
+ content: "\e153";
}
-input.span1, textarea.span1, .uneditable-input.span1 {
- width: 50px;
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- background-color: #eeeeee;
- border-color: #ddd;
- cursor: not-allowed;
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
}
-.control-group.warning > label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
- color: #c09853;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- color: #c09853;
- border-color: #c09853;
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
- border-color: #a47e3c;
- -webkit-box-shadow: 0 0 6px #dbc59e;
- -moz-box-shadow: 0 0 6px #dbc59e;
- box-shadow: 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #c09853;
-}
-.control-group.error > label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
- color: #b94a48;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- color: #b94a48;
- border-color: #b94a48;
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
- border-color: #953b39;
- -webkit-box-shadow: 0 0 6px #d59392;
- -moz-box-shadow: 0 0 6px #d59392;
- box-shadow: 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #b94a48;
-}
-.control-group.success > label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
- color: #468847;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- color: #468847;
- border-color: #468847;
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
- border-color: #356635;
- -webkit-box-shadow: 0 0 6px #7aba7b;
- -moz-box-shadow: 0 0 6px #7aba7b;
- box-shadow: 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
- color: #468847;
- background-color: #dff0d8;
- border-color: #468847;
-}
-input:focus:required:invalid,
-textarea:focus:required:invalid,
-select:focus:required:invalid {
- color: #b94a48;
- border-color: #ee5f5b;
-}
-input:focus:required:invalid:focus,
-textarea:focus:required:invalid:focus,
-select:focus:required:invalid:focus {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
- padding: 17px 20px 18px;
- margin-top: 18px;
- margin-bottom: 18px;
- background-color: #eeeeee;
- border-top: 1px solid #ddd;
- *zoom: 1;
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
}
-.form-actions:before,
-.form-actions:after {
- display: table;
- content: "";
+.glyphicon-unchecked:before {
+ content: "\e157";
}
-.form-actions:after {
- clear: both;
+.glyphicon-expand:before {
+ content: "\e158";
}
-.uneditable-input {
- display: block;
- background-color: #ffffff;
- border-color: #eee;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- cursor: not-allowed;
+.glyphicon-collapse-down:before {
+ content: "\e159";
}
-:-moz-placeholder {
- color: #999999;
+.glyphicon-collapse-up:before {
+ content: "\e160";
}
-::-webkit-input-placeholder {
- color: #999999;
+.glyphicon-log-in:before {
+ content: "\e161";
}
-.help-block,
-.help-inline {
- color: #555555;
+.glyphicon-flash:before {
+ content: "\e162";
}
-.help-block {
- display: block;
- margin-bottom: 9px;
+.glyphicon-log-out:before {
+ content: "\e163";
}
-.help-inline {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- vertical-align: middle;
- padding-left: 5px;
+.glyphicon-new-window:before {
+ content: "\e164";
}
-.input-prepend,
-.input-append {
- margin-bottom: 5px;
+.glyphicon-record:before {
+ content: "\e165";
}
-.input-prepend input,
-.input-append input,
-.input-prepend select,
-.input-append select,
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
- *margin-left: 0;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-.input-prepend input:focus,
-.input-append input:focus,
-.input-prepend select:focus,
-.input-append select:focus,
-.input-prepend .uneditable-input:focus,
-.input-append .uneditable-input:focus {
- position: relative;
- z-index: 2;
+.glyphicon-save:before {
+ content: "\e166";
}
-.input-prepend .uneditable-input,
-.input-append .uneditable-input {
- border-left-color: #ccc;
+.glyphicon-open:before {
+ content: "\e167";
}
-.input-prepend .add-on,
-.input-append .add-on {
- display: inline-block;
- width: auto;
- min-width: 16px;
- height: 18px;
- padding: 4px 5px;
- font-weight: normal;
- line-height: 18px;
- text-align: center;
- text-shadow: 0 1px 0 #ffffff;
- vertical-align: middle;
- background-color: #eeeeee;
- border: 1px solid #ccc;
+.glyphicon-saved:before {
+ content: "\e168";
}
-.input-prepend .add-on,
-.input-append .add-on,
-.input-prepend .btn,
-.input-append .btn {
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-.input-prepend .active,
-.input-append .active {
- background-color: #a9dba9;
- border-color: #46a546;
-}
-.input-prepend .add-on,
-.input-prepend .btn {
- margin-right: -1px;
+.glyphicon-import:before {
+ content: "\e169";
}
-.input-append input,
-.input-append select .uneditable-input {
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
+.glyphicon-export:before {
+ content: "\e170";
}
-.input-append .uneditable-input {
- border-left-color: #eee;
- border-right-color: #ccc;
+.glyphicon-send:before {
+ content: "\e171";
}
-.input-append .add-on,
-.input-append .btn {
- margin-left: -1px;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
+.glyphicon-floppy-disk:before {
+ content: "\e172";
}
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
- margin-right: -1px;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
+.glyphicon-floppy-saved:before {
+ content: "\e173";
}
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
- margin-left: -1px;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
+.glyphicon-floppy-remove:before {
+ content: "\e174";
}
-.search-query {
- padding-left: 14px;
- padding-right: 14px;
- margin-bottom: 0;
- -webkit-border-radius: 14px;
- -moz-border-radius: 14px;
- border-radius: 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
- display: inline-block;
- margin-bottom: 0;
+.glyphicon-floppy-save:before {
+ content: "\e175";
}
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
- display: none;
+.glyphicon-floppy-open:before {
+ content: "\e176";
}
-.form-search label,
-.form-inline label {
- display: inline-block;
+.glyphicon-credit-card:before {
+ content: "\e177";
}
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
- margin-bottom: 0;
+.glyphicon-transfer:before {
+ content: "\e178";
}
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
+.glyphicon-cutlery:before {
+ content: "\e179";
}
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
- float: left;
- margin-left: 0;
- margin-right: 3px;
+.glyphicon-header:before {
+ content: "\e180";
}
-.control-group {
- margin-bottom: 9px;
+.glyphicon-compressed:before {
+ content: "\e181";
}
-legend + .control-group {
- margin-top: 18px;
- -webkit-margin-top-collapse: separate;
+.glyphicon-earphone:before {
+ content: "\e182";
}
-.form-horizontal .control-group {
- margin-bottom: 18px;
- *zoom: 1;
+.glyphicon-phone-alt:before {
+ content: "\e183";
}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
- display: table;
- content: "";
+.glyphicon-tower:before {
+ content: "\e184";
}
-.form-horizontal .control-group:after {
- clear: both;
+.glyphicon-stats:before {
+ content: "\e185";
}
-.form-horizontal .control-label {
- float: left;
- width: 140px;
- padding-top: 5px;
- text-align: right;
+.glyphicon-sd-video:before {
+ content: "\e186";
}
-.form-horizontal .controls {
- margin-left: 160px;
- /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */
-
- *display: inline-block;
- *margin-left: 0;
- *padding-left: 20px;
+.glyphicon-hd-video:before {
+ content: "\e187";
}
-.form-horizontal .help-block {
- margin-top: 9px;
- margin-bottom: 0;
+.glyphicon-subtitles:before {
+ content: "\e188";
}
-.form-horizontal .form-actions {
- padding-left: 160px;
+.glyphicon-sound-stereo:before {
+ content: "\e189";
}
-table {
- max-width: 100%;
- border-collapse: collapse;
- border-spacing: 0;
- background-color: transparent;
+.glyphicon-sound-dolby:before {
+ content: "\e190";
}
-.table {
- width: 100%;
- margin-bottom: 18px;
+.glyphicon-sound-5-1:before {
+ content: "\e191";
}
-.table th,
-.table td {
- padding: 8px;
- line-height: 18px;
- text-align: left;
- vertical-align: top;
- border-top: 1px solid #dddddd;
+.glyphicon-sound-6-1:before {
+ content: "\e192";
}
-.table th {
- font-weight: bold;
+.glyphicon-sound-7-1:before {
+ content: "\e193";
}
-.table thead th {
- vertical-align: bottom;
+.glyphicon-copyright-mark:before {
+ content: "\e194";
}
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
- border-top: 0;
+.glyphicon-registration-mark:before {
+ content: "\e195";
}
-.table tbody + tbody {
- border-top: 2px solid #dddddd;
+.glyphicon-cloud-download:before {
+ content: "\e197";
}
-.table-condensed th,
-.table-condensed td {
- padding: 4px 5px;
+.glyphicon-cloud-upload:before {
+ content: "\e198";
}
-.table-bordered {
- border: 1px solid #dddddd;
- border-left: 0;
- border-collapse: separate;
- *border-collapse: collapsed;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
+.glyphicon-tree-conifer:before {
+ content: "\e199";
}
-.table-bordered th,
-.table-bordered td {
- border-left: 1px solid #dddddd;
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
}
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
- border-top: 0;
+.glyphicon-cd:before {
+ content: "\e201";
}
-.table-bordered thead:first-child tr:first-child th:first-child,
-.table-bordered tbody:first-child tr:first-child td:first-child {
- -webkit-border-radius: 4px 0 0 0;
- -moz-border-radius: 4px 0 0 0;
- border-radius: 4px 0 0 0;
-}
-.table-bordered thead:first-child tr:first-child th:last-child,
-.table-bordered tbody:first-child tr:first-child td:last-child {
- -webkit-border-radius: 0 4px 0 0;
- -moz-border-radius: 0 4px 0 0;
- border-radius: 0 4px 0 0;
-}
-.table-bordered thead:last-child tr:last-child th:first-child,
-.table-bordered tbody:last-child tr:last-child td:first-child {
- -webkit-border-radius: 0 0 0 4px;
- -moz-border-radius: 0 0 0 4px;
- border-radius: 0 0 0 4px;
-}
-.table-bordered thead:last-child tr:last-child th:last-child,
-.table-bordered tbody:last-child tr:last-child td:last-child {
- -webkit-border-radius: 0 0 4px 0;
- -moz-border-radius: 0 0 4px 0;
- border-radius: 0 0 4px 0;
-}
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
- background-color: #f9f9f9;
+.glyphicon-save-file:before {
+ content: "\e202";
}
-.table tbody tr:hover td,
-.table tbody tr:hover th {
- background-color: #f5f5f5;
+.glyphicon-open-file:before {
+ content: "\e203";
}
-table .span1 {
- float: none;
- width: 44px;
- margin-left: 0;
+.glyphicon-level-up:before {
+ content: "\e204";
}
-table .span2 {
- float: none;
- width: 124px;
- margin-left: 0;
+.glyphicon-copy:before {
+ content: "\e205";
}
-table .span3 {
- float: none;
- width: 204px;
- margin-left: 0;
+.glyphicon-paste:before {
+ content: "\e206";
}
-table .span4 {
- float: none;
- width: 284px;
- margin-left: 0;
+.glyphicon-alert:before {
+ content: "\e209";
}
-table .span5 {
- float: none;
- width: 364px;
- margin-left: 0;
+.glyphicon-equalizer:before {
+ content: "\e210";
}
-table .span6 {
- float: none;
- width: 444px;
- margin-left: 0;
+.glyphicon-king:before {
+ content: "\e211";
}
-table .span7 {
- float: none;
- width: 524px;
- margin-left: 0;
+.glyphicon-queen:before {
+ content: "\e212";
}
-table .span8 {
- float: none;
- width: 604px;
- margin-left: 0;
+.glyphicon-pawn:before {
+ content: "\e213";
}
-table .span9 {
- float: none;
- width: 684px;
- margin-left: 0;
+.glyphicon-bishop:before {
+ content: "\e214";
}
-table .span10 {
- float: none;
- width: 764px;
- margin-left: 0;
+.glyphicon-knight:before {
+ content: "\e215";
}
-table .span11 {
- float: none;
- width: 844px;
- margin-left: 0;
+.glyphicon-baby-formula:before {
+ content: "\e216";
}
-table .span12 {
- float: none;
- width: 924px;
- margin-left: 0;
+.glyphicon-tent:before {
+ content: "\26fa";
}
-table .span13 {
- float: none;
- width: 1004px;
- margin-left: 0;
+.glyphicon-blackboard:before {
+ content: "\e218";
}
-table .span14 {
- float: none;
- width: 1084px;
- margin-left: 0;
+.glyphicon-bed:before {
+ content: "\e219";
}
-table .span15 {
- float: none;
- width: 1164px;
- margin-left: 0;
+.glyphicon-apple:before {
+ content: "\f8ff";
}
-table .span16 {
- float: none;
- width: 1244px;
- margin-left: 0;
+.glyphicon-erase:before {
+ content: "\e221";
}
-table .span17 {
- float: none;
- width: 1324px;
- margin-left: 0;
+.glyphicon-hourglass:before {
+ content: "\231b";
}
-table .span18 {
- float: none;
- width: 1404px;
- margin-left: 0;
+.glyphicon-lamp:before {
+ content: "\e223";
}
-table .span19 {
- float: none;
- width: 1484px;
- margin-left: 0;
+.glyphicon-duplicate:before {
+ content: "\e224";
}
-table .span20 {
- float: none;
- width: 1564px;
- margin-left: 0;
+.glyphicon-piggy-bank:before {
+ content: "\e225";
}
-table .span21 {
- float: none;
- width: 1644px;
- margin-left: 0;
+.glyphicon-scissors:before {
+ content: "\e226";
}
-table .span22 {
- float: none;
- width: 1724px;
- margin-left: 0;
+.glyphicon-bitcoin:before {
+ content: "\e227";
}
-table .span23 {
- float: none;
- width: 1804px;
- margin-left: 0;
+.glyphicon-btc:before {
+ content: "\e227";
}
-table .span24 {
- float: none;
- width: 1884px;
- margin-left: 0;
+.glyphicon-xbt:before {
+ content: "\e227";
}
-[class^="icon-"],
-[class*=" icon-"] {
- display: inline-block;
- width: 14px;
- height: 14px;
- line-height: 14px;
- vertical-align: text-top;
- background-image: url("../img/glyphicons-halflings.png");
- background-position: 14px 14px;
- background-repeat: no-repeat;
- *margin-right: .3em;
+.glyphicon-yen:before {
+ content: "\00a5";
}
-[class^="icon-"]:last-child,
-[class*=" icon-"]:last-child {
- *margin-left: 0;
+.glyphicon-jpy:before {
+ content: "\00a5";
}
-.icon-white {
- background-image: url("../img/glyphicons-halflings-white.png");
+.glyphicon-ruble:before {
+ content: "\20bd";
}
-.icon-glass {
- background-position: 0 0;
+.glyphicon-rub:before {
+ content: "\20bd";
}
-.icon-music {
- background-position: -24px 0;
+.glyphicon-scale:before {
+ content: "\e230";
}
-.icon-search {
- background-position: -48px 0;
+.glyphicon-ice-lolly:before {
+ content: "\e231";
}
-.icon-envelope {
- background-position: -72px 0;
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
}
-.icon-heart {
- background-position: -96px 0;
+.glyphicon-education:before {
+ content: "\e233";
}
-.icon-star {
- background-position: -120px 0;
+.glyphicon-option-horizontal:before {
+ content: "\e234";
}
-.icon-star-empty {
- background-position: -144px 0;
+.glyphicon-option-vertical:before {
+ content: "\e235";
}
-.icon-user {
- background-position: -168px 0;
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
}
-.icon-film {
- background-position: -192px 0;
+.glyphicon-modal-window:before {
+ content: "\e237";
}
-.icon-th-large {
- background-position: -216px 0;
+.glyphicon-oil:before {
+ content: "\e238";
}
-.icon-th {
- background-position: -240px 0;
+.glyphicon-grain:before {
+ content: "\e239";
}
-.icon-th-list {
- background-position: -264px 0;
+.glyphicon-sunglasses:before {
+ content: "\e240";
}
-.icon-ok {
- background-position: -288px 0;
+.glyphicon-text-size:before {
+ content: "\e241";
}
-.icon-remove {
- background-position: -312px 0;
+.glyphicon-text-color:before {
+ content: "\e242";
}
-.icon-zoom-in {
- background-position: -336px 0;
+.glyphicon-text-background:before {
+ content: "\e243";
}
-.icon-zoom-out {
- background-position: -360px 0;
+.glyphicon-object-align-top:before {
+ content: "\e244";
}
-.icon-off {
- background-position: -384px 0;
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
}
-.icon-signal {
- background-position: -408px 0;
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
}
-.icon-cog {
- background-position: -432px 0;
+.glyphicon-object-align-left:before {
+ content: "\e247";
}
-.icon-trash {
- background-position: -456px 0;
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
}
-.icon-home {
- background-position: 0 -24px;
+.glyphicon-object-align-right:before {
+ content: "\e249";
}
-.icon-file {
- background-position: -24px -24px;
+.glyphicon-triangle-right:before {
+ content: "\e250";
}
-.icon-time {
- background-position: -48px -24px;
+.glyphicon-triangle-left:before {
+ content: "\e251";
}
-.icon-road {
- background-position: -72px -24px;
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
}
-.icon-download-alt {
- background-position: -96px -24px;
+.glyphicon-triangle-top:before {
+ content: "\e253";
}
-.icon-download {
- background-position: -120px -24px;
+.glyphicon-console:before {
+ content: "\e254";
}
-.icon-upload {
- background-position: -144px -24px;
+.glyphicon-superscript:before {
+ content: "\e255";
}
-.icon-inbox {
- background-position: -168px -24px;
+.glyphicon-subscript:before {
+ content: "\e256";
}
-.icon-play-circle {
- background-position: -192px -24px;
+.glyphicon-menu-left:before {
+ content: "\e257";
}
-.icon-repeat {
- background-position: -216px -24px;
+.glyphicon-menu-right:before {
+ content: "\e258";
}
-.icon-refresh {
- background-position: -240px -24px;
+.glyphicon-menu-down:before {
+ content: "\e259";
}
-.icon-list-alt {
- background-position: -264px -24px;
+.glyphicon-menu-up:before {
+ content: "\e260";
}
-.icon-lock {
- background-position: -287px -24px;
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.icon-flag {
- background-position: -312px -24px;
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.icon-headphones {
- background-position: -336px -24px;
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
-.icon-volume-off {
- background-position: -360px -24px;
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
}
-.icon-volume-down {
- background-position: -384px -24px;
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
}
-.icon-volume-up {
- background-position: -408px -24px;
+a {
+ color: #337ab7;
+ text-decoration: none;
}
-.icon-qrcode {
- background-position: -432px -24px;
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
}
-.icon-barcode {
- background-position: -456px -24px;
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
}
-.icon-tag {
- background-position: 0 -48px;
+figure {
+ margin: 0;
}
-.icon-tags {
- background-position: -25px -48px;
+img {
+ vertical-align: middle;
}
-.icon-book {
- background-position: -48px -48px;
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
}
-.icon-bookmark {
- background-position: -72px -48px;
+.img-rounded {
+ border-radius: 6px;
}
-.icon-print {
- background-position: -96px -48px;
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
}
-.icon-camera {
- background-position: -120px -48px;
+.img-circle {
+ border-radius: 50%;
}
-.icon-font {
- background-position: -144px -48px;
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
}
-.icon-bold {
- background-position: -167px -48px;
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
}
-.icon-italic {
- background-position: -192px -48px;
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
}
-.icon-text-height {
- background-position: -216px -48px;
+[role="button"] {
+ cursor: pointer;
}
-.icon-text-width {
- background-position: -240px -48px;
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
}
-.icon-align-left {
- background-position: -264px -48px;
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
}
-.icon-align-center {
- background-position: -288px -48px;
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
}
-.icon-align-right {
- background-position: -312px -48px;
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
}
-.icon-align-justify {
- background-position: -336px -48px;
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
}
-.icon-list {
- background-position: -360px -48px;
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
}
-.icon-indent-left {
- background-position: -384px -48px;
+h1,
+.h1 {
+ font-size: 36px;
}
-.icon-indent-right {
- background-position: -408px -48px;
+h2,
+.h2 {
+ font-size: 30px;
}
-.icon-facetime-video {
- background-position: -432px -48px;
+h3,
+.h3 {
+ font-size: 24px;
}
-.icon-picture {
- background-position: -456px -48px;
+h4,
+.h4 {
+ font-size: 18px;
}
-.icon-pencil {
- background-position: 0 -72px;
+h5,
+.h5 {
+ font-size: 14px;
}
-.icon-map-marker {
- background-position: -24px -72px;
+h6,
+.h6 {
+ font-size: 12px;
}
-.icon-adjust {
- background-position: -48px -72px;
+p {
+ margin: 0 0 10px;
}
-.icon-tint {
- background-position: -72px -72px;
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
}
-.icon-edit {
- background-position: -96px -72px;
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
}
-.icon-share {
- background-position: -120px -72px;
+small,
+.small {
+ font-size: 85%;
}
-.icon-check {
- background-position: -144px -72px;
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
}
-.icon-move {
- background-position: -168px -72px;
+.text-left {
+ text-align: left;
}
-.icon-step-backward {
- background-position: -192px -72px;
+.text-right {
+ text-align: right;
}
-.icon-fast-backward {
- background-position: -216px -72px;
+.text-center {
+ text-align: center;
}
-.icon-backward {
- background-position: -240px -72px;
+.text-justify {
+ text-align: justify;
}
-.icon-play {
- background-position: -264px -72px;
+.text-nowrap {
+ white-space: nowrap;
}
-.icon-pause {
- background-position: -288px -72px;
+.text-lowercase {
+ text-transform: lowercase;
}
-.icon-stop {
- background-position: -312px -72px;
+.text-uppercase {
+ text-transform: uppercase;
}
-.icon-forward {
- background-position: -336px -72px;
+.text-capitalize {
+ text-transform: capitalize;
}
-.icon-fast-forward {
- background-position: -360px -72px;
+.text-muted {
+ color: #777;
}
-.icon-step-forward {
- background-position: -384px -72px;
+.text-primary {
+ color: #337ab7;
}
-.icon-eject {
- background-position: -408px -72px;
+a.text-primary:hover,
+a.text-primary:focus {
+ color: #286090;
}
-.icon-chevron-left {
- background-position: -432px -72px;
+.text-success {
+ color: #3c763d;
}
-.icon-chevron-right {
- background-position: -456px -72px;
+a.text-success:hover,
+a.text-success:focus {
+ color: #2b542c;
}
-.icon-plus-sign {
- background-position: 0 -96px;
+.text-info {
+ color: #31708f;
}
-.icon-minus-sign {
- background-position: -24px -96px;
+a.text-info:hover,
+a.text-info:focus {
+ color: #245269;
}
-.icon-remove-sign {
- background-position: -48px -96px;
+.text-warning {
+ color: #8a6d3b;
}
-.icon-ok-sign {
- background-position: -72px -96px;
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #66512c;
}
-.icon-question-sign {
- background-position: -96px -96px;
+.text-danger {
+ color: #a94442;
}
-.icon-info-sign {
- background-position: -120px -96px;
+a.text-danger:hover,
+a.text-danger:focus {
+ color: #843534;
}
-.icon-screenshot {
- background-position: -144px -96px;
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
}
-.icon-remove-circle {
- background-position: -168px -96px;
+a.bg-primary:hover,
+a.bg-primary:focus {
+ background-color: #286090;
}
-.icon-ok-circle {
- background-position: -192px -96px;
+.bg-success {
+ background-color: #dff0d8;
}
-.icon-ban-circle {
- background-position: -216px -96px;
+a.bg-success:hover,
+a.bg-success:focus {
+ background-color: #c1e2b3;
}
-.icon-arrow-left {
- background-position: -240px -96px;
+.bg-info {
+ background-color: #d9edf7;
}
-.icon-arrow-right {
- background-position: -264px -96px;
+a.bg-info:hover,
+a.bg-info:focus {
+ background-color: #afd9ee;
}
-.icon-arrow-up {
- background-position: -289px -96px;
+.bg-warning {
+ background-color: #fcf8e3;
}
-.icon-arrow-down {
- background-position: -312px -96px;
+a.bg-warning:hover,
+a.bg-warning:focus {
+ background-color: #f7ecb5;
}
-.icon-share-alt {
- background-position: -336px -96px;
+.bg-danger {
+ background-color: #f2dede;
}
-.icon-resize-full {
- background-position: -360px -96px;
+a.bg-danger:hover,
+a.bg-danger:focus {
+ background-color: #e4b9b9;
}
-.icon-resize-small {
- background-position: -384px -96px;
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
}
-.icon-plus {
- background-position: -408px -96px;
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
}
-.icon-minus {
- background-position: -433px -96px;
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
}
-.icon-asterisk {
- background-position: -456px -96px;
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
}
-.icon-exclamation-sign {
- background-position: 0 -120px;
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
}
-.icon-gift {
- background-position: -24px -120px;
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
}
-.icon-leaf {
- background-position: -48px -120px;
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
}
-.icon-fire {
- background-position: -72px -120px;
+dt,
+dd {
+ line-height: 1.42857143;
}
-.icon-eye-open {
- background-position: -96px -120px;
+dt {
+ font-weight: bold;
}
-.icon-eye-close {
- background-position: -120px -120px;
+dd {
+ margin-left: 0;
}
-.icon-warning-sign {
- background-position: -144px -120px;
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
}
-.icon-plane {
- background-position: -168px -120px;
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
}
-.icon-calendar {
- background-position: -192px -120px;
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
}
-.icon-random {
- background-position: -216px -120px;
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
}
-.icon-comment {
- background-position: -240px -120px;
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
}
-.icon-magnet {
- background-position: -264px -120px;
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
}
-.icon-chevron-up {
- background-position: -288px -120px;
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
}
-.icon-chevron-down {
- background-position: -313px -119px;
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
}
-.icon-retweet {
- background-position: -336px -120px;
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
}
-.icon-shopping-cart {
- background-position: -360px -120px;
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
}
-.icon-folder-close {
- background-position: -384px -120px;
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
-.icon-folder-open {
- background-position: -408px -120px;
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
}
-.icon-resize-vertical {
- background-position: -432px -119px;
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
}
-.icon-resize-horizontal {
- background-position: -456px -118px;
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
}
-.dropdown {
- position: relative;
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
}
-.dropdown-toggle {
- *margin-bottom: -3px;
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
- outline: 0;
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- vertical-align: top;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 4px solid #000000;
- opacity: 0.3;
- filter: alpha(opacity=30);
- content: "";
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
}
-.dropdown .caret {
- margin-top: 8px;
- margin-left: 2px;
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
}
-.dropdown:hover .caret,
-.open.dropdown .caret {
- opacity: 1;
- filter: alpha(opacity=100);
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- float: left;
- display: none;
- min-width: 160px;
- padding: 4px 0;
- margin: 0;
- list-style: none;
- background-color: #ffffff;
- border-color: #ccc;
- border-color: rgba(0, 0, 0, 0.2);
- border-style: solid;
- border-width: 1px;
- -webkit-border-radius: 0 0 5px 5px;
- -moz-border-radius: 0 0 5px 5px;
- border-radius: 0 0 5px 5px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
- *border-right-width: 2px;
- *border-bottom-width: 2px;
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
}
-.dropdown-menu .divider {
- height: 1px;
- margin: 8px 1px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
- *width: 100%;
- *margin: -5px 0 5px;
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
}
-.dropdown-menu a {
- display: block;
- padding: 3px 15px;
- clear: both;
- font-weight: normal;
- line-height: 18px;
- color: #333333;
- white-space: nowrap;
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
}
-.dropdown-menu li > a:hover,
-.dropdown-menu .active > a,
-.dropdown-menu .active > a:hover {
- color: #ffffff;
- text-decoration: none;
- background-color: #0088cc;
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
}
-.dropdown.open {
- *z-index: 1000;
+.col-xs-12 {
+ width: 100%;
}
-.dropdown.open .dropdown-toggle {
- color: #ffffff;
- background: #ccc;
- background: rgba(0, 0, 0, 0.3);
+.col-xs-11 {
+ width: 91.66666667%;
}
-.dropdown.open .dropdown-menu {
- display: block;
+.col-xs-10 {
+ width: 83.33333333%;
}
-.pull-right .dropdown-menu {
- left: auto;
- right: 0;
+.col-xs-9 {
+ width: 75%;
}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px solid #000000;
- content: "\2191";
+.col-xs-8 {
+ width: 66.66666667%;
}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
+.col-xs-7 {
+ width: 58.33333333%;
}
-.typeahead {
- margin-top: 2px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
+.col-xs-6 {
+ width: 50%;
}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #eee;
- border: 1px solid rgba(0, 0, 0, 0.05);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+.col-xs-5 {
+ width: 41.66666667%;
}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
+.col-xs-4 {
+ width: 33.33333333%;
}
-.well-large {
- padding: 24px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
+.col-xs-3 {
+ width: 25%;
}
-.well-small {
- padding: 9px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
+.col-xs-2 {
+ width: 16.66666667%;
}
-.fade {
- -webkit-transition: opacity 0.15s linear;
- -moz-transition: opacity 0.15s linear;
- -ms-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
- opacity: 0;
+.col-xs-1 {
+ width: 8.33333333%;
}
-.fade.in {
- opacity: 1;
+.col-xs-pull-12 {
+ right: 100%;
}
-.collapse {
- -webkit-transition: height 0.35s ease;
- -moz-transition: height 0.35s ease;
- -ms-transition: height 0.35s ease;
- -o-transition: height 0.35s ease;
- transition: height 0.35s ease;
- position: relative;
- overflow: hidden;
- height: 0;
+.col-xs-pull-11 {
+ right: 91.66666667%;
}
-.collapse.in {
- height: auto;
+.col-xs-pull-10 {
+ right: 83.33333333%;
}
-.close {
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: 18px;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
+.col-xs-pull-9 {
+ right: 75%;
}
-.close:hover {
- color: #000000;
- text-decoration: none;
- opacity: 0.4;
- filter: alpha(opacity=40);
- cursor: pointer;
+.col-xs-pull-8 {
+ right: 66.66666667%;
}
-.btn {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- padding: 4px 10px 4px;
- margin-bottom: 0;
- font-size: 13px;
- line-height: 18px;
- color: #333333;
- text-align: center;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- vertical-align: middle;
- background-color: #f5f5f5;
- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: linear-gradient(top, #ffffff, #e6e6e6);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
- border-color: #e6e6e6 #e6e6e6 #bfbfbf;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
- border: 1px solid #cccccc;
- border-bottom-color: #b3b3b3;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- cursor: pointer;
- *margin-left: .3em;
+.col-xs-pull-7 {
+ right: 58.33333333%;
}
-.btn:hover,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
- background-color: #e6e6e6;
+.col-xs-pull-6 {
+ right: 50%;
}
-.btn:active,
-.btn.active {
- background-color: #cccccc \9;
+.col-xs-pull-5 {
+ right: 41.66666667%;
}
-.btn:first-child {
- *margin-left: 0;
+.col-xs-pull-4 {
+ right: 33.33333333%;
}
-.btn:hover {
- color: #333333;
- text-decoration: none;
- background-color: #e6e6e6;
- background-position: 0 -15px;
- -webkit-transition: background-position 0.1s linear;
- -moz-transition: background-position 0.1s linear;
- -ms-transition: background-position 0.1s linear;
- -o-transition: background-position 0.1s linear;
- transition: background-position 0.1s linear;
-}
-.btn:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
+.col-xs-pull-3 {
+ right: 25%;
}
-.btn.active,
-.btn:active {
- background-image: none;
- -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- background-color: #e6e6e6;
- background-color: #d9d9d9 \9;
- outline: 0;
+.col-xs-pull-2 {
+ right: 16.66666667%;
}
-.btn.disabled,
-.btn[disabled] {
- cursor: default;
- background-image: none;
- background-color: #e6e6e6;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
+.col-xs-pull-1 {
+ right: 8.33333333%;
}
-.btn-large {
- padding: 9px 14px;
- font-size: 15px;
- line-height: normal;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
+.col-xs-pull-0 {
+ right: auto;
}
-.btn-large [class^="icon-"] {
- margin-top: 1px;
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ background-color: transparent;
+}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #eee;
+ opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"].form-control,
+ input[type="time"].form-control,
+ input[type="datetime-local"].form-control,
+ input[type="month"].form-control {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ min-height: 34px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.form-group-sm select.form-control {
+ height: 30px;
+ line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 6px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.form-group-lg select.form-control {
+ height: 46px;
+ line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 11px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.333333px;
+ font-size: 18px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ font-size: 12px;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+.btn-default:hover {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #333;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #286090;
+ border-color: #122b40;
+}
+.btn-primary:hover {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+ color: #fff;
+ background-color: #204d74;
+ border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #255625;
+}
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+ color: #fff;
+ background-color: #398439;
+ border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1b6d85;
+}
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+ color: #fff;
+ background-color: #269abc;
+ border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #985f0d;
+}
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+ color: #fff;
+ background-color: #d58512;
+ border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #761c19;
+}
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+ color: #fff;
+ background-color: #ac2925;
+ border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-top: 4px solid \9;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px dashed;
+ border-bottom: 4px solid \9;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ z-index: 2;
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ z-index: 3;
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
}
-.btn-small {
- padding: 5px 9px;
- font-size: 11px;
- line-height: 16px;
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
}
-.btn-small [class^="icon-"] {
- margin-top: -1px;
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
}
-.btn-mini {
- padding: 2px 6px;
- font-size: 11px;
- line-height: 14px;
-}
-.btn-primary,
-.btn-primary:hover,
-.btn-warning,
-.btn-warning:hover,
-.btn-danger,
-.btn-danger:hover,
-.btn-success,
-.btn-success:hover,
-.btn-info,
-.btn-info:hover,
-.btn-inverse,
-.btn-inverse:hover {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- color: #ffffff;
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
- color: rgba(255, 255, 255, 0.75);
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
}
-.btn-primary {
- background-color: #0074cc;
- background-image: -moz-linear-gradient(top, #0088cc, #0055cc);
- background-image: -ms-linear-gradient(top, #0088cc, #0055cc);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));
- background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);
- background-image: -o-linear-gradient(top, #0088cc, #0055cc);
- background-image: linear-gradient(top, #0088cc, #0055cc);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);
- border-color: #0055cc #0055cc #003580;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
}
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
- background-color: #0055cc;
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #004099 \9;
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
}
-.btn-warning {
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -ms-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(top, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
- border-color: #f89406 #f89406 #ad6704;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+.pager li {
+ display: inline;
}
-.btn-warning:hover,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
- background-color: #f89406;
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #c67605 \9;
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
}
-.btn-danger {
- background-color: #da4f49;
- background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: linear-gradient(top, #ee5f5b, #bd362f);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
- border-color: #bd362f #bd362f #802420;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+.pager .next > a,
+.pager .next > span {
+ float: right;
}
-.btn-danger:hover,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
- background-color: #bd362f;
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #942a25 \9;
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
}
-.btn-success {
- background-color: #5bb75b;
- background-image: -moz-linear-gradient(top, #62c462, #51a351);
- background-image: -ms-linear-gradient(top, #62c462, #51a351);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
- background-image: -webkit-linear-gradient(top, #62c462, #51a351);
- background-image: -o-linear-gradient(top, #62c462, #51a351);
- background-image: linear-gradient(top, #62c462, #51a351);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
- border-color: #51a351 #51a351 #387038;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
}
-.btn-success:hover,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
- background-color: #51a351;
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
}
-.btn-success:active,
-.btn-success.active {
- background-color: #408140 \9;
+.label:empty {
+ display: none;
}
-.btn-info {
- background-color: #49afcd;
- background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
- background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: linear-gradient(top, #5bc0de, #2f96b4);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
- border-color: #2f96b4 #2f96b4 #1f6377;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+.btn .label {
+ position: relative;
+ top: -1px;
}
-.btn-info:hover,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
- background-color: #2f96b4;
+.label-default {
+ background-color: #777;
}
-.btn-info:active,
-.btn-info.active {
- background-color: #24748c \9;
-}
-.btn-inverse {
- background-color: #414141;
- background-image: -moz-linear-gradient(top, #555555, #222222);
- background-image: -ms-linear-gradient(top, #555555, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));
- background-image: -webkit-linear-gradient(top, #555555, #222222);
- background-image: -o-linear-gradient(top, #555555, #222222);
- background-image: linear-gradient(top, #555555, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);
- border-color: #222222 #222222 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-.btn-inverse:hover,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
- background-color: #222222;
-}
-.btn-inverse:active,
-.btn-inverse.active {
- background-color: #080808 \9;
-}
-button.btn,
-input[type="submit"].btn {
- *padding-top: 2px;
- *padding-bottom: 2px;
-}
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
- padding: 0;
- border: 0;
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
}
-button.btn.btn-large,
-input[type="submit"].btn.btn-large {
- *padding-top: 7px;
- *padding-bottom: 7px;
+.label-primary {
+ background-color: #337ab7;
}
-button.btn.btn-small,
-input[type="submit"].btn.btn-small {
- *padding-top: 3px;
- *padding-bottom: 3px;
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
}
-button.btn.btn-mini,
-input[type="submit"].btn.btn-mini {
- *padding-top: 1px;
- *padding-bottom: 1px;
+.label-success {
+ background-color: #5cb85c;
}
-.btn-group {
- position: relative;
- *zoom: 1;
- *margin-left: .3em;
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
}
-.btn-group:before,
-.btn-group:after {
- display: table;
- content: "";
+.label-info {
+ background-color: #5bc0de;
}
-.btn-group:after {
- clear: both;
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
}
-.btn-group:first-child {
- *margin-left: 0;
+.label-warning {
+ background-color: #f0ad4e;
}
-.btn-group + .btn-group {
- margin-left: 5px;
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
}
-.btn-toolbar {
- margin-top: 9px;
- margin-bottom: 9px;
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
}
-.btn-toolbar .btn-group {
+.badge {
display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
}
-.btn-group .btn {
+.btn .badge {
position: relative;
- float: left;
- margin-left: -1px;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
+ top: -1px;
}
-.btn-group .btn:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+ top: 0;
+ padding: 1px 5px;
}
-.btn-group .btn:last-child,
-.btn-group .dropdown-toggle {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
}
-.btn-group .btn.large:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 6px;
- -moz-border-radius-topleft: 6px;
- border-top-left-radius: 6px;
- -webkit-border-bottom-left-radius: 6px;
- -moz-border-radius-bottomleft: 6px;
- border-bottom-left-radius: 6px;
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
}
-.btn-group .btn.large:last-child,
-.btn-group .large.dropdown-toggle {
- -webkit-border-top-right-radius: 6px;
- -moz-border-radius-topright: 6px;
- border-top-right-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
- -moz-border-radius-bottomright: 6px;
- border-bottom-right-radius: 6px;
+.list-group-item > .badge {
+ float: right;
}
-.btn-group .btn:hover,
-.btn-group .btn:focus,
-.btn-group .btn:active,
-.btn-group .btn.active {
- z-index: 2;
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
}
-.btn-group .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- *padding-top: 3px;
- *padding-bottom: 3px;
+.jumbotron {
+ padding-top: 30px;
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
}
-.btn-group .btn-mini.dropdown-toggle {
- padding-left: 5px;
- padding-right: 5px;
- *padding-top: 1px;
- *padding-bottom: 1px;
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
}
-.btn-group .btn-small.dropdown-toggle {
- *padding-top: 4px;
- *padding-bottom: 4px;
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
}
-.btn-group .btn-large.dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
}
-.btn-group.open {
- *z-index: 1000;
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 6px;
}
-.btn-group.open .dropdown-menu {
- display: block;
- margin-top: 1px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
+.jumbotron .container {
+ max-width: 100%;
}
-.btn-group.open .dropdown-toggle {
- background-image: none;
- -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
}
-.btn .caret {
- margin-top: 7px;
- margin-left: 0;
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
}
-.btn:hover .caret,
-.open.btn-group .caret {
- opacity: 1;
- filter: alpha(opacity=100);
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
}
-.btn-mini .caret {
- margin-top: 5px;
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
}
-.btn-small .caret {
- margin-top: 6px;
-}
-.btn-large .caret {
- margin-top: 6px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #000000;
-}
-.btn-primary .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
- opacity: 0.75;
- filter: alpha(opacity=75);
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
}
.alert {
- padding: 8px 35px 8px 14px;
- margin-bottom: 18px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- background-color: #fcf8e3;
- border: 1px solid #fbeed5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
border-radius: 4px;
- color: #c09853;
}
-.alert-heading {
+.alert h4 {
+ margin-top: 0;
color: inherit;
}
-.alert .close {
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
position: relative;
top: -2px;
right: -21px;
- line-height: 18px;
+ color: inherit;
}
.alert-success {
+ color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
- color: #468847;
}
-.alert-danger,
-.alert-error {
- background-color: #f2dede;
- border-color: #eed3d7;
- color: #b94a48;
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
}
.alert-info {
+ color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
- color: #3a87ad;
-}
-.alert-block {
- padding-top: 14px;
- padding-bottom: 14px;
}
-.alert-block > p,
-.alert-block > ul {
- margin-bottom: 0;
-}
-.alert-block p + p {
- margin-top: 5px;
+.alert-info hr {
+ border-top-color: #a6e1ec;
}
-.nav {
- margin-left: 0;
- margin-bottom: 18px;
- list-style: none;
+.alert-info .alert-link {
+ color: #245269;
}
-.nav > li > a {
- display: block;
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
}
-.nav > li > a:hover {
- text-decoration: none;
- background-color: #eeeeee;
+.alert-warning hr {
+ border-top-color: #f7e1b5;
}
-.nav .nav-header {
- display: block;
- padding: 3px 15px;
- font-size: 11px;
- font-weight: bold;
- line-height: 18px;
- color: #999999;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- text-transform: uppercase;
+.alert-warning .alert-link {
+ color: #66512c;
}
-.nav li + .nav-header {
- margin-top: 9px;
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
}
-.nav-list {
- padding-left: 15px;
- padding-right: 15px;
- margin-bottom: 0;
+.alert-danger hr {
+ border-top-color: #e4b9c0;
}
-.nav-list > li > a,
-.nav-list .nav-header {
- margin-left: -15px;
- margin-right: -15px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+.alert-danger .alert-link {
+ color: #843534;
}
-.nav-list > li > a {
- padding: 3px 15px;
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
}
-.nav-list > .active > a,
-.nav-list > .active > a:hover {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
- background-color: #0088cc;
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
}
-.nav-list [class^="icon-"] {
- margin-right: 2px;
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
}
-.nav-list .divider {
- height: 1px;
- margin: 8px 1px;
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
- *width: 100%;
- *margin: -5px 0 5px;
-}
-.nav-tabs,
-.nav-pills {
- *zoom: 1;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
- display: table;
- content: "";
-}
-.nav-tabs:after,
-.nav-pills:after {
- clear: both;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
}
-.nav-tabs > li,
-.nav-pills > li {
+.progress-bar {
float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
}
-.nav-tabs > li > a,
-.nav-pills > li > a {
- padding-right: 12px;
- padding-left: 12px;
- margin-right: 2px;
- line-height: 14px;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- line-height: 18px;
- border: 1px solid transparent;
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #dddddd;
-}
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover {
- color: #555555;
- background-color: #ffffff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-.nav-pills > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- margin-top: 2px;
- margin-bottom: 2px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover {
- color: #ffffff;
- background-color: #0088cc;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li > a {
- margin-right: 0;
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
}
-.nav-tabs.nav-stacked {
- border-bottom: 0;
+.progress-bar-success {
+ background-color: #5cb85c;
}
-.nav-tabs.nav-stacked > li > a {
- border: 1px solid #ddd;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
-.nav-tabs.nav-stacked > li:first-child > a {
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+.progress-bar-info {
+ background-color: #5bc0de;
}
-.nav-tabs.nav-stacked > li:last-child > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
-.nav-tabs.nav-stacked > li > a:hover {
- border-color: #ddd;
- z-index: 2;
+.progress-bar-warning {
+ background-color: #f0ad4e;
}
-.nav-pills.nav-stacked > li > a {
- margin-bottom: 3px;
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
-.nav-pills.nav-stacked > li:last-child > a {
- margin-bottom: 1px;
+.progress-bar-danger {
+ background-color: #d9534f;
}
-.nav-tabs .dropdown-menu,
-.nav-pills .dropdown-menu {
- margin-top: 1px;
- border-width: 1px;
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
}
-.nav-pills .dropdown-menu {
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
+.media {
+ margin-top: 15px;
}
-.nav-tabs .dropdown-toggle .caret,
-.nav-pills .dropdown-toggle .caret {
- border-top-color: #0088cc;
- border-bottom-color: #0088cc;
- margin-top: 6px;
+.media:first-child {
+ margin-top: 0;
}
-.nav-tabs .dropdown-toggle:hover .caret,
-.nav-pills .dropdown-toggle:hover .caret {
- border-top-color: #005580;
- border-bottom-color: #005580;
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
}
-.nav-tabs .active .dropdown-toggle .caret,
-.nav-pills .active .dropdown-toggle .caret {
- border-top-color: #333333;
- border-bottom-color: #333333;
+.media-body {
+ width: 10000px;
}
-.nav > .dropdown.active > a:hover {
- color: #000000;
- cursor: pointer;
+.media-object {
+ display: block;
}
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > .open.active > a:hover {
- color: #ffffff;
- background-color: #999999;
- border-color: #999999;
-}
-.nav .open .caret,
-.nav .open.active .caret,
-.nav .open a:hover .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
- opacity: 1;
- filter: alpha(opacity=100);
+.media-object.img-thumbnail {
+ max-width: none;
}
-.tabs-stacked .open > a:hover {
- border-color: #999999;
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
}
-.tabbable {
- *zoom: 1;
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
}
-.tabbable:before,
-.tabbable:after {
- display: table;
- content: "";
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
}
-.tabbable:after {
- clear: both;
+.media-middle {
+ vertical-align: middle;
}
-.tab-content {
- display: table;
- width: 100%;
+.media-bottom {
+ vertical-align: bottom;
}
-.tabs-below .nav-tabs,
-.tabs-right .nav-tabs,
-.tabs-left .nav-tabs {
- border-bottom: 0;
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
}
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
- display: none;
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
}
-.tab-content > .active,
-.pill-content > .active {
+.list-group-item {
+ position: relative;
display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
}
-.tabs-below .nav-tabs {
- border-top: 1px solid #ddd;
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
}
-.tabs-below .nav-tabs > li {
- margin-top: -1px;
+.list-group-item:last-child {
margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
}
-.tabs-below .nav-tabs > li > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
+a.list-group-item,
+button.list-group-item {
+ color: #555;
}
-.tabs-below .nav-tabs > li > a:hover {
- border-bottom-color: transparent;
- border-top-color: #ddd;
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+ color: #333;
}
-.tabs-below .nav-tabs .active > a,
-.tabs-below .nav-tabs .active > a:hover {
- border-color: transparent #ddd #ddd #ddd;
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
}
-.tabs-left .nav-tabs > li,
-.tabs-right .nav-tabs > li {
- float: none;
+button.list-group-item {
+ width: 100%;
+ text-align: left;
}
-.tabs-left .nav-tabs > li > a,
-.tabs-right .nav-tabs > li > a {
- min-width: 74px;
- margin-right: 0;
- margin-bottom: 3px;
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
}
-.tabs-left .nav-tabs {
- float: left;
- margin-right: 19px;
- border-right: 1px solid #ddd;
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
}
-.tabs-left .nav-tabs > li > a {
- margin-right: -1px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
}
-.tabs-left .nav-tabs > li > a:hover {
- border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
}
-.tabs-left .nav-tabs .active > a,
-.tabs-left .nav-tabs .active > a:hover {
- border-color: #ddd transparent #ddd #ddd;
- *border-right-color: #ffffff;
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
}
-.tabs-right .nav-tabs {
- float: right;
- margin-left: 19px;
- border-left: 1px solid #ddd;
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
}
-.tabs-right .nav-tabs > li > a {
- margin-left: -1px;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #3c763d;
}
-.tabs-right .nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+ color: inherit;
}
-.tabs-right .nav-tabs .active > a,
-.tabs-right .nav-tabs .active > a:hover {
- border-color: #ddd #ddd #ddd transparent;
- *border-left-color: #ffffff;
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
}
-.navbar {
- *position: relative;
- *z-index: 2;
- overflow: visible;
- margin-bottom: 18px;
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #31708f;
}
-.navbar-inner {
- padding-left: 20px;
- padding-right: 20px;
- background-color: #2c2c2c;
- background-image: -moz-linear-gradient(top, #333333, #222222);
- background-image: -ms-linear-gradient(top, #333333, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
- background-image: -webkit-linear-gradient(top, #333333, #222222);
- background-image: -o-linear-gradient(top, #333333, #222222);
- background-image: linear-gradient(top, #333333, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+ color: inherit;
}
-.navbar .container {
- width: auto;
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
}
-.btn-navbar {
- display: none;
- float: right;
- padding: 7px 10px;
- margin-left: 5px;
- margin-right: 5px;
- background-color: #2c2c2c;
- background-image: -moz-linear-gradient(top, #333333, #222222);
- background-image: -ms-linear-gradient(top, #333333, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
- background-image: -webkit-linear-gradient(top, #333333, #222222);
- background-image: -o-linear-gradient(top, #333333, #222222);
- background-image: linear-gradient(top, #333333, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
- border-color: #222222 #222222 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-.btn-navbar:hover,
-.btn-navbar:active,
-.btn-navbar.active,
-.btn-navbar.disabled,
-.btn-navbar[disabled] {
- background-color: #222222;
-}
-.btn-navbar:active,
-.btn-navbar.active {
- background-color: #080808 \9;
-}
-.btn-navbar .icon-bar {
- display: block;
- width: 18px;
- height: 2px;
- background-color: #f5f5f5;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
- -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #8a6d3b;
}
-.btn-navbar .icon-bar + .icon-bar {
- margin-top: 3px;
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+ color: inherit;
}
-.nav-collapse.collapse {
- height: auto;
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
}
-.navbar {
- color: #999999;
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #a94442;
}
-.navbar .brand:hover {
- text-decoration: none;
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+ color: inherit;
}
-.navbar .brand {
- float: left;
- display: block;
- padding: 8px 20px 12px;
- margin-left: -20px;
- font-size: 20px;
- font-weight: 200;
- line-height: 1;
- color: #ffffff;
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
}
-.navbar .navbar-text {
+.list-group-item-text {
margin-bottom: 0;
- line-height: 40px;
+ line-height: 1.3;
}
-.navbar .btn,
-.navbar .btn-group {
- margin-top: 5px;
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
}
-.navbar .btn-group .btn {
- margin-top: 0;
+.panel-body {
+ padding: 15px;
}
-.navbar-form {
- margin-bottom: 0;
- *zoom: 1;
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
}
-.navbar-form:before,
-.navbar-form:after {
- display: table;
- content: "";
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
}
-.navbar-form:after {
- clear: both;
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
}
-.navbar-form input,
-.navbar-form select,
-.navbar-form .radio,
-.navbar-form .checkbox {
- margin-top: 5px;
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+ color: inherit;
}
-.navbar-form input,
-.navbar-form select {
- display: inline-block;
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
margin-bottom: 0;
}
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
- margin-top: 3px;
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
}
-.navbar-form .input-append,
-.navbar-form .input-prepend {
- margin-top: 6px;
- white-space: nowrap;
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
}
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
- margin-top: 0;
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
}
-.navbar-search {
- position: relative;
- float: left;
- margin-top: 6px;
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
margin-bottom: 0;
}
-.navbar-search .search-query {
- padding: 4px 9px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- color: #ffffff;
- background-color: #626262;
- border: 1px solid #151515;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
- -webkit-transition: none;
- -moz-transition: none;
- -ms-transition: none;
- -o-transition: none;
- transition: none;
-}
-.navbar-search .search-query:-moz-placeholder {
- color: #cccccc;
-}
-.navbar-search .search-query::-webkit-input-placeholder {
- color: #cccccc;
-}
-.navbar-search .search-query:focus,
-.navbar-search .search-query.focused {
- padding: 5px 10px;
- color: #333333;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #ffffff;
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
border: 0;
- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- outline: 0;
}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- margin-bottom: 0;
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
}
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
- padding-left: 0;
- padding-right: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
}
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
}
-.navbar-fixed-top {
- top: 0;
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
}
-.navbar-fixed-bottom {
- bottom: 0;
+.panel-group {
+ margin-bottom: 20px;
}
-.navbar .nav {
- position: relative;
- left: 0;
- display: block;
- float: left;
- margin: 0 10px 0 0;
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
}
-.navbar .nav.pull-right {
- float: right;
+.panel-group .panel + .panel {
+ margin-top: 5px;
}
-.navbar .nav > li {
- display: block;
- float: left;
+.panel-group .panel-heading {
+ border-bottom: 0;
}
-.navbar .nav > li > a {
- float: none;
- padding: 10px 10px 11px;
- line-height: 19px;
- color: #999999;
- text-decoration: none;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
}
-.navbar .nav > li > a:hover {
- background-color: transparent;
- color: #ffffff;
- text-decoration: none;
+.panel-group .panel-footer {
+ border-top: 0;
}
-.navbar .nav .active > a,
-.navbar .nav .active > a:hover {
- color: #ffffff;
- text-decoration: none;
- background-color: #222222;
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
}
-.navbar .divider-vertical {
- height: 40px;
- width: 1px;
- margin: 0 9px;
- overflow: hidden;
- background-color: #222222;
- border-right: 1px solid #333333;
+.panel-default {
+ border-color: #ddd;
}
-.navbar .nav.pull-right {
- margin-left: 10px;
- margin-right: 0;
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
}
-.navbar .dropdown-menu {
- margin-top: 1px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
}
-.navbar .dropdown-menu:before {
- content: '';
- display: inline-block;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-bottom-color: rgba(0, 0, 0, 0.2);
- position: absolute;
- top: -7px;
- left: 9px;
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
}
-.navbar .dropdown-menu:after {
- content: '';
- display: inline-block;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid #ffffff;
- position: absolute;
- top: -6px;
- left: 10px;
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
}
-.navbar-fixed-bottom .dropdown-menu:before {
- border-top: 7px solid #ccc;
- border-top-color: rgba(0, 0, 0, 0.2);
- border-bottom: 0;
- bottom: -7px;
- top: auto;
+.panel-primary {
+ border-color: #337ab7;
}
-.navbar-fixed-bottom .dropdown-menu:after {
- border-top: 6px solid #ffffff;
- border-bottom: 0;
- bottom: -6px;
- top: auto;
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
}
-.navbar .nav .dropdown-toggle .caret,
-.navbar .nav .open.dropdown .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
}
-.navbar .nav .active .caret {
- opacity: 1;
- filter: alpha(opacity=100);
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
}
-.navbar .nav .open > .dropdown-toggle,
-.navbar .nav .active > .dropdown-toggle,
-.navbar .nav .open.active > .dropdown-toggle {
- background-color: transparent;
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
}
-.navbar .nav .active > .dropdown-toggle:hover {
- color: #ffffff;
+.panel-success {
+ border-color: #d6e9c6;
}
-.navbar .nav.pull-right .dropdown-menu,
-.navbar .nav .dropdown-menu.pull-right {
- left: auto;
- right: 0;
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
}
-.navbar .nav.pull-right .dropdown-menu:before,
-.navbar .nav .dropdown-menu.pull-right:before {
- left: auto;
- right: 12px;
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
}
-.navbar .nav.pull-right .dropdown-menu:after,
-.navbar .nav .dropdown-menu.pull-right:after {
- left: auto;
- right: 13px;
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
}
-.breadcrumb {
- padding: 7px 14px;
- margin: 0 0 18px;
- list-style: none;
- background-color: #fbfbfb;
- background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
- background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
- background-image: linear-gradient(top, #ffffff, #f5f5f5);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
- border: 1px solid #ddd;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
}
-.breadcrumb li {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- text-shadow: 0 1px 0 #ffffff;
+.panel-info {
+ border-color: #bce8f1;
}
-.breadcrumb .divider {
- padding: 0 5px;
- color: #999999;
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
}
-.breadcrumb .active a {
- color: #333333;
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
}
-.pagination {
- height: 36px;
- margin: 18px 0;
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
}
-.pagination ul {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- margin-left: 0;
- margin-bottom: 0;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
}
-.pagination li {
- display: inline;
+.panel-warning {
+ border-color: #faebcc;
}
-.pagination a {
- float: left;
- padding: 0 14px;
- line-height: 34px;
- text-decoration: none;
- border: 1px solid #ddd;
- border-left-width: 0;
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
}
-.pagination a:hover,
-.pagination .active a {
- background-color: #f5f5f5;
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
}
-.pagination .active a {
- color: #999999;
- cursor: default;
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
}
-.pagination .disabled span,
-.pagination .disabled a,
-.pagination .disabled a:hover {
- color: #999999;
- background-color: transparent;
- cursor: default;
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
}
-.pagination li:first-child a {
- border-left-width: 1px;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
+.panel-danger {
+ border-color: #ebccd1;
}
-.pagination li:last-child a {
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
}
-.pagination-centered {
- text-align: center;
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
}
-.pagination-right {
- text-align: right;
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
}
-.pager {
- margin-left: 0;
- margin-bottom: 18px;
- list-style: none;
- text-align: center;
- *zoom: 1;
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
}
-.pager:before,
-.pager:after {
- display: table;
- content: "";
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
}
-.pager:after {
- clear: both;
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
}
-.pager li {
- display: inline;
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
}
-.pager a {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
}
-.pager a:hover {
- text-decoration: none;
- background-color: #f5f5f5;
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
}
-.pager .next a {
+.close {
float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
}
-.pager .previous a {
- float: left;
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
}
-.pager .disabled a,
-.pager .disabled a:hover {
- color: #999999;
- background-color: #fff;
- cursor: default;
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
}
-.modal-open .dropdown-menu {
- z-index: 2050;
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
}
-.modal-open .dropdown.open {
- *z-index: 2050;
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
}
-.modal-open .popover {
- z-index: 2060;
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
}
-.modal-open .tooltip {
- z-index: 2070;
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-backdrop {
position: fixed;
@@ -3261,730 +5967,834 @@ input[type="submit"].btn.btn-mini {
bottom: 0;
left: 0;
z-index: 1040;
- background-color: #000000;
+ background-color: #000;
}
.modal-backdrop.fade {
+ filter: alpha(opacity=0);
opacity: 0;
}
-.modal-backdrop,
-.modal-backdrop.fade.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.modal {
- position: fixed;
- top: 50%;
- left: 50%;
- z-index: 1050;
- overflow: auto;
- width: 560px;
- margin: -250px 0 0 -280px;
- background-color: #ffffff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.3);
- *border: 1px solid #999;
- /* IE6-7 */
-
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-.modal.fade {
- -webkit-transition: opacity .3s linear, top .3s ease-out;
- -moz-transition: opacity .3s linear, top .3s ease-out;
- -ms-transition: opacity .3s linear, top .3s ease-out;
- -o-transition: opacity .3s linear, top .3s ease-out;
- transition: opacity .3s linear, top .3s ease-out;
- top: -25%;
-}
-.modal.fade.in {
- top: 50%;
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
}
.modal-header {
- padding: 9px 15px;
- border-bottom: 1px solid #eee;
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
- margin-top: 2px;
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
}
.modal-body {
- overflow-y: auto;
- max-height: 400px;
+ position: relative;
padding: 15px;
}
-.modal-form {
- margin-bottom: 0;
-}
.modal-footer {
- padding: 14px 15px 15px;
- margin-bottom: 0;
+ padding: 15px;
text-align: right;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
- *zoom: 1;
-}
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: "";
-}
-.modal-footer:after {
- clear: both;
+ border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
- margin-left: 5px;
margin-bottom: 0;
+ margin-left: 5px;
}
.modal-footer .btn-group .btn + .btn {
margin-left: -1px;
}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
.tooltip {
position: absolute;
- z-index: 1020;
+ z-index: 1070;
display: block;
- visibility: visible;
- padding: 5px;
- font-size: 11px;
- opacity: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
filter: alpha(opacity=0);
+ opacity: 0;
+
+ line-break: auto;
}
.tooltip.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
+ filter: alpha(opacity=90);
+ opacity: .9;
}
.tooltip.top {
- margin-top: -2px;
+ padding: 5px 0;
+ margin-top: -3px;
}
.tooltip.right {
- margin-left: 2px;
+ padding: 0 5px;
+ margin-left: 3px;
}
.tooltip.bottom {
- margin-top: 2px;
+ padding: 5px 0;
+ margin-top: 3px;
}
.tooltip.left {
- margin-left: -2px;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-left: 5px solid #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 5px solid #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid #000000;
+ padding: 0 5px;
+ margin-left: -3px;
}
.tooltip-inner {
max-width: 200px;
padding: 3px 8px;
- color: #ffffff;
+ color: #fff;
text-align: center;
- text-decoration: none;
- background-color: #000000;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
+ background-color: #000;
border-radius: 4px;
}
.tooltip-arrow {
position: absolute;
width: 0;
height: 0;
+ border-color: transparent;
+ border-style: solid;
}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1010;
- display: none;
- padding: 5px;
-}
-.popover.top {
- margin-top: -5px;
-}
-.popover.right {
- margin-left: 5px;
-}
-.popover.bottom {
- margin-top: 5px;
-}
-.popover.left {
- margin-left: -5px;
-}
-.popover.top .arrow {
+.tooltip.top .tooltip-arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #000000;
-}
-.popover.right .arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid #000000;
-}
-.popover.bottom .arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 5px solid #000000;
-}
-.popover.left .arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-left: 5px solid #000000;
-}
-.popover .arrow {
- position: absolute;
- width: 0;
- height: 0;
-}
-.popover-inner {
- padding: 3px;
- width: 280px;
- overflow: hidden;
- background: #000000;
- background: rgba(0, 0, 0, 0.8);
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-}
-.popover-title {
- padding: 9px 15px;
- line-height: 1;
- background-color: #f5f5f5;
- border-bottom: 1px solid #eee;
- -webkit-border-radius: 3px 3px 0 0;
- -moz-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-}
-.popover-content {
- padding: 14px;
- background-color: #ffffff;
- -webkit-border-radius: 0 0 3px 3px;
- -moz-border-radius: 0 0 3px 3px;
- border-radius: 0 0 3px 3px;
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-.popover-content p,
-.popover-content ul,
-.popover-content ol {
- margin-bottom: 0;
-}
-.thumbnails {
- margin-left: -20px;
- list-style: none;
- *zoom: 1;
-}
-.thumbnails:before,
-.thumbnails:after {
- display: table;
- content: "";
-}
-.thumbnails:after {
- clear: both;
-}
-.thumbnails > li {
- float: left;
- margin: 0 0 18px 20px;
-}
-.thumbnail {
- display: block;
- padding: 4px;
- line-height: 1;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-a.thumbnail:hover {
- border-color: #0088cc;
- -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-.thumbnail > img {
- display: block;
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
-}
-.thumbnail .caption {
- padding: 9px;
-}
-.label {
- padding: 1px 4px 2px;
- font-size: 10.998px;
- font-weight: bold;
- line-height: 13px;
- color: #ffffff;
- vertical-align: middle;
- white-space: nowrap;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #999999;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.label:hover {
- color: #ffffff;
- text-decoration: none;
-}
-.label-important {
- background-color: #b94a48;
-}
-.label-important:hover {
- background-color: #953b39;
-}
-.label-warning {
- background-color: #f89406;
-}
-.label-warning:hover {
- background-color: #c67605;
-}
-.label-success {
- background-color: #468847;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
}
-.label-success:hover {
- background-color: #356635;
-}
-.label-info {
- background-color: #3a87ad;
-}
-.label-info:hover {
- background-color: #2d6987;
-}
-.label-inverse {
- background-color: #333333;
-}
-.label-inverse:hover {
- background-color: #1a1a1a;
-}
-.badge {
- padding: 1px 9px 2px;
- font-size: 12.025px;
- font-weight: bold;
- white-space: nowrap;
- color: #ffffff;
- background-color: #999999;
- -webkit-border-radius: 9px;
- -moz-border-radius: 9px;
- border-radius: 9px;
-}
-.badge:hover {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
-}
-.badge-error {
- background-color: #b94a48;
-}
-.badge-error:hover {
- background-color: #953b39;
-}
-.badge-warning {
- background-color: #f89406;
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
}
-.badge-warning:hover {
- background-color: #c67605;
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
}
-.badge-success {
- background-color: #468847;
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
}
-.badge-success:hover {
- background-color: #356635;
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
}
-.badge-info {
- background-color: #3a87ad;
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
}
-.badge-info:hover {
- background-color: #2d6987;
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
}
-.badge-inverse {
- background-color: #333333;
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
}
-.badge-inverse:hover {
- background-color: #1a1a1a;
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+ line-break: auto;
}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
+.popover.top {
+ margin-top: -10px;
}
-@-moz-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
+.popover.right {
+ margin-left: 10px;
}
-@-ms-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
+.popover.bottom {
+ margin-top: 10px;
}
-@keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
+.popover.left {
+ margin-left: -10px;
}
-.progress {
- overflow: hidden;
- height: 18px;
- margin-bottom: 18px;
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
background-color: #f7f7f7;
- background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
- background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.progress .bar {
- width: 0%;
- height: 18px;
- color: #ffffff;
- font-size: 12px;
- text-align: center;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e90d2;
- background-image: -moz-linear-gradient(top, #149bdf, #0480be);
- background-image: -ms-linear-gradient(top, #149bdf, #0480be);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
- background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
- background-image: -o-linear-gradient(top, #149bdf, #0480be);
- background-image: linear-gradient(top, #149bdf, #0480be);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: width 0.6s ease;
- -moz-transition: width 0.6s ease;
- -ms-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
-}
-.progress-striped .bar {
- background-color: #149bdf;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- -moz-background-size: 40px 40px;
- -o-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .bar {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -moz-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-danger .bar {
- background-color: #dd514c;
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: linear-gradient(top, #ee5f5b, #c43c35);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-}
-.progress-danger.progress-striped .bar {
- background-color: #ee5f5b;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-success .bar {
- background-color: #5eb95e;
- background-image: -moz-linear-gradient(top, #62c462, #57a957);
- background-image: -ms-linear-gradient(top, #62c462, #57a957);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
- background-image: -webkit-linear-gradient(top, #62c462, #57a957);
- background-image: -o-linear-gradient(top, #62c462, #57a957);
- background-image: linear-gradient(top, #62c462, #57a957);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-}
-.progress-success.progress-striped .bar {
- background-color: #62c462;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-info .bar {
- background-color: #4bb1cf;
- background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
- background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
- background-image: linear-gradient(top, #5bc0de, #339bb9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
}
-.progress-info.progress-striped .bar {
- background-color: #5bc0de;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-warning .bar {
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -ms-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(top, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+.popover-content {
+ padding: 9px 14px;
}
-.progress-warning.progress-striped .bar {
- background-color: #fbb450;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
}
-.accordion {
- margin-bottom: 18px;
+.popover > .arrow {
+ border-width: 11px;
}
-.accordion-group {
- margin-bottom: 2px;
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
}
-.accordion-heading {
- border-bottom: 0;
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
}
-.accordion-heading .accordion-toggle {
- display: block;
- padding: 8px 15px;
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
}
-.accordion-inner {
- padding: 9px 15px;
- border-top: 1px solid #e5e5e5;
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
}
.carousel {
position: relative;
- margin-bottom: 18px;
- line-height: 1;
}
.carousel-inner {
- overflow: hidden;
- width: 100%;
position: relative;
+ width: 100%;
+ overflow: hidden;
}
-.carousel .item {
- display: none;
+.carousel-inner > .item {
position: relative;
- -webkit-transition: 0.6s ease-in-out left;
- -moz-transition: 0.6s ease-in-out left;
- -ms-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
}
-.carousel .item > img {
- display: block;
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
line-height: 1;
}
-.carousel .active,
-.carousel .next,
-.carousel .prev {
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
display: block;
}
-.carousel .active {
+.carousel-inner > .active {
left: 0;
}
-.carousel .next,
-.carousel .prev {
+.carousel-inner > .next,
+.carousel-inner > .prev {
position: absolute;
top: 0;
width: 100%;
}
-.carousel .next {
+.carousel-inner > .next {
left: 100%;
}
-.carousel .prev {
+.carousel-inner > .prev {
left: -100%;
}
-.carousel .next.left,
-.carousel .prev.right {
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
left: 0;
}
-.carousel .active.left {
+.carousel-inner > .active.left {
left: -100%;
}
-.carousel .active.right {
+.carousel-inner > .active.right {
left: 100%;
}
.carousel-control {
position: absolute;
- top: 40%;
- left: 15px;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- font-size: 60px;
- font-weight: 100;
- line-height: 30px;
- color: #ffffff;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
text-align: center;
- background: #222222;
- border: 3px solid #ffffff;
- -webkit-border-radius: 23px;
- -moz-border-radius: 23px;
- border-radius: 23px;
- opacity: 0.5;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
}
.carousel-control.right {
+ right: 0;
left: auto;
- right: 15px;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
}
-.carousel-control:hover {
- color: #ffffff;
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
text-decoration: none;
- opacity: 0.9;
filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
}
-.carousel-caption {
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 10px 15px 5px;
- background: #333333;
- background: rgba(0, 0, 0, 0.75);
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ margin-top: -10px;
}
-.carousel-caption h4,
-.carousel-caption p {
- color: #ffffff;
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ font-family: serif;
+ line-height: 1;
}
-.hero-unit {
- padding: 60px;
- margin-bottom: 30px;
- background-color: #eeeeee;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
+.carousel-control .icon-prev:before {
+ content: '\2039';
}
-.hero-unit h1 {
- margin-bottom: 0;
- font-size: 60px;
- line-height: 1;
- color: inherit;
- letter-spacing: -1px;
+.carousel-control .icon-next:before {
+ content: '\203a';
}
-.hero-unit p {
- font-size: 18px;
- font-weight: 200;
- line-height: 27px;
- color: inherit;
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
}
.pull-right {
- float: right;
+ float: right !important;
}
.pull-left {
- float: left;
+ float: left !important;
}
.hide {
- display: none;
+ display: none !important;
}
.show {
- display: block;
+ display: block !important;
}
.invisible {
visibility: hidden;
}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table !important;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table !important;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table !important;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table !important;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table !important;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/app/assets/stylesheets/screen.css b/app/assets/stylesheets/screen.css
index 5f0ee48af..af50c30de 100644
--- a/app/assets/stylesheets/screen.css
+++ b/app/assets/stylesheets/screen.css
@@ -1,12 +1,3 @@
-html {
- height: 100%;
-}
-
-body {
- height: 100%;
- margin: 0;
-}
-
h1, h2 {
text-align: center;
margin: 20px 0 10px;
@@ -50,9 +41,26 @@ input#user_existing {
}
form select, button.btn, input[type="submit"].btn {
- width: 210px;
}
+.btn-primary {
+ color: #ffffff;
+ background-color: #8871B3;
+ border-color: #8871B3;
+}
+
+.btn-secondary {
+ color: #fff;
+ background-color: #396B80;
+ border-color: #2e6da4;
+}
+
+.btn-secondary:hover {
+ color: #fff;
+ background-color: #005596;
+}
+
+
form input.search-query {
-moz-border-radius: 14px;
-webkit-border-radius: 14px;
@@ -60,16 +68,6 @@ form input.search-query {
margin-bottom: 0;
padding-left: 14px;
padding-right: 14px;
- width: 180px;
-}
-
-.sidebar p {
- padding: 0 20px;
- margin: 0;
-}
-
-a.btn {
- width: 188px;
}
.table {
@@ -102,9 +100,6 @@ a.btn {
}
.sidebar {
- width: 250px;
- border-right: 1px solid #ccc;
- text-align: center;
}
.sidebar .control-group {
@@ -112,23 +107,11 @@ a.btn {
}
.sidebar .form-actions {
- padding: 17px 20px 10px;
}
.sidebar p#tagline {
color: #ffffff;
- background-color: #c43c35;
- background-repeat: repeat-x;
- background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: linear-gradient(top, #ee5f5b, #c43c35);
- border-color: #c43c35 #c43c35 #882a25;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+ background-color: #8871B3;
padding: 10px 20px;
text-align: center;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
@@ -172,7 +155,7 @@ a.btn {
}
.map-container {
- width: auto;
+ padding: 0;
}
#map {
diff --git a/app/controllers/addresses_controller.rb b/app/controllers/addresses_controller.rb
index 4800a8a1d..6411a1edd 100644
--- a/app/controllers/addresses_controller.rb
+++ b/app/controllers/addresses_controller.rb
@@ -1,10 +1,12 @@
+# frozen_string_literal: true
+
class AddressesController < ApplicationController
respond_to :json
def show
@address = Address.geocode("#{params[:address]}, #{params[:city_state]}")
if @address.blank?
- render(json: {errors: {address: [t('errors.not_found', thing: t('defaults.address'))]}}, status: 404)
+ render(json: {errors: {address: [t('errors.not_found', thing: t('defaults.address'))]}}, status: :not_found)
else
respond_with @address
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7fad37356..ebb897fff 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
@@ -5,8 +7,17 @@ class ApplicationController < ActionController::Base
before_action :set_flash_from_params
before_action :set_locale
+ force_ssl if: :ssl_configured?
+
protected
+ def require_admin
+ return if user_signed_in? && current_user.admin?
+
+ flash[:error] = 'You must be an admin'
+ redirect_to root_path
+ end
+
def set_flash_from_params
params.fetch(:flash, []).each do |key, message|
flash.now[key.to_sym] = message
@@ -14,9 +25,10 @@ def set_flash_from_params
end
def set_locale
- available_languages = Dir.glob(Rails.root + 'config/locales/??.yml').collect do |file|
- File.basename(file, '.yml')
- end
- I18n.locale = http_accept_language.compatible_language_from(available_languages) || I18n.default_locale
+ I18n.locale = :en
+ end
+
+ def ssl_configured?
+ Rails.env.production?
end
end
diff --git a/app/controllers/info_window_controller.rb b/app/controllers/info_window_controller.rb
index 8e1508f4e..aaac10870 100644
--- a/app/controllers/info_window_controller.rb
+++ b/app/controllers/info_window_controller.rb
@@ -1,6 +1,8 @@
+# frozen_string_literal: true
+
class InfoWindowController < ApplicationController
def index
- @thing = Thing.find_by_id(params[:thing_id])
+ @thing = Thing.find_by(id: params[:thing_id])
view = begin
if @thing.adopted?
user_signed_in? && current_user == @thing.user ? 'users/thank_you' : 'users/profile'
diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb
index 6519d7b99..102d9c233 100644
--- a/app/controllers/main_controller.rb
+++ b/app/controllers/main_controller.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
class MainController < ApplicationController
end
diff --git a/app/controllers/passwords_controller.rb b/app/controllers/passwords_controller.rb
index 68b694a60..70a02f259 100644
--- a/app/controllers/passwords_controller.rb
+++ b/app/controllers/passwords_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class PasswordsController < Devise::PasswordsController
def create
self.resource = resource_class.send_reset_password_instructions(resource_params)
@@ -5,24 +7,30 @@ def create
if successfully_sent?(resource)
render(json: {success: true})
else
- render(json: {errors: resource.errors}, status: 500)
+ render(json: {errors: resource.errors}, status: :internal_server_error)
end
end
def edit
self.resource = resource_class.new
resource.reset_password_token = params[:reset_password_token]
- render('edit', layout: 'info_window')
+ @reset_password_token = params[:reset_password_token]
+
+ render('main/index')
end
def update
self.resource = resource_class.reset_password_by_token(resource_params)
+
yield resource if block_given?
- if resource.errors.empty?
- resource.unlock_access! if unlockable?(resource)
- sign_in(resource_name, resource)
- end
- redirect_to(controller: 'main', action: 'index')
+
+ return render(json: {errors: resource.errors}, status: :internal_server_error) unless resource.errors.empty?
+
+ resource.unlock_access! if unlockable?(resource)
+ sign_in(resource_name, resource)
+
+ flash[:notice] = 'Password updated!'
+ render json: {}
end
private
diff --git a/app/controllers/reminders_controller.rb b/app/controllers/reminders_controller.rb
index acfa5ede7..9703ea07e 100644
--- a/app/controllers/reminders_controller.rb
+++ b/app/controllers/reminders_controller.rb
@@ -1,15 +1,19 @@
+# frozen_string_literal: true
+
class RemindersController < ApplicationController
respond_to :json
+ before_action :require_admin
+
def create
@reminder = Reminder.new(reminder_params)
@reminder.from_user = current_user
if @reminder.save
- ThingMailer.reminder(@reminder.thing).deliver
- @reminder.update_attribute(:sent, true)
+ ThingMailer.reminder(@reminder.thing).deliver_later
+ @reminder.update(sent: true)
render(json: @reminder)
else
- render(json: {errors: @reminder.errors}, status: 500)
+ render(json: {errors: @reminder.errors}, status: :internal_server_error)
end
end
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index b759846f9..d620eda25 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class SessionsController < Devise::SessionsController
skip_before_action :verify_authenticity_token, only: [:destroy]
@@ -12,7 +14,7 @@ def create
yield resource if block_given?
render(json: resource)
else
- render(json: {errors: {password: [t('errors.password')]}}, status: 401)
+ render(json: {errors: {password: [t('errors.password')]}}, status: :unauthorized)
end
end
diff --git a/app/controllers/sidebar_controller.rb b/app/controllers/sidebar_controller.rb
index d0e17ddb8..f76c5201b 100644
--- a/app/controllers/sidebar_controller.rb
+++ b/app/controllers/sidebar_controller.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
class SidebarController < ApplicationController
end
diff --git a/app/controllers/sitemaps_controller.rb b/app/controllers/sitemaps_controller.rb
index 3f6ff0158..bafb63f57 100644
--- a/app/controllers/sitemaps_controller.rb
+++ b/app/controllers/sitemaps_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class SitemapsController < ApplicationController
respond_to :xml
end
diff --git a/app/controllers/things_controller.rb b/app/controllers/things_controller.rb
index 6074e89ea..a7d66db8f 100644
--- a/app/controllers/things_controller.rb
+++ b/app/controllers/things_controller.rb
@@ -1,10 +1,12 @@
+# frozen_string_literal: true
+
class ThingsController < ApplicationController
respond_to :json
def show
@things = Thing.find_closest(params[:lat], params[:lng], params[:limit] || 10)
if @things.blank?
- render(json: {errors: {address: [t('errors.not_found', thing: t('defaults.thing'))]}}, status: 404)
+ render(json: {errors: {address: [t('errors.not_found', thing: t('defaults.thing'))]}}, status: :not_found)
else
respond_with @things
end
@@ -12,16 +14,27 @@ def show
def update
@thing = Thing.find(params[:id])
- if @thing.update_attributes(thing_params)
+ if @thing.update(thing_params)
+ send_adoption_email(@thing.user, @thing) if @thing.adopted?
+
respond_with @thing
else
- render(json: {errors: @thing.errors}, status: 500)
+ render(json: {errors: @thing.errors}, status: :internal_server_error)
end
end
private
+ def send_adoption_email(user, thing)
+ case user.things.count
+ when 1
+ ThingMailer.first_adoption_confirmation(thing).deliver_later
+ when 2
+ ThingMailer.second_adoption_confirmation(thing).deliver_later
+ end
+ end
+
def thing_params
- params.require(:thing).permit(:name, :user_id)
+ params.require(:thing).permit(:adopted_name, :user_id)
end
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 9463aff76..305a7108a 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class UsersController < Devise::RegistrationsController
def edit
render('sidebar/edit_profile', layout: 'sidebar')
@@ -7,12 +9,12 @@ def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
if update_resource(resource, account_update_params)
yield resource if block_given?
- sign_in(resource_name, resource, bypass: true)
+ sign_in(resource_name, resource, bypass_sign_in: true)
flash[:notice] = 'Profile updated!'
redirect_to(controller: 'sidebar', action: 'search')
else
clean_up_passwords(resource)
- render(json: {errors: resource.errors}, status: 500)
+ render(json: {errors: resource.errors}, status: :internal_server_error)
end
end
@@ -24,17 +26,17 @@ def create
render(json: resource)
else
clean_up_passwords(resource)
- render(json: {errors: resource.errors}, status: 500)
+ render(json: {errors: resource.errors}, status: :internal_server_error)
end
end
private
def sign_up_params
- params.require(:user).permit(:email, :name, :organization, :password, :password_confirmation, :sms_number, :voice_number)
+ params.require(:user).permit(:email, :first_name, :last_name, :organization, :password, :password_confirmation, :sms_number, :voice_number)
end
def account_update_params
- params.require(:user).permit(:address_1, :address_2, :city, :current_password, :email, :name, :organization, :password, :password_confirmation, :remember_me, :sms_number, :state, :voice_number, :zip)
+ params.require(:user).permit(:address_1, :address_2, :city, :current_password, :email, :first_name, :last_name, :organization, :password, :password_confirmation, :remember_me, :sms_number, :state, :voice_number, :zip)
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index f64830735..9965eed90 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module ApplicationHelper
def us_states # rubocop:disable MethodLength
[
diff --git a/app/helpers/reminders_helper.rb b/app/helpers/reminders_helper.rb
index 1d8669d2a..42845fb92 100644
--- a/app/helpers/reminders_helper.rb
+++ b/app/helpers/reminders_helper.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
module RemindersHelper
end
diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb
index 309f8b2eb..97aeb4cf0 100644
--- a/app/helpers/sessions_helper.rb
+++ b/app/helpers/sessions_helper.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
module SessionsHelper
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 2310a240d..4dc909ed6 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
module UsersHelper
end
diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb
index eeead45fc..4ada0f472 100644
--- a/app/helpers/welcome_helper.rb
+++ b/app/helpers/welcome_helper.rb
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
module WelcomeHelper
end
diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb
new file mode 100644
index 000000000..4b30f3070
--- /dev/null
+++ b/app/mailers/application_mailer.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+class ApplicationMailer < ActionMailer::Base
+ default from: 'Adopt a Drain SF '
+ layout 'mailer'
+end
diff --git a/app/mailers/devise_mailer.rb b/app/mailers/devise_mailer.rb
new file mode 100644
index 000000000..6b280f632
--- /dev/null
+++ b/app/mailers/devise_mailer.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class DeviseMailer < Devise::Mailer
+ def reset_password_instructions(record, token, opts = {})
+ mail = super
+ mail.subject = t('devise.mailer.reset_password_instructions.subject', title: t('titles.main', thing: t('defaults.thing')))
+ mail
+ end
+end
diff --git a/app/mailers/thing_mailer.rb b/app/mailers/thing_mailer.rb
index abb6b9293..adae0e0a3 100644
--- a/app/mailers/thing_mailer.rb
+++ b/app/mailers/thing_mailer.rb
@@ -1,9 +1,43 @@
-class ThingMailer < ActionMailer::Base
- default from: 'adoptahydrant@cityofboston.gov'
+# frozen_string_literal: true
+
+class ThingMailer < ApplicationMailer
+ def first_adoption_confirmation(thing)
+ @thing = thing
+ @user = thing.user
+
+ mail(to: @user.email, subject: ["Thanks for adopting a drain, #{@user.name.split.first}!"])
+ end
+
+ def second_adoption_confirmation(thing)
+ @thing = thing
+ @user = thing.user
+ mail(to: @user.email, subject: ["Thanks for adopting another drain, #{@user.name.split.first}!"])
+ end
+
+ def third_adoption_confirmation(thing)
+ @thing = thing
+ @user = thing.user
+ mail(to: @user.email, subject: ["We really do love you, #{@user.name.split.first}!"])
+ end
def reminder(thing)
@thing = thing
@user = thing.user
- mail(to: thing.user.email, subject: ['Remember to shovel', thing.name].compact.join(' '))
+ mail(to: @user.email, subject: ['Remember to clear your adopted drain'])
+ end
+
+ # rubocop:disable Metrics/AbcSize
+ def thing_update_report(deleted_things_with_adoptee, deleted_things_no_adoptee, created_things)
+ @deleted_thing_ids_with_adoptee = deleted_things_with_adoptee.map { |t| t['city_id'] }
+ @deleted_thing_ids_with_no_adoptee = deleted_things_no_adoptee.map { |t| t['city_id'] }
+ @created_thing_ids = created_things.map { |t| t['city_id'] }
+ subject = t('subjects.update_report',
+ title: t('titles.main', thing: t('defaults.thing').titleize),
+ deleted_adopted_count: deleted_things_with_adoptee.count,
+ created_count: created_things.count,
+ deleted_unadopted_count: deleted_things_no_adoptee.count,
+ things: t('defaults.things'))
+ mail(to: User.where(admin: true).pluck(:email), subject: subject)
end
+ # rubocop:enable Metrics/AbcSize
end
diff --git a/app/models/address.rb b/app/models/address.rb
index 17ea065e8..4cc8de720 100644
--- a/app/models/address.rb
+++ b/app/models/address.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class Address
include Geokit::Geocoders
diff --git a/app/models/reminder.rb b/app/models/reminder.rb
index 734c1ad27..ca138c76d 100644
--- a/app/models/reminder.rb
+++ b/app/models/reminder.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class Reminder < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
belongs_to :from_user, class_name: 'User'
diff --git a/app/models/thing.rb b/app/models/thing.rb
index 47d207a6d..f8ca5bdc7 100644
--- a/app/models/thing.rb
+++ b/app/models/thing.rb
@@ -1,25 +1,40 @@
-require 'geokit'
+# frozen_string_literal: true
+
+require 'open-uri'
+require 'csv'
class Thing < ActiveRecord::Base
+ acts_as_paranoid
extend Forwardable
include ActiveModel::ForbiddenAttributesProtection
+
+ VALID_DRAIN_TYPES = ['Storm Water Inlet Drain', 'Catch Basin Drain'].freeze
+
belongs_to :user
def_delegators :reverse_geocode, :city, :country, :country_code,
:full_address, :state, :street_address, :street_name,
:street_number, :zip
- has_many :reminders
+ has_many :reminders, dependent: :destroy
validates :city_id, uniqueness: true, allow_nil: true
validates :lat, presence: true
validates :lng, presence: true
+ validates :name, obscenity: true
+
+ scope :adopted, -> { where.not(user_id: nil) }
def self.find_closest(lat, lng, limit = 10)
query = <<-SQL
- SELECT *, (3959 * ACOS(COS(RADIANS(?)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(lat)))) AS distance
+ SELECT *, earth_distance(ll_to_earth(lat, lng), ll_to_earth(?, ?)) as distance
FROM things
+ WHERE deleted_at is NULL
ORDER BY distance
LIMIT ?
SQL
- find_by_sql([query, lat.to_f, lng.to_f, lat.to_f, limit.to_i])
+ find_by_sql([query, lat.to_f, lng.to_f, limit.to_i])
+ end
+
+ def display_name
+ (adopted? ? adopted_name : name) || ''
end
def reverse_geocode
@@ -29,4 +44,18 @@ def reverse_geocode
def adopted?
!user.nil?
end
+
+ # Link to more details about type of Thing
+ #
+ # Currently hardcoding since we only have one special case, but we should
+ # move this into the database if we add an additional
+ def detail_link
+ return 'http://sfwater.org/index.aspx?page=399' if system_use_code == 'MS4'
+
+ nil
+ end
+
+ def as_json(options = {})
+ super({methods: [:display_name]}.merge(options))
+ end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index dfee94abb..942a52a16 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,12 +1,15 @@
+# frozen_string_literal: true
+
class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
devise :database_authenticatable, :registerable, :recoverable, :rememberable,
:trackable, :validatable
before_validation :remove_non_digits_from_phone_numbers
- has_many :reminders_from, class_name: 'Reminder', foreign_key: 'from_user_id'
- has_many :reminders_to, class_name: 'Reminder', foreign_key: 'to_user_id'
- has_many :things
- validates :name, presence: true
+ has_many :reminders_from, class_name: 'Reminder', foreign_key: 'from_user_id', dependent: :destroy
+ has_many :reminders_to, class_name: 'Reminder', foreign_key: 'to_user_id', dependent: :destroy
+ has_many :things, dependent: :nullify
+ validates :first_name, presence: true
+ validates :last_name, presence: true, on: :create # requirement was added later, grandfather in users
validates_formatting_of :email, using: :email
validates_formatting_of :sms_number, using: :us_phone, allow_blank: true
validates_formatting_of :voice_number, using: :us_phone, allow_blank: true
@@ -16,4 +19,8 @@ def remove_non_digits_from_phone_numbers
self.sms_number = sms_number.to_s.gsub(/\D/, '').to_i if sms_number.present?
self.voice_number = voice_number.to_s.gsub(/\D/, '').to_i if voice_number.present?
end
+
+ def name
+ [first_name, last_name].reject(&:blank?).join(' ')
+ end
end
diff --git a/app/views/layouts/_flash.html.haml b/app/views/layouts/_flash.html.haml
index fc1ef3163..a08803bcd 100644
--- a/app/views/layouts/_flash.html.haml
+++ b/app/views/layouts/_flash.html.haml
@@ -5,14 +5,20 @@
%p
= flash[:notice]
- if flash[:warning]
- .alert.fade.in{:"data-alert" => true}
+ .alert.alert-warning.fade.in{:"data-alert" => true}
%a{:class => "close", :"data-dismiss" => "alert", :href => "#"}
×
%p
= flash[:warning]
- if flash[:error]
- .alert.alert-error.fade.in{:"data-alert" => true}
+ .alert.alert-danger.fade.in{:"data-alert" => true}
%a{:class => "close", :"data-dismiss" => "alert", :href => "#"}
×
%p
= flash[:error]
+- if flash[:alert]
+ .alert.alert-danger.fade.in{:"data-alert" => true}
+ %a{:class => "close", :"data-dismiss" => "alert", :href => "#"}
+ ×
+ %p
+ = flash[:alert]
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index e78d8cf2a..32ce54e35 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -4,13 +4,25 @@
%title
= t("titles.main", :thing => t("defaults.thing").titleize)
= csrf_meta_tag
- %meta{:name => "viewport", :content => "width=800, user-scalable=no"}
+ %meta{:name => "viewport", :content => "width=device-width, initial-scale=1"}
+ %meta{:name => "twitter:card", :content => "summary"}
+ %meta{:name => "twitter:site", :content => "@SFWater"}
+ %meta{:name => "twitter:title", :content => t("titles.main", :thing => t("defaults.thing").titleize)}
+ %meta{:name => "twitter:description", :content => t("site.description")}
+ %meta{:name => "twitter:image", :content => image_url('logos/adopt-a-drain-horizontal.png')}
+ %meta{:property => "og:description", :content => t("site.description")}
+ %meta{:property => "og:type", :content => "article"}
+ %meta{:property => "og:url", :content => root_url}
+ %meta{:property => "og:title", :content => t("titles.main", :thing => t("defaults.thing").titleize)}
+ %meta{:property => "og:site_name", :content => t("titles.main", :thing => t("defaults.thing").titleize)}
+ %meta{:property => "og:image", :content => image_url('logos/adopt-a-drain-horizontal.png')}
+ %meta{:property => "og:locale", :content => "en_US"}
/ HTML5 shim, for IE6-8 support of HTML5 elements
/[if lt IE 9]
= javascript_include_tag "//html5shim.googlecode.com/svn/trunk/html5.js"
- = javascript_include_tag "//maps.google.com/maps/api/js?sensor=false&language=#{I18n.locale}"
- = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"
- = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
+ = javascript_include_tag "//maps.google.com/maps/api/js?sensor=false&language=#{I18n.locale}&key=#{Rails.application.secrets.google_maps_javascript_api_key}"
+ = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"
+ = javascript_include_tag "//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"
= javascript_include_tag "application"
- if Rails.env.production? && ENV['GOOGLE_ANALYTICS_ID'].present?
%script{:type => "text/javascript"}
@@ -21,6 +33,9 @@
ga('create', '#{ENV['GOOGLE_ANALYTICS_ID']}', '#{ENV['GOOGLE_ANALYTICS_DOMAIN']}');
ga('send', 'pageview');
+ = stylesheet_link_tag "//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"
+ %script{:type => "text/javascript"}
+ if (!window.console) window.console = {log: function() {}};
= stylesheet_link_tag "application"
%body
= yield
diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb
new file mode 100644
index 000000000..37f0bddbd
--- /dev/null
+++ b/app/views/layouts/mailer.text.erb
@@ -0,0 +1 @@
+<%= yield %>
diff --git a/app/views/main/index.html.haml b/app/views/main/index.html.haml
index e7f69fa62..107e5a24d 100644
--- a/app/views/main/index.html.haml
+++ b/app/views/main/index.html.haml
@@ -1,35 +1,74 @@
-.table
- .table-row
- .table-cell.sidebar
- %h1
- = image_tag "logos/adopt-a-hydrant.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize)
- %p.alert-message.block-message#tagline
- = t("defaults.tagline")
- #content
- = render :partial => "layouts/flash", :locals => {:flash => flash}
- - if signed_in?
- = render :partial => "sidebar/search"
- - else
- = render :partial => "sidebar/combo_form"
- #logos
- #col1
- %a{:href => "http://codeforamerica.org/"}
- = image_tag "logos/cfa.png", :alt => t("sponsors.cfa"), :title => t("sponsors.cfa")
- %br
- %a{:href => "http://bostonbuilt.org/"}
- = image_tag "logos/bostonbuilt.png", :alt => t("sponsors.built"), :title => t("sponsors.built")
- #col2
- %a{:href => "http://www.cityofboston.gov/"}
- = image_tag "logos/boston.png", :alt => t("sponsors.city"), :title => t("sponsors.city")
- %p#mayor
- %a{:href => "http://www.cityofboston.gov/mayor/"}
- = "#{t("sponsors.mayor.name")},"
- %em
- = t("sponsors.mayor.title")
- #feedback
- %p
- %a{:href => URI.escape("mailto:adoptahydrant@cityofboston.gov?subject=#{t("titles.main", :thing => t("defaults.thing").titleize)} - #{t("links.feedback").titleize}")}
- = t("links.feedback")
- .table-cell.map-container
+.container-fluid{:class => (signed_in? ? "signed-in" : nil)}
+ .row
+ .sidebar
+ .navbar.navbar-default
+ %a{href: root_url}
+ = image_tag "logos/adopt-a-drain.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize)
+ %button.navbar-toggle{"data-target" => "#bs-example-navbar-collapse-1", "data-toggle" => "collapse", :type => "button"}
+ %span.sr-only Toggle navigation
+ %span.icon-bar
+ %span.icon-bar
+ %span.icon-bar
+ .sidebar-content
+ -# Corresponds to guideline div below
+ %div.hidden-xs
+ %h3.text-center
+ = t("titles.adopted_tagline", :count => Thing.adopted.count, :things => t("defaults.things"))
+ .small
+ Last updated
+ = local_date(Time.now, '%B %e, %Y')
+ %a.guidelines{:href => "#guidelines", :"data-toggle" => "modal", :"data-target" => "#guidelines"}
+ %button.btn.btn-block.btn-primary#tagline
+ = t("defaults.tagline")
+ #content
+ = render :partial => "layouts/flash", :locals => {:flash => flash}
+ - if signed_in?
+ = render :partial => "sidebar/search"
+ - elsif @reset_password_token.present?
+ = render :partial => 'passwords/edit'
+ - else
+ %iframe{ :width => "100%", :src => "https://www.youtube.com/embed/Z1Vjrx3IAH0", :frameborder => "0", :allowfullscreen => "allowfullscreen" }
+ = render :partial => "sidebar/search"
+ -# Corresponds to guideline div above
+ %div.hidden.visible-xs-block
+ %a.guidelines{:href => "#guidelines", :"data-toggle" => "modal", :"data-target" => "#guidelines"}
+ %button.btn.btn-block.btn-primary#tagline
+ = t("defaults.tagline")
+ #logos
+ .row
+ .col-xs-4
+ %a{:href => "https://sfwater.org/index.aspx?page=1184"}
+ = image_tag "logos/sfpuc.png", :alt => t("sponsors.sfpuc"), :title => t("sponsors.sfpuc"), :class => "puc"
+ .col-xs-4
+ %a{:href => "http://sfdpw.org/"}
+ = image_tag "logos/SFPWlogo.jpg", :alt => t("sponsors.sfpw"), :title => t("sponsors.sfpw"), :class => "dpw"
+ .col-xs-4
+ %a{:href => "http://datasf.org/"}
+ = image_tag "logos/DataSFLogo.png", :alt => t("sponsors.datasf"), :title => t("sponsors.datasf"), :class => "datasf"
+ .row
+ .col-xs-4
+ %a{:href => "http://codeforsanfrancisco.org/"}
+ = image_tag "logos/codeforsanfrancisco.png", :alt => t("sponsors.built"), :title => t("sponsors.built"), :class => "cfsf"
+ .col-xs-4
+ %a{:href => "http://codeforamerica.org/"}
+ = image_tag "logos/cfa.jpg", :alt => t("sponsors.cfa"), :title => t("sponsors.cfa"), :class => "cfa"
+ .col-xs-4
+ %a{:href => "http://tech.sfgov.org/"}
+ = image_tag "logos/dtlogo.png", :alt => t("sponsors.dt"), :title => t("sponsors.dt"), :class => "dt"
+ .col-md-9.map-container
#map
+ #legend
+ .title
+ Legend
+ .show-hide
+ %a#toggleLegend{:href=>"#"}
+ Hide
+ = render :partial => "sidebar/tos"
+ = render :partial => "sidebar/guidelines"
+:javascript
+ $(function() {
+ $('.navbar-toggle').on('click', function(){
+ $('div.sidebar').toggleClass('sidebar-full');
+ });
+ });
diff --git a/app/views/main/unauthenticated.html.haml b/app/views/main/unauthenticated.html.haml
index 65fce7d1e..80774cdab 100644
--- a/app/views/main/unauthenticated.html.haml
+++ b/app/views/main/unauthenticated.html.haml
@@ -2,8 +2,8 @@
.table-row
.table-cell.sidebar
%h1
- = image_tag "logos/adopt-a-hydrant.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize)
- %p.alert-message.block-message#tagline
+ = image_tag "logos/adopt-a-drain.png", :alt => t("titles.main", :thing => t("defaults.thing").titleize), :title => t("titles.main", :thing => t("defaults.thing").titleize)
+ %button.btn.btn-block.btn-primary#tagline
= t("defaults.tagline")
#content
= render :partial => "sidebar/combo_form"
@@ -13,7 +13,7 @@
%a{:href => "http://bostonbuilt.org/"}
= image_tag "logos/boston.png", :alt => t("sponsors.city"), :title => t("sponsors.city")
#feedback
- %a{:href => URI.escape("mailto:adoptahydrant@cityofboston.gov?subject=#{t("titles.main", :thing => t("defaults.thing").titleize)} #{t("links.feedback").titleize}")}
+ %a{:href => URI.escape("mailto:adoptadrain@cityofboston.gov?subject=#{t("titles.main", :thing => t("defaults.thing").titleize)} #{t("links.feedback").titleize}")}
= t("links.feedback")
.table-cell#map
diff --git a/app/views/passwords/_edit.html.haml b/app/views/passwords/_edit.html.haml
new file mode 100644
index 000000000..136b033f7
--- /dev/null
+++ b/app/views/passwords/_edit.html.haml
@@ -0,0 +1,14 @@
+= form_for resource, :as => resource_name, :url => password_path(resource_name), :html => {:id => "password_edit_form", :method => :put} do |f|
+ %fieldset.form-group
+ %label{:for => "user_password", :id => "user_password_label", :class => 'control-label'}
+ = t("labels.password_reset")
+ %small
+ = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
+ = f.password_field "password", :class => "form-control"
+ .help-block
+ = f.hidden_field "reset_password_token"
+ .help-block
+ %fieldset.form-actions
+ = f.submit t("buttons.update"), :class => "btn btn-primary btn-block"
+ %a{:href => combo_form_path, :class => "link btn btn-default"}
+ = t("buttons.back")
diff --git a/app/views/passwords/edit.html.haml b/app/views/passwords/edit.html.haml
index bbbe7b287..6ba62a0c4 100644
--- a/app/views/passwords/edit.html.haml
+++ b/app/views/passwords/edit.html.haml
@@ -3,7 +3,7 @@
= form_for resource, :as => resource_name, :url => password_path(resource_name), :html => {:id => "edit_form", :method => :put} do |f|
= f.hidden_field "reset_password_token"
%fieldset.control-group
- = f.label "password", t("labels.password_new"), :id => "user_password_label"
+ = f.label "password", t("labels.password_new"), :id => "user_password_label", :class => "control-label"
= f.password_field "password"
%fieldset.form-actions
= f.submit t("buttons.change_password"), :class => "btn"
diff --git a/app/views/sidebar/_combo_form.html.haml b/app/views/sidebar/_combo_form.html.haml
index 0f166cd23..fadc1574f 100644
--- a/app/views/sidebar/_combo_form.html.haml
+++ b/app/views/sidebar/_combo_form.html.haml
@@ -1,69 +1,74 @@
= form_for :user, :html => {:id => "combo-form", :class => "form-vertical"} do |f|
%fieldset#common_fields
- .control-group
- %label{:for => "user_email", :id => "user_email_label"}
+ .form-group
+ %label.control-label{:for => "user_email", :id => "user_email_label"}
= t("labels.email")
%small
- = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.email_field "email", :value => params[:user] ? params[:user][:email] : nil
- .control-group.radio
+ = t("captions.private")
+ = f.email_field "email", :value => params[:user] ? params[:user][:email] : nil, :class => "form-control"
+ .help-block
+ .radio
= f.label "new" , radio_button_tag("user", "new", true).html_safe + t("labels.user_new")
+ .radio
= f.label "existing", radio_button_tag("user", "existing").html_safe + t("labels.user_existing")
%fieldset#user_sign_up_fields
- .control-group
- %label{:for => "user_name", :id => "user_name_label"}
- = t("labels.name")
+ .form-group
+ %label.control-label{:for => "user_first_name", :id => "user_first_name_label"}
+ = t("labels.first_name")
%small
= t("captions.public")
- = f.text_field "name"
- .control-group
- %label{:for => "user_organization", :id => "user_organization_label"}
+ = f.text_field "first_name", :class => "form-control"
+ .form-group
+ %label.control-label{:for => "user_last_name", :id => "user_last_name_label"}
+ = t("labels.last_name")
+ %small
+ = t("captions.private")
+ = f.text_field "last_name", :class => "form-control"
+ .form-group
+ %label.control-label{:for => "user_organization", :id => "user_organization_label"}
= t("labels.organization")
%small
- = t("captions.public")
- = f.text_field "organization"
- .control-group
- %label{:for => "user_voice_number", :id => "user_voice_number_label"}
+ = t("captions.public_optional")
+ = f.text_field "organization", :class => "form-control"
+ .form-group.hidden
+ %label.control-label{:for => "user_voice_number", :id => "user_voice_number_label"}
= t("labels.voice_number")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number")
- .control-group
- %label{:for => "user_sms_number", :id => "user_sms_number_label"}
+ = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number"), :class => "form-control"
+ .form-group
+ %label.control-label{:for => "user_sms_number", :id => "user_sms_number_label"}
= t("labels.sms_number")
%small
- = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number")
- .control-group
- %label{:for => "user_password_confirmation", :id => "user_password_confirmation_label"}
+ = t("captions.private_optional")
+ = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number"), :class => "form-control"
+ .form-group
+ %label.control-label{:for => "user_password_confirmation", :id => "user_password_confirmation_label"}
= t("labels.password_choose")
- %small
- = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.password_field "password_confirmation"
+ = f.password_field "password_confirmation", :class => "form-control"
+ .help-block
+ %p.tos
+ = t("defaults.tos", :tos => link_to(t("titles.tos"), "#tos", :id => "tos_link", :"data-toggle" => "modal", :"data-target" => "#tos")).html_safe
.form-actions
- = f.submit t("buttons.sign_up"), :class => "btn btn-primary"
- %p
- = t("defaults.tos", :tos => link_to(t("titles.tos"), "#tos", :id => "tos_link", :"data-toggle" => "modal")).html_safe
+ = f.submit t("buttons.sign_up"), :class => "btn btn-primary btn-block"
%fieldset#user_sign_in_fields{:style => "display: none;"}
- .control-group
- %label{:for => "user_password", :id => "user_password_label"}
+ .form-group
+ %label.control-label{:for => "user_password", :id => "user_password_label"}
= t("labels.password")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.password_field "password"
- .control-group
+ = f.password_field "password", :class => "form-control"
+ .help-block
+ .form-group
= f.label "remember_me" , f.check_box("remember_me", :checked => true).html_safe + t("labels.remember_me")
- .form-actions
- = f.submit t("buttons.sign_in"), :class => "btn btn-primary"
%p
= link_to t("links.forgot_password"), "#", :id => "user_forgot_password_link"
- %fieldset#user_forgot_password_fields{:style => "display: none;"}
.form-actions
- = f.submit t("buttons.email_password"), :class => "btn btn-primary"
+ = f.submit t("buttons.sign_in"), :class => "btn btn-primary btn-block"
+ %fieldset#user_forgot_password_fields{:style => "display: none;"}
%p
= link_to t("links.remembered_password"), "#", :id => "user_remembered_password_link"
-= render :partial => "sidebar/tos"
-:javascript
- $(function() {
- $('#user_email').focus();
- });
+ .form-actions
+ = f.submit t("buttons.email_password"), :class => "btn btn-primary btn-block"
+%a{:href => search_path, :class => "link btn btn-default"}
+ = t("buttons.back")
diff --git a/app/views/sidebar/_guidelines.html.haml b/app/views/sidebar/_guidelines.html.haml
new file mode 100644
index 000000000..227188f0c
--- /dev/null
+++ b/app/views/sidebar/_guidelines.html.haml
@@ -0,0 +1,99 @@
+.modal.fade#guidelines
+ .modal-dialog.modal-lg
+ .modal-content
+ .modal-header
+ %button{:class => "close", :"data-dismiss" => "modal", :href => "#", :type => "button", :"aria-label" => "Close"}
+ %span{:"aria-hidden" =>"true"}
+ ×
+ %h2
+ What Does it Mean To Adopt a Drain?
+ .modal-body
+ %p
+ Thank you for your interest in adopting one or more of San
+ Francisco's 25,000+ storm drains (also called catch basins). By
+ pledging to keep your drain free of leaves and debris, you are
+ joining your neighbors in helping to protect the environment, manage
+ stormwater, and minimize flooding.
+ %h3
+ How to Care For Your Adopted Drain
+ %ul
+ %li
+ If possible, clear the drain before it starts raining.
+ %li
+ Put leaves and other natural material in the green compost bin.
+ Put trash in the black garbage bin.
+ %li
+ Clear about 10 feet on both sides of the drain.
+ %li
+ Medical waste or needles? Construction debris? Toxic materials?
+ Report it to the City's Customer Service Center, 311 on the web
+ (or dial 3-1-1).
+ %h3
+ Drain Cleaning Safety Tips
+ %ul
+ %li
+ Never try to lift the drain grate.
+ %li
+ Clear from the sidewalk, not the street.
+ %li
+ Wear reflective clothing so vehicles can see you.
+ %li
+ Always wear gloves and be careful of sharp objects!
+ %li
+ Use a rake, broom, or shovel - not your hands.
+ %p
+ %em
+ Remember, the City and County of San Francisco won't be held
+ responsible for anything that happens to you or others in service
+ of maintaining your drain. Please be careful!
+
+ %h3
+ Free Tools and Training
+ %p
+ We invite drain adopters to periodic events during the rainy season
+ where they can receive drain cleaning trainings and free tools and
+ supplies. Please keep an eye on your email for notification of these
+ events. You will also receive email reminders from the SFPUC to clear
+ your drains when rain is expected.
+
+ %h3
+ Spread the Word!
+ %p
+ Excited about the Adopt a Drain program? Want to encourage your
+ coworkers, friends and neighbors to participate? Utilize social media
+ to spread the word.
+ %p
+ %a{target: "_blank", href: "https://www.facebook.com/SFWater", class: ""}
+ =image_tag("icons/facebook.png", :alt => "sfwater facebook", :title => "sfwater facebook")
+ %a{target: "_blank", href: "https://www.instagram.com/sfwater/", class: ""}
+ =image_tag "icons/instagram.png", :alt => "sfwater instagram", :title => "sfwater instagram"
+ %a{target: "_blank", href: "https://twitter.com/SFWater", class: ""}
+ =image_tag "icons/twitter.png", :alt => "sfwater twitter", :title => "sfwater twitter"
+
+ %p
+ Remember to tag us @SFWater
+ and to use the following hashtags: #DrainHero , #AdoptADrain and #SFSewer .
+
+ %h3
+ Volunteer Developer Opportunities
+ %p
+ Are you a programmer with Ruby on Rails experience who wants to help
+ improve and maintain the Adopt a Drain application? Don't be shy!
+ We're always seeking assistance with the code! Get involved and
+ follow our GitHub page .
+
+ %h3
+ Contact Us
+ %p
+ Email questions and feedback to info@sfwater.org . We'd love to
+ hear from you!
+
+ .modal-footer
+ %button.btn.btn-default{:type => "button", :"data-dismiss" => "modal"}
+ Close
diff --git a/app/views/sidebar/_search.html.haml b/app/views/sidebar/_search.html.haml
index 60586ce31..4241b0049 100644
--- a/app/views/sidebar/_search.html.haml
+++ b/app/views/sidebar/_search.html.haml
@@ -1,18 +1,20 @@
= form_tag "/address", :method => "get", :id => "address_form", :class => "search-form" do
- = hidden_field_tag "limit", params[:limit] || 10
- %fieldset.control-group
- = label_tag "city_state", t("labels.city_state"), :id => "city_state_label"
- = select_tag "city_state", "#{t("defaults.city_state")} ".html_safe
- %fieldset.control-group
- = label_tag "address", t("labels.address"), :id => "address_label"
- = search_field_tag "address", params[:address], :placeholder => [t("defaults.address_1"), t("defaults.neighborhood")].join(", "), :class => "search-query"
+ = hidden_field_tag "limit", params[:limit] || 25
+ = hidden_field_tag "current_user_id", current_user.try(:id)
+ %fieldset.form-group.hidden
+ = label_tag "city_state", t("labels.city_state"), :id => "city_state_label", :class => 'control-label'
+ = select_tag "city_state", "#{t("defaults.city_state")} ".html_safe, :class => "form-control"
+ %fieldset.form-group
+ = search_field_tag "address", params[:address], :placeholder => t("labels.address"), :class => "search-query form-control"
+ .help-block
%fieldset.form-actions
- = submit_tag t("buttons.find", :thing => t("defaults.thing").pluralize), :class => "btn btn-primary"
- %a{:href => edit_user_registration_path, :id => "edit_profile_link", :class => "btn"}
- = t("buttons.edit_profile")
- %a{:href => destroy_user_session_path, :id => "sign_out_link", :class => "btn btn-danger"}
- = t("buttons.sign_out")
-:javascript
- $(function() {
- $('#address').focus();
- });
+ = submit_tag t("buttons.find", :thing => t("defaults.things")), :class => "btn btn-primary btn-block"
+- if signed_in?
+ = render :partial => "sidebar/user_things"
+ %a{:href => edit_user_registration_path, :id => "edit_profile_link", :class => "btn btn-warning btn-block"}
+ = t("buttons.edit_profile")
+ %a{:href => destroy_user_session_path, :id => "sign_out_link", :class => "btn btn-danger btn-block"}
+ = t("buttons.sign_out")
+- else
+ %a{:href => combo_form_path, :class => "link btn btn-secondary"}
+ = t("buttons.sign_up_or_in")
diff --git a/app/views/sidebar/_tos.html.haml b/app/views/sidebar/_tos.html.haml
index a9b79a6da..1ee2beeab 100644
--- a/app/views/sidebar/_tos.html.haml
+++ b/app/views/sidebar/_tos.html.haml
@@ -1,248 +1,254 @@
-.modal.hide.fade#tos{:style => "display: none;"}
- .modal-header
- %a{:class => "close", :"data-dismiss" => "modal", :href => "#"}
- ×
- %h2
- = t("titles.tos")
- .modal-body
- %ol
- %li
- %h3
- Acceptance of Terms
- %p
- The City of Boston ("City") provides the Adopt-a-Hydrant program ("AAH") to you subject to the following Terms of Service Agreement ("Agreement") which may be updated by us from time to time without notice to you. By accessing and using AAH, you accept and agree to be bound by the terms and provision of this Agreement.
- %li
- %h3
- Description of Adopt-a-Hydrant
- %p
- Adopt-a-Hydrant is an initiative of the City to encourage residents to shovel out snowed-in fire hydrants. The AAH website allows users to "adopt" a fire hydrant, or state that you intend to help shovel that fire hydrant out if it gets covered by snow.
- %p
- Unless explicitly stated otherwise, any new features that augment or enhance AAH are covered by this Agreement.
- %li
- %h3
- Obligations
- %p
- If you choose to adopt a fire hydrant using the AAH website, you are under no obligation and have no responsibility to actually shovel out that fire hydrant or any fire hydrant.
- %li
- %h3
- Termination of Obligations
- %p
- If you provide any information that is untrue, inaccurate, offensive, not current, or incomplete, or the City has reasonable grounds to suspect that such information is untrue, inaccurate, offensive, not current, or incomplete, the City has the right to suspend or terminate your account and refuse any and all current or future use of the AAH services (or any portion thereof).
- %p
- Accounts that consistently adopt fire hydrants without shoveling them out may also be terminated.
- %p
- Additionally, you agree that the City may, without prior notice, immediately terminate, limit your access to, or suspend your AAH service. Cause for such termination, limitation of access, or suspension shall include but not be limited to:
- %ol.alpha
- %li
- breaches or violations of this Agreement or other incorporated agreements or guidelines,
- %li
- requests by law enforcement or other government agencies,
- %li
- discontinuance or material modification to AAH (or any part thereof),
- %li
- unexpected technical or security issues or problems,
- %li
- extended periods of inactivity,
- %li
- engagement by you in fraudulent or illegal activities.
- %p
- Further, you agree that all terminations, limitations of access, and suspensions for cause shall be made in the City's sole discretion and that the City shall not be liable to you or any third party for any termination of your account, any associated email address, or access to AAH.
- %li
- %h3
- City Public Records Policy
- %p
- Registration data, as well as data you submit using AAH, are subject to all applicable City, State and Federal public records laws.
- %li
- %h3
- Member Conduct
- %p
- You understand that all information entered by the user is the sole responsibility of the person from whom such Content originated. This means that you, and not the City, are entirely responsible for all Content that you submit or otherwise make available via AAH. The City does not control the sign-in content posted and, as such, does not guarantee the accuracy, integrity, or quality of such Content. You understand that by using AAH, you may be exposed to Content that is offensive, indecent, or objectionable. Under no circumstances will the City be liable in any way for any Content, including, but not limited to, any errors or omissions in any Content, or any loss or damage of any kind incurred as a result of the use of any Content submitted or otherwise made available via AAH.
- %p
- We are under no obligation to enforce this Agreement on your behalf against another user. While we encourage you to let us know if you believe another user violated this Agreement, we reserve the right to investigate and take appropriate action at the City's sole discretion.
- %p
- You agree to not use AAH to:
- %ol.alpha
- %li
- submit Content that is false or inaccurate;
- %li
- submit Content that does not generally pertain to the designated topic or theme;
- %li
- submit or otherwise make available any Content that is unlawful, harmful, threatening, abusive, harassing, tortuous, defamatory, vulgar, obscene, libelous, invasive of another's privacy, hateful, or racially, ethnically, or otherwise objectionable;
- %li
- harm minors in any way;
- %li
- impersonate any person or entity, or falsely state or otherwise misrepresent your affiliation with a person or entity;
- %li
- submit or otherwise make available any Content that you do not have a right to make available under any law or under contractual or fiduciary relationships (such as inside information, proprietary and confidential information learned or disclosed as part of employment relationships or under nondisclosure agreements);
- %li
- submit or otherwise make available any Content that infringes any patent, trademark, trade secret, copyright, or other proprietary rights ("Rights") of any party;
- %li
- submit or otherwise make available any unsolicited or unauthorized advertising, promotional materials, "junk mail," "spam," "chain letters," "pyramid schemes," or any other form of communication not relevant to specific City service requests;
- %li
- submit or otherwise make available any material that contains software viruses or any other computer code, files or programs designed to interrupt, destroy or limit the functionality of any computer software or hardware or telecommunications equipment;
- %li
- intentionally or unintentionally violate any applicable local, state, national or international law;
- %li
- "stalk" or otherwise harass another; or
- %li
- collect or store personal data about other users in connection with the prohibited conduct and activities set forth in paragraphs (a) through (k) above.
- %p
- You acknowledge that the City may or may not pre-screen Content that is shared, but that the City and its designees shall have the right (but not the obligation) in their sole discretion to pre-screen, refuse, or remove any Content that is available via AAH. Without limiting the foregoing, the City and its designees shall have the right to remove any Content that violates this Agreement or is otherwise objectionable. You agree that you must evaluate, and bear all risks associated with, the use of any Content, including any reliance on the accuracy, completeness, or usefulness of such Content.
- %p
- You acknowledge, consent and agree that the City may access, preserve and disclose your account information and Content if required to do so by law or in a good faith belief that such access preservation or disclosure is reasonably necessary to:
- %ol.roman
- %li
- comply with legal process;
- %li
- enforce this Agreement;
- %li
- respond to claims that any Content violates the rights of third parties;
- %li
- respond to your requests for customer service;
- %li
- protect the rights, property or personal safety of the City, its users and the public.
- %p
- You may not attempt to override or circumvent any of the usage rules embedded into AAH.
- %p
- You may not trace any information of any other AAH user or visitor or otherwise use AAH for the purpose of obtaining information of any other AAH user.
- %p
- You may not attempt to gain unauthorized access to AAH or the computer systems and networks connected to AAH through hacking, password mining, or any other means.
- %p
- You may not release the results of any performance or functional evaluation of AAH to any third party without prior written approval of the City for each such release.
- %p
- You may not take any action that imposes, or may impose, in the City's sole discretion, an unreasonable or disproportionately large load on the City's technology infrastructure or otherwise make excessive traffic demands of AAH.
- %li
- %h3
- Interstate Nature of Communications on Adopt-a-Hydrant
- %p
- When you use the application, you acknowledge that in using AAH, you will be causing communications to be sent potentially through a variety of networks (Internet service provider, wireless phone network, etc.) As a result, even communications that seem to be intrastate in nature can result in the transmission of interstate communications regardless of where you are physically located at the time of transmission. Accordingly, you agree that use of the AAH may result in interstate data transmissions.
- %li
- %h3
- Submissions to the City
- %p
- By submitting feedback ("Submissions") to the City through the AAH feedback function, you acknowledge and agree that:
- %ol.alpha
- %li
- your Submissions do not contain confidential or proprietary information;
- %li
- the City is not under any obligation of confidentiality, express or implied, with respect to the Submissions;
- %li
- the City shall be entitled to use or disclose (or choose not to use or disclose) such Submissions for any purpose, in any way, in any media worldwide;
- %li
- the City may have something similar to the Submissions already under consideration or in development;
- %li
- your Submissions automatically become the property of the City without any obligation of the City to you;
- %li
- you are not entitled to any compensation or reimbursement of any kind from the City under any circumstances.
- %li
- %h3
- Indemnity
- %p
- You agree to indemnify and hold the City and its subsidiaries, affiliates, officers, agents, employees, partners, and licensors harmless from any claim or demand (including reasonable attorneys' fees) made by any third party due to or arising out of:
- %ol.alpha
- %li
- Content you submit or otherwise make available through AAH,
- %li
- your use of AAH,
- %li
- your connection to AAH,
- %li
- your violation of this Agreement,
- %li
- your violation of any Rights of another.
- %li
- %h3
- Modifications to Adopt-a-Hydrant
- %p
- The City reserves the right at any time and from time to time to modify or discontinue, temporarily or permanently, AAH (or any part thereof) with or without notice. You agree that the City shall not be liable to you or to any third party for any modification, suspension or discontinuance of the AAH (or any part thereof).
- %li
- %h3
- Links
- %p
- The City may provide links to other World Wide Web sites or resources. You acknowledge and agree that the City is not responsible for the availability of such external sites or resources.
- %p
- AAH may facilitate your use of third party services not provided by the City ("Third Party Services"). The City makes no representations or warranties regarding the performance of such Third Party Services, their compliance with applicable laws and regulations, or any other aspects of such Third Party Services. Your use of Third Party Services is at your own risk and you are solely responsible for complying with all legal and contractual requirements necessary for using Third Party Services.
- %li
- %h3
- The City's Proprietary Rights
- %p
- You acknowledge and agree that AAH contains proprietary and confidential information that is owned by the City and protected by applicable intellectual property and other laws. You will not use such proprietary information in any way whatsoever except for use of AAH in compliance with the provisions of this Agreement.
- %h4.upcase
- Disclaimer of Warranties
- %p.upcase
- You expressly understand and agree that:
- %ol.alpha.upcase
- %li
- Your use of AAH is at your sole risk. The application is provided on an "as is" and "as available" basis. The city expressly disclaims all warranties of any kind, whether express or implied, including, but not limited to the implied warranties of title, merchantability, fitness for a particular purpose and non-infringement.
- %li
- The city and its subsidiaries, affiliates, officers, employees, agents, partners, and licensors make no warrany that:
+.modal.fade#tos
+ .modal-dialog.modal-lg
+ .modal-content
+ .modal-header
+ %button{:class => "close", :"data-dismiss" => "modal", :href => "#", :type => "button", :"aria-label" => "Close"}
+ %span{:"aria-hidden" =>"true"}
+ ×
+ %h2
+ = t("titles.tos")
+ .modal-body
+ %ol
+ %li
+ %h3
+ Acceptance of Terms
+ %p
+ The City of San Francisco ("City") provides the Adopt-a-Drain program ("AAD") to you subject to the following Terms of Service Agreement ("Agreement") which may be updated by us from time to time without notice to you. By accessing and using AAD, you accept and agree to be bound by the terms and provision of this Agreement.
+ %li
+ %h3
+ Description of Adopt-a-Drain
+ %p
+ Adopt-a-Drain is an initiative of the City to encourage residents to clear out blocked storm drains. The AAD website allows users to "adopt" a storm drain, or state that you intend to help clear that storm drain out if it gets blocked by debris.
+ %p
+ Unless explicitly stated otherwise, any new features that augment or enhance AAD are covered by this Agreement.
+ %li
+ %h3
+ Obligations
+ %p
+ If you choose to adopt a storm drain using the AAD website, you are under no obligation and have no responsibility to actually clear out that storm drain or any storm drain.
+ %li
+ %h3
+ Termination of Obligations
+ %p
+ If you provide any information that is untrue, inaccurate, offensive, not current, or incomplete, or the City has reasonable grounds to suspect that such information is untrue, inaccurate, offensive, not current, or incomplete, the City has the right to suspend or terminate your account and refuse any and all current or future use of the AAD services (or any portion thereof).
+ %p
+ Accounts that consistently adopt storm drains without clearing them out may also be terminated.
+ %p
+ Additionally, you agree that the City may, without prior notice, immediately terminate, limit your access to, or suspend your AAD service. Cause for such termination, limitation of access, or suspension shall include but not be limited to:
+ %ol.alpha
+ %li
+ breaches or violations of this Agreement or other incorporated agreements or guidelines,
+ %li
+ requests by law enforcement or other government agencies,
+ %li
+ discontinuance or material modification to AAD (or any part thereof),
+ %li
+ unexpected technical or security issues or problems,
+ %li
+ extended periods of inactivity,
+ %li
+ engagement by you in fraudulent or illegal activities.
+ %p
+ Further, you agree that all terminations, limitations of access, and suspensions for cause shall be made in the City's sole discretion and that the City shall not be liable to you or any third party for any termination of your account, any associated email address, or access to AAD.
+ %li
+ %h3
+ City Public Records Policy
+ %p
+ Registration data, as well as data you submit using AAD, are subject to all applicable City, State and Federal public records laws.
+ %li
+ %h3
+ Member Conduct
+ %p
+ You understand that all information entered by the user is the sole responsibility of the person from whom such Content originated. This means that you, and not the City, are entirely responsible for all Content that you submit or otherwise make available via AAD. The City does not control the sign-in content posted and, as such, does not guarantee the accuracy, integrity, or quality of such Content. You understand that by using AAD, you may be exposed to Content that is offensive, indecent, or objectionable. Under no circumstances will the City be liable in any way for any Content, including, but not limited to, any errors or omissions in any Content, or any loss or damage of any kind incurred as a result of the use of any Content submitted or otherwise made available via AAD.
+ %p
+ We are under no obligation to enforce this Agreement on your behalf against another user. While we encourage you to let us know if you believe another user violated this Agreement, we reserve the right to investigate and take appropriate action at the City's sole discretion.
+ %p
+ You agree to not use AAD to:
+ %ol.alpha
+ %li
+ submit Content that is false or inaccurate;
+ %li
+ submit Content that does not generally pertain to the designated topic or theme;
+ %li
+ submit or otherwise make available any Content that is unlawful, harmful, threatening, abusive, harassing, tortuous, defamatory, vulgar, obscene, libelous, invasive of another's privacy, hateful, or racially, ethnically, or otherwise objectionable;
+ %li
+ harm minors in any way;
+ %li
+ impersonate any person or entity, or falsely state or otherwise misrepresent your affiliation with a person or entity;
+ %li
+ submit or otherwise make available any Content that you do not have a right to make available under any law or under contractual or fiduciary relationships (such as inside information, proprietary and confidential information learned or disclosed as part of employment relationships or under nondisclosure agreements);
+ %li
+ submit or otherwise make available any Content that infringes any patent, trademark, trade secret, copyright, or other proprietary rights ("Rights") of any party;
+ %li
+ submit or otherwise make available any unsolicited or unauthorized advertising, promotional materials, "junk mail," "spam," "chain letters," "pyramid schemes," or any other form of communication not relevant to specific City service requests;
+ %li
+ submit or otherwise make available any material that contains software viruses or any other computer code, files or programs designed to interrupt, destroy or limit the functionality of any computer software or hardware or telecommunications equipment;
+ %li
+ intentionally or unintentionally violate any applicable local, state, national or international law;
+ %li
+ "stalk" or otherwise harass another; or
+ %li
+ collect or store personal data about other users in connection with the prohibited conduct and activities set forth in paragraphs (a) through (k) above.
+ %p
+ You acknowledge that the City may or may not pre-screen Content that is shared, but that the City and its designees shall have the right (but not the obligation) in their sole discretion to pre-screen, refuse, or remove any Content that is available via AAD. Without limiting the foregoing, the City and its designees shall have the right to remove any Content that violates this Agreement or is otherwise objectionable. You agree that you must evaluate, and bear all risks associated with, the use of any Content, including any reliance on the accuracy, completeness, or usefulness of such Content.
+ %p
+ You acknowledge, consent and agree that the City may access, preserve and disclose your account information and Content if required to do so by law or in a good faith belief that such access preservation or disclosure is reasonably necessary to:
%ol.roman
%li
- AAH will meet your requirements;
- %li
- AAH will be uninterrupted, timely, secore, or error-free;
- %li
- the results that may be obtained from the use of AAH will be accurate or reliable;
- %li
- any errors in the software will be corrected;
- %li
- AAH will be free from corruption, viruses, hacking, or other security intrusion.
- %li
- %h3
- Limitation of Liability
- %p.upcase
- You expressly understand and agree that the city shall not be liable to you for any punitive, indirect, incidental, special, consequential, or exemplary damages, including, but not limtied to, damages for loss of profits, goodwill, use, data, or other intangible losses resulting from:
- %ol.alpha.upcase
- %li
- Your access to or use of or inability to access or use the services;
- %li
- any conduct or content or any third party on the services, including without limitation, any defamatory, offensive or illegal conduct of other users or third parties;
- %li
- any content obtained from the services;
- %li
- unauthorized access, use or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not the city has been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
- %p.upcase
- You expressly agree that the city is not responsible for any contact or interaction between you and any other user of AAH and that you bear the sole risk of transmitting through the application any content, including information which identifies you or your location.
- %p.upcase
- You agree that the negation of damages set forth above is a fundamental element of the basis of the bargain between the city and you and that the foregoing limitation of liability is an agreed upon allocation of risk between you and the city. You acknowledge that absent your agreement to this limitation of liability the city would not provide AAH to you.
- %li
- %h3
- Notice
- %p
- The City may provide you with notices regarding AAH, including changes to this Agreement, by email, SMS, text message, postings on AAH, or any other reasonable means now known or hereafter developed. Notices shall be effective immediately.
- %p
- Such notices may not be received if you violate this Agreement by accessing the AAH in an unauthorized manner. You agree that you will be deemed to have received any and all notices that would have been delivered had you accessed AAH in an authorized manner.
- %li
- %h3
- Minor
- %p
- You represent that you are 13 years of age or older and, if you are under the age of 18, you either are an emancipated minor, or have obtained the legal consent of your parent or legal guardian to accept and agree to be bound by the terms and provisions of this Agreement.
- %p
- If you have agreed to allow your minor child, or a child for whom you are legal guardian ("Minor"), to use AAH, you agree that you shall be solely responsible for:
- %ol.alpha
- %li
- the online conduct of such Minor,
- %li
- monitoring such Minor’s access to and use of AAH, and
- %li
- the consequences of any use of AAH by such Minor.
- %li
- %h3
- Governing Law and Venue
- %p
- This Agreement is governed by the laws of the Commonwealth of Massachusetts without regard to any conflict of law provisions. You agree that any claim or dispute with the City relating in any way to your use of AAH shall be brought exclusively before a state or federal court sitting in Boston, Massachusetts, and you irrevocably waive any jurisdictional, venue, or inconvenient forum objections to such courts.
- %li
- %h3
- Miscellaneous
- %p
- This Agreement constitutes the entire agreement between you and the City with respect to your use of AAH, superseding any prior version of this Agreement between you and the City with respect to AAH.
- %p
- If any provision of this Agreement shall be unlawful, void, or unenforceable, then that provision shall be deemed severed from this Agreement and shall not affect the validity or enforceability of the remaining provisions of this Agreement.
- %p
- The City's failure to assert any right or provision under this Agreement shall not constitute a waiver of such right or provision.
- %p
- You agree that any cause of action arising out of or related to your use of AAH must commence within one year after the cause of action accrues. Otherwise, such cause of action is permanently barred.
- %p
- The section titles in this Agreement are for convenience only and have no legal or contractual effect.
- %p
- Last updated August 10, 2011.
+ comply with legal process;
+ %li
+ enforce this Agreement;
+ %li
+ respond to claims that any Content violates the rights of third parties;
+ %li
+ respond to your requests for customer service;
+ %li
+ protect the rights, property or personal safety of the City, its users and the public.
+ %p
+ You may not attempt to override or circumvent any of the usage rules embedded into AAD.
+ %p
+ You may not trace any information of any other AAD user or visitor or otherwise use AAD for the purpose of obtaining information of any other AAD user.
+ %p
+ You may not attempt to gain unauthorized access to AAD or the computer systems and networks connected to AAD through hacking, password mining, or any other means.
+ %p
+ You may not release the results of any performance or functional evaluation of AAD to any third party without prior written approval of the City for each such release.
+ %p
+ You may not take any action that imposes, or may impose, in the City's sole discretion, an unreasonable or disproportionately large load on the City's technology infrastructure or otherwise make excessive traffic demands of AAD.
+ %li
+ %h3
+ Interstate Nature of Communications on Adopt-a-Drain
+ %p
+ When you use the application, you acknowledge that in using AAD, you will be causing communications to be sent potentially through a variety of networks (Internet service provider, wireless phone network, etc.) As a result, even communications that seem to be intrastate in nature can result in the transmission of interstate communications regardless of where you are physically located at the time of transmission. Accordingly, you agree that use of the AAD may result in interstate data transmissions.
+ %li
+ %h3
+ Submissions to the City
+ %p
+ By submitting feedback ("Submissions") to the City through the AAD feedback function, you acknowledge and agree that:
+ %ol.alpha
+ %li
+ your Submissions do not contain confidential or proprietary information;
+ %li
+ the City is not under any obligation of confidentiality, express or implied, with respect to the Submissions;
+ %li
+ the City shall be entitled to use or disclose (or choose not to use or disclose) such Submissions for any purpose, in any way, in any media worldwide;
+ %li
+ the City may have something similar to the Submissions already under consideration or in development;
+ %li
+ your Submissions automatically become the property of the City without any obligation of the City to you;
+ %li
+ you are not entitled to any compensation or reimbursement of any kind from the City under any circumstances.
+ %li
+ %h3
+ Indemnity
+ %p
+ You agree to indemnify and hold the City and its subsidiaries, affiliates, officers, agents, employees, partners, and licensors harmless from any claim or demand (including reasonable attorneys' fees) made by any third party due to or arising out of:
+ %ol.alpha
+ %li
+ Content you submit or otherwise make available through AAD,
+ %li
+ your use of AAD,
+ %li
+ your connection to AAD,
+ %li
+ your violation of this Agreement,
+ %li
+ your violation of any Rights of another.
+ %li
+ %h3
+ Modifications to Adopt-a-Drain
+ %p
+ The City reserves the right at any time and from time to time to modify or discontinue, temporarily or permanently, AAD (or any part thereof) with or without notice. You agree that the City shall not be liable to you or to any third party for any modification, suspension or discontinuance of the AAD (or any part thereof).
+ %li
+ %h3
+ Links
+ %p
+ The City may provide links to other World Wide Web sites or resources. You acknowledge and agree that the City is not responsible for the availability of such external sites or resources.
+ %p
+ AAD may facilitate your use of third party services not provided by the City ("Third Party Services"). The City makes no representations or warranties regarding the performance of such Third Party Services, their compliance with applicable laws and regulations, or any other aspects of such Third Party Services. Your use of Third Party Services is at your own risk and you are solely responsible for complying with all legal and contractual requirements necessary for using Third Party Services.
+ %li
+ %h3
+ The City's Proprietary Rights
+ %p
+ You acknowledge and agree that AAD contains proprietary and confidential information that is owned by the City and protected by applicable intellectual property and other laws. You will not use such proprietary information in any way whatsoever except for use of AAD in compliance with the provisions of this Agreement.
+ %h4.upcase
+ Disclaimer of Warranties
+ %p.upcase
+ You expressly understand and agree that:
+ %ol.alpha.upcase
+ %li
+ Your use of AAD is at your sole risk. The application is provided on an "as is" and "as available" basis. The city expressly disclaims all warranties of any kind, whether express or implied, including, but not limited to the implied warranties of title, merchantability, fitness for a particular purpose and non-infringement.
+ %li
+ The city and its subsidiaries, affiliates, officers, employees, agents, partners, and licensors make no warrany that:
+ %ol.roman
+ %li
+ AAD will meet your requirements;
+ %li
+ AAD will be uninterrupted, timely, secore, or error-free;
+ %li
+ the results that may be obtained from the use of AAD will be accurate or reliable;
+ %li
+ any errors in the software will be corrected;
+ %li
+ AAD will be free from corruption, viruses, hacking, or other security intrusion.
+ %li
+ %h3
+ Limitation of Liability
+ %p.upcase
+ You expressly understand and agree that the city shall not be liable to you for any punitive, indirect, incidental, special, consequential, or exemplary damages, including, but not limtied to, damages for loss of profits, goodwill, use, data, or other intangible losses resulting from:
+ %ol.alpha.upcase
+ %li
+ Your access to or use of or inability to access or use the services;
+ %li
+ any conduct or content or any third party on the services, including without limitation, any defamatory, offensive or illegal conduct of other users or third parties;
+ %li
+ any content obtained from the services;
+ %li
+ unauthorized access, use or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not the city has been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
+ %p.upcase
+ You expressly agree that the city is not responsible for any contact or interaction between you and any other user of AAD and that you bear the sole risk of transmitting through the application any content, including information which identifies you or your location.
+ %p.upcase
+ You agree that the negation of damages set forth above is a fundamental element of the basis of the bargain between the city and you and that the foregoing limitation of liability is an agreed upon allocation of risk between you and the city. You acknowledge that absent your agreement to this limitation of liability the city would not provide AAD to you.
+ %li
+ %h3
+ Notice
+ %p
+ The City may provide you with notices regarding AAD, including changes to this Agreement, by email, SMS, text message, postings on AAD, or any other reasonable means now known or hereafter developed. Notices shall be effective immediately.
+ %p
+ Such notices may not be received if you violate this Agreement by accessing the AAD in an unauthorized manner. You agree that you will be deemed to have received any and all notices that would have been delivered had you accessed AAD in an authorized manner.
+ %li
+ %h3
+ Minor
+ %p
+ You represent that you are 13 years of age or older and, if you are under the age of 18, you either are an emancipated minor, or have obtained the legal consent of your parent or legal guardian to accept and agree to be bound by the terms and provisions of this Agreement.
+ %p
+ If you have agreed to allow your minor child, or a child for whom you are legal guardian ("Minor"), to use AAD, you agree that you shall be solely responsible for:
+ %ol.alpha
+ %li
+ the online conduct of such Minor,
+ %li
+ monitoring such Minor’s access to and use of AAD, and
+ %li
+ the consequences of any use of AAD by such Minor.
+ %li
+ %h3
+ Governing Law and Venue
+ %p
+ This Agreement is governed by the laws of the State of California without regard to any conflict of law provisions. You agree that any claim or dispute with the City relating in any way to your use of AAD shall be brought exclusively before a state or federal court sitting in San Francisco, California, and you irrevocably waive any jurisdictional, venue, or inconvenient forum objections to such courts.
+ %li
+ %h3
+ Miscellaneous
+ %p
+ This Agreement constitutes the entire agreement between you and the City with respect to your use of AAD, superseding any prior version of this Agreement between you and the City with respect to AAD.
+ %p
+ If any provision of this Agreement shall be unlawful, void, or unenforceable, then that provision shall be deemed severed from this Agreement and shall not affect the validity or enforceability of the remaining provisions of this Agreement.
+ %p
+ The City's failure to assert any right or provision under this Agreement shall not constitute a waiver of such right or provision.
+ %p
+ You agree that any cause of action arising out of or related to your use of AAD must commence within one year after the cause of action accrues. Otherwise, such cause of action is permanently barred.
+ %p
+ The section titles in this Agreement are for convenience only and have no legal or contractual effect.
+ %p
+ Last updated October 22, 2015.
+ .modal-footer
+ %button.btn.btn-default{:type => "button", :"data-dismiss" => "modal"}
+ Close
diff --git a/app/views/sidebar/_user_things.html.haml b/app/views/sidebar/_user_things.html.haml
new file mode 100644
index 000000000..4f593cc04
--- /dev/null
+++ b/app/views/sidebar/_user_things.html.haml
@@ -0,0 +1,8 @@
+%div.user-things
+ %h5.my-things= t('labels.my_things', :things => t('defaults.things'))
+ %dl
+ - current_user.things.each do |thing|
+ %dt
+ %a.thing-link{ :data => { :lng => thing.lng, :lat => thing.lat } }=thing.display_name
+ %dd=thing.street_address
+ .break
diff --git a/app/views/sidebar/edit_profile.html.haml b/app/views/sidebar/edit_profile.html.haml
index 786fb952f..2c4f775fa 100644
--- a/app/views/sidebar/edit_profile.html.haml
+++ b/app/views/sidebar/edit_profile.html.haml
@@ -1,80 +1,86 @@
= form_for resource, :as => resource_name, :url => registration_path(resource_name), :html => {:id => "edit_form", :method => :put} do |f|
= f.hidden_field "id"
- %fieldset.control-group
- %label{:for => "user_email", :id => "user_email_label"}
+ %fieldset.form-group
+ %label{:for => "user_email", :id => "user_email_label", :class => 'control-label'}
= t("labels.email")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.email_field "email"
- %fieldset.control-group
- %label{:for => "user_name", :id => "user_name_label"}
- = t("labels.name")
+ = f.email_field "email", :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_first_name", :id => "user_first_name_label", :class => 'control-label'}
+ = t("labels.first_name")
%small
= t("captions.public")
- = f.text_field "name"
- %fieldset.control-group
- %label{:for => "user_organization", :id => "user_organization_label"}
+ = f.text_field "first_name", :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_last_name", :id => "user_last_name_label", :class => 'control-label'}
+ = t("labels.last_name")
+ %small
+ = image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
+ = f.text_field "last_name", :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_organization", :id => "user_organization_label", :class => 'control-label'}
= t("labels.organization")
%small
= t("captions.public")
- = f.text_field "organization"
- %fieldset.control-group
- %label{:for => "user_voice_number", :id => "user_voice_number_label"}
+ = f.text_field "organization", :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_voice_number", :id => "user_voice_number_label", :class => 'control-label'}
= t("labels.voice_number")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number"), :value => number_to_phone(f.object.voice_number)
- %fieldset.control-group
- %label{:for => "user_sms_number", :id => "user_sms_number_label"}
+ = f.telephone_field "voice_number", :placeholder => t("defaults.voice_number"), :value => number_to_phone(f.object.voice_number), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_sms_number", :id => "user_sms_number_label", :class => 'control-label'}
= t("labels.sms_number")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number"), :value => number_to_phone(f.object.sms_number)
- %fieldset.control-group
- %label{:for => "user_address_1", :id => "user_address_1_label"}
+ = f.telephone_field "sms_number", :placeholder => t("defaults.sms_number"), :value => number_to_phone(f.object.sms_number), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_address_1", :id => "user_address_1_label", :class => 'control-label'}
= t("labels.address_1")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.text_field "address_1", :placeholder => t("defaults.address_1")
- %fieldset.control-group
- %label{:for => "user_address_2", :id => "user_address_2_label"}
+ = f.text_field "address_1", :placeholder => t("defaults.address_1"), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_address_2", :id => "user_address_2_label", :class => 'control-label'}
= t("labels.address_2")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.text_field "address_2", :placeholder => t("defaults.address_2")
- %fieldset.control-group
- %label{:for => "user_city", :id => "user_city_label"}
+ = f.text_field "address_2", :placeholder => t("defaults.address_2"), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_city", :id => "user_city_label", :class => 'control-label'}
= t("labels.city")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.text_field "city", :placeholder => t("defaults.city")
- %fieldset.control-group
- %label{:for => "user_state", :id => "user_state_label"}
+ = f.text_field "city", :placeholder => t("defaults.city"), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_state", :id => "user_state_label", :class => 'control-label'}
= t("labels.state")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.select "state", us_states, :include_blank => true
- %fieldset.control-group
- %label{:for => "user_zip", :id => "user_zip_label"}
+ = f.select "state", us_states, {:include_blank => true}, {:class => "form-control"}
+ %fieldset.form-group
+ %label{:for => "user_zip", :id => "user_zip_label", :class => 'control-label'}
= t("labels.zip")
%small
= image_tag "lock.png", :class => "lock", :alt => t("captions.private"), :title => t("captions.private")
- = f.text_field "zip", :placeholder => t("defaults.zip")
- %fieldset.control-group
- %label{:for => "user_password", :id => "user_password_label"}
+ = f.text_field "zip", :placeholder => t("defaults.zip"), :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_password", :id => "user_password_label", :class => 'control-label'}
= t("labels.password_new")
%small
= t("captions.optional")
- = f.password_field "password"
- %fieldset.control-group
- %label{:for => "user_current_password", :id => "user_current_password_label"}
+ = f.password_field "password", :class => "form-control"
+ %fieldset.form-group
+ %label{:for => "user_current_password", :id => "user_current_password_label", :class => 'control-label'}
= t("labels.password_current")
%small
= t("captions.required")
- = f.password_field "current_password"
+ = f.password_field "current_password", :class => "form-control"
%fieldset.form-actions
- = f.submit t("buttons.update"), :class => "btn btn-primary"
- %a{:href => root_path, :id => "back_link", :class => "btn"}
+ = f.submit t("buttons.update"), :class => "btn btn-primary btn-block"
+ %a{:href => search_path, :class => "link btn btn-default"}
= t("buttons.back")
:javascript
$(function() {
diff --git a/app/views/thing_mailer/first_adoption_confirmation.html.erb b/app/views/thing_mailer/first_adoption_confirmation.html.erb
new file mode 100644
index 000000000..a5d7d7796
--- /dev/null
+++ b/app/views/thing_mailer/first_adoption_confirmation.html.erb
@@ -0,0 +1,130 @@
+
+
+
+
+ <%= image_tag "logos/adopt-a-drain-sfpuc.png", :alt => "sfwater adopt-a-drain logo", :title => "sfwater adopt-a-drain logo" %>
+
+
+
+
+
+ Dear <%= @user.name.split.first %>,
+
+
+
+ Thank you for adopting one of San Francisco's 25,000 catch basins/storm
+ drains and keeping it free of leaves and debris. You are joining your
+ neighbors in helping to protect the environment, manage stormwater, and
+ minimize flooding.
+
+
+ How to Care For Your Adopted Drain
+
+
+
+ If possible, clear the drain before and after it rains.
+
+
+ Put leaves and other natural material in the green compost bin.
+
+
+ Put trash in the black garbage bin.
+
+
+ Clear about 10 feet on both sides of the drain.
+
+
+ Medical waste or needles? Construction debris? Drain clogged underneath
+ the grate? Report
+ to 311 to have it handled by the City.
+
+
+
+ Drain Cleaning Safety Tips
+
+
+
+ Never try to lift the drain grate.
+
+
+ Clear from the sidewalk, not the street.
+
+
+ Wear reflective clothing so vehicles can see you.
+
+
+ Always wear gloves and be very careful of sharp objects.
+
+
+ Use a rake, broom, or shovel - not your hands.
+
+
+
+
+
+
+ <%= image_tag "adoptadrain-event.png", :alt => "adopt-a-drain event", :title => "adopt-a-drain event" %>
+
+ Adopt a Drain VIP event
+
+
+
+
+
+
+ Keep an eye out for an email invitation to attend one of our VIP Volunteer
+ events, where you will be able to receive drain cleaning tools and
+ training. We also send periodic email reminders to clear your drains.
+
+
+
+ Thanks again, <%= @user.name.split.first %>, for adopting a drain in San
+ Francisco. When each of us helps out a little, it makes a big difference!
+
+
+
+ Sincerely,
+
+
+ SFPUC Adopt a Drain Team
+
+ 415-554-3289
+
+ info@sfwater.org
+
+
+
+
+ Remember, the City and County of San Francisco won't be held responsible
+ for anything that happens to you or others in service of maintaining your
+ drain. Please be careful.
+
+
+
+
+ If you move or are no longer able to tend to your drain, please abandon it on
+ https://adoptadrain.sfwater.org . Thank you.
+
+
+
+
+ <%= image_tag "icons/facebook.png", :alt => "sfwater facebook", :title => "sfwater facebook" %>
+
+
+
+ <%= image_tag "icons/twitter.png", :alt => "sfwater twitter", :title => "sfwater twitter" %>
+
+
+
+ <%= image_tag "icons/instagram.png", :alt => "sfwater instagram", :title => "sfwater instagram" %>
+
+
+
+ <%= image_tag "icons/youtube.png", :alt => "sfwater youtube", :title => "sfwater youtube" %>
+
+
+
+ <%= image_tag "icons/linkedin.png", :alt => "sfwater linkedin", :title => "sfwater linkedin" %>
+
+
+
diff --git a/app/views/thing_mailer/reminder.text.erb b/app/views/thing_mailer/reminder.text.erb
index e22d68b6e..4e50a84c3 100644
--- a/app/views/thing_mailer/reminder.text.erb
+++ b/app/views/thing_mailer/reminder.text.erb
@@ -1,7 +1,7 @@
Hello <%= @user.name.split.first %>,
-Did you remember to shovel out the fire hydrant you adopted at <%= @thing.street_address %>? If not, please shovel your hydrant as soon as possible!
+Did you remember to clear the drain you adopted at <%= @thing.street_address %>? If not, please maintain it as soon as possible!
-If you've already shoveled, thank you for serving your city!
+If you've already cleared it, thank you for serving your city!
-The Adopt-a-Hydrant Team
+The Adopt-a-Drain Team
diff --git a/app/views/thing_mailer/second_adoption_confirmation.html.erb b/app/views/thing_mailer/second_adoption_confirmation.html.erb
new file mode 100644
index 000000000..40a62eec4
--- /dev/null
+++ b/app/views/thing_mailer/second_adoption_confirmation.html.erb
@@ -0,0 +1,79 @@
+
+
+
+
+ <%= image_tag "logos/adopt-a-drain-sfpuc.png", :alt => "sfwater adopt-a-drain logo", :title => "sfwater adopt-a-drain logo" %>
+
+
+
+
+
+ Dear <%= @user.name.split.first %>,
+
+
+
+ Wow! Thank you for adopting another drain.
+
+
+ Use social media to spread the word! Be sure to tag us @sfwater and use the
+ hashtags #DrainHero, #AdoptADrain and #SFSewer in your posts.
+
+
+
+ If you encounter medical waste, construction debris, or if the drain is
+ clogged beneath the grate, report to 311 to have
+ it cleared by the City.
+
+
+
+ As always, please let us know if you have any feedback or questions about
+ this program. We love to hear from you.
+
+
+
+ Sincerely,
+
+
+ SFPUC Adopt a Drain Team
+
+ 415-554-3289
+
+ info@sfwater.org
+
+
+
+
+ Remember, the City and County of San Francisco won't be held responsible
+ for anything that happens to you or others in service of maintaining your
+ drain. Please be careful.
+
+
+
+
+ If you move or are no longer able to tend to your drain, please abandon it on
+ https://adoptadrain.sfwater.org . Thank you.
+
+
+
+
+ <%= image_tag "icons/facebook.png", :alt => "sfwater facebook", :title => "sfwater facebook" %>
+
+
+
+ <%= image_tag "icons/twitter.png", :alt => "sfwater twitter", :title => "sfwater twitter" %>
+
+
+
+ <%= image_tag "icons/instagram.png", :alt => "sfwater instagram", :title => "sfwater instagram" %>
+
+
+
+ <%= image_tag "icons/youtube.png", :alt => "sfwater youtube", :title => "sfwater youtube" %>
+
+
+
+ <%= image_tag "icons/linkedin.png", :alt => "sfwater linkedin", :title => "sfwater linkedin" %>
+
+
+
diff --git a/app/views/thing_mailer/thing_update_report.html.erb b/app/views/thing_mailer/thing_update_report.html.erb
new file mode 100644
index 000000000..73f683b22
--- /dev/null
+++ b/app/views/thing_mailer/thing_update_report.html.erb
@@ -0,0 +1,52 @@
+Import Report
+
+<% if @deleted_thing_ids_with_adoptee.present? %>
+
+
+
+ <%= t('defaults.things').titleize %> With Adoptee Removed
+
+
+
+ <% @deleted_thing_ids_with_adoptee.each do |thing_id| %>
+
+ N-<%= thing_id %>
+
+ <% end %>
+
+
+<% end %>
+
+<% if @deleted_thing_ids_with_no_adoptee.present? %>
+
+
+
+ <%= t('defaults.things').titleize %> With No Adoptee Removed
+
+
+
+ <% @deleted_thing_ids_with_no_adoptee.each do |thing_id| %>
+
+ N-<%= thing_id %>
+
+ <% end %>
+
+
+<% end %>
+
+<% if @created_thing_ids.present? %>
+
+
+
+ <%= t('defaults.things').titleize %> Added
+
+
+
+ <% @created_thing_ids.each do |thing_id| %>
+
+ N-<%= thing_id %>
+
+ <% end %>
+
+
+<% end %>
diff --git a/app/views/thing_mailer/third_adoption_confirmation.text.erb b/app/views/thing_mailer/third_adoption_confirmation.text.erb
new file mode 100644
index 000000000..87a9f45b2
--- /dev/null
+++ b/app/views/thing_mailer/third_adoption_confirmation.text.erb
@@ -0,0 +1,19 @@
+Hey <%= @user.name.split.first %>!
+
+You're clearly awesome since you've adopted 3 drains now! Wow!
+
+We won't write you any more emails confirming your drain adoptions since it's
+rude to clog email inboxes.
+
+Perhaps you'd be ok taking a 2-question survey for us to tell us why you
+decided to adopt? Visit http://goo.gl/forms/sD3lniSd4b to participate.
+
+Extra excited? Send a tweet to help us spread the word:
+
+ Did you know you could "adopt" part of #SanFrancisco?
+ http://adoptadrain.sfwater.org/ @SFWater makes it happen. #civicduty
+ > #juryduty #sfsewer
+
+As always, write us with suggestions, comments, photos, or complaints! We love to hear from you.
+
+Your SFPUC
diff --git a/app/views/things/_abandon.html.haml b/app/views/things/_abandon.html.haml
index d8e32a372..0425ab0a9 100644
--- a/app/views/things/_abandon.html.haml
+++ b/app/views/things/_abandon.html.haml
@@ -1,6 +1,6 @@
= form_for :thing, :url => things_path, :method => :put, :html => {:id => "abandon_form"} do |f|
= f.hidden_field "id"
= f.hidden_field "user_id", :value => ""
- = f.hidden_field "name", :value => ""
- %fieldset.control-group
- = f.submit t("buttons.abandon", :thing => t("defaults.thing")), :class => "btn danger"
+ = f.hidden_field "adopted_name", :value => ""
+ %fieldset.form-group
+ = f.submit t("buttons.abandon", :thing => t("defaults.thing")), :class => "btn btn-danger btn-block"
diff --git a/app/views/things/adopt.html.haml b/app/views/things/adopt.html.haml
index 2bf88e15d..a30b6f65a 100644
--- a/app/views/things/adopt.html.haml
+++ b/app/views/things/adopt.html.haml
@@ -3,8 +3,13 @@
= form_for :thing, :url => things_path, :method => :put, :html => {:id => "adoption_form"} do |f|
= f.hidden_field "id"
= f.hidden_field "user_id", :value => current_user.id
- %fieldset.control-group
- = f.label "name", t("labels.name_thing", :thing => t("defaults.thing")), :id => "thing_name_label"
- = f.text_field "name"
- %fieldset.control-group
- = f.submit t("buttons.adopt"), :class => "btn primary"
+ %fieldset.form-group
+ = f.label "name", t("labels.name_thing", :thing => t("defaults.thing")), :id => "thing_name_label", :class => "control-label"
+ = f.text_field "adopted_name", :value => @thing.name, :class => "form-control"
+ %fieldset.form-group
+ = f.submit t("buttons.adopt"), :class => "btn btn-primary btn-block"
+
+ - unless @thing.detail_link.blank?
+ %p
+ %a{href: "#{@thing.detail_link}", target: '_blank'}
+ = t("links.thing_details", :thing => t("defaults.thing"))
diff --git a/app/views/users/profile.html.haml b/app/views/users/profile.html.haml
index 2c5b776e0..7d2f6f5c8 100644
--- a/app/views/users/profile.html.haml
+++ b/app/views/users/profile.html.haml
@@ -1,8 +1,5 @@
-%h2
- = t("titles.adopted", :thing_name => @thing.name ? @thing.name.titleize : t("defaults.this_thing", :thing => t("defaults.thing")))
- %br
- = t("titles.byline", :name => @thing.user.name)
- %br
+%h4
+ = t("titles.adopted", :thing_name => @thing.display_name != "" ? @thing.display_name.titleize : t("defaults.this_thing", :thing => t("defaults.thing")))
+%div
+ = t("titles.byline", :name => @thing.user.first_name)
= t("titles.ofline", :organization => @thing.user.organization) unless @thing.user.organization.blank?
-- if user_signed_in?
- = render :partial => 'users/reminder'
diff --git a/app/views/users/sign_in.html.haml b/app/views/users/sign_in.html.haml
index c7d978484..3e242a69a 100644
--- a/app/views/users/sign_in.html.haml
+++ b/app/views/users/sign_in.html.haml
@@ -1,2 +1,4 @@
-%h2
- = t("titles.sign_in", :thing => t("defaults.thing").titleize)
+%h3
+ = t("titles.sign_in", :thing => t("defaults.thing"))
+%a.guidelines{:href => "#guidelines", :"data-toggle" => "modal", :"data-target" => "#guidelines"}
+ %p= t("links.learn_more", :thing => t("defaults.thing"))
diff --git a/app/views/users/thank_you.html.haml b/app/views/users/thank_you.html.haml
index f27323b7c..eb57ed53b 100644
--- a/app/views/users/thank_you.html.haml
+++ b/app/views/users/thank_you.html.haml
@@ -1,3 +1,9 @@
%h2
- = t("titles.thank_you", :thing => t("defaults.thing"))
+ = t("titles.thank_you", thing: t("defaults.thing"))
+ %a{ target: '_blank', href: "mailto:?subject=#{URI.encode(t("titles.main", thing: t("defaults.thing")))}&body=#{URI.encode(t("titles.email_text", root_url: root_url, thing: t("defaults.thing")))}" }
+ %i.fa.fa-envelope-square.fa-2x
+ %a{ target: '_blank', href: "https://www.facebook.com/sharer/sharer.php?u=#{root_url}" }
+ %i.fa.fa-facebook-square.fa-2x
+ %a{ target: '_blank', href: "https://twitter.com/intent/tweet?text=#{URI.encode(t("titles.tweet_text", root_url: root_url, thing: t("defaults.thing")))}"}
+ %i.fa.fa-twitter-square.fa-2x
= render :partial => 'things/abandon'
diff --git a/bin/bundle b/bin/bundle
deleted file mode 100755
index 66e9889e8..000000000
--- a/bin/bundle
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-load Gem.bin_path('bundler', 'bundle')
diff --git a/bin/rails b/bin/rails
index 4d608edeb..91546f2ed 100755
--- a/bin/rails
+++ b/bin/rails
@@ -1,8 +1,11 @@
#!/usr/bin/env ruby
begin
- load File.expand_path("../spring", __FILE__)
-rescue LoadError
+ load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+ raise unless e.message.include?('spring')
end
+# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
-require_relative '../config/boot'
+require File.expand_path('../../config/boot', __FILE__)
require 'rails/commands'
diff --git a/bin/rake b/bin/rake
index 8017a0271..615dea908 100755
--- a/bin/rake
+++ b/bin/rake
@@ -1,8 +1,8 @@
#!/usr/bin/env ruby
begin
- load File.expand_path("../spring", __FILE__)
-rescue LoadError
+ load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+ raise unless e.message.include?('spring')
end
-require_relative '../config/boot'
-require 'rake'
-Rake.application.run
+require 'bundler/setup'
+load Gem.bin_path('rake', 'rake')
diff --git a/bin/setup b/bin/setup
deleted file mode 100755
index acdb2c138..000000000
--- a/bin/setup
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env ruby
-require 'pathname'
-
-# path to your application root.
-APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
-
-Dir.chdir APP_ROOT do
- # This script is a starting point to setup your application.
- # Add necessary setup steps to this file:
-
- puts "== Installing dependencies =="
- system "gem install bundler --conservative"
- system "bundle check || bundle install"
-
- # puts "\n== Copying sample files =="
- # unless File.exist?("config/database.yml")
- # system "cp config/database.yml.sample config/database.yml"
- # end
-
- puts "\n== Preparing database =="
- system "bin/rake db:setup"
-
- puts "\n== Removing old logs and tempfiles =="
- system "rm -f log/*"
- system "rm -rf tmp/cache"
-
- puts "\n== Restarting application server =="
- system "touch tmp/restart.txt"
-end
diff --git a/bin/spring b/bin/spring
index 7f24d96fb..7fe232c3a 100755
--- a/bin/spring
+++ b/bin/spring
@@ -1,18 +1,15 @@
#!/usr/bin/env ruby
-# This file loads spring without using Bundler, in order to be fast
-# It gets overwritten when you run the `spring binstub` command
+# This file loads spring without using Bundler, in order to be fast.
+# It gets overwritten when you run the `spring binstub` command.
unless defined?(Spring)
- require "rubygems"
- require "bundler"
+ require 'rubygems'
+ require 'bundler'
- if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m)
- ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
- ENV["GEM_HOME"] = ""
- Gem.paths = ENV
-
- gem "spring", match[1]
- require "spring/binstub"
+ if (match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m))
+ Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(Gem.path_separator) }
+ gem 'spring', match[1]
+ require 'spring/binstub'
end
end
diff --git a/config.ru b/config.ru
index bd83b2541..61c04e13f 100644
--- a/config.ru
+++ b/config.ru
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
diff --git a/config/application.rb b/config/application.rb
index 0d0e499d4..9f952e801 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,6 +1,9 @@
-require File.expand_path('../boot', __FILE__)
+# frozen_string_literal: true
+
+require File.expand_path('boot', __dir__)
require 'rails/all'
+require 'obscenity/active_model'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
diff --git a/config/boot.rb b/config/boot.rb
index 6b750f00b..30e594e23 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,3 +1,5 @@
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+# frozen_string_literal: true
+
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require 'bundler/setup' # Set up gems listed in the Gemfile.
diff --git a/config/database.yml b/config/database.yml
index a89670478..e1d22fbe7 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -1,7 +1,8 @@
development: &DEVELOPMENT
adapter: postgresql
+ user: <%= ENV['DB_USER'] || ENV['USER'] %>
database: adopt_a_thing_development
- host: localhost
+ host: <%= ENV['DB_HOST'] || 'localhost' %>
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
@@ -10,5 +11,8 @@ test:
<<: *DEVELOPMENT
database: adopt_a_thing_test
-production:
- <<: *DEVELOPMENT
+staging: # read from DATABASE_URL
+ adapter: postgresql
+
+production: # read from DATABASE_URL
+ adapter: postgresql
diff --git a/config/environment.rb b/config/environment.rb
index ee8d90dc6..68958b924 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,5 +1,17 @@
+# frozen_string_literal: true
+
# Load the Rails application.
-require File.expand_path('../application', __FILE__)
+require File.expand_path('application', __dir__)
+
+ActionMailer::Base.smtp_settings = {
+ address: 'smtp.sendgrid.net',
+ port: '587',
+ authentication: :plain,
+ user_name: ENV['SENDGRID_USERNAME'],
+ password: ENV['SENDGRID_PASSWORD'],
+ domain: 'heroku.com',
+ enable_starttls_auto: true,
+}
# Initialize the Rails application.
Rails.application.initialize!
diff --git a/config/environments/development.rb b/config/environments/development.rb
index e0e0ea829..1f05fd825 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -1,3 +1,7 @@
+# frozen_string_literal: true
+
+require 'socket'
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
@@ -6,6 +10,10 @@
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
+ # asset host
+ config.action_controller.asset_host = 'http://' + Socket.ip_address_list[1].ip_address + ':3000'
+ config.action_mailer.asset_host = config.action_controller.asset_host
+
# Do not eager load code on boot.
config.eager_load = false
@@ -39,4 +47,8 @@
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
+
+ # For Mailcatcher
+ config.action_mailer.delivery_method = :smtp
+ config.action_mailer.smtp_settings = {address: 'localhost', port: 1025}
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 969d48e72..77c5c8933 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,9 +1,15 @@
+# frozen_string_literal: true
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
config.cache_classes = true
+ # asset host
+ config.action_controller.asset_host = 'https://adoptadrain.sfwater.org'
+ config.action_mailer.asset_host = config.action_controller.asset_host
+
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
# and those relying on copy on write to perform better.
@@ -64,7 +70,7 @@
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
- config.action_mailer.default_url_options = {host: 'adoptahydrant.org'}
+ config.action_mailer.default_url_options = {host: 'adoptadrain.sfwater.org'}
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
diff --git a/config/environments/staging.rb b/config/environments/staging.rb
new file mode 100644
index 000000000..ccda2aea8
--- /dev/null
+++ b/config/environments/staging.rb
@@ -0,0 +1,97 @@
+# frozen_string_literal: true
+
+Rails.application.configure do
+ # Settings specified here will take precedence over those in config/application.rb.
+
+ # Code is not reloaded between requests.
+ config.cache_classes = true
+
+ # asset host
+ # $HEROKU_APP_NAME is used for review apps
+ config.action_controller.asset_host = "https://#{ENV['HEROKU_APP_NAME'] || 'adoptadrainsf-staging'}.herokuapp.com/"
+ config.action_mailer.asset_host = config.action_controller.asset_host
+
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both threaded web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
+
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ # Enable Rack::Cache to put a simple HTTP cache in front of your application
+ # Add `rack-cache` to your Gemfile before enabling this.
+ # For large-scale production use, consider using a caching reverse proxy like
+ # NGINX, varnish or squid.
+ # config.action_dispatch.rack_cache = true
+
+ # Disable serving static files from the `/public` folder by default since
+ # Apache or NGINX already handles this.
+ config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
+
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
+
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
+
+ # Asset digests allow you to set far-future HTTP expiration dates on all assets,
+ # yet still be able to expire them through the digest params.
+ config.assets.digest = true
+
+ # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
+
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
+
+ # Use the lowest log level to ensure availability of diagnostic information
+ # when problems arise.
+ config.log_level = :debug
+
+ # Prepend all log lines with the following tags.
+ # config.log_tags = [ :subdomain, :uuid ]
+
+ # Use a different logger for distributed setups.
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
+
+ # Use a different cache store in staging.
+ # config.cache_store = :mem_cache_store
+
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.action_controller.asset_host = 'http://assets.example.com'
+
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ config.action_mailer.raise_delivery_errors = true
+ config.action_mailer.delivery_method = :smtp
+ config.action_mailer.default_url_options = {host: 'adoptadrain.sfwater.org'}
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation cannot be found).
+ config.i18n.fallbacks = true
+
+ # Send deprecation notices to registered listeners.
+ config.active_support.deprecation = :notify
+
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
+
+ # Do not dump schema after migrations.
+ config.active_record.dump_schema_after_migration = false
+end
+
+ActionMailer::Base.smtp_settings = {
+ address: 'smtp.sendgrid.net',
+ port: '25',
+ authentication: :plain,
+ user_name: ENV['SENDGRID_USERNAME'],
+ password: ENV['SENDGRID_PASSWORD'],
+ domain: ENV['SENDGRID_DOMAIN'],
+}
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 5c6dadfee..065341133 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
diff --git a/config/initializers/airbrake.rb b/config/initializers/airbrake.rb
new file mode 100644
index 000000000..67eed2e60
--- /dev/null
+++ b/config/initializers/airbrake.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+# Airbrake is an online tool that provides robust exception tracking in your Rails
+# applications. In doing so, it allows you to easily review errors, tie an error
+# to an individual piece of code, and trace the cause back to recent
+# changes. Airbrake enables for easy categorization, searching, and prioritization
+# of exceptions so that when errors occur, your team can quickly determine the
+# root cause.
+#
+# Configuration details:
+# https://github.com/airbrake/airbrake-ruby#configuration
+Airbrake.configure do |c|
+ # You must set both project_id & project_key. To find your project_id and
+ # project_key navigate to your project's General Settings and copy the values
+ # from the right sidebar.
+ # https://github.com/airbrake/airbrake-ruby#project_id--project_key
+ c.project_id = ENV['AIRBRAKE_PROJECT_ID'] || 'no airbrake project id'
+ c.project_key = ENV['AIRBRAKE_API_KEY'] || 'no airbrake api key'
+
+ # Configures the root directory of your project. Expects a String or a
+ # Pathname, which represents the path to your project. Providing this option
+ # helps us to filter out repetitive data from backtrace frames and link to
+ # GitHub files from our dashboard.
+ # https://github.com/airbrake/airbrake-ruby#root_directory
+ c.root_directory = Rails.root
+
+ # By default, Airbrake Ruby outputs to STDOUT. In Rails apps it makes sense to
+ # use the Rails' logger.
+ # https://github.com/airbrake/airbrake-ruby#logger
+ c.logger = Rails.logger
+
+ # Configures the environment the application is running in. Helps the Airbrake
+ # dashboard to distinguish between exceptions occurring in different
+ # environments. By default, it's not set.
+ # NOTE: This option must be set in order to make the 'ignore_environments'
+ # option work.
+ # https://github.com/airbrake/airbrake-ruby#environment
+ c.environment = Rails.env
+
+ # Setting this option allows Airbrake to filter exceptions occurring in
+ # unwanted environments such as :test. By default, it is equal to an empty
+ # Array, which means Airbrake Ruby sends exceptions occurring in all
+ # environments.
+ # NOTE: This option *does not* work if you don't set the 'environment' option.
+ # https://github.com/airbrake/airbrake-ruby#ignore_environments
+ c.ignore_environments = %w[development test]
+
+ # A list of parameters that should be filtered out of what is sent to
+ # Airbrake. By default, all "password" attributes will have their contents
+ # replaced.
+ # https://github.com/airbrake/airbrake-ruby#blacklist_keys
+ c.blacklist_keys = [/password/i]
+end
+
+# If Airbrake doesn't send any expected exceptions, we suggest to uncomment the
+# line below. It might simplify debugging of background Airbrake workers, which
+# can silently die.
+# Thread.abort_on_exception = ['test', 'development'].include?(Rails.env)
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 01ef3e663..678efe9fa 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
index 59385cdf3..d0f0d3b5d 100644
--- a/config/initializers/backtrace_silencers.rb
+++ b/config/initializers/backtrace_silencers.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
index 7f70458de..0a23b25ec 100644
--- a/config/initializers/cookies_serializer.rb
+++ b/config/initializers/cookies_serializer.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index 5275d449a..b7b3df94c 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
Devise.setup do |config|
@@ -10,10 +12,10 @@
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
- config.mailer_sender = 'noreply@adoptahydrant.com'
+ config.mailer_sender = 'no-reply@sfwater.org'
# Configure the class responsible to send e-mails.
- # config.mailer = 'Devise::Mailer'
+ config.mailer = 'DeviseMailer'
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index 4a994e1e7..7a4f47b4c 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file.
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index ac033bf9d..aa7435fbc 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
index dc1899682..6e1d16f02 100644
--- a/config/initializers/mime_types.rb
+++ b/config/initializers/mime_types.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
diff --git a/config/initializers/rails_admin.rb b/config/initializers/rails_admin.rb
index 28e479316..74f119ae4 100644
--- a/config/initializers/rails_admin.rb
+++ b/config/initializers/rails_admin.rb
@@ -1,5 +1,43 @@
+# frozen_string_literal: true
+
RailsAdmin.config do |config|
config.authenticate_with do
redirect_to(main_app.root_path, flash: {warning: 'You must be signed-in as an administrator to access that page'}) unless signed_in? && current_user.admin?
end
+
+ config.model 'Reminders' do
+ list do
+ scopes [nil, :only_deleted]
+ end
+ end
+
+ config.model 'Thing' do
+ list do
+ scopes [nil, :only_deleted]
+ end
+
+ label I18n.t('defaults.thing')
+
+ configure :created_at do
+ label 'Drain Import Date'
+ end
+
+ configure :city_id do
+ label 'Maximo ID'
+ end
+ end
+
+ config.model 'User' do
+ list do
+ scopes [nil, :only_deleted]
+ end
+
+ configure :created_at do
+ label 'Account Creation Date'
+ end
+
+ configure :updated_at do
+ label 'Last Login'
+ end
+ end
end
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
deleted file mode 100644
index 5964f4d01..000000000
--- a/config/initializers/secret_token.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key is used for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
-# You can use `rake secret` to generate a secure secret key.
-
-if Rails.env.production? && ENV['SECRET_TOKEN'].blank?
- fail 'The SECRET_TOKEN environment variable is not set.\n
- To generate it, run "rake secret", then set it with "heroku config:set SECRET_TOKEN=the_token_you_generated"'
-end
-
-# Make sure your secret_key_base is kept private
-# if you're sharing your code publicly.
-AdoptAThing::Application.config.secret_key_base = ENV['SECRET_TOKEN'] || 'cfc501e00aeb29750826f86459cccec45ea2c7dd84e8fc0b800dced308be95059b51c3402d215d267cfc09f03bd6f1f531a65456212b3531ef2b10cf605dc39a'
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index 8fcfb0cf8..19cbe93c0 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
Rails.application.config.session_store :cookie_store, key: '_adopt-a-thing_session'
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb
index 33725e95f..246168a42 100644
--- a/config/initializers/wrap_parameters.rb
+++ b/config/initializers/wrap_parameters.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
# Be sure to restart your server when you modify this file.
# This file contains settings for ActionController::ParamsWrapper which
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 9ae0ce779..801016f22 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -29,9 +29,9 @@ de:
neighborhood: "Downtown"
sms_number: "857-555-1212"
state: "MA"
- thing: "Hydrant"
+ thing: "Drain"
this_thing: "Dieser %{thing}"
- tagline: "Verantwortung dafür übernehmen, einen Hydranten auszubuddeln, nachdem es geschneit hat."
+ tagline: "Verantwortung dafür übernehmen, einen Drainen auszubuddeln, nachdem es geschneit hat."
tos: "Mit der Anmeldung erklären Sie sich mit den %{tos} einverstanden."
voice_number: "617-555-1212"
zip: "02201-2013"
@@ -74,7 +74,7 @@ de:
stolen: "%{thing} gestohlen!"
titles:
adopt: "Adoptieren diesen %{thing}"
- adopted: "{thing_name} wurde adoptiert"
+ adopted: "%{thing_name} wurde adoptiert"
byline: "von %{name}"
edit_profile: "Ihr Profil bearbeiten"
main: "%{thing} adoptieren"
@@ -86,6 +86,7 @@ de:
built: "Erbaut in Boston"
cfa: "Code for Amerika"
city: "City of Boston"
+ dt: "Afdeling Technologie"
mayor:
name: "Martin J. Walsh"
title: "Mayor"
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
index 6cd4cd277..b069b5029 100644
--- a/config/locales/devise.en.yml
+++ b/config/locales/devise.en.yml
@@ -20,7 +20,7 @@ en:
confirmation_instructions:
subject: "Confirmation instructions"
reset_password_instructions:
- subject: "Reset password instructions"
+ subject: "%{title} reset password instructions"
unlock_instructions:
subject: "Unlock Instructions"
omniauth_callbacks:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index e4b5b9658..cb8f2a2d4 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -8,33 +8,39 @@ en:
change_password: "Change my password"
close: "Close"
edit_profile: "Edit profile"
- email_password: "Email me my password"
+ email_password: "Reset my password"
find: "Find %{thing}"
- send_reminder: "Send reminder to shovel"
+ send_reminder: "Send reminder to maintain"
sign_in: "Sign in"
sign_out: "Sign out"
sign_up: "Sign up"
+ sign_up_or_in: "Register / Sign in"
update: "Update"
+ subjects:
+ update_report: "%{title} import (%{deleted_adopted_count} adopted %{things} removed, %{created_count} %{things} added, %{deleted_unadopted_count} unadopted %{things} removed)"
captions:
optional: "(optional)"
private: "(private)"
+ private_optional: "(private, optional)"
public: "(visible to others)"
+ public_optional: "(visible to others, optional)"
required: "(required)"
defaults:
address: "address"
- address_1: "1 City Hall Plaza"
+ address_1: "1 Dr Carlton B Goodlett Pl."
address_2: "Suite 500"
- city: "Boston"
- city_state: "Boston, Massachusetts"
- neighborhood: "Downtown"
- sms_number: "857-555-1212"
- state: "MA"
- thing: "hydrant"
+ city: "San Francisco"
+ city_state: "San Francisco, California"
+ neighborhood: "Civic Center"
+ sms_number: "415-555-1212"
+ state: "CA"
+ thing: "drain"
+ things: "drains"
this_thing: "This %{thing}"
- tagline: "Claim responsibility for shoveling out a fire hydrant after it snows."
+ tagline: "What does it mean to adopt a drain?"
tos: "By signing up, you agree to the %{tos}."
- voice_number: "617-555-1212"
- zip: "02201-2013"
+ voice_number: "415-555-1212"
+ zip: "94015-2013"
errors:
password: "You need to sign in or sign up before continuing."
not_found: "Could not find %{thing}."
@@ -45,13 +51,16 @@ en:
city: "City"
city_state: "City"
email: "Email address"
- name: "Name"
+ first_name: "First name"
+ last_name: "Last name"
name_thing: "Give this %{thing} a name"
+ my_things: "My %{things}"
organization: "Organization"
password: "Password"
password_choose: "Choose a password"
password_current: "Current password"
password_new: "New password"
+ password_reset: "Reset password"
remember_me: "Stay signed in"
sms_number: "Mobile phone number"
state: "State"
@@ -63,9 +72,19 @@ en:
feedback: "Send feedback"
forgot_password: "Forgot your password?"
remembered_password: "Never mind. I remembered my password."
+ click_for_more: "Click to learn more"
+ learn_more: "Learn more about adopting a %{thing}"
+ thing_details: "This %{thing} is special! Learn why."
notices:
abandoned: "%{thing} abandoned!"
adopted: "You just adopted a %{thing}!"
+ alpha: >
+ We're just getting started! We'd love to get your feedback or your help with the code .
+
+ Learn more about the project.
password_reset: "Password reset instructions sent! Check your email."
reminder_sent: "Reminder sent!"
signed_in: "Signed in!"
@@ -75,17 +94,26 @@ en:
titles:
adopt: "Adopt this %{thing}"
adopted: "%{thing_name} has been adopted"
+ adopted_tagline: "%{count} %{things} adopted in SF"
byline: "by %{name}"
edit_profile: "Edit your Profile"
- main: "Adopt-a-%{thing}"
+ main: "Adopt-a-%{thing} San Francisco"
ofline: "of %{organization}"
sign_in: "Sign in to adopt this %{thing}"
thank_you: "Thank you for adopting this %{thing}!"
+ email_text: "I just adopted one of San Francisco's 25,000+ storm drains and pledged to help keep it clear of leaves and debris. You, too, can Adopt a Drain and help the City avoid flooding at %{root_url}."
+ tweet_text: "Flooded streets aren't fun. I adopted my own SF storm drain at %{root_url}. Claim and name yours #sfsewer @sfwater"
tos: "Terms of Service"
+ site:
+ description: "You can adopt one of San Francisco's 25,000+ storm drains and pledge to help keep it clear of leaves and debris this rainy season. Lend a hand and help the City avoid flooding."
sponsors:
- built: "Built in Boston"
+ built: "Code for San Francisco"
cfa: "Code for America"
- city: "City of Boston"
+ city: "City of San Francisco"
+ dt: "Department of Technology"
+ datasf: "DataSF"
+ sfpw: "San Francisco Public Works"
+ sfpuc: "San Francisco Public Utilities Commission"
mayor:
- name: "Martin J. Walsh"
+ name: "Edwin M. Lee"
title: "Mayor"
diff --git a/config/locales/es.yml b/config/locales/es.yml
index e79f94d46..7181fbc14 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -86,6 +86,7 @@ es:
built: "Construido en Boston"
cfa: "Código de los Estados Unidos"
city: "Ciudad de Boston"
+ dt: "Departamento de TecnologÃa"
mayor:
name: "Martin J. Walsh"
title: "Mayor"
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index f86df0f6c..0aa11066e 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -86,6 +86,7 @@ fr:
built: "Construit à Boston"
cfa: "Code pour l'Amérique"
city: "Ville de Boston"
+ dt: "Département de technologie"
mayor:
name: "Martin J. Walsh"
title: "Mayor"
diff --git a/config/locales/it.yml b/config/locales/it.yml
index b969e5f60..79ec2067c 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -86,6 +86,7 @@ it:
built: "Costruito in Boston"
cfa: "Code for America"
city: "Città di Boston"
+ dt: "Departimento di Tecnologia"
mayor:
name: "Martin J. Walsh"
title: "Sindaco"
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index a3c215bc2..38cce224f 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -86,6 +86,7 @@ pt:
built: "ConstruÃdo em Boston"
cfa: "Código para a América"
city: "Cidade de Boston"
+ dt: "Departamento de Tecnologia"
mayor:
name: "Martin J. Walsh"
title: "Mayor"
diff --git a/config/routes.rb b/config/routes.rb
index f881c6b75..8715df13d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
Rails.application.routes.draw do
devise_for :users, controllers: {
passwords: 'passwords',
diff --git a/config/secrets.yml b/config/secrets.yml
index e27286998..52ecc8d00 100644
--- a/config/secrets.yml
+++ b/config/secrets.yml
@@ -11,12 +11,19 @@
# if you're sharing your code publicly.
development:
+ google_maps_javascript_api_key:
secret_key_base: 0e16faa4e63cf660f77d2b01b3eea1cf05d92cc2550dd5c6bcdd6c428cacd9ed82cf420376130716e8ce890490cfdb9d30241f12d0043ef1c2356e0ee22c031b
test:
+ google_maps_javascript_api_key:
secret_key_base: de935ed2ec52cc94165a0542fd3fc2aefc5eb56557b31d6333adb15fe413a2ae89b02ffd402b7fc2279dcd9fbcb45f6c4c764937665f0c61abbbf2bf5c70e967
# Do not keep production secrets in the repository,
# instead read values from the environment.
+staging:
+ google_maps_javascript_api_key: <%= ENV["GOOGLE_MAPS_JAVASCRIPT_API_KEY"] %>
+ secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
+
production:
+ google_maps_javascript_api_key: <%= ENV["GOOGLE_MAPS_JAVASCRIPT_API_KEY"] %>
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
diff --git a/config/unicorn.rb b/config/unicorn.rb
index 7150f0667..e9c96a680 100644
--- a/config/unicorn.rb
+++ b/config/unicorn.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
worker_processes 4
timeout 30
preload_app true
diff --git a/db/migrate/00000000000001_create_users.rb b/db/migrate/00000000000001_create_users.rb
index 484364a66..5b6cfb357 100644
--- a/db/migrate/00000000000001_create_users.rb
+++ b/db/migrate/00000000000001_create_users.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
diff --git a/db/migrate/00000000000002_add_devise_to_users.rb b/db/migrate/00000000000002_add_devise_to_users.rb
index cea013aa5..da4fbec49 100644
--- a/db/migrate/00000000000002_add_devise_to_users.rb
+++ b/db/migrate/00000000000002_add_devise_to_users.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class AddDeviseToUsers < ActiveRecord::Migration
def up
change_table(:users) do |t|
@@ -43,6 +45,6 @@ def up
def down
# By default, we don't want to make any assumption about how to roll back a migration when your
# model already existed. Please edit below which fields you would like to remove in this migration.
- fail ActiveRecord::IrreversibleMigration
+ raise ActiveRecord::IrreversibleMigration
end
end
diff --git a/db/migrate/00000000000003_create_things.rb b/db/migrate/00000000000003_create_things.rb
index 14dd457c2..b82ca322c 100644
--- a/db/migrate/00000000000003_create_things.rb
+++ b/db/migrate/00000000000003_create_things.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateThings < ActiveRecord::Migration
def change
create_table :things do |t|
diff --git a/db/migrate/00000000000004_create_reminders.rb b/db/migrate/00000000000004_create_reminders.rb
index e9821e6b5..6b8845e0b 100644
--- a/db/migrate/00000000000004_create_reminders.rb
+++ b/db/migrate/00000000000004_create_reminders.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateReminders < ActiveRecord::Migration
def change
create_table :reminders do |t|
diff --git a/db/migrate/00000000000005_create_rails_admin_histories_table.rb b/db/migrate/00000000000005_create_rails_admin_histories_table.rb
index 97ddaeccc..71b7eafc2 100644
--- a/db/migrate/00000000000005_create_rails_admin_histories_table.rb
+++ b/db/migrate/00000000000005_create_rails_admin_histories_table.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
class CreateRailsAdminHistoriesTable < ActiveRecord::Migration
def change
create_table :rails_admin_histories do |t|
@@ -10,6 +12,6 @@ def change
t.timestamps
end
- add_index(:rails_admin_histories, [:item, :table, :month, :year], name: 'index_rails_admin_histories')
+ add_index(:rails_admin_histories, %i[item table month year], name: 'index_rails_admin_histories')
end
end
diff --git a/db/migrate/20160111062953_add_system_use_code_to_things.rb b/db/migrate/20160111062953_add_system_use_code_to_things.rb
new file mode 100644
index 000000000..c07111932
--- /dev/null
+++ b/db/migrate/20160111062953_add_system_use_code_to_things.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddSystemUseCodeToThings < ActiveRecord::Migration
+ def change
+ add_column :things, :system_use_code, :string
+ end
+end
diff --git a/db/migrate/20160326200455_user_split_name.rb b/db/migrate/20160326200455_user_split_name.rb
new file mode 100644
index 000000000..994f500e2
--- /dev/null
+++ b/db/migrate/20160326200455_user_split_name.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class UserSplitName < ActiveRecord::Migration
+ def up
+ add_column :users, :first_name, :string
+ add_column :users, :last_name, :string
+ execute <<-SQL
+ UPDATE users SET first_name = split_part(name, ' ', 1);
+ UPDATE users SET last_name = ltrim(substring(name, length(first_name) + 1), ' ');
+ SQL
+ remove_column :users, :name
+ end
+
+ def down
+ add_column :users, :name, :string
+ execute <<-SQL
+ UPDATE users SET name = concat(first_name, ' ', last_name);
+ SQL
+ remove_column :users, :first_name
+ remove_column :users, :last_name
+ end
+end
diff --git a/db/migrate/20161205030306_add_deleted_at_to_things.rb b/db/migrate/20161205030306_add_deleted_at_to_things.rb
new file mode 100644
index 000000000..0dfdeaf20
--- /dev/null
+++ b/db/migrate/20161205030306_add_deleted_at_to_things.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class AddDeletedAtToThings < ActiveRecord::Migration
+ def change
+ add_column :things, :deleted_at, :datetime
+ add_index :things, :deleted_at
+ end
+end
diff --git a/db/migrate/20170926173203_add_adopted_name_to_things.rb b/db/migrate/20170926173203_add_adopted_name_to_things.rb
new file mode 100644
index 000000000..941a329bd
--- /dev/null
+++ b/db/migrate/20170926173203_add_adopted_name_to_things.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class AddAdoptedNameToThings < ActiveRecord::Migration
+ def up
+ add_column :things, :adopted_name, :string
+
+ execute <<-SQL
+ UPDATE things SET adopted_name = name WHERE user_id IS NOT NULL;
+ SQL
+ end
+
+ def down
+ remove_column :things, :adopted_name, :string
+ end
+end
diff --git a/db/migrate/20180123031630_enable_earth_distance_extension.rb b/db/migrate/20180123031630_enable_earth_distance_extension.rb
new file mode 100644
index 000000000..190652f81
--- /dev/null
+++ b/db/migrate/20180123031630_enable_earth_distance_extension.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+class EnableEarthDistanceExtension < ActiveRecord::Migration
+ def change
+ enable_extension 'cube'
+ enable_extension 'earthdistance'
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7f34a06a6..d94fb8cc7 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,10 +11,12 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 5) do
+ActiveRecord::Schema.define(version: 20180123031630) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
+ enable_extension "cube"
+ enable_extension "earthdistance"
create_table "rails_admin_histories", force: :cascade do |t|
t.string "message"
@@ -47,18 +49,21 @@
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
- t.decimal "lat", precision: 16, scale: 14, null: false
- t.decimal "lng", precision: 17, scale: 14, null: false
+ t.decimal "lat", precision: 16, scale: 14, null: false
+ t.decimal "lng", precision: 17, scale: 14, null: false
t.integer "city_id"
t.integer "user_id"
+ t.string "system_use_code"
+ t.datetime "deleted_at"
+ t.string "adopted_name"
end
add_index "things", ["city_id"], name: "index_things_on_city_id", unique: true, using: :btree
+ add_index "things", ["deleted_at"], name: "index_things_on_deleted_at", using: :btree
create_table "users", force: :cascade do |t|
t.datetime "created_at"
t.datetime "updated_at"
- t.string "name", null: false
t.string "organization"
t.string "email", null: false
t.string "voice_number"
@@ -78,6 +83,8 @@
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
+ t.string "first_name"
+ t.string "last_name"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
diff --git a/db/seeds.rb b/db/seeds.rb
index 4285bfae7..d933bfe79 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -1,13255 +1,26 @@
-# Data from http://civicapi.couchone.com/boston_fire_hydrants/_all_docs?include_docs=true
+User.where(email: 'john@example.com').first_or_initialize.tap do |user|
+ user.first_name = 'John'
+ user.last_name = 'Doe'
+ user.password = 'password'
+ user.save!
+end
-Thing.create(city_id: 1, lng: -71.049226, lat: 42.383339)
-Thing.create(city_id: 2, lng: -71.075964, lat: 42.381021)
-Thing.create(city_id: 3, lng: -71.073419, lat: 42.380106)
-Thing.create(city_id: 4, lng: -71.070918, lat: 42.377728)
-Thing.create(city_id: 5, lng: -71.071576, lat: 42.377281)
-Thing.create(city_id: 6, lng: -71.065169, lat: 42.375331)
-Thing.create(city_id: 7, lng: -71.056064, lat: 42.373212)
-Thing.create(city_id: 8, lng: -71.038888, lat: 42.374992)
-Thing.create(city_id: 9, lng: -71.139308, lat: 42.345635)
-Thing.create(city_id: 10, lng: -71.038005, lat: 42.371378)
-Thing.create(city_id: 11, lng: -71.02567, lat: 42.374167)
-Thing.create(city_id: 12, lng: -71.02481, lat: 42.373599)
-Thing.create(city_id: 13, lng: -71.02469, lat: 42.373216)
-Thing.create(city_id: 14, lng: -71.023572, lat: 42.372491)
-Thing.create(city_id: 15, lng: -71.022394, lat: 42.371729)
-Thing.create(city_id: 16, lng: -71.088417, lat: 42.292867)
-Thing.create(city_id: 17, lng: -71.057786, lat: 42.366261)
-Thing.create(city_id: 18, lng: -71.128278, lat: 42.361425)
-Thing.create(city_id: 19, lng: -71.068246, lat: 42.360642)
-Thing.create(city_id: 20, lng: -71.049982, lat: 42.362208)
-Thing.create(city_id: 21, lng: -71.05053, lat: 42.362117)
-Thing.create(city_id: 22, lng: -71.04965, lat: 42.361862)
-Thing.create(city_id: 23, lng: -71.049024, lat: 42.361859)
-Thing.create(city_id: 24, lng: -71.037981, lat: 42.365265)
-Thing.create(city_id: 25, lng: -71.034713, lat: 42.364402)
-Thing.create(city_id: 26, lng: -71.032126, lat: 42.362879)
-Thing.create(city_id: 27, lng: -71.140157, lat: 42.356901)
-Thing.create(city_id: 28, lng: -71.162591, lat: 42.355955)
-Thing.create(city_id: 29, lng: -71.092091, lat: 42.321711)
-Thing.create(city_id: 30, lng: -71.160481, lat: 42.349749)
-Thing.create(city_id: 31, lng: -71.08253, lat: 42.307297)
-Thing.create(city_id: 32, lng: -71.089088, lat: 42.290856)
-Thing.create(city_id: 33, lng: -71.137153, lat: 42.34618)
-Thing.create(city_id: 34, lng: -71.138915, lat: 42.346286)
-Thing.create(city_id: 35, lng: -71.083835, lat: 42.280779)
-Thing.create(city_id: 36, lng: -71.052837, lat: 42.358792)
-Thing.create(city_id: 37, lng: -71.052219, lat: 42.356585)
-Thing.create(city_id: 38, lng: -71.077169, lat: 42.349611)
-Thing.create(city_id: 39, lng: -71.056209, lat: 42.35396)
-Thing.create(city_id: 40, lng: -71.058034, lat: 42.353739)
-Thing.create(city_id: 41, lng: -71.057554, lat: 42.353333)
-Thing.create(city_id: 42, lng: -71.059292, lat: 42.353324)
-Thing.create(city_id: 43, lng: -71.061891, lat: 42.353091)
-Thing.create(city_id: 44, lng: -71.061403, lat: 42.352849)
-Thing.create(city_id: 45, lng: -71.061037, lat: 42.352542)
-Thing.create(city_id: 46, lng: -71.05935, lat: 42.352512)
-Thing.create(city_id: 47, lng: -71.061708, lat: 42.35249)
-Thing.create(city_id: 48, lng: -71.0645, lat: 42.352448)
-Thing.create(city_id: 49, lng: -71.064214, lat: 42.351956)
-Thing.create(city_id: 50, lng: -71.059696, lat: 42.351932)
-Thing.create(city_id: 51, lng: -71.060476, lat: 42.351927)
-Thing.create(city_id: 52, lng: -71.065559, lat: 42.350652)
-Thing.create(city_id: 53, lng: -71.057529, lat: 42.350139)
-Thing.create(city_id: 54, lng: -71.053427, lat: 42.353343)
-Thing.create(city_id: 55, lng: -71.049542, lat: 42.350428)
-Thing.create(city_id: 56, lng: -71.051196, lat: 42.349701)
-Thing.create(city_id: 57, lng: -71.088858, lat: 42.344767)
-Thing.create(city_id: 58, lng: -71.055387, lat: 42.347838)
-Thing.create(city_id: 59, lng: -71.057229, lat: 42.344836)
-Thing.create(city_id: 60, lng: -71.074834, lat: 42.389164)
-Thing.create(city_id: 61, lng: -71.161461, lat: 42.275992)
-Thing.create(city_id: 62, lng: -71.057509, lat: 42.294905)
-Thing.create(city_id: 63, lng: -71.160635, lat: 42.276376)
-Thing.create(city_id: 64, lng: -71.057156, lat: 42.344043)
-Thing.create(city_id: 65, lng: -71.055902, lat: 42.294645)
-Thing.create(city_id: 66, lng: -71.064071, lat: 42.315225)
-Thing.create(city_id: 67, lng: -71.050401, lat: 42.29765)
-Thing.create(city_id: 68, lng: -71.050989, lat: 42.366504)
-Thing.create(city_id: 69, lng: -71.067058, lat: 42.290591)
-Thing.create(city_id: 70, lng: -71.058382, lat: 42.355402)
-Thing.create(city_id: 71, lng: -71.136625, lat: 42.236829)
-Thing.create(city_id: 72, lng: -71.136105, lat: 42.236511)
-Thing.create(city_id: 73, lng: -71.058064, lat: 42.355544)
-Thing.create(city_id: 74, lng: -71.057295, lat: 42.355325)
-Thing.create(city_id: 75, lng: -71.075373, lat: 42.388527)
-Thing.create(city_id: 76, lng: -71.016498, lat: 42.388265)
-Thing.create(city_id: 77, lng: -71.072857, lat: 42.388478)
-Thing.create(city_id: 78, lng: -71.056114, lat: 42.355492)
-Thing.create(city_id: 79, lng: -71.060382, lat: 42.29462)
-Thing.create(city_id: 80, lng: -71.044604, lat: 42.351507)
-Thing.create(city_id: 81, lng: -71.059784, lat: 42.299368)
-Thing.create(city_id: 82, lng: -71.059296, lat: 42.299501)
-Thing.create(city_id: 83, lng: -71.058133, lat: 42.297898)
-Thing.create(city_id: 84, lng: -71.0565, lat: 42.296891)
-Thing.create(city_id: 85, lng: -71.064307, lat: 42.299944)
-Thing.create(city_id: 86, lng: -71.061081, lat: 42.294657)
-Thing.create(city_id: 87, lng: -71.055192, lat: 42.295017)
-Thing.create(city_id: 88, lng: -71.047621, lat: 42.296004)
-Thing.create(city_id: 89, lng: -71.046276, lat: 42.352279)
-Thing.create(city_id: 90, lng: -71.056042, lat: 42.282949)
-Thing.create(city_id: 91, lng: -71.046494, lat: 42.352078)
-Thing.create(city_id: 92, lng: -71.054174, lat: 42.296517)
-Thing.create(city_id: 93, lng: -71.074652, lat: 42.38822)
-Thing.create(city_id: 94, lng: -71.056852, lat: 42.297719)
-Thing.create(city_id: 95, lng: -71.05029, lat: 42.298327)
-Thing.create(city_id: 96, lng: -71.050797, lat: 42.29822)
-Thing.create(city_id: 97, lng: -71.051772, lat: 42.298194)
-Thing.create(city_id: 98, lng: -71.05412, lat: 42.298169)
-Thing.create(city_id: 99, lng: -71.074087, lat: 42.38793)
-Thing.create(city_id: 100, lng: -71.053869, lat: 42.297995)
-Thing.create(city_id: 101, lng: -71.05141, lat: 42.297423)
-Thing.create(city_id: 102, lng: -71.053095, lat: 42.297311)
-Thing.create(city_id: 103, lng: -71.047858, lat: 42.297263)
-Thing.create(city_id: 104, lng: -71.0505, lat: 42.297135)
-Thing.create(city_id: 105, lng: -71.01524, lat: 42.387348)
-Thing.create(city_id: 106, lng: -71.053352, lat: 42.296053)
-Thing.create(city_id: 107, lng: -71.00194, lat: 42.387191)
-Thing.create(city_id: 108, lng: -71.052394, lat: 42.295602)
-Thing.create(city_id: 109, lng: -71.047948, lat: 42.295201)
-Thing.create(city_id: 110, lng: -71.051409, lat: 42.294945)
-Thing.create(city_id: 111, lng: -71.053928, lat: 42.294653)
-Thing.create(city_id: 112, lng: -71.053445, lat: 42.295092)
-Thing.create(city_id: 113, lng: -71.074327, lat: 42.305598)
-Thing.create(city_id: 114, lng: -71.07291, lat: 42.305505)
-Thing.create(city_id: 115, lng: -71.073029, lat: 42.305161)
-Thing.create(city_id: 116, lng: -71.068513, lat: 42.304998)
-Thing.create(city_id: 117, lng: -71.000995, lat: 42.386777)
-Thing.create(city_id: 118, lng: -71.070259, lat: 42.304826)
-Thing.create(city_id: 119, lng: -71.00176, lat: 42.386487)
-Thing.create(city_id: 120, lng: -70.99998, lat: 42.386477)
-Thing.create(city_id: 121, lng: -71.070856, lat: 42.304695)
-Thing.create(city_id: 122, lng: -71.068578, lat: 42.304457)
-Thing.create(city_id: 123, lng: -71.000547, lat: 42.386352)
-Thing.create(city_id: 124, lng: -71.069265, lat: 42.304484)
-Thing.create(city_id: 125, lng: -71.068065, lat: 42.30313)
-Thing.create(city_id: 126, lng: -70.998822, lat: 42.386285)
-Thing.create(city_id: 127, lng: -71.067838, lat: 42.302272)
-Thing.create(city_id: 128, lng: -71.083648, lat: 42.350545)
-Thing.create(city_id: 129, lng: -71.082365, lat: 42.350231)
-Thing.create(city_id: 130, lng: -70.999096, lat: 42.385953)
-Thing.create(city_id: 131, lng: -71.083243, lat: 42.352032)
-Thing.create(city_id: 132, lng: -70.997825, lat: 42.38593)
-Thing.create(city_id: 133, lng: -71.07441, lat: 42.354162)
-Thing.create(city_id: 134, lng: -71.071651, lat: 42.353597)
-Thing.create(city_id: 135, lng: -71.021064, lat: 42.385991)
-Thing.create(city_id: 136, lng: -71.073974, lat: 42.353327)
-Thing.create(city_id: 137, lng: -71.07753, lat: 42.352199)
-Thing.create(city_id: 138, lng: -71.073318, lat: 42.35305)
-Thing.create(city_id: 139, lng: -71.075026, lat: 42.352877)
-Thing.create(city_id: 140, lng: -71.076055, lat: 42.352568)
-Thing.create(city_id: 141, lng: -71.072276, lat: 42.35242)
-Thing.create(city_id: 142, lng: -71.078294, lat: 42.352236)
-Thing.create(city_id: 143, lng: -71.07333, lat: 42.352136)
-Thing.create(city_id: 144, lng: -71.075838, lat: 42.352127)
-Thing.create(city_id: 145, lng: -71.074367, lat: 42.351855)
-Thing.create(city_id: 146, lng: -70.996842, lat: 42.385588)
-Thing.create(city_id: 147, lng: -70.999468, lat: 42.385533)
-Thing.create(city_id: 148, lng: -71.070941, lat: 42.351708)
-Thing.create(city_id: 149, lng: -71.075428, lat: 42.351566)
-Thing.create(city_id: 150, lng: -70.999893, lat: 42.385466)
-Thing.create(city_id: 151, lng: -71.07307, lat: 42.351506)
-Thing.create(city_id: 152, lng: -71.072321, lat: 42.35136)
-Thing.create(city_id: 153, lng: -71.076596, lat: 42.351257)
-Thing.create(city_id: 154, lng: -71.073041, lat: 42.350966)
-Thing.create(city_id: 155, lng: -71.072462, lat: 42.385626)
-Thing.create(city_id: 156, lng: -71.073757, lat: 42.350977)
-Thing.create(city_id: 157, lng: -71.07534, lat: 42.350515)
-Thing.create(city_id: 158, lng: -71.077593, lat: 42.350818)
-Thing.create(city_id: 159, lng: -71.078812, lat: 42.350655)
-Thing.create(city_id: 160, lng: -71.071785, lat: 42.350572)
-Thing.create(city_id: 161, lng: -71.072668, lat: 42.350583)
-Thing.create(city_id: 162, lng: -71.079362, lat: 42.3517)
-Thing.create(city_id: 163, lng: -70.997885, lat: 42.385097)
-Thing.create(city_id: 164, lng: -71.076142, lat: 42.350311)
-Thing.create(city_id: 165, lng: -71.070436, lat: 42.349595)
-Thing.create(city_id: 166, lng: -71.07236, lat: 42.349979)
-Thing.create(city_id: 167, lng: -71.070718, lat: 42.349961)
-Thing.create(city_id: 168, lng: -71.071494, lat: 42.349645)
-Thing.create(city_id: 169, lng: -71.074567, lat: 42.349667)
-Thing.create(city_id: 170, lng: -71.079498, lat: 42.34969)
-Thing.create(city_id: 171, lng: -71.072871, lat: 42.353452)
-Thing.create(city_id: 172, lng: -71.06607, lat: 42.350292)
-Thing.create(city_id: 173, lng: -71.066477, lat: 42.349864)
-Thing.create(city_id: 174, lng: -71.066666, lat: 42.349639)
-Thing.create(city_id: 175, lng: -71.04835, lat: 42.353349)
-Thing.create(city_id: 176, lng: -71.00324, lat: 42.386715)
-Thing.create(city_id: 177, lng: -71.043121, lat: 42.346782)
-Thing.create(city_id: 178, lng: -71.027051, lat: 42.344378)
-Thing.create(city_id: 179, lng: -71.155008, lat: 42.342043)
-Thing.create(city_id: 180, lng: -71.064961, lat: 42.343632)
-Thing.create(city_id: 181, lng: -71.065548, lat: 42.343471)
-Thing.create(city_id: 182, lng: -71.063536, lat: 42.342678)
-Thing.create(city_id: 183, lng: -71.057119, lat: 42.342018)
-Thing.create(city_id: 184, lng: -71.083506, lat: 42.335901)
-Thing.create(city_id: 185, lng: -71.042841, lat: 42.351807)
-Thing.create(city_id: 186, lng: -71.045235, lat: 42.338042)
-Thing.create(city_id: 187, lng: -71.050973, lat: 42.336007)
-Thing.create(city_id: 188, lng: -71.042124, lat: 42.335822)
-Thing.create(city_id: 189, lng: -71.04603, lat: 42.353167)
-Thing.create(city_id: 190, lng: -71.05022, lat: 42.335529)
-Thing.create(city_id: 191, lng: -71.049527, lat: 42.335073)
-Thing.create(city_id: 192, lng: -71.048802, lat: 42.334605)
-Thing.create(city_id: 193, lng: -71.048247, lat: 42.352879)
-Thing.create(city_id: 194, lng: -71.105646, lat: 42.331724)
-Thing.create(city_id: 195, lng: -71.080495, lat: 42.332372)
-Thing.create(city_id: 196, lng: -71.080618, lat: 42.332274)
-Thing.create(city_id: 197, lng: -71.083685, lat: 42.331167)
-Thing.create(city_id: 198, lng: -71.070534, lat: 42.328046)
-Thing.create(city_id: 199, lng: -71.051614, lat: 42.332448)
-Thing.create(city_id: 200, lng: -71.109279, lat: 42.325606)
-Thing.create(city_id: 201, lng: -71.074283, lat: 42.322859)
-Thing.create(city_id: 202, lng: -71.03596, lat: 42.364641)
-Thing.create(city_id: 203, lng: -71.044913, lat: 42.352638)
-Thing.create(city_id: 204, lng: -71.04588, lat: 42.351446)
-Thing.create(city_id: 205, lng: -71.04362, lat: 42.351492)
-Thing.create(city_id: 206, lng: -71.056864, lat: 42.354447)
-Thing.create(city_id: 207, lng: -71.060771, lat: 42.353055)
-Thing.create(city_id: 208, lng: -71.05072, lat: 42.350551)
-Thing.create(city_id: 209, lng: -71.058942, lat: 42.350072)
-Thing.create(city_id: 210, lng: -71.049882, lat: 42.351371)
-Thing.create(city_id: 211, lng: -71.054977, lat: 42.322549)
-Thing.create(city_id: 212, lng: -71.108356, lat: 42.320941)
-Thing.create(city_id: 213, lng: -71.100219, lat: 42.320727)
-Thing.create(city_id: 214, lng: -71.048568, lat: 42.350545)
-Thing.create(city_id: 215, lng: -71.068694, lat: 42.320647)
-Thing.create(city_id: 216, lng: -71.067008, lat: 42.320603)
-Thing.create(city_id: 217, lng: -71.050018, lat: 42.349951)
-Thing.create(city_id: 218, lng: -71.049259, lat: 42.349624)
-Thing.create(city_id: 219, lng: -71.105369, lat: 42.315091)
-Thing.create(city_id: 220, lng: -71.079667, lat: 42.314384)
-Thing.create(city_id: 221, lng: -71.06942, lat: 42.357972)
-Thing.create(city_id: 222, lng: -71.075198, lat: 42.306956)
-Thing.create(city_id: 223, lng: -71.049978, lat: 42.349531)
-Thing.create(city_id: 224, lng: -71.054188, lat: 42.302433)
-Thing.create(city_id: 225, lng: -71.106396, lat: 42.298827)
-Thing.create(city_id: 226, lng: -71.06076, lat: 42.298238)
-Thing.create(city_id: 227, lng: -71.108814, lat: 42.288075)
-Thing.create(city_id: 228, lng: -71.064757, lat: 42.28877)
-Thing.create(city_id: 229, lng: -71.159114, lat: 42.283091)
-Thing.create(city_id: 230, lng: -71.046203, lat: 42.350732)
-Thing.create(city_id: 231, lng: -71.070893, lat: 42.27276)
-Thing.create(city_id: 232, lng: -71.171672, lat: 42.272299)
-Thing.create(city_id: 233, lng: -71.096088, lat: 42.26756)
-Thing.create(city_id: 234, lng: -71.092363, lat: 42.271502)
-Thing.create(city_id: 235, lng: -71.049216, lat: 42.352547)
-Thing.create(city_id: 236, lng: -71.069282, lat: 42.357566)
-Thing.create(city_id: 237, lng: -71.068807, lat: 42.356943)
-Thing.create(city_id: 238, lng: -71.066697, lat: 42.35686)
-Thing.create(city_id: 239, lng: -71.006789, lat: 42.393074)
-Thing.create(city_id: 240, lng: -71.070087, lat: 42.356645)
-Thing.create(city_id: 241, lng: -71.067703, lat: 42.356653)
-Thing.create(city_id: 242, lng: -71.072199, lat: 42.355601)
-Thing.create(city_id: 243, lng: -71.012586, lat: 42.392756)
-Thing.create(city_id: 244, lng: -71.057567, lat: 42.313563)
-Thing.create(city_id: 245, lng: -71.054086, lat: 42.356581)
-Thing.create(city_id: 246, lng: -71.054739, lat: 42.314737)
-Thing.create(city_id: 247, lng: -71.066498, lat: 42.314772)
-Thing.create(city_id: 248, lng: -71.013063, lat: 42.392238)
-Thing.create(city_id: 249, lng: -71.060979, lat: 42.314102)
-Thing.create(city_id: 250, lng: -71.061634, lat: 42.313967)
-Thing.create(city_id: 251, lng: -71.055601, lat: 42.314414)
-Thing.create(city_id: 252, lng: -71.054115, lat: 42.314397)
-Thing.create(city_id: 253, lng: -71.054342, lat: 42.31371)
-Thing.create(city_id: 254, lng: -71.062273, lat: 42.313329)
-Thing.create(city_id: 255, lng: -71.055879, lat: 42.313701)
-Thing.create(city_id: 256, lng: -71.054996, lat: 42.313918)
-Thing.create(city_id: 257, lng: -71.058321, lat: 42.313832)
-Thing.create(city_id: 258, lng: -71.052639, lat: 42.316143)
-Thing.create(city_id: 259, lng: -71.061098, lat: 42.313665)
-Thing.create(city_id: 260, lng: -71.060438, lat: 42.313179)
-Thing.create(city_id: 261, lng: -71.056544, lat: 42.313438)
-Thing.create(city_id: 262, lng: -71.061394, lat: 42.312358)
-Thing.create(city_id: 263, lng: -71.054592, lat: 42.313048)
-Thing.create(city_id: 264, lng: -71.056848, lat: 42.313002)
-Thing.create(city_id: 265, lng: -71.058262, lat: 42.311951)
-Thing.create(city_id: 266, lng: -71.056126, lat: 42.31294)
-Thing.create(city_id: 267, lng: -71.054882, lat: 42.312324)
-Thing.create(city_id: 268, lng: -71.061245, lat: 42.312922)
-Thing.create(city_id: 269, lng: -71.056249, lat: 42.328663)
-Thing.create(city_id: 270, lng: -71.048418, lat: 42.315604)
-Thing.create(city_id: 271, lng: -71.058577, lat: 42.312752)
-Thing.create(city_id: 272, lng: -71.060396, lat: 42.311969)
-Thing.create(city_id: 273, lng: -71.05572, lat: 42.31266)
-Thing.create(city_id: 274, lng: -71.052609, lat: 42.315369)
-Thing.create(city_id: 275, lng: -71.060321, lat: 42.312639)
-Thing.create(city_id: 276, lng: -71.059017, lat: 42.311923)
-Thing.create(city_id: 277, lng: -71.056289, lat: 42.311944)
-Thing.create(city_id: 278, lng: -71.054061, lat: 42.311865)
-Thing.create(city_id: 279, lng: -71.070368, lat: 42.390494)
-Thing.create(city_id: 280, lng: -71.061469, lat: 42.311722)
-Thing.create(city_id: 281, lng: -71.047026, lat: 42.314772)
-Thing.create(city_id: 282, lng: -71.05542, lat: 42.311539)
-Thing.create(city_id: 283, lng: -71.074808, lat: 42.390316)
-Thing.create(city_id: 284, lng: -71.010413, lat: 42.389985)
-Thing.create(city_id: 285, lng: -71.054612, lat: 42.311479)
-Thing.create(city_id: 286, lng: -71.070363, lat: 42.390221)
-Thing.create(city_id: 287, lng: -71.060551, lat: 42.311377)
-Thing.create(city_id: 288, lng: -71.058405, lat: 42.311246)
-Thing.create(city_id: 289, lng: -71.059248, lat: 42.311191)
-Thing.create(city_id: 290, lng: -71.062166, lat: 42.312089)
-Thing.create(city_id: 291, lng: -71.052683, lat: 42.314568)
-Thing.create(city_id: 292, lng: -71.06125, lat: 42.314622)
-Thing.create(city_id: 293, lng: -71.075221, lat: 42.389662)
-Thing.create(city_id: 294, lng: -71.073524, lat: 42.389653)
-Thing.create(city_id: 295, lng: -71.008413, lat: 42.389256)
-Thing.create(city_id: 296, lng: -71.062031, lat: 42.376806)
-Thing.create(city_id: 297, lng: -71.058395, lat: 42.376183)
-Thing.create(city_id: 298, lng: -71.066229, lat: 42.376745)
-Thing.create(city_id: 299, lng: -71.067778, lat: 42.373769)
-Thing.create(city_id: 300, lng: -71.056892, lat: 42.376751)
-Thing.create(city_id: 301, lng: -71.056103, lat: 42.376807)
-Thing.create(city_id: 302, lng: -71.060543, lat: 42.370242)
-Thing.create(city_id: 303, lng: -71.05961, lat: 42.376714)
-Thing.create(city_id: 304, lng: -71.070177, lat: 42.377844)
-Thing.create(city_id: 305, lng: -71.061644, lat: 42.370622)
-Thing.create(city_id: 306, lng: -71.067078, lat: 42.376683)
-Thing.create(city_id: 307, lng: -71.053878, lat: 42.377619)
-Thing.create(city_id: 308, lng: -71.06938, lat: 42.376442)
-Thing.create(city_id: 309, lng: -71.055198, lat: 42.328626)
-Thing.create(city_id: 310, lng: -71.075092, lat: 42.377623)
-Thing.create(city_id: 311, lng: -71.061586, lat: 42.376344)
-Thing.create(city_id: 312, lng: -71.031722, lat: 42.37741)
-Thing.create(city_id: 313, lng: -71.053566, lat: 42.376508)
-Thing.create(city_id: 314, lng: -71.064051, lat: 42.376826)
-Thing.create(city_id: 315, lng: -71.063236, lat: 42.376493)
-Thing.create(city_id: 316, lng: -71.068218, lat: 42.375498)
-Thing.create(city_id: 317, lng: -71.055269, lat: 42.37634)
-Thing.create(city_id: 318, lng: -71.056443, lat: 42.376233)
-Thing.create(city_id: 319, lng: -71.065611, lat: 42.376301)
-Thing.create(city_id: 320, lng: -71.058052, lat: 42.376299)
-Thing.create(city_id: 321, lng: -71.06664, lat: 42.374482)
-Thing.create(city_id: 322, lng: -71.05876, lat: 42.376171)
-Thing.create(city_id: 323, lng: -71.060097, lat: 42.376064)
-Thing.create(city_id: 324, lng: -71.062273, lat: 42.376157)
-Thing.create(city_id: 325, lng: -71.064299, lat: 42.376179)
-Thing.create(city_id: 326, lng: -71.054137, lat: 42.32864)
-Thing.create(city_id: 327, lng: -71.05681, lat: 42.375984)
-Thing.create(city_id: 328, lng: -71.05309, lat: 42.328654)
-Thing.create(city_id: 329, lng: -71.071996, lat: 42.276078)
-Thing.create(city_id: 330, lng: -71.07417, lat: 42.333141)
-Thing.create(city_id: 331, lng: -71.032654, lat: 42.377166)
-Thing.create(city_id: 332, lng: -71.077838, lat: 42.333142)
-Thing.create(city_id: 333, lng: -71.150761, lat: 42.281231)
-Thing.create(city_id: 334, lng: -71.069916, lat: 42.337538)
-Thing.create(city_id: 335, lng: -71.078665, lat: 42.333144)
-Thing.create(city_id: 336, lng: -71.071095, lat: 42.333067)
-Thing.create(city_id: 337, lng: -71.069929, lat: 42.334899)
-Thing.create(city_id: 338, lng: -71.067679, lat: 42.33541)
-Thing.create(city_id: 339, lng: -71.041967, lat: 42.34663)
-Thing.create(city_id: 340, lng: -71.075438, lat: 42.338468)
-Thing.create(city_id: 341, lng: -71.042525, lat: 42.346609)
-Thing.create(city_id: 342, lng: -71.041323, lat: 42.347137)
-Thing.create(city_id: 343, lng: -71.042863, lat: 42.347392)
-Thing.create(city_id: 344, lng: -71.040329, lat: 42.346365)
-Thing.create(city_id: 345, lng: -71.025956, lat: 42.376817)
-Thing.create(city_id: 346, lng: -71.02703, lat: 42.376691)
-Thing.create(city_id: 347, lng: -71.074291, lat: 42.376634)
-Thing.create(city_id: 348, lng: -71.023055, lat: 42.376234)
-Thing.create(city_id: 349, lng: -71.032688, lat: 42.376151)
-Thing.create(city_id: 350, lng: -71.026134, lat: 42.376116)
-Thing.create(city_id: 351, lng: -71.073804, lat: 42.376117)
-Thing.create(city_id: 352, lng: -71.061363, lat: 42.375863)
-Thing.create(city_id: 353, lng: -71.068952, lat: 42.375859)
-Thing.create(city_id: 354, lng: -71.025342, lat: 42.375615)
-Thing.create(city_id: 355, lng: -71.055894, lat: 42.375711)
-Thing.create(city_id: 356, lng: -71.028678, lat: 42.375572)
-Thing.create(city_id: 357, lng: -71.029027, lat: 42.375435)
-Thing.create(city_id: 358, lng: -71.115141, lat: 42.316397)
-Thing.create(city_id: 359, lng: -71.100509, lat: 42.285411)
-Thing.create(city_id: 360, lng: -71.002338, lat: 42.391972)
-Thing.create(city_id: 361, lng: -71.071894, lat: 42.379038)
-Thing.create(city_id: 362, lng: -71.101741, lat: 42.28507)
-Thing.create(city_id: 363, lng: -71.113629, lat: 42.311536)
-Thing.create(city_id: 364, lng: -71.099715, lat: 42.284414)
-Thing.create(city_id: 365, lng: -71.066954, lat: 42.378953)
-Thing.create(city_id: 366, lng: -71.066991, lat: 42.378444)
-Thing.create(city_id: 367, lng: -71.112856, lat: 42.311428)
-Thing.create(city_id: 368, lng: -71.100921, lat: 42.284038)
-Thing.create(city_id: 369, lng: -71.166936, lat: 42.358194)
-Thing.create(city_id: 370, lng: -71.112492, lat: 42.31187)
-Thing.create(city_id: 371, lng: -71.075497, lat: 42.384418)
-Thing.create(city_id: 372, lng: -71.101647, lat: 42.284491)
-Thing.create(city_id: 373, lng: -71.169693, lat: 42.358257)
-Thing.create(city_id: 374, lng: -71.055842, lat: 42.384215)
-Thing.create(city_id: 375, lng: -71.073873, lat: 42.378497)
-Thing.create(city_id: 376, lng: -71.110652, lat: 42.311418)
-Thing.create(city_id: 377, lng: -71.111504, lat: 42.311832)
-Thing.create(city_id: 378, lng: -71.110833, lat: 42.312162)
-Thing.create(city_id: 379, lng: -71.057861, lat: 42.356606)
-Thing.create(city_id: 380, lng: -71.110031, lat: 42.311815)
-Thing.create(city_id: 381, lng: -71.053584, lat: 42.356872)
-Thing.create(city_id: 382, lng: -71.05288, lat: 42.357097)
-Thing.create(city_id: 383, lng: -71.053109, lat: 42.356873)
-Thing.create(city_id: 384, lng: -71.044266, lat: 42.350729)
-Thing.create(city_id: 385, lng: -71.057888, lat: 42.355868)
-Thing.create(city_id: 386, lng: -71.109125, lat: 42.311423)
-Thing.create(city_id: 387, lng: -71.056444, lat: 42.383812)
-Thing.create(city_id: 388, lng: -71.108308, lat: 42.311075)
-Thing.create(city_id: 389, lng: -71.051617, lat: 42.383364)
-Thing.create(city_id: 390, lng: -71.022461, lat: 42.383164)
-Thing.create(city_id: 391, lng: -71.03732, lat: 42.383109)
-Thing.create(city_id: 392, lng: -71.04909, lat: 42.382963)
-Thing.create(city_id: 393, lng: -71.076634, lat: 42.344577)
-Thing.create(city_id: 394, lng: -71.060193, lat: 42.382924)
-Thing.create(city_id: 395, lng: -71.077356, lat: 42.344494)
-Thing.create(city_id: 396, lng: -71.070354, lat: 42.344328)
-Thing.create(city_id: 397, lng: -71.067246, lat: 42.344307)
-Thing.create(city_id: 398, lng: -71.052364, lat: 42.38275)
-Thing.create(city_id: 399, lng: -71.078538, lat: 42.344315)
-Thing.create(city_id: 400, lng: -71.075269, lat: 42.344189)
-Thing.create(city_id: 401, lng: -71.064269, lat: 42.345681)
-Thing.create(city_id: 402, lng: -71.066807, lat: 42.347027)
-Thing.create(city_id: 403, lng: -71.076024, lat: 42.344019)
-Thing.create(city_id: 404, lng: -71.068035, lat: 42.346423)
-Thing.create(city_id: 405, lng: -71.070653, lat: 42.344598)
-Thing.create(city_id: 406, lng: -71.068708, lat: 42.347021)
-Thing.create(city_id: 407, lng: -71.07905, lat: 42.34467)
-Thing.create(city_id: 408, lng: -71.065982, lat: 42.346803)
-Thing.create(city_id: 409, lng: -71.064759, lat: 42.346591)
-Thing.create(city_id: 410, lng: -71.049668, lat: 42.382653)
-Thing.create(city_id: 411, lng: -71.066325, lat: 42.346076)
-Thing.create(city_id: 412, lng: -71.023165, lat: 42.382532)
-Thing.create(city_id: 413, lng: -71.061484, lat: 42.345702)
-Thing.create(city_id: 414, lng: -71.064761, lat: 42.344843)
-Thing.create(city_id: 415, lng: -71.082625, lat: 42.35077)
-Thing.create(city_id: 416, lng: -71.061177, lat: 42.345888)
-Thing.create(city_id: 417, lng: -71.025533, lat: 42.382455)
-Thing.create(city_id: 418, lng: -71.04992, lat: 42.34731)
-Thing.create(city_id: 419, lng: -71.051046, lat: 42.347177)
-Thing.create(city_id: 420, lng: -71.049177, lat: 42.34699)
-Thing.create(city_id: 421, lng: -71.057139, lat: 42.383442)
-Thing.create(city_id: 422, lng: -71.049241, lat: 42.346489)
-Thing.create(city_id: 423, lng: -71.042288, lat: 42.345197)
-Thing.create(city_id: 424, lng: -71.055449, lat: 42.383111)
-Thing.create(city_id: 425, lng: -71.05323, lat: 42.34433)
-Thing.create(city_id: 426, lng: -71.041611, lat: 42.34476)
-Thing.create(city_id: 427, lng: -71.051564, lat: 42.345442)
-Thing.create(city_id: 428, lng: -71.051144, lat: 42.346212)
-Thing.create(city_id: 429, lng: -71.050363, lat: 42.347495)
-Thing.create(city_id: 430, lng: -71.028118, lat: 42.344145)
-Thing.create(city_id: 431, lng: -71.02897, lat: 42.344123)
-Thing.create(city_id: 432, lng: -71.031997, lat: 42.344051)
-Thing.create(city_id: 433, lng: -71.086951, lat: 42.351612)
-Thing.create(city_id: 434, lng: -71.055319, lat: 42.382386)
-Thing.create(city_id: 435, lng: -71.034035, lat: 42.34401)
-Thing.create(city_id: 436, lng: -71.072911, lat: 42.382421)
-Thing.create(city_id: 437, lng: -71.056611, lat: 42.382353)
-Thing.create(city_id: 438, lng: -71.080337, lat: 42.351411)
-Thing.create(city_id: 439, lng: -71.052547, lat: 42.382317)
-Thing.create(city_id: 440, lng: -71.081588, lat: 42.351101)
-Thing.create(city_id: 441, lng: -71.057144, lat: 42.382291)
-Thing.create(city_id: 442, lng: -71.052514, lat: 42.382271)
-Thing.create(city_id: 443, lng: -71.080073, lat: 42.350888)
-Thing.create(city_id: 444, lng: -71.050267, lat: 42.38222)
-Thing.create(city_id: 445, lng: -71.053673, lat: 42.382203)
-Thing.create(city_id: 446, lng: -71.05282, lat: 42.382198)
-Thing.create(city_id: 447, lng: -71.054452, lat: 42.382185)
-Thing.create(city_id: 448, lng: -71.060758, lat: 42.382198)
-Thing.create(city_id: 449, lng: -71.055207, lat: 42.382168)
-Thing.create(city_id: 450, lng: -71.060446, lat: 42.32183)
-Thing.create(city_id: 451, lng: -71.056884, lat: 42.321788)
-Thing.create(city_id: 452, lng: -71.059455, lat: 42.321476)
-Thing.create(city_id: 453, lng: -71.025242, lat: 42.381977)
-Thing.create(city_id: 454, lng: -71.05764, lat: 42.321149)
-Thing.create(city_id: 455, lng: -71.063818, lat: 42.3211)
-Thing.create(city_id: 456, lng: -71.062961, lat: 42.320987)
-Thing.create(city_id: 457, lng: -71.060659, lat: 42.320922)
-Thing.create(city_id: 458, lng: -71.056872, lat: 42.320856)
-Thing.create(city_id: 459, lng: -71.061409, lat: 42.320727)
-Thing.create(city_id: 460, lng: -71.076296, lat: 42.382038)
-Thing.create(city_id: 461, lng: -71.061945, lat: 42.320548)
-Thing.create(city_id: 462, lng: -71.076328, lat: 42.382014)
-Thing.create(city_id: 463, lng: -71.067371, lat: 42.318092)
-Thing.create(city_id: 464, lng: -71.068334, lat: 42.365974)
-Thing.create(city_id: 465, lng: -71.058613, lat: 42.320803)
-Thing.create(city_id: 466, lng: -71.077431, lat: 42.381983)
-Thing.create(city_id: 467, lng: -71.059784, lat: 42.320742)
-Thing.create(city_id: 468, lng: -71.064255, lat: 42.320445)
-Thing.create(city_id: 469, lng: -71.119099, lat: 42.285442)
-Thing.create(city_id: 470, lng: -71.056229, lat: 42.381863)
-Thing.create(city_id: 471, lng: -71.077794, lat: 42.381927)
-Thing.create(city_id: 472, lng: -71.058437, lat: 42.320188)
-Thing.create(city_id: 473, lng: -71.067006, lat: 42.318343)
-Thing.create(city_id: 474, lng: -71.057804, lat: 42.32195)
-Thing.create(city_id: 475, lng: -71.060779, lat: 42.320081)
-Thing.create(city_id: 476, lng: -71.057229, lat: 42.320361)
-Thing.create(city_id: 477, lng: -71.056854, lat: 42.320105)
-Thing.create(city_id: 478, lng: -71.072574, lat: 42.381805)
-Thing.create(city_id: 479, lng: -71.075313, lat: 42.381806)
-Thing.create(city_id: 480, lng: -71.057623, lat: 42.320463)
-Thing.create(city_id: 481, lng: -71.063237, lat: 42.320275)
-Thing.create(city_id: 482, lng: -71.065914, lat: 42.320059)
-Thing.create(city_id: 483, lng: -71.059688, lat: 42.3201)
-Thing.create(city_id: 484, lng: -71.055022, lat: 42.381605)
-Thing.create(city_id: 485, lng: -71.064918, lat: 42.319876)
-Thing.create(city_id: 486, lng: -71.063746, lat: 42.319848)
-Thing.create(city_id: 487, lng: -71.062279, lat: 42.319803)
-Thing.create(city_id: 488, lng: -71.066386, lat: 42.319451)
-Thing.create(city_id: 489, lng: -71.058349, lat: 42.319324)
-Thing.create(city_id: 490, lng: -71.025766, lat: 42.381389)
-Thing.create(city_id: 491, lng: -71.061263, lat: 42.319349)
-Thing.create(city_id: 492, lng: -71.059247, lat: 42.319267)
-Thing.create(city_id: 493, lng: -71.024459, lat: 42.381382)
-Thing.create(city_id: 494, lng: -71.023469, lat: 42.381354)
-Thing.create(city_id: 495, lng: -71.063144, lat: 42.319346)
-Thing.create(city_id: 496, lng: -71.062013, lat: 42.319317)
-Thing.create(city_id: 497, lng: -71.060807, lat: 42.318197)
-Thing.create(city_id: 498, lng: -71.053642, lat: 42.381405)
-Thing.create(city_id: 499, lng: -71.056839, lat: 42.319223)
-Thing.create(city_id: 500, lng: -71.064242, lat: 42.318943)
-Thing.create(city_id: 501, lng: -71.065325, lat: 42.31887)
-Thing.create(city_id: 502, lng: -71.059711, lat: 42.318723)
-Thing.create(city_id: 503, lng: -71.057788, lat: 42.318586)
-Thing.create(city_id: 504, lng: -71.061674, lat: 42.318544)
-Thing.create(city_id: 505, lng: -71.064021, lat: 42.318143)
-Thing.create(city_id: 506, lng: -71.052806, lat: 42.381296)
-Thing.create(city_id: 507, lng: -71.054229, lat: 42.381494)
-Thing.create(city_id: 508, lng: -71.05909, lat: 42.31802)
-Thing.create(city_id: 509, lng: -71.067532, lat: 42.381298)
-Thing.create(city_id: 510, lng: -71.051909, lat: 42.381188)
-Thing.create(city_id: 511, lng: -71.058439, lat: 42.31799)
-Thing.create(city_id: 512, lng: -71.061991, lat: 42.317884)
-Thing.create(city_id: 513, lng: -71.059998, lat: 42.318028)
-Thing.create(city_id: 514, lng: -71.05754, lat: 42.317824)
-Thing.create(city_id: 515, lng: -71.066341, lat: 42.317669)
-Thing.create(city_id: 516, lng: -71.065043, lat: 42.317554)
-Thing.create(city_id: 517, lng: -71.058331, lat: 42.317462)
-Thing.create(city_id: 518, lng: -71.064199, lat: 42.317434)
-Thing.create(city_id: 519, lng: -71.060787, lat: 42.31737)
-Thing.create(city_id: 520, lng: -71.059292, lat: 42.317342)
-Thing.create(city_id: 521, lng: -71.061554, lat: 42.31729)
-Thing.create(city_id: 522, lng: -71.057336, lat: 42.317246)
-Thing.create(city_id: 523, lng: -71.066721, lat: 42.380902)
-Thing.create(city_id: 524, lng: -71.062252, lat: 42.31726)
-Thing.create(city_id: 525, lng: -71.065033, lat: 42.317209)
-Thing.create(city_id: 526, lng: -71.056793, lat: 42.316875)
-Thing.create(city_id: 527, lng: -71.065699, lat: 42.31681)
-Thing.create(city_id: 528, lng: -71.058564, lat: 42.316634)
-Thing.create(city_id: 529, lng: -71.06715, lat: 42.380711)
-Thing.create(city_id: 530, lng: -71.059519, lat: 42.316595)
-Thing.create(city_id: 531, lng: -71.057727, lat: 42.31931)
-Thing.create(city_id: 532, lng: -71.076608, lat: 42.380655)
-Thing.create(city_id: 533, lng: -71.062351, lat: 42.318262)
-Thing.create(city_id: 534, lng: -71.057832, lat: 42.326063)
-Thing.create(city_id: 535, lng: -71.0651, lat: 42.321241)
-Thing.create(city_id: 536, lng: -71.062358, lat: 42.318894)
-Thing.create(city_id: 537, lng: -71.067241, lat: 42.322898)
-Thing.create(city_id: 538, lng: -71.056985, lat: 42.327034)
-Thing.create(city_id: 539, lng: -71.0561, lat: 42.326889)
-Thing.create(city_id: 540, lng: -71.036011, lat: 42.380433)
-Thing.create(city_id: 541, lng: -71.067002, lat: 42.380548)
-Thing.create(city_id: 542, lng: -71.058563, lat: 42.326784)
-Thing.create(city_id: 543, lng: -71.055277, lat: 42.326523)
-Thing.create(city_id: 544, lng: -71.054574, lat: 42.325861)
-Thing.create(city_id: 545, lng: -71.057917, lat: 42.325636)
-Thing.create(city_id: 546, lng: -71.061091, lat: 42.380468)
-Thing.create(city_id: 547, lng: -71.060159, lat: 42.325574)
-Thing.create(city_id: 548, lng: -71.071185, lat: 42.380499)
-Thing.create(city_id: 549, lng: -71.041641, lat: 42.380384)
-Thing.create(city_id: 550, lng: -71.057201, lat: 42.325439)
-Thing.create(city_id: 551, lng: -71.058481, lat: 42.325209)
-Thing.create(city_id: 552, lng: -71.057601, lat: 42.324964)
-Thing.create(city_id: 553, lng: -71.065623, lat: 42.380364)
-Thing.create(city_id: 554, lng: -71.059333, lat: 42.325069)
-Thing.create(city_id: 555, lng: -71.058821, lat: 42.324593)
-Thing.create(city_id: 556, lng: -71.068108, lat: 42.378336)
-Thing.create(city_id: 557, lng: -71.025037, lat: 42.380021)
-Thing.create(city_id: 558, lng: -71.027474, lat: 42.38003)
-Thing.create(city_id: 559, lng: -71.071622, lat: 42.380184)
-Thing.create(city_id: 560, lng: -71.060262, lat: 42.3801)
-Thing.create(city_id: 561, lng: -71.069882, lat: 42.378249)
-Thing.create(city_id: 562, lng: -71.073009, lat: 42.378221)
-Thing.create(city_id: 563, lng: -71.064805, lat: 42.379951)
-Thing.create(city_id: 564, lng: -71.068896, lat: 42.377909)
-Thing.create(city_id: 565, lng: -71.061028, lat: 42.381365)
-Thing.create(city_id: 566, lng: -71.068479, lat: 42.376758)
-Thing.create(city_id: 567, lng: -71.072654, lat: 42.378218)
-Thing.create(city_id: 568, lng: -71.067495, lat: 42.377809)
-Thing.create(city_id: 569, lng: -71.069438, lat: 42.377508)
-Thing.create(city_id: 570, lng: -71.068013, lat: 42.377183)
-Thing.create(city_id: 571, lng: -71.069156, lat: 42.37704)
-Thing.create(city_id: 572, lng: -71.074906, lat: 42.380009)
-Thing.create(city_id: 573, lng: -71.070899, lat: 42.382031)
-Thing.create(city_id: 574, lng: -71.066913, lat: 42.377297)
-Thing.create(city_id: 575, lng: -71.059451, lat: 42.379771)
-Thing.create(city_id: 576, lng: -71.119384, lat: 42.248292)
-Thing.create(city_id: 577, lng: -71.072061, lat: 42.382055)
-Thing.create(city_id: 578, lng: -71.028223, lat: 42.379568)
-Thing.create(city_id: 579, lng: -71.071772, lat: 42.381553)
-Thing.create(city_id: 580, lng: -71.024807, lat: 42.379469)
-Thing.create(city_id: 581, lng: -71.065272, lat: 42.382262)
-Thing.create(city_id: 582, lng: -71.06451, lat: 42.381943)
-Thing.create(city_id: 583, lng: -71.063658, lat: 42.381583)
-Thing.create(city_id: 584, lng: -71.064681, lat: 42.381281)
-Thing.create(city_id: 585, lng: -71.062782, lat: 42.381213)
-Thing.create(city_id: 586, lng: -71.061989, lat: 42.380878)
-Thing.create(city_id: 587, lng: -71.063968, lat: 42.380641)
-Thing.create(city_id: 588, lng: -71.062839, lat: 42.380368)
-Thing.create(city_id: 589, lng: -71.058164, lat: 42.380215)
-Thing.create(city_id: 590, lng: -71.057483, lat: 42.380144)
-Thing.create(city_id: 591, lng: -71.062332, lat: 42.380121)
-Thing.create(city_id: 592, lng: -71.029028, lat: 42.379273)
-Thing.create(city_id: 593, lng: -71.056806, lat: 42.379963)
-Thing.create(city_id: 594, lng: -71.058372, lat: 42.379859)
-Thing.create(city_id: 595, lng: -71.055798, lat: 42.379842)
-Thing.create(city_id: 596, lng: -71.05494, lat: 42.379672)
-Thing.create(city_id: 597, lng: -71.061958, lat: 42.379829)
-Thing.create(city_id: 598, lng: -71.065518, lat: 42.379835)
-Thing.create(city_id: 599, lng: -71.056939, lat: 42.3796)
-Thing.create(city_id: 600, lng: -71.06602, lat: 42.379588)
-Thing.create(city_id: 601, lng: -71.056038, lat: 42.379523)
-Thing.create(city_id: 602, lng: -71.063966, lat: 42.37953)
-Thing.create(city_id: 603, lng: -71.060993, lat: 42.379518)
-Thing.create(city_id: 604, lng: -71.058418, lat: 42.379377)
-Thing.create(city_id: 605, lng: -71.063724, lat: 42.379314)
-Thing.create(city_id: 606, lng: -71.059097, lat: 42.379269)
-Thing.create(city_id: 607, lng: -71.064842, lat: 42.379244)
-Thing.create(city_id: 608, lng: -71.063136, lat: 42.379111)
-Thing.create(city_id: 609, lng: -71.057645, lat: 42.379101)
-Thing.create(city_id: 610, lng: -71.056575, lat: 42.379079)
-Thing.create(city_id: 611, lng: -71.061373, lat: 42.37901)
-Thing.create(city_id: 612, lng: -71.071545, lat: 42.277421)
-Thing.create(city_id: 613, lng: -71.118714, lat: 42.248693)
-Thing.create(city_id: 614, lng: -71.070445, lat: 42.277653)
-Thing.create(city_id: 615, lng: -71.131825, lat: 42.249655)
-Thing.create(city_id: 616, lng: -71.073659, lat: 42.379111)
-Thing.create(city_id: 617, lng: -71.130893, lat: 42.249267)
-Thing.create(city_id: 618, lng: -71.07093, lat: 42.379079)
-Thing.create(city_id: 619, lng: -71.05068, lat: 42.37895)
-Thing.create(city_id: 620, lng: -71.1181, lat: 42.249186)
-Thing.create(city_id: 621, lng: -71.123782, lat: 42.243099)
-Thing.create(city_id: 622, lng: -71.060325, lat: 42.29415)
-Thing.create(city_id: 623, lng: -71.053648, lat: 42.286663)
-Thing.create(city_id: 624, lng: -71.052673, lat: 42.286792)
-Thing.create(city_id: 625, lng: -71.11578, lat: 42.31611)
-Thing.create(city_id: 626, lng: -71.050753, lat: 42.287009)
-Thing.create(city_id: 627, lng: -71.049794, lat: 42.287208)
-Thing.create(city_id: 628, lng: -71.070993, lat: 42.275246)
-Thing.create(city_id: 629, lng: -71.031408, lat: 42.363923)
-Thing.create(city_id: 630, lng: -71.02502, lat: 42.378608)
-Thing.create(city_id: 631, lng: -71.071873, lat: 42.378787)
-Thing.create(city_id: 632, lng: -71.070375, lat: 42.27592)
-Thing.create(city_id: 633, lng: -71.115029, lat: 42.315863)
-Thing.create(city_id: 634, lng: -71.113286, lat: 42.313046)
-Thing.create(city_id: 635, lng: -71.112443, lat: 42.312791)
-Thing.create(city_id: 636, lng: -71.059313, lat: 42.29441)
-Thing.create(city_id: 637, lng: -71.054938, lat: 42.294258)
-Thing.create(city_id: 638, lng: -71.059585, lat: 42.293389)
-Thing.create(city_id: 639, lng: -71.055813, lat: 42.294026)
-Thing.create(city_id: 640, lng: -71.050184, lat: 42.293719)
-Thing.create(city_id: 641, lng: -71.061255, lat: 42.293909)
-Thing.create(city_id: 642, lng: -71.057859, lat: 42.293811)
-Thing.create(city_id: 643, lng: -71.056988, lat: 42.293729)
-Thing.create(city_id: 644, lng: -71.058866, lat: 42.293783)
-Thing.create(city_id: 645, lng: -71.06047, lat: 42.293197)
-Thing.create(city_id: 646, lng: -71.061457, lat: 42.292914)
-Thing.create(city_id: 647, lng: -71.069071, lat: 42.378543)
-Thing.create(city_id: 648, lng: -71.057367, lat: 42.299568)
-Thing.create(city_id: 649, lng: -71.065045, lat: 42.299552)
-Thing.create(city_id: 650, lng: -71.070566, lat: 42.378506)
-Thing.create(city_id: 651, lng: -71.062135, lat: 42.299333)
-Thing.create(city_id: 652, lng: -71.057985, lat: 42.29911)
-Thing.create(city_id: 653, lng: -71.05886, lat: 42.299074)
-Thing.create(city_id: 654, lng: -71.055496, lat: 42.298808)
-Thing.create(city_id: 655, lng: -71.059875, lat: 42.298808)
-Thing.create(city_id: 656, lng: -71.054747, lat: 42.298651)
-Thing.create(city_id: 657, lng: -71.057273, lat: 42.29838)
-Thing.create(city_id: 658, lng: -71.056274, lat: 42.298377)
-Thing.create(city_id: 659, lng: -71.055105, lat: 42.297995)
-Thing.create(city_id: 660, lng: -71.059085, lat: 42.29765)
-Thing.create(city_id: 661, lng: -71.055928, lat: 42.297513)
-Thing.create(city_id: 662, lng: -71.06106, lat: 42.297596)
-Thing.create(city_id: 663, lng: -71.060007, lat: 42.297405)
-Thing.create(city_id: 664, lng: -71.05675, lat: 42.297315)
-Thing.create(city_id: 665, lng: -71.057188, lat: 42.296107)
-Thing.create(city_id: 666, lng: -71.056042, lat: 42.296947)
-Thing.create(city_id: 667, lng: -71.05849, lat: 42.296751)
-Thing.create(city_id: 668, lng: -71.05943, lat: 42.296503)
-Thing.create(city_id: 669, lng: -71.055208, lat: 42.296347)
-Thing.create(city_id: 670, lng: -71.055545, lat: 42.295775)
-Thing.create(city_id: 671, lng: -71.058419, lat: 42.295745)
-Thing.create(city_id: 672, lng: -71.054299, lat: 42.295701)
-Thing.create(city_id: 673, lng: -71.057441, lat: 42.295516)
-Thing.create(city_id: 674, lng: -71.059873, lat: 42.295341)
-Thing.create(city_id: 675, lng: -71.05637, lat: 42.295201)
-Thing.create(city_id: 676, lng: -71.060923, lat: 42.295135)
-Thing.create(city_id: 677, lng: -71.054139, lat: 42.295175)
-Thing.create(city_id: 678, lng: -71.058435, lat: 42.294951)
-Thing.create(city_id: 679, lng: -71.060853, lat: 42.37773)
-Thing.create(city_id: 680, lng: -71.023374, lat: 42.368666)
-Thing.create(city_id: 681, lng: -71.139289, lat: 42.293751)
-Thing.create(city_id: 682, lng: -71.055115, lat: 42.368765)
-Thing.create(city_id: 683, lng: -71.018145, lat: 42.368605)
-Thing.create(city_id: 684, lng: -71.026734, lat: 42.368581)
-Thing.create(city_id: 685, lng: -71.030557, lat: 42.36858)
-Thing.create(city_id: 686, lng: -71.033842, lat: 42.370192)
-Thing.create(city_id: 687, lng: -71.028428, lat: 42.37002)
-Thing.create(city_id: 688, lng: -71.019638, lat: 42.369826)
-Thing.create(city_id: 689, lng: -71.017898, lat: 42.369462)
-Thing.create(city_id: 690, lng: -71.023925, lat: 42.369339)
-Thing.create(city_id: 691, lng: -71.069157, lat: 42.320359)
-Thing.create(city_id: 692, lng: -71.126065, lat: 42.369365)
-Thing.create(city_id: 693, lng: -71.024372, lat: 42.368825)
-Thing.create(city_id: 694, lng: -71.028309, lat: 42.368484)
-Thing.create(city_id: 695, lng: -71.01571, lat: 42.36843)
-Thing.create(city_id: 696, lng: -71.040014, lat: 42.368442)
-Thing.create(city_id: 697, lng: -71.021787, lat: 42.368318)
-Thing.create(city_id: 698, lng: -71.056457, lat: 42.368363)
-Thing.create(city_id: 699, lng: -71.028039, lat: 42.36822)
-Thing.create(city_id: 700, lng: -71.056445, lat: 42.368219)
-Thing.create(city_id: 701, lng: -71.040311, lat: 42.368088)
-Thing.create(city_id: 702, lng: -71.028731, lat: 42.368019)
-Thing.create(city_id: 703, lng: -71.027909, lat: 42.368006)
-Thing.create(city_id: 704, lng: -71.025941, lat: 42.367992)
-Thing.create(city_id: 705, lng: -71.055675, lat: 42.368092)
-Thing.create(city_id: 706, lng: -71.042157, lat: 42.367899)
-Thing.create(city_id: 707, lng: -71.02084, lat: 42.367808)
-Thing.create(city_id: 708, lng: -71.054298, lat: 42.367939)
-Thing.create(city_id: 709, lng: -71.056203, lat: 42.367943)
-Thing.create(city_id: 710, lng: -71.02529, lat: 42.367813)
-Thing.create(city_id: 711, lng: -71.017712, lat: 42.367781)
-Thing.create(city_id: 712, lng: -71.054905, lat: 42.367891)
-Thing.create(city_id: 713, lng: -71.040542, lat: 42.367797)
-Thing.create(city_id: 714, lng: -71.036943, lat: 42.367741)
-Thing.create(city_id: 715, lng: -71.060985, lat: 42.367826)
-Thing.create(city_id: 716, lng: -71.027733, lat: 42.367685)
-Thing.create(city_id: 717, lng: -71.01993, lat: 42.367587)
-Thing.create(city_id: 718, lng: -71.056537, lat: 42.367688)
-Thing.create(city_id: 719, lng: -71.0145, lat: 42.367509)
-Thing.create(city_id: 720, lng: -71.122768, lat: 42.36791)
-Thing.create(city_id: 721, lng: -71.062736, lat: 42.367692)
-Thing.create(city_id: 722, lng: -71.057367, lat: 42.367661)
-Thing.create(city_id: 723, lng: -71.061272, lat: 42.367659)
-Thing.create(city_id: 724, lng: -71.064688, lat: 42.367641)
-Thing.create(city_id: 725, lng: -71.053283, lat: 42.367579)
-Thing.create(city_id: 726, lng: -71.036406, lat: 42.367501)
-Thing.create(city_id: 727, lng: -71.062173, lat: 42.367589)
-Thing.create(city_id: 728, lng: -71.018251, lat: 42.367386)
-Thing.create(city_id: 729, lng: -71.065916, lat: 42.367567)
-Thing.create(city_id: 730, lng: -71.121211, lat: 42.367761)
-Thing.create(city_id: 731, lng: -71.017012, lat: 42.367365)
-Thing.create(city_id: 732, lng: -71.121918, lat: 42.367754)
-Thing.create(city_id: 733, lng: -71.01798, lat: 42.367333)
-Thing.create(city_id: 734, lng: -71.029376, lat: 42.367357)
-Thing.create(city_id: 735, lng: -71.037463, lat: 42.367387)
-Thing.create(city_id: 736, lng: -71.028337, lat: 42.367342)
-Thing.create(city_id: 737, lng: -71.120273, lat: 42.367667)
-Thing.create(city_id: 738, lng: -71.053383, lat: 42.36739)
-Thing.create(city_id: 739, lng: -71.020408, lat: 42.383878)
-Thing.create(city_id: 740, lng: -71.016177, lat: 42.367211)
-Thing.create(city_id: 741, lng: -71.055037, lat: 42.367356)
-Thing.create(city_id: 742, lng: -71.052575, lat: 42.367342)
-Thing.create(city_id: 743, lng: -71.058994, lat: 42.367327)
-Thing.create(city_id: 744, lng: -71.104474, lat: 42.30678)
-Thing.create(city_id: 745, lng: -71.015708, lat: 42.38374)
-Thing.create(city_id: 746, lng: -71.066826, lat: 42.367312)
-Thing.create(city_id: 747, lng: -71.062204, lat: 42.36729)
-Thing.create(city_id: 748, lng: -71.058248, lat: 42.367271)
-Thing.create(city_id: 749, lng: -71.119179, lat: 42.367467)
-Thing.create(city_id: 750, lng: -71.05795, lat: 42.367219)
-Thing.create(city_id: 751, lng: -71.056528, lat: 42.367191)
-Thing.create(city_id: 752, lng: -71.056794, lat: 42.367177)
-Thing.create(city_id: 753, lng: -71.035419, lat: 42.367065)
-Thing.create(city_id: 754, lng: -71.016997, lat: 42.366974)
-Thing.create(city_id: 755, lng: -71.023809, lat: 42.366999)
-Thing.create(city_id: 756, lng: -71.021996, lat: 42.38371)
-Thing.create(city_id: 757, lng: -71.052644, lat: 42.367082)
-Thing.create(city_id: 758, lng: -71.054433, lat: 42.367078)
-Thing.create(city_id: 759, lng: -71.060669, lat: 42.3671)
-Thing.create(city_id: 760, lng: -71.027361, lat: 42.366938)
-Thing.create(city_id: 761, lng: -71.058755, lat: 42.367019)
-Thing.create(city_id: 762, lng: -71.056168, lat: 42.367004)
-Thing.create(city_id: 763, lng: -71.053336, lat: 42.36698)
-Thing.create(city_id: 764, lng: -71.020244, lat: 42.383319)
-Thing.create(city_id: 765, lng: -71.053844, lat: 42.366975)
-Thing.create(city_id: 766, lng: -71.029331, lat: 42.366858)
-Thing.create(city_id: 767, lng: -71.064973, lat: 42.366984)
-Thing.create(city_id: 768, lng: -71.033044, lat: 42.366836)
-Thing.create(city_id: 769, lng: -71.030221, lat: 42.366822)
-Thing.create(city_id: 770, lng: -71.017594, lat: 42.366726)
-Thing.create(city_id: 771, lng: -71.05251, lat: 42.366861)
-Thing.create(city_id: 772, lng: -71.124303, lat: 42.367587)
-Thing.create(city_id: 773, lng: -71.057252, lat: 42.36776)
-Thing.create(city_id: 774, lng: -71.054123, lat: 42.367669)
-Thing.create(city_id: 775, lng: -71.018324, lat: 42.367457)
-Thing.create(city_id: 776, lng: -71.058771, lat: 42.366879)
-Thing.create(city_id: 777, lng: -71.061691, lat: 42.366886)
-Thing.create(city_id: 778, lng: -71.01807, lat: 42.3667)
-Thing.create(city_id: 779, lng: -71.036975, lat: 42.366768)
-Thing.create(city_id: 780, lng: -71.051988, lat: 42.366806)
-Thing.create(city_id: 781, lng: -71.017337, lat: 42.366652)
-Thing.create(city_id: 782, lng: -71.034474, lat: 42.366652)
-Thing.create(city_id: 783, lng: -71.118531, lat: 42.36696)
-Thing.create(city_id: 784, lng: -71.037842, lat: 42.366659)
-Thing.create(city_id: 785, lng: -71.022759, lat: 42.366596)
-Thing.create(city_id: 786, lng: -71.064376, lat: 42.366749)
-Thing.create(city_id: 787, lng: -71.025556, lat: 42.366587)
-Thing.create(city_id: 788, lng: -71.058362, lat: 42.366711)
-Thing.create(city_id: 789, lng: -71.055611, lat: 42.366679)
-Thing.create(city_id: 790, lng: -71.058364, lat: 42.366675)
-Thing.create(city_id: 791, lng: -71.057459, lat: 42.366653)
-Thing.create(city_id: 792, lng: -71.061206, lat: 42.366651)
-Thing.create(city_id: 793, lng: -71.058634, lat: 42.366636)
-Thing.create(city_id: 794, lng: -71.066302, lat: 42.36665)
-Thing.create(city_id: 795, lng: -71.123201, lat: 42.366841)
-Thing.create(city_id: 796, lng: -71.060031, lat: 42.366589)
-Thing.create(city_id: 797, lng: -71.054652, lat: 42.366561)
-Thing.create(city_id: 798, lng: -71.056431, lat: 42.366555)
-Thing.create(city_id: 799, lng: -71.032091, lat: 42.366424)
-Thing.create(city_id: 800, lng: -71.051659, lat: 42.366491)
-Thing.create(city_id: 801, lng: -71.053572, lat: 42.366496)
-Thing.create(city_id: 802, lng: -71.063592, lat: 42.366527)
-Thing.create(city_id: 803, lng: -71.059464, lat: 42.366507)
-Thing.create(city_id: 804, lng: -71.063066, lat: 42.366501)
-Thing.create(city_id: 805, lng: -71.051535, lat: 42.366455)
-Thing.create(city_id: 806, lng: -71.052843, lat: 42.366451)
-Thing.create(city_id: 807, lng: -71.12226, lat: 42.36669)
-Thing.create(city_id: 808, lng: -71.022177, lat: 42.366316)
-Thing.create(city_id: 809, lng: -71.052118, lat: 42.366364)
-Thing.create(city_id: 810, lng: -71.063508, lat: 42.366404)
-Thing.create(city_id: 811, lng: -71.033616, lat: 42.366281)
-Thing.create(city_id: 812, lng: -71.016927, lat: 42.366201)
-Thing.create(city_id: 813, lng: -71.121221, lat: 42.366572)
-Thing.create(city_id: 814, lng: -71.057606, lat: 42.366328)
-Thing.create(city_id: 815, lng: -71.02733, lat: 42.366195)
-Thing.create(city_id: 816, lng: -71.017078, lat: 42.366147)
-Thing.create(city_id: 817, lng: -71.055763, lat: 42.366266)
-Thing.create(city_id: 818, lng: -71.02455, lat: 42.366129)
-Thing.create(city_id: 819, lng: -71.059375, lat: 42.366256)
-Thing.create(city_id: 820, lng: -71.051442, lat: 42.366214)
-Thing.create(city_id: 821, lng: -71.063312, lat: 42.366232)
-Thing.create(city_id: 822, lng: -71.016014, lat: 42.366038)
-Thing.create(city_id: 823, lng: -71.067777, lat: 42.36623)
-Thing.create(city_id: 824, lng: -71.059093, lat: 42.366165)
-Thing.create(city_id: 825, lng: -71.057804, lat: 42.366136)
-Thing.create(city_id: 826, lng: -71.035307, lat: 42.366037)
-Thing.create(city_id: 827, lng: -71.056878, lat: 42.366094)
-Thing.create(city_id: 828, lng: -71.059648, lat: 42.3661)
-Thing.create(city_id: 829, lng: -71.031032, lat: 42.365977)
-Thing.create(city_id: 830, lng: -71.056481, lat: 42.366074)
-Thing.create(city_id: 831, lng: -71.122123, lat: 42.366272)
-Thing.create(city_id: 832, lng: -71.039038, lat: 42.365969)
-Thing.create(city_id: 833, lng: -71.032817, lat: 42.36594)
-Thing.create(city_id: 834, lng: -71.118186, lat: 42.366217)
-Thing.create(city_id: 835, lng: -71.033815, lat: 42.36588)
-Thing.create(city_id: 836, lng: -71.060568, lat: 42.365963)
-Thing.create(city_id: 837, lng: -71.058278, lat: 42.365951)
-Thing.create(city_id: 838, lng: -71.123334, lat: 42.366159)
-Thing.create(city_id: 839, lng: -71.051239, lat: 42.365894)
-Thing.create(city_id: 840, lng: -71.051332, lat: 42.365889)
-Thing.create(city_id: 841, lng: -71.048773, lat: 42.340739)
-Thing.create(city_id: 842, lng: -71.029271, lat: 42.334127)
-Thing.create(city_id: 843, lng: -71.050355, lat: 42.340385)
-Thing.create(city_id: 844, lng: -71.051395, lat: 42.340719)
-Thing.create(city_id: 845, lng: -71.049779, lat: 42.33956)
-Thing.create(city_id: 846, lng: -71.052046, lat: 42.340164)
-Thing.create(city_id: 847, lng: -71.105584, lat: 42.303588)
-Thing.create(city_id: 848, lng: -71.072998, lat: 42.375499)
-Thing.create(city_id: 849, lng: -71.07145, lat: 42.375482)
-Thing.create(city_id: 850, lng: -71.047884, lat: 42.340314)
-Thing.create(city_id: 851, lng: -71.05326, lat: 42.340266)
-Thing.create(city_id: 852, lng: -71.104859, lat: 42.30305)
-Thing.create(city_id: 853, lng: -71.039879, lat: 42.375211)
-Thing.create(city_id: 854, lng: -71.055031, lat: 42.356048)
-Thing.create(city_id: 855, lng: -71.024549, lat: 42.375111)
-Thing.create(city_id: 856, lng: -71.052558, lat: 42.339814)
-Thing.create(city_id: 857, lng: -71.023033, lat: 42.383329)
-Thing.create(city_id: 858, lng: -71.05168, lat: 42.339241)
-Thing.create(city_id: 859, lng: -71.098461, lat: 42.311237)
-Thing.create(city_id: 860, lng: -71.099365, lat: 42.311581)
-Thing.create(city_id: 861, lng: -71.132978, lat: 42.252898)
-Thing.create(city_id: 862, lng: -71.100197, lat: 42.311899)
-Thing.create(city_id: 863, lng: -71.054298, lat: 42.375132)
-Thing.create(city_id: 864, lng: -71.021315, lat: 42.374994)
-Thing.create(city_id: 865, lng: -71.102811, lat: 42.314948)
-Thing.create(city_id: 866, lng: -71.018806, lat: 42.383084)
-Thing.create(city_id: 867, lng: -71.120881, lat: 42.247444)
-Thing.create(city_id: 868, lng: -71.132276, lat: 42.253562)
-Thing.create(city_id: 869, lng: -71.038888, lat: 42.374992)
-Thing.create(city_id: 870, lng: -71.026735, lat: 42.374941)
-Thing.create(city_id: 871, lng: -71.055338, lat: 42.328247)
-Thing.create(city_id: 872, lng: -71.123368, lat: 42.246264)
-Thing.create(city_id: 873, lng: -71.121662, lat: 42.247008)
-Thing.create(city_id: 874, lng: -71.065106, lat: 42.339352)
-Thing.create(city_id: 875, lng: -71.072299, lat: 42.276914)
-Thing.create(city_id: 876, lng: -71.026655, lat: 42.374789)
-Thing.create(city_id: 877, lng: -71.072591, lat: 42.277692)
-Thing.create(city_id: 878, lng: -71.023631, lat: 42.374698)
-Thing.create(city_id: 879, lng: -71.069817, lat: 42.318916)
-Thing.create(city_id: 880, lng: -71.070638, lat: 42.319662)
-Thing.create(city_id: 881, lng: -71.0708, lat: 42.319551)
-Thing.create(city_id: 882, lng: -71.053564, lat: 42.327338)
-Thing.create(city_id: 883, lng: -71.040021, lat: 42.374698)
-Thing.create(city_id: 884, lng: -71.069165, lat: 42.31883)
-Thing.create(city_id: 885, lng: -71.020677, lat: 42.374522)
-Thing.create(city_id: 886, lng: -71.065934, lat: 42.374672)
-Thing.create(city_id: 887, lng: -71.067694, lat: 42.374662)
-Thing.create(city_id: 888, lng: -71.068271, lat: 42.374578)
-Thing.create(city_id: 889, lng: -71.02323, lat: 42.374255)
-Thing.create(city_id: 890, lng: -71.060611, lat: 42.374349)
-Thing.create(city_id: 891, lng: -71.029832, lat: 42.374155)
-Thing.create(city_id: 892, lng: -71.040409, lat: 42.374078)
-Thing.create(city_id: 893, lng: -71.01758, lat: 42.38303)
-Thing.create(city_id: 894, lng: -71.019242, lat: 42.382408)
-Thing.create(city_id: 895, lng: -71.021934, lat: 42.382424)
-Thing.create(city_id: 896, lng: -71.015345, lat: 42.382182)
-Thing.create(city_id: 897, lng: -71.021058, lat: 42.382985)
-Thing.create(city_id: 898, lng: -71.070039, lat: 42.374063)
-Thing.create(city_id: 899, lng: -71.065508, lat: 42.374009)
-Thing.create(city_id: 900, lng: -71.023503, lat: 42.382906)
-Thing.create(city_id: 901, lng: -71.132316, lat: 42.283965)
-Thing.create(city_id: 902, lng: -71.12312, lat: 42.243536)
-Thing.create(city_id: 903, lng: -71.059, lat: 42.355588)
-Thing.create(city_id: 904, lng: -71.074005, lat: 42.330298)
-Thing.create(city_id: 905, lng: -71.020065, lat: 42.374054)
-Thing.create(city_id: 906, lng: -71.079795, lat: 42.321372)
-Thing.create(city_id: 907, lng: -71.070085, lat: 42.373947)
-Thing.create(city_id: 908, lng: -71.030409, lat: 42.373782)
-Thing.create(city_id: 909, lng: -71.068729, lat: 42.373911)
-Thing.create(city_id: 910, lng: -71.078937, lat: 42.32208)
-Thing.create(city_id: 911, lng: -71.066889, lat: 42.373886)
-Thing.create(city_id: 912, lng: -71.078247, lat: 42.322609)
-Thing.create(city_id: 913, lng: -71.020249, lat: 42.373598)
-Thing.create(city_id: 914, lng: -71.093331, lat: 42.316515)
-Thing.create(city_id: 915, lng: -71.02481, lat: 42.373599)
-Thing.create(city_id: 916, lng: -71.105573, lat: 42.301851)
-Thing.create(city_id: 917, lng: -71.022154, lat: 42.373565)
-Thing.create(city_id: 918, lng: -71.104357, lat: 42.302852)
-Thing.create(city_id: 919, lng: -71.113696, lat: 42.266817)
-Thing.create(city_id: 920, lng: -71.122445, lat: 42.242866)
-Thing.create(city_id: 921, lng: -71.066955, lat: 42.37369)
-Thing.create(city_id: 922, lng: -71.030912, lat: 42.373524)
-Thing.create(city_id: 923, lng: -71.104802, lat: 42.302471)
-Thing.create(city_id: 924, lng: -71.019921, lat: 42.382802)
-Thing.create(city_id: 925, lng: -71.040891, lat: 42.373489)
-Thing.create(city_id: 926, lng: -71.017377, lat: 42.382221)
-Thing.create(city_id: 927, lng: -71.057648, lat: 42.373534)
-Thing.create(city_id: 928, lng: -71.016371, lat: 42.382589)
-Thing.create(city_id: 929, lng: -71.112641, lat: 42.267127)
-Thing.create(city_id: 930, lng: -71.024241, lat: 42.382287)
-Thing.create(city_id: 931, lng: -71.037866, lat: 42.373318)
-Thing.create(city_id: 932, lng: -71.036665, lat: 42.373313)
-Thing.create(city_id: 933, lng: -71.059653, lat: 42.373362)
-Thing.create(city_id: 934, lng: -71.024689, lat: 42.373216)
-Thing.create(city_id: 935, lng: -71.029419, lat: 42.373208)
-Thing.create(city_id: 936, lng: -71.065879, lat: 42.373196)
-Thing.create(city_id: 937, lng: -71.05708, lat: 42.373119)
-Thing.create(city_id: 938, lng: -71.041361, lat: 42.372916)
-Thing.create(city_id: 939, lng: -71.054968, lat: 42.372902)
-Thing.create(city_id: 940, lng: -71.020738, lat: 42.372717)
-Thing.create(city_id: 941, lng: -71.031833, lat: 42.372737)
-Thing.create(city_id: 942, lng: -71.040732, lat: 42.372746)
-Thing.create(city_id: 943, lng: -71.028569, lat: 42.372687)
-Thing.create(city_id: 944, lng: -71.035378, lat: 42.372707)
-Thing.create(city_id: 945, lng: -71.037412, lat: 42.372654)
-Thing.create(city_id: 946, lng: -71.057228, lat: 42.372732)
-Thing.create(city_id: 947, lng: -71.062555, lat: 42.372732)
-Thing.create(city_id: 948, lng: -71.075392, lat: 42.345989)
-Thing.create(city_id: 949, lng: -71.070299, lat: 42.372732)
-Thing.create(city_id: 950, lng: -71.078215, lat: 42.34589)
-Thing.create(city_id: 951, lng: -71.023572, lat: 42.372492)
-Thing.create(city_id: 952, lng: -71.076525, lat: 42.345914)
-Thing.create(city_id: 953, lng: -71.05535, lat: 42.372597)
-Thing.create(city_id: 954, lng: -71.074007, lat: 42.345791)
-Thing.create(city_id: 955, lng: -71.070071, lat: 42.372611)
-Thing.create(city_id: 956, lng: -71.069473, lat: 42.34569)
-Thing.create(city_id: 957, lng: -71.070161, lat: 42.345623)
-Thing.create(city_id: 958, lng: -71.056172, lat: 42.372403)
-Thing.create(city_id: 959, lng: -71.041813, lat: 42.372344)
-Thing.create(city_id: 960, lng: -71.075966, lat: 42.345545)
-Thing.create(city_id: 961, lng: -71.075881, lat: 42.345191)
-Thing.create(city_id: 962, lng: -71.071488, lat: 42.345616)
-Thing.create(city_id: 963, lng: -71.034232, lat: 42.37222)
-Thing.create(city_id: 964, lng: -71.068937, lat: 42.345277)
-Thing.create(city_id: 965, lng: -71.077087, lat: 42.34513)
-Thing.create(city_id: 966, lng: -71.078344, lat: 42.345175)
-Thing.create(city_id: 967, lng: -71.035154, lat: 42.372159)
-Thing.create(city_id: 968, lng: -71.075009, lat: 42.345177)
-Thing.create(city_id: 969, lng: -71.07393, lat: 42.344967)
-Thing.create(city_id: 970, lng: -71.070337, lat: 42.344542)
-Thing.create(city_id: 971, lng: -71.07564, lat: 42.344977)
-Thing.create(city_id: 972, lng: -71.077868, lat: 42.344829)
-Thing.create(city_id: 973, lng: -71.026344, lat: 42.371976)
-Thing.create(city_id: 974, lng: -71.061467, lat: 42.372052)
-Thing.create(city_id: 975, lng: -71.059658, lat: 42.371989)
-Thing.create(city_id: 976, lng: -71.074948, lat: 42.345602)
-Thing.create(city_id: 977, lng: -71.033629, lat: 42.37184)
-Thing.create(city_id: 978, lng: -71.06694, lat: 42.344767)
-Thing.create(city_id: 979, lng: -71.022393, lat: 42.37173)
-Thing.create(city_id: 980, lng: -71.068089, lat: 42.3446)
-Thing.create(city_id: 981, lng: -71.025152, lat: 42.371679)
-Thing.create(city_id: 982, lng: -71.074484, lat: 42.346309)
-Thing.create(city_id: 983, lng: -71.073765, lat: 42.346287)
-Thing.create(city_id: 984, lng: -71.026864, lat: 42.371616)
-Thing.create(city_id: 985, lng: -71.034417, lat: 42.371602)
-Thing.create(city_id: 986, lng: -71.055492, lat: 42.373525)
-Thing.create(city_id: 987, lng: -71.02076, lat: 42.373236)
-Thing.create(city_id: 988, lng: -71.071943, lat: 42.34928)
-Thing.create(city_id: 989, lng: -71.066703, lat: 42.373146)
-Thing.create(city_id: 990, lng: -71.065272, lat: 42.372941)
-Thing.create(city_id: 991, lng: -71.074557, lat: 42.346069)
-Thing.create(city_id: 992, lng: -71.074086, lat: 42.348227)
-Thing.create(city_id: 993, lng: -71.071994, lat: 42.34634)
-Thing.create(city_id: 994, lng: -71.039804, lat: 42.371437)
-Thing.create(city_id: 995, lng: -71.033243, lat: 42.371368)
-Thing.create(city_id: 996, lng: -71.060641, lat: 42.37139)
-Thing.create(city_id: 997, lng: -71.057459, lat: 42.371361)
-Thing.create(city_id: 998, lng: -71.058293, lat: 42.371361)
-Thing.create(city_id: 999, lng: -71.061467, lat: 42.371333)
-Thing.create(city_id: 1000, lng: -71.032512, lat: 42.37111)
-Thing.create(city_id: 1001, lng: -71.031209, lat: 42.371098)
-Thing.create(city_id: 1002, lng: -71.038451, lat: 42.371124)
-Thing.create(city_id: 1003, lng: -71.064566, lat: 42.37122)
-Thing.create(city_id: 1004, lng: -71.025876, lat: 42.371063)
-Thing.create(city_id: 1005, lng: -71.035043, lat: 42.371076)
-Thing.create(city_id: 1006, lng: -71.03289, lat: 42.371025)
-Thing.create(city_id: 1007, lng: -71.016305, lat: 42.385321)
-Thing.create(city_id: 1008, lng: -71.020017, lat: 42.370901)
-Thing.create(city_id: 1009, lng: -71.040856, lat: 42.370922)
-Thing.create(city_id: 1010, lng: -71.027551, lat: 42.37078)
-Thing.create(city_id: 1011, lng: -71.141749, lat: 42.352119)
-Thing.create(city_id: 1012, lng: -71.038622, lat: 42.370762)
-Thing.create(city_id: 1013, lng: -71.019469, lat: 42.370658)
-Thing.create(city_id: 1014, lng: -71.024926, lat: 42.37067)
-Thing.create(city_id: 1015, lng: -71.034061, lat: 42.370685)
-Thing.create(city_id: 1016, lng: -71.032101, lat: 42.370639)
-Thing.create(city_id: 1017, lng: -71.018348, lat: 42.385779)
-Thing.create(city_id: 1018, lng: -71.020629, lat: 42.370522)
-Thing.create(city_id: 1019, lng: -71.017343, lat: 42.385553)
-Thing.create(city_id: 1020, lng: -71.019402, lat: 42.385409)
-Thing.create(city_id: 1021, lng: -71.030473, lat: 42.370492)
-Thing.create(city_id: 1022, lng: -71.035565, lat: 42.370462)
-Thing.create(city_id: 1023, lng: -71.018825, lat: 42.370365)
-Thing.create(city_id: 1024, lng: -71.018486, lat: 42.385207)
-Thing.create(city_id: 1025, lng: -71.017429, lat: 42.384972)
-Thing.create(city_id: 1026, lng: -71.022075, lat: 42.385336)
-Thing.create(city_id: 1027, lng: -71.02018, lat: 42.370067)
-Thing.create(city_id: 1028, lng: -71.032746, lat: 42.370084)
-Thing.create(city_id: 1029, lng: -71.018064, lat: 42.370021)
-Thing.create(city_id: 1030, lng: -71.034763, lat: 42.370073)
-Thing.create(city_id: 1031, lng: -71.025208, lat: 42.370001)
-Thing.create(city_id: 1032, lng: -71.038868, lat: 42.370036)
-Thing.create(city_id: 1033, lng: -71.021153, lat: 42.369896)
-Thing.create(city_id: 1034, lng: -71.018809, lat: 42.384561)
-Thing.create(city_id: 1035, lng: -71.036391, lat: 42.369907)
-Thing.create(city_id: 1036, lng: -71.01532, lat: 42.3851)
-Thing.create(city_id: 1037, lng: -71.019814, lat: 42.384791)
-Thing.create(city_id: 1038, lng: -71.01636, lat: 42.384736)
-Thing.create(city_id: 1039, lng: -71.028899, lat: 42.369524)
-Thing.create(city_id: 1040, lng: -71.018888, lat: 42.369476)
-Thing.create(city_id: 1041, lng: -71.033428, lat: 42.369498)
-Thing.create(city_id: 1042, lng: -71.015224, lat: 42.384426)
-Thing.create(city_id: 1043, lng: -71.061533, lat: 42.36956)
-Thing.create(city_id: 1044, lng: -71.035481, lat: 42.369441)
-Thing.create(city_id: 1045, lng: -71.017601, lat: 42.384292)
-Thing.create(city_id: 1046, lng: -71.026746, lat: 42.369338)
-Thing.create(city_id: 1047, lng: -71.026032, lat: 42.369272)
-Thing.create(city_id: 1048, lng: -71.022428, lat: 42.384094)
-Thing.create(city_id: 1049, lng: -71.041109, lat: 42.36932)
-Thing.create(city_id: 1050, lng: -71.027427, lat: 42.369156)
-Thing.create(city_id: 1051, lng: -71.018229, lat: 42.369042)
-Thing.create(city_id: 1052, lng: -71.0325, lat: 42.3691)
-Thing.create(city_id: 1053, lng: -71.029563, lat: 42.369065)
-Thing.create(city_id: 1054, lng: -71.022783, lat: 42.368916)
-Thing.create(city_id: 1055, lng: -71.034098, lat: 42.368929)
-Thing.create(city_id: 1056, lng: -71.027817, lat: 42.368837)
-Thing.create(city_id: 1057, lng: -71.028534, lat: 42.368811)
-Thing.create(city_id: 1058, lng: -71.067898, lat: 42.360974)
-Thing.create(city_id: 1059, lng: -71.081579, lat: 42.279879)
-Thing.create(city_id: 1060, lng: -71.136104, lat: 42.361168)
-Thing.create(city_id: 1061, lng: -71.124139, lat: 42.361088)
-Thing.create(city_id: 1062, lng: -71.035762, lat: 42.347559)
-Thing.create(city_id: 1063, lng: -71.14128, lat: 42.361089)
-Thing.create(city_id: 1064, lng: -71.088364, lat: 42.282624)
-Thing.create(city_id: 1065, lng: -71.070112, lat: 42.360769)
-Thing.create(city_id: 1066, lng: -71.071649, lat: 42.360744)
-Thing.create(city_id: 1067, lng: -71.087672, lat: 42.282172)
-Thing.create(city_id: 1068, lng: -71.085785, lat: 42.281194)
-Thing.create(city_id: 1069, lng: -71.139093, lat: 42.360916)
-Thing.create(city_id: 1070, lng: -71.106053, lat: 42.344874)
-Thing.create(city_id: 1071, lng: -71.092426, lat: 42.286971)
-Thing.create(city_id: 1072, lng: -71.069477, lat: 42.360629)
-Thing.create(city_id: 1073, lng: -71.130483, lat: 42.360841)
-Thing.create(city_id: 1074, lng: -71.017343, lat: 42.360413)
-Thing.create(city_id: 1075, lng: -71.129312, lat: 42.360825)
-Thing.create(city_id: 1076, lng: -71.09479, lat: 42.347983)
-Thing.create(city_id: 1077, lng: -71.018047, lat: 42.360393)
-Thing.create(city_id: 1078, lng: -71.132713, lat: 42.360813)
-Thing.create(city_id: 1079, lng: -71.052206, lat: 42.360508)
-Thing.create(city_id: 1080, lng: -71.117888, lat: 42.360729)
-Thing.create(city_id: 1081, lng: -71.106921, lat: 42.330932)
-Thing.create(city_id: 1082, lng: -71.057625, lat: 42.361451)
-Thing.create(city_id: 1083, lng: -71.05609, lat: 42.36135)
-Thing.create(city_id: 1084, lng: -71.065575, lat: 42.361317)
-Thing.create(city_id: 1085, lng: -71.068486, lat: 42.361235)
-Thing.create(city_id: 1086, lng: -71.061008, lat: 42.36114)
-Thing.create(city_id: 1087, lng: -71.138891, lat: 42.361365)
-Thing.create(city_id: 1088, lng: -71.091352, lat: 42.28677)
-Thing.create(city_id: 1089, lng: -71.106767, lat: 42.330949)
-Thing.create(city_id: 1090, lng: -71.145147, lat: 42.360794)
-Thing.create(city_id: 1091, lng: -71.131962, lat: 42.360751)
-Thing.create(city_id: 1092, lng: -71.135421, lat: 42.360754)
-Thing.create(city_id: 1093, lng: -71.05122, lat: 42.358001)
-Thing.create(city_id: 1094, lng: -71.051315, lat: 42.358737)
-Thing.create(city_id: 1095, lng: -71.052886, lat: 42.359359)
-Thing.create(city_id: 1096, lng: -71.085956, lat: 42.28352)
-Thing.create(city_id: 1097, lng: -71.144152, lat: 42.36074)
-Thing.create(city_id: 1098, lng: -71.088069, lat: 42.297009)
-Thing.create(city_id: 1099, lng: -71.086427, lat: 42.285223)
-Thing.create(city_id: 1100, lng: -71.055468, lat: 42.35773)
-Thing.create(city_id: 1101, lng: -71.143258, lat: 42.360698)
-Thing.create(city_id: 1102, lng: -71.142285, lat: 42.36064)
-Thing.create(city_id: 1103, lng: -71.052025, lat: 42.36032)
-Thing.create(city_id: 1104, lng: -71.036698, lat: 42.347857)
-Thing.create(city_id: 1105, lng: -71.067901, lat: 42.360364)
-Thing.create(city_id: 1106, lng: -71.070717, lat: 42.36036)
-Thing.create(city_id: 1107, lng: -71.12671, lat: 42.360543)
-Thing.create(city_id: 1108, lng: -71.051963, lat: 42.360275)
-Thing.create(city_id: 1109, lng: -71.017161, lat: 42.360103)
-Thing.create(city_id: 1110, lng: -71.138355, lat: 42.360542)
-Thing.create(city_id: 1111, lng: -71.048346, lat: 42.360222)
-Thing.create(city_id: 1112, lng: -71.044345, lat: 42.344491)
-Thing.create(city_id: 1113, lng: -71.06889, lat: 42.360246)
-Thing.create(city_id: 1114, lng: -71.071836, lat: 42.360251)
-Thing.create(city_id: 1115, lng: -71.151369, lat: 42.345902)
-Thing.create(city_id: 1116, lng: -71.150335, lat: 42.347365)
-Thing.create(city_id: 1117, lng: -71.134614, lat: 42.360448)
-Thing.create(city_id: 1118, lng: -71.125241, lat: 42.360398)
-Thing.create(city_id: 1119, lng: -71.150843, lat: 42.346574)
-Thing.create(city_id: 1120, lng: -71.131295, lat: 42.360406)
-Thing.create(city_id: 1121, lng: -71.070129, lat: 42.36018)
-Thing.create(city_id: 1122, lng: -71.049584, lat: 42.360079)
-Thing.create(city_id: 1123, lng: -71.109683, lat: 42.264493)
-Thing.create(city_id: 1124, lng: -71.141618, lat: 42.360396)
-Thing.create(city_id: 1125, lng: -71.132164, lat: 42.360362)
-Thing.create(city_id: 1126, lng: -71.133652, lat: 42.360365)
-Thing.create(city_id: 1127, lng: -71.119277, lat: 42.360306)
-Thing.create(city_id: 1128, lng: -71.0518, lat: 42.360062)
-Thing.create(city_id: 1129, lng: -71.128593, lat: 42.360327)
-Thing.create(city_id: 1130, lng: -71.136457, lat: 42.360348)
-Thing.create(city_id: 1131, lng: -71.111528, lat: 42.267254)
-Thing.create(city_id: 1132, lng: -71.130116, lat: 42.360291)
-Thing.create(city_id: 1133, lng: -71.137381, lat: 42.36031)
-Thing.create(city_id: 1134, lng: -71.145764, lat: 42.360323)
-Thing.create(city_id: 1135, lng: -71.1103, lat: 42.26509)
-Thing.create(city_id: 1136, lng: -71.073509, lat: 42.347067)
-Thing.create(city_id: 1137, lng: -71.144898, lat: 42.36028)
-Thing.create(city_id: 1138, lng: -71.110547, lat: 42.265783)
-Thing.create(city_id: 1139, lng: -71.02753, lat: 42.359835)
-Thing.create(city_id: 1140, lng: -71.164312, lat: 42.356814)
-Thing.create(city_id: 1141, lng: -71.111243, lat: 42.268274)
-Thing.create(city_id: 1142, lng: -71.124102, lat: 42.360174)
-Thing.create(city_id: 1143, lng: -71.024798, lat: 42.359805)
-Thing.create(city_id: 1144, lng: -71.143672, lat: 42.360205)
-Thing.create(city_id: 1145, lng: -71.07, lat: 42.34542)
-Thing.create(city_id: 1146, lng: -71.050781, lat: 42.359867)
-Thing.create(city_id: 1147, lng: -71.05075, lat: 42.359865)
-Thing.create(city_id: 1148, lng: -71.139513, lat: 42.360175)
-Thing.create(city_id: 1149, lng: -71.110191, lat: 42.27116)
-Thing.create(city_id: 1150, lng: -71.150268, lat: 42.345647)
-Thing.create(city_id: 1151, lng: -71.110044, lat: 42.272722)
-Thing.create(city_id: 1152, lng: -71.027579, lat: 42.359735)
-Thing.create(city_id: 1153, lng: -71.108585, lat: 42.33578)
-Thing.create(city_id: 1154, lng: -71.071936, lat: 42.346783)
-Thing.create(city_id: 1155, lng: -71.117772, lat: 42.360012)
-Thing.create(city_id: 1156, lng: -71.132764, lat: 42.360059)
-Thing.create(city_id: 1157, lng: -71.125994, lat: 42.36003)
-Thing.create(city_id: 1158, lng: -71.142623, lat: 42.360068)
-Thing.create(city_id: 1159, lng: -71.149248, lat: 42.345366)
-Thing.create(city_id: 1160, lng: -71.148244, lat: 42.345126)
-Thing.create(city_id: 1161, lng: -71.150215, lat: 42.360018)
-Thing.create(city_id: 1162, lng: -71.135941, lat: 42.359968)
-Thing.create(city_id: 1163, lng: -71.109565, lat: 42.273548)
-Thing.create(city_id: 1164, lng: -71.027427, lat: 42.359558)
-Thing.create(city_id: 1165, lng: -71.077747, lat: 42.30108)
-Thing.create(city_id: 1166, lng: -71.07771, lat: 42.277316)
-Thing.create(city_id: 1167, lng: -71.078496, lat: 42.277922)
-Thing.create(city_id: 1168, lng: -71.075945, lat: 42.347028)
-Thing.create(city_id: 1169, lng: -71.131487, lat: 42.359911)
-Thing.create(city_id: 1170, lng: -71.073929, lat: 42.346756)
-Thing.create(city_id: 1171, lng: -71.118012, lat: 42.359846)
-Thing.create(city_id: 1172, lng: -71.051001, lat: 42.359558)
-Thing.create(city_id: 1173, lng: -71.151909, lat: 42.359892)
-Thing.create(city_id: 1174, lng: -71.018105, lat: 42.365714)
-Thing.create(city_id: 1175, lng: -71.021416, lat: 42.365717)
-Thing.create(city_id: 1176, lng: -71.055652, lat: 42.36585)
-Thing.create(city_id: 1177, lng: -71.132546, lat: 42.366084)
-Thing.create(city_id: 1178, lng: -71.063578, lat: 42.365839)
-Thing.create(city_id: 1179, lng: -71.057039, lat: 42.3658)
-Thing.create(city_id: 1180, lng: -71.05851, lat: 42.365784)
-Thing.create(city_id: 1181, lng: -71.123772, lat: 42.365988)
-Thing.create(city_id: 1182, lng: -71.030254, lat: 42.365636)
-Thing.create(city_id: 1183, lng: -71.051979, lat: 42.365706)
-Thing.create(city_id: 1184, lng: -71.034378, lat: 42.365635)
-Thing.create(city_id: 1185, lng: -71.054201, lat: 42.365692)
-Thing.create(city_id: 1186, lng: -71.032043, lat: 42.365602)
-Thing.create(city_id: 1187, lng: -71.051645, lat: 42.365673)
-Thing.create(city_id: 1188, lng: -71.052643, lat: 42.36636)
-Thing.create(city_id: 1189, lng: -71.014219, lat: 42.366136)
-Thing.create(city_id: 1190, lng: -71.068854, lat: 42.366264)
-Thing.create(city_id: 1191, lng: -71.056067, lat: 42.366083)
-Thing.create(city_id: 1192, lng: -71.055007, lat: 42.366026)
-Thing.create(city_id: 1193, lng: -71.039155, lat: 42.365607)
-Thing.create(city_id: 1194, lng: -71.063652, lat: 42.365689)
-Thing.create(city_id: 1195, lng: -71.02533, lat: 42.365493)
-Thing.create(city_id: 1196, lng: -71.053024, lat: 42.365603)
-Thing.create(city_id: 1197, lng: -71.060302, lat: 42.365616)
-Thing.create(city_id: 1198, lng: -71.055982, lat: 42.365553)
-Thing.create(city_id: 1199, lng: -71.051272, lat: 42.365505)
-Thing.create(city_id: 1200, lng: -71.022384, lat: 42.365387)
-Thing.create(city_id: 1201, lng: -71.052495, lat: 42.365489)
-Thing.create(city_id: 1202, lng: -71.035893, lat: 42.365364)
-Thing.create(city_id: 1203, lng: -71.068905, lat: 42.365467)
-Thing.create(city_id: 1204, lng: -71.033471, lat: 42.365307)
-Thing.create(city_id: 1205, lng: -71.061378, lat: 42.365406)
-Thing.create(city_id: 1206, lng: -71.055457, lat: 42.365375)
-Thing.create(city_id: 1207, lng: -71.029414, lat: 42.365264)
-Thing.create(city_id: 1208, lng: -71.067864, lat: 42.365393)
-Thing.create(city_id: 1209, lng: -71.034649, lat: 42.365258)
-Thing.create(city_id: 1210, lng: -71.031162, lat: 42.365224)
-Thing.create(city_id: 1211, lng: -71.061028, lat: 42.365302)
-Thing.create(city_id: 1212, lng: -71.05353, lat: 42.365268)
-Thing.create(city_id: 1213, lng: -71.05849, lat: 42.365282)
-Thing.create(city_id: 1214, lng: -71.056899, lat: 42.365271)
-Thing.create(city_id: 1215, lng: -71.019357, lat: 42.365107)
-Thing.create(city_id: 1216, lng: -71.022626, lat: 42.365119)
-Thing.create(city_id: 1217, lng: -71.015118, lat: 42.365065)
-Thing.create(city_id: 1218, lng: -71.05775, lat: 42.365234)
-Thing.create(city_id: 1219, lng: -71.051194, lat: 42.365198)
-Thing.create(city_id: 1220, lng: -71.058171, lat: 42.365222)
-Thing.create(city_id: 1221, lng: -71.118154, lat: 42.365437)
-Thing.create(city_id: 1222, lng: -71.022336, lat: 42.365066)
-Thing.create(city_id: 1223, lng: -71.055376, lat: 42.365193)
-Thing.create(city_id: 1224, lng: -71.133672, lat: 42.365442)
-Thing.create(city_id: 1225, lng: -71.064008, lat: 42.365179)
-Thing.create(city_id: 1226, lng: -71.05185, lat: 42.365131)
-Thing.create(city_id: 1227, lng: -71.060679, lat: 42.365164)
-Thing.create(city_id: 1228, lng: -71.057321, lat: 42.365108)
-Thing.create(city_id: 1229, lng: -71.020238, lat: 42.36494)
-Thing.create(city_id: 1230, lng: -71.056187, lat: 42.365056)
-Thing.create(city_id: 1231, lng: -71.034926, lat: 42.364943)
-Thing.create(city_id: 1232, lng: -71.061802, lat: 42.364997)
-Thing.create(city_id: 1233, lng: -71.0303, lat: 42.364853)
-Thing.create(city_id: 1234, lng: -71.03258, lat: 42.364857)
-Thing.create(city_id: 1235, lng: -71.062215, lat: 42.364963)
-Thing.create(city_id: 1236, lng: -71.018096, lat: 42.364756)
-Thing.create(city_id: 1237, lng: -71.053731, lat: 42.364892)
-Thing.create(city_id: 1238, lng: -71.031355, lat: 42.364788)
-Thing.create(city_id: 1239, lng: -71.059231, lat: 42.364887)
-Thing.create(city_id: 1240, lng: -71.058464, lat: 42.364878)
-Thing.create(city_id: 1241, lng: -71.055596, lat: 42.364842)
-Thing.create(city_id: 1242, lng: -71.026168, lat: 42.364702)
-Thing.create(city_id: 1243, lng: -71.060278, lat: 42.364803)
-Thing.create(city_id: 1244, lng: -71.051178, lat: 42.364764)
-Thing.create(city_id: 1245, lng: -71.056134, lat: 42.364778)
-Thing.create(city_id: 1246, lng: -71.134529, lat: 42.365038)
-Thing.create(city_id: 1247, lng: -71.060389, lat: 42.36476)
-Thing.create(city_id: 1248, lng: -71.065555, lat: 42.364778)
-Thing.create(city_id: 1249, lng: -71.069395, lat: 42.364791)
-Thing.create(city_id: 1250, lng: -71.021242, lat: 42.364576)
-Thing.create(city_id: 1251, lng: -71.053365, lat: 42.364697)
-Thing.create(city_id: 1252, lng: -71.025036, lat: 42.364581)
-Thing.create(city_id: 1253, lng: -71.054703, lat: 42.364696)
-Thing.create(city_id: 1254, lng: -71.057715, lat: 42.364706)
-Thing.create(city_id: 1255, lng: -71.06124, lat: 42.364716)
-Thing.create(city_id: 1256, lng: -71.0253, lat: 42.364559)
-Thing.create(city_id: 1257, lng: -71.052992, lat: 42.364652)
-Thing.create(city_id: 1258, lng: -71.05172, lat: 42.364642)
-Thing.create(city_id: 1259, lng: -71.056009, lat: 42.364648)
-Thing.create(city_id: 1260, lng: -71.06135, lat: 42.364637)
-Thing.create(city_id: 1261, lng: -71.053091, lat: 42.36459)
-Thing.create(city_id: 1262, lng: -71.029938, lat: 42.364492)
-Thing.create(city_id: 1263, lng: -71.063458, lat: 42.364616)
-Thing.create(city_id: 1264, lng: -71.021055, lat: 42.36442)
-Thing.create(city_id: 1265, lng: -71.053837, lat: 42.364547)
-Thing.create(city_id: 1266, lng: -71.06194, lat: 42.364568)
-Thing.create(city_id: 1267, lng: -71.118202, lat: 42.364692)
-Thing.create(city_id: 1268, lng: -71.025308, lat: 42.364322)
-Thing.create(city_id: 1269, lng: -71.051212, lat: 42.364413)
-Thing.create(city_id: 1270, lng: -71.023197, lat: 42.364297)
-Thing.create(city_id: 1271, lng: -71.126255, lat: 42.364668)
-Thing.create(city_id: 1272, lng: -71.058061, lat: 42.364425)
-Thing.create(city_id: 1273, lng: -71.054018, lat: 42.364406)
-Thing.create(city_id: 1274, lng: -71.062737, lat: 42.364439)
-Thing.create(city_id: 1275, lng: -71.02508, lat: 42.364276)
-Thing.create(city_id: 1276, lng: -71.056183, lat: 42.364392)
-Thing.create(city_id: 1277, lng: -71.057182, lat: 42.364373)
-Thing.create(city_id: 1278, lng: -71.052298, lat: 42.364333)
-Thing.create(city_id: 1279, lng: -71.051702, lat: 42.364326)
-Thing.create(city_id: 1280, lng: -71.060855, lat: 42.364356)
-Thing.create(city_id: 1281, lng: -71.05195, lat: 42.364305)
-Thing.create(city_id: 1282, lng: -71.057852, lat: 42.364322)
-Thing.create(city_id: 1283, lng: -71.059722, lat: 42.364305)
-Thing.create(city_id: 1284, lng: -71.029007, lat: 42.364165)
-Thing.create(city_id: 1285, lng: -71.055614, lat: 42.36425)
-Thing.create(city_id: 1286, lng: -71.135462, lat: 42.364519)
-Thing.create(city_id: 1287, lng: -71.060907, lat: 42.364249)
-Thing.create(city_id: 1288, lng: -71.018854, lat: 42.364072)
-Thing.create(city_id: 1289, lng: -71.032535, lat: 42.364127)
-Thing.create(city_id: 1290, lng: -71.061577, lat: 42.364223)
-Thing.create(city_id: 1291, lng: -71.060095, lat: 42.364181)
-Thing.create(city_id: 1292, lng: -71.031175, lat: 42.364066)
-Thing.create(city_id: 1293, lng: -71.019292, lat: 42.364003)
-Thing.create(city_id: 1294, lng: -71.030443, lat: 42.364028)
-Thing.create(city_id: 1295, lng: -71.051209, lat: 42.364101)
-Thing.create(city_id: 1296, lng: -71.055246, lat: 42.364094)
-Thing.create(city_id: 1297, lng: -71.056325, lat: 42.364097)
-Thing.create(city_id: 1298, lng: -71.052817, lat: 42.36407)
-Thing.create(city_id: 1299, lng: -71.049915, lat: 42.364035)
-Thing.create(city_id: 1300, lng: -71.054355, lat: 42.36403)
-Thing.create(city_id: 1301, lng: -71.059425, lat: 42.364031)
-Thing.create(city_id: 1302, lng: -71.025973, lat: 42.363833)
-Thing.create(city_id: 1303, lng: -71.051289, lat: 42.363912)
-Thing.create(city_id: 1304, lng: -71.062945, lat: 42.363945)
-Thing.create(city_id: 1305, lng: -71.061217, lat: 42.36393)
-Thing.create(city_id: 1306, lng: -71.056721, lat: 42.363906)
-Thing.create(city_id: 1307, lng: -71.068173, lat: 42.363912)
-Thing.create(city_id: 1308, lng: -71.025334, lat: 42.363739)
-Thing.create(city_id: 1309, lng: -71.134684, lat: 42.364138)
-Thing.create(city_id: 1310, lng: -71.063562, lat: 42.36389)
-Thing.create(city_id: 1311, lng: -71.057549, lat: 42.363865)
-Thing.create(city_id: 1312, lng: -71.060462, lat: 42.36385)
-Thing.create(city_id: 1313, lng: -71.118706, lat: 42.364054)
-Thing.create(city_id: 1314, lng: -71.02942, lat: 42.36371)
-Thing.create(city_id: 1315, lng: -71.067362, lat: 42.363856)
-Thing.create(city_id: 1316, lng: -71.02174, lat: 42.363641)
-Thing.create(city_id: 1317, lng: -71.051947, lat: 42.363741)
-Thing.create(city_id: 1318, lng: -71.059104, lat: 42.363757)
-Thing.create(city_id: 1319, lng: -71.119808, lat: 42.363972)
-Thing.create(city_id: 1320, lng: -71.062223, lat: 42.363759)
-Thing.create(city_id: 1321, lng: -71.051985, lat: 42.363704)
-Thing.create(city_id: 1322, lng: -71.053447, lat: 42.363672)
-Thing.create(city_id: 1323, lng: -71.120901, lat: 42.363877)
-Thing.create(city_id: 1324, lng: -71.016438, lat: 42.36348)
-Thing.create(city_id: 1325, lng: -71.054552, lat: 42.363631)
-Thing.create(city_id: 1326, lng: -71.06088, lat: 42.363644)
-Thing.create(city_id: 1327, lng: -71.056785, lat: 42.3636)
-Thing.create(city_id: 1328, lng: -71.065083, lat: 42.363589)
-Thing.create(city_id: 1329, lng: -71.055992, lat: 42.363544)
-Thing.create(city_id: 1330, lng: -71.062543, lat: 42.363567)
-Thing.create(city_id: 1331, lng: -71.122097, lat: 42.363771)
-Thing.create(city_id: 1332, lng: -71.061349, lat: 42.363546)
-Thing.create(city_id: 1333, lng: -71.060921, lat: 42.363535)
-Thing.create(city_id: 1334, lng: -71.051868, lat: 42.363488)
-Thing.create(city_id: 1335, lng: -71.053121, lat: 42.363478)
-Thing.create(city_id: 1336, lng: -71.135398, lat: 42.363767)
-Thing.create(city_id: 1337, lng: -71.138397, lat: 42.36376)
-Thing.create(city_id: 1338, lng: -71.062003, lat: 42.36348)
-Thing.create(city_id: 1339, lng: -71.123169, lat: 42.363682)
-Thing.create(city_id: 1340, lng: -71.06608, lat: 42.363467)
-Thing.create(city_id: 1341, lng: -71.016359, lat: 42.363237)
-Thing.create(city_id: 1342, lng: -71.051572, lat: 42.363374)
-Thing.create(city_id: 1343, lng: -71.123856, lat: 42.363624)
-Thing.create(city_id: 1344, lng: -71.063533, lat: 42.363408)
-Thing.create(city_id: 1345, lng: -71.052165, lat: 42.363364)
-Thing.create(city_id: 1346, lng: -71.055033, lat: 42.363348)
-Thing.create(city_id: 1347, lng: -71.053571, lat: 42.363321)
-Thing.create(city_id: 1348, lng: -71.054883, lat: 42.363286)
-Thing.create(city_id: 1349, lng: -71.052264, lat: 42.363272)
-Thing.create(city_id: 1350, lng: -71.060429, lat: 42.363296)
-Thing.create(city_id: 1351, lng: -71.125325, lat: 42.363508)
-Thing.create(city_id: 1352, lng: -71.059584, lat: 42.363275)
-Thing.create(city_id: 1353, lng: -71.017174, lat: 42.363098)
-Thing.create(city_id: 1354, lng: -71.137444, lat: 42.363528)
-Thing.create(city_id: 1355, lng: -71.052324, lat: 42.363227)
-Thing.create(city_id: 1356, lng: -71.139467, lat: 42.363525)
-Thing.create(city_id: 1357, lng: -71.050793, lat: 42.363189)
-Thing.create(city_id: 1358, lng: -71.059434, lat: 42.363183)
-Thing.create(city_id: 1359, lng: -71.051743, lat: 42.363136)
-Thing.create(city_id: 1360, lng: -71.019454, lat: 42.363)
-Thing.create(city_id: 1361, lng: -71.065207, lat: 42.363182)
-Thing.create(city_id: 1362, lng: -71.126491, lat: 42.363395)
-Thing.create(city_id: 1363, lng: -71.05085, lat: 42.363093)
-Thing.create(city_id: 1364, lng: -71.14233, lat: 42.363403)
-Thing.create(city_id: 1365, lng: -71.053943, lat: 42.363067)
-Thing.create(city_id: 1366, lng: -71.127531, lat: 42.36332)
-Thing.create(city_id: 1367, lng: -71.070308, lat: 42.363102)
-Thing.create(city_id: 1368, lng: -71.136894, lat: 42.364179)
-Thing.create(city_id: 1369, lng: -71.018065, lat: 42.363698)
-Thing.create(city_id: 1370, lng: -71.054632, lat: 42.36377)
-Thing.create(city_id: 1371, lng: -71.057337, lat: 42.363714)
-Thing.create(city_id: 1372, lng: -71.070037, lat: 42.363651)
-Thing.create(city_id: 1373, lng: -71.0172, lat: 42.363378)
-Thing.create(city_id: 1374, lng: -71.0512, lat: 42.363459)
-Thing.create(city_id: 1375, lng: -71.051552, lat: 42.363384)
-Thing.create(city_id: 1376, lng: -71.054222, lat: 42.36304)
-Thing.create(city_id: 1377, lng: -71.140538, lat: 42.363337)
-Thing.create(city_id: 1378, lng: -71.118213, lat: 42.363258)
-Thing.create(city_id: 1379, lng: -71.052559, lat: 42.363016)
-Thing.create(city_id: 1380, lng: -71.13376, lat: 42.363297)
-Thing.create(city_id: 1381, lng: -71.132798, lat: 42.363263)
-Thing.create(city_id: 1382, lng: -71.05608, lat: 42.362984)
-Thing.create(city_id: 1383, lng: -71.128681, lat: 42.363224)
-Thing.create(city_id: 1384, lng: -71.060636, lat: 42.362983)
-Thing.create(city_id: 1385, lng: -71.066826, lat: 42.363002)
-Thing.create(city_id: 1386, lng: -71.052665, lat: 42.362927)
-Thing.create(city_id: 1387, lng: -71.025413, lat: 42.362812)
-Thing.create(city_id: 1388, lng: -71.051157, lat: 42.362911)
-Thing.create(city_id: 1389, lng: -71.059085, lat: 42.362934)
-Thing.create(city_id: 1390, lng: -71.059782, lat: 42.362919)
-Thing.create(city_id: 1391, lng: -71.141567, lat: 42.363187)
-Thing.create(city_id: 1392, lng: -71.135069, lat: 42.363126)
-Thing.create(city_id: 1393, lng: -71.055342, lat: 42.362818)
-Thing.create(city_id: 1394, lng: -71.13179, lat: 42.36308)
-Thing.create(city_id: 1395, lng: -71.076927, lat: 42.27897)
-Thing.create(city_id: 1396, lng: -71.049278, lat: 42.34917)
-Thing.create(city_id: 1397, lng: -71.155814, lat: 42.356602)
-Thing.create(city_id: 1398, lng: -71.150994, lat: 42.356566)
-Thing.create(city_id: 1399, lng: -71.141802, lat: 42.356532)
-Thing.create(city_id: 1400, lng: -71.167124, lat: 42.356596)
-Thing.create(city_id: 1401, lng: -71.154174, lat: 42.356554)
-Thing.create(city_id: 1402, lng: -71.137064, lat: 42.356483)
-Thing.create(city_id: 1403, lng: -71.159777, lat: 42.356547)
-Thing.create(city_id: 1404, lng: -71.162372, lat: 42.356555)
-Thing.create(city_id: 1405, lng: -71.138062, lat: 42.356459)
-Thing.create(city_id: 1406, lng: -71.136025, lat: 42.356394)
-Thing.create(city_id: 1407, lng: -71.051209, lat: 42.364882)
-Thing.create(city_id: 1408, lng: -71.160782, lat: 42.356425)
-Thing.create(city_id: 1409, lng: -70.996283, lat: 42.389355)
-Thing.create(city_id: 1410, lng: -71.13504, lat: 42.356306)
-Thing.create(city_id: 1411, lng: -71.077137, lat: 42.356102)
-Thing.create(city_id: 1412, lng: -71.150025, lat: 42.356315)
-Thing.create(city_id: 1413, lng: -71.163442, lat: 42.356349)
-Thing.create(city_id: 1414, lng: -71.146007, lat: 42.356288)
-Thing.create(city_id: 1415, lng: -71.164406, lat: 42.356334)
-Thing.create(city_id: 1416, lng: -71.118137, lat: 42.311303)
-Thing.create(city_id: 1417, lng: -71.16602, lat: 42.356293)
-Thing.create(city_id: 1418, lng: -71.049271, lat: 42.287972)
-Thing.create(city_id: 1419, lng: -71.00842, lat: 42.391526)
-Thing.create(city_id: 1420, lng: -71.017765, lat: 42.381547)
-Thing.create(city_id: 1421, lng: -70.999235, lat: 42.389559)
-Thing.create(city_id: 1422, lng: -71.161592, lat: 42.356148)
-Thing.create(city_id: 1423, lng: -71.167786, lat: 42.356165)
-Thing.create(city_id: 1424, lng: -71.137813, lat: 42.356069)
-Thing.create(city_id: 1425, lng: -71.000731, lat: 42.389154)
-Thing.create(city_id: 1426, lng: -71.156661, lat: 42.356106)
-Thing.create(city_id: 1427, lng: -71.132988, lat: 42.356018)
-Thing.create(city_id: 1428, lng: -71.169747, lat: 42.356036)
-Thing.create(city_id: 1429, lng: -71.15842, lat: 42.355995)
-Thing.create(city_id: 1430, lng: -71.137249, lat: 42.355917)
-Thing.create(city_id: 1431, lng: -71.161004, lat: 42.355984)
-Thing.create(city_id: 1432, lng: -71.090129, lat: 42.287761)
-Thing.create(city_id: 1433, lng: -71.131873, lat: 42.355818)
-Thing.create(city_id: 1434, lng: -71.079692, lat: 42.319782)
-Thing.create(city_id: 1435, lng: -71.089863, lat: 42.288523)
-Thing.create(city_id: 1436, lng: -71.089627, lat: 42.289286)
-Thing.create(city_id: 1437, lng: -71.13397, lat: 42.356163)
-Thing.create(city_id: 1438, lng: -71.109585, lat: 42.336427)
-Thing.create(city_id: 1439, lng: -71.000422, lat: 42.387893)
-Thing.create(city_id: 1440, lng: -71.052797, lat: 42.355661)
-Thing.create(city_id: 1441, lng: -71.165015, lat: 42.355995)
-Thing.create(city_id: 1442, lng: -71.158794, lat: 42.355857)
-Thing.create(city_id: 1443, lng: -71.107632, lat: 42.335776)
-Thing.create(city_id: 1444, lng: -71.060853, lat: 42.300704)
-Thing.create(city_id: 1445, lng: -71.107603, lat: 42.335777)
-Thing.create(city_id: 1446, lng: -71.163405, lat: 42.355835)
-Thing.create(city_id: 1447, lng: -71.166085, lat: 42.355811)
-Thing.create(city_id: 1448, lng: -71.159838, lat: 42.35579)
-Thing.create(city_id: 1449, lng: -71.168822, lat: 42.355813)
-Thing.create(city_id: 1450, lng: -71.136502, lat: 42.355682)
-Thing.create(city_id: 1451, lng: -71.01043, lat: 42.393537)
-Thing.create(city_id: 1452, lng: -71.009359, lat: 42.393515)
-Thing.create(city_id: 1453, lng: -71.15704, lat: 42.35573)
-Thing.create(city_id: 1454, lng: -71.16704, lat: 42.355753)
-Thing.create(city_id: 1455, lng: -71.061673, lat: 42.300605)
-Thing.create(city_id: 1456, lng: -71.000033, lat: 42.38808)
-Thing.create(city_id: 1457, lng: -71.008526, lat: 42.39346)
-Thing.create(city_id: 1458, lng: -71.038849, lat: 42.374709)
-Thing.create(city_id: 1459, lng: -71.072953, lat: 42.355405)
-Thing.create(city_id: 1460, lng: -71.10251, lat: 42.308976)
-Thing.create(city_id: 1461, lng: -71.138684, lat: 42.355627)
-Thing.create(city_id: 1462, lng: -71.134357, lat: 42.355592)
-Thing.create(city_id: 1463, lng: -71.15512, lat: 42.355651)
-Thing.create(city_id: 1464, lng: -71.13838, lat: 42.355586)
-Thing.create(city_id: 1465, lng: -71.078695, lat: 42.319358)
-Thing.create(city_id: 1466, lng: -71.080667, lat: 42.320256)
-Thing.create(city_id: 1467, lng: -71.138, lat: 42.355563)
-Thing.create(city_id: 1468, lng: -71.133543, lat: 42.355543)
-Thing.create(city_id: 1469, lng: -71.131066, lat: 42.355531)
-Thing.create(city_id: 1470, lng: -71.141658, lat: 42.355541)
-Thing.create(city_id: 1471, lng: -71.142845, lat: 42.355539)
-Thing.create(city_id: 1472, lng: -71.052918, lat: 42.346377)
-Thing.create(city_id: 1473, lng: -71.101596, lat: 42.311838)
-Thing.create(city_id: 1474, lng: -71.152954, lat: 42.355515)
-Thing.create(city_id: 1475, lng: -71.164093, lat: 42.355531)
-Thing.create(city_id: 1476, lng: -71.052039, lat: 42.362788)
-Thing.create(city_id: 1477, lng: -71.130701, lat: 42.363037)
-Thing.create(city_id: 1478, lng: -71.142618, lat: 42.363062)
-Thing.create(city_id: 1479, lng: -71.063996, lat: 42.362772)
-Thing.create(city_id: 1480, lng: -71.124211, lat: 42.362961)
-Thing.create(city_id: 1481, lng: -71.0529, lat: 42.362699)
-Thing.create(city_id: 1482, lng: -71.136087, lat: 42.362992)
-Thing.create(city_id: 1483, lng: -71.019495, lat: 42.362529)
-Thing.create(city_id: 1484, lng: -71.017671, lat: 42.362498)
-Thing.create(city_id: 1485, lng: -71.063741, lat: 42.362659)
-Thing.create(city_id: 1486, lng: -71.143822, lat: 42.362929)
-Thing.create(city_id: 1487, lng: -71.137175, lat: 42.362856)
-Thing.create(city_id: 1488, lng: -71.060876, lat: 42.362589)
-Thing.create(city_id: 1489, lng: -71.13001, lat: 42.362832)
-Thing.create(city_id: 1490, lng: -71.065045, lat: 42.362592)
-Thing.create(city_id: 1491, lng: -71.058823, lat: 42.362513)
-Thing.create(city_id: 1492, lng: -71.132452, lat: 42.362766)
-Thing.create(city_id: 1493, lng: -71.066804, lat: 42.362526)
-Thing.create(city_id: 1494, lng: -71.052087, lat: 42.362438)
-Thing.create(city_id: 1495, lng: -71.138219, lat: 42.362738)
-Thing.create(city_id: 1496, lng: -71.054811, lat: 42.362434)
-Thing.create(city_id: 1497, lng: -71.069632, lat: 42.362459)
-Thing.create(city_id: 1498, lng: -71.051144, lat: 42.362357)
-Thing.create(city_id: 1499, lng: -71.050318, lat: 42.362343)
-Thing.create(city_id: 1500, lng: -71.129144, lat: 42.362612)
-Thing.create(city_id: 1501, lng: -71.055085, lat: 42.362347)
-Thing.create(city_id: 1502, lng: -71.053292, lat: 42.362329)
-Thing.create(city_id: 1503, lng: -71.144616, lat: 42.36263)
-Thing.create(city_id: 1504, lng: -71.061672, lat: 42.362337)
-Thing.create(city_id: 1505, lng: -71.135471, lat: 42.362585)
-Thing.create(city_id: 1506, lng: -71.139282, lat: 42.362595)
-Thing.create(city_id: 1507, lng: -71.062315, lat: 42.362297)
-Thing.create(city_id: 1508, lng: -71.05852, lat: 42.362279)
-Thing.create(city_id: 1509, lng: -71.134786, lat: 42.362514)
-Thing.create(city_id: 1510, lng: -71.05519, lat: 42.36218)
-Thing.create(city_id: 1511, lng: -71.067328, lat: 42.362204)
-Thing.create(city_id: 1512, lng: -71.019565, lat: 42.361996)
-Thing.create(city_id: 1513, lng: -71.060063, lat: 42.362153)
-Thing.create(city_id: 1514, lng: -71.140328, lat: 42.362426)
-Thing.create(city_id: 1515, lng: -71.052622, lat: 42.362117)
-Thing.create(city_id: 1516, lng: -71.052875, lat: 42.362115)
-Thing.create(city_id: 1517, lng: -71.017485, lat: 42.361912)
-Thing.create(city_id: 1518, lng: -71.063679, lat: 42.362087)
-Thing.create(city_id: 1519, lng: -71.067822, lat: 42.362086)
-Thing.create(city_id: 1520, lng: -71.019627, lat: 42.361892)
-Thing.create(city_id: 1521, lng: -71.053582, lat: 42.362018)
-Thing.create(city_id: 1522, lng: -71.020643, lat: 42.361874)
-Thing.create(city_id: 1523, lng: -71.133733, lat: 42.362283)
-Thing.create(city_id: 1524, lng: -71.025566, lat: 42.361886)
-Thing.create(city_id: 1525, lng: -71.05688, lat: 42.362003)
-Thing.create(city_id: 1526, lng: -71.141373, lat: 42.36223)
-Thing.create(city_id: 1527, lng: -71.021153, lat: 42.36178)
-Thing.create(city_id: 1528, lng: -71.054294, lat: 42.361903)
-Thing.create(city_id: 1529, lng: -71.052209, lat: 42.361894)
-Thing.create(city_id: 1530, lng: -71.132001, lat: 42.362176)
-Thing.create(city_id: 1531, lng: -71.053696, lat: 42.361892)
-Thing.create(city_id: 1532, lng: -71.128649, lat: 42.362152)
-Thing.create(city_id: 1533, lng: -71.05672, lat: 42.361896)
-Thing.create(city_id: 1534, lng: -71.062411, lat: 42.36191)
-Thing.create(city_id: 1535, lng: -71.060695, lat: 42.36186)
-Thing.create(city_id: 1536, lng: -71.025602, lat: 42.361705)
-Thing.create(city_id: 1537, lng: -71.020579, lat: 42.361674)
-Thing.create(city_id: 1538, lng: -71.057698, lat: 42.361819)
-Thing.create(city_id: 1539, lng: -71.124445, lat: 42.362056)
-Thing.create(city_id: 1540, lng: -71.060954, lat: 42.361826)
-Thing.create(city_id: 1541, lng: -71.056608, lat: 42.361806)
-Thing.create(city_id: 1542, lng: -71.13029, lat: 42.362051)
-Thing.create(city_id: 1543, lng: -71.052238, lat: 42.36177)
-Thing.create(city_id: 1544, lng: -71.051655, lat: 42.361748)
-Thing.create(city_id: 1545, lng: -71.118043, lat: 42.361966)
-Thing.create(city_id: 1546, lng: -71.053847, lat: 42.361732)
-Thing.create(city_id: 1547, lng: -71.129346, lat: 42.361994)
-Thing.create(city_id: 1548, lng: -71.063922, lat: 42.361756)
-Thing.create(city_id: 1549, lng: -71.021082, lat: 42.361578)
-Thing.create(city_id: 1550, lng: -71.054204, lat: 42.36274)
-Thing.create(city_id: 1551, lng: -71.058498, lat: 42.362672)
-Thing.create(city_id: 1552, lng: -71.145315, lat: 42.362074)
-Thing.create(city_id: 1553, lng: -71.14246, lat: 42.362026)
-Thing.create(city_id: 1554, lng: -71.05388, lat: 42.36171)
-Thing.create(city_id: 1555, lng: -71.061709, lat: 42.361729)
-Thing.create(city_id: 1556, lng: -71.13284, lat: 42.361976)
-Thing.create(city_id: 1557, lng: -71.135736, lat: 42.361981)
-Thing.create(city_id: 1558, lng: -71.056238, lat: 42.361697)
-Thing.create(city_id: 1559, lng: -71.070705, lat: 42.361718)
-Thing.create(city_id: 1560, lng: -71.068604, lat: 42.361658)
-Thing.create(city_id: 1561, lng: -71.052864, lat: 42.361598)
-Thing.create(city_id: 1562, lng: -71.060081, lat: 42.361619)
-Thing.create(city_id: 1563, lng: -71.062763, lat: 42.361614)
-Thing.create(city_id: 1564, lng: -71.144913, lat: 42.36189)
-Thing.create(city_id: 1565, lng: -71.140874, lat: 42.361831)
-Thing.create(city_id: 1566, lng: -71.019123, lat: 42.361385)
-Thing.create(city_id: 1567, lng: -71.052112, lat: 42.361501)
-Thing.create(city_id: 1568, lng: -71.143535, lat: 42.36182)
-Thing.create(city_id: 1569, lng: -71.057272, lat: 42.36152)
-Thing.create(city_id: 1570, lng: -71.134741, lat: 42.361785)
-Thing.create(city_id: 1571, lng: -71.067805, lat: 42.361539)
-Thing.create(city_id: 1572, lng: -71.057271, lat: 42.361493)
-Thing.create(city_id: 1573, lng: -71.056249, lat: 42.361484)
-Thing.create(city_id: 1574, lng: -71.018957, lat: 42.361307)
-Thing.create(city_id: 1575, lng: -71.067028, lat: 42.361488)
-Thing.create(city_id: 1576, lng: -71.062959, lat: 42.361465)
-Thing.create(city_id: 1577, lng: -71.017504, lat: 42.361214)
-Thing.create(city_id: 1578, lng: -71.053729, lat: 42.36136)
-Thing.create(city_id: 1579, lng: -71.053086, lat: 42.361347)
-Thing.create(city_id: 1580, lng: -71.063616, lat: 42.36138)
-Thing.create(city_id: 1581, lng: -71.144607, lat: 42.361633)
-Thing.create(city_id: 1582, lng: -71.057722, lat: 42.361324)
-Thing.create(city_id: 1583, lng: -71.064504, lat: 42.36133)
-Thing.create(city_id: 1584, lng: -71.018142, lat: 42.361138)
-Thing.create(city_id: 1585, lng: -71.133466, lat: 42.361553)
-Thing.create(city_id: 1586, lng: -71.066537, lat: 42.361298)
-Thing.create(city_id: 1587, lng: -71.142097, lat: 42.361526)
-Thing.create(city_id: 1588, lng: -71.06756, lat: 42.361248)
-Thing.create(city_id: 1589, lng: -71.128542, lat: 42.361453)
-Thing.create(city_id: 1590, lng: -71.056518, lat: 42.361178)
-Thing.create(city_id: 1591, lng: -71.069271, lat: 42.361223)
-Thing.create(city_id: 1592, lng: -71.052481, lat: 42.361127)
-Thing.create(city_id: 1593, lng: -71.130023, lat: 42.361395)
-Thing.create(city_id: 1594, lng: -71.061456, lat: 42.361142)
-Thing.create(city_id: 1595, lng: -71.131205, lat: 42.361372)
-Thing.create(city_id: 1596, lng: -71.125927, lat: 42.361346)
-Thing.create(city_id: 1597, lng: -71.05267, lat: 42.361076)
-Thing.create(city_id: 1598, lng: -71.052677, lat: 42.361072)
-Thing.create(city_id: 1599, lng: -71.132202, lat: 42.361323)
-Thing.create(city_id: 1600, lng: -71.05271, lat: 42.361016)
-Thing.create(city_id: 1601, lng: -71.089368, lat: 42.283869)
-Thing.create(city_id: 1602, lng: -71.140166, lat: 42.361308)
-Thing.create(city_id: 1603, lng: -71.092497, lat: 42.267889)
-Thing.create(city_id: 1604, lng: -71.134305, lat: 42.361271)
-Thing.create(city_id: 1605, lng: -71.090462, lat: 42.284155)
-Thing.create(city_id: 1606, lng: -71.068885, lat: 42.361012)
-Thing.create(city_id: 1607, lng: -71.142607, lat: 42.361252)
-Thing.create(city_id: 1608, lng: -71.092081, lat: 42.273959)
-Thing.create(city_id: 1609, lng: -71.155963, lat: 42.357279)
-Thing.create(city_id: 1610, lng: -71.12969, lat: 42.357196)
-Thing.create(city_id: 1611, lng: -71.107775, lat: 42.330931)
-Thing.create(city_id: 1612, lng: -71.128122, lat: 42.357184)
-Thing.create(city_id: 1613, lng: -71.052772, lat: 42.35954)
-Thing.create(city_id: 1614, lng: -71.150772, lat: 42.349777)
-Thing.create(city_id: 1615, lng: -71.092064, lat: 42.272945)
-Thing.create(city_id: 1616, lng: -71.130459, lat: 42.357147)
-Thing.create(city_id: 1617, lng: -71.092731, lat: 42.284748)
-Thing.create(city_id: 1618, lng: -71.091997, lat: 42.284355)
-Thing.create(city_id: 1619, lng: -71.133837, lat: 42.357125)
-Thing.create(city_id: 1620, lng: -71.145977, lat: 42.357155)
-Thing.create(city_id: 1621, lng: -71.061438, lat: 42.292041)
-Thing.create(city_id: 1622, lng: -71.161915, lat: 42.357191)
-Thing.create(city_id: 1623, lng: -71.126484, lat: 42.247519)
-Thing.create(city_id: 1624, lng: -71.105599, lat: 42.320959)
-Thing.create(city_id: 1625, lng: -71.1696, lat: 42.279025)
-Thing.create(city_id: 1626, lng: -71.073756, lat: 42.307671)
-Thing.create(city_id: 1627, lng: -71.149194, lat: 42.357107)
-Thing.create(city_id: 1628, lng: -71.132877, lat: 42.357054)
-Thing.create(city_id: 1629, lng: -71.159837, lat: 42.357132)
-Thing.create(city_id: 1630, lng: -71.149082, lat: 42.283697)
-Thing.create(city_id: 1631, lng: -71.070645, lat: 42.356778)
-Thing.create(city_id: 1632, lng: -71.152881, lat: 42.35705)
-Thing.create(city_id: 1633, lng: -71.048927, lat: 42.286887)
-Thing.create(city_id: 1634, lng: -71.048613, lat: 42.286191)
-Thing.create(city_id: 1635, lng: -71.144136, lat: 42.356989)
-Thing.create(city_id: 1636, lng: -71.072185, lat: 42.307601)
-Thing.create(city_id: 1637, lng: -71.144719, lat: 42.356978)
-Thing.create(city_id: 1638, lng: -71.056703, lat: 42.360092)
-Thing.create(city_id: 1639, lng: -71.100369, lat: 42.331791)
-Thing.create(city_id: 1640, lng: -71.150042, lat: 42.283126)
-Thing.create(city_id: 1641, lng: -71.152422, lat: 42.357483)
-Thing.create(city_id: 1642, lng: -71.135767, lat: 42.357364)
-Thing.create(city_id: 1643, lng: -71.150587, lat: 42.282403)
-Thing.create(city_id: 1644, lng: -71.042925, lat: 42.352573)
-Thing.create(city_id: 1645, lng: -71.079607, lat: 42.314813)
-Thing.create(city_id: 1646, lng: -71.162927, lat: 42.356956)
-Thing.create(city_id: 1647, lng: -71.157231, lat: 42.356937)
-Thing.create(city_id: 1648, lng: -71.04394, lat: 42.353026)
-Thing.create(city_id: 1649, lng: -71.071517, lat: 42.356594)
-Thing.create(city_id: 1650, lng: -71.048308, lat: 42.288161)
-Thing.create(city_id: 1651, lng: -71.131967, lat: 42.356766)
-Thing.create(city_id: 1652, lng: -71.13908, lat: 42.356781)
-Thing.create(city_id: 1653, lng: -71.151965, lat: 42.35682)
-Thing.create(city_id: 1654, lng: -71.13112, lat: 42.356755)
-Thing.create(city_id: 1655, lng: -71.154639, lat: 42.356796)
-Thing.create(city_id: 1656, lng: -71.075458, lat: 42.356516)
-Thing.create(city_id: 1657, lng: -71.072465, lat: 42.356496)
-Thing.create(city_id: 1658, lng: -71.052628, lat: 42.356409)
-Thing.create(city_id: 1659, lng: -71.068686, lat: 42.356447)
-Thing.create(city_id: 1660, lng: -71.074392, lat: 42.356468)
-Thing.create(city_id: 1661, lng: -71.053135, lat: 42.365337)
-Thing.create(city_id: 1662, lng: -71.05275, lat: 42.356374)
-Thing.create(city_id: 1663, lng: -71.142855, lat: 42.356682)
-Thing.create(city_id: 1664, lng: -71.158783, lat: 42.356681)
-Thing.create(city_id: 1665, lng: -71.143915, lat: 42.35545)
-Thing.create(city_id: 1666, lng: -71.171232, lat: 42.355508)
-Thing.create(city_id: 1667, lng: -71.13297, lat: 42.35536)
-Thing.create(city_id: 1668, lng: -71.131754, lat: 42.355337)
-Thing.create(city_id: 1669, lng: -71.073909, lat: 42.355136)
-Thing.create(city_id: 1670, lng: -71.161732, lat: 42.355423)
-Thing.create(city_id: 1671, lng: -71.151835, lat: 42.355388)
-Thing.create(city_id: 1672, lng: -71.119688, lat: 42.36004)
-Thing.create(city_id: 1673, lng: -71.028259, lat: 42.365435)
-Thing.create(city_id: 1674, lng: -71.117588, lat: 42.310582)
-Thing.create(city_id: 1675, lng: -71.129349, lat: 42.359892)
-Thing.create(city_id: 1676, lng: -71.116996, lat: 42.309823)
-Thing.create(city_id: 1677, lng: -71.068558, lat: 42.359606)
-Thing.create(city_id: 1678, lng: -71.144269, lat: 42.359862)
-Thing.create(city_id: 1679, lng: -71.051565, lat: 42.359527)
-Thing.create(city_id: 1680, lng: -71.003229, lat: 42.386388)
-Thing.create(city_id: 1681, lng: -71.061982, lat: 42.294346)
-Thing.create(city_id: 1682, lng: -71.13099, lat: 42.359795)
-Thing.create(city_id: 1683, lng: -71.00797, lat: 42.38679)
-Thing.create(city_id: 1684, lng: -71.069433, lat: 42.359564)
-Thing.create(city_id: 1685, lng: -71.072419, lat: 42.359559)
-Thing.create(city_id: 1686, lng: -71.013301, lat: 42.386802)
-Thing.create(city_id: 1687, lng: -71.050995, lat: 42.359457)
-Thing.create(city_id: 1688, lng: -71.124651, lat: 42.359716)
-Thing.create(city_id: 1689, lng: -71.014468, lat: 42.386783)
-Thing.create(city_id: 1690, lng: -71.007394, lat: 42.386561)
-Thing.create(city_id: 1691, lng: -71.006943, lat: 42.386486)
-Thing.create(city_id: 1692, lng: -71.134928, lat: 42.359736)
-Thing.create(city_id: 1693, lng: -71.127829, lat: 42.359659)
-Thing.create(city_id: 1694, lng: -71.004302, lat: 42.38641)
-Thing.create(city_id: 1695, lng: -71.007647, lat: 42.386267)
-Thing.create(city_id: 1696, lng: -71.141987, lat: 42.359645)
-Thing.create(city_id: 1697, lng: -71.126846, lat: 42.359585)
-Thing.create(city_id: 1698, lng: -71.010098, lat: 42.386342)
-Thing.create(city_id: 1699, lng: -71.010326, lat: 42.385593)
-Thing.create(city_id: 1700, lng: -71.007987, lat: 42.386368)
-Thing.create(city_id: 1701, lng: -71.00539, lat: 42.385698)
-Thing.create(city_id: 1702, lng: -71.004889, lat: 42.386047)
-Thing.create(city_id: 1703, lng: -71.011341, lat: 42.385872)
-Thing.create(city_id: 1704, lng: -71.006695, lat: 42.385661)
-Thing.create(city_id: 1705, lng: -71.152818, lat: 42.359589)
-Thing.create(city_id: 1706, lng: -71.069651, lat: 42.359305)
-Thing.create(city_id: 1707, lng: -71.143735, lat: 42.359549)
-Thing.create(city_id: 1708, lng: -71.025234, lat: 42.359114)
-Thing.create(city_id: 1709, lng: -71.009069, lat: 42.385998)
-Thing.create(city_id: 1710, lng: -71.13392, lat: 42.359502)
-Thing.create(city_id: 1711, lng: -71.051028, lat: 42.359208)
-Thing.create(city_id: 1712, lng: -71.002475, lat: 42.385894)
-Thing.create(city_id: 1713, lng: -71.14856, lat: 42.359534)
-Thing.create(city_id: 1714, lng: -71.009207, lat: 42.385786)
-Thing.create(city_id: 1715, lng: -71.068238, lat: 42.359254)
-Thing.create(city_id: 1716, lng: -71.130138, lat: 42.359466)
-Thing.create(city_id: 1717, lng: -71.12362, lat: 42.359444)
-Thing.create(city_id: 1718, lng: -71.012311, lat: 42.385512)
-Thing.create(city_id: 1719, lng: -71.0031, lat: 42.385292)
-Thing.create(city_id: 1720, lng: -71.125674, lat: 42.359433)
-Thing.create(city_id: 1721, lng: -71.149735, lat: 42.359499)
-Thing.create(city_id: 1722, lng: -71.004547, lat: 42.385128)
-Thing.create(city_id: 1723, lng: -71.136852, lat: 42.359418)
-Thing.create(city_id: 1724, lng: -71.139931, lat: 42.359423)
-Thing.create(city_id: 1725, lng: -71.06851, lat: 42.35916)
-Thing.create(city_id: 1726, lng: -71.024877, lat: 42.35896)
-Thing.create(city_id: 1727, lng: -71.05107, lat: 42.359058)
-Thing.create(city_id: 1728, lng: -71.133076, lat: 42.359312)
-Thing.create(city_id: 1729, lng: -71.136166, lat: 42.35929)
-Thing.create(city_id: 1730, lng: -71.128496, lat: 42.359261)
-Thing.create(city_id: 1731, lng: -71.070621, lat: 42.359016)
-Thing.create(city_id: 1732, lng: -71.125184, lat: 42.359181)
-Thing.create(city_id: 1733, lng: -71.138113, lat: 42.345307)
-Thing.create(city_id: 1734, lng: -71.04995, lat: 42.358902)
-Thing.create(city_id: 1735, lng: -71.093668, lat: 42.347998)
-Thing.create(city_id: 1736, lng: -71.095011, lat: 42.348666)
-Thing.create(city_id: 1737, lng: -71.0021, lat: 42.384917)
-Thing.create(city_id: 1738, lng: -71.131806, lat: 42.359184)
-Thing.create(city_id: 1739, lng: -71.153858, lat: 42.359241)
-Thing.create(city_id: 1740, lng: -71.074227, lat: 42.313735)
-Thing.create(city_id: 1741, lng: -71.01103, lat: 42.385139)
-Thing.create(city_id: 1742, lng: -71.012016, lat: 42.385026)
-Thing.create(city_id: 1743, lng: -71.005888, lat: 42.384968)
-Thing.create(city_id: 1744, lng: -71.013723, lat: 42.384448)
-Thing.create(city_id: 1745, lng: -71.024343, lat: 42.358719)
-Thing.create(city_id: 1746, lng: -71.072608, lat: 42.358896)
-Thing.create(city_id: 1747, lng: -71.004894, lat: 42.384854)
-Thing.create(city_id: 1748, lng: -71.014366, lat: 42.384742)
-Thing.create(city_id: 1749, lng: -71.126379, lat: 42.359065)
-Thing.create(city_id: 1750, lng: -71.003231, lat: 42.384656)
-Thing.create(city_id: 1751, lng: -71.127082, lat: 42.359064)
-Thing.create(city_id: 1752, lng: -71.014648, lat: 42.383916)
-Thing.create(city_id: 1753, lng: -71.001888, lat: 42.383588)
-Thing.create(city_id: 1754, lng: -71.004095, lat: 42.384236)
-Thing.create(city_id: 1755, lng: -71.003055, lat: 42.384011)
-Thing.create(city_id: 1756, lng: -71.130935, lat: 42.359037)
-Thing.create(city_id: 1757, lng: -71.013127, lat: 42.382255)
-Thing.create(city_id: 1758, lng: -71.014101, lat: 42.382484)
-Thing.create(city_id: 1759, lng: -71.135237, lat: 42.359039)
-Thing.create(city_id: 1760, lng: -71.069076, lat: 42.358776)
-Thing.create(city_id: 1761, lng: -71.070365, lat: 42.358772)
-Thing.create(city_id: 1762, lng: -71.123961, lat: 42.358946)
-Thing.create(city_id: 1763, lng: -71.023988, lat: 42.358567)
-Thing.create(city_id: 1764, lng: -71.144325, lat: 42.358995)
-Thing.create(city_id: 1765, lng: -71.068609, lat: 42.358731)
-Thing.create(city_id: 1766, lng: -71.01125, lat: 42.384175)
-Thing.create(city_id: 1767, lng: -71.071598, lat: 42.35872)
-Thing.create(city_id: 1768, lng: -71.012102, lat: 42.382795)
-Thing.create(city_id: 1769, lng: -71.151809, lat: 42.358961)
-Thing.create(city_id: 1770, lng: -71.142766, lat: 42.359359)
-Thing.create(city_id: 1771, lng: -71.009499, lat: 42.38503)
-Thing.create(city_id: 1772, lng: -71.129201, lat: 42.358861)
-Thing.create(city_id: 1773, lng: -71.142353, lat: 42.358895)
-Thing.create(city_id: 1774, lng: -71.007775, lat: 42.385609)
-Thing.create(city_id: 1775, lng: -71.125755, lat: 42.358822)
-Thing.create(city_id: 1776, lng: -71.155187, lat: 42.358901)
-Thing.create(city_id: 1777, lng: -71.005674, lat: 42.386988)
-Thing.create(city_id: 1778, lng: -71.023626, lat: 42.358405)
-Thing.create(city_id: 1779, lng: -71.13413, lat: 42.358809)
-Thing.create(city_id: 1780, lng: -71.052778, lat: 42.358503)
-Thing.create(city_id: 1781, lng: -71.024347, lat: 42.358388)
-Thing.create(city_id: 1782, lng: -71.150759, lat: 42.358837)
-Thing.create(city_id: 1783, lng: -71.129811, lat: 42.358771)
-Thing.create(city_id: 1784, lng: -71.05053, lat: 42.35847)
-Thing.create(city_id: 1785, lng: -71.013945, lat: 42.383493)
-Thing.create(city_id: 1786, lng: -71.001518, lat: 42.385748)
-Thing.create(city_id: 1787, lng: -71.127674, lat: 42.358702)
-Thing.create(city_id: 1788, lng: -71.146205, lat: 42.358718)
-Thing.create(city_id: 1789, lng: -71.132122, lat: 42.358665)
-Thing.create(city_id: 1790, lng: -71.149576, lat: 42.358702)
-Thing.create(city_id: 1791, lng: -71.140353, lat: 42.358659)
-Thing.create(city_id: 1792, lng: -71.071021, lat: 42.298386)
-Thing.create(city_id: 1793, lng: -71.11674, lat: 42.353065)
-Thing.create(city_id: 1794, lng: -71.07298, lat: 42.286553)
-Thing.create(city_id: 1795, lng: -71.13139, lat: 42.358575)
-Thing.create(city_id: 1796, lng: -71.145171, lat: 42.358581)
-Thing.create(city_id: 1797, lng: -71.025288, lat: 42.358145)
-Thing.create(city_id: 1798, lng: -71.064947, lat: 42.288739)
-Thing.create(city_id: 1799, lng: -71.065725, lat: 42.288902)
-Thing.create(city_id: 1800, lng: -71.065378, lat: 42.288156)
-Thing.create(city_id: 1801, lng: -71.144404, lat: 42.358528)
-Thing.create(city_id: 1802, lng: -71.051272, lat: 42.358189)
-Thing.create(city_id: 1803, lng: -71.137246, lat: 42.358479)
-Thing.create(city_id: 1804, lng: -71.156803, lat: 42.358527)
-Thing.create(city_id: 1805, lng: -71.132999, lat: 42.358453)
-Thing.create(city_id: 1806, lng: -71.171045, lat: 42.354235)
-Thing.create(city_id: 1807, lng: -71.058901, lat: 42.353858)
-Thing.create(city_id: 1808, lng: -71.146132, lat: 42.35416)
-Thing.create(city_id: 1809, lng: -71.162054, lat: 42.354177)
-Thing.create(city_id: 1810, lng: -71.078524, lat: 42.353885)
-Thing.create(city_id: 1811, lng: -71.054957, lat: 42.35379)
-Thing.create(city_id: 1812, lng: -71.121914, lat: 42.35399)
-Thing.create(city_id: 1813, lng: -71.133173, lat: 42.354005)
-Thing.create(city_id: 1814, lng: -71.064061, lat: 42.353747)
-Thing.create(city_id: 1815, lng: -71.157929, lat: 42.354064)
-Thing.create(city_id: 1816, lng: -71.156646, lat: 42.354058)
-Thing.create(city_id: 1817, lng: -71.058162, lat: 42.35372)
-Thing.create(city_id: 1818, lng: -71.150325, lat: 42.354001)
-Thing.create(city_id: 1819, lng: -71.05617, lat: 42.353983)
-Thing.create(city_id: 1820, lng: -71.159229, lat: 42.354302)
-Thing.create(city_id: 1821, lng: -71.054781, lat: 42.353886)
-Thing.create(city_id: 1822, lng: -71.17243, lat: 42.354238)
-Thing.create(city_id: 1823, lng: -71.167619, lat: 42.354051)
-Thing.create(city_id: 1824, lng: -71.120892, lat: 42.353887)
-Thing.create(city_id: 1825, lng: -71.169987, lat: 42.354031)
-Thing.create(city_id: 1826, lng: -71.149208, lat: 42.353957)
-Thing.create(city_id: 1827, lng: -71.149235, lat: 42.284992)
-Thing.create(city_id: 1828, lng: -71.052794, lat: 42.35816)
-Thing.create(city_id: 1829, lng: -71.050422, lat: 42.358138)
-Thing.create(city_id: 1830, lng: -71.065006, lat: 42.287045)
-Thing.create(city_id: 1831, lng: -71.128396, lat: 42.3584)
-Thing.create(city_id: 1832, lng: -71.117785, lat: 42.313057)
-Thing.create(city_id: 1833, lng: -71.126635, lat: 42.358381)
-Thing.create(city_id: 1834, lng: -71.064684, lat: 42.286359)
-Thing.create(city_id: 1835, lng: -71.117279, lat: 42.313703)
-Thing.create(city_id: 1836, lng: -71.072818, lat: 42.35816)
-Thing.create(city_id: 1837, lng: -71.071264, lat: 42.358151)
-Thing.create(city_id: 1838, lng: -71.071933, lat: 42.286491)
-Thing.create(city_id: 1839, lng: -71.068422, lat: 42.358103)
-Thing.create(city_id: 1840, lng: -71.16112, lat: 42.358409)
-Thing.create(city_id: 1841, lng: -71.11808, lat: 42.314282)
-Thing.create(city_id: 1842, lng: -71.11661, lat: 42.313221)
-Thing.create(city_id: 1843, lng: -71.142602, lat: 42.358338)
-Thing.create(city_id: 1844, lng: -71.11464, lat: 42.311805)
-Thing.create(city_id: 1845, lng: -71.115228, lat: 42.312225)
-Thing.create(city_id: 1846, lng: -71.130384, lat: 42.358269)
-Thing.create(city_id: 1847, lng: -71.070769, lat: 42.310838)
-Thing.create(city_id: 1848, lng: -71.059265, lat: 42.356035)
-Thing.create(city_id: 1849, lng: -71.124976, lat: 42.358224)
-Thing.create(city_id: 1850, lng: -71.050443, lat: 42.357955)
-Thing.create(city_id: 1851, lng: -71.059662, lat: 42.356115)
-Thing.create(city_id: 1852, lng: -71.050866, lat: 42.357895)
-Thing.create(city_id: 1853, lng: -71.057773, lat: 42.310961)
-Thing.create(city_id: 1854, lng: -71.066281, lat: 42.310886)
-Thing.create(city_id: 1855, lng: -71.025571, lat: 42.357754)
-Thing.create(city_id: 1856, lng: -71.062531, lat: 42.310898)
-Thing.create(city_id: 1857, lng: -71.064889, lat: 42.28147)
-Thing.create(city_id: 1858, lng: -71.06424, lat: 42.310315)
-Thing.create(city_id: 1859, lng: -71.070208, lat: 42.357863)
-Thing.create(city_id: 1860, lng: -71.127876, lat: 42.358063)
-Thing.create(city_id: 1861, lng: -71.064461, lat: 42.280832)
-Thing.create(city_id: 1862, lng: -71.129198, lat: 42.358047)
-Thing.create(city_id: 1863, lng: -71.064709, lat: 42.310124)
-Thing.create(city_id: 1864, lng: -71.140674, lat: 42.358064)
-Thing.create(city_id: 1865, lng: -71.065467, lat: 42.309851)
-Thing.create(city_id: 1866, lng: -71.131963, lat: 42.35795)
-Thing.create(city_id: 1867, lng: -71.12604, lat: 42.357928)
-Thing.create(city_id: 1868, lng: -71.070539, lat: 42.358438)
-Thing.create(city_id: 1869, lng: -71.093386, lat: 42.287828)
-Thing.create(city_id: 1870, lng: -71.092335, lat: 42.287608)
-Thing.create(city_id: 1871, lng: -71.091265, lat: 42.287416)
-Thing.create(city_id: 1872, lng: -71.027385, lat: 42.347644)
-Thing.create(city_id: 1873, lng: -71.090536, lat: 42.287416)
-Thing.create(city_id: 1874, lng: -71.092116, lat: 42.272194)
-Thing.create(city_id: 1875, lng: -71.05103, lat: 42.357607)
-Thing.create(city_id: 1876, lng: -71.052682, lat: 42.357555)
-Thing.create(city_id: 1877, lng: -71.139609, lat: 42.357851)
-Thing.create(city_id: 1878, lng: -71.132941, lat: 42.357812)
-Thing.create(city_id: 1879, lng: -71.001556, lat: 42.388269)
-Thing.create(city_id: 1880, lng: -71.08246, lat: 42.280533)
-Thing.create(city_id: 1881, lng: -71.051273, lat: 42.357498)
-Thing.create(city_id: 1882, lng: -71.071084, lat: 42.357572)
-Thing.create(city_id: 1883, lng: -71.130047, lat: 42.357768)
-Thing.create(city_id: 1884, lng: -71.128715, lat: 42.357749)
-Thing.create(city_id: 1885, lng: -71.092124, lat: 42.271712)
-Thing.create(city_id: 1886, lng: -71.027848, lat: 42.347249)
-Thing.create(city_id: 1887, lng: -71.083292, lat: 42.280026)
-Thing.create(city_id: 1888, lng: -71.130838, lat: 42.357725)
-Thing.create(city_id: 1889, lng: -71.08258, lat: 42.279754)
-Thing.create(city_id: 1890, lng: -71.052507, lat: 42.357431)
-Thing.create(city_id: 1891, lng: -71.072999, lat: 42.357499)
-Thing.create(city_id: 1892, lng: -70.997324, lat: 42.388772)
-Thing.create(city_id: 1893, lng: -71.138406, lat: 42.357696)
-Thing.create(city_id: 1894, lng: -71.126917, lat: 42.357652)
-Thing.create(city_id: 1895, lng: -71.137584, lat: 42.357683)
-Thing.create(city_id: 1896, lng: -71.129448, lat: 42.357655)
-Thing.create(city_id: 1897, lng: -71.052349, lat: 42.357372)
-Thing.create(city_id: 1898, lng: -70.998348, lat: 42.388916)
-Thing.create(city_id: 1899, lng: -71.068011, lat: 42.357379)
-Thing.create(city_id: 1900, lng: -70.996122, lat: 42.388721)
-Thing.create(city_id: 1901, lng: -70.996985, lat: 42.388387)
-Thing.create(city_id: 1902, lng: -71.000323, lat: 42.388675)
-Thing.create(city_id: 1903, lng: -71.157505, lat: 42.357579)
-Thing.create(city_id: 1904, lng: -70.999155, lat: 42.388338)
-Thing.create(city_id: 1905, lng: -71.151327, lat: 42.357517)
-Thing.create(city_id: 1906, lng: -71.071379, lat: 42.357246)
-Thing.create(city_id: 1907, lng: -71.06791, lat: 42.357133)
-Thing.create(city_id: 1908, lng: -71.025508, lat: 42.35696)
-Thing.create(city_id: 1909, lng: -71.150278, lat: 42.357396)
-Thing.create(city_id: 1910, lng: -71.154109, lat: 42.357365)
-Thing.create(city_id: 1911, lng: -71.148257, lat: 42.357336)
-Thing.create(city_id: 1912, lng: -71.134461, lat: 42.357287)
-Thing.create(city_id: 1913, lng: -71.147062, lat: 42.357309)
-Thing.create(city_id: 1914, lng: -71.158524, lat: 42.357314)
-Thing.create(city_id: 1915, lng: -71.170339, lat: 42.352303)
-Thing.create(city_id: 1916, lng: -71.17196, lat: 42.352294)
-Thing.create(city_id: 1917, lng: -71.069935, lat: 42.351957)
-Thing.create(city_id: 1918, lng: -71.163484, lat: 42.352265)
-Thing.create(city_id: 1919, lng: -71.131829, lat: 42.352168)
-Thing.create(city_id: 1920, lng: -71.125988, lat: 42.352148)
-Thing.create(city_id: 1921, lng: -71.150251, lat: 42.352221)
-Thing.create(city_id: 1922, lng: -71.122913, lat: 42.352134)
-Thing.create(city_id: 1923, lng: -71.118501, lat: 42.352109)
-Thing.create(city_id: 1924, lng: -71.06132, lat: 42.35189)
-Thing.create(city_id: 1925, lng: -71.139374, lat: 42.352159)
-Thing.create(city_id: 1926, lng: -71.052758, lat: 42.351838)
-Thing.create(city_id: 1927, lng: -71.168851, lat: 42.35223)
-Thing.create(city_id: 1928, lng: -71.06841, lat: 42.35183)
-Thing.create(city_id: 1929, lng: -71.066037, lat: 42.351812)
-Thing.create(city_id: 1930, lng: -71.121765, lat: 42.351996)
-Thing.create(city_id: 1931, lng: -71.169406, lat: 42.352137)
-Thing.create(city_id: 1932, lng: -71.148368, lat: 42.352075)
-Thing.create(city_id: 1933, lng: -71.166757, lat: 42.352128)
-Thing.create(city_id: 1934, lng: -71.129531, lat: 42.352014)
-Thing.create(city_id: 1935, lng: -71.059435, lat: 42.351766)
-Thing.create(city_id: 1936, lng: -71.065722, lat: 42.351788)
-Thing.create(city_id: 1937, lng: -71.058116, lat: 42.351756)
-Thing.create(city_id: 1938, lng: -71.086143, lat: 42.351829)
-Thing.create(city_id: 1939, lng: -71.064823, lat: 42.351747)
-Thing.create(city_id: 1940, lng: -71.162088, lat: 42.352048)
-Thing.create(city_id: 1941, lng: -71.115535, lat: 42.351902)
-Thing.create(city_id: 1942, lng: -71.153565, lat: 42.352018)
-Thing.create(city_id: 1943, lng: -71.067774, lat: 42.351724)
-Thing.create(city_id: 1944, lng: -71.064846, lat: 42.351708)
-Thing.create(city_id: 1945, lng: -71.167769, lat: 42.352047)
-Thing.create(city_id: 1946, lng: -71.137006, lat: 42.35195)
-Thing.create(city_id: 1947, lng: -71.060657, lat: 42.351682)
-Thing.create(city_id: 1948, lng: -71.052852, lat: 42.351649)
-Thing.create(city_id: 1949, lng: -71.053036, lat: 42.351639)
-Thing.create(city_id: 1950, lng: -71.128634, lat: 42.351885)
-Thing.create(city_id: 1951, lng: -71.069108, lat: 42.351677)
-Thing.create(city_id: 1952, lng: -71.12777, lat: 42.35188)
-Thing.create(city_id: 1953, lng: -71.120565, lat: 42.351846)
-Thing.create(city_id: 1954, lng: -71.123619, lat: 42.351854)
-Thing.create(city_id: 1955, lng: -71.067603, lat: 42.352065)
-Thing.create(city_id: 1956, lng: -71.063779, lat: 42.351641)
-Thing.create(city_id: 1957, lng: -71.159104, lat: 42.351959)
-Thing.create(city_id: 1958, lng: -71.160128, lat: 42.35196)
-Thing.create(city_id: 1959, lng: -71.156842, lat: 42.351948)
-Thing.create(city_id: 1960, lng: -71.157937, lat: 42.351952)
-Thing.create(city_id: 1961, lng: -71.058173, lat: 42.351611)
-Thing.create(city_id: 1962, lng: -71.06262, lat: 42.351627)
-Thing.create(city_id: 1963, lng: -71.058377, lat: 42.351609)
-Thing.create(city_id: 1964, lng: -71.057908, lat: 42.351603)
-Thing.create(city_id: 1965, lng: -71.059595, lat: 42.351589)
-Thing.create(city_id: 1966, lng: -71.061071, lat: 42.351592)
-Thing.create(city_id: 1967, lng: -71.149276, lat: 42.351893)
-Thing.create(city_id: 1968, lng: -71.133987, lat: 42.351837)
-Thing.create(city_id: 1969, lng: -71.151661, lat: 42.351878)
-Thing.create(city_id: 1970, lng: -71.122422, lat: 42.351782)
-Thing.create(city_id: 1971, lng: -71.140153, lat: 42.351839)
-Thing.create(city_id: 1972, lng: -71.053324, lat: 42.351529)
-Thing.create(city_id: 1973, lng: -71.057049, lat: 42.35152)
-Thing.create(city_id: 1974, lng: -71.152375, lat: 42.351846)
-Thing.create(city_id: 1975, lng: -71.171171, lat: 42.351898)
-Thing.create(city_id: 1976, lng: -71.067275, lat: 42.351545)
-Thing.create(city_id: 1977, lng: -71.125594, lat: 42.351745)
-Thing.create(city_id: 1978, lng: -71.062082, lat: 42.351519)
-Thing.create(city_id: 1979, lng: -71.135524, lat: 42.351763)
-Thing.create(city_id: 1980, lng: -71.174324, lat: 42.351878)
-Thing.create(city_id: 1981, lng: -71.13017, lat: 42.351742)
-Thing.create(city_id: 1982, lng: -71.162982, lat: 42.351839)
-Thing.create(city_id: 1983, lng: -71.155811, lat: 42.351809)
-Thing.create(city_id: 1984, lng: -71.062619, lat: 42.351484)
-Thing.create(city_id: 1985, lng: -71.133025, lat: 42.351725)
-Thing.create(city_id: 1986, lng: -71.161203, lat: 42.351797)
-Thing.create(city_id: 1987, lng: -71.165508, lat: 42.351795)
-Thing.create(city_id: 1988, lng: -71.124774, lat: 42.351641)
-Thing.create(city_id: 1989, lng: -71.061433, lat: 42.351405)
-Thing.create(city_id: 1990, lng: -71.061506, lat: 42.351405)
-Thing.create(city_id: 1991, lng: -71.061339, lat: 42.351389)
-Thing.create(city_id: 1992, lng: -71.12072, lat: 42.35159)
-Thing.create(city_id: 1993, lng: -71.138509, lat: 42.351646)
-Thing.create(city_id: 1994, lng: -71.056694, lat: 42.351356)
-Thing.create(city_id: 1995, lng: -71.061021, lat: 42.351371)
-Thing.create(city_id: 1996, lng: -71.060217, lat: 42.351342)
-Thing.create(city_id: 1997, lng: -71.15485, lat: 42.351654)
-Thing.create(city_id: 1998, lng: -71.068298, lat: 42.351343)
-Thing.create(city_id: 1999, lng: -71.069812, lat: 42.351348)
-Thing.create(city_id: 2000, lng: -71.067567, lat: 42.351304)
-Thing.create(city_id: 2001, lng: -71.059197, lat: 42.35127)
-Thing.create(city_id: 2002, lng: -71.119936, lat: 42.351486)
-Thing.create(city_id: 2003, lng: -71.058309, lat: 42.351265)
-Thing.create(city_id: 2004, lng: -71.148279, lat: 42.351559)
-Thing.create(city_id: 2005, lng: -71.11721, lat: 42.351459)
-Thing.create(city_id: 2006, lng: -71.146163, lat: 42.351538)
-Thing.create(city_id: 2007, lng: -71.137598, lat: 42.355311)
-Thing.create(city_id: 2008, lng: -71.158964, lat: 42.3413)
-Thing.create(city_id: 2009, lng: -71.148688, lat: 42.356629)
-Thing.create(city_id: 2010, lng: -71.081615, lat: 42.324656)
-Thing.create(city_id: 2011, lng: -71.149503, lat: 42.355313)
-Thing.create(city_id: 2012, lng: -71.147382, lat: 42.358718)
-Thing.create(city_id: 2013, lng: -71.148894, lat: 42.355275)
-Thing.create(city_id: 2014, lng: -71.052483, lat: 42.358558)
-Thing.create(city_id: 2015, lng: -71.084773, lat: 42.280758)
-Thing.create(city_id: 2016, lng: -71.160644, lat: 42.355232)
-Thing.create(city_id: 2017, lng: -71.128431, lat: 42.355132)
-Thing.create(city_id: 2018, lng: -71.12626, lat: 42.355124)
-Thing.create(city_id: 2019, lng: -71.165843, lat: 42.355241)
-Thing.create(city_id: 2020, lng: -71.162734, lat: 42.355222)
-Thing.create(city_id: 2021, lng: -71.154703, lat: 42.355175)
-Thing.create(city_id: 2022, lng: -71.143061, lat: 42.355137)
-Thing.create(city_id: 2023, lng: -71.08464, lat: 42.280954)
-Thing.create(city_id: 2024, lng: -71.147825, lat: 42.355139)
-Thing.create(city_id: 2025, lng: -71.147848, lat: 42.357868)
-Thing.create(city_id: 2026, lng: -71.136861, lat: 42.355089)
-Thing.create(city_id: 2027, lng: -71.135393, lat: 42.355081)
-Thing.create(city_id: 2028, lng: -71.053844, lat: 42.354352)
-Thing.create(city_id: 2029, lng: -71.074986, lat: 42.354846)
-Thing.create(city_id: 2030, lng: -71.16328, lat: 42.355132)
-Thing.create(city_id: 2031, lng: -71.150877, lat: 42.355086)
-Thing.create(city_id: 2032, lng: -71.133785, lat: 42.355008)
-Thing.create(city_id: 2033, lng: -71.142196, lat: 42.355031)
-Thing.create(city_id: 2034, lng: -71.12952, lat: 42.354975)
-Thing.create(city_id: 2035, lng: -71.071482, lat: 42.299118)
-Thing.create(city_id: 2036, lng: -71.159567, lat: 42.355043)
-Thing.create(city_id: 2037, lng: -71.052454, lat: 42.358561)
-Thing.create(city_id: 2038, lng: -71.124686, lat: 42.354922)
-Thing.create(city_id: 2039, lng: -71.125324, lat: 42.354917)
-Thing.create(city_id: 2040, lng: -71.066312, lat: 42.343991)
-Thing.create(city_id: 2041, lng: -71.130654, lat: 42.354924)
-Thing.create(city_id: 2042, lng: -71.138098, lat: 42.279995)
-Thing.create(city_id: 2043, lng: -71.058853, lat: 42.288459)
-Thing.create(city_id: 2044, lng: -71.057724, lat: 42.288749)
-Thing.create(city_id: 2045, lng: -71.05672, lat: 42.289006)
-Thing.create(city_id: 2046, lng: -71.082131, lat: 42.325188)
-Thing.create(city_id: 2047, lng: -71.154076, lat: 42.355597)
-Thing.create(city_id: 2048, lng: -71.082872, lat: 42.324784)
-Thing.create(city_id: 2049, lng: -71.156154, lat: 42.355507)
-Thing.create(city_id: 2050, lng: -71.158137, lat: 42.355432)
-Thing.create(city_id: 2051, lng: -71.127341, lat: 42.35529)
-Thing.create(city_id: 2052, lng: -71.154459, lat: 42.354919)
-Thing.create(city_id: 2053, lng: -71.148995, lat: 42.354878)
-Thing.create(city_id: 2054, lng: -71.146614, lat: 42.354858)
-Thing.create(city_id: 2055, lng: -71.167326, lat: 42.354917)
-Thing.create(city_id: 2056, lng: -71.170763, lat: 42.354923)
-Thing.create(city_id: 2057, lng: -71.169328, lat: 42.354911)
-Thing.create(city_id: 2058, lng: -71.075978, lat: 42.354576)
-Thing.create(city_id: 2059, lng: -71.155525, lat: 42.354833)
-Thing.create(city_id: 2060, lng: -71.131465, lat: 42.354756)
-Thing.create(city_id: 2061, lng: -71.169812, lat: 42.354869)
-Thing.create(city_id: 2062, lng: -71.158335, lat: 42.354827)
-Thing.create(city_id: 2063, lng: -71.17183, lat: 42.354859)
-Thing.create(city_id: 2064, lng: -71.161909, lat: 42.354806)
-Thing.create(city_id: 2065, lng: -71.127025, lat: 42.354659)
-Thing.create(city_id: 2066, lng: -71.15148, lat: 42.354726)
-Thing.create(city_id: 2067, lng: -71.058301, lat: 42.3544)
-Thing.create(city_id: 2068, lng: -71.166373, lat: 42.354764)
-Thing.create(city_id: 2069, lng: -71.132425, lat: 42.354647)
-Thing.create(city_id: 2070, lng: -71.138701, lat: 42.354652)
-Thing.create(city_id: 2071, lng: -71.058857, lat: 42.354366)
-Thing.create(city_id: 2072, lng: -71.054462, lat: 42.354349)
-Thing.create(city_id: 2073, lng: -71.061862, lat: 42.354368)
-Thing.create(city_id: 2074, lng: -71.149912, lat: 42.354668)
-Thing.create(city_id: 2075, lng: -71.063561, lat: 42.354367)
-Thing.create(city_id: 2076, lng: -71.134691, lat: 42.354613)
-Thing.create(city_id: 2077, lng: -71.156926, lat: 42.354675)
-Thing.create(city_id: 2078, lng: -71.139378, lat: 42.35461)
-Thing.create(city_id: 2079, lng: -71.144418, lat: 42.354616)
-Thing.create(city_id: 2080, lng: -71.059001, lat: 42.354296)
-Thing.create(city_id: 2081, lng: -71.143235, lat: 42.354582)
-Thing.create(city_id: 2082, lng: -71.164505, lat: 42.354645)
-Thing.create(city_id: 2083, lng: -71.147831, lat: 42.354577)
-Thing.create(city_id: 2084, lng: -71.058886, lat: 42.35426)
-Thing.create(city_id: 2085, lng: -71.128117, lat: 42.354501)
-Thing.create(city_id: 2086, lng: -71.125812, lat: 42.354492)
-Thing.create(city_id: 2087, lng: -71.138112, lat: 42.354516)
-Thing.create(city_id: 2088, lng: -71.165431, lat: 42.354582)
-Thing.create(city_id: 2089, lng: -71.160702, lat: 42.354564)
-Thing.create(city_id: 2090, lng: -71.136846, lat: 42.354491)
-Thing.create(city_id: 2091, lng: -71.149354, lat: 42.354495)
-Thing.create(city_id: 2092, lng: -71.162912, lat: 42.35453)
-Thing.create(city_id: 2093, lng: -71.130809, lat: 42.354426)
-Thing.create(city_id: 2094, lng: -71.071954, lat: 42.354214)
-Thing.create(city_id: 2095, lng: -71.055341, lat: 42.354109)
-Thing.create(city_id: 2096, lng: -71.129072, lat: 42.354361)
-Thing.create(city_id: 2097, lng: -71.124733, lat: 42.354328)
-Thing.create(city_id: 2098, lng: -71.058694, lat: 42.354049)
-Thing.create(city_id: 2099, lng: -71.077709, lat: 42.354109)
-Thing.create(city_id: 2100, lng: -71.127947, lat: 42.354258)
-Thing.create(city_id: 2101, lng: -71.048434, lat: 42.353957)
-Thing.create(city_id: 2102, lng: -71.131873, lat: 42.35425)
-Thing.create(city_id: 2103, lng: -71.056763, lat: 42.353982)
-Thing.create(city_id: 2104, lng: -71.063818, lat: 42.354007)
-Thing.create(city_id: 2105, lng: -71.123769, lat: 42.354214)
-Thing.create(city_id: 2106, lng: -71.058567, lat: 42.353971)
-Thing.create(city_id: 2107, lng: -71.135593, lat: 42.354238)
-Thing.create(city_id: 2108, lng: -71.147004, lat: 42.354247)
-Thing.create(city_id: 2109, lng: -71.05777, lat: 42.353931)
-Thing.create(city_id: 2110, lng: -71.059962, lat: 42.35394)
-Thing.create(city_id: 2111, lng: -71.154038, lat: 42.354231)
-Thing.create(city_id: 2112, lng: -71.063423, lat: 42.35392)
-Thing.create(city_id: 2113, lng: -71.122917, lat: 42.354113)
-Thing.create(city_id: 2114, lng: -71.058858, lat: 42.353883)
-Thing.create(city_id: 2115, lng: -71.130282, lat: 42.354127)
-Thing.create(city_id: 2116, lng: -71.15487, lat: 42.354199)
-Thing.create(city_id: 2117, lng: -71.148083, lat: 42.354169)
-Thing.create(city_id: 2118, lng: -71.153372, lat: 42.353929)
-Thing.create(city_id: 2119, lng: -71.05796, lat: 42.353588)
-Thing.create(city_id: 2120, lng: -71.136538, lat: 42.353856)
-Thing.create(city_id: 2121, lng: -71.160957, lat: 42.353928)
-Thing.create(city_id: 2122, lng: -71.056055, lat: 42.35357)
-Thing.create(city_id: 2123, lng: -71.143114, lat: 42.353868)
-Thing.create(city_id: 2124, lng: -71.16869, lat: 42.353943)
-Thing.create(city_id: 2125, lng: -71.060093, lat: 42.353569)
-Thing.create(city_id: 2126, lng: -71.056501, lat: 42.353548)
-Thing.create(city_id: 2127, lng: -71.132179, lat: 42.353809)
-Thing.create(city_id: 2128, lng: -71.151467, lat: 42.353865)
-Thing.create(city_id: 2129, lng: -71.079521, lat: 42.353615)
-Thing.create(city_id: 2130, lng: -71.146818, lat: 42.353836)
-Thing.create(city_id: 2131, lng: -71.164748, lat: 42.353858)
-Thing.create(city_id: 2132, lng: -71.13794, lat: 42.353724)
-Thing.create(city_id: 2133, lng: -71.16306, lat: 42.35377)
-Thing.create(city_id: 2134, lng: -71.159963, lat: 42.353759)
-Thing.create(city_id: 2135, lng: -71.127911, lat: 42.353657)
-Thing.create(city_id: 2136, lng: -71.144926, lat: 42.353709)
-Thing.create(city_id: 2137, lng: -71.061059, lat: 42.353419)
-Thing.create(city_id: 2138, lng: -71.078877, lat: 42.353484)
-Thing.create(city_id: 2139, lng: -71.149577, lat: 42.353713)
-Thing.create(city_id: 2140, lng: -71.148145, lat: 42.353682)
-Thing.create(city_id: 2141, lng: -71.053429, lat: 42.353343)
-Thing.create(city_id: 2142, lng: -71.12903, lat: 42.353606)
-Thing.create(city_id: 2143, lng: -71.059157, lat: 42.353344)
-Thing.create(city_id: 2144, lng: -71.058409, lat: 42.353341)
-Thing.create(city_id: 2145, lng: -71.041398, lat: 42.35326)
-Thing.create(city_id: 2146, lng: -71.155475, lat: 42.353646)
-Thing.create(city_id: 2147, lng: -71.127059, lat: 42.353557)
-Thing.create(city_id: 2148, lng: -71.055862, lat: 42.353302)
-Thing.create(city_id: 2149, lng: -71.063449, lat: 42.353328)
-Thing.create(city_id: 2150, lng: -71.137819, lat: 42.353578)
-Thing.create(city_id: 2151, lng: -71.062704, lat: 42.353308)
-Thing.create(city_id: 2152, lng: -71.135578, lat: 42.353561)
-Thing.create(city_id: 2153, lng: -71.080465, lat: 42.353363)
-Thing.create(city_id: 2154, lng: -71.059286, lat: 42.353275)
-Thing.create(city_id: 2155, lng: -71.059645, lat: 42.353276)
-Thing.create(city_id: 2156, lng: -71.154228, lat: 42.353589)
-Thing.create(city_id: 2157, lng: -71.058632, lat: 42.353257)
-Thing.create(city_id: 2158, lng: -71.130092, lat: 42.353508)
-Thing.create(city_id: 2159, lng: -71.166838, lat: 42.353607)
-Thing.create(city_id: 2160, lng: -71.063858, lat: 42.353261)
-Thing.create(city_id: 2161, lng: -71.173019, lat: 42.353619)
-Thing.create(city_id: 2162, lng: -71.061517, lat: 42.35324)
-Thing.create(city_id: 2163, lng: -71.057906, lat: 42.35321)
-Thing.create(city_id: 2164, lng: -71.056681, lat: 42.353202)
-Thing.create(city_id: 2165, lng: -71.131287, lat: 42.353466)
-Thing.create(city_id: 2166, lng: -71.057095, lat: 42.3532)
-Thing.create(city_id: 2167, lng: -71.158724, lat: 42.353543)
-Thing.create(city_id: 2168, lng: -71.12599, lat: 42.353428)
-Thing.create(city_id: 2169, lng: -71.056095, lat: 42.353174)
-Thing.create(city_id: 2170, lng: -71.118028, lat: 42.353388)
-Thing.create(city_id: 2171, lng: -71.057022, lat: 42.353166)
-Thing.create(city_id: 2172, lng: -71.140854, lat: 42.353454)
-Thing.create(city_id: 2173, lng: -71.136739, lat: 42.353419)
-Thing.create(city_id: 2174, lng: -71.171375, lat: 42.353513)
-Thing.create(city_id: 2175, lng: -71.14708, lat: 42.35341)
-Thing.create(city_id: 2176, lng: -71.157964, lat: 42.353414)
-Thing.create(city_id: 2177, lng: -71.156987, lat: 42.353409)
-Thing.create(city_id: 2178, lng: -71.165949, lat: 42.353434)
-Thing.create(city_id: 2179, lng: -71.170529, lat: 42.35344)
-Thing.create(city_id: 2180, lng: -71.052768, lat: 42.353038)
-Thing.create(city_id: 2181, lng: -71.148728, lat: 42.353352)
-Thing.create(city_id: 2182, lng: -71.133305, lat: 42.353296)
-Thing.create(city_id: 2183, lng: -71.052721, lat: 42.353)
-Thing.create(city_id: 2184, lng: -71.162239, lat: 42.353373)
-Thing.create(city_id: 2185, lng: -71.125031, lat: 42.35325)
-Thing.create(city_id: 2186, lng: -71.060213, lat: 42.353)
-Thing.create(city_id: 2187, lng: -71.057075, lat: 42.352973)
-Thing.create(city_id: 2188, lng: -71.081561, lat: 42.353064)
-Thing.create(city_id: 2189, lng: -71.15606, lat: 42.353279)
-Thing.create(city_id: 2190, lng: -71.142577, lat: 42.353752)
-Thing.create(city_id: 2191, lng: -71.041611, lat: 42.353347)
-Thing.create(city_id: 2192, lng: -71.142076, lat: 42.353685)
-Thing.create(city_id: 2193, lng: -71.152657, lat: 42.35367)
-Thing.create(city_id: 2194, lng: -71.063535, lat: 42.35333)
-Thing.create(city_id: 2195, lng: -71.121052, lat: 42.353166)
-Thing.create(city_id: 2196, lng: -71.135628, lat: 42.353211)
-Thing.create(city_id: 2197, lng: -71.061374, lat: 42.352939)
-Thing.create(city_id: 2198, lng: -71.150803, lat: 42.353233)
-Thing.create(city_id: 2199, lng: -71.134637, lat: 42.353182)
-Thing.create(city_id: 2200, lng: -71.12362, lat: 42.353142)
-Thing.create(city_id: 2201, lng: -71.064265, lat: 42.352927)
-Thing.create(city_id: 2202, lng: -71.142899, lat: 42.353197)
-Thing.create(city_id: 2203, lng: -71.059424, lat: 42.352899)
-Thing.create(city_id: 2204, lng: -71.171988, lat: 42.353247)
-Thing.create(city_id: 2205, lng: -71.173814, lat: 42.353239)
-Thing.create(city_id: 2206, lng: -71.160627, lat: 42.353192)
-Thing.create(city_id: 2207, lng: -71.064325, lat: 42.352861)
-Thing.create(city_id: 2208, lng: -71.122846, lat: 42.353059)
-Thing.create(city_id: 2209, lng: -71.061048, lat: 42.35283)
-Thing.create(city_id: 2210, lng: -71.1477, lat: 42.353127)
-Thing.create(city_id: 2211, lng: -71.141144, lat: 42.353094)
-Thing.create(city_id: 2212, lng: -71.149736, lat: 42.353115)
-Thing.create(city_id: 2213, lng: -71.155049, lat: 42.353125)
-Thing.create(city_id: 2214, lng: -71.133607, lat: 42.353058)
-Thing.create(city_id: 2215, lng: -71.058038, lat: 42.352789)
-Thing.create(city_id: 2216, lng: -71.164312, lat: 42.353134)
-Thing.create(city_id: 2217, lng: -71.052465, lat: 42.352749)
-Thing.create(city_id: 2218, lng: -71.064504, lat: 42.352795)
-Thing.create(city_id: 2219, lng: -71.059364, lat: 42.352774)
-Thing.create(city_id: 2220, lng: -71.131129, lat: 42.353017)
-Thing.create(city_id: 2221, lng: -71.059363, lat: 42.352763)
-Thing.create(city_id: 2222, lng: -71.169167, lat: 42.353125)
-Thing.create(city_id: 2223, lng: -71.145323, lat: 42.353021)
-Thing.create(city_id: 2224, lng: -71.121821, lat: 42.352937)
-Thing.create(city_id: 2225, lng: -71.07439, lat: 42.352769)
-Thing.create(city_id: 2226, lng: -71.13872, lat: 42.352987)
-Thing.create(city_id: 2227, lng: -71.082586, lat: 42.352787)
-Thing.create(city_id: 2228, lng: -71.164981, lat: 42.353052)
-Thing.create(city_id: 2229, lng: -71.163185, lat: 42.353042)
-Thing.create(city_id: 2230, lng: -71.142038, lat: 42.352948)
-Thing.create(city_id: 2231, lng: -71.132339, lat: 42.352905)
-Thing.create(city_id: 2232, lng: -71.062467, lat: 42.352655)
-Thing.create(city_id: 2233, lng: -71.118352, lat: 42.352791)
-Thing.create(city_id: 2234, lng: -71.154078, lat: 42.35288)
-Thing.create(city_id: 2235, lng: -71.059749, lat: 42.35255)
-Thing.create(city_id: 2236, lng: -71.16673, lat: 42.352904)
-Thing.create(city_id: 2237, lng: -71.167944, lat: 42.352897)
-Thing.create(city_id: 2238, lng: -71.071105, lat: 42.352534)
-Thing.create(city_id: 2239, lng: -71.134147, lat: 42.352737)
-Thing.create(city_id: 2240, lng: -71.171116, lat: 42.352846)
-Thing.create(city_id: 2241, lng: -71.060805, lat: 42.352471)
-Thing.create(city_id: 2242, lng: -71.148395, lat: 42.352771)
-Thing.create(city_id: 2243, lng: -71.128421, lat: 42.352691)
-Thing.create(city_id: 2244, lng: -71.086133, lat: 42.347271)
-Thing.create(city_id: 2245, lng: -71.157473, lat: 42.347496)
-Thing.create(city_id: 2246, lng: -71.10217, lat: 42.347305)
-Thing.create(city_id: 2247, lng: -71.137755, lat: 42.347403)
-Thing.create(city_id: 2248, lng: -71.0317, lat: 42.347019)
-Thing.create(city_id: 2249, lng: -71.063673, lat: 42.347129)
-Thing.create(city_id: 2250, lng: -71.133974, lat: 42.347373)
-Thing.create(city_id: 2251, lng: -71.166235, lat: 42.347467)
-Thing.create(city_id: 2252, lng: -71.07173, lat: 42.338899)
-Thing.create(city_id: 2253, lng: -71.095249, lat: 42.347225)
-Thing.create(city_id: 2254, lng: -71.06918, lat: 42.338809)
-Thing.create(city_id: 2255, lng: -71.103267, lat: 42.347252)
-Thing.create(city_id: 2256, lng: -71.096246, lat: 42.347221)
-Thing.create(city_id: 2257, lng: -71.047611, lat: 42.347039)
-Thing.create(city_id: 2258, lng: -71.097451, lat: 42.34722)
-Thing.create(city_id: 2259, lng: -71.170637, lat: 42.347452)
-Thing.create(city_id: 2260, lng: -71.140334, lat: 42.34735)
-Thing.create(city_id: 2261, lng: -71.075875, lat: 42.338878)
-Thing.create(city_id: 2262, lng: -71.07339, lat: 42.33876)
-Thing.create(city_id: 2263, lng: -71.102698, lat: 42.347216)
-Thing.create(city_id: 2264, lng: -71.137093, lat: 42.347326)
-Thing.create(city_id: 2265, lng: -71.070824, lat: 42.347083)
-Thing.create(city_id: 2266, lng: -71.162886, lat: 42.347384)
-Thing.create(city_id: 2267, lng: -71.0679, lat: 42.33867)
-Thing.create(city_id: 2268, lng: -71.037625, lat: 42.346937)
-Thing.create(city_id: 2269, lng: -71.047749, lat: 42.346946)
-Thing.create(city_id: 2270, lng: -71.035471, lat: 42.346849)
-Thing.create(city_id: 2271, lng: -71.061605, lat: 42.34691)
-Thing.create(city_id: 2272, lng: -71.139353, lat: 42.347179)
-Thing.create(city_id: 2273, lng: -71.167171, lat: 42.347262)
-Thing.create(city_id: 2274, lng: -71.092678, lat: 42.347018)
-Thing.create(city_id: 2275, lng: -71.091052, lat: 42.346994)
-Thing.create(city_id: 2276, lng: -71.102323, lat: 42.347021)
-Thing.create(city_id: 2277, lng: -71.160034, lat: 42.347156)
-Thing.create(city_id: 2278, lng: -71.138454, lat: 42.347081)
-Thing.create(city_id: 2279, lng: -71.085749, lat: 42.346899)
-Thing.create(city_id: 2280, lng: -71.10222, lat: 42.347528)
-Thing.create(city_id: 2281, lng: -71.08686, lat: 42.347285)
-Thing.create(city_id: 2282, lng: -71.13522, lat: 42.347379)
-Thing.create(city_id: 2283, lng: -71.078882, lat: 42.338554)
-Thing.create(city_id: 2284, lng: -71.062853, lat: 42.347086)
-Thing.create(city_id: 2285, lng: -71.145631, lat: 42.347346)
-Thing.create(city_id: 2286, lng: -71.138067, lat: 42.352711)
-Thing.create(city_id: 2287, lng: -71.153255, lat: 42.352757)
-Thing.create(city_id: 2288, lng: -71.057186, lat: 42.352425)
-Thing.create(city_id: 2289, lng: -71.130408, lat: 42.352673)
-Thing.create(city_id: 2290, lng: -71.063004, lat: 42.352408)
-Thing.create(city_id: 2291, lng: -71.169919, lat: 42.352752)
-Thing.create(city_id: 2292, lng: -71.061996, lat: 42.352386)
-Thing.create(city_id: 2293, lng: -71.159038, lat: 42.352712)
-Thing.create(city_id: 2294, lng: -71.157932, lat: 42.352706)
-Thing.create(city_id: 2295, lng: -71.172847, lat: 42.352749)
-Thing.create(city_id: 2296, lng: -71.066452, lat: 42.352395)
-Thing.create(city_id: 2297, lng: -71.066307, lat: 42.352389)
-Thing.create(city_id: 2298, lng: -71.059301, lat: 42.352361)
-Thing.create(city_id: 2299, lng: -71.066136, lat: 42.352385)
-Thing.create(city_id: 2300, lng: -71.066483, lat: 42.352383)
-Thing.create(city_id: 2301, lng: -71.062202, lat: 42.352354)
-Thing.create(city_id: 2302, lng: -71.155849, lat: 42.35267)
-Thing.create(city_id: 2303, lng: -71.127471, lat: 42.352575)
-Thing.create(city_id: 2304, lng: -71.065712, lat: 42.35235)
-Thing.create(city_id: 2305, lng: -71.13664, lat: 42.352581)
-Thing.create(city_id: 2306, lng: -71.05245, lat: 42.352268)
-Thing.create(city_id: 2307, lng: -71.031021, lat: 42.344084)
-Thing.create(city_id: 2308, lng: -71.068098, lat: 42.35231)
-Thing.create(city_id: 2309, lng: -71.151217, lat: 42.352585)
-Thing.create(city_id: 2310, lng: -71.15949, lat: 42.353062)
-Thing.create(city_id: 2311, lng: -71.125933, lat: 42.352901)
-Thing.create(city_id: 2312, lng: -71.129539, lat: 42.352829)
-Thing.create(city_id: 2313, lng: -71.061883, lat: 42.352522)
-Thing.create(city_id: 2314, lng: -71.058547, lat: 42.352476)
-Thing.create(city_id: 2315, lng: -71.065694, lat: 42.348339)
-Thing.create(city_id: 2316, lng: -71.054554, lat: 42.352396)
-Thing.create(city_id: 2317, lng: -71.156844, lat: 42.352712)
-Thing.create(city_id: 2318, lng: -71.129051, lat: 42.35251)
-Thing.create(city_id: 2319, lng: -71.135789, lat: 42.352507)
-Thing.create(city_id: 2320, lng: -71.160222, lat: 42.35257)
-Thing.create(city_id: 2321, lng: -71.147448, lat: 42.352528)
-Thing.create(city_id: 2322, lng: -71.067556, lat: 42.352253)
-Thing.create(city_id: 2323, lng: -71.133145, lat: 42.352481)
-Thing.create(city_id: 2324, lng: -71.062973, lat: 42.352236)
-Thing.create(city_id: 2325, lng: -71.125208, lat: 42.352452)
-Thing.create(city_id: 2326, lng: -71.161228, lat: 42.352551)
-Thing.create(city_id: 2327, lng: -71.121224, lat: 42.352415)
-Thing.create(city_id: 2328, lng: -71.084467, lat: 42.35228)
-Thing.create(city_id: 2329, lng: -71.126157, lat: 42.352423)
-Thing.create(city_id: 2330, lng: -71.06472, lat: 42.352202)
-Thing.create(city_id: 2331, lng: -71.057955, lat: 42.352167)
-Thing.create(city_id: 2332, lng: -71.13498, lat: 42.352424)
-Thing.create(city_id: 2333, lng: -71.127948, lat: 42.352379)
-Thing.create(city_id: 2334, lng: -71.115429, lat: 42.352332)
-Thing.create(city_id: 2335, lng: -71.137732, lat: 42.352399)
-Thing.create(city_id: 2336, lng: -71.154584, lat: 42.35245)
-Thing.create(city_id: 2337, lng: -71.07074, lat: 42.362407)
-Thing.create(city_id: 2338, lng: -71.068975, lat: 42.352128)
-Thing.create(city_id: 2339, lng: -71.061141, lat: 42.352094)
-Thing.create(city_id: 2340, lng: -71.162378, lat: 42.352415)
-Thing.create(city_id: 2341, lng: -71.138783, lat: 42.352336)
-Thing.create(city_id: 2342, lng: -71.055902, lat: 42.352025)
-Thing.create(city_id: 2343, lng: -71.053808, lat: 42.352014)
-Thing.create(city_id: 2344, lng: -71.124019, lat: 42.352259)
-Thing.create(city_id: 2345, lng: -71.140641, lat: 42.352311)
-Thing.create(city_id: 2346, lng: -71.126877, lat: 42.352247)
-Thing.create(city_id: 2347, lng: -71.054246, lat: 42.351981)
-Thing.create(city_id: 2348, lng: -71.164816, lat: 42.352355)
-Thing.create(city_id: 2349, lng: -71.052636, lat: 42.351967)
-Thing.create(city_id: 2350, lng: -71.145736, lat: 42.352281)
-Thing.create(city_id: 2351, lng: -71.058127, lat: 42.351978)
-Thing.create(city_id: 2352, lng: -71.067322, lat: 42.349937)
-Thing.create(city_id: 2353, lng: -71.057051, lat: 42.339982)
-Thing.create(city_id: 2354, lng: -71.093281, lat: 42.350021)
-Thing.create(city_id: 2355, lng: -71.095428, lat: 42.35002)
-Thing.create(city_id: 2356, lng: -71.061719, lat: 42.349889)
-Thing.create(city_id: 2357, lng: -71.108053, lat: 42.350055)
-Thing.create(city_id: 2358, lng: -71.070062, lat: 42.349919)
-Thing.create(city_id: 2359, lng: -71.094298, lat: 42.349994)
-Thing.create(city_id: 2360, lng: -71.105388, lat: 42.350026)
-Thing.create(city_id: 2361, lng: -71.152796, lat: 42.276253)
-Thing.create(city_id: 2362, lng: -71.15883, lat: 42.35018)
-Thing.create(city_id: 2363, lng: -71.066474, lat: 42.339433)
-Thing.create(city_id: 2364, lng: -71.064223, lat: 42.340216)
-Thing.create(city_id: 2365, lng: -71.173812, lat: 42.350219)
-Thing.create(city_id: 2366, lng: -71.170296, lat: 42.350205)
-Thing.create(city_id: 2367, lng: -71.141018, lat: 42.350109)
-Thing.create(city_id: 2368, lng: -71.055431, lat: 42.340603)
-Thing.create(city_id: 2369, lng: -71.065403, lat: 42.349848)
-Thing.create(city_id: 2370, lng: -71.056285, lat: 42.340069)
-Thing.create(city_id: 2371, lng: -71.054432, lat: 42.342569)
-Thing.create(city_id: 2372, lng: -71.047345, lat: 42.349749)
-Thing.create(city_id: 2373, lng: -71.068839, lat: 42.349829)
-Thing.create(city_id: 2374, lng: -71.08917, lat: 42.349903)
-Thing.create(city_id: 2375, lng: -71.132207, lat: 42.350048)
-Thing.create(city_id: 2376, lng: -71.063629, lat: 42.349801)
-Thing.create(city_id: 2377, lng: -71.065394, lat: 42.349807)
-Thing.create(city_id: 2378, lng: -71.107118, lat: 42.349939)
-Thing.create(city_id: 2379, lng: -71.056731, lat: 42.340694)
-Thing.create(city_id: 2380, lng: -71.063651, lat: 42.349756)
-Thing.create(city_id: 2381, lng: -71.067772, lat: 42.349771)
-Thing.create(city_id: 2382, lng: -71.172741, lat: 42.350107)
-Thing.create(city_id: 2383, lng: -71.090319, lat: 42.349843)
-Thing.create(city_id: 2384, lng: -71.053515, lat: 42.343844)
-Thing.create(city_id: 2385, lng: -71.145689, lat: 42.350017)
-Thing.create(city_id: 2386, lng: -71.05706, lat: 42.349703)
-Thing.create(city_id: 2387, lng: -71.066453, lat: 42.349737)
-Thing.create(city_id: 2388, lng: -71.056519, lat: 42.341865)
-Thing.create(city_id: 2389, lng: -71.068372, lat: 42.349731)
-Thing.create(city_id: 2390, lng: -71.153451, lat: 42.349999)
-Thing.create(city_id: 2391, lng: -71.165033, lat: 42.35003)
-Thing.create(city_id: 2392, lng: -71.167623, lat: 42.350008)
-Thing.create(city_id: 2393, lng: -71.057319, lat: 42.342252)
-Thing.create(city_id: 2394, lng: -71.105891, lat: 42.349791)
-Thing.create(city_id: 2395, lng: -71.149267, lat: 42.349921)
-Thing.create(city_id: 2396, lng: -71.05821, lat: 42.342999)
-Thing.create(city_id: 2397, lng: -71.064777, lat: 42.343556)
-Thing.create(city_id: 2398, lng: -71.045401, lat: 42.343594)
-Thing.create(city_id: 2399, lng: -71.159237, lat: 42.349928)
-Thing.create(city_id: 2400, lng: -71.054706, lat: 42.340694)
-Thing.create(city_id: 2401, lng: -71.058512, lat: 42.349574)
-Thing.create(city_id: 2402, lng: -71.063, lat: 42.349588)
-Thing.create(city_id: 2403, lng: -71.155428, lat: 42.3499)
-Thing.create(city_id: 2404, lng: -71.171652, lat: 42.349941)
-Thing.create(city_id: 2405, lng: -71.091415, lat: 42.349675)
-Thing.create(city_id: 2406, lng: -71.144592, lat: 42.349852)
-Thing.create(city_id: 2407, lng: -71.040709, lat: 42.349481)
-Thing.create(city_id: 2408, lng: -71.162163, lat: 42.349899)
-Thing.create(city_id: 2409, lng: -71.094169, lat: 42.349674)
-Thing.create(city_id: 2410, lng: -71.036585, lat: 42.339891)
-Thing.create(city_id: 2411, lng: -71.106725, lat: 42.349729)
-Thing.create(city_id: 2412, lng: -71.130788, lat: 42.3498)
-Thing.create(city_id: 2413, lng: -71.087893, lat: 42.34901)
-Thing.create(city_id: 2414, lng: -71.053725, lat: 42.342113)
-Thing.create(city_id: 2415, lng: -71.086602, lat: 42.348554)
-Thing.create(city_id: 2416, lng: -71.168792, lat: 42.349885)
-Thing.create(city_id: 2417, lng: -71.04717, lat: 42.341858)
-Thing.create(city_id: 2418, lng: -71.102334, lat: 42.349662)
-Thing.create(city_id: 2419, lng: -71.10472, lat: 42.349666)
-Thing.create(city_id: 2420, lng: -71.135664, lat: 42.349767)
-Thing.create(city_id: 2421, lng: -71.131514, lat: 42.349753)
-Thing.create(city_id: 2422, lng: -71.037603, lat: 42.338985)
-Thing.create(city_id: 2423, lng: -71.044032, lat: 42.349422)
-Thing.create(city_id: 2424, lng: -71.15779, lat: 42.349802)
-Thing.create(city_id: 2425, lng: -71.140046, lat: 42.349748)
-Thing.create(city_id: 2426, lng: -71.156952, lat: 42.349797)
-Thing.create(city_id: 2427, lng: -71.035628, lat: 42.338998)
-Thing.create(city_id: 2428, lng: -71.06877, lat: 42.349486)
-Thing.create(city_id: 2429, lng: -71.153079, lat: 42.349726)
-Thing.create(city_id: 2430, lng: -71.061223, lat: 42.34941)
-Thing.create(city_id: 2431, lng: -71.154499, lat: 42.349723)
-Thing.create(city_id: 2432, lng: -71.037636, lat: 42.339854)
-Thing.create(city_id: 2433, lng: -71.14352, lat: 42.349677)
-Thing.create(city_id: 2434, lng: -71.166724, lat: 42.349745)
-Thing.create(city_id: 2435, lng: -71.043128, lat: 42.349319)
-Thing.create(city_id: 2436, lng: -71.035653, lat: 42.339776)
-Thing.create(city_id: 2437, lng: -71.103611, lat: 42.349532)
-Thing.create(city_id: 2438, lng: -71.134623, lat: 42.349629)
-Thing.create(city_id: 2439, lng: -71.06195, lat: 42.349372)
-Thing.create(city_id: 2440, lng: -71.081923, lat: 42.348774)
-Thing.create(city_id: 2441, lng: -71.080185, lat: 42.349236)
-Thing.create(city_id: 2442, lng: -71.106585, lat: 42.349512)
-Thing.create(city_id: 2443, lng: -71.133131, lat: 42.349598)
-Thing.create(city_id: 2444, lng: -71.094926, lat: 42.34947)
-Thing.create(city_id: 2445, lng: -71.100729, lat: 42.349485)
-Thing.create(city_id: 2446, lng: -71.060686, lat: 42.349335)
-Thing.create(city_id: 2447, lng: -71.086894, lat: 42.349393)
-Thing.create(city_id: 2448, lng: -71.158727, lat: 42.3496)
-Thing.create(city_id: 2449, lng: -71.080921, lat: 42.349031)
-Thing.create(city_id: 2450, lng: -71.174083, lat: 42.349629)
-Thing.create(city_id: 2451, lng: -71.099316, lat: 42.349382)
-Thing.create(city_id: 2452, lng: -71.072913, lat: 42.349277)
-Thing.create(city_id: 2453, lng: -71.092922, lat: 42.349343)
-Thing.create(city_id: 2454, lng: -71.088987, lat: 42.349323)
-Thing.create(city_id: 2455, lng: -71.142552, lat: 42.349499)
-Thing.create(city_id: 2456, lng: -71.148556, lat: 42.349511)
-Thing.create(city_id: 2457, lng: -71.090034, lat: 42.349305)
-Thing.create(city_id: 2458, lng: -71.039762, lat: 42.349111)
-Thing.create(city_id: 2459, lng: -71.164271, lat: 42.349537)
-Thing.create(city_id: 2460, lng: -71.069696, lat: 42.349221)
-Thing.create(city_id: 2461, lng: -71.091519, lat: 42.348721)
-Thing.create(city_id: 2462, lng: -71.136997, lat: 42.34943)
-Thing.create(city_id: 2463, lng: -71.070211, lat: 42.34919)
-Thing.create(city_id: 2464, lng: -71.098519, lat: 42.34928)
-Thing.create(city_id: 2465, lng: -71.169652, lat: 42.349489)
-Thing.create(city_id: 2466, lng: -71.09389, lat: 42.349239)
-Thing.create(city_id: 2467, lng: -71.043106, lat: 42.349039)
-Thing.create(city_id: 2468, lng: -71.165668, lat: 42.349457)
-Thing.create(city_id: 2469, lng: -71.071125, lat: 42.348308)
-Thing.create(city_id: 2470, lng: -71.172402, lat: 42.349438)
-Thing.create(city_id: 2471, lng: -71.168288, lat: 42.349425)
-Thing.create(city_id: 2472, lng: -71.10143, lat: 42.349207)
-Thing.create(city_id: 2473, lng: -71.097103, lat: 42.349186)
-Thing.create(city_id: 2474, lng: -71.096057, lat: 42.349173)
-Thing.create(city_id: 2475, lng: -71.073718, lat: 42.349052)
-Thing.create(city_id: 2476, lng: -71.0641, lat: 42.349008)
-Thing.create(city_id: 2477, lng: -71.06718, lat: 42.349012)
-Thing.create(city_id: 2478, lng: -71.06534, lat: 42.348997)
-Thing.create(city_id: 2479, lng: -71.141434, lat: 42.349258)
-Thing.create(city_id: 2480, lng: -71.07013, lat: 42.348243)
-Thing.create(city_id: 2481, lng: -71.042073, lat: 42.348887)
-Thing.create(city_id: 2482, lng: -71.105043, lat: 42.349118)
-Thing.create(city_id: 2483, lng: -71.065552, lat: 42.34897)
-Thing.create(city_id: 2484, lng: -71.049516, lat: 42.348897)
-Thing.create(city_id: 2485, lng: -71.071884, lat: 42.348433)
-Thing.create(city_id: 2486, lng: -71.07231, lat: 42.348095)
-Thing.create(city_id: 2487, lng: -71.071531, lat: 42.348385)
-Thing.create(city_id: 2488, lng: -71.135561, lat: 42.349184)
-Thing.create(city_id: 2489, lng: -71.134073, lat: 42.349164)
-Thing.create(city_id: 2490, lng: -71.130232, lat: 42.349145)
-Thing.create(city_id: 2491, lng: -71.100695, lat: 42.349046)
-Thing.create(city_id: 2492, lng: -71.067638, lat: 42.34811)
-Thing.create(city_id: 2493, lng: -71.13164, lat: 42.349138)
-Thing.create(city_id: 2494, lng: -71.067754, lat: 42.339448)
-Thing.create(city_id: 2495, lng: -71.078755, lat: 42.348174)
-Thing.create(city_id: 2496, lng: -71.099339, lat: 42.349017)
-Thing.create(city_id: 2497, lng: -71.171321, lat: 42.349243)
-Thing.create(city_id: 2498, lng: -71.073639, lat: 42.347277)
-Thing.create(city_id: 2499, lng: -71.080034, lat: 42.346275)
-Thing.create(city_id: 2500, lng: -71.16313, lat: 42.349642)
-Thing.create(city_id: 2501, lng: -71.170636, lat: 42.349605)
-Thing.create(city_id: 2502, lng: -71.094799, lat: 42.349325)
-Thing.create(city_id: 2503, lng: -71.173451, lat: 42.349558)
-Thing.create(city_id: 2504, lng: -71.132296, lat: 42.349397)
-Thing.create(city_id: 2505, lng: -71.063666, lat: 42.34082)
-Thing.create(city_id: 2506, lng: -71.06088, lat: 42.348874)
-Thing.create(city_id: 2507, lng: -71.063383, lat: 42.348854)
-Thing.create(city_id: 2508, lng: -71.060893, lat: 42.348843)
-Thing.create(city_id: 2509, lng: -71.164733, lat: 42.349186)
-Thing.create(city_id: 2510, lng: -71.072094, lat: 42.340033)
-Thing.create(city_id: 2511, lng: -71.163209, lat: 42.349171)
-Thing.create(city_id: 2512, lng: -71.1495, lat: 42.349122)
-Thing.create(city_id: 2513, lng: -71.0895, lat: 42.348917)
-Thing.create(city_id: 2514, lng: -71.167301, lat: 42.349162)
-Thing.create(city_id: 2515, lng: -71.162206, lat: 42.349145)
-Thing.create(city_id: 2516, lng: -71.061465, lat: 42.348799)
-Thing.create(city_id: 2517, lng: -71.139597, lat: 42.349054)
-Thing.create(city_id: 2518, lng: -71.090603, lat: 42.348886)
-Thing.create(city_id: 2519, lng: -71.138663, lat: 42.349046)
-Thing.create(city_id: 2520, lng: -71.103948, lat: 42.34893)
-Thing.create(city_id: 2521, lng: -71.066333, lat: 42.348793)
-Thing.create(city_id: 2522, lng: -71.06218, lat: 42.348774)
-Thing.create(city_id: 2523, lng: -71.136426, lat: 42.349031)
-Thing.create(city_id: 2524, lng: -71.042221, lat: 42.348681)
-Thing.create(city_id: 2525, lng: -71.054897, lat: 42.348726)
-Thing.create(city_id: 2526, lng: -71.133186, lat: 42.348983)
-Thing.create(city_id: 2527, lng: -71.062759, lat: 42.348728)
-Thing.create(city_id: 2528, lng: -71.11627, lat: 42.305087)
-Thing.create(city_id: 2529, lng: -71.060292, lat: 42.351238)
-Thing.create(city_id: 2530, lng: -71.107929, lat: 42.351399)
-Thing.create(city_id: 2531, lng: -71.134728, lat: 42.351479)
-Thing.create(city_id: 2532, lng: -71.075361, lat: 42.35127)
-Thing.create(city_id: 2533, lng: -71.065387, lat: 42.351226)
-Thing.create(city_id: 2534, lng: -71.140449, lat: 42.351484)
-Thing.create(city_id: 2535, lng: -71.0605, lat: 42.351205)
-Thing.create(city_id: 2536, lng: -71.047489, lat: 42.351304)
-Thing.create(city_id: 2537, lng: -71.065966, lat: 42.351221)
-Thing.create(city_id: 2538, lng: -71.084726, lat: 42.278812)
-Thing.create(city_id: 2539, lng: -71.151258, lat: 42.351481)
-Thing.create(city_id: 2540, lng: -71.107153, lat: 42.351336)
-Thing.create(city_id: 2541, lng: -71.089892, lat: 42.351274)
-Thing.create(city_id: 2542, lng: -71.060004, lat: 42.351148)
-Thing.create(city_id: 2543, lng: -71.064701, lat: 42.351162)
-Thing.create(city_id: 2544, lng: -71.166622, lat: 42.351499)
-Thing.create(city_id: 2545, lng: -71.131459, lat: 42.351383)
-Thing.create(city_id: 2546, lng: -71.118669, lat: 42.351337)
-Thing.create(city_id: 2547, lng: -71.119456, lat: 42.351714)
-Thing.create(city_id: 2548, lng: -71.060244, lat: 42.351439)
-Thing.create(city_id: 2549, lng: -71.118372, lat: 42.351594)
-Thing.create(city_id: 2550, lng: -71.127155, lat: 42.351543)
-Thing.create(city_id: 2551, lng: -71.136361, lat: 42.351381)
-Thing.create(city_id: 2552, lng: -71.116143, lat: 42.351313)
-Thing.create(city_id: 2553, lng: -71.14284, lat: 42.351387)
-Thing.create(city_id: 2554, lng: -71.066604, lat: 42.351124)
-Thing.create(city_id: 2555, lng: -71.061417, lat: 42.351101)
-Thing.create(city_id: 2556, lng: -71.064159, lat: 42.351111)
-Thing.create(city_id: 2557, lng: -71.059754, lat: 42.351091)
-Thing.create(city_id: 2558, lng: -71.059455, lat: 42.351087)
-Thing.create(city_id: 2559, lng: -71.063719, lat: 42.351103)
-Thing.create(city_id: 2560, lng: -71.173456, lat: 42.35145)
-Thing.create(city_id: 2561, lng: -71.138356, lat: 42.351339)
-Thing.create(city_id: 2562, lng: -71.165136, lat: 42.351414)
-Thing.create(city_id: 2563, lng: -71.067076, lat: 42.351079)
-Thing.create(city_id: 2564, lng: -71.139379, lat: 42.351327)
-Thing.create(city_id: 2565, lng: -71.141519, lat: 42.351325)
-Thing.create(city_id: 2566, lng: -71.162111, lat: 42.351387)
-Thing.create(city_id: 2567, lng: -71.127905, lat: 42.351281)
-Thing.create(city_id: 2568, lng: -71.062161, lat: 42.351047)
-Thing.create(city_id: 2569, lng: -71.129742, lat: 42.351273)
-Thing.create(city_id: 2570, lng: -71.063247, lat: 42.351027)
-Thing.create(city_id: 2571, lng: -71.17009, lat: 42.351382)
-Thing.create(city_id: 2572, lng: -71.117647, lat: 42.351218)
-Thing.create(city_id: 2573, lng: -71.1096, lat: 42.351185)
-Thing.create(city_id: 2574, lng: -71.126397, lat: 42.351233)
-Thing.create(city_id: 2575, lng: -71.064475, lat: 42.351003)
-Thing.create(city_id: 2576, lng: -71.062673, lat: 42.350996)
-Thing.create(city_id: 2577, lng: -71.114994, lat: 42.351178)
-Thing.create(city_id: 2578, lng: -71.132848, lat: 42.351236)
-Thing.create(city_id: 2579, lng: -71.168721, lat: 42.35134)
-Thing.create(city_id: 2580, lng: -71.12547, lat: 42.351186)
-Thing.create(city_id: 2581, lng: -71.065516, lat: 42.350971)
-Thing.create(city_id: 2582, lng: -71.159546, lat: 42.351287)
-Thing.create(city_id: 2583, lng: -71.059032, lat: 42.350945)
-Thing.create(city_id: 2584, lng: -71.144855, lat: 42.351237)
-Thing.create(city_id: 2585, lng: -71.072164, lat: 42.350981)
-Thing.create(city_id: 2586, lng: -71.066237, lat: 42.350958)
-Thing.create(city_id: 2587, lng: -71.101593, lat: 42.35107)
-Thing.create(city_id: 2588, lng: -71.106857, lat: 42.351081)
-Thing.create(city_id: 2589, lng: -71.058719, lat: 42.350901)
-Thing.create(city_id: 2590, lng: -71.154014, lat: 42.351223)
-Thing.create(city_id: 2591, lng: -71.116771, lat: 42.351103)
-Thing.create(city_id: 2592, lng: -71.14252, lat: 42.351185)
-Thing.create(city_id: 2593, lng: -71.065996, lat: 42.350918)
-Thing.create(city_id: 2594, lng: -71.067521, lat: 42.350923)
-Thing.create(city_id: 2595, lng: -71.163826, lat: 42.351238)
-Thing.create(city_id: 2596, lng: -71.152083, lat: 42.351197)
-Thing.create(city_id: 2597, lng: -71.062218, lat: 42.350886)
-Thing.create(city_id: 2598, lng: -71.158526, lat: 42.351205)
-Thing.create(city_id: 2599, lng: -71.068694, lat: 42.350899)
-Thing.create(city_id: 2600, lng: -71.113936, lat: 42.351053)
-Thing.create(city_id: 2601, lng: -71.043239, lat: 42.350794)
-Thing.create(city_id: 2602, lng: -71.067628, lat: 42.350879)
-Thing.create(city_id: 2603, lng: -71.105782, lat: 42.351004)
-Thing.create(city_id: 2604, lng: -71.167726, lat: 42.351197)
-Thing.create(city_id: 2605, lng: -71.06286, lat: 42.350834)
-Thing.create(city_id: 2606, lng: -71.065085, lat: 42.350841)
-Thing.create(city_id: 2607, lng: -71.058696, lat: 42.350814)
-Thing.create(city_id: 2608, lng: -71.062793, lat: 42.350827)
-Thing.create(city_id: 2609, lng: -71.133697, lat: 42.351064)
-Thing.create(city_id: 2610, lng: -71.099684, lat: 42.35095)
-Thing.create(city_id: 2611, lng: -71.070111, lat: 42.350839)
-Thing.create(city_id: 2612, lng: -71.128884, lat: 42.351041)
-Thing.create(city_id: 2613, lng: -71.134579, lat: 42.351057)
-Thing.create(city_id: 2614, lng: -71.14324, lat: 42.351079)
-Thing.create(city_id: 2615, lng: -71.104858, lat: 42.350951)
-Thing.create(city_id: 2616, lng: -71.140154, lat: 42.351067)
-Thing.create(city_id: 2617, lng: -71.157993, lat: 42.351109)
-Thing.create(city_id: 2618, lng: -71.057617, lat: 42.350758)
-Thing.create(city_id: 2619, lng: -71.115599, lat: 42.350962)
-Thing.create(city_id: 2620, lng: -71.061708, lat: 42.350756)
-Thing.create(city_id: 2621, lng: -71.060815, lat: 42.35074)
-Thing.create(city_id: 2622, lng: -71.05869, lat: 42.350732)
-Thing.create(city_id: 2623, lng: -71.057984, lat: 42.350724)
-Thing.create(city_id: 2624, lng: -71.13596, lat: 42.350993)
-Thing.create(city_id: 2625, lng: -71.112871, lat: 42.350908)
-Thing.create(city_id: 2626, lng: -71.091647, lat: 42.350832)
-Thing.create(city_id: 2627, lng: -71.066912, lat: 42.350734)
-Thing.create(city_id: 2628, lng: -71.067511, lat: 42.350726)
-Thing.create(city_id: 2629, lng: -71.06516, lat: 42.35071)
-Thing.create(city_id: 2630, lng: -71.097763, lat: 42.350828)
-Thing.create(city_id: 2631, lng: -71.152998, lat: 42.351)
-Thing.create(city_id: 2632, lng: -71.060028, lat: 42.35067)
-Thing.create(city_id: 2633, lng: -71.1147, lat: 42.350859)
-Thing.create(city_id: 2634, lng: -71.16302, lat: 42.351001)
-Thing.create(city_id: 2635, lng: -71.127149, lat: 42.350889)
-Thing.create(city_id: 2636, lng: -71.061306, lat: 42.350655)
-Thing.create(city_id: 2637, lng: -71.060716, lat: 42.350652)
-Thing.create(city_id: 2638, lng: -71.149499, lat: 42.350918)
-Thing.create(city_id: 2639, lng: -71.062642, lat: 42.361356)
-Thing.create(city_id: 2640, lng: -71.174099, lat: 42.350969)
-Thing.create(city_id: 2641, lng: -71.130301, lat: 42.35082)
-Thing.create(city_id: 2642, lng: -71.095711, lat: 42.350696)
-Thing.create(city_id: 2643, lng: -71.172379, lat: 42.350937)
-Thing.create(city_id: 2644, lng: -71.056832, lat: 42.350548)
-Thing.create(city_id: 2645, lng: -71.132301, lat: 42.350814)
-Thing.create(city_id: 2646, lng: -71.129307, lat: 42.350789)
-Thing.create(city_id: 2647, lng: -71.12617, lat: 42.350766)
-Thing.create(city_id: 2648, lng: -71.110535, lat: 42.350714)
-Thing.create(city_id: 2649, lng: -71.060935, lat: 42.350532)
-Thing.create(city_id: 2650, lng: -71.065238, lat: 42.350542)
-Thing.create(city_id: 2651, lng: -71.087239, lat: 42.350621)
-Thing.create(city_id: 2652, lng: -71.063235, lat: 42.350521)
-Thing.create(city_id: 2653, lng: -71.128231, lat: 42.350693)
-Thing.create(city_id: 2654, lng: -71.1688, lat: 42.35081)
-Thing.create(city_id: 2655, lng: -71.065229, lat: 42.350449)
-Thing.create(city_id: 2656, lng: -71.069401, lat: 42.350451)
-Thing.create(city_id: 2657, lng: -71.131049, lat: 42.350664)
-Thing.create(city_id: 2658, lng: -71.165252, lat: 42.350766)
-Thing.create(city_id: 2659, lng: -71.162132, lat: 42.350747)
-Thing.create(city_id: 2660, lng: -71.103636, lat: 42.350556)
-Thing.create(city_id: 2661, lng: -71.1095, lat: 42.350573)
-Thing.create(city_id: 2662, lng: -71.155186, lat: 42.350676)
-Thing.create(city_id: 2663, lng: -71.097678, lat: 42.350477)
-Thing.create(city_id: 2664, lng: -71.133419, lat: 42.350587)
-Thing.create(city_id: 2665, lng: -71.151281, lat: 42.350642)
-Thing.create(city_id: 2666, lng: -71.101191, lat: 42.350477)
-Thing.create(city_id: 2667, lng: -71.060086, lat: 42.350324)
-Thing.create(city_id: 2668, lng: -71.068053, lat: 42.35034)
-Thing.create(city_id: 2669, lng: -71.068535, lat: 42.350329)
-Thing.create(city_id: 2670, lng: -71.170336, lat: 42.35066)
-Thing.create(city_id: 2671, lng: -71.135205, lat: 42.350547)
-Thing.create(city_id: 2672, lng: -71.057611, lat: 42.350258)
-Thing.create(city_id: 2673, lng: -71.058953, lat: 42.350235)
-Thing.create(city_id: 2674, lng: -71.091517, lat: 42.350355)
-Thing.create(city_id: 2675, lng: -71.088299, lat: 42.350329)
-Thing.create(city_id: 2676, lng: -71.146506, lat: 42.350516)
-Thing.create(city_id: 2677, lng: -71.1569, lat: 42.350546)
-Thing.create(city_id: 2678, lng: -71.131297, lat: 42.350461)
-Thing.create(city_id: 2679, lng: -71.108551, lat: 42.350383)
-Thing.create(city_id: 2680, lng: -71.114404, lat: 42.316752)
-Thing.create(city_id: 2681, lng: -71.069351, lat: 42.350231)
-Thing.create(city_id: 2682, lng: -71.099605, lat: 42.35033)
-Thing.create(city_id: 2683, lng: -71.147707, lat: 42.35048)
-Thing.create(city_id: 2684, lng: -71.084597, lat: 42.350257)
-Thing.create(city_id: 2685, lng: -71.06679, lat: 42.350188)
-Thing.create(city_id: 2686, lng: -71.127108, lat: 42.350391)
-Thing.create(city_id: 2687, lng: -71.133159, lat: 42.350405)
-Thing.create(city_id: 2688, lng: -71.110035, lat: 42.310249)
-Thing.create(city_id: 2689, lng: -71.059379, lat: 42.350137)
-Thing.create(city_id: 2690, lng: -71.109947, lat: 42.311049)
-Thing.create(city_id: 2691, lng: -71.157934, lat: 42.350468)
-Thing.create(city_id: 2692, lng: -71.140141, lat: 42.35041)
-Thing.create(city_id: 2693, lng: -71.046942, lat: 42.350079)
-Thing.create(city_id: 2694, lng: -71.171366, lat: 42.350495)
-Thing.create(city_id: 2695, lng: -71.1683, lat: 42.350486)
-Thing.create(city_id: 2696, lng: -71.109067, lat: 42.309858)
-Thing.create(city_id: 2697, lng: -71.098755, lat: 42.350248)
-Thing.create(city_id: 2698, lng: -71.15257, lat: 42.350421)
-Thing.create(city_id: 2699, lng: -71.061087, lat: 42.35009)
-Thing.create(city_id: 2700, lng: -71.107441, lat: 42.350253)
-Thing.create(city_id: 2701, lng: -71.063224, lat: 42.350557)
-Thing.create(city_id: 2702, lng: -71.113547, lat: 42.350722)
-Thing.create(city_id: 2703, lng: -71.07225, lat: 42.339598)
-Thing.create(city_id: 2704, lng: -71.070406, lat: 42.338709)
-Thing.create(city_id: 2705, lng: -71.102051, lat: 42.350551)
-Thing.create(city_id: 2706, lng: -71.155994, lat: 42.350675)
-Thing.create(city_id: 2707, lng: -71.14855, lat: 42.350626)
-Thing.create(city_id: 2708, lng: -71.074494, lat: 42.338491)
-Thing.create(city_id: 2709, lng: -71.167085, lat: 42.350432)
-Thing.create(city_id: 2710, lng: -71.064988, lat: 42.350083)
-Thing.create(city_id: 2711, lng: -71.163981, lat: 42.35041)
-Thing.create(city_id: 2712, lng: -71.100304, lat: 42.350198)
-Thing.create(city_id: 2713, lng: -71.136203, lat: 42.350308)
-Thing.create(city_id: 2714, lng: -71.150452, lat: 42.350341)
-Thing.create(city_id: 2715, lng: -71.129364, lat: 42.350267)
-Thing.create(city_id: 2716, lng: -71.062646, lat: 42.35002)
-Thing.create(city_id: 2717, lng: -71.097385, lat: 42.350144)
-Thing.create(city_id: 2718, lng: -71.16928, lat: 42.350366)
-Thing.create(city_id: 2719, lng: -71.041844, lat: 42.349925)
-Thing.create(city_id: 2720, lng: -71.163059, lat: 42.350341)
-Thing.create(city_id: 2721, lng: -71.106524, lat: 42.350161)
-Thing.create(city_id: 2722, lng: -71.041176, lat: 42.34991)
-Thing.create(city_id: 2723, lng: -71.060308, lat: 42.349976)
-Thing.create(city_id: 2724, lng: -71.108887, lat: 42.35015)
-Thing.create(city_id: 2725, lng: -71.134162, lat: 42.350229)
-Thing.create(city_id: 2726, lng: -71.16605, lat: 42.350311)
-Thing.create(city_id: 2727, lng: -71.128178, lat: 42.350194)
-Thing.create(city_id: 2728, lng: -71.17481, lat: 42.350334)
-Thing.create(city_id: 2729, lng: -71.096302, lat: 42.350084)
-Thing.create(city_id: 2730, lng: -71.058534, lat: 42.349945)
-Thing.create(city_id: 2731, lng: -71.158809, lat: 42.350281)
-Thing.create(city_id: 2732, lng: -71.154255, lat: 42.350261)
-Thing.create(city_id: 2733, lng: -71.059194, lat: 42.349908)
-Thing.create(city_id: 2734, lng: -71.099749, lat: 42.346178)
-Thing.create(city_id: 2735, lng: -71.070097, lat: 42.348688)
-Thing.create(city_id: 2736, lng: -71.140354, lat: 42.3463)
-Thing.create(city_id: 2737, lng: -71.023821, lat: 42.345872)
-Thing.create(city_id: 2738, lng: -71.153029, lat: 42.346323)
-Thing.create(city_id: 2739, lng: -71.025025, lat: 42.345853)
-Thing.create(city_id: 2740, lng: -71.149866, lat: 42.346292)
-Thing.create(city_id: 2741, lng: -71.035703, lat: 42.345886)
-Thing.create(city_id: 2742, lng: -71.106025, lat: 42.346131)
-Thing.create(city_id: 2743, lng: -71.039446, lat: 42.345876)
-Thing.create(city_id: 2744, lng: -71.07438, lat: 42.349175)
-Thing.create(city_id: 2745, lng: -71.08122, lat: 42.345986)
-Thing.create(city_id: 2746, lng: -71.077866, lat: 42.348965)
-Thing.create(city_id: 2747, lng: -71.089287, lat: 42.348137)
-Thing.create(city_id: 2748, lng: -71.062377, lat: 42.34593)
-Thing.create(city_id: 2749, lng: -71.06748, lat: 42.349426)
-Thing.create(city_id: 2750, lng: -71.148936, lat: 42.346207)
-Thing.create(city_id: 2751, lng: -71.029705, lat: 42.345777)
-Thing.create(city_id: 2752, lng: -71.026988, lat: 42.345755)
-Thing.create(city_id: 2753, lng: -71.028377, lat: 42.345758)
-Thing.create(city_id: 2754, lng: -71.098635, lat: 42.346022)
-Thing.create(city_id: 2755, lng: -71.038222, lat: 42.345795)
-Thing.create(city_id: 2756, lng: -71.07558, lat: 42.348828)
-Thing.create(city_id: 2757, lng: -71.03074, lat: 42.345754)
-Thing.create(city_id: 2758, lng: -71.050692, lat: 42.345833)
-Thing.create(city_id: 2759, lng: -71.162315, lat: 42.34621)
-Thing.create(city_id: 2760, lng: -71.072552, lat: 42.348769)
-Thing.create(city_id: 2761, lng: -71.074319, lat: 42.348688)
-Thing.create(city_id: 2762, lng: -71.079764, lat: 42.344095)
-Thing.create(city_id: 2763, lng: -71.101153, lat: 42.345996)
-Thing.create(city_id: 2764, lng: -71.078901, lat: 42.348685)
-Thing.create(city_id: 2765, lng: -71.066714, lat: 42.348642)
-Thing.create(city_id: 2766, lng: -71.146495, lat: 42.346136)
-Thing.create(city_id: 2767, lng: -71.084115, lat: 42.345921)
-Thing.create(city_id: 2768, lng: -71.148126, lat: 42.346113)
-Thing.create(city_id: 2769, lng: -71.075569, lat: 42.348626)
-Thing.create(city_id: 2770, lng: -71.140927, lat: 42.346083)
-Thing.create(city_id: 2771, lng: -71.135088, lat: 42.346061)
-Thing.create(city_id: 2772, lng: -71.105913, lat: 42.345957)
-Thing.create(city_id: 2773, lng: -71.104569, lat: 42.34595)
-Thing.create(city_id: 2774, lng: -71.067081, lat: 42.34862)
-Thing.create(city_id: 2775, lng: -71.094315, lat: 42.345899)
-Thing.create(city_id: 2776, lng: -71.036225, lat: 42.345668)
-Thing.create(city_id: 2777, lng: -71.03906, lat: 42.345677)
-Thing.create(city_id: 2778, lng: -71.08619, lat: 42.345847)
-Thing.create(city_id: 2779, lng: -71.144777, lat: 42.346001)
-Thing.create(city_id: 2780, lng: -71.103513, lat: 42.345866)
-Thing.create(city_id: 2781, lng: -71.156056, lat: 42.34603)
-Thing.create(city_id: 2782, lng: -71.158225, lat: 42.346017)
-Thing.create(city_id: 2783, lng: -71.136085, lat: 42.34594)
-Thing.create(city_id: 2784, lng: -71.079227, lat: 42.345742)
-Thing.create(city_id: 2785, lng: -71.161146, lat: 42.346009)
-Thing.create(city_id: 2786, lng: -71.087823, lat: 42.345746)
-Thing.create(city_id: 2787, lng: -71.077892, lat: 42.345695)
-Thing.create(city_id: 2788, lng: -71.041239, lat: 42.345546)
-Thing.create(city_id: 2789, lng: -71.138165, lat: 42.345883)
-Thing.create(city_id: 2790, lng: -71.170598, lat: 42.34598)
-Thing.create(city_id: 2791, lng: -71.088427, lat: 42.345695)
-Thing.create(city_id: 2792, lng: -71.159242, lat: 42.345926)
-Thing.create(city_id: 2793, lng: -71.090381, lat: 42.345696)
-Thing.create(city_id: 2794, lng: -71.068843, lat: 42.340979)
-Thing.create(city_id: 2795, lng: -71.067242, lat: 42.340455)
-Thing.create(city_id: 2796, lng: -71.071382, lat: 42.340908)
-Thing.create(city_id: 2797, lng: -71.102275, lat: 42.345662)
-Thing.create(city_id: 2798, lng: -71.08186, lat: 42.34558)
-Thing.create(city_id: 2799, lng: -71.079287, lat: 42.34068)
-Thing.create(city_id: 2800, lng: -71.074194, lat: 42.340924)
-Thing.create(city_id: 2801, lng: -71.087048, lat: 42.345591)
-Thing.create(city_id: 2802, lng: -71.075141, lat: 42.340226)
-Thing.create(city_id: 2803, lng: -71.077773, lat: 42.340825)
-Thing.create(city_id: 2804, lng: -71.032983, lat: 42.3457)
-Thing.create(city_id: 2805, lng: -71.077225, lat: 42.340753)
-Thing.create(city_id: 2806, lng: -71.04305, lat: 42.34569)
-Thing.create(city_id: 2807, lng: -71.071032, lat: 42.340381)
-Thing.create(city_id: 2808, lng: -71.085122, lat: 42.345685)
-Thing.create(city_id: 2809, lng: -71.078587, lat: 42.340372)
-Thing.create(city_id: 2810, lng: -71.049531, lat: 42.345442)
-Thing.create(city_id: 2811, lng: -71.147912, lat: 42.345772)
-Thing.create(city_id: 2812, lng: -71.154695, lat: 42.345785)
-Thing.create(city_id: 2813, lng: -71.14324, lat: 42.345744)
-Thing.create(city_id: 2814, lng: -71.100358, lat: 42.345597)
-Thing.create(city_id: 2815, lng: -71.106418, lat: 42.345614)
-Thing.create(city_id: 2816, lng: -71.169519, lat: 42.34581)
-Thing.create(city_id: 2817, lng: -71.074622, lat: 42.340635)
-Thing.create(city_id: 2818, lng: -71.037429, lat: 42.345328)
-Thing.create(city_id: 2819, lng: -71.073415, lat: 42.340505)
-Thing.create(city_id: 2820, lng: -71.141977, lat: 42.345693)
-Thing.create(city_id: 2821, lng: -71.076578, lat: 42.340201)
-Thing.create(city_id: 2822, lng: -71.075904, lat: 42.339652)
-Thing.create(city_id: 2823, lng: -71.089397, lat: 42.345463)
-Thing.create(city_id: 2824, lng: -71.078895, lat: 42.33996)
-Thing.create(city_id: 2825, lng: -71.071442, lat: 42.339686)
-Thing.create(city_id: 2826, lng: -71.06357, lat: 42.345343)
-Thing.create(city_id: 2827, lng: -71.057232, lat: 42.345302)
-Thing.create(city_id: 2828, lng: -71.073103, lat: 42.340032)
-Thing.create(city_id: 2829, lng: -71.057242, lat: 42.345261)
-Thing.create(city_id: 2830, lng: -71.140478, lat: 42.345549)
-Thing.create(city_id: 2831, lng: -71.105758, lat: 42.345423)
-Thing.create(city_id: 2832, lng: -71.136627, lat: 42.34552)
-Thing.create(city_id: 2833, lng: -71.077216, lat: 42.339886)
-Thing.create(city_id: 2834, lng: -71.09516, lat: 42.345368)
-Thing.create(city_id: 2835, lng: -71.031664, lat: 42.345123)
-Thing.create(city_id: 2836, lng: -71.074532, lat: 42.339762)
-Thing.create(city_id: 2837, lng: -71.026705, lat: 42.345095)
-Thing.create(city_id: 2838, lng: -71.0754, lat: 42.339649)
-Thing.create(city_id: 2839, lng: -71.10459, lat: 42.345369)
-Thing.create(city_id: 2840, lng: -71.162866, lat: 42.345536)
-Thing.create(city_id: 2841, lng: -71.086011, lat: 42.345284)
-Thing.create(city_id: 2842, lng: -71.07308, lat: 42.345204)
-Thing.create(city_id: 2843, lng: -71.09827, lat: 42.345291)
-Thing.create(city_id: 2844, lng: -71.030695, lat: 42.345026)
-Thing.create(city_id: 2845, lng: -71.084246, lat: 42.34522)
-Thing.create(city_id: 2846, lng: -71.145683, lat: 42.345418)
-Thing.create(city_id: 2847, lng: -71.027623, lat: 42.34498)
-Thing.create(city_id: 2848, lng: -71.098126, lat: 42.348846)
-Thing.create(city_id: 2849, lng: -71.156874, lat: 42.349034)
-Thing.create(city_id: 2850, lng: -71.073529, lat: 42.34307)
-Thing.create(city_id: 2851, lng: -71.102955, lat: 42.348841)
-Thing.create(city_id: 2852, lng: -71.165746, lat: 42.26874)
-Thing.create(city_id: 2853, lng: -71.1525, lat: 42.348981)
-Thing.create(city_id: 2854, lng: -71.120036, lat: 42.250406)
-Thing.create(city_id: 2855, lng: -71.045525, lat: 42.348599)
-Thing.create(city_id: 2856, lng: -71.069216, lat: 42.34311)
-Thing.create(city_id: 2857, lng: -71.07432, lat: 42.342653)
-Thing.create(city_id: 2858, lng: -71.093889, lat: 42.348771)
-Thing.create(city_id: 2859, lng: -71.079408, lat: 42.342758)
-Thing.create(city_id: 2860, lng: -71.073353, lat: 42.342919)
-Thing.create(city_id: 2861, lng: -71.169201, lat: 42.348997)
-Thing.create(city_id: 2862, lng: -71.128526, lat: 42.247757)
-Thing.create(city_id: 2863, lng: -71.163615, lat: 42.348964)
-Thing.create(city_id: 2864, lng: -71.07295, lat: 42.343069)
-Thing.create(city_id: 2865, lng: -71.102895, lat: 42.348766)
-Thing.create(city_id: 2866, lng: -71.068618, lat: 42.342801)
-Thing.create(city_id: 2867, lng: -71.075061, lat: 42.342788)
-Thing.create(city_id: 2868, lng: -71.064213, lat: 42.34862)
-Thing.create(city_id: 2869, lng: -71.070028, lat: 42.34256)
-Thing.create(city_id: 2870, lng: -71.172999, lat: 42.348963)
-Thing.create(city_id: 2871, lng: -71.067807, lat: 42.348615)
-Thing.create(city_id: 2872, lng: -71.067044, lat: 42.342687)
-Thing.create(city_id: 2873, lng: -71.034658, lat: 42.348475)
-Thing.create(city_id: 2874, lng: -71.06488, lat: 42.348591)
-Thing.create(city_id: 2875, lng: -71.076875, lat: 42.342693)
-Thing.create(city_id: 2876, lng: -71.095245, lat: 42.348692)
-Thing.create(city_id: 2877, lng: -71.072198, lat: 42.342427)
-Thing.create(city_id: 2878, lng: -71.107392, lat: 42.304936)
-Thing.create(city_id: 2879, lng: -71.035396, lat: 42.348461)
-Thing.create(city_id: 2880, lng: -71.091886, lat: 42.282528)
-Thing.create(city_id: 2881, lng: -71.045103, lat: 42.348495)
-Thing.create(city_id: 2882, lng: -71.16637, lat: 42.348903)
-Thing.create(city_id: 2883, lng: -71.064238, lat: 42.348553)
-Thing.create(city_id: 2884, lng: -71.134835, lat: 42.348796)
-Thing.create(city_id: 2885, lng: -71.067734, lat: 42.342428)
-Thing.create(city_id: 2886, lng: -71.096629, lat: 42.348653)
-Thing.create(city_id: 2887, lng: -71.170318, lat: 42.348877)
-Thing.create(city_id: 2888, lng: -71.075906, lat: 42.342457)
-Thing.create(city_id: 2889, lng: -71.097568, lat: 42.348639)
-Thing.create(city_id: 2890, lng: -71.13111, lat: 42.348749)
-Thing.create(city_id: 2891, lng: -71.040164, lat: 42.348419)
-Thing.create(city_id: 2892, lng: -71.032942, lat: 42.348384)
-Thing.create(city_id: 2893, lng: -71.073796, lat: 42.342654)
-Thing.create(city_id: 2894, lng: -71.071449, lat: 42.342623)
-Thing.create(city_id: 2895, lng: -71.137722, lat: 42.348738)
-Thing.create(city_id: 2896, lng: -71.034469, lat: 42.348356)
-Thing.create(city_id: 2897, lng: -71.101839, lat: 42.348582)
-Thing.create(city_id: 2898, lng: -71.064791, lat: 42.348446)
-Thing.create(city_id: 2899, lng: -71.064723, lat: 42.348438)
-Thing.create(city_id: 2900, lng: -71.050491, lat: 42.348381)
-Thing.create(city_id: 2901, lng: -71.040676, lat: 42.348311)
-Thing.create(city_id: 2902, lng: -71.139225, lat: 42.348658)
-Thing.create(city_id: 2903, lng: -71.133934, lat: 42.348639)
-Thing.create(city_id: 2904, lng: -71.044406, lat: 42.34831)
-Thing.create(city_id: 2905, lng: -71.106063, lat: 42.348487)
-Thing.create(city_id: 2906, lng: -71.063985, lat: 42.348329)
-Thing.create(city_id: 2907, lng: -71.095938, lat: 42.348717)
-Thing.create(city_id: 2908, lng: -71.07296, lat: 42.341966)
-Thing.create(city_id: 2909, lng: -71.140517, lat: 42.348824)
-Thing.create(city_id: 2910, lng: -71.079042, lat: 42.342515)
-Thing.create(city_id: 2911, lng: -71.092893, lat: 42.348602)
-Thing.create(city_id: 2912, lng: -71.098477, lat: 42.34858)
-Thing.create(city_id: 2913, lng: -71.168212, lat: 42.348756)
-Thing.create(city_id: 2914, lng: -71.034061, lat: 42.348236)
-Thing.create(city_id: 2915, lng: -71.051647, lat: 42.348271)
-Thing.create(city_id: 2916, lng: -71.076385, lat: 42.342191)
-Thing.create(city_id: 2917, lng: -71.100922, lat: 42.348429)
-Thing.create(city_id: 2918, lng: -71.165384, lat: 42.348628)
-Thing.create(city_id: 2919, lng: -71.130486, lat: 42.348521)
-Thing.create(city_id: 2920, lng: -71.075, lat: 42.342284)
-Thing.create(city_id: 2921, lng: -71.068581, lat: 42.348292)
-Thing.create(city_id: 2922, lng: -71.062553, lat: 42.34826)
-Thing.create(city_id: 2923, lng: -71.074504, lat: 42.342228)
-Thing.create(city_id: 2924, lng: -71.06831, lat: 42.341995)
-Thing.create(city_id: 2925, lng: -71.162677, lat: 42.348588)
-Thing.create(city_id: 2926, lng: -71.06415, lat: 42.348249)
-Thing.create(city_id: 2927, lng: -71.069271, lat: 42.342149)
-Thing.create(city_id: 2928, lng: -71.072789, lat: 42.339585)
-Thing.create(city_id: 2929, lng: -71.171406, lat: 42.348585)
-Thing.create(city_id: 2930, lng: -71.076904, lat: 42.341766)
-Thing.create(city_id: 2931, lng: -71.043288, lat: 42.348142)
-Thing.create(city_id: 2932, lng: -71.071354, lat: 42.341798)
-Thing.create(city_id: 2933, lng: -71.075906, lat: 42.3418)
-Thing.create(city_id: 2934, lng: -71.078191, lat: 42.341963)
-Thing.create(city_id: 2935, lng: -71.154244, lat: 42.348505)
-Thing.create(city_id: 2936, lng: -71.136654, lat: 42.348448)
-Thing.create(city_id: 2937, lng: -71.099431, lat: 42.348324)
-Thing.create(city_id: 2938, lng: -71.106882, lat: 42.348335)
-Thing.create(city_id: 2939, lng: -71.069361, lat: 42.3482)
-Thing.create(city_id: 2940, lng: -71.06154, lat: 42.348169)
-Thing.create(city_id: 2941, lng: -71.135718, lat: 42.348425)
-Thing.create(city_id: 2942, lng: -71.158205, lat: 42.348487)
-Thing.create(city_id: 2943, lng: -71.105161, lat: 42.348313)
-Thing.create(city_id: 2944, lng: -71.138174, lat: 42.34842)
-Thing.create(city_id: 2945, lng: -71.156534, lat: 42.348472)
-Thing.create(city_id: 2946, lng: -71.074166, lat: 42.341892)
-Thing.create(city_id: 2947, lng: -71.061858, lat: 42.348139)
-Thing.create(city_id: 2948, lng: -71.169689, lat: 42.348495)
-Thing.create(city_id: 2949, lng: -71.167171, lat: 42.348475)
-Thing.create(city_id: 2950, lng: -71.098893, lat: 42.348246)
-Thing.create(city_id: 2951, lng: -71.079275, lat: 42.341879)
-Thing.create(city_id: 2952, lng: -71.16086, lat: 42.348427)
-Thing.create(city_id: 2953, lng: -71.161865, lat: 42.348425)
-Thing.create(city_id: 2954, lng: -71.139599, lat: 42.348355)
-Thing.create(city_id: 2955, lng: -71.045177, lat: 42.348015)
-Thing.create(city_id: 2956, lng: -71.097377, lat: 42.348203)
-Thing.create(city_id: 2957, lng: -71.03329, lat: 42.347948)
-Thing.create(city_id: 2958, lng: -71.152961, lat: 42.348368)
-Thing.create(city_id: 2959, lng: -71.100023, lat: 42.348171)
-Thing.create(city_id: 2960, lng: -71.034146, lat: 42.347918)
-Thing.create(city_id: 2961, lng: -71.132117, lat: 42.348266)
-Thing.create(city_id: 2962, lng: -71.062481, lat: 42.348018)
-Thing.create(city_id: 2963, lng: -71.09046, lat: 42.34811)
-Thing.create(city_id: 2964, lng: -71.084463, lat: 42.348087)
-Thing.create(city_id: 2965, lng: -71.134772, lat: 42.348233)
-Thing.create(city_id: 2966, lng: -71.034138, lat: 42.34786)
-Thing.create(city_id: 2967, lng: -71.046578, lat: 42.347902)
-Thing.create(city_id: 2968, lng: -71.15465, lat: 42.348277)
-Thing.create(city_id: 2969, lng: -71.095843, lat: 42.348081)
-Thing.create(city_id: 2970, lng: -71.063371, lat: 42.347959)
-Thing.create(city_id: 2971, lng: -71.133618, lat: 42.348202)
-Thing.create(city_id: 2972, lng: -71.096908, lat: 42.348072)
-Thing.create(city_id: 2973, lng: -71.157374, lat: 42.348262)
-Thing.create(city_id: 2974, lng: -71.061297, lat: 42.347929)
-Thing.create(city_id: 2975, lng: -71.1039, lat: 42.348083)
-Thing.create(city_id: 2976, lng: -71.064132, lat: 42.347934)
-Thing.create(city_id: 2977, lng: -71.043949, lat: 42.34785)
-Thing.create(city_id: 2978, lng: -71.066889, lat: 42.34793)
-Thing.create(city_id: 2979, lng: -71.153767, lat: 42.34822)
-Thing.create(city_id: 2980, lng: -71.149872, lat: 42.348186)
-Thing.create(city_id: 2981, lng: -71.131135, lat: 42.34811)
-Thing.create(city_id: 2982, lng: -71.064421, lat: 42.347841)
-Thing.create(city_id: 2983, lng: -71.140174, lat: 42.348078)
-Thing.create(city_id: 2984, lng: -71.064407, lat: 42.347812)
-Thing.create(city_id: 2985, lng: -71.168724, lat: 42.348146)
-Thing.create(city_id: 2986, lng: -71.102938, lat: 42.347933)
-Thing.create(city_id: 2987, lng: -71.061367, lat: 42.347775)
-Thing.create(city_id: 2988, lng: -71.037921, lat: 42.347678)
-Thing.create(city_id: 2989, lng: -71.165871, lat: 42.348116)
-Thing.create(city_id: 2990, lng: -71.025326, lat: 42.347621)
-Thing.create(city_id: 2991, lng: -71.158227, lat: 42.348084)
-Thing.create(city_id: 2992, lng: -71.088177, lat: 42.34785)
-Thing.create(city_id: 2993, lng: -71.136978, lat: 42.34801)
-Thing.create(city_id: 2994, lng: -71.046936, lat: 42.347685)
-Thing.create(city_id: 2995, lng: -71.040763, lat: 42.347652)
-Thing.create(city_id: 2996, lng: -71.064174, lat: 42.34773)
-Thing.create(city_id: 2997, lng: -71.155877, lat: 42.348032)
-Thing.create(city_id: 2998, lng: -71.052111, lat: 42.347673)
-Thing.create(city_id: 2999, lng: -71.135736, lat: 42.347924)
-Thing.create(city_id: 3000, lng: -71.040539, lat: 42.347578)
-Thing.create(city_id: 3001, lng: -71.105607, lat: 42.347818)
-Thing.create(city_id: 3002, lng: -71.154994, lat: 42.348334)
-Thing.create(city_id: 3003, lng: -71.152313, lat: 42.347965)
-Thing.create(city_id: 3004, lng: -71.065289, lat: 42.347653)
-Thing.create(city_id: 3005, lng: -71.138664, lat: 42.347882)
-Thing.create(city_id: 3006, lng: -71.137983, lat: 42.347861)
-Thing.create(city_id: 3007, lng: -71.104977, lat: 42.347747)
-Thing.create(city_id: 3008, lng: -71.062825, lat: 42.347582)
-Thing.create(city_id: 3009, lng: -71.043551, lat: 42.347506)
-Thing.create(city_id: 3010, lng: -71.167921, lat: 42.347931)
-Thing.create(city_id: 3011, lng: -71.062685, lat: 42.347576)
-Thing.create(city_id: 3012, lng: -71.064949, lat: 42.347575)
-Thing.create(city_id: 3013, lng: -71.133103, lat: 42.347808)
-Thing.create(city_id: 3014, lng: -71.063318, lat: 42.347543)
-Thing.create(city_id: 3015, lng: -71.162271, lat: 42.347862)
-Thing.create(city_id: 3016, lng: -71.050794, lat: 42.34747)
-Thing.create(city_id: 3017, lng: -71.10703, lat: 42.347619)
-Thing.create(city_id: 3018, lng: -71.134591, lat: 42.347707)
-Thing.create(city_id: 3019, lng: -71.154712, lat: 42.347748)
-Thing.create(city_id: 3020, lng: -71.156802, lat: 42.347733)
-Thing.create(city_id: 3021, lng: -71.169162, lat: 42.347754)
-Thing.create(city_id: 3022, lng: -71.153415, lat: 42.347695)
-Thing.create(city_id: 3023, lng: -71.161302, lat: 42.347716)
-Thing.create(city_id: 3024, lng: -71.033599, lat: 42.347267)
-Thing.create(city_id: 3025, lng: -71.140975, lat: 42.34765)
-Thing.create(city_id: 3026, lng: -71.068564, lat: 42.33922)
-Thing.create(city_id: 3027, lng: -71.069837, lat: 42.339282)
-Thing.create(city_id: 3028, lng: -71.168033, lat: 42.347708)
-Thing.create(city_id: 3029, lng: -71.091312, lat: 42.347457)
-Thing.create(city_id: 3030, lng: -71.090158, lat: 42.347451)
-Thing.create(city_id: 3031, lng: -71.167052, lat: 42.347691)
-Thing.create(city_id: 3032, lng: -71.076691, lat: 42.339292)
-Thing.create(city_id: 3033, lng: -71.024465, lat: 42.347184)
-Thing.create(city_id: 3034, lng: -71.153877, lat: 42.347646)
-Thing.create(city_id: 3035, lng: -71.094198, lat: 42.34744)
-Thing.create(city_id: 3036, lng: -71.078479, lat: 42.338844)
-Thing.create(city_id: 3037, lng: -71.035905, lat: 42.34718)
-Thing.create(city_id: 3038, lng: -71.149259, lat: 42.347573)
-Thing.create(city_id: 3039, lng: -71.07234, lat: 42.339369)
-Thing.create(city_id: 3040, lng: -71.075432, lat: 42.339176)
-Thing.create(city_id: 3041, lng: -71.06182, lat: 42.347267)
-Thing.create(city_id: 3042, lng: -71.073984, lat: 42.339266)
-Thing.create(city_id: 3043, lng: -71.106257, lat: 42.3474)
-Thing.create(city_id: 3044, lng: -71.070268, lat: 42.338696)
-Thing.create(city_id: 3045, lng: -71.077294, lat: 42.338915)
-Thing.create(city_id: 3046, lng: -71.089371, lat: 42.347328)
-Thing.create(city_id: 3047, lng: -71.098505, lat: 42.347354)
-Thing.create(city_id: 3048, lng: -71.087769, lat: 42.347065)
-Thing.create(city_id: 3049, lng: -71.085221, lat: 42.346985)
-Thing.create(city_id: 3050, lng: -71.104435, lat: 42.346945)
-Thing.create(city_id: 3051, lng: -71.156407, lat: 42.347102)
-Thing.create(city_id: 3052, lng: -71.103689, lat: 42.346927)
-Thing.create(city_id: 3053, lng: -71.062519, lat: 42.343157)
-Thing.create(city_id: 3054, lng: -71.107101, lat: 42.346933)
-Thing.create(city_id: 3055, lng: -71.063959, lat: 42.343971)
-Thing.create(city_id: 3056, lng: -71.143498, lat: 42.347037)
-Thing.create(city_id: 3057, lng: -71.086491, lat: 42.346836)
-Thing.create(city_id: 3058, lng: -71.168428, lat: 42.347083)
-Thing.create(city_id: 3059, lng: -71.025456, lat: 42.346577)
-Thing.create(city_id: 3060, lng: -71.026342, lat: 42.34658)
-Thing.create(city_id: 3061, lng: -71.087356, lat: 42.346814)
-Thing.create(city_id: 3062, lng: -71.148471, lat: 42.347017)
-Thing.create(city_id: 3063, lng: -71.14122, lat: 42.346993)
-Thing.create(city_id: 3064, lng: -71.094905, lat: 42.346825)
-Thing.create(city_id: 3065, lng: -71.079681, lat: 42.339881)
-Thing.create(city_id: 3066, lng: -71.062466, lat: 42.343396)
-Thing.create(city_id: 3067, lng: -71.028538, lat: 42.34654)
-Thing.create(city_id: 3068, lng: -71.068128, lat: 42.341853)
-Thing.create(city_id: 3069, lng: -71.08487, lat: 42.346753)
-Thing.create(city_id: 3070, lng: -71.153472, lat: 42.346967)
-Thing.create(city_id: 3071, lng: -71.067885, lat: 42.341439)
-Thing.create(city_id: 3072, lng: -71.161789, lat: 42.346974)
-Thing.create(city_id: 3073, lng: -71.149461, lat: 42.346929)
-Thing.create(city_id: 3074, lng: -71.099128, lat: 42.346761)
-Thing.create(city_id: 3075, lng: -71.030834, lat: 42.346499)
-Thing.create(city_id: 3076, lng: -71.166263, lat: 42.346958)
-Thing.create(city_id: 3077, lng: -71.155291, lat: 42.346921)
-Thing.create(city_id: 3078, lng: -71.062754, lat: 42.342782)
-Thing.create(city_id: 3079, lng: -71.06526, lat: 42.342887)
-Thing.create(city_id: 3080, lng: -71.029927, lat: 42.346445)
-Thing.create(city_id: 3081, lng: -71.134835, lat: 42.346826)
-Thing.create(city_id: 3082, lng: -71.064483, lat: 42.342742)
-Thing.create(city_id: 3083, lng: -71.023474, lat: 42.346393)
-Thing.create(city_id: 3084, lng: -71.037562, lat: 42.346422)
-Thing.create(city_id: 3085, lng: -71.050217, lat: 42.346471)
-Thing.create(city_id: 3086, lng: -71.157067, lat: 42.346827)
-Thing.create(city_id: 3087, lng: -71.140576, lat: 42.346776)
-Thing.create(city_id: 3088, lng: -71.169786, lat: 42.346837)
-Thing.create(city_id: 3089, lng: -71.069917, lat: 42.346498)
-Thing.create(city_id: 3090, lng: -71.090074, lat: 42.346566)
-Thing.create(city_id: 3091, lng: -71.160735, lat: 42.346794)
-Thing.create(city_id: 3092, lng: -71.159062, lat: 42.346784)
-Thing.create(city_id: 3093, lng: -71.038857, lat: 42.346336)
-Thing.create(city_id: 3094, lng: -71.171127, lat: 42.346782)
-Thing.create(city_id: 3095, lng: -71.093631, lat: 42.34653)
-Thing.create(city_id: 3096, lng: -71.168726, lat: 42.34676)
-Thing.create(city_id: 3097, lng: -71.158089, lat: 42.346703)
-Thing.create(city_id: 3098, lng: -71.067278, lat: 42.341774)
-Thing.create(city_id: 3099, lng: -71.057822, lat: 42.341853)
-Thing.create(city_id: 3100, lng: -71.144304, lat: 42.346632)
-Thing.create(city_id: 3101, lng: -71.055046, lat: 42.342141)
-Thing.create(city_id: 3102, lng: -71.034079, lat: 42.346235)
-Thing.create(city_id: 3103, lng: -71.152705, lat: 42.346645)
-Thing.create(city_id: 3104, lng: -71.100608, lat: 42.346474)
-Thing.create(city_id: 3105, lng: -71.087444, lat: 42.346422)
-Thing.create(city_id: 3106, lng: -71.140646, lat: 42.346591)
-Thing.create(city_id: 3107, lng: -71.167438, lat: 42.346662)
-Thing.create(city_id: 3108, lng: -71.048579, lat: 42.346242)
-Thing.create(city_id: 3109, lng: -71.16527, lat: 42.346628)
-Thing.create(city_id: 3110, lng: -71.056497, lat: 42.342562)
-Thing.create(city_id: 3111, lng: -71.104735, lat: 42.346429)
-Thing.create(city_id: 3112, lng: -71.056466, lat: 42.341091)
-Thing.create(city_id: 3113, lng: -71.065999, lat: 42.34231)
-Thing.create(city_id: 3114, lng: -71.154174, lat: 42.346573)
-Thing.create(city_id: 3115, lng: -71.038058, lat: 42.346162)
-Thing.create(city_id: 3116, lng: -71.054797, lat: 42.341252)
-Thing.create(city_id: 3117, lng: -71.14744, lat: 42.346544)
-Thing.create(city_id: 3118, lng: -71.10304, lat: 42.34639)
-Thing.create(city_id: 3119, lng: -71.043786, lat: 42.346168)
-Thing.create(city_id: 3120, lng: -71.106659, lat: 42.346394)
-Thing.create(city_id: 3121, lng: -71.088314, lat: 42.346329)
-Thing.create(city_id: 3122, lng: -71.13815, lat: 42.346489)
-Thing.create(city_id: 3123, lng: -71.166253, lat: 42.346563)
-Thing.create(city_id: 3124, lng: -71.058605, lat: 42.342141)
-Thing.create(city_id: 3125, lng: -71.101939, lat: 42.34635)
-Thing.create(city_id: 3126, lng: -71.064589, lat: 42.341265)
-Thing.create(city_id: 3127, lng: -71.159844, lat: 42.346517)
-Thing.create(city_id: 3128, lng: -71.142958, lat: 42.346458)
-Thing.create(city_id: 3129, lng: -71.027405, lat: 42.346502)
-Thing.create(city_id: 3130, lng: -71.136706, lat: 42.346865)
-Thing.create(city_id: 3131, lng: -71.035227, lat: 42.346459)
-Thing.create(city_id: 3132, lng: -71.034421, lat: 42.34637)
-Thing.create(city_id: 3133, lng: -71.139773, lat: 42.346707)
-Thing.create(city_id: 3134, lng: -71.103738, lat: 42.346327)
-Thing.create(city_id: 3135, lng: -71.086152, lat: 42.346242)
-Thing.create(city_id: 3136, lng: -71.084845, lat: 42.346235)
-Thing.create(city_id: 3137, lng: -71.088183, lat: 42.346233)
-Thing.create(city_id: 3138, lng: -71.156973, lat: 42.346447)
-Thing.create(city_id: 3139, lng: -71.036978, lat: 42.346012)
-Thing.create(city_id: 3140, lng: -71.164367, lat: 42.346452)
-Thing.create(city_id: 3141, lng: -71.163257, lat: 42.346442)
-Thing.create(city_id: 3142, lng: -71.135691, lat: 42.346346)
-Thing.create(city_id: 3143, lng: -71.095571, lat: 42.346209)
-Thing.create(city_id: 3144, lng: -71.070397, lat: 42.346092)
-Thing.create(city_id: 3145, lng: -71.141553, lat: 42.346333)
-Thing.create(city_id: 3146, lng: -71.06284, lat: 42.346058)
-Thing.create(city_id: 3147, lng: -71.085507, lat: 42.34614)
-Thing.create(city_id: 3148, lng: -71.161381, lat: 42.34638)
-Thing.create(city_id: 3149, lng: -71.089207, lat: 42.346143)
-Thing.create(city_id: 3150, lng: -71.154529, lat: 42.343501)
-Thing.create(city_id: 3151, lng: -71.070018, lat: 42.361449)
-Thing.create(city_id: 3152, lng: -71.090024, lat: 42.343279)
-Thing.create(city_id: 3153, lng: -71.09555, lat: 42.343288)
-Thing.create(city_id: 3154, lng: -71.148065, lat: 42.343435)
-Thing.create(city_id: 3155, lng: -71.099195, lat: 42.343266)
-Thing.create(city_id: 3156, lng: -71.062041, lat: 42.343118)
-Thing.create(city_id: 3157, lng: -71.058518, lat: 42.3431)
-Thing.create(city_id: 3158, lng: -71.094829, lat: 42.343197)
-Thing.create(city_id: 3159, lng: -71.04605, lat: 42.343014)
-Thing.create(city_id: 3160, lng: -71.085739, lat: 42.343157)
-Thing.create(city_id: 3161, lng: -71.169219, lat: 42.343427)
-Thing.create(city_id: 3162, lng: -71.104176, lat: 42.343208)
-Thing.create(city_id: 3163, lng: -71.084761, lat: 42.343128)
-Thing.create(city_id: 3164, lng: -71.142297, lat: 42.343312)
-Thing.create(city_id: 3165, lng: -71.084234, lat: 42.343116)
-Thing.create(city_id: 3166, lng: -71.146436, lat: 42.343317)
-Thing.create(city_id: 3167, lng: -71.105422, lat: 42.343103)
-Thing.create(city_id: 3168, lng: -71.085099, lat: 42.343023)
-Thing.create(city_id: 3169, lng: -71.089189, lat: 42.343034)
-Thing.create(city_id: 3170, lng: -71.059616, lat: 42.342924)
-Thing.create(city_id: 3171, lng: -71.150102, lat: 42.343218)
-Thing.create(city_id: 3172, lng: -71.096564, lat: 42.343021)
-Thing.create(city_id: 3173, lng: -71.155375, lat: 42.343159)
-Thing.create(city_id: 3174, lng: -71.100253, lat: 42.342979)
-Thing.create(city_id: 3175, lng: -71.143008, lat: 42.343115)
-Thing.create(city_id: 3176, lng: -71.052448, lat: 42.342781)
-Thing.create(city_id: 3177, lng: -71.139671, lat: 42.343075)
-Thing.create(city_id: 3178, lng: -71.059298, lat: 42.342788)
-Thing.create(city_id: 3179, lng: -71.088213, lat: 42.342883)
-Thing.create(city_id: 3180, lng: -71.07809, lat: 42.342807)
-Thing.create(city_id: 3181, lng: -71.145209, lat: 42.343015)
-Thing.create(city_id: 3182, lng: -71.06351, lat: 42.342729)
-Thing.create(city_id: 3183, lng: -71.153468, lat: 42.343024)
-Thing.create(city_id: 3184, lng: -71.149416, lat: 42.342966)
-Thing.create(city_id: 3185, lng: -71.101955, lat: 42.342809)
-Thing.create(city_id: 3186, lng: -71.097522, lat: 42.342764)
-Thing.create(city_id: 3187, lng: -71.150984, lat: 42.342911)
-Thing.create(city_id: 3188, lng: -71.146942, lat: 42.342874)
-Thing.create(city_id: 3189, lng: -71.101322, lat: 42.342688)
-Thing.create(city_id: 3190, lng: -71.148158, lat: 42.342833)
-Thing.create(city_id: 3191, lng: -71.16506, lat: 42.342871)
-Thing.create(city_id: 3192, lng: -71.154344, lat: 42.342832)
-Thing.create(city_id: 3193, lng: -71.086509, lat: 42.342602)
-Thing.create(city_id: 3194, lng: -71.141359, lat: 42.342773)
-Thing.create(city_id: 3195, lng: -71.091152, lat: 42.343032)
-Thing.create(city_id: 3196, lng: -71.14375, lat: 42.343142)
-Thing.create(city_id: 3197, lng: -71.058863, lat: 42.342749)
-Thing.create(city_id: 3198, lng: -71.087371, lat: 42.342754)
-Thing.create(city_id: 3199, lng: -71.069702, lat: 42.34252)
-Thing.create(city_id: 3200, lng: -71.059378, lat: 42.342463)
-Thing.create(city_id: 3201, lng: -71.081718, lat: 42.342539)
-Thing.create(city_id: 3202, lng: -71.158088, lat: 42.342771)
-Thing.create(city_id: 3203, lng: -71.070797, lat: 42.342468)
-Thing.create(city_id: 3204, lng: -71.165797, lat: 42.342775)
-Thing.create(city_id: 3205, lng: -71.096913, lat: 42.342548)
-Thing.create(city_id: 3206, lng: -71.084795, lat: 42.342497)
-Thing.create(city_id: 3207, lng: -71.09021, lat: 42.342515)
-Thing.create(city_id: 3208, lng: -71.104456, lat: 42.342559)
-Thing.create(city_id: 3209, lng: -71.103295, lat: 42.342552)
-Thing.create(city_id: 3210, lng: -71.15307, lat: 42.342702)
-Thing.create(city_id: 3211, lng: -71.159363, lat: 42.342716)
-Thing.create(city_id: 3212, lng: -71.095266, lat: 42.342504)
-Thing.create(city_id: 3213, lng: -71.046495, lat: 42.342318)
-Thing.create(city_id: 3214, lng: -71.146148, lat: 42.342667)
-Thing.create(city_id: 3215, lng: -71.09854, lat: 42.342493)
-Thing.create(city_id: 3216, lng: -71.155955, lat: 42.342675)
-Thing.create(city_id: 3217, lng: -71.160401, lat: 42.342683)
-Thing.create(city_id: 3218, lng: -71.103694, lat: 42.34248)
-Thing.create(city_id: 3219, lng: -71.05974, lat: 42.342312)
-Thing.create(city_id: 3220, lng: -71.16697, lat: 42.342661)
-Thing.create(city_id: 3221, lng: -71.089185, lat: 42.3424)
-Thing.create(city_id: 3222, lng: -71.14447, lat: 42.342565)
-Thing.create(city_id: 3223, lng: -71.168148, lat: 42.342631)
-Thing.create(city_id: 3224, lng: -71.047926, lat: 42.342219)
-Thing.create(city_id: 3225, lng: -71.157408, lat: 42.342532)
-Thing.create(city_id: 3226, lng: -71.083871, lat: 42.342262)
-Thing.create(city_id: 3227, lng: -71.088146, lat: 42.342246)
-Thing.create(city_id: 3228, lng: -71.143765, lat: 42.342419)
-Thing.create(city_id: 3229, lng: -71.140634, lat: 42.342405)
-Thing.create(city_id: 3230, lng: -71.091419, lat: 42.342239)
-Thing.create(city_id: 3231, lng: -71.106255, lat: 42.342258)
-Thing.create(city_id: 3232, lng: -71.082832, lat: 42.342173)
-Thing.create(city_id: 3233, lng: -71.053294, lat: 42.342056)
-Thing.create(city_id: 3234, lng: -71.09955, lat: 42.342217)
-Thing.create(city_id: 3235, lng: -71.061754, lat: 42.342075)
-Thing.create(city_id: 3236, lng: -71.084274, lat: 42.342157)
-Thing.create(city_id: 3237, lng: -71.153886, lat: 42.342372)
-Thing.create(city_id: 3238, lng: -71.014799, lat: 42.341844)
-Thing.create(city_id: 3239, lng: -71.019601, lat: 42.341854)
-Thing.create(city_id: 3240, lng: -71.09621, lat: 42.342146)
-Thing.create(city_id: 3241, lng: -71.021102, lat: 42.341856)
-Thing.create(city_id: 3242, lng: -71.149531, lat: 42.342305)
-Thing.create(city_id: 3243, lng: -71.102747, lat: 42.342139)
-Thing.create(city_id: 3244, lng: -71.101321, lat: 42.342123)
-Thing.create(city_id: 3245, lng: -71.087197, lat: 42.342041)
-Thing.create(city_id: 3246, lng: -71.105502, lat: 42.342105)
-Thing.create(city_id: 3247, lng: -71.085519, lat: 42.342032)
-Thing.create(city_id: 3248, lng: -71.082327, lat: 42.342009)
-Thing.create(city_id: 3249, lng: -71.154922, lat: 42.342249)
-Thing.create(city_id: 3250, lng: -71.13997, lat: 42.342183)
-Thing.create(city_id: 3251, lng: -71.156401, lat: 42.342223)
-Thing.create(city_id: 3252, lng: -71.014515, lat: 42.341704)
-Thing.create(city_id: 3253, lng: -71.019724, lat: 42.341725)
-Thing.create(city_id: 3254, lng: -71.021148, lat: 42.341728)
-Thing.create(city_id: 3255, lng: -71.086177, lat: 42.341964)
-Thing.create(city_id: 3256, lng: -71.060801, lat: 42.341869)
-Thing.create(city_id: 3257, lng: -71.150588, lat: 42.342159)
-Thing.create(city_id: 3258, lng: -71.151388, lat: 42.342136)
-Thing.create(city_id: 3259, lng: -71.10047, lat: 42.341968)
-Thing.create(city_id: 3260, lng: -71.145405, lat: 42.342109)
-Thing.create(city_id: 3261, lng: -71.165589, lat: 42.342156)
-Thing.create(city_id: 3262, lng: -71.167924, lat: 42.342163)
-Thing.create(city_id: 3263, lng: -71.159667, lat: 42.342121)
-Thing.create(city_id: 3264, lng: -71.059765, lat: 42.342281)
-Thing.create(city_id: 3265, lng: -71.146989, lat: 42.345378)
-Thing.create(city_id: 3266, lng: -71.028827, lat: 42.344931)
-Thing.create(city_id: 3267, lng: -71.159069, lat: 42.34539)
-Thing.create(city_id: 3268, lng: -71.084912, lat: 42.34513)
-Thing.create(city_id: 3269, lng: -71.09602, lat: 42.345147)
-Thing.create(city_id: 3270, lng: -71.052061, lat: 42.34498)
-Thing.create(city_id: 3271, lng: -71.030192, lat: 42.344866)
-Thing.create(city_id: 3272, lng: -71.152843, lat: 42.34528)
-Thing.create(city_id: 3273, lng: -71.14265, lat: 42.345248)
-Thing.create(city_id: 3274, lng: -71.08783, lat: 42.34505)
-Thing.create(city_id: 3275, lng: -71.057588, lat: 42.34493)
-Thing.create(city_id: 3276, lng: -71.15765, lat: 42.345269)
-Thing.create(city_id: 3277, lng: -71.087587, lat: 42.345013)
-Thing.create(city_id: 3278, lng: -71.032283, lat: 42.344787)
-Thing.create(city_id: 3279, lng: -71.155004, lat: 42.345215)
-Thing.create(city_id: 3280, lng: -71.033234, lat: 42.344756)
-Thing.create(city_id: 3281, lng: -71.101015, lat: 42.344982)
-Thing.create(city_id: 3282, lng: -71.034287, lat: 42.344724)
-Thing.create(city_id: 3283, lng: -71.086708, lat: 42.344921)
-Thing.create(city_id: 3284, lng: -71.079419, lat: 42.344882)
-Thing.create(city_id: 3285, lng: -71.035275, lat: 42.344695)
-Thing.create(city_id: 3286, lng: -71.104099, lat: 42.344947)
-Thing.create(city_id: 3287, lng: -71.096908, lat: 42.344913)
-Thing.create(city_id: 3288, lng: -71.085657, lat: 42.344863)
-Thing.create(city_id: 3289, lng: -71.036296, lat: 42.344667)
-Thing.create(city_id: 3290, lng: -71.140811, lat: 42.344989)
-Thing.create(city_id: 3291, lng: -71.088592, lat: 42.345323)
-Thing.create(city_id: 3292, lng: -71.029653, lat: 42.345037)
-Thing.create(city_id: 3293, lng: -71.141462, lat: 42.345414)
-Thing.create(city_id: 3294, lng: -71.081564, lat: 42.345163)
-Thing.create(city_id: 3295, lng: -71.090686, lat: 42.344803)
-Thing.create(city_id: 3296, lng: -71.137331, lat: 42.344952)
-Thing.create(city_id: 3297, lng: -71.089582, lat: 42.344782)
-Thing.create(city_id: 3298, lng: -71.139917, lat: 42.344946)
-Thing.create(city_id: 3299, lng: -71.050487, lat: 42.344616)
-Thing.create(city_id: 3300, lng: -71.084857, lat: 42.34474)
-Thing.create(city_id: 3301, lng: -71.082346, lat: 42.344731)
-Thing.create(city_id: 3302, lng: -71.163975, lat: 42.344997)
-Thing.create(city_id: 3303, lng: -71.141773, lat: 42.344925)
-Thing.create(city_id: 3304, lng: -71.152257, lat: 42.34495)
-Thing.create(city_id: 3305, lng: -71.150542, lat: 42.344934)
-Thing.create(city_id: 3306, lng: -71.022963, lat: 42.344472)
-Thing.create(city_id: 3307, lng: -71.163625, lat: 42.344956)
-Thing.create(city_id: 3308, lng: -71.023825, lat: 42.344457)
-Thing.create(city_id: 3309, lng: -71.146094, lat: 42.344884)
-Thing.create(city_id: 3310, lng: -71.024686, lat: 42.344441)
-Thing.create(city_id: 3311, lng: -71.097761, lat: 42.344685)
-Thing.create(city_id: 3312, lng: -71.144984, lat: 42.344817)
-Thing.create(city_id: 3313, lng: -71.169645, lat: 42.34488)
-Thing.create(city_id: 3314, lng: -71.027051, lat: 42.344377)
-Thing.create(city_id: 3315, lng: -71.05868, lat: 42.344503)
-Thing.create(city_id: 3316, lng: -71.104366, lat: 42.344631)
-Thing.create(city_id: 3317, lng: -71.087206, lat: 42.34457)
-Thing.create(city_id: 3318, lng: -71.05547, lat: 42.344444)
-Thing.create(city_id: 3319, lng: -71.08623, lat: 42.344535)
-Thing.create(city_id: 3320, lng: -71.021997, lat: 42.344285)
-Thing.create(city_id: 3321, lng: -71.151407, lat: 42.344742)
-Thing.create(city_id: 3322, lng: -71.088918, lat: 42.344533)
-Thing.create(city_id: 3323, lng: -71.149531, lat: 42.344709)
-Thing.create(city_id: 3324, lng: -71.147586, lat: 42.344676)
-Thing.create(city_id: 3325, lng: -71.101555, lat: 42.344468)
-Thing.create(city_id: 3326, lng: -71.098652, lat: 42.344441)
-Thing.create(city_id: 3327, lng: -71.138839, lat: 42.344569)
-Thing.create(city_id: 3328, lng: -71.164504, lat: 42.344589)
-Thing.create(city_id: 3329, lng: -71.057854, lat: 42.344221)
-Thing.create(city_id: 3330, lng: -71.025666, lat: 42.344086)
-Thing.create(city_id: 3331, lng: -71.148535, lat: 42.344509)
-Thing.create(city_id: 3332, lng: -71.142838, lat: 42.344439)
-Thing.create(city_id: 3333, lng: -71.138023, lat: 42.344386)
-Thing.create(city_id: 3334, lng: -71.14983, lat: 42.344408)
-Thing.create(city_id: 3335, lng: -71.035341, lat: 42.343998)
-Thing.create(city_id: 3336, lng: -71.099421, lat: 42.344238)
-Thing.create(city_id: 3337, lng: -71.108865, lat: 42.303366)
-Thing.create(city_id: 3338, lng: -71.157673, lat: 42.344423)
-Thing.create(city_id: 3339, lng: -71.082931, lat: 42.344175)
-Thing.create(city_id: 3340, lng: -71.036273, lat: 42.343981)
-Thing.create(city_id: 3341, lng: -71.149871, lat: 42.344359)
-Thing.create(city_id: 3342, lng: -71.025802, lat: 42.343906)
-Thing.create(city_id: 3343, lng: -71.057859, lat: 42.344013)
-Thing.create(city_id: 3344, lng: -71.144137, lat: 42.344311)
-Thing.create(city_id: 3345, lng: -71.097718, lat: 42.344148)
-Thing.create(city_id: 3346, lng: -71.08631, lat: 42.344103)
-Thing.create(city_id: 3347, lng: -71.089764, lat: 42.344114)
-Thing.create(city_id: 3348, lng: -71.155551, lat: 42.344676)
-Thing.create(city_id: 3349, lng: -71.087981, lat: 42.34439)
-Thing.create(city_id: 3350, lng: -71.141357, lat: 42.344529)
-Thing.create(city_id: 3351, lng: -71.030013, lat: 42.344108)
-Thing.create(city_id: 3352, lng: -71.152904, lat: 42.344475)
-Thing.create(city_id: 3353, lng: -71.145301, lat: 42.344299)
-Thing.create(city_id: 3354, lng: -71.09605, lat: 42.344123)
-Thing.create(city_id: 3355, lng: -71.077409, lat: 42.34402)
-Thing.create(city_id: 3356, lng: -71.056339, lat: 42.343936)
-Thing.create(city_id: 3357, lng: -71.150534, lat: 42.344244)
-Thing.create(city_id: 3358, lng: -71.142252, lat: 42.344208)
-Thing.create(city_id: 3359, lng: -71.022023, lat: 42.343751)
-Thing.create(city_id: 3360, lng: -71.05823, lat: 42.343874)
-Thing.create(city_id: 3361, lng: -71.087065, lat: 42.343959)
-Thing.create(city_id: 3362, lng: -71.151876, lat: 42.344172)
-Thing.create(city_id: 3363, lng: -71.037845, lat: 42.343763)
-Thing.create(city_id: 3364, lng: -71.051444, lat: 42.343794)
-Thing.create(city_id: 3365, lng: -71.058635, lat: 42.343821)
-Thing.create(city_id: 3366, lng: -71.043525, lat: 42.343732)
-Thing.create(city_id: 3367, lng: -71.088862, lat: 42.343892)
-Thing.create(city_id: 3368, lng: -71.102127, lat: 42.343932)
-Thing.create(city_id: 3369, lng: -71.095067, lat: 42.343896)
-Thing.create(city_id: 3370, lng: -71.083494, lat: 42.343837)
-Thing.create(city_id: 3371, lng: -71.022959, lat: 42.343597)
-Thing.create(city_id: 3372, lng: -71.059205, lat: 42.343735)
-Thing.create(city_id: 3373, lng: -71.023837, lat: 42.343585)
-Thing.create(city_id: 3374, lng: -71.097014, lat: 42.343849)
-Thing.create(city_id: 3375, lng: -71.025666, lat: 42.343552)
-Thing.create(city_id: 3376, lng: -71.026557, lat: 42.343532)
-Thing.create(city_id: 3377, lng: -71.149958, lat: 42.343963)
-Thing.create(city_id: 3378, lng: -71.028483, lat: 42.343515)
-Thing.create(city_id: 3379, lng: -71.087805, lat: 42.343736)
-Thing.create(city_id: 3380, lng: -71.114812, lat: 42.313446)
-Thing.create(city_id: 3381, lng: -71.029648, lat: 42.343511)
-Thing.create(city_id: 3382, lng: -71.08619, lat: 42.343719)
-Thing.create(city_id: 3383, lng: -71.111188, lat: 42.31012)
-Thing.create(city_id: 3384, lng: -71.031141, lat: 42.343505)
-Thing.create(city_id: 3385, lng: -71.143371, lat: 42.343906)
-Thing.create(city_id: 3386, lng: -71.030652, lat: 42.343497)
-Thing.create(city_id: 3387, lng: -71.032606, lat: 42.343503)
-Thing.create(city_id: 3388, lng: -71.164158, lat: 42.343938)
-Thing.create(city_id: 3389, lng: -71.165233, lat: 42.343941)
-Thing.create(city_id: 3390, lng: -71.090802, lat: 42.343699)
-Thing.create(city_id: 3391, lng: -71.168947, lat: 42.343949)
-Thing.create(city_id: 3392, lng: -71.111937, lat: 42.310514)
-Thing.create(city_id: 3393, lng: -71.112662, lat: 42.316775)
-Thing.create(city_id: 3394, lng: -71.110127, lat: 42.309775)
-Thing.create(city_id: 3395, lng: -71.1202, lat: 42.309302)
-Thing.create(city_id: 3396, lng: -71.120333, lat: 42.310909)
-Thing.create(city_id: 3397, lng: -71.03459, lat: 42.34342)
-Thing.create(city_id: 3398, lng: -71.034143, lat: 42.34341)
-Thing.create(city_id: 3399, lng: -71.058802, lat: 42.343486)
-Thing.create(city_id: 3400, lng: -71.102931, lat: 42.343647)
-Thing.create(city_id: 3401, lng: -71.144483, lat: 42.343777)
-Thing.create(city_id: 3402, lng: -71.085345, lat: 42.343577)
-Thing.create(city_id: 3403, lng: -71.036083, lat: 42.343383)
-Thing.create(city_id: 3404, lng: -71.155737, lat: 42.343794)
-Thing.create(city_id: 3405, lng: -71.138836, lat: 42.34374)
-Thing.create(city_id: 3406, lng: -71.120541, lat: 42.311726)
-Thing.create(city_id: 3407, lng: -71.058477, lat: 42.343426)
-Thing.create(city_id: 3408, lng: -71.098147, lat: 42.34355)
-Thing.create(city_id: 3409, lng: -71.120712, lat: 42.313346)
-Thing.create(city_id: 3410, lng: -71.153332, lat: 42.343728)
-Thing.create(city_id: 3411, lng: -71.110816, lat: 42.316074)
-Thing.create(city_id: 3412, lng: -71.086553, lat: 42.343499)
-Thing.create(city_id: 3413, lng: -71.11194, lat: 42.316333)
-Thing.create(city_id: 3414, lng: -71.110021, lat: 42.31443)
-Thing.create(city_id: 3415, lng: -71.111583, lat: 42.312516)
-Thing.create(city_id: 3416, lng: -71.166411, lat: 42.34373)
-Thing.create(city_id: 3417, lng: -71.151097, lat: 42.343674)
-Thing.create(city_id: 3418, lng: -71.149074, lat: 42.343667)
-Thing.create(city_id: 3419, lng: -71.141334, lat: 42.343642)
-Thing.create(city_id: 3420, lng: -71.111507, lat: 42.313634)
-Thing.create(city_id: 3421, lng: -71.116235, lat: 42.305711)
-Thing.create(city_id: 3422, lng: -71.145633, lat: 42.343639)
-Thing.create(city_id: 3423, lng: -71.1022, lat: 42.343494)
-Thing.create(city_id: 3424, lng: -71.04314, lat: 42.34326)
-Thing.create(city_id: 3425, lng: -71.099871, lat: 42.343468)
-Thing.create(city_id: 3426, lng: -71.05753, lat: 42.343304)
-Thing.create(city_id: 3427, lng: -71.147242, lat: 42.344057)
-Thing.create(city_id: 3428, lng: -71.024675, lat: 42.343573)
-Thing.create(city_id: 3429, lng: -71.060844, lat: 42.343656)
-Thing.create(city_id: 3430, lng: -71.059518, lat: 42.343271)
-Thing.create(city_id: 3431, lng: -71.08665, lat: 42.343364)
-Thing.create(city_id: 3432, lng: -71.157752, lat: 42.343583)
-Thing.create(city_id: 3433, lng: -71.16759, lat: 42.343605)
-Thing.create(city_id: 3434, lng: -71.097323, lat: 42.343359)
-Thing.create(city_id: 3435, lng: -71.05905, lat: 42.343211)
-Thing.create(city_id: 3436, lng: -71.057695, lat: 42.339106)
-Thing.create(city_id: 3437, lng: -71.092504, lat: 42.339203)
-Thing.create(city_id: 3438, lng: -71.151988, lat: 42.339343)
-Thing.create(city_id: 3439, lng: -71.059699, lat: 42.338967)
-Thing.create(city_id: 3440, lng: -71.160173, lat: 42.339257)
-Thing.create(city_id: 3441, lng: -71.096445, lat: 42.338933)
-Thing.create(city_id: 3442, lng: -71.107452, lat: 42.338865)
-Thing.create(city_id: 3443, lng: -71.087011, lat: 42.338787)
-Thing.create(city_id: 3444, lng: -71.093219, lat: 42.338797)
-Thing.create(city_id: 3445, lng: -71.020664, lat: 42.338502)
-Thing.create(city_id: 3446, lng: -71.108959, lat: 42.338828)
-Thing.create(city_id: 3447, lng: -71.155679, lat: 42.338964)
-Thing.create(city_id: 3448, lng: -71.073582, lat: 42.338688)
-Thing.create(city_id: 3449, lng: -71.156094, lat: 42.338907)
-Thing.create(city_id: 3450, lng: -71.074276, lat: 42.338617)
-Thing.create(city_id: 3451, lng: -71.09282, lat: 42.338682)
-Thing.create(city_id: 3452, lng: -71.15395, lat: 42.338829)
-Thing.create(city_id: 3453, lng: -71.152712, lat: 42.338808)
-Thing.create(city_id: 3454, lng: -71.0637, lat: 42.338488)
-Thing.create(city_id: 3455, lng: -71.075691, lat: 42.338484)
-Thing.create(city_id: 3456, lng: -71.14913, lat: 42.338725)
-Thing.create(city_id: 3457, lng: -71.105684, lat: 42.338583)
-Thing.create(city_id: 3458, lng: -71.021601, lat: 42.33826)
-Thing.create(city_id: 3459, lng: -71.071432, lat: 42.338418)
-Thing.create(city_id: 3460, lng: -71.098464, lat: 42.338503)
-Thing.create(city_id: 3461, lng: -71.152346, lat: 42.338668)
-Thing.create(city_id: 3462, lng: -71.095416, lat: 42.338482)
-Thing.create(city_id: 3463, lng: -71.147847, lat: 42.338651)
-Thing.create(city_id: 3464, lng: -71.109103, lat: 42.3385)
-Thing.create(city_id: 3465, lng: -71.092573, lat: 42.338435)
-Thing.create(city_id: 3466, lng: -71.035649, lat: 42.338181)
-Thing.create(city_id: 3467, lng: -71.078079, lat: 42.338344)
-Thing.create(city_id: 3468, lng: -71.094253, lat: 42.338394)
-Thing.create(city_id: 3469, lng: -71.097084, lat: 42.338402)
-Thing.create(city_id: 3470, lng: -71.05914, lat: 42.338253)
-Thing.create(city_id: 3471, lng: -71.032306, lat: 42.338143)
-Thing.create(city_id: 3472, lng: -71.090909, lat: 42.338363)
-Thing.create(city_id: 3473, lng: -71.109351, lat: 42.338424)
-Thing.create(city_id: 3474, lng: -71.04248, lat: 42.335421)
-Thing.create(city_id: 3475, lng: -71.110371, lat: 42.338414)
-Thing.create(city_id: 3476, lng: -71.154815, lat: 42.33855)
-Thing.create(city_id: 3477, lng: -71.044588, lat: 42.335369)
-Thing.create(city_id: 3478, lng: -71.021645, lat: 42.338065)
-Thing.create(city_id: 3479, lng: -71.102189, lat: 42.338368)
-Thing.create(city_id: 3480, lng: -71.045436, lat: 42.335358)
-Thing.create(city_id: 3481, lng: -71.093689, lat: 42.338314)
-Thing.create(city_id: 3482, lng: -71.106463, lat: 42.338358)
-Thing.create(city_id: 3483, lng: -71.044339, lat: 42.335307)
-Thing.create(city_id: 3484, lng: -71.082041, lat: 42.338266)
-Thing.create(city_id: 3485, lng: -71.052445, lat: 42.335199)
-Thing.create(city_id: 3486, lng: -71.033501, lat: 42.338075)
-Thing.create(city_id: 3487, lng: -71.048485, lat: 42.33505)
-Thing.create(city_id: 3488, lng: -71.063665, lat: 42.338193)
-Thing.create(city_id: 3489, lng: -71.108027, lat: 42.338334)
-Thing.create(city_id: 3490, lng: -71.053129, lat: 42.335039)
-Thing.create(city_id: 3491, lng: -71.058399, lat: 42.338144)
-Thing.create(city_id: 3492, lng: -71.05002, lat: 42.334995)
-Thing.create(city_id: 3493, lng: -71.15183, lat: 42.338443)
-Thing.create(city_id: 3494, lng: -71.148285, lat: 42.338388)
-Thing.create(city_id: 3495, lng: -71.051681, lat: 42.334113)
-Thing.create(city_id: 3496, lng: -71.053784, lat: 42.33492)
-Thing.create(city_id: 3497, lng: -71.04741, lat: 42.334188)
-Thing.create(city_id: 3498, lng: -71.041445, lat: 42.334831)
-Thing.create(city_id: 3499, lng: -71.146154, lat: 42.338742)
-Thing.create(city_id: 3500, lng: -71.043174, lat: 42.334698)
-Thing.create(city_id: 3501, lng: -71.047848, lat: 42.334637)
-Thing.create(city_id: 3502, lng: -71.053121, lat: 42.334612)
-Thing.create(city_id: 3503, lng: -71.099485, lat: 42.338399)
-Thing.create(city_id: 3504, lng: -71.058853, lat: 42.338003)
-Thing.create(city_id: 3505, lng: -71.089949, lat: 42.338098)
-Thing.create(city_id: 3506, lng: -71.150605, lat: 42.338292)
-Thing.create(city_id: 3507, lng: -71.057094, lat: 42.337927)
-Thing.create(city_id: 3508, lng: -71.063984, lat: 42.337923)
-Thing.create(city_id: 3509, lng: -71.097677, lat: 42.338031)
-Thing.create(city_id: 3510, lng: -71.094368, lat: 42.338011)
-Thing.create(city_id: 3511, lng: -71.16094, lat: 42.338219)
-Thing.create(city_id: 3512, lng: -71.092254, lat: 42.337985)
-Thing.create(city_id: 3513, lng: -71.096121, lat: 42.337993)
-Thing.create(city_id: 3514, lng: -71.146072, lat: 42.342043)
-Thing.create(city_id: 3515, lng: -71.053662, lat: 42.334066)
-Thing.create(city_id: 3516, lng: -71.090502, lat: 42.341843)
-Thing.create(city_id: 3517, lng: -71.097252, lat: 42.341856)
-Thing.create(city_id: 3518, lng: -71.104319, lat: 42.341871)
-Thing.create(city_id: 3519, lng: -71.158545, lat: 42.34203)
-Thing.create(city_id: 3520, lng: -71.044306, lat: 42.334007)
-Thing.create(city_id: 3521, lng: -71.1444, lat: 42.341981)
-Thing.create(city_id: 3522, lng: -71.143204, lat: 42.34197)
-Thing.create(city_id: 3523, lng: -71.166816, lat: 42.341998)
-Thing.create(city_id: 3524, lng: -71.013446, lat: 42.341448)
-Thing.create(city_id: 3525, lng: -71.142242, lat: 42.341904)
-Thing.create(city_id: 3526, lng: -71.155422, lat: 42.341918)
-Thing.create(city_id: 3527, lng: -71.146219, lat: 42.341886)
-Thing.create(city_id: 3528, lng: -71.083549, lat: 42.34166)
-Thing.create(city_id: 3529, lng: -71.157798, lat: 42.341891)
-Thing.create(city_id: 3530, lng: -71.148461, lat: 42.341854)
-Thing.create(city_id: 3531, lng: -71.147173, lat: 42.341841)
-Thing.create(city_id: 3532, lng: -71.052513, lat: 42.333892)
-Thing.create(city_id: 3533, lng: -71.105929, lat: 42.341696)
-Thing.create(city_id: 3534, lng: -71.062635, lat: 42.341491)
-Thing.create(city_id: 3535, lng: -71.059951, lat: 42.341481)
-Thing.create(city_id: 3536, lng: -71.05133, lat: 42.333889)
-Thing.create(city_id: 3537, lng: -71.042358, lat: 42.333764)
-Thing.create(city_id: 3538, lng: -71.097019, lat: 42.341586)
-Thing.create(city_id: 3539, lng: -71.141193, lat: 42.341714)
-Thing.create(city_id: 3540, lng: -71.156581, lat: 42.341744)
-Thing.create(city_id: 3541, lng: -71.057594, lat: 42.341392)
-Thing.create(city_id: 3542, lng: -71.088146, lat: 42.341491)
-Thing.create(city_id: 3543, lng: -71.084852, lat: 42.341468)
-Thing.create(city_id: 3544, lng: -71.054124, lat: 42.341348)
-Thing.create(city_id: 3545, lng: -71.140771, lat: 42.34164)
-Thing.create(city_id: 3546, lng: -71.073585, lat: 42.341388)
-Thing.create(city_id: 3547, lng: -71.06341, lat: 42.341338)
-Thing.create(city_id: 3548, lng: -71.149715, lat: 42.341627)
-Thing.create(city_id: 3549, lng: -71.1021, lat: 42.341459)
-Thing.create(city_id: 3550, lng: -71.086864, lat: 42.341398)
-Thing.create(city_id: 3551, lng: -71.145392, lat: 42.341583)
-Thing.create(city_id: 3552, lng: -71.154414, lat: 42.341556)
-Thing.create(city_id: 3553, lng: -71.10421, lat: 42.341383)
-Thing.create(city_id: 3554, lng: -71.098125, lat: 42.341315)
-Thing.create(city_id: 3555, lng: -71.0864, lat: 42.341271)
-Thing.create(city_id: 3556, lng: -71.090825, lat: 42.341285)
-Thing.create(city_id: 3557, lng: -71.09021, lat: 42.327979)
-Thing.create(city_id: 3558, lng: -71.06068, lat: 42.341151)
-Thing.create(city_id: 3559, lng: -71.062182, lat: 42.341138)
-Thing.create(city_id: 3560, lng: -71.151258, lat: 42.341426)
-Thing.create(city_id: 3561, lng: -71.104936, lat: 42.341271)
-Thing.create(city_id: 3562, lng: -71.020179, lat: 42.340917)
-Thing.create(city_id: 3563, lng: -71.018849, lat: 42.340909)
-Thing.create(city_id: 3564, lng: -71.021235, lat: 42.340915)
-Thing.create(city_id: 3565, lng: -71.022444, lat: 42.340913)
-Thing.create(city_id: 3566, lng: -71.023682, lat: 42.340918)
-Thing.create(city_id: 3567, lng: -71.146469, lat: 42.34136)
-Thing.create(city_id: 3568, lng: -71.165997, lat: 42.341406)
-Thing.create(city_id: 3569, lng: -71.14751, lat: 42.341345)
-Thing.create(city_id: 3570, lng: -71.150318, lat: 42.341353)
-Thing.create(city_id: 3571, lng: -71.09177, lat: 42.341598)
-Thing.create(city_id: 3572, lng: -71.100671, lat: 42.341486)
-Thing.create(city_id: 3573, lng: -71.107152, lat: 42.341483)
-Thing.create(city_id: 3574, lng: -71.07636, lat: 42.341262)
-Thing.create(city_id: 3575, lng: -71.148629, lat: 42.341341)
-Thing.create(city_id: 3576, lng: -71.142891, lat: 42.341303)
-Thing.create(city_id: 3577, lng: -71.012512, lat: 42.340818)
-Thing.create(city_id: 3578, lng: -71.057653, lat: 42.340981)
-Thing.create(city_id: 3579, lng: -71.167031, lat: 42.341336)
-Thing.create(city_id: 3580, lng: -71.089201, lat: 42.341082)
-Thing.create(city_id: 3581, lng: -71.10814, lat: 42.341127)
-Thing.create(city_id: 3582, lng: -71.106526, lat: 42.341122)
-Thing.create(city_id: 3583, lng: -71.158036, lat: 42.341286)
-Thing.create(city_id: 3584, lng: -71.141791, lat: 42.341193)
-Thing.create(city_id: 3585, lng: -71.015562, lat: 42.340702)
-Thing.create(city_id: 3586, lng: -71.016549, lat: 42.340704)
-Thing.create(city_id: 3587, lng: -71.017175, lat: 42.340702)
-Thing.create(city_id: 3588, lng: -71.054706, lat: 42.340853)
-Thing.create(city_id: 3589, lng: -71.014617, lat: 42.340686)
-Thing.create(city_id: 3590, lng: -71.144834, lat: 42.341143)
-Thing.create(city_id: 3591, lng: -71.141318, lat: 42.341126)
-Thing.create(city_id: 3592, lng: -71.087861, lat: 42.340946)
-Thing.create(city_id: 3593, lng: -71.085815, lat: 42.340905)
-Thing.create(city_id: 3594, lng: -71.14564, lat: 42.341089)
-Thing.create(city_id: 3595, lng: -71.149694, lat: 42.341088)
-Thing.create(city_id: 3596, lng: -71.04892, lat: 42.336968)
-Thing.create(city_id: 3597, lng: -71.059765, lat: 42.34076)
-Thing.create(city_id: 3598, lng: -71.099866, lat: 42.340905)
-Thing.create(city_id: 3599, lng: -71.144033, lat: 42.341041)
-Thing.create(city_id: 3600, lng: -71.045464, lat: 42.336797)
-Thing.create(city_id: 3601, lng: -71.087252, lat: 42.340838)
-Thing.create(city_id: 3602, lng: -71.098819, lat: 42.340871)
-Thing.create(city_id: 3603, lng: -71.050795, lat: 42.336607)
-Thing.create(city_id: 3604, lng: -71.06297, lat: 42.340715)
-Thing.create(city_id: 3605, lng: -71.041491, lat: 42.336482)
-Thing.create(city_id: 3606, lng: -71.013732, lat: 42.340482)
-Thing.create(city_id: 3607, lng: -71.101422, lat: 42.340811)
-Thing.create(city_id: 3608, lng: -71.106841, lat: 42.340808)
-Thing.create(city_id: 3609, lng: -71.092316, lat: 42.340748)
-Thing.create(city_id: 3610, lng: -71.153747, lat: 42.340919)
-Thing.create(city_id: 3611, lng: -71.052452, lat: 42.336479)
-Thing.create(city_id: 3612, lng: -71.154824, lat: 42.340911)
-Thing.create(city_id: 3613, lng: -71.091247, lat: 42.340648)
-Thing.create(city_id: 3614, lng: -71.057266, lat: 42.340505)
-Thing.create(city_id: 3615, lng: -71.024871, lat: 42.340367)
-Thing.create(city_id: 3616, lng: -71.105561, lat: 42.340672)
-Thing.create(city_id: 3617, lng: -71.14728, lat: 42.340801)
-Thing.create(city_id: 3618, lng: -71.088801, lat: 42.340561)
-Thing.create(city_id: 3619, lng: -71.093529, lat: 42.340564)
-Thing.create(city_id: 3620, lng: -71.058832, lat: 42.340409)
-Thing.create(city_id: 3621, lng: -71.148395, lat: 42.340701)
-Thing.create(city_id: 3622, lng: -71.1511, lat: 42.340708)
-Thing.create(city_id: 3623, lng: -71.156058, lat: 42.340723)
-Thing.create(city_id: 3624, lng: -71.061326, lat: 42.340389)
-Thing.create(city_id: 3625, lng: -71.088183, lat: 42.340473)
-Thing.create(city_id: 3626, lng: -71.085144, lat: 42.34046)
-Thing.create(city_id: 3627, lng: -71.062679, lat: 42.340367)
-Thing.create(city_id: 3628, lng: -71.090793, lat: 42.340464)
-Thing.create(city_id: 3629, lng: -71.158525, lat: 42.340674)
-Thing.create(city_id: 3630, lng: -71.157282, lat: 42.340659)
-Thing.create(city_id: 3631, lng: -71.108559, lat: 42.3405)
-Thing.create(city_id: 3632, lng: -71.086331, lat: 42.340422)
-Thing.create(city_id: 3633, lng: -71.080148, lat: 42.340387)
-Thing.create(city_id: 3634, lng: -71.06077, lat: 42.34031)
-Thing.create(city_id: 3635, lng: -71.149968, lat: 42.340588)
-Thing.create(city_id: 3636, lng: -71.152589, lat: 42.340673)
-Thing.create(city_id: 3637, lng: -71.150573, lat: 42.340642)
-Thing.create(city_id: 3638, lng: -71.144375, lat: 42.340574)
-Thing.create(city_id: 3639, lng: -71.142238, lat: 42.340553)
-Thing.create(city_id: 3640, lng: -71.159373, lat: 42.340594)
-Thing.create(city_id: 3641, lng: -71.01134, lat: 42.340056)
-Thing.create(city_id: 3642, lng: -71.089461, lat: 42.340344)
-Thing.create(city_id: 3643, lng: -71.055461, lat: 42.340211)
-Thing.create(city_id: 3644, lng: -71.069419, lat: 42.340253)
-Thing.create(city_id: 3645, lng: -71.044671, lat: 42.336283)
-Thing.create(city_id: 3646, lng: -71.141847, lat: 42.340476)
-Thing.create(city_id: 3647, lng: -71.166087, lat: 42.340547)
-Thing.create(city_id: 3648, lng: -71.049803, lat: 42.336309)
-Thing.create(city_id: 3649, lng: -71.143262, lat: 42.340467)
-Thing.create(city_id: 3650, lng: -71.145586, lat: 42.340462)
-Thing.create(city_id: 3651, lng: -71.146386, lat: 42.34042)
-Thing.create(city_id: 3652, lng: -71.081449, lat: 42.340182)
-Thing.create(city_id: 3653, lng: -71.086951, lat: 42.340201)
-Thing.create(city_id: 3654, lng: -71.154787, lat: 42.340409)
-Thing.create(city_id: 3655, lng: -71.089886, lat: 42.340167)
-Thing.create(city_id: 3656, lng: -71.109715, lat: 42.340227)
-Thing.create(city_id: 3657, lng: -71.041806, lat: 42.339963)
-Thing.create(city_id: 3658, lng: -71.100692, lat: 42.340166)
-Thing.create(city_id: 3659, lng: -71.083539, lat: 42.34008)
-Thing.create(city_id: 3660, lng: -71.163351, lat: 42.340318)
-Thing.create(city_id: 3661, lng: -71.089262, lat: 42.340066)
-Thing.create(city_id: 3662, lng: -71.063569, lat: 42.339967)
-Thing.create(city_id: 3663, lng: -71.164355, lat: 42.340297)
-Thing.create(city_id: 3664, lng: -71.106131, lat: 42.340108)
-Thing.create(city_id: 3665, lng: -71.148834, lat: 42.340233)
-Thing.create(city_id: 3666, lng: -71.165344, lat: 42.340266)
-Thing.create(city_id: 3667, lng: -71.012843, lat: 42.339714)
-Thing.create(city_id: 3668, lng: -71.059736, lat: 42.339897)
-Thing.create(city_id: 3669, lng: -71.017221, lat: 42.339721)
-Thing.create(city_id: 3670, lng: -71.015921, lat: 42.339713)
-Thing.create(city_id: 3671, lng: -71.014643, lat: 42.339702)
-Thing.create(city_id: 3672, lng: -71.15527, lat: 42.340206)
-Thing.create(city_id: 3673, lng: -71.022493, lat: 42.339726)
-Thing.create(city_id: 3674, lng: -71.021305, lat: 42.339717)
-Thing.create(city_id: 3675, lng: -71.147954, lat: 42.340159)
-Thing.create(city_id: 3676, lng: -71.161059, lat: 42.340176)
-Thing.create(city_id: 3677, lng: -71.150816, lat: 42.340127)
-Thing.create(city_id: 3678, lng: -71.013732, lat: 42.339628)
-Thing.create(city_id: 3679, lng: -71.160015, lat: 42.340125)
-Thing.create(city_id: 3680, lng: -71.047926, lat: 42.339724)
-Thing.create(city_id: 3681, lng: -71.091725, lat: 42.339884)
-Thing.create(city_id: 3682, lng: -71.069234, lat: 42.339796)
-Thing.create(city_id: 3683, lng: -71.092951, lat: 42.339871)
-Thing.create(city_id: 3684, lng: -71.156611, lat: 42.340075)
-Thing.create(city_id: 3685, lng: -71.159068, lat: 42.340066)
-Thing.create(city_id: 3686, lng: -71.047739, lat: 42.336206)
-Thing.create(city_id: 3687, lng: -71.151932, lat: 42.340011)
-Thing.create(city_id: 3688, lng: -71.151409, lat: 42.340009)
-Thing.create(city_id: 3689, lng: -71.102643, lat: 42.339828)
-Thing.create(city_id: 3690, lng: -71.051709, lat: 42.336001)
-Thing.create(city_id: 3691, lng: -71.056145, lat: 42.339636)
-Thing.create(city_id: 3692, lng: -71.144713, lat: 42.339912)
-Thing.create(city_id: 3693, lng: -71.05737, lat: 42.339599)
-Thing.create(city_id: 3694, lng: -71.108931, lat: 42.339785)
-Thing.create(city_id: 3695, lng: -71.160178, lat: 42.33993)
-Thing.create(city_id: 3696, lng: -71.146342, lat: 42.33988)
-Thing.create(city_id: 3697, lng: -71.043589, lat: 42.339513)
-Thing.create(city_id: 3698, lng: -71.147167, lat: 42.339874)
-Thing.create(city_id: 3699, lng: -71.05888, lat: 42.340007)
-Thing.create(city_id: 3700, lng: -71.095493, lat: 42.340102)
-Thing.create(city_id: 3701, lng: -71.162318, lat: 42.34029)
-Thing.create(city_id: 3702, lng: -71.153793, lat: 42.340216)
-Thing.create(city_id: 3703, lng: -71.019894, lat: 42.339719)
-Thing.create(city_id: 3704, lng: -71.023645, lat: 42.339719)
-Thing.create(city_id: 3705, lng: -71.090634, lat: 42.339942)
-Thing.create(city_id: 3706, lng: -71.090317, lat: 42.339673)
-Thing.create(city_id: 3707, lng: -71.100007, lat: 42.339621)
-Thing.create(city_id: 3708, lng: -71.110151, lat: 42.339627)
-Thing.create(city_id: 3709, lng: -71.085959, lat: 42.33952)
-Thing.create(city_id: 3710, lng: -71.158858, lat: 42.339753)
-Thing.create(city_id: 3711, lng: -71.109635, lat: 42.33959)
-Thing.create(city_id: 3712, lng: -71.096382, lat: 42.339512)
-Thing.create(city_id: 3713, lng: -71.149819, lat: 42.339665)
-Thing.create(city_id: 3714, lng: -71.106778, lat: 42.33949)
-Thing.create(city_id: 3715, lng: -71.157465, lat: 42.339646)
-Thing.create(city_id: 3716, lng: -71.088845, lat: 42.339412)
-Thing.create(city_id: 3717, lng: -71.091688, lat: 42.339408)
-Thing.create(city_id: 3718, lng: -71.025003, lat: 42.339144)
-Thing.create(city_id: 3719, lng: -71.05203, lat: 42.335552)
-Thing.create(city_id: 3720, lng: -71.088101, lat: 42.339359)
-Thing.create(city_id: 3721, lng: -71.153491, lat: 42.339554)
-Thing.create(city_id: 3722, lng: -71.025044, lat: 42.339088)
-Thing.create(city_id: 3723, lng: -71.036319, lat: 42.339125)
-Thing.create(city_id: 3724, lng: -71.148559, lat: 42.339521)
-Thing.create(city_id: 3725, lng: -71.038841, lat: 42.33913)
-Thing.create(city_id: 3726, lng: -71.157879, lat: 42.339537)
-Thing.create(city_id: 3727, lng: -71.047038, lat: 42.335752)
-Thing.create(city_id: 3728, lng: -71.063331, lat: 42.339209)
-Thing.create(city_id: 3729, lng: -71.108372, lat: 42.339364)
-Thing.create(city_id: 3730, lng: -71.043398, lat: 42.335574)
-Thing.create(city_id: 3731, lng: -71.091197, lat: 42.339281)
-Thing.create(city_id: 3732, lng: -71.070219, lat: 42.339205)
-Thing.create(city_id: 3733, lng: -71.013494, lat: 42.338968)
-Thing.create(city_id: 3734, lng: -71.052965, lat: 42.335731)
-Thing.create(city_id: 3735, lng: -71.041812, lat: 42.335619)
-Thing.create(city_id: 3736, lng: -71.014571, lat: 42.3389)
-Thing.create(city_id: 3737, lng: -71.02463, lat: 42.338934)
-Thing.create(city_id: 3738, lng: -71.017058, lat: 42.338895)
-Thing.create(city_id: 3739, lng: -71.045194, lat: 42.335548)
-Thing.create(city_id: 3740, lng: -71.145974, lat: 42.339322)
-Thing.create(city_id: 3741, lng: -71.101945, lat: 42.33916)
-Thing.create(city_id: 3742, lng: -71.156529, lat: 42.339331)
-Thing.create(city_id: 3743, lng: -71.099191, lat: 42.339109)
-Thing.create(city_id: 3744, lng: -71.090401, lat: 42.339062)
-Thing.create(city_id: 3745, lng: -71.15698, lat: 42.339249)
-Thing.create(city_id: 3746, lng: -71.058818, lat: 42.33891)
-Thing.create(city_id: 3747, lng: -71.151042, lat: 42.339214)
-Thing.create(city_id: 3748, lng: -71.086629, lat: 42.338973)
-Thing.create(city_id: 3749, lng: -71.089256, lat: 42.338967)
-Thing.create(city_id: 3750, lng: -71.110043, lat: 42.339019)
-Thing.create(city_id: 3751, lng: -71.039347, lat: 42.338741)
-Thing.create(city_id: 3752, lng: -71.061903, lat: 42.338828)
-Thing.create(city_id: 3753, lng: -71.091862, lat: 42.338901)
-Thing.create(city_id: 3754, lng: -71.147019, lat: 42.339064)
-Thing.create(city_id: 3755, lng: -71.01309, lat: 42.338545)
-Thing.create(city_id: 3756, lng: -71.020471, lat: 42.338564)
-Thing.create(city_id: 3757, lng: -71.15018, lat: 42.339005)
-Thing.create(city_id: 3758, lng: -71.154844, lat: 42.339649)
-Thing.create(city_id: 3759, lng: -71.035422, lat: 42.334302)
-Thing.create(city_id: 3760, lng: -71.045824, lat: 42.349361)
-Thing.create(city_id: 3761, lng: -71.0392, lat: 42.381829)
-Thing.create(city_id: 3762, lng: -71.098905, lat: 42.335856)
-Thing.create(city_id: 3763, lng: -71.030256, lat: 42.333978)
-Thing.create(city_id: 3764, lng: -71.031414, lat: 42.333951)
-Thing.create(city_id: 3765, lng: -71.045767, lat: 42.349133)
-Thing.create(city_id: 3766, lng: -71.052765, lat: 42.336024)
-Thing.create(city_id: 3767, lng: -71.083645, lat: 42.336066)
-Thing.create(city_id: 3768, lng: -71.039269, lat: 42.335857)
-Thing.create(city_id: 3769, lng: -71.064282, lat: 42.335907)
-Thing.create(city_id: 3770, lng: -71.09093, lat: 42.335942)
-Thing.create(city_id: 3771, lng: -71.100566, lat: 42.335933)
-Thing.create(city_id: 3772, lng: -71.032707, lat: 42.333927)
-Thing.create(city_id: 3773, lng: -71.035769, lat: 42.333877)
-Thing.create(city_id: 3774, lng: -71.03738, lat: 42.380014)
-Thing.create(city_id: 3775, lng: -71.149459, lat: 42.335961)
-Thing.create(city_id: 3776, lng: -71.033726, lat: 42.333908)
-Thing.create(city_id: 3777, lng: -71.09829, lat: 42.335787)
-Thing.create(city_id: 3778, lng: -71.040339, lat: 42.381293)
-Thing.create(city_id: 3779, lng: -71.046749, lat: 42.34954)
-Thing.create(city_id: 3780, lng: -71.039191, lat: 42.381256)
-Thing.create(city_id: 3781, lng: -71.036591, lat: 42.33386)
-Thing.create(city_id: 3782, lng: -71.080582, lat: 42.335672)
-Thing.create(city_id: 3783, lng: -71.038426, lat: 42.335498)
-Thing.create(city_id: 3784, lng: -71.081838, lat: 42.335659)
-Thing.create(city_id: 3785, lng: -71.038322, lat: 42.333837)
-Thing.create(city_id: 3786, lng: -71.037486, lat: 42.33385)
-Thing.create(city_id: 3787, lng: -71.092563, lat: 42.335672)
-Thing.create(city_id: 3788, lng: -71.044846, lat: 42.349351)
-Thing.create(city_id: 3789, lng: -71.037907, lat: 42.38049)
-Thing.create(city_id: 3790, lng: -71.097846, lat: 42.335597)
-Thing.create(city_id: 3791, lng: -71.104634, lat: 42.335621)
-Thing.create(city_id: 3792, lng: -71.040267, lat: 42.380448)
-Thing.create(city_id: 3793, lng: -71.039075, lat: 42.333818)
-Thing.create(city_id: 3794, lng: -71.073365, lat: 42.335464)
-Thing.create(city_id: 3795, lng: -71.039158, lat: 42.380131)
-Thing.create(city_id: 3796, lng: -71.101425, lat: 42.335538)
-Thing.create(city_id: 3797, lng: -71.04071, lat: 42.333791)
-Thing.create(city_id: 3798, lng: -71.094479, lat: 42.335484)
-Thing.create(city_id: 3799, lng: -71.08408, lat: 42.335445)
-Thing.create(city_id: 3800, lng: -71.09957, lat: 42.335488)
-Thing.create(city_id: 3801, lng: -71.090112, lat: 42.335449)
-Thing.create(city_id: 3802, lng: -71.036458, lat: 42.333545)
-Thing.create(city_id: 3803, lng: -71.09158, lat: 42.335368)
-Thing.create(city_id: 3804, lng: -71.096891, lat: 42.335371)
-Thing.create(city_id: 3805, lng: -71.101964, lat: 42.335351)
-Thing.create(city_id: 3806, lng: -71.10785, lat: 42.335307)
-Thing.create(city_id: 3807, lng: -71.060487, lat: 42.353254)
-Thing.create(city_id: 3808, lng: -71.051244, lat: 42.358746)
-Thing.create(city_id: 3809, lng: -71.040207, lat: 42.3798)
-Thing.create(city_id: 3810, lng: -71.086881, lat: 42.335218)
-Thing.create(city_id: 3811, lng: -71.040148, lat: 42.379131)
-Thing.create(city_id: 3812, lng: -71.039932, lat: 42.376849)
-Thing.create(city_id: 3813, lng: -71.112093, lat: 42.311269)
-Thing.create(city_id: 3814, lng: -71.098396, lat: 42.335245)
-Thing.create(city_id: 3815, lng: -71.115413, lat: 42.317099)
-Thing.create(city_id: 3816, lng: -71.075552, lat: 42.335148)
-Thing.create(city_id: 3817, lng: -71.040005, lat: 42.377688)
-Thing.create(city_id: 3818, lng: -71.139644, lat: 42.352667)
-Thing.create(city_id: 3819, lng: -71.038194, lat: 42.381307)
-Thing.create(city_id: 3820, lng: -71.142645, lat: 42.351622)
-Thing.create(city_id: 3821, lng: -71.03619, lat: 42.381305)
-Thing.create(city_id: 3822, lng: -71.051225, lat: 42.358746)
-Thing.create(city_id: 3823, lng: -71.075596, lat: 42.387727)
-Thing.create(city_id: 3824, lng: -71.066581, lat: 42.335061)
-Thing.create(city_id: 3825, lng: -71.062146, lat: 42.364716)
-Thing.create(city_id: 3826, lng: -71.092689, lat: 42.335153)
-Thing.create(city_id: 3827, lng: -71.076712, lat: 42.387414)
-Thing.create(city_id: 3828, lng: -71.072705, lat: 42.387193)
-Thing.create(city_id: 3829, lng: -71.149858, lat: 42.335298)
-Thing.create(city_id: 3830, lng: -71.072664, lat: 42.384741)
-Thing.create(city_id: 3831, lng: -71.075136, lat: 42.386801)
-Thing.create(city_id: 3832, lng: -71.073041, lat: 42.386557)
-Thing.create(city_id: 3833, lng: -71.074192, lat: 42.386939)
-Thing.create(city_id: 3834, lng: -71.034424, lat: 42.334841)
-Thing.create(city_id: 3835, lng: -71.095923, lat: 42.335062)
-Thing.create(city_id: 3836, lng: -71.06461, lat: 42.334943)
-Thing.create(city_id: 3837, lng: -71.067826, lat: 42.334953)
-Thing.create(city_id: 3838, lng: -71.075772, lat: 42.386204)
-Thing.create(city_id: 3839, lng: -71.074155, lat: 42.38619)
-Thing.create(city_id: 3840, lng: -71.102977, lat: 42.33507)
-Thing.create(city_id: 3841, lng: -71.076493, lat: 42.386115)
-Thing.create(city_id: 3842, lng: -71.108224, lat: 42.335084)
-Thing.create(city_id: 3843, lng: -71.073398, lat: 42.385903)
-Thing.create(city_id: 3844, lng: -71.072277, lat: 42.334927)
-Thing.create(city_id: 3845, lng: -71.100166, lat: 42.335025)
-Thing.create(city_id: 3846, lng: -71.076003, lat: 42.38578)
-Thing.create(city_id: 3847, lng: -71.077509, lat: 42.385749)
-Thing.create(city_id: 3848, lng: -71.074461, lat: 42.385637)
-Thing.create(city_id: 3849, lng: -71.075628, lat: 42.385401)
-Thing.create(city_id: 3850, lng: -71.073687, lat: 42.385342)
-Thing.create(city_id: 3851, lng: -71.074818, lat: 42.385035)
-Thing.create(city_id: 3852, lng: -71.078014, lat: 42.384951)
-Thing.create(city_id: 3853, lng: -71.075035, lat: 42.334875)
-Thing.create(city_id: 3854, lng: -71.073033, lat: 42.384193)
-Thing.create(city_id: 3855, lng: -71.069594, lat: 42.38165)
-Thing.create(city_id: 3856, lng: -71.093219, lat: 42.334872)
-Thing.create(city_id: 3857, lng: -71.05262, lat: 42.326508)
-Thing.create(city_id: 3858, lng: -71.097391, lat: 42.334859)
-Thing.create(city_id: 3859, lng: -71.071255, lat: 42.381515)
-Thing.create(city_id: 3860, lng: -71.089546, lat: 42.334819)
-Thing.create(city_id: 3861, lng: -71.053895, lat: 42.325236)
-Thing.create(city_id: 3862, lng: -71.070414, lat: 42.381851)
-Thing.create(city_id: 3863, lng: -71.068916, lat: 42.380388)
-Thing.create(city_id: 3864, lng: -71.049052, lat: 42.322825)
-Thing.create(city_id: 3865, lng: -71.070093, lat: 42.380308)
-Thing.create(city_id: 3866, lng: -71.101898, lat: 42.334816)
-Thing.create(city_id: 3867, lng: -71.048684, lat: 42.326123)
-Thing.create(city_id: 3868, lng: -71.106121, lat: 42.334823)
-Thing.create(city_id: 3869, lng: -71.107107, lat: 42.334826)
-Thing.create(city_id: 3870, lng: -71.068422, lat: 42.379964)
-Thing.create(city_id: 3871, lng: -71.07901, lat: 42.381722)
-Thing.create(city_id: 3872, lng: -71.070312, lat: 42.379779)
-Thing.create(city_id: 3873, lng: -71.102921, lat: 42.334738)
-Thing.create(city_id: 3874, lng: -71.071616, lat: 42.381228)
-Thing.create(city_id: 3875, lng: -71.074328, lat: 42.379203)
-Thing.create(city_id: 3876, lng: -71.10387, lat: 42.334702)
-Thing.create(city_id: 3877, lng: -71.072118, lat: 42.381018)
-Thing.create(city_id: 3878, lng: -71.071798, lat: 42.334546)
-Thing.create(city_id: 3879, lng: -71.07031, lat: 42.37936)
-Thing.create(city_id: 3880, lng: -71.085021, lat: 42.334546)
-Thing.create(city_id: 3881, lng: -71.070634, lat: 42.380864)
-Thing.create(city_id: 3882, lng: -71.068265, lat: 42.38064)
-Thing.create(city_id: 3883, lng: -71.069208, lat: 42.379397)
-Thing.create(city_id: 3884, lng: -71.078019, lat: 42.334425)
-Thing.create(city_id: 3885, lng: -71.067861, lat: 42.379487)
-Thing.create(city_id: 3886, lng: -71.096421, lat: 42.334485)
-Thing.create(city_id: 3887, lng: -71.094065, lat: 42.334454)
-Thing.create(city_id: 3888, lng: -71.104441, lat: 42.334463)
-Thing.create(city_id: 3889, lng: -71.06654, lat: 42.379285)
-Thing.create(city_id: 3890, lng: -71.103652, lat: 42.33445)
-Thing.create(city_id: 3891, lng: -71.046759, lat: 42.334159)
-Thing.create(city_id: 3892, lng: -71.102989, lat: 42.334354)
-Thing.create(city_id: 3893, lng: -71.075894, lat: 42.334252)
-Thing.create(city_id: 3894, lng: -71.100624, lat: 42.334331)
-Thing.create(city_id: 3895, lng: -71.089644, lat: 42.334273)
-Thing.create(city_id: 3896, lng: -71.100335, lat: 42.334306)
-Thing.create(city_id: 3897, lng: -71.064185, lat: 42.334167)
-Thing.create(city_id: 3898, lng: -71.095261, lat: 42.337986)
-Thing.create(city_id: 3899, lng: -71.032268, lat: 42.333116)
-Thing.create(city_id: 3900, lng: -71.146685, lat: 42.338138)
-Thing.create(city_id: 3901, lng: -71.031291, lat: 42.333112)
-Thing.create(city_id: 3902, lng: -71.089234, lat: 42.33793)
-Thing.create(city_id: 3903, lng: -71.099765, lat: 42.337957)
-Thing.create(city_id: 3904, lng: -71.033371, lat: 42.333094)
-Thing.create(city_id: 3905, lng: -71.034399, lat: 42.33307)
-Thing.create(city_id: 3906, lng: -71.042899, lat: 42.337718)
-Thing.create(city_id: 3907, lng: -71.03632, lat: 42.333048)
-Thing.create(city_id: 3908, lng: -71.037539, lat: 42.333032)
-Thing.create(city_id: 3909, lng: -71.024314, lat: 42.337595)
-Thing.create(city_id: 3910, lng: -71.152925, lat: 42.338046)
-Thing.create(city_id: 3911, lng: -71.105127, lat: 42.33789)
-Thing.create(city_id: 3912, lng: -71.105598, lat: 42.337887)
-Thing.create(city_id: 3913, lng: -71.038611, lat: 42.333008)
-Thing.create(city_id: 3914, lng: -71.082851, lat: 42.337768)
-Thing.create(city_id: 3915, lng: -71.026214, lat: 42.337525)
-Thing.create(city_id: 3916, lng: -71.072586, lat: 42.383897)
-Thing.create(city_id: 3917, lng: -71.148919, lat: 42.337939)
-Thing.create(city_id: 3918, lng: -71.102899, lat: 42.33778)
-Thing.create(city_id: 3919, lng: -71.074076, lat: 42.383882)
-Thing.create(city_id: 3920, lng: -71.077744, lat: 42.383859)
-Thing.create(city_id: 3921, lng: -71.09307, lat: 42.337714)
-Thing.create(city_id: 3922, lng: -71.091873, lat: 42.337709)
-Thing.create(city_id: 3923, lng: -71.110414, lat: 42.337765)
-Thing.create(city_id: 3924, lng: -71.068858, lat: 42.383707)
-Thing.create(city_id: 3925, lng: -71.106604, lat: 42.33774)
-Thing.create(city_id: 3926, lng: -71.074791, lat: 42.38368)
-Thing.create(city_id: 3927, lng: -71.069761, lat: 42.383664)
-Thing.create(city_id: 3928, lng: -71.071818, lat: 42.383577)
-Thing.create(city_id: 3929, lng: -71.096144, lat: 42.337649)
-Thing.create(city_id: 3930, lng: -71.147357, lat: 42.337813)
-Thing.create(city_id: 3931, lng: -71.108741, lat: 42.337683)
-Thing.create(city_id: 3932, lng: -71.08983, lat: 42.337577)
-Thing.create(city_id: 3933, lng: -71.090977, lat: 42.33757)
-Thing.create(city_id: 3934, lng: -71.105449, lat: 42.337619)
-Thing.create(city_id: 3935, lng: -71.038762, lat: 42.337323)
-Thing.create(city_id: 3936, lng: -71.043481, lat: 42.337326)
-Thing.create(city_id: 3937, lng: -71.098204, lat: 42.337484)
-Thing.create(city_id: 3938, lng: -71.064334, lat: 42.337348)
-Thing.create(city_id: 3939, lng: -71.094776, lat: 42.337455)
-Thing.create(city_id: 3940, lng: -71.071025, lat: 42.383543)
-Thing.create(city_id: 3941, lng: -71.096569, lat: 42.33768)
-Thing.create(city_id: 3942, lng: -71.099026, lat: 42.337563)
-Thing.create(city_id: 3943, lng: -71.095599, lat: 42.337508)
-Thing.create(city_id: 3944, lng: -71.072955, lat: 42.383479)
-Thing.create(city_id: 3945, lng: -71.075058, lat: 42.383261)
-Thing.create(city_id: 3946, lng: -71.10449, lat: 42.337449)
-Thing.create(city_id: 3947, lng: -71.067697, lat: 42.383281)
-Thing.create(city_id: 3948, lng: -71.150644, lat: 42.337559)
-Thing.create(city_id: 3949, lng: -71.07324, lat: 42.38291)
-Thing.create(city_id: 3950, lng: -71.072644, lat: 42.382961)
-Thing.create(city_id: 3951, lng: -71.082135, lat: 42.337272)
-Thing.create(city_id: 3952, lng: -71.0685, lat: 42.337165)
-Thing.create(city_id: 3953, lng: -71.082781, lat: 42.337214)
-Thing.create(city_id: 3954, lng: -71.057174, lat: 42.337112)
-Thing.create(city_id: 3955, lng: -71.096338, lat: 42.337255)
-Thing.create(city_id: 3956, lng: -71.09712, lat: 42.337238)
-Thing.create(city_id: 3957, lng: -71.077512, lat: 42.383304)
-Thing.create(city_id: 3958, lng: -71.10027, lat: 42.337227)
-Thing.create(city_id: 3959, lng: -71.092715, lat: 42.337191)
-Thing.create(city_id: 3960, lng: -71.069412, lat: 42.383142)
-Thing.create(city_id: 3961, lng: -71.147842, lat: 42.337354)
-Thing.create(city_id: 3962, lng: -71.151651, lat: 42.337351)
-Thing.create(city_id: 3963, lng: -71.078262, lat: 42.383129)
-Thing.create(city_id: 3964, lng: -71.088234, lat: 42.337107)
-Thing.create(city_id: 3965, lng: -71.147201, lat: 42.337273)
-Thing.create(city_id: 3966, lng: -71.098207, lat: 42.337105)
-Thing.create(city_id: 3967, lng: -71.093771, lat: 42.337088)
-Thing.create(city_id: 3968, lng: -71.103639, lat: 42.337115)
-Thing.create(city_id: 3969, lng: -71.109338, lat: 42.33713)
-Thing.create(city_id: 3970, lng: -71.150045, lat: 42.337232)
-Thing.create(city_id: 3971, lng: -71.107262, lat: 42.337087)
-Thing.create(city_id: 3972, lng: -71.092264, lat: 42.337021)
-Thing.create(city_id: 3973, lng: -71.148792, lat: 42.337157)
-Thing.create(city_id: 3974, lng: -71.089417, lat: 42.336929)
-Thing.create(city_id: 3975, lng: -71.070868, lat: 42.382962)
-Thing.create(city_id: 3976, lng: -71.152047, lat: 42.337113)
-Thing.create(city_id: 3977, lng: -71.028273, lat: 42.336668)
-Thing.create(city_id: 3978, lng: -71.097929, lat: 42.336923)
-Thing.create(city_id: 3979, lng: -71.029112, lat: 42.336656)
-Thing.create(city_id: 3980, lng: -71.068803, lat: 42.382979)
-Thing.create(city_id: 3981, lng: -71.030276, lat: 42.336638)
-Thing.create(city_id: 3982, lng: -71.081487, lat: 42.33683)
-Thing.create(city_id: 3983, lng: -71.031387, lat: 42.336633)
-Thing.create(city_id: 3984, lng: -71.091077, lat: 42.336845)
-Thing.create(city_id: 3985, lng: -71.06813, lat: 42.382676)
-Thing.create(city_id: 3986, lng: -71.104532, lat: 42.336877)
-Thing.create(city_id: 3987, lng: -71.077732, lat: 42.382659)
-Thing.create(city_id: 3988, lng: -71.070059, lat: 42.382566)
-Thing.create(city_id: 3989, lng: -71.02713, lat: 42.336554)
-Thing.create(city_id: 3990, lng: -71.086313, lat: 42.336768)
-Thing.create(city_id: 3991, lng: -71.064625, lat: 42.336664)
-Thing.create(city_id: 3992, lng: -71.097564, lat: 42.336774)
-Thing.create(city_id: 3993, lng: -71.070574, lat: 42.382542)
-Thing.create(city_id: 3994, lng: -71.06622, lat: 42.382659)
-Thing.create(city_id: 3995, lng: -71.08375, lat: 42.336709)
-Thing.create(city_id: 3996, lng: -71.087516, lat: 42.336719)
-Thing.create(city_id: 3997, lng: -71.039125, lat: 42.38313)
-Thing.create(city_id: 3998, lng: -71.102624, lat: 42.336725)
-Thing.create(city_id: 3999, lng: -71.038355, lat: 42.383125)
-Thing.create(city_id: 4000, lng: -71.149696, lat: 42.33685)
-Thing.create(city_id: 4001, lng: -71.030501, lat: 42.38263)
-Thing.create(city_id: 4002, lng: -71.033364, lat: 42.382638)
-Thing.create(city_id: 4003, lng: -71.09017, lat: 42.336619)
-Thing.create(city_id: 4004, lng: -71.037184, lat: 42.382647)
-Thing.create(city_id: 4005, lng: -71.075509, lat: 42.388919)
-Thing.create(city_id: 4006, lng: -71.039443, lat: 42.382655)
-Thing.create(city_id: 4007, lng: -71.040324, lat: 42.382646)
-Thing.create(city_id: 4008, lng: -71.02617, lat: 42.336705)
-Thing.create(city_id: 4009, lng: -71.098737, lat: 42.336613)
-Thing.create(city_id: 4010, lng: -71.100693, lat: 42.336612)
-Thing.create(city_id: 4011, lng: -71.072438, lat: 42.387687)
-Thing.create(city_id: 4012, lng: -71.041739, lat: 42.378605)
-Thing.create(city_id: 4013, lng: -71.086838, lat: 42.336494)
-Thing.create(city_id: 4014, lng: -71.106442, lat: 42.336496)
-Thing.create(city_id: 4015, lng: -71.151459, lat: 42.336627)
-Thing.create(city_id: 4016, lng: -71.064976, lat: 42.375836)
-Thing.create(city_id: 4017, lng: -71.054382, lat: 42.376001)
-Thing.create(city_id: 4018, lng: -71.097342, lat: 42.336406)
-Thing.create(city_id: 4019, lng: -71.059238, lat: 42.375798)
-Thing.create(city_id: 4020, lng: -71.093339, lat: 42.336375)
-Thing.create(city_id: 4021, lng: -71.062129, lat: 42.375301)
-Thing.create(city_id: 4022, lng: -71.062773, lat: 42.375315)
-Thing.create(city_id: 4023, lng: -71.091952, lat: 42.33636)
-Thing.create(city_id: 4024, lng: -71.069071, lat: 42.336261)
-Thing.create(city_id: 4025, lng: -71.098585, lat: 42.336337)
-Thing.create(city_id: 4026, lng: -71.149085, lat: 42.336467)
-Thing.create(city_id: 4027, lng: -71.101544, lat: 42.336311)
-Thing.create(city_id: 4028, lng: -71.108347, lat: 42.336287)
-Thing.create(city_id: 4029, lng: -71.15068, lat: 42.336417)
-Thing.create(city_id: 4030, lng: -71.099717, lat: 42.336242)
-Thing.create(city_id: 4031, lng: -71.046345, lat: 42.336039)
-Thing.create(city_id: 4032, lng: -71.094011, lat: 42.33621)
-Thing.create(city_id: 4033, lng: -71.066412, lat: 42.375886)
-Thing.create(city_id: 4034, lng: -71.060461, lat: 42.375528)
-Thing.create(city_id: 4035, lng: -71.050035, lat: 42.336028)
-Thing.create(city_id: 4036, lng: -71.057017, lat: 42.375252)
-Thing.create(city_id: 4037, lng: -71.079981, lat: 42.336112)
-Thing.create(city_id: 4038, lng: -71.057043, lat: 42.37574)
-Thing.create(city_id: 4039, lng: -71.056638, lat: 42.375169)
-Thing.create(city_id: 4040, lng: -71.078635, lat: 42.336052)
-Thing.create(city_id: 4041, lng: -71.054177, lat: 42.375599)
-Thing.create(city_id: 4042, lng: -71.058519, lat: 42.375449)
-Thing.create(city_id: 4043, lng: -71.055113, lat: 42.375024)
-Thing.create(city_id: 4044, lng: -71.055234, lat: 42.375479)
-Thing.create(city_id: 4045, lng: -71.065779, lat: 42.374966)
-Thing.create(city_id: 4046, lng: -71.06005, lat: 42.37522)
-Thing.create(city_id: 4047, lng: -71.150175, lat: 42.3362)
-Thing.create(city_id: 4048, lng: -71.055844, lat: 42.375086)
-Thing.create(city_id: 4049, lng: -71.069955, lat: 42.335912)
-Thing.create(city_id: 4050, lng: -71.105707, lat: 42.336028)
-Thing.create(city_id: 4051, lng: -71.063676, lat: 42.375031)
-Thing.create(city_id: 4052, lng: -71.064189, lat: 42.375164)
-Thing.create(city_id: 4053, lng: -71.099561, lat: 42.33598)
-Thing.create(city_id: 4054, lng: -71.059059, lat: 42.375086)
-Thing.create(city_id: 4055, lng: -71.0651, lat: 42.374994)
-Thing.create(city_id: 4056, lng: -71.061807, lat: 42.37487)
-Thing.create(city_id: 4057, lng: -71.038442, lat: 42.330549)
-Thing.create(city_id: 4058, lng: -71.113326, lat: 42.313389)
-Thing.create(city_id: 4059, lng: -71.061222, lat: 42.374855)
-Thing.create(city_id: 4060, lng: -71.104429, lat: 42.330786)
-Thing.create(city_id: 4061, lng: -71.08531, lat: 42.330716)
-Thing.create(city_id: 4062, lng: -71.077899, lat: 42.330688)
-Thing.create(city_id: 4063, lng: -71.094934, lat: 42.330745)
-Thing.create(city_id: 4064, lng: -71.109391, lat: 42.330792)
-Thing.create(city_id: 4065, lng: -71.112562, lat: 42.330796)
-Thing.create(city_id: 4066, lng: -71.06086, lat: 42.374703)
-Thing.create(city_id: 4067, lng: -71.060276, lat: 42.373783)
-Thing.create(city_id: 4068, lng: -71.058203, lat: 42.374834)
-Thing.create(city_id: 4069, lng: -71.055002, lat: 42.374457)
-Thing.create(city_id: 4070, lng: -71.088723, lat: 42.330684)
-Thing.create(city_id: 4071, lng: -71.063712, lat: 42.37447)
-Thing.create(city_id: 4072, lng: -71.05816, lat: 42.37442)
-Thing.create(city_id: 4073, lng: -71.063148, lat: 42.37467)
-Thing.create(city_id: 4074, lng: -71.082888, lat: 42.330617)
-Thing.create(city_id: 4075, lng: -71.078653, lat: 42.330592)
-Thing.create(city_id: 4076, lng: -71.060035, lat: 42.374653)
-Thing.create(city_id: 4077, lng: -71.070166, lat: 42.330543)
-Thing.create(city_id: 4078, lng: -71.061616, lat: 42.37357)
-Thing.create(city_id: 4079, lng: -71.058803, lat: 42.37434)
-Thing.create(city_id: 4080, lng: -71.084557, lat: 42.330558)
-Thing.create(city_id: 4081, lng: -71.059677, lat: 42.374249)
-Thing.create(city_id: 4082, lng: -71.086181, lat: 42.331175)
-Thing.create(city_id: 4083, lng: -71.097484, lat: 42.331169)
-Thing.create(city_id: 4084, lng: -71.076382, lat: 42.331045)
-Thing.create(city_id: 4085, lng: -71.098747, lat: 42.331054)
-Thing.create(city_id: 4086, lng: -71.10073, lat: 42.330998)
-Thing.create(city_id: 4087, lng: -71.07213, lat: 42.330831)
-Thing.create(city_id: 4088, lng: -71.157072, lat: 42.331092)
-Thing.create(city_id: 4089, lng: -71.085162, lat: 42.330775)
-Thing.create(city_id: 4090, lng: -71.08025, lat: 42.330513)
-Thing.create(city_id: 4091, lng: -71.093014, lat: 42.330553)
-Thing.create(city_id: 4092, lng: -71.099523, lat: 42.330562)
-Thing.create(city_id: 4093, lng: -71.083387, lat: 42.330491)
-Thing.create(city_id: 4094, lng: -71.097959, lat: 42.33054)
-Thing.create(city_id: 4095, lng: -71.08115, lat: 42.330461)
-Thing.create(city_id: 4096, lng: -71.103412, lat: 42.33054)
-Thing.create(city_id: 4097, lng: -71.059773, lat: 42.373872)
-Thing.create(city_id: 4098, lng: -71.062482, lat: 42.37421)
-Thing.create(city_id: 4099, lng: -71.065398, lat: 42.330385)
-Thing.create(city_id: 4100, lng: -71.108416, lat: 42.330532)
-Thing.create(city_id: 4101, lng: -71.07481, lat: 42.330408)
-Thing.create(city_id: 4102, lng: -71.055818, lat: 42.374051)
-Thing.create(city_id: 4103, lng: -71.056868, lat: 42.330333)
-Thing.create(city_id: 4104, lng: -71.100631, lat: 42.330479)
-Thing.create(city_id: 4105, lng: -71.105614, lat: 42.330491)
-Thing.create(city_id: 4106, lng: -71.088053, lat: 42.330428)
-Thing.create(city_id: 4107, lng: -71.108259, lat: 42.330489)
-Thing.create(city_id: 4108, lng: -71.062762, lat: 42.373667)
-Thing.create(city_id: 4109, lng: -71.081899, lat: 42.330388)
-Thing.create(city_id: 4110, lng: -71.111606, lat: 42.330437)
-Thing.create(city_id: 4111, lng: -71.083267, lat: 42.330301)
-Thing.create(city_id: 4112, lng: -71.107735, lat: 42.330352)
-Thing.create(city_id: 4113, lng: -71.102472, lat: 42.330322)
-Thing.create(city_id: 4114, lng: -71.09379, lat: 42.330283)
-Thing.create(city_id: 4115, lng: -71.089144, lat: 42.330264)
-Thing.create(city_id: 4116, lng: -71.061704, lat: 42.330131)
-Thing.create(city_id: 4117, lng: -71.084061, lat: 42.330213)
-Thing.create(city_id: 4118, lng: -71.092885, lat: 42.33024)
-Thing.create(city_id: 4119, lng: -71.08563, lat: 42.330199)
-Thing.create(city_id: 4120, lng: -71.052804, lat: 42.330075)
-Thing.create(city_id: 4121, lng: -71.059827, lat: 42.372442)
-Thing.create(city_id: 4122, lng: -71.091587, lat: 42.33021)
-Thing.create(city_id: 4123, lng: -71.094614, lat: 42.330214)
-Thing.create(city_id: 4124, lng: -71.070702, lat: 42.330122)
-Thing.create(city_id: 4125, lng: -71.065409, lat: 42.373247)
-Thing.create(city_id: 4126, lng: -71.080349, lat: 42.330144)
-Thing.create(city_id: 4127, lng: -71.095492, lat: 42.330161)
-Thing.create(city_id: 4128, lng: -71.083044, lat: 42.330116)
-Thing.create(city_id: 4129, lng: -71.090455, lat: 42.330135)
-Thing.create(city_id: 4130, lng: -71.058518, lat: 42.373427)
-Thing.create(city_id: 4131, lng: -71.096978, lat: 42.330153)
-Thing.create(city_id: 4132, lng: -71.084757, lat: 42.330109)
-Thing.create(city_id: 4133, lng: -71.078329, lat: 42.330082)
-Thing.create(city_id: 4134, lng: -71.104334, lat: 42.330171)
-Thing.create(city_id: 4135, lng: -71.107038, lat: 42.330166)
-Thing.create(city_id: 4136, lng: -71.08726, lat: 42.330091)
-Thing.create(city_id: 4137, lng: -71.108836, lat: 42.330148)
-Thing.create(city_id: 4138, lng: -71.078633, lat: 42.330024)
-Thing.create(city_id: 4139, lng: -71.063586, lat: 42.329954)
-Thing.create(city_id: 4140, lng: -71.062148, lat: 42.373447)
-Thing.create(city_id: 4141, lng: -71.076132, lat: 42.32997)
-Thing.create(city_id: 4142, lng: -71.06355, lat: 42.37325)
-Thing.create(city_id: 4143, lng: -71.081984, lat: 42.329974)
-Thing.create(city_id: 4144, lng: -71.072137, lat: 42.329925)
-Thing.create(city_id: 4145, lng: -71.062023, lat: 42.372901)
-Thing.create(city_id: 4146, lng: -71.058535, lat: 42.372366)
-Thing.create(city_id: 4147, lng: -71.057518, lat: 42.372833)
-Thing.create(city_id: 4148, lng: -71.092331, lat: 42.32994)
-Thing.create(city_id: 4149, lng: -71.112184, lat: 42.329995)
-Thing.create(city_id: 4150, lng: -71.106288, lat: 42.329974)
-Thing.create(city_id: 4151, lng: -71.061145, lat: 42.372974)
-Thing.create(city_id: 4152, lng: -71.058888, lat: 42.372197)
-Thing.create(city_id: 4153, lng: -71.103271, lat: 42.329912)
-Thing.create(city_id: 4154, lng: -71.069281, lat: 42.329783)
-Thing.create(city_id: 4155, lng: -71.081143, lat: 42.329826)
-Thing.create(city_id: 4156, lng: -71.070382, lat: 42.329776)
-Thing.create(city_id: 4157, lng: -71.085915, lat: 42.329827)
-Thing.create(city_id: 4158, lng: -71.082335, lat: 42.329814)
-Thing.create(city_id: 4159, lng: -71.064675, lat: 42.372923)
-Thing.create(city_id: 4160, lng: -71.057974, lat: 42.372707)
-Thing.create(city_id: 4161, lng: -71.111301, lat: 42.32988)
-Thing.create(city_id: 4162, lng: -71.091371, lat: 42.329809)
-Thing.create(city_id: 4163, lng: -71.100579, lat: 42.329821)
-Thing.create(city_id: 4164, lng: -71.09304, lat: 42.329792)
-Thing.create(city_id: 4165, lng: -71.061871, lat: 42.372315)
-Thing.create(city_id: 4166, lng: -71.081873, lat: 42.329693)
-Thing.create(city_id: 4167, lng: -71.105623, lat: 42.329771)
-Thing.create(city_id: 4168, lng: -71.071429, lat: 42.329611)
-Thing.create(city_id: 4169, lng: -71.088913, lat: 42.329666)
-Thing.create(city_id: 4170, lng: -71.086507, lat: 42.329643)
-Thing.create(city_id: 4171, lng: -71.074075, lat: 42.329588)
-Thing.create(city_id: 4172, lng: -71.108921, lat: 42.329659)
-Thing.create(city_id: 4173, lng: -71.039803, lat: 42.332906)
-Thing.create(city_id: 4174, lng: -71.034153, lat: 42.334562)
-Thing.create(city_id: 4175, lng: -71.025251, lat: 42.338207)
-Thing.create(city_id: 4176, lng: -71.025226, lat: 42.337414)
-Thing.create(city_id: 4177, lng: -71.086338, lat: 42.33422)
-Thing.create(city_id: 4178, lng: -71.056539, lat: 42.3341)
-Thing.create(city_id: 4179, lng: -71.106257, lat: 42.334268)
-Thing.create(city_id: 4180, lng: -71.025209, lat: 42.336595)
-Thing.create(city_id: 4181, lng: -71.026152, lat: 42.335877)
-Thing.create(city_id: 4182, lng: -71.025195, lat: 42.335693)
-Thing.create(city_id: 4183, lng: -71.067013, lat: 42.334085)
-Thing.create(city_id: 4184, lng: -71.091581, lat: 42.33417)
-Thing.create(city_id: 4185, lng: -71.094983, lat: 42.334706)
-Thing.create(city_id: 4186, lng: -71.105408, lat: 42.334596)
-Thing.create(city_id: 4187, lng: -71.026097, lat: 42.334152)
-Thing.create(city_id: 4188, lng: -71.083938, lat: 42.334373)
-Thing.create(city_id: 4189, lng: -71.025153, lat: 42.334047)
-Thing.create(city_id: 4190, lng: -71.027053, lat: 42.334172)
-Thing.create(city_id: 4191, lng: -71.027016, lat: 42.33319)
-Thing.create(city_id: 4192, lng: -71.07747, lat: 42.334101)
-Thing.create(city_id: 4193, lng: -71.102291, lat: 42.334185)
-Thing.create(city_id: 4194, lng: -71.054108, lat: 42.340732)
-Thing.create(city_id: 4195, lng: -71.072256, lat: 42.334051)
-Thing.create(city_id: 4196, lng: -71.104331, lat: 42.334157)
-Thing.create(city_id: 4197, lng: -71.043661, lat: 42.342517)
-Thing.create(city_id: 4198, lng: -71.050952, lat: 42.342125)
-Thing.create(city_id: 4199, lng: -71.052219, lat: 42.342088)
-Thing.create(city_id: 4200, lng: -71.050325, lat: 42.341723)
-Thing.create(city_id: 4201, lng: -71.051823, lat: 42.341701)
-Thing.create(city_id: 4202, lng: -71.052965, lat: 42.341689)
-Thing.create(city_id: 4203, lng: -71.051848, lat: 42.341361)
-Thing.create(city_id: 4204, lng: -71.094523, lat: 42.334049)
-Thing.create(city_id: 4205, lng: -71.049459, lat: 42.341166)
-Thing.create(city_id: 4206, lng: -71.055597, lat: 42.333867)
-Thing.create(city_id: 4207, lng: -71.052187, lat: 42.341124)
-Thing.create(city_id: 4208, lng: -71.050741, lat: 42.341021)
-Thing.create(city_id: 4209, lng: -71.060237, lat: 42.372202)
-Thing.create(city_id: 4210, lng: -71.083059, lat: 42.333913)
-Thing.create(city_id: 4211, lng: -71.022755, lat: 42.333675)
-Thing.create(city_id: 4212, lng: -71.063707, lat: 42.371967)
-Thing.create(city_id: 4213, lng: -71.095522, lat: 42.333915)
-Thing.create(city_id: 4214, lng: -71.090464, lat: 42.333876)
-Thing.create(city_id: 4215, lng: -71.104306, lat: 42.333915)
-Thing.create(city_id: 4216, lng: -71.105191, lat: 42.333857)
-Thing.create(city_id: 4217, lng: -71.111359, lat: 42.333875)
-Thing.create(city_id: 4218, lng: -71.100943, lat: 42.333836)
-Thing.create(city_id: 4219, lng: -71.062771, lat: 42.371794)
-Thing.create(city_id: 4220, lng: -71.085319, lat: 42.333759)
-Thing.create(city_id: 4221, lng: -71.053346, lat: 42.376132)
-Thing.create(city_id: 4222, lng: -71.094147, lat: 42.33377)
-Thing.create(city_id: 4223, lng: -71.090444, lat: 42.333751)
-Thing.create(city_id: 4224, lng: -71.060188, lat: 42.371578)
-Thing.create(city_id: 4225, lng: -71.099208, lat: 42.333773)
-Thing.create(city_id: 4226, lng: -71.084137, lat: 42.333703)
-Thing.create(city_id: 4227, lng: -71.052114, lat: 42.374314)
-Thing.create(city_id: 4228, lng: -71.082744, lat: 42.333673)
-Thing.create(city_id: 4229, lng: -71.075093, lat: 42.333636)
-Thing.create(city_id: 4230, lng: -71.10704, lat: 42.333738)
-Thing.create(city_id: 4231, lng: -71.06375, lat: 42.33356)
-Thing.create(city_id: 4232, lng: -71.070557, lat: 42.333571)
-Thing.create(city_id: 4233, lng: -71.084546, lat: 42.333619)
-Thing.create(city_id: 4234, lng: -71.062362, lat: 42.371402)
-Thing.create(city_id: 4235, lng: -71.060148, lat: 42.376859)
-Thing.create(city_id: 4236, lng: -71.065225, lat: 42.376644)
-Thing.create(city_id: 4237, lng: -71.053403, lat: 42.375622)
-Thing.create(city_id: 4238, lng: -71.071546, lat: 42.333528)
-Thing.create(city_id: 4239, lng: -71.103414, lat: 42.333631)
-Thing.create(city_id: 4240, lng: -71.050616, lat: 42.376773)
-Thing.create(city_id: 4241, lng: -71.093505, lat: 42.333575)
-Thing.create(city_id: 4242, lng: -71.052226, lat: 42.373019)
-Thing.create(city_id: 4243, lng: -71.051796, lat: 42.373064)
-Thing.create(city_id: 4244, lng: -71.088471, lat: 42.333513)
-Thing.create(city_id: 4245, lng: -71.089077, lat: 42.333513)
-Thing.create(city_id: 4246, lng: -71.09831, lat: 42.33354)
-Thing.create(city_id: 4247, lng: -71.10082, lat: 42.333541)
-Thing.create(city_id: 4248, lng: -71.087267, lat: 42.333471)
-Thing.create(city_id: 4249, lng: -71.052576, lat: 42.373608)
-Thing.create(city_id: 4250, lng: -71.082162, lat: 42.333427)
-Thing.create(city_id: 4251, lng: -71.095841, lat: 42.333456)
-Thing.create(city_id: 4252, lng: -71.091375, lat: 42.333439)
-Thing.create(city_id: 4253, lng: -71.051003, lat: 42.374804)
-Thing.create(city_id: 4254, lng: -71.051713, lat: 42.375392)
-Thing.create(city_id: 4255, lng: -71.036837, lat: 42.374208)
-Thing.create(city_id: 4256, lng: -71.086064, lat: 42.333391)
-Thing.create(city_id: 4257, lng: -71.052922, lat: 42.37503)
-Thing.create(city_id: 4258, lng: -71.052597, lat: 42.376125)
-Thing.create(city_id: 4259, lng: -71.050249, lat: 42.376148)
-Thing.create(city_id: 4260, lng: -71.090567, lat: 42.334013)
-Thing.create(city_id: 4261, lng: -71.080779, lat: 42.382254)
-Thing.create(city_id: 4262, lng: -71.034713, lat: 42.376031)
-Thing.create(city_id: 4263, lng: -71.039302, lat: 42.375294)
-Thing.create(city_id: 4264, lng: -71.086722, lat: 42.333794)
-Thing.create(city_id: 4265, lng: -71.080371, lat: 42.381519)
-Thing.create(city_id: 4266, lng: -71.037033, lat: 42.375094)
-Thing.create(city_id: 4267, lng: -71.152297, lat: 42.346168)
-Thing.create(city_id: 4268, lng: -71.03772, lat: 42.37449)
-Thing.create(city_id: 4269, lng: -71.045069, lat: 42.333617)
-Thing.create(city_id: 4270, lng: -71.042911, lat: 42.333428)
-Thing.create(city_id: 4271, lng: -71.050234, lat: 42.332998)
-Thing.create(city_id: 4272, lng: -71.023383, lat: 42.332967)
-Thing.create(city_id: 4273, lng: -71.089909, lat: 42.333223)
-Thing.create(city_id: 4274, lng: -71.106066, lat: 42.333268)
-Thing.create(city_id: 4275, lng: -71.041397, lat: 42.333401)
-Thing.create(city_id: 4276, lng: -71.094652, lat: 42.333206)
-Thing.create(city_id: 4277, lng: -71.051957, lat: 42.333433)
-Thing.create(city_id: 4278, lng: -71.102243, lat: 42.333215)
-Thing.create(city_id: 4279, lng: -71.10607, lat: 42.333226)
-Thing.create(city_id: 4280, lng: -71.04443, lat: 42.333212)
-Thing.create(city_id: 4281, lng: -71.097331, lat: 42.333167)
-Thing.create(city_id: 4282, lng: -71.050369, lat: 42.33316)
-Thing.create(city_id: 4283, lng: -71.093966, lat: 42.333154)
-Thing.create(city_id: 4284, lng: -71.047167, lat: 42.333005)
-Thing.create(city_id: 4285, lng: -71.07129, lat: 42.33305)
-Thing.create(city_id: 4286, lng: -71.04153, lat: 42.332933)
-Thing.create(city_id: 4287, lng: -71.052361, lat: 42.332996)
-Thing.create(city_id: 4288, lng: -71.063294, lat: 42.333004)
-Thing.create(city_id: 4289, lng: -71.042714, lat: 42.332925)
-Thing.create(city_id: 4290, lng: -71.053859, lat: 42.335545)
-Thing.create(city_id: 4291, lng: -71.111848, lat: 42.333171)
-Thing.create(city_id: 4292, lng: -71.108412, lat: 42.333155)
-Thing.create(city_id: 4293, lng: -71.04388, lat: 42.332907)
-Thing.create(city_id: 4294, lng: -71.045193, lat: 42.335862)
-Thing.create(city_id: 4295, lng: -71.083294, lat: 42.333046)
-Thing.create(city_id: 4296, lng: -71.046294, lat: 42.336631)
-Thing.create(city_id: 4297, lng: -71.109177, lat: 42.333115)
-Thing.create(city_id: 4298, lng: -71.049079, lat: 42.3378)
-Thing.create(city_id: 4299, lng: -71.039808, lat: 42.338115)
-Thing.create(city_id: 4300, lng: -71.080769, lat: 42.332984)
-Thing.create(city_id: 4301, lng: -71.081351, lat: 42.332983)
-Thing.create(city_id: 4302, lng: -71.049067, lat: 42.334812)
-Thing.create(city_id: 4303, lng: -71.092146, lat: 42.33301)
-Thing.create(city_id: 4304, lng: -71.076383, lat: 42.332945)
-Thing.create(city_id: 4305, lng: -71.095366, lat: 42.332965)
-Thing.create(city_id: 4306, lng: -71.111964, lat: 42.333016)
-Thing.create(city_id: 4307, lng: -71.084775, lat: 42.332885)
-Thing.create(city_id: 4308, lng: -71.031259, lat: 42.338153)
-Thing.create(city_id: 4309, lng: -71.08513, lat: 42.33286)
-Thing.create(city_id: 4310, lng: -71.029372, lat: 42.338143)
-Thing.create(city_id: 4311, lng: -71.066614, lat: 42.381855)
-Thing.create(city_id: 4312, lng: -71.069276, lat: 42.382158)
-Thing.create(city_id: 4313, lng: -71.072143, lat: 42.382089)
-Thing.create(city_id: 4314, lng: -71.110337, lat: 42.332881)
-Thing.create(city_id: 4315, lng: -71.107872, lat: 42.332872)
-Thing.create(city_id: 4316, lng: -71.071645, lat: 42.382102)
-Thing.create(city_id: 4317, lng: -71.1023, lat: 42.332764)
-Thing.create(city_id: 4318, lng: -71.089336, lat: 42.332691)
-Thing.create(city_id: 4319, lng: -71.109022, lat: 42.332719)
-Thing.create(city_id: 4320, lng: -71.06278, lat: 42.332463)
-Thing.create(city_id: 4321, lng: -71.094502, lat: 42.332568)
-Thing.create(city_id: 4322, lng: -71.105486, lat: 42.332604)
-Thing.create(city_id: 4323, lng: -71.064047, lat: 42.324572)
-Thing.create(city_id: 4324, lng: -71.080421, lat: 42.332496)
-Thing.create(city_id: 4325, lng: -71.083755, lat: 42.332499)
-Thing.create(city_id: 4326, lng: -71.056933, lat: 42.324362)
-Thing.create(city_id: 4327, lng: -71.059722, lat: 42.324451)
-Thing.create(city_id: 4328, lng: -71.056919, lat: 42.323516)
-Thing.create(city_id: 4329, lng: -71.057758, lat: 42.324309)
-Thing.create(city_id: 4330, lng: -71.105794, lat: 42.332547)
-Thing.create(city_id: 4331, lng: -71.056904, lat: 42.322644)
-Thing.create(city_id: 4332, lng: -71.062559, lat: 42.323965)
-Thing.create(city_id: 4333, lng: -71.100253, lat: 42.332487)
-Thing.create(city_id: 4334, lng: -71.085138, lat: 42.332425)
-Thing.create(city_id: 4335, lng: -71.082511, lat: 42.332396)
-Thing.create(city_id: 4336, lng: -71.057942, lat: 42.323738)
-Thing.create(city_id: 4337, lng: -71.060244, lat: 42.323731)
-Thing.create(city_id: 4338, lng: -71.066375, lat: 42.377463)
-Thing.create(city_id: 4339, lng: -71.059136, lat: 42.323229)
-Thing.create(city_id: 4340, lng: -71.10624, lat: 42.332451)
-Thing.create(city_id: 4341, lng: -71.060808, lat: 42.322967)
-Thing.create(city_id: 4342, lng: -71.061829, lat: 42.322835)
-Thing.create(city_id: 4343, lng: -71.059935, lat: 42.377109)
-Thing.create(city_id: 4344, lng: -71.054599, lat: 42.377494)
-Thing.create(city_id: 4345, lng: -71.062296, lat: 42.377449)
-Thing.create(city_id: 4346, lng: -71.058101, lat: 42.37737)
-Thing.create(city_id: 4347, lng: -71.062955, lat: 42.377317)
-Thing.create(city_id: 4348, lng: -71.093049, lat: 42.332386)
-Thing.create(city_id: 4349, lng: -71.081234, lat: 42.332339)
-Thing.create(city_id: 4350, lng: -71.056036, lat: 42.377241)
-Thing.create(city_id: 4351, lng: -71.064829, lat: 42.377304)
-Thing.create(city_id: 4352, lng: -71.058815, lat: 42.377174)
-Thing.create(city_id: 4353, lng: -71.111181, lat: 42.332413)
-Thing.create(city_id: 4354, lng: -71.061223, lat: 42.377017)
-Thing.create(city_id: 4355, lng: -71.058482, lat: 42.37699)
-Thing.create(city_id: 4356, lng: -71.051544, lat: 42.378752)
-Thing.create(city_id: 4357, lng: -71.079196, lat: 42.332272)
-Thing.create(city_id: 4358, lng: -71.052604, lat: 42.378651)
-Thing.create(city_id: 4359, lng: -71.1009, lat: 42.33233)
-Thing.create(city_id: 4360, lng: -71.050218, lat: 42.378552)
-Thing.create(city_id: 4361, lng: -71.053132, lat: 42.378378)
-Thing.create(city_id: 4362, lng: -71.095792, lat: 42.332265)
-Thing.create(city_id: 4363, lng: -71.101605, lat: 42.332274)
-Thing.create(city_id: 4364, lng: -71.040646, lat: 42.338111)
-Thing.create(city_id: 4365, lng: -71.112547, lat: 42.332303)
-Thing.create(city_id: 4366, lng: -71.029934, lat: 42.337755)
-Thing.create(city_id: 4367, lng: -71.051218, lat: 42.37806)
-Thing.create(city_id: 4368, lng: -71.107381, lat: 42.332223)
-Thing.create(city_id: 4369, lng: -71.0712, lat: 42.332082)
-Thing.create(city_id: 4370, lng: -71.099263, lat: 42.332174)
-Thing.create(city_id: 4371, lng: -71.070324, lat: 42.332064)
-Thing.create(city_id: 4372, lng: -71.096812, lat: 42.332053)
-Thing.create(city_id: 4373, lng: -71.084429, lat: 42.331964)
-Thing.create(city_id: 4374, lng: -71.084205, lat: 42.331963)
-Thing.create(city_id: 4375, lng: -71.110368, lat: 42.332039)
-Thing.create(city_id: 4376, lng: -71.079188, lat: 42.331917)
-Thing.create(city_id: 4377, lng: -71.106598, lat: 42.33201)
-Thing.create(city_id: 4378, lng: -71.103771, lat: 42.320803)
-Thing.create(city_id: 4379, lng: -71.028242, lat: 42.3375)
-Thing.create(city_id: 4380, lng: -71.030304, lat: 42.337467)
-Thing.create(city_id: 4381, lng: -71.031409, lat: 42.337397)
-Thing.create(city_id: 4382, lng: -71.050382, lat: 42.377973)
-Thing.create(city_id: 4383, lng: -71.098321, lat: 42.331917)
-Thing.create(city_id: 4384, lng: -71.104873, lat: 42.331918)
-Thing.create(city_id: 4385, lng: -71.079884, lat: 42.331815)
-Thing.create(city_id: 4386, lng: -71.035568, lat: 42.336602)
-Thing.create(city_id: 4387, lng: -71.073325, lat: 42.33175)
-Thing.create(city_id: 4388, lng: -71.081769, lat: 42.331776)
-Thing.create(city_id: 4389, lng: -71.034388, lat: 42.336437)
-Thing.create(city_id: 4390, lng: -71.03733, lat: 42.336407)
-Thing.create(city_id: 4391, lng: -71.108484, lat: 42.331825)
-Thing.create(city_id: 4392, lng: -71.033462, lat: 42.336431)
-Thing.create(city_id: 4393, lng: -71.158563, lat: 42.331952)
-Thing.create(city_id: 4394, lng: -71.093871, lat: 42.331741)
-Thing.create(city_id: 4395, lng: -71.096237, lat: 42.331725)
-Thing.create(city_id: 4396, lng: -71.111884, lat: 42.331774)
-Thing.create(city_id: 4397, lng: -71.038781, lat: 42.336381)
-Thing.create(city_id: 4398, lng: -71.071941, lat: 42.331615)
-Thing.create(city_id: 4399, lng: -71.09729, lat: 42.331701)
-Thing.create(city_id: 4400, lng: -71.040726, lat: 42.336346)
-Thing.create(city_id: 4401, lng: -71.112058, lat: 42.331732)
-Thing.create(city_id: 4402, lng: -71.028205, lat: 42.335842)
-Thing.create(city_id: 4403, lng: -71.052185, lat: 42.377954)
-Thing.create(city_id: 4404, lng: -71.03028, lat: 42.335804)
-Thing.create(city_id: 4405, lng: -71.031414, lat: 42.335783)
-Thing.create(city_id: 4406, lng: -71.049752, lat: 42.37792)
-Thing.create(city_id: 4407, lng: -71.083521, lat: 42.33157)
-Thing.create(city_id: 4408, lng: -71.032349, lat: 42.335772)
-Thing.create(city_id: 4409, lng: -71.053085, lat: 42.37726)
-Thing.create(city_id: 4410, lng: -71.102145, lat: 42.331617)
-Thing.create(city_id: 4411, lng: -71.085666, lat: 42.331559)
-Thing.create(city_id: 4412, lng: -71.101376, lat: 42.331614)
-Thing.create(city_id: 4413, lng: -71.033231, lat: 42.335757)
-Thing.create(city_id: 4414, lng: -71.078234, lat: 42.331524)
-Thing.create(city_id: 4415, lng: -71.050501, lat: 42.377287)
-Thing.create(city_id: 4416, lng: -71.034425, lat: 42.335747)
-Thing.create(city_id: 4417, lng: -71.051356, lat: 42.377253)
-Thing.create(city_id: 4418, lng: -71.035574, lat: 42.335726)
-Thing.create(city_id: 4419, lng: -71.036555, lat: 42.33572)
-Thing.create(city_id: 4420, lng: -71.038339, lat: 42.335675)
-Thing.create(city_id: 4421, lng: -71.072741, lat: 42.331442)
-Thing.create(city_id: 4422, lng: -71.099701, lat: 42.331536)
-Thing.create(city_id: 4423, lng: -71.112658, lat: 42.331567)
-Thing.create(city_id: 4424, lng: -71.1039, lat: 42.331537)
-Thing.create(city_id: 4425, lng: -71.052007, lat: 42.377032)
-Thing.create(city_id: 4426, lng: -71.082168, lat: 42.331436)
-Thing.create(city_id: 4427, lng: -71.107308, lat: 42.331523)
-Thing.create(city_id: 4428, lng: -71.031492, lat: 42.335594)
-Thing.create(city_id: 4429, lng: -71.081204, lat: 42.331421)
-Thing.create(city_id: 4430, lng: -71.085398, lat: 42.332114)
-Thing.create(city_id: 4431, lng: -71.109433, lat: 42.332071)
-Thing.create(city_id: 4432, lng: -71.039448, lat: 42.335669)
-Thing.create(city_id: 4433, lng: -71.04058, lat: 42.335634)
-Thing.create(city_id: 4434, lng: -71.038526, lat: 42.335105)
-Thing.create(city_id: 4435, lng: -71.0293, lat: 42.334961)
-Thing.create(city_id: 4436, lng: -71.094967, lat: 42.331445)
-Thing.create(city_id: 4437, lng: -71.08465, lat: 42.331407)
-Thing.create(city_id: 4438, lng: -71.093576, lat: 42.331436)
-Thing.create(city_id: 4439, lng: -71.030195, lat: 42.382158)
-Thing.create(city_id: 4440, lng: -71.080545, lat: 42.331368)
-Thing.create(city_id: 4441, lng: -71.110291, lat: 42.331461)
-Thing.create(city_id: 4442, lng: -71.074274, lat: 42.33133)
-Thing.create(city_id: 4443, lng: -71.031346, lat: 42.334922)
-Thing.create(city_id: 4444, lng: -71.028662, lat: 42.382082)
-Thing.create(city_id: 4445, lng: -71.030225, lat: 42.33492)
-Thing.create(city_id: 4446, lng: -71.157846, lat: 42.331578)
-Thing.create(city_id: 4447, lng: -71.040423, lat: 42.382164)
-Thing.create(city_id: 4448, lng: -71.091406, lat: 42.331352)
-Thing.create(city_id: 4449, lng: -71.037141, lat: 42.382034)
-Thing.create(city_id: 4450, lng: -71.109663, lat: 42.331379)
-Thing.create(city_id: 4451, lng: -71.094346, lat: 42.331283)
-Thing.create(city_id: 4452, lng: -71.107922, lat: 42.331301)
-Thing.create(city_id: 4453, lng: -71.070439, lat: 42.331162)
-Thing.create(city_id: 4454, lng: -71.10633, lat: 42.331261)
-Thing.create(city_id: 4455, lng: -71.07718, lat: 42.331148)
-Thing.create(city_id: 4456, lng: -71.092432, lat: 42.331177)
-Thing.create(city_id: 4457, lng: -71.032349, lat: 42.334882)
-Thing.create(city_id: 4458, lng: -71.039865, lat: 42.334787)
-Thing.create(city_id: 4459, lng: -71.038166, lat: 42.382037)
-Thing.create(city_id: 4460, lng: -71.075197, lat: 42.331092)
-Thing.create(city_id: 4461, lng: -71.089649, lat: 42.33113)
-Thing.create(city_id: 4462, lng: -71.082878, lat: 42.331102)
-Thing.create(city_id: 4463, lng: -71.108732, lat: 42.331188)
-Thing.create(city_id: 4464, lng: -71.035545, lat: 42.334829)
-Thing.create(city_id: 4465, lng: -71.111903, lat: 42.33117)
-Thing.create(city_id: 4466, lng: -71.105171, lat: 42.331146)
-Thing.create(city_id: 4467, lng: -71.090704, lat: 42.331093)
-Thing.create(city_id: 4468, lng: -71.062264, lat: 42.330972)
-Thing.create(city_id: 4469, lng: -71.036554, lat: 42.334814)
-Thing.create(city_id: 4470, lng: -71.102676, lat: 42.331057)
-Thing.create(city_id: 4471, lng: -71.074756, lat: 42.330956)
-Thing.create(city_id: 4472, lng: -71.032331, lat: 42.381912)
-Thing.create(city_id: 4473, lng: -71.079008, lat: 42.33094)
-Thing.create(city_id: 4474, lng: -71.093964, lat: 42.330989)
-Thing.create(city_id: 4475, lng: -71.081251, lat: 42.330896)
-Thing.create(city_id: 4476, lng: -71.092728, lat: 42.330927)
-Thing.create(city_id: 4477, lng: -71.101831, lat: 42.330958)
-Thing.create(city_id: 4478, lng: -71.080941, lat: 42.33088)
-Thing.create(city_id: 4479, lng: -71.034168, lat: 42.381918)
-Thing.create(city_id: 4480, lng: -71.097056, lat: 42.330918)
-Thing.create(city_id: 4481, lng: -71.038316, lat: 42.334787)
-Thing.create(city_id: 4482, lng: -71.040704, lat: 42.334744)
-Thing.create(city_id: 4483, lng: -71.035085, lat: 42.381921)
-Thing.create(city_id: 4484, lng: -71.03745, lat: 42.334637)
-Thing.create(city_id: 4485, lng: -71.034289, lat: 42.334545)
-Thing.create(city_id: 4486, lng: -71.063891, lat: 42.330762)
-Thing.create(city_id: 4487, lng: -71.096443, lat: 42.330843)
-Thing.create(city_id: 4488, lng: -71.03601, lat: 42.381875)
-Thing.create(city_id: 4489, lng: -71.156571, lat: 42.331002)
-Thing.create(city_id: 4490, lng: -71.072862, lat: 42.325871)
-Thing.create(city_id: 4491, lng: -71.104517, lat: 42.325918)
-Thing.create(city_id: 4492, lng: -71.083728, lat: 42.325841)
-Thing.create(city_id: 4493, lng: -71.085743, lat: 42.325788)
-Thing.create(city_id: 4494, lng: -71.052596, lat: 42.325662)
-Thing.create(city_id: 4495, lng: -71.082101, lat: 42.325749)
-Thing.create(city_id: 4496, lng: -71.074513, lat: 42.325691)
-Thing.create(city_id: 4497, lng: -71.068357, lat: 42.325641)
-Thing.create(city_id: 4498, lng: -71.072308, lat: 42.325642)
-Thing.create(city_id: 4499, lng: -71.075007, lat: 42.325646)
-Thing.create(city_id: 4500, lng: -71.069951, lat: 42.32559)
-Thing.create(city_id: 4501, lng: -71.105275, lat: 42.325712)
-Thing.create(city_id: 4502, lng: -71.08873, lat: 42.325641)
-Thing.create(city_id: 4503, lng: -71.094435, lat: 42.325625)
-Thing.create(city_id: 4504, lng: -71.100549, lat: 42.325645)
-Thing.create(city_id: 4505, lng: -71.099813, lat: 42.32564)
-Thing.create(city_id: 4506, lng: -71.10129, lat: 42.325637)
-Thing.create(city_id: 4507, lng: -71.097937, lat: 42.32561)
-Thing.create(city_id: 4508, lng: -71.077762, lat: 42.325532)
-Thing.create(city_id: 4509, lng: -71.108624, lat: 42.325629)
-Thing.create(city_id: 4510, lng: -71.087451, lat: 42.325522)
-Thing.create(city_id: 4511, lng: -71.099714, lat: 42.325564)
-Thing.create(city_id: 4512, lng: -71.073716, lat: 42.325443)
-Thing.create(city_id: 4513, lng: -71.083127, lat: 42.325475)
-Thing.create(city_id: 4514, lng: -71.088095, lat: 42.325473)
-Thing.create(city_id: 4515, lng: -71.091382, lat: 42.325468)
-Thing.create(city_id: 4516, lng: -71.07952, lat: 42.325408)
-Thing.create(city_id: 4517, lng: -71.075812, lat: 42.32538)
-Thing.create(city_id: 4518, lng: -71.096754, lat: 42.325446)
-Thing.create(city_id: 4519, lng: -71.072751, lat: 42.325351)
-Thing.create(city_id: 4520, lng: -71.089616, lat: 42.325408)
-Thing.create(city_id: 4521, lng: -71.084642, lat: 42.325379)
-Thing.create(city_id: 4522, lng: -71.088617, lat: 42.326403)
-Thing.create(city_id: 4523, lng: -71.110665, lat: 42.326395)
-Thing.create(city_id: 4524, lng: -71.077821, lat: 42.326239)
-Thing.create(city_id: 4525, lng: -71.07074, lat: 42.326129)
-Thing.create(city_id: 4526, lng: -71.089484, lat: 42.326104)
-Thing.create(city_id: 4527, lng: -71.086522, lat: 42.32597)
-Thing.create(city_id: 4528, lng: -71.112162, lat: 42.325436)
-Thing.create(city_id: 4529, lng: -71.111921, lat: 42.325428)
-Thing.create(city_id: 4530, lng: -71.107014, lat: 42.325388)
-Thing.create(city_id: 4531, lng: -71.086232, lat: 42.325313)
-Thing.create(city_id: 4532, lng: -71.081106, lat: 42.32527)
-Thing.create(city_id: 4533, lng: -71.108674, lat: 42.325318)
-Thing.create(city_id: 4534, lng: -71.06908, lat: 42.325152)
-Thing.create(city_id: 4535, lng: -71.06802, lat: 42.325147)
-Thing.create(city_id: 4536, lng: -71.104333, lat: 42.325227)
-Thing.create(city_id: 4537, lng: -71.071924, lat: 42.325106)
-Thing.create(city_id: 4538, lng: -71.07064, lat: 42.325099)
-Thing.create(city_id: 4539, lng: -71.106006, lat: 42.325218)
-Thing.create(city_id: 4540, lng: -71.075832, lat: 42.325088)
-Thing.create(city_id: 4541, lng: -71.107852, lat: 42.325185)
-Thing.create(city_id: 4542, lng: -71.073507, lat: 42.325039)
-Thing.create(city_id: 4543, lng: -71.083331, lat: 42.325068)
-Thing.create(city_id: 4544, lng: -71.075147, lat: 42.325038)
-Thing.create(city_id: 4545, lng: -71.095811, lat: 42.325106)
-Thing.create(city_id: 4546, lng: -71.097374, lat: 42.325104)
-Thing.create(city_id: 4547, lng: -71.090867, lat: 42.325059)
-Thing.create(city_id: 4548, lng: -71.105027, lat: 42.325046)
-Thing.create(city_id: 4549, lng: -71.093195, lat: 42.32499)
-Thing.create(city_id: 4550, lng: -71.07689, lat: 42.324921)
-Thing.create(city_id: 4551, lng: -71.08896, lat: 42.324956)
-Thing.create(city_id: 4552, lng: -71.10811, lat: 42.324979)
-Thing.create(city_id: 4553, lng: -71.099241, lat: 42.324936)
-Thing.create(city_id: 4554, lng: -71.100857, lat: 42.324935)
-Thing.create(city_id: 4555, lng: -71.08533, lat: 42.324879)
-Thing.create(city_id: 4556, lng: -71.098204, lat: 42.324919)
-Thing.create(city_id: 4557, lng: -71.087199, lat: 42.324874)
-Thing.create(city_id: 4558, lng: -71.069618, lat: 42.324808)
-Thing.create(city_id: 4559, lng: -71.110114, lat: 42.324927)
-Thing.create(city_id: 4560, lng: -71.088397, lat: 42.324839)
-Thing.create(city_id: 4561, lng: -71.09435, lat: 42.324846)
-Thing.create(city_id: 4562, lng: -71.078612, lat: 42.324767)
-Thing.create(city_id: 4563, lng: -71.074787, lat: 42.324691)
-Thing.create(city_id: 4564, lng: -71.101588, lat: 42.324777)
-Thing.create(city_id: 4565, lng: -71.107436, lat: 42.324777)
-Thing.create(city_id: 4566, lng: -71.085754, lat: 42.324681)
-Thing.create(city_id: 4567, lng: -71.089947, lat: 42.324695)
-Thing.create(city_id: 4568, lng: -71.106167, lat: 42.324735)
-Thing.create(city_id: 4569, lng: -71.07309, lat: 42.324588)
-Thing.create(city_id: 4570, lng: -71.096524, lat: 42.324655)
-Thing.create(city_id: 4571, lng: -71.097705, lat: 42.324626)
-Thing.create(city_id: 4572, lng: -71.071485, lat: 42.324504)
-Thing.create(city_id: 4573, lng: -71.095217, lat: 42.324581)
-Thing.create(city_id: 4574, lng: -71.112126, lat: 42.324632)
-Thing.create(city_id: 4575, lng: -71.072225, lat: 42.324484)
-Thing.create(city_id: 4576, lng: -71.076339, lat: 42.324445)
-Thing.create(city_id: 4577, lng: -71.074974, lat: 42.324438)
-Thing.create(city_id: 4578, lng: -71.069971, lat: 42.324388)
-Thing.create(city_id: 4579, lng: -71.087465, lat: 42.324442)
-Thing.create(city_id: 4580, lng: -71.091748, lat: 42.324418)
-Thing.create(city_id: 4581, lng: -71.068551, lat: 42.324323)
-Thing.create(city_id: 4582, lng: -71.077982, lat: 42.324339)
-Thing.create(city_id: 4583, lng: -71.084887, lat: 42.32435)
-Thing.create(city_id: 4584, lng: -71.086083, lat: 42.324323)
-Thing.create(city_id: 4585, lng: -71.108218, lat: 42.324391)
-Thing.create(city_id: 4586, lng: -71.111135, lat: 42.324398)
-Thing.create(city_id: 4587, lng: -71.093203, lat: 42.324327)
-Thing.create(city_id: 4588, lng: -71.084069, lat: 42.324294)
-Thing.create(city_id: 4589, lng: -71.083011, lat: 42.324274)
-Thing.create(city_id: 4590, lng: -71.067753, lat: 42.324217)
-Thing.create(city_id: 4591, lng: -71.088872, lat: 42.324287)
-Thing.create(city_id: 4592, lng: -71.098353, lat: 42.3243)
-Thing.create(city_id: 4593, lng: -71.074095, lat: 42.324193)
-Thing.create(city_id: 4594, lng: -71.073026, lat: 42.324166)
-Thing.create(city_id: 4595, lng: -71.105309, lat: 42.324266)
-Thing.create(city_id: 4596, lng: -71.079465, lat: 42.324127)
-Thing.create(city_id: 4597, lng: -71.097067, lat: 42.324158)
-Thing.create(city_id: 4598, lng: -71.081967, lat: 42.324066)
-Thing.create(city_id: 4599, lng: -71.113899, lat: 42.324176)
-Thing.create(city_id: 4600, lng: -71.109016, lat: 42.324797)
-Thing.create(city_id: 4601, lng: -71.080204, lat: 42.324644)
-Thing.create(city_id: 4602, lng: -71.075461, lat: 42.324553)
-Thing.create(city_id: 4603, lng: -71.109224, lat: 42.324516)
-Thing.create(city_id: 4604, lng: -71.104093, lat: 42.324412)
-Thing.create(city_id: 4605, lng: -71.081043, lat: 42.324272)
-Thing.create(city_id: 4606, lng: -71.106498, lat: 42.324298)
-Thing.create(city_id: 4607, lng: -71.082626, lat: 42.32406)
-Thing.create(city_id: 4608, lng: -71.095009, lat: 42.324093)
-Thing.create(city_id: 4609, lng: -71.110092, lat: 42.324128)
-Thing.create(city_id: 4610, lng: -71.07583, lat: 42.324004)
-Thing.create(city_id: 4611, lng: -71.094176, lat: 42.324057)
-Thing.create(city_id: 4612, lng: -71.077109, lat: 42.323969)
-Thing.create(city_id: 4613, lng: -71.095903, lat: 42.324023)
-Thing.create(city_id: 4614, lng: -71.112745, lat: 42.324064)
-Thing.create(city_id: 4615, lng: -71.085801, lat: 42.323955)
-Thing.create(city_id: 4616, lng: -71.071238, lat: 42.323895)
-Thing.create(city_id: 4617, lng: -71.090619, lat: 42.323952)
-Thing.create(city_id: 4618, lng: -71.074763, lat: 42.32388)
-Thing.create(city_id: 4619, lng: -71.101927, lat: 42.323966)
-Thing.create(city_id: 4620, lng: -71.101192, lat: 42.323906)
-Thing.create(city_id: 4621, lng: -71.084543, lat: 42.32383)
-Thing.create(city_id: 4622, lng: -71.109144, lat: 42.323901)
-Thing.create(city_id: 4623, lng: -71.107859, lat: 42.323885)
-Thing.create(city_id: 4624, lng: -71.114818, lat: 42.323878)
-Thing.create(city_id: 4625, lng: -71.094464, lat: 42.323784)
-Thing.create(city_id: 4626, lng: -71.067927, lat: 42.323676)
-Thing.create(city_id: 4627, lng: -71.092458, lat: 42.323762)
-Thing.create(city_id: 4628, lng: -71.073993, lat: 42.323661)
-Thing.create(city_id: 4629, lng: -71.089401, lat: 42.323679)
-Thing.create(city_id: 4630, lng: -71.106839, lat: 42.323727)
-Thing.create(city_id: 4631, lng: -71.096235, lat: 42.323669)
-Thing.create(city_id: 4632, lng: -71.078205, lat: 42.323587)
-Thing.create(city_id: 4633, lng: -71.087103, lat: 42.323605)
-Thing.create(city_id: 4634, lng: -71.088157, lat: 42.323583)
-Thing.create(city_id: 4635, lng: -71.082474, lat: 42.32356)
-Thing.create(city_id: 4636, lng: -71.104919, lat: 42.323639)
-Thing.create(city_id: 4637, lng: -71.053758, lat: 42.323447)
-Thing.create(city_id: 4638, lng: -71.080111, lat: 42.323518)
-Thing.create(city_id: 4639, lng: -71.098334, lat: 42.323576)
-Thing.create(city_id: 4640, lng: -71.110624, lat: 42.323619)
-Thing.create(city_id: 4641, lng: -71.10405, lat: 42.32359)
-Thing.create(city_id: 4642, lng: -71.089776, lat: 42.323471)
-Thing.create(city_id: 4643, lng: -71.072482, lat: 42.323403)
-Thing.create(city_id: 4644, lng: -71.076235, lat: 42.323406)
-Thing.create(city_id: 4645, lng: -71.091032, lat: 42.323429)
-Thing.create(city_id: 4646, lng: -71.074884, lat: 42.329693)
-Thing.create(city_id: 4647, lng: -71.094679, lat: 42.329692)
-Thing.create(city_id: 4648, lng: -71.102189, lat: 42.329656)
-Thing.create(city_id: 4649, lng: -71.072448, lat: 42.32951)
-Thing.create(city_id: 4650, lng: -71.09386, lat: 42.329565)
-Thing.create(city_id: 4651, lng: -71.090391, lat: 42.329521)
-Thing.create(city_id: 4652, lng: -71.084972, lat: 42.329487)
-Thing.create(city_id: 4653, lng: -71.075531, lat: 42.329442)
-Thing.create(city_id: 4654, lng: -71.085393, lat: 42.32944)
-Thing.create(city_id: 4655, lng: -71.089388, lat: 42.329445)
-Thing.create(city_id: 4656, lng: -71.060071, lat: 42.314211)
-Thing.create(city_id: 4657, lng: -71.062569, lat: 42.31418)
-Thing.create(city_id: 4658, lng: -71.096125, lat: 42.329443)
-Thing.create(city_id: 4659, lng: -71.104592, lat: 42.32947)
-Thing.create(city_id: 4660, lng: -71.099734, lat: 42.329442)
-Thing.create(city_id: 4661, lng: -71.097593, lat: 42.329424)
-Thing.create(city_id: 4662, lng: -71.081089, lat: 42.329343)
-Thing.create(city_id: 4663, lng: -71.09232, lat: 42.329378)
-Thing.create(city_id: 4664, lng: -71.098949, lat: 42.329397)
-Thing.create(city_id: 4665, lng: -71.078919, lat: 42.329317)
-Thing.create(city_id: 4666, lng: -71.094948, lat: 42.329325)
-Thing.create(city_id: 4667, lng: -71.091672, lat: 42.329306)
-Thing.create(city_id: 4668, lng: -71.088281, lat: 42.329237)
-Thing.create(city_id: 4669, lng: -71.101124, lat: 42.329275)
-Thing.create(city_id: 4670, lng: -71.071016, lat: 42.329151)
-Thing.create(city_id: 4671, lng: -71.08266, lat: 42.329184)
-Thing.create(city_id: 4672, lng: -71.070164, lat: 42.329134)
-Thing.create(city_id: 4673, lng: -71.077413, lat: 42.329157)
-Thing.create(city_id: 4674, lng: -71.081674, lat: 42.329165)
-Thing.create(city_id: 4675, lng: -71.089708, lat: 42.329131)
-Thing.create(city_id: 4676, lng: -71.064136, lat: 42.314093)
-Thing.create(city_id: 4677, lng: -71.087058, lat: 42.329112)
-Thing.create(city_id: 4678, lng: -71.092998, lat: 42.329126)
-Thing.create(city_id: 4679, lng: -71.0571, lat: 42.313842)
-Thing.create(city_id: 4680, lng: -71.080613, lat: 42.329051)
-Thing.create(city_id: 4681, lng: -71.068592, lat: 42.328987)
-Thing.create(city_id: 4682, lng: -71.094661, lat: 42.32908)
-Thing.create(city_id: 4683, lng: -71.08485, lat: 42.329021)
-Thing.create(city_id: 4684, lng: -71.075884, lat: 42.328955)
-Thing.create(city_id: 4685, lng: -71.062613, lat: 42.328898)
-Thing.create(city_id: 4686, lng: -71.07312, lat: 42.328936)
-Thing.create(city_id: 4687, lng: -71.079521, lat: 42.328945)
-Thing.create(city_id: 4688, lng: -71.074968, lat: 42.32892)
-Thing.create(city_id: 4689, lng: -71.066279, lat: 42.313791)
-Thing.create(city_id: 4690, lng: -71.091531, lat: 42.328924)
-Thing.create(city_id: 4691, lng: -71.063214, lat: 42.313707)
-Thing.create(city_id: 4692, lng: -71.082549, lat: 42.328845)
-Thing.create(city_id: 4693, lng: -71.108352, lat: 42.328926)
-Thing.create(city_id: 4694, lng: -71.109074, lat: 42.328869)
-Thing.create(city_id: 4695, lng: -71.065315, lat: 42.313599)
-Thing.create(city_id: 4696, lng: -71.082811, lat: 42.328763)
-Thing.create(city_id: 4697, lng: -71.087618, lat: 42.328767)
-Thing.create(city_id: 4698, lng: -71.084308, lat: 42.328735)
-Thing.create(city_id: 4699, lng: -71.099066, lat: 42.328769)
-Thing.create(city_id: 4700, lng: -71.070316, lat: 42.328659)
-Thing.create(city_id: 4701, lng: -71.089349, lat: 42.328694)
-Thing.create(city_id: 4702, lng: -71.081557, lat: 42.328621)
-Thing.create(city_id: 4703, lng: -71.09803, lat: 42.328673)
-Thing.create(city_id: 4704, lng: -71.076121, lat: 42.328574)
-Thing.create(city_id: 4705, lng: -71.077434, lat: 42.328554)
-Thing.create(city_id: 4706, lng: -71.090585, lat: 42.328601)
-Thing.create(city_id: 4707, lng: -71.092122, lat: 42.328603)
-Thing.create(city_id: 4708, lng: -71.0938, lat: 42.328584)
-Thing.create(city_id: 4709, lng: -71.096673, lat: 42.328556)
-Thing.create(city_id: 4710, lng: -71.100378, lat: 42.328551)
-Thing.create(city_id: 4711, lng: -71.101457, lat: 42.328548)
-Thing.create(city_id: 4712, lng: -71.074183, lat: 42.328448)
-Thing.create(city_id: 4713, lng: -71.079946, lat: 42.328469)
-Thing.create(city_id: 4714, lng: -71.072708, lat: 42.328437)
-Thing.create(city_id: 4715, lng: -71.108473, lat: 42.328553)
-Thing.create(city_id: 4716, lng: -71.079171, lat: 42.32844)
-Thing.create(city_id: 4717, lng: -71.080403, lat: 42.328444)
-Thing.create(city_id: 4718, lng: -71.110839, lat: 42.328546)
-Thing.create(city_id: 4719, lng: -71.101298, lat: 42.328505)
-Thing.create(city_id: 4720, lng: -71.062858, lat: 42.367579)
-Thing.create(city_id: 4721, lng: -71.079372, lat: 42.328378)
-Thing.create(city_id: 4722, lng: -71.107506, lat: 42.328466)
-Thing.create(city_id: 4723, lng: -71.075334, lat: 42.328347)
-Thing.create(city_id: 4724, lng: -71.095329, lat: 42.328414)
-Thing.create(city_id: 4725, lng: -71.08857, lat: 42.328376)
-Thing.create(city_id: 4726, lng: -71.080921, lat: 42.328317)
-Thing.create(city_id: 4727, lng: -71.072162, lat: 42.328269)
-Thing.create(city_id: 4728, lng: -71.067954, lat: 42.328218)
-Thing.create(city_id: 4729, lng: -71.075034, lat: 42.328228)
-Thing.create(city_id: 4730, lng: -71.064878, lat: 42.328183)
-Thing.create(city_id: 4731, lng: -71.106786, lat: 42.328328)
-Thing.create(city_id: 4732, lng: -71.083466, lat: 42.328225)
-Thing.create(city_id: 4733, lng: -71.092669, lat: 42.328244)
-Thing.create(city_id: 4734, lng: -71.093569, lat: 42.329195)
-Thing.create(city_id: 4735, lng: -71.103485, lat: 42.329141)
-Thing.create(city_id: 4736, lng: -71.071768, lat: 42.328937)
-Thing.create(city_id: 4737, lng: -71.07831, lat: 42.328913)
-Thing.create(city_id: 4738, lng: -71.083555, lat: 42.32883)
-Thing.create(city_id: 4739, lng: -71.102381, lat: 42.328821)
-Thing.create(city_id: 4740, lng: -71.085875, lat: 42.328647)
-Thing.create(city_id: 4741, lng: -71.069578, lat: 42.328115)
-Thing.create(city_id: 4742, lng: -71.085829, lat: 42.32817)
-Thing.create(city_id: 4743, lng: -71.096869, lat: 42.328207)
-Thing.create(city_id: 4744, lng: -71.078271, lat: 42.328133)
-Thing.create(city_id: 4745, lng: -71.075844, lat: 42.328119)
-Thing.create(city_id: 4746, lng: -71.107764, lat: 42.328227)
-Thing.create(city_id: 4747, lng: -71.094182, lat: 42.328167)
-Thing.create(city_id: 4748, lng: -71.07668, lat: 42.328103)
-Thing.create(city_id: 4749, lng: -71.089793, lat: 42.328096)
-Thing.create(city_id: 4750, lng: -71.061395, lat: 42.32799)
-Thing.create(city_id: 4751, lng: -71.099386, lat: 42.328096)
-Thing.create(city_id: 4752, lng: -71.087912, lat: 42.328035)
-Thing.create(city_id: 4753, lng: -71.106404, lat: 42.328089)
-Thing.create(city_id: 4754, lng: -71.09174, lat: 42.328018)
-Thing.create(city_id: 4755, lng: -71.086803, lat: 42.327983)
-Thing.create(city_id: 4756, lng: -71.098271, lat: 42.328017)
-Thing.create(city_id: 4757, lng: -71.073397, lat: 42.327913)
-Thing.create(city_id: 4758, lng: -71.082902, lat: 42.327926)
-Thing.create(city_id: 4759, lng: -71.093145, lat: 42.327922)
-Thing.create(city_id: 4760, lng: -71.074157, lat: 42.327834)
-Thing.create(city_id: 4761, lng: -71.068616, lat: 42.327813)
-Thing.create(city_id: 4762, lng: -71.077342, lat: 42.32784)
-Thing.create(city_id: 4763, lng: -71.059343, lat: 42.313555)
-Thing.create(city_id: 4764, lng: -71.105344, lat: 42.327905)
-Thing.create(city_id: 4765, lng: -71.071486, lat: 42.327735)
-Thing.create(city_id: 4766, lng: -71.090966, lat: 42.327803)
-Thing.create(city_id: 4767, lng: -71.079365, lat: 42.327716)
-Thing.create(city_id: 4768, lng: -71.103155, lat: 42.327766)
-Thing.create(city_id: 4769, lng: -71.069081, lat: 42.327628)
-Thing.create(city_id: 4770, lng: -71.06031, lat: 42.327549)
-Thing.create(city_id: 4771, lng: -71.087157, lat: 42.327647)
-Thing.create(city_id: 4772, lng: -71.063466, lat: 42.327552)
-Thing.create(city_id: 4773, lng: -71.09662, lat: 42.327671)
-Thing.create(city_id: 4774, lng: -71.075104, lat: 42.327588)
-Thing.create(city_id: 4775, lng: -71.064273, lat: 42.313492)
-Thing.create(city_id: 4776, lng: -71.075992, lat: 42.327556)
-Thing.create(city_id: 4777, lng: -71.095799, lat: 42.327622)
-Thing.create(city_id: 4778, lng: -71.067354, lat: 42.327499)
-Thing.create(city_id: 4779, lng: -71.107358, lat: 42.327625)
-Thing.create(city_id: 4780, lng: -71.08332, lat: 42.32754)
-Thing.create(city_id: 4781, lng: -71.092556, lat: 42.32757)
-Thing.create(city_id: 4782, lng: -71.097217, lat: 42.327568)
-Thing.create(city_id: 4783, lng: -71.080692, lat: 42.327484)
-Thing.create(city_id: 4784, lng: -71.048319, lat: 42.327354)
-Thing.create(city_id: 4785, lng: -71.065159, lat: 42.327411)
-Thing.create(city_id: 4786, lng: -71.077725, lat: 42.327423)
-Thing.create(city_id: 4787, lng: -71.0996, lat: 42.327458)
-Thing.create(city_id: 4788, lng: -71.094703, lat: 42.327435)
-Thing.create(city_id: 4789, lng: -71.074526, lat: 42.327362)
-Thing.create(city_id: 4790, lng: -71.09016, lat: 42.327406)
-Thing.create(city_id: 4791, lng: -71.10827, lat: 42.327467)
-Thing.create(city_id: 4792, lng: -71.072525, lat: 42.327322)
-Thing.create(city_id: 4793, lng: -71.069995, lat: 42.327302)
-Thing.create(city_id: 4794, lng: -71.073407, lat: 42.327311)
-Thing.create(city_id: 4795, lng: -71.091565, lat: 42.327337)
-Thing.create(city_id: 4796, lng: -71.104074, lat: 42.327371)
-Thing.create(city_id: 4797, lng: -71.068564, lat: 42.327224)
-Thing.create(city_id: 4798, lng: -71.078551, lat: 42.327257)
-Thing.create(city_id: 4799, lng: -71.061925, lat: 42.327177)
-Thing.create(city_id: 4800, lng: -71.106335, lat: 42.327309)
-Thing.create(city_id: 4801, lng: -71.102637, lat: 42.327265)
-Thing.create(city_id: 4802, lng: -71.076578, lat: 42.327163)
-Thing.create(city_id: 4803, lng: -71.082217, lat: 42.327142)
-Thing.create(city_id: 4804, lng: -71.075386, lat: 42.327107)
-Thing.create(city_id: 4805, lng: -71.070896, lat: 42.327077)
-Thing.create(city_id: 4806, lng: -71.100155, lat: 42.327137)
-Thing.create(city_id: 4807, lng: -71.083032, lat: 42.327057)
-Thing.create(city_id: 4808, lng: -71.101452, lat: 42.327117)
-Thing.create(city_id: 4809, lng: -71.098547, lat: 42.327085)
-Thing.create(city_id: 4810, lng: -71.087395, lat: 42.327042)
-Thing.create(city_id: 4811, lng: -71.111243, lat: 42.327088)
-Thing.create(city_id: 4812, lng: -71.067077, lat: 42.326924)
-Thing.create(city_id: 4813, lng: -71.073894, lat: 42.326928)
-Thing.create(city_id: 4814, lng: -71.105313, lat: 42.327024)
-Thing.create(city_id: 4815, lng: -71.1105, lat: 42.327039)
-Thing.create(city_id: 4816, lng: -71.0963, lat: 42.326959)
-Thing.create(city_id: 4817, lng: -71.107199, lat: 42.326994)
-Thing.create(city_id: 4818, lng: -71.077, lat: 42.326881)
-Thing.create(city_id: 4819, lng: -71.079461, lat: 42.326884)
-Thing.create(city_id: 4820, lng: -71.067119, lat: 42.326822)
-Thing.create(city_id: 4821, lng: -71.092774, lat: 42.326901)
-Thing.create(city_id: 4822, lng: -71.096827, lat: 42.326886)
-Thing.create(city_id: 4823, lng: -71.102409, lat: 42.326892)
-Thing.create(city_id: 4824, lng: -71.071706, lat: 42.326769)
-Thing.create(city_id: 4825, lng: -71.065668, lat: 42.311308)
-Thing.create(city_id: 4826, lng: -71.1011, lat: 42.327342)
-Thing.create(city_id: 4827, lng: -71.060457, lat: 42.327109)
-Thing.create(city_id: 4828, lng: -71.093651, lat: 42.327146)
-Thing.create(city_id: 4829, lng: -71.059019, lat: 42.3143)
-Thing.create(city_id: 4830, lng: -71.066847, lat: 42.311904)
-Thing.create(city_id: 4831, lng: -71.089468, lat: 42.326895)
-Thing.create(city_id: 4832, lng: -71.096015, lat: 42.326808)
-Thing.create(city_id: 4833, lng: -71.060795, lat: 42.326667)
-Thing.create(city_id: 4834, lng: -71.086049, lat: 42.326741)
-Thing.create(city_id: 4835, lng: -71.0777, lat: 42.326691)
-Thing.create(city_id: 4836, lng: -71.060552, lat: 42.31374)
-Thing.create(city_id: 4837, lng: -71.070123, lat: 42.326639)
-Thing.create(city_id: 4838, lng: -71.100873, lat: 42.326749)
-Thing.create(city_id: 4839, lng: -71.109438, lat: 42.326778)
-Thing.create(city_id: 4840, lng: -71.075901, lat: 42.326635)
-Thing.create(city_id: 4841, lng: -71.080476, lat: 42.326613)
-Thing.create(city_id: 4842, lng: -71.090209, lat: 42.32664)
-Thing.create(city_id: 4843, lng: -71.067282, lat: 42.319722)
-Thing.create(city_id: 4844, lng: -71.083447, lat: 42.326603)
-Thing.create(city_id: 4845, lng: -71.07454, lat: 42.326568)
-Thing.create(city_id: 4846, lng: -71.053249, lat: 42.326484)
-Thing.create(city_id: 4847, lng: -71.091116, lat: 42.326575)
-Thing.create(city_id: 4848, lng: -71.06645, lat: 42.326484)
-Thing.create(city_id: 4849, lng: -71.104082, lat: 42.326611)
-Thing.create(city_id: 4850, lng: -71.07325, lat: 42.326487)
-Thing.create(city_id: 4851, lng: -71.094949, lat: 42.326531)
-Thing.create(city_id: 4852, lng: -71.092096, lat: 42.326515)
-Thing.create(city_id: 4853, lng: -71.067247, lat: 42.319004)
-Thing.create(city_id: 4854, lng: -71.09986, lat: 42.326495)
-Thing.create(city_id: 4855, lng: -71.084947, lat: 42.32643)
-Thing.create(city_id: 4856, lng: -71.10661, lat: 42.326474)
-Thing.create(city_id: 4857, lng: -71.072053, lat: 42.326336)
-Thing.create(city_id: 4858, lng: -71.097653, lat: 42.326427)
-Thing.create(city_id: 4859, lng: -71.098988, lat: 42.326409)
-Thing.create(city_id: 4860, lng: -71.082146, lat: 42.326342)
-Thing.create(city_id: 4861, lng: -71.094038, lat: 42.326351)
-Thing.create(city_id: 4862, lng: -71.101199, lat: 42.326355)
-Thing.create(city_id: 4863, lng: -71.073843, lat: 42.326247)
-Thing.create(city_id: 4864, lng: -71.100256, lat: 42.326336)
-Thing.create(city_id: 4865, lng: -71.087726, lat: 42.32629)
-Thing.create(city_id: 4866, lng: -71.078622, lat: 42.326242)
-Thing.create(city_id: 4867, lng: -71.096703, lat: 42.32628)
-Thing.create(city_id: 4868, lng: -71.083157, lat: 42.326232)
-Thing.create(city_id: 4869, lng: -71.102224, lat: 42.326292)
-Thing.create(city_id: 4870, lng: -71.067609, lat: 42.326162)
-Thing.create(city_id: 4871, lng: -71.076869, lat: 42.326117)
-Thing.create(city_id: 4872, lng: -71.08115, lat: 42.326132)
-Thing.create(city_id: 4873, lng: -71.062102, lat: 42.326055)
-Thing.create(city_id: 4874, lng: -71.075074, lat: 42.326073)
-Thing.create(city_id: 4875, lng: -71.090359, lat: 42.326104)
-Thing.create(city_id: 4876, lng: -71.095428, lat: 42.326102)
-Thing.create(city_id: 4877, lng: -71.105759, lat: 42.326138)
-Thing.create(city_id: 4878, lng: -71.103513, lat: 42.326126)
-Thing.create(city_id: 4879, lng: -71.109869, lat: 42.326142)
-Thing.create(city_id: 4880, lng: -71.093121, lat: 42.325993)
-Thing.create(city_id: 4881, lng: -71.091719, lat: 42.325963)
-Thing.create(city_id: 4882, lng: -71.080268, lat: 42.325921)
-Thing.create(city_id: 4883, lng: -71.071511, lat: 42.325887)
-Thing.create(city_id: 4884, lng: -71.092173, lat: 42.31928)
-Thing.create(city_id: 4885, lng: -71.115614, lat: 42.319334)
-Thing.create(city_id: 4886, lng: -71.109518, lat: 42.319307)
-Thing.create(city_id: 4887, lng: -71.106015, lat: 42.319278)
-Thing.create(city_id: 4888, lng: -71.077651, lat: 42.319175)
-Thing.create(city_id: 4889, lng: -71.072995, lat: 42.319154)
-Thing.create(city_id: 4890, lng: -71.049532, lat: 42.319047)
-Thing.create(city_id: 4891, lng: -71.110475, lat: 42.319255)
-Thing.create(city_id: 4892, lng: -71.09977, lat: 42.319185)
-Thing.create(city_id: 4893, lng: -71.085758, lat: 42.319135)
-Thing.create(city_id: 4894, lng: -71.105264, lat: 42.3192)
-Thing.create(city_id: 4895, lng: -71.068796, lat: 42.319062)
-Thing.create(city_id: 4896, lng: -71.079753, lat: 42.319102)
-Thing.create(city_id: 4897, lng: -71.08647, lat: 42.319116)
-Thing.create(city_id: 4898, lng: -71.090082, lat: 42.31912)
-Thing.create(city_id: 4899, lng: -71.111001, lat: 42.31919)
-Thing.create(city_id: 4900, lng: -71.075921, lat: 42.319038)
-Thing.create(city_id: 4901, lng: -71.114523, lat: 42.319168)
-Thing.create(city_id: 4902, lng: -71.072208, lat: 42.341349)
-Thing.create(city_id: 4903, lng: -71.073847, lat: 42.341668)
-Thing.create(city_id: 4904, lng: -71.102505, lat: 42.319091)
-Thing.create(city_id: 4905, lng: -71.087762, lat: 42.319034)
-Thing.create(city_id: 4906, lng: -71.100637, lat: 42.319075)
-Thing.create(city_id: 4907, lng: -71.068592, lat: 42.341588)
-Thing.create(city_id: 4908, lng: -71.078077, lat: 42.341579)
-Thing.create(city_id: 4909, lng: -71.104182, lat: 42.319082)
-Thing.create(city_id: 4910, lng: -71.074664, lat: 42.31897)
-Thing.create(city_id: 4911, lng: -71.113369, lat: 42.319089)
-Thing.create(city_id: 4912, lng: -71.074945, lat: 42.341578)
-Thing.create(city_id: 4913, lng: -71.069276, lat: 42.341358)
-Thing.create(city_id: 4914, lng: -71.077065, lat: 42.318936)
-Thing.create(city_id: 4915, lng: -71.095241, lat: 42.318985)
-Thing.create(city_id: 4916, lng: -71.124737, lat: 42.31908)
-Thing.create(city_id: 4917, lng: -71.075338, lat: 42.341249)
-Thing.create(city_id: 4918, lng: -71.071279, lat: 42.318875)
-Thing.create(city_id: 4919, lng: -71.09383, lat: 42.31895)
-Thing.create(city_id: 4920, lng: -71.098214, lat: 42.318963)
-Thing.create(city_id: 4921, lng: -71.076432, lat: 42.341531)
-Thing.create(city_id: 4922, lng: -71.069805, lat: 42.318835)
-Thing.create(city_id: 4923, lng: -71.070275, lat: 42.341172)
-Thing.create(city_id: 4924, lng: -71.089035, lat: 42.318858)
-Thing.create(city_id: 4925, lng: -71.077519, lat: 42.341046)
-Thing.create(city_id: 4926, lng: -71.08473, lat: 42.318838)
-Thing.create(city_id: 4927, lng: -71.077016, lat: 42.341221)
-Thing.create(city_id: 4928, lng: -71.112179, lat: 42.318899)
-Thing.create(city_id: 4929, lng: -71.106596, lat: 42.318875)
-Thing.create(city_id: 4930, lng: -71.085491, lat: 42.318798)
-Thing.create(city_id: 4931, lng: -71.096281, lat: 42.318832)
-Thing.create(city_id: 4932, lng: -71.075083, lat: 42.318735)
-Thing.create(city_id: 4933, lng: -71.099006, lat: 42.318792)
-Thing.create(city_id: 4934, lng: -71.081868, lat: 42.318723)
-Thing.create(city_id: 4935, lng: -71.06755, lat: 42.341095)
-Thing.create(city_id: 4936, lng: -71.108761, lat: 42.318793)
-Thing.create(city_id: 4937, lng: -71.078614, lat: 42.341201)
-Thing.create(city_id: 4938, lng: -71.078696, lat: 42.318669)
-Thing.create(city_id: 4939, lng: -71.075372, lat: 42.319363)
-Thing.create(city_id: 4940, lng: -71.088423, lat: 42.319351)
-Thing.create(city_id: 4941, lng: -71.087711, lat: 42.319313)
-Thing.create(city_id: 4942, lng: -71.071079, lat: 42.341079)
-Thing.create(city_id: 4943, lng: -71.08294, lat: 42.31868)
-Thing.create(city_id: 4944, lng: -71.091746, lat: 42.318699)
-Thing.create(city_id: 4945, lng: -71.073658, lat: 42.318623)
-Thing.create(city_id: 4946, lng: -71.110172, lat: 42.318746)
-Thing.create(city_id: 4947, lng: -71.11133, lat: 42.318728)
-Thing.create(city_id: 4948, lng: -71.080499, lat: 42.318605)
-Thing.create(city_id: 4949, lng: -71.06491, lat: 42.312821)
-Thing.create(city_id: 4950, lng: -71.062364, lat: 42.312747)
-Thing.create(city_id: 4951, lng: -71.087894, lat: 42.318587)
-Thing.create(city_id: 4952, lng: -71.083772, lat: 42.318569)
-Thing.create(city_id: 4953, lng: -71.107932, lat: 42.318653)
-Thing.create(city_id: 4954, lng: -71.072632, lat: 42.318508)
-Thing.create(city_id: 4955, lng: -71.07665, lat: 42.318506)
-Thing.create(city_id: 4956, lng: -71.075643, lat: 42.31849)
-Thing.create(city_id: 4957, lng: -71.10574, lat: 42.318573)
-Thing.create(city_id: 4958, lng: -71.101094, lat: 42.318553)
-Thing.create(city_id: 4959, lng: -71.103955, lat: 42.318561)
-Thing.create(city_id: 4960, lng: -71.06491, lat: 42.318411)
-Thing.create(city_id: 4961, lng: -71.116237, lat: 42.318581)
-Thing.create(city_id: 4962, lng: -71.081608, lat: 42.318458)
-Thing.create(city_id: 4963, lng: -71.08428, lat: 42.318464)
-Thing.create(city_id: 4964, lng: -71.071106, lat: 42.318399)
-Thing.create(city_id: 4965, lng: -71.077679, lat: 42.318417)
-Thing.create(city_id: 4966, lng: -71.086055, lat: 42.318435)
-Thing.create(city_id: 4967, lng: -71.058967, lat: 42.312658)
-Thing.create(city_id: 4968, lng: -71.098499, lat: 42.318434)
-Thing.create(city_id: 4969, lng: -71.100486, lat: 42.318438)
-Thing.create(city_id: 4970, lng: -71.04909, lat: 42.318221)
-Thing.create(city_id: 4971, lng: -71.066881, lat: 42.312487)
-Thing.create(city_id: 4972, lng: -71.086908, lat: 42.318351)
-Thing.create(city_id: 4973, lng: -71.071942, lat: 42.318262)
-Thing.create(city_id: 4974, lng: -71.065806, lat: 42.312394)
-Thing.create(city_id: 4975, lng: -71.093329, lat: 42.318336)
-Thing.create(city_id: 4976, lng: -71.063965, lat: 42.31217)
-Thing.create(city_id: 4977, lng: -71.073116, lat: 42.318247)
-Thing.create(city_id: 4978, lng: -71.066514, lat: 42.318215)
-Thing.create(city_id: 4979, lng: -71.107177, lat: 42.318334)
-Thing.create(city_id: 4980, lng: -71.125554, lat: 42.318384)
-Thing.create(city_id: 4981, lng: -71.098454, lat: 42.318281)
-Thing.create(city_id: 4982, lng: -71.098022, lat: 42.318256)
-Thing.create(city_id: 4983, lng: -71.082476, lat: 42.318188)
-Thing.create(city_id: 4984, lng: -71.076049, lat: 42.318149)
-Thing.create(city_id: 4985, lng: -71.104879, lat: 42.318246)
-Thing.create(city_id: 4986, lng: -71.070001, lat: 42.31812)
-Thing.create(city_id: 4987, lng: -71.092374, lat: 42.31819)
-Thing.create(city_id: 4988, lng: -71.112628, lat: 42.318246)
-Thing.create(city_id: 4989, lng: -71.07957, lat: 42.318124)
-Thing.create(city_id: 4990, lng: -71.109513, lat: 42.318226)
-Thing.create(city_id: 4991, lng: -71.08813, lat: 42.318117)
-Thing.create(city_id: 4992, lng: -71.111606, lat: 42.318191)
-Thing.create(city_id: 4993, lng: -71.082911, lat: 42.318072)
-Thing.create(city_id: 4994, lng: -71.075332, lat: 42.317976)
-Thing.create(city_id: 4995, lng: -71.108528, lat: 42.318084)
-Thing.create(city_id: 4996, lng: -71.089885, lat: 42.318016)
-Thing.create(city_id: 4997, lng: -71.07871, lat: 42.317925)
-Thing.create(city_id: 4998, lng: -71.095795, lat: 42.317986)
-Thing.create(city_id: 4999, lng: -71.110098, lat: 42.318028)
-Thing.create(city_id: 5000, lng: -71.074258, lat: 42.317893)
-Thing.create(city_id: 5001, lng: -71.066202, lat: 42.313156)
-Thing.create(city_id: 5002, lng: -71.105363, lat: 42.323441)
-Thing.create(city_id: 5003, lng: -71.0715, lat: 42.32331)
-Thing.create(city_id: 5004, lng: -71.098516, lat: 42.323399)
-Thing.create(city_id: 5005, lng: -71.105984, lat: 42.323396)
-Thing.create(city_id: 5006, lng: -71.114379, lat: 42.323424)
-Thing.create(city_id: 5007, lng: -71.079384, lat: 42.323266)
-Thing.create(city_id: 5008, lng: -71.075303, lat: 42.323204)
-Thing.create(city_id: 5009, lng: -71.095491, lat: 42.323273)
-Thing.create(city_id: 5010, lng: -71.070864, lat: 42.323183)
-Thing.create(city_id: 5011, lng: -71.069843, lat: 42.323163)
-Thing.create(city_id: 5012, lng: -71.102251, lat: 42.323275)
-Thing.create(city_id: 5013, lng: -71.108956, lat: 42.323286)
-Thing.create(city_id: 5014, lng: -71.074637, lat: 42.32316)
-Thing.create(city_id: 5015, lng: -71.113292, lat: 42.323276)
-Thing.create(city_id: 5016, lng: -71.092116, lat: 42.323196)
-Thing.create(city_id: 5017, lng: -71.115341, lat: 42.323265)
-Thing.create(city_id: 5018, lng: -71.084305, lat: 42.323148)
-Thing.create(city_id: 5019, lng: -71.109699, lat: 42.323236)
-Thing.create(city_id: 5020, lng: -71.083056, lat: 42.323123)
-Thing.create(city_id: 5021, lng: -71.07883, lat: 42.323104)
-Thing.create(city_id: 5022, lng: -71.073174, lat: 42.323082)
-Thing.create(city_id: 5023, lng: -71.0852, lat: 42.323112)
-Thing.create(city_id: 5024, lng: -71.112409, lat: 42.323194)
-Thing.create(city_id: 5025, lng: -71.093715, lat: 42.32312)
-Thing.create(city_id: 5026, lng: -71.068538, lat: 42.323027)
-Thing.create(city_id: 5027, lng: -71.073362, lat: 42.323037)
-Thing.create(city_id: 5028, lng: -71.072564, lat: 42.323026)
-Thing.create(city_id: 5029, lng: -71.076937, lat: 42.323039)
-Thing.create(city_id: 5030, lng: -71.104696, lat: 42.323119)
-Thing.create(city_id: 5031, lng: -71.108358, lat: 42.323117)
-Thing.create(city_id: 5032, lng: -71.094681, lat: 42.323062)
-Thing.create(city_id: 5033, lng: -71.087758, lat: 42.323026)
-Thing.create(city_id: 5034, lng: -71.073288, lat: 42.32297)
-Thing.create(city_id: 5035, lng: -71.088878, lat: 42.322904)
-Thing.create(city_id: 5036, lng: -71.081068, lat: 42.322872)
-Thing.create(city_id: 5037, lng: -71.111677, lat: 42.323831)
-Thing.create(city_id: 5038, lng: -71.093182, lat: 42.323665)
-Thing.create(city_id: 5039, lng: -71.068897, lat: 42.32349)
-Thing.create(city_id: 5040, lng: -71.082771, lat: 42.323475)
-Thing.create(city_id: 5041, lng: -71.106663, lat: 42.323455)
-Thing.create(city_id: 5042, lng: -71.090425, lat: 42.322885)
-Thing.create(city_id: 5043, lng: -71.099589, lat: 42.322914)
-Thing.create(city_id: 5044, lng: -71.098324, lat: 42.322896)
-Thing.create(city_id: 5045, lng: -71.091779, lat: 42.32286)
-Thing.create(city_id: 5046, lng: -71.07923, lat: 42.322799)
-Thing.create(city_id: 5047, lng: -71.076638, lat: 42.322787)
-Thing.create(city_id: 5048, lng: -71.086437, lat: 42.322806)
-Thing.create(city_id: 5049, lng: -71.053751, lat: 42.322683)
-Thing.create(city_id: 5050, lng: -71.076222, lat: 42.322765)
-Thing.create(city_id: 5051, lng: -71.102765, lat: 42.322843)
-Thing.create(city_id: 5052, lng: -71.116297, lat: 42.32288)
-Thing.create(city_id: 5053, lng: -71.08561, lat: 42.322773)
-Thing.create(city_id: 5054, lng: -71.101674, lat: 42.322795)
-Thing.create(city_id: 5055, lng: -71.069518, lat: 42.32267)
-Thing.create(city_id: 5056, lng: -71.094204, lat: 42.322756)
-Thing.create(city_id: 5057, lng: -71.11457, lat: 42.322801)
-Thing.create(city_id: 5058, lng: -71.057571, lat: 42.311893)
-Thing.create(city_id: 5059, lng: -71.103882, lat: 42.322759)
-Thing.create(city_id: 5060, lng: -71.082505, lat: 42.322681)
-Thing.create(city_id: 5061, lng: -71.093035, lat: 42.322714)
-Thing.create(city_id: 5062, lng: -71.071655, lat: 42.322619)
-Thing.create(city_id: 5063, lng: -71.075117, lat: 42.322625)
-Thing.create(city_id: 5064, lng: -71.080148, lat: 42.322642)
-Thing.create(city_id: 5065, lng: -71.100687, lat: 42.322687)
-Thing.create(city_id: 5066, lng: -71.108996, lat: 42.322687)
-Thing.create(city_id: 5067, lng: -71.082122, lat: 42.322577)
-Thing.create(city_id: 5068, lng: -71.07452, lat: 42.322538)
-Thing.create(city_id: 5069, lng: -71.087307, lat: 42.322576)
-Thing.create(city_id: 5070, lng: -71.104991, lat: 42.322628)
-Thing.create(city_id: 5071, lng: -71.065813, lat: 42.322457)
-Thing.create(city_id: 5072, lng: -71.073872, lat: 42.322447)
-Thing.create(city_id: 5073, lng: -71.10601, lat: 42.322547)
-Thing.create(city_id: 5074, lng: -71.11318, lat: 42.322564)
-Thing.create(city_id: 5075, lng: -71.084773, lat: 42.322463)
-Thing.create(city_id: 5076, lng: -71.070618, lat: 42.322409)
-Thing.create(city_id: 5077, lng: -71.109915, lat: 42.322543)
-Thing.create(city_id: 5078, lng: -71.069041, lat: 42.322397)
-Thing.create(city_id: 5079, lng: -71.068256, lat: 42.322388)
-Thing.create(city_id: 5080, lng: -71.083974, lat: 42.322427)
-Thing.create(city_id: 5081, lng: -71.064939, lat: 42.311938)
-Thing.create(city_id: 5082, lng: -71.072506, lat: 42.322374)
-Thing.create(city_id: 5083, lng: -71.09538, lat: 42.322439)
-Thing.create(city_id: 5084, lng: -71.103154, lat: 42.322457)
-Thing.create(city_id: 5085, lng: -71.063157, lat: 42.311565)
-Thing.create(city_id: 5086, lng: -71.10668, lat: 42.322389)
-Thing.create(city_id: 5087, lng: -71.05338, lat: 42.322194)
-Thing.create(city_id: 5088, lng: -71.107507, lat: 42.322391)
-Thing.create(city_id: 5089, lng: -71.097708, lat: 42.322355)
-Thing.create(city_id: 5090, lng: -71.11226, lat: 42.322385)
-Thing.create(city_id: 5091, lng: -71.092531, lat: 42.322304)
-Thing.create(city_id: 5092, lng: -71.104221, lat: 42.322339)
-Thing.create(city_id: 5093, lng: -71.091236, lat: 42.322275)
-Thing.create(city_id: 5094, lng: -71.108469, lat: 42.322293)
-Thing.create(city_id: 5095, lng: -71.098296, lat: 42.322217)
-Thing.create(city_id: 5096, lng: -71.06982, lat: 42.322078)
-Thing.create(city_id: 5097, lng: -71.071426, lat: 42.322081)
-Thing.create(city_id: 5098, lng: -71.094261, lat: 42.322157)
-Thing.create(city_id: 5099, lng: -71.102144, lat: 42.322136)
-Thing.create(city_id: 5100, lng: -71.076319, lat: 42.322034)
-Thing.create(city_id: 5101, lng: -71.101662, lat: 42.322119)
-Thing.create(city_id: 5102, lng: -71.109115, lat: 42.322099)
-Thing.create(city_id: 5103, lng: -71.114029, lat: 42.322115)
-Thing.create(city_id: 5104, lng: -71.09676, lat: 42.322041)
-Thing.create(city_id: 5105, lng: -71.075825, lat: 42.321949)
-Thing.create(city_id: 5106, lng: -71.09587, lat: 42.322008)
-Thing.create(city_id: 5107, lng: -71.085969, lat: 42.321948)
-Thing.create(city_id: 5108, lng: -71.113021, lat: 42.322039)
-Thing.create(city_id: 5109, lng: -71.10294, lat: 42.321997)
-Thing.create(city_id: 5110, lng: -71.087191, lat: 42.321937)
-Thing.create(city_id: 5111, lng: -71.114773, lat: 42.322011)
-Thing.create(city_id: 5112, lng: -71.080361, lat: 42.32189)
-Thing.create(city_id: 5113, lng: -71.062805, lat: 42.321824)
-Thing.create(city_id: 5114, lng: -71.060366, lat: 42.31014)
-Thing.create(city_id: 5115, lng: -71.082813, lat: 42.32189)
-Thing.create(city_id: 5116, lng: -71.082232, lat: 42.321884)
-Thing.create(city_id: 5117, lng: -71.101198, lat: 42.321933)
-Thing.create(city_id: 5118, lng: -71.061705, lat: 42.30992)
-Thing.create(city_id: 5119, lng: -71.077428, lat: 42.321808)
-Thing.create(city_id: 5120, lng: -71.104711, lat: 42.321885)
-Thing.create(city_id: 5121, lng: -71.085225, lat: 42.321808)
-Thing.create(city_id: 5122, lng: -71.073285, lat: 42.321763)
-Thing.create(city_id: 5123, lng: -71.062467, lat: 42.321709)
-Thing.create(city_id: 5124, lng: -71.094976, lat: 42.321822)
-Thing.create(city_id: 5125, lng: -71.062675, lat: 42.309678)
-Thing.create(city_id: 5126, lng: -71.086285, lat: 42.322333)
-Thing.create(city_id: 5127, lng: -71.088158, lat: 42.322312)
-Thing.create(city_id: 5128, lng: -71.081028, lat: 42.322218)
-Thing.create(city_id: 5129, lng: -71.077105, lat: 42.322102)
-Thing.create(city_id: 5130, lng: -71.116824, lat: 42.322139)
-Thing.create(city_id: 5131, lng: -71.105592, lat: 42.322059)
-Thing.create(city_id: 5132, lng: -71.081873, lat: 42.32192)
-Thing.create(city_id: 5133, lng: -71.093231, lat: 42.321807)
-Thing.create(city_id: 5134, lng: -71.068395, lat: 42.321715)
-Thing.create(city_id: 5135, lng: -71.073987, lat: 42.321729)
-Thing.create(city_id: 5136, lng: -71.070244, lat: 42.321675)
-Thing.create(city_id: 5137, lng: -71.110949, lat: 42.321816)
-Thing.create(city_id: 5138, lng: -71.064914, lat: 42.309305)
-Thing.create(city_id: 5139, lng: -71.07476, lat: 42.321662)
-Thing.create(city_id: 5140, lng: -71.107635, lat: 42.321761)
-Thing.create(city_id: 5141, lng: -71.063348, lat: 42.309466)
-Thing.create(city_id: 5142, lng: -71.110051, lat: 42.321753)
-Thing.create(city_id: 5143, lng: -71.05816, lat: 42.309212)
-Thing.create(city_id: 5144, lng: -71.08631, lat: 42.321596)
-Thing.create(city_id: 5145, lng: -71.071154, lat: 42.321532)
-Thing.create(city_id: 5146, lng: -71.061258, lat: 42.308945)
-Thing.create(city_id: 5147, lng: -71.111891, lat: 42.321671)
-Thing.create(city_id: 5148, lng: -71.078402, lat: 42.321541)
-Thing.create(city_id: 5149, lng: -71.098522, lat: 42.321609)
-Thing.create(city_id: 5150, lng: -71.069054, lat: 42.321482)
-Thing.create(city_id: 5151, lng: -71.084491, lat: 42.321532)
-Thing.create(city_id: 5152, lng: -71.084055, lat: 42.32153)
-Thing.create(city_id: 5153, lng: -71.081545, lat: 42.321515)
-Thing.create(city_id: 5154, lng: -71.09724, lat: 42.321564)
-Thing.create(city_id: 5155, lng: -71.061478, lat: 42.321391)
-Thing.create(city_id: 5156, lng: -71.091549, lat: 42.321475)
-Thing.create(city_id: 5157, lng: -71.077332, lat: 42.321407)
-Thing.create(city_id: 5158, lng: -71.108436, lat: 42.321513)
-Thing.create(city_id: 5159, lng: -71.10158, lat: 42.321473)
-Thing.create(city_id: 5160, lng: -71.072426, lat: 42.321359)
-Thing.create(city_id: 5161, lng: -71.076322, lat: 42.321373)
-Thing.create(city_id: 5162, lng: -71.066815, lat: 42.321331)
-Thing.create(city_id: 5163, lng: -71.113086, lat: 42.321489)
-Thing.create(city_id: 5164, lng: -71.067801, lat: 42.321316)
-Thing.create(city_id: 5165, lng: -71.09914, lat: 42.321428)
-Thing.create(city_id: 5166, lng: -71.08348, lat: 42.321316)
-Thing.create(city_id: 5167, lng: -71.102641, lat: 42.321381)
-Thing.create(city_id: 5168, lng: -71.119824, lat: 42.321414)
-Thing.create(city_id: 5169, lng: -71.096754, lat: 42.321334)
-Thing.create(city_id: 5170, lng: -71.082948, lat: 42.321231)
-Thing.create(city_id: 5171, lng: -71.114179, lat: 42.321333)
-Thing.create(city_id: 5172, lng: -71.075316, lat: 42.32119)
-Thing.create(city_id: 5173, lng: -71.061508, lat: 42.308776)
-Thing.create(city_id: 5174, lng: -71.064231, lat: 42.308938)
-Thing.create(city_id: 5175, lng: -71.058922, lat: 42.308839)
-Thing.create(city_id: 5176, lng: -71.103598, lat: 42.321238)
-Thing.create(city_id: 5177, lng: -71.068533, lat: 42.321095)
-Thing.create(city_id: 5178, lng: -71.073181, lat: 42.321112)
-Thing.create(city_id: 5179, lng: -71.08712, lat: 42.32116)
-Thing.create(city_id: 5180, lng: -71.091463, lat: 42.32117)
-Thing.create(city_id: 5181, lng: -71.117998, lat: 42.321214)
-Thing.create(city_id: 5182, lng: -71.081988, lat: 42.321086)
-Thing.create(city_id: 5183, lng: -71.104623, lat: 42.321153)
-Thing.create(city_id: 5184, lng: -71.060103, lat: 42.308565)
-Thing.create(city_id: 5185, lng: -71.064611, lat: 42.308412)
-Thing.create(city_id: 5186, lng: -71.115281, lat: 42.321176)
-Thing.create(city_id: 5187, lng: -71.078755, lat: 42.321027)
-Thing.create(city_id: 5188, lng: -71.106832, lat: 42.321118)
-Thing.create(city_id: 5189, lng: -71.090604, lat: 42.321053)
-Thing.create(city_id: 5190, lng: -71.116517, lat: 42.321125)
-Thing.create(city_id: 5191, lng: -71.062675, lat: 42.308357)
-Thing.create(city_id: 5192, lng: -71.06463, lat: 42.308176)
-Thing.create(city_id: 5193, lng: -71.109201, lat: 42.321078)
-Thing.create(city_id: 5194, lng: -71.097245, lat: 42.321031)
-Thing.create(city_id: 5195, lng: -71.069806, lat: 42.320929)
-Thing.create(city_id: 5196, lng: -71.057446, lat: 42.307934)
-Thing.create(city_id: 5197, lng: -71.071038, lat: 42.320919)
-Thing.create(city_id: 5198, lng: -71.069276, lat: 42.320891)
-Thing.create(city_id: 5199, lng: -71.107659, lat: 42.321028)
-Thing.create(city_id: 5200, lng: -71.074008, lat: 42.320898)
-Thing.create(city_id: 5201, lng: -71.059387, lat: 42.307805)
-Thing.create(city_id: 5202, lng: -71.097993, lat: 42.320965)
-Thing.create(city_id: 5203, lng: -71.091892, lat: 42.32094)
-Thing.create(city_id: 5204, lng: -71.093256, lat: 42.320933)
-Thing.create(city_id: 5205, lng: -71.081589, lat: 42.32088)
-Thing.create(city_id: 5206, lng: -71.059725, lat: 42.309473)
-Thing.create(city_id: 5207, lng: -71.110643, lat: 42.320944)
-Thing.create(city_id: 5208, lng: -71.065318, lat: 42.31083)
-Thing.create(city_id: 5209, lng: -71.121471, lat: 42.320973)
-Thing.create(city_id: 5210, lng: -71.058694, lat: 42.308587)
-Thing.create(city_id: 5211, lng: -71.098506, lat: 42.320863)
-Thing.create(city_id: 5212, lng: -71.111815, lat: 42.320893)
-Thing.create(city_id: 5213, lng: -71.055162, lat: 42.32068)
-Thing.create(city_id: 5214, lng: -71.102119, lat: 42.320839)
-Thing.create(city_id: 5215, lng: -71.067402, lat: 42.314156)
-Thing.create(city_id: 5216, lng: -71.085913, lat: 42.320752)
-Thing.create(city_id: 5217, lng: -71.090496, lat: 42.320749)
-Thing.create(city_id: 5218, lng: -71.090874, lat: 42.320743)
-Thing.create(city_id: 5219, lng: -71.069777, lat: 42.313765)
-Thing.create(city_id: 5220, lng: -71.09398, lat: 42.321374)
-Thing.create(city_id: 5221, lng: -71.092604, lat: 42.321288)
-Thing.create(city_id: 5222, lng: -71.068085, lat: 42.313625)
-Thing.create(city_id: 5223, lng: -71.077577, lat: 42.32067)
-Thing.create(city_id: 5224, lng: -71.103187, lat: 42.320747)
-Thing.create(city_id: 5225, lng: -71.096736, lat: 42.320698)
-Thing.create(city_id: 5226, lng: -71.068713, lat: 42.320587)
-Thing.create(city_id: 5227, lng: -71.074818, lat: 42.320597)
-Thing.create(city_id: 5228, lng: -71.072602, lat: 42.320588)
-Thing.create(city_id: 5229, lng: -71.089629, lat: 42.32062)
-Thing.create(city_id: 5230, lng: -71.079618, lat: 42.320574)
-Thing.create(city_id: 5231, lng: -71.075679, lat: 42.320518)
-Thing.create(city_id: 5232, lng: -71.099236, lat: 42.320585)
-Thing.create(city_id: 5233, lng: -71.112542, lat: 42.320624)
-Thing.create(city_id: 5234, lng: -71.06934, lat: 42.313096)
-Thing.create(city_id: 5235, lng: -71.113455, lat: 42.320617)
-Thing.create(city_id: 5236, lng: -71.068125, lat: 42.3129)
-Thing.create(city_id: 5237, lng: -71.114452, lat: 42.320597)
-Thing.create(city_id: 5238, lng: -71.067212, lat: 42.31289)
-Thing.create(city_id: 5239, lng: -71.104342, lat: 42.320532)
-Thing.create(city_id: 5240, lng: -71.061664, lat: 42.320374)
-Thing.create(city_id: 5241, lng: -71.076746, lat: 42.320425)
-Thing.create(city_id: 5242, lng: -71.070961, lat: 42.312334)
-Thing.create(city_id: 5243, lng: -71.071388, lat: 42.320353)
-Thing.create(city_id: 5244, lng: -71.0424, lat: 42.32024)
-Thing.create(city_id: 5245, lng: -71.107917, lat: 42.320481)
-Thing.create(city_id: 5246, lng: -71.085003, lat: 42.32039)
-Thing.create(city_id: 5247, lng: -71.070465, lat: 42.320331)
-Thing.create(city_id: 5248, lng: -71.070193, lat: 42.31246)
-Thing.create(city_id: 5249, lng: -71.086818, lat: 42.320361)
-Thing.create(city_id: 5250, lng: -71.09125, lat: 42.320351)
-Thing.create(city_id: 5251, lng: -71.116725, lat: 42.320433)
-Thing.create(city_id: 5252, lng: -71.106215, lat: 42.320382)
-Thing.create(city_id: 5253, lng: -71.115532, lat: 42.320396)
-Thing.create(city_id: 5254, lng: -71.06887, lat: 42.312478)
-Thing.create(city_id: 5255, lng: -71.109709, lat: 42.32037)
-Thing.create(city_id: 5256, lng: -71.081752, lat: 42.320265)
-Thing.create(city_id: 5257, lng: -71.073749, lat: 42.320212)
-Thing.create(city_id: 5258, lng: -71.092658, lat: 42.32028)
-Thing.create(city_id: 5259, lng: -71.102554, lat: 42.320292)
-Thing.create(city_id: 5260, lng: -71.098258, lat: 42.320273)
-Thing.create(city_id: 5261, lng: -71.088781, lat: 42.320229)
-Thing.create(city_id: 5262, lng: -71.111184, lat: 42.320292)
-Thing.create(city_id: 5263, lng: -71.072328, lat: 42.320098)
-Thing.create(city_id: 5264, lng: -71.094044, lat: 42.320171)
-Thing.create(city_id: 5265, lng: -71.07856, lat: 42.320114)
-Thing.create(city_id: 5266, lng: -71.087561, lat: 42.320145)
-Thing.create(city_id: 5267, lng: -71.111665, lat: 42.320223)
-Thing.create(city_id: 5268, lng: -71.124066, lat: 42.320232)
-Thing.create(city_id: 5269, lng: -71.081346, lat: 42.32007)
-Thing.create(city_id: 5270, lng: -71.10382, lat: 42.320136)
-Thing.create(city_id: 5271, lng: -71.068825, lat: 42.319973)
-Thing.create(city_id: 5272, lng: -71.075026, lat: 42.31996)
-Thing.create(city_id: 5273, lng: -71.076242, lat: 42.319942)
-Thing.create(city_id: 5274, lng: -71.085878, lat: 42.319948)
-Thing.create(city_id: 5275, lng: -71.077642, lat: 42.319907)
-Thing.create(city_id: 5276, lng: -71.116001, lat: 42.320011)
-Thing.create(city_id: 5277, lng: -71.076918, lat: 42.319871)
-Thing.create(city_id: 5278, lng: -71.088646, lat: 42.319912)
-Thing.create(city_id: 5279, lng: -71.088102, lat: 42.319877)
-Thing.create(city_id: 5280, lng: -71.085756, lat: 42.319862)
-Thing.create(city_id: 5281, lng: -71.073091, lat: 42.319797)
-Thing.create(city_id: 5282, lng: -71.115039, lat: 42.319936)
-Thing.create(city_id: 5283, lng: -71.070438, lat: 42.313335)
-Thing.create(city_id: 5284, lng: -71.108632, lat: 42.319905)
-Thing.create(city_id: 5285, lng: -71.070955, lat: 42.311573)
-Thing.create(city_id: 5286, lng: -71.068069, lat: 42.311327)
-Thing.create(city_id: 5287, lng: -71.069807, lat: 42.319716)
-Thing.create(city_id: 5288, lng: -71.05739, lat: 42.316441)
-Thing.create(city_id: 5289, lng: -71.083099, lat: 42.319758)
-Thing.create(city_id: 5290, lng: -71.113823, lat: 42.31986)
-Thing.create(city_id: 5291, lng: -71.068109, lat: 42.319686)
-Thing.create(city_id: 5292, lng: -71.106377, lat: 42.319821)
-Thing.create(city_id: 5293, lng: -71.090671, lat: 42.319727)
-Thing.create(city_id: 5294, lng: -71.110468, lat: 42.319788)
-Thing.create(city_id: 5295, lng: -71.085564, lat: 42.319695)
-Thing.create(city_id: 5296, lng: -71.104617, lat: 42.31976)
-Thing.create(city_id: 5297, lng: -71.089485, lat: 42.320307)
-Thing.create(city_id: 5298, lng: -71.060521, lat: 42.31641)
-Thing.create(city_id: 5299, lng: -71.063215, lat: 42.316307)
-Thing.create(city_id: 5300, lng: -71.061144, lat: 42.316245)
-Thing.create(city_id: 5301, lng: -71.083841, lat: 42.319944)
-Thing.create(city_id: 5302, lng: -71.061614, lat: 42.316099)
-Thing.create(city_id: 5303, lng: -71.093399, lat: 42.319718)
-Thing.create(city_id: 5304, lng: -71.112694, lat: 42.31978)
-Thing.create(city_id: 5305, lng: -71.072017, lat: 42.319621)
-Thing.create(city_id: 5306, lng: -71.099715, lat: 42.319711)
-Thing.create(city_id: 5307, lng: -71.105735, lat: 42.319719)
-Thing.create(city_id: 5308, lng: -71.085373, lat: 42.319589)
-Thing.create(city_id: 5309, lng: -71.111914, lat: 42.31967)
-Thing.create(city_id: 5310, lng: -71.089477, lat: 42.31959)
-Thing.create(city_id: 5311, lng: -71.056778, lat: 42.316018)
-Thing.create(city_id: 5312, lng: -71.074338, lat: 42.319515)
-Thing.create(city_id: 5313, lng: -71.08066, lat: 42.319516)
-Thing.create(city_id: 5314, lng: -71.087557, lat: 42.319526)
-Thing.create(city_id: 5315, lng: -71.098547, lat: 42.319553)
-Thing.create(city_id: 5316, lng: -71.117048, lat: 42.319549)
-Thing.create(city_id: 5317, lng: -71.06641, lat: 42.315972)
-Thing.create(city_id: 5318, lng: -71.062371, lat: 42.315906)
-Thing.create(city_id: 5319, lng: -71.070744, lat: 42.319372)
-Thing.create(city_id: 5320, lng: -71.042019, lat: 42.319257)
-Thing.create(city_id: 5321, lng: -71.081664, lat: 42.319407)
-Thing.create(city_id: 5322, lng: -71.09478, lat: 42.31945)
-Thing.create(city_id: 5323, lng: -71.060505, lat: 42.315843)
-Thing.create(city_id: 5324, lng: -71.059778, lat: 42.315828)
-Thing.create(city_id: 5325, lng: -71.061403, lat: 42.315476)
-Thing.create(city_id: 5326, lng: -71.066621, lat: 42.315253)
-Thing.create(city_id: 5327, lng: -71.059978, lat: 42.315199)
-Thing.create(city_id: 5328, lng: -71.086802, lat: 42.319407)
-Thing.create(city_id: 5329, lng: -71.060596, lat: 42.315051)
-Thing.create(city_id: 5330, lng: -71.05684, lat: 42.315006)
-Thing.create(city_id: 5331, lng: -71.057714, lat: 42.314856)
-Thing.create(city_id: 5332, lng: -71.063488, lat: 42.314593)
-Thing.create(city_id: 5333, lng: -71.083261, lat: 42.319334)
-Thing.create(city_id: 5334, lng: -71.107642, lat: 42.319417)
-Thing.create(city_id: 5335, lng: -71.076549, lat: 42.319305)
-Thing.create(city_id: 5336, lng: -71.123753, lat: 42.319469)
-Thing.create(city_id: 5337, lng: -71.10327, lat: 42.319392)
-Thing.create(city_id: 5338, lng: -71.084185, lat: 42.31928)
-Thing.create(city_id: 5339, lng: -71.081347, lat: 42.319251)
-Thing.create(city_id: 5340, lng: -71.077733, lat: 42.315438)
-Thing.create(city_id: 5341, lng: -71.095967, lat: 42.315498)
-Thing.create(city_id: 5342, lng: -71.046096, lat: 42.33537)
-Thing.create(city_id: 5343, lng: -71.105789, lat: 42.315528)
-Thing.create(city_id: 5344, lng: -71.106829, lat: 42.315523)
-Thing.create(city_id: 5345, lng: -71.094748, lat: 42.315455)
-Thing.create(city_id: 5346, lng: -71.073115, lat: 42.315373)
-Thing.create(city_id: 5347, lng: -71.040844, lat: 42.335949)
-Thing.create(city_id: 5348, lng: -71.086515, lat: 42.315398)
-Thing.create(city_id: 5349, lng: -71.091216, lat: 42.315414)
-Thing.create(city_id: 5350, lng: -71.103132, lat: 42.315445)
-Thing.create(city_id: 5351, lng: -71.036428, lat: 42.338185)
-Thing.create(city_id: 5352, lng: -71.037318, lat: 42.338176)
-Thing.create(city_id: 5353, lng: -71.117226, lat: 42.315464)
-Thing.create(city_id: 5354, lng: -71.072491, lat: 42.315283)
-Thing.create(city_id: 5355, lng: -71.038533, lat: 42.338152)
-Thing.create(city_id: 5356, lng: -71.047913, lat: 42.335611)
-Thing.create(city_id: 5357, lng: -71.076373, lat: 42.315271)
-Thing.create(city_id: 5358, lng: -71.035586, lat: 42.33741)
-Thing.create(city_id: 5359, lng: -71.078703, lat: 42.315269)
-Thing.create(city_id: 5360, lng: -71.114192, lat: 42.315389)
-Thing.create(city_id: 5361, lng: -71.11029, lat: 42.315375)
-Thing.create(city_id: 5362, lng: -71.104201, lat: 42.315349)
-Thing.create(city_id: 5363, lng: -71.10226, lat: 42.315336)
-Thing.create(city_id: 5364, lng: -71.070422, lat: 42.315213)
-Thing.create(city_id: 5365, lng: -71.083234, lat: 42.315236)
-Thing.create(city_id: 5366, lng: -71.034435, lat: 42.337389)
-Thing.create(city_id: 5367, lng: -71.116173, lat: 42.315349)
-Thing.create(city_id: 5368, lng: -71.036448, lat: 42.337359)
-Thing.create(city_id: 5369, lng: -71.080782, lat: 42.34384)
-Thing.create(city_id: 5370, lng: -71.073847, lat: 42.315151)
-Thing.create(city_id: 5371, lng: -71.087723, lat: 42.315201)
-Thing.create(city_id: 5372, lng: -71.037645, lat: 42.337337)
-Thing.create(city_id: 5373, lng: -71.075363, lat: 42.315133)
-Thing.create(city_id: 5374, lng: -71.066062, lat: 42.315096)
-Thing.create(city_id: 5375, lng: -71.085714, lat: 42.315167)
-Thing.create(city_id: 5376, lng: -71.101209, lat: 42.315219)
-Thing.create(city_id: 5377, lng: -71.097571, lat: 42.315189)
-Thing.create(city_id: 5378, lng: -71.079946, lat: 42.343107)
-Thing.create(city_id: 5379, lng: -71.040814, lat: 42.337278)
-Thing.create(city_id: 5380, lng: -71.106368, lat: 42.315203)
-Thing.create(city_id: 5381, lng: -71.079903, lat: 42.315106)
-Thing.create(city_id: 5382, lng: -71.039244, lat: 42.336822)
-Thing.create(city_id: 5383, lng: -71.077881, lat: 42.31507)
-Thing.create(city_id: 5384, lng: -71.108026, lat: 42.315171)
-Thing.create(city_id: 5385, lng: -71.08288, lat: 42.343105)
-Thing.create(city_id: 5386, lng: -71.090033, lat: 42.315054)
-Thing.create(city_id: 5387, lng: -71.082256, lat: 42.315018)
-Thing.create(city_id: 5388, lng: -71.099955, lat: 42.315078)
-Thing.create(city_id: 5389, lng: -71.097741, lat: 42.315044)
-Thing.create(city_id: 5390, lng: -71.109725, lat: 42.315077)
-Thing.create(city_id: 5391, lng: -71.082211, lat: 42.343655)
-Thing.create(city_id: 5392, lng: -71.081535, lat: 42.343217)
-Thing.create(city_id: 5393, lng: -71.099198, lat: 42.315002)
-Thing.create(city_id: 5394, lng: -71.084648, lat: 42.314938)
-Thing.create(city_id: 5395, lng: -71.064748, lat: 42.314849)
-Thing.create(city_id: 5396, lng: -71.115182, lat: 42.315005)
-Thing.create(city_id: 5397, lng: -71.111578, lat: 42.314984)
-Thing.create(city_id: 5398, lng: -71.112334, lat: 42.314981)
-Thing.create(city_id: 5399, lng: -71.071556, lat: 42.314813)
-Thing.create(city_id: 5400, lng: -71.08081, lat: 42.315596)
-Thing.create(city_id: 5401, lng: -71.090875, lat: 42.315015)
-Thing.create(city_id: 5402, lng: -71.076111, lat: 42.314805)
-Thing.create(city_id: 5403, lng: -71.095354, lat: 42.314867)
-Thing.create(city_id: 5404, lng: -71.118138, lat: 42.31492)
-Thing.create(city_id: 5405, lng: -71.089188, lat: 42.314807)
-Thing.create(city_id: 5406, lng: -71.092977, lat: 42.314799)
-Thing.create(city_id: 5407, lng: -71.082586, lat: 42.314752)
-Thing.create(city_id: 5408, lng: -71.081277, lat: 42.314686)
-Thing.create(city_id: 5409, lng: -71.050121, lat: 42.340621)
-Thing.create(city_id: 5410, lng: -71.086824, lat: 42.314699)
-Thing.create(city_id: 5411, lng: -71.115996, lat: 42.314796)
-Thing.create(city_id: 5412, lng: -71.049318, lat: 42.340023)
-Thing.create(city_id: 5413, lng: -71.088155, lat: 42.314678)
-Thing.create(city_id: 5414, lng: -71.107142, lat: 42.314744)
-Thing.create(city_id: 5415, lng: -71.093659, lat: 42.314692)
-Thing.create(city_id: 5416, lng: -71.072495, lat: 42.314615)
-Thing.create(city_id: 5417, lng: -71.078976, lat: 42.314624)
-Thing.create(city_id: 5418, lng: -71.105529, lat: 42.314718)
-Thing.create(city_id: 5419, lng: -71.106213, lat: 42.314704)
-Thing.create(city_id: 5420, lng: -71.098367, lat: 42.314676)
-Thing.create(city_id: 5421, lng: -71.123414, lat: 42.314747)
-Thing.create(city_id: 5422, lng: -71.096778, lat: 42.314641)
-Thing.create(city_id: 5423, lng: -71.070738, lat: 42.314542)
-Thing.create(city_id: 5424, lng: -71.097106, lat: 42.314614)
-Thing.create(city_id: 5425, lng: -71.101869, lat: 42.314623)
-Thing.create(city_id: 5426, lng: -71.073185, lat: 42.314509)
-Thing.create(city_id: 5427, lng: -71.090427, lat: 42.314539)
-Thing.create(city_id: 5428, lng: -71.111894, lat: 42.314569)
-Thing.create(city_id: 5429, lng: -71.083541, lat: 42.31446)
-Thing.create(city_id: 5430, lng: -71.075172, lat: 42.314426)
-Thing.create(city_id: 5431, lng: -71.085766, lat: 42.31446)
-Thing.create(city_id: 5432, lng: -71.08162, lat: 42.314439)
-Thing.create(city_id: 5433, lng: -71.104676, lat: 42.314514)
-Thing.create(city_id: 5434, lng: -71.087536, lat: 42.314434)
-Thing.create(city_id: 5435, lng: -71.100608, lat: 42.314468)
-Thing.create(city_id: 5436, lng: -71.048682, lat: 42.339695)
-Thing.create(city_id: 5437, lng: -71.114205, lat: 42.314501)
-Thing.create(city_id: 5438, lng: -71.111069, lat: 42.314487)
-Thing.create(city_id: 5439, lng: -71.099172, lat: 42.314433)
-Thing.create(city_id: 5440, lng: -71.065717, lat: 42.31431)
-Thing.create(city_id: 5441, lng: -71.08235, lat: 42.314364)
-Thing.create(city_id: 5442, lng: -71.091394, lat: 42.314364)
-Thing.create(city_id: 5443, lng: -71.097925, lat: 42.314375)
-Thing.create(city_id: 5444, lng: -71.070189, lat: 42.314271)
-Thing.create(city_id: 5445, lng: -71.066558, lat: 42.31424)
-Thing.create(city_id: 5446, lng: -71.07397, lat: 42.314238)
-Thing.create(city_id: 5447, lng: -71.058085, lat: 42.314163)
-Thing.create(city_id: 5448, lng: -71.099899, lat: 42.314289)
-Thing.create(city_id: 5449, lng: -71.084714, lat: 42.314226)
-Thing.create(city_id: 5450, lng: -71.089495, lat: 42.314242)
-Thing.create(city_id: 5451, lng: -71.080419, lat: 42.314202)
-Thing.create(city_id: 5452, lng: -71.118883, lat: 42.314324)
-Thing.create(city_id: 5453, lng: -71.040051, lat: 42.34619)
-Thing.create(city_id: 5454, lng: -71.07187, lat: 42.314139)
-Thing.create(city_id: 5455, lng: -71.114833, lat: 42.314268)
-Thing.create(city_id: 5456, lng: -71.086544, lat: 42.314144)
-Thing.create(city_id: 5457, lng: -71.076341, lat: 42.314104)
-Thing.create(city_id: 5458, lng: -71.077889, lat: 42.314096)
-Thing.create(city_id: 5459, lng: -71.040132, lat: 42.345256)
-Thing.create(city_id: 5460, lng: -71.123018, lat: 42.314233)
-Thing.create(city_id: 5461, lng: -71.0964, lat: 42.31413)
-Thing.create(city_id: 5462, lng: -71.116445, lat: 42.314179)
-Thing.create(city_id: 5463, lng: -71.106513, lat: 42.314144)
-Thing.create(city_id: 5464, lng: -71.101216, lat: 42.314114)
-Thing.create(city_id: 5465, lng: -71.094081, lat: 42.314067)
-Thing.create(city_id: 5466, lng: -71.088659, lat: 42.314046)
-Thing.create(city_id: 5467, lng: -71.106797, lat: 42.314061)
-Thing.create(city_id: 5468, lng: -71.092843, lat: 42.314004)
-Thing.create(city_id: 5469, lng: -71.113561, lat: 42.314073)
-Thing.create(city_id: 5470, lng: -71.102709, lat: 42.314035)
-Thing.create(city_id: 5471, lng: -71.102166, lat: 42.31392)
-Thing.create(city_id: 5472, lng: -71.036421, lat: 42.314259)
-Thing.create(city_id: 5473, lng: -71.07254, lat: 42.314327)
-Thing.create(city_id: 5474, lng: -71.108201, lat: 42.31432)
-Thing.create(city_id: 5475, lng: -71.10311, lat: 42.314267)
-Thing.create(city_id: 5476, lng: -71.070954, lat: 42.313792)
-Thing.create(city_id: 5477, lng: -71.085532, lat: 42.313837)
-Thing.create(city_id: 5478, lng: -71.098344, lat: 42.313873)
-Thing.create(city_id: 5479, lng: -71.090754, lat: 42.313846)
-Thing.create(city_id: 5480, lng: -71.073274, lat: 42.313755)
-Thing.create(city_id: 5481, lng: -71.081523, lat: 42.313745)
-Thing.create(city_id: 5482, lng: -71.079279, lat: 42.313703)
-Thing.create(city_id: 5483, lng: -71.082554, lat: 42.31369)
-Thing.create(city_id: 5484, lng: -71.100426, lat: 42.313752)
-Thing.create(city_id: 5485, lng: -71.050095, lat: 42.31355)
-Thing.create(city_id: 5486, lng: -71.076944, lat: 42.313643)
-Thing.create(city_id: 5487, lng: -71.115645, lat: 42.313765)
-Thing.create(city_id: 5488, lng: -71.083553, lat: 42.313652)
-Thing.create(city_id: 5489, lng: -71.097024, lat: 42.313697)
-Thing.create(city_id: 5490, lng: -71.114218, lat: 42.313748)
-Thing.create(city_id: 5491, lng: -71.109653, lat: 42.313721)
-Thing.create(city_id: 5492, lng: -71.063294, lat: 42.37817)
-Thing.create(city_id: 5493, lng: -71.099887, lat: 42.31796)
-Thing.create(city_id: 5494, lng: -71.106206, lat: 42.317959)
-Thing.create(city_id: 5495, lng: -71.081903, lat: 42.31786)
-Thing.create(city_id: 5496, lng: -71.091053, lat: 42.317878)
-Thing.create(city_id: 5497, lng: -71.080884, lat: 42.31784)
-Thing.create(city_id: 5498, lng: -71.085204, lat: 42.317848)
-Thing.create(city_id: 5499, lng: -71.060034, lat: 42.378176)
-Thing.create(city_id: 5500, lng: -71.093445, lat: 42.317835)
-Thing.create(city_id: 5501, lng: -71.086206, lat: 42.31779)
-Thing.create(city_id: 5502, lng: -71.104487, lat: 42.317852)
-Thing.create(city_id: 5503, lng: -71.071242, lat: 42.317723)
-Thing.create(city_id: 5504, lng: -71.101573, lat: 42.317831)
-Thing.create(city_id: 5505, lng: -71.087229, lat: 42.317773)
-Thing.create(city_id: 5506, lng: -71.073571, lat: 42.317713)
-Thing.create(city_id: 5507, lng: -71.088837, lat: 42.317766)
-Thing.create(city_id: 5508, lng: -71.072226, lat: 42.317687)
-Thing.create(city_id: 5509, lng: -71.069381, lat: 42.318316)
-Thing.create(city_id: 5510, lng: -71.053964, lat: 42.378116)
-Thing.create(city_id: 5511, lng: -71.096818, lat: 42.318294)
-Thing.create(city_id: 5512, lng: -71.115394, lat: 42.318291)
-Thing.create(city_id: 5513, lng: -71.090791, lat: 42.318177)
-Thing.create(city_id: 5514, lng: -71.110549, lat: 42.318219)
-Thing.create(city_id: 5515, lng: -71.094438, lat: 42.318086)
-Thing.create(city_id: 5516, lng: -71.084424, lat: 42.317726)
-Thing.create(city_id: 5517, lng: -71.116582, lat: 42.317833)
-Thing.create(city_id: 5518, lng: -71.062288, lat: 42.378169)
-Thing.create(city_id: 5519, lng: -71.113932, lat: 42.317809)
-Thing.create(city_id: 5520, lng: -71.097311, lat: 42.317744)
-Thing.create(city_id: 5521, lng: -71.110684, lat: 42.317758)
-Thing.create(city_id: 5522, lng: -71.10753, lat: 42.317728)
-Thing.create(city_id: 5523, lng: -71.100608, lat: 42.317703)
-Thing.create(city_id: 5524, lng: -71.056979, lat: 42.377909)
-Thing.create(city_id: 5525, lng: -71.061807, lat: 42.377895)
-Thing.create(city_id: 5526, lng: -71.089621, lat: 42.317636)
-Thing.create(city_id: 5527, lng: -71.078746, lat: 42.317577)
-Thing.create(city_id: 5528, lng: -71.069729, lat: 42.317539)
-Thing.create(city_id: 5529, lng: -71.056177, lat: 42.377583)
-Thing.create(city_id: 5530, lng: -71.124679, lat: 42.317712)
-Thing.create(city_id: 5531, lng: -71.098201, lat: 42.31761)
-Thing.create(city_id: 5532, lng: -71.070294, lat: 42.317497)
-Thing.create(city_id: 5533, lng: -71.07786, lat: 42.317496)
-Thing.create(city_id: 5534, lng: -71.06024, lat: 42.37747)
-Thing.create(city_id: 5535, lng: -71.104645, lat: 42.31758)
-Thing.create(city_id: 5536, lng: -71.082495, lat: 42.317475)
-Thing.create(city_id: 5537, lng: -71.113179, lat: 42.317571)
-Thing.create(city_id: 5538, lng: -71.06874, lat: 42.31741)
-Thing.create(city_id: 5539, lng: -71.112212, lat: 42.317554)
-Thing.create(city_id: 5540, lng: -71.080364, lat: 42.317429)
-Thing.create(city_id: 5541, lng: -71.049152, lat: 42.317249)
-Thing.create(city_id: 5542, lng: -71.099196, lat: 42.317431)
-Thing.create(city_id: 5543, lng: -71.090413, lat: 42.317394)
-Thing.create(city_id: 5544, lng: -71.109996, lat: 42.317449)
-Thing.create(city_id: 5545, lng: -71.105501, lat: 42.317431)
-Thing.create(city_id: 5546, lng: -71.075617, lat: 42.317314)
-Thing.create(city_id: 5547, lng: -71.085744, lat: 42.31733)
-Thing.create(city_id: 5548, lng: -71.076628, lat: 42.317258)
-Thing.create(city_id: 5549, lng: -71.106675, lat: 42.31735)
-Thing.create(city_id: 5550, lng: -71.096985, lat: 42.31724)
-Thing.create(city_id: 5551, lng: -71.109065, lat: 42.317275)
-Thing.create(city_id: 5552, lng: -71.102248, lat: 42.317243)
-Thing.create(city_id: 5553, lng: -71.0823, lat: 42.317165)
-Thing.create(city_id: 5554, lng: -71.049721, lat: 42.317042)
-Thing.create(city_id: 5555, lng: -71.09974, lat: 42.317207)
-Thing.create(city_id: 5556, lng: -71.074487, lat: 42.317092)
-Thing.create(city_id: 5557, lng: -71.089483, lat: 42.317141)
-Thing.create(city_id: 5558, lng: -71.108193, lat: 42.317187)
-Thing.create(city_id: 5559, lng: -71.091459, lat: 42.317118)
-Thing.create(city_id: 5560, lng: -71.10491, lat: 42.317142)
-Thing.create(city_id: 5561, lng: -71.086682, lat: 42.317064)
-Thing.create(city_id: 5562, lng: -71.073099, lat: 42.317004)
-Thing.create(city_id: 5563, lng: -71.101376, lat: 42.317098)
-Thing.create(city_id: 5564, lng: -71.071568, lat: 42.316988)
-Thing.create(city_id: 5565, lng: -71.111335, lat: 42.317096)
-Thing.create(city_id: 5566, lng: -71.099115, lat: 42.317015)
-Thing.create(city_id: 5567, lng: -71.105883, lat: 42.316999)
-Thing.create(city_id: 5568, lng: -71.107496, lat: 42.316993)
-Thing.create(city_id: 5569, lng: -71.07967, lat: 42.316888)
-Thing.create(city_id: 5570, lng: -71.088613, lat: 42.316909)
-Thing.create(city_id: 5571, lng: -71.098502, lat: 42.316912)
-Thing.create(city_id: 5572, lng: -71.099791, lat: 42.316908)
-Thing.create(city_id: 5573, lng: -71.047242, lat: 42.316711)
-Thing.create(city_id: 5574, lng: -71.07061, lat: 42.316789)
-Thing.create(city_id: 5575, lng: -71.04647, lat: 42.31669)
-Thing.create(city_id: 5576, lng: -71.092295, lat: 42.316858)
-Thing.create(city_id: 5577, lng: -71.077889, lat: 42.316802)
-Thing.create(city_id: 5578, lng: -71.070084, lat: 42.316773)
-Thing.create(city_id: 5579, lng: -71.115981, lat: 42.316922)
-Thing.create(city_id: 5580, lng: -71.072443, lat: 42.316744)
-Thing.create(city_id: 5581, lng: -71.084816, lat: 42.316787)
-Thing.create(city_id: 5582, lng: -71.092696, lat: 42.317547)
-Thing.create(city_id: 5583, lng: -71.083354, lat: 42.317458)
-Thing.create(city_id: 5584, lng: -71.087848, lat: 42.317439)
-Thing.create(city_id: 5585, lng: -71.113593, lat: 42.316876)
-Thing.create(city_id: 5586, lng: -71.091135, lat: 42.316792)
-Thing.create(city_id: 5587, lng: -71.085771, lat: 42.316772)
-Thing.create(city_id: 5588, lng: -71.11221, lat: 42.316864)
-Thing.create(city_id: 5589, lng: -71.079915, lat: 42.342284)
-Thing.create(city_id: 5590, lng: -71.116646, lat: 42.316839)
-Thing.create(city_id: 5591, lng: -71.082171, lat: 42.342687)
-Thing.create(city_id: 5592, lng: -71.0812, lat: 42.342186)
-Thing.create(city_id: 5593, lng: -71.076862, lat: 42.31667)
-Thing.create(city_id: 5594, lng: -71.083477, lat: 42.342601)
-Thing.create(city_id: 5595, lng: -71.081207, lat: 42.342975)
-Thing.create(city_id: 5596, lng: -71.10359, lat: 42.316761)
-Thing.create(city_id: 5597, lng: -71.083201, lat: 42.339158)
-Thing.create(city_id: 5598, lng: -71.087822, lat: 42.316685)
-Thing.create(city_id: 5599, lng: -71.080609, lat: 42.342601)
-Thing.create(city_id: 5600, lng: -71.080539, lat: 42.34076)
-Thing.create(city_id: 5601, lng: -71.083912, lat: 42.339643)
-Thing.create(city_id: 5602, lng: -71.080561, lat: 42.341751)
-Thing.create(city_id: 5603, lng: -71.081958, lat: 42.340601)
-Thing.create(city_id: 5604, lng: -71.075825, lat: 42.316529)
-Thing.create(city_id: 5605, lng: -71.110458, lat: 42.31665)
-Thing.create(city_id: 5606, lng: -71.040008, lat: 42.31638)
-Thing.create(city_id: 5607, lng: -71.083774, lat: 42.316542)
-Thing.create(city_id: 5608, lng: -71.081715, lat: 42.341583)
-Thing.create(city_id: 5609, lng: -71.080382, lat: 42.339504)
-Thing.create(city_id: 5610, lng: -71.082844, lat: 42.341503)
-Thing.create(city_id: 5611, lng: -71.08439, lat: 42.339968)
-Thing.create(city_id: 5612, lng: -71.079865, lat: 42.341261)
-Thing.create(city_id: 5613, lng: -71.107173, lat: 42.316569)
-Thing.create(city_id: 5614, lng: -71.102994, lat: 42.316544)
-Thing.create(city_id: 5615, lng: -71.106627, lat: 42.316546)
-Thing.create(city_id: 5616, lng: -71.082689, lat: 42.316456)
-Thing.create(city_id: 5617, lng: -71.071797, lat: 42.316386)
-Thing.create(city_id: 5618, lng: -71.050194, lat: 42.316293)
-Thing.create(city_id: 5619, lng: -71.097882, lat: 42.316469)
-Thing.create(city_id: 5620, lng: -71.100972, lat: 42.316476)
-Thing.create(city_id: 5621, lng: -71.086726, lat: 42.316414)
-Thing.create(city_id: 5622, lng: -71.096005, lat: 42.316434)
-Thing.create(city_id: 5623, lng: -71.109441, lat: 42.316455)
-Thing.create(city_id: 5624, lng: -71.081297, lat: 42.341169)
-Thing.create(city_id: 5625, lng: -71.037868, lat: 42.31618)
-Thing.create(city_id: 5626, lng: -71.105325, lat: 42.316428)
-Thing.create(city_id: 5627, lng: -71.108233, lat: 42.316437)
-Thing.create(city_id: 5628, lng: -71.091699, lat: 42.316376)
-Thing.create(city_id: 5629, lng: -71.076305, lat: 42.316317)
-Thing.create(city_id: 5630, lng: -71.07895, lat: 42.316311)
-Thing.create(city_id: 5631, lng: -71.098386, lat: 42.316376)
-Thing.create(city_id: 5632, lng: -71.080954, lat: 42.339704)
-Thing.create(city_id: 5633, lng: -71.082086, lat: 42.340978)
-Thing.create(city_id: 5634, lng: -71.089303, lat: 42.316291)
-Thing.create(city_id: 5635, lng: -71.07982, lat: 42.339447)
-Thing.create(city_id: 5636, lng: -71.081572, lat: 42.339332)
-Thing.create(city_id: 5637, lng: -71.038069, lat: 42.316065)
-Thing.create(city_id: 5638, lng: -71.09925, lat: 42.316281)
-Thing.create(city_id: 5639, lng: -71.080059, lat: 42.316201)
-Thing.create(city_id: 5640, lng: -71.039689, lat: 42.316025)
-Thing.create(city_id: 5641, lng: -71.123697, lat: 42.3163)
-Thing.create(city_id: 5642, lng: -71.112678, lat: 42.316248)
-Thing.create(city_id: 5643, lng: -71.085873, lat: 42.316145)
-Thing.create(city_id: 5644, lng: -71.077544, lat: 42.316044)
-Thing.create(city_id: 5645, lng: -71.114045, lat: 42.316153)
-Thing.create(city_id: 5646, lng: -71.080548, lat: 42.339056)
-Thing.create(city_id: 5647, lng: -71.071012, lat: 42.315959)
-Thing.create(city_id: 5648, lng: -71.090945, lat: 42.316028)
-Thing.create(city_id: 5649, lng: -71.081749, lat: 42.315987)
-Thing.create(city_id: 5650, lng: -71.116732, lat: 42.316103)
-Thing.create(city_id: 5651, lng: -71.084452, lat: 42.338602)
-Thing.create(city_id: 5652, lng: -71.082607, lat: 42.33876)
-Thing.create(city_id: 5653, lng: -71.070101, lat: 42.315923)
-Thing.create(city_id: 5654, lng: -71.079883, lat: 42.338642)
-Thing.create(city_id: 5655, lng: -71.096929, lat: 42.316002)
-Thing.create(city_id: 5656, lng: -71.072316, lat: 42.343484)
-Thing.create(city_id: 5657, lng: -71.054201, lat: 42.315836)
-Thing.create(city_id: 5658, lng: -71.081267, lat: 42.338668)
-Thing.create(city_id: 5659, lng: -71.071384, lat: 42.343912)
-Thing.create(city_id: 5660, lng: -71.080311, lat: 42.341576)
-Thing.create(city_id: 5661, lng: -71.102738, lat: 42.315977)
-Thing.create(city_id: 5662, lng: -71.072152, lat: 42.315853)
-Thing.create(city_id: 5663, lng: -71.078137, lat: 42.315871)
-Thing.create(city_id: 5664, lng: -71.063862, lat: 42.315813)
-Thing.create(city_id: 5665, lng: -71.084896, lat: 42.315879)
-Thing.create(city_id: 5666, lng: -71.077091, lat: 42.315843)
-Thing.create(city_id: 5667, lng: -71.103645, lat: 42.315935)
-Thing.create(city_id: 5668, lng: -71.08297, lat: 42.315856)
-Thing.create(city_id: 5669, lng: -71.087191, lat: 42.31586)
-Thing.create(city_id: 5670, lng: -71.069532, lat: 42.343908)
-Thing.create(city_id: 5671, lng: -71.088851, lat: 42.315863)
-Thing.create(city_id: 5672, lng: -71.076429, lat: 42.315816)
-Thing.create(city_id: 5673, lng: -71.100153, lat: 42.316429)
-Thing.create(city_id: 5674, lng: -71.10222, lat: 42.316413)
-Thing.create(city_id: 5675, lng: -71.07471, lat: 42.316281)
-Thing.create(city_id: 5676, lng: -71.072976, lat: 42.316228)
-Thing.create(city_id: 5677, lng: -71.070064, lat: 42.34366)
-Thing.create(city_id: 5678, lng: -71.097815, lat: 42.316177)
-Thing.create(city_id: 5679, lng: -71.094946, lat: 42.315878)
-Thing.create(city_id: 5680, lng: -71.079195, lat: 42.3437)
-Thing.create(city_id: 5681, lng: -71.077964, lat: 42.343879)
-Thing.create(city_id: 5682, lng: -71.107597, lat: 42.315887)
-Thing.create(city_id: 5683, lng: -71.065306, lat: 42.315717)
-Thing.create(city_id: 5684, lng: -71.082303, lat: 42.315766)
-Thing.create(city_id: 5685, lng: -71.075351, lat: 42.315739)
-Thing.create(city_id: 5686, lng: -71.067876, lat: 42.343824)
-Thing.create(city_id: 5687, lng: -71.109383, lat: 42.315842)
-Thing.create(city_id: 5688, lng: -71.101696, lat: 42.315806)
-Thing.create(city_id: 5689, lng: -71.076727, lat: 42.343785)
-Thing.create(city_id: 5690, lng: -71.073727, lat: 42.343722)
-Thing.create(city_id: 5691, lng: -71.093398, lat: 42.315745)
-Thing.create(city_id: 5692, lng: -71.123575, lat: 42.31584)
-Thing.create(city_id: 5693, lng: -71.050851, lat: 42.315566)
-Thing.create(city_id: 5694, lng: -71.100559, lat: 42.315726)
-Thing.create(city_id: 5695, lng: -71.090494, lat: 42.315691)
-Thing.create(city_id: 5696, lng: -71.09948, lat: 42.315715)
-Thing.create(city_id: 5697, lng: -71.098566, lat: 42.315704)
-Thing.create(city_id: 5698, lng: -71.089607, lat: 42.315665)
-Thing.create(city_id: 5699, lng: -71.083991, lat: 42.315636)
-Thing.create(city_id: 5700, lng: -71.095171, lat: 42.315615)
-Thing.create(city_id: 5701, lng: -71.111317, lat: 42.31563)
-Thing.create(city_id: 5702, lng: -71.071247, lat: 42.315468)
-Thing.create(city_id: 5703, lng: -71.091857, lat: 42.315496)
-Thing.create(city_id: 5704, lng: -71.077978, lat: 42.343267)
-Thing.create(city_id: 5705, lng: -71.115179, lat: 42.310196)
-Thing.create(city_id: 5706, lng: -71.090527, lat: 42.310108)
-Thing.create(city_id: 5707, lng: -71.075989, lat: 42.310026)
-Thing.create(city_id: 5708, lng: -71.074724, lat: 42.343451)
-Thing.create(city_id: 5709, lng: -71.104033, lat: 42.310091)
-Thing.create(city_id: 5710, lng: -71.048735, lat: 42.309883)
-Thing.create(city_id: 5711, lng: -71.074038, lat: 42.343238)
-Thing.create(city_id: 5712, lng: -71.098395, lat: 42.310058)
-Thing.create(city_id: 5713, lng: -71.120225, lat: 42.310132)
-Thing.create(city_id: 5714, lng: -71.100819, lat: 42.310035)
-Thing.create(city_id: 5715, lng: -71.123363, lat: 42.310104)
-Thing.create(city_id: 5716, lng: -71.118907, lat: 42.310086)
-Thing.create(city_id: 5717, lng: -71.125648, lat: 42.310088)
-Thing.create(city_id: 5718, lng: -71.080597, lat: 42.309923)
-Thing.create(city_id: 5719, lng: -71.082152, lat: 42.309922)
-Thing.create(city_id: 5720, lng: -71.122392, lat: 42.310056)
-Thing.create(city_id: 5721, lng: -71.086109, lat: 42.30993)
-Thing.create(city_id: 5722, lng: -71.084062, lat: 42.309921)
-Thing.create(city_id: 5723, lng: -71.07567, lat: 42.343406)
-Thing.create(city_id: 5724, lng: -71.072816, lat: 42.343451)
-Thing.create(city_id: 5725, lng: -71.081471, lat: 42.309873)
-Thing.create(city_id: 5726, lng: -71.127768, lat: 42.310014)
-Thing.create(city_id: 5727, lng: -71.07334, lat: 42.309817)
-Thing.create(city_id: 5728, lng: -71.060882, lat: 42.309761)
-Thing.create(city_id: 5729, lng: -71.101889, lat: 42.309909)
-Thing.create(city_id: 5730, lng: -71.068602, lat: 42.343397)
-Thing.create(city_id: 5731, lng: -71.120806, lat: 42.309958)
-Thing.create(city_id: 5732, lng: -71.0705, lat: 42.309778)
-Thing.create(city_id: 5733, lng: -71.071733, lat: 42.343276)
-Thing.create(city_id: 5734, lng: -71.10548, lat: 42.309861)
-Thing.create(city_id: 5735, lng: -71.076596, lat: 42.343183)
-Thing.create(city_id: 5736, lng: -71.071646, lat: 42.309698)
-Thing.create(city_id: 5737, lng: -71.079454, lat: 42.309723)
-Thing.create(city_id: 5738, lng: -71.087444, lat: 42.309752)
-Thing.create(city_id: 5739, lng: -71.082675, lat: 42.309732)
-Thing.create(city_id: 5740, lng: -71.084995, lat: 42.309734)
-Thing.create(city_id: 5741, lng: -71.078723, lat: 42.343239)
-Thing.create(city_id: 5742, lng: -71.130067, lat: 42.30988)
-Thing.create(city_id: 5743, lng: -71.110691, lat: 42.309806)
-Thing.create(city_id: 5744, lng: -71.113315, lat: 42.30981)
-Thing.create(city_id: 5745, lng: -71.075081, lat: 42.30967)
-Thing.create(city_id: 5746, lng: -71.099651, lat: 42.309756)
-Thing.create(city_id: 5747, lng: -71.102475, lat: 42.309762)
-Thing.create(city_id: 5748, lng: -71.06711, lat: 42.309631)
-Thing.create(city_id: 5749, lng: -71.088373, lat: 42.309652)
-Thing.create(city_id: 5750, lng: -71.115733, lat: 42.309744)
-Thing.create(city_id: 5751, lng: -71.091664, lat: 42.309657)
-Thing.create(city_id: 5752, lng: -71.129453, lat: 42.309735)
-Thing.create(city_id: 5753, lng: -71.083216, lat: 42.309558)
-Thing.create(city_id: 5754, lng: -71.107653, lat: 42.309632)
-Thing.create(city_id: 5755, lng: -71.068368, lat: 42.309475)
-Thing.create(city_id: 5756, lng: -71.089792, lat: 42.309553)
-Thing.create(city_id: 5757, lng: -71.124458, lat: 42.309649)
-Thing.create(city_id: 5758, lng: -71.072575, lat: 42.309447)
-Thing.create(city_id: 5759, lng: -71.080715, lat: 42.309447)
-Thing.create(city_id: 5760, lng: -71.075726, lat: 42.309418)
-Thing.create(city_id: 5761, lng: -71.13246, lat: 42.309603)
-Thing.create(city_id: 5762, lng: -71.131334, lat: 42.309577)
-Thing.create(city_id: 5763, lng: -71.074344, lat: 42.309379)
-Thing.create(city_id: 5764, lng: -71.133124, lat: 42.30958)
-Thing.create(city_id: 5765, lng: -71.079867, lat: 42.334371)
-Thing.create(city_id: 5766, lng: -71.114235, lat: 42.309483)
-Thing.create(city_id: 5767, lng: -71.082289, lat: 42.334758)
-Thing.create(city_id: 5768, lng: -71.069848, lat: 42.309278)
-Thing.create(city_id: 5769, lng: -71.126943, lat: 42.309473)
-Thing.create(city_id: 5770, lng: -71.11865, lat: 42.309434)
-Thing.create(city_id: 5771, lng: -71.103311, lat: 42.3099)
-Thing.create(city_id: 5772, lng: -71.112675, lat: 42.30987)
-Thing.create(city_id: 5773, lng: -71.123885, lat: 42.309847)
-Thing.create(city_id: 5774, lng: -71.081384, lat: 42.333973)
-Thing.create(city_id: 5775, lng: -71.098196, lat: 42.309651)
-Thing.create(city_id: 5776, lng: -71.081758, lat: 42.334718)
-Thing.create(city_id: 5777, lng: -71.104756, lat: 42.30955)
-Thing.create(city_id: 5778, lng: -71.112326, lat: 42.309402)
-Thing.create(city_id: 5779, lng: -71.1335, lat: 42.309438)
-Thing.create(city_id: 5780, lng: -71.087001, lat: 42.336952)
-Thing.create(city_id: 5781, lng: -71.082954, lat: 42.309236)
-Thing.create(city_id: 5782, lng: -71.109265, lat: 42.309325)
-Thing.create(city_id: 5783, lng: -71.078671, lat: 42.309214)
-Thing.create(city_id: 5784, lng: -71.071962, lat: 42.309176)
-Thing.create(city_id: 5785, lng: -71.067748, lat: 42.309155)
-Thing.create(city_id: 5786, lng: -71.070893, lat: 42.309163)
-Thing.create(city_id: 5787, lng: -71.085395, lat: 42.30921)
-Thing.create(city_id: 5788, lng: -71.086985, lat: 42.334508)
-Thing.create(city_id: 5789, lng: -71.082943, lat: 42.334479)
-Thing.create(city_id: 5790, lng: -71.082294, lat: 42.334149)
-Thing.create(city_id: 5791, lng: -71.073585, lat: 42.30913)
-Thing.create(city_id: 5792, lng: -71.122714, lat: 42.309285)
-Thing.create(city_id: 5793, lng: -71.120794, lat: 42.309267)
-Thing.create(city_id: 5794, lng: -71.103539, lat: 42.309195)
-Thing.create(city_id: 5795, lng: -71.086565, lat: 42.309134)
-Thing.create(city_id: 5796, lng: -71.069672, lat: 42.338196)
-Thing.create(city_id: 5797, lng: -71.080029, lat: 42.309053)
-Thing.create(city_id: 5798, lng: -71.125245, lat: 42.309209)
-Thing.create(city_id: 5799, lng: -71.082767, lat: 42.309044)
-Thing.create(city_id: 5800, lng: -71.111529, lat: 42.309129)
-Thing.create(city_id: 5801, lng: -71.108006, lat: 42.309105)
-Thing.create(city_id: 5802, lng: -71.116305, lat: 42.309124)
-Thing.create(city_id: 5803, lng: -71.088017, lat: 42.309017)
-Thing.create(city_id: 5804, lng: -71.090833, lat: 42.309017)
-Thing.create(city_id: 5805, lng: -71.089038, lat: 42.308995)
-Thing.create(city_id: 5806, lng: -71.110192, lat: 42.309063)
-Thing.create(city_id: 5807, lng: -71.083707, lat: 42.338424)
-Thing.create(city_id: 5808, lng: -71.101524, lat: 42.309001)
-Thing.create(city_id: 5809, lng: -71.0869, lat: 42.335852)
-Thing.create(city_id: 5810, lng: -71.075369, lat: 42.338346)
-Thing.create(city_id: 5811, lng: -71.071125, lat: 42.338379)
-Thing.create(city_id: 5812, lng: -71.076587, lat: 42.338401)
-Thing.create(city_id: 5813, lng: -71.069204, lat: 42.308847)
-Thing.create(city_id: 5814, lng: -71.068438, lat: 42.338204)
-Thing.create(city_id: 5815, lng: -71.107295, lat: 42.308959)
-Thing.create(city_id: 5816, lng: -71.074611, lat: 42.308834)
-Thing.create(city_id: 5817, lng: -71.128038, lat: 42.309018)
-Thing.create(city_id: 5818, lng: -71.1053, lat: 42.308811)
-Thing.create(city_id: 5819, lng: -71.095732, lat: 42.313656)
-Thing.create(city_id: 5820, lng: -71.087895, lat: 42.313623)
-Thing.create(city_id: 5821, lng: -71.099257, lat: 42.313651)
-Thing.create(city_id: 5822, lng: -71.07064, lat: 42.333997)
-Thing.create(city_id: 5823, lng: -71.061949, lat: 42.321101)
-Thing.create(city_id: 5824, lng: -71.069236, lat: 42.311765)
-Thing.create(city_id: 5825, lng: -71.066786, lat: 42.313502)
-Thing.create(city_id: 5826, lng: -71.12543, lat: 42.313695)
-Thing.create(city_id: 5827, lng: -71.07145, lat: 42.333434)
-Thing.create(city_id: 5828, lng: -71.106105, lat: 42.313623)
-Thing.create(city_id: 5829, lng: -71.078188, lat: 42.31351)
-Thing.create(city_id: 5830, lng: -71.108725, lat: 42.313615)
-Thing.create(city_id: 5831, lng: -71.074009, lat: 42.334988)
-Thing.create(city_id: 5832, lng: -71.119572, lat: 42.313647)
-Thing.create(city_id: 5833, lng: -71.080512, lat: 42.313505)
-Thing.create(city_id: 5834, lng: -71.072188, lat: 42.313471)
-Thing.create(city_id: 5835, lng: -71.093579, lat: 42.313529)
-Thing.create(city_id: 5836, lng: -71.105012, lat: 42.313564)
-Thing.create(city_id: 5837, lng: -71.08431, lat: 42.313468)
-Thing.create(city_id: 5838, lng: -71.089884, lat: 42.313482)
-Thing.create(city_id: 5839, lng: -71.065976, lat: 42.33376)
-Thing.create(city_id: 5840, lng: -71.091734, lat: 42.313435)
-Thing.create(city_id: 5841, lng: -71.101715, lat: 42.313463)
-Thing.create(city_id: 5842, lng: -71.073687, lat: 42.335126)
-Thing.create(city_id: 5843, lng: -71.060947, lat: 42.335653)
-Thing.create(city_id: 5844, lng: -71.094899, lat: 42.31341)
-Thing.create(city_id: 5845, lng: -71.064203, lat: 42.311578)
-Thing.create(city_id: 5846, lng: -71.122257, lat: 42.313473)
-Thing.create(city_id: 5847, lng: -71.103265, lat: 42.313395)
-Thing.create(city_id: 5848, lng: -71.06264, lat: 42.334154)
-Thing.create(city_id: 5849, lng: -71.107416, lat: 42.313385)
-Thing.create(city_id: 5850, lng: -71.066607, lat: 42.33377)
-Thing.create(city_id: 5851, lng: -71.066107, lat: 42.336065)
-Thing.create(city_id: 5852, lng: -71.092258, lat: 42.313292)
-Thing.create(city_id: 5853, lng: -71.097435, lat: 42.313306)
-Thing.create(city_id: 5854, lng: -71.05571, lat: 42.379054)
-Thing.create(city_id: 5855, lng: -71.065814, lat: 42.337156)
-Thing.create(city_id: 5856, lng: -71.041717, lat: 42.338093)
-Thing.create(city_id: 5857, lng: -71.079603, lat: 42.313182)
-Thing.create(city_id: 5858, lng: -71.055292, lat: 42.313088)
-Thing.create(city_id: 5859, lng: -71.065368, lat: 42.337979)
-Thing.create(city_id: 5860, lng: -71.099506, lat: 42.313232)
-Thing.create(city_id: 5861, lng: -71.063181, lat: 42.313089)
-Thing.create(city_id: 5862, lng: -71.086935, lat: 42.313168)
-Thing.create(city_id: 5863, lng: -71.088936, lat: 42.313172)
-Thing.create(city_id: 5864, lng: -71.108546, lat: 42.313233)
-Thing.create(city_id: 5865, lng: -71.065547, lat: 42.334588)
-Thing.create(city_id: 5866, lng: -71.08503, lat: 42.31314)
-Thing.create(city_id: 5867, lng: -71.066007, lat: 42.336474)
-Thing.create(city_id: 5868, lng: -71.077371, lat: 42.313104)
-Thing.create(city_id: 5869, lng: -71.078915, lat: 42.313081)
-Thing.create(city_id: 5870, lng: -71.109409, lat: 42.313178)
-Thing.create(city_id: 5871, lng: -71.110921, lat: 42.313172)
-Thing.create(city_id: 5872, lng: -71.07146, lat: 42.313006)
-Thing.create(city_id: 5873, lng: -71.123159, lat: 42.313184)
-Thing.create(city_id: 5874, lng: -71.102851, lat: 42.313107)
-Thing.create(city_id: 5875, lng: -71.128375, lat: 42.313189)
-Thing.create(city_id: 5876, lng: -71.114215, lat: 42.313136)
-Thing.create(city_id: 5877, lng: -71.098913, lat: 42.313008)
-Thing.create(city_id: 5878, lng: -71.110345, lat: 42.313743)
-Thing.create(city_id: 5879, lng: -71.048712, lat: 42.339332)
-Thing.create(city_id: 5880, lng: -71.075974, lat: 42.313289)
-Thing.create(city_id: 5881, lng: -71.073267, lat: 42.313217)
-Thing.create(city_id: 5882, lng: -71.104161, lat: 42.313257)
-Thing.create(city_id: 5883, lng: -71.072707, lat: 42.338179)
-Thing.create(city_id: 5884, lng: -71.05471, lat: 42.379028)
-Thing.create(city_id: 5885, lng: -71.124775, lat: 42.313185)
-Thing.create(city_id: 5886, lng: -71.076575, lat: 42.31296)
-Thing.create(city_id: 5887, lng: -71.064161, lat: 42.378956)
-Thing.create(city_id: 5888, lng: -71.067251, lat: 42.338061)
-Thing.create(city_id: 5889, lng: -71.074956, lat: 42.312913)
-Thing.create(city_id: 5890, lng: -71.090752, lat: 42.312954)
-Thing.create(city_id: 5891, lng: -71.105331, lat: 42.312993)
-Thing.create(city_id: 5892, lng: -71.083293, lat: 42.312914)
-Thing.create(city_id: 5893, lng: -71.07262, lat: 42.312871)
-Thing.create(city_id: 5894, lng: -71.121575, lat: 42.313025)
-Thing.create(city_id: 5895, lng: -71.080919, lat: 42.312875)
-Thing.create(city_id: 5896, lng: -71.064641, lat: 42.378549)
-Thing.create(city_id: 5897, lng: -71.127155, lat: 42.313026)
-Thing.create(city_id: 5898, lng: -71.106438, lat: 42.312952)
-Thing.create(city_id: 5899, lng: -71.063537, lat: 42.378683)
-Thing.create(city_id: 5900, lng: -71.101268, lat: 42.312907)
-Thing.create(city_id: 5901, lng: -71.070481, lat: 42.337839)
-Thing.create(city_id: 5902, lng: -71.061976, lat: 42.37871)
-Thing.create(city_id: 5903, lng: -71.069122, lat: 42.337742)
-Thing.create(city_id: 5904, lng: -71.056859, lat: 42.378629)
-Thing.create(city_id: 5905, lng: -71.115133, lat: 42.312926)
-Thing.create(city_id: 5906, lng: -71.093863, lat: 42.31285)
-Thing.create(city_id: 5907, lng: -71.079407, lat: 42.337984)
-Thing.create(city_id: 5908, lng: -71.07843, lat: 42.337978)
-Thing.create(city_id: 5909, lng: -71.096635, lat: 42.312823)
-Thing.create(city_id: 5910, lng: -71.123822, lat: 42.312901)
-Thing.create(city_id: 5911, lng: -71.087919, lat: 42.312775)
-Thing.create(city_id: 5912, lng: -71.095691, lat: 42.312801)
-Thing.create(city_id: 5913, lng: -71.071524, lat: 42.337956)
-Thing.create(city_id: 5914, lng: -71.076434, lat: 42.337547)
-Thing.create(city_id: 5915, lng: -71.075274, lat: 42.337546)
-Thing.create(city_id: 5916, lng: -71.118776, lat: 42.312856)
-Thing.create(city_id: 5917, lng: -71.100295, lat: 42.312775)
-Thing.create(city_id: 5918, lng: -71.077295, lat: 42.337951)
-Thing.create(city_id: 5919, lng: -71.079182, lat: 42.312684)
-Thing.create(city_id: 5920, lng: -71.072112, lat: 42.33748)
-Thing.create(city_id: 5921, lng: -71.075572, lat: 42.337697)
-Thing.create(city_id: 5922, lng: -71.085977, lat: 42.312692)
-Thing.create(city_id: 5923, lng: -71.073251, lat: 42.337605)
-Thing.create(city_id: 5924, lng: -71.076456, lat: 42.312653)
-Thing.create(city_id: 5925, lng: -71.092191, lat: 42.312698)
-Thing.create(city_id: 5926, lng: -71.103847, lat: 42.312733)
-Thing.create(city_id: 5927, lng: -71.06796, lat: 42.337558)
-Thing.create(city_id: 5928, lng: -71.113236, lat: 42.312732)
-Thing.create(city_id: 5929, lng: -71.08411, lat: 42.312626)
-Thing.create(city_id: 5930, lng: -71.078089, lat: 42.312603)
-Thing.create(city_id: 5931, lng: -71.098631, lat: 42.31263)
-Thing.create(city_id: 5932, lng: -71.077949, lat: 42.337513)
-Thing.create(city_id: 5933, lng: -71.115893, lat: 42.312677)
-Thing.create(city_id: 5934, lng: -71.073983, lat: 42.312501)
-Thing.create(city_id: 5935, lng: -71.110271, lat: 42.312584)
-Thing.create(city_id: 5936, lng: -71.089913, lat: 42.31251)
-Thing.create(city_id: 5937, lng: -71.105293, lat: 42.312538)
-Thing.create(city_id: 5938, lng: -71.105591, lat: 42.312524)
-Thing.create(city_id: 5939, lng: -71.103382, lat: 42.312504)
-Thing.create(city_id: 5940, lng: -71.069516, lat: 42.337199)
-Thing.create(city_id: 5941, lng: -71.099443, lat: 42.312454)
-Thing.create(city_id: 5942, lng: -71.091356, lat: 42.312407)
-Thing.create(city_id: 5943, lng: -71.120595, lat: 42.312501)
-Thing.create(city_id: 5944, lng: -71.080233, lat: 42.31236)
-Thing.create(city_id: 5945, lng: -71.108578, lat: 42.312456)
-Thing.create(city_id: 5946, lng: -71.127846, lat: 42.312511)
-Thing.create(city_id: 5947, lng: -71.125016, lat: 42.312489)
-Thing.create(city_id: 5948, lng: -71.087015, lat: 42.312325)
-Thing.create(city_id: 5949, lng: -71.096674, lat: 42.312348)
-Thing.create(city_id: 5950, lng: -71.068296, lat: 42.339894)
-Thing.create(city_id: 5951, lng: -71.116911, lat: 42.312406)
-Thing.create(city_id: 5952, lng: -71.126532, lat: 42.312426)
-Thing.create(city_id: 5953, lng: -71.122821, lat: 42.312403)
-Thing.create(city_id: 5954, lng: -71.109336, lat: 42.312339)
-Thing.create(city_id: 5955, lng: -71.075549, lat: 42.312218)
-Thing.create(city_id: 5956, lng: -71.086621, lat: 42.276686)
-Thing.create(city_id: 5957, lng: -71.081816, lat: 42.312206)
-Thing.create(city_id: 5958, lng: -71.085992, lat: 42.277394)
-Thing.create(city_id: 5959, lng: -71.122186, lat: 42.312334)
-Thing.create(city_id: 5960, lng: -71.073019, lat: 42.312147)
-Thing.create(city_id: 5961, lng: -71.101097, lat: 42.312246)
-Thing.create(city_id: 5962, lng: -71.112389, lat: 42.312281)
-Thing.create(city_id: 5963, lng: -71.124348, lat: 42.312318)
-Thing.create(city_id: 5964, lng: -71.106787, lat: 42.312256)
-Thing.create(city_id: 5965, lng: -71.085323, lat: 42.312174)
-Thing.create(city_id: 5966, lng: -71.109273, lat: 42.263907)
-Thing.create(city_id: 5967, lng: -71.097918, lat: 42.312213)
-Thing.create(city_id: 5968, lng: -71.077072, lat: 42.346286)
-Thing.create(city_id: 5969, lng: -71.089012, lat: 42.312155)
-Thing.create(city_id: 5970, lng: -71.077154, lat: 42.312087)
-Thing.create(city_id: 5971, lng: -71.121365, lat: 42.312236)
-Thing.create(city_id: 5972, lng: -71.071441, lat: 42.337138)
-Thing.create(city_id: 5973, lng: -71.102879, lat: 42.312169)
-Thing.create(city_id: 5974, lng: -71.092899, lat: 42.31213)
-Thing.create(city_id: 5975, lng: -71.085416, lat: 42.278045)
-Thing.create(city_id: 5976, lng: -71.075793, lat: 42.312661)
-Thing.create(city_id: 5977, lng: -71.102382, lat: 42.312732)
-Thing.create(city_id: 5978, lng: -71.108071, lat: 42.312691)
-Thing.create(city_id: 5979, lng: -71.087206, lat: 42.27603)
-Thing.create(city_id: 5980, lng: -71.079557, lat: 42.31244)
-Thing.create(city_id: 5981, lng: -71.072635, lat: 42.337067)
-Thing.create(city_id: 5982, lng: -71.108918, lat: 42.263138)
-Thing.create(city_id: 5983, lng: -71.068232, lat: 42.340115)
-Thing.create(city_id: 5984, lng: -71.075082, lat: 42.337153)
-Thing.create(city_id: 5985, lng: -71.076772, lat: 42.337429)
-Thing.create(city_id: 5986, lng: -71.072226, lat: 42.311995)
-Thing.create(city_id: 5987, lng: -71.079277, lat: 42.337433)
-Thing.create(city_id: 5988, lng: -71.082829, lat: 42.312027)
-Thing.create(city_id: 5989, lng: -71.098455, lat: 42.312074)
-Thing.create(city_id: 5990, lng: -71.078729, lat: 42.311998)
-Thing.create(city_id: 5991, lng: -71.07434, lat: 42.311966)
-Thing.create(city_id: 5992, lng: -71.074066, lat: 42.337261)
-Thing.create(city_id: 5993, lng: -71.114138, lat: 42.31209)
-Thing.create(city_id: 5994, lng: -71.097424, lat: 42.31203)
-Thing.create(city_id: 5995, lng: -71.090578, lat: 42.312003)
-Thing.create(city_id: 5996, lng: -71.118026, lat: 42.312096)
-Thing.create(city_id: 5997, lng: -71.105894, lat: 42.312048)
-Thing.create(city_id: 5998, lng: -71.104484, lat: 42.312035)
-Thing.create(city_id: 5999, lng: -71.072145, lat: 42.336684)
-Thing.create(city_id: 6000, lng: -71.113352, lat: 42.312048)
-Thing.create(city_id: 6001, lng: -71.05003, lat: 42.311816)
-Thing.create(city_id: 6002, lng: -71.129291, lat: 42.312068)
-Thing.create(city_id: 6003, lng: -71.059527, lat: 42.378505)
-Thing.create(city_id: 6004, lng: -71.108447, lat: 42.311975)
-Thing.create(city_id: 6005, lng: -71.047093, lat: 42.311732)
-Thing.create(city_id: 6006, lng: -71.093291, lat: 42.311897)
-Thing.create(city_id: 6007, lng: -71.086074, lat: 42.311855)
-Thing.create(city_id: 6008, lng: -71.079443, lat: 42.336505)
-Thing.create(city_id: 6009, lng: -71.075637, lat: 42.336484)
-Thing.create(city_id: 6010, lng: -71.080698, lat: 42.311792)
-Thing.create(city_id: 6011, lng: -71.053529, lat: 42.378562)
-Thing.create(city_id: 6012, lng: -71.128695, lat: 42.311953)
-Thing.create(city_id: 6013, lng: -71.07548, lat: 42.311761)
-Thing.create(city_id: 6014, lng: -71.125517, lat: 42.311903)
-Thing.create(city_id: 6015, lng: -71.103643, lat: 42.311829)
-Thing.create(city_id: 6016, lng: -71.068427, lat: 42.336997)
-Thing.create(city_id: 6017, lng: -71.12664, lat: 42.311896)
-Thing.create(city_id: 6018, lng: -71.08817, lat: 42.311764)
-Thing.create(city_id: 6019, lng: -71.076651, lat: 42.336385)
-Thing.create(city_id: 6020, lng: -71.069927, lat: 42.33593)
-Thing.create(city_id: 6021, lng: -71.073535, lat: 42.311681)
-Thing.create(city_id: 6022, lng: -71.127736, lat: 42.311857)
-Thing.create(city_id: 6023, lng: -71.076101, lat: 42.336864)
-Thing.create(city_id: 6024, lng: -71.061199, lat: 42.378429)
-Thing.create(city_id: 6025, lng: -71.092042, lat: 42.311701)
-Thing.create(city_id: 6026, lng: -71.078506, lat: 42.336789)
-Thing.create(city_id: 6027, lng: -71.081972, lat: 42.31166)
-Thing.create(city_id: 6028, lng: -71.06634, lat: 42.378374)
-Thing.create(city_id: 6029, lng: -71.089815, lat: 42.31166)
-Thing.create(city_id: 6030, lng: -71.084338, lat: 42.311632)
-Thing.create(city_id: 6031, lng: -71.077033, lat: 42.336688)
-Thing.create(city_id: 6032, lng: -71.056026, lat: 42.378273)
-Thing.create(city_id: 6033, lng: -71.078014, lat: 42.336396)
-Thing.create(city_id: 6034, lng: -71.077828, lat: 42.336709)
-Thing.create(city_id: 6035, lng: -71.073291, lat: 42.336617)
-Thing.create(city_id: 6036, lng: -71.077149, lat: 42.311517)
-Thing.create(city_id: 6037, lng: -71.079685, lat: 42.311486)
-Thing.create(city_id: 6038, lng: -71.074705, lat: 42.311468)
-Thing.create(city_id: 6039, lng: -71.07025, lat: 42.335928)
-Thing.create(city_id: 6040, lng: -71.122824, lat: 42.311622)
-Thing.create(city_id: 6041, lng: -71.073908, lat: 42.336115)
-Thing.create(city_id: 6042, lng: -71.115967, lat: 42.311523)
-Thing.create(city_id: 6043, lng: -71.072643, lat: 42.336069)
-Thing.create(city_id: 6044, lng: -71.100643, lat: 42.311452)
-Thing.create(city_id: 6045, lng: -71.102695, lat: 42.311455)
-Thing.create(city_id: 6046, lng: -71.12216, lat: 42.311515)
-Thing.create(city_id: 6047, lng: -71.075059, lat: 42.336011)
-Thing.create(city_id: 6048, lng: -71.072438, lat: 42.311338)
-Thing.create(city_id: 6049, lng: -71.097865, lat: 42.311425)
-Thing.create(city_id: 6050, lng: -71.078001, lat: 42.335926)
-Thing.create(city_id: 6051, lng: -71.124894, lat: 42.311504)
-Thing.create(city_id: 6052, lng: -71.107199, lat: 42.311442)
-Thing.create(city_id: 6053, lng: -71.087334, lat: 42.311356)
-Thing.create(city_id: 6054, lng: -71.13117, lat: 42.311486)
-Thing.create(city_id: 6055, lng: -71.089004, lat: 42.31128)
-Thing.create(city_id: 6056, lng: -71.081106, lat: 42.311249)
-Thing.create(city_id: 6057, lng: -71.132125, lat: 42.311384)
-Thing.create(city_id: 6058, lng: -71.128673, lat: 42.311363)
-Thing.create(city_id: 6059, lng: -71.103831, lat: 42.311278)
-Thing.create(city_id: 6060, lng: -71.079405, lat: 42.334367)
-Thing.create(city_id: 6061, lng: -71.077412, lat: 42.335903)
-Thing.create(city_id: 6062, lng: -71.076338, lat: 42.311604)
-Thing.create(city_id: 6063, lng: -71.078012, lat: 42.311478)
-Thing.create(city_id: 6064, lng: -71.105072, lat: 42.311479)
-Thing.create(city_id: 6065, lng: -71.076417, lat: 42.335863)
-Thing.create(city_id: 6066, lng: -71.076796, lat: 42.335908)
-Thing.create(city_id: 6067, lng: -71.121231, lat: 42.31144)
-Thing.create(city_id: 6068, lng: -71.130264, lat: 42.311362)
-Thing.create(city_id: 6069, lng: -71.093129, lat: 42.311234)
-Thing.create(city_id: 6070, lng: -71.076965, lat: 42.335529)
-Thing.create(city_id: 6071, lng: -71.090972, lat: 42.31121)
-Thing.create(city_id: 6072, lng: -71.079223, lat: 42.334892)
-Thing.create(city_id: 6073, lng: -71.082185, lat: 42.311168)
-Thing.create(city_id: 6074, lng: -71.075543, lat: 42.311143)
-Thing.create(city_id: 6075, lng: -71.079565, lat: 42.335512)
-Thing.create(city_id: 6076, lng: -71.070603, lat: 42.335446)
-Thing.create(city_id: 6077, lng: -71.092445, lat: 42.311176)
-Thing.create(city_id: 6078, lng: -71.078783, lat: 42.311115)
-Thing.create(city_id: 6079, lng: -71.083023, lat: 42.311121)
-Thing.create(city_id: 6080, lng: -71.078711, lat: 42.335325)
-Thing.create(city_id: 6081, lng: -71.129319, lat: 42.311258)
-Thing.create(city_id: 6082, lng: -71.086392, lat: 42.311108)
-Thing.create(city_id: 6083, lng: -71.125293, lat: 42.311202)
-Thing.create(city_id: 6084, lng: -71.069528, lat: 42.310994)
-Thing.create(city_id: 6085, lng: -71.071887, lat: 42.334758)
-Thing.create(city_id: 6086, lng: -71.099766, lat: 42.311074)
-Thing.create(city_id: 6087, lng: -71.10652, lat: 42.311087)
-Thing.create(city_id: 6088, lng: -71.075158, lat: 42.335164)
-Thing.create(city_id: 6089, lng: -71.071115, lat: 42.335313)
-Thing.create(city_id: 6090, lng: -71.074148, lat: 42.310943)
-Thing.create(city_id: 6091, lng: -71.078656, lat: 42.334132)
-Thing.create(city_id: 6092, lng: -71.114662, lat: 42.311068)
-Thing.create(city_id: 6093, lng: -71.07878, lat: 42.334881)
-Thing.create(city_id: 6094, lng: -71.07592, lat: 42.334671)
-Thing.create(city_id: 6095, lng: -71.07765, lat: 42.310908)
-Thing.create(city_id: 6096, lng: -71.071975, lat: 42.334473)
-Thing.create(city_id: 6097, lng: -71.116961, lat: 42.311037)
-Thing.create(city_id: 6098, lng: -71.080238, lat: 42.310903)
-Thing.create(city_id: 6099, lng: -71.07472, lat: 42.334471)
-Thing.create(city_id: 6100, lng: -71.104542, lat: 42.310938)
-Thing.create(city_id: 6101, lng: -71.113603, lat: 42.31096)
-Thing.create(city_id: 6102, lng: -71.115592, lat: 42.310944)
-Thing.create(city_id: 6103, lng: -71.08831, lat: 42.310817)
-Thing.create(city_id: 6104, lng: -71.112566, lat: 42.310892)
-Thing.create(city_id: 6105, lng: -71.119665, lat: 42.310912)
-Thing.create(city_id: 6106, lng: -71.10329, lat: 42.310842)
-Thing.create(city_id: 6107, lng: -71.087565, lat: 42.310784)
-Thing.create(city_id: 6108, lng: -71.068681, lat: 42.310696)
-Thing.create(city_id: 6109, lng: -71.090002, lat: 42.310745)
-Thing.create(city_id: 6110, lng: -71.122658, lat: 42.31085)
-Thing.create(city_id: 6111, lng: -71.101052, lat: 42.310772)
-Thing.create(city_id: 6112, lng: -71.127554, lat: 42.310853)
-Thing.create(city_id: 6113, lng: -71.097917, lat: 42.310745)
-Thing.create(city_id: 6114, lng: -71.124108, lat: 42.310814)
-Thing.create(city_id: 6115, lng: -71.076426, lat: 42.334069)
-Thing.create(city_id: 6116, lng: -71.125825, lat: 42.310813)
-Thing.create(city_id: 6117, lng: -71.131288, lat: 42.310817)
-Thing.create(city_id: 6118, lng: -71.071879, lat: 42.3106)
-Thing.create(city_id: 6119, lng: -71.075569, lat: 42.310612)
-Thing.create(city_id: 6120, lng: -71.081614, lat: 42.310619)
-Thing.create(city_id: 6121, lng: -71.072901, lat: 42.310579)
-Thing.create(city_id: 6122, lng: -71.085741, lat: 42.310615)
-Thing.create(city_id: 6123, lng: -71.11121, lat: 42.310704)
-Thing.create(city_id: 6124, lng: -71.1327, lat: 42.310774)
-Thing.create(city_id: 6125, lng: -71.074161, lat: 42.334017)
-Thing.create(city_id: 6126, lng: -71.107678, lat: 42.310659)
-Thing.create(city_id: 6127, lng: -71.082552, lat: 42.310566)
-Thing.create(city_id: 6128, lng: -71.098479, lat: 42.310615)
-Thing.create(city_id: 6129, lng: -71.073308, lat: 42.3338)
-Thing.create(city_id: 6130, lng: -71.11913, lat: 42.310656)
-Thing.create(city_id: 6131, lng: -71.121926, lat: 42.310655)
-Thing.create(city_id: 6132, lng: -71.121016, lat: 42.310648)
-Thing.create(city_id: 6133, lng: -71.100149, lat: 42.310554)
-Thing.create(city_id: 6134, lng: -71.104852, lat: 42.310566)
-Thing.create(city_id: 6135, lng: -71.102402, lat: 42.310554)
-Thing.create(city_id: 6136, lng: -71.079132, lat: 42.310463)
-Thing.create(city_id: 6137, lng: -71.124322, lat: 42.310608)
-Thing.create(city_id: 6138, lng: -71.049519, lat: 42.336643)
-Thing.create(city_id: 6139, lng: -71.086887, lat: 42.310468)
-Thing.create(city_id: 6140, lng: -71.04776, lat: 42.310305)
-Thing.create(city_id: 6141, lng: -71.076959, lat: 42.310411)
-Thing.create(city_id: 6142, lng: -71.042606, lat: 42.338083)
-Thing.create(city_id: 6143, lng: -71.070053, lat: 42.310381)
-Thing.create(city_id: 6144, lng: -71.079214, lat: 42.333568)
-Thing.create(city_id: 6145, lng: -71.077192, lat: 42.333567)
-Thing.create(city_id: 6146, lng: -71.091596, lat: 42.310423)
-Thing.create(city_id: 6147, lng: -71.080693, lat: 42.310384)
-Thing.create(city_id: 6148, lng: -71.108707, lat: 42.310476)
-Thing.create(city_id: 6149, lng: -71.067982, lat: 42.310321)
-Thing.create(city_id: 6150, lng: -71.078561, lat: 42.333451)
-Thing.create(city_id: 6151, lng: -71.107145, lat: 42.310455)
-Thing.create(city_id: 6152, lng: -71.112308, lat: 42.310448)
-Thing.create(city_id: 6153, lng: -71.085, lat: 42.310324)
-Thing.create(city_id: 6154, lng: -71.124847, lat: 42.310457)
-Thing.create(city_id: 6155, lng: -71.105534, lat: 42.311027)
-Thing.create(city_id: 6156, lng: -71.050701, lat: 42.337409)
-Thing.create(city_id: 6157, lng: -71.072977, lat: 42.333381)
-Thing.create(city_id: 6158, lng: -71.060577, lat: 42.310713)
-Thing.create(city_id: 6159, lng: -71.048749, lat: 42.336148)
-Thing.create(city_id: 6160, lng: -71.074705, lat: 42.310655)
-Thing.create(city_id: 6161, lng: -71.130073, lat: 42.310465)
-Thing.create(city_id: 6162, lng: -71.092502, lat: 42.310334)
-Thing.create(city_id: 6163, lng: -71.087677, lat: 42.310305)
-Thing.create(city_id: 6164, lng: -71.06525, lat: 42.332215)
-Thing.create(city_id: 6165, lng: -71.116303, lat: 42.310393)
-Thing.create(city_id: 6166, lng: -71.089208, lat: 42.310279)
-Thing.create(city_id: 6167, lng: -71.041531, lat: 42.337317)
-Thing.create(city_id: 6168, lng: -71.042514, lat: 42.337253)
-Thing.create(city_id: 6169, lng: -71.099212, lat: 42.310286)
-Thing.create(city_id: 6170, lng: -71.129276, lat: 42.310383)
-Thing.create(city_id: 6171, lng: -71.050082, lat: 42.337219)
-Thing.create(city_id: 6172, lng: -71.072062, lat: 42.310142)
-Thing.create(city_id: 6173, lng: -71.106335, lat: 42.310234)
-Thing.create(city_id: 6174, lng: -71.069099, lat: 42.310075)
-Thing.create(city_id: 6175, lng: -71.121271, lat: 42.289422)
-Thing.create(city_id: 6176, lng: -71.141752, lat: 42.289487)
-Thing.create(city_id: 6177, lng: -71.089905, lat: 42.289307)
-Thing.create(city_id: 6178, lng: -71.052316, lat: 42.28914)
-Thing.create(city_id: 6179, lng: -71.15039, lat: 42.28948)
-Thing.create(city_id: 6180, lng: -71.147648, lat: 42.289471)
-Thing.create(city_id: 6181, lng: -71.07941, lat: 42.289241)
-Thing.create(city_id: 6182, lng: -71.059073, lat: 42.289162)
-Thing.create(city_id: 6183, lng: -71.077613, lat: 42.289228)
-Thing.create(city_id: 6184, lng: -71.134513, lat: 42.289419)
-Thing.create(city_id: 6185, lng: -71.117067, lat: 42.289351)
-Thing.create(city_id: 6186, lng: -71.129951, lat: 42.289367)
-Thing.create(city_id: 6187, lng: -71.054861, lat: 42.2891)
-Thing.create(city_id: 6188, lng: -71.128605, lat: 42.28935)
-Thing.create(city_id: 6189, lng: -71.061561, lat: 42.289111)
-Thing.create(city_id: 6190, lng: -71.155885, lat: 42.289426)
-Thing.create(city_id: 6191, lng: -71.0701, lat: 42.289134)
-Thing.create(city_id: 6192, lng: -71.135721, lat: 42.289352)
-Thing.create(city_id: 6193, lng: -71.066616, lat: 42.28911)
-Thing.create(city_id: 6194, lng: -71.156771, lat: 42.28941)
-Thing.create(city_id: 6195, lng: -71.123337, lat: 42.289295)
-Thing.create(city_id: 6196, lng: -71.048721, lat: 42.289008)
-Thing.create(city_id: 6197, lng: -71.074018, lat: 42.289095)
-Thing.create(city_id: 6198, lng: -71.146171, lat: 42.289335)
-Thing.create(city_id: 6199, lng: -71.053145, lat: 42.289575)
-Thing.create(city_id: 6200, lng: -71.163406, lat: 42.2899)
-Thing.create(city_id: 6201, lng: -71.152817, lat: 42.289848)
-Thing.create(city_id: 6202, lng: -71.170409, lat: 42.289841)
-Thing.create(city_id: 6203, lng: -71.058152, lat: 42.289404)
-Thing.create(city_id: 6204, lng: -71.087117, lat: 42.289432)
-Thing.create(city_id: 6205, lng: -71.168543, lat: 42.289643)
-Thing.create(city_id: 6206, lng: -71.116469, lat: 42.289429)
-Thing.create(city_id: 6207, lng: -71.165545, lat: 42.28939)
-Thing.create(city_id: 6208, lng: -71.149148, lat: 42.289338)
-Thing.create(city_id: 6209, lng: -71.115129, lat: 42.289229)
-Thing.create(city_id: 6210, lng: -71.160759, lat: 42.289371)
-Thing.create(city_id: 6211, lng: -71.046857, lat: 42.288975)
-Thing.create(city_id: 6212, lng: -71.118126, lat: 42.289233)
-Thing.create(city_id: 6213, lng: -71.167135, lat: 42.289374)
-Thing.create(city_id: 6214, lng: -71.138017, lat: 42.289277)
-Thing.create(city_id: 6215, lng: -71.166336, lat: 42.289351)
-Thing.create(city_id: 6216, lng: -71.082562, lat: 42.28906)
-Thing.create(city_id: 6217, lng: -71.162672, lat: 42.289321)
-Thing.create(city_id: 6218, lng: -71.114375, lat: 42.289163)
-Thing.create(city_id: 6219, lng: -71.154334, lat: 42.289286)
-Thing.create(city_id: 6220, lng: -71.133763, lat: 42.289215)
-Thing.create(city_id: 6221, lng: -71.063504, lat: 42.288966)
-Thing.create(city_id: 6222, lng: -71.153521, lat: 42.289265)
-Thing.create(city_id: 6223, lng: -71.08768, lat: 42.289047)
-Thing.create(city_id: 6224, lng: -71.169538, lat: 42.289301)
-Thing.create(city_id: 6225, lng: -71.171183, lat: 42.289303)
-Thing.create(city_id: 6226, lng: -71.053225, lat: 42.288902)
-Thing.create(city_id: 6227, lng: -71.047609, lat: 42.288871)
-Thing.create(city_id: 6228, lng: -71.05999, lat: 42.288919)
-Thing.create(city_id: 6229, lng: -71.158438, lat: 42.289252)
-Thing.create(city_id: 6230, lng: -71.172394, lat: 42.28929)
-Thing.create(city_id: 6231, lng: -71.170205, lat: 42.289273)
-Thing.create(city_id: 6232, lng: -71.148473, lat: 42.289185)
-Thing.create(city_id: 6233, lng: -71.152323, lat: 42.289187)
-Thing.create(city_id: 6234, lng: -71.039873, lat: 42.288791)
-Thing.create(city_id: 6235, lng: -71.144976, lat: 42.289161)
-Thing.create(city_id: 6236, lng: -71.085486, lat: 42.282678)
-Thing.create(city_id: 6237, lng: -71.048957, lat: 42.282537)
-Thing.create(city_id: 6238, lng: -71.135979, lat: 42.282844)
-Thing.create(city_id: 6239, lng: -71.159848, lat: 42.282907)
-Thing.create(city_id: 6240, lng: -71.099354, lat: 42.282701)
-Thing.create(city_id: 6241, lng: -71.08288, lat: 42.282636)
-Thing.create(city_id: 6242, lng: -71.094633, lat: 42.282671)
-Thing.create(city_id: 6243, lng: -71.090858, lat: 42.282654)
-Thing.create(city_id: 6244, lng: -71.051829, lat: 42.282504)
-Thing.create(city_id: 6245, lng: -71.060196, lat: 42.282536)
-Thing.create(city_id: 6246, lng: -71.074411, lat: 42.282587)
-Thing.create(city_id: 6247, lng: -71.06669, lat: 42.282549)
-Thing.create(city_id: 6248, lng: -71.160339, lat: 42.282863)
-Thing.create(city_id: 6249, lng: -71.053349, lat: 42.282493)
-Thing.create(city_id: 6250, lng: -71.141015, lat: 42.282801)
-Thing.create(city_id: 6251, lng: -71.127926, lat: 42.282754)
-Thing.create(city_id: 6252, lng: -71.16265, lat: 42.282852)
-Thing.create(city_id: 6253, lng: -71.06339, lat: 42.282517)
-Thing.create(city_id: 6254, lng: -71.155555, lat: 42.282819)
-Thing.create(city_id: 6255, lng: -71.134534, lat: 42.282732)
-Thing.create(city_id: 6256, lng: -71.061093, lat: 42.282461)
-Thing.create(city_id: 6257, lng: -71.04951, lat: 42.282411)
-Thing.create(city_id: 6258, lng: -71.162014, lat: 42.28278)
-Thing.create(city_id: 6259, lng: -71.132284, lat: 42.282676)
-Thing.create(city_id: 6260, lng: -71.069842, lat: 42.282414)
-Thing.create(city_id: 6261, lng: -71.059367, lat: 42.282373)
-Thing.create(city_id: 6262, lng: -71.052534, lat: 42.282345)
-Thing.create(city_id: 6263, lng: -71.057128, lat: 42.282361)
-Thing.create(city_id: 6264, lng: -71.151608, lat: 42.282673)
-Thing.create(city_id: 6265, lng: -71.122741, lat: 42.28258)
-Thing.create(city_id: 6266, lng: -71.114596, lat: 42.282536)
-Thing.create(city_id: 6267, lng: -71.112614, lat: 42.282527)
-Thing.create(city_id: 6268, lng: -71.075407, lat: 42.282391)
-Thing.create(city_id: 6269, lng: -71.156229, lat: 42.282619)
-Thing.create(city_id: 6270, lng: -71.080334, lat: 42.282366)
-Thing.create(city_id: 6271, lng: -71.055503, lat: 42.282253)
-Thing.create(city_id: 6272, lng: -71.169124, lat: 42.282625)
-Thing.create(city_id: 6273, lng: -71.123319, lat: 42.282477)
-Thing.create(city_id: 6274, lng: -71.158435, lat: 42.282586)
-Thing.create(city_id: 6275, lng: -71.072902, lat: 42.282293)
-Thing.create(city_id: 6276, lng: -71.128959, lat: 42.282471)
-Thing.create(city_id: 6277, lng: -71.067768, lat: 42.282238)
-Thing.create(city_id: 6278, lng: -71.121866, lat: 42.282427)
-Thing.create(city_id: 6279, lng: -71.077303, lat: 42.282267)
-Thing.create(city_id: 6280, lng: -71.089873, lat: 42.282305)
-Thing.create(city_id: 6281, lng: -71.143706, lat: 42.282483)
-Thing.create(city_id: 6282, lng: -71.118762, lat: 42.2824)
-Thing.create(city_id: 6283, lng: -71.144733, lat: 42.282483)
-Thing.create(city_id: 6284, lng: -71.097165, lat: 42.282321)
-Thing.create(city_id: 6285, lng: -71.086377, lat: 42.282279)
-Thing.create(city_id: 6286, lng: -71.142596, lat: 42.282461)
-Thing.create(city_id: 6287, lng: -71.117555, lat: 42.28238)
-Thing.create(city_id: 6288, lng: -71.125532, lat: 42.282401)
-Thing.create(city_id: 6289, lng: -71.149264, lat: 42.282463)
-Thing.create(city_id: 6290, lng: -71.154239, lat: 42.282477)
-Thing.create(city_id: 6291, lng: -71.064584, lat: 42.282168)
-Thing.create(city_id: 6292, lng: -71.129897, lat: 42.282395)
-Thing.create(city_id: 6293, lng: -71.167728, lat: 42.282479)
-Thing.create(city_id: 6294, lng: -71.161164, lat: 42.282457)
-Thing.create(city_id: 6295, lng: -71.16013, lat: 42.274725)
-Thing.create(city_id: 6296, lng: -71.164284, lat: 42.274711)
-Thing.create(city_id: 6297, lng: -71.065826, lat: 42.274377)
-Thing.create(city_id: 6298, lng: -71.167683, lat: 42.274686)
-Thing.create(city_id: 6299, lng: -71.086045, lat: 42.274414)
-Thing.create(city_id: 6300, lng: -71.06906, lat: 42.274331)
-Thing.create(city_id: 6301, lng: -71.124312, lat: 42.274515)
-Thing.create(city_id: 6302, lng: -71.081155, lat: 42.274364)
-Thing.create(city_id: 6303, lng: -71.155657, lat: 42.274596)
-Thing.create(city_id: 6304, lng: -71.136153, lat: 42.27453)
-Thing.create(city_id: 6305, lng: -71.084997, lat: 42.274351)
-Thing.create(city_id: 6306, lng: -71.150598, lat: 42.274567)
-Thing.create(city_id: 6307, lng: -71.161356, lat: 42.274585)
-Thing.create(city_id: 6308, lng: -71.122021, lat: 42.274452)
-Thing.create(city_id: 6309, lng: -71.121468, lat: 42.274441)
-Thing.create(city_id: 6310, lng: -71.093412, lat: 42.27434)
-Thing.create(city_id: 6311, lng: -71.134363, lat: 42.274466)
-Thing.create(city_id: 6312, lng: -71.081309, lat: 42.274282)
-Thing.create(city_id: 6313, lng: -71.109065, lat: 42.274372)
-Thing.create(city_id: 6314, lng: -71.147315, lat: 42.274495)
-Thing.create(city_id: 6315, lng: -71.110883, lat: 42.274374)
-Thing.create(city_id: 6316, lng: -71.093825, lat: 42.274309)
-Thing.create(city_id: 6317, lng: -71.075076, lat: 42.274226)
-Thing.create(city_id: 6318, lng: -71.130745, lat: 42.274405)
-Thing.create(city_id: 6319, lng: -71.146098, lat: 42.274439)
-Thing.create(city_id: 6320, lng: -71.129616, lat: 42.274384)
-Thing.create(city_id: 6321, lng: -71.066672, lat: 42.274147)
-Thing.create(city_id: 6322, lng: -71.125149, lat: 42.274341)
-Thing.create(city_id: 6323, lng: -71.144904, lat: 42.274402)
-Thing.create(city_id: 6324, lng: -71.078824, lat: 42.274176)
-Thing.create(city_id: 6325, lng: -71.170386, lat: 42.274474)
-Thing.create(city_id: 6326, lng: -71.107372, lat: 42.274246)
-Thing.create(city_id: 6327, lng: -71.172529, lat: 42.274445)
-Thing.create(city_id: 6328, lng: -71.128112, lat: 42.274299)
-Thing.create(city_id: 6329, lng: -71.070202, lat: 42.274075)
-Thing.create(city_id: 6330, lng: -71.152992, lat: 42.274352)
-Thing.create(city_id: 6331, lng: -71.117741, lat: 42.274233)
-Thing.create(city_id: 6332, lng: -71.071043, lat: 42.274047)
-Thing.create(city_id: 6333, lng: -71.099561, lat: 42.274147)
-Thing.create(city_id: 6334, lng: -71.091607, lat: 42.274116)
-Thing.create(city_id: 6335, lng: -71.126636, lat: 42.274225)
-Thing.create(city_id: 6336, lng: -71.164393, lat: 42.27433)
-Thing.create(city_id: 6337, lng: -71.169269, lat: 42.274336)
-Thing.create(city_id: 6338, lng: -71.103058, lat: 42.274122)
-Thing.create(city_id: 6339, lng: -71.132257, lat: 42.274205)
-Thing.create(city_id: 6340, lng: -71.079241, lat: 42.273992)
-Thing.create(city_id: 6341, lng: -71.094999, lat: 42.274039)
-Thing.create(city_id: 6342, lng: -71.067801, lat: 42.27392)
-Thing.create(city_id: 6343, lng: -71.063238, lat: 42.273885)
-Thing.create(city_id: 6344, lng: -71.119848, lat: 42.274082)
-Thing.create(city_id: 6345, lng: -71.106398, lat: 42.274034)
-Thing.create(city_id: 6346, lng: -71.162669, lat: 42.274207)
-Thing.create(city_id: 6347, lng: -71.166408, lat: 42.2742)
-Thing.create(city_id: 6348, lng: -71.075863, lat: 42.273896)
-Thing.create(city_id: 6349, lng: -71.071733, lat: 42.273878)
-Thing.create(city_id: 6350, lng: -71.139927, lat: 42.274112)
-Thing.create(city_id: 6351, lng: -71.110284, lat: 42.274003)
-Thing.create(city_id: 6352, lng: -71.151242, lat: 42.274127)
-Thing.create(city_id: 6353, lng: -71.076926, lat: 42.273864)
-Thing.create(city_id: 6354, lng: -71.138939, lat: 42.274057)
-Thing.create(city_id: 6355, lng: -71.10077, lat: 42.273923)
-Thing.create(city_id: 6356, lng: -71.068714, lat: 42.273807)
-Thing.create(city_id: 6357, lng: -71.134004, lat: 42.274759)
-Thing.create(city_id: 6358, lng: -71.133005, lat: 42.274673)
-Thing.create(city_id: 6359, lng: -71.068763, lat: 42.298181)
-Thing.create(city_id: 6360, lng: -71.115874, lat: 42.298078)
-Thing.create(city_id: 6361, lng: -71.06339, lat: 42.29782)
-Thing.create(city_id: 6362, lng: -71.073627, lat: 42.297794)
-Thing.create(city_id: 6363, lng: -71.085291, lat: 42.29782)
-Thing.create(city_id: 6364, lng: -71.062919, lat: 42.297717)
-Thing.create(city_id: 6365, lng: -71.08281, lat: 42.297771)
-Thing.create(city_id: 6366, lng: -71.13062, lat: 42.297924)
-Thing.create(city_id: 6367, lng: -71.123062, lat: 42.297891)
-Thing.create(city_id: 6368, lng: -71.05412, lat: 42.344434)
-Thing.create(city_id: 6369, lng: -71.077195, lat: 42.297722)
-Thing.create(city_id: 6370, lng: -71.066564, lat: 42.297663)
-Thing.create(city_id: 6371, lng: -71.168827, lat: 42.298003)
-Thing.create(city_id: 6372, lng: -71.116054, lat: 42.297838)
-Thing.create(city_id: 6373, lng: -71.078548, lat: 42.297675)
-Thing.create(city_id: 6374, lng: -71.157243, lat: 42.297926)
-Thing.create(city_id: 6375, lng: -71.074416, lat: 42.297593)
-Thing.create(city_id: 6376, lng: -71.080071, lat: 42.297604)
-Thing.create(city_id: 6377, lng: -71.112219, lat: 42.297714)
-Thing.create(city_id: 6378, lng: -71.077872, lat: 42.297587)
-Thing.create(city_id: 6379, lng: -71.054224, lat: 42.344296)
-Thing.create(city_id: 6380, lng: -71.070643, lat: 42.297553)
-Thing.create(city_id: 6381, lng: -71.088564, lat: 42.297617)
-Thing.create(city_id: 6382, lng: -71.072677, lat: 42.297557)
-Thing.create(city_id: 6383, lng: -71.069087, lat: 42.297537)
-Thing.create(city_id: 6384, lng: -71.143246, lat: 42.297765)
-Thing.create(city_id: 6385, lng: -71.114947, lat: 42.297654)
-Thing.create(city_id: 6386, lng: -71.110789, lat: 42.297634)
-Thing.create(city_id: 6387, lng: -71.086478, lat: 42.297546)
-Thing.create(city_id: 6388, lng: -71.113898, lat: 42.297628)
-Thing.create(city_id: 6389, lng: -71.172805, lat: 42.297768)
-Thing.create(city_id: 6390, lng: -71.083874, lat: 42.297458)
-Thing.create(city_id: 6391, lng: -71.075393, lat: 42.297393)
-Thing.create(city_id: 6392, lng: -71.071394, lat: 42.297371)
-Thing.create(city_id: 6393, lng: -71.073533, lat: 42.29736)
-Thing.create(city_id: 6394, lng: -71.067771, lat: 42.297325)
-Thing.create(city_id: 6395, lng: -71.131577, lat: 42.297498)
-Thing.create(city_id: 6396, lng: -71.087366, lat: 42.297304)
-Thing.create(city_id: 6397, lng: -71.145139, lat: 42.297495)
-Thing.create(city_id: 6398, lng: -71.079616, lat: 42.297268)
-Thing.create(city_id: 6399, lng: -71.144238, lat: 42.297481)
-Thing.create(city_id: 6400, lng: -71.125147, lat: 42.297372)
-Thing.create(city_id: 6401, lng: -71.052711, lat: 42.297101)
-Thing.create(city_id: 6402, lng: -71.076458, lat: 42.29718)
-Thing.create(city_id: 6403, lng: -71.084783, lat: 42.297196)
-Thing.create(city_id: 6404, lng: -71.081606, lat: 42.29716)
-Thing.create(city_id: 6405, lng: -71.074449, lat: 42.297112)
-Thing.create(city_id: 6406, lng: -71.09058, lat: 42.297162)
-Thing.create(city_id: 6407, lng: -71.077391, lat: 42.297074)
-Thing.create(city_id: 6408, lng: -71.068835, lat: 42.297018)
-Thing.create(city_id: 6409, lng: -71.082523, lat: 42.297062)
-Thing.create(city_id: 6410, lng: -71.111427, lat: 42.297153)
-Thing.create(city_id: 6411, lng: -71.164094, lat: 42.289207)
-Thing.create(city_id: 6412, lng: -71.092007, lat: 42.288962)
-Thing.create(city_id: 6413, lng: -71.122239, lat: 42.289065)
-Thing.create(city_id: 6414, lng: -71.062661, lat: 42.288847)
-Thing.create(city_id: 6415, lng: -71.050058, lat: 42.288797)
-Thing.create(city_id: 6416, lng: -71.085844, lat: 42.288932)
-Thing.create(city_id: 6417, lng: -71.141007, lat: 42.289117)
-Thing.create(city_id: 6418, lng: -71.074941, lat: 42.288882)
-Thing.create(city_id: 6419, lng: -71.040737, lat: 42.288702)
-Thing.create(city_id: 6420, lng: -71.151246, lat: 42.289063)
-Thing.create(city_id: 6421, lng: -71.126691, lat: 42.288984)
-Thing.create(city_id: 6422, lng: -71.088717, lat: 42.288846)
-Thing.create(city_id: 6423, lng: -71.160001, lat: 42.289068)
-Thing.create(city_id: 6424, lng: -71.142307, lat: 42.28901)
-Thing.create(city_id: 6425, lng: -71.064154, lat: 42.28872)
-Thing.create(city_id: 6426, lng: -71.066277, lat: 42.288718)
-Thing.create(city_id: 6427, lng: -71.060916, lat: 42.288694)
-Thing.create(city_id: 6428, lng: -71.071248, lat: 42.288732)
-Thing.create(city_id: 6429, lng: -71.08155, lat: 42.288768)
-Thing.create(city_id: 6430, lng: -71.159272, lat: 42.289025)
-Thing.create(city_id: 6431, lng: -71.138976, lat: 42.288944)
-Thing.create(city_id: 6432, lng: -71.072956, lat: 42.288717)
-Thing.create(city_id: 6433, lng: -71.078081, lat: 42.288731)
-Thing.create(city_id: 6434, lng: -71.054196, lat: 42.288639)
-Thing.create(city_id: 6435, lng: -71.067082, lat: 42.288686)
-Thing.create(city_id: 6436, lng: -71.090945, lat: 42.288769)
-Thing.create(city_id: 6437, lng: -71.136396, lat: 42.288919)
-Thing.create(city_id: 6438, lng: -71.079601, lat: 42.288722)
-Thing.create(city_id: 6439, lng: -71.085106, lat: 42.288737)
-Thing.create(city_id: 6440, lng: -71.108124, lat: 42.288813)
-Thing.create(city_id: 6441, lng: -71.068193, lat: 42.288669)
-Thing.create(city_id: 6442, lng: -71.051184, lat: 42.288592)
-Thing.create(city_id: 6443, lng: -71.156311, lat: 42.288948)
-Thing.create(city_id: 6444, lng: -71.121319, lat: 42.288825)
-Thing.create(city_id: 6445, lng: -71.039071, lat: 42.288522)
-Thing.create(city_id: 6446, lng: -71.090087, lat: 42.28871)
-Thing.create(city_id: 6447, lng: -71.083959, lat: 42.288687)
-Thing.create(city_id: 6448, lng: -71.141775, lat: 42.288878)
-Thing.create(city_id: 6449, lng: -71.077353, lat: 42.288629)
-Thing.create(city_id: 6450, lng: -71.164931, lat: 42.288915)
-Thing.create(city_id: 6451, lng: -71.149766, lat: 42.288869)
-Thing.create(city_id: 6452, lng: -71.113115, lat: 42.288738)
-Thing.create(city_id: 6453, lng: -71.130669, lat: 42.288789)
-Thing.create(city_id: 6454, lng: -71.086797, lat: 42.288638)
-Thing.create(city_id: 6455, lng: -71.117587, lat: 42.288739)
-Thing.create(city_id: 6456, lng: -71.129343, lat: 42.288749)
-Thing.create(city_id: 6457, lng: -71.075871, lat: 42.288554)
-Thing.create(city_id: 6458, lng: -71.041522, lat: 42.288413)
-Thing.create(city_id: 6459, lng: -71.135048, lat: 42.288737)
-Thing.create(city_id: 6460, lng: -71.142957, lat: 42.288762)
-Thing.create(city_id: 6461, lng: -71.082506, lat: 42.288556)
-Thing.create(city_id: 6462, lng: -71.121122, lat: 42.288686)
-Thing.create(city_id: 6463, lng: -71.167043, lat: 42.288826)
-Thing.create(city_id: 6464, lng: -71.137188, lat: 42.288734)
-Thing.create(city_id: 6465, lng: -71.055325, lat: 42.288406)
-Thing.create(city_id: 6466, lng: -71.114277, lat: 42.288618)
-Thing.create(city_id: 6467, lng: -71.163414, lat: 42.288771)
-Thing.create(city_id: 6468, lng: -71.155359, lat: 42.288744)
-Thing.create(city_id: 6469, lng: -71.161586, lat: 42.288757)
-Thing.create(city_id: 6470, lng: -71.080518, lat: 42.289001)
-Thing.create(city_id: 6471, lng: -71.076635, lat: 42.288965)
-Thing.create(city_id: 6472, lng: -71.074768, lat: 42.315502)
-Thing.create(city_id: 6473, lng: -71.062556, lat: 42.282097)
-Thing.create(city_id: 6474, lng: -71.133556, lat: 42.282338)
-Thing.create(city_id: 6475, lng: -71.070838, lat: 42.282114)
-Thing.create(city_id: 6476, lng: -71.136579, lat: 42.28233)
-Thing.create(city_id: 6477, lng: -71.139214, lat: 42.282318)
-Thing.create(city_id: 6478, lng: -71.139815, lat: 42.282308)
-Thing.create(city_id: 6479, lng: -71.159214, lat: 42.282361)
-Thing.create(city_id: 6480, lng: -71.073979, lat: 42.282074)
-Thing.create(city_id: 6481, lng: -71.170686, lat: 42.282385)
-Thing.create(city_id: 6482, lng: -71.066321, lat: 42.282023)
-Thing.create(city_id: 6483, lng: -71.166298, lat: 42.282353)
-Thing.create(city_id: 6484, lng: -71.163456, lat: 42.282339)
-Thing.create(city_id: 6485, lng: -71.078373, lat: 42.282055)
-Thing.create(city_id: 6486, lng: -71.065466, lat: 42.282004)
-Thing.create(city_id: 6487, lng: -71.053886, lat: 42.281958)
-Thing.create(city_id: 6488, lng: -71.140487, lat: 42.28226)
-Thing.create(city_id: 6489, lng: -71.121248, lat: 42.282194)
-Thing.create(city_id: 6490, lng: -71.146725, lat: 42.282272)
-Thing.create(city_id: 6491, lng: -71.054714, lat: 42.281951)
-Thing.create(city_id: 6492, lng: -71.096414, lat: 42.282103)
-Thing.create(city_id: 6493, lng: -71.066823, lat: 42.281984)
-Thing.create(city_id: 6494, lng: -71.071883, lat: 42.282507)
-Thing.create(city_id: 6495, lng: -71.146099, lat: 42.282706)
-Thing.create(city_id: 6496, lng: -71.058316, lat: 42.282282)
-Thing.create(city_id: 6497, lng: -71.148068, lat: 42.28251)
-Thing.create(city_id: 6498, lng: -71.15734, lat: 42.282519)
-Thing.create(city_id: 6499, lng: -71.165274, lat: 42.282518)
-Thing.create(city_id: 6500, lng: -71.149914, lat: 42.282427)
-Thing.create(city_id: 6501, lng: -71.06079, lat: 42.281949)
-Thing.create(city_id: 6502, lng: -71.089138, lat: 42.282051)
-Thing.create(city_id: 6503, lng: -71.120464, lat: 42.282147)
-Thing.create(city_id: 6504, lng: -71.085483, lat: 42.282019)
-Thing.create(city_id: 6505, lng: -71.161934, lat: 42.28226)
-Thing.create(city_id: 6506, lng: -71.081802, lat: 42.281992)
-Thing.create(city_id: 6507, lng: -71.083328, lat: 42.281997)
-Thing.create(city_id: 6508, lng: -71.059902, lat: 42.281899)
-Thing.create(city_id: 6509, lng: -71.141754, lat: 42.282183)
-Thing.create(city_id: 6510, lng: -71.115331, lat: 42.282095)
-Thing.create(city_id: 6511, lng: -71.05082, lat: 42.281859)
-Thing.create(city_id: 6512, lng: -71.153167, lat: 42.282205)
-Thing.create(city_id: 6513, lng: -71.131046, lat: 42.282133)
-Thing.create(city_id: 6514, lng: -71.091238, lat: 42.281993)
-Thing.create(city_id: 6515, lng: -71.13468, lat: 42.282106)
-Thing.create(city_id: 6516, lng: -71.127333, lat: 42.28207)
-Thing.create(city_id: 6517, lng: -71.09882, lat: 42.281961)
-Thing.create(city_id: 6518, lng: -71.04825, lat: 42.281766)
-Thing.create(city_id: 6519, lng: -71.051498, lat: 42.281773)
-Thing.create(city_id: 6520, lng: -71.075031, lat: 42.28186)
-Thing.create(city_id: 6521, lng: -71.084191, lat: 42.281888)
-Thing.create(city_id: 6522, lng: -71.071812, lat: 42.281836)
-Thing.create(city_id: 6523, lng: -71.135119, lat: 42.282054)
-Thing.create(city_id: 6524, lng: -71.050114, lat: 42.281749)
-Thing.create(city_id: 6525, lng: -71.145386, lat: 42.282075)
-Thing.create(city_id: 6526, lng: -71.132952, lat: 42.282033)
-Thing.create(city_id: 6527, lng: -71.079447, lat: 42.281842)
-Thing.create(city_id: 6528, lng: -71.063673, lat: 42.281764)
-Thing.create(city_id: 6529, lng: -71.067483, lat: 42.281774)
-Thing.create(city_id: 6530, lng: -71.052246, lat: 42.281694)
-Thing.create(city_id: 6531, lng: -71.155007, lat: 42.282037)
-Thing.create(city_id: 6532, lng: -71.157017, lat: 42.282033)
-Thing.create(city_id: 6533, lng: -71.149263, lat: 42.274079)
-Thing.create(city_id: 6534, lng: -71.171452, lat: 42.274134)
-Thing.create(city_id: 6535, lng: -71.17068, lat: 42.27413)
-Thing.create(city_id: 6536, lng: -71.085576, lat: 42.273851)
-Thing.create(city_id: 6537, lng: -71.119024, lat: 42.273948)
-Thing.create(city_id: 6538, lng: -71.084737, lat: 42.273799)
-Thing.create(city_id: 6539, lng: -71.128913, lat: 42.273946)
-Thing.create(city_id: 6540, lng: -71.072585, lat: 42.273744)
-Thing.create(city_id: 6541, lng: -71.080546, lat: 42.273774)
-Thing.create(city_id: 6542, lng: -71.082266, lat: 42.27377)
-Thing.create(city_id: 6543, lng: -71.124663, lat: 42.273911)
-Thing.create(city_id: 6544, lng: -71.161832, lat: 42.274023)
-Thing.create(city_id: 6545, lng: -71.078034, lat: 42.273742)
-Thing.create(city_id: 6546, lng: -71.150393, lat: 42.273976)
-Thing.create(city_id: 6547, lng: -71.121851, lat: 42.273879)
-Thing.create(city_id: 6548, lng: -71.069529, lat: 42.273693)
-Thing.create(city_id: 6549, lng: -71.102274, lat: 42.273797)
-Thing.create(city_id: 6550, lng: -71.127361, lat: 42.273881)
-Thing.create(city_id: 6551, lng: -71.137096, lat: 42.273904)
-Thing.create(city_id: 6552, lng: -71.108527, lat: 42.27381)
-Thing.create(city_id: 6553, lng: -71.093814, lat: 42.273757)
-Thing.create(city_id: 6554, lng: -71.073814, lat: 42.273663)
-Thing.create(city_id: 6555, lng: -71.083301, lat: 42.273674)
-Thing.create(city_id: 6556, lng: -71.123762, lat: 42.273806)
-Thing.create(city_id: 6557, lng: -71.148101, lat: 42.273875)
-Thing.create(city_id: 6558, lng: -71.146776, lat: 42.273867)
-Thing.create(city_id: 6559, lng: -71.086704, lat: 42.273642)
-Thing.create(city_id: 6560, lng: -71.094258, lat: 42.273666)
-Thing.create(city_id: 6561, lng: -71.129982, lat: 42.27377)
-Thing.create(city_id: 6562, lng: -71.090564, lat: 42.273627)
-Thing.create(city_id: 6563, lng: -71.172134, lat: 42.273862)
-Thing.create(city_id: 6564, lng: -71.099704, lat: 42.273608)
-Thing.create(city_id: 6565, lng: -71.074747, lat: 42.273515)
-Thing.create(city_id: 6566, lng: -71.125747, lat: 42.273683)
-Thing.create(city_id: 6567, lng: -71.117011, lat: 42.273619)
-Thing.create(city_id: 6568, lng: -71.135707, lat: 42.273669)
-Thing.create(city_id: 6569, lng: -71.152179, lat: 42.273719)
-Thing.create(city_id: 6570, lng: -71.145594, lat: 42.273699)
-Thing.create(city_id: 6571, lng: -71.170093, lat: 42.273734)
-Thing.create(city_id: 6572, lng: -71.066366, lat: 42.273379)
-Thing.create(city_id: 6573, lng: -71.064081, lat: 42.273363)
-Thing.create(city_id: 6574, lng: -71.077402, lat: 42.273404)
-Thing.create(city_id: 6575, lng: -71.162393, lat: 42.273683)
-Thing.create(city_id: 6576, lng: -71.1114, lat: 42.273469)
-Thing.create(city_id: 6577, lng: -71.071549, lat: 42.273301)
-Thing.create(city_id: 6578, lng: -71.078876, lat: 42.273324)
-Thing.create(city_id: 6579, lng: -71.167052, lat: 42.273605)
-Thing.create(city_id: 6580, lng: -71.16346, lat: 42.273591)
-Thing.create(city_id: 6581, lng: -71.161782, lat: 42.273558)
-Thing.create(city_id: 6582, lng: -71.076425, lat: 42.273243)
-Thing.create(city_id: 6583, lng: -71.085853, lat: 42.273265)
-Thing.create(city_id: 6584, lng: -71.119928, lat: 42.273362)
-Thing.create(city_id: 6585, lng: -71.110679, lat: 42.273328)
-Thing.create(city_id: 6586, lng: -71.149287, lat: 42.27344)
-Thing.create(city_id: 6587, lng: -71.075621, lat: 42.273186)
-Thing.create(city_id: 6588, lng: -71.069981, lat: 42.273154)
-Thing.create(city_id: 6589, lng: -71.127943, lat: 42.273352)
-Thing.create(city_id: 6590, lng: -71.165523, lat: 42.273456)
-Thing.create(city_id: 6591, lng: -71.093828, lat: 42.273217)
-Thing.create(city_id: 6592, lng: -71.109023, lat: 42.273253)
-Thing.create(city_id: 6593, lng: -71.077745, lat: 42.273108)
-Thing.create(city_id: 6594, lng: -71.067936, lat: 42.273071)
-Thing.create(city_id: 6595, lng: -71.148674, lat: 42.273342)
-Thing.create(city_id: 6596, lng: -71.157672, lat: 42.297294)
-Thing.create(city_id: 6597, lng: -71.085845, lat: 42.297029)
-Thing.create(city_id: 6598, lng: -71.062775, lat: 42.296926)
-Thing.create(city_id: 6599, lng: -71.129536, lat: 42.297153)
-Thing.create(city_id: 6600, lng: -71.113422, lat: 42.297089)
-Thing.create(city_id: 6601, lng: -71.064842, lat: 42.296915)
-Thing.create(city_id: 6602, lng: -71.116952, lat: 42.297099)
-Thing.create(city_id: 6603, lng: -71.08389, lat: 42.312095)
-Thing.create(city_id: 6604, lng: -71.132427, lat: 42.297134)
-Thing.create(city_id: 6605, lng: -71.075372, lat: 42.296927)
-Thing.create(city_id: 6606, lng: -71.112338, lat: 42.297033)
-Thing.create(city_id: 6607, lng: -71.117711, lat: 42.297001)
-Thing.create(city_id: 6608, lng: -71.078562, lat: 42.296833)
-Thing.create(city_id: 6609, lng: -71.069703, lat: 42.296791)
-Thing.create(city_id: 6610, lng: -71.115481, lat: 42.296928)
-Thing.create(city_id: 6611, lng: -71.072379, lat: 42.296757)
-Thing.create(city_id: 6612, lng: -71.127236, lat: 42.296931)
-Thing.create(city_id: 6613, lng: -71.061308, lat: 42.296687)
-Thing.create(city_id: 6614, lng: -71.134981, lat: 42.296935)
-Thing.create(city_id: 6615, lng: -71.070427, lat: 42.296709)
-Thing.create(city_id: 6616, lng: -71.12953, lat: 42.296914)
-Thing.create(city_id: 6617, lng: -71.114523, lat: 42.29686)
-Thing.create(city_id: 6618, lng: -71.083501, lat: 42.296749)
-Thing.create(city_id: 6619, lng: -71.053131, lat: 42.353795)
-Thing.create(city_id: 6620, lng: -71.077644, lat: 42.296698)
-Thing.create(city_id: 6621, lng: -71.091511, lat: 42.296709)
-Thing.create(city_id: 6622, lng: -71.076105, lat: 42.296651)
-Thing.create(city_id: 6623, lng: -71.134522, lat: 42.296841)
-Thing.create(city_id: 6624, lng: -71.073427, lat: 42.296623)
-Thing.create(city_id: 6625, lng: -71.117631, lat: 42.297633)
-Thing.create(city_id: 6626, lng: -71.089581, lat: 42.297341)
-Thing.create(city_id: 6627, lng: -71.080659, lat: 42.297158)
-Thing.create(city_id: 6628, lng: -71.076859, lat: 42.296622)
-Thing.create(city_id: 6629, lng: -71.089048, lat: 42.296666)
-Thing.create(city_id: 6630, lng: -71.074472, lat: 42.29661)
-Thing.create(city_id: 6631, lng: -71.079574, lat: 42.29662)
-Thing.create(city_id: 6632, lng: -71.17218, lat: 42.296917)
-Thing.create(city_id: 6633, lng: -71.146283, lat: 42.296819)
-Thing.create(city_id: 6634, lng: -71.084551, lat: 42.296584)
-Thing.create(city_id: 6635, lng: -71.071191, lat: 42.296504)
-Thing.create(city_id: 6636, lng: -71.090027, lat: 42.296557)
-Thing.create(city_id: 6637, lng: -71.134414, lat: 42.296655)
-Thing.create(city_id: 6638, lng: -71.063742, lat: 42.29638)
-Thing.create(city_id: 6639, lng: -71.13339, lat: 42.296617)
-Thing.create(city_id: 6640, lng: -71.087226, lat: 42.296435)
-Thing.create(city_id: 6641, lng: -71.09209, lat: 42.29645)
-Thing.create(city_id: 6642, lng: -71.075349, lat: 42.296338)
-Thing.create(city_id: 6643, lng: -71.081209, lat: 42.29635)
-Thing.create(city_id: 6644, lng: -71.113059, lat: 42.296444)
-Thing.create(city_id: 6645, lng: -71.085571, lat: 42.296337)
-Thing.create(city_id: 6646, lng: -71.061835, lat: 42.288469)
-Thing.create(city_id: 6647, lng: -71.15428, lat: 42.288688)
-Thing.create(city_id: 6648, lng: -71.166531, lat: 42.28871)
-Thing.create(city_id: 6649, lng: -71.171815, lat: 42.288717)
-Thing.create(city_id: 6650, lng: -71.072023, lat: 42.288386)
-Thing.create(city_id: 6651, lng: -71.118237, lat: 42.288544)
-Thing.create(city_id: 6652, lng: -71.059862, lat: 42.288335)
-Thing.create(city_id: 6653, lng: -71.080373, lat: 42.288399)
-Thing.create(city_id: 6654, lng: -71.069379, lat: 42.288346)
-Thing.create(city_id: 6655, lng: -71.157666, lat: 42.288641)
-Thing.create(city_id: 6656, lng: -71.115365, lat: 42.288501)
-Thing.create(city_id: 6657, lng: -71.076764, lat: 42.288362)
-Thing.create(city_id: 6658, lng: -71.085857, lat: 42.288359)
-Thing.create(city_id: 6659, lng: -71.152997, lat: 42.288579)
-Thing.create(city_id: 6660, lng: -71.116142, lat: 42.288448)
-Thing.create(city_id: 6661, lng: -71.060876, lat: 42.288245)
-Thing.create(city_id: 6662, lng: -71.087839, lat: 42.288345)
-Thing.create(city_id: 6663, lng: -71.062737, lat: 42.288247)
-Thing.create(city_id: 6664, lng: -71.140102, lat: 42.288502)
-Thing.create(city_id: 6665, lng: -71.151821, lat: 42.288532)
-Thing.create(city_id: 6666, lng: -71.073733, lat: 42.28825)
-Thing.create(city_id: 6667, lng: -71.06371, lat: 42.2882)
-Thing.create(city_id: 6668, lng: -71.148687, lat: 42.288485)
-Thing.create(city_id: 6669, lng: -71.092179, lat: 42.288291)
-Thing.create(city_id: 6670, lng: -71.039198, lat: 42.28808)
-Thing.create(city_id: 6671, lng: -71.111875, lat: 42.288337)
-Thing.create(city_id: 6672, lng: -71.126186, lat: 42.288377)
-Thing.create(city_id: 6673, lng: -71.081842, lat: 42.288218)
-Thing.create(city_id: 6674, lng: -71.125507, lat: 42.288366)
-Thing.create(city_id: 6675, lng: -71.141337, lat: 42.288414)
-Thing.create(city_id: 6676, lng: -71.170011, lat: 42.288492)
-Thing.create(city_id: 6677, lng: -71.145345, lat: 42.288417)
-Thing.create(city_id: 6678, lng: -71.102841, lat: 42.288255)
-Thing.create(city_id: 6679, lng: -71.079854, lat: 42.288172)
-Thing.create(city_id: 6680, lng: -71.039961, lat: 42.288009)
-Thing.create(city_id: 6681, lng: -71.13448, lat: 42.288345)
-Thing.create(city_id: 6682, lng: -71.088894, lat: 42.288189)
-Thing.create(city_id: 6683, lng: -71.083523, lat: 42.288168)
-Thing.create(city_id: 6684, lng: -71.150608, lat: 42.288389)
-Thing.create(city_id: 6685, lng: -71.046927, lat: 42.288021)
-Thing.create(city_id: 6686, lng: -71.056155, lat: 42.288047)
-Thing.create(city_id: 6687, lng: -71.142462, lat: 42.28833)
-Thing.create(city_id: 6688, lng: -71.051636, lat: 42.288005)
-Thing.create(city_id: 6689, lng: -71.159243, lat: 42.28837)
-Thing.create(city_id: 6690, lng: -71.072766, lat: 42.288075)
-Thing.create(city_id: 6691, lng: -71.070428, lat: 42.288066)
-Thing.create(city_id: 6692, lng: -71.084469, lat: 42.288113)
-Thing.create(city_id: 6693, lng: -71.077718, lat: 42.288086)
-Thing.create(city_id: 6694, lng: -71.120111, lat: 42.288213)
-Thing.create(city_id: 6695, lng: -71.091126, lat: 42.288101)
-Thing.create(city_id: 6696, lng: -71.125231, lat: 42.288213)
-Thing.create(city_id: 6697, lng: -71.061928, lat: 42.287987)
-Thing.create(city_id: 6698, lng: -71.138279, lat: 42.288248)
-Thing.create(city_id: 6699, lng: -71.129954, lat: 42.288214)
-Thing.create(city_id: 6700, lng: -71.074555, lat: 42.288007)
-Thing.create(city_id: 6701, lng: -71.149101, lat: 42.288254)
-Thing.create(city_id: 6702, lng: -71.052791, lat: 42.287911)
-Thing.create(city_id: 6703, lng: -71.049811, lat: 42.287899)
-Thing.create(city_id: 6704, lng: -71.068059, lat: 42.287955)
-Thing.create(city_id: 6705, lng: -71.087101, lat: 42.288025)
-Thing.create(city_id: 6706, lng: -71.048052, lat: 42.287871)
-Thing.create(city_id: 6707, lng: -71.050825, lat: 42.287863)
-Thing.create(city_id: 6708, lng: -71.160295, lat: 42.282038)
-Thing.create(city_id: 6709, lng: -71.148693, lat: 42.281994)
-Thing.create(city_id: 6710, lng: -71.14287, lat: 42.281968)
-Thing.create(city_id: 6711, lng: -71.124239, lat: 42.281905)
-Thing.create(city_id: 6712, lng: -71.049682, lat: 42.281629)
-Thing.create(city_id: 6713, lng: -71.076117, lat: 42.281728)
-Thing.create(city_id: 6714, lng: -71.113322, lat: 42.281856)
-Thing.create(city_id: 6715, lng: -71.140865, lat: 42.281934)
-Thing.create(city_id: 6716, lng: -71.090412, lat: 42.281765)
-Thing.create(city_id: 6717, lng: -71.115332, lat: 42.281846)
-Thing.create(city_id: 6718, lng: -71.167162, lat: 42.282007)
-Thing.create(city_id: 6719, lng: -71.08713, lat: 42.281747)
-Thing.create(city_id: 6720, lng: -71.086916, lat: 42.281742)
-Thing.create(city_id: 6721, lng: -71.056886, lat: 42.28162)
-Thing.create(city_id: 6722, lng: -71.062363, lat: 42.281638)
-Thing.create(city_id: 6723, lng: -71.169822, lat: 42.281989)
-Thing.create(city_id: 6724, lng: -71.163018, lat: 42.281968)
-Thing.create(city_id: 6725, lng: -71.144279, lat: 42.2819)
-Thing.create(city_id: 6726, lng: -71.132059, lat: 42.281844)
-Thing.create(city_id: 6727, lng: -71.129702, lat: 42.281831)
-Thing.create(city_id: 6728, lng: -71.125742, lat: 42.281817)
-Thing.create(city_id: 6729, lng: -71.068924, lat: 42.281615)
-Thing.create(city_id: 6730, lng: -71.072882, lat: 42.281619)
-Thing.create(city_id: 6731, lng: -71.063921, lat: 42.281585)
-Thing.create(city_id: 6732, lng: -71.151032, lat: 42.281876)
-Thing.create(city_id: 6733, lng: -71.130767, lat: 42.281809)
-Thing.create(city_id: 6734, lng: -71.164541, lat: 42.281901)
-Thing.create(city_id: 6735, lng: -71.122622, lat: 42.28177)
-Thing.create(city_id: 6736, lng: -71.088606, lat: 42.28165)
-Thing.create(city_id: 6737, lng: -71.080537, lat: 42.281617)
-Thing.create(city_id: 6738, lng: -71.168899, lat: 42.2819)
-Thing.create(city_id: 6739, lng: -71.057634, lat: 42.281517)
-Thing.create(city_id: 6740, lng: -71.082272, lat: 42.281594)
-Thing.create(city_id: 6741, lng: -71.150223, lat: 42.28182)
-Thing.create(city_id: 6742, lng: -71.101765, lat: 42.281647)
-Thing.create(city_id: 6743, lng: -71.097197, lat: 42.28161)
-Thing.create(city_id: 6744, lng: -71.128291, lat: 42.281709)
-Thing.create(city_id: 6745, lng: -71.092494, lat: 42.281587)
-Thing.create(city_id: 6746, lng: -71.077078, lat: 42.281528)
-Thing.create(city_id: 6747, lng: -71.058772, lat: 42.281445)
-Thing.create(city_id: 6748, lng: -71.146082, lat: 42.281747)
-Thing.create(city_id: 6749, lng: -71.139884, lat: 42.281723)
-Thing.create(city_id: 6750, lng: -71.135998, lat: 42.281703)
-Thing.create(city_id: 6751, lng: -71.056081, lat: 42.281404)
-Thing.create(city_id: 6752, lng: -71.11732, lat: 42.281624)
-Thing.create(city_id: 6753, lng: -71.050738, lat: 42.281377)
-Thing.create(city_id: 6754, lng: -71.12462, lat: 42.281617)
-Thing.create(city_id: 6755, lng: -71.073805, lat: 42.281436)
-Thing.create(city_id: 6756, lng: -71.068178, lat: 42.281411)
-Thing.create(city_id: 6757, lng: -71.118735, lat: 42.281586)
-Thing.create(city_id: 6758, lng: -71.152346, lat: 42.281679)
-Thing.create(city_id: 6759, lng: -71.157802, lat: 42.28169)
-Thing.create(city_id: 6760, lng: -71.066229, lat: 42.281381)
-Thing.create(city_id: 6761, lng: -71.098032, lat: 42.281496)
-Thing.create(city_id: 6762, lng: -71.138785, lat: 42.28163)
-Thing.create(city_id: 6763, lng: -71.092251, lat: 42.281461)
-Thing.create(city_id: 6764, lng: -71.119855, lat: 42.281548)
-Thing.create(city_id: 6765, lng: -71.167776, lat: 42.281693)
-Thing.create(city_id: 6766, lng: -71.165487, lat: 42.281672)
-Thing.create(city_id: 6767, lng: -71.06712, lat: 42.281343)
-Thing.create(city_id: 6768, lng: -71.061646, lat: 42.28131)
-Thing.create(city_id: 6769, lng: -71.083522, lat: 42.281387)
-Thing.create(city_id: 6770, lng: -71.114097, lat: 42.281977)
-Thing.create(city_id: 6771, lng: -71.053008, lat: 42.28171)
-Thing.create(city_id: 6772, lng: -71.119521, lat: 42.308791)
-Thing.create(city_id: 6773, lng: -71.080744, lat: 42.308654)
-Thing.create(city_id: 6774, lng: -71.048361, lat: 42.333711)
-Thing.create(city_id: 6775, lng: -71.071327, lat: 42.308595)
-Thing.create(city_id: 6776, lng: -71.068509, lat: 42.308575)
-Thing.create(city_id: 6777, lng: -71.133462, lat: 42.308797)
-Thing.create(city_id: 6778, lng: -71.079207, lat: 42.308571)
-Thing.create(city_id: 6779, lng: -71.106755, lat: 42.308668)
-Thing.create(city_id: 6780, lng: -71.113193, lat: 42.308685)
-Thing.create(city_id: 6781, lng: -71.076385, lat: 42.308543)
-Thing.create(city_id: 6782, lng: -71.077663, lat: 42.308546)
-Thing.create(city_id: 6783, lng: -71.109294, lat: 42.308644)
-Thing.create(city_id: 6784, lng: -71.11843, lat: 42.30867)
-Thing.create(city_id: 6785, lng: -71.087217, lat: 42.308555)
-Thing.create(city_id: 6786, lng: -71.122556, lat: 42.308664)
-Thing.create(city_id: 6787, lng: -71.082524, lat: 42.308514)
-Thing.create(city_id: 6788, lng: -71.085847, lat: 42.308504)
-Thing.create(city_id: 6789, lng: -71.04983, lat: 42.333702)
-Thing.create(city_id: 6790, lng: -71.114552, lat: 42.308579)
-Thing.create(city_id: 6791, lng: -71.100901, lat: 42.308523)
-Thing.create(city_id: 6792, lng: -71.04607, lat: 42.333648)
-Thing.create(city_id: 6793, lng: -71.109918, lat: 42.308517)
-Thing.create(city_id: 6794, lng: -71.115402, lat: 42.30852)
-Thing.create(city_id: 6795, lng: -71.090036, lat: 42.308431)
-Thing.create(city_id: 6796, lng: -71.070008, lat: 42.308353)
-Thing.create(city_id: 6797, lng: -71.112068, lat: 42.308475)
-Thing.create(city_id: 6798, lng: -71.128733, lat: 42.308522)
-Thing.create(city_id: 6799, lng: -71.126925, lat: 42.308509)
-Thing.create(city_id: 6800, lng: -71.123568, lat: 42.308497)
-Thing.create(city_id: 6801, lng: -71.122161, lat: 42.308483)
-Thing.create(city_id: 6802, lng: -71.097602, lat: 42.308395)
-Thing.create(city_id: 6803, lng: -71.088562, lat: 42.30833)
-Thing.create(city_id: 6804, lng: -71.125769, lat: 42.308453)
-Thing.create(city_id: 6805, lng: -71.047388, lat: 42.333588)
-Thing.create(city_id: 6806, lng: -71.081471, lat: 42.308252)
-Thing.create(city_id: 6807, lng: -71.108527, lat: 42.308344)
-Thing.create(city_id: 6808, lng: -71.074973, lat: 42.308202)
-Thing.create(city_id: 6809, lng: -71.116454, lat: 42.308346)
-Thing.create(city_id: 6810, lng: -71.083567, lat: 42.308191)
-Thing.create(city_id: 6811, lng: -71.069433, lat: 42.308087)
-Thing.create(city_id: 6812, lng: -71.134946, lat: 42.308298)
-Thing.create(city_id: 6813, lng: -71.07841, lat: 42.308104)
-Thing.create(city_id: 6814, lng: -71.084374, lat: 42.309013)
-Thing.create(city_id: 6815, lng: -71.123628, lat: 42.309041)
-Thing.create(city_id: 6816, lng: -71.115685, lat: 42.308915)
-Thing.create(city_id: 6817, lng: -71.08359, lat: 42.308678)
-Thing.create(city_id: 6818, lng: -71.117936, lat: 42.308241)
-Thing.create(city_id: 6819, lng: -71.110654, lat: 42.308204)
-Thing.create(city_id: 6820, lng: -71.105942, lat: 42.30816)
-Thing.create(city_id: 6821, lng: -71.071389, lat: 42.308023)
-Thing.create(city_id: 6822, lng: -71.119089, lat: 42.308179)
-Thing.create(city_id: 6823, lng: -71.076863, lat: 42.308023)
-Thing.create(city_id: 6824, lng: -71.134152, lat: 42.308217)
-Thing.create(city_id: 6825, lng: -71.115619, lat: 42.308151)
-Thing.create(city_id: 6826, lng: -71.080342, lat: 42.296303)
-Thing.create(city_id: 6827, lng: -71.157903, lat: 42.296552)
-Thing.create(city_id: 6828, lng: -71.064514, lat: 42.296206)
-Thing.create(city_id: 6829, lng: -71.074465, lat: 42.296236)
-Thing.create(city_id: 6830, lng: -71.131682, lat: 42.296429)
-Thing.create(city_id: 6831, lng: -71.06262, lat: 42.296163)
-Thing.create(city_id: 6832, lng: -71.117703, lat: 42.296357)
-Thing.create(city_id: 6833, lng: -71.118607, lat: 42.296322)
-Thing.create(city_id: 6834, lng: -71.067226, lat: 42.296127)
-Thing.create(city_id: 6835, lng: -71.076418, lat: 42.296134)
-Thing.create(city_id: 6836, lng: -71.112363, lat: 42.296249)
-Thing.create(city_id: 6837, lng: -71.078296, lat: 42.296107)
-Thing.create(city_id: 6838, lng: -71.083496, lat: 42.296126)
-Thing.create(city_id: 6839, lng: -71.06816, lat: 42.296047)
-Thing.create(city_id: 6840, lng: -71.144014, lat: 42.296285)
-Thing.create(city_id: 6841, lng: -71.09001, lat: 42.296105)
-Thing.create(city_id: 6842, lng: -71.167468, lat: 42.296307)
-Thing.create(city_id: 6843, lng: -71.086709, lat: 42.296039)
-Thing.create(city_id: 6844, lng: -71.136583, lat: 42.296207)
-Thing.create(city_id: 6845, lng: -71.117937, lat: 42.296141)
-Thing.create(city_id: 6846, lng: -71.061762, lat: 42.295925)
-Thing.create(city_id: 6847, lng: -71.072263, lat: 42.295961)
-Thing.create(city_id: 6848, lng: -71.087783, lat: 42.295994)
-Thing.create(city_id: 6849, lng: -71.077464, lat: 42.29595)
-Thing.create(city_id: 6850, lng: -71.115176, lat: 42.296077)
-Thing.create(city_id: 6851, lng: -71.135063, lat: 42.296125)
-Thing.create(city_id: 6852, lng: -71.142178, lat: 42.296136)
-Thing.create(city_id: 6853, lng: -71.065569, lat: 42.295834)
-Thing.create(city_id: 6854, lng: -71.088434, lat: 42.295911)
-Thing.create(city_id: 6855, lng: -71.074333, lat: 42.295857)
-Thing.create(city_id: 6856, lng: -71.134176, lat: 42.296034)
-Thing.create(city_id: 6857, lng: -71.069108, lat: 42.295793)
-Thing.create(city_id: 6858, lng: -71.073137, lat: 42.295793)
-Thing.create(city_id: 6859, lng: -71.092011, lat: 42.29586)
-Thing.create(city_id: 6860, lng: -71.148101, lat: 42.296017)
-Thing.create(city_id: 6861, lng: -71.136914, lat: 42.295957)
-Thing.create(city_id: 6862, lng: -71.075835, lat: 42.295732)
-Thing.create(city_id: 6863, lng: -71.069943, lat: 42.295707)
-Thing.create(city_id: 6864, lng: -71.080898, lat: 42.295746)
-Thing.create(city_id: 6865, lng: -71.150964, lat: 42.295963)
-Thing.create(city_id: 6866, lng: -71.113817, lat: 42.29581)
-Thing.create(city_id: 6867, lng: -71.085498, lat: 42.2957)
-Thing.create(city_id: 6868, lng: -71.054102, lat: 42.295579)
-Thing.create(city_id: 6869, lng: -71.062521, lat: 42.295589)
-Thing.create(city_id: 6870, lng: -71.140266, lat: 42.295852)
-Thing.create(city_id: 6871, lng: -71.090675, lat: 42.295685)
-Thing.create(city_id: 6872, lng: -71.089064, lat: 42.295661)
-Thing.create(city_id: 6873, lng: -71.064189, lat: 42.295566)
-Thing.create(city_id: 6874, lng: -71.149271, lat: 42.295838)
-Thing.create(city_id: 6875, lng: -71.171672, lat: 42.295903)
-Thing.create(city_id: 6876, lng: -71.138416, lat: 42.2958)
-Thing.create(city_id: 6877, lng: -71.080074, lat: 42.295576)
-Thing.create(city_id: 6878, lng: -71.076593, lat: 42.29556)
-Thing.create(city_id: 6879, lng: -71.063351, lat: 42.295506)
-Thing.create(city_id: 6880, lng: -71.15544, lat: 42.295809)
-Thing.create(city_id: 6881, lng: -71.081904, lat: 42.29555)
-Thing.create(city_id: 6882, lng: -71.087583, lat: 42.29554)
-Thing.create(city_id: 6883, lng: -71.155939, lat: 42.288224)
-Thing.create(city_id: 6884, lng: -71.040799, lat: 42.287822)
-Thing.create(city_id: 6885, lng: -71.057868, lat: 42.287879)
-Thing.create(city_id: 6886, lng: -71.082965, lat: 42.287965)
-Thing.create(city_id: 6887, lng: -71.167863, lat: 42.288221)
-Thing.create(city_id: 6888, lng: -71.064586, lat: 42.287861)
-Thing.create(city_id: 6889, lng: -71.041597, lat: 42.287771)
-Thing.create(city_id: 6890, lng: -71.162362, lat: 42.288183)
-Thing.create(city_id: 6891, lng: -71.158453, lat: 42.288171)
-Thing.create(city_id: 6892, lng: -71.071278, lat: 42.28787)
-Thing.create(city_id: 6893, lng: -71.160482, lat: 42.288165)
-Thing.create(city_id: 6894, lng: -71.060547, lat: 42.287821)
-Thing.create(city_id: 6895, lng: -71.059548, lat: 42.287807)
-Thing.create(city_id: 6896, lng: -71.163887, lat: 42.288159)
-Thing.create(city_id: 6897, lng: -71.107, lat: 42.287974)
-Thing.create(city_id: 6898, lng: -71.133422, lat: 42.288054)
-Thing.create(city_id: 6899, lng: -71.066671, lat: 42.287814)
-Thing.create(city_id: 6900, lng: -71.115648, lat: 42.28798)
-Thing.create(city_id: 6901, lng: -71.166728, lat: 42.288138)
-Thing.create(city_id: 6902, lng: -71.16521, lat: 42.288132)
-Thing.create(city_id: 6903, lng: -71.144027, lat: 42.288048)
-Thing.create(city_id: 6904, lng: -71.169245, lat: 42.288119)
-Thing.create(city_id: 6905, lng: -71.154818, lat: 42.288066)
-Thing.create(city_id: 6906, lng: -71.05382, lat: 42.287715)
-Thing.create(city_id: 6907, lng: -71.080829, lat: 42.287816)
-Thing.create(city_id: 6908, lng: -71.145057, lat: 42.288025)
-Thing.create(city_id: 6909, lng: -71.06916, lat: 42.287764)
-Thing.create(city_id: 6910, lng: -71.144093, lat: 42.288456)
-Thing.create(city_id: 6911, lng: -71.16858, lat: 42.288498)
-Thing.create(city_id: 6912, lng: -71.078863, lat: 42.288164)
-Thing.create(city_id: 6913, lng: -71.116883, lat: 42.288281)
-Thing.create(city_id: 6914, lng: -71.113289, lat: 42.288224)
-Thing.create(city_id: 6915, lng: -71.127676, lat: 42.288233)
-Thing.create(city_id: 6916, lng: -71.090296, lat: 42.288084)
-Thing.create(city_id: 6917, lng: -71.139052, lat: 42.288209)
-Thing.create(city_id: 6918, lng: -71.057161, lat: 42.287708)
-Thing.create(city_id: 6919, lng: -71.06301, lat: 42.287722)
-Thing.create(city_id: 6920, lng: -71.075422, lat: 42.287767)
-Thing.create(city_id: 6921, lng: -71.054795, lat: 42.287676)
-Thing.create(city_id: 6922, lng: -71.156964, lat: 42.288024)
-Thing.create(city_id: 6923, lng: -71.102707, lat: 42.287849)
-Thing.create(city_id: 6924, lng: -71.049262, lat: 42.28764)
-Thing.create(city_id: 6925, lng: -71.051676, lat: 42.287649)
-Thing.create(city_id: 6926, lng: -71.076224, lat: 42.287726)
-Thing.create(city_id: 6927, lng: -71.10183, lat: 42.287813)
-Thing.create(city_id: 6928, lng: -71.112916, lat: 42.287839)
-Thing.create(city_id: 6929, lng: -71.038631, lat: 42.287543)
-Thing.create(city_id: 6930, lng: -71.118623, lat: 42.287832)
-Thing.create(city_id: 6931, lng: -71.136537, lat: 42.287883)
-Thing.create(city_id: 6932, lng: -71.124635, lat: 42.287843)
-Thing.create(city_id: 6933, lng: -71.152514, lat: 42.287921)
-Thing.create(city_id: 6934, lng: -71.15135, lat: 42.287914)
-Thing.create(city_id: 6935, lng: -71.039612, lat: 42.287517)
-Thing.create(city_id: 6936, lng: -71.079136, lat: 42.287647)
-Thing.create(city_id: 6937, lng: -71.125634, lat: 42.287804)
-Thing.create(city_id: 6938, lng: -71.143052, lat: 42.287858)
-Thing.create(city_id: 6939, lng: -71.118354, lat: 42.287769)
-Thing.create(city_id: 6940, lng: -71.120102, lat: 42.287755)
-Thing.create(city_id: 6941, lng: -71.114338, lat: 42.287734)
-Thing.create(city_id: 6942, lng: -71.085479, lat: 42.28763)
-Thing.create(city_id: 6943, lng: -71.060837, lat: 42.28132)
-Thing.create(city_id: 6944, lng: -71.071059, lat: 42.281338)
-Thing.create(city_id: 6945, lng: -71.161412, lat: 42.281638)
-Thing.create(city_id: 6946, lng: -71.095804, lat: 42.281425)
-Thing.create(city_id: 6947, lng: -71.054414, lat: 42.281271)
-Thing.create(city_id: 6948, lng: -71.081532, lat: 42.281369)
-Thing.create(city_id: 6949, lng: -71.055196, lat: 42.281257)
-Thing.create(city_id: 6950, lng: -71.133497, lat: 42.28153)
-Thing.create(city_id: 6951, lng: -71.170637, lat: 42.281607)
-Thing.create(city_id: 6952, lng: -71.143681, lat: 42.281525)
-Thing.create(city_id: 6953, lng: -71.082912, lat: 42.281318)
-Thing.create(city_id: 6954, lng: -71.065676, lat: 42.281248)
-Thing.create(city_id: 6955, lng: -71.078176, lat: 42.281292)
-Thing.create(city_id: 6956, lng: -71.093696, lat: 42.281346)
-Thing.create(city_id: 6957, lng: -71.121734, lat: 42.281438)
-Thing.create(city_id: 6958, lng: -71.074607, lat: 42.28127)
-Thing.create(city_id: 6959, lng: -71.18562, lat: 42.281621)
-Thing.create(city_id: 6960, lng: -71.131271, lat: 42.281456)
-Thing.create(city_id: 6961, lng: -71.14784, lat: 42.281499)
-Thing.create(city_id: 6962, lng: -71.15961, lat: 42.281521)
-Thing.create(city_id: 6963, lng: -71.053526, lat: 42.281149)
-Thing.create(city_id: 6964, lng: -71.12667, lat: 42.281397)
-Thing.create(city_id: 6965, lng: -71.051806, lat: 42.281129)
-Thing.create(city_id: 6966, lng: -71.149352, lat: 42.281461)
-Thing.create(city_id: 6967, lng: -71.115933, lat: 42.281351)
-Thing.create(city_id: 6968, lng: -71.141988, lat: 42.281426)
-Thing.create(city_id: 6969, lng: -71.089633, lat: 42.281248)
-Thing.create(city_id: 6970, lng: -71.10379, lat: 42.281295)
-Thing.create(city_id: 6971, lng: -71.144434, lat: 42.281402)
-Thing.create(city_id: 6972, lng: -71.091129, lat: 42.281216)
-Thing.create(city_id: 6973, lng: -71.069294, lat: 42.281125)
-Thing.create(city_id: 6974, lng: -71.075819, lat: 42.28114)
-Thing.create(city_id: 6975, lng: -71.12052, lat: 42.281282)
-Thing.create(city_id: 6976, lng: -71.049065, lat: 42.281014)
-Thing.create(city_id: 6977, lng: -71.117437, lat: 42.281257)
-Thing.create(city_id: 6978, lng: -71.166444, lat: 42.281397)
-Thing.create(city_id: 6979, lng: -71.047985, lat: 42.280982)
-Thing.create(city_id: 6980, lng: -71.09475, lat: 42.281141)
-Thing.create(city_id: 6981, lng: -71.087586, lat: 42.281092)
-Thing.create(city_id: 6982, lng: -71.140444, lat: 42.281265)
-Thing.create(city_id: 6983, lng: -71.063526, lat: 42.280995)
-Thing.create(city_id: 6984, lng: -71.122478, lat: 42.281197)
-Thing.create(city_id: 6985, lng: -71.124169, lat: 42.281201)
-Thing.create(city_id: 6986, lng: -71.130436, lat: 42.281202)
-Thing.create(city_id: 6987, lng: -71.075603, lat: 42.281003)
-Thing.create(city_id: 6988, lng: -71.06782, lat: 42.28097)
-Thing.create(city_id: 6989, lng: -71.086063, lat: 42.281036)
-Thing.create(city_id: 6990, lng: -71.135229, lat: 42.281203)
-Thing.create(city_id: 6991, lng: -71.127415, lat: 42.281154)
-Thing.create(city_id: 6992, lng: -71.052803, lat: 42.280885)
-Thing.create(city_id: 6993, lng: -71.142927, lat: 42.281199)
-Thing.create(city_id: 6994, lng: -71.115843, lat: 42.281111)
-Thing.create(city_id: 6995, lng: -71.145443, lat: 42.281155)
-Thing.create(city_id: 6996, lng: -71.096667, lat: 42.280988)
-Thing.create(city_id: 6997, lng: -71.151527, lat: 42.281164)
-Thing.create(city_id: 6998, lng: -71.117895, lat: 42.281056)
-Thing.create(city_id: 6999, lng: -71.057544, lat: 42.280801)
-Thing.create(city_id: 7000, lng: -71.063197, lat: 42.280813)
-Thing.create(city_id: 7001, lng: -71.056753, lat: 42.280785)
-Thing.create(city_id: 7002, lng: -71.080309, lat: 42.280868)
-Thing.create(city_id: 7003, lng: -71.060361, lat: 42.280784)
-Thing.create(city_id: 7004, lng: -71.09978, lat: 42.308097)
-Thing.create(city_id: 7005, lng: -71.117101, lat: 42.308147)
-Thing.create(city_id: 7006, lng: -71.102617, lat: 42.308096)
-Thing.create(city_id: 7007, lng: -71.12471, lat: 42.308152)
-Thing.create(city_id: 7008, lng: -71.086294, lat: 42.308016)
-Thing.create(city_id: 7009, lng: -71.082947, lat: 42.307964)
-Thing.create(city_id: 7010, lng: -71.084905, lat: 42.307961)
-Thing.create(city_id: 7011, lng: -71.131715, lat: 42.30812)
-Thing.create(city_id: 7012, lng: -71.111468, lat: 42.308026)
-Thing.create(city_id: 7013, lng: -71.100629, lat: 42.307989)
-Thing.create(city_id: 7014, lng: -71.107272, lat: 42.30801)
-Thing.create(city_id: 7015, lng: -71.074551, lat: 42.307889)
-Thing.create(city_id: 7016, lng: -71.119604, lat: 42.308041)
-Thing.create(city_id: 7017, lng: -71.101316, lat: 42.307955)
-Thing.create(city_id: 7018, lng: -71.075899, lat: 42.307843)
-Thing.create(city_id: 7019, lng: -71.102623, lat: 42.307938)
-Thing.create(city_id: 7020, lng: -71.112448, lat: 42.307956)
-Thing.create(city_id: 7021, lng: -71.088937, lat: 42.307855)
-Thing.create(city_id: 7022, lng: -71.109877, lat: 42.307868)
-Thing.create(city_id: 7023, lng: -71.11362, lat: 42.307866)
-Thing.create(city_id: 7024, lng: -71.080748, lat: 42.307749)
-Thing.create(city_id: 7025, lng: -71.123071, lat: 42.307873)
-Thing.create(city_id: 7026, lng: -71.11473, lat: 42.307779)
-Thing.create(city_id: 7027, lng: -71.124101, lat: 42.30778)
-Thing.create(city_id: 7028, lng: -71.074698, lat: 42.307603)
-Thing.create(city_id: 7029, lng: -71.127815, lat: 42.307761)
-Thing.create(city_id: 7030, lng: -71.06993, lat: 42.307526)
-Thing.create(city_id: 7031, lng: -71.118684, lat: 42.307691)
-Thing.create(city_id: 7032, lng: -71.083655, lat: 42.307566)
-Thing.create(city_id: 7033, lng: -71.135362, lat: 42.307728)
-Thing.create(city_id: 7034, lng: -71.126476, lat: 42.307681)
-Thing.create(city_id: 7035, lng: -71.084088, lat: 42.307486)
-Thing.create(city_id: 7036, lng: -71.081663, lat: 42.307463)
-Thing.create(city_id: 7037, lng: -71.109064, lat: 42.307548)
-Thing.create(city_id: 7038, lng: -71.053419, lat: 42.307339)
-Thing.create(city_id: 7039, lng: -71.077293, lat: 42.307427)
-Thing.create(city_id: 7040, lng: -71.105645, lat: 42.307514)
-Thing.create(city_id: 7041, lng: -71.086145, lat: 42.307441)
-Thing.create(city_id: 7042, lng: -71.104438, lat: 42.307505)
-Thing.create(city_id: 7043, lng: -71.106598, lat: 42.307489)
-Thing.create(city_id: 7044, lng: -71.110924, lat: 42.307498)
-Thing.create(city_id: 7045, lng: -71.086794, lat: 42.307394)
-Thing.create(city_id: 7046, lng: -71.11188, lat: 42.30747)
-Thing.create(city_id: 7047, lng: -71.116419, lat: 42.30748)
-Thing.create(city_id: 7048, lng: -71.135732, lat: 42.307532)
-Thing.create(city_id: 7049, lng: -71.115575, lat: 42.307449)
-Thing.create(city_id: 7050, lng: -71.072783, lat: 42.307251)
-Thing.create(city_id: 7051, lng: -71.102833, lat: 42.307342)
-Thing.create(city_id: 7052, lng: -71.070671, lat: 42.307178)
-Thing.create(city_id: 7053, lng: -71.076181, lat: 42.307162)
-Thing.create(city_id: 7054, lng: -71.11032, lat: 42.307278)
-Thing.create(city_id: 7055, lng: -71.088225, lat: 42.307184)
-Thing.create(city_id: 7056, lng: -71.072686, lat: 42.295476)
-Thing.create(city_id: 7057, lng: -71.08241, lat: 42.296339)
-Thing.create(city_id: 7058, lng: -71.146985, lat: 42.296192)
-Thing.create(city_id: 7059, lng: -71.084503, lat: 42.295935)
-Thing.create(city_id: 7060, lng: -71.079382, lat: 42.295843)
-Thing.create(city_id: 7061, lng: -71.119794, lat: 42.295868)
-Thing.create(city_id: 7062, lng: -71.074966, lat: 42.295657)
-Thing.create(city_id: 7063, lng: -71.059034, lat: 42.363433)
-Thing.create(city_id: 7064, lng: -71.119104, lat: 42.295706)
-Thing.create(city_id: 7065, lng: -71.150474, lat: 42.295734)
-Thing.create(city_id: 7066, lng: -71.078209, lat: 42.295473)
-Thing.create(city_id: 7067, lng: -71.070116, lat: 42.295437)
-Thing.create(city_id: 7068, lng: -71.135925, lat: 42.295635)
-Thing.create(city_id: 7069, lng: -71.139493, lat: 42.295642)
-Thing.create(city_id: 7070, lng: -71.153423, lat: 42.295682)
-Thing.create(city_id: 7071, lng: -71.068056, lat: 42.295392)
-Thing.create(city_id: 7072, lng: -71.157978, lat: 42.295681)
-Thing.create(city_id: 7073, lng: -71.067036, lat: 42.295333)
-Thing.create(city_id: 7074, lng: -71.118578, lat: 42.295506)
-Thing.create(city_id: 7075, lng: -71.091042, lat: 42.295398)
-Thing.create(city_id: 7076, lng: -71.086283, lat: 42.29538)
-Thing.create(city_id: 7077, lng: -71.073776, lat: 42.295301)
-Thing.create(city_id: 7078, lng: -71.083035, lat: 42.295325)
-Thing.create(city_id: 7079, lng: -71.077354, lat: 42.295294)
-Thing.create(city_id: 7080, lng: -71.146336, lat: 42.295526)
-Thing.create(city_id: 7081, lng: -71.098827, lat: 42.295367)
-Thing.create(city_id: 7082, lng: -71.13486, lat: 42.295481)
-Thing.create(city_id: 7083, lng: -71.064443, lat: 42.295211)
-Thing.create(city_id: 7084, lng: -71.147268, lat: 42.295486)
-Thing.create(city_id: 7085, lng: -71.116469, lat: 42.295387)
-Thing.create(city_id: 7086, lng: -71.071178, lat: 42.295185)
-Thing.create(city_id: 7087, lng: -71.061749, lat: 42.29514)
-Thing.create(city_id: 7088, lng: -71.140661, lat: 42.295383)
-Thing.create(city_id: 7089, lng: -71.074589, lat: 42.295145)
-Thing.create(city_id: 7090, lng: -71.156739, lat: 42.295407)
-Thing.create(city_id: 7091, lng: -71.164594, lat: 42.295418)
-Thing.create(city_id: 7092, lng: -71.079122, lat: 42.295115)
-Thing.create(city_id: 7093, lng: -71.115768, lat: 42.295242)
-Thing.create(city_id: 7094, lng: -71.084188, lat: 42.295126)
-Thing.create(city_id: 7095, lng: -71.114774, lat: 42.295233)
-Thing.create(city_id: 7096, lng: -71.087093, lat: 42.295132)
-Thing.create(city_id: 7097, lng: -71.072162, lat: 42.295076)
-Thing.create(city_id: 7098, lng: -71.148385, lat: 42.295304)
-Thing.create(city_id: 7099, lng: -71.142537, lat: 42.295243)
-Thing.create(city_id: 7100, lng: -71.136795, lat: 42.295189)
-Thing.create(city_id: 7101, lng: -71.155648, lat: 42.295239)
-Thing.create(city_id: 7102, lng: -71.065658, lat: 42.294895)
-Thing.create(city_id: 7103, lng: -71.164041, lat: 42.295213)
-Thing.create(city_id: 7104, lng: -71.150262, lat: 42.295171)
-Thing.create(city_id: 7105, lng: -71.070163, lat: 42.294866)
-Thing.create(city_id: 7106, lng: -71.149462, lat: 42.295135)
-Thing.create(city_id: 7107, lng: -71.080336, lat: 42.294875)
-Thing.create(city_id: 7108, lng: -71.081382, lat: 42.294872)
-Thing.create(city_id: 7109, lng: -71.170208, lat: 42.287896)
-Thing.create(city_id: 7110, lng: -71.111042, lat: 42.28771)
-Thing.create(city_id: 7111, lng: -71.061747, lat: 42.287522)
-Thing.create(city_id: 7112, lng: -71.112208, lat: 42.287696)
-Thing.create(city_id: 7113, lng: -71.126853, lat: 42.287741)
-Thing.create(city_id: 7114, lng: -71.052675, lat: 42.287468)
-Thing.create(city_id: 7115, lng: -71.081894, lat: 42.287575)
-Thing.create(city_id: 7116, lng: -71.042516, lat: 42.287425)
-Thing.create(city_id: 7117, lng: -71.132593, lat: 42.287743)
-Thing.create(city_id: 7118, lng: -71.142029, lat: 42.28776)
-Thing.create(city_id: 7119, lng: -71.157906, lat: 42.287803)
-Thing.create(city_id: 7120, lng: -71.137614, lat: 42.287726)
-Thing.create(city_id: 7121, lng: -71.086221, lat: 42.287549)
-Thing.create(city_id: 7122, lng: -71.079876, lat: 42.287518)
-Thing.create(city_id: 7123, lng: -71.058278, lat: 42.287426)
-Thing.create(city_id: 7124, lng: -71.046326, lat: 42.28737)
-Thing.create(city_id: 7125, lng: -71.164573, lat: 42.28776)
-Thing.create(city_id: 7126, lng: -71.115105, lat: 42.287603)
-Thing.create(city_id: 7127, lng: -71.120853, lat: 42.287614)
-Thing.create(city_id: 7128, lng: -71.138811, lat: 42.28767)
-Thing.create(city_id: 7129, lng: -71.14612, lat: 42.287691)
-Thing.create(city_id: 7130, lng: -71.040091, lat: 42.287309)
-Thing.create(city_id: 7131, lng: -71.141011, lat: 42.287666)
-Thing.create(city_id: 7132, lng: -71.076565, lat: 42.287446)
-Thing.create(city_id: 7133, lng: -71.072291, lat: 42.287415)
-Thing.create(city_id: 7134, lng: -71.078654, lat: 42.287428)
-Thing.create(city_id: 7135, lng: -71.069736, lat: 42.287393)
-Thing.create(city_id: 7136, lng: -71.128218, lat: 42.287594)
-Thing.create(city_id: 7137, lng: -71.04111, lat: 42.287278)
-Thing.create(city_id: 7138, lng: -71.043889, lat: 42.287279)
-Thing.create(city_id: 7139, lng: -71.159784, lat: 42.28768)
-Thing.create(city_id: 7140, lng: -71.074379, lat: 42.287389)
-Thing.create(city_id: 7141, lng: -71.122983, lat: 42.287546)
-Thing.create(city_id: 7142, lng: -71.148795, lat: 42.287626)
-Thing.create(city_id: 7143, lng: -71.139836, lat: 42.287596)
-Thing.create(city_id: 7144, lng: -71.063961, lat: 42.287333)
-Thing.create(city_id: 7145, lng: -71.168605, lat: 42.287677)
-Thing.create(city_id: 7146, lng: -71.106326, lat: 42.287475)
-Thing.create(city_id: 7147, lng: -71.121748, lat: 42.287527)
-Thing.create(city_id: 7148, lng: -71.158678, lat: 42.287633)
-Thing.create(city_id: 7149, lng: -71.053764, lat: 42.28727)
-Thing.create(city_id: 7150, lng: -71.166377, lat: 42.287643)
-Thing.create(city_id: 7151, lng: -71.070563, lat: 42.287312)
-Thing.create(city_id: 7152, lng: -71.067752, lat: 42.287288)
-Thing.create(city_id: 7153, lng: -71.077271, lat: 42.287323)
-Thing.create(city_id: 7154, lng: -71.161276, lat: 42.287588)
-Thing.create(city_id: 7155, lng: -71.08298, lat: 42.28733)
-Thing.create(city_id: 7156, lng: -71.094494, lat: 42.287323)
-Thing.create(city_id: 7157, lng: -71.123905, lat: 42.287418)
-Thing.create(city_id: 7158, lng: -71.0733, lat: 42.287224)
-Thing.create(city_id: 7159, lng: -71.047738, lat: 42.287126)
-Thing.create(city_id: 7160, lng: -71.063129, lat: 42.28718)
-Thing.create(city_id: 7161, lng: -71.12654, lat: 42.287398)
-Thing.create(city_id: 7162, lng: -71.078069, lat: 42.28722)
-Thing.create(city_id: 7163, lng: -71.163096, lat: 42.287454)
-Thing.create(city_id: 7164, lng: -71.131843, lat: 42.287333)
-Thing.create(city_id: 7165, lng: -71.1543, lat: 42.287397)
-Thing.create(city_id: 7166, lng: -71.15261, lat: 42.287388)
-Thing.create(city_id: 7167, lng: -71.165819, lat: 42.287922)
-Thing.create(city_id: 7168, lng: -71.164822, lat: 42.281113)
-Thing.create(city_id: 7169, lng: -71.160707, lat: 42.281101)
-Thing.create(city_id: 7170, lng: -71.073008, lat: 42.280805)
-Thing.create(city_id: 7171, lng: -71.092735, lat: 42.280876)
-Thing.create(city_id: 7172, lng: -71.070387, lat: 42.280794)
-Thing.create(city_id: 7173, lng: -71.168305, lat: 42.281119)
-Thing.create(city_id: 7174, lng: -71.137948, lat: 42.281027)
-Thing.create(city_id: 7175, lng: -71.129229, lat: 42.280995)
-Thing.create(city_id: 7176, lng: -71.125793, lat: 42.28098)
-Thing.create(city_id: 7177, lng: -71.162232, lat: 42.281089)
-Thing.create(city_id: 7178, lng: -71.11396, lat: 42.280933)
-Thing.create(city_id: 7179, lng: -71.058823, lat: 42.280714)
-Thing.create(city_id: 7180, lng: -71.086438, lat: 42.280779)
-Thing.create(city_id: 7181, lng: -71.158732, lat: 42.281007)
-Thing.create(city_id: 7182, lng: -71.092049, lat: 42.280781)
-Thing.create(city_id: 7183, lng: -71.076857, lat: 42.280723)
-Thing.create(city_id: 7184, lng: -71.05626, lat: 42.280642)
-Thing.create(city_id: 7185, lng: -71.131788, lat: 42.280907)
-Thing.create(city_id: 7186, lng: -71.053892, lat: 42.280618)
-Thing.create(city_id: 7187, lng: -71.120819, lat: 42.280855)
-Thing.create(city_id: 7188, lng: -71.139379, lat: 42.280909)
-Thing.create(city_id: 7189, lng: -71.141198, lat: 42.280913)
-Thing.create(city_id: 7190, lng: -71.154633, lat: 42.281459)
-Thing.create(city_id: 7191, lng: -71.132428, lat: 42.281332)
-Thing.create(city_id: 7192, lng: -71.079196, lat: 42.28109)
-Thing.create(city_id: 7193, lng: -71.071984, lat: 42.281013)
-Thing.create(city_id: 7194, lng: -71.163803, lat: 42.281285)
-Thing.create(city_id: 7195, lng: -71.123403, lat: 42.281133)
-Thing.create(city_id: 7196, lng: -71.136544, lat: 42.281103)
-Thing.create(city_id: 7197, lng: -71.068509, lat: 42.280822)
-Thing.create(city_id: 7198, lng: -71.097413, lat: 42.280767)
-Thing.create(city_id: 7199, lng: -71.088517, lat: 42.280732)
-Thing.create(city_id: 7200, lng: -71.090106, lat: 42.280736)
-Thing.create(city_id: 7201, lng: -71.095283, lat: 42.280752)
-Thing.create(city_id: 7202, lng: -71.098764, lat: 42.280762)
-Thing.create(city_id: 7203, lng: -71.146983, lat: 42.280918)
-Thing.create(city_id: 7204, lng: -71.143699, lat: 42.280901)
-Thing.create(city_id: 7205, lng: -71.071434, lat: 42.280652)
-Thing.create(city_id: 7206, lng: -71.069459, lat: 42.280642)
-Thing.create(city_id: 7207, lng: -71.142129, lat: 42.28089)
-Thing.create(city_id: 7208, lng: -71.112601, lat: 42.28079)
-Thing.create(city_id: 7209, lng: -71.050274, lat: 42.280562)
-Thing.create(city_id: 7210, lng: -71.118725, lat: 42.280787)
-Thing.create(city_id: 7211, lng: -71.169856, lat: 42.280941)
-Thing.create(city_id: 7212, lng: -71.098216, lat: 42.28071)
-Thing.create(city_id: 7213, lng: -71.054888, lat: 42.28055)
-Thing.create(city_id: 7214, lng: -71.048706, lat: 42.280523)
-Thing.create(city_id: 7215, lng: -71.155074, lat: 42.28089)
-Thing.create(city_id: 7216, lng: -71.181717, lat: 42.280965)
-Thing.create(city_id: 7217, lng: -71.158041, lat: 42.280888)
-Thing.create(city_id: 7218, lng: -71.08136, lat: 42.280625)
-Thing.create(city_id: 7219, lng: -71.127263, lat: 42.28077)
-Thing.create(city_id: 7220, lng: -71.074166, lat: 42.28057)
-Thing.create(city_id: 7221, lng: -71.159421, lat: 42.280852)
-Thing.create(city_id: 7222, lng: -71.065883, lat: 42.280532)
-Thing.create(city_id: 7223, lng: -71.086096, lat: 42.280604)
-Thing.create(city_id: 7224, lng: -71.153847, lat: 42.280823)
-Thing.create(city_id: 7225, lng: -71.077636, lat: 42.280555)
-Thing.create(city_id: 7226, lng: -71.05096, lat: 42.280444)
-Thing.create(city_id: 7227, lng: -71.124425, lat: 42.307288)
-Thing.create(city_id: 7228, lng: -71.085375, lat: 42.30713)
-Thing.create(city_id: 7229, lng: -71.059144, lat: 42.30703)
-Thing.create(city_id: 7230, lng: -71.06945, lat: 42.307019)
-Thing.create(city_id: 7231, lng: -71.07539, lat: 42.307038)
-Thing.create(city_id: 7232, lng: -71.0578, lat: 42.306968)
-Thing.create(city_id: 7233, lng: -71.118012, lat: 42.307139)
-Thing.create(city_id: 7234, lng: -71.12363, lat: 42.307149)
-Thing.create(city_id: 7235, lng: -71.061086, lat: 42.306908)
-Thing.create(city_id: 7236, lng: -71.111295, lat: 42.307075)
-Thing.create(city_id: 7237, lng: -71.082874, lat: 42.306964)
-Thing.create(city_id: 7238, lng: -71.060308, lat: 42.306863)
-Thing.create(city_id: 7239, lng: -71.078264, lat: 42.306918)
-Thing.create(city_id: 7240, lng: -71.061525, lat: 42.307494)
-Thing.create(city_id: 7241, lng: -71.07152, lat: 42.307465)
-Thing.create(city_id: 7242, lng: -71.100856, lat: 42.307498)
-Thing.create(city_id: 7243, lng: -71.132222, lat: 42.307558)
-Thing.create(city_id: 7244, lng: -71.130237, lat: 42.30749)
-Thing.create(city_id: 7245, lng: -71.079969, lat: 42.307181)
-Thing.create(city_id: 7246, lng: -71.106181, lat: 42.307012)
-Thing.create(city_id: 7247, lng: -71.062306, lat: 42.306843)
-Thing.create(city_id: 7248, lng: -71.11913, lat: 42.307045)
-Thing.create(city_id: 7249, lng: -71.116541, lat: 42.307017)
-Thing.create(city_id: 7250, lng: -71.103749, lat: 42.306972)
-Thing.create(city_id: 7251, lng: -71.11234, lat: 42.306978)
-Thing.create(city_id: 7252, lng: -71.054363, lat: 42.306758)
-Thing.create(city_id: 7253, lng: -71.118537, lat: 42.306955)
-Thing.create(city_id: 7254, lng: -71.077169, lat: 42.306807)
-Thing.create(city_id: 7255, lng: -71.08724, lat: 42.30684)
-Thing.create(city_id: 7256, lng: -71.086454, lat: 42.306834)
-Thing.create(city_id: 7257, lng: -71.127863, lat: 42.306962)
-Thing.create(city_id: 7258, lng: -71.084578, lat: 42.306808)
-Thing.create(city_id: 7259, lng: -71.108031, lat: 42.306877)
-Thing.create(city_id: 7260, lng: -71.113286, lat: 42.306886)
-Thing.create(city_id: 7261, lng: -71.130674, lat: 42.306884)
-Thing.create(city_id: 7262, lng: -71.058785, lat: 42.306607)
-Thing.create(city_id: 7263, lng: -71.114288, lat: 42.306788)
-Thing.create(city_id: 7264, lng: -71.061387, lat: 42.306562)
-Thing.create(city_id: 7265, lng: -71.063828, lat: 42.306566)
-Thing.create(city_id: 7266, lng: -71.125946, lat: 42.306783)
-Thing.create(city_id: 7267, lng: -71.079185, lat: 42.306619)
-Thing.create(city_id: 7268, lng: -71.05973, lat: 42.306532)
-Thing.create(city_id: 7269, lng: -71.115082, lat: 42.306713)
-Thing.create(city_id: 7270, lng: -71.080692, lat: 42.306577)
-Thing.create(city_id: 7271, lng: -71.081951, lat: 42.306527)
-Thing.create(city_id: 7272, lng: -71.116159, lat: 42.306626)
-Thing.create(city_id: 7273, lng: -71.106527, lat: 42.306567)
-Thing.create(city_id: 7274, lng: -71.123769, lat: 42.306607)
-Thing.create(city_id: 7275, lng: -71.117021, lat: 42.306582)
-Thing.create(city_id: 7276, lng: -71.08559, lat: 42.306458)
-Thing.create(city_id: 7277, lng: -71.083681, lat: 42.306417)
-Thing.create(city_id: 7278, lng: -71.102814, lat: 42.306483)
-Thing.create(city_id: 7279, lng: -71.057664, lat: 42.306307)
-Thing.create(city_id: 7280, lng: -71.105371, lat: 42.306453)
-Thing.create(city_id: 7281, lng: -71.089148, lat: 42.294898)
-Thing.create(city_id: 7282, lng: -71.139103, lat: 42.295048)
-Thing.create(city_id: 7283, lng: -71.076354, lat: 42.294821)
-Thing.create(city_id: 7284, lng: -71.141299, lat: 42.295034)
-Thing.create(city_id: 7285, lng: -71.08503, lat: 42.294809)
-Thing.create(city_id: 7286, lng: -71.119222, lat: 42.294919)
-Thing.create(city_id: 7287, lng: -71.15115, lat: 42.295006)
-Thing.create(city_id: 7288, lng: -71.120686, lat: 42.294887)
-Thing.create(city_id: 7289, lng: -71.062715, lat: 42.294646)
-Thing.create(city_id: 7290, lng: -71.165416, lat: 42.294978)
-Thing.create(city_id: 7291, lng: -71.066611, lat: 42.294646)
-Thing.create(city_id: 7292, lng: -71.13074, lat: 42.294863)
-Thing.create(city_id: 7293, lng: -71.135603, lat: 42.294867)
-Thing.create(city_id: 7294, lng: -71.071229, lat: 42.294635)
-Thing.create(city_id: 7295, lng: -71.078086, lat: 42.294654)
-Thing.create(city_id: 7296, lng: -71.082463, lat: 42.294653)
-Thing.create(city_id: 7297, lng: -71.131966, lat: 42.294795)
-Thing.create(city_id: 7298, lng: -71.116882, lat: 42.294744)
-Thing.create(city_id: 7299, lng: -71.07972, lat: 42.294607)
-Thing.create(city_id: 7300, lng: -71.143266, lat: 42.294821)
-Thing.create(city_id: 7301, lng: -71.086696, lat: 42.294624)
-Thing.create(city_id: 7302, lng: -71.11542, lat: 42.294706)
-Thing.create(city_id: 7303, lng: -71.063869, lat: 42.294517)
-Thing.create(city_id: 7304, lng: -71.077359, lat: 42.294553)
-Thing.create(city_id: 7305, lng: -71.091137, lat: 42.294591)
-Thing.create(city_id: 7306, lng: -71.163514, lat: 42.294807)
-Thing.create(city_id: 7307, lng: -71.121544, lat: 42.294654)
-Thing.create(city_id: 7308, lng: -71.136151, lat: 42.294692)
-Thing.create(city_id: 7309, lng: -71.085835, lat: 42.294505)
-Thing.create(city_id: 7310, lng: -71.156063, lat: 42.294736)
-Thing.create(city_id: 7311, lng: -71.134229, lat: 42.29466)
-Thing.create(city_id: 7312, lng: -71.138655, lat: 42.294663)
-Thing.create(city_id: 7313, lng: -71.160131, lat: 42.294726)
-Thing.create(city_id: 7314, lng: -71.049541, lat: 42.295087)
-Thing.create(city_id: 7315, lng: -71.069109, lat: 42.295101)
-Thing.create(city_id: 7316, lng: -71.063253, lat: 42.294984)
-Thing.create(city_id: 7317, lng: -71.07558, lat: 42.294966)
-Thing.create(city_id: 7318, lng: -71.090082, lat: 42.294922)
-Thing.create(city_id: 7319, lng: -71.141543, lat: 42.294658)
-Thing.create(city_id: 7320, lng: -71.137822, lat: 42.294645)
-Thing.create(city_id: 7321, lng: -71.083437, lat: 42.294457)
-Thing.create(city_id: 7322, lng: -71.164785, lat: 42.294719)
-Thing.create(city_id: 7323, lng: -71.146331, lat: 42.294645)
-Thing.create(city_id: 7324, lng: -71.064691, lat: 42.294345)
-Thing.create(city_id: 7325, lng: -71.142447, lat: 42.294608)
-Thing.create(city_id: 7326, lng: -71.073178, lat: 42.294368)
-Thing.create(city_id: 7327, lng: -71.161811, lat: 42.294663)
-Thing.create(city_id: 7328, lng: -71.089156, lat: 42.294424)
-Thing.create(city_id: 7329, lng: -71.151006, lat: 42.294628)
-Thing.create(city_id: 7330, lng: -71.147279, lat: 42.294613)
-Thing.create(city_id: 7331, lng: -71.086535, lat: 42.294394)
-Thing.create(city_id: 7332, lng: -71.080962, lat: 42.294365)
-Thing.create(city_id: 7333, lng: -71.158339, lat: 42.294618)
-Thing.create(city_id: 7334, lng: -71.154956, lat: 42.294599)
-Thing.create(city_id: 7335, lng: -71.150091, lat: 42.287611)
-Thing.create(city_id: 7336, lng: -71.061254, lat: 42.287278)
-Thing.create(city_id: 7337, lng: -71.055356, lat: 42.287216)
-Thing.create(city_id: 7338, lng: -71.059107, lat: 42.28717)
-Thing.create(city_id: 7339, lng: -71.124799, lat: 42.287312)
-Thing.create(city_id: 7340, lng: -71.15156, lat: 42.287378)
-Thing.create(city_id: 7341, lng: -71.116718, lat: 42.287261)
-Thing.create(city_id: 7342, lng: -71.133846, lat: 42.287316)
-Thing.create(city_id: 7343, lng: -71.155034, lat: 42.28738)
-Thing.create(city_id: 7344, lng: -71.147147, lat: 42.287348)
-Thing.create(city_id: 7345, lng: -71.156161, lat: 42.287362)
-Thing.create(city_id: 7346, lng: -71.13276, lat: 42.287285)
-Thing.create(city_id: 7347, lng: -71.068819, lat: 42.287052)
-Thing.create(city_id: 7348, lng: -71.143898, lat: 42.287309)
-Thing.create(city_id: 7349, lng: -71.084008, lat: 42.287099)
-Thing.create(city_id: 7350, lng: -71.113605, lat: 42.287187)
-Thing.create(city_id: 7351, lng: -71.165372, lat: 42.287346)
-Thing.create(city_id: 7352, lng: -71.126065, lat: 42.287218)
-Thing.create(city_id: 7353, lng: -71.089473, lat: 42.28709)
-Thing.create(city_id: 7354, lng: -71.071304, lat: 42.287019)
-Thing.create(city_id: 7355, lng: -71.137285, lat: 42.287243)
-Thing.create(city_id: 7356, lng: -71.129907, lat: 42.287209)
-Thing.create(city_id: 7357, lng: -71.117749, lat: 42.287169)
-Thing.create(city_id: 7358, lng: -71.072156, lat: 42.287004)
-Thing.create(city_id: 7359, lng: -71.041865, lat: 42.286887)
-Thing.create(city_id: 7360, lng: -71.138404, lat: 42.287217)
-Thing.create(city_id: 7361, lng: -71.152072, lat: 42.287255)
-Thing.create(city_id: 7362, lng: -71.060013, lat: 42.286939)
-Thing.create(city_id: 7363, lng: -71.054415, lat: 42.286912)
-Thing.create(city_id: 7364, lng: -71.056459, lat: 42.286919)
-Thing.create(city_id: 7365, lng: -71.167139, lat: 42.287273)
-Thing.create(city_id: 7366, lng: -71.150535, lat: 42.287221)
-Thing.create(city_id: 7367, lng: -71.075184, lat: 42.286964)
-Thing.create(city_id: 7368, lng: -71.112866, lat: 42.287095)
-Thing.create(city_id: 7369, lng: -71.120221, lat: 42.287117)
-Thing.create(city_id: 7370, lng: -71.143259, lat: 42.287175)
-Thing.create(city_id: 7371, lng: -71.070378, lat: 42.286925)
-Thing.create(city_id: 7372, lng: -71.170225, lat: 42.287254)
-Thing.create(city_id: 7373, lng: -71.043387, lat: 42.286811)
-Thing.create(city_id: 7374, lng: -71.144635, lat: 42.287165)
-Thing.create(city_id: 7375, lng: -71.051729, lat: 42.286835)
-Thing.create(city_id: 7376, lng: -71.139503, lat: 42.287141)
-Thing.create(city_id: 7377, lng: -71.162027, lat: 42.287203)
-Thing.create(city_id: 7378, lng: -71.094459, lat: 42.286953)
-Thing.create(city_id: 7379, lng: -71.110399, lat: 42.287005)
-Thing.create(city_id: 7380, lng: -71.127709, lat: 42.287062)
-Thing.create(city_id: 7381, lng: -71.068151, lat: 42.286842)
-Thing.create(city_id: 7382, lng: -71.14936, lat: 42.287115)
-Thing.create(city_id: 7383, lng: -71.120966, lat: 42.287017)
-Thing.create(city_id: 7384, lng: -71.157986, lat: 42.287133)
-Thing.create(city_id: 7385, lng: -71.08494, lat: 42.286892)
-Thing.create(city_id: 7386, lng: -71.080952, lat: 42.286862)
-Thing.create(city_id: 7387, lng: -71.060908, lat: 42.28675)
-Thing.create(city_id: 7388, lng: -71.046515, lat: 42.286693)
-Thing.create(city_id: 7389, lng: -71.095395, lat: 42.286875)
-Thing.create(city_id: 7390, lng: -71.148267, lat: 42.287045)
-Thing.create(city_id: 7391, lng: -71.055486, lat: 42.28671)
-Thing.create(city_id: 7392, lng: -71.147024, lat: 42.287019)
-Thing.create(city_id: 7393, lng: -71.163902, lat: 42.287064)
-Thing.create(city_id: 7394, lng: -71.126195, lat: 42.280709)
-Thing.create(city_id: 7395, lng: -71.078667, lat: 42.280513)
-Thing.create(city_id: 7396, lng: -71.123198, lat: 42.280651)
-Thing.create(city_id: 7397, lng: -71.165627, lat: 42.280761)
-Thing.create(city_id: 7398, lng: -71.14855, lat: 42.280706)
-Thing.create(city_id: 7399, lng: -71.150782, lat: 42.280694)
-Thing.create(city_id: 7400, lng: -71.160298, lat: 42.280719)
-Thing.create(city_id: 7401, lng: -71.116291, lat: 42.280581)
-Thing.create(city_id: 7402, lng: -71.055698, lat: 42.280317)
-Thing.create(city_id: 7403, lng: -71.124126, lat: 42.280557)
-Thing.create(city_id: 7404, lng: -71.131154, lat: 42.280576)
-Thing.create(city_id: 7405, lng: -71.14993, lat: 42.280634)
-Thing.create(city_id: 7406, lng: -71.128461, lat: 42.280564)
-Thing.create(city_id: 7407, lng: -71.183454, lat: 42.28071)
-Thing.create(city_id: 7408, lng: -71.064076, lat: 42.280317)
-Thing.create(city_id: 7409, lng: -71.134538, lat: 42.280552)
-Thing.create(city_id: 7410, lng: -71.135717, lat: 42.280554)
-Thing.create(city_id: 7411, lng: -71.075256, lat: 42.280347)
-Thing.create(city_id: 7412, lng: -71.096136, lat: 42.280419)
-Thing.create(city_id: 7413, lng: -71.124924, lat: 42.280507)
-Thing.create(city_id: 7414, lng: -71.088305, lat: 42.280362)
-Thing.create(city_id: 7415, lng: -71.056809, lat: 42.280239)
-Thing.create(city_id: 7416, lng: -71.051594, lat: 42.280216)
-Thing.create(city_id: 7417, lng: -71.144564, lat: 42.280537)
-Thing.create(city_id: 7418, lng: -71.045756, lat: 42.280187)
-Thing.create(city_id: 7419, lng: -71.119952, lat: 42.280455)
-Thing.create(city_id: 7420, lng: -71.091113, lat: 42.280344)
-Thing.create(city_id: 7421, lng: -71.113571, lat: 42.280411)
-Thing.create(city_id: 7422, lng: -71.071947, lat: 42.280259)
-Thing.create(city_id: 7423, lng: -71.089195, lat: 42.280315)
-Thing.create(city_id: 7424, lng: -71.071304, lat: 42.280235)
-Thing.create(city_id: 7425, lng: -71.138649, lat: 42.280447)
-Thing.create(city_id: 7426, lng: -71.057867, lat: 42.280159)
-Thing.create(city_id: 7427, lng: -71.065107, lat: 42.280182)
-Thing.create(city_id: 7428, lng: -71.116977, lat: 42.280349)
-Thing.create(city_id: 7429, lng: -71.05897, lat: 42.28013)
-Thing.create(city_id: 7430, lng: -71.140353, lat: 42.280376)
-Thing.create(city_id: 7431, lng: -71.052279, lat: 42.280062)
-Thing.create(city_id: 7432, lng: -71.15221, lat: 42.280397)
-Thing.create(city_id: 7433, lng: -71.125516, lat: 42.280306)
-Thing.create(city_id: 7434, lng: -71.146164, lat: 42.280354)
-Thing.create(city_id: 7435, lng: -71.129919, lat: 42.280303)
-Thing.create(city_id: 7436, lng: -71.079647, lat: 42.28012)
-Thing.create(city_id: 7437, lng: -71.142881, lat: 42.280325)
-Thing.create(city_id: 7438, lng: -71.068116, lat: 42.280067)
-Thing.create(city_id: 7439, lng: -71.167873, lat: 42.280397)
-Thing.create(city_id: 7440, lng: -71.07615, lat: 42.280091)
-Thing.create(city_id: 7441, lng: -71.073066, lat: 42.280077)
-Thing.create(city_id: 7442, lng: -71.117865, lat: 42.280227)
-Thing.create(city_id: 7443, lng: -71.125987, lat: 42.280253)
-Thing.create(city_id: 7444, lng: -71.094379, lat: 42.280129)
-Thing.create(city_id: 7445, lng: -71.092942, lat: 42.280123)
-Thing.create(city_id: 7446, lng: -71.09684, lat: 42.280125)
-Thing.create(city_id: 7447, lng: -71.049635, lat: 42.279936)
-Thing.create(city_id: 7448, lng: -71.086918, lat: 42.280072)
-Thing.create(city_id: 7449, lng: -71.092532, lat: 42.28007)
-Thing.create(city_id: 7450, lng: -71.05298, lat: 42.279919)
-Thing.create(city_id: 7451, lng: -71.154635, lat: 42.280269)
-Thing.create(city_id: 7452, lng: -71.059998, lat: 42.279931)
-Thing.create(city_id: 7453, lng: -71.132618, lat: 42.280736)
-Thing.create(city_id: 7454, lng: -71.060784, lat: 42.306288)
-Thing.create(city_id: 7455, lng: -71.086607, lat: 42.306381)
-Thing.create(city_id: 7456, lng: -71.063733, lat: 42.306293)
-Thing.create(city_id: 7457, lng: -71.054478, lat: 42.306254)
-Thing.create(city_id: 7458, lng: -71.062756, lat: 42.306276)
-Thing.create(city_id: 7459, lng: -71.111744, lat: 42.306054)
-Thing.create(city_id: 7460, lng: -71.118044, lat: 42.306405)
-Thing.create(city_id: 7461, lng: -71.103756, lat: 42.31396)
-Thing.create(city_id: 7462, lng: -71.077658, lat: 42.306244)
-Thing.create(city_id: 7463, lng: -71.11524, lat: 42.306338)
-Thing.create(city_id: 7464, lng: -71.072376, lat: 42.306186)
-Thing.create(city_id: 7465, lng: -71.082744, lat: 42.306181)
-Thing.create(city_id: 7466, lng: -71.110776, lat: 42.306267)
-Thing.create(city_id: 7467, lng: -71.078815, lat: 42.306146)
-Thing.create(city_id: 7468, lng: -71.119176, lat: 42.306279)
-Thing.create(city_id: 7469, lng: -71.058243, lat: 42.306019)
-Thing.create(city_id: 7470, lng: -71.061872, lat: 42.306031)
-Thing.create(city_id: 7471, lng: -71.084391, lat: 42.306093)
-Thing.create(city_id: 7472, lng: -71.107903, lat: 42.306138)
-Thing.create(city_id: 7473, lng: -71.128224, lat: 42.306194)
-Thing.create(city_id: 7474, lng: -71.059049, lat: 42.305948)
-Thing.create(city_id: 7475, lng: -71.115901, lat: 42.306147)
-Thing.create(city_id: 7476, lng: -71.118074, lat: 42.306038)
-Thing.create(city_id: 7477, lng: -71.113881, lat: 42.306018)
-Thing.create(city_id: 7478, lng: -71.059889, lat: 42.305821)
-Thing.create(city_id: 7479, lng: -71.104144, lat: 42.305962)
-Thing.create(city_id: 7480, lng: -71.081223, lat: 42.305867)
-Thing.create(city_id: 7481, lng: -71.078077, lat: 42.305843)
-Thing.create(city_id: 7482, lng: -71.105748, lat: 42.305932)
-Thing.create(city_id: 7483, lng: -71.117088, lat: 42.305936)
-Thing.create(city_id: 7484, lng: -71.111279, lat: 42.305908)
-Thing.create(city_id: 7485, lng: -71.085642, lat: 42.305816)
-Thing.create(city_id: 7486, lng: -71.109613, lat: 42.30587)
-Thing.create(city_id: 7487, lng: -71.114652, lat: 42.305879)
-Thing.create(city_id: 7488, lng: -71.079303, lat: 42.305751)
-Thing.create(city_id: 7489, lng: -71.083825, lat: 42.30572)
-Thing.create(city_id: 7490, lng: -71.08437, lat: 42.305705)
-Thing.create(city_id: 7491, lng: -71.060767, lat: 42.305606)
-Thing.create(city_id: 7492, lng: -71.08034, lat: 42.305667)
-Thing.create(city_id: 7493, lng: -71.084787, lat: 42.305643)
-Thing.create(city_id: 7494, lng: -71.112813, lat: 42.306081)
-Thing.create(city_id: 7495, lng: -71.075978, lat: 42.30646)
-Thing.create(city_id: 7496, lng: -71.124123, lat: 42.306582)
-Thing.create(city_id: 7497, lng: -71.0624, lat: 42.305499)
-Thing.create(city_id: 7498, lng: -71.102802, lat: 42.305638)
-Thing.create(city_id: 7499, lng: -71.108946, lat: 42.305655)
-Thing.create(city_id: 7500, lng: -71.05748, lat: 42.305466)
-Thing.create(city_id: 7501, lng: -71.139446, lat: 42.29453)
-Thing.create(city_id: 7502, lng: -71.067939, lat: 42.294282)
-Thing.create(city_id: 7503, lng: -71.149001, lat: 42.294548)
-Thing.create(city_id: 7504, lng: -71.149996, lat: 42.294521)
-Thing.create(city_id: 7505, lng: -71.118972, lat: 42.294422)
-Thing.create(city_id: 7506, lng: -71.072058, lat: 42.294252)
-Thing.create(city_id: 7507, lng: -71.068739, lat: 42.294235)
-Thing.create(city_id: 7508, lng: -71.079197, lat: 42.294265)
-Thing.create(city_id: 7509, lng: -71.156895, lat: 42.294511)
-Thing.create(city_id: 7510, lng: -71.088231, lat: 42.294259)
-Thing.create(city_id: 7511, lng: -71.14073, lat: 42.294434)
-Thing.create(city_id: 7512, lng: -71.147943, lat: 42.29444)
-Thing.create(city_id: 7513, lng: -71.16277, lat: 42.294466)
-Thing.create(city_id: 7514, lng: -71.170205, lat: 42.294487)
-Thing.create(city_id: 7515, lng: -71.08198, lat: 42.294167)
-Thing.create(city_id: 7516, lng: -71.119907, lat: 42.294284)
-Thing.create(city_id: 7517, lng: -71.074256, lat: 42.29412)
-Thing.create(city_id: 7518, lng: -71.075275, lat: 42.294111)
-Thing.create(city_id: 7519, lng: -71.120861, lat: 42.294262)
-Thing.create(city_id: 7520, lng: -71.178245, lat: 42.294428)
-Thing.create(city_id: 7521, lng: -71.091437, lat: 42.294131)
-Thing.create(city_id: 7522, lng: -71.080008, lat: 42.294085)
-Thing.create(city_id: 7523, lng: -71.164886, lat: 42.294333)
-Thing.create(city_id: 7524, lng: -71.065757, lat: 42.293995)
-Thing.create(city_id: 7525, lng: -71.114579, lat: 42.294146)
-Thing.create(city_id: 7526, lng: -71.0518, lat: 42.293896)
-Thing.create(city_id: 7527, lng: -71.159078, lat: 42.294248)
-Thing.create(city_id: 7528, lng: -71.076963, lat: 42.293972)
-Thing.create(city_id: 7529, lng: -71.151385, lat: 42.2942)
-Thing.create(city_id: 7530, lng: -71.067374, lat: 42.293909)
-Thing.create(city_id: 7531, lng: -71.122079, lat: 42.294089)
-Thing.create(city_id: 7532, lng: -71.116218, lat: 42.294068)
-Thing.create(city_id: 7533, lng: -71.083225, lat: 42.293945)
-Thing.create(city_id: 7534, lng: -71.143162, lat: 42.294119)
-Thing.create(city_id: 7535, lng: -71.092099, lat: 42.293929)
-Thing.create(city_id: 7536, lng: -71.076049, lat: 42.293861)
-Thing.create(city_id: 7537, lng: -71.117261, lat: 42.294003)
-Thing.create(city_id: 7538, lng: -71.155406, lat: 42.294112)
-Thing.create(city_id: 7539, lng: -71.069809, lat: 42.293792)
-Thing.create(city_id: 7540, lng: -71.136298, lat: 42.294016)
-Thing.create(city_id: 7541, lng: -71.152289, lat: 42.294041)
-Thing.create(city_id: 7542, lng: -71.135508, lat: 42.293981)
-Thing.create(city_id: 7543, lng: -71.066654, lat: 42.293734)
-Thing.create(city_id: 7544, lng: -71.154727, lat: 42.294018)
-Thing.create(city_id: 7545, lng: -71.157726, lat: 42.294023)
-Thing.create(city_id: 7546, lng: -71.083565, lat: 42.293727)
-Thing.create(city_id: 7547, lng: -71.159934, lat: 42.293975)
-Thing.create(city_id: 7548, lng: -71.08084, lat: 42.293704)
-Thing.create(city_id: 7549, lng: -71.055391, lat: 42.293602)
-Thing.create(city_id: 7550, lng: -71.130465, lat: 42.293824)
-Thing.create(city_id: 7551, lng: -71.165793, lat: 42.293921)
-Thing.create(city_id: 7552, lng: -71.119132, lat: 42.293773)
-Thing.create(city_id: 7553, lng: -71.156269, lat: 42.293883)
-Thing.create(city_id: 7554, lng: -71.168159, lat: 42.287071)
-Thing.create(city_id: 7555, lng: -71.169424, lat: 42.28706)
-Thing.create(city_id: 7556, lng: -71.040316, lat: 42.286615)
-Thing.create(city_id: 7557, lng: -71.171115, lat: 42.287064)
-Thing.create(city_id: 7558, lng: -71.12377, lat: 42.286913)
-Thing.create(city_id: 7559, lng: -71.057377, lat: 42.286668)
-Thing.create(city_id: 7560, lng: -71.087546, lat: 42.286779)
-Thing.create(city_id: 7561, lng: -71.159173, lat: 42.287009)
-Thing.create(city_id: 7562, lng: -71.040977, lat: 42.286586)
-Thing.create(city_id: 7563, lng: -71.063547, lat: 42.286662)
-Thing.create(city_id: 7564, lng: -71.088462, lat: 42.286739)
-Thing.create(city_id: 7565, lng: -71.04975, lat: 42.286584)
-Thing.create(city_id: 7566, lng: -71.14594, lat: 42.28689)
-Thing.create(city_id: 7567, lng: -71.067429, lat: 42.286618)
-Thing.create(city_id: 7568, lng: -71.130492, lat: 42.286835)
-Thing.create(city_id: 7569, lng: -71.128409, lat: 42.286826)
-Thing.create(city_id: 7570, lng: -71.082951, lat: 42.286662)
-Thing.create(city_id: 7571, lng: -71.162499, lat: 42.28692)
-Thing.create(city_id: 7572, lng: -71.076213, lat: 42.28663)
-Thing.create(city_id: 7573, lng: -71.127054, lat: 42.286802)
-Thing.create(city_id: 7574, lng: -71.064162, lat: 42.286575)
-Thing.create(city_id: 7575, lng: -71.153482, lat: 42.286874)
-Thing.create(city_id: 7576, lng: -71.086046, lat: 42.286637)
-Thing.create(city_id: 7577, lng: -71.125302, lat: 42.286769)
-Thing.create(city_id: 7578, lng: -71.047373, lat: 42.286484)
-Thing.create(city_id: 7579, lng: -71.0693, lat: 42.286551)
-Thing.create(city_id: 7580, lng: -71.145157, lat: 42.286798)
-Thing.create(city_id: 7581, lng: -71.171882, lat: 42.286873)
-Thing.create(city_id: 7582, lng: -71.045304, lat: 42.286873)
-Thing.create(city_id: 7583, lng: -71.141935, lat: 42.287185)
-Thing.create(city_id: 7584, lng: -71.115863, lat: 42.287075)
-Thing.create(city_id: 7585, lng: -71.066228, lat: 42.286857)
-Thing.create(city_id: 7586, lng: -71.140773, lat: 42.28709)
-Thing.create(city_id: 7587, lng: -71.107295, lat: 42.28692)
-Thing.create(city_id: 7588, lng: -71.090714, lat: 42.28684)
-Thing.create(city_id: 7589, lng: -71.102006, lat: 42.286642)
-Thing.create(city_id: 7590, lng: -71.076989, lat: 42.286549)
-Thing.create(city_id: 7591, lng: -71.044158, lat: 42.286396)
-Thing.create(city_id: 7592, lng: -71.122454, lat: 42.286667)
-Thing.create(city_id: 7593, lng: -71.155448, lat: 42.286769)
-Thing.create(city_id: 7594, lng: -71.078625, lat: 42.286512)
-Thing.create(city_id: 7595, lng: -71.062242, lat: 42.286449)
-Thing.create(city_id: 7596, lng: -71.050611, lat: 42.286402)
-Thing.create(city_id: 7597, lng: -71.126813, lat: 42.286664)
-Thing.create(city_id: 7598, lng: -71.073859, lat: 42.286479)
-Thing.create(city_id: 7599, lng: -71.160333, lat: 42.286759)
-Thing.create(city_id: 7600, lng: -71.102589, lat: 42.286566)
-Thing.create(city_id: 7601, lng: -71.16622, lat: 42.286757)
-Thing.create(city_id: 7602, lng: -71.058426, lat: 42.286388)
-Thing.create(city_id: 7603, lng: -71.167505, lat: 42.286746)
-Thing.create(city_id: 7604, lng: -71.165433, lat: 42.286735)
-Thing.create(city_id: 7605, lng: -71.042115, lat: 42.286297)
-Thing.create(city_id: 7606, lng: -71.052584, lat: 42.286329)
-Thing.create(city_id: 7607, lng: -71.070137, lat: 42.286386)
-Thing.create(city_id: 7608, lng: -71.102545, lat: 42.286479)
-Thing.create(city_id: 7609, lng: -71.056625, lat: 42.286292)
-Thing.create(city_id: 7610, lng: -71.157321, lat: 42.286634)
-Thing.create(city_id: 7611, lng: -71.161295, lat: 42.280532)
-Thing.create(city_id: 7612, lng: -71.162825, lat: 42.280457)
-Thing.create(city_id: 7613, lng: -71.14151, lat: 42.280352)
-Thing.create(city_id: 7614, lng: -71.155694, lat: 42.280363)
-Thing.create(city_id: 7615, lng: -71.163921, lat: 42.280359)
-Thing.create(city_id: 7616, lng: -71.157496, lat: 42.280293)
-Thing.create(city_id: 7617, lng: -71.159716, lat: 42.280268)
-Thing.create(city_id: 7618, lng: -71.153647, lat: 42.280237)
-Thing.create(city_id: 7619, lng: -71.070111, lat: 42.279952)
-Thing.create(city_id: 7620, lng: -71.122247, lat: 42.28013)
-Thing.create(city_id: 7621, lng: -71.179625, lat: 42.280292)
-Thing.create(city_id: 7622, lng: -71.131688, lat: 42.280147)
-Thing.create(city_id: 7623, lng: -71.069045, lat: 42.279908)
-Thing.create(city_id: 7624, lng: -71.185141, lat: 42.280282)
-Thing.create(city_id: 7625, lng: -71.061178, lat: 42.27987)
-Thing.create(city_id: 7626, lng: -71.073972, lat: 42.279881)
-Thing.create(city_id: 7627, lng: -71.135065, lat: 42.280086)
-Thing.create(city_id: 7628, lng: -71.080694, lat: 42.279893)
-Thing.create(city_id: 7629, lng: -71.075403, lat: 42.279856)
-Thing.create(city_id: 7630, lng: -71.090164, lat: 42.279906)
-Thing.create(city_id: 7631, lng: -71.114338, lat: 42.279989)
-Thing.create(city_id: 7632, lng: -71.06581, lat: 42.279808)
-Thing.create(city_id: 7633, lng: -71.175382, lat: 42.280166)
-Thing.create(city_id: 7634, lng: -71.147616, lat: 42.280078)
-Thing.create(city_id: 7635, lng: -71.158243, lat: 42.280108)
-Thing.create(city_id: 7636, lng: -71.120656, lat: 42.27998)
-Thing.create(city_id: 7637, lng: -71.133665, lat: 42.280017)
-Thing.create(city_id: 7638, lng: -71.098382, lat: 42.279899)
-Thing.create(city_id: 7639, lng: -71.071277, lat: 42.27979)
-Thing.create(city_id: 7640, lng: -71.077175, lat: 42.279807)
-Thing.create(city_id: 7641, lng: -71.054559, lat: 42.279718)
-Thing.create(city_id: 7642, lng: -71.095506, lat: 42.279834)
-Thing.create(city_id: 7643, lng: -71.160579, lat: 42.280032)
-Thing.create(city_id: 7644, lng: -71.149659, lat: 42.279995)
-Thing.create(city_id: 7645, lng: -71.143874, lat: 42.279961)
-Thing.create(city_id: 7646, lng: -71.146105, lat: 42.27995)
-Thing.create(city_id: 7647, lng: -71.140827, lat: 42.279926)
-Thing.create(city_id: 7648, lng: -71.173643, lat: 42.280011)
-Thing.create(city_id: 7649, lng: -71.116251, lat: 42.279816)
-Thing.create(city_id: 7650, lng: -71.074986, lat: 42.279669)
-Thing.create(city_id: 7651, lng: -71.087781, lat: 42.279707)
-Thing.create(city_id: 7652, lng: -71.162215, lat: 42.279944)
-Thing.create(city_id: 7653, lng: -71.124237, lat: 42.279807)
-Thing.create(city_id: 7654, lng: -71.099187, lat: 42.27972)
-Thing.create(city_id: 7655, lng: -71.164703, lat: 42.279924)
-Thing.create(city_id: 7656, lng: -71.181956, lat: 42.279965)
-Thing.create(city_id: 7657, lng: -71.072229, lat: 42.279598)
-Thing.create(city_id: 7658, lng: -71.145415, lat: 42.279846)
-Thing.create(city_id: 7659, lng: -71.142147, lat: 42.279835)
-Thing.create(city_id: 7660, lng: -71.050656, lat: 42.279506)
-Thing.create(city_id: 7661, lng: -71.163114, lat: 42.27988)
-Thing.create(city_id: 7662, lng: -71.176377, lat: 42.279915)
-Thing.create(city_id: 7663, lng: -71.093482, lat: 42.279644)
-Thing.create(city_id: 7664, lng: -71.13595, lat: 42.279767)
-Thing.create(city_id: 7665, lng: -71.156689, lat: 42.279791)
-Thing.create(city_id: 7666, lng: -71.060956, lat: 42.279456)
-Thing.create(city_id: 7667, lng: -71.152089, lat: 42.279767)
-Thing.create(city_id: 7668, lng: -71.091608, lat: 42.279568)
-Thing.create(city_id: 7669, lng: -71.124572, lat: 42.305681)
-Thing.create(city_id: 7670, lng: -71.081784, lat: 42.305531)
-Thing.create(city_id: 7671, lng: -71.129531, lat: 42.305672)
-Thing.create(city_id: 7672, lng: -71.125195, lat: 42.305609)
-Thing.create(city_id: 7673, lng: -71.11863, lat: 42.305567)
-Thing.create(city_id: 7674, lng: -71.119525, lat: 42.305529)
-Thing.create(city_id: 7675, lng: -71.077339, lat: 42.305368)
-Thing.create(city_id: 7676, lng: -71.083011, lat: 42.305387)
-Thing.create(city_id: 7677, lng: -71.108331, lat: 42.305424)
-Thing.create(city_id: 7678, lng: -71.079203, lat: 42.305319)
-Thing.create(city_id: 7679, lng: -71.047345, lat: 42.305182)
-Thing.create(city_id: 7680, lng: -71.11454, lat: 42.305383)
-Thing.create(city_id: 7681, lng: -71.113033, lat: 42.305367)
-Thing.create(city_id: 7682, lng: -71.11398, lat: 42.30537)
-Thing.create(city_id: 7683, lng: -71.112096, lat: 42.30536)
-Thing.create(city_id: 7684, lng: -71.126168, lat: 42.305387)
-Thing.create(city_id: 7685, lng: -71.128516, lat: 42.305373)
-Thing.create(city_id: 7686, lng: -71.117457, lat: 42.305252)
-Thing.create(city_id: 7687, lng: -71.059107, lat: 42.305028)
-Thing.create(city_id: 7688, lng: -71.084564, lat: 42.305118)
-Thing.create(city_id: 7689, lng: -71.114698, lat: 42.305216)
-Thing.create(city_id: 7690, lng: -71.056845, lat: 42.304989)
-Thing.create(city_id: 7691, lng: -71.076539, lat: 42.305036)
-Thing.create(city_id: 7692, lng: -71.127346, lat: 42.305207)
-Thing.create(city_id: 7693, lng: -71.130734, lat: 42.30521)
-Thing.create(city_id: 7694, lng: -71.078855, lat: 42.305017)
-Thing.create(city_id: 7695, lng: -71.075263, lat: 42.304938)
-Thing.create(city_id: 7696, lng: -71.057561, lat: 42.304805)
-Thing.create(city_id: 7697, lng: -71.103086, lat: 42.304939)
-Thing.create(city_id: 7698, lng: -71.060157, lat: 42.304782)
-Thing.create(city_id: 7699, lng: -71.074114, lat: 42.30482)
-Thing.create(city_id: 7700, lng: -71.129718, lat: 42.305008)
-Thing.create(city_id: 7701, lng: -71.12476, lat: 42.304989)
-Thing.create(city_id: 7702, lng: -71.079953, lat: 42.304833)
-Thing.create(city_id: 7703, lng: -71.10654, lat: 42.304886)
-Thing.create(city_id: 7704, lng: -71.081765, lat: 42.304797)
-Thing.create(city_id: 7705, lng: -71.10982, lat: 42.304872)
-Thing.create(city_id: 7706, lng: -71.083386, lat: 42.304771)
-Thing.create(city_id: 7707, lng: -71.109151, lat: 42.304843)
-Thing.create(city_id: 7708, lng: -71.118505, lat: 42.304873)
-Thing.create(city_id: 7709, lng: -71.119601, lat: 42.304809)
-Thing.create(city_id: 7710, lng: -71.113859, lat: 42.304783)
-Thing.create(city_id: 7711, lng: -71.112176, lat: 42.304776)
-Thing.create(city_id: 7712, lng: -71.112763, lat: 42.304777)
-Thing.create(city_id: 7713, lng: -71.057227, lat: 42.304534)
-Thing.create(city_id: 7714, lng: -71.073062, lat: 42.304577)
-Thing.create(city_id: 7715, lng: -71.058342, lat: 42.30449)
-Thing.create(city_id: 7716, lng: -71.117594, lat: 42.304699)
-Thing.create(city_id: 7717, lng: -71.115533, lat: 42.304634)
-Thing.create(city_id: 7718, lng: -71.148648, lat: 42.293843)
-Thing.create(city_id: 7719, lng: -71.13454, lat: 42.293791)
-Thing.create(city_id: 7720, lng: -71.15071, lat: 42.293836)
-Thing.create(city_id: 7721, lng: -71.054639, lat: 42.293492)
-Thing.create(city_id: 7722, lng: -71.075077, lat: 42.293569)
-Thing.create(city_id: 7723, lng: -71.147704, lat: 42.293803)
-Thing.create(city_id: 7724, lng: -71.144284, lat: 42.293788)
-Thing.create(city_id: 7725, lng: -71.070815, lat: 42.293529)
-Thing.create(city_id: 7726, lng: -71.133743, lat: 42.294254)
-Thing.create(city_id: 7727, lng: -71.084553, lat: 42.294007)
-Thing.create(city_id: 7728, lng: -71.090001, lat: 42.293991)
-Thing.create(city_id: 7729, lng: -71.072705, lat: 42.293761)
-Thing.create(city_id: 7730, lng: -71.142215, lat: 42.293942)
-Thing.create(city_id: 7731, lng: -71.077765, lat: 42.293659)
-Thing.create(city_id: 7732, lng: -71.146604, lat: 42.29377)
-Thing.create(city_id: 7733, lng: -71.113773, lat: 42.293644)
-Thing.create(city_id: 7734, lng: -71.089394, lat: 42.293555)
-Thing.create(city_id: 7735, lng: -71.073672, lat: 42.293487)
-Thing.create(city_id: 7736, lng: -71.071974, lat: 42.29348)
-Thing.create(city_id: 7737, lng: -71.149704, lat: 42.293736)
-Thing.create(city_id: 7738, lng: -71.090232, lat: 42.293535)
-Thing.create(city_id: 7739, lng: -71.12132, lat: 42.293638)
-Thing.create(city_id: 7740, lng: -71.122789, lat: 42.293624)
-Thing.create(city_id: 7741, lng: -71.120631, lat: 42.29361)
-Thing.create(city_id: 7742, lng: -71.140178, lat: 42.293668)
-Thing.create(city_id: 7743, lng: -71.063147, lat: 42.2934)
-Thing.create(city_id: 7744, lng: -71.078834, lat: 42.293458)
-Thing.create(city_id: 7745, lng: -71.132823, lat: 42.29364)
-Thing.create(city_id: 7746, lng: -71.163351, lat: 42.293733)
-Thing.create(city_id: 7747, lng: -71.056526, lat: 42.293353)
-Thing.create(city_id: 7748, lng: -71.170683, lat: 42.293728)
-Thing.create(city_id: 7749, lng: -71.048718, lat: 42.293298)
-Thing.create(city_id: 7750, lng: -71.064821, lat: 42.293354)
-Thing.create(city_id: 7751, lng: -71.082548, lat: 42.293419)
-Thing.create(city_id: 7752, lng: -71.115229, lat: 42.293526)
-Thing.create(city_id: 7753, lng: -71.067191, lat: 42.293347)
-Thing.create(city_id: 7754, lng: -71.068303, lat: 42.293343)
-Thing.create(city_id: 7755, lng: -71.158431, lat: 42.293622)
-Thing.create(city_id: 7756, lng: -71.136327, lat: 42.293542)
-Thing.create(city_id: 7757, lng: -71.08854, lat: 42.293378)
-Thing.create(city_id: 7758, lng: -71.162458, lat: 42.293588)
-Thing.create(city_id: 7759, lng: -71.079746, lat: 42.293312)
-Thing.create(city_id: 7760, lng: -71.160459, lat: 42.293572)
-Thing.create(city_id: 7761, lng: -71.151694, lat: 42.293534)
-Thing.create(city_id: 7762, lng: -71.046328, lat: 42.293135)
-Thing.create(city_id: 7763, lng: -71.044241, lat: 42.29312)
-Thing.create(city_id: 7764, lng: -71.052757, lat: 42.293122)
-Thing.create(city_id: 7765, lng: -71.159409, lat: 42.293487)
-Thing.create(city_id: 7766, lng: -71.074701, lat: 42.293202)
-Thing.create(city_id: 7767, lng: -71.119702, lat: 42.29334)
-Thing.create(city_id: 7768, lng: -71.064213, lat: 42.293132)
-Thing.create(city_id: 7769, lng: -71.041251, lat: 42.293021)
-Thing.create(city_id: 7770, lng: -71.137147, lat: 42.293356)
-Thing.create(city_id: 7771, lng: -71.145527, lat: 42.293358)
-Thing.create(city_id: 7772, lng: -71.157061, lat: 42.293375)
-Thing.create(city_id: 7773, lng: -71.117483, lat: 42.293247)
-Thing.create(city_id: 7774, lng: -71.119235, lat: 42.293248)
-Thing.create(city_id: 7775, lng: -71.057497, lat: 42.293021)
-Thing.create(city_id: 7776, lng: -71.081508, lat: 42.293102)
-Thing.create(city_id: 7777, lng: -71.121559, lat: 42.286516)
-Thing.create(city_id: 7778, lng: -71.08716, lat: 42.286389)
-Thing.create(city_id: 7779, lng: -71.149933, lat: 42.286579)
-Thing.create(city_id: 7780, lng: -71.051411, lat: 42.286231)
-Thing.create(city_id: 7781, lng: -71.131473, lat: 42.286512)
-Thing.create(city_id: 7782, lng: -71.113428, lat: 42.286431)
-Thing.create(city_id: 7783, lng: -71.164633, lat: 42.286583)
-Thing.create(city_id: 7784, lng: -71.137134, lat: 42.286498)
-Thing.create(city_id: 7785, lng: -71.170149, lat: 42.286597)
-Thing.create(city_id: 7786, lng: -71.054606, lat: 42.286206)
-Thing.create(city_id: 7787, lng: -71.151558, lat: 42.286533)
-Thing.create(city_id: 7788, lng: -71.074954, lat: 42.286273)
-Thing.create(city_id: 7789, lng: -71.114532, lat: 42.286398)
-Thing.create(city_id: 7790, lng: -71.045164, lat: 42.286138)
-Thing.create(city_id: 7791, lng: -71.057437, lat: 42.286174)
-Thing.create(city_id: 7792, lng: -71.089517, lat: 42.286287)
-Thing.create(city_id: 7793, lng: -71.094828, lat: 42.286304)
-Thing.create(city_id: 7794, lng: -71.120302, lat: 42.286387)
-Thing.create(city_id: 7795, lng: -71.168436, lat: 42.286532)
-Thing.create(city_id: 7796, lng: -71.116657, lat: 42.286358)
-Thing.create(city_id: 7797, lng: -71.158434, lat: 42.286488)
-Thing.create(city_id: 7798, lng: -71.041211, lat: 42.286071)
-Thing.create(city_id: 7799, lng: -71.117722, lat: 42.28635)
-Thing.create(city_id: 7800, lng: -71.128286, lat: 42.286372)
-Thing.create(city_id: 7801, lng: -71.159625, lat: 42.28647)
-Thing.create(city_id: 7802, lng: -71.124476, lat: 42.286354)
-Thing.create(city_id: 7803, lng: -71.115579, lat: 42.286323)
-Thing.create(city_id: 7804, lng: -71.059439, lat: 42.28612)
-Thing.create(city_id: 7805, lng: -71.053508, lat: 42.286091)
-Thing.create(city_id: 7806, lng: -71.083691, lat: 42.286203)
-Thing.create(city_id: 7807, lng: -71.152544, lat: 42.286427)
-Thing.create(city_id: 7808, lng: -71.104769, lat: 42.286271)
-Thing.create(city_id: 7809, lng: -71.091352, lat: 42.286223)
-Thing.create(city_id: 7810, lng: -71.063237, lat: 42.28611)
-Thing.create(city_id: 7811, lng: -71.146102, lat: 42.28639)
-Thing.create(city_id: 7812, lng: -71.088017, lat: 42.286194)
-Thing.create(city_id: 7813, lng: -71.163295, lat: 42.286432)
-Thing.create(city_id: 7814, lng: -71.071268, lat: 42.286118)
-Thing.create(city_id: 7815, lng: -71.15417, lat: 42.286375)
-Thing.create(city_id: 7816, lng: -71.080393, lat: 42.286128)
-Thing.create(city_id: 7817, lng: -71.109331, lat: 42.286227)
-Thing.create(city_id: 7818, lng: -71.086431, lat: 42.28613)
-Thing.create(city_id: 7819, lng: -71.055635, lat: 42.28601)
-Thing.create(city_id: 7820, lng: -71.079933, lat: 42.286094)
-Thing.create(city_id: 7821, lng: -71.07579, lat: 42.286076)
-Thing.create(city_id: 7822, lng: -71.138179, lat: 42.286283)
-Thing.create(city_id: 7823, lng: -71.043446, lat: 42.285932)
-Thing.create(city_id: 7824, lng: -71.084711, lat: 42.286074)
-Thing.create(city_id: 7825, lng: -71.118603, lat: 42.286183)
-Thing.create(city_id: 7826, lng: -71.068206, lat: 42.286003)
-Thing.create(city_id: 7827, lng: -71.085458, lat: 42.286065)
-Thing.create(city_id: 7828, lng: -71.134621, lat: 42.286227)
-Thing.create(city_id: 7829, lng: -71.160953, lat: 42.286305)
-Thing.create(city_id: 7830, lng: -71.13925, lat: 42.286227)
-Thing.create(city_id: 7831, lng: -71.078296, lat: 42.286014)
-Thing.create(city_id: 7832, lng: -71.06715, lat: 42.285969)
-Thing.create(city_id: 7833, lng: -71.135752, lat: 42.286205)
-Thing.create(city_id: 7834, lng: -71.046154, lat: 42.285878)
-Thing.create(city_id: 7835, lng: -71.040848, lat: 42.28585)
-Thing.create(city_id: 7836, lng: -71.140384, lat: 42.286195)
-Thing.create(city_id: 7837, lng: -71.065797, lat: 42.285929)
-Thing.create(city_id: 7838, lng: -71.126052, lat: 42.286137)
-Thing.create(city_id: 7839, lng: -71.126253, lat: 42.279683)
-Thing.create(city_id: 7840, lng: -71.078246, lat: 42.279517)
-Thing.create(city_id: 7841, lng: -71.115437, lat: 42.279641)
-Thing.create(city_id: 7842, lng: -71.148189, lat: 42.279725)
-Thing.create(city_id: 7843, lng: -71.117969, lat: 42.279628)
-Thing.create(city_id: 7844, lng: -71.059337, lat: 42.279404)
-Thing.create(city_id: 7845, lng: -71.097447, lat: 42.279517)
-Thing.create(city_id: 7846, lng: -71.092892, lat: 42.27949)
-Thing.create(city_id: 7847, lng: -71.08918, lat: 42.279465)
-Thing.create(city_id: 7848, lng: -71.076191, lat: 42.279401)
-Thing.create(city_id: 7849, lng: -71.154355, lat: 42.279662)
-Thing.create(city_id: 7850, lng: -71.07332, lat: 42.27938)
-Thing.create(city_id: 7851, lng: -71.084167, lat: 42.279415)
-Thing.create(city_id: 7852, lng: -71.12679, lat: 42.27956)
-Thing.create(city_id: 7853, lng: -71.116723, lat: 42.279527)
-Thing.create(city_id: 7854, lng: -71.064201, lat: 42.279324)
-Thing.create(city_id: 7855, lng: -71.132836, lat: 42.27956)
-Thing.create(city_id: 7856, lng: -71.121027, lat: 42.279517)
-Thing.create(city_id: 7857, lng: -71.134243, lat: 42.279559)
-Thing.create(city_id: 7858, lng: -71.130566, lat: 42.279528)
-Thing.create(city_id: 7859, lng: -71.096105, lat: 42.27941)
-Thing.create(city_id: 7860, lng: -71.051693, lat: 42.279236)
-Thing.create(city_id: 7861, lng: -71.099886, lat: 42.279403)
-Thing.create(city_id: 7862, lng: -71.155485, lat: 42.27957)
-Thing.create(city_id: 7863, lng: -71.167512, lat: 42.279595)
-Thing.create(city_id: 7864, lng: -71.068708, lat: 42.279265)
-Thing.create(city_id: 7865, lng: -71.136731, lat: 42.279474)
-Thing.create(city_id: 7866, lng: -71.135734, lat: 42.279465)
-Thing.create(city_id: 7867, lng: -71.07914, lat: 42.279267)
-Thing.create(city_id: 7868, lng: -71.070569, lat: 42.279227)
-Thing.create(city_id: 7869, lng: -71.146748, lat: 42.279475)
-Thing.create(city_id: 7870, lng: -71.157521, lat: 42.279498)
-Thing.create(city_id: 7871, lng: -71.080656, lat: 42.279241)
-Thing.create(city_id: 7872, lng: -71.052974, lat: 42.279136)
-Thing.create(city_id: 7873, lng: -71.081171, lat: 42.279238)
-Thing.create(city_id: 7874, lng: -71.14881, lat: 42.279457)
-Thing.create(city_id: 7875, lng: -71.053751, lat: 42.279727)
-Thing.create(city_id: 7876, lng: -71.127631, lat: 42.279933)
-Thing.create(city_id: 7877, lng: -71.150703, lat: 42.279958)
-Thing.create(city_id: 7878, lng: -71.129181, lat: 42.279843)
-Thing.create(city_id: 7879, lng: -71.139599, lat: 42.279841)
-Thing.create(city_id: 7880, lng: -71.11355, lat: 42.279734)
-Thing.create(city_id: 7881, lng: -71.067132, lat: 42.279479)
-Thing.create(city_id: 7882, lng: -71.13751, lat: 42.279421)
-Thing.create(city_id: 7883, lng: -71.116931, lat: 42.279319)
-Thing.create(city_id: 7884, lng: -71.074479, lat: 42.279155)
-Thing.create(city_id: 7885, lng: -71.069638, lat: 42.279136)
-Thing.create(city_id: 7886, lng: -71.066259, lat: 42.279113)
-Thing.create(city_id: 7887, lng: -71.158819, lat: 42.279415)
-Thing.create(city_id: 7888, lng: -71.083127, lat: 42.279152)
-Thing.create(city_id: 7889, lng: -71.076155, lat: 42.279122)
-Thing.create(city_id: 7890, lng: -71.141587, lat: 42.279345)
-Thing.create(city_id: 7891, lng: -71.161343, lat: 42.279393)
-Thing.create(city_id: 7892, lng: -71.144736, lat: 42.279336)
-Thing.create(city_id: 7893, lng: -71.160268, lat: 42.279382)
-Thing.create(city_id: 7894, lng: -71.13865, lat: 42.279308)
-Thing.create(city_id: 7895, lng: -71.077539, lat: 42.279085)
-Thing.create(city_id: 7896, lng: -71.153858, lat: 42.279339)
-Thing.create(city_id: 7897, lng: -71.054231, lat: 42.278982)
-Thing.create(city_id: 7898, lng: -71.129966, lat: 42.279242)
-Thing.create(city_id: 7899, lng: -71.163954, lat: 42.27934)
-Thing.create(city_id: 7900, lng: -71.149987, lat: 42.279292)
-Thing.create(city_id: 7901, lng: -71.132631, lat: 42.279238)
-Thing.create(city_id: 7902, lng: -71.110557, lat: 42.304579)
-Thing.create(city_id: 7903, lng: -71.075063, lat: 42.304437)
-Thing.create(city_id: 7904, lng: -71.080556, lat: 42.30444)
-Thing.create(city_id: 7905, lng: -71.059269, lat: 42.304343)
-Thing.create(city_id: 7906, lng: -71.131851, lat: 42.304588)
-Thing.create(city_id: 7907, lng: -71.116558, lat: 42.304522)
-Thing.create(city_id: 7908, lng: -71.125243, lat: 42.304542)
-Thing.create(city_id: 7909, lng: -71.108423, lat: 42.304469)
-Thing.create(city_id: 7910, lng: -71.114741, lat: 42.304457)
-Thing.create(city_id: 7911, lng: -71.096292, lat: 42.304384)
-Thing.create(city_id: 7912, lng: -71.084654, lat: 42.304327)
-Thing.create(city_id: 7913, lng: -71.130872, lat: 42.304476)
-Thing.create(city_id: 7914, lng: -71.078389, lat: 42.304292)
-Thing.create(city_id: 7915, lng: -71.077015, lat: 42.30427)
-Thing.create(city_id: 7916, lng: -71.056585, lat: 42.304176)
-Thing.create(city_id: 7917, lng: -71.079306, lat: 42.304259)
-Thing.create(city_id: 7918, lng: -71.055158, lat: 42.304144)
-Thing.create(city_id: 7919, lng: -71.080784, lat: 42.30504)
-Thing.create(city_id: 7920, lng: -71.126622, lat: 42.304834)
-Thing.create(city_id: 7921, lng: -71.056142, lat: 42.304536)
-Thing.create(city_id: 7922, lng: -71.129969, lat: 42.30437)
-Thing.create(city_id: 7923, lng: -71.109675, lat: 42.30429)
-Thing.create(city_id: 7924, lng: -71.082138, lat: 42.304154)
-Thing.create(city_id: 7925, lng: -71.124846, lat: 42.304271)
-Thing.create(city_id: 7926, lng: -71.067379, lat: 42.304068)
-Thing.create(city_id: 7927, lng: -71.083879, lat: 42.304117)
-Thing.create(city_id: 7928, lng: -71.118974, lat: 42.304238)
-Thing.create(city_id: 7929, lng: -71.058493, lat: 42.304012)
-Thing.create(city_id: 7930, lng: -71.128907, lat: 42.304232)
-Thing.create(city_id: 7931, lng: -71.072208, lat: 42.304026)
-Thing.create(city_id: 7932, lng: -71.113805, lat: 42.304171)
-Thing.create(city_id: 7933, lng: -71.075556, lat: 42.30401)
-Thing.create(city_id: 7934, lng: -71.115851, lat: 42.304109)
-Thing.create(city_id: 7935, lng: -71.080477, lat: 42.303975)
-Thing.create(city_id: 7936, lng: -71.103325, lat: 42.304056)
-Thing.create(city_id: 7937, lng: -71.109029, lat: 42.304054)
-Thing.create(city_id: 7938, lng: -71.063299, lat: 42.303875)
-Thing.create(city_id: 7939, lng: -71.107678, lat: 42.304034)
-Thing.create(city_id: 7940, lng: -71.054409, lat: 42.303823)
-Thing.create(city_id: 7941, lng: -71.057539, lat: 42.303788)
-Thing.create(city_id: 7942, lng: -71.117836, lat: 42.303954)
-Thing.create(city_id: 7943, lng: -71.110977, lat: 42.303893)
-Thing.create(city_id: 7944, lng: -71.11736, lat: 42.30391)
-Thing.create(city_id: 7945, lng: -71.166262, lat: 42.30406)
-Thing.create(city_id: 7946, lng: -71.080614, lat: 42.303747)
-Thing.create(city_id: 7947, lng: -71.056182, lat: 42.303629)
-Thing.create(city_id: 7948, lng: -71.071675, lat: 42.303672)
-Thing.create(city_id: 7949, lng: -71.131834, lat: 42.303835)
-Thing.create(city_id: 7950, lng: -71.074728, lat: 42.303613)
-Thing.create(city_id: 7951, lng: -71.069033, lat: 42.30358)
-Thing.create(city_id: 7952, lng: -71.142651, lat: 42.293298)
-Thing.create(city_id: 7953, lng: -71.069288, lat: 42.293037)
-Thing.create(city_id: 7954, lng: -71.122325, lat: 42.293217)
-Thing.create(city_id: 7955, lng: -71.075748, lat: 42.293053)
-Thing.create(city_id: 7956, lng: -71.133729, lat: 42.293243)
-Thing.create(city_id: 7957, lng: -71.163843, lat: 42.293334)
-Thing.create(city_id: 7958, lng: -71.072788, lat: 42.293029)
-Thing.create(city_id: 7959, lng: -71.143643, lat: 42.293267)
-Thing.create(city_id: 7960, lng: -71.167522, lat: 42.293336)
-Thing.create(city_id: 7961, lng: -71.138588, lat: 42.293249)
-Thing.create(city_id: 7962, lng: -71.152685, lat: 42.293256)
-Thing.create(city_id: 7963, lng: -71.14043, lat: 42.293211)
-Thing.create(city_id: 7964, lng: -71.114595, lat: 42.293096)
-Thing.create(city_id: 7965, lng: -71.055103, lat: 42.29288)
-Thing.create(city_id: 7966, lng: -71.077509, lat: 42.292963)
-Thing.create(city_id: 7967, lng: -71.153874, lat: 42.293219)
-Thing.create(city_id: 7968, lng: -71.051875, lat: 42.292842)
-Thing.create(city_id: 7969, lng: -71.164876, lat: 42.293225)
-Thing.create(city_id: 7970, lng: -71.155584, lat: 42.293197)
-Thing.create(city_id: 7971, lng: -71.098149, lat: 42.292998)
-Thing.create(city_id: 7972, lng: -71.149235, lat: 42.293156)
-Thing.create(city_id: 7973, lng: -71.120956, lat: 42.293066)
-Thing.create(city_id: 7974, lng: -71.116633, lat: 42.293041)
-Thing.create(city_id: 7975, lng: -71.10041, lat: 42.292984)
-Thing.create(city_id: 7976, lng: -71.090036, lat: 42.292933)
-Thing.create(city_id: 7977, lng: -71.1485, lat: 42.293125)
-Thing.create(city_id: 7978, lng: -71.065493, lat: 42.29284)
-Thing.create(city_id: 7979, lng: -71.058364, lat: 42.292804)
-Thing.create(city_id: 7980, lng: -71.144709, lat: 42.293101)
-Thing.create(city_id: 7981, lng: -71.054251, lat: 42.292782)
-Thing.create(city_id: 7982, lng: -71.1468, lat: 42.293098)
-Thing.create(city_id: 7983, lng: -71.147747, lat: 42.293096)
-Thing.create(city_id: 7984, lng: -71.067735, lat: 42.292812)
-Thing.create(city_id: 7985, lng: -71.115644, lat: 42.292964)
-Thing.create(city_id: 7986, lng: -71.113166, lat: 42.292954)
-Thing.create(city_id: 7987, lng: -71.07875, lat: 42.292829)
-Thing.create(city_id: 7988, lng: -71.162387, lat: 42.293105)
-Thing.create(city_id: 7989, lng: -71.176208, lat: 42.293141)
-Thing.create(city_id: 7990, lng: -71.130404, lat: 42.292998)
-Thing.create(city_id: 7991, lng: -71.076699, lat: 42.292799)
-Thing.create(city_id: 7992, lng: -71.135484, lat: 42.292992)
-Thing.create(city_id: 7993, lng: -71.150404, lat: 42.293036)
-Thing.create(city_id: 7994, lng: -71.08048, lat: 42.292795)
-Thing.create(city_id: 7995, lng: -71.142721, lat: 42.292977)
-Thing.create(city_id: 7996, lng: -71.091083, lat: 42.293436)
-Thing.create(city_id: 7997, lng: -71.051107, lat: 42.293218)
-Thing.create(city_id: 7998, lng: -71.141417, lat: 42.293491)
-Thing.create(city_id: 7999, lng: -71.167333, lat: 42.293488)
-Thing.create(city_id: 8000, lng: -71.080535, lat: 42.293133)
-Thing.create(city_id: 8001, lng: -71.049854, lat: 42.292976)
-Thing.create(city_id: 8002, lng: -71.157808, lat: 42.293022)
-Thing.create(city_id: 8003, lng: -71.07378, lat: 42.292721)
-Thing.create(city_id: 8004, lng: -71.070374, lat: 42.292705)
-Thing.create(city_id: 8005, lng: -71.062473, lat: 42.292661)
-Thing.create(city_id: 8006, lng: -71.065847, lat: 42.292666)
-Thing.create(city_id: 8007, lng: -71.071906, lat: 42.292668)
-Thing.create(city_id: 8008, lng: -71.165747, lat: 42.292975)
-Thing.create(city_id: 8009, lng: -71.159758, lat: 42.292951)
-Thing.create(city_id: 8010, lng: -71.063407, lat: 42.292624)
-Thing.create(city_id: 8011, lng: -71.139378, lat: 42.292883)
-Thing.create(city_id: 8012, lng: -71.160852, lat: 42.292933)
-Thing.create(city_id: 8013, lng: -71.072815, lat: 42.292637)
-Thing.create(city_id: 8014, lng: -71.077796, lat: 42.28639)
-Thing.create(city_id: 8015, lng: -71.156069, lat: 42.286469)
-Thing.create(city_id: 8016, lng: -71.095792, lat: 42.286248)
-Thing.create(city_id: 8017, lng: -71.132424, lat: 42.286361)
-Thing.create(city_id: 8018, lng: -71.081664, lat: 42.286154)
-Thing.create(city_id: 8019, lng: -71.060486, lat: 42.286032)
-Thing.create(city_id: 8020, lng: -71.133536, lat: 42.286252)
-Thing.create(city_id: 8021, lng: -71.049668, lat: 42.285919)
-Thing.create(city_id: 8022, lng: -71.129669, lat: 42.286176)
-Thing.create(city_id: 8023, lng: -71.141524, lat: 42.286183)
-Thing.create(city_id: 8024, lng: -71.08889, lat: 42.286004)
-Thing.create(city_id: 8025, lng: -71.149541, lat: 42.286201)
-Thing.create(city_id: 8026, lng: -71.169287, lat: 42.286258)
-Thing.create(city_id: 8027, lng: -71.064057, lat: 42.285899)
-Thing.create(city_id: 8028, lng: -71.058122, lat: 42.285868)
-Thing.create(city_id: 8029, lng: -71.069421, lat: 42.285911)
-Thing.create(city_id: 8030, lng: -71.142558, lat: 42.28616)
-Thing.create(city_id: 8031, lng: -71.083204, lat: 42.285957)
-Thing.create(city_id: 8032, lng: -71.122032, lat: 42.286087)
-Thing.create(city_id: 8033, lng: -71.061715, lat: 42.285865)
-Thing.create(city_id: 8034, lng: -71.167056, lat: 42.286216)
-Thing.create(city_id: 8035, lng: -71.076749, lat: 42.285918)
-Thing.create(city_id: 8036, lng: -71.161674, lat: 42.286187)
-Thing.create(city_id: 8037, lng: -71.060569, lat: 42.285835)
-Thing.create(city_id: 8038, lng: -71.166181, lat: 42.286183)
-Thing.create(city_id: 8039, lng: -71.128804, lat: 42.286063)
-Thing.create(city_id: 8040, lng: -71.092861, lat: 42.285936)
-Thing.create(city_id: 8041, lng: -71.127337, lat: 42.28604)
-Thing.create(city_id: 8042, lng: -71.123209, lat: 42.286024)
-Thing.create(city_id: 8043, lng: -71.079287, lat: 42.285861)
-Thing.create(city_id: 8044, lng: -71.132212, lat: 42.286036)
-Thing.create(city_id: 8045, lng: -71.156569, lat: 42.286111)
-Thing.create(city_id: 8046, lng: -71.087408, lat: 42.285865)
-Thing.create(city_id: 8047, lng: -71.131155, lat: 42.285976)
-Thing.create(city_id: 8048, lng: -71.050628, lat: 42.285683)
-Thing.create(city_id: 8049, lng: -71.121149, lat: 42.285913)
-Thing.create(city_id: 8050, lng: -71.058844, lat: 42.285685)
-Thing.create(city_id: 8051, lng: -71.143652, lat: 42.285976)
-Thing.create(city_id: 8052, lng: -71.09107, lat: 42.285789)
-Thing.create(city_id: 8053, lng: -71.144606, lat: 42.285962)
-Thing.create(city_id: 8054, lng: -71.052158, lat: 42.285633)
-Thing.create(city_id: 8055, lng: -71.047148, lat: 42.285611)
-Thing.create(city_id: 8056, lng: -71.165234, lat: 42.286015)
-Thing.create(city_id: 8057, lng: -71.145487, lat: 42.285948)
-Thing.create(city_id: 8058, lng: -71.15772, lat: 42.285975)
-Thing.create(city_id: 8059, lng: -71.059811, lat: 42.285638)
-Thing.create(city_id: 8060, lng: -71.170873, lat: 42.286009)
-Thing.create(city_id: 8061, lng: -71.090073, lat: 42.285741)
-Thing.create(city_id: 8062, lng: -71.147364, lat: 42.285921)
-Thing.create(city_id: 8063, lng: -71.064875, lat: 42.285627)
-Thing.create(city_id: 8064, lng: -71.096019, lat: 42.285717)
-Thing.create(city_id: 8065, lng: -71.0531, lat: 42.285555)
-Thing.create(city_id: 8066, lng: -71.088313, lat: 42.285666)
-Thing.create(city_id: 8067, lng: -71.1461, lat: 42.285849)
-Thing.create(city_id: 8068, lng: -71.055947, lat: 42.285527)
-Thing.create(city_id: 8069, lng: -71.14862, lat: 42.285846)
-Thing.create(city_id: 8070, lng: -71.158847, lat: 42.285875)
-Thing.create(city_id: 8071, lng: -71.077532, lat: 42.285595)
-Thing.create(city_id: 8072, lng: -71.114677, lat: 42.285719)
-Thing.create(city_id: 8073, lng: -71.117919, lat: 42.285722)
-Thing.create(city_id: 8074, lng: -71.116286, lat: 42.28571)
-Thing.create(city_id: 8075, lng: -71.042061, lat: 42.285434)
-Thing.create(city_id: 8076, lng: -71.151327, lat: 42.27929)
-Thing.create(city_id: 8077, lng: -71.071631, lat: 42.279019)
-Thing.create(city_id: 8078, lng: -71.140377, lat: 42.279253)
-Thing.create(city_id: 8079, lng: -71.143213, lat: 42.279261)
-Thing.create(city_id: 8080, lng: -71.079981, lat: 42.279037)
-Thing.create(city_id: 8081, lng: -71.065303, lat: 42.278969)
-Thing.create(city_id: 8082, lng: -71.090667, lat: 42.279058)
-Thing.create(city_id: 8083, lng: -71.087956, lat: 42.279039)
-Thing.create(city_id: 8084, lng: -71.175633, lat: 42.279308)
-Thing.create(city_id: 8085, lng: -71.145313, lat: 42.279218)
-Thing.create(city_id: 8086, lng: -71.118912, lat: 42.279133)
-Thing.create(city_id: 8087, lng: -71.11518, lat: 42.279098)
-Thing.create(city_id: 8088, lng: -71.131314, lat: 42.279129)
-Thing.create(city_id: 8089, lng: -71.175171, lat: 42.279252)
-Thing.create(city_id: 8090, lng: -71.147128, lat: 42.27915)
-Thing.create(city_id: 8091, lng: -71.093349, lat: 42.278971)
-Thing.create(city_id: 8092, lng: -71.096936, lat: 42.27897)
-Thing.create(city_id: 8093, lng: -71.134954, lat: 42.279079)
-Thing.create(city_id: 8094, lng: -71.148269, lat: 42.279121)
-Thing.create(city_id: 8095, lng: -71.09242, lat: 42.278934)
-Thing.create(city_id: 8096, lng: -71.059623, lat: 42.278807)
-Thing.create(city_id: 8097, lng: -71.157937, lat: 42.279128)
-Thing.create(city_id: 8098, lng: -71.153084, lat: 42.279085)
-Thing.create(city_id: 8099, lng: -71.078431, lat: 42.278809)
-Thing.create(city_id: 8100, lng: -71.075022, lat: 42.278794)
-Thing.create(city_id: 8101, lng: -71.155079, lat: 42.279055)
-Thing.create(city_id: 8102, lng: -71.082425, lat: 42.278813)
-Thing.create(city_id: 8103, lng: -71.089789, lat: 42.278839)
-Thing.create(city_id: 8104, lng: -71.133395, lat: 42.278977)
-Thing.create(city_id: 8105, lng: -71.060556, lat: 42.278699)
-Thing.create(city_id: 8106, lng: -71.13947, lat: 42.278973)
-Thing.create(city_id: 8107, lng: -71.125247, lat: 42.278901)
-Thing.create(city_id: 8108, lng: -71.070523, lat: 42.278691)
-Thing.create(city_id: 8109, lng: -71.116969, lat: 42.278853)
-Thing.create(city_id: 8110, lng: -71.149454, lat: 42.278954)
-Thing.create(city_id: 8111, lng: -71.156714, lat: 42.278961)
-Thing.create(city_id: 8112, lng: -71.116191, lat: 42.278823)
-Thing.create(city_id: 8113, lng: -71.136451, lat: 42.278854)
-Thing.create(city_id: 8114, lng: -71.146149, lat: 42.278823)
-Thing.create(city_id: 8115, lng: -71.159178, lat: 42.278844)
-Thing.create(city_id: 8116, lng: -71.088393, lat: 42.278612)
-Thing.create(city_id: 8117, lng: -71.093184, lat: 42.278621)
-Thing.create(city_id: 8118, lng: -71.150548, lat: 42.278798)
-Thing.create(city_id: 8119, lng: -71.120845, lat: 42.278699)
-Thing.create(city_id: 8120, lng: -71.077573, lat: 42.278539)
-Thing.create(city_id: 8121, lng: -71.093903, lat: 42.278597)
-Thing.create(city_id: 8122, lng: -71.09528, lat: 42.278595)
-Thing.create(city_id: 8123, lng: -71.1672, lat: 42.278821)
-Thing.create(city_id: 8124, lng: -71.128951, lat: 42.27869)
-Thing.create(city_id: 8125, lng: -71.147672, lat: 42.278746)
-Thing.create(city_id: 8126, lng: -71.159398, lat: 42.278762)
-Thing.create(city_id: 8127, lng: -71.083706, lat: 42.27851)
-Thing.create(city_id: 8128, lng: -71.127868, lat: 42.278658)
-Thing.create(city_id: 8129, lng: -71.066441, lat: 42.278442)
-Thing.create(city_id: 8130, lng: -71.14407, lat: 42.278696)
-Thing.create(city_id: 8131, lng: -71.070227, lat: 42.278437)
-Thing.create(city_id: 8132, lng: -71.141152, lat: 42.278668)
-Thing.create(city_id: 8133, lng: -71.171318, lat: 42.278743)
-Thing.create(city_id: 8134, lng: -71.075907, lat: 42.278421)
-Thing.create(city_id: 8135, lng: -71.135491, lat: 42.27862)
-Thing.create(city_id: 8136, lng: -71.14876, lat: 42.278655)
-Thing.create(city_id: 8137, lng: -71.118219, lat: 42.303735)
-Thing.create(city_id: 8138, lng: -71.076292, lat: 42.303578)
-Thing.create(city_id: 8139, lng: -71.084843, lat: 42.303585)
-Thing.create(city_id: 8140, lng: -71.129093, lat: 42.303723)
-Thing.create(city_id: 8141, lng: -71.071233, lat: 42.303513)
-Thing.create(city_id: 8142, lng: -71.106987, lat: 42.303629)
-Thing.create(city_id: 8143, lng: -71.110314, lat: 42.303631)
-Thing.create(city_id: 8144, lng: -71.081508, lat: 42.303507)
-Thing.create(city_id: 8145, lng: -71.126882, lat: 42.303652)
-Thing.create(city_id: 8146, lng: -71.078711, lat: 42.303478)
-Thing.create(city_id: 8147, lng: -71.077502, lat: 42.303457)
-Thing.create(city_id: 8148, lng: -71.114744, lat: 42.303586)
-Thing.create(city_id: 8149, lng: -71.058553, lat: 42.303377)
-Thing.create(city_id: 8150, lng: -71.113677, lat: 42.303572)
-Thing.create(city_id: 8151, lng: -71.114529, lat: 42.303573)
-Thing.create(city_id: 8152, lng: -71.130814, lat: 42.303603)
-Thing.create(city_id: 8153, lng: -71.056956, lat: 42.303333)
-Thing.create(city_id: 8154, lng: -71.070007, lat: 42.303365)
-Thing.create(city_id: 8155, lng: -71.059488, lat: 42.303325)
-Thing.create(city_id: 8156, lng: -71.079782, lat: 42.303394)
-Thing.create(city_id: 8157, lng: -71.125037, lat: 42.303524)
-Thing.create(city_id: 8158, lng: -71.132694, lat: 42.303521)
-Thing.create(city_id: 8159, lng: -71.113372, lat: 42.303456)
-Thing.create(city_id: 8160, lng: -71.108108, lat: 42.303434)
-Thing.create(city_id: 8161, lng: -71.124802, lat: 42.303489)
-Thing.create(city_id: 8162, lng: -71.083838, lat: 42.303338)
-Thing.create(city_id: 8163, lng: -71.075475, lat: 42.303219)
-Thing.create(city_id: 8164, lng: -71.082207, lat: 42.303225)
-Thing.create(city_id: 8165, lng: -71.054682, lat: 42.303105)
-Thing.create(city_id: 8166, lng: -71.129691, lat: 42.303344)
-Thing.create(city_id: 8167, lng: -71.129564, lat: 42.30332)
-Thing.create(city_id: 8168, lng: -71.106297, lat: 42.303217)
-Thing.create(city_id: 8169, lng: -71.057694, lat: 42.303036)
-Thing.create(city_id: 8170, lng: -71.073974, lat: 42.303096)
-Thing.create(city_id: 8171, lng: -71.052844, lat: 42.303012)
-Thing.create(city_id: 8172, lng: -71.107459, lat: 42.303143)
-Thing.create(city_id: 8173, lng: -71.12588, lat: 42.303177)
-Thing.create(city_id: 8174, lng: -71.068982, lat: 42.302975)
-Thing.create(city_id: 8175, lng: -71.056277, lat: 42.302927)
-Thing.create(city_id: 8176, lng: -71.117321, lat: 42.303144)
-Thing.create(city_id: 8177, lng: -71.166028, lat: 42.303278)
-Thing.create(city_id: 8178, lng: -71.082699, lat: 42.302991)
-Thing.create(city_id: 8179, lng: -71.070752, lat: 42.302942)
-Thing.create(city_id: 8180, lng: -71.079284, lat: 42.302961)
-Thing.create(city_id: 8181, lng: -71.115608, lat: 42.303084)
-Thing.create(city_id: 8182, lng: -71.080693, lat: 42.302948)
-Thing.create(city_id: 8183, lng: -71.132526, lat: 42.303097)
-Thing.create(city_id: 8184, lng: -71.076908, lat: 42.302852)
-Thing.create(city_id: 8185, lng: -71.127847, lat: 42.304092)
-Thing.create(city_id: 8186, lng: -71.083106, lat: 42.303816)
-Thing.create(city_id: 8187, lng: -71.116427, lat: 42.303842)
-Thing.create(city_id: 8188, lng: -71.151446, lat: 42.2929)
-Thing.create(city_id: 8189, lng: -71.050559, lat: 42.292525)
-Thing.create(city_id: 8190, lng: -71.13778, lat: 42.29283)
-Thing.create(city_id: 8191, lng: -71.052898, lat: 42.292524)
-Thing.create(city_id: 8192, lng: -71.059439, lat: 42.292541)
-Thing.create(city_id: 8193, lng: -71.056671, lat: 42.292527)
-Thing.create(city_id: 8194, lng: -71.166594, lat: 42.292896)
-Thing.create(city_id: 8195, lng: -71.074726, lat: 42.292585)
-Thing.create(city_id: 8196, lng: -71.066918, lat: 42.292532)
-Thing.create(city_id: 8197, lng: -71.07948, lat: 42.292574)
-Thing.create(city_id: 8198, lng: -71.158715, lat: 42.292831)
-Thing.create(city_id: 8199, lng: -71.077923, lat: 42.292561)
-Thing.create(city_id: 8200, lng: -71.045516, lat: 42.292416)
-Thing.create(city_id: 8201, lng: -71.055794, lat: 42.292456)
-Thing.create(city_id: 8202, lng: -71.08882, lat: 42.29257)
-Thing.create(city_id: 8203, lng: -71.064556, lat: 42.292457)
-Thing.create(city_id: 8204, lng: -71.153038, lat: 42.292757)
-Thing.create(city_id: 8205, lng: -71.117868, lat: 42.29264)
-Thing.create(city_id: 8206, lng: -71.054944, lat: 42.29241)
-Thing.create(city_id: 8207, lng: -71.101834, lat: 42.292563)
-Thing.create(city_id: 8208, lng: -71.141693, lat: 42.292685)
-Thing.create(city_id: 8209, lng: -71.154876, lat: 42.292723)
-Thing.create(city_id: 8210, lng: -71.136328, lat: 42.292652)
-Thing.create(city_id: 8211, lng: -71.121453, lat: 42.292598)
-Thing.create(city_id: 8212, lng: -71.169783, lat: 42.292744)
-Thing.create(city_id: 8213, lng: -71.156385, lat: 42.292704)
-Thing.create(city_id: 8214, lng: -71.151948, lat: 42.292669)
-Thing.create(city_id: 8215, lng: -71.146043, lat: 42.292651)
-Thing.create(city_id: 8216, lng: -71.147216, lat: 42.292626)
-Thing.create(city_id: 8217, lng: -71.113779, lat: 42.29251)
-Thing.create(city_id: 8218, lng: -71.13737, lat: 42.292578)
-Thing.create(city_id: 8219, lng: -71.119697, lat: 42.292493)
-Thing.create(city_id: 8220, lng: -71.060499, lat: 42.29228)
-Thing.create(city_id: 8221, lng: -71.073811, lat: 42.292327)
-Thing.create(city_id: 8222, lng: -71.134757, lat: 42.29253)
-Thing.create(city_id: 8223, lng: -71.049224, lat: 42.292226)
-Thing.create(city_id: 8224, lng: -71.163046, lat: 42.292612)
-Thing.create(city_id: 8225, lng: -71.048124, lat: 42.292209)
-Thing.create(city_id: 8226, lng: -71.057287, lat: 42.292234)
-Thing.create(city_id: 8227, lng: -71.115409, lat: 42.29244)
-Thing.create(city_id: 8228, lng: -71.143971, lat: 42.292522)
-Thing.create(city_id: 8229, lng: -71.05168, lat: 42.292181)
-Thing.create(city_id: 8230, lng: -71.116602, lat: 42.292393)
-Thing.create(city_id: 8231, lng: -71.149147, lat: 42.292489)
-Thing.create(city_id: 8232, lng: -71.164579, lat: 42.29253)
-Thing.create(city_id: 8233, lng: -71.075446, lat: 42.292212)
-Thing.create(city_id: 8234, lng: -71.069816, lat: 42.29219)
-Thing.create(city_id: 8235, lng: -71.067704, lat: 42.292167)
-Thing.create(city_id: 8236, lng: -71.078446, lat: 42.292189)
-Thing.create(city_id: 8237, lng: -71.153961, lat: 42.292435)
-Thing.create(city_id: 8238, lng: -71.141392, lat: 42.292392)
-Thing.create(city_id: 8239, lng: -71.053913, lat: 42.292071)
-Thing.create(city_id: 8240, lng: -71.117659, lat: 42.292296)
-Thing.create(city_id: 8241, lng: -71.102663, lat: 42.292218)
-Thing.create(city_id: 8242, lng: -71.140037, lat: 42.292328)
-Thing.create(city_id: 8243, lng: -71.160249, lat: 42.292388)
-Thing.create(city_id: 8244, lng: -71.077204, lat: 42.292108)
-Thing.create(city_id: 8245, lng: -71.059134, lat: 42.292038)
-Thing.create(city_id: 8246, lng: -71.056381, lat: 42.292021)
-Thing.create(city_id: 8247, lng: -71.142874, lat: 42.292307)
-Thing.create(city_id: 8248, lng: -71.150639, lat: 42.292319)
-Thing.create(city_id: 8249, lng: -71.163855, lat: 42.28582)
-Thing.create(city_id: 8250, lng: -71.146679, lat: 42.285759)
-Thing.create(city_id: 8251, lng: -71.162601, lat: 42.285801)
-Thing.create(city_id: 8252, lng: -71.153315, lat: 42.285762)
-Thing.create(city_id: 8253, lng: -71.063603, lat: 42.285445)
-Thing.create(city_id: 8254, lng: -71.062588, lat: 42.285437)
-Thing.create(city_id: 8255, lng: -71.048051, lat: 42.285376)
-Thing.create(city_id: 8256, lng: -71.120045, lat: 42.285634)
-Thing.create(city_id: 8257, lng: -71.043793, lat: 42.285348)
-Thing.create(city_id: 8258, lng: -71.049126, lat: 42.333719)
-Thing.create(city_id: 8259, lng: -71.054075, lat: 42.285382)
-Thing.create(city_id: 8260, lng: -71.082448, lat: 42.285487)
-Thing.create(city_id: 8261, lng: -71.057026, lat: 42.285385)
-Thing.create(city_id: 8262, lng: -71.133871, lat: 42.285645)
-Thing.create(city_id: 8263, lng: -71.115549, lat: 42.285581)
-Thing.create(city_id: 8264, lng: -71.130196, lat: 42.285627)
-Thing.create(city_id: 8265, lng: -71.070967, lat: 42.285394)
-Thing.create(city_id: 8266, lng: -71.06575, lat: 42.28537)
-Thing.create(city_id: 8267, lng: -71.125411, lat: 42.285578)
-Thing.create(city_id: 8268, lng: -71.108903, lat: 42.285514)
-Thing.create(city_id: 8269, lng: -71.123768, lat: 42.285557)
-Thing.create(city_id: 8270, lng: -71.070106, lat: 42.285363)
-Thing.create(city_id: 8271, lng: -71.077848, lat: 42.285365)
-Thing.create(city_id: 8272, lng: -71.164669, lat: 42.285648)
-Thing.create(city_id: 8273, lng: -71.167885, lat: 42.285658)
-Thing.create(city_id: 8274, lng: -71.096767, lat: 42.285423)
-Thing.create(city_id: 8275, lng: -71.170433, lat: 42.285656)
-Thing.create(city_id: 8276, lng: -71.068984, lat: 42.285316)
-Thing.create(city_id: 8277, lng: -71.12072, lat: 42.285497)
-Thing.create(city_id: 8278, lng: -71.08061, lat: 42.285357)
-Thing.create(city_id: 8279, lng: -71.126497, lat: 42.28551)
-Thing.create(city_id: 8280, lng: -71.087121, lat: 42.285365)
-Thing.create(city_id: 8281, lng: -71.067888, lat: 42.285272)
-Thing.create(city_id: 8282, lng: -71.085389, lat: 42.285327)
-Thing.create(city_id: 8283, lng: -71.140027, lat: 42.28551)
-Thing.create(city_id: 8284, lng: -71.055004, lat: 42.28521)
-Thing.create(city_id: 8285, lng: -71.155829, lat: 42.285556)
-Thing.create(city_id: 8286, lng: -71.138997, lat: 42.285502)
-Thing.create(city_id: 8287, lng: -71.051017, lat: 42.28519)
-Thing.create(city_id: 8288, lng: -71.106526, lat: 42.285903)
-Thing.create(city_id: 8289, lng: -71.154994, lat: 42.286002)
-Thing.create(city_id: 8290, lng: -71.09185, lat: 42.28575)
-Thing.create(city_id: 8291, lng: -71.134741, lat: 42.285828)
-Thing.create(city_id: 8292, lng: -71.097644, lat: 42.285674)
-Thing.create(city_id: 8293, lng: -71.118707, lat: 42.285425)
-Thing.create(city_id: 8294, lng: -71.142915, lat: 42.285496)
-Thing.create(city_id: 8295, lng: -71.045669, lat: 42.285148)
-Thing.create(city_id: 8296, lng: -71.066868, lat: 42.285226)
-Thing.create(city_id: 8297, lng: -71.141236, lat: 42.285477)
-Thing.create(city_id: 8298, lng: -71.169919, lat: 42.285562)
-Thing.create(city_id: 8299, lng: -71.144019, lat: 42.285476)
-Thing.create(city_id: 8300, lng: -71.058199, lat: 42.285177)
-Thing.create(city_id: 8301, lng: -71.040627, lat: 42.285107)
-Thing.create(city_id: 8302, lng: -71.136929, lat: 42.285445)
-Thing.create(city_id: 8303, lng: -71.14536, lat: 42.285468)
-Thing.create(city_id: 8304, lng: -71.168866, lat: 42.285535)
-Thing.create(city_id: 8305, lng: -71.095191, lat: 42.285299)
-Thing.create(city_id: 8306, lng: -71.049011, lat: 42.285124)
-Thing.create(city_id: 8307, lng: -71.131782, lat: 42.285418)
-Thing.create(city_id: 8308, lng: -71.107744, lat: 42.285329)
-Thing.create(city_id: 8309, lng: -71.084639, lat: 42.285245)
-Thing.create(city_id: 8310, lng: -71.160729, lat: 42.27869)
-Thing.create(city_id: 8311, lng: -71.071695, lat: 42.278387)
-Thing.create(city_id: 8312, lng: -71.079244, lat: 42.27841)
-Thing.create(city_id: 8313, lng: -71.077751, lat: 42.27836)
-Thing.create(city_id: 8314, lng: -71.142734, lat: 42.278572)
-Thing.create(city_id: 8315, lng: -71.072564, lat: 42.278815)
-Thing.create(city_id: 8316, lng: -71.123706, lat: 42.278952)
-Thing.create(city_id: 8317, lng: -71.097864, lat: 42.278813)
-Thing.create(city_id: 8318, lng: -71.13037, lat: 42.278881)
-Thing.create(city_id: 8319, lng: -71.13786, lat: 42.278792)
-Thing.create(city_id: 8320, lng: -71.173715, lat: 42.278854)
-Thing.create(city_id: 8321, lng: -71.061352, lat: 42.278449)
-Thing.create(city_id: 8322, lng: -71.152034, lat: 42.278729)
-Thing.create(city_id: 8323, lng: -71.073232, lat: 42.27841)
-Thing.create(city_id: 8324, lng: -71.114733, lat: 42.278478)
-Thing.create(city_id: 8325, lng: -71.117819, lat: 42.27848)
-Thing.create(city_id: 8326, lng: -71.134172, lat: 42.278531)
-Thing.create(city_id: 8327, lng: -71.176659, lat: 42.278658)
-Thing.create(city_id: 8328, lng: -71.099694, lat: 42.2784)
-Thing.create(city_id: 8329, lng: -71.091618, lat: 42.27836)
-Thing.create(city_id: 8330, lng: -71.130883, lat: 42.278492)
-Thing.create(city_id: 8331, lng: -71.132912, lat: 42.278493)
-Thing.create(city_id: 8332, lng: -71.08197, lat: 42.278318)
-Thing.create(city_id: 8333, lng: -71.174895, lat: 42.278618)
-Thing.create(city_id: 8334, lng: -71.120337, lat: 42.278434)
-Thing.create(city_id: 8335, lng: -71.125961, lat: 42.278446)
-Thing.create(city_id: 8336, lng: -71.153719, lat: 42.278518)
-Thing.create(city_id: 8337, lng: -71.118397, lat: 42.278404)
-Thing.create(city_id: 8338, lng: -71.069534, lat: 42.278228)
-Thing.create(city_id: 8339, lng: -71.151271, lat: 42.278502)
-Thing.create(city_id: 8340, lng: -71.076589, lat: 42.278239)
-Thing.create(city_id: 8341, lng: -71.15672, lat: 42.278464)
-Thing.create(city_id: 8342, lng: -71.053943, lat: 42.278107)
-Thing.create(city_id: 8343, lng: -71.140151, lat: 42.278401)
-Thing.create(city_id: 8344, lng: -71.155819, lat: 42.278449)
-Thing.create(city_id: 8345, lng: -71.071214, lat: 42.278164)
-Thing.create(city_id: 8346, lng: -71.17787, lat: 42.278498)
-Thing.create(city_id: 8347, lng: -71.075583, lat: 42.27815)
-Thing.create(city_id: 8348, lng: -71.145336, lat: 42.27838)
-Thing.create(city_id: 8349, lng: -71.130197, lat: 42.278319)
-Thing.create(city_id: 8350, lng: -71.068656, lat: 42.278091)
-Thing.create(city_id: 8351, lng: -71.119118, lat: 42.278268)
-Thing.create(city_id: 8352, lng: -71.168462, lat: 42.27842)
-Thing.create(city_id: 8353, lng: -71.090667, lat: 42.278163)
-Thing.create(city_id: 8354, lng: -71.096212, lat: 42.278163)
-Thing.create(city_id: 8355, lng: -71.137109, lat: 42.278288)
-Thing.create(city_id: 8356, lng: -71.115426, lat: 42.278201)
-Thing.create(city_id: 8357, lng: -71.144335, lat: 42.278293)
-Thing.create(city_id: 8358, lng: -71.072286, lat: 42.278047)
-Thing.create(city_id: 8359, lng: -71.080625, lat: 42.278047)
-Thing.create(city_id: 8360, lng: -71.074425, lat: 42.278018)
-Thing.create(city_id: 8361, lng: -71.146809, lat: 42.278244)
-Thing.create(city_id: 8362, lng: -71.138336, lat: 42.278218)
-Thing.create(city_id: 8363, lng: -71.132133, lat: 42.278196)
-Thing.create(city_id: 8364, lng: -71.148381, lat: 42.27824)
-Thing.create(city_id: 8365, lng: -71.154758, lat: 42.278249)
-Thing.create(city_id: 8366, lng: -71.153008, lat: 42.27824)
-Thing.create(city_id: 8367, lng: -71.073452, lat: 42.277961)
-Thing.create(city_id: 8368, lng: -71.06088, lat: 42.277885)
-Thing.create(city_id: 8369, lng: -71.09237, lat: 42.277972)
-Thing.create(city_id: 8370, lng: -71.139339, lat: 42.278126)
-Thing.create(city_id: 8371, lng: -71.128118, lat: 42.278083)
-Thing.create(city_id: 8372, lng: -71.12863, lat: 42.303022)
-Thing.create(city_id: 8373, lng: -71.113728, lat: 42.30297)
-Thing.create(city_id: 8374, lng: -71.110984, lat: 42.302955)
-Thing.create(city_id: 8375, lng: -71.069882, lat: 42.302803)
-Thing.create(city_id: 8376, lng: -71.083601, lat: 42.302841)
-Thing.create(city_id: 8377, lng: -71.057011, lat: 42.302739)
-Thing.create(city_id: 8378, lng: -71.071404, lat: 42.302779)
-Thing.create(city_id: 8379, lng: -71.076375, lat: 42.30891)
-Thing.create(city_id: 8380, lng: -71.058505, lat: 42.302685)
-Thing.create(city_id: 8381, lng: -71.081304, lat: 42.302745)
-Thing.create(city_id: 8382, lng: -71.074366, lat: 42.302714)
-Thing.create(city_id: 8383, lng: -71.08527, lat: 42.302741)
-Thing.create(city_id: 8384, lng: -71.114604, lat: 42.302843)
-Thing.create(city_id: 8385, lng: -71.078153, lat: 42.302707)
-Thing.create(city_id: 8386, lng: -71.075878, lat: 42.302687)
-Thing.create(city_id: 8387, lng: -71.125498, lat: 42.302851)
-Thing.create(city_id: 8388, lng: -71.131483, lat: 42.302862)
-Thing.create(city_id: 8389, lng: -71.070697, lat: 42.302624)
-Thing.create(city_id: 8390, lng: -71.052172, lat: 42.302552)
-Thing.create(city_id: 8391, lng: -71.130475, lat: 42.302828)
-Thing.create(city_id: 8392, lng: -71.063123, lat: 42.302575)
-Thing.create(city_id: 8393, lng: -71.105442, lat: 42.302722)
-Thing.create(city_id: 8394, lng: -71.10182, lat: 42.302707)
-Thing.create(city_id: 8395, lng: -71.059668, lat: 42.302548)
-Thing.create(city_id: 8396, lng: -71.080221, lat: 42.302594)
-Thing.create(city_id: 8397, lng: -71.068727, lat: 42.30252)
-Thing.create(city_id: 8398, lng: -71.133117, lat: 42.302713)
-Thing.create(city_id: 8399, lng: -71.073357, lat: 42.302494)
-Thing.create(city_id: 8400, lng: -71.07228, lat: 42.30245)
-Thing.create(city_id: 8401, lng: -71.084478, lat: 42.302485)
-Thing.create(city_id: 8402, lng: -71.112961, lat: 42.30254)
-Thing.create(city_id: 8403, lng: -71.054999, lat: 42.302304)
-Thing.create(city_id: 8404, lng: -71.127723, lat: 42.302558)
-Thing.create(city_id: 8405, lng: -71.081889, lat: 42.302373)
-Thing.create(city_id: 8406, lng: -71.07517, lat: 42.30233)
-Thing.create(city_id: 8407, lng: -71.082942, lat: 42.302328)
-Thing.create(city_id: 8408, lng: -71.053326, lat: 42.302165)
-Thing.create(city_id: 8409, lng: -71.079492, lat: 42.302258)
-Thing.create(city_id: 8410, lng: -71.081115, lat: 42.302244)
-Thing.create(city_id: 8411, lng: -71.076238, lat: 42.302214)
-Thing.create(city_id: 8412, lng: -71.08489, lat: 42.3022)
-Thing.create(city_id: 8413, lng: -71.165063, lat: 42.302452)
-Thing.create(city_id: 8414, lng: -71.127541, lat: 42.30233)
-Thing.create(city_id: 8415, lng: -71.115164, lat: 42.302284)
-Thing.create(city_id: 8416, lng: -71.113735, lat: 42.302265)
-Thing.create(city_id: 8417, lng: -71.063402, lat: 42.302062)
-Thing.create(city_id: 8418, lng: -71.13117, lat: 42.302265)
-Thing.create(city_id: 8419, lng: -71.085482, lat: 42.302086)
-Thing.create(city_id: 8420, lng: -71.070551, lat: 42.302026)
-Thing.create(city_id: 8421, lng: -71.125242, lat: 42.302212)
-Thing.create(city_id: 8422, lng: -71.069139, lat: 42.301977)
-Thing.create(city_id: 8423, lng: -71.126014, lat: 42.302163)
-Thing.create(city_id: 8424, lng: -71.071709, lat: 42.301947)
-Thing.create(city_id: 8425, lng: -71.077583, lat: 42.301966)
-Thing.create(city_id: 8426, lng: -71.14006, lat: 42.30215)
-Thing.create(city_id: 8427, lng: -71.126796, lat: 42.302099)
-Thing.create(city_id: 8428, lng: -71.089704, lat: 42.27332)
-Thing.create(city_id: 8429, lng: -71.046573, lat: 42.291952)
-Thing.create(city_id: 8430, lng: -71.060285, lat: 42.292001)
-Thing.create(city_id: 8431, lng: -71.047462, lat: 42.29195)
-Thing.create(city_id: 8432, lng: -71.076268, lat: 42.292056)
-Thing.create(city_id: 8433, lng: -71.161488, lat: 42.292332)
-Thing.create(city_id: 8434, lng: -71.066735, lat: 42.292012)
-Thing.create(city_id: 8435, lng: -71.159046, lat: 42.29231)
-Thing.create(city_id: 8436, lng: -71.157074, lat: 42.292297)
-Thing.create(city_id: 8437, lng: -71.12978, lat: 42.292211)
-Thing.create(city_id: 8438, lng: -71.138514, lat: 42.292207)
-Thing.create(city_id: 8439, lng: -71.052645, lat: 42.291879)
-Thing.create(city_id: 8440, lng: -71.06389, lat: 42.291919)
-Thing.create(city_id: 8441, lng: -71.077619, lat: 42.29195)
-Thing.create(city_id: 8442, lng: -71.058053, lat: 42.292299)
-Thing.create(city_id: 8443, lng: -71.089876, lat: 42.292377)
-Thing.create(city_id: 8444, lng: -71.163888, lat: 42.29258)
-Thing.create(city_id: 8445, lng: -71.145234, lat: 42.292456)
-Thing.create(city_id: 8446, lng: -71.168703, lat: 42.292483)
-Thing.create(city_id: 8447, lng: -71.120731, lat: 42.292287)
-Thing.create(city_id: 8448, lng: -71.065275, lat: 42.292056)
-Thing.create(city_id: 8449, lng: -71.130466, lat: 42.292119)
-Thing.create(city_id: 8450, lng: -71.155584, lat: 42.292195)
-Thing.create(city_id: 8451, lng: -71.058009, lat: 42.291861)
-Thing.create(city_id: 8452, lng: -71.049982, lat: 42.291818)
-Thing.create(city_id: 8453, lng: -71.158015, lat: 42.292186)
-Thing.create(city_id: 8454, lng: -71.149924, lat: 42.292154)
-Thing.create(city_id: 8455, lng: -71.135484, lat: 42.292107)
-Thing.create(city_id: 8456, lng: -71.070881, lat: 42.291875)
-Thing.create(city_id: 8457, lng: -71.098885, lat: 42.291966)
-Thing.create(city_id: 8458, lng: -71.167277, lat: 42.292181)
-Thing.create(city_id: 8459, lng: -71.14582, lat: 42.292108)
-Thing.create(city_id: 8460, lng: -71.072568, lat: 42.291858)
-Thing.create(city_id: 8461, lng: -71.148223, lat: 42.292114)
-Thing.create(city_id: 8462, lng: -71.136731, lat: 42.292045)
-Thing.create(city_id: 8463, lng: -71.122114, lat: 42.29199)
-Thing.create(city_id: 8464, lng: -71.069133, lat: 42.291794)
-Thing.create(city_id: 8465, lng: -71.071829, lat: 42.291801)
-Thing.create(city_id: 8466, lng: -71.079208, lat: 42.291808)
-Thing.create(city_id: 8467, lng: -71.152478, lat: 42.292026)
-Thing.create(city_id: 8468, lng: -71.151445, lat: 42.292022)
-Thing.create(city_id: 8469, lng: -71.074417, lat: 42.291742)
-Thing.create(city_id: 8470, lng: -71.113291, lat: 42.291877)
-Thing.create(city_id: 8471, lng: -71.162374, lat: 42.292027)
-Thing.create(city_id: 8472, lng: -71.117998, lat: 42.291885)
-Thing.create(city_id: 8473, lng: -71.144617, lat: 42.291961)
-Thing.create(city_id: 8474, lng: -71.055141, lat: 42.291645)
-Thing.create(city_id: 8475, lng: -71.058883, lat: 42.291642)
-Thing.create(city_id: 8476, lng: -71.134323, lat: 42.291899)
-Thing.create(city_id: 8477, lng: -71.115757, lat: 42.291836)
-Thing.create(city_id: 8478, lng: -71.114802, lat: 42.291823)
-Thing.create(city_id: 8479, lng: -71.163725, lat: 42.291964)
-Thing.create(city_id: 8480, lng: -71.121488, lat: 42.291812)
-Thing.create(city_id: 8481, lng: -71.116837, lat: 42.291797)
-Thing.create(city_id: 8482, lng: -71.076619, lat: 42.291644)
-Thing.create(city_id: 8483, lng: -71.050763, lat: 42.291532)
-Thing.create(city_id: 8484, lng: -71.150598, lat: 42.29187)
-Thing.create(city_id: 8485, lng: -71.154379, lat: 42.291862)
-Thing.create(city_id: 8486, lng: -71.064943, lat: 42.291553)
-Thing.create(city_id: 8487, lng: -71.142078, lat: 42.291818)
-Thing.create(city_id: 8488, lng: -71.147174, lat: 42.29183)
-Thing.create(city_id: 8489, lng: -71.061093, lat: 42.291533)
-Thing.create(city_id: 8490, lng: -71.150994, lat: 42.285459)
-Thing.create(city_id: 8491, lng: -71.110824, lat: 42.285316)
-Thing.create(city_id: 8492, lng: -71.133012, lat: 42.285378)
-Thing.create(city_id: 8493, lng: -71.090095, lat: 42.285228)
-Thing.create(city_id: 8494, lng: -71.121956, lat: 42.285321)
-Thing.create(city_id: 8495, lng: -71.135473, lat: 42.285355)
-Thing.create(city_id: 8496, lng: -71.156977, lat: 42.285416)
-Thing.create(city_id: 8497, lng: -71.061423, lat: 42.285087)
-Thing.create(city_id: 8498, lng: -71.167123, lat: 42.285435)
-Thing.create(city_id: 8499, lng: -71.078801, lat: 42.285138)
-Thing.create(city_id: 8500, lng: -71.052611, lat: 42.285031)
-Thing.create(city_id: 8501, lng: -71.046712, lat: 42.285004)
-Thing.create(city_id: 8502, lng: -71.160794, lat: 42.285396)
-Thing.create(city_id: 8503, lng: -71.172195, lat: 42.285405)
-Thing.create(city_id: 8504, lng: -71.083897, lat: 42.285118)
-Thing.create(city_id: 8505, lng: -71.138437, lat: 42.28529)
-Thing.create(city_id: 8506, lng: -71.15, lat: 42.285319)
-Thing.create(city_id: 8507, lng: -71.171633, lat: 42.28538)
-Thing.create(city_id: 8508, lng: -71.088008, lat: 42.285108)
-Thing.create(city_id: 8509, lng: -71.089007, lat: 42.285099)
-Thing.create(city_id: 8510, lng: -71.158124, lat: 42.285325)
-Thing.create(city_id: 8511, lng: -71.164062, lat: 42.285306)
-Thing.create(city_id: 8512, lng: -71.159308, lat: 42.285284)
-Thing.create(city_id: 8513, lng: -71.154053, lat: 42.285265)
-Thing.create(city_id: 8514, lng: -71.051814, lat: 42.284896)
-Thing.create(city_id: 8515, lng: -71.146615, lat: 42.285202)
-Thing.create(city_id: 8516, lng: -71.054842, lat: 42.284883)
-Thing.create(city_id: 8517, lng: -71.055926, lat: 42.284884)
-Thing.create(city_id: 8518, lng: -71.117542, lat: 42.285104)
-Thing.create(city_id: 8519, lng: -71.059269, lat: 42.284886)
-Thing.create(city_id: 8520, lng: -71.114646, lat: 42.285082)
-Thing.create(city_id: 8521, lng: -71.050068, lat: 42.284846)
-Thing.create(city_id: 8522, lng: -71.040945, lat: 42.284803)
-Thing.create(city_id: 8523, lng: -71.053598, lat: 42.284843)
-Thing.create(city_id: 8524, lng: -71.12135, lat: 42.285084)
-Thing.create(city_id: 8525, lng: -71.165455, lat: 42.285193)
-Thing.create(city_id: 8526, lng: -71.135967, lat: 42.28508)
-Thing.create(city_id: 8527, lng: -71.128632, lat: 42.285039)
-Thing.create(city_id: 8528, lng: -71.130847, lat: 42.285045)
-Thing.create(city_id: 8529, lng: -71.065528, lat: 42.284814)
-Thing.create(city_id: 8530, lng: -71.118031, lat: 42.284995)
-Thing.create(city_id: 8531, lng: -71.067701, lat: 42.284809)
-Thing.create(city_id: 8532, lng: -71.093636, lat: 42.284899)
-Thing.create(city_id: 8533, lng: -71.056989, lat: 42.284746)
-Thing.create(city_id: 8534, lng: -71.083133, lat: 42.284843)
-Thing.create(city_id: 8535, lng: -71.127676, lat: 42.284981)
-Thing.create(city_id: 8536, lng: -71.124456, lat: 42.284964)
-Thing.create(city_id: 8537, lng: -71.064736, lat: 42.284738)
-Thing.create(city_id: 8538, lng: -71.10883, lat: 42.284896)
-Thing.create(city_id: 8539, lng: -71.096108, lat: 42.284852)
-Thing.create(city_id: 8540, lng: -71.126678, lat: 42.284945)
-Thing.create(city_id: 8541, lng: -71.119829, lat: 42.284916)
-Thing.create(city_id: 8542, lng: -71.125641, lat: 42.284932)
-Thing.create(city_id: 8543, lng: -71.062293, lat: 42.284703)
-Thing.create(city_id: 8544, lng: -71.047584, lat: 42.284643)
-Thing.create(city_id: 8545, lng: -71.144676, lat: 42.28498)
-Thing.create(city_id: 8546, lng: -71.045303, lat: 42.284628)
-Thing.create(city_id: 8547, lng: -71.1421, lat: 42.284971)
-Thing.create(city_id: 8548, lng: -71.092664, lat: 42.2848)
-Thing.create(city_id: 8549, lng: -71.122849, lat: 42.284878)
-Thing.create(city_id: 8550, lng: -71.174165, lat: 42.278208)
-Thing.create(city_id: 8551, lng: -71.062076, lat: 42.277832)
-Thing.create(city_id: 8552, lng: -71.093569, lat: 42.277943)
-Thing.create(city_id: 8553, lng: -71.150664, lat: 42.278128)
-Thing.create(city_id: 8554, lng: -71.08767, lat: 42.277917)
-Thing.create(city_id: 8555, lng: -71.060092, lat: 42.277805)
-Thing.create(city_id: 8556, lng: -71.1584, lat: 42.278135)
-Thing.create(city_id: 8557, lng: -71.094429, lat: 42.277913)
-Thing.create(city_id: 8558, lng: -71.123698, lat: 42.278008)
-Thing.create(city_id: 8559, lng: -71.067396, lat: 42.277798)
-Thing.create(city_id: 8560, lng: -71.084289, lat: 42.27786)
-Thing.create(city_id: 8561, lng: -71.121683, lat: 42.277987)
-Thing.create(city_id: 8562, lng: -71.122685, lat: 42.277962)
-Thing.create(city_id: 8563, lng: -71.133507, lat: 42.277993)
-Thing.create(city_id: 8564, lng: -71.121559, lat: 42.27794)
-Thing.create(city_id: 8565, lng: -71.156215, lat: 42.278024)
-Thing.create(city_id: 8566, lng: -71.066668, lat: 42.2777)
-Thing.create(city_id: 8567, lng: -71.118158, lat: 42.27786)
-Thing.create(city_id: 8568, lng: -71.166871, lat: 42.27801)
-Thing.create(city_id: 8569, lng: -71.087976, lat: 42.277753)
-Thing.create(city_id: 8570, lng: -71.125189, lat: 42.277871)
-Thing.create(city_id: 8571, lng: -71.159975, lat: 42.277971)
-Thing.create(city_id: 8572, lng: -71.13443, lat: 42.277887)
-Thing.create(city_id: 8573, lng: -71.091336, lat: 42.277741)
-Thing.create(city_id: 8574, lng: -71.143362, lat: 42.277909)
-Thing.create(city_id: 8575, lng: -71.144607, lat: 42.277903)
-Thing.create(city_id: 8576, lng: -71.098232, lat: 42.277745)
-Thing.create(city_id: 8577, lng: -71.082556, lat: 42.277673)
-Thing.create(city_id: 8578, lng: -71.100477, lat: 42.27773)
-Thing.create(city_id: 8579, lng: -71.126529, lat: 42.277815)
-Thing.create(city_id: 8580, lng: -71.099372, lat: 42.27772)
-Thing.create(city_id: 8581, lng: -71.160975, lat: 42.277918)
-Thing.create(city_id: 8582, lng: -71.081351, lat: 42.277654)
-Thing.create(city_id: 8583, lng: -71.076941, lat: 42.277624)
-Thing.create(city_id: 8584, lng: -71.129838, lat: 42.277794)
-Thing.create(city_id: 8585, lng: -71.146224, lat: 42.277828)
-Thing.create(city_id: 8586, lng: -71.137683, lat: 42.2778)
-Thing.create(city_id: 8587, lng: -71.095144, lat: 42.277643)
-Thing.create(city_id: 8588, lng: -71.154307, lat: 42.277834)
-Thing.create(city_id: 8589, lng: -71.139925, lat: 42.277785)
-Thing.create(city_id: 8590, lng: -71.162124, lat: 42.27784)
-Thing.create(city_id: 8591, lng: -71.155476, lat: 42.277798)
-Thing.create(city_id: 8592, lng: -71.097435, lat: 42.278212)
-Thing.create(city_id: 8593, lng: -71.083038, lat: 42.278122)
-Thing.create(city_id: 8594, lng: -71.129259, lat: 42.27824)
-Thing.create(city_id: 8595, lng: -71.149662, lat: 42.278252)
-Thing.create(city_id: 8596, lng: -71.093288, lat: 42.278022)
-Thing.create(city_id: 8597, lng: -71.075528, lat: 42.277528)
-Thing.create(city_id: 8598, lng: -71.152122, lat: 42.277776)
-Thing.create(city_id: 8599, lng: -71.142515, lat: 42.277732)
-Thing.create(city_id: 8600, lng: -71.117648, lat: 42.277652)
-Thing.create(city_id: 8601, lng: -71.083566, lat: 42.277531)
-Thing.create(city_id: 8602, lng: -71.114726, lat: 42.27763)
-Thing.create(city_id: 8603, lng: -71.16773, lat: 42.277789)
-Thing.create(city_id: 8604, lng: -71.106804, lat: 42.277595)
-Thing.create(city_id: 8605, lng: -71.120518, lat: 42.27764)
-Thing.create(city_id: 8606, lng: -71.14882, lat: 42.27773)
-Thing.create(city_id: 8607, lng: -71.147388, lat: 42.277722)
-Thing.create(city_id: 8608, lng: -71.138657, lat: 42.277692)
-Thing.create(city_id: 8609, lng: -71.073403, lat: 42.277461)
-Thing.create(city_id: 8610, lng: -71.08359, lat: 42.301911)
-Thing.create(city_id: 8611, lng: -71.082386, lat: 42.301897)
-Thing.create(city_id: 8612, lng: -71.114507, lat: 42.302004)
-Thing.create(city_id: 8613, lng: -71.074518, lat: 42.301862)
-Thing.create(city_id: 8614, lng: -71.072945, lat: 42.301813)
-Thing.create(city_id: 8615, lng: -71.057772, lat: 42.301744)
-Thing.create(city_id: 8616, lng: -71.080671, lat: 42.30181)
-Thing.create(city_id: 8617, lng: -71.167213, lat: 42.302071)
-Thing.create(city_id: 8618, lng: -71.070075, lat: 42.301708)
-Thing.create(city_id: 8619, lng: -71.078445, lat: 42.301724)
-Thing.create(city_id: 8620, lng: -71.056092, lat: 42.301613)
-Thing.create(city_id: 8621, lng: -71.139459, lat: 42.301893)
-Thing.create(city_id: 8622, lng: -71.055121, lat: 42.301552)
-Thing.create(city_id: 8623, lng: -71.113696, lat: 42.301749)
-Thing.create(city_id: 8624, lng: -71.056643, lat: 42.301543)
-Thing.create(city_id: 8625, lng: -71.075449, lat: 42.301604)
-Thing.create(city_id: 8626, lng: -71.110298, lat: 42.301723)
-Thing.create(city_id: 8627, lng: -71.052572, lat: 42.301509)
-Thing.create(city_id: 8628, lng: -71.133872, lat: 42.301795)
-Thing.create(city_id: 8629, lng: -71.058792, lat: 42.301516)
-Thing.create(city_id: 8630, lng: -71.116376, lat: 42.302753)
-Thing.create(city_id: 8631, lng: -71.069978, lat: 42.302484)
-Thing.create(city_id: 8632, lng: -71.058032, lat: 42.302331)
-Thing.create(city_id: 8633, lng: -71.056252, lat: 42.302258)
-Thing.create(city_id: 8634, lng: -71.056719, lat: 42.302167)
-Thing.create(city_id: 8635, lng: -71.132334, lat: 42.302344)
-Thing.create(city_id: 8636, lng: -71.051402, lat: 42.301972)
-Thing.create(city_id: 8637, lng: -71.054005, lat: 42.301497)
-Thing.create(city_id: 8638, lng: -71.050762, lat: 42.301454)
-Thing.create(city_id: 8639, lng: -71.16671, lat: 42.301846)
-Thing.create(city_id: 8640, lng: -71.104717, lat: 42.30165)
-Thing.create(city_id: 8641, lng: -71.134949, lat: 42.301748)
-Thing.create(city_id: 8642, lng: -71.07368, lat: 42.301537)
-Thing.create(city_id: 8643, lng: -71.108695, lat: 42.301656)
-Thing.create(city_id: 8644, lng: -71.071088, lat: 42.301498)
-Thing.create(city_id: 8645, lng: -71.084704, lat: 42.301532)
-Thing.create(city_id: 8646, lng: -71.068275, lat: 42.301463)
-Thing.create(city_id: 8647, lng: -71.069232, lat: 42.301429)
-Thing.create(city_id: 8648, lng: -71.044332, lat: 42.301331)
-Thing.create(city_id: 8649, lng: -71.051317, lat: 42.301347)
-Thing.create(city_id: 8650, lng: -71.081639, lat: 42.301434)
-Thing.create(city_id: 8651, lng: -71.082852, lat: 42.301433)
-Thing.create(city_id: 8652, lng: -71.086792, lat: 42.301427)
-Thing.create(city_id: 8653, lng: -71.085617, lat: 42.301382)
-Thing.create(city_id: 8654, lng: -71.126616, lat: 42.301507)
-Thing.create(city_id: 8655, lng: -71.076745, lat: 42.301316)
-Thing.create(city_id: 8656, lng: -71.079837, lat: 42.301299)
-Thing.create(city_id: 8657, lng: -71.044745, lat: 42.301135)
-Thing.create(city_id: 8658, lng: -71.136077, lat: 42.301449)
-Thing.create(city_id: 8659, lng: -71.070133, lat: 42.301195)
-Thing.create(city_id: 8660, lng: -71.071954, lat: 42.301153)
-Thing.create(city_id: 8661, lng: -71.137649, lat: 42.301369)
-Thing.create(city_id: 8662, lng: -71.057175, lat: 42.291513)
-Thing.create(city_id: 8663, lng: -71.161003, lat: 42.291862)
-Thing.create(city_id: 8664, lng: -71.039629, lat: 42.291424)
-Thing.create(city_id: 8665, lng: -71.090657, lat: 42.291612)
-Thing.create(city_id: 8666, lng: -71.137766, lat: 42.291755)
-Thing.create(city_id: 8667, lng: -71.140713, lat: 42.291763)
-Thing.create(city_id: 8668, lng: -71.048236, lat: 42.291404)
-Thing.create(city_id: 8669, lng: -71.0699, lat: 42.291485)
-Thing.create(city_id: 8670, lng: -71.111805, lat: 42.29163)
-Thing.create(city_id: 8671, lng: -71.14912, lat: 42.291746)
-Thing.create(city_id: 8672, lng: -71.045939, lat: 42.29137)
-Thing.create(city_id: 8673, lng: -71.122735, lat: 42.291627)
-Thing.create(city_id: 8674, lng: -71.153405, lat: 42.291711)
-Thing.create(city_id: 8675, lng: -71.117781, lat: 42.291595)
-Thing.create(city_id: 8676, lng: -71.075148, lat: 42.291442)
-Thing.create(city_id: 8677, lng: -71.077329, lat: 42.291444)
-Thing.create(city_id: 8678, lng: -71.143588, lat: 42.291666)
-Thing.create(city_id: 8679, lng: -71.113816, lat: 42.291558)
-Thing.create(city_id: 8680, lng: -71.067459, lat: 42.29139)
-Thing.create(city_id: 8681, lng: -71.139172, lat: 42.291632)
-Thing.create(city_id: 8682, lng: -71.146482, lat: 42.291653)
-Thing.create(city_id: 8683, lng: -71.15848, lat: 42.291684)
-Thing.create(city_id: 8684, lng: -71.128907, lat: 42.291587)
-Thing.create(city_id: 8685, lng: -71.166269, lat: 42.2917)
-Thing.create(city_id: 8686, lng: -71.145023, lat: 42.291635)
-Thing.create(city_id: 8687, lng: -71.061932, lat: 42.291341)
-Thing.create(city_id: 8688, lng: -71.159871, lat: 42.291669)
-Thing.create(city_id: 8689, lng: -71.174518, lat: 42.291695)
-Thing.create(city_id: 8690, lng: -71.136006, lat: 42.291577)
-Thing.create(city_id: 8691, lng: -71.165611, lat: 42.291658)
-Thing.create(city_id: 8692, lng: -71.041255, lat: 42.291225)
-Thing.create(city_id: 8693, lng: -71.120583, lat: 42.291513)
-Thing.create(city_id: 8694, lng: -71.078903, lat: 42.291358)
-Thing.create(city_id: 8695, lng: -71.075609, lat: 42.291346)
-Thing.create(city_id: 8696, lng: -71.053485, lat: 42.291261)
-Thing.create(city_id: 8697, lng: -71.051818, lat: 42.291251)
-Thing.create(city_id: 8698, lng: -71.156452, lat: 42.291591)
-Thing.create(city_id: 8699, lng: -71.103606, lat: 42.29142)
-Thing.create(city_id: 8700, lng: -71.119359, lat: 42.291441)
-Thing.create(city_id: 8701, lng: -71.046907, lat: 42.291178)
-Thing.create(city_id: 8702, lng: -71.066076, lat: 42.29125)
-Thing.create(city_id: 8703, lng: -71.130018, lat: 42.291455)
-Thing.create(city_id: 8704, lng: -71.116544, lat: 42.291378)
-Thing.create(city_id: 8705, lng: -71.133428, lat: 42.291425)
-Thing.create(city_id: 8706, lng: -71.115167, lat: 42.291356)
-Thing.create(city_id: 8707, lng: -71.149986, lat: 42.291466)
-Thing.create(city_id: 8708, lng: -71.049406, lat: 42.291113)
-Thing.create(city_id: 8709, lng: -71.0707, lat: 42.291187)
-Thing.create(city_id: 8710, lng: -71.076566, lat: 42.291209)
-Thing.create(city_id: 8711, lng: -71.05992, lat: 42.29114)
-Thing.create(city_id: 8712, lng: -71.157463, lat: 42.291451)
-Thing.create(city_id: 8713, lng: -71.164195, lat: 42.291459)
-Thing.create(city_id: 8714, lng: -71.089069, lat: 42.291791)
-Thing.create(city_id: 8715, lng: -71.040429, lat: 42.291562)
-Thing.create(city_id: 8716, lng: -71.048685, lat: 42.29156)
-Thing.create(city_id: 8717, lng: -71.073634, lat: 42.291602)
-Thing.create(city_id: 8718, lng: -71.058262, lat: 42.291096)
-Thing.create(city_id: 8719, lng: -71.061052, lat: 42.291091)
-Thing.create(city_id: 8720, lng: -71.155226, lat: 42.291407)
-Thing.create(city_id: 8721, lng: -71.063016, lat: 42.291093)
-Thing.create(city_id: 8722, lng: -71.071771, lat: 42.29109)
-Thing.create(city_id: 8723, lng: -71.121065, lat: 42.291259)
-Thing.create(city_id: 8724, lng: -71.068571, lat: 42.291065)
-Thing.create(city_id: 8725, lng: -71.060166, lat: 42.284655)
-Thing.create(city_id: 8726, lng: -71.087301, lat: 42.284743)
-Thing.create(city_id: 8727, lng: -71.094556, lat: 42.284759)
-Thing.create(city_id: 8728, lng: -71.079939, lat: 42.284704)
-Thing.create(city_id: 8729, lng: -71.06315, lat: 42.284631)
-Thing.create(city_id: 8730, lng: -71.07738, lat: 42.284682)
-Thing.create(city_id: 8731, lng: -71.044065, lat: 42.284898)
-Thing.create(city_id: 8732, lng: -71.103271, lat: 42.285065)
-Thing.create(city_id: 8733, lng: -71.129482, lat: 42.285132)
-Thing.create(city_id: 8734, lng: -71.163142, lat: 42.285202)
-Thing.create(city_id: 8735, lng: -71.147467, lat: 42.285089)
-Thing.create(city_id: 8736, lng: -71.161836, lat: 42.285101)
-Thing.create(city_id: 8737, lng: -71.143268, lat: 42.285005)
-Thing.create(city_id: 8738, lng: -71.134663, lat: 42.284933)
-Thing.create(city_id: 8739, lng: -71.051129, lat: 42.284573)
-Thing.create(city_id: 8740, lng: -71.140771, lat: 42.284888)
-Thing.create(city_id: 8741, lng: -71.086154, lat: 42.284698)
-Thing.create(city_id: 8742, lng: -71.057767, lat: 42.284591)
-Thing.create(city_id: 8743, lng: -71.120689, lat: 42.284813)
-Thing.create(city_id: 8744, lng: -71.097422, lat: 42.284733)
-Thing.create(city_id: 8745, lng: -71.139739, lat: 42.284873)
-Thing.create(city_id: 8746, lng: -71.170058, lat: 42.284964)
-Thing.create(city_id: 8747, lng: -71.169184, lat: 42.284959)
-Thing.create(city_id: 8748, lng: -71.115527, lat: 42.284788)
-Thing.create(city_id: 8749, lng: -71.091515, lat: 42.284703)
-Thing.create(city_id: 8750, lng: -71.118505, lat: 42.284793)
-Thing.create(city_id: 8751, lng: -71.088997, lat: 42.284658)
-Thing.create(city_id: 8752, lng: -71.168117, lat: 42.284913)
-Thing.create(city_id: 8753, lng: -71.114214, lat: 42.284741)
-Thing.create(city_id: 8754, lng: -71.146104, lat: 42.284831)
-Thing.create(city_id: 8755, lng: -71.072535, lat: 42.28458)
-Thing.create(city_id: 8756, lng: -71.109417, lat: 42.284694)
-Thing.create(city_id: 8757, lng: -71.089909, lat: 42.284626)
-Thing.create(city_id: 8758, lng: -71.166452, lat: 42.284868)
-Thing.create(city_id: 8759, lng: -71.156521, lat: 42.284823)
-Thing.create(city_id: 8760, lng: -71.157441, lat: 42.28482)
-Thing.create(city_id: 8761, lng: -71.154839, lat: 42.284811)
-Thing.create(city_id: 8762, lng: -71.080954, lat: 42.284552)
-Thing.create(city_id: 8763, lng: -71.152582, lat: 42.284754)
-Thing.create(city_id: 8764, lng: -71.055241, lat: 42.284413)
-Thing.create(city_id: 8765, lng: -71.06648, lat: 42.284456)
-Thing.create(city_id: 8766, lng: -71.160085, lat: 42.28476)
-Thing.create(city_id: 8767, lng: -71.093721, lat: 42.284541)
-Thing.create(city_id: 8768, lng: -71.11686, lat: 42.284611)
-Thing.create(city_id: 8769, lng: -71.071667, lat: 42.28445)
-Thing.create(city_id: 8770, lng: -71.0467, lat: 42.284346)
-Thing.create(city_id: 8771, lng: -71.061044, lat: 42.284375)
-Thing.create(city_id: 8772, lng: -71.052016, lat: 42.284336)
-Thing.create(city_id: 8773, lng: -71.058865, lat: 42.284355)
-Thing.create(city_id: 8774, lng: -71.116242, lat: 42.284559)
-Thing.create(city_id: 8775, lng: -71.085334, lat: 42.284451)
-Thing.create(city_id: 8776, lng: -71.078317, lat: 42.284414)
-Thing.create(city_id: 8777, lng: -71.163886, lat: 42.284682)
-Thing.create(city_id: 8778, lng: -71.073498, lat: 42.28438)
-Thing.create(city_id: 8779, lng: -71.130248, lat: 42.284575)
-Thing.create(city_id: 8780, lng: -71.15566, lat: 42.284631)
-Thing.create(city_id: 8781, lng: -71.068704, lat: 42.284335)
-Thing.create(city_id: 8782, lng: -71.150942, lat: 42.284606)
-Thing.create(city_id: 8783, lng: -71.087727, lat: 42.284365)
-Thing.create(city_id: 8784, lng: -71.094823, lat: 42.284384)
-Thing.create(city_id: 8785, lng: -71.079779, lat: 42.277476)
-Thing.create(city_id: 8786, lng: -71.180086, lat: 42.277794)
-Thing.create(city_id: 8787, lng: -71.136092, lat: 42.277661)
-Thing.create(city_id: 8788, lng: -71.132803, lat: 42.277614)
-Thing.create(city_id: 8789, lng: -71.074391, lat: 42.277412)
-Thing.create(city_id: 8790, lng: -71.093828, lat: 42.277479)
-Thing.create(city_id: 8791, lng: -71.153676, lat: 42.277652)
-Thing.create(city_id: 8792, lng: -71.129063, lat: 42.277558)
-Thing.create(city_id: 8793, lng: -71.151264, lat: 42.277618)
-Thing.create(city_id: 8794, lng: -71.096556, lat: 42.277433)
-Thing.create(city_id: 8795, lng: -71.090503, lat: 42.277383)
-Thing.create(city_id: 8796, lng: -71.163004, lat: 42.277616)
-Thing.create(city_id: 8797, lng: -71.150029, lat: 42.277559)
-Thing.create(city_id: 8798, lng: -71.137495, lat: 42.277513)
-Thing.create(city_id: 8799, lng: -71.140606, lat: 42.277494)
-Thing.create(city_id: 8800, lng: -71.119277, lat: 42.277418)
-Thing.create(city_id: 8801, lng: -71.128232, lat: 42.277441)
-Thing.create(city_id: 8802, lng: -71.0871, lat: 42.277298)
-Thing.create(city_id: 8803, lng: -71.060427, lat: 42.277193)
-Thing.create(city_id: 8804, lng: -71.102001, lat: 42.277315)
-Thing.create(city_id: 8805, lng: -71.154753, lat: 42.277467)
-Thing.create(city_id: 8806, lng: -71.093319, lat: 42.277255)
-Thing.create(city_id: 8807, lng: -71.157549, lat: 42.277463)
-Thing.create(city_id: 8808, lng: -71.171264, lat: 42.277471)
-Thing.create(city_id: 8809, lng: -71.062726, lat: 42.277097)
-Thing.create(city_id: 8810, lng: -71.078656, lat: 42.277148)
-Thing.create(city_id: 8811, lng: -71.092088, lat: 42.277195)
-Thing.create(city_id: 8812, lng: -71.134288, lat: 42.277331)
-Thing.create(city_id: 8813, lng: -71.145458, lat: 42.277345)
-Thing.create(city_id: 8814, lng: -71.114454, lat: 42.277237)
-Thing.create(city_id: 8815, lng: -71.170414, lat: 42.277409)
-Thing.create(city_id: 8816, lng: -71.066865, lat: 42.277001)
-Thing.create(city_id: 8817, lng: -71.121733, lat: 42.277182)
-Thing.create(city_id: 8818, lng: -71.164229, lat: 42.277313)
-Thing.create(city_id: 8819, lng: -71.094316, lat: 42.277037)
-Thing.create(city_id: 8820, lng: -71.125032, lat: 42.27714)
-Thing.create(city_id: 8821, lng: -71.147936, lat: 42.277211)
-Thing.create(city_id: 8822, lng: -71.118312, lat: 42.277099)
-Thing.create(city_id: 8823, lng: -71.104346, lat: 42.27704)
-Thing.create(city_id: 8824, lng: -71.168164, lat: 42.277238)
-Thing.create(city_id: 8825, lng: -71.069553, lat: 42.276907)
-Thing.create(city_id: 8826, lng: -71.09571, lat: 42.277001)
-Thing.create(city_id: 8827, lng: -71.130523, lat: 42.277118)
-Thing.create(city_id: 8828, lng: -71.132057, lat: 42.277117)
-Thing.create(city_id: 8829, lng: -71.135259, lat: 42.277123)
-Thing.create(city_id: 8830, lng: -71.160222, lat: 42.27719)
-Thing.create(city_id: 8831, lng: -71.128826, lat: 42.277085)
-Thing.create(city_id: 8832, lng: -71.081086, lat: 42.2769)
-Thing.create(city_id: 8833, lng: -71.138529, lat: 42.277094)
-Thing.create(city_id: 8834, lng: -71.080153, lat: 42.276894)
-Thing.create(city_id: 8835, lng: -71.1002, lat: 42.276937)
-Thing.create(city_id: 8836, lng: -71.114096, lat: 42.276975)
-Thing.create(city_id: 8837, lng: -71.149511, lat: 42.277076)
-Thing.create(city_id: 8838, lng: -71.154339, lat: 42.277082)
-Thing.create(city_id: 8839, lng: -71.075257, lat: 42.276811)
-Thing.create(city_id: 8840, lng: -71.105496, lat: 42.276916)
-Thing.create(city_id: 8841, lng: -71.15034, lat: 42.277042)
-Thing.create(city_id: 8842, lng: -71.1669, lat: 42.277052)
-Thing.create(city_id: 8843, lng: -71.139767, lat: 42.276947)
-Thing.create(city_id: 8844, lng: -71.074695, lat: 42.301121)
-Thing.create(city_id: 8845, lng: -71.057087, lat: 42.301053)
-Thing.create(city_id: 8846, lng: -71.072778, lat: 42.301107)
-Thing.create(city_id: 8847, lng: -71.082379, lat: 42.301141)
-Thing.create(city_id: 8848, lng: -71.130866, lat: 42.301304)
-Thing.create(city_id: 8849, lng: -71.080582, lat: 42.301111)
-Thing.create(city_id: 8850, lng: -71.078681, lat: 42.301099)
-Thing.create(city_id: 8851, lng: -71.049844, lat: 42.300976)
-Thing.create(city_id: 8852, lng: -71.106826, lat: 42.301148)
-Thing.create(city_id: 8853, lng: -71.111908, lat: 42.301163)
-Thing.create(city_id: 8854, lng: -71.055818, lat: 42.300908)
-Thing.create(city_id: 8855, lng: -71.083747, lat: 42.30099)
-Thing.create(city_id: 8856, lng: -71.045625, lat: 42.300836)
-Thing.create(city_id: 8857, lng: -71.05464, lat: 42.30087)
-Thing.create(city_id: 8858, lng: -71.06006, lat: 42.300889)
-Thing.create(city_id: 8859, lng: -71.116479, lat: 42.301086)
-Thing.create(city_id: 8860, lng: -71.071272, lat: 42.300922)
-Thing.create(city_id: 8861, lng: -71.05814, lat: 42.300863)
-Thing.create(city_id: 8862, lng: -71.118631, lat: 42.301067)
-Thing.create(city_id: 8863, lng: -71.05296, lat: 42.300822)
-Thing.create(city_id: 8864, lng: -71.111064, lat: 42.301015)
-Thing.create(city_id: 8865, lng: -71.067745, lat: 42.30086)
-Thing.create(city_id: 8866, lng: -71.08152, lat: 42.300862)
-Thing.create(city_id: 8867, lng: -71.045179, lat: 42.300688)
-Thing.create(city_id: 8868, lng: -71.073266, lat: 42.30079)
-Thing.create(city_id: 8869, lng: -71.046332, lat: 42.300625)
-Thing.create(city_id: 8870, lng: -71.115325, lat: 42.300874)
-Thing.create(city_id: 8871, lng: -71.051875, lat: 42.300603)
-Thing.create(city_id: 8872, lng: -71.129647, lat: 42.300869)
-Thing.create(city_id: 8873, lng: -71.084943, lat: 42.300701)
-Thing.create(city_id: 8874, lng: -71.068638, lat: 42.300635)
-Thing.create(city_id: 8875, lng: -71.127319, lat: 42.300839)
-Thing.create(city_id: 8876, lng: -71.11159, lat: 42.300731)
-Thing.create(city_id: 8877, lng: -71.079802, lat: 42.300607)
-Thing.create(city_id: 8878, lng: -71.053737, lat: 42.300502)
-Thing.create(city_id: 8879, lng: -71.073931, lat: 42.300578)
-Thing.create(city_id: 8880, lng: -71.166498, lat: 42.300874)
-Thing.create(city_id: 8881, lng: -71.082912, lat: 42.300543)
-Thing.create(city_id: 8882, lng: -71.085892, lat: 42.300554)
-Thing.create(city_id: 8883, lng: -71.078778, lat: 42.300451)
-Thing.create(city_id: 8884, lng: -71.062674, lat: 42.300387)
-Thing.create(city_id: 8885, lng: -71.101983, lat: 42.300483)
-Thing.create(city_id: 8886, lng: -71.078017, lat: 42.300394)
-Thing.create(city_id: 8887, lng: -71.110185, lat: 42.300504)
-Thing.create(city_id: 8888, lng: -71.116397, lat: 42.300518)
-Thing.create(city_id: 8889, lng: -71.071966, lat: 42.300359)
-Thing.create(city_id: 8890, lng: -71.113032, lat: 42.300497)
-Thing.create(city_id: 8891, lng: -71.055456, lat: 42.300218)
-Thing.create(city_id: 8892, lng: -71.048946, lat: 42.300186)
-Thing.create(city_id: 8893, lng: -71.080792, lat: 42.300304)
-Thing.create(city_id: 8894, lng: -71.076597, lat: 42.300253)
-Thing.create(city_id: 8895, lng: -71.074855, lat: 42.300238)
-Thing.create(city_id: 8896, lng: -71.066747, lat: 42.300148)
-Thing.create(city_id: 8897, lng: -71.132878, lat: 42.301501)
-Thing.create(city_id: 8898, lng: -71.052775, lat: 42.291003)
-Thing.create(city_id: 8899, lng: -71.161776, lat: 42.291373)
-Thing.create(city_id: 8900, lng: -71.13425, lat: 42.291285)
-Thing.create(city_id: 8901, lng: -71.117305, lat: 42.291225)
-Thing.create(city_id: 8902, lng: -71.151936, lat: 42.291335)
-Thing.create(city_id: 8903, lng: -71.135052, lat: 42.291282)
-Thing.create(city_id: 8904, lng: -71.118119, lat: 42.291226)
-Thing.create(city_id: 8905, lng: -71.11888, lat: 42.291225)
-Thing.create(city_id: 8906, lng: -71.063673, lat: 42.291019)
-Thing.create(city_id: 8907, lng: -71.150904, lat: 42.291315)
-Thing.create(city_id: 8908, lng: -71.074594, lat: 42.291049)
-Thing.create(city_id: 8909, lng: -71.130786, lat: 42.291232)
-Thing.create(city_id: 8910, lng: -71.040522, lat: 42.290889)
-Thing.create(city_id: 8911, lng: -71.141332, lat: 42.291243)
-Thing.create(city_id: 8912, lng: -71.163032, lat: 42.291292)
-Thing.create(city_id: 8913, lng: -71.167572, lat: 42.291304)
-Thing.create(city_id: 8914, lng: -71.045391, lat: 42.290884)
-Thing.create(city_id: 8915, lng: -71.050566, lat: 42.290892)
-Thing.create(city_id: 8916, lng: -71.079086, lat: 42.290989)
-Thing.create(city_id: 8917, lng: -71.089392, lat: 42.291022)
-Thing.create(city_id: 8918, lng: -71.138323, lat: 42.291186)
-Thing.create(city_id: 8919, lng: -71.078541, lat: 42.290976)
-Thing.create(city_id: 8920, lng: -71.091384, lat: 42.29102)
-Thing.create(city_id: 8921, lng: -71.088477, lat: 42.290997)
-Thing.create(city_id: 8922, lng: -71.142836, lat: 42.291175)
-Thing.create(city_id: 8923, lng: -71.139775, lat: 42.291134)
-Thing.create(city_id: 8924, lng: -71.14424, lat: 42.291142)
-Thing.create(city_id: 8925, lng: -71.136773, lat: 42.291116)
-Thing.create(city_id: 8926, lng: -71.114451, lat: 42.291041)
-Thing.create(city_id: 8927, lng: -71.166375, lat: 42.291203)
-Thing.create(city_id: 8928, lng: -71.128185, lat: 42.291072)
-Thing.create(city_id: 8929, lng: -71.116103, lat: 42.291031)
-Thing.create(city_id: 8930, lng: -71.062094, lat: 42.290834)
-Thing.create(city_id: 8931, lng: -71.111, lat: 42.291009)
-Thing.create(city_id: 8932, lng: -71.059372, lat: 42.290821)
-Thing.create(city_id: 8933, lng: -71.16044, lat: 42.291161)
-Thing.create(city_id: 8934, lng: -71.153817, lat: 42.29113)
-Thing.create(city_id: 8935, lng: -71.072872, lat: 42.290853)
-Thing.create(city_id: 8936, lng: -71.051393, lat: 42.290756)
-Thing.create(city_id: 8937, lng: -71.082056, lat: 42.290843)
-Thing.create(city_id: 8938, lng: -71.159281, lat: 42.291088)
-Thing.create(city_id: 8939, lng: -71.155603, lat: 42.291069)
-Thing.create(city_id: 8940, lng: -71.073741, lat: 42.290793)
-Thing.create(city_id: 8941, lng: -71.123434, lat: 42.290953)
-Thing.create(city_id: 8942, lng: -71.08753, lat: 42.290827)
-Thing.create(city_id: 8943, lng: -71.041278, lat: 42.290647)
-Thing.create(city_id: 8944, lng: -71.1224, lat: 42.290938)
-Thing.create(city_id: 8945, lng: -71.165, lat: 42.291063)
-Thing.create(city_id: 8946, lng: -71.129305, lat: 42.290951)
-Thing.create(city_id: 8947, lng: -71.053133, lat: 42.290655)
-Thing.create(city_id: 8948, lng: -71.152836, lat: 42.290976)
-Thing.create(city_id: 8949, lng: -71.075929, lat: 42.290711)
-Thing.create(city_id: 8950, lng: -71.145536, lat: 42.290943)
-Thing.create(city_id: 8951, lng: -71.083859, lat: 42.29073)
-Thing.create(city_id: 8952, lng: -71.048347, lat: 42.290587)
-Thing.create(city_id: 8953, lng: -71.05746, lat: 42.290616)
-Thing.create(city_id: 8954, lng: -71.16882, lat: 42.290991)
-Thing.create(city_id: 8955, lng: -71.157775, lat: 42.290957)
-Thing.create(city_id: 8956, lng: -71.146634, lat: 42.290908)
-Thing.create(city_id: 8957, lng: -71.055534, lat: 42.290575)
-Thing.create(city_id: 8958, lng: -71.084669, lat: 42.29068)
-Thing.create(city_id: 8959, lng: -71.053813, lat: 42.29056)
-Thing.create(city_id: 8960, lng: -71.086654, lat: 42.290678)
-Thing.create(city_id: 8961, lng: -71.121968, lat: 42.284468)
-Thing.create(city_id: 8962, lng: -71.146871, lat: 42.284524)
-Thing.create(city_id: 8963, lng: -71.111782, lat: 42.284403)
-Thing.create(city_id: 8964, lng: -71.143947, lat: 42.284504)
-Thing.create(city_id: 8965, lng: -71.048262, lat: 42.28415)
-Thing.create(city_id: 8966, lng: -71.162369, lat: 42.284535)
-Thing.create(city_id: 8967, lng: -71.138413, lat: 42.284457)
-Thing.create(city_id: 8968, lng: -71.095587, lat: 42.284293)
-Thing.create(city_id: 8969, lng: -71.16162, lat: 42.284505)
-Thing.create(city_id: 8970, lng: -71.131553, lat: 42.284411)
-Thing.create(city_id: 8971, lng: -71.158216, lat: 42.284485)
-Thing.create(city_id: 8972, lng: -71.0597, lat: 42.284146)
-Thing.create(city_id: 8973, lng: -71.052925, lat: 42.284103)
-Thing.create(city_id: 8974, lng: -71.07455, lat: 42.284156)
-Thing.create(city_id: 8975, lng: -71.067492, lat: 42.284129)
-Thing.create(city_id: 8976, lng: -71.062653, lat: 42.284107)
-Thing.create(city_id: 8977, lng: -71.142523, lat: 42.284381)
-Thing.create(city_id: 8978, lng: -71.148281, lat: 42.284395)
-Thing.create(city_id: 8979, lng: -71.064859, lat: 42.284102)
-Thing.create(city_id: 8980, lng: -71.135375, lat: 42.284331)
-Thing.create(city_id: 8981, lng: -71.153618, lat: 42.28437)
-Thing.create(city_id: 8982, lng: -71.134235, lat: 42.284308)
-Thing.create(city_id: 8983, lng: -71.168313, lat: 42.284408)
-Thing.create(city_id: 8984, lng: -71.135901, lat: 42.284305)
-Thing.create(city_id: 8985, lng: -71.083748, lat: 42.284126)
-Thing.create(city_id: 8986, lng: -71.092998, lat: 42.284157)
-Thing.create(city_id: 8987, lng: -71.096833, lat: 42.284169)
-Thing.create(city_id: 8988, lng: -71.118787, lat: 42.284231)
-Thing.create(city_id: 8989, lng: -71.081749, lat: 42.284101)
-Thing.create(city_id: 8990, lng: -71.069654, lat: 42.284047)
-Thing.create(city_id: 8991, lng: -71.128416, lat: 42.28425)
-Thing.create(city_id: 8992, lng: -71.129456, lat: 42.284252)
-Thing.create(city_id: 8993, lng: -71.16745, lat: 42.284358)
-Thing.create(city_id: 8994, lng: -71.126848, lat: 42.28422)
-Thing.create(city_id: 8995, lng: -71.117598, lat: 42.284178)
-Thing.create(city_id: 8996, lng: -71.139351, lat: 42.284245)
-Thing.create(city_id: 8997, lng: -71.140494, lat: 42.284248)
-Thing.create(city_id: 8998, lng: -71.160754, lat: 42.284304)
-Thing.create(city_id: 8999, lng: -71.163353, lat: 42.284301)
-Thing.create(city_id: 9000, lng: -71.114916, lat: 42.284149)
-Thing.create(city_id: 9001, lng: -71.079423, lat: 42.284024)
-Thing.create(city_id: 9002, lng: -71.084531, lat: 42.284028)
-Thing.create(city_id: 9003, lng: -71.150108, lat: 42.284241)
-Thing.create(city_id: 9004, lng: -71.13636, lat: 42.284186)
-Thing.create(city_id: 9005, lng: -71.13256, lat: 42.284741)
-Thing.create(city_id: 9006, lng: -71.164885, lat: 42.284785)
-Thing.create(city_id: 9007, lng: -71.049025, lat: 42.284341)
-Thing.create(city_id: 9008, lng: -71.12378, lat: 42.284582)
-Thing.create(city_id: 9009, lng: -71.124946, lat: 42.284541)
-Thing.create(city_id: 9010, lng: -71.1099, lat: 42.284094)
-Thing.create(city_id: 9011, lng: -71.048803, lat: 42.283865)
-Thing.create(city_id: 9012, lng: -71.17215, lat: 42.284279)
-Thing.create(city_id: 9013, lng: -71.053876, lat: 42.283856)
-Thing.create(city_id: 9014, lng: -71.141628, lat: 42.284163)
-Thing.create(city_id: 9015, lng: -71.047538, lat: 42.283829)
-Thing.create(city_id: 9016, lng: -71.151689, lat: 42.28419)
-Thing.create(city_id: 9017, lng: -71.094065, lat: 42.283996)
-Thing.create(city_id: 9018, lng: -71.088594, lat: 42.283972)
-Thing.create(city_id: 9019, lng: -71.097925, lat: 42.283999)
-Thing.create(city_id: 9020, lng: -71.154718, lat: 42.284182)
-Thing.create(city_id: 9021, lng: -71.125657, lat: 42.28409)
-Thing.create(city_id: 9022, lng: -71.161233, lat: 42.277005)
-Thing.create(city_id: 9023, lng: -71.115621, lat: 42.27686)
-Thing.create(city_id: 9024, lng: -71.152762, lat: 42.276964)
-Thing.create(city_id: 9025, lng: -71.097839, lat: 42.276779)
-Thing.create(city_id: 9026, lng: -71.117438, lat: 42.276844)
-Thing.create(city_id: 9027, lng: -71.07835, lat: 42.276706)
-Thing.create(city_id: 9028, lng: -71.163283, lat: 42.276984)
-Thing.create(city_id: 9029, lng: -71.136359, lat: 42.277458)
-Thing.create(city_id: 9030, lng: -71.123112, lat: 42.277347)
-Thing.create(city_id: 9031, lng: -71.13923, lat: 42.277323)
-Thing.create(city_id: 9032, lng: -71.169373, lat: 42.277329)
-Thing.create(city_id: 9033, lng: -71.081945, lat: 42.276965)
-Thing.create(city_id: 9034, lng: -71.161904, lat: 42.277211)
-Thing.create(city_id: 9035, lng: -71.113919, lat: 42.277023)
-Thing.create(city_id: 9036, lng: -71.143081, lat: 42.277064)
-Thing.create(city_id: 9037, lng: -71.156531, lat: 42.277045)
-Thing.create(city_id: 9038, lng: -71.116983, lat: 42.276816)
-Thing.create(city_id: 9039, lng: -71.14696, lat: 42.276911)
-Thing.create(city_id: 9040, lng: -71.164822, lat: 42.276962)
-Thing.create(city_id: 9041, lng: -71.073114, lat: 42.276655)
-Thing.create(city_id: 9042, lng: -71.120686, lat: 42.276811)
-Thing.create(city_id: 9043, lng: -71.128138, lat: 42.276834)
-Thing.create(city_id: 9044, lng: -71.136523, lat: 42.276859)
-Thing.create(city_id: 9045, lng: -71.092846, lat: 42.27671)
-Thing.create(city_id: 9046, lng: -71.133473, lat: 42.276838)
-Thing.create(city_id: 9047, lng: -71.091112, lat: 42.27668)
-Thing.create(city_id: 9048, lng: -71.144199, lat: 42.276851)
-Thing.create(city_id: 9049, lng: -71.067869, lat: 42.276583)
-Thing.create(city_id: 9050, lng: -71.102673, lat: 42.276682)
-Thing.create(city_id: 9051, lng: -71.126625, lat: 42.276724)
-Thing.create(city_id: 9052, lng: -71.155871, lat: 42.276813)
-Thing.create(city_id: 9053, lng: -71.061033, lat: 42.276483)
-Thing.create(city_id: 9054, lng: -71.074064, lat: 42.276525)
-Thing.create(city_id: 9055, lng: -71.129899, lat: 42.276701)
-Thing.create(city_id: 9056, lng: -71.134381, lat: 42.276712)
-Thing.create(city_id: 9057, lng: -71.093341, lat: 42.276566)
-Thing.create(city_id: 9058, lng: -71.089235, lat: 42.276542)
-Thing.create(city_id: 9059, lng: -71.101667, lat: 42.276566)
-Thing.create(city_id: 9060, lng: -71.094743, lat: 42.276505)
-Thing.create(city_id: 9061, lng: -71.113016, lat: 42.276555)
-Thing.create(city_id: 9062, lng: -71.119459, lat: 42.276575)
-Thing.create(city_id: 9063, lng: -71.137407, lat: 42.27662)
-Thing.create(city_id: 9064, lng: -71.079316, lat: 42.276422)
-Thing.create(city_id: 9065, lng: -71.138302, lat: 42.276616)
-Thing.create(city_id: 9066, lng: -71.153566, lat: 42.276662)
-Thing.create(city_id: 9067, lng: -71.148645, lat: 42.276643)
-Thing.create(city_id: 9068, lng: -71.124698, lat: 42.276555)
-Thing.create(city_id: 9069, lng: -71.095925, lat: 42.276436)
-Thing.create(city_id: 9070, lng: -71.14609, lat: 42.276577)
-Thing.create(city_id: 9071, lng: -71.131188, lat: 42.276518)
-Thing.create(city_id: 9072, lng: -71.104021, lat: 42.276418)
-Thing.create(city_id: 9073, lng: -71.08827, lat: 42.276361)
-Thing.create(city_id: 9074, lng: -71.067067, lat: 42.276276)
-Thing.create(city_id: 9075, lng: -71.09382, lat: 42.276342)
-Thing.create(city_id: 9076, lng: -71.169406, lat: 42.276573)
-Thing.create(city_id: 9077, lng: -71.076834, lat: 42.276246)
-Thing.create(city_id: 9078, lng: -71.166117, lat: 42.276538)
-Thing.create(city_id: 9079, lng: -71.108283, lat: 42.276353)
-Thing.create(city_id: 9080, lng: -71.072966, lat: 42.300379)
-Thing.create(city_id: 9081, lng: -71.069924, lat: 42.300315)
-Thing.create(city_id: 9082, lng: -71.045261, lat: 42.300047)
-Thing.create(city_id: 9083, lng: -71.084347, lat: 42.300193)
-Thing.create(city_id: 9084, lng: -71.115453, lat: 42.300287)
-Thing.create(city_id: 9085, lng: -71.046889, lat: 42.300032)
-Thing.create(city_id: 9086, lng: -71.075698, lat: 42.300137)
-Thing.create(city_id: 9087, lng: -71.052938, lat: 42.300044)
-Thing.create(city_id: 9088, lng: -71.128072, lat: 42.300304)
-Thing.create(city_id: 9089, lng: -71.065941, lat: 42.300078)
-Thing.create(city_id: 9090, lng: -71.083406, lat: 42.300111)
-Thing.create(city_id: 9091, lng: -71.101079, lat: 42.300162)
-Thing.create(city_id: 9092, lng: -71.108108, lat: 42.30016)
-Thing.create(city_id: 9093, lng: -71.081965, lat: 42.300063)
-Thing.create(city_id: 9094, lng: -71.107079, lat: 42.300138)
-Thing.create(city_id: 9095, lng: -71.062573, lat: 42.29997)
-Thing.create(city_id: 9096, lng: -71.060334, lat: 42.299957)
-Thing.create(city_id: 9097, lng: -71.056404, lat: 42.299935)
-Thing.create(city_id: 9098, lng: -71.117474, lat: 42.30015)
-Thing.create(city_id: 9099, lng: -71.128833, lat: 42.300187)
-Thing.create(city_id: 9100, lng: -71.050223, lat: 42.299906)
-Thing.create(city_id: 9101, lng: -71.166041, lat: 42.300294)
-Thing.create(city_id: 9102, lng: -71.109256, lat: 42.300111)
-Thing.create(city_id: 9103, lng: -71.047282, lat: 42.299879)
-Thing.create(city_id: 9104, lng: -71.105973, lat: 42.300083)
-Thing.create(city_id: 9105, lng: -71.07356, lat: 42.299952)
-Thing.create(city_id: 9106, lng: -71.068298, lat: 42.299928)
-Thing.create(city_id: 9107, lng: -71.103321, lat: 42.300043)
-Thing.create(city_id: 9108, lng: -71.160095, lat: 42.30021)
-Thing.create(city_id: 9109, lng: -71.04448, lat: 42.299809)
-Thing.create(city_id: 9110, lng: -71.104076, lat: 42.300027)
-Thing.create(city_id: 9111, lng: -71.051148, lat: 42.299796)
-Thing.create(city_id: 9112, lng: -71.116588, lat: 42.300031)
-Thing.create(city_id: 9113, lng: -71.077552, lat: 42.299886)
-Thing.create(city_id: 9114, lng: -71.1117, lat: 42.299998)
-Thing.create(city_id: 9115, lng: -71.052035, lat: 42.29977)
-Thing.create(city_id: 9116, lng: -71.118537, lat: 42.299998)
-Thing.create(city_id: 9117, lng: -71.04879, lat: 42.299744)
-Thing.create(city_id: 9118, lng: -71.102803, lat: 42.299936)
-Thing.create(city_id: 9119, lng: -71.085316, lat: 42.299862)
-Thing.create(city_id: 9120, lng: -71.054039, lat: 42.29973)
-Thing.create(city_id: 9121, lng: -71.065856, lat: 42.29977)
-Thing.create(city_id: 9122, lng: -71.045399, lat: 42.299643)
-Thing.create(city_id: 9123, lng: -71.074209, lat: 42.29974)
-Thing.create(city_id: 9124, lng: -71.078661, lat: 42.29975)
-Thing.create(city_id: 9125, lng: -71.113432, lat: 42.299864)
-Thing.create(city_id: 9126, lng: -71.10052, lat: 42.299809)
-Thing.create(city_id: 9127, lng: -71.11348, lat: 42.299843)
-Thing.create(city_id: 9128, lng: -71.169746, lat: 42.300016)
-Thing.create(city_id: 9129, lng: -71.072435, lat: 42.299667)
-Thing.create(city_id: 9130, lng: -71.110704, lat: 42.299768)
-Thing.create(city_id: 9131, lng: -71.074588, lat: 42.299632)
-Thing.create(city_id: 9132, lng: -71.068979, lat: 42.299586)
-Thing.create(city_id: 9133, lng: -71.080346, lat: 42.2996)
-Thing.create(city_id: 9134, lng: -71.086242, lat: 42.29961)
-Thing.create(city_id: 9135, lng: -71.11267, lat: 42.299677)
-Thing.create(city_id: 9136, lng: -71.04621, lat: 42.290523)
-Thing.create(city_id: 9137, lng: -71.039715, lat: 42.290494)
-Thing.create(city_id: 9138, lng: -71.060402, lat: 42.290572)
-Thing.create(city_id: 9139, lng: -71.085621, lat: 42.290666)
-Thing.create(city_id: 9140, lng: -71.067983, lat: 42.290576)
-Thing.create(city_id: 9141, lng: -71.148034, lat: 42.290847)
-Thing.create(city_id: 9142, lng: -71.119, lat: 42.290727)
-Thing.create(city_id: 9143, lng: -71.116999, lat: 42.290715)
-Thing.create(city_id: 9144, lng: -71.156976, lat: 42.290821)
-Thing.create(city_id: 9145, lng: -71.052422, lat: 42.290454)
-Thing.create(city_id: 9146, lng: -71.164298, lat: 42.290829)
-Thing.create(city_id: 9147, lng: -71.070474, lat: 42.290515)
-Thing.create(city_id: 9148, lng: -71.132395, lat: 42.290716)
-Thing.create(city_id: 9149, lng: -71.113676, lat: 42.290646)
-Thing.create(city_id: 9150, lng: -71.088408, lat: 42.290554)
-Thing.create(city_id: 9151, lng: -71.121439, lat: 42.290667)
-Thing.create(city_id: 9152, lng: -71.134747, lat: 42.29071)
-Thing.create(city_id: 9153, lng: -71.090712, lat: 42.29055)
-Thing.create(city_id: 9154, lng: -71.04882, lat: 42.290392)
-Thing.create(city_id: 9155, lng: -71.077673, lat: 42.290939)
-Thing.create(city_id: 9156, lng: -71.148723, lat: 42.291142)
-Thing.create(city_id: 9157, lng: -71.05663, lat: 42.29081)
-Thing.create(city_id: 9158, lng: -71.069375, lat: 42.290811)
-Thing.create(city_id: 9159, lng: -71.089864, lat: 42.290837)
-Thing.create(city_id: 9160, lng: -71.083056, lat: 42.290777)
-Thing.create(city_id: 9161, lng: -71.064742, lat: 42.290655)
-Thing.create(city_id: 9162, lng: -71.117905, lat: 42.290812)
-Thing.create(city_id: 9163, lng: -71.138957, lat: 42.290706)
-Thing.create(city_id: 9164, lng: -71.04986, lat: 42.290388)
-Thing.create(city_id: 9165, lng: -71.162494, lat: 42.290773)
-Thing.create(city_id: 9166, lng: -71.076858, lat: 42.290488)
-Thing.create(city_id: 9167, lng: -71.072612, lat: 42.290462)
-Thing.create(city_id: 9168, lng: -71.104772, lat: 42.290577)
-Thing.create(city_id: 9169, lng: -71.07887, lat: 42.290477)
-Thing.create(city_id: 9170, lng: -71.151462, lat: 42.290718)
-Thing.create(city_id: 9171, lng: -71.13352, lat: 42.290658)
-Thing.create(city_id: 9172, lng: -71.045348, lat: 42.290334)
-Thing.create(city_id: 9173, lng: -71.149381, lat: 42.290685)
-Thing.create(city_id: 9174, lng: -71.136047, lat: 42.290641)
-Thing.create(city_id: 9175, lng: -71.142035, lat: 42.290655)
-Thing.create(city_id: 9176, lng: -71.129912, lat: 42.290611)
-Thing.create(city_id: 9177, lng: -71.155403, lat: 42.29069)
-Thing.create(city_id: 9178, lng: -71.137472, lat: 42.290627)
-Thing.create(city_id: 9179, lng: -71.058498, lat: 42.290348)
-Thing.create(city_id: 9180, lng: -71.140381, lat: 42.290631)
-Thing.create(city_id: 9181, lng: -71.059548, lat: 42.290345)
-Thing.create(city_id: 9182, lng: -71.063873, lat: 42.290357)
-Thing.create(city_id: 9183, lng: -71.12711, lat: 42.290576)
-Thing.create(city_id: 9184, lng: -71.047437, lat: 42.290277)
-Thing.create(city_id: 9185, lng: -71.150367, lat: 42.290636)
-Thing.create(city_id: 9186, lng: -71.06136, lat: 42.29033)
-Thing.create(city_id: 9187, lng: -71.17346, lat: 42.290691)
-Thing.create(city_id: 9188, lng: -71.131329, lat: 42.29056)
-Thing.create(city_id: 9189, lng: -71.166924, lat: 42.290656)
-Thing.create(city_id: 9190, lng: -71.154625, lat: 42.290619)
-Thing.create(city_id: 9191, lng: -71.165773, lat: 42.29063)
-Thing.create(city_id: 9192, lng: -71.143585, lat: 42.290546)
-Thing.create(city_id: 9193, lng: -71.065771, lat: 42.29027)
-Thing.create(city_id: 9194, lng: -71.118245, lat: 42.290453)
-Thing.create(city_id: 9195, lng: -71.040602, lat: 42.290165)
-Thing.create(city_id: 9196, lng: -71.068982, lat: 42.290272)
-Thing.create(city_id: 9197, lng: -71.122946, lat: 42.290448)
-Thing.create(city_id: 9198, lng: -71.07441, lat: 42.29027)
-Thing.create(city_id: 9199, lng: -71.163176, lat: 42.290563)
-Thing.create(city_id: 9200, lng: -71.075725, lat: 42.283913)
-Thing.create(city_id: 9201, lng: -71.165649, lat: 42.28419)
-Thing.create(city_id: 9202, lng: -71.169602, lat: 42.284194)
-Thing.create(city_id: 9203, lng: -71.156729, lat: 42.284154)
-Thing.create(city_id: 9204, lng: -71.068407, lat: 42.283847)
-Thing.create(city_id: 9205, lng: -71.076792, lat: 42.283875)
-Thing.create(city_id: 9206, lng: -71.133362, lat: 42.284066)
-Thing.create(city_id: 9207, lng: -71.061998, lat: 42.283814)
-Thing.create(city_id: 9208, lng: -71.15939, lat: 42.284135)
-Thing.create(city_id: 9209, lng: -71.147229, lat: 42.284087)
-Thing.create(city_id: 9210, lng: -71.146189, lat: 42.284076)
-Thing.create(city_id: 9211, lng: -71.120311, lat: 42.28399)
-Thing.create(city_id: 9212, lng: -71.091454, lat: 42.283884)
-Thing.create(city_id: 9213, lng: -71.0555, lat: 42.283748)
-Thing.create(city_id: 9214, lng: -71.121208, lat: 42.283973)
-Thing.create(city_id: 9215, lng: -71.144588, lat: 42.284035)
-Thing.create(city_id: 9216, lng: -71.11291, lat: 42.283933)
-Thing.create(city_id: 9217, lng: -71.124297, lat: 42.283967)
-Thing.create(city_id: 9218, lng: -71.071618, lat: 42.283783)
-Thing.create(city_id: 9219, lng: -71.14321, lat: 42.284023)
-Thing.create(city_id: 9220, lng: -71.123266, lat: 42.283958)
-Thing.create(city_id: 9221, lng: -71.112523, lat: 42.283922)
-Thing.create(city_id: 9222, lng: -71.092302, lat: 42.283813)
-Thing.create(city_id: 9223, lng: -71.122795, lat: 42.283916)
-Thing.create(city_id: 9224, lng: -71.130942, lat: 42.28393)
-Thing.create(city_id: 9225, lng: -71.054822, lat: 42.283651)
-Thing.create(city_id: 9226, lng: -71.101667, lat: 42.283817)
-Thing.create(city_id: 9227, lng: -71.086793, lat: 42.283759)
-Thing.create(city_id: 9228, lng: -71.048596, lat: 42.283601)
-Thing.create(city_id: 9229, lng: -71.136669, lat: 42.283912)
-Thing.create(city_id: 9230, lng: -71.065772, lat: 42.283663)
-Thing.create(city_id: 9231, lng: -71.161747, lat: 42.283985)
-Thing.create(city_id: 9232, lng: -71.077841, lat: 42.283696)
-Thing.create(city_id: 9233, lng: -71.164036, lat: 42.283972)
-Thing.create(city_id: 9234, lng: -71.087477, lat: 42.283705)
-Thing.create(city_id: 9235, lng: -71.169059, lat: 42.283933)
-Thing.create(city_id: 9236, lng: -71.09628, lat: 42.283694)
-Thing.create(city_id: 9237, lng: -71.06066, lat: 42.283561)
-Thing.create(city_id: 9238, lng: -71.072669, lat: 42.283596)
-Thing.create(city_id: 9239, lng: -71.056565, lat: 42.283521)
-Thing.create(city_id: 9240, lng: -71.047019, lat: 42.283453)
-Thing.create(city_id: 9241, lng: -71.163124, lat: 42.28385)
-Thing.create(city_id: 9242, lng: -71.057563, lat: 42.283481)
-Thing.create(city_id: 9243, lng: -71.170635, lat: 42.283834)
-Thing.create(city_id: 9244, lng: -71.069644, lat: 42.283487)
-Thing.create(city_id: 9245, lng: -71.09321, lat: 42.283568)
-Thing.create(city_id: 9246, lng: -71.065053, lat: 42.283458)
-Thing.create(city_id: 9247, lng: -71.157563, lat: 42.283759)
-Thing.create(city_id: 9248, lng: -71.14115, lat: 42.283702)
-Thing.create(city_id: 9249, lng: -71.059673, lat: 42.283398)
-Thing.create(city_id: 9250, lng: -71.116707, lat: 42.283598)
-Thing.create(city_id: 9251, lng: -71.166734, lat: 42.283753)
-Thing.create(city_id: 9252, lng: -71.127531, lat: 42.283632)
-Thing.create(city_id: 9253, lng: -71.089981, lat: 42.2835)
-Thing.create(city_id: 9254, lng: -71.097478, lat: 42.283499)
-Thing.create(city_id: 9255, lng: -71.078964, lat: 42.28343)
-Thing.create(city_id: 9256, lng: -71.051893, lat: 42.283326)
-Thing.create(city_id: 9257, lng: -71.110604, lat: 42.283538)
-Thing.create(city_id: 9258, lng: -71.062388, lat: 42.283358)
-Thing.create(city_id: 9259, lng: -71.154746, lat: 42.27649)
-Thing.create(city_id: 9260, lng: -71.152042, lat: 42.276478)
-Thing.create(city_id: 9261, lng: -71.082605, lat: 42.276226)
-Thing.create(city_id: 9262, lng: -71.168208, lat: 42.276483)
-Thing.create(city_id: 9263, lng: -71.139392, lat: 42.276373)
-Thing.create(city_id: 9264, lng: -71.132635, lat: 42.276317)
-Thing.create(city_id: 9265, lng: -71.135247, lat: 42.276321)
-Thing.create(city_id: 9266, lng: -71.097231, lat: 42.276189)
-Thing.create(city_id: 9267, lng: -71.078195, lat: 42.276108)
-Thing.create(city_id: 9268, lng: -71.127721, lat: 42.276274)
-Thing.create(city_id: 9269, lng: -71.098466, lat: 42.276172)
-Thing.create(city_id: 9270, lng: -71.150371, lat: 42.276314)
-Thing.create(city_id: 9271, lng: -71.147713, lat: 42.276293)
-Thing.create(city_id: 9272, lng: -71.128896, lat: 42.276219)
-Thing.create(city_id: 9273, lng: -71.122593, lat: 42.276191)
-Thing.create(city_id: 9274, lng: -71.159518, lat: 42.276297)
-Thing.create(city_id: 9275, lng: -71.163597, lat: 42.276309)
-Thing.create(city_id: 9276, lng: -71.072881, lat: 42.276)
-Thing.create(city_id: 9277, lng: -71.121928, lat: 42.276171)
-Thing.create(city_id: 9278, lng: -71.172714, lat: 42.2763)
-Thing.create(city_id: 9279, lng: -71.080296, lat: 42.27598)
-Thing.create(city_id: 9280, lng: -71.09172, lat: 42.276017)
-Thing.create(city_id: 9281, lng: -71.112071, lat: 42.27608)
-Thing.create(city_id: 9282, lng: -71.095095, lat: 42.276018)
-Thing.create(city_id: 9283, lng: -71.16218, lat: 42.276232)
-Thing.create(city_id: 9284, lng: -71.061377, lat: 42.275875)
-Thing.create(city_id: 9285, lng: -71.102244, lat: 42.276004)
-Thing.create(city_id: 9286, lng: -71.088844, lat: 42.275947)
-Thing.create(city_id: 9287, lng: -71.105392, lat: 42.276004)
-Thing.create(city_id: 9288, lng: -71.090908, lat: 42.275952)
-Thing.create(city_id: 9289, lng: -71.1537, lat: 42.276105)
-Thing.create(city_id: 9290, lng: -71.120896, lat: 42.276)
-Thing.create(city_id: 9291, lng: -71.133283, lat: 42.276032)
-Thing.create(city_id: 9292, lng: -71.081256, lat: 42.27585)
-Thing.create(city_id: 9293, lng: -71.151344, lat: 42.276068)
-Thing.create(city_id: 9294, lng: -71.10771, lat: 42.275914)
-Thing.create(city_id: 9295, lng: -71.166851, lat: 42.276094)
-Thing.create(city_id: 9296, lng: -71.125488, lat: 42.275963)
-Thing.create(city_id: 9297, lng: -71.07988, lat: 42.275794)
-Thing.create(city_id: 9298, lng: -71.139634, lat: 42.275976)
-Thing.create(city_id: 9299, lng: -71.092572, lat: 42.27581)
-Thing.create(city_id: 9300, lng: -71.168934, lat: 42.276046)
-Thing.create(city_id: 9301, lng: -71.130264, lat: 42.275919)
-Thing.create(city_id: 9302, lng: -71.082223, lat: 42.275746)
-Thing.create(city_id: 9303, lng: -71.104607, lat: 42.27582)
-Thing.create(city_id: 9304, lng: -71.085347, lat: 42.27645)
-Thing.create(city_id: 9305, lng: -71.16217, lat: 42.27665)
-Thing.create(city_id: 9306, lng: -71.149562, lat: 42.276559)
-Thing.create(city_id: 9307, lng: -71.145073, lat: 42.2765)
-Thing.create(city_id: 9308, lng: -71.133998, lat: 42.27591)
-Thing.create(city_id: 9309, lng: -71.093679, lat: 42.275773)
-Thing.create(city_id: 9310, lng: -71.16536, lat: 42.275965)
-Thing.create(city_id: 9311, lng: -71.045892, lat: 42.299419)
-Thing.create(city_id: 9312, lng: -71.128465, lat: 42.299714)
-Thing.create(city_id: 9313, lng: -71.08362, lat: 42.299546)
-Thing.create(city_id: 9314, lng: -71.066851, lat: 42.299484)
-Thing.create(city_id: 9315, lng: -71.107441, lat: 42.299609)
-Thing.create(city_id: 9316, lng: -71.046068, lat: 42.299367)
-Thing.create(city_id: 9317, lng: -71.141802, lat: 42.299695)
-Thing.create(city_id: 9318, lng: -71.053241, lat: 42.353488)
-Thing.create(city_id: 9319, lng: -71.075336, lat: 42.299452)
-Thing.create(city_id: 9320, lng: -71.050517, lat: 42.299265)
-Thing.create(city_id: 9321, lng: -71.069804, lat: 42.299337)
-Thing.create(city_id: 9322, lng: -71.055676, lat: 42.299274)
-Thing.create(city_id: 9323, lng: -71.081466, lat: 42.299319)
-Thing.create(city_id: 9324, lng: -71.100803, lat: 42.299353)
-Thing.create(city_id: 9325, lng: -71.110003, lat: 42.299382)
-Thing.create(city_id: 9326, lng: -71.067754, lat: 42.29921)
-Thing.create(city_id: 9327, lng: -71.084573, lat: 42.299259)
-Thing.create(city_id: 9328, lng: -71.077026, lat: 42.299226)
-Thing.create(city_id: 9329, lng: -71.113365, lat: 42.299343)
-Thing.create(city_id: 9330, lng: -71.11111, lat: 42.299333)
-Thing.create(city_id: 9331, lng: -71.051961, lat: 42.299054)
-Thing.create(city_id: 9332, lng: -71.07332, lat: 42.299128)
-Thing.create(city_id: 9333, lng: -71.079896, lat: 42.299148)
-Thing.create(city_id: 9334, lng: -71.078738, lat: 42.299131)
-Thing.create(city_id: 9335, lng: -71.067784, lat: 42.299895)
-Thing.create(city_id: 9336, lng: -71.044659, lat: 42.299751)
-Thing.create(city_id: 9337, lng: -71.059537, lat: 42.299754)
-Thing.create(city_id: 9338, lng: -71.076613, lat: 42.299735)
-Thing.create(city_id: 9339, lng: -71.159919, lat: 42.299949)
-Thing.create(city_id: 9340, lng: -71.119617, lat: 42.299762)
-Thing.create(city_id: 9341, lng: -71.046832, lat: 42.299007)
-Thing.create(city_id: 9342, lng: -71.073555, lat: 42.299101)
-Thing.create(city_id: 9343, lng: -71.070715, lat: 42.299073)
-Thing.create(city_id: 9344, lng: -71.159295, lat: 42.299369)
-Thing.create(city_id: 9345, lng: -71.119859, lat: 42.299222)
-Thing.create(city_id: 9346, lng: -71.050973, lat: 42.298956)
-Thing.create(city_id: 9347, lng: -71.072314, lat: 42.299026)
-Thing.create(city_id: 9348, lng: -71.077662, lat: 42.299044)
-Thing.create(city_id: 9349, lng: -71.07471, lat: 42.299001)
-Thing.create(city_id: 9350, lng: -71.111813, lat: 42.299122)
-Thing.create(city_id: 9351, lng: -71.108257, lat: 42.299093)
-Thing.create(city_id: 9352, lng: -71.07819, lat: 42.298981)
-Thing.create(city_id: 9353, lng: -71.085519, lat: 42.298997)
-Thing.create(city_id: 9354, lng: -71.110243, lat: 42.299081)
-Thing.create(city_id: 9355, lng: -71.102126, lat: 42.299044)
-Thing.create(city_id: 9356, lng: -71.082995, lat: 42.298976)
-Thing.create(city_id: 9357, lng: -71.068756, lat: 42.298919)
-Thing.create(city_id: 9358, lng: -71.076199, lat: 42.298918)
-Thing.create(city_id: 9359, lng: -71.129136, lat: 42.299057)
-Thing.create(city_id: 9360, lng: -71.100638, lat: 42.298936)
-Thing.create(city_id: 9361, lng: -71.143657, lat: 42.299056)
-Thing.create(city_id: 9362, lng: -71.086505, lat: 42.298829)
-Thing.create(city_id: 9363, lng: -71.064325, lat: 42.298695)
-Thing.create(city_id: 9364, lng: -71.092018, lat: 42.290323)
-Thing.create(city_id: 9365, lng: -71.12047, lat: 42.290403)
-Thing.create(city_id: 9366, lng: -71.115056, lat: 42.290375)
-Thing.create(city_id: 9367, lng: -71.077971, lat: 42.290223)
-Thing.create(city_id: 9368, lng: -71.159937, lat: 42.290488)
-Thing.create(city_id: 9369, lng: -71.089169, lat: 42.290255)
-Thing.create(city_id: 9370, lng: -71.153302, lat: 42.290456)
-Thing.create(city_id: 9371, lng: -71.070537, lat: 42.290175)
-Thing.create(city_id: 9372, lng: -71.060331, lat: 42.29012)
-Thing.create(city_id: 9373, lng: -71.158481, lat: 42.290436)
-Thing.create(city_id: 9374, lng: -71.071701, lat: 42.290121)
-Thing.create(city_id: 9375, lng: -71.12413, lat: 42.290302)
-Thing.create(city_id: 9376, lng: -71.062364, lat: 42.290082)
-Thing.create(city_id: 9377, lng: -71.051135, lat: 42.290037)
-Thing.create(city_id: 9378, lng: -71.148768, lat: 42.290371)
-Thing.create(city_id: 9379, lng: -71.073309, lat: 42.290114)
-Thing.create(city_id: 9380, lng: -71.056119, lat: 42.29002)
-Thing.create(city_id: 9381, lng: -71.164968, lat: 42.290385)
-Thing.create(city_id: 9382, lng: -71.11991, lat: 42.290233)
-Thing.create(city_id: 9383, lng: -71.161043, lat: 42.290356)
-Thing.create(city_id: 9384, lng: -71.083074, lat: 42.290099)
-Thing.create(city_id: 9385, lng: -71.04916, lat: 42.289966)
-Thing.create(city_id: 9386, lng: -71.052732, lat: 42.289974)
-Thing.create(city_id: 9387, lng: -71.163957, lat: 42.290351)
-Thing.create(city_id: 9388, lng: -71.147572, lat: 42.290299)
-Thing.create(city_id: 9389, lng: -71.041368, lat: 42.289917)
-Thing.create(city_id: 9390, lng: -71.078594, lat: 42.290056)
-Thing.create(city_id: 9391, lng: -71.15233, lat: 42.2903)
-Thing.create(city_id: 9392, lng: -71.081726, lat: 42.29006)
-Thing.create(city_id: 9393, lng: -71.091171, lat: 42.290088)
-Thing.create(city_id: 9394, lng: -71.121964, lat: 42.290189)
-Thing.create(city_id: 9395, lng: -71.075446, lat: 42.290027)
-Thing.create(city_id: 9396, lng: -71.069374, lat: 42.289977)
-Thing.create(city_id: 9397, lng: -71.139473, lat: 42.290216)
-Thing.create(city_id: 9398, lng: -71.054359, lat: 42.289915)
-Thing.create(city_id: 9399, lng: -71.090131, lat: 42.290042)
-Thing.create(city_id: 9400, lng: -71.146014, lat: 42.290224)
-Thing.create(city_id: 9401, lng: -71.07245, lat: 42.289951)
-Thing.create(city_id: 9402, lng: -71.086155, lat: 42.289985)
-Thing.create(city_id: 9403, lng: -71.150997, lat: 42.290176)
-Thing.create(city_id: 9404, lng: -71.061378, lat: 42.289858)
-Thing.create(city_id: 9405, lng: -71.13806, lat: 42.290123)
-Thing.create(city_id: 9406, lng: -71.156469, lat: 42.290172)
-Thing.create(city_id: 9407, lng: -71.083812, lat: 42.289929)
-Thing.create(city_id: 9408, lng: -71.141008, lat: 42.290102)
-Thing.create(city_id: 9409, lng: -71.087885, lat: 42.289922)
-Thing.create(city_id: 9410, lng: -71.131706, lat: 42.290067)
-Thing.create(city_id: 9411, lng: -71.066679, lat: 42.289827)
-Thing.create(city_id: 9412, lng: -71.118027, lat: 42.290001)
-Thing.create(city_id: 9413, lng: -71.055104, lat: 42.289773)
-Thing.create(city_id: 9414, lng: -71.052171, lat: 42.289761)
-Thing.create(city_id: 9415, lng: -71.112676, lat: 42.289974)
-Thing.create(city_id: 9416, lng: -71.046003, lat: 42.289729)
-Thing.create(city_id: 9417, lng: -71.063324, lat: 42.289785)
-Thing.create(city_id: 9418, lng: -71.135229, lat: 42.290035)
-Thing.create(city_id: 9419, lng: -71.115994, lat: 42.289966)
-Thing.create(city_id: 9420, lng: -71.0763, lat: 42.289824)
-Thing.create(city_id: 9421, lng: -71.06437, lat: 42.289772)
-Thing.create(city_id: 9422, lng: -71.039792, lat: 42.289669)
-Thing.create(city_id: 9423, lng: -71.128463, lat: 42.290525)
-Thing.create(city_id: 9424, lng: -71.043063, lat: 42.290173)
-Thing.create(city_id: 9425, lng: -71.130521, lat: 42.289993)
-Thing.create(city_id: 9426, lng: -71.066807, lat: 42.283345)
-Thing.create(city_id: 9427, lng: -71.142316, lat: 42.283588)
-Thing.create(city_id: 9428, lng: -71.13706, lat: 42.283569)
-Thing.create(city_id: 9429, lng: -71.130578, lat: 42.283547)
-Thing.create(city_id: 9430, lng: -71.068658, lat: 42.283323)
-Thing.create(city_id: 9431, lng: -71.155039, lat: 42.283608)
-Thing.create(city_id: 9432, lng: -71.085132, lat: 42.283374)
-Thing.create(city_id: 9433, lng: -71.139287, lat: 42.283556)
-Thing.create(city_id: 9434, lng: -71.084137, lat: 42.283361)
-Thing.create(city_id: 9435, lng: -71.141701, lat: 42.283545)
-Thing.create(city_id: 9436, lng: -71.126341, lat: 42.283491)
-Thing.create(city_id: 9437, lng: -71.082161, lat: 42.283332)
-Thing.create(city_id: 9438, lng: -71.128205, lat: 42.28349)
-Thing.create(city_id: 9439, lng: -71.050663, lat: 42.283212)
-Thing.create(city_id: 9440, lng: -71.07062, lat: 42.283751)
-Thing.create(city_id: 9441, lng: -71.091792, lat: 42.283778)
-Thing.create(city_id: 9442, lng: -71.082761, lat: 42.283727)
-Thing.create(city_id: 9443, lng: -71.1478, lat: 42.283902)
-Thing.create(city_id: 9444, lng: -71.134852, lat: 42.283787)
-Thing.create(city_id: 9445, lng: -71.058541, lat: 42.283464)
-Thing.create(city_id: 9446, lng: -71.153705, lat: 42.283697)
-Thing.create(city_id: 9447, lng: -71.150849, lat: 42.283657)
-Thing.create(city_id: 9448, lng: -71.098715, lat: 42.283376)
-Thing.create(city_id: 9449, lng: -71.140213, lat: 42.283511)
-Thing.create(city_id: 9450, lng: -71.167762, lat: 42.283584)
-Thing.create(city_id: 9451, lng: -71.049585, lat: 42.283176)
-Thing.create(city_id: 9452, lng: -71.07639, lat: 42.283276)
-Thing.create(city_id: 9453, lng: -71.135553, lat: 42.283478)
-Thing.create(city_id: 9454, lng: -71.16489, lat: 42.283552)
-Thing.create(city_id: 9455, lng: -71.064048, lat: 42.283208)
-Thing.create(city_id: 9456, lng: -71.070517, lat: 42.283223)
-Thing.create(city_id: 9457, lng: -71.143628, lat: 42.283448)
-Thing.create(city_id: 9458, lng: -71.056727, lat: 42.283143)
-Thing.create(city_id: 9459, lng: -71.158676, lat: 42.283488)
-Thing.create(city_id: 9460, lng: -71.134144, lat: 42.283398)
-Thing.create(city_id: 9461, lng: -71.129188, lat: 42.283361)
-Thing.create(city_id: 9462, lng: -71.117627, lat: 42.283321)
-Thing.create(city_id: 9463, lng: -71.083203, lat: 42.283198)
-Thing.create(city_id: 9464, lng: -71.090587, lat: 42.283219)
-Thing.create(city_id: 9465, lng: -71.146721, lat: 42.283391)
-Thing.create(city_id: 9466, lng: -71.061493, lat: 42.283092)
-Thing.create(city_id: 9467, lng: -71.156157, lat: 42.283411)
-Thing.create(city_id: 9468, lng: -71.074846, lat: 42.283137)
-Thing.create(city_id: 9469, lng: -71.091679, lat: 42.283191)
-Thing.create(city_id: 9470, lng: -71.156957, lat: 42.283389)
-Thing.create(city_id: 9471, lng: -71.092025, lat: 42.28317)
-Thing.create(city_id: 9472, lng: -71.163312, lat: 42.283397)
-Thing.create(city_id: 9473, lng: -71.131639, lat: 42.283288)
-Thing.create(city_id: 9474, lng: -71.122334, lat: 42.283249)
-Thing.create(city_id: 9475, lng: -71.169393, lat: 42.283391)
-Thing.create(city_id: 9476, lng: -71.159552, lat: 42.283362)
-Thing.create(city_id: 9477, lng: -71.113964, lat: 42.2832)
-Thing.create(city_id: 9478, lng: -71.129742, lat: 42.283237)
-Thing.create(city_id: 9479, lng: -71.113655, lat: 42.283183)
-Thing.create(city_id: 9480, lng: -71.133068, lat: 42.283245)
-Thing.create(city_id: 9481, lng: -71.067866, lat: 42.283018)
-Thing.create(city_id: 9482, lng: -71.052845, lat: 42.282957)
-Thing.create(city_id: 9483, lng: -71.120373, lat: 42.283192)
-Thing.create(city_id: 9484, lng: -71.13513, lat: 42.283235)
-Thing.create(city_id: 9485, lng: -71.161349, lat: 42.283312)
-Thing.create(city_id: 9486, lng: -71.04821, lat: 42.282914)
-Thing.create(city_id: 9487, lng: -71.149143, lat: 42.275902)
-Thing.create(city_id: 9488, lng: -71.150169, lat: 42.275903)
-Thing.create(city_id: 9489, lng: -71.148089, lat: 42.275896)
-Thing.create(city_id: 9490, lng: -71.115658, lat: 42.275771)
-Thing.create(city_id: 9491, lng: -71.093363, lat: 42.275687)
-Thing.create(city_id: 9492, lng: -71.147191, lat: 42.275857)
-Thing.create(city_id: 9493, lng: -71.079551, lat: 42.275624)
-Thing.create(city_id: 9494, lng: -71.096517, lat: 42.275682)
-Thing.create(city_id: 9495, lng: -71.152297, lat: 42.27584)
-Thing.create(city_id: 9496, lng: -71.119643, lat: 42.275726)
-Thing.create(city_id: 9497, lng: -71.075483, lat: 42.275571)
-Thing.create(city_id: 9498, lng: -71.107872, lat: 42.275686)
-Thing.create(city_id: 9499, lng: -71.100384, lat: 42.275641)
-Thing.create(city_id: 9500, lng: -71.077246, lat: 42.275543)
-Thing.create(city_id: 9501, lng: -71.067288, lat: 42.27546)
-Thing.create(city_id: 9502, lng: -71.162966, lat: 42.275781)
-Thing.create(city_id: 9503, lng: -71.094181, lat: 42.275552)
-Thing.create(city_id: 9504, lng: -71.122209, lat: 42.275622)
-Thing.create(city_id: 9505, lng: -71.108559, lat: 42.275567)
-Thing.create(city_id: 9506, lng: -71.1114, lat: 42.275559)
-Thing.create(city_id: 9507, lng: -71.080401, lat: 42.275426)
-Thing.create(city_id: 9508, lng: -71.158811, lat: 42.275679)
-Thing.create(city_id: 9509, lng: -71.061837, lat: 42.275346)
-Thing.create(city_id: 9510, lng: -71.118754, lat: 42.275545)
-Thing.create(city_id: 9511, lng: -71.140294, lat: 42.275595)
-Thing.create(city_id: 9512, lng: -71.127964, lat: 42.275547)
-Thing.create(city_id: 9513, lng: -71.101697, lat: 42.275449)
-Thing.create(city_id: 9514, lng: -71.146348, lat: 42.275569)
-Thing.create(city_id: 9515, lng: -71.122714, lat: 42.275488)
-Thing.create(city_id: 9516, lng: -71.110837, lat: 42.275447)
-Thing.create(city_id: 9517, lng: -71.126631, lat: 42.275483)
-Thing.create(city_id: 9518, lng: -71.090526, lat: 42.275317)
-Thing.create(city_id: 9519, lng: -71.132369, lat: 42.275437)
-Thing.create(city_id: 9520, lng: -71.136338, lat: 42.27544)
-Thing.create(city_id: 9521, lng: -71.137307, lat: 42.275438)
-Thing.create(city_id: 9522, lng: -71.129424, lat: 42.275389)
-Thing.create(city_id: 9523, lng: -71.134617, lat: 42.275396)
-Thing.create(city_id: 9524, lng: -71.153044, lat: 42.275447)
-Thing.create(city_id: 9525, lng: -71.167722, lat: 42.275478)
-Thing.create(city_id: 9526, lng: -71.081386, lat: 42.275194)
-Thing.create(city_id: 9527, lng: -71.161174, lat: 42.275456)
-Thing.create(city_id: 9528, lng: -71.111612, lat: 42.275292)
-Thing.create(city_id: 9529, lng: -71.151748, lat: 42.275419)
-Thing.create(city_id: 9530, lng: -71.133318, lat: 42.275338)
-Thing.create(city_id: 9531, lng: -71.169301, lat: 42.275445)
-Thing.create(city_id: 9532, lng: -71.148395, lat: 42.275373)
-Thing.create(city_id: 9533, lng: -71.170212, lat: 42.275433)
-Thing.create(city_id: 9534, lng: -71.068819, lat: 42.275092)
-Thing.create(city_id: 9535, lng: -71.131027, lat: 42.275283)
-Thing.create(city_id: 9536, lng: -71.149332, lat: 42.275328)
-Thing.create(city_id: 9537, lng: -71.171028, lat: 42.27539)
-Thing.create(city_id: 9538, lng: -71.154695, lat: 42.275329)
-Thing.create(city_id: 9539, lng: -71.125206, lat: 42.275214)
-Thing.create(city_id: 9540, lng: -71.166335, lat: 42.275289)
-Thing.create(city_id: 9541, lng: -71.098614, lat: 42.275072)
-Thing.create(city_id: 9542, lng: -71.17204, lat: 42.275301)
-Thing.create(city_id: 9543, lng: -71.063855, lat: 42.274931)
-Thing.create(city_id: 9544, lng: -71.07571, lat: 42.274968)
-Thing.create(city_id: 9545, lng: -71.121898, lat: 42.275105)
-Thing.create(city_id: 9546, lng: -71.078984, lat: 42.274925)
-Thing.create(city_id: 9547, lng: -71.112516, lat: 42.298866)
-Thing.create(city_id: 9548, lng: -71.141201, lat: 42.298954)
-Thing.create(city_id: 9549, lng: -71.082228, lat: 42.29874)
-Thing.create(city_id: 9550, lng: -71.081203, lat: 42.298731)
-Thing.create(city_id: 9551, lng: -71.069746, lat: 42.298626)
-Thing.create(city_id: 9552, lng: -71.158467, lat: 42.298911)
-Thing.create(city_id: 9553, lng: -71.074457, lat: 42.29863)
-Thing.create(city_id: 9554, lng: -71.075531, lat: 42.298623)
-Thing.create(city_id: 9555, lng: -71.142514, lat: 42.298851)
-Thing.create(city_id: 9556, lng: -71.103328, lat: 42.339334)
-Thing.create(city_id: 9557, lng: -71.104973, lat: 42.338841)
-Thing.create(city_id: 9558, lng: -71.111922, lat: 42.313019)
-Thing.create(city_id: 9559, lng: -71.111024, lat: 42.298604)
-Thing.create(city_id: 9560, lng: -71.116048, lat: 42.298616)
-Thing.create(city_id: 9561, lng: -71.083102, lat: 42.298498)
-Thing.create(city_id: 9562, lng: -71.097871, lat: 42.29855)
-Thing.create(city_id: 9563, lng: -71.101175, lat: 42.292056)
-Thing.create(city_id: 9564, lng: -71.078659, lat: 42.298454)
-Thing.create(city_id: 9565, lng: -71.076762, lat: 42.298442)
-Thing.create(city_id: 9566, lng: -71.08477, lat: 42.298464)
-Thing.create(city_id: 9567, lng: -71.066114, lat: 42.298325)
-Thing.create(city_id: 9568, lng: -71.074983, lat: 42.298357)
-Thing.create(city_id: 9569, lng: -71.073076, lat: 42.298349)
-Thing.create(city_id: 9570, lng: -71.080103, lat: 42.298373)
-Thing.create(city_id: 9571, lng: -71.102034, lat: 42.29844)
-Thing.create(city_id: 9572, lng: -71.074003, lat: 42.298324)
-Thing.create(city_id: 9573, lng: -71.078075, lat: 42.298334)
-Thing.create(city_id: 9574, lng: -71.077407, lat: 42.298321)
-Thing.create(city_id: 9575, lng: -71.099804, lat: 42.298356)
-Thing.create(city_id: 9576, lng: -71.085947, lat: 42.298263)
-Thing.create(city_id: 9577, lng: -71.129807, lat: 42.298412)
-Thing.create(city_id: 9578, lng: -71.071779, lat: 42.29821)
-Thing.create(city_id: 9579, lng: -71.114465, lat: 42.298307)
-Thing.create(city_id: 9580, lng: -71.111684, lat: 42.298282)
-Thing.create(city_id: 9581, lng: -71.103678, lat: 42.339045)
-Thing.create(city_id: 9582, lng: -71.113015, lat: 42.298281)
-Thing.create(city_id: 9583, lng: -71.067203, lat: 42.298092)
-Thing.create(city_id: 9584, lng: -71.100846, lat: 42.298205)
-Thing.create(city_id: 9585, lng: -71.107525, lat: 42.298194)
-Thing.create(city_id: 9586, lng: -71.06515, lat: 42.298012)
-Thing.create(city_id: 9587, lng: -71.172408, lat: 42.29836)
-Thing.create(city_id: 9588, lng: -71.144526, lat: 42.29826)
-Thing.create(city_id: 9589, lng: -71.083961, lat: 42.298007)
-Thing.create(city_id: 9590, lng: -71.086764, lat: 42.298001)
-Thing.create(city_id: 9591, lng: -71.088479, lat: 42.298003)
-Thing.create(city_id: 9592, lng: -71.11679, lat: 42.298094)
-Thing.create(city_id: 9593, lng: -71.080957, lat: 42.297939)
-Thing.create(city_id: 9594, lng: -71.110224, lat: 42.298036)
-Thing.create(city_id: 9595, lng: -71.075967, lat: 42.297876)
-Thing.create(city_id: 9596, lng: -71.081886, lat: 42.297879)
-Thing.create(city_id: 9597, lng: -71.087733, lat: 42.297897)
-Thing.create(city_id: 9598, lng: -71.06823, lat: 42.297795)
-Thing.create(city_id: 9599, lng: -71.113883, lat: 42.298893)
-Thing.create(city_id: 9600, lng: -71.133046, lat: 42.289996)
-Thing.create(city_id: 9601, lng: -71.117019, lat: 42.289943)
-Thing.create(city_id: 9602, lng: -71.050245, lat: 42.289701)
-Thing.create(city_id: 9603, lng: -71.136514, lat: 42.290002)
-Thing.create(city_id: 9604, lng: -71.127862, lat: 42.28996)
-Thing.create(city_id: 9605, lng: -71.048256, lat: 42.289674)
-Thing.create(city_id: 9606, lng: -71.11412, lat: 42.28989)
-Thing.create(city_id: 9607, lng: -71.068174, lat: 42.289723)
-Thing.create(city_id: 9608, lng: -71.146828, lat: 42.289991)
-Thing.create(city_id: 9609, lng: -71.129221, lat: 42.289933)
-Thing.create(city_id: 9610, lng: -71.120898, lat: 42.289903)
-Thing.create(city_id: 9611, lng: -71.149785, lat: 42.289993)
-Thing.create(city_id: 9612, lng: -71.166292, lat: 42.290041)
-Thing.create(city_id: 9613, lng: -71.057126, lat: 42.28967)
-Thing.create(city_id: 9614, lng: -71.047389, lat: 42.289629)
-Thing.create(city_id: 9615, lng: -71.123267, lat: 42.289897)
-Thing.create(city_id: 9616, lng: -71.154112, lat: 42.289992)
-Thing.create(city_id: 9617, lng: -71.070428, lat: 42.289704)
-Thing.create(city_id: 9618, lng: -71.142467, lat: 42.289943)
-Thing.create(city_id: 9619, lng: -71.066108, lat: 42.289676)
-Thing.create(city_id: 9620, lng: -71.059391, lat: 42.289648)
-Thing.create(city_id: 9621, lng: -71.167724, lat: 42.290005)
-Thing.create(city_id: 9622, lng: -71.10943, lat: 42.289802)
-Thing.create(city_id: 9623, lng: -71.148786, lat: 42.289923)
-Thing.create(city_id: 9624, lng: -71.133797, lat: 42.289876)
-Thing.create(city_id: 9625, lng: -71.159978, lat: 42.289951)
-Thing.create(city_id: 9626, lng: -71.062386, lat: 42.289604)
-Thing.create(city_id: 9627, lng: -71.085204, lat: 42.289674)
-Thing.create(city_id: 9628, lng: -71.165594, lat: 42.289927)
-Thing.create(city_id: 9629, lng: -71.157769, lat: 42.289898)
-Thing.create(city_id: 9630, lng: -71.092047, lat: 42.289672)
-Thing.create(city_id: 9631, lng: -71.040672, lat: 42.289474)
-Thing.create(city_id: 9632, lng: -71.077171, lat: 42.289604)
-Thing.create(city_id: 9633, lng: -71.088574, lat: 42.289644)
-Thing.create(city_id: 9634, lng: -71.16199, lat: 42.289882)
-Thing.create(city_id: 9635, lng: -71.159185, lat: 42.289871)
-Thing.create(city_id: 9636, lng: -71.084338, lat: 42.289619)
-Thing.create(city_id: 9637, lng: -71.148269, lat: 42.289827)
-Thing.create(city_id: 9638, lng: -71.138806, lat: 42.289773)
-Thing.create(city_id: 9639, lng: -71.115287, lat: 42.289672)
-Thing.create(city_id: 9640, lng: -71.051277, lat: 42.289419)
-Thing.create(city_id: 9641, lng: -71.145416, lat: 42.289745)
-Thing.create(city_id: 9642, lng: -71.122295, lat: 42.289666)
-Thing.create(city_id: 9643, lng: -71.113384, lat: 42.289618)
-Thing.create(city_id: 9644, lng: -71.069041, lat: 42.289458)
-Thing.create(city_id: 9645, lng: -71.065466, lat: 42.289408)
-Thing.create(city_id: 9646, lng: -71.124378, lat: 42.289603)
-Thing.create(city_id: 9647, lng: -71.151837, lat: 42.289682)
-Thing.create(city_id: 9648, lng: -71.06057, lat: 42.289364)
-Thing.create(city_id: 9649, lng: -71.132105, lat: 42.289578)
-Thing.create(city_id: 9650, lng: -71.073034, lat: 42.289372)
-Thing.create(city_id: 9651, lng: -71.154806, lat: 42.289647)
-Thing.create(city_id: 9652, lng: -71.090373, lat: 42.289415)
-Thing.create(city_id: 9653, lng: -71.078154, lat: 42.289367)
-Thing.create(city_id: 9654, lng: -71.071423, lat: 42.289315)
-Thing.create(city_id: 9655, lng: -71.041376, lat: 42.289167)
-Thing.create(city_id: 9656, lng: -71.137106, lat: 42.289506)
-Thing.create(city_id: 9657, lng: -71.075757, lat: 42.289291)
-Thing.create(city_id: 9658, lng: -71.164479, lat: 42.28958)
-Thing.create(city_id: 9659, lng: -71.130876, lat: 42.289475)
-Thing.create(city_id: 9660, lng: -71.139823, lat: 42.289503)
-Thing.create(city_id: 9661, lng: -71.053957, lat: 42.289198)
-Thing.create(city_id: 9662, lng: -71.055663, lat: 42.289202)
-Thing.create(city_id: 9663, lng: -71.080682, lat: 42.283037)
-Thing.create(city_id: 9664, lng: -71.121504, lat: 42.283171)
-Thing.create(city_id: 9665, lng: -71.118809, lat: 42.283157)
-Thing.create(city_id: 9666, lng: -71.124016, lat: 42.283169)
-Thing.create(city_id: 9667, lng: -71.111769, lat: 42.283128)
-Thing.create(city_id: 9668, lng: -71.084318, lat: 42.283025)
-Thing.create(city_id: 9669, lng: -71.084597, lat: 42.283025)
-Thing.create(city_id: 9670, lng: -71.072459, lat: 42.282963)
-Thing.create(city_id: 9671, lng: -71.05781, lat: 42.282905)
-Thing.create(city_id: 9672, lng: -71.139282, lat: 42.283178)
-Thing.create(city_id: 9673, lng: -71.123215, lat: 42.283119)
-Thing.create(city_id: 9674, lng: -71.071449, lat: 42.282934)
-Thing.create(city_id: 9675, lng: -71.092545, lat: 42.28301)
-Thing.create(city_id: 9676, lng: -71.136716, lat: 42.283157)
-Thing.create(city_id: 9677, lng: -71.152603, lat: 42.283181)
-Thing.create(city_id: 9678, lng: -71.14852, lat: 42.283165)
-Thing.create(city_id: 9679, lng: -71.058717, lat: 42.282853)
-Thing.create(city_id: 9680, lng: -71.07732, lat: 42.282908)
-Thing.create(city_id: 9681, lng: -71.170398, lat: 42.28321)
-Thing.create(city_id: 9682, lng: -71.089225, lat: 42.282946)
-Thing.create(city_id: 9683, lng: -71.168579, lat: 42.283193)
-Thing.create(city_id: 9684, lng: -71.136145, lat: 42.283093)
-Thing.create(city_id: 9685, lng: -71.096618, lat: 42.282957)
-Thing.create(city_id: 9686, lng: -71.086496, lat: 42.28292)
-Thing.create(city_id: 9687, lng: -71.065816, lat: 42.282817)
-Thing.create(city_id: 9688, lng: -71.142913, lat: 42.283078)
-Thing.create(city_id: 9689, lng: -71.115737, lat: 42.282987)
-Thing.create(city_id: 9690, lng: -71.053969, lat: 42.282755)
-Thing.create(city_id: 9691, lng: -71.127068, lat: 42.283012)
-Thing.create(city_id: 9692, lng: -71.165981, lat: 42.283117)
-Thing.create(city_id: 9693, lng: -71.153492, lat: 42.283069)
-Thing.create(city_id: 9694, lng: -71.097202, lat: 42.282877)
-Thing.create(city_id: 9695, lng: -71.140226, lat: 42.283014)
-Thing.create(city_id: 9696, lng: -71.147422, lat: 42.283015)
-Thing.create(city_id: 9697, lng: -71.073381, lat: 42.282764)
-Thing.create(city_id: 9698, lng: -71.144536, lat: 42.283002)
-Thing.create(city_id: 9699, lng: -71.068812, lat: 42.282728)
-Thing.create(city_id: 9700, lng: -71.081281, lat: 42.282774)
-Thing.create(city_id: 9701, lng: -71.0651, lat: 42.282712)
-Thing.create(city_id: 9702, lng: -71.130729, lat: 42.28294)
-Thing.create(city_id: 9703, lng: -71.047265, lat: 42.282636)
-Thing.create(city_id: 9704, lng: -71.157936, lat: 42.283016)
-Thing.create(city_id: 9705, lng: -71.126123, lat: 42.282895)
-Thing.create(city_id: 9706, lng: -71.078232, lat: 42.282725)
-Thing.create(city_id: 9707, lng: -71.098145, lat: 42.28279)
-Thing.create(city_id: 9708, lng: -71.076231, lat: 42.282693)
-Thing.create(city_id: 9709, lng: -71.050928, lat: 42.282588)
-Thing.create(city_id: 9710, lng: -71.145404, lat: 42.282915)
-Thing.create(city_id: 9711, lng: -71.167035, lat: 42.282978)
-Thing.create(city_id: 9712, lng: -71.061938, lat: 42.282621)
-Thing.create(city_id: 9713, lng: -71.138297, lat: 42.282881)
-Thing.create(city_id: 9714, lng: -71.083691, lat: 42.282694)
-Thing.create(city_id: 9715, lng: -71.171533, lat: 42.283409)
-Thing.create(city_id: 9716, lng: -71.162553, lat: 42.283345)
-Thing.create(city_id: 9717, lng: -71.095311, lat: 42.283115)
-Thing.create(city_id: 9718, lng: -71.081881, lat: 42.282679)
-Thing.create(city_id: 9719, lng: -71.16417, lat: 42.282946)
-Thing.create(city_id: 9720, lng: -71.09601, lat: 42.282718)
-Thing.create(city_id: 9721, lng: -71.050216, lat: 42.282546)
-Thing.create(city_id: 9722, lng: -71.164944, lat: 42.275208)
-Thing.create(city_id: 9723, lng: -71.117329, lat: 42.275058)
-Thing.create(city_id: 9724, lng: -71.145542, lat: 42.27514)
-Thing.create(city_id: 9725, lng: -71.161506, lat: 42.275187)
-Thing.create(city_id: 9726, lng: -71.106455, lat: 42.274954)
-Thing.create(city_id: 9727, lng: -71.170885, lat: 42.275156)
-Thing.create(city_id: 9728, lng: -71.162176, lat: 42.275128)
-Thing.create(city_id: 9729, lng: -71.093387, lat: 42.274901)
-Thing.create(city_id: 9730, lng: -71.151066, lat: 42.27508)
-Thing.create(city_id: 9731, lng: -71.122349, lat: 42.274985)
-Thing.create(city_id: 9732, lng: -71.068203, lat: 42.274766)
-Thing.create(city_id: 9733, lng: -71.070006, lat: 42.274773)
-Thing.create(city_id: 9734, lng: -71.167087, lat: 42.27509)
-Thing.create(city_id: 9735, lng: -71.07665, lat: 42.274781)
-Thing.create(city_id: 9736, lng: -71.146704, lat: 42.275017)
-Thing.create(city_id: 9737, lng: -71.141223, lat: 42.274989)
-Thing.create(city_id: 9738, lng: -71.131583, lat: 42.274956)
-Thing.create(city_id: 9739, lng: -71.12745, lat: 42.27494)
-Thing.create(city_id: 9740, lng: -71.082684, lat: 42.274777)
-Thing.create(city_id: 9741, lng: -71.067486, lat: 42.274706)
-Thing.create(city_id: 9742, lng: -71.078177, lat: 42.275377)
-Thing.create(city_id: 9743, lng: -71.160175, lat: 42.275594)
-Thing.create(city_id: 9744, lng: -71.062945, lat: 42.27519)
-Thing.create(city_id: 9745, lng: -71.095629, lat: 42.275223)
-Thing.create(city_id: 9746, lng: -71.12411, lat: 42.275271)
-Thing.create(city_id: 9747, lng: -71.093703, lat: 42.275087)
-Thing.create(city_id: 9748, lng: -71.158321, lat: 42.275226)
-Thing.create(city_id: 9749, lng: -71.119737, lat: 42.274881)
-Thing.create(city_id: 9750, lng: -71.089477, lat: 42.274777)
-Thing.create(city_id: 9751, lng: -71.094749, lat: 42.274782)
-Thing.create(city_id: 9752, lng: -71.091089, lat: 42.274766)
-Thing.create(city_id: 9753, lng: -71.07105, lat: 42.274687)
-Thing.create(city_id: 9754, lng: -71.170106, lat: 42.275013)
-Thing.create(city_id: 9755, lng: -71.092264, lat: 42.274761)
-Thing.create(city_id: 9756, lng: -71.080217, lat: 42.274716)
-Thing.create(city_id: 9757, lng: -71.128588, lat: 42.274861)
-Thing.create(city_id: 9758, lng: -71.102398, lat: 42.274769)
-Thing.create(city_id: 9759, lng: -71.163894, lat: 42.274942)
-Thing.create(city_id: 9760, lng: -71.130318, lat: 42.274833)
-Thing.create(city_id: 9761, lng: -71.101139, lat: 42.274731)
-Thing.create(city_id: 9762, lng: -71.152393, lat: 42.27489)
-Thing.create(city_id: 9763, lng: -71.116174, lat: 42.274763)
-Thing.create(city_id: 9764, lng: -71.11891, lat: 42.274753)
-Thing.create(city_id: 9765, lng: -71.169599, lat: 42.274909)
-Thing.create(city_id: 9766, lng: -71.062559, lat: 42.274546)
-Thing.create(city_id: 9767, lng: -71.116561, lat: 42.274728)
-Thing.create(city_id: 9768, lng: -71.07765, lat: 42.274584)
-Thing.create(city_id: 9769, lng: -71.168511, lat: 42.27488)
-Thing.create(city_id: 9770, lng: -71.072978, lat: 42.274565)
-Thing.create(city_id: 9771, lng: -71.082117, lat: 42.274595)
-Thing.create(city_id: 9772, lng: -71.071951, lat: 42.274557)
-Thing.create(city_id: 9773, lng: -71.138315, lat: 42.274777)
-Thing.create(city_id: 9774, lng: -71.080033, lat: 42.274577)
-Thing.create(city_id: 9775, lng: -71.064731, lat: 42.274507)
-Thing.create(city_id: 9776, lng: -71.109908, lat: 42.274657)
-Thing.create(city_id: 9777, lng: -71.083485, lat: 42.274559)
-Thing.create(city_id: 9778, lng: -71.104674, lat: 42.27463)
-Thing.create(city_id: 9779, lng: -71.147486, lat: 42.274752)
-Thing.create(city_id: 9780, lng: -71.148418, lat: 42.274714)
-Thing.create(city_id: 9781, lng: -71.149223, lat: 42.274702)
-Thing.create(city_id: 9782, lng: -71.070999, lat: 42.274429)
-Thing.create(city_id: 9783, lng: -71.160983, lat: 42.340894)
-Thing.create(city_id: 9784, lng: -71.056502, lat: 42.351288)
-Thing.create(city_id: 9785, lng: -71.160579, lat: 42.341628)
-Thing.create(city_id: 9786, lng: -71.159948, lat: 42.341462)
-Thing.create(city_id: 9787, lng: -71.14909, lat: 42.269299)
-Thing.create(city_id: 9788, lng: -71.149916, lat: 42.270059)
-Thing.create(city_id: 9789, lng: -71.160366, lat: 42.340702)
-Thing.create(city_id: 9790, lng: -71.150372, lat: 42.270857)
-Thing.create(city_id: 9791, lng: -71.07977, lat: 42.28697)
-Thing.create(city_id: 9792, lng: -71.079335, lat: 42.286721)
-Thing.create(city_id: 9793, lng: -71.165228, lat: 42.356942)
-Thing.create(city_id: 9794, lng: -71.166061, lat: 42.356853)
-Thing.create(city_id: 9795, lng: -71.073152, lat: 42.275414)
-Thing.create(city_id: 9796, lng: -71.051935, lat: 42.357253)
-Thing.create(city_id: 9797, lng: -71.166687, lat: 42.356325)
-Thing.create(city_id: 9798, lng: -71.160411, lat: 42.351216)
-Thing.create(city_id: 9799, lng: -71.093698, lat: 42.286497)
-Thing.create(city_id: 9800, lng: -71.09371, lat: 42.293769)
-Thing.create(city_id: 9801, lng: -71.092414, lat: 42.286412)
-Thing.create(city_id: 9802, lng: -71.093121, lat: 42.294415)
-Thing.create(city_id: 9803, lng: -71.093913, lat: 42.287241)
-Thing.create(city_id: 9804, lng: -71.073737, lat: 42.275697)
-Thing.create(city_id: 9805, lng: -71.092646, lat: 42.29516)
-Thing.create(city_id: 9806, lng: -71.051894, lat: 42.357275)
-Thing.create(city_id: 9807, lng: -71.060239, lat: 42.356821)
-Thing.create(city_id: 9808, lng: -71.074548, lat: 42.276241)
-Thing.create(city_id: 9809, lng: -71.075931, lat: 42.276541)
-Thing.create(city_id: 9810, lng: -71.038572, lat: 42.34886)
-Thing.create(city_id: 9811, lng: -71.105531, lat: 42.333684)
-Thing.create(city_id: 9812, lng: -71.092696, lat: 42.285332)
-Thing.create(city_id: 9813, lng: -71.091743, lat: 42.285153)
-Thing.create(city_id: 9814, lng: -71.071653, lat: 42.299952)
-Thing.create(city_id: 9815, lng: -71.05146, lat: 42.359711)
-Thing.create(city_id: 9816, lng: -71.051454, lat: 42.359547)
-Thing.create(city_id: 9817, lng: -71.037714, lat: 42.348493)
-Thing.create(city_id: 9818, lng: -71.063808, lat: 42.297024)
-Thing.create(city_id: 9819, lng: -71.067635, lat: 42.296646)
-Thing.create(city_id: 9820, lng: -71.06456, lat: 42.297456)
-Thing.create(city_id: 9821, lng: -71.065936, lat: 42.29646)
-Thing.create(city_id: 9822, lng: -71.066761, lat: 42.29688)
-Thing.create(city_id: 9823, lng: -71.068727, lat: 42.296341)
-Thing.create(city_id: 9824, lng: -71.065754, lat: 42.299063)
-Thing.create(city_id: 9825, lng: -71.069627, lat: 42.296091)
-Thing.create(city_id: 9826, lng: -71.070814, lat: 42.295771)
-Thing.create(city_id: 9827, lng: -71.067744, lat: 42.298476)
-Thing.create(city_id: 9828, lng: -71.069824, lat: 42.297859)
-Thing.create(city_id: 9829, lng: -71.066696, lat: 42.298782)
-Thing.create(city_id: 9830, lng: -71.070866, lat: 42.300083)
-Thing.create(city_id: 9831, lng: -71.051342, lat: 42.376751)
-Thing.create(city_id: 9832, lng: -71.05997, lat: 42.301623)
-Thing.create(city_id: 9833, lng: -71.057177, lat: 42.37722)
-Thing.create(city_id: 9834, lng: -71.141259, lat: 42.249138)
-Thing.create(city_id: 9835, lng: -71.067359, lat: 42.314853)
-Thing.create(city_id: 9836, lng: -71.062996, lat: 42.322348)
-Thing.create(city_id: 9837, lng: -71.064517, lat: 42.377717)
-Thing.create(city_id: 9838, lng: -71.079655, lat: 42.329962)
-Thing.create(city_id: 9839, lng: -71.097472, lat: 42.319446)
-Thing.create(city_id: 9840, lng: -71.096141, lat: 42.319312)
-Thing.create(city_id: 9841, lng: -71.082143, lat: 42.286563)
-Thing.create(city_id: 9842, lng: -71.051864, lat: 42.3764)
-Thing.create(city_id: 9843, lng: -71.05452, lat: 42.376991)
-Thing.create(city_id: 9844, lng: -71.038244, lat: 42.382647)
-Thing.create(city_id: 9845, lng: -71.077185, lat: 42.384629)
-Thing.create(city_id: 9846, lng: -71.156238, lat: 42.257958)
-Thing.create(city_id: 9847, lng: -71.161116, lat: 42.257879)
-Thing.create(city_id: 9848, lng: -71.161518, lat: 42.257792)
-Thing.create(city_id: 9849, lng: -71.156752, lat: 42.257765)
-Thing.create(city_id: 9850, lng: -71.116704, lat: 42.257628)
-Thing.create(city_id: 9851, lng: -71.126524, lat: 42.25763)
-Thing.create(city_id: 9852, lng: -71.119354, lat: 42.257555)
-Thing.create(city_id: 9853, lng: -71.144925, lat: 42.257633)
-Thing.create(city_id: 9854, lng: -71.113503, lat: 42.25753)
-Thing.create(city_id: 9855, lng: -71.159008, lat: 42.257654)
-Thing.create(city_id: 9856, lng: -71.12159, lat: 42.257535)
-Thing.create(city_id: 9857, lng: -71.118176, lat: 42.257508)
-Thing.create(city_id: 9858, lng: -71.158274, lat: 42.257631)
-Thing.create(city_id: 9859, lng: -71.115875, lat: 42.257444)
-Thing.create(city_id: 9860, lng: -71.160305, lat: 42.257524)
-Thing.create(city_id: 9861, lng: -71.14631, lat: 42.257473)
-Thing.create(city_id: 9862, lng: -71.127171, lat: 42.257408)
-Thing.create(city_id: 9863, lng: -71.123542, lat: 42.25734)
-Thing.create(city_id: 9864, lng: -71.148194, lat: 42.257349)
-Thing.create(city_id: 9865, lng: -71.122501, lat: 42.257183)
-Thing.create(city_id: 9866, lng: -71.121163, lat: 42.257168)
-Thing.create(city_id: 9867, lng: -71.128154, lat: 42.257154)
-Thing.create(city_id: 9868, lng: -71.125255, lat: 42.257116)
-Thing.create(city_id: 9869, lng: -71.118957, lat: 42.257068)
-Thing.create(city_id: 9870, lng: -71.112294, lat: 42.256992)
-Thing.create(city_id: 9871, lng: -71.114829, lat: 42.259401)
-Thing.create(city_id: 9872, lng: -71.12913, lat: 42.259342)
-Thing.create(city_id: 9873, lng: -71.130442, lat: 42.259157)
-Thing.create(city_id: 9874, lng: -71.159553, lat: 42.259087)
-Thing.create(city_id: 9875, lng: -71.128527, lat: 42.258696)
-Thing.create(city_id: 9876, lng: -71.126969, lat: 42.258636)
-Thing.create(city_id: 9877, lng: -71.160215, lat: 42.258574)
-Thing.create(city_id: 9878, lng: -71.122573, lat: 42.25817)
-Thing.create(city_id: 9879, lng: -71.128349, lat: 42.258057)
-Thing.create(city_id: 9880, lng: -71.156064, lat: 42.257131)
-Thing.create(city_id: 9881, lng: -71.159685, lat: 42.257114)
-Thing.create(city_id: 9882, lng: -71.1175, lat: 42.256933)
-Thing.create(city_id: 9883, lng: -71.118876, lat: 42.25693)
-Thing.create(city_id: 9884, lng: -71.120118, lat: 42.256923)
-Thing.create(city_id: 9885, lng: -71.157514, lat: 42.256999)
-Thing.create(city_id: 9886, lng: -71.114035, lat: 42.25683)
-Thing.create(city_id: 9887, lng: -71.158748, lat: 42.256944)
-Thing.create(city_id: 9888, lng: -71.140927, lat: 42.256877)
-Thing.create(city_id: 9889, lng: -71.126643, lat: 42.256828)
-Thing.create(city_id: 9890, lng: -71.142111, lat: 42.256797)
-Thing.create(city_id: 9891, lng: -71.130297, lat: 42.256754)
-Thing.create(city_id: 9892, lng: -71.147159, lat: 42.256805)
-Thing.create(city_id: 9893, lng: -71.121888, lat: 42.256717)
-Thing.create(city_id: 9894, lng: -71.144539, lat: 42.256786)
-Thing.create(city_id: 9895, lng: -71.122669, lat: 42.256631)
-Thing.create(city_id: 9896, lng: -71.139636, lat: 42.256594)
-Thing.create(city_id: 9897, lng: -71.146515, lat: 42.25661)
-Thing.create(city_id: 9898, lng: -71.16033, lat: 42.256625)
-Thing.create(city_id: 9899, lng: -71.111112, lat: 42.256454)
-Thing.create(city_id: 9900, lng: -71.127497, lat: 42.256498)
-Thing.create(city_id: 9901, lng: -71.12827, lat: 42.256482)
-Thing.create(city_id: 9902, lng: -71.119589, lat: 42.256452)
-Thing.create(city_id: 9903, lng: -71.15944, lat: 42.256533)
-Thing.create(city_id: 9904, lng: -71.123846, lat: 42.256415)
-Thing.create(city_id: 9905, lng: -71.112998, lat: 42.256368)
-Thing.create(city_id: 9906, lng: -71.140461, lat: 42.256445)
-Thing.create(city_id: 9907, lng: -71.121322, lat: 42.256308)
-Thing.create(city_id: 9908, lng: -71.077554, lat: 42.329882)
-Thing.create(city_id: 9909, lng: -71.077863, lat: 42.330565)
-Thing.create(city_id: 9910, lng: -71.076981, lat: 42.33021)
-Thing.create(city_id: 9911, lng: -71.126419, lat: 42.249462)
-Thing.create(city_id: 9912, lng: -71.072213, lat: 42.308678)
-Thing.create(city_id: 9913, lng: -71.126893, lat: 42.28241)
-Thing.create(city_id: 9914, lng: -71.074492, lat: 42.314951)
-Thing.create(city_id: 9915, lng: -71.073075, lat: 42.308121)
-Thing.create(city_id: 9916, lng: -71.060275, lat: 42.352636)
-Thing.create(city_id: 9917, lng: -71.118316, lat: 42.310363)
-Thing.create(city_id: 9918, lng: -71.118774, lat: 42.311061)
-Thing.create(city_id: 9919, lng: -71.117833, lat: 42.309628)
-Thing.create(city_id: 9920, lng: -71.117463, lat: 42.30887)
-Thing.create(city_id: 9921, lng: -71.07051, lat: 42.307942)
-Thing.create(city_id: 9922, lng: -71.063576, lat: 42.332517)
-Thing.create(city_id: 9923, lng: -71.068834, lat: 42.272286)
-Thing.create(city_id: 9924, lng: -71.057517, lat: 42.360742)
-Thing.create(city_id: 9925, lng: -71.157138, lat: 42.26362)
-Thing.create(city_id: 9926, lng: -71.156428, lat: 42.262989)
-Thing.create(city_id: 9927, lng: -71.064976, lat: 42.332764)
-Thing.create(city_id: 9928, lng: -71.140602, lat: 42.249024)
-Thing.create(city_id: 9929, lng: -71.141757, lat: 42.249429)
-Thing.create(city_id: 9930, lng: -71.14063, lat: 42.249618)
-Thing.create(city_id: 9931, lng: -71.014634, lat: 42.383279)
-Thing.create(city_id: 9932, lng: -71.064087, lat: 42.333123)
-Thing.create(city_id: 9933, lng: -71.151466, lat: 42.270467)
-Thing.create(city_id: 9934, lng: -71.011772, lat: 42.387364)
-Thing.create(city_id: 9935, lng: -71.064507, lat: 42.332093)
-Thing.create(city_id: 9936, lng: -71.064691, lat: 42.331192)
-Thing.create(city_id: 9937, lng: -71.00565, lat: 42.3876)
-Thing.create(city_id: 9938, lng: -71.06566, lat: 42.331482)
-Thing.create(city_id: 9939, lng: -71.053539, lat: 42.294132)
-Thing.create(city_id: 9940, lng: -71.006569, lat: 42.387574)
-Thing.create(city_id: 9941, lng: -71.005395, lat: 42.387225)
-Thing.create(city_id: 9942, lng: -71.008563, lat: 42.387594)
-Thing.create(city_id: 9943, lng: -71.00437, lat: 42.387369)
-Thing.create(city_id: 9944, lng: -71.05497, lat: 42.344913)
-Thing.create(city_id: 9945, lng: -71.101017, lat: 42.344717)
-Thing.create(city_id: 9946, lng: -71.00775, lat: 42.387149)
-Thing.create(city_id: 9947, lng: -71.063221, lat: 42.377355)
-Thing.create(city_id: 9948, lng: -71.006216, lat: 42.386962)
-Thing.create(city_id: 9949, lng: -71.055345, lat: 42.344295)
-Thing.create(city_id: 9950, lng: -71.151027, lat: 42.270087)
-Thing.create(city_id: 9951, lng: -71.053446, lat: 42.345319)
-Thing.create(city_id: 9952, lng: -71.054297, lat: 42.34568)
-Thing.create(city_id: 9953, lng: -71.05399, lat: 42.346188)
-Thing.create(city_id: 9954, lng: -71.100355, lat: 42.344747)
-Thing.create(city_id: 9955, lng: -71.095807, lat: 42.318398)
-Thing.create(city_id: 9956, lng: -71.054544, lat: 42.345657)
-Thing.create(city_id: 9957, lng: -71.055011, lat: 42.344487)
-Thing.create(city_id: 9958, lng: -71.101249, lat: 42.343735)
-Thing.create(city_id: 9959, lng: -71.053426, lat: 42.345716)
-Thing.create(city_id: 9960, lng: -71.100508, lat: 42.343944)
-Thing.create(city_id: 9961, lng: -71.04185, lat: 42.370937)
-Thing.create(city_id: 9962, lng: -71.124875, lat: 42.290587)
-Thing.create(city_id: 9963, lng: -71.041728, lat: 42.369967)
-Thing.create(city_id: 9964, lng: -71.029019, lat: 42.365764)
-Thing.create(city_id: 9965, lng: -71.008719, lat: 42.386953)
-Thing.create(city_id: 9966, lng: -71.042542, lat: 42.37139)
-Thing.create(city_id: 9967, lng: -71.042623, lat: 42.370214)
-Thing.create(city_id: 9968, lng: -71.007053, lat: 42.38682)
-Thing.create(city_id: 9969, lng: -71.041523, lat: 42.366476)
-Thing.create(city_id: 9970, lng: -71.043448, lat: 42.3712)
-Thing.create(city_id: 9971, lng: -71.043358, lat: 42.370523)
-Thing.create(city_id: 9972, lng: -71.040762, lat: 42.370219)
-Thing.create(city_id: 9973, lng: -71.04201, lat: 42.369943)
-Thing.create(city_id: 9974, lng: -71.041306, lat: 42.36964)
-Thing.create(city_id: 9975, lng: -71.040649, lat: 42.369361)
-Thing.create(city_id: 9976, lng: -71.041498, lat: 42.368792)
-Thing.create(city_id: 9977, lng: -71.041158, lat: 42.366937)
-Thing.create(city_id: 9978, lng: -71.042501, lat: 42.368926)
-Thing.create(city_id: 9979, lng: -71.041252, lat: 42.370762)
-Thing.create(city_id: 9980, lng: -71.042712, lat: 42.370993)
-Thing.create(city_id: 9981, lng: -71.037142, lat: 42.371181)
-Thing.create(city_id: 9982, lng: -71.036589, lat: 42.370995)
-Thing.create(city_id: 9983, lng: -71.040202, lat: 42.370634)
-Thing.create(city_id: 9984, lng: -71.039047, lat: 42.370643)
-Thing.create(city_id: 9985, lng: -71.037898, lat: 42.370534)
-Thing.create(city_id: 9986, lng: -71.039518, lat: 42.370339)
-Thing.create(city_id: 9987, lng: -71.037323, lat: 42.370306)
-Thing.create(city_id: 9988, lng: -71.039212, lat: 42.368228)
-Thing.create(city_id: 9989, lng: -71.038078, lat: 42.369709)
-Thing.create(city_id: 9990, lng: -71.039595, lat: 42.369487)
-Thing.create(city_id: 9991, lng: -71.038976, lat: 42.369461)
-Thing.create(city_id: 9992, lng: -71.039441, lat: 42.368826)
-Thing.create(city_id: 9993, lng: -71.037183, lat: 42.369317)
-Thing.create(city_id: 9994, lng: -71.038493, lat: 42.369135)
-Thing.create(city_id: 9995, lng: -71.036446, lat: 42.368992)
-Thing.create(city_id: 9996, lng: -71.040026, lat: 42.368912)
-Thing.create(city_id: 9997, lng: -71.037576, lat: 42.368708)
-Thing.create(city_id: 9998, lng: -71.035511, lat: 42.368596)
-Thing.create(city_id: 9999, lng: -71.038777, lat: 42.368533)
-Thing.create(city_id: 10000, lng: -71.036663, lat: 42.368412)
-Thing.create(city_id: 10001, lng: -71.034898, lat: 42.368323)
-Thing.create(city_id: 10002, lng: -71.038099, lat: 42.368238)
-Thing.create(city_id: 10003, lng: -71.03573, lat: 42.368003)
-Thing.create(city_id: 10004, lng: -71.033913, lat: 42.367888)
-Thing.create(city_id: 10005, lng: -71.03946, lat: 42.367908)
-Thing.create(city_id: 10006, lng: -71.03486, lat: 42.367623)
-Thing.create(city_id: 10007, lng: -71.039699, lat: 42.367596)
-Thing.create(city_id: 10008, lng: -71.032974, lat: 42.367483)
-Thing.create(city_id: 10009, lng: -71.040336, lat: 42.367319)
-Thing.create(city_id: 10010, lng: -71.033896, lat: 42.367203)
-Thing.create(city_id: 10011, lng: -71.039759, lat: 42.367061)
-Thing.create(city_id: 10012, lng: -71.03193, lat: 42.367028)
-Thing.create(city_id: 10013, lng: -71.053775, lat: 42.360179)
-Thing.create(city_id: 10014, lng: -71.053622, lat: 42.360165)
-Thing.create(city_id: 10015, lng: -71.106017, lat: 42.309415)
-Thing.create(city_id: 10016, lng: -71.077438, lat: 42.314857)
-Thing.create(city_id: 10017, lng: -71.053694, lat: 42.359329)
-Thing.create(city_id: 10018, lng: -71.054917, lat: 42.359175)
-Thing.create(city_id: 10019, lng: -71.05704, lat: 42.348355)
-Thing.create(city_id: 10020, lng: -71.059122, lat: 42.345726)
-Thing.create(city_id: 10021, lng: -71.054917, lat: 42.359173)
-Thing.create(city_id: 10022, lng: -71.05638, lat: 42.358938)
-Thing.create(city_id: 10023, lng: -71.056889, lat: 42.358873)
-Thing.create(city_id: 10024, lng: -71.053888, lat: 42.358819)
-Thing.create(city_id: 10025, lng: -71.057738, lat: 42.358816)
-Thing.create(city_id: 10026, lng: -71.061498, lat: 42.357786)
-Thing.create(city_id: 10027, lng: -71.061481, lat: 42.356513)
-Thing.create(city_id: 10028, lng: -71.056177, lat: 42.356188)
-Thing.create(city_id: 10029, lng: -71.056471, lat: 42.355504)
-Thing.create(city_id: 10030, lng: -71.05523, lat: 42.35509)
-Thing.create(city_id: 10031, lng: -71.064095, lat: 42.36106)
-Thing.create(city_id: 10032, lng: -71.063651, lat: 42.361045)
-Thing.create(city_id: 10033, lng: -71.05545, lat: 42.361005)
-Thing.create(city_id: 10034, lng: -71.065024, lat: 42.361031)
-Thing.create(city_id: 10035, lng: -71.065968, lat: 42.361028)
-Thing.create(city_id: 10036, lng: -71.057017, lat: 42.360984)
-Thing.create(city_id: 10037, lng: -71.066894, lat: 42.361004)
-Thing.create(city_id: 10038, lng: -71.062759, lat: 42.360974)
-Thing.create(city_id: 10039, lng: -71.066328, lat: 42.360987)
-Thing.create(city_id: 10040, lng: -71.061953, lat: 42.360967)
-Thing.create(city_id: 10041, lng: -71.062027, lat: 42.360963)
-Thing.create(city_id: 10042, lng: -71.063633, lat: 42.360852)
-Thing.create(city_id: 10043, lng: -71.055643, lat: 42.360776)
-Thing.create(city_id: 10044, lng: -71.060563, lat: 42.360772)
-Thing.create(city_id: 10045, lng: -71.05438, lat: 42.360677)
-Thing.create(city_id: 10046, lng: -71.053844, lat: 42.360659)
-Thing.create(city_id: 10047, lng: -71.054965, lat: 42.360624)
-Thing.create(city_id: 10048, lng: -71.056731, lat: 42.360618)
-Thing.create(city_id: 10049, lng: -71.055933, lat: 42.360598)
-Thing.create(city_id: 10050, lng: -71.065064, lat: 42.360597)
-Thing.create(city_id: 10051, lng: -71.065963, lat: 42.360539)
-Thing.create(city_id: 10052, lng: -71.064583, lat: 42.360529)
-Thing.create(city_id: 10053, lng: -71.05707, lat: 42.360476)
-Thing.create(city_id: 10054, lng: -71.054824, lat: 42.360443)
-Thing.create(city_id: 10055, lng: -71.060684, lat: 42.360463)
-Thing.create(city_id: 10056, lng: -71.063012, lat: 42.360468)
-Thing.create(city_id: 10057, lng: -71.056326, lat: 42.360406)
-Thing.create(city_id: 10058, lng: -71.061475, lat: 42.360421)
-Thing.create(city_id: 10059, lng: -71.053785, lat: 42.360367)
-Thing.create(city_id: 10060, lng: -71.057435, lat: 42.360365)
-Thing.create(city_id: 10061, lng: -71.055673, lat: 42.360358)
-Thing.create(city_id: 10062, lng: -71.056113, lat: 42.360323)
-Thing.create(city_id: 10063, lng: -71.061343, lat: 42.36033)
-Thing.create(city_id: 10064, lng: -71.063995, lat: 42.360313)
-Thing.create(city_id: 10065, lng: -71.066326, lat: 42.360302)
-Thing.create(city_id: 10066, lng: -71.067005, lat: 42.360277)
-Thing.create(city_id: 10067, lng: -71.063594, lat: 42.36024)
-Thing.create(city_id: 10068, lng: -71.117639, lat: 42.256292)
-Thing.create(city_id: 10069, lng: -71.118287, lat: 42.256282)
-Thing.create(city_id: 10070, lng: -71.120564, lat: 42.256229)
-Thing.create(city_id: 10071, lng: -71.158022, lat: 42.256331)
-Thing.create(city_id: 10072, lng: -71.126075, lat: 42.256224)
-Thing.create(city_id: 10073, lng: -71.131631, lat: 42.256236)
-Thing.create(city_id: 10074, lng: -71.156801, lat: 42.256307)
-Thing.create(city_id: 10075, lng: -71.113385, lat: 42.256132)
-Thing.create(city_id: 10076, lng: -71.130809, lat: 42.256154)
-Thing.create(city_id: 10077, lng: -71.122362, lat: 42.256076)
-Thing.create(city_id: 10078, lng: -71.138824, lat: 42.256109)
-Thing.create(city_id: 10079, lng: -71.15776, lat: 42.256118)
-Thing.create(city_id: 10080, lng: -71.123142, lat: 42.255899)
-Thing.create(city_id: 10081, lng: -71.132425, lat: 42.255892)
-Thing.create(city_id: 10082, lng: -71.158771, lat: 42.25597)
-Thing.create(city_id: 10083, lng: -71.127644, lat: 42.255867)
-Thing.create(city_id: 10084, lng: -71.11219, lat: 42.25581)
-Thing.create(city_id: 10085, lng: -71.140095, lat: 42.25589)
-Thing.create(city_id: 10086, lng: -71.121396, lat: 42.255827)
-Thing.create(city_id: 10087, lng: -71.12684, lat: 42.255838)
-Thing.create(city_id: 10088, lng: -71.141092, lat: 42.25587)
-Thing.create(city_id: 10089, lng: -71.143689, lat: 42.255852)
-Thing.create(city_id: 10090, lng: -71.124891, lat: 42.255778)
-Thing.create(city_id: 10091, lng: -71.142139, lat: 42.255806)
-Thing.create(city_id: 10092, lng: -71.157413, lat: 42.255835)
-Thing.create(city_id: 10093, lng: -71.118989, lat: 42.255695)
-Thing.create(city_id: 10094, lng: -71.119971, lat: 42.25568)
-Thing.create(city_id: 10095, lng: -71.124021, lat: 42.25565)
-Thing.create(city_id: 10096, lng: -71.142818, lat: 42.255696)
-Thing.create(city_id: 10097, lng: -71.114344, lat: 42.255554)
-Thing.create(city_id: 10098, lng: -71.110334, lat: 42.255461)
-Thing.create(city_id: 10099, lng: -71.139375, lat: 42.255521)
-Thing.create(city_id: 10100, lng: -71.141694, lat: 42.255502)
-Thing.create(city_id: 10101, lng: -71.128849, lat: 42.25546)
-Thing.create(city_id: 10102, lng: -71.125946, lat: 42.255388)
-Thing.create(city_id: 10103, lng: -71.158125, lat: 42.255432)
-Thing.create(city_id: 10104, lng: -71.113119, lat: 42.255274)
-Thing.create(city_id: 10105, lng: -71.126901, lat: 42.255306)
-Thing.create(city_id: 10106, lng: -71.12328, lat: 42.255235)
-Thing.create(city_id: 10107, lng: -71.110028, lat: 42.255179)
-Thing.create(city_id: 10108, lng: -71.133031, lat: 42.255237)
-Thing.create(city_id: 10109, lng: -71.110816, lat: 42.255133)
-Thing.create(city_id: 10110, lng: -71.124382, lat: 42.255142)
-Thing.create(city_id: 10111, lng: -71.119674, lat: 42.255091)
-Thing.create(city_id: 10112, lng: -71.140728, lat: 42.255126)
-Thing.create(city_id: 10113, lng: -71.144581, lat: 42.255121)
-Thing.create(city_id: 10114, lng: -71.112226, lat: 42.254992)
-Thing.create(city_id: 10115, lng: -71.127833, lat: 42.255024)
-Thing.create(city_id: 10116, lng: -71.115214, lat: 42.254923)
-Thing.create(city_id: 10117, lng: -71.122394, lat: 42.254942)
-Thing.create(city_id: 10118, lng: -71.125132, lat: 42.254946)
-Thing.create(city_id: 10119, lng: -71.121443, lat: 42.254898)
-Thing.create(city_id: 10120, lng: -71.142506, lat: 42.254922)
-Thing.create(city_id: 10121, lng: -71.124169, lat: 42.25486)
-Thing.create(city_id: 10122, lng: -71.113987, lat: 42.254774)
-Thing.create(city_id: 10123, lng: -71.135742, lat: 42.254794)
-Thing.create(city_id: 10124, lng: -71.138201, lat: 42.254714)
-Thing.create(city_id: 10125, lng: -71.119526, lat: 42.254629)
-Thing.create(city_id: 10126, lng: -71.127523, lat: 42.254589)
-Thing.create(city_id: 10127, lng: -71.126184, lat: 42.254584)
-Thing.create(city_id: 10128, lng: -71.133625, lat: 42.25459)
-Thing.create(city_id: 10129, lng: -71.138801, lat: 42.254572)
-Thing.create(city_id: 10130, lng: -71.124672, lat: 42.256406)
-Thing.create(city_id: 10131, lng: -71.019316, lat: 42.383666)
-Thing.create(city_id: 10132, lng: -71.058685, lat: 42.322259)
-Thing.create(city_id: 10133, lng: -71.065205, lat: 42.324958)
-Thing.create(city_id: 10134, lng: -71.048933, lat: 42.331407)
-Thing.create(city_id: 10135, lng: -71.038557, lat: 42.315662)
-Thing.create(city_id: 10136, lng: -71.060298, lat: 42.322233)
-Thing.create(city_id: 10137, lng: -71.039901, lat: 42.37641)
-Thing.create(city_id: 10138, lng: -71.047453, lat: 42.311006)
-Thing.create(city_id: 10139, lng: -71.061183, lat: 42.322203)
-Thing.create(city_id: 10140, lng: -71.067876, lat: 42.317291)
-Thing.create(city_id: 10141, lng: -71.046387, lat: 42.315556)
-Thing.create(city_id: 10142, lng: -71.051005, lat: 42.332695)
-Thing.create(city_id: 10143, lng: -71.034966, lat: 42.314568)
-Thing.create(city_id: 10144, lng: -71.017735, lat: 42.383614)
-Thing.create(city_id: 10145, lng: -71.044116, lat: 42.334665)
-Thing.create(city_id: 10146, lng: -71.047019, lat: 42.316389)
-Thing.create(city_id: 10147, lng: -71.01343, lat: 42.385099)
-Thing.create(city_id: 10148, lng: -71.053165, lat: 42.324626)
-Thing.create(city_id: 10149, lng: -71.05421, lat: 42.317633)
-Thing.create(city_id: 10150, lng: -71.066644, lat: 42.322205)
-Thing.create(city_id: 10151, lng: -71.05802, lat: 42.322854)
-Thing.create(city_id: 10152, lng: -71.037819, lat: 42.315163)
-Thing.create(city_id: 10153, lng: -71.034094, lat: 42.314019)
-Thing.create(city_id: 10154, lng: -71.056535, lat: 42.31982)
-Thing.create(city_id: 10155, lng: -71.067341, lat: 42.375244)
-Thing.create(city_id: 10156, lng: -71.052554, lat: 42.324844)
-Thing.create(city_id: 10157, lng: -71.055815, lat: 42.321555)
-Thing.create(city_id: 10158, lng: -71.068623, lat: 42.318449)
-Thing.create(city_id: 10159, lng: -71.054427, lat: 42.318923)
-Thing.create(city_id: 10160, lng: -71.067163, lat: 42.316895)
-Thing.create(city_id: 10161, lng: -71.063488, lat: 42.324406)
-Thing.create(city_id: 10162, lng: -71.055012, lat: 42.321243)
-Thing.create(city_id: 10163, lng: -71.068435, lat: 42.31668)
-Thing.create(city_id: 10164, lng: -71.029312, lat: 42.335861)
-Thing.create(city_id: 10165, lng: -71.054284, lat: 42.31982)
-Thing.create(city_id: 10166, lng: -71.052517, lat: 42.324021)
-Thing.create(city_id: 10167, lng: -71.006182, lat: 42.391388)
-Thing.create(city_id: 10168, lng: -71.06455, lat: 42.381261)
-Thing.create(city_id: 10169, lng: -71.046636, lat: 42.338986)
-Thing.create(city_id: 10170, lng: -71.054026, lat: 42.320981)
-Thing.create(city_id: 10171, lng: -71.05474, lat: 42.317732)
-Thing.create(city_id: 10172, lng: -71.054718, lat: 42.320453)
-Thing.create(city_id: 10173, lng: -71.052876, lat: 42.331628)
-Thing.create(city_id: 10174, lng: -71.055783, lat: 42.319938)
-Thing.create(city_id: 10175, lng: -71.046133, lat: 42.335689)
-Thing.create(city_id: 10176, lng: -71.055269, lat: 42.319737)
-Thing.create(city_id: 10177, lng: -71.056247, lat: 42.336465)
-Thing.create(city_id: 10178, lng: -71.020203, lat: 42.38185)
-Thing.create(city_id: 10179, lng: -71.054766, lat: 42.317165)
-Thing.create(city_id: 10180, lng: -71.049839, lat: 42.320358)
-Thing.create(city_id: 10181, lng: -71.055814, lat: 42.317368)
-Thing.create(city_id: 10182, lng: -71.047977, lat: 42.319939)
-Thing.create(city_id: 10183, lng: -71.035215, lat: 42.376977)
-Thing.create(city_id: 10184, lng: -71.055793, lat: 42.316798)
-Thing.create(city_id: 10185, lng: -71.06416, lat: 42.316717)
-Thing.create(city_id: 10186, lng: -71.055439, lat: 42.318181)
-Thing.create(city_id: 10187, lng: -71.053994, lat: 42.318494)
-Thing.create(city_id: 10188, lng: -71.041425, lat: 42.333919)
-Thing.create(city_id: 10189, lng: -71.051477, lat: 42.321002)
-Thing.create(city_id: 10190, lng: -71.05382, lat: 42.320384)
-Thing.create(city_id: 10191, lng: -71.12917, lat: 42.363529)
-Thing.create(city_id: 10192, lng: -71.038521, lat: 42.367521)
-Thing.create(city_id: 10193, lng: -71.038723, lat: 42.367077)
-Thing.create(city_id: 10194, lng: -71.03777, lat: 42.367129)
-Thing.create(city_id: 10195, lng: -71.038927, lat: 42.366706)
-Thing.create(city_id: 10196, lng: -71.056801, lat: 42.332385)
-Thing.create(city_id: 10197, lng: -71.0389, lat: 42.367579)
-Thing.create(city_id: 10198, lng: -71.120009, lat: 42.312957)
-Thing.create(city_id: 10199, lng: -71.128365, lat: 42.364125)
-Thing.create(city_id: 10200, lng: -71.127572, lat: 42.364709)
-Thing.create(city_id: 10201, lng: -71.029707, lat: 42.366062)
-Thing.create(city_id: 10202, lng: -71.042887, lat: 42.371816)
-Thing.create(city_id: 10203, lng: -71.10223, lat: 42.33499)
-Thing.create(city_id: 10204, lng: -71.101012, lat: 42.335405)
-Thing.create(city_id: 10205, lng: -71.033193, lat: 42.376299)
-Thing.create(city_id: 10206, lng: -71.124813, lat: 42.368524)
-Thing.create(city_id: 10207, lng: -71.042266, lat: 42.371735)
-Thing.create(city_id: 10208, lng: -71.125813, lat: 42.368946)
-Thing.create(city_id: 10209, lng: -71.126501, lat: 42.369435)
-Thing.create(city_id: 10210, lng: -71.11973, lat: 42.312376)
-Thing.create(city_id: 10211, lng: -71.031019, lat: 42.366633)
-Thing.create(city_id: 10212, lng: -71.030487, lat: 42.366399)
-Thing.create(city_id: 10213, lng: -71.032857, lat: 42.375699)
-Thing.create(city_id: 10214, lng: -71.041079, lat: 42.372091)
-Thing.create(city_id: 10215, lng: -71.038238, lat: 42.376725)
-Thing.create(city_id: 10216, lng: -71.036094, lat: 42.376639)
-Thing.create(city_id: 10217, lng: -71.031992, lat: 42.376447)
-Thing.create(city_id: 10218, lng: -71.031139, lat: 42.376344)
-Thing.create(city_id: 10219, lng: -71.037007, lat: 42.376314)
-Thing.create(city_id: 10220, lng: -71.030736, lat: 42.375973)
-Thing.create(city_id: 10221, lng: -71.031792, lat: 42.375788)
-Thing.create(city_id: 10222, lng: -71.033917, lat: 42.37567)
-Thing.create(city_id: 10223, lng: -71.031465, lat: 42.37537)
-Thing.create(city_id: 10224, lng: -71.032573, lat: 42.37513)
-Thing.create(city_id: 10225, lng: -71.034351, lat: 42.37504)
-Thing.create(city_id: 10226, lng: -71.055696, lat: 42.331794)
-Thing.create(city_id: 10227, lng: -71.035117, lat: 42.374639)
-Thing.create(city_id: 10228, lng: -71.033415, lat: 42.37439)
-Thing.create(city_id: 10229, lng: -71.039498, lat: 42.374083)
-Thing.create(city_id: 10230, lng: -71.033887, lat: 42.37398)
-Thing.create(city_id: 10231, lng: -71.03596, lat: 42.373914)
-Thing.create(city_id: 10232, lng: -71.038983, lat: 42.373954)
-Thing.create(city_id: 10233, lng: -71.038455, lat: 42.373868)
-Thing.create(city_id: 10234, lng: -71.034762, lat: 42.373466)
-Thing.create(city_id: 10235, lng: -71.035548, lat: 42.373448)
-Thing.create(city_id: 10236, lng: -71.033691, lat: 42.373432)
-Thing.create(city_id: 10237, lng: -71.054093, lat: 42.332956)
-Thing.create(city_id: 10238, lng: -71.055234, lat: 42.33286)
-Thing.create(city_id: 10239, lng: -71.056876, lat: 42.318564)
-Thing.create(city_id: 10240, lng: -71.057244, lat: 42.332777)
-Thing.create(city_id: 10241, lng: -71.054391, lat: 42.331486)
-Thing.create(city_id: 10242, lng: -71.054427, lat: 42.33256)
-Thing.create(city_id: 10243, lng: -71.055385, lat: 42.33226)
-Thing.create(city_id: 10244, lng: -71.055902, lat: 42.330754)
-Thing.create(city_id: 10245, lng: -71.056536, lat: 42.330978)
-Thing.create(city_id: 10246, lng: -71.056289, lat: 42.331503)
-Thing.create(city_id: 10247, lng: -71.057067, lat: 42.330961)
-Thing.create(city_id: 10248, lng: -71.070184, lat: 42.311439)
-Thing.create(city_id: 10249, lng: -71.055252, lat: 42.330309)
-Thing.create(city_id: 10250, lng: -71.054291, lat: 42.330786)
-Thing.create(city_id: 10251, lng: -71.102881, lat: 42.273191)
-Thing.create(city_id: 10252, lng: -71.142982, lat: 42.273322)
-Thing.create(city_id: 10253, lng: -71.107959, lat: 42.273204)
-Thing.create(city_id: 10254, lng: -71.129079, lat: 42.273268)
-Thing.create(city_id: 10255, lng: -71.164857, lat: 42.273376)
-Thing.create(city_id: 10256, lng: -71.098213, lat: 42.273159)
-Thing.create(city_id: 10257, lng: -71.070639, lat: 42.273046)
-Thing.create(city_id: 10258, lng: -71.094841, lat: 42.27311)
-Thing.create(city_id: 10259, lng: -71.07365, lat: 42.273023)
-Thing.create(city_id: 10260, lng: -71.147494, lat: 42.273261)
-Thing.create(city_id: 10261, lng: -71.124093, lat: 42.273179)
-Thing.create(city_id: 10262, lng: -71.08019, lat: 42.273027)
-Thing.create(city_id: 10263, lng: -71.065013, lat: 42.272958)
-Thing.create(city_id: 10264, lng: -71.100791, lat: 42.273035)
-Thing.create(city_id: 10265, lng: -71.101701, lat: 42.273024)
-Thing.create(city_id: 10266, lng: -71.122383, lat: 42.273091)
-Thing.create(city_id: 10267, lng: -71.12539, lat: 42.273075)
-Thing.create(city_id: 10268, lng: -71.074503, lat: 42.272895)
-Thing.create(city_id: 10269, lng: -71.143804, lat: 42.273125)
-Thing.create(city_id: 10270, lng: -71.160681, lat: 42.273166)
-Thing.create(city_id: 10271, lng: -71.13849, lat: 42.273092)
-Thing.create(city_id: 10272, lng: -71.12348, lat: 42.273041)
-Thing.create(city_id: 10273, lng: -71.169658, lat: 42.27318)
-Thing.create(city_id: 10274, lng: -71.150406, lat: 42.273116)
-Thing.create(city_id: 10275, lng: -71.099589, lat: 42.272927)
-Thing.create(city_id: 10276, lng: -71.095599, lat: 42.272896)
-Thing.create(city_id: 10277, lng: -71.16039, lat: 42.273917)
-Thing.create(city_id: 10278, lng: -71.093428, lat: 42.273642)
-Thing.create(city_id: 10279, lng: -71.161151, lat: 42.273767)
-Thing.create(city_id: 10280, lng: -71.144284, lat: 42.273676)
-Thing.create(city_id: 10281, lng: -71.150741, lat: 42.273599)
-Thing.create(city_id: 10282, lng: -71.168794, lat: 42.273583)
-Thing.create(city_id: 10283, lng: -71.137805, lat: 42.273406)
-Thing.create(city_id: 10284, lng: -71.12996, lat: 42.27334)
-Thing.create(city_id: 10285, lng: -71.107252, lat: 42.273212)
-Thing.create(city_id: 10286, lng: -71.084824, lat: 42.272836)
-Thing.create(city_id: 10287, lng: -71.082804, lat: 42.272796)
-Thing.create(city_id: 10288, lng: -71.130848, lat: 42.272953)
-Thing.create(city_id: 10289, lng: -71.170918, lat: 42.273063)
-Thing.create(city_id: 10290, lng: -71.080964, lat: 42.272757)
-Thing.create(city_id: 10291, lng: -71.162275, lat: 42.273007)
-Thing.create(city_id: 10292, lng: -71.167362, lat: 42.273007)
-Thing.create(city_id: 10293, lng: -71.08716, lat: 42.27273)
-Thing.create(city_id: 10294, lng: -71.126664, lat: 42.272851)
-Thing.create(city_id: 10295, lng: -71.135931, lat: 42.272878)
-Thing.create(city_id: 10296, lng: -71.16356, lat: 42.272952)
-Thing.create(city_id: 10297, lng: -71.066044, lat: 42.2726)
-Thing.create(city_id: 10298, lng: -71.071343, lat: 42.272596)
-Thing.create(city_id: 10299, lng: -71.106689, lat: 42.272714)
-Thing.create(city_id: 10300, lng: -71.108602, lat: 42.272718)
-Thing.create(city_id: 10301, lng: -71.097441, lat: 42.272674)
-Thing.create(city_id: 10302, lng: -71.145102, lat: 42.272827)
-Thing.create(city_id: 10303, lng: -71.078499, lat: 42.272598)
-Thing.create(city_id: 10304, lng: -71.111838, lat: 42.272711)
-Thing.create(city_id: 10305, lng: -71.063642, lat: 42.272506)
-Thing.create(city_id: 10306, lng: -71.081699, lat: 42.272572)
-Thing.create(city_id: 10307, lng: -71.118971, lat: 42.272698)
-Thing.create(city_id: 10308, lng: -71.11106, lat: 42.272668)
-Thing.create(city_id: 10309, lng: -71.099982, lat: 42.272617)
-Thing.create(city_id: 10310, lng: -71.086301, lat: 42.272563)
-Thing.create(city_id: 10311, lng: -71.1074, lat: 42.272631)
-Thing.create(city_id: 10312, lng: -71.101169, lat: 42.272598)
-Thing.create(city_id: 10313, lng: -71.073423, lat: 42.27249)
-Thing.create(city_id: 10314, lng: -71.131067, lat: 42.255322)
-Thing.create(city_id: 10315, lng: -71.12051, lat: 42.25513)
-Thing.create(city_id: 10316, lng: -71.139714, lat: 42.255096)
-Thing.create(city_id: 10317, lng: -71.131901, lat: 42.254966)
-Thing.create(city_id: 10318, lng: -71.141852, lat: 42.254785)
-Thing.create(city_id: 10319, lng: -71.12844, lat: 42.254525)
-Thing.create(city_id: 10320, lng: -71.129503, lat: 42.254524)
-Thing.create(city_id: 10321, lng: -71.125628, lat: 42.254502)
-Thing.create(city_id: 10322, lng: -71.11217, lat: 42.25436)
-Thing.create(city_id: 10323, lng: -71.11476, lat: 42.254324)
-Thing.create(city_id: 10324, lng: -71.119679, lat: 42.254289)
-Thing.create(city_id: 10325, lng: -71.13251, lat: 42.254324)
-Thing.create(city_id: 10326, lng: -71.125044, lat: 42.25421)
-Thing.create(city_id: 10327, lng: -71.141574, lat: 42.254245)
-Thing.create(city_id: 10328, lng: -71.140393, lat: 42.254213)
-Thing.create(city_id: 10329, lng: -71.120832, lat: 42.254143)
-Thing.create(city_id: 10330, lng: -71.111272, lat: 42.254092)
-Thing.create(city_id: 10331, lng: -71.143213, lat: 42.254166)
-Thing.create(city_id: 10332, lng: -71.122274, lat: 42.254076)
-Thing.create(city_id: 10333, lng: -71.133393, lat: 42.254102)
-Thing.create(city_id: 10334, lng: -71.139132, lat: 42.254118)
-Thing.create(city_id: 10335, lng: -71.113404, lat: 42.254027)
-Thing.create(city_id: 10336, lng: -71.127006, lat: 42.254034)
-Thing.create(city_id: 10337, lng: -71.131889, lat: 42.254016)
-Thing.create(city_id: 10338, lng: -71.112715, lat: 42.253952)
-Thing.create(city_id: 10339, lng: -71.1156, lat: 42.253845)
-Thing.create(city_id: 10340, lng: -71.123111, lat: 42.253867)
-Thing.create(city_id: 10341, lng: -71.128379, lat: 42.253732)
-Thing.create(city_id: 10342, lng: -71.129155, lat: 42.25371)
-Thing.create(city_id: 10343, lng: -71.142296, lat: 42.253625)
-Thing.create(city_id: 10344, lng: -71.131483, lat: 42.25358)
-Thing.create(city_id: 10345, lng: -71.120389, lat: 42.253505)
-Thing.create(city_id: 10346, lng: -71.111804, lat: 42.253467)
-Thing.create(city_id: 10347, lng: -71.119895, lat: 42.253478)
-Thing.create(city_id: 10348, lng: -71.133575, lat: 42.253502)
-Thing.create(city_id: 10349, lng: -71.119371, lat: 42.253448)
-Thing.create(city_id: 10350, lng: -71.110581, lat: 42.253408)
-Thing.create(city_id: 10351, lng: -71.130821, lat: 42.253457)
-Thing.create(city_id: 10352, lng: -71.121541, lat: 42.253416)
-Thing.create(city_id: 10353, lng: -71.114475, lat: 42.253358)
-Thing.create(city_id: 10354, lng: -71.127425, lat: 42.253374)
-Thing.create(city_id: 10355, lng: -71.123839, lat: 42.253327)
-Thing.create(city_id: 10356, lng: -71.139034, lat: 42.253351)
-Thing.create(city_id: 10357, lng: -71.116626, lat: 42.253261)
-Thing.create(city_id: 10358, lng: -71.126083, lat: 42.253218)
-Thing.create(city_id: 10359, lng: -71.115133, lat: 42.253115)
-Thing.create(city_id: 10360, lng: -71.126826, lat: 42.253088)
-Thing.create(city_id: 10361, lng: -71.128646, lat: 42.253064)
-Thing.create(city_id: 10362, lng: -71.140493, lat: 42.253059)
-Thing.create(city_id: 10363, lng: -71.129955, lat: 42.252978)
-Thing.create(city_id: 10364, lng: -71.109948, lat: 42.252786)
-Thing.create(city_id: 10365, lng: -71.143008, lat: 42.252882)
-Thing.create(city_id: 10366, lng: -71.117477, lat: 42.252781)
-Thing.create(city_id: 10367, lng: -71.111314, lat: 42.252753)
-Thing.create(city_id: 10368, lng: -71.113798, lat: 42.25271)
-Thing.create(city_id: 10369, lng: -71.118552, lat: 42.252695)
-Thing.create(city_id: 10370, lng: -71.121183, lat: 42.252646)
-Thing.create(city_id: 10371, lng: -71.131398, lat: 42.252658)
-Thing.create(city_id: 10372, lng: -71.127898, lat: 42.252632)
-Thing.create(city_id: 10373, lng: -71.04344, lat: 42.319942)
-Thing.create(city_id: 10374, lng: -71.045018, lat: 42.320037)
-Thing.create(city_id: 10375, lng: -71.046965, lat: 42.319594)
-Thing.create(city_id: 10376, lng: -71.050542, lat: 42.319496)
-Thing.create(city_id: 10377, lng: -71.053199, lat: 42.318535)
-Thing.create(city_id: 10378, lng: -71.01838, lat: 42.382466)
-Thing.create(city_id: 10379, lng: -71.053693, lat: 42.336222)
-Thing.create(city_id: 10380, lng: -71.073937, lat: 42.380175)
-Thing.create(city_id: 10381, lng: -71.065407, lat: 42.3789)
-Thing.create(city_id: 10382, lng: -71.043309, lat: 42.319232)
-Thing.create(city_id: 10383, lng: -71.032374, lat: 42.381301)
-Thing.create(city_id: 10384, lng: -71.044506, lat: 42.318703)
-Thing.create(city_id: 10385, lng: -71.043195, lat: 42.31828)
-Thing.create(city_id: 10386, lng: -71.052653, lat: 42.318584)
-Thing.create(city_id: 10387, lng: -71.050381, lat: 42.318219)
-Thing.create(city_id: 10388, lng: -71.033497, lat: 42.376855)
-Thing.create(city_id: 10389, lng: -71.036443, lat: 42.375747)
-Thing.create(city_id: 10390, lng: -71.052628, lat: 42.317715)
-Thing.create(city_id: 10391, lng: -71.0491, lat: 42.316466)
-Thing.create(city_id: 10392, lng: -71.044945, lat: 42.338266)
-Thing.create(city_id: 10393, lng: -71.038951, lat: 42.375588)
-Thing.create(city_id: 10394, lng: -71.042618, lat: 42.318309)
-Thing.create(city_id: 10395, lng: -71.04191, lat: 42.317832)
-Thing.create(city_id: 10396, lng: -71.053238, lat: 42.317843)
-Thing.create(city_id: 10397, lng: -71.053655, lat: 42.316984)
-Thing.create(city_id: 10398, lng: -71.055845, lat: 42.323313)
-Thing.create(city_id: 10399, lng: -71.052662, lat: 42.316798)
-Thing.create(city_id: 10400, lng: -71.047391, lat: 42.316564)
-Thing.create(city_id: 10401, lng: -71.049458, lat: 42.337753)
-Thing.create(city_id: 10402, lng: -71.039495, lat: 42.317003)
-Thing.create(city_id: 10403, lng: -71.048881, lat: 42.316568)
-Thing.create(city_id: 10404, lng: -71.051005, lat: 42.318775)
-Thing.create(city_id: 10405, lng: -71.053888, lat: 42.319317)
-Thing.create(city_id: 10406, lng: -71.07851, lat: 42.332704)
-Thing.create(city_id: 10407, lng: -71.055354, lat: 42.323432)
-Thing.create(city_id: 10408, lng: -71.078813, lat: 42.332339)
-Thing.create(city_id: 10409, lng: -71.065862, lat: 42.331174)
-Thing.create(city_id: 10410, lng: -71.055828, lat: 42.322411)
-Thing.create(city_id: 10411, lng: -71.076279, lat: 42.332757)
-Thing.create(city_id: 10412, lng: -71.069233, lat: 42.331852)
-Thing.create(city_id: 10413, lng: -71.076763, lat: 42.332498)
-Thing.create(city_id: 10414, lng: -71.07228, lat: 42.332399)
-Thing.create(city_id: 10415, lng: -71.067576, lat: 42.332247)
-Thing.create(city_id: 10416, lng: -71.075943, lat: 42.331915)
-Thing.create(city_id: 10417, lng: -71.075352, lat: 42.332274)
-Thing.create(city_id: 10418, lng: -71.067303, lat: 42.330056)
-Thing.create(city_id: 10419, lng: -71.069283, lat: 42.331006)
-Thing.create(city_id: 10420, lng: -71.068668, lat: 42.33057)
-Thing.create(city_id: 10421, lng: -71.046823, lat: 42.333451)
-Thing.create(city_id: 10422, lng: -71.066553, lat: 42.332261)
-Thing.create(city_id: 10423, lng: -71.068528, lat: 42.330329)
-Thing.create(city_id: 10424, lng: -71.074855, lat: 42.332589)
-Thing.create(city_id: 10425, lng: -71.033469, lat: 42.337432)
-Thing.create(city_id: 10426, lng: -71.032023, lat: 42.37817)
-Thing.create(city_id: 10427, lng: -71.065868, lat: 42.329587)
-Thing.create(city_id: 10428, lng: -71.039856, lat: 42.375958)
-Thing.create(city_id: 10429, lng: -71.033767, lat: 42.334845)
-Thing.create(city_id: 10430, lng: -71.056208, lat: 42.338956)
-Thing.create(city_id: 10431, lng: -71.066103, lat: 42.332973)
-Thing.create(city_id: 10432, lng: -71.042765, lat: 42.332121)
-Thing.create(city_id: 10433, lng: -71.035386, lat: 42.33303)
-Thing.create(city_id: 10434, lng: -71.061984, lat: 42.331721)
-Thing.create(city_id: 10435, lng: -71.057386, lat: 42.330306)
-Thing.create(city_id: 10436, lng: -71.047223, lat: 42.336585)
-Thing.create(city_id: 10437, lng: -71.022836, lat: 42.381102)
-Thing.create(city_id: 10438, lng: -71.057017, lat: 42.328779)
-Thing.create(city_id: 10439, lng: -71.045329, lat: 42.335588)
-Thing.create(city_id: 10440, lng: -71.02205, lat: 42.381079)
-Thing.create(city_id: 10441, lng: -71.016018, lat: 42.381226)
-Thing.create(city_id: 10442, lng: -71.025501, lat: 42.381428)
-Thing.create(city_id: 10443, lng: -71.019836, lat: 42.3813)
-Thing.create(city_id: 10444, lng: -71.019012, lat: 42.380884)
-Thing.create(city_id: 10445, lng: -71.027532, lat: 42.38073)
-Thing.create(city_id: 10446, lng: -71.026567, lat: 42.381087)
-Thing.create(city_id: 10447, lng: -71.025657, lat: 42.381067)
-Thing.create(city_id: 10448, lng: -71.02516, lat: 42.380843)
-Thing.create(city_id: 10449, lng: -71.018235, lat: 42.380813)
-Thing.create(city_id: 10450, lng: -71.017227, lat: 42.38075)
-Thing.create(city_id: 10451, lng: -71.013563, lat: 42.38133)
-Thing.create(city_id: 10452, lng: -71.014204, lat: 42.381741)
-Thing.create(city_id: 10453, lng: -71.012753, lat: 42.381636)
-Thing.create(city_id: 10454, lng: -71.021909, lat: 42.380424)
-Thing.create(city_id: 10455, lng: -71.015622, lat: 42.380568)
-Thing.create(city_id: 10456, lng: -71.014473, lat: 42.380991)
-Thing.create(city_id: 10457, lng: -71.022823, lat: 42.380506)
-Thing.create(city_id: 10458, lng: -71.022568, lat: 42.377933)
-Thing.create(city_id: 10459, lng: -71.023817, lat: 42.380734)
-Thing.create(city_id: 10460, lng: -71.0224, lat: 42.38004)
-Thing.create(city_id: 10461, lng: -71.023312, lat: 42.379991)
-Thing.create(city_id: 10462, lng: -71.023931, lat: 42.379164)
-Thing.create(city_id: 10463, lng: -71.025633, lat: 42.380362)
-Thing.create(city_id: 10464, lng: -71.026363, lat: 42.380282)
-Thing.create(city_id: 10465, lng: -71.02367, lat: 42.379777)
-Thing.create(city_id: 10466, lng: -71.027243, lat: 42.3797)
-Thing.create(city_id: 10467, lng: -71.05462, lat: 42.329612)
-Thing.create(city_id: 10468, lng: -71.026898, lat: 42.37933)
-Thing.create(city_id: 10469, lng: -71.023472, lat: 42.378863)
-Thing.create(city_id: 10470, lng: -71.055948, lat: 42.330043)
-Thing.create(city_id: 10471, lng: -71.013846, lat: 42.382126)
-Thing.create(city_id: 10472, lng: -71.028255, lat: 42.338322)
-Thing.create(city_id: 10473, lng: -71.056729, lat: 42.329876)
-Thing.create(city_id: 10474, lng: -71.058843, lat: 42.329785)
-Thing.create(city_id: 10475, lng: -71.05563, lat: 42.329726)
-Thing.create(city_id: 10476, lng: -71.057783, lat: 42.329572)
-Thing.create(city_id: 10477, lng: -71.046164, lat: 42.337235)
-Thing.create(city_id: 10478, lng: -71.05497, lat: 42.329316)
-Thing.create(city_id: 10479, lng: -71.056371, lat: 42.328061)
-Thing.create(city_id: 10480, lng: -71.05314, lat: 42.338018)
-Thing.create(city_id: 10481, lng: -71.054902, lat: 42.340055)
-Thing.create(city_id: 10482, lng: -71.036776, lat: 42.344556)
-Thing.create(city_id: 10483, lng: -71.050906, lat: 42.338656)
-Thing.create(city_id: 10484, lng: -71.057876, lat: 42.328329)
-Thing.create(city_id: 10485, lng: -71.044476, lat: 42.341839)
-Thing.create(city_id: 10486, lng: -71.057006, lat: 42.327827)
-Thing.create(city_id: 10487, lng: -71.129977, lat: 42.272656)
-Thing.create(city_id: 10488, lng: -71.14628, lat: 42.272702)
-Thing.create(city_id: 10489, lng: -71.069721, lat: 42.272439)
-Thing.create(city_id: 10490, lng: -71.165503, lat: 42.272756)
-Thing.create(city_id: 10491, lng: -71.149409, lat: 42.272694)
-Thing.create(city_id: 10492, lng: -71.076177, lat: 42.272445)
-Thing.create(city_id: 10493, lng: -71.128009, lat: 42.272602)
-Thing.create(city_id: 10494, lng: -71.147258, lat: 42.272662)
-Thing.create(city_id: 10495, lng: -71.061584, lat: 42.272348)
-Thing.create(city_id: 10496, lng: -71.159818, lat: 42.272679)
-Thing.create(city_id: 10497, lng: -71.067038, lat: 42.27236)
-Thing.create(city_id: 10498, lng: -71.090488, lat: 42.272443)
-Thing.create(city_id: 10499, lng: -71.103573, lat: 42.272483)
-Thing.create(city_id: 10500, lng: -71.093511, lat: 42.272441)
-Thing.create(city_id: 10501, lng: -71.12908, lat: 42.272559)
-Thing.create(city_id: 10502, lng: -71.151071, lat: 42.272617)
-Thing.create(city_id: 10503, lng: -71.077071, lat: 42.272368)
-Thing.create(city_id: 10504, lng: -71.067725, lat: 42.272323)
-Thing.create(city_id: 10505, lng: -71.098909, lat: 42.272429)
-Thing.create(city_id: 10506, lng: -71.137544, lat: 42.272534)
-Thing.create(city_id: 10507, lng: -71.126908, lat: 42.272496)
-Thing.create(city_id: 10508, lng: -71.109498, lat: 42.272437)
-Thing.create(city_id: 10509, lng: -71.148309, lat: 42.272555)
-Thing.create(city_id: 10510, lng: -71.075301, lat: 42.272286)
-Thing.create(city_id: 10511, lng: -71.096421, lat: 42.272359)
-Thing.create(city_id: 10512, lng: -71.088803, lat: 42.272292)
-Thing.create(city_id: 10513, lng: -71.085509, lat: 42.272278)
-Thing.create(city_id: 10514, lng: -71.102371, lat: 42.272329)
-Thing.create(city_id: 10515, lng: -71.093822, lat: 42.272283)
-Thing.create(city_id: 10516, lng: -71.117944, lat: 42.272362)
-Thing.create(city_id: 10517, lng: -71.070402, lat: 42.272183)
-Thing.create(city_id: 10518, lng: -71.171606, lat: 42.272497)
-Thing.create(city_id: 10519, lng: -71.06459, lat: 42.272112)
-Thing.create(city_id: 10520, lng: -71.074186, lat: 42.272122)
-Thing.create(city_id: 10521, lng: -71.16317, lat: 42.272411)
-Thing.create(city_id: 10522, lng: -71.10827, lat: 42.272213)
-Thing.create(city_id: 10523, lng: -71.125021, lat: 42.272259)
-Thing.create(city_id: 10524, lng: -71.065522, lat: 42.272037)
-Thing.create(city_id: 10525, lng: -71.071177, lat: 42.272056)
-Thing.create(city_id: 10526, lng: -71.109091, lat: 42.272191)
-Thing.create(city_id: 10527, lng: -71.161157, lat: 42.272332)
-Thing.create(city_id: 10528, lng: -71.131591, lat: 42.272231)
-Thing.create(city_id: 10529, lng: -71.170086, lat: 42.272341)
-Thing.create(city_id: 10530, lng: -71.16417, lat: 42.272312)
-Thing.create(city_id: 10531, lng: -71.160421, lat: 42.272299)
-Thing.create(city_id: 10532, lng: -71.168451, lat: 42.272318)
-Thing.create(city_id: 10533, lng: -71.171672, lat: 42.272299)
-Thing.create(city_id: 10534, lng: -71.144725, lat: 42.27221)
-Thing.create(city_id: 10535, lng: -71.089707, lat: 42.272023)
-Thing.create(city_id: 10536, lng: -71.145501, lat: 42.272209)
-Thing.create(city_id: 10537, lng: -71.123084, lat: 42.272104)
-Thing.create(city_id: 10538, lng: -71.072336, lat: 42.271917)
-Thing.create(city_id: 10539, lng: -71.136898, lat: 42.272137)
-Thing.create(city_id: 10540, lng: -71.106821, lat: 42.272033)
-Thing.create(city_id: 10541, lng: -71.130686, lat: 42.272104)
-Thing.create(city_id: 10542, lng: -71.063787, lat: 42.271853)
-Thing.create(city_id: 10543, lng: -71.087239, lat: 42.271939)
-Thing.create(city_id: 10544, lng: -71.124333, lat: 42.272064)
-Thing.create(city_id: 10545, lng: -71.129773, lat: 42.272079)
-Thing.create(city_id: 10546, lng: -71.162231, lat: 42.272168)
-Thing.create(city_id: 10547, lng: -71.112238, lat: 42.272)
-Thing.create(city_id: 10548, lng: -71.072211, lat: 42.272502)
-Thing.create(city_id: 10549, lng: -71.134501, lat: 42.252619)
-Thing.create(city_id: 10550, lng: -71.139318, lat: 42.252545)
-Thing.create(city_id: 10551, lng: -71.141846, lat: 42.252511)
-Thing.create(city_id: 10552, lng: -71.115507, lat: 42.252419)
-Thing.create(city_id: 10553, lng: -71.109473, lat: 42.252331)
-Thing.create(city_id: 10554, lng: -71.127384, lat: 42.252354)
-Thing.create(city_id: 10555, lng: -71.110732, lat: 42.252238)
-Thing.create(city_id: 10556, lng: -71.132761, lat: 42.252289)
-Thing.create(city_id: 10557, lng: -71.13101, lat: 42.252141)
-Thing.create(city_id: 10558, lng: -71.11312, lat: 42.252066)
-Thing.create(city_id: 10559, lng: -71.143347, lat: 42.252127)
-Thing.create(city_id: 10560, lng: -71.12311, lat: 42.252053)
-Thing.create(city_id: 10561, lng: -71.128701, lat: 42.252041)
-Thing.create(city_id: 10562, lng: -71.116211, lat: 42.251953)
-Thing.create(city_id: 10563, lng: -71.135153, lat: 42.251986)
-Thing.create(city_id: 10564, lng: -71.118944, lat: 42.251932)
-Thing.create(city_id: 10565, lng: -71.111662, lat: 42.251882)
-Thing.create(city_id: 10566, lng: -71.110101, lat: 42.251769)
-Thing.create(city_id: 10567, lng: -71.140237, lat: 42.251861)
-Thing.create(city_id: 10568, lng: -71.145188, lat: 42.251871)
-Thing.create(city_id: 10569, lng: -71.115065, lat: 42.251774)
-Thing.create(city_id: 10570, lng: -71.141759, lat: 42.251852)
-Thing.create(city_id: 10571, lng: -71.140966, lat: 42.25362)
-Thing.create(city_id: 10572, lng: -71.117984, lat: 42.253466)
-Thing.create(city_id: 10573, lng: -71.119146, lat: 42.253265)
-Thing.create(city_id: 10574, lng: -71.112736, lat: 42.252931)
-Thing.create(city_id: 10575, lng: -71.143827, lat: 42.252811)
-Thing.create(city_id: 10576, lng: -71.141304, lat: 42.252667)
-Thing.create(city_id: 10577, lng: -71.117598, lat: 42.251773)
-Thing.create(city_id: 10578, lng: -71.13929, lat: 42.251817)
-Thing.create(city_id: 10579, lng: -71.119549, lat: 42.251753)
-Thing.create(city_id: 10580, lng: -71.134207, lat: 42.251722)
-Thing.create(city_id: 10581, lng: -71.144313, lat: 42.251641)
-Thing.create(city_id: 10582, lng: -71.143355, lat: 42.251574)
-Thing.create(city_id: 10583, lng: -71.130479, lat: 42.251529)
-Thing.create(city_id: 10584, lng: -71.12961, lat: 42.251521)
-Thing.create(city_id: 10585, lng: -71.112483, lat: 42.25143)
-Thing.create(city_id: 10586, lng: -71.119824, lat: 42.251408)
-Thing.create(city_id: 10587, lng: -71.132814, lat: 42.251442)
-Thing.create(city_id: 10588, lng: -71.130871, lat: 42.251386)
-Thing.create(city_id: 10589, lng: -71.110895, lat: 42.251307)
-Thing.create(city_id: 10590, lng: -71.120384, lat: 42.251281)
-Thing.create(city_id: 10591, lng: -71.134015, lat: 42.25119)
-Thing.create(city_id: 10592, lng: -71.142145, lat: 42.251194)
-Thing.create(city_id: 10593, lng: -71.124311, lat: 42.251079)
-Thing.create(city_id: 10594, lng: -71.138971, lat: 42.251076)
-Thing.create(city_id: 10595, lng: -71.1145, lat: 42.250991)
-Thing.create(city_id: 10596, lng: -71.116775, lat: 42.250997)
-Thing.create(city_id: 10597, lng: -71.130508, lat: 42.251005)
-Thing.create(city_id: 10598, lng: -71.122818, lat: 42.250957)
-Thing.create(city_id: 10599, lng: -71.136186, lat: 42.250999)
-Thing.create(city_id: 10600, lng: -71.120676, lat: 42.250916)
-Thing.create(city_id: 10601, lng: -71.111879, lat: 42.250858)
-Thing.create(city_id: 10602, lng: -71.116602, lat: 42.250851)
-Thing.create(city_id: 10603, lng: -71.14392, lat: 42.250917)
-Thing.create(city_id: 10604, lng: -71.110147, lat: 42.250779)
-Thing.create(city_id: 10605, lng: -71.121311, lat: 42.250748)
-Thing.create(city_id: 10606, lng: -71.161302, lat: 42.349422)
-Thing.create(city_id: 10607, lng: -71.161273, lat: 42.350196)
-Thing.create(city_id: 10608, lng: -71.161252, lat: 42.350932)
-Thing.create(city_id: 10609, lng: -71.060095, lat: 42.330231)
-Thing.create(city_id: 10610, lng: -71.066313, lat: 42.328889)
-Thing.create(city_id: 10611, lng: -71.083136, lat: 42.337688)
-Thing.create(city_id: 10612, lng: -71.02424, lat: 42.378444)
-Thing.create(city_id: 10613, lng: -71.062846, lat: 42.330409)
-Thing.create(city_id: 10614, lng: -71.034679, lat: 42.37641)
-Thing.create(city_id: 10615, lng: -71.103712, lat: 42.315085)
-Thing.create(city_id: 10616, lng: -71.02817, lat: 42.333191)
-Thing.create(city_id: 10617, lng: -71.085001, lat: 42.337998)
-Thing.create(city_id: 10618, lng: -71.063928, lat: 42.309727)
-Thing.create(city_id: 10619, lng: -71.001244, lat: 42.390132)
-Thing.create(city_id: 10620, lng: -71.084275, lat: 42.337828)
-Thing.create(city_id: 10621, lng: -71.038725, lat: 42.379117)
-Thing.create(city_id: 10622, lng: -71.081218, lat: 42.337807)
-Thing.create(city_id: 10623, lng: -71.080665, lat: 42.337433)
-Thing.create(city_id: 10624, lng: -71.085508, lat: 42.337579)
-Thing.create(city_id: 10625, lng: -71.084526, lat: 42.337397)
-Thing.create(city_id: 10626, lng: -71.084929, lat: 42.336991)
-Thing.create(city_id: 10627, lng: -71.051878, lat: 42.342663)
-Thing.create(city_id: 10628, lng: -71.083237, lat: 42.336145)
-Thing.create(city_id: 10629, lng: -71.083802, lat: 42.337247)
-Thing.create(city_id: 10630, lng: -71.084446, lat: 42.336695)
-Thing.create(city_id: 10631, lng: -71.045284, lat: 42.335005)
-Thing.create(city_id: 10632, lng: -71.086377, lat: 42.33714)
-Thing.create(city_id: 10633, lng: -71.030406, lat: 42.331504)
-Thing.create(city_id: 10634, lng: -71.079976, lat: 42.336953)
-Thing.create(city_id: 10635, lng: -71.088684, lat: 42.336608)
-Thing.create(city_id: 10636, lng: -71.08233, lat: 42.336478)
-Thing.create(city_id: 10637, lng: -71.020949, lat: 42.382417)
-Thing.create(city_id: 10638, lng: -71.063444, lat: 42.310777)
-Thing.create(city_id: 10639, lng: -71.083019, lat: 42.335396)
-Thing.create(city_id: 10640, lng: -71.080805, lat: 42.336372)
-Thing.create(city_id: 10641, lng: -71.058347, lat: 42.308412)
-Thing.create(city_id: 10642, lng: -71.031343, lat: 42.376996)
-Thing.create(city_id: 10643, lng: -71.089266, lat: 42.336134)
-Thing.create(city_id: 10644, lng: -71.084315, lat: 42.336074)
-Thing.create(city_id: 10645, lng: -71.087088, lat: 42.334964)
-Thing.create(city_id: 10646, lng: -71.083596, lat: 42.335511)
-Thing.create(city_id: 10647, lng: -71.087863, lat: 42.335413)
-Thing.create(city_id: 10648, lng: -71.038061, lat: 42.377566)
-Thing.create(city_id: 10649, lng: -71.025833, lat: 42.333235)
-Thing.create(city_id: 10650, lng: -71.037322, lat: 42.375424)
-Thing.create(city_id: 10651, lng: -71.085944, lat: 42.335035)
-Thing.create(city_id: 10652, lng: -71.081118, lat: 42.33526)
-Thing.create(city_id: 10653, lng: -71.058766, lat: 42.330548)
-Thing.create(city_id: 10654, lng: -71.084178, lat: 42.335129)
-Thing.create(city_id: 10655, lng: -71.052558, lat: 42.337253)
-Thing.create(city_id: 10656, lng: -71.032199, lat: 42.374709)
-Thing.create(city_id: 10657, lng: -71.051071, lat: 42.341228)
-Thing.create(city_id: 10658, lng: -71.028545, lat: 42.37786)
-Thing.create(city_id: 10659, lng: -71.055358, lat: 42.339449)
-Thing.create(city_id: 10660, lng: -71.124168, lat: 42.25418)
-Thing.create(city_id: 10661, lng: -71.135607, lat: 42.28825)
-Thing.create(city_id: 10662, lng: -71.133553, lat: 42.2887)
-Thing.create(city_id: 10663, lng: -71.105618, lat: 42.304853)
-Thing.create(city_id: 10664, lng: -71.054466, lat: 42.327809)
-Thing.create(city_id: 10665, lng: -71.124542, lat: 42.25341)
-Thing.create(city_id: 10666, lng: -71.124907, lat: 42.252608)
-Thing.create(city_id: 10667, lng: -71.052483, lat: 42.36747)
-Thing.create(city_id: 10668, lng: -71.125301, lat: 42.251863)
-Thing.create(city_id: 10669, lng: -71.104917, lat: 42.30417)
-Thing.create(city_id: 10670, lng: -71.052844, lat: 42.319532)
-Thing.create(city_id: 10671, lng: -71.034506, lat: 42.372744)
-Thing.create(city_id: 10672, lng: -71.049065, lat: 42.332342)
-Thing.create(city_id: 10673, lng: -71.104147, lat: 42.303568)
-Thing.create(city_id: 10674, lng: -71.049769, lat: 42.332486)
-Thing.create(city_id: 10675, lng: -71.106304, lat: 42.305477)
-Thing.create(city_id: 10676, lng: -71.039795, lat: 42.372565)
-Thing.create(city_id: 10677, lng: -71.038958, lat: 42.373145)
-Thing.create(city_id: 10678, lng: -71.039491, lat: 42.372944)
-Thing.create(city_id: 10679, lng: -71.035922, lat: 42.372242)
-Thing.create(city_id: 10680, lng: -71.038935, lat: 42.372221)
-Thing.create(city_id: 10681, lng: -71.03587, lat: 42.371553)
-Thing.create(city_id: 10682, lng: -71.038205, lat: 42.372025)
-Thing.create(city_id: 10683, lng: -71.036531, lat: 42.371719)
-Thing.create(city_id: 10684, lng: -71.040448, lat: 42.371745)
-Thing.create(city_id: 10685, lng: -71.038919, lat: 42.371571)
-Thing.create(city_id: 10686, lng: -71.033496, lat: 42.375155)
-Thing.create(city_id: 10687, lng: -71.027888, lat: 42.381384)
-Thing.create(city_id: 10688, lng: -71.02899, lat: 42.381384)
-Thing.create(city_id: 10689, lng: -71.03013, lat: 42.38139)
-Thing.create(city_id: 10690, lng: -71.031215, lat: 42.381288)
-Thing.create(city_id: 10691, lng: -71.055387, lat: 42.327467)
-Thing.create(city_id: 10692, lng: -71.049101, lat: 42.332889)
-Thing.create(city_id: 10693, lng: -71.053015, lat: 42.332779)
-Thing.create(city_id: 10694, lng: -71.052492, lat: 42.332497)
-Thing.create(city_id: 10695, lng: -71.051424, lat: 42.331435)
-Thing.create(city_id: 10696, lng: -71.044474, lat: 42.332372)
-Thing.create(city_id: 10697, lng: -71.041708, lat: 42.332142)
-Thing.create(city_id: 10698, lng: -71.048283, lat: 42.332068)
-Thing.create(city_id: 10699, lng: -71.04391, lat: 42.332096)
-Thing.create(city_id: 10700, lng: -71.045457, lat: 42.332075)
-Thing.create(city_id: 10701, lng: -71.052155, lat: 42.331886)
-Thing.create(city_id: 10702, lng: -71.047362, lat: 42.331917)
-Thing.create(city_id: 10703, lng: -71.053302, lat: 42.330444)
-Thing.create(city_id: 10704, lng: -71.051069, lat: 42.331997)
-Thing.create(city_id: 10705, lng: -71.049629, lat: 42.331843)
-Thing.create(city_id: 10706, lng: -71.049728, lat: 42.330927)
-Thing.create(city_id: 10707, lng: -71.050037, lat: 42.331356)
-Thing.create(city_id: 10708, lng: -71.050762, lat: 42.331021)
-Thing.create(city_id: 10709, lng: -71.05385, lat: 42.329315)
-Thing.create(city_id: 10710, lng: -71.052735, lat: 42.33103)
-Thing.create(city_id: 10711, lng: -71.041802, lat: 42.330589)
-Thing.create(city_id: 10712, lng: -71.043964, lat: 42.330544)
-Thing.create(city_id: 10713, lng: -71.050408, lat: 42.330327)
-Thing.create(city_id: 10714, lng: -71.051655, lat: 42.329698)
-Thing.create(city_id: 10715, lng: -71.048038, lat: 42.330458)
-Thing.create(city_id: 10716, lng: -71.049157, lat: 42.33042)
-Thing.create(city_id: 10717, lng: -71.052682, lat: 42.328148)
-Thing.create(city_id: 10718, lng: -71.053785, lat: 42.331291)
-Thing.create(city_id: 10719, lng: -71.159013, lat: 42.27213)
-Thing.create(city_id: 10720, lng: -71.107516, lat: 42.271938)
-Thing.create(city_id: 10721, lng: -71.127251, lat: 42.271985)
-Thing.create(city_id: 10722, lng: -71.110347, lat: 42.271927)
-Thing.create(city_id: 10723, lng: -71.062456, lat: 42.271749)
-Thing.create(city_id: 10724, lng: -71.078286, lat: 42.271787)
-Thing.create(city_id: 10725, lng: -71.068132, lat: 42.271747)
-Thing.create(city_id: 10726, lng: -71.111494, lat: 42.2719)
-Thing.create(city_id: 10727, lng: -71.084538, lat: 42.271801)
-Thing.create(city_id: 10728, lng: -71.100676, lat: 42.271847)
-Thing.create(city_id: 10729, lng: -71.073218, lat: 42.271738)
-Thing.create(city_id: 10730, lng: -71.166461, lat: 42.272042)
-Thing.create(city_id: 10731, lng: -71.150618, lat: 42.271972)
-Thing.create(city_id: 10732, lng: -71.120106, lat: 42.271858)
-Thing.create(city_id: 10733, lng: -71.14774, lat: 42.271939)
-Thing.create(city_id: 10734, lng: -71.104292, lat: 42.271792)
-Thing.create(city_id: 10735, lng: -71.094376, lat: 42.271751)
-Thing.create(city_id: 10736, lng: -71.098312, lat: 42.271752)
-Thing.create(city_id: 10737, lng: -71.128727, lat: 42.271851)
-Thing.create(city_id: 10738, lng: -71.099552, lat: 42.271749)
-Thing.create(city_id: 10739, lng: -71.149087, lat: 42.271886)
-Thing.create(city_id: 10740, lng: -71.165684, lat: 42.271928)
-Thing.create(city_id: 10741, lng: -71.172383, lat: 42.271935)
-Thing.create(city_id: 10742, lng: -71.089052, lat: 42.271664)
-Thing.create(city_id: 10743, lng: -71.07616, lat: 42.271607)
-Thing.create(city_id: 10744, lng: -71.077097, lat: 42.271603)
-Thing.create(city_id: 10745, lng: -71.102892, lat: 42.271684)
-Thing.create(city_id: 10746, lng: -71.079408, lat: 42.271586)
-Thing.create(city_id: 10747, lng: -71.097089, lat: 42.27164)
-Thing.create(city_id: 10748, lng: -71.101928, lat: 42.271653)
-Thing.create(city_id: 10749, lng: -71.160803, lat: 42.271837)
-Thing.create(city_id: 10750, lng: -71.109647, lat: 42.271607)
-Thing.create(city_id: 10751, lng: -71.163498, lat: 42.271773)
-Thing.create(city_id: 10752, lng: -71.075105, lat: 42.271463)
-Thing.create(city_id: 10753, lng: -71.080381, lat: 42.271459)
-Thing.create(city_id: 10754, lng: -71.128011, lat: 42.271607)
-Thing.create(city_id: 10755, lng: -71.106094, lat: 42.271528)
-Thing.create(city_id: 10756, lng: -71.092996, lat: 42.271473)
-Thing.create(city_id: 10757, lng: -71.10882, lat: 42.271513)
-Thing.create(city_id: 10758, lng: -71.081489, lat: 42.271402)
-Thing.create(city_id: 10759, lng: -71.082691, lat: 42.271404)
-Thing.create(city_id: 10760, lng: -71.085737, lat: 42.271402)
-Thing.create(city_id: 10761, lng: -71.074008, lat: 42.271357)
-Thing.create(city_id: 10762, lng: -71.145501, lat: 42.271583)
-Thing.create(city_id: 10763, lng: -71.160361, lat: 42.271624)
-Thing.create(city_id: 10764, lng: -71.117294, lat: 42.271467)
-Thing.create(city_id: 10765, lng: -71.063187, lat: 42.271265)
-Thing.create(city_id: 10766, lng: -71.090656, lat: 42.271365)
-Thing.create(city_id: 10767, lng: -71.083883, lat: 42.271334)
-Thing.create(city_id: 10768, lng: -71.086568, lat: 42.271337)
-Thing.create(city_id: 10769, lng: -71.11908, lat: 42.271393)
-Thing.create(city_id: 10770, lng: -71.105132, lat: 42.271305)
-Thing.create(city_id: 10771, lng: -71.170732, lat: 42.271511)
-Thing.create(city_id: 10772, lng: -71.108091, lat: 42.271306)
-Thing.create(city_id: 10773, lng: -71.164919, lat: 42.271482)
-Thing.create(city_id: 10774, lng: -71.130095, lat: 42.271345)
-Thing.create(city_id: 10775, lng: -71.069649, lat: 42.271116)
-Thing.create(city_id: 10776, lng: -71.110997, lat: 42.271263)
-Thing.create(city_id: 10777, lng: -71.130855, lat: 42.271319)
-Thing.create(city_id: 10778, lng: -71.087391, lat: 42.271157)
-Thing.create(city_id: 10779, lng: -71.161613, lat: 42.271397)
-Thing.create(city_id: 10780, lng: -71.101289, lat: 42.271196)
-Thing.create(city_id: 10781, lng: -71.062168, lat: 42.271046)
-Thing.create(city_id: 10782, lng: -71.129253, lat: 42.271282)
-Thing.create(city_id: 10783, lng: -71.147312, lat: 42.271316)
-Thing.create(city_id: 10784, lng: -71.133516, lat: 42.250761)
-Thing.create(city_id: 10785, lng: -71.14118, lat: 42.250775)
-Thing.create(city_id: 10786, lng: -71.14541, lat: 42.250776)
-Thing.create(city_id: 10787, lng: -71.134551, lat: 42.250704)
-Thing.create(city_id: 10788, lng: -71.135257, lat: 42.250703)
-Thing.create(city_id: 10789, lng: -71.129767, lat: 42.250679)
-Thing.create(city_id: 10790, lng: -71.113799, lat: 42.250475)
-Thing.create(city_id: 10791, lng: -71.124787, lat: 42.250509)
-Thing.create(city_id: 10792, lng: -71.118258, lat: 42.250477)
-Thing.create(city_id: 10793, lng: -71.114551, lat: 42.250371)
-Thing.create(city_id: 10794, lng: -71.121593, lat: 42.250386)
-Thing.create(city_id: 10795, lng: -71.117305, lat: 42.250345)
-Thing.create(city_id: 10796, lng: -71.110994, lat: 42.250278)
-Thing.create(city_id: 10797, lng: -71.122134, lat: 42.25028)
-Thing.create(city_id: 10798, lng: -71.116023, lat: 42.250249)
-Thing.create(city_id: 10799, lng: -71.11203, lat: 42.250203)
-Thing.create(city_id: 10800, lng: -71.131799, lat: 42.250255)
-Thing.create(city_id: 10801, lng: -71.13919, lat: 42.250268)
-Thing.create(city_id: 10802, lng: -71.130826, lat: 42.250202)
-Thing.create(city_id: 10803, lng: -71.12337, lat: 42.250162)
-Thing.create(city_id: 10804, lng: -71.05247, lat: 42.347602)
-Thing.create(city_id: 10805, lng: -71.120424, lat: 42.250146)
-Thing.create(city_id: 10806, lng: -71.134184, lat: 42.250116)
-Thing.create(city_id: 10807, lng: -71.14493, lat: 42.250139)
-Thing.create(city_id: 10808, lng: -71.112924, lat: 42.25003)
-Thing.create(city_id: 10809, lng: -71.142474, lat: 42.250109)
-Thing.create(city_id: 10810, lng: -71.143697, lat: 42.250069)
-Thing.create(city_id: 10811, lng: -71.135778, lat: 42.250027)
-Thing.create(city_id: 10812, lng: -71.118137, lat: 42.249865)
-Thing.create(city_id: 10813, lng: -71.122107, lat: 42.249854)
-Thing.create(city_id: 10814, lng: -71.140313, lat: 42.249847)
-Thing.create(city_id: 10815, lng: -71.113878, lat: 42.249725)
-Thing.create(city_id: 10816, lng: -71.123905, lat: 42.249705)
-Thing.create(city_id: 10817, lng: -71.119847, lat: 42.249576)
-Thing.create(city_id: 10818, lng: -71.116746, lat: 42.249521)
-Thing.create(city_id: 10819, lng: -71.115174, lat: 42.249472)
-Thing.create(city_id: 10820, lng: -71.122913, lat: 42.249493)
-Thing.create(city_id: 10821, lng: -71.139498, lat: 42.249448)
-Thing.create(city_id: 10822, lng: -71.125014, lat: 42.249389)
-Thing.create(city_id: 10823, lng: -71.134906, lat: 42.249414)
-Thing.create(city_id: 10824, lng: -71.132637, lat: 42.249373)
-Thing.create(city_id: 10825, lng: -71.111174, lat: 42.249197)
-Thing.create(city_id: 10826, lng: -71.121432, lat: 42.249201)
-Thing.create(city_id: 10827, lng: -71.109891, lat: 42.248951)
-Thing.create(city_id: 10828, lng: -71.119243, lat: 42.248982)
-Thing.create(city_id: 10829, lng: -71.132124, lat: 42.248947)
-Thing.create(city_id: 10830, lng: -71.116219, lat: 42.248882)
-Thing.create(city_id: 10831, lng: -71.12572, lat: 42.248814)
-Thing.create(city_id: 10832, lng: -71.134227, lat: 42.248824)
-Thing.create(city_id: 10833, lng: -71.127789, lat: 42.248763)
-Thing.create(city_id: 10834, lng: -71.125279, lat: 42.248717)
-Thing.create(city_id: 10835, lng: -71.138787, lat: 42.248743)
-Thing.create(city_id: 10836, lng: -71.131373, lat: 42.248622)
-Thing.create(city_id: 10837, lng: -71.120763, lat: 42.248538)
-Thing.create(city_id: 10838, lng: -71.11728, lat: 42.24849)
-Thing.create(city_id: 10839, lng: -71.110694, lat: 42.248461)
-Thing.create(city_id: 10840, lng: -71.111831, lat: 42.248402)
-Thing.create(city_id: 10841, lng: -71.124003, lat: 42.248355)
-Thing.create(city_id: 10842, lng: -71.152074, lat: 42.345217)
-Thing.create(city_id: 10843, lng: -71.152025, lat: 42.349391)
-Thing.create(city_id: 10844, lng: -71.118772, lat: 42.28004)
-Thing.create(city_id: 10845, lng: -71.071907, lat: 42.306894)
-Thing.create(city_id: 10846, lng: -71.045129, lat: 42.334606)
-Thing.create(city_id: 10847, lng: -71.031889, lat: 42.379873)
-Thing.create(city_id: 10848, lng: -71.151913, lat: 42.349877)
-Thing.create(city_id: 10849, lng: -71.068336, lat: 42.393269)
-Thing.create(city_id: 10850, lng: -71.036306, lat: 42.331408)
-Thing.create(city_id: 10851, lng: -71.038015, lat: 42.375929)
-Thing.create(city_id: 10852, lng: -71.048138, lat: 42.334234)
-Thing.create(city_id: 10853, lng: -71.047271, lat: 42.3312)
-Thing.create(city_id: 10854, lng: -71.012895, lat: 42.391165)
-Thing.create(city_id: 10855, lng: -71.022333, lat: 42.381789)
-Thing.create(city_id: 10856, lng: -71.06702, lat: 42.394837)
-Thing.create(city_id: 10857, lng: -71.032992, lat: 42.374021)
-Thing.create(city_id: 10858, lng: -71.023784, lat: 42.381968)
-Thing.create(city_id: 10859, lng: -71.003976, lat: 42.391165)
-Thing.create(city_id: 10860, lng: -71.033498, lat: 42.334852)
-Thing.create(city_id: 10861, lng: -71.042373, lat: 42.332572)
-Thing.create(city_id: 10862, lng: -71.054279, lat: 42.3338)
-Thing.create(city_id: 10863, lng: -71.041063, lat: 42.368562)
-Thing.create(city_id: 10864, lng: -71.005023, lat: 42.391464)
-Thing.create(city_id: 10865, lng: -71.008598, lat: 42.391068)
-Thing.create(city_id: 10866, lng: -71.008423, lat: 42.388516)
-Thing.create(city_id: 10867, lng: -71.0288, lat: 42.381022)
-Thing.create(city_id: 10868, lng: -71.060341, lat: 42.316933)
-Thing.create(city_id: 10869, lng: -71.056056, lat: 42.327497)
-Thing.create(city_id: 10870, lng: -71.062995, lat: 42.317262)
-Thing.create(city_id: 10871, lng: -71.052651, lat: 42.327291)
-Thing.create(city_id: 10872, lng: -71.005054, lat: 42.390788)
-Thing.create(city_id: 10873, lng: -71.064278, lat: 42.319692)
-Thing.create(city_id: 10874, lng: -71.002312, lat: 42.384318)
-Thing.create(city_id: 10875, lng: -71.003036, lat: 42.390732)
-Thing.create(city_id: 10876, lng: -71.092331, lat: 42.282355)
-Thing.create(city_id: 10877, lng: -71.057174, lat: 42.35149)
-Thing.create(city_id: 10878, lng: -71.085469, lat: 42.323657)
-Thing.create(city_id: 10879, lng: -71.065724, lat: 42.301373)
-Thing.create(city_id: 10880, lng: -71.057261, lat: 42.351998)
-Thing.create(city_id: 10881, lng: -71.058284, lat: 42.332745)
-Thing.create(city_id: 10882, lng: -71.108976, lat: 42.265719)
-Thing.create(city_id: 10883, lng: -71.156958, lat: 42.34122)
-Thing.create(city_id: 10884, lng: -71.086426, lat: 42.323595)
-Thing.create(city_id: 10885, lng: -71.086894, lat: 42.32417)
-Thing.create(city_id: 10886, lng: -71.065574, lat: 42.317135)
-Thing.create(city_id: 10887, lng: -71.054151, lat: 42.335919)
-Thing.create(city_id: 10888, lng: -71.066866, lat: 42.302536)
-Thing.create(city_id: 10889, lng: -71.066764, lat: 42.301874)
-Thing.create(city_id: 10890, lng: -71.058707, lat: 42.37227)
-Thing.create(city_id: 10891, lng: -71.047873, lat: 42.327956)
-Thing.create(city_id: 10892, lng: -71.066179, lat: 42.302717)
-Thing.create(city_id: 10893, lng: -71.030194, lat: 42.332329)
-Thing.create(city_id: 10894, lng: -71.065891, lat: 42.302102)
-Thing.create(city_id: 10895, lng: -71.066801, lat: 42.301101)
-Thing.create(city_id: 10896, lng: -71.063457, lat: 42.373748)
-Thing.create(city_id: 10897, lng: -71.029209, lat: 42.332484)
-Thing.create(city_id: 10898, lng: -71.032161, lat: 42.332296)
-Thing.create(city_id: 10899, lng: -71.067576, lat: 42.301488)
-Thing.create(city_id: 10900, lng: -71.031254, lat: 42.332275)
-Thing.create(city_id: 10901, lng: -71.070077, lat: 42.305576)
-Thing.create(city_id: 10902, lng: -71.066946, lat: 42.305096)
-Thing.create(city_id: 10903, lng: -71.048049, lat: 42.335184)
-Thing.create(city_id: 10904, lng: -71.065177, lat: 42.305062)
-Thing.create(city_id: 10905, lng: -71.064015, lat: 42.372598)
-Thing.create(city_id: 10906, lng: -71.035482, lat: 42.375376)
-Thing.create(city_id: 10907, lng: -71.064346, lat: 42.304943)
-Thing.create(city_id: 10908, lng: -71.065907, lat: 42.304868)
-Thing.create(city_id: 10909, lng: -71.064753, lat: 42.304391)
-Thing.create(city_id: 10910, lng: -71.066522, lat: 42.304303)
-Thing.create(city_id: 10911, lng: -71.049573, lat: 42.338733)
-Thing.create(city_id: 10912, lng: -71.063993, lat: 42.304287)
-Thing.create(city_id: 10913, lng: -71.064926, lat: 42.30398)
-Thing.create(city_id: 10914, lng: -71.060865, lat: 42.303696)
-Thing.create(city_id: 10915, lng: -71.042248, lat: 42.331295)
-Thing.create(city_id: 10916, lng: -71.040361, lat: 42.331335)
-Thing.create(city_id: 10917, lng: -71.066085, lat: 42.303669)
-Thing.create(city_id: 10918, lng: -71.064364, lat: 42.303424)
-Thing.create(city_id: 10919, lng: -71.049291, lat: 42.335607)
-Thing.create(city_id: 10920, lng: -71.054631, lat: 42.338984)
-Thing.create(city_id: 10921, lng: -71.063422, lat: 42.3034)
-Thing.create(city_id: 10922, lng: -71.060995, lat: 42.303089)
-Thing.create(city_id: 10923, lng: -71.06491, lat: 42.303056)
-Thing.create(city_id: 10924, lng: -71.058224, lat: 42.330577)
-Thing.create(city_id: 10925, lng: -71.06216, lat: 42.302818)
-Thing.create(city_id: 10926, lng: -71.063951, lat: 42.302693)
-Thing.create(city_id: 10927, lng: -71.061319, lat: 42.302726)
-Thing.create(city_id: 10928, lng: -71.051577, lat: 42.337024)
-Thing.create(city_id: 10929, lng: -71.064831, lat: 42.302378)
-Thing.create(city_id: 10930, lng: -71.061143, lat: 42.301918)
-Thing.create(city_id: 10931, lng: -71.055004, lat: 42.335146)
-Thing.create(city_id: 10932, lng: -71.047915, lat: 42.336764)
-Thing.create(city_id: 10933, lng: -71.062044, lat: 42.301677)
-Thing.create(city_id: 10934, lng: -71.064609, lat: 42.301654)
-Thing.create(city_id: 10935, lng: -71.065973, lat: 42.373687)
-Thing.create(city_id: 10936, lng: -71.06293, lat: 42.30144)
-Thing.create(city_id: 10937, lng: -71.064734, lat: 42.30116)
-Thing.create(city_id: 10938, lng: -71.084869, lat: 42.271092)
-Thing.create(city_id: 10939, lng: -71.162595, lat: 42.271319)
-Thing.create(city_id: 10940, lng: -71.100178, lat: 42.271077)
-Thing.create(city_id: 10941, lng: -71.104196, lat: 42.271089)
-Thing.create(city_id: 10942, lng: -71.098946, lat: 42.271068)
-Thing.create(city_id: 10943, lng: -71.118322, lat: 42.27113)
-Thing.create(city_id: 10944, lng: -71.121909, lat: 42.271138)
-Thing.create(city_id: 10945, lng: -71.151759, lat: 42.27123)
-Thing.create(city_id: 10946, lng: -71.08872, lat: 42.27102)
-Thing.create(city_id: 10947, lng: -71.12725, lat: 42.271151)
-Thing.create(city_id: 10948, lng: -71.148678, lat: 42.271191)
-Thing.create(city_id: 10949, lng: -71.120192, lat: 42.271073)
-Thing.create(city_id: 10950, lng: -71.063776, lat: 42.270869)
-Thing.create(city_id: 10951, lng: -71.16676, lat: 42.271193)
-Thing.create(city_id: 10952, lng: -71.125777, lat: 42.271062)
-Thing.create(city_id: 10953, lng: -71.083717, lat: 42.270909)
-Thing.create(city_id: 10954, lng: -71.073524, lat: 42.270868)
-Thing.create(city_id: 10955, lng: -71.091827, lat: 42.270931)
-Thing.create(city_id: 10956, lng: -71.097728, lat: 42.270947)
-Thing.create(city_id: 10957, lng: -71.105899, lat: 42.270975)
-Thing.create(city_id: 10958, lng: -71.150427, lat: 42.271118)
-Thing.create(city_id: 10959, lng: -71.17315, lat: 42.27118)
-Thing.create(city_id: 10960, lng: -71.169802, lat: 42.271165)
-Thing.create(city_id: 10961, lng: -71.128266, lat: 42.271018)
-Thing.create(city_id: 10962, lng: -71.085901, lat: 42.270862)
-Thing.create(city_id: 10963, lng: -71.165857, lat: 42.271111)
-Thing.create(city_id: 10964, lng: -71.103321, lat: 42.270893)
-Thing.create(city_id: 10965, lng: -71.089712, lat: 42.270823)
-Thing.create(city_id: 10966, lng: -71.124887, lat: 42.270921)
-Thing.create(city_id: 10967, lng: -71.093863, lat: 42.270811)
-Thing.create(city_id: 10968, lng: -71.149695, lat: 42.270991)
-Thing.create(city_id: 10969, lng: -71.09347, lat: 42.270796)
-Thing.create(city_id: 10970, lng: -71.095834, lat: 42.2708)
-Thing.create(city_id: 10971, lng: -71.07952, lat: 42.270724)
-Thing.create(city_id: 10972, lng: -71.169281, lat: 42.271768)
-Thing.create(city_id: 10973, lng: -71.064682, lat: 42.271349)
-Thing.create(city_id: 10974, lng: -71.159234, lat: 42.271602)
-Thing.create(city_id: 10975, lng: -71.0952, lat: 42.271363)
-Thing.create(city_id: 10976, lng: -71.122158, lat: 42.271337)
-Thing.create(city_id: 10977, lng: -71.107179, lat: 42.271224)
-Thing.create(city_id: 10978, lng: -71.123157, lat: 42.271231)
-Thing.create(city_id: 10979, lng: -71.171371, lat: 42.271016)
-Thing.create(city_id: 10980, lng: -71.165258, lat: 42.270982)
-Thing.create(city_id: 10981, lng: -71.163643, lat: 42.270945)
-Thing.create(city_id: 10982, lng: -71.104717, lat: 42.270745)
-Thing.create(city_id: 10983, lng: -71.09274, lat: 42.270698)
-Thing.create(city_id: 10984, lng: -71.121159, lat: 42.270783)
-Thing.create(city_id: 10985, lng: -71.169075, lat: 42.270929)
-Thing.create(city_id: 10986, lng: -71.160873, lat: 42.2709)
-Thing.create(city_id: 10987, lng: -71.146419, lat: 42.270856)
-Thing.create(city_id: 10988, lng: -71.164375, lat: 42.270876)
-Thing.create(city_id: 10989, lng: -71.080594, lat: 42.270587)
-Thing.create(city_id: 10990, lng: -71.131736, lat: 42.270749)
-Thing.create(city_id: 10991, lng: -71.109598, lat: 42.27067)
-Thing.create(city_id: 10992, lng: -71.062988, lat: 42.270492)
-Thing.create(city_id: 10993, lng: -71.10771, lat: 42.270642)
-Thing.create(city_id: 10994, lng: -71.094516, lat: 42.270593)
-Thing.create(city_id: 10995, lng: -71.108732, lat: 42.270641)
-Thing.create(city_id: 10996, lng: -71.102343, lat: 42.270611)
-Thing.create(city_id: 10997, lng: -71.161812, lat: 42.270788)
-Thing.create(city_id: 10998, lng: -71.119051, lat: 42.270651)
-Thing.create(city_id: 10999, lng: -71.081436, lat: 42.270501)
-Thing.create(city_id: 11000, lng: -71.086967, lat: 42.270513)
-Thing.create(city_id: 11001, lng: -71.090945, lat: 42.270475)
-Thing.create(city_id: 11002, lng: -71.122947, lat: 42.248338)
-Thing.create(city_id: 11003, lng: -71.118537, lat: 42.248314)
-Thing.create(city_id: 11004, lng: -71.129206, lat: 42.249952)
-Thing.create(city_id: 11005, lng: -71.118952, lat: 42.249429)
-Thing.create(city_id: 11006, lng: -71.144533, lat: 42.249363)
-Thing.create(city_id: 11007, lng: -71.11319, lat: 42.24905)
-Thing.create(city_id: 11008, lng: -71.114461, lat: 42.248767)
-Thing.create(city_id: 11009, lng: -71.115249, lat: 42.248665)
-Thing.create(city_id: 11010, lng: -71.112542, lat: 42.248419)
-Thing.create(city_id: 11011, lng: -71.116042, lat: 42.248214)
-Thing.create(city_id: 11012, lng: -71.125969, lat: 42.248202)
-Thing.create(city_id: 11013, lng: -71.128231, lat: 42.248167)
-Thing.create(city_id: 11014, lng: -71.132338, lat: 42.24816)
-Thing.create(city_id: 11015, lng: -71.071359, lat: 42.292397)
-Thing.create(city_id: 11016, lng: -71.121799, lat: 42.247964)
-Thing.create(city_id: 11017, lng: -71.137716, lat: 42.247957)
-Thing.create(city_id: 11018, lng: -71.120073, lat: 42.247862)
-Thing.create(city_id: 11019, lng: -71.111825, lat: 42.247814)
-Thing.create(city_id: 11020, lng: -71.116778, lat: 42.247793)
-Thing.create(city_id: 11021, lng: -71.12219, lat: 42.247763)
-Thing.create(city_id: 11022, lng: -71.123555, lat: 42.247763)
-Thing.create(city_id: 11023, lng: -71.114003, lat: 42.247726)
-Thing.create(city_id: 11024, lng: -71.127854, lat: 42.247336)
-Thing.create(city_id: 11025, lng: -71.133294, lat: 42.247743)
-Thing.create(city_id: 11026, lng: -71.11587, lat: 42.247512)
-Thing.create(city_id: 11027, lng: -71.134347, lat: 42.247561)
-Thing.create(city_id: 11028, lng: -71.124649, lat: 42.247499)
-Thing.create(city_id: 11029, lng: -71.117666, lat: 42.247466)
-Thing.create(city_id: 11030, lng: -71.112892, lat: 42.247248)
-Thing.create(city_id: 11031, lng: -71.114425, lat: 42.247201)
-Thing.create(city_id: 11032, lng: -71.11934, lat: 42.247152)
-Thing.create(city_id: 11033, lng: -71.122933, lat: 42.247156)
-Thing.create(city_id: 11034, lng: -71.137972, lat: 42.247095)
-Thing.create(city_id: 11035, lng: -71.125285, lat: 42.246972)
-Thing.create(city_id: 11036, lng: -71.118389, lat: 42.24687)
-Thing.create(city_id: 11037, lng: -71.115258, lat: 42.246842)
-Thing.create(city_id: 11038, lng: -71.116967, lat: 42.24677)
-Thing.create(city_id: 11039, lng: -71.113651, lat: 42.246748)
-Thing.create(city_id: 11040, lng: -71.122558, lat: 42.246499)
-Thing.create(city_id: 11041, lng: -71.120869, lat: 42.246463)
-Thing.create(city_id: 11042, lng: -71.119266, lat: 42.246365)
-Thing.create(city_id: 11043, lng: -71.1145, lat: 42.246258)
-Thing.create(city_id: 11044, lng: -71.116328, lat: 42.24614)
-Thing.create(city_id: 11045, lng: -71.118273, lat: 42.246099)
-Thing.create(city_id: 11046, lng: -71.121796, lat: 42.246041)
-Thing.create(city_id: 11047, lng: -71.120142, lat: 42.245871)
-Thing.create(city_id: 11048, lng: -71.119068, lat: 42.245765)
-Thing.create(city_id: 11049, lng: -71.138804, lat: 42.245825)
-Thing.create(city_id: 11050, lng: -71.114792, lat: 42.245649)
-Thing.create(city_id: 11051, lng: -71.122597, lat: 42.245523)
-Thing.create(city_id: 11052, lng: -71.117628, lat: 42.245468)
-Thing.create(city_id: 11053, lng: -71.121045, lat: 42.245377)
-Thing.create(city_id: 11054, lng: -71.119688, lat: 42.245309)
-Thing.create(city_id: 11055, lng: -71.133831, lat: 42.245336)
-Thing.create(city_id: 11056, lng: -71.135089, lat: 42.358288)
-Thing.create(city_id: 11057, lng: -71.134076, lat: 42.358027)
-Thing.create(city_id: 11058, lng: -71.13609, lat: 42.358467)
-Thing.create(city_id: 11059, lng: -71.02817, lat: 42.334004)
-Thing.create(city_id: 11060, lng: -71.139325, lat: 42.233693)
-Thing.create(city_id: 11061, lng: -71.1391, lat: 42.233697)
-Thing.create(city_id: 11062, lng: -71.124831, lat: 42.36702)
-Thing.create(city_id: 11063, lng: -71.126127, lat: 42.365768)
-Thing.create(city_id: 11064, lng: -71.126887, lat: 42.365206)
-Thing.create(city_id: 11065, lng: -71.071768, lat: 42.35798)
-Thing.create(city_id: 11066, lng: -71.030031, lat: 42.376584)
-Thing.create(city_id: 11067, lng: -71.045153, lat: 42.338013)
-Thing.create(city_id: 11068, lng: -71.029345, lat: 42.3373)
-Thing.create(city_id: 11069, lng: -71.043266, lat: 42.331279)
-Thing.create(city_id: 11070, lng: -71.050215, lat: 42.332207)
-Thing.create(city_id: 11071, lng: -71.040131, lat: 42.369879)
-Thing.create(city_id: 11072, lng: -71.0077, lat: 42.39219)
-Thing.create(city_id: 11073, lng: -71.053936, lat: 42.330156)
-Thing.create(city_id: 11074, lng: -71.029232, lat: 42.333318)
-Thing.create(city_id: 11075, lng: -70.997774, lat: 42.390548)
-Thing.create(city_id: 11076, lng: -71.041333, lat: 42.331268)
-Thing.create(city_id: 11077, lng: -71.058054, lat: 42.375527)
-Thing.create(city_id: 11078, lng: -71.027062, lat: 42.33585)
-Thing.create(city_id: 11079, lng: -71.063033, lat: 42.301129)
-Thing.create(city_id: 11080, lng: -71.145269, lat: 42.283488)
-Thing.create(city_id: 11081, lng: -71.036817, lat: 42.365827)
-Thing.create(city_id: 11082, lng: -71.122912, lat: 42.29296)
-Thing.create(city_id: 11083, lng: -71.057012, lat: 42.351994)
-Thing.create(city_id: 11084, lng: -71.065738, lat: 42.300909)
-Thing.create(city_id: 11085, lng: -71.057194, lat: 42.352406)
-Thing.create(city_id: 11086, lng: -71.03745, lat: 42.366062)
-Thing.create(city_id: 11087, lng: -71.034244, lat: 42.364648)
-Thing.create(city_id: 11088, lng: -71.036285, lat: 42.36652)
-Thing.create(city_id: 11089, lng: -71.038211, lat: 42.366396)
-Thing.create(city_id: 11090, lng: -71.075153, lat: 42.31374)
-Thing.create(city_id: 11091, lng: -71.089486, lat: 42.275695)
-Thing.create(city_id: 11092, lng: -71.151414, lat: 42.347577)
-Thing.create(city_id: 11093, lng: -71.150981, lat: 42.348266)
-Thing.create(city_id: 11094, lng: -71.150478, lat: 42.348872)
-Thing.create(city_id: 11095, lng: -71.088578, lat: 42.275261)
-Thing.create(city_id: 11096, lng: -71.064468, lat: 42.300677)
-Thing.create(city_id: 11097, lng: -71.125678, lat: 42.251017)
-Thing.create(city_id: 11098, lng: -71.063806, lat: 42.301005)
-Thing.create(city_id: 11099, lng: -71.065516, lat: 42.300415)
-Thing.create(city_id: 11100, lng: -71.063496, lat: 42.300157)
-Thing.create(city_id: 11101, lng: -71.062062, lat: 42.301022)
-Thing.create(city_id: 11102, lng: -71.066806, lat: 42.3006)
-Thing.create(city_id: 11103, lng: -71.067092, lat: 42.308526)
-Thing.create(city_id: 11104, lng: -71.068789, lat: 42.307612)
-Thing.create(city_id: 11105, lng: -71.068104, lat: 42.307118)
-Thing.create(city_id: 11106, lng: -71.071813, lat: 42.306255)
-Thing.create(city_id: 11107, lng: -71.070932, lat: 42.306255)
-Thing.create(city_id: 11108, lng: -71.068477, lat: 42.305957)
-Thing.create(city_id: 11109, lng: -71.067587, lat: 42.305683)
-Thing.create(city_id: 11110, lng: -71.072039, lat: 42.305614)
-Thing.create(city_id: 11111, lng: -71.067938, lat: 42.306445)
-Thing.create(city_id: 11112, lng: -71.074545, lat: 42.305816)
-Thing.create(city_id: 11113, lng: -71.073932, lat: 42.305834)
-Thing.create(city_id: 11114, lng: -71.054905, lat: 42.310854)
-Thing.create(city_id: 11115, lng: -71.058573, lat: 42.310736)
-Thing.create(city_id: 11116, lng: -71.059658, lat: 42.310582)
-Thing.create(city_id: 11117, lng: -71.066418, lat: 42.309198)
-Thing.create(city_id: 11118, lng: -71.078949, lat: 42.383267)
-Thing.create(city_id: 11119, lng: -71.069356, lat: 42.379918)
-Thing.create(city_id: 11120, lng: -71.065346, lat: 42.307684)
-Thing.create(city_id: 11121, lng: -71.064381, lat: 42.307592)
-Thing.create(city_id: 11122, lng: -71.063031, lat: 42.307582)
-Thing.create(city_id: 11123, lng: -71.074154, lat: 42.384757)
-Thing.create(city_id: 11124, lng: -71.064178, lat: 42.307055)
-Thing.create(city_id: 11125, lng: -71.056171, lat: 42.306515)
-Thing.create(city_id: 11126, lng: -71.065243, lat: 42.306745)
-Thing.create(city_id: 11127, lng: -71.0648, lat: 42.30587)
-Thing.create(city_id: 11128, lng: -71.066257, lat: 42.377926)
-Thing.create(city_id: 11129, lng: -71.065607, lat: 42.30574)
-Thing.create(city_id: 11130, lng: -71.064056, lat: 42.305572)
-Thing.create(city_id: 11131, lng: -71.065924, lat: 42.307155)
-Thing.create(city_id: 11132, lng: -71.056686, lat: 42.310566)
-Thing.create(city_id: 11133, lng: -71.056353, lat: 42.309715)
-Thing.create(city_id: 11134, lng: -71.054918, lat: 42.309634)
-Thing.create(city_id: 11135, lng: -71.050844, lat: 42.310866)
-Thing.create(city_id: 11136, lng: -71.069981, lat: 42.381748)
-Thing.create(city_id: 11137, lng: -71.051506, lat: 42.310836)
-Thing.create(city_id: 11138, lng: -71.053919, lat: 42.310549)
-Thing.create(city_id: 11139, lng: -71.047014, lat: 42.310287)
-Thing.create(city_id: 11140, lng: -71.051517, lat: 42.310163)
-Thing.create(city_id: 11141, lng: -71.148016, lat: 42.270636)
-Thing.create(city_id: 11142, lng: -71.129683, lat: 42.270547)
-Thing.create(city_id: 11143, lng: -71.130535, lat: 42.270543)
-Thing.create(city_id: 11144, lng: -71.128964, lat: 42.270529)
-Thing.create(city_id: 11145, lng: -71.162847, lat: 42.270608)
-Thing.create(city_id: 11146, lng: -71.098242, lat: 42.270395)
-Thing.create(city_id: 11147, lng: -71.09913, lat: 42.270383)
-Thing.create(city_id: 11148, lng: -71.084429, lat: 42.270323)
-Thing.create(city_id: 11149, lng: -71.082179, lat: 42.270312)
-Thing.create(city_id: 11150, lng: -71.120293, lat: 42.270422)
-Thing.create(city_id: 11151, lng: -71.171997, lat: 42.270579)
-Thing.create(city_id: 11152, lng: -71.106848, lat: 42.270365)
-Thing.create(city_id: 11153, lng: -71.117883, lat: 42.270388)
-Thing.create(city_id: 11154, lng: -71.170578, lat: 42.270546)
-Thing.create(city_id: 11155, lng: -71.168234, lat: 42.270534)
-Thing.create(city_id: 11156, lng: -71.087795, lat: 42.270267)
-Thing.create(city_id: 11157, lng: -71.100897, lat: 42.270312)
-Thing.create(city_id: 11158, lng: -71.105659, lat: 42.270321)
-Thing.create(city_id: 11159, lng: -71.149014, lat: 42.270437)
-Thing.create(city_id: 11160, lng: -71.089082, lat: 42.270227)
-Thing.create(city_id: 11161, lng: -71.128236, lat: 42.270325)
-Thing.create(city_id: 11162, lng: -71.101619, lat: 42.270228)
-Thing.create(city_id: 11163, lng: -71.103973, lat: 42.270195)
-Thing.create(city_id: 11164, lng: -71.169763, lat: 42.270387)
-Thing.create(city_id: 11165, lng: -71.083426, lat: 42.270059)
-Thing.create(city_id: 11166, lng: -71.108956, lat: 42.270142)
-Thing.create(city_id: 11167, lng: -71.104926, lat: 42.270126)
-Thing.create(city_id: 11168, lng: -71.093301, lat: 42.270057)
-Thing.create(city_id: 11169, lng: -71.163719, lat: 42.270256)
-Thing.create(city_id: 11170, lng: -71.147252, lat: 42.270182)
-Thing.create(city_id: 11171, lng: -71.108273, lat: 42.270041)
-Thing.create(city_id: 11172, lng: -71.165429, lat: 42.270211)
-Thing.create(city_id: 11173, lng: -71.16715, lat: 42.270197)
-Thing.create(city_id: 11174, lng: -71.166216, lat: 42.270161)
-Thing.create(city_id: 11175, lng: -71.102889, lat: 42.269945)
-Thing.create(city_id: 11176, lng: -71.12992, lat: 42.270034)
-Thing.create(city_id: 11177, lng: -71.111107, lat: 42.269953)
-Thing.create(city_id: 11178, lng: -71.082874, lat: 42.269836)
-Thing.create(city_id: 11179, lng: -71.131366, lat: 42.269994)
-Thing.create(city_id: 11180, lng: -71.163066, lat: 42.270039)
-Thing.create(city_id: 11181, lng: -71.164512, lat: 42.270037)
-Thing.create(city_id: 11182, lng: -71.097144, lat: 42.269817)
-Thing.create(city_id: 11183, lng: -71.118548, lat: 42.269849)
-Thing.create(city_id: 11184, lng: -71.120655, lat: 42.269844)
-Thing.create(city_id: 11185, lng: -71.161871, lat: 42.26995)
-Thing.create(city_id: 11186, lng: -71.129005, lat: 42.269846)
-Thing.create(city_id: 11187, lng: -71.125654, lat: 42.269826)
-Thing.create(city_id: 11188, lng: -71.106197, lat: 42.269659)
-Thing.create(city_id: 11189, lng: -71.168834, lat: 42.269846)
-Thing.create(city_id: 11190, lng: -71.124762, lat: 42.269693)
-Thing.create(city_id: 11191, lng: -71.090911, lat: 42.269548)
-Thing.create(city_id: 11192, lng: -71.100162, lat: 42.269571)
-Thing.create(city_id: 11193, lng: -71.128263, lat: 42.269618)
-Thing.create(city_id: 11194, lng: -71.109169, lat: 42.269554)
-Thing.create(city_id: 11195, lng: -71.107675, lat: 42.269526)
-Thing.create(city_id: 11196, lng: -71.11736, lat: 42.269546)
-Thing.create(city_id: 11197, lng: -71.170624, lat: 42.269705)
-Thing.create(city_id: 11198, lng: -71.110312, lat: 42.269507)
-Thing.create(city_id: 11199, lng: -71.105509, lat: 42.269478)
-Thing.create(city_id: 11200, lng: -71.120167, lat: 42.269515)
-Thing.create(city_id: 11201, lng: -71.093918, lat: 42.269413)
-Thing.create(city_id: 11202, lng: -71.093473, lat: 42.269408)
-Thing.create(city_id: 11203, lng: -71.104532, lat: 42.269409)
-Thing.create(city_id: 11204, lng: -71.11904, lat: 42.245151)
-Thing.create(city_id: 11205, lng: -71.135065, lat: 42.245145)
-Thing.create(city_id: 11206, lng: -71.115278, lat: 42.245054)
-Thing.create(city_id: 11207, lng: -71.124659, lat: 42.24506)
-Thing.create(city_id: 11208, lng: -71.116324, lat: 42.244959)
-Thing.create(city_id: 11209, lng: -71.133476, lat: 42.245)
-Thing.create(city_id: 11210, lng: -71.121907, lat: 42.244909)
-Thing.create(city_id: 11211, lng: -71.117038, lat: 42.244852)
-Thing.create(city_id: 11212, lng: -71.136445, lat: 42.244819)
-Thing.create(city_id: 11213, lng: -71.120365, lat: 42.24467)
-Thing.create(city_id: 11214, lng: -71.117551, lat: 42.244559)
-Thing.create(city_id: 11215, lng: -71.118947, lat: 42.244542)
-Thing.create(city_id: 11216, lng: -71.122771, lat: 42.244418)
-Thing.create(city_id: 11217, lng: -71.137232, lat: 42.244437)
-Thing.create(city_id: 11218, lng: -71.116494, lat: 42.244339)
-Thing.create(city_id: 11219, lng: -71.132635, lat: 42.244321)
-Thing.create(city_id: 11220, lng: -71.133748, lat: 42.244288)
-Thing.create(city_id: 11221, lng: -71.121909, lat: 42.244249)
-Thing.create(city_id: 11222, lng: -71.136038, lat: 42.244231)
-Thing.create(city_id: 11223, lng: -71.123691, lat: 42.244115)
-Thing.create(city_id: 11224, lng: -71.143999, lat: 42.244133)
-Thing.create(city_id: 11225, lng: -71.119067, lat: 42.243939)
-Thing.create(city_id: 11226, lng: -71.117984, lat: 42.243917)
-Thing.create(city_id: 11227, lng: -71.138172, lat: 42.243916)
-Thing.create(city_id: 11228, lng: -71.136968, lat: 42.243771)
-Thing.create(city_id: 11229, lng: -71.131969, lat: 42.243737)
-Thing.create(city_id: 11230, lng: -71.120014, lat: 42.243643)
-Thing.create(city_id: 11231, lng: -71.122726, lat: 42.243646)
-Thing.create(city_id: 11232, lng: -71.121222, lat: 42.243588)
-Thing.create(city_id: 11233, lng: -71.139263, lat: 42.24344)
-Thing.create(city_id: 11234, lng: -71.134054, lat: 42.243413)
-Thing.create(city_id: 11235, lng: -71.132882, lat: 42.243399)
-Thing.create(city_id: 11236, lng: -71.137687, lat: 42.243372)
-Thing.create(city_id: 11237, lng: -71.122199, lat: 42.243304)
-Thing.create(city_id: 11238, lng: -71.140407, lat: 42.24319)
-Thing.create(city_id: 11239, lng: -71.141568, lat: 42.243116)
-Thing.create(city_id: 11240, lng: -71.142544, lat: 42.243056)
-Thing.create(city_id: 11241, lng: -71.120769, lat: 42.242948)
-Thing.create(city_id: 11242, lng: -71.12702, lat: 42.247027)
-Thing.create(city_id: 11243, lng: -71.124793, lat: 42.246332)
-Thing.create(city_id: 11244, lng: -71.125628, lat: 42.246016)
-Thing.create(city_id: 11245, lng: -71.124059, lat: 42.245632)
-Thing.create(city_id: 11246, lng: -71.126448, lat: 42.24294)
-Thing.create(city_id: 11247, lng: -71.136794, lat: 42.242928)
-Thing.create(city_id: 11248, lng: -71.132222, lat: 42.242904)
-Thing.create(city_id: 11249, lng: -71.138683, lat: 42.242922)
-Thing.create(city_id: 11250, lng: -71.14373, lat: 42.242877)
-Thing.create(city_id: 11251, lng: -71.125511, lat: 42.24281)
-Thing.create(city_id: 11252, lng: -71.137977, lat: 42.242643)
-Thing.create(city_id: 11253, lng: -71.134376, lat: 42.242608)
-Thing.create(city_id: 11254, lng: -71.135728, lat: 42.242571)
-Thing.create(city_id: 11255, lng: -71.123116, lat: 42.242452)
-Thing.create(city_id: 11256, lng: -71.133321, lat: 42.242429)
-Thing.create(city_id: 11257, lng: -71.139549, lat: 42.242397)
-Thing.create(city_id: 11258, lng: -71.141055, lat: 42.242379)
-Thing.create(city_id: 11259, lng: -71.121761, lat: 42.242205)
-Thing.create(city_id: 11260, lng: -71.083301, lat: 42.320703)
-Thing.create(city_id: 11261, lng: -71.084393, lat: 42.320857)
-Thing.create(city_id: 11262, lng: -71.147714, lat: 42.350024)
-Thing.create(city_id: 11263, lng: -71.073854, lat: 42.375756)
-Thing.create(city_id: 11264, lng: -71.082296, lat: 42.320743)
-Thing.create(city_id: 11265, lng: -71.085345, lat: 42.321221)
-Thing.create(city_id: 11266, lng: -71.082804, lat: 42.320571)
-Thing.create(city_id: 11267, lng: -71.075127, lat: 42.37696)
-Thing.create(city_id: 11268, lng: -71.034227, lat: 42.332259)
-Thing.create(city_id: 11269, lng: -71.155532, lat: 42.341487)
-Thing.create(city_id: 11270, lng: -71.135415, lat: 42.355642)
-Thing.create(city_id: 11271, lng: -71.157352, lat: 42.341975)
-Thing.create(city_id: 11272, lng: -71.134777, lat: 42.355429)
-Thing.create(city_id: 11273, lng: -71.147697, lat: 42.349839)
-Thing.create(city_id: 11274, lng: -71.063904, lat: 42.301593)
-Thing.create(city_id: 11275, lng: -71.173389, lat: 42.277789)
-Thing.create(city_id: 11276, lng: -71.172395, lat: 42.277543)
-Thing.create(city_id: 11277, lng: -71.036368, lat: 42.332232)
-Thing.create(city_id: 11278, lng: -71.065257, lat: 42.381277)
-Thing.create(city_id: 11279, lng: -71.03349, lat: 42.378503)
-Thing.create(city_id: 11280, lng: -71.039069, lat: 42.330201)
-Thing.create(city_id: 11281, lng: -71.028314, lat: 42.332225)
-Thing.create(city_id: 11282, lng: -71.038479, lat: 42.332198)
-Thing.create(city_id: 11283, lng: -71.037438, lat: 42.332215)
-Thing.create(city_id: 11284, lng: -71.035347, lat: 42.332199)
-Thing.create(city_id: 11285, lng: -71.035974, lat: 42.331185)
-Thing.create(city_id: 11286, lng: -71.075785, lat: 42.383336)
-Thing.create(city_id: 11287, lng: -71.039545, lat: 42.332174)
-Thing.create(city_id: 11288, lng: -71.041529, lat: 42.371219)
-Thing.create(city_id: 11289, lng: -71.016412, lat: 42.383982)
-Thing.create(city_id: 11290, lng: -71.033293, lat: 42.331416)
-Thing.create(city_id: 11291, lng: -71.040621, lat: 42.332156)
-Thing.create(city_id: 11292, lng: -71.035324, lat: 42.331373)
-Thing.create(city_id: 11293, lng: -71.040754, lat: 42.330611)
-Thing.create(city_id: 11294, lng: -71.038244, lat: 42.331379)
-Thing.create(city_id: 11295, lng: -71.037364, lat: 42.331365)
-Thing.create(city_id: 11296, lng: -71.030738, lat: 42.331127)
-Thing.create(city_id: 11297, lng: -71.032207, lat: 42.330653)
-Thing.create(city_id: 11298, lng: -71.029602, lat: 42.331676)
-Thing.create(city_id: 11299, lng: -71.034224, lat: 42.330625)
-Thing.create(city_id: 11300, lng: -71.036182, lat: 42.330593)
-Thing.create(city_id: 11301, lng: -71.03732, lat: 42.329858)
-Thing.create(city_id: 11302, lng: -71.035301, lat: 42.330568)
-Thing.create(city_id: 11303, lng: -71.03423, lat: 42.377344)
-Thing.create(city_id: 11304, lng: -71.059308, lat: 42.321894)
-Thing.create(city_id: 11305, lng: -71.028106, lat: 42.331962)
-Thing.create(city_id: 11306, lng: -71.024935, lat: 42.381694)
-Thing.create(city_id: 11307, lng: -71.038203, lat: 42.329999)
-Thing.create(city_id: 11308, lng: -71.036034, lat: 42.33012)
-Thing.create(city_id: 11309, lng: -71.03375, lat: 42.329906)
-Thing.create(city_id: 11310, lng: -71.03907, lat: 42.332654)
-Thing.create(city_id: 11311, lng: -71.061748, lat: 42.30802)
-Thing.create(city_id: 11312, lng: -71.035289, lat: 42.329841)
-Thing.create(city_id: 11313, lng: -71.078346, lat: 42.384096)
-Thing.create(city_id: 11314, lng: -71.040677, lat: 42.332521)
-Thing.create(city_id: 11315, lng: -71.044045, lat: 42.370792)
-Thing.create(city_id: 11316, lng: -71.059494, lat: 42.307644)
-Thing.create(city_id: 11317, lng: -71.083547, lat: 42.310614)
-Thing.create(city_id: 11318, lng: -71.050579, lat: 42.309593)
-Thing.create(city_id: 11319, lng: -71.103671, lat: 42.325135)
-Thing.create(city_id: 11320, lng: -71.077702, lat: 42.27605)
-Thing.create(city_id: 11321, lng: -71.058868, lat: 42.307539)
-Thing.create(city_id: 11322, lng: -71.084343, lat: 42.310885)
-Thing.create(city_id: 11323, lng: -71.033169, lat: 42.364247)
-Thing.create(city_id: 11324, lng: -71.085217, lat: 42.311387)
-Thing.create(city_id: 11325, lng: -71.069011, lat: 42.381181)
-Thing.create(city_id: 11326, lng: -71.04967, lat: 42.309496)
-Thing.create(city_id: 11327, lng: -71.128451, lat: 42.246844)
-Thing.create(city_id: 11328, lng: -71.076603, lat: 42.277025)
-Thing.create(city_id: 11329, lng: -71.103188, lat: 42.325678)
-Thing.create(city_id: 11330, lng: -71.048016, lat: 42.309031)
-Thing.create(city_id: 11331, lng: -71.102014, lat: 42.325492)
-Thing.create(city_id: 11332, lng: -71.081504, lat: 42.312938)
-Thing.create(city_id: 11333, lng: -71.082582, lat: 42.312791)
-Thing.create(city_id: 11334, lng: -71.049074, lat: 42.308759)
-Thing.create(city_id: 11335, lng: -71.04937, lat: 42.308078)
-Thing.create(city_id: 11336, lng: -71.04614, lat: 42.30789)
-Thing.create(city_id: 11337, lng: -71.051151, lat: 42.308822)
-Thing.create(city_id: 11338, lng: -71.050816, lat: 42.308431)
-Thing.create(city_id: 11339, lng: -71.05185, lat: 42.309491)
-Thing.create(city_id: 11340, lng: -71.051953, lat: 42.309246)
-Thing.create(city_id: 11341, lng: -71.053084, lat: 42.309995)
-Thing.create(city_id: 11342, lng: -71.052287, lat: 42.310699)
-Thing.create(city_id: 11343, lng: -71.068998, lat: 42.315928)
-Thing.create(city_id: 11344, lng: -71.06853, lat: 42.315401)
-Thing.create(city_id: 11345, lng: -71.069037, lat: 42.314634)
-Thing.create(city_id: 11346, lng: -71.065371, lat: 42.316505)
-Thing.create(city_id: 11347, lng: -71.06481, lat: 42.316207)
-Thing.create(city_id: 11348, lng: -71.056043, lat: 42.316177)
-Thing.create(city_id: 11349, lng: -71.11678, lat: 42.305998)
-Thing.create(city_id: 11350, lng: -71.086036, lat: 42.337693)
-Thing.create(city_id: 11351, lng: -71.082588, lat: 42.3352)
-Thing.create(city_id: 11352, lng: -71.079835, lat: 42.337921)
-Thing.create(city_id: 11353, lng: -71.080402, lat: 42.338366)
-Thing.create(city_id: 11354, lng: -71.088799, lat: 42.334974)
-Thing.create(city_id: 11355, lng: -71.169425, lat: 42.269606)
-Thing.create(city_id: 11356, lng: -71.116188, lat: 42.269428)
-Thing.create(city_id: 11357, lng: -71.095736, lat: 42.269354)
-Thing.create(city_id: 11358, lng: -71.096419, lat: 42.2702)
-Thing.create(city_id: 11359, lng: -71.089991, lat: 42.270061)
-Thing.create(city_id: 11360, lng: -71.095164, lat: 42.26994)
-Thing.create(city_id: 11361, lng: -71.132088, lat: 42.269998)
-Thing.create(city_id: 11362, lng: -71.172306, lat: 42.270056)
-Thing.create(city_id: 11363, lng: -71.171519, lat: 42.269951)
-Thing.create(city_id: 11364, lng: -71.168046, lat: 42.269773)
-Thing.create(city_id: 11365, lng: -71.148327, lat: 42.269636)
-Thing.create(city_id: 11366, lng: -71.101294, lat: 42.269409)
-Thing.create(city_id: 11367, lng: -71.163767, lat: 42.269543)
-Thing.create(city_id: 11368, lng: -71.112712, lat: 42.269369)
-Thing.create(city_id: 11369, lng: -71.127453, lat: 42.269413)
-Thing.create(city_id: 11370, lng: -71.102366, lat: 42.269307)
-Thing.create(city_id: 11371, lng: -71.120698, lat: 42.26934)
-Thing.create(city_id: 11372, lng: -71.103473, lat: 42.269244)
-Thing.create(city_id: 11373, lng: -71.096337, lat: 42.269219)
-Thing.create(city_id: 11374, lng: -71.097868, lat: 42.269166)
-Thing.create(city_id: 11375, lng: -71.091696, lat: 42.269101)
-Thing.create(city_id: 11376, lng: -71.172196, lat: 42.269351)
-Thing.create(city_id: 11377, lng: -71.13099, lat: 42.269223)
-Thing.create(city_id: 11378, lng: -71.168463, lat: 42.269335)
-Thing.create(city_id: 11379, lng: -71.118089, lat: 42.269127)
-Thing.create(city_id: 11380, lng: -71.163068, lat: 42.269258)
-Thing.create(city_id: 11381, lng: -71.105718, lat: 42.269066)
-Thing.create(city_id: 11382, lng: -71.126303, lat: 42.269129)
-Thing.create(city_id: 11383, lng: -71.10824, lat: 42.26902)
-Thing.create(city_id: 11384, lng: -71.164657, lat: 42.269194)
-Thing.create(city_id: 11385, lng: -71.111378, lat: 42.269021)
-Thing.create(city_id: 11386, lng: -71.161846, lat: 42.26917)
-Thing.create(city_id: 11387, lng: -71.099541, lat: 42.268967)
-Thing.create(city_id: 11388, lng: -71.1714, lat: 42.269193)
-Thing.create(city_id: 11389, lng: -71.106608, lat: 42.268967)
-Thing.create(city_id: 11390, lng: -71.170115, lat: 42.269138)
-Thing.create(city_id: 11391, lng: -71.129244, lat: 42.269009)
-Thing.create(city_id: 11392, lng: -71.109234, lat: 42.2689)
-Thing.create(city_id: 11393, lng: -71.110398, lat: 42.268855)
-Thing.create(city_id: 11394, lng: -71.148781, lat: 42.268955)
-Thing.create(city_id: 11395, lng: -71.095703, lat: 42.26875)
-Thing.create(city_id: 11396, lng: -71.128376, lat: 42.268829)
-Thing.create(city_id: 11397, lng: -71.101951, lat: 42.268702)
-Thing.create(city_id: 11398, lng: -71.096319, lat: 42.268668)
-Thing.create(city_id: 11399, lng: -71.11968, lat: 42.268746)
-Thing.create(city_id: 11400, lng: -71.125049, lat: 42.268758)
-Thing.create(city_id: 11401, lng: -71.092473, lat: 42.268642)
-Thing.create(city_id: 11402, lng: -71.163803, lat: 42.26887)
-Thing.create(city_id: 11403, lng: -71.091162, lat: 42.268597)
-Thing.create(city_id: 11404, lng: -71.094946, lat: 42.268602)
-Thing.create(city_id: 11405, lng: -71.093572, lat: 42.268592)
-Thing.create(city_id: 11406, lng: -71.112387, lat: 42.268646)
-Thing.create(city_id: 11407, lng: -71.116795, lat: 42.268647)
-Thing.create(city_id: 11408, lng: -71.093927, lat: 42.268559)
-Thing.create(city_id: 11409, lng: -71.103154, lat: 42.268585)
-Thing.create(city_id: 11410, lng: -71.098505, lat: 42.268559)
-Thing.create(city_id: 11411, lng: -71.150923, lat: 42.268659)
-Thing.create(city_id: 11412, lng: -71.107252, lat: 42.268465)
-Thing.create(city_id: 11413, lng: -71.105241, lat: 42.268437)
-Thing.create(city_id: 11414, lng: -71.125814, lat: 42.268489)
-Thing.create(city_id: 11415, lng: -71.171251, lat: 42.268621)
-Thing.create(city_id: 11416, lng: -71.130603, lat: 42.268487)
-Thing.create(city_id: 11417, lng: -71.124567, lat: 42.242108)
-Thing.create(city_id: 11418, lng: -71.142801, lat: 42.242146)
-Thing.create(city_id: 11419, lng: -71.132613, lat: 42.242111)
-Thing.create(city_id: 11420, lng: -71.124087, lat: 42.242079)
-Thing.create(city_id: 11421, lng: -71.1403, lat: 42.242124)
-Thing.create(city_id: 11422, lng: -71.138558, lat: 42.242072)
-Thing.create(city_id: 11423, lng: -71.126192, lat: 42.241986)
-Thing.create(city_id: 11424, lng: -71.125383, lat: 42.241963)
-Thing.create(city_id: 11425, lng: -71.134811, lat: 42.241852)
-Thing.create(city_id: 11426, lng: -71.122461, lat: 42.241799)
-Thing.create(city_id: 11427, lng: -71.137259, lat: 42.241839)
-Thing.create(city_id: 11428, lng: -71.141374, lat: 42.241764)
-Thing.create(city_id: 11429, lng: -71.121883, lat: 42.241631)
-Thing.create(city_id: 11430, lng: -71.133782, lat: 42.241647)
-Thing.create(city_id: 11431, lng: -71.13127, lat: 42.240053)
-Thing.create(city_id: 11432, lng: -71.136379, lat: 42.241363)
-Thing.create(city_id: 11433, lng: -71.139608, lat: 42.241368)
-Thing.create(city_id: 11434, lng: -71.124458, lat: 42.241316)
-Thing.create(city_id: 11435, lng: -71.123314, lat: 42.241308)
-Thing.create(city_id: 11436, lng: -71.142277, lat: 42.241327)
-Thing.create(city_id: 11437, lng: -71.133028, lat: 42.241256)
-Thing.create(city_id: 11438, lng: -71.137136, lat: 42.241248)
-Thing.create(city_id: 11439, lng: -71.126102, lat: 42.24119)
-Thing.create(city_id: 11440, lng: -71.135212, lat: 42.241148)
-Thing.create(city_id: 11441, lng: -71.125259, lat: 42.241098)
-Thing.create(city_id: 11442, lng: -71.141328, lat: 42.241019)
-Thing.create(city_id: 11443, lng: -71.134423, lat: 42.240843)
-Thing.create(city_id: 11444, lng: -71.143414, lat: 42.240816)
-Thing.create(city_id: 11445, lng: -71.140487, lat: 42.240779)
-Thing.create(city_id: 11446, lng: -71.13948, lat: 42.24068)
-Thing.create(city_id: 11447, lng: -71.138367, lat: 42.240567)
-Thing.create(city_id: 11448, lng: -71.142524, lat: 42.240525)
-Thing.create(city_id: 11449, lng: -71.125163, lat: 42.240411)
-Thing.create(city_id: 11450, lng: -71.135658, lat: 42.240395)
-Thing.create(city_id: 11451, lng: -71.125923, lat: 42.240358)
-Thing.create(city_id: 11452, lng: -71.137256, lat: 42.240303)
-Thing.create(city_id: 11453, lng: -71.136234, lat: 42.240094)
-Thing.create(city_id: 11454, lng: -71.139082, lat: 42.239946)
-Thing.create(city_id: 11455, lng: -71.140561, lat: 42.239895)
-Thing.create(city_id: 11456, lng: -71.13598, lat: 42.239684)
-Thing.create(city_id: 11457, lng: -71.125663, lat: 42.239592)
-Thing.create(city_id: 11458, lng: -71.139771, lat: 42.239631)
-Thing.create(city_id: 11459, lng: -71.141099, lat: 42.2394)
-Thing.create(city_id: 11460, lng: -71.137673, lat: 42.238931)
-Thing.create(city_id: 11461, lng: -71.136693, lat: 42.238607)
-Thing.create(city_id: 11462, lng: -71.132665, lat: 42.238498)
-Thing.create(city_id: 11463, lng: -71.131338, lat: 42.238246)
-Thing.create(city_id: 11464, lng: -71.130289, lat: 42.23754)
-Thing.create(city_id: 11465, lng: -71.127002, lat: 42.237523)
-Thing.create(city_id: 11466, lng: -71.132758, lat: 42.237263)
-Thing.create(city_id: 11467, lng: -71.128457, lat: 42.237198)
-Thing.create(city_id: 11468, lng: -71.129533, lat: 42.237201)
-Thing.create(city_id: 11469, lng: -71.126034, lat: 42.236844)
-Thing.create(city_id: 11470, lng: -71.131031, lat: 42.236821)
-Thing.create(city_id: 11471, lng: -71.130058, lat: 42.23657)
-Thing.create(city_id: 11472, lng: -71.133105, lat: 42.23651)
-Thing.create(city_id: 11473, lng: -71.132193, lat: 42.236365)
-Thing.create(city_id: 11474, lng: -71.129092, lat: 42.236263)
-Thing.create(city_id: 11475, lng: -71.157821, lat: 42.34898)
-Thing.create(city_id: 11476, lng: -71.155772, lat: 42.349019)
-Thing.create(city_id: 11477, lng: -71.158915, lat: 42.348845)
-Thing.create(city_id: 11478, lng: -71.161107, lat: 42.348868)
-Thing.create(city_id: 11479, lng: -71.090845, lat: 42.285499)
-Thing.create(city_id: 11480, lng: -71.160017, lat: 42.34881)
-Thing.create(city_id: 11481, lng: -71.131973, lat: 42.239551)
-Thing.create(city_id: 11482, lng: -71.090896, lat: 42.284803)
-Thing.create(city_id: 11483, lng: -71.119306, lat: 42.311799)
-Thing.create(city_id: 11484, lng: -71.027372, lat: 42.332566)
-Thing.create(city_id: 11485, lng: -71.05836, lat: 42.321564)
-Thing.create(city_id: 11486, lng: -71.090672, lat: 42.286163)
-Thing.create(city_id: 11487, lng: -71.090389, lat: 42.286979)
-Thing.create(city_id: 11488, lng: -71.056106, lat: 42.337756)
-Thing.create(city_id: 11489, lng: -71.102194, lat: 42.336175)
-Thing.create(city_id: 11490, lng: -71.026432, lat: 42.332851)
-Thing.create(city_id: 11491, lng: -71.055353, lat: 42.33566)
-Thing.create(city_id: 11492, lng: -70.996972, lat: 42.390226)
-Thing.create(city_id: 11493, lng: -71.056826, lat: 42.338215)
-Thing.create(city_id: 11494, lng: -71.054631, lat: 42.336802)
-Thing.create(city_id: 11495, lng: -71.055444, lat: 42.33733)
-Thing.create(city_id: 11496, lng: -71.055077, lat: 42.33634)
-Thing.create(city_id: 11497, lng: -71.055214, lat: 42.335871)
-Thing.create(city_id: 11498, lng: -71.056755, lat: 42.3373)
-Thing.create(city_id: 11499, lng: -71.053254, lat: 42.329498)
-Thing.create(city_id: 11500, lng: -71.030217, lat: 42.379757)
-Thing.create(city_id: 11501, lng: -71.057168, lat: 42.336384)
-Thing.create(city_id: 11502, lng: -71.00742, lat: 42.390811)
-Thing.create(city_id: 11503, lng: -71.06418, lat: 42.312715)
-Thing.create(city_id: 11504, lng: -71.06309, lat: 42.310169)
-Thing.create(city_id: 11505, lng: -71.057139, lat: 42.334901)
-Thing.create(city_id: 11506, lng: -71.054905, lat: 42.334292)
-Thing.create(city_id: 11507, lng: -71.011407, lat: 42.390411)
-Thing.create(city_id: 11508, lng: -71.057157, lat: 42.335654)
-Thing.create(city_id: 11509, lng: -71.006218, lat: 42.390596)
-Thing.create(city_id: 11510, lng: -71.054421, lat: 42.335368)
-Thing.create(city_id: 11511, lng: -71.04723, lat: 42.338374)
-Thing.create(city_id: 11512, lng: -71.057123, lat: 42.334126)
-Thing.create(city_id: 11513, lng: -71.067536, lat: 42.311133)
-Thing.create(city_id: 11514, lng: -71.008516, lat: 42.389969)
-Thing.create(city_id: 11515, lng: -71.012292, lat: 42.390623)
-Thing.create(city_id: 11516, lng: -71.009453, lat: 42.389602)
-Thing.create(city_id: 11517, lng: -71.009547, lat: 42.390309)
-Thing.create(city_id: 11518, lng: -71.051477, lat: 42.338164)
-Thing.create(city_id: 11519, lng: -71.004127, lat: 42.390253)
-Thing.create(city_id: 11520, lng: -71.006194, lat: 42.389509)
-Thing.create(city_id: 11521, lng: -71.003168, lat: 42.390198)
-Thing.create(city_id: 11522, lng: -71.057108, lat: 42.333344)
-Thing.create(city_id: 11523, lng: -71.011483, lat: 42.389914)
-Thing.create(city_id: 11524, lng: -71.055814, lat: 42.334699)
-Thing.create(city_id: 11525, lng: -71.007717, lat: 42.389761)
-Thing.create(city_id: 11526, lng: -71.056143, lat: 42.333197)
-Thing.create(city_id: 11527, lng: -71.054518, lat: 42.336063)
-Thing.create(city_id: 11528, lng: -71.054326, lat: 42.334608)
-Thing.create(city_id: 11529, lng: -71.003872, lat: 42.389267)
-Thing.create(city_id: 11530, lng: -71.065796, lat: 42.325654)
-Thing.create(city_id: 11531, lng: -71.058515, lat: 42.321145)
-Thing.create(city_id: 11532, lng: -71.051138, lat: 42.335015)
-Thing.create(city_id: 11533, lng: -71.005099, lat: 42.38937)
-Thing.create(city_id: 11534, lng: -71.003991, lat: 42.385722)
-Thing.create(city_id: 11535, lng: -71.100183, lat: 42.308858)
-Thing.create(city_id: 11536, lng: -71.080844, lat: 42.316668)
-Thing.create(city_id: 11537, lng: -71.072453, lat: 42.374688)
-Thing.create(city_id: 11538, lng: -71.099104, lat: 42.309253)
-Thing.create(city_id: 11539, lng: -71.070671, lat: 42.359658)
-Thing.create(city_id: 11540, lng: -71.07117, lat: 42.37393)
-Thing.create(city_id: 11541, lng: -71.131783, lat: 42.251296)
-Thing.create(city_id: 11542, lng: -71.056165, lat: 42.351785)
-Thing.create(city_id: 11543, lng: -71.132309, lat: 42.250759)
-Thing.create(city_id: 11544, lng: -71.069865, lat: 42.305016)
-Thing.create(city_id: 11545, lng: -71.132889, lat: 42.250157)
-Thing.create(city_id: 11546, lng: -71.133475, lat: 42.24956)
-Thing.create(city_id: 11547, lng: -71.060698, lat: 42.319841)
-Thing.create(city_id: 11548, lng: -71.063659, lat: 42.323136)
-Thing.create(city_id: 11549, lng: -71.047068, lat: 42.330488)
-Thing.create(city_id: 11550, lng: -71.06819, lat: 42.31193)
-Thing.create(city_id: 11551, lng: -71.065461, lat: 42.372429)
-Thing.create(city_id: 11552, lng: -71.057574, lat: 42.374801)
-Thing.create(city_id: 11553, lng: -71.057268, lat: 42.329003)
-Thing.create(city_id: 11554, lng: -71.065625, lat: 42.319239)
-Thing.create(city_id: 11555, lng: -71.058597, lat: 42.315842)
-Thing.create(city_id: 11556, lng: -71.110245, lat: 42.268376)
-Thing.create(city_id: 11557, lng: -71.171876, lat: 42.268559)
-Thing.create(city_id: 11558, lng: -71.163113, lat: 42.268527)
-Thing.create(city_id: 11559, lng: -71.10416, lat: 42.268337)
-Thing.create(city_id: 11560, lng: -71.108241, lat: 42.268347)
-Thing.create(city_id: 11561, lng: -71.169231, lat: 42.268521)
-Thing.create(city_id: 11562, lng: -71.10606, lat: 42.268312)
-Thing.create(city_id: 11563, lng: -71.097906, lat: 42.268245)
-Thing.create(city_id: 11564, lng: -71.113387, lat: 42.26829)
-Thing.create(city_id: 11565, lng: -71.129138, lat: 42.268312)
-Thing.create(city_id: 11566, lng: -71.109225, lat: 42.26819)
-Thing.create(city_id: 11567, lng: -71.094856, lat: 42.268114)
-Thing.create(city_id: 11568, lng: -71.100401, lat: 42.268129)
-Thing.create(city_id: 11569, lng: -71.161296, lat: 42.26832)
-Thing.create(city_id: 11570, lng: -71.149541, lat: 42.268251)
-Thing.create(city_id: 11571, lng: -71.096959, lat: 42.268073)
-Thing.create(city_id: 11572, lng: -71.093071, lat: 42.268058)
-Thing.create(city_id: 11573, lng: -71.115102, lat: 42.268118)
-Thing.create(city_id: 11574, lng: -71.16397, lat: 42.268265)
-Thing.create(city_id: 11575, lng: -71.162138, lat: 42.268238)
-Thing.create(city_id: 11576, lng: -71.128158, lat: 42.268092)
-Thing.create(city_id: 11577, lng: -71.116416, lat: 42.268034)
-Thing.create(city_id: 11578, lng: -71.106334, lat: 42.267943)
-Thing.create(city_id: 11579, lng: -71.10239, lat: 42.267919)
-Thing.create(city_id: 11580, lng: -71.114389, lat: 42.267923)
-Thing.create(city_id: 11581, lng: -71.093942, lat: 42.267801)
-Thing.create(city_id: 11582, lng: -71.164899, lat: 42.268019)
-Thing.create(city_id: 11583, lng: -71.099343, lat: 42.267805)
-Thing.create(city_id: 11584, lng: -71.170757, lat: 42.267988)
-Thing.create(city_id: 11585, lng: -71.152649, lat: 42.267932)
-Thing.create(city_id: 11586, lng: -71.126214, lat: 42.267822)
-Thing.create(city_id: 11587, lng: -71.11727, lat: 42.26779)
-Thing.create(city_id: 11588, lng: -71.104786, lat: 42.267732)
-Thing.create(city_id: 11589, lng: -71.10717, lat: 42.267731)
-Thing.create(city_id: 11590, lng: -71.131105, lat: 42.267803)
-Thing.create(city_id: 11591, lng: -71.098524, lat: 42.267688)
-Thing.create(city_id: 11592, lng: -71.120804, lat: 42.267761)
-Thing.create(city_id: 11593, lng: -71.13, lat: 42.267744)
-Thing.create(city_id: 11594, lng: -71.127255, lat: 42.267705)
-Thing.create(city_id: 11595, lng: -71.096054, lat: 42.267589)
-Thing.create(city_id: 11596, lng: -71.103733, lat: 42.267563)
-Thing.create(city_id: 11597, lng: -71.097294, lat: 42.268818)
-Thing.create(city_id: 11598, lng: -71.13181, lat: 42.268791)
-Thing.create(city_id: 11599, lng: -71.114528, lat: 42.268706)
-Thing.create(city_id: 11600, lng: -71.168258, lat: 42.268805)
-Thing.create(city_id: 11601, lng: -71.120754, lat: 42.268524)
-Thing.create(city_id: 11602, lng: -71.150199, lat: 42.267707)
-Thing.create(city_id: 11603, lng: -71.154681, lat: 42.267716)
-Thing.create(city_id: 11604, lng: -71.097544, lat: 42.267527)
-Thing.create(city_id: 11605, lng: -71.129092, lat: 42.267612)
-Thing.create(city_id: 11606, lng: -71.115402, lat: 42.267542)
-Thing.create(city_id: 11607, lng: -71.110907, lat: 42.267519)
-Thing.create(city_id: 11608, lng: -71.094478, lat: 42.267424)
-Thing.create(city_id: 11609, lng: -71.163627, lat: 42.267632)
-Thing.create(city_id: 11610, lng: -71.110188, lat: 42.267419)
-Thing.create(city_id: 11611, lng: -71.113534, lat: 42.267422)
-Thing.create(city_id: 11612, lng: -71.162658, lat: 42.267562)
-Thing.create(city_id: 11613, lng: -71.102031, lat: 42.267316)
-Thing.create(city_id: 11614, lng: -71.094895, lat: 42.267209)
-Thing.create(city_id: 11615, lng: -71.127997, lat: 42.236207)
-Thing.create(city_id: 11616, lng: -71.126875, lat: 42.236044)
-Thing.create(city_id: 11617, lng: -71.131396, lat: 42.23605)
-Thing.create(city_id: 11618, lng: -71.136468, lat: 42.235935)
-Thing.create(city_id: 11619, lng: -71.130415, lat: 42.235806)
-Thing.create(city_id: 11620, lng: -71.136817, lat: 42.235797)
-Thing.create(city_id: 11621, lng: -71.13345, lat: 42.235768)
-Thing.create(city_id: 11622, lng: -71.136261, lat: 42.235774)
-Thing.create(city_id: 11623, lng: -71.128661, lat: 42.235669)
-Thing.create(city_id: 11624, lng: -71.125973, lat: 42.235597)
-Thing.create(city_id: 11625, lng: -71.138312, lat: 42.24123)
-Thing.create(city_id: 11626, lng: -71.124085, lat: 42.240786)
-Thing.create(city_id: 11627, lng: -71.141545, lat: 42.240207)
-Thing.create(city_id: 11628, lng: -71.138038, lat: 42.239766)
-Thing.create(city_id: 11629, lng: -71.138767, lat: 42.239297)
-Thing.create(city_id: 11630, lng: -71.129343, lat: 42.237814)
-Thing.create(city_id: 11631, lng: -71.131883, lat: 42.237045)
-Thing.create(city_id: 11632, lng: -71.132605, lat: 42.235478)
-Thing.create(city_id: 11633, lng: -71.135273, lat: 42.235468)
-Thing.create(city_id: 11634, lng: -71.129548, lat: 42.235309)
-Thing.create(city_id: 11635, lng: -71.137474, lat: 42.23521)
-Thing.create(city_id: 11636, lng: -71.131886, lat: 42.235129)
-Thing.create(city_id: 11637, lng: -71.130774, lat: 42.235025)
-Thing.create(city_id: 11638, lng: -71.133799, lat: 42.235)
-Thing.create(city_id: 11639, lng: -71.128185, lat: 42.234882)
-Thing.create(city_id: 11640, lng: -71.129809, lat: 42.234759)
-Thing.create(city_id: 11641, lng: -71.132935, lat: 42.234754)
-Thing.create(city_id: 11642, lng: -71.138138, lat: 42.234615)
-Thing.create(city_id: 11643, lng: -71.132348, lat: 42.234449)
-Thing.create(city_id: 11644, lng: -71.131114, lat: 42.23427)
-Thing.create(city_id: 11645, lng: -71.128988, lat: 42.234155)
-Thing.create(city_id: 11646, lng: -71.130134, lat: 42.234004)
-Thing.create(city_id: 11647, lng: -71.138889, lat: 42.233903)
-Thing.create(city_id: 11648, lng: -71.132493, lat: 42.233634)
-Thing.create(city_id: 11649, lng: -71.131481, lat: 42.233481)
-Thing.create(city_id: 11650, lng: -71.134616, lat: 42.233483)
-Thing.create(city_id: 11651, lng: -71.129341, lat: 42.233381)
-Thing.create(city_id: 11652, lng: -71.130498, lat: 42.233216)
-Thing.create(city_id: 11653, lng: -71.132863, lat: 42.23285)
-Thing.create(city_id: 11654, lng: -71.131878, lat: 42.232565)
-Thing.create(city_id: 11655, lng: -71.130902, lat: 42.232292)
-Thing.create(city_id: 11656, lng: -71.129869, lat: 42.232202)
-Thing.create(city_id: 11657, lng: -71.087337, lat: 42.28742)
-Thing.create(city_id: 11658, lng: -71.075958, lat: 42.378809)
-Thing.create(city_id: 11659, lng: -71.153577, lat: 42.334509)
-Thing.create(city_id: 11660, lng: -71.076032, lat: 42.377994)
-Thing.create(city_id: 11661, lng: -71.061195, lat: 42.304464)
-Thing.create(city_id: 11662, lng: -71.153181, lat: 42.333923)
-Thing.create(city_id: 11663, lng: -71.062418, lat: 42.353294)
-Thing.create(city_id: 11664, lng: -71.114721, lat: 42.300912)
-Thing.create(city_id: 11665, lng: -71.116174, lat: 42.261106)
-Thing.create(city_id: 11666, lng: -71.117178, lat: 42.262742)
-Thing.create(city_id: 11667, lng: -71.117698, lat: 42.26354)
-Thing.create(city_id: 11668, lng: -71.116691, lat: 42.26194)
-Thing.create(city_id: 11669, lng: -71.114626, lat: 42.301511)
-Thing.create(city_id: 11670, lng: -71.062226, lat: 42.293488)
-Thing.create(city_id: 11671, lng: -71.122308, lat: 42.275705)
-Thing.create(city_id: 11672, lng: -71.062424, lat: 42.291802)
-Thing.create(city_id: 11673, lng: -71.002917, lat: 42.389228)
-Thing.create(city_id: 11674, lng: -71.000516, lat: 42.385377)
-Thing.create(city_id: 11675, lng: -71.001831, lat: 42.389196)
-Thing.create(city_id: 11676, lng: -71.006207, lat: 42.388961)
-Thing.create(city_id: 11677, lng: -70.999824, lat: 42.383287)
-Thing.create(city_id: 11678, lng: -71.010842, lat: 42.389247)
-Thing.create(city_id: 11679, lng: -71.093839, lat: 42.282017)
-Thing.create(city_id: 11680, lng: -71.006239, lat: 42.388994)
-Thing.create(city_id: 11681, lng: -71.001048, lat: 42.384536)
-Thing.create(city_id: 11682, lng: -71.007327, lat: 42.388993)
-Thing.create(city_id: 11683, lng: -71.001371, lat: 42.383965)
-Thing.create(city_id: 11684, lng: -71.000287, lat: 42.383682)
-Thing.create(city_id: 11685, lng: -71.004147, lat: 42.38861)
-Thing.create(city_id: 11686, lng: -71.066299, lat: 42.365989)
-Thing.create(city_id: 11687, lng: -70.998979, lat: 42.383213)
-Thing.create(city_id: 11688, lng: -71.009421, lat: 42.388805)
-Thing.create(city_id: 11689, lng: -71.047537, lat: 42.338112)
-Thing.create(city_id: 11690, lng: -71.012682, lat: 42.384581)
-Thing.create(city_id: 11691, lng: -71.010002, lat: 42.38873)
-Thing.create(city_id: 11692, lng: -71.005234, lat: 42.388741)
-Thing.create(city_id: 11693, lng: -71.001938, lat: 42.388521)
-Thing.create(city_id: 11694, lng: -71.064553, lat: 42.365541)
-Thing.create(city_id: 11695, lng: -71.000977, lat: 42.383175)
-Thing.create(city_id: 11696, lng: -70.998135, lat: 42.383099)
-Thing.create(city_id: 11697, lng: -71.043521, lat: 42.338073)
-Thing.create(city_id: 11698, lng: -71.050506, lat: 42.337974)
-Thing.create(city_id: 11699, lng: -71.044772, lat: 42.337185)
-Thing.create(city_id: 11700, lng: -71.093435, lat: 42.282369)
-Thing.create(city_id: 11701, lng: -71.09501, lat: 42.283613)
-Thing.create(city_id: 11702, lng: -71.094028, lat: 42.283077)
-Thing.create(city_id: 11703, lng: -71.072059, lat: 42.275373)
-Thing.create(city_id: 11704, lng: -71.044218, lat: 42.337805)
-Thing.create(city_id: 11705, lng: -71.045448, lat: 42.337619)
-Thing.create(city_id: 11706, lng: -71.045787, lat: 42.337456)
-Thing.create(city_id: 11707, lng: -71.093756, lat: 42.280542)
-Thing.create(city_id: 11708, lng: -71.051376, lat: 42.3374)
-Thing.create(city_id: 11709, lng: -71.046987, lat: 42.337557)
-Thing.create(city_id: 11710, lng: -71.048645, lat: 42.337298)
-Thing.create(city_id: 11711, lng: -71.045074, lat: 42.336989)
-Thing.create(city_id: 11712, lng: -71.035653, lat: 42.376017)
-Thing.create(city_id: 11713, lng: -70.999419, lat: 42.383895)
-Thing.create(city_id: 11714, lng: -71.002246, lat: 42.390167)
-Thing.create(city_id: 11715, lng: -71.143851, lat: 42.289628)
-Thing.create(city_id: 11716, lng: -71.143445, lat: 42.361237)
-Thing.create(city_id: 11717, lng: -71.076284, lat: 42.379471)
-Thing.create(city_id: 11718, lng: -71.076344, lat: 42.379552)
-Thing.create(city_id: 11719, lng: -71.143321, lat: 42.289133)
-Thing.create(city_id: 11720, lng: -71.144382, lat: 42.290096)
-Thing.create(city_id: 11721, lng: -71.143028, lat: 42.289841)
-Thing.create(city_id: 11722, lng: -71.067086, lat: 42.37237)
-Thing.create(city_id: 11723, lng: -71.067074, lat: 42.383016)
-Thing.create(city_id: 11724, lng: -71.065537, lat: 42.377865)
-Thing.create(city_id: 11725, lng: -71.031335, lat: 42.381907)
-Thing.create(city_id: 11726, lng: -71.050117, lat: 42.33824)
-Thing.create(city_id: 11727, lng: -71.051917, lat: 42.337794)
-Thing.create(city_id: 11728, lng: -71.036428, lat: 42.336421)
-Thing.create(city_id: 11729, lng: -71.064599, lat: 42.374201)
-Thing.create(city_id: 11730, lng: -71.04503, lat: 42.341342)
-Thing.create(city_id: 11731, lng: -71.0507, lat: 42.340159)
-Thing.create(city_id: 11732, lng: -71.05213, lat: 42.336726)
-Thing.create(city_id: 11733, lng: -71.038136, lat: 42.375119)
-Thing.create(city_id: 11734, lng: -71.068869, lat: 42.375591)
-Thing.create(city_id: 11735, lng: -71.044479, lat: 42.33758)
-Thing.create(city_id: 11736, lng: -71.106102, lat: 42.267239)
-Thing.create(city_id: 11737, lng: -71.160878, lat: 42.267373)
-Thing.create(city_id: 11738, lng: -71.116314, lat: 42.267208)
-Thing.create(city_id: 11739, lng: -71.102945, lat: 42.267144)
-Thing.create(city_id: 11740, lng: -71.100104, lat: 42.267096)
-Thing.create(city_id: 11741, lng: -71.118685, lat: 42.267154)
-Thing.create(city_id: 11742, lng: -71.15304, lat: 42.267253)
-Thing.create(city_id: 11743, lng: -71.099164, lat: 42.267076)
-Thing.create(city_id: 11744, lng: -71.098014, lat: 42.267068)
-Thing.create(city_id: 11745, lng: -71.16529, lat: 42.267268)
-Thing.create(city_id: 11746, lng: -71.097158, lat: 42.267044)
-Thing.create(city_id: 11747, lng: -71.10865, lat: 42.267079)
-Thing.create(city_id: 11748, lng: -71.12441, lat: 42.267101)
-Thing.create(city_id: 11749, lng: -71.101619, lat: 42.26699)
-Thing.create(city_id: 11750, lng: -71.104638, lat: 42.266995)
-Thing.create(city_id: 11751, lng: -71.10555, lat: 42.266996)
-Thing.create(city_id: 11752, lng: -71.15058, lat: 42.267121)
-Thing.create(city_id: 11753, lng: -71.169477, lat: 42.26715)
-Thing.create(city_id: 11754, lng: -71.166112, lat: 42.267104)
-Thing.create(city_id: 11755, lng: -71.126806, lat: 42.266942)
-Thing.create(city_id: 11756, lng: -71.095881, lat: 42.266818)
-Thing.create(city_id: 11757, lng: -71.120858, lat: 42.266859)
-Thing.create(city_id: 11758, lng: -71.130297, lat: 42.266887)
-Thing.create(city_id: 11759, lng: -71.129121, lat: 42.266814)
-Thing.create(city_id: 11760, lng: -71.11051, lat: 42.266711)
-Thing.create(city_id: 11761, lng: -71.115619, lat: 42.266698)
-Thing.create(city_id: 11762, lng: -71.098558, lat: 42.266583)
-Thing.create(city_id: 11763, lng: -71.161978, lat: 42.266768)
-Thing.create(city_id: 11764, lng: -71.108313, lat: 42.266561)
-Thing.create(city_id: 11765, lng: -71.160494, lat: 42.266697)
-Thing.create(city_id: 11766, lng: -71.099776, lat: 42.266497)
-Thing.create(city_id: 11767, lng: -71.125569, lat: 42.266571)
-Thing.create(city_id: 11768, lng: -71.114744, lat: 42.266529)
-Thing.create(city_id: 11769, lng: -71.106827, lat: 42.266483)
-Thing.create(city_id: 11770, lng: -71.103691, lat: 42.266459)
-Thing.create(city_id: 11771, lng: -71.160082, lat: 42.266611)
-Thing.create(city_id: 11772, lng: -71.116485, lat: 42.266433)
-Thing.create(city_id: 11773, lng: -71.119135, lat: 42.266437)
-Thing.create(city_id: 11774, lng: -71.127745, lat: 42.266424)
-Thing.create(city_id: 11775, lng: -71.100832, lat: 42.266331)
-Thing.create(city_id: 11776, lng: -71.10471, lat: 42.266341)
-Thing.create(city_id: 11777, lng: -71.118326, lat: 42.266373)
-Thing.create(city_id: 11778, lng: -71.109556, lat: 42.26634)
-Thing.create(city_id: 11779, lng: -71.106285, lat: 42.266304)
-Thing.create(city_id: 11780, lng: -71.151374, lat: 42.266403)
-Thing.create(city_id: 11781, lng: -71.124738, lat: 42.266305)
-Thing.create(city_id: 11782, lng: -71.09572, lat: 42.266185)
-Thing.create(city_id: 11783, lng: -71.153193, lat: 42.266324)
-Thing.create(city_id: 11784, lng: -71.120143, lat: 42.266172)
-Thing.create(city_id: 11785, lng: -71.128524, lat: 42.266195)
-Thing.create(city_id: 11786, lng: -71.126716, lat: 42.266163)
-Thing.create(city_id: 11787, lng: -71.168351, lat: 42.266222)
-Thing.create(city_id: 11788, lng: -71.161307, lat: 42.266198)
-Thing.create(city_id: 11789, lng: -71.09919, lat: 42.265982)
-Thing.create(city_id: 11790, lng: -71.16576, lat: 42.266146)
-Thing.create(city_id: 11791, lng: -71.113876, lat: 42.265969)
-Thing.create(city_id: 11792, lng: -71.105595, lat: 42.265937)
-Thing.create(city_id: 11793, lng: -71.164719, lat: 42.26609)
-Thing.create(city_id: 11794, lng: -71.052303, lat: 42.35529)
-Thing.create(city_id: 11795, lng: -71.051599, lat: 42.356017)
-Thing.create(city_id: 11796, lng: -71.061553, lat: 42.305294)
-Thing.create(city_id: 11797, lng: -71.050576, lat: 42.356812)
-Thing.create(city_id: 11798, lng: -71.05077, lat: 42.355577)
-Thing.create(city_id: 11799, lng: -71.041387, lat: 42.31748)
-Thing.create(city_id: 11800, lng: -71.050836, lat: 42.355181)
-Thing.create(city_id: 11801, lng: -71.052574, lat: 42.355011)
-Thing.create(city_id: 11802, lng: -71.140742, lat: 42.360277)
-Thing.create(city_id: 11803, lng: -71.050744, lat: 42.355638)
-Thing.create(city_id: 11804, lng: -71.052516, lat: 42.355037)
-Thing.create(city_id: 11805, lng: -71.051401, lat: 42.354939)
-Thing.create(city_id: 11806, lng: -71.160128, lat: 42.345854)
-Thing.create(city_id: 11807, lng: -71.141746, lat: 42.3582)
-Thing.create(city_id: 11808, lng: -71.141473, lat: 42.358769)
-Thing.create(city_id: 11809, lng: -71.141115, lat: 42.359503)
-Thing.create(city_id: 11810, lng: -71.088198, lat: 42.287558)
-Thing.create(city_id: 11811, lng: -71.139743, lat: 42.362067)
-Thing.create(city_id: 11812, lng: -71.137736, lat: 42.285926)
-Thing.create(city_id: 11813, lng: -71.089266, lat: 42.287724)
-Thing.create(city_id: 11814, lng: -71.082977, lat: 42.299469)
-Thing.create(city_id: 11815, lng: -71.09109, lat: 42.328386)
-Thing.create(city_id: 11816, lng: -71.137657, lat: 42.285041)
-Thing.create(city_id: 11817, lng: -71.122117, lat: 42.292457)
-Thing.create(city_id: 11818, lng: -71.136862, lat: 42.286178)
-Thing.create(city_id: 11819, lng: -71.131484, lat: 42.288128)
-Thing.create(city_id: 11820, lng: -71.137596, lat: 42.284264)
-Thing.create(city_id: 11821, lng: -71.123933, lat: 42.29172)
-Thing.create(city_id: 11822, lng: -71.05649, lat: 42.350872)
-Thing.create(city_id: 11823, lng: -71.123496, lat: 42.29232)
-Thing.create(city_id: 11824, lng: -71.138232, lat: 42.283596)
-Thing.create(city_id: 11825, lng: -71.130674, lat: 42.287853)
-Thing.create(city_id: 11826, lng: -71.137522, lat: 42.283417)
-Thing.create(city_id: 11827, lng: -71.137461, lat: 42.282612)
-Thing.create(city_id: 11828, lng: -71.137371, lat: 42.281733)
-Thing.create(city_id: 11829, lng: -71.137308, lat: 42.280895)
-Thing.create(city_id: 11830, lng: -71.136982, lat: 42.279042)
-Thing.create(city_id: 11831, lng: -71.125744, lat: 42.289168)
-Thing.create(city_id: 11832, lng: -71.137062, lat: 42.280064)
-Thing.create(city_id: 11833, lng: -71.131473, lat: 42.289277)
-Thing.create(city_id: 11834, lng: -71.136766, lat: 42.280288)
-Thing.create(city_id: 11835, lng: -71.132473, lat: 42.288499)
-Thing.create(city_id: 11836, lng: -71.057696, lat: 42.349818)
-Thing.create(city_id: 11837, lng: -71.057273, lat: 42.349394)
-Thing.create(city_id: 11838, lng: -71.057319, lat: 42.349122)
-Thing.create(city_id: 11839, lng: -71.056874, lat: 42.349678)
-Thing.create(city_id: 11840, lng: -71.056556, lat: 42.350253)
-Thing.create(city_id: 11841, lng: -71.056398, lat: 42.351044)
-Thing.create(city_id: 11842, lng: -71.056814, lat: 42.350405)
-Thing.create(city_id: 11843, lng: -71.057831, lat: 42.349797)
-Thing.create(city_id: 11844, lng: -71.055767, lat: 42.352279)
-Thing.create(city_id: 11845, lng: -71.056269, lat: 42.350846)
-Thing.create(city_id: 11846, lng: -71.05769, lat: 42.349835)
-Thing.create(city_id: 11847, lng: -71.056196, lat: 42.35142)
-Thing.create(city_id: 11848, lng: -71.056015, lat: 42.351333)
-Thing.create(city_id: 11849, lng: -71.168612, lat: 42.263401)
-Thing.create(city_id: 11850, lng: -71.118289, lat: 42.276377)
-Thing.create(city_id: 11851, lng: -71.117529, lat: 42.276047)
-Thing.create(city_id: 11852, lng: -71.051576, lat: 42.37366)
-Thing.create(city_id: 11853, lng: -71.056838, lat: 42.348822)
-Thing.create(city_id: 11854, lng: -71.113334, lat: 42.251069)
-Thing.create(city_id: 11855, lng: -71.145541, lat: 42.255741)
-Thing.create(city_id: 11856, lng: -71.177228, lat: 42.280998)
-Thing.create(city_id: 11857, lng: -71.152965, lat: 42.264016)
-Thing.create(city_id: 11858, lng: -71.009265, lat: 42.388145)
-Thing.create(city_id: 11859, lng: -71.031231, lat: 42.380885)
-Thing.create(city_id: 11860, lng: -71.008048, lat: 42.387952)
-Thing.create(city_id: 11861, lng: -71.071852, lat: 42.382657)
-Thing.create(city_id: 11862, lng: -71.064337, lat: 42.373373)
-Thing.create(city_id: 11863, lng: -71.051317, lat: 42.34138)
-Thing.create(city_id: 11864, lng: -71.007589, lat: 42.393258)
-Thing.create(city_id: 11865, lng: -71.006359, lat: 42.392199)
-Thing.create(city_id: 11866, lng: -71.067111, lat: 42.380002)
-Thing.create(city_id: 11867, lng: -71.053536, lat: 42.341217)
-Thing.create(city_id: 11868, lng: -71.063513, lat: 42.380475)
-Thing.create(city_id: 11869, lng: -71.078625, lat: 42.382616)
-Thing.create(city_id: 11870, lng: -71.062672, lat: 42.376808)
-Thing.create(city_id: 11871, lng: -71.039059, lat: 42.376484)
-Thing.create(city_id: 11872, lng: -71.063422, lat: 42.372707)
-Thing.create(city_id: 11873, lng: -71.038237, lat: 42.378266)
-Thing.create(city_id: 11874, lng: -71.036083, lat: 42.374858)
-Thing.create(city_id: 11875, lng: -71.09475, lat: 42.279244)
-Thing.create(city_id: 11876, lng: -71.039843, lat: 42.333759)
-Thing.create(city_id: 11877, lng: -71.053668, lat: 42.342735)
-Thing.create(city_id: 11878, lng: -71.045703, lat: 42.338755)
-Thing.create(city_id: 11879, lng: -71.050366, lat: 42.339133)
-Thing.create(city_id: 11880, lng: -71.047857, lat: 42.339118)
-Thing.create(city_id: 11881, lng: -71.038205, lat: 42.330135)
-Thing.create(city_id: 11882, lng: -71.052701, lat: 42.340695)
-Thing.create(city_id: 11883, lng: -71.049018, lat: 42.339065)
-Thing.create(city_id: 11884, lng: -71.058806, lat: 42.325825)
-Thing.create(city_id: 11885, lng: -71.058934, lat: 42.377787)
-Thing.create(city_id: 11886, lng: -71.0302, lat: 42.333144)
-Thing.create(city_id: 11887, lng: -71.036223, lat: 42.33448)
-Thing.create(city_id: 11888, lng: -71.05103, lat: 42.339614)
-Thing.create(city_id: 11889, lng: -71.058144, lat: 42.330367)
-Thing.create(city_id: 11890, lng: -71.053088, lat: 42.339512)
-Thing.create(city_id: 11891, lng: -71.051936, lat: 42.33891)
-Thing.create(city_id: 11892, lng: -71.04822, lat: 42.338557)
-Thing.create(city_id: 11893, lng: -71.031229, lat: 42.33145)
-Thing.create(city_id: 11894, lng: -71.063268, lat: 42.318637)
-Thing.create(city_id: 11895, lng: -71.052714, lat: 42.339693)
-Thing.create(city_id: 11896, lng: -71.04223, lat: 42.334699)
-Thing.create(city_id: 11897, lng: -71.035676, lat: 42.34064)
-Thing.create(city_id: 11898, lng: -71.037167, lat: 42.381307)
-Thing.create(city_id: 11899, lng: -71.079341, lat: 42.382403)
-Thing.create(city_id: 11900, lng: -71.035727, lat: 42.341451)
-Thing.create(city_id: 11901, lng: -71.03243, lat: 42.382632)
-Thing.create(city_id: 11902, lng: -71.074919, lat: 42.387348)
-Thing.create(city_id: 11903, lng: -71.069946, lat: 42.312607)
-Thing.create(city_id: 11904, lng: -71.06541, lat: 42.320615)
-Thing.create(city_id: 11905, lng: -71.046355, lat: 42.339171)
-Thing.create(city_id: 11906, lng: -71.069506, lat: 42.379088)
-Thing.create(city_id: 11907, lng: -71.121869, lat: 42.265941)
-Thing.create(city_id: 11908, lng: -71.102969, lat: 42.265803)
-Thing.create(city_id: 11909, lng: -71.15921, lat: 42.265976)
-Thing.create(city_id: 11910, lng: -71.12252, lat: 42.265855)
-Thing.create(city_id: 11911, lng: -71.162825, lat: 42.26598)
-Thing.create(city_id: 11912, lng: -71.107464, lat: 42.265791)
-Thing.create(city_id: 11913, lng: -71.101117, lat: 42.265726)
-Thing.create(city_id: 11914, lng: -71.103624, lat: 42.26573)
-Thing.create(city_id: 11915, lng: -71.153899, lat: 42.265881)
-Thing.create(city_id: 11916, lng: -71.117295, lat: 42.26692)
-Thing.create(city_id: 11917, lng: -71.15116, lat: 42.26685)
-Thing.create(city_id: 11918, lng: -71.162853, lat: 42.26674)
-Thing.create(city_id: 11919, lng: -71.102374, lat: 42.266477)
-Thing.create(city_id: 11920, lng: -71.112154, lat: 42.266389)
-Thing.create(city_id: 11921, lng: -71.16422, lat: 42.266497)
-Thing.create(city_id: 11922, lng: -71.097755, lat: 42.266151)
-Thing.create(city_id: 11923, lng: -71.107955, lat: 42.266064)
-Thing.create(city_id: 11924, lng: -71.129415, lat: 42.266019)
-Thing.create(city_id: 11925, lng: -71.100048, lat: 42.2657)
-Thing.create(city_id: 11926, lng: -71.161742, lat: 42.265885)
-Thing.create(city_id: 11927, lng: -71.112718, lat: 42.265719)
-Thing.create(city_id: 11928, lng: -71.106297, lat: 42.265691)
-Thing.create(city_id: 11929, lng: -71.11705, lat: 42.265718)
-Thing.create(city_id: 11930, lng: -71.127619, lat: 42.265738)
-Thing.create(city_id: 11931, lng: -71.116047, lat: 42.265689)
-Thing.create(city_id: 11932, lng: -71.111671, lat: 42.265655)
-Thing.create(city_id: 11933, lng: -71.152096, lat: 42.265772)
-Thing.create(city_id: 11934, lng: -71.104193, lat: 42.265607)
-Thing.create(city_id: 11935, lng: -71.096974, lat: 42.265566)
-Thing.create(city_id: 11936, lng: -71.108306, lat: 42.265591)
-Thing.create(city_id: 11937, lng: -71.098551, lat: 42.265547)
-Thing.create(city_id: 11938, lng: -71.121016, lat: 42.265614)
-Thing.create(city_id: 11939, lng: -71.114613, lat: 42.265591)
-Thing.create(city_id: 11940, lng: -71.118204, lat: 42.265552)
-Thing.create(city_id: 11941, lng: -71.151206, lat: 42.26565)
-Thing.create(city_id: 11942, lng: -71.128548, lat: 42.265559)
-Thing.create(city_id: 11943, lng: -71.164045, lat: 42.265666)
-Thing.create(city_id: 11944, lng: -71.125065, lat: 42.265539)
-Thing.create(city_id: 11945, lng: -71.160601, lat: 42.265636)
-Thing.create(city_id: 11946, lng: -71.105279, lat: 42.265454)
-Thing.create(city_id: 11947, lng: -71.09628, lat: 42.265421)
-Thing.create(city_id: 11948, lng: -71.120331, lat: 42.265446)
-Thing.create(city_id: 11949, lng: -71.162192, lat: 42.265499)
-Thing.create(city_id: 11950, lng: -71.10027, lat: 42.265258)
-Thing.create(city_id: 11951, lng: -71.168315, lat: 42.265459)
-Thing.create(city_id: 11952, lng: -71.164791, lat: 42.265372)
-Thing.create(city_id: 11953, lng: -71.166415, lat: 42.265346)
-Thing.create(city_id: 11954, lng: -71.103614, lat: 42.265125)
-Thing.create(city_id: 11955, lng: -71.158364, lat: 42.2653)
-Thing.create(city_id: 11956, lng: -71.126151, lat: 42.265159)
-Thing.create(city_id: 11957, lng: -71.099411, lat: 42.265062)
-Thing.create(city_id: 11958, lng: -71.106051, lat: 42.265071)
-Thing.create(city_id: 11959, lng: -71.1011, lat: 42.26502)
-Thing.create(city_id: 11960, lng: -71.126873, lat: 42.265107)
-Thing.create(city_id: 11961, lng: -71.097687, lat: 42.265008)
-Thing.create(city_id: 11962, lng: -71.162795, lat: 42.26519)
-Thing.create(city_id: 11963, lng: -71.096847, lat: 42.264961)
-Thing.create(city_id: 11964, lng: -71.115668, lat: 42.264981)
-Thing.create(city_id: 11965, lng: -71.116891, lat: 42.264966)
-Thing.create(city_id: 11966, lng: -71.109201, lat: 42.26494)
-Thing.create(city_id: 11967, lng: -71.10844, lat: 42.26493)
-Thing.create(city_id: 11968, lng: -71.129253, lat: 42.252589)
-Thing.create(city_id: 11969, lng: -71.089077, lat: 42.274006)
-Thing.create(city_id: 11970, lng: -71.058763, lat: 42.299799)
-Thing.create(city_id: 11971, lng: -71.054472, lat: 42.352376)
-Thing.create(city_id: 11972, lng: -71.056967, lat: 42.352094)
-Thing.create(city_id: 11973, lng: -71.05738, lat: 42.349695)
-Thing.create(city_id: 11974, lng: -71.057484, lat: 42.349935)
-Thing.create(city_id: 11975, lng: -71.080591, lat: 42.32105)
-Thing.create(city_id: 11976, lng: -71.065982, lat: 42.321663)
-Thing.create(city_id: 11977, lng: -71.091094, lat: 42.34928)
-Thing.create(city_id: 11978, lng: -71.09699, lat: 42.266665)
-Thing.create(city_id: 11979, lng: -71.122093, lat: 42.267847)
-Thing.create(city_id: 11980, lng: -71.096404, lat: 42.266053)
-Thing.create(city_id: 11981, lng: -71.055414, lat: 42.315141)
-Thing.create(city_id: 11982, lng: -71.08851, lat: 42.274627)
-Thing.create(city_id: 11983, lng: -71.12824, lat: 42.249122)
-Thing.create(city_id: 11984, lng: -71.103377, lat: 42.264167)
-Thing.create(city_id: 11985, lng: -71.102735, lat: 42.263708)
-Thing.create(city_id: 11986, lng: -71.110521, lat: 42.328888)
-Thing.create(city_id: 11987, lng: -71.043758, lat: 42.33674)
-Thing.create(city_id: 11988, lng: -71.150393, lat: 42.351202)
-Thing.create(city_id: 11989, lng: -71.042666, lat: 42.336461)
-Thing.create(city_id: 11990, lng: -71.06443, lat: 42.380433)
-Thing.create(city_id: 11991, lng: -71.104028, lat: 42.263703)
-Thing.create(city_id: 11992, lng: -71.164275, lat: 42.351968)
-Thing.create(city_id: 11993, lng: -71.146824, lat: 42.35202)
-Thing.create(city_id: 11994, lng: -71.146395, lat: 42.352776)
-Thing.create(city_id: 11995, lng: -71.164409, lat: 42.35123)
-Thing.create(city_id: 11996, lng: -71.164535, lat: 42.350515)
-Thing.create(city_id: 11997, lng: -71.147245, lat: 42.351268)
-Thing.create(city_id: 11998, lng: -71.146012, lat: 42.353487)
-Thing.create(city_id: 11999, lng: -71.145537, lat: 42.354315)
-Thing.create(city_id: 12000, lng: -71.146211, lat: 42.28853)
-Thing.create(city_id: 12001, lng: -71.075731, lat: 42.300677)
-Thing.create(city_id: 12002, lng: -71.138251, lat: 42.293933)
-Thing.create(city_id: 12003, lng: -71.063391, lat: 42.315771)
-Thing.create(city_id: 12004, lng: -71.146415, lat: 42.352142)
-Thing.create(city_id: 12005, lng: -71.043668, lat: 42.336406)
-Thing.create(city_id: 12006, lng: -71.151874, lat: 42.346838)
-Thing.create(city_id: 12007, lng: -71.088322, lat: 42.283314)
-Thing.create(city_id: 12008, lng: -71.163013, lat: 42.266217)
-Thing.create(city_id: 12009, lng: -71.13723, lat: 42.294216)
-Thing.create(city_id: 12010, lng: -71.16209, lat: 42.26849)
-Thing.create(city_id: 12011, lng: -71.162036, lat: 42.270227)
-Thing.create(city_id: 12012, lng: -71.058927, lat: 42.324013)
-Thing.create(city_id: 12013, lng: -71.087863, lat: 42.275319)
-Thing.create(city_id: 12014, lng: -71.086977, lat: 42.282653)
-Thing.create(city_id: 12015, lng: -71.156704, lat: 42.277665)
-Thing.create(city_id: 12016, lng: -71.081562, lat: 42.317189)
-Thing.create(city_id: 12017, lng: -71.079403, lat: 42.315768)
-Thing.create(city_id: 12018, lng: -71.055054, lat: 42.316)
-Thing.create(city_id: 12019, lng: -71.145653, lat: 42.260295)
-Thing.create(city_id: 12020, lng: -71.054475, lat: 42.315548)
-Thing.create(city_id: 12021, lng: -71.077429, lat: 42.314335)
-Thing.create(city_id: 12022, lng: -71.052844, lat: 42.313744)
-Thing.create(city_id: 12023, lng: -71.056203, lat: 42.315275)
-Thing.create(city_id: 12024, lng: -71.059813, lat: 42.322648)
-Thing.create(city_id: 12025, lng: -71.062347, lat: 42.315068)
-Thing.create(city_id: 12026, lng: -71.063226, lat: 42.322321)
-Thing.create(city_id: 12027, lng: -70.995371, lat: 42.382867)
-Thing.create(city_id: 12028, lng: -70.996246, lat: 42.382997)
-Thing.create(city_id: 12029, lng: -71.065584, lat: 42.297187)
-Thing.create(city_id: 12030, lng: -71.003048, lat: 42.388523)
-Thing.create(city_id: 12031, lng: -71.006178, lat: 42.388166)
-Thing.create(city_id: 12032, lng: -71.000042, lat: 42.382666)
-Thing.create(city_id: 12033, lng: -71.007287, lat: 42.388302)
-Thing.create(city_id: 12034, lng: -70.998601, lat: 42.382399)
-Thing.create(city_id: 12035, lng: -71.002545, lat: 42.387963)
-Thing.create(city_id: 12036, lng: -70.999284, lat: 42.382759)
-Thing.create(city_id: 12037, lng: -71.003704, lat: 42.387923)
-Thing.create(city_id: 12038, lng: -71.003775, lat: 42.391829)
-Thing.create(city_id: 12039, lng: -71.004863, lat: 42.388006)
-Thing.create(city_id: 12040, lng: -70.999191, lat: 42.382227)
-Thing.create(city_id: 12041, lng: -71.007826, lat: 42.392616)
-Thing.create(city_id: 12042, lng: -71.010029, lat: 42.392868)
-Thing.create(city_id: 12043, lng: -71.008994, lat: 42.392848)
-Thing.create(city_id: 12044, lng: -71.002568, lat: 42.387734)
-Thing.create(city_id: 12045, lng: -71.004336, lat: 42.392737)
-Thing.create(city_id: 12046, lng: -70.99999, lat: 42.390902)
-Thing.create(city_id: 12047, lng: -71.012654, lat: 42.387708)
-Thing.create(city_id: 12048, lng: -71.003284, lat: 42.392406)
-Thing.create(city_id: 12049, lng: -71.006773, lat: 42.392301)
-Thing.create(city_id: 12050, lng: -71.006147, lat: 42.392818)
-Thing.create(city_id: 12051, lng: -71.008777, lat: 42.392195)
-Thing.create(city_id: 12052, lng: -71.009973, lat: 42.392198)
-Thing.create(city_id: 12053, lng: -71.010448, lat: 42.39173)
-Thing.create(city_id: 12054, lng: -71.00724, lat: 42.391532)
-Thing.create(city_id: 12055, lng: -70.998523, lat: 42.389874)
-Thing.create(city_id: 12056, lng: -70.996766, lat: 42.390126)
-Thing.create(city_id: 12057, lng: -70.995226, lat: 42.39191)
-Thing.create(city_id: 12058, lng: -71.001111, lat: 42.390126)
-Thing.create(city_id: 12059, lng: -71.000803, lat: 42.391269)
-Thing.create(city_id: 12060, lng: -70.999137, lat: 42.390518)
-Thing.create(city_id: 12061, lng: -71.000117, lat: 42.389961)
-Thing.create(city_id: 12062, lng: -71.03483, lat: 42.380483)
-Thing.create(city_id: 12063, lng: -70.997556, lat: 42.389512)
-Thing.create(city_id: 12064, lng: -71.037015, lat: 42.377952)
-Thing.create(city_id: 12065, lng: -71.029828, lat: 42.380643)
-Thing.create(city_id: 12066, lng: -71.033488, lat: 42.381283)
-Thing.create(city_id: 12067, lng: -71.028459, lat: 42.380382)
-Thing.create(city_id: 12068, lng: -71.037084, lat: 42.38049)
-Thing.create(city_id: 12069, lng: -71.038735, lat: 42.380499)
-Thing.create(city_id: 12070, lng: -71.034313, lat: 42.379725)
-Thing.create(city_id: 12071, lng: -71.033703, lat: 42.38047)
-Thing.create(city_id: 12072, lng: -71.032304, lat: 42.380372)
-Thing.create(city_id: 12073, lng: -71.030788, lat: 42.38038)
-Thing.create(city_id: 12074, lng: -71.033335, lat: 42.380093)
-Thing.create(city_id: 12075, lng: -71.029383, lat: 42.380034)
-Thing.create(city_id: 12076, lng: -71.035697, lat: 42.379979)
-Thing.create(city_id: 12077, lng: -71.038462, lat: 42.379781)
-Thing.create(city_id: 12078, lng: -71.03295, lat: 42.379472)
-Thing.create(city_id: 12079, lng: -71.031309, lat: 42.379311)
-Thing.create(city_id: 12080, lng: -71.036812, lat: 42.37956)
-Thing.create(city_id: 12081, lng: -71.039147, lat: 42.379512)
-Thing.create(city_id: 12082, lng: -71.027151, lat: 42.337343)
-Thing.create(city_id: 12083, lng: -71.041934, lat: 42.344018)
-Thing.create(city_id: 12084, lng: -71.102522, lat: 42.31821)
-Thing.create(city_id: 12085, lng: -71.103028, lat: 42.318118)
-Thing.create(city_id: 12086, lng: -71.053935, lat: 42.338453)
-Thing.create(city_id: 12087, lng: -71.026077, lat: 42.338386)
-Thing.create(city_id: 12088, lng: -71.03621, lat: 42.32962)
-Thing.create(city_id: 12089, lng: -71.043048, lat: 42.343055)
-Thing.create(city_id: 12090, lng: -71.027106, lat: 42.338354)
-Thing.create(city_id: 12091, lng: -71.037938, lat: 42.344532)
-Thing.create(city_id: 12092, lng: -71.041068, lat: 42.345746)
-Thing.create(city_id: 12093, lng: -71.039082, lat: 42.344498)
-Thing.create(city_id: 12094, lng: -71.03817, lat: 42.34473)
-Thing.create(city_id: 12095, lng: -71.032715, lat: 42.330267)
-Thing.create(city_id: 12096, lng: -71.03736, lat: 42.343982)
-Thing.create(city_id: 12097, lng: -71.039651, lat: 42.344829)
-Thing.create(city_id: 12098, lng: -71.047026, lat: 42.338632)
-Thing.create(city_id: 12099, lng: -71.055628, lat: 42.338457)
-Thing.create(city_id: 12100, lng: -71.064068, lat: 42.375951)
-Thing.create(city_id: 12101, lng: -71.048011, lat: 42.337729)
-Thing.create(city_id: 12102, lng: -71.068785, lat: 42.314058)
-Thing.create(city_id: 12103, lng: -71.150506, lat: 42.265031)
-Thing.create(city_id: 12104, lng: -71.119447, lat: 42.264913)
-Thing.create(city_id: 12105, lng: -71.160945, lat: 42.265034)
-Thing.create(city_id: 12106, lng: -71.153245, lat: 42.264992)
-Thing.create(city_id: 12107, lng: -71.120316, lat: 42.264841)
-Thing.create(city_id: 12108, lng: -71.154066, lat: 42.264939)
-Thing.create(city_id: 12109, lng: -71.112058, lat: 42.264782)
-Thing.create(city_id: 12110, lng: -71.121146, lat: 42.264784)
-Thing.create(city_id: 12111, lng: -71.106974, lat: 42.264721)
-Thing.create(city_id: 12112, lng: -71.118092, lat: 42.264751)
-Thing.create(city_id: 12113, lng: -71.127835, lat: 42.264755)
-Thing.create(city_id: 12114, lng: -71.162218, lat: 42.264826)
-Thing.create(city_id: 12115, lng: -71.098258, lat: 42.264617)
-Thing.create(city_id: 12116, lng: -71.166614, lat: 42.264806)
-Thing.create(city_id: 12117, lng: -71.149089, lat: 42.264734)
-Thing.create(city_id: 12118, lng: -71.151856, lat: 42.264742)
-Thing.create(city_id: 12119, lng: -71.110956, lat: 42.264592)
-Thing.create(city_id: 12120, lng: -71.115681, lat: 42.264596)
-Thing.create(city_id: 12121, lng: -71.124405, lat: 42.264576)
-Thing.create(city_id: 12122, lng: -71.153342, lat: 42.264652)
-Thing.create(city_id: 12123, lng: -71.163945, lat: 42.264674)
-Thing.create(city_id: 12124, lng: -71.168002, lat: 42.264665)
-Thing.create(city_id: 12125, lng: -71.10019, lat: 42.264441)
-Thing.create(city_id: 12126, lng: -71.147214, lat: 42.264576)
-Thing.create(city_id: 12127, lng: -71.097206, lat: 42.264376)
-Thing.create(city_id: 12128, lng: -71.105743, lat: 42.264401)
-Thing.create(city_id: 12129, lng: -71.164799, lat: 42.264564)
-Thing.create(city_id: 12130, lng: -71.126007, lat: 42.264441)
-Thing.create(city_id: 12131, lng: -71.165479, lat: 42.264551)
-Thing.create(city_id: 12132, lng: -71.154892, lat: 42.264478)
-Thing.create(city_id: 12133, lng: -71.099215, lat: 42.264264)
-Thing.create(city_id: 12134, lng: -71.115269, lat: 42.264298)
-Thing.create(city_id: 12135, lng: -71.159958, lat: 42.2644)
-Thing.create(city_id: 12136, lng: -71.162873, lat: 42.264371)
-Thing.create(city_id: 12137, lng: -71.157976, lat: 42.264355)
-Thing.create(city_id: 12138, lng: -71.117366, lat: 42.264221)
-Thing.create(city_id: 12139, lng: -71.161657, lat: 42.264337)
-Thing.create(city_id: 12140, lng: -71.09762, lat: 42.264117)
-Thing.create(city_id: 12141, lng: -71.122809, lat: 42.264132)
-Thing.create(city_id: 12142, lng: -71.153819, lat: 42.264226)
-Thing.create(city_id: 12143, lng: -71.101694, lat: 42.26537)
-Thing.create(city_id: 12144, lng: -71.1656, lat: 42.265343)
-Thing.create(city_id: 12145, lng: -71.152733, lat: 42.2652)
-Thing.create(city_id: 12146, lng: -71.161497, lat: 42.265147)
-Thing.create(city_id: 12147, lng: -71.147948, lat: 42.264204)
-Thing.create(city_id: 12148, lng: -71.121577, lat: 42.264092)
-Thing.create(city_id: 12149, lng: -71.158794, lat: 42.264198)
-Thing.create(city_id: 12150, lng: -71.104728, lat: 42.263998)
-Thing.create(city_id: 12151, lng: -71.149546, lat: 42.264139)
-Thing.create(city_id: 12152, lng: -71.16125, lat: 42.264164)
-Thing.create(city_id: 12153, lng: -71.101101, lat: 42.263936)
-Thing.create(city_id: 12154, lng: -71.110296, lat: 42.263938)
-Thing.create(city_id: 12155, lng: -71.119496, lat: 42.263957)
-Thing.create(city_id: 12156, lng: -71.118513, lat: 42.263952)
-Thing.create(city_id: 12157, lng: -71.120554, lat: 42.263953)
-Thing.create(city_id: 12158, lng: -71.154302, lat: 42.264047)
-Thing.create(city_id: 12159, lng: -71.107986, lat: 42.263883)
-Thing.create(city_id: 12160, lng: -71.127266, lat: 42.263939)
-Thing.create(city_id: 12161, lng: -71.111411, lat: 42.263817)
-Thing.create(city_id: 12162, lng: -71.151707, lat: 42.263906)
-Thing.create(city_id: 12163, lng: -71.051234, lat: 42.313322)
-Thing.create(city_id: 12164, lng: -71.050912, lat: 42.311607)
-Thing.create(city_id: 12165, lng: -71.05066, lat: 42.313072)
-Thing.create(city_id: 12166, lng: -71.155009, lat: 42.332377)
-Thing.create(city_id: 12167, lng: -71.154729, lat: 42.332427)
-Thing.create(city_id: 12168, lng: -71.153988, lat: 42.333593)
-Thing.create(city_id: 12169, lng: -71.053103, lat: 42.312989)
-Thing.create(city_id: 12170, lng: -71.052029, lat: 42.312125)
-Thing.create(city_id: 12171, lng: -71.164431, lat: 42.277771)
-Thing.create(city_id: 12172, lng: -71.050828, lat: 42.312675)
-Thing.create(city_id: 12173, lng: -71.046118, lat: 42.311217)
-Thing.create(city_id: 12174, lng: -71.047969, lat: 42.311566)
-Thing.create(city_id: 12175, lng: -71.049559, lat: 42.313288)
-Thing.create(city_id: 12176, lng: -71.055316, lat: 42.31886)
-Thing.create(city_id: 12177, lng: -71.049715, lat: 42.312612)
-Thing.create(city_id: 12178, lng: -71.052299, lat: 42.311577)
-Thing.create(city_id: 12179, lng: -71.0486, lat: 42.312537)
-Thing.create(city_id: 12180, lng: -71.165063, lat: 42.356673)
-Thing.create(city_id: 12181, lng: -71.143704, lat: 42.351354)
-Thing.create(city_id: 12182, lng: -71.109064, lat: 42.327923)
-Thing.create(city_id: 12183, lng: -71.047092, lat: 42.313407)
-Thing.create(city_id: 12184, lng: -71.143397, lat: 42.351666)
-Thing.create(city_id: 12185, lng: -71.145387, lat: 42.350773)
-Thing.create(city_id: 12186, lng: -71.046594, lat: 42.312419)
-Thing.create(city_id: 12187, lng: -71.151508, lat: 42.348928)
-Thing.create(city_id: 12188, lng: -71.046977, lat: 42.336227)
-Thing.create(city_id: 12189, lng: -71.154613, lat: 42.34906)
-Thing.create(city_id: 12190, lng: -71.153722, lat: 42.349027)
-Thing.create(city_id: 12191, lng: -71.106528, lat: 42.304303)
-Thing.create(city_id: 12192, lng: -71.071773, lat: 42.359681)
-Thing.create(city_id: 12193, lng: -71.158922, lat: 42.358487)
-Thing.create(city_id: 12194, lng: -71.158, lat: 42.358345)
-Thing.create(city_id: 12195, lng: -71.15562, lat: 42.358507)
-Thing.create(city_id: 12196, lng: -71.15698, lat: 42.358183)
-Thing.create(city_id: 12197, lng: -71.107676, lat: 42.267373)
-Thing.create(city_id: 12198, lng: -71.142139, lat: 42.354297)
-Thing.create(city_id: 12199, lng: -71.108463, lat: 42.266918)
-Thing.create(city_id: 12200, lng: -71.148261, lat: 42.35588)
-Thing.create(city_id: 12201, lng: -71.147357, lat: 42.355639)
-Thing.create(city_id: 12202, lng: -71.146207, lat: 42.355352)
-Thing.create(city_id: 12203, lng: -71.145328, lat: 42.355114)
-Thing.create(city_id: 12204, lng: -71.141016, lat: 42.35402)
-Thing.create(city_id: 12205, lng: -71.140022, lat: 42.353841)
-Thing.create(city_id: 12206, lng: -71.128945, lat: 42.245912)
-Thing.create(city_id: 12207, lng: -71.138928, lat: 42.353702)
-Thing.create(city_id: 12208, lng: -71.149138, lat: 42.355952)
-Thing.create(city_id: 12209, lng: -71.134051, lat: 42.280748)
-Thing.create(city_id: 12210, lng: -71.068774, lat: 42.292478)
-Thing.create(city_id: 12211, lng: -71.133291, lat: 42.280398)
-Thing.create(city_id: 12212, lng: -71.12729, lat: 42.248)
-Thing.create(city_id: 12213, lng: -71.13238, lat: 42.279815)
-Thing.create(city_id: 12214, lng: -71.130043, lat: 42.243154)
-Thing.create(city_id: 12215, lng: -71.130304, lat: 42.242488)
-Thing.create(city_id: 12216, lng: -71.129584, lat: 42.244326)
-Thing.create(city_id: 12217, lng: -71.129257, lat: 42.245116)
-Thing.create(city_id: 12218, lng: -71.155795, lat: 42.331885)
-Thing.create(city_id: 12219, lng: -71.126797, lat: 42.248688)
-Thing.create(city_id: 12220, lng: -71.126067, lat: 42.250206)
-Thing.create(city_id: 12221, lng: -71.159946, lat: 42.286047)
-Thing.create(city_id: 12222, lng: -71.035506, lat: 42.379282)
-Thing.create(city_id: 12223, lng: -71.032366, lat: 42.378746)
-Thing.create(city_id: 12224, lng: -71.073896, lat: 42.316796)
-Thing.create(city_id: 12225, lng: -71.038035, lat: 42.379152)
-Thing.create(city_id: 12226, lng: -71.035612, lat: 42.377707)
-Thing.create(city_id: 12227, lng: -71.07394, lat: 42.315896)
-Thing.create(city_id: 12228, lng: -71.083714, lat: 42.323743)
-Thing.create(city_id: 12229, lng: -71.033923, lat: 42.379107)
-Thing.create(city_id: 12230, lng: -71.035089, lat: 42.37867)
-Thing.create(city_id: 12231, lng: -71.158133, lat: 42.344283)
-Thing.create(city_id: 12232, lng: -71.029901, lat: 42.378965)
-Thing.create(city_id: 12233, lng: -71.037339, lat: 42.378595)
-Thing.create(city_id: 12234, lng: -71.066628, lat: 42.350664)
-Thing.create(city_id: 12235, lng: -71.036452, lat: 42.378936)
-Thing.create(city_id: 12236, lng: -71.039122, lat: 42.378782)
-Thing.create(city_id: 12237, lng: -71.028573, lat: 42.378558)
-Thing.create(city_id: 12238, lng: -71.030932, lat: 42.378583)
-Thing.create(city_id: 12239, lng: -71.02921, lat: 42.378022)
-Thing.create(city_id: 12240, lng: -71.029165, lat: 42.377323)
-Thing.create(city_id: 12241, lng: -71.027807, lat: 42.378488)
-Thing.create(city_id: 12242, lng: -71.029506, lat: 42.378345)
-Thing.create(city_id: 12243, lng: -71.034694, lat: 42.378049)
-Thing.create(city_id: 12244, lng: -71.031077, lat: 42.377756)
-Thing.create(city_id: 12245, lng: -71.035993, lat: 42.378338)
-Thing.create(city_id: 12246, lng: -71.033079, lat: 42.377782)
-Thing.create(city_id: 12247, lng: -71.034543, lat: 42.378195)
-Thing.create(city_id: 12248, lng: -71.032525, lat: 42.376865)
-Thing.create(city_id: 12249, lng: -71.030352, lat: 42.378025)
-Thing.create(city_id: 12250, lng: -71.039106, lat: 42.378005)
-Thing.create(city_id: 12251, lng: -71.039075, lat: 42.377247)
-Thing.create(city_id: 12252, lng: -71.029788, lat: 42.377523)
-Thing.create(city_id: 12253, lng: -71.036579, lat: 42.377343)
-Thing.create(city_id: 12254, lng: -71.06121, lat: 42.310441)
-Thing.create(city_id: 12255, lng: -71.030337, lat: 42.377046)
-Thing.create(city_id: 12256, lng: -71.016181, lat: 42.381888)
-Thing.create(city_id: 12257, lng: -71.021052, lat: 42.381727)
-Thing.create(city_id: 12258, lng: -71.017027, lat: 42.381573)
-Thing.create(city_id: 12259, lng: -71.009475, lat: 42.391526)
-Thing.create(city_id: 12260, lng: -71.018916, lat: 42.381635)
-Thing.create(city_id: 12261, lng: -71.06654, lat: 42.310195)
-Thing.create(city_id: 12262, lng: -71.002816, lat: 42.391404)
-Thing.create(city_id: 12263, lng: -71.001823, lat: 42.390953)
-Thing.create(city_id: 12264, lng: -71.000879, lat: 42.39052)
-Thing.create(city_id: 12265, lng: -71.037386, lat: 42.37704)
-Thing.create(city_id: 12266, lng: -71.034572, lat: 42.373398)
-Thing.create(city_id: 12267, lng: -71.039997, lat: 42.37326)
-Thing.create(city_id: 12268, lng: -71.056717, lat: 42.357645)
-Thing.create(city_id: 12269, lng: -71.048914, lat: 42.338221)
-Thing.create(city_id: 12270, lng: -71.116694, lat: 42.303327)
-Thing.create(city_id: 12271, lng: -71.046328, lat: 42.338127)
-Thing.create(city_id: 12272, lng: -71.046056, lat: 42.330516)
-Thing.create(city_id: 12273, lng: -71.049777, lat: 42.334191)
-Thing.create(city_id: 12274, lng: -71.055021, lat: 42.331319)
-Thing.create(city_id: 12275, lng: -71.026143, lat: 42.334976)
-Thing.create(city_id: 12276, lng: -71.048833, lat: 42.334146)
-Thing.create(city_id: 12277, lng: -71.028163, lat: 42.33494)
-Thing.create(city_id: 12278, lng: -71.027087, lat: 42.335009)
-Thing.create(city_id: 12279, lng: -71.046148, lat: 42.331747)
-Thing.create(city_id: 12280, lng: -71.056845, lat: 42.331789)
-Thing.create(city_id: 12281, lng: -71.034892, lat: 42.333892)
-Thing.create(city_id: 12282, lng: -71.053582, lat: 42.332128)
-Thing.create(city_id: 12283, lng: -71.039999, lat: 42.332979)
-Thing.create(city_id: 12284, lng: -71.036448, lat: 42.331856)
-Thing.create(city_id: 12285, lng: -71.04612, lat: 42.334458)
-Thing.create(city_id: 12286, lng: -71.04535, lat: 42.331238)
-Thing.create(city_id: 12287, lng: -71.042835, lat: 42.330563)
-Thing.create(city_id: 12288, lng: -71.046672, lat: 42.332199)
-Thing.create(city_id: 12289, lng: -71.037162, lat: 42.330565)
-Thing.create(city_id: 12290, lng: -71.025136, lat: 42.333383)
-Thing.create(city_id: 12291, lng: -71.041584, lat: 42.332947)
-Thing.create(city_id: 12292, lng: -71.051829, lat: 42.332575)
-Thing.create(city_id: 12293, lng: -71.05623, lat: 42.332564)
-Thing.create(city_id: 12294, lng: -71.044921, lat: 42.330535)
-Thing.create(city_id: 12295, lng: -71.116682, lat: 42.263772)
-Thing.create(city_id: 12296, lng: -71.164092, lat: 42.263904)
-Thing.create(city_id: 12297, lng: -71.125618, lat: 42.263779)
-Thing.create(city_id: 12298, lng: -71.099781, lat: 42.263673)
-Thing.create(city_id: 12299, lng: -71.126497, lat: 42.26375)
-Thing.create(city_id: 12300, lng: -71.153087, lat: 42.263823)
-Thing.create(city_id: 12301, lng: -71.105419, lat: 42.26366)
-Thing.create(city_id: 12302, lng: -71.150225, lat: 42.263792)
-Thing.create(city_id: 12303, lng: -71.164975, lat: 42.263819)
-Thing.create(city_id: 12304, lng: -71.098568, lat: 42.263599)
-Thing.create(city_id: 12305, lng: -71.14743, lat: 42.263705)
-Thing.create(city_id: 12306, lng: -71.124374, lat: 42.263624)
-Thing.create(city_id: 12307, lng: -71.102073, lat: 42.263539)
-Thing.create(city_id: 12308, lng: -71.161609, lat: 42.263726)
-Thing.create(city_id: 12309, lng: -71.165772, lat: 42.263703)
-Thing.create(city_id: 12310, lng: -71.114826, lat: 42.263526)
-Thing.create(city_id: 12311, lng: -71.158571, lat: 42.263656)
-Thing.create(city_id: 12312, lng: -71.148966, lat: 42.26358)
-Thing.create(city_id: 12313, lng: -71.163123, lat: 42.263614)
-Thing.create(city_id: 12314, lng: -71.154576, lat: 42.26356)
-Thing.create(city_id: 12315, lng: -71.160596, lat: 42.263574)
-Thing.create(city_id: 12316, lng: -71.157593, lat: 42.263545)
-Thing.create(city_id: 12317, lng: -71.152169, lat: 42.263525)
-Thing.create(city_id: 12318, lng: -71.103204, lat: 42.263343)
-Thing.create(city_id: 12319, lng: -71.104332, lat: 42.263346)
-Thing.create(city_id: 12320, lng: -71.121363, lat: 42.26339)
-Thing.create(city_id: 12321, lng: -71.106478, lat: 42.263332)
-Thing.create(city_id: 12322, lng: -71.154923, lat: 42.263485)
-Thing.create(city_id: 12323, lng: -71.100477, lat: 42.263283)
-Thing.create(city_id: 12324, lng: -71.110122, lat: 42.263268)
-Thing.create(city_id: 12325, lng: -71.168086, lat: 42.263414)
-Thing.create(city_id: 12326, lng: -71.119162, lat: 42.263206)
-Thing.create(city_id: 12327, lng: -71.160838, lat: 42.263305)
-Thing.create(city_id: 12328, lng: -71.120327, lat: 42.263094)
-Thing.create(city_id: 12329, lng: -71.125708, lat: 42.263105)
-Thing.create(city_id: 12330, lng: -71.111803, lat: 42.263045)
-Thing.create(city_id: 12331, lng: -71.127231, lat: 42.263096)
-Thing.create(city_id: 12332, lng: -71.116234, lat: 42.263054)
-Thing.create(city_id: 12333, lng: -71.107475, lat: 42.263019)
-Thing.create(city_id: 12334, lng: -71.099014, lat: 42.262988)
-Thing.create(city_id: 12335, lng: -71.149621, lat: 42.263117)
-Thing.create(city_id: 12336, lng: -71.154231, lat: 42.263102)
-Thing.create(city_id: 12337, lng: -71.164317, lat: 42.263123)
-Thing.create(city_id: 12338, lng: -71.105086, lat: 42.262916)
-Thing.create(city_id: 12339, lng: -71.103635, lat: 42.262909)
-Thing.create(city_id: 12340, lng: -71.112711, lat: 42.262904)
-Thing.create(city_id: 12341, lng: -71.155201, lat: 42.26299)
-Thing.create(city_id: 12342, lng: -71.124537, lat: 42.26287)
-Thing.create(city_id: 12343, lng: -71.106106, lat: 42.262771)
-Thing.create(city_id: 12344, lng: -71.151541, lat: 42.262902)
-Thing.create(city_id: 12345, lng: -71.102928, lat: 42.262737)
-Thing.create(city_id: 12346, lng: -71.11435, lat: 42.262703)
-Thing.create(city_id: 12347, lng: -71.110765, lat: 42.262687)
-Thing.create(city_id: 12348, lng: -71.099937, lat: 42.262635)
-Thing.create(city_id: 12349, lng: -71.150457, lat: 42.262771)
-Thing.create(city_id: 12350, lng: -71.123166, lat: 42.262663)
-Thing.create(city_id: 12351, lng: -71.163288, lat: 42.262766)
-Thing.create(city_id: 12352, lng: -71.118737, lat: 42.26262)
-Thing.create(city_id: 12353, lng: -71.146876, lat: 42.359547)
-Thing.create(city_id: 12354, lng: -71.054579, lat: 42.358855)
-Thing.create(city_id: 12355, lng: -71.14646, lat: 42.35927)
-Thing.create(city_id: 12356, lng: -71.081584, lat: 42.32352)
-Thing.create(city_id: 12357, lng: -71.080568, lat: 42.323839)
-Thing.create(city_id: 12358, lng: -71.145676, lat: 42.361401)
-Thing.create(city_id: 12359, lng: -71.146118, lat: 42.360775)
-Thing.create(city_id: 12360, lng: -71.053364, lat: 42.358837)
-Thing.create(city_id: 12361, lng: -71.146452, lat: 42.360213)
-Thing.create(city_id: 12362, lng: -71.059884, lat: 42.360159)
-Thing.create(city_id: 12363, lng: -71.061045, lat: 42.36012)
-Thing.create(city_id: 12364, lng: -71.055976, lat: 42.36004)
-Thing.create(city_id: 12365, lng: -71.055676, lat: 42.360003)
-Thing.create(city_id: 12366, lng: -71.053755, lat: 42.359971)
-Thing.create(city_id: 12367, lng: -71.065103, lat: 42.359979)
-Thing.create(city_id: 12368, lng: -71.064513, lat: 42.359968)
-Thing.create(city_id: 12369, lng: -71.054778, lat: 42.359876)
-Thing.create(city_id: 12370, lng: -71.054631, lat: 42.359875)
-Thing.create(city_id: 12371, lng: -71.065939, lat: 42.359897)
-Thing.create(city_id: 12372, lng: -71.061615, lat: 42.359866)
-Thing.create(city_id: 12373, lng: -71.055325, lat: 42.35981)
-Thing.create(city_id: 12374, lng: -71.056601, lat: 42.359721)
-Thing.create(city_id: 12375, lng: -71.053747, lat: 42.359685)
-Thing.create(city_id: 12376, lng: -71.0614, lat: 42.359703)
-Thing.create(city_id: 12377, lng: -71.054954, lat: 42.359657)
-Thing.create(city_id: 12378, lng: -71.060721, lat: 42.359679)
-Thing.create(city_id: 12379, lng: -71.056891, lat: 42.359659)
-Thing.create(city_id: 12380, lng: -71.066323, lat: 42.359676)
-Thing.create(city_id: 12381, lng: -71.054274, lat: 42.359628)
-Thing.create(city_id: 12382, lng: -71.06676, lat: 42.359615)
-Thing.create(city_id: 12383, lng: -71.055288, lat: 42.359534)
-Thing.create(city_id: 12384, lng: -71.062691, lat: 42.359548)
-Thing.create(city_id: 12385, lng: -71.062999, lat: 42.359522)
-Thing.create(city_id: 12386, lng: -71.063637, lat: 42.359496)
-Thing.create(city_id: 12387, lng: -71.067618, lat: 42.359507)
-Thing.create(city_id: 12388, lng: -71.053494, lat: 42.35945)
-Thing.create(city_id: 12389, lng: -71.054303, lat: 42.359384)
-Thing.create(city_id: 12390, lng: -71.059882, lat: 42.359347)
-Thing.create(city_id: 12391, lng: -71.05706, lat: 42.359318)
-Thing.create(city_id: 12392, lng: -71.066741, lat: 42.359351)
-Thing.create(city_id: 12393, lng: -71.053101, lat: 42.359281)
-Thing.create(city_id: 12394, lng: -71.064457, lat: 42.359304)
-Thing.create(city_id: 12395, lng: -71.065946, lat: 42.359297)
-Thing.create(city_id: 12396, lng: -71.065008, lat: 42.359291)
-Thing.create(city_id: 12397, lng: -71.056766, lat: 42.359234)
-Thing.create(city_id: 12398, lng: -71.061751, lat: 42.35924)
-Thing.create(city_id: 12399, lng: -71.054133, lat: 42.359202)
-Thing.create(city_id: 12400, lng: -71.061687, lat: 42.359223)
-Thing.create(city_id: 12401, lng: -71.054508, lat: 42.359187)
-Thing.create(city_id: 12402, lng: -71.055431, lat: 42.359171)
-Thing.create(city_id: 12403, lng: -71.055545, lat: 42.359104)
-Thing.create(city_id: 12404, lng: -71.054645, lat: 42.358941)
-Thing.create(city_id: 12405, lng: -71.056622, lat: 42.358947)
-Thing.create(city_id: 12406, lng: -71.062814, lat: 42.358959)
-Thing.create(city_id: 12407, lng: -71.058686, lat: 42.358936)
-Thing.create(city_id: 12408, lng: -71.059672, lat: 42.358937)
-Thing.create(city_id: 12409, lng: -71.058899, lat: 42.358931)
-Thing.create(city_id: 12410, lng: -71.058573, lat: 42.35889)
-Thing.create(city_id: 12411, lng: -71.057835, lat: 42.358883)
-Thing.create(city_id: 12412, lng: -71.061592, lat: 42.35889)
-Thing.create(city_id: 12413, lng: -71.063944, lat: 42.352317)
-Thing.create(city_id: 12414, lng: -71.034289, lat: 42.331436)
-Thing.create(city_id: 12415, lng: -71.034975, lat: 42.382642)
-Thing.create(city_id: 12416, lng: -71.035914, lat: 42.382643)
-Thing.create(city_id: 12417, lng: -71.06557, lat: 42.377369)
-Thing.create(city_id: 12418, lng: -71.073594, lat: 42.383491)
-Thing.create(city_id: 12419, lng: -71.06385, lat: 42.377417)
-Thing.create(city_id: 12420, lng: -71.068435, lat: 42.37764)
-Thing.create(city_id: 12421, lng: -71.050541, lat: 42.335257)
-Thing.create(city_id: 12422, lng: -71.053077, lat: 42.333586)
-Thing.create(city_id: 12423, lng: -71.132694, lat: 42.291881)
-Thing.create(city_id: 12424, lng: -71.124266, lat: 42.291136)
-Thing.create(city_id: 12425, lng: -71.054924, lat: 42.352942)
-Thing.create(city_id: 12426, lng: -71.133589, lat: 42.292395)
-Thing.create(city_id: 12427, lng: -71.128426, lat: 42.246623)
-Thing.create(city_id: 12428, lng: -71.033268, lat: 42.330771)
-Thing.create(city_id: 12429, lng: -71.131688, lat: 42.291198)
-Thing.create(city_id: 12430, lng: -71.05083, lat: 42.334344)
-Thing.create(city_id: 12431, lng: -71.037547, lat: 42.335688)
-Thing.create(city_id: 12432, lng: -71.03027, lat: 42.333591)
-Thing.create(city_id: 12433, lng: -71.035775, lat: 42.331423)
-Thing.create(city_id: 12434, lng: -71.039644, lat: 42.330522)
-Thing.create(city_id: 12435, lng: -71.051503, lat: 42.334785)
-Thing.create(city_id: 12436, lng: -71.039303, lat: 42.33135)
-Thing.create(city_id: 12437, lng: -71.025168, lat: 42.334848)
-Thing.create(city_id: 12438, lng: -71.043189, lat: 42.333751)
-Thing.create(city_id: 12439, lng: -71.055793, lat: 42.335737)
-Thing.create(city_id: 12440, lng: -71.033329, lat: 42.332408)
-Thing.create(city_id: 12441, lng: -71.148848, lat: 42.262706)
-Thing.create(city_id: 12442, lng: -71.157308, lat: 42.262646)
-Thing.create(city_id: 12443, lng: -71.108479, lat: 42.262474)
-Thing.create(city_id: 12444, lng: -71.1044, lat: 42.262437)
-Thing.create(city_id: 12445, lng: -71.101837, lat: 42.262421)
-Thing.create(city_id: 12446, lng: -71.167112, lat: 42.262604)
-Thing.create(city_id: 12447, lng: -71.100784, lat: 42.262391)
-Thing.create(city_id: 12448, lng: -71.119592, lat: 42.262452)
-Thing.create(city_id: 12449, lng: -71.153485, lat: 42.262525)
-Thing.create(city_id: 12450, lng: -71.155706, lat: 42.262504)
-Thing.create(city_id: 12451, lng: -71.157886, lat: 42.262509)
-Thing.create(city_id: 12452, lng: -71.154868, lat: 42.262498)
-Thing.create(city_id: 12453, lng: -71.162508, lat: 42.262506)
-Thing.create(city_id: 12454, lng: -71.152645, lat: 42.262456)
-Thing.create(city_id: 12455, lng: -71.12681, lat: 42.262369)
-Thing.create(city_id: 12456, lng: -71.120081, lat: 42.262335)
-Thing.create(city_id: 12457, lng: -71.125801, lat: 42.26235)
-Thing.create(city_id: 12458, lng: -71.111467, lat: 42.262288)
-Thing.create(city_id: 12459, lng: -71.118382, lat: 42.263388)
-Thing.create(city_id: 12460, lng: -71.166756, lat: 42.263458)
-Thing.create(city_id: 12461, lng: -71.101379, lat: 42.263097)
-Thing.create(city_id: 12462, lng: -71.165334, lat: 42.263207)
-Thing.create(city_id: 12463, lng: -71.159366, lat: 42.263094)
-Thing.create(city_id: 12464, lng: -71.147622, lat: 42.262964)
-Thing.create(city_id: 12465, lng: -71.121079, lat: 42.262651)
-Thing.create(city_id: 12466, lng: -71.159996, lat: 42.26243)
-Thing.create(city_id: 12467, lng: -71.106061, lat: 42.262246)
-Thing.create(city_id: 12468, lng: -71.146837, lat: 42.26234)
-Thing.create(city_id: 12469, lng: -71.115718, lat: 42.262233)
-Thing.create(city_id: 12470, lng: -71.165939, lat: 42.262378)
-Thing.create(city_id: 12471, lng: -71.103447, lat: 42.262157)
-Thing.create(city_id: 12472, lng: -71.112342, lat: 42.262091)
-Thing.create(city_id: 12473, lng: -71.109198, lat: 42.262037)
-Thing.create(city_id: 12474, lng: -71.159434, lat: 42.262193)
-Thing.create(city_id: 12475, lng: -71.102361, lat: 42.261991)
-Thing.create(city_id: 12476, lng: -71.151973, lat: 42.262118)
-Thing.create(city_id: 12477, lng: -71.156342, lat: 42.262121)
-Thing.create(city_id: 12478, lng: -71.1231, lat: 42.261968)
-Thing.create(city_id: 12479, lng: -71.16502, lat: 42.262073)
-Thing.create(city_id: 12480, lng: -71.121937, lat: 42.261938)
-Thing.create(city_id: 12481, lng: -71.113882, lat: 42.261908)
-Thing.create(city_id: 12482, lng: -71.149921, lat: 42.261991)
-Thing.create(city_id: 12483, lng: -71.119087, lat: 42.261868)
-Thing.create(city_id: 12484, lng: -71.156236, lat: 42.261966)
-Thing.create(city_id: 12485, lng: -71.124817, lat: 42.261837)
-Thing.create(city_id: 12486, lng: -71.163423, lat: 42.261955)
-Thing.create(city_id: 12487, lng: -71.146825, lat: 42.261899)
-Thing.create(city_id: 12488, lng: -71.154138, lat: 42.261892)
-Thing.create(city_id: 12489, lng: -71.151103, lat: 42.261874)
-Thing.create(city_id: 12490, lng: -71.161348, lat: 42.261853)
-Thing.create(city_id: 12491, lng: -71.105881, lat: 42.26161)
-Thing.create(city_id: 12492, lng: -71.10113, lat: 42.261574)
-Thing.create(city_id: 12493, lng: -71.158006, lat: 42.261707)
-Thing.create(city_id: 12494, lng: -71.125838, lat: 42.26159)
-Thing.create(city_id: 12495, lng: -71.111224, lat: 42.261538)
-Thing.create(city_id: 12496, lng: -71.103029, lat: 42.261497)
-Thing.create(city_id: 12497, lng: -71.104308, lat: 42.2615)
-Thing.create(city_id: 12498, lng: -71.118218, lat: 42.26153)
-Thing.create(city_id: 12499, lng: -71.126681, lat: 42.26154)
-Thing.create(city_id: 12500, lng: -71.120552, lat: 42.26148)
-Thing.create(city_id: 12501, lng: -71.149012, lat: 42.261566)
-Thing.create(city_id: 12502, lng: -71.109615, lat: 42.266904)
-Thing.create(city_id: 12503, lng: -71.108892, lat: 42.26624)
-Thing.create(city_id: 12504, lng: -71.109076, lat: 42.26751)
-Thing.create(city_id: 12505, lng: -71.053632, lat: 42.357441)
-Thing.create(city_id: 12506, lng: -71.05582, lat: 42.358829)
-Thing.create(city_id: 12507, lng: -71.059752, lat: 42.358842)
-Thing.create(city_id: 12508, lng: -71.061479, lat: 42.358834)
-Thing.create(city_id: 12509, lng: -71.060758, lat: 42.358804)
-Thing.create(city_id: 12510, lng: -71.052869, lat: 42.35877)
-Thing.create(city_id: 12511, lng: -71.065959, lat: 42.358815)
-Thing.create(city_id: 12512, lng: -71.065145, lat: 42.358808)
-Thing.create(city_id: 12513, lng: -71.067438, lat: 42.358814)
-Thing.create(city_id: 12514, lng: -71.066752, lat: 42.358809)
-Thing.create(city_id: 12515, lng: -71.054489, lat: 42.358675)
-Thing.create(city_id: 12516, lng: -71.055722, lat: 42.358653)
-Thing.create(city_id: 12517, lng: -71.064432, lat: 42.358591)
-Thing.create(city_id: 12518, lng: -71.061564, lat: 42.358559)
-Thing.create(city_id: 12519, lng: -71.059932, lat: 42.358542)
-Thing.create(city_id: 12520, lng: -71.059972, lat: 42.358492)
-Thing.create(city_id: 12521, lng: -71.057767, lat: 42.358483)
-Thing.create(city_id: 12522, lng: -71.062729, lat: 42.358489)
-Thing.create(city_id: 12523, lng: -71.053412, lat: 42.358428)
-Thing.create(city_id: 12524, lng: -71.065172, lat: 42.35839)
-Thing.create(city_id: 12525, lng: -71.066252, lat: 42.35836)
-Thing.create(city_id: 12526, lng: -71.055667, lat: 42.35831)
-Thing.create(city_id: 12527, lng: -71.061758, lat: 42.358286)
-Thing.create(city_id: 12528, lng: -71.052929, lat: 42.358248)
-Thing.create(city_id: 12529, lng: -71.054251, lat: 42.358217)
-Thing.create(city_id: 12530, lng: -71.067276, lat: 42.358251)
-Thing.create(city_id: 12531, lng: -71.059041, lat: 42.35817)
-Thing.create(city_id: 12532, lng: -71.054841, lat: 42.35812)
-Thing.create(city_id: 12533, lng: -71.05637, lat: 42.358124)
-Thing.create(city_id: 12534, lng: -71.053925, lat: 42.358071)
-Thing.create(city_id: 12535, lng: -71.064708, lat: 42.358084)
-Thing.create(city_id: 12536, lng: -71.062403, lat: 42.358067)
-Thing.create(city_id: 12537, lng: -71.060291, lat: 42.358043)
-Thing.create(city_id: 12538, lng: -71.055278, lat: 42.358002)
-Thing.create(city_id: 12539, lng: -71.065029, lat: 42.357943)
-Thing.create(city_id: 12540, lng: -71.054251, lat: 42.357854)
-Thing.create(city_id: 12541, lng: -71.063061, lat: 42.357842)
-Thing.create(city_id: 12542, lng: -71.054998, lat: 42.357805)
-Thing.create(city_id: 12543, lng: -71.053376, lat: 42.357793)
-Thing.create(city_id: 12544, lng: -71.053876, lat: 42.357786)
-Thing.create(city_id: 12545, lng: -71.060732, lat: 42.35777)
-Thing.create(city_id: 12546, lng: -71.053115, lat: 42.357704)
-Thing.create(city_id: 12547, lng: -71.059333, lat: 42.357721)
-Thing.create(city_id: 12548, lng: -71.053541, lat: 42.357692)
-Thing.create(city_id: 12549, lng: -71.054604, lat: 42.357618)
-Thing.create(city_id: 12550, lng: -71.059521, lat: 42.357623)
-Thing.create(city_id: 12551, lng: -71.056057, lat: 42.357609)
-Thing.create(city_id: 12552, lng: -71.055156, lat: 42.357586)
-Thing.create(city_id: 12553, lng: -71.067118, lat: 42.357581)
-Thing.create(city_id: 12554, lng: -71.058485, lat: 42.357494)
-Thing.create(city_id: 12555, lng: -71.06403, lat: 42.357514)
-Thing.create(city_id: 12556, lng: -71.058774, lat: 42.35749)
-Thing.create(city_id: 12557, lng: -71.121929, lat: 42.26296)
-Thing.create(city_id: 12558, lng: -71.115123, lat: 42.248046)
-Thing.create(city_id: 12559, lng: -71.063172, lat: 42.348326)
-Thing.create(city_id: 12560, lng: -71.0635, lat: 42.323582)
-Thing.create(city_id: 12561, lng: -71.122851, lat: 42.263354)
-Thing.create(city_id: 12562, lng: -71.123692, lat: 42.27649)
-Thing.create(city_id: 12563, lng: -71.05816, lat: 42.312906)
-Thing.create(city_id: 12564, lng: -71.048882, lat: 42.326023)
-Thing.create(city_id: 12565, lng: -71.068324, lat: 42.381706)
-Thing.create(city_id: 12566, lng: -71.060056, lat: 42.325001)
-Thing.create(city_id: 12567, lng: -71.070451, lat: 42.379225)
-Thing.create(city_id: 12568, lng: -71.063154, lat: 42.316873)
-Thing.create(city_id: 12569, lng: -71.040097, lat: 42.378502)
-Thing.create(city_id: 12570, lng: -71.062582, lat: 42.323242)
-Thing.create(city_id: 12571, lng: -71.031297, lat: 42.382634)
-Thing.create(city_id: 12572, lng: -71.055315, lat: 42.376784)
-Thing.create(city_id: 12573, lng: -71.057294, lat: 42.350547)
-Thing.create(city_id: 12574, lng: -71.057432, lat: 42.351164)
-Thing.create(city_id: 12575, lng: -71.129181, lat: 42.256649)
-Thing.create(city_id: 12576, lng: -71.130805, lat: 42.254326)
-Thing.create(city_id: 12577, lng: -71.130952, lat: 42.240837)
-Thing.create(city_id: 12578, lng: -71.13088, lat: 42.241458)
-Thing.create(city_id: 12579, lng: -71.130644, lat: 42.241674)
-Thing.create(city_id: 12580, lng: -71.130149, lat: 42.255044)
-Thing.create(city_id: 12581, lng: -71.129567, lat: 42.255869)
-Thing.create(city_id: 12582, lng: -71.128807, lat: 42.257407)
-Thing.create(city_id: 12583, lng: -71.049289, lat: 42.334446)
-Thing.create(city_id: 12584, lng: -71.032299, lat: 42.331469)
-Thing.create(city_id: 12585, lng: -71.044235, lat: 42.331261)
-Thing.create(city_id: 12586, lng: -71.044391, lat: 42.334511)
-Thing.create(city_id: 12587, lng: -71.04814, lat: 42.331175)
-Thing.create(city_id: 12588, lng: -71.033383, lat: 42.334535)
-Thing.create(city_id: 12589, lng: -71.046303, lat: 42.331221)
-Thing.create(city_id: 12590, lng: -71.155334, lat: 42.261571)
-Thing.create(city_id: 12591, lng: -71.15665, lat: 42.261537)
-Thing.create(city_id: 12592, lng: -71.158957, lat: 42.261517)
-Thing.create(city_id: 12593, lng: -71.166079, lat: 42.261528)
-Thing.create(city_id: 12594, lng: -71.121552, lat: 42.261369)
-Thing.create(city_id: 12595, lng: -71.101828, lat: 42.261298)
-Thing.create(city_id: 12596, lng: -71.166565, lat: 42.261497)
-Thing.create(city_id: 12597, lng: -71.154505, lat: 42.261451)
-Thing.create(city_id: 12598, lng: -71.162395, lat: 42.261434)
-Thing.create(city_id: 12599, lng: -71.112345, lat: 42.261273)
-Thing.create(city_id: 12600, lng: -71.15971, lat: 42.261396)
-Thing.create(city_id: 12601, lng: -71.16073, lat: 42.261387)
-Thing.create(city_id: 12602, lng: -71.153482, lat: 42.261324)
-Thing.create(city_id: 12603, lng: -71.103931, lat: 42.261117)
-Thing.create(city_id: 12604, lng: -71.150368, lat: 42.261237)
-Thing.create(city_id: 12605, lng: -71.160231, lat: 42.261244)
-Thing.create(city_id: 12606, lng: -71.113374, lat: 42.261093)
-Thing.create(city_id: 12607, lng: -71.152299, lat: 42.261176)
-Thing.create(city_id: 12608, lng: -71.151643, lat: 42.261129)
-Thing.create(city_id: 12609, lng: -71.117613, lat: 42.261001)
-Thing.create(city_id: 12610, lng: -71.122456, lat: 42.260994)
-Thing.create(city_id: 12611, lng: -71.119524, lat: 42.260949)
-Thing.create(city_id: 12612, lng: -71.114491, lat: 42.260881)
-Thing.create(city_id: 12613, lng: -71.156922, lat: 42.261011)
-Thing.create(city_id: 12614, lng: -71.159032, lat: 42.260996)
-Thing.create(city_id: 12615, lng: -71.14761, lat: 42.260931)
-Thing.create(city_id: 12616, lng: -71.120561, lat: 42.260836)
-Thing.create(city_id: 12617, lng: -71.127307, lat: 42.260856)
-Thing.create(city_id: 12618, lng: -71.125911, lat: 42.260844)
-Thing.create(city_id: 12619, lng: -71.102599, lat: 42.260728)
-Thing.create(city_id: 12620, lng: -71.158199, lat: 42.260906)
-Thing.create(city_id: 12621, lng: -71.13053, lat: 42.260816)
-Thing.create(city_id: 12622, lng: -71.15377, lat: 42.260816)
-Thing.create(city_id: 12623, lng: -71.124982, lat: 42.260706)
-Thing.create(city_id: 12624, lng: -71.112298, lat: 42.260659)
-Thing.create(city_id: 12625, lng: -71.113489, lat: 42.260658)
-Thing.create(city_id: 12626, lng: -71.163184, lat: 42.2608)
-Thing.create(city_id: 12627, lng: -71.150726, lat: 42.260745)
-Thing.create(city_id: 12628, lng: -71.157743, lat: 42.260757)
-Thing.create(city_id: 12629, lng: -71.159363, lat: 42.260747)
-Thing.create(city_id: 12630, lng: -71.121522, lat: 42.26055)
-Thing.create(city_id: 12631, lng: -71.115484, lat: 42.260452)
-Thing.create(city_id: 12632, lng: -71.11695, lat: 42.260449)
-Thing.create(city_id: 12633, lng: -71.157642, lat: 42.260575)
-Thing.create(city_id: 12634, lng: -71.103552, lat: 42.260358)
-Thing.create(city_id: 12635, lng: -71.118294, lat: 42.260358)
-Thing.create(city_id: 12636, lng: -71.149673, lat: 42.260316)
-Thing.create(city_id: 12637, lng: -71.12785, lat: 42.260219)
-Thing.create(city_id: 12638, lng: -71.156768, lat: 42.2603)
-Thing.create(city_id: 12639, lng: -71.119895, lat: 42.260163)
-Thing.create(city_id: 12640, lng: -71.158522, lat: 42.260269)
-Thing.create(city_id: 12641, lng: -71.150101, lat: 42.260241)
-Thing.create(city_id: 12642, lng: -71.151264, lat: 42.260211)
-Thing.create(city_id: 12643, lng: -71.153018, lat: 42.260202)
-Thing.create(city_id: 12644, lng: -71.122741, lat: 42.260102)
-Thing.create(city_id: 12645, lng: -71.129596, lat: 42.260115)
-Thing.create(city_id: 12646, lng: -71.152065, lat: 42.260175)
-Thing.create(city_id: 12647, lng: -71.115553, lat: 42.260056)
-Thing.create(city_id: 12648, lng: -71.158154, lat: 42.260183)
-Thing.create(city_id: 12649, lng: -71.110257, lat: 42.261771)
-Thing.create(city_id: 12650, lng: -71.157069, lat: 42.261712)
-Thing.create(city_id: 12651, lng: -71.115289, lat: 42.261526)
-Thing.create(city_id: 12652, lng: -71.059301, lat: 42.300598)
-Thing.create(city_id: 12653, lng: -71.061285, lat: 42.355865)
-Thing.create(city_id: 12654, lng: -71.059937, lat: 42.355848)
-Thing.create(city_id: 12655, lng: -71.065274, lat: 42.355857)
-Thing.create(city_id: 12656, lng: -71.057387, lat: 42.355805)
-Thing.create(city_id: 12657, lng: -71.05855, lat: 42.357437)
-Thing.create(city_id: 12658, lng: -71.061048, lat: 42.357433)
-Thing.create(city_id: 12659, lng: -71.053839, lat: 42.357374)
-Thing.create(city_id: 12660, lng: -71.055042, lat: 42.357327)
-Thing.create(city_id: 12661, lng: -71.058334, lat: 42.357307)
-Thing.create(city_id: 12662, lng: -71.057427, lat: 42.357297)
-Thing.create(city_id: 12663, lng: -71.054672, lat: 42.357228)
-Thing.create(city_id: 12664, lng: -71.065011, lat: 42.357247)
-Thing.create(city_id: 12665, lng: -71.065166, lat: 42.357237)
-Thing.create(city_id: 12666, lng: -71.055154, lat: 42.357191)
-Thing.create(city_id: 12667, lng: -71.061329, lat: 42.357159)
-Thing.create(city_id: 12668, lng: -71.056245, lat: 42.357132)
-Thing.create(city_id: 12669, lng: -71.053506, lat: 42.357102)
-Thing.create(city_id: 12670, lng: -71.06247, lat: 42.357056)
-Thing.create(city_id: 12671, lng: -71.057377, lat: 42.357016)
-Thing.create(city_id: 12672, lng: -71.059657, lat: 42.357005)
-Thing.create(city_id: 12673, lng: -71.05861, lat: 42.356951)
-Thing.create(city_id: 12674, lng: -71.058566, lat: 42.356941)
-Thing.create(city_id: 12675, lng: -71.05606, lat: 42.356916)
-Thing.create(city_id: 12676, lng: -71.055502, lat: 42.356893)
-Thing.create(city_id: 12677, lng: -71.053146, lat: 42.356883)
-Thing.create(city_id: 12678, lng: -71.056552, lat: 42.356878)
-Thing.create(city_id: 12679, lng: -71.060674, lat: 42.356853)
-Thing.create(city_id: 12680, lng: -71.054077, lat: 42.3568)
-Thing.create(city_id: 12681, lng: -71.058267, lat: 42.356812)
-Thing.create(city_id: 12682, lng: -71.060534, lat: 42.356807)
-Thing.create(city_id: 12683, lng: -71.055661, lat: 42.356758)
-Thing.create(city_id: 12684, lng: -71.05908, lat: 42.356727)
-Thing.create(city_id: 12685, lng: -71.056498, lat: 42.356715)
-Thing.create(city_id: 12686, lng: -71.056996, lat: 42.356684)
-Thing.create(city_id: 12687, lng: -71.061573, lat: 42.356621)
-Thing.create(city_id: 12688, lng: -71.06165, lat: 42.356548)
-Thing.create(city_id: 12689, lng: -71.055199, lat: 42.356523)
-Thing.create(city_id: 12690, lng: -71.056779, lat: 42.356494)
-Thing.create(city_id: 12691, lng: -71.059604, lat: 42.356468)
-Thing.create(city_id: 12692, lng: -71.056274, lat: 42.356402)
-Thing.create(city_id: 12693, lng: -71.053678, lat: 42.356384)
-Thing.create(city_id: 12694, lng: -71.057421, lat: 42.356302)
-Thing.create(city_id: 12695, lng: -71.062228, lat: 42.356195)
-Thing.create(city_id: 12696, lng: -71.052942, lat: 42.356033)
-Thing.create(city_id: 12697, lng: -71.054754, lat: 42.35603)
-Thing.create(city_id: 12698, lng: -71.053341, lat: 42.35598)
-Thing.create(city_id: 12699, lng: -71.061793, lat: 42.355993)
-Thing.create(city_id: 12700, lng: -71.107037, lat: 42.306137)
-Thing.create(city_id: 12701, lng: -71.094622, lat: 42.285791)
-Thing.create(city_id: 12702, lng: -71.096556, lat: 42.317674)
-Thing.create(city_id: 12703, lng: -71.064859, lat: 42.319333)
-Thing.create(city_id: 12704, lng: -71.0669, lat: 42.320303)
-Thing.create(city_id: 12705, lng: -71.063342, lat: 42.325231)
-Thing.create(city_id: 12706, lng: -71.053884, lat: 42.3258)
-Thing.create(city_id: 12707, lng: -71.093832, lat: 42.317439)
-Thing.create(city_id: 12708, lng: -71.094564, lat: 42.317606)
-Thing.create(city_id: 12709, lng: -71.093717, lat: 42.28533)
-Thing.create(city_id: 12710, lng: -71.057525, lat: 42.315645)
-Thing.create(city_id: 12711, lng: -71.058212, lat: 42.328976)
-Thing.create(city_id: 12712, lng: -71.066039, lat: 42.321511)
-Thing.create(city_id: 12713, lng: -71.058894, lat: 42.315083)
-Thing.create(city_id: 12714, lng: -71.056009, lat: 42.329275)
-Thing.create(city_id: 12715, lng: -71.059896, lat: 42.317422)
-Thing.create(city_id: 12716, lng: -71.063946, lat: 42.323633)
-Thing.create(city_id: 12717, lng: -71.059922, lat: 42.319197)
-Thing.create(city_id: 12718, lng: -71.034599, lat: 42.329678)
-Thing.create(city_id: 12719, lng: -71.125551, lat: 42.28995)
-Thing.create(city_id: 12720, lng: -71.057033, lat: 42.34674)
-Thing.create(city_id: 12721, lng: -71.125983, lat: 42.260079)
-Thing.create(city_id: 12722, lng: -71.14905, lat: 42.260134)
-Thing.create(city_id: 12723, lng: -71.116334, lat: 42.260022)
-Thing.create(city_id: 12724, lng: -71.120701, lat: 42.260007)
-Thing.create(city_id: 12725, lng: -71.162294, lat: 42.260049)
-Thing.create(city_id: 12726, lng: -71.125098, lat: 42.259921)
-Thing.create(city_id: 12727, lng: -71.114133, lat: 42.259847)
-Thing.create(city_id: 12728, lng: -71.128921, lat: 42.259841)
-Thing.create(city_id: 12729, lng: -71.119037, lat: 42.259715)
-Thing.create(city_id: 12730, lng: -71.144404, lat: 42.259787)
-Thing.create(city_id: 12731, lng: -71.157362, lat: 42.259822)
-Thing.create(city_id: 12732, lng: -71.150384, lat: 42.259731)
-Thing.create(city_id: 12733, lng: -71.123088, lat: 42.259621)
-Thing.create(city_id: 12734, lng: -71.115856, lat: 42.259579)
-Thing.create(city_id: 12735, lng: -71.147249, lat: 42.259659)
-Thing.create(city_id: 12736, lng: -71.121807, lat: 42.259566)
-Thing.create(city_id: 12737, lng: -71.159125, lat: 42.25966)
-Thing.create(city_id: 12738, lng: -71.117095, lat: 42.259494)
-Thing.create(city_id: 12739, lng: -71.120295, lat: 42.259497)
-Thing.create(city_id: 12740, lng: -71.158874, lat: 42.259607)
-Thing.create(city_id: 12741, lng: -71.152234, lat: 42.259585)
-Thing.create(city_id: 12742, lng: -71.15131, lat: 42.25958)
-Thing.create(city_id: 12743, lng: -71.156586, lat: 42.259558)
-Thing.create(city_id: 12744, lng: -71.128193, lat: 42.259423)
-Thing.create(city_id: 12745, lng: -71.126975, lat: 42.259395)
-Thing.create(city_id: 12746, lng: -71.145898, lat: 42.259448)
-Thing.create(city_id: 12747, lng: -71.162578, lat: 42.259496)
-Thing.create(city_id: 12748, lng: -71.122516, lat: 42.259369)
-Thing.create(city_id: 12749, lng: -71.163423, lat: 42.259386)
-Thing.create(city_id: 12750, lng: -71.126078, lat: 42.259227)
-Thing.create(city_id: 12751, lng: -71.118386, lat: 42.259165)
-Thing.create(city_id: 12752, lng: -71.161351, lat: 42.25928)
-Thing.create(city_id: 12753, lng: -71.148459, lat: 42.259233)
-Thing.create(city_id: 12754, lng: -71.12084, lat: 42.259124)
-Thing.create(city_id: 12755, lng: -71.127455, lat: 42.259078)
-Thing.create(city_id: 12756, lng: -71.125067, lat: 42.259027)
-Thing.create(city_id: 12757, lng: -71.149577, lat: 42.259103)
-Thing.create(city_id: 12758, lng: -71.116594, lat: 42.258962)
-Thing.create(city_id: 12759, lng: -71.123248, lat: 42.25896)
-Thing.create(city_id: 12760, lng: -71.151476, lat: 42.258988)
-Thing.create(city_id: 12761, lng: -71.162448, lat: 42.258989)
-Thing.create(city_id: 12762, lng: -71.11782, lat: 42.25884)
-Thing.create(city_id: 12763, lng: -71.120063, lat: 42.25876)
-Thing.create(city_id: 12764, lng: -71.154205, lat: 42.258849)
-Thing.create(city_id: 12765, lng: -71.158337, lat: 42.258787)
-Thing.create(city_id: 12766, lng: -71.151177, lat: 42.258762)
-Thing.create(city_id: 12767, lng: -71.120942, lat: 42.258651)
-Thing.create(city_id: 12768, lng: -71.156403, lat: 42.258759)
-Thing.create(city_id: 12769, lng: -71.144899, lat: 42.258695)
-Thing.create(city_id: 12770, lng: -71.121951, lat: 42.258604)
-Thing.create(city_id: 12771, lng: -71.160407, lat: 42.258651)
-Thing.create(city_id: 12772, lng: -71.129492, lat: 42.258524)
-Thing.create(city_id: 12773, lng: -71.115914, lat: 42.258468)
-Thing.create(city_id: 12774, lng: -71.153272, lat: 42.258582)
-Thing.create(city_id: 12775, lng: -71.12618, lat: 42.258408)
-Thing.create(city_id: 12776, lng: -71.119185, lat: 42.258347)
-Thing.create(city_id: 12777, lng: -71.159309, lat: 42.258457)
-Thing.create(city_id: 12778, lng: -71.11716, lat: 42.25831)
-Thing.create(city_id: 12779, lng: -71.123441, lat: 42.258179)
-Thing.create(city_id: 12780, lng: -71.125164, lat: 42.258143)
-Thing.create(city_id: 12781, lng: -71.120912, lat: 42.258119)
-Thing.create(city_id: 12782, lng: -71.147736, lat: 42.258185)
-Thing.create(city_id: 12783, lng: -71.118398, lat: 42.258074)
-Thing.create(city_id: 12784, lng: -71.157367, lat: 42.258166)
-Thing.create(city_id: 12785, lng: -71.147031, lat: 42.25803)
-Thing.create(city_id: 12786, lng: -71.062564, lat: 42.316528)
-Thing.create(city_id: 12787, lng: -71.057892, lat: 42.35534)
-Thing.create(city_id: 12788, lng: -71.058943, lat: 42.35582)
-Thing.create(city_id: 12789, lng: -71.133333, lat: 42.240523)
-Thing.create(city_id: 12790, lng: -71.061878, lat: 42.316264)
-Thing.create(city_id: 12791, lng: -71.062636, lat: 42.3558)
-Thing.create(city_id: 12792, lng: -71.061146, lat: 42.355795)
-Thing.create(city_id: 12793, lng: -71.061217, lat: 42.355731)
-Thing.create(city_id: 12794, lng: -71.054384, lat: 42.355675)
-Thing.create(city_id: 12795, lng: -71.133462, lat: 42.284709)
-Thing.create(city_id: 12796, lng: -71.061728, lat: 42.316616)
-Thing.create(city_id: 12797, lng: -71.053828, lat: 42.355502)
-Thing.create(city_id: 12798, lng: -71.080212, lat: 42.283781)
-Thing.create(city_id: 12799, lng: -71.057304, lat: 42.355503)
-Thing.create(city_id: 12800, lng: -71.062959, lat: 42.355517)
-Thing.create(city_id: 12801, lng: -71.062268, lat: 42.355418)
-Thing.create(city_id: 12802, lng: -71.079346, lat: 42.28254)
-Thing.create(city_id: 12803, lng: -71.054064, lat: 42.355365)
-Thing.create(city_id: 12804, lng: -71.135765, lat: 42.238339)
-Thing.create(city_id: 12805, lng: -71.062508, lat: 42.355383)
-Thing.create(city_id: 12806, lng: -71.095413, lat: 42.317263)
-Thing.create(city_id: 12807, lng: -71.055863, lat: 42.355653)
-Thing.create(city_id: 12808, lng: -71.053878, lat: 42.355277)
-Thing.create(city_id: 12809, lng: -71.060385, lat: 42.355288)
-Thing.create(city_id: 12810, lng: -71.060263, lat: 42.35527)
-Thing.create(city_id: 12811, lng: -71.063215, lat: 42.355261)
-Thing.create(city_id: 12812, lng: -71.060631, lat: 42.355251)
-Thing.create(city_id: 12813, lng: -71.061917, lat: 42.355208)
-Thing.create(city_id: 12814, lng: -71.133661, lat: 42.239857)
-Thing.create(city_id: 12815, lng: -71.054082, lat: 42.355084)
-Thing.create(city_id: 12816, lng: -71.056363, lat: 42.355051)
-Thing.create(city_id: 12817, lng: -71.06001, lat: 42.355035)
-Thing.create(city_id: 12818, lng: -71.063317, lat: 42.355026)
-Thing.create(city_id: 12819, lng: -71.062886, lat: 42.35499)
-Thing.create(city_id: 12820, lng: -71.059827, lat: 42.35493)
-Thing.create(city_id: 12821, lng: -71.061623, lat: 42.354934)
-Thing.create(city_id: 12822, lng: -71.058489, lat: 42.354885)
-Thing.create(city_id: 12823, lng: -71.058757, lat: 42.354824)
-Thing.create(city_id: 12824, lng: -71.054608, lat: 42.35477)
-Thing.create(city_id: 12825, lng: -71.058673, lat: 42.354708)
-Thing.create(city_id: 12826, lng: -71.053293, lat: 42.354672)
-Thing.create(city_id: 12827, lng: -71.058007, lat: 42.354671)
-Thing.create(city_id: 12828, lng: -71.062479, lat: 42.354657)
-Thing.create(city_id: 12829, lng: -71.06274, lat: 42.354649)
-Thing.create(city_id: 12830, lng: -71.056282, lat: 42.354617)
-Thing.create(city_id: 12831, lng: -71.058966, lat: 42.354606)
-Thing.create(city_id: 12832, lng: -71.057429, lat: 42.354595)
-Thing.create(city_id: 12833, lng: -71.062066, lat: 42.354569)
-Thing.create(city_id: 12834, lng: -71.053618, lat: 42.354469)
-Thing.create(city_id: 12835, lng: -71.061463, lat: 42.354487)
-Thing.create(city_id: 12836, lng: -71.059378, lat: 42.354469)
-Thing.create(city_id: 12837, lng: -71.053532, lat: 42.354517)
-Thing.create(city_id: 12838, lng: -71.053653, lat: 42.354933)
-Thing.create(city_id: 12839, lng: -71.073466, lat: 42.331154)
-Thing.create(city_id: 12840, lng: -71.094358, lat: 42.316879)
-Thing.create(city_id: 12841, lng: -71.068528, lat: 42.318606)
-Thing.create(city_id: 12842, lng: -71.058418, lat: 42.310655)
-Thing.create(city_id: 12843, lng: -71.029182, lat: 42.382622)
-Thing.create(city_id: 12844, lng: -71.132029, lat: 42.251767)
-Thing.create(city_id: 12845, lng: -71.068177, lat: 42.318546)
-Thing.create(city_id: 12846, lng: -71.078679, lat: 42.349652)
-Thing.create(city_id: 12847, lng: -71.046912, lat: 42.351797)
-Thing.create(city_id: 12848, lng: -71.083145, lat: 42.349482)
-Thing.create(city_id: 12849, lng: -71.073303, lat: 42.354383)
-Thing.create(city_id: 12850, lng: -71.043743, lat: 42.346964)
-Thing.create(city_id: 12851, lng: -71.081076, lat: 42.350048)
-Thing.create(city_id: 12852, lng: -71.078592, lat: 42.352948)
-Thing.create(city_id: 12853, lng: -71.078006, lat: 42.351628)
-Thing.create(city_id: 12854, lng: -71.08268, lat: 42.348562)
-Thing.create(city_id: 12855, lng: -71.073145, lat: 42.348245)
-Thing.create(city_id: 12856, lng: -71.07648, lat: 42.35352)
-Thing.create(city_id: 12857, lng: -71.090873, lat: 42.35054)
-Thing.create(city_id: 12858, lng: -71.048251, lat: 42.351794)
-Thing.create(city_id: 12859, lng: -71.047744, lat: 42.348885)
-Thing.create(city_id: 12860, lng: -71.050978, lat: 42.346799)
-Thing.create(city_id: 12861, lng: -71.047723, lat: 42.349205)
-Thing.create(city_id: 12862, lng: -71.074237, lat: 42.350049)
-Thing.create(city_id: 12863, lng: -71.046861, lat: 42.351189)
-Thing.create(city_id: 12864, lng: -71.047307, lat: 42.353724)
-Thing.create(city_id: 12865, lng: -71.048321, lat: 42.348184)
-Thing.create(city_id: 12866, lng: -71.047991, lat: 42.350673)
-Thing.create(city_id: 12867, lng: -71.075179, lat: 42.348268)
-Thing.create(city_id: 12868, lng: -71.081557, lat: 42.35215)
-Thing.create(city_id: 12869, lng: -71.072348, lat: 42.353325)
-Thing.create(city_id: 12870, lng: -71.077566, lat: 42.35323)
-Thing.create(city_id: 12871, lng: -71.08112, lat: 42.352981)
-Thing.create(city_id: 12872, lng: -71.05041, lat: 42.347974)
-Thing.create(city_id: 12873, lng: -71.070208, lat: 42.35958)
-Thing.create(city_id: 12874, lng: -71.081886, lat: 42.350755)
-Thing.create(city_id: 12875, lng: -71.071524, lat: 42.359421)
-Thing.create(city_id: 12876, lng: -71.075757, lat: 42.340747)
-Thing.create(city_id: 12877, lng: -71.076172, lat: 42.337966)
-Thing.create(city_id: 12878, lng: -71.074747, lat: 42.337925)
-Thing.create(city_id: 12879, lng: -71.063991, lat: 42.336721)
-Thing.create(city_id: 12880, lng: -71.046986, lat: 42.335004)
-Thing.create(city_id: 12881, lng: -71.0665, lat: 42.34015)
-Thing.create(city_id: 12882, lng: -71.069548, lat: 42.33466)
-Thing.create(city_id: 12883, lng: -71.072016, lat: 42.335553)
-Thing.create(city_id: 12884, lng: -71.068778, lat: 42.334598)
-Thing.create(city_id: 12885, lng: -71.064914, lat: 42.33973)
-Thing.create(city_id: 12886, lng: -71.062191, lat: 42.335072)
-Thing.create(city_id: 12887, lng: -71.063663, lat: 42.337195)
-Thing.create(city_id: 12888, lng: -71.08875, lat: 42.334758)
-Thing.create(city_id: 12889, lng: -71.083483, lat: 42.340571)
-Thing.create(city_id: 12890, lng: -71.036434, lat: 42.339245)
-Thing.create(city_id: 12891, lng: -71.062369, lat: 42.335905)
-Thing.create(city_id: 12892, lng: -71.069295, lat: 42.306179)
-Thing.create(city_id: 12893, lng: -71.049345, lat: 42.293819)
-Thing.create(city_id: 12894, lng: -71.058136, lat: 42.294106)
-Thing.create(city_id: 12895, lng: -71.056256, lat: 42.296036)
-Thing.create(city_id: 12896, lng: -71.066426, lat: 42.308001)
-Thing.create(city_id: 12897, lng: -71.060437, lat: 42.302623)
-Thing.create(city_id: 12898, lng: -71.072072, lat: 42.304616)
-Thing.create(city_id: 12899, lng: -71.056477, lat: 42.294514)
-Thing.create(city_id: 12900, lng: -71.061125, lat: 42.299612)
-Thing.create(city_id: 12901, lng: -71.066416, lat: 42.305684)
-Thing.create(city_id: 12902, lng: -71.060564, lat: 42.299191)
-Thing.create(city_id: 12903, lng: -71.072452, lat: 42.345349)
-Thing.create(city_id: 12904, lng: -71.071029, lat: 42.305567)
-Thing.create(city_id: 12905, lng: -71.049043, lat: 42.29704)
-Thing.create(city_id: 12906, lng: -71.05646, lat: 42.299)
-Thing.create(city_id: 12907, lng: -71.067773, lat: 42.308007)
-Thing.create(city_id: 12908, lng: -71.070188, lat: 42.30628)
-Thing.create(city_id: 12909, lng: -71.060787, lat: 42.298404)
-Thing.create(city_id: 12910, lng: -71.071497, lat: 42.275831)
-Thing.create(city_id: 12911, lng: -71.069761, lat: 42.275552)
-Thing.create(city_id: 12912, lng: -71.069559, lat: 42.27626)
-Thing.create(city_id: 12913, lng: -71.067899, lat: 42.275669)
-Thing.create(city_id: 12914, lng: -71.068873, lat: 42.275786)
-Thing.create(city_id: 12915, lng: -71.068585, lat: 42.335139)
-Thing.create(city_id: 12916, lng: -71.072163, lat: 42.347347)
-Thing.create(city_id: 12917, lng: -71.079675, lat: 42.35267)
-Thing.create(city_id: 12918, lng: -71.077846, lat: 42.349875)
-Thing.create(city_id: 12919, lng: -71.08273, lat: 42.350622)
-Thing.create(city_id: 12920, lng: -71.047029, lat: 42.351896)
-Thing.create(city_id: 12921, lng: -71.049909, lat: 42.348603)
-Thing.create(city_id: 12922, lng: -71.047718, lat: 42.352295)
-Thing.create(city_id: 12923, lng: -71.045875, lat: 42.354733)
-Thing.create(city_id: 12924, lng: -71.070989, lat: 42.349155)
-Thing.create(city_id: 12925, lng: -71.072179, lat: 42.356065)
-Thing.create(city_id: 12926, lng: -71.069895, lat: 42.358595)
-Thing.create(city_id: 12927, lng: -71.06917, lat: 42.348638)
-Thing.create(city_id: 12928, lng: -71.07203, lat: 42.357325)
-Thing.create(city_id: 12929, lng: -71.086418, lat: 42.350485)
-Thing.create(city_id: 12930, lng: -71.077378, lat: 42.348205)
-Thing.create(city_id: 12931, lng: -71.047369, lat: 42.352478)
-Thing.create(city_id: 12932, lng: -71.048027, lat: 42.354056)
-Thing.create(city_id: 12933, lng: -71.071221, lat: 42.347257)
-Thing.create(city_id: 12934, lng: -71.07049, lat: 42.356026)
-Thing.create(city_id: 12935, lng: -71.087596, lat: 42.349614)
-Thing.create(city_id: 12936, lng: -71.022129, lat: 42.38471)
-Thing.create(city_id: 12937, lng: -71.070434, lat: 42.357269)
-Thing.create(city_id: 12938, lng: -71.06573, lat: 42.357064)
-Thing.create(city_id: 12939, lng: -71.085245, lat: 42.351158)
-Thing.create(city_id: 12940, lng: -71.08879, lat: 42.351116)
-Thing.create(city_id: 12941, lng: -71.069144, lat: 42.357126)
-Thing.create(city_id: 12942, lng: -71.071138, lat: 42.348689)
-Thing.create(city_id: 12943, lng: -71.069576, lat: 42.356234)
-Thing.create(city_id: 12944, lng: -71.068305, lat: 42.349003)
-Thing.create(city_id: 12945, lng: -71.08524, lat: 42.349726)
-Thing.create(city_id: 12946, lng: -71.078542, lat: 42.351929)
-Thing.create(city_id: 12947, lng: -71.070759, lat: 42.356261)
-Thing.create(city_id: 12948, lng: -71.057028, lat: 42.339233)
-Thing.create(city_id: 12949, lng: -71.076441, lat: 42.335096)
-Thing.create(city_id: 12950, lng: -71.035601, lat: 42.337951)
-Thing.create(city_id: 12951, lng: -71.082112, lat: 42.340156)
-Thing.create(city_id: 12952, lng: -71.077862, lat: 42.340439)
-Thing.create(city_id: 12953, lng: -71.061822, lat: 42.334721)
-Thing.create(city_id: 12954, lng: -71.069774, lat: 42.336257)
-Thing.create(city_id: 12955, lng: -71.063407, lat: 42.334589)
-Thing.create(city_id: 12956, lng: -71.064123, lat: 42.335142)
-Thing.create(city_id: 12957, lng: -71.069691, lat: 42.35689)
-Thing.create(city_id: 12958, lng: -71.047853, lat: 42.350066)
-Thing.create(city_id: 12959, lng: -71.048581, lat: 42.347856)
-Thing.create(city_id: 12960, lng: -71.081017, lat: 42.350977)
-Thing.create(city_id: 12961, lng: -71.046523, lat: 42.353976)
-Thing.create(city_id: 12962, lng: -71.072251, lat: 42.354663)
-Thing.create(city_id: 12963, lng: -71.068558, lat: 42.356113)
-Thing.create(city_id: 12964, lng: -71.07548, lat: 42.353786)
-Thing.create(city_id: 12965, lng: -71.089771, lat: 42.350838)
-Thing.create(city_id: 12966, lng: -71.073049, lat: 42.356052)
-Thing.create(city_id: 12967, lng: -71.083653, lat: 42.352503)
-Thing.create(city_id: 12968, lng: -71.080058, lat: 42.350319)
-Thing.create(city_id: 12969, lng: -71.071255, lat: 42.355849)
-Thing.create(city_id: 12970, lng: -71.051186, lat: 42.348861)
-Thing.create(city_id: 12971, lng: -71.06194, lat: 42.353677)
-Thing.create(city_id: 12972, lng: -71.071029, lat: 42.347371)
-Thing.create(city_id: 12973, lng: -71.077045, lat: 42.352044)
-Thing.create(city_id: 12974, lng: -71.082534, lat: 42.351892)
-Thing.create(city_id: 12975, lng: -71.045237, lat: 42.349493)
-Thing.create(city_id: 12976, lng: -71.076808, lat: 42.354096)
-Thing.create(city_id: 12977, lng: -71.047924, lat: 42.353626)
-Thing.create(city_id: 12978, lng: -71.045459, lat: 42.351881)
-Thing.create(city_id: 12979, lng: -71.075856, lat: 42.349407)
-Thing.create(city_id: 12980, lng: -71.083973, lat: 42.349258)
-Thing.create(city_id: 12981, lng: -71.076429, lat: 42.348525)
-Thing.create(city_id: 12982, lng: -71.086161, lat: 42.350911)
-Thing.create(city_id: 12983, lng: -71.047818, lat: 42.352996)
-Thing.create(city_id: 12984, lng: -71.03327, lat: 42.381917)
-Thing.create(city_id: 12985, lng: -71.08526, lat: 42.348137)
-Thing.create(city_id: 12986, lng: -71.072722, lat: 42.357037)
-Thing.create(city_id: 12987, lng: -71.082998, lat: 42.348647)
-Thing.create(city_id: 12988, lng: -71.085844, lat: 42.336417)
-Thing.create(city_id: 12989, lng: -71.061669, lat: 42.337929)
-Thing.create(city_id: 12990, lng: -71.070726, lat: 42.336515)
-Thing.create(city_id: 12991, lng: -71.078017, lat: 42.339509)
-Thing.create(city_id: 12992, lng: -71.083613, lat: 42.33894)
-Thing.create(city_id: 12993, lng: -71.039895, lat: 42.337333)
-Thing.create(city_id: 12994, lng: -71.077647, lat: 42.336865)
-Thing.create(city_id: 12995, lng: -71.079084, lat: 42.339356)
-Thing.create(city_id: 12996, lng: -71.07455, lat: 42.335583)
-Thing.create(city_id: 12997, lng: -71.082665, lat: 42.339706)
-Thing.create(city_id: 12998, lng: -71.075614, lat: 42.334397)
-Thing.create(city_id: 12999, lng: -71.0489, lat: 42.311825)
-Thing.create(city_id: 13000, lng: -71.054468, lat: 42.311945)
-Thing.create(city_id: 13001, lng: -71.074265, lat: 42.334435)
-Thing.create(city_id: 13002, lng: -71.070597, lat: 42.333622)
-Thing.create(city_id: 13003, lng: -71.050061, lat: 42.30883)
-Thing.create(city_id: 13004, lng: -71.053896, lat: 42.315096)
-Thing.create(city_id: 13005, lng: -71.064982, lat: 42.315321)
-Thing.create(city_id: 13006, lng: -71.091505, lat: 42.348321)
-Thing.create(city_id: 13007, lng: -71.044218, lat: 42.352149)
-Thing.create(city_id: 13008, lng: -71.069986, lat: 42.347303)
-Thing.create(city_id: 13009, lng: -71.068709, lat: 42.347088)
-Thing.create(city_id: 13010, lng: -71.062458, lat: 42.353048)
-Thing.create(city_id: 13011, lng: -71.050568, lat: 42.34991)
-Thing.create(city_id: 13012, lng: -71.050733, lat: 42.349461)
-Thing.create(city_id: 13013, lng: -71.067079, lat: 42.345504)
-Thing.create(city_id: 13014, lng: -71.080894, lat: 42.34471)
-Thing.create(city_id: 13015, lng: -71.070661, lat: 42.343321)
-Thing.create(city_id: 13016, lng: -71.080908, lat: 42.345854)
-Thing.create(city_id: 13017, lng: -71.072582, lat: 42.346809)
-Thing.create(city_id: 13018, lng: -71.076347, lat: 42.344551)
-Thing.create(city_id: 13019, lng: -71.064007, lat: 42.344689)
-Thing.create(city_id: 13020, lng: -71.077504, lat: 42.342204)
-Thing.create(city_id: 13021, lng: -71.08266, lat: 42.341066)
-Thing.create(city_id: 13022, lng: -71.057066, lat: 42.343437)
-Thing.create(city_id: 13023, lng: -71.078965, lat: 42.34634)
-Thing.create(city_id: 13024, lng: -71.072854, lat: 42.346529)
-Thing.create(city_id: 13025, lng: -71.056484, lat: 42.3144)
-Thing.create(city_id: 13026, lng: -71.053399, lat: 42.314278)
-Thing.create(city_id: 13027, lng: -71.054707, lat: 42.316605)
-Thing.create(city_id: 13028, lng: -71.080484, lat: 42.333389)
-Thing.create(city_id: 13029, lng: -71.057021, lat: 42.309785)
-Thing.create(city_id: 13030, lng: -71.044708, lat: 42.309526)
-Thing.create(city_id: 13031, lng: -71.051914, lat: 42.312569)
-Thing.create(city_id: 13032, lng: -71.064463, lat: 42.315555)
-Thing.create(city_id: 13033, lng: -71.076758, lat: 42.334577)
-Thing.create(city_id: 13034, lng: -71.045879, lat: 42.309387)
-Thing.create(city_id: 13035, lng: -71.054056, lat: 42.31272)
-Thing.create(city_id: 13036, lng: -71.047499, lat: 42.312432)
-Thing.create(city_id: 13037, lng: -71.125167, lat: 42.267496)
-Thing.create(city_id: 13038, lng: -71.048095, lat: 42.34128)
-Thing.create(city_id: 13039, lng: -71.054211, lat: 42.341722)
-Thing.create(city_id: 13040, lng: -71.05487, lat: 42.343104)
-Thing.create(city_id: 13041, lng: -71.033015, lat: 42.344028)
-Thing.create(city_id: 13042, lng: -71.077384, lat: 42.343366)
-Thing.create(city_id: 13043, lng: -71.075691, lat: 42.346603)
-Thing.create(city_id: 13044, lng: -71.079428, lat: 42.345937)
-Thing.create(city_id: 13045, lng: -71.066476, lat: 42.343136)
-Thing.create(city_id: 13046, lng: -71.068916, lat: 42.343601)
-Thing.create(city_id: 13047, lng: -71.05757, lat: 42.344488)
-Thing.create(city_id: 13048, lng: -71.063178, lat: 42.341848)
-Thing.create(city_id: 13049, lng: -71.067261, lat: 42.345163)
-Thing.create(city_id: 13050, lng: -71.051201, lat: 42.345186)
-Thing.create(city_id: 13051, lng: -71.06459, lat: 42.343394)
-Thing.create(city_id: 13052, lng: -71.050712, lat: 42.309712)
-Thing.create(city_id: 13053, lng: -71.046955, lat: 42.309334)
-Thing.create(city_id: 13054, lng: -71.053927, lat: 42.311166)
-Thing.create(city_id: 13055, lng: -71.071835, lat: 42.332609)
-Thing.create(city_id: 13056, lng: -71.069712, lat: 42.333947)
-Thing.create(city_id: 13057, lng: -71.053417, lat: 42.3164)
-Thing.create(city_id: 13058, lng: -71.044048, lat: 42.320689)
-Thing.create(city_id: 13059, lng: -71.050605, lat: 42.310296)
-Thing.create(city_id: 13060, lng: -71.068435, lat: 42.333323)
-Thing.create(city_id: 13061, lng: -71.053471, lat: 42.312219)
-Thing.create(city_id: 13062, lng: -71.05278, lat: 42.319171)
-Thing.create(city_id: 13063, lng: -71.067903, lat: 42.33386)
-Thing.create(city_id: 13064, lng: -71.069392, lat: 42.315067)
-Thing.create(city_id: 13065, lng: -71.067271, lat: 42.346238)
-Thing.create(city_id: 13066, lng: -71.052134, lat: 42.345832)
-Thing.create(city_id: 13067, lng: -71.068969, lat: 42.344315)
-Thing.create(city_id: 13068, lng: -71.071232, lat: 42.344289)
-Thing.create(city_id: 13069, lng: -71.055391, lat: 42.341134)
-Thing.create(city_id: 13070, lng: -71.072863, lat: 42.346387)
-Thing.create(city_id: 13071, lng: -71.081564, lat: 42.344169)
-Thing.create(city_id: 13072, lng: -71.062991, lat: 42.34225)
-Thing.create(city_id: 13073, lng: -71.072362, lat: 42.345034)
-Thing.create(city_id: 13074, lng: -71.072838, lat: 42.341027)
-Thing.create(city_id: 13075, lng: -71.067884, lat: 42.346812)
-Thing.create(city_id: 13076, lng: -71.072747, lat: 42.345806)
-Thing.create(city_id: 13077, lng: -71.053845, lat: 42.343326)
-Thing.create(city_id: 13078, lng: -71.067696, lat: 42.345825)
-Thing.create(city_id: 13079, lng: -71.055668, lat: 42.341772)
-Thing.create(city_id: 13080, lng: -71.058815, lat: 42.342292)
-Thing.create(city_id: 13081, lng: -71.05677, lat: 42.34333)
-Thing.create(city_id: 13082, lng: -71.072701, lat: 42.344011)
-Thing.create(city_id: 13083, lng: -71.041013, lat: 42.344924)
-Thing.create(city_id: 13084, lng: -71.06557, lat: 42.341582)
-Thing.create(city_id: 13085, lng: -71.062488, lat: 42.334513)
-Thing.create(city_id: 13086, lng: -71.06871, lat: 42.33259)
-Thing.create(city_id: 13087, lng: -71.062874, lat: 42.334062)
-Thing.create(city_id: 13088, lng: -71.05364, lat: 42.313472)
-Thing.create(city_id: 13089, lng: -71.056033, lat: 42.318767)
-Thing.create(city_id: 13090, lng: -71.046424, lat: 42.316466)
-Thing.create(city_id: 13091, lng: -71.065048, lat: 42.333572)
-Thing.create(city_id: 13092, lng: -71.063022, lat: 42.331115)
-Thing.create(city_id: 13093, lng: -71.077824, lat: 42.333942)
-Thing.create(city_id: 13094, lng: -71.056056, lat: 42.314747)
-Thing.create(city_id: 13095, lng: -71.056867, lat: 42.311281)
-Thing.create(city_id: 13096, lng: -71.040663, lat: 42.317409)
-Thing.create(city_id: 13097, lng: -71.063002, lat: 42.315279)
-Thing.create(city_id: 13098, lng: -71.066721, lat: 42.316132)
-Thing.create(city_id: 13099, lng: -71.05593, lat: 42.311101)
-Thing.create(city_id: 13100, lng: -71.067843, lat: 42.316153)
-Thing.create(city_id: 13101, lng: -71.059067, lat: 42.327271)
-Thing.create(city_id: 13102, lng: -71.052654, lat: 42.345054)
-Thing.create(city_id: 13103, lng: -71.070841, lat: 42.346243)
-Thing.create(city_id: 13104, lng: -71.075405, lat: 42.345593)
-Thing.create(city_id: 13105, lng: -71.069887, lat: 42.345044)
-Thing.create(city_id: 13106, lng: -71.064672, lat: 42.343342)
-Thing.create(city_id: 13107, lng: -71.069183, lat: 42.346226)
-Thing.create(city_id: 13108, lng: -71.074339, lat: 42.344187)
-Thing.create(city_id: 13109, lng: -71.064953, lat: 42.34544)
-Thing.create(city_id: 13110, lng: -71.064027, lat: 42.346428)
-Thing.create(city_id: 13111, lng: -71.055944, lat: 42.343187)
-Thing.create(city_id: 13112, lng: -71.042789, lat: 42.346476)
-Thing.create(city_id: 13113, lng: -71.088906, lat: 42.346874)
-Thing.create(city_id: 13114, lng: -71.074767, lat: 42.344742)
-Thing.create(city_id: 13115, lng: -71.062273, lat: 42.344024)
-Thing.create(city_id: 13116, lng: -71.051825, lat: 42.34664)
-Thing.create(city_id: 13117, lng: -71.069632, lat: 42.34541)
-Thing.create(city_id: 13118, lng: -71.066527, lat: 42.341876)
-Thing.create(city_id: 13119, lng: -71.068013, lat: 42.345267)
-Thing.create(city_id: 13120, lng: -71.080125, lat: 42.345369)
-Thing.create(city_id: 13121, lng: -71.070824, lat: 42.344274)
-Thing.create(city_id: 13122, lng: -71.057142, lat: 42.343812)
-Thing.create(city_id: 13123, lng: -71.054205, lat: 42.342779)
-Thing.create(city_id: 13124, lng: -71.063849, lat: 42.34509)
-Thing.create(city_id: 13125, lng: -71.058225, lat: 42.343278)
-Thing.create(city_id: 13126, lng: -71.071761, lat: 42.345998)
-Thing.create(city_id: 13127, lng: -71.065449, lat: 42.344652)
-Thing.create(city_id: 13128, lng: -71.058095, lat: 42.345288)
-Thing.create(city_id: 13129, lng: -71.063531, lat: 42.34319)
-Thing.create(city_id: 13130, lng: -71.072479, lat: 42.334336)
-Thing.create(city_id: 13131, lng: -71.079938, lat: 42.333932)
-Thing.create(city_id: 13132, lng: -71.113109, lat: 42.278881)
-Thing.create(city_id: 13133, lng: -71.068155, lat: 42.331603)
-Thing.create(city_id: 13134, lng: -71.053509, lat: 42.315712)
-Thing.create(city_id: 13135, lng: -71.065589, lat: 42.308627)
-Thing.create(city_id: 13136, lng: -71.053498, lat: 42.318897)
-Thing.create(city_id: 13137, lng: -71.05579, lat: 42.320713)
-Thing.create(city_id: 13138, lng: -71.05319, lat: 42.315105)
-Thing.create(city_id: 13139, lng: -71.069071, lat: 42.305482)
-Thing.create(city_id: 13140, lng: -71.066045, lat: 42.306431)
-Thing.create(city_id: 13141, lng: -71.082065, lat: 42.349617)
-Thing.create(city_id: 13142, lng: -71.045733, lat: 42.35172)
-Thing.create(city_id: 13143, lng: -71.087908, lat: 42.351361)
-Thing.create(city_id: 13144, lng: -71.084864, lat: 42.349019)
-Thing.create(city_id: 13145, lng: -71.079218, lat: 42.351466)
-Thing.create(city_id: 13146, lng: -71.049232, lat: 42.350973)
-Thing.create(city_id: 13147, lng: -71.085057, lat: 42.351221)
-Thing.create(city_id: 13148, lng: -71.083475, lat: 42.351632)
-Thing.create(city_id: 13149, lng: -71.04574, lat: 42.354898)
-Thing.create(city_id: 13150, lng: -71.073992, lat: 42.352974)
-Thing.create(city_id: 13151, lng: -71.071482, lat: 42.351159)
-Thing.create(city_id: 13152, lng: -71.053199, lat: 42.342535)
-Thing.create(city_id: 13153, lng: -71.063016, lat: 42.344312)
-Thing.create(city_id: 13154, lng: -71.043533, lat: 42.345188)
-Thing.create(city_id: 13155, lng: -71.063425, lat: 42.346193)
-Thing.create(city_id: 13156, lng: -71.063248, lat: 42.345747)
-Thing.create(city_id: 13157, lng: -71.026964, lat: 42.343838)
-Thing.create(city_id: 13158, lng: -71.07378, lat: 42.345465)
-Thing.create(city_id: 13159, lng: -71.075983, lat: 42.341514)
-Thing.create(city_id: 13160, lng: -71.073482, lat: 42.344661)
-Thing.create(city_id: 13161, lng: -71.071372, lat: 42.345213)
-Thing.create(city_id: 13162, lng: -71.071945, lat: 42.338062)
-Thing.create(city_id: 13163, lng: -71.04701, lat: 42.339592)
-Thing.create(city_id: 13164, lng: -71.066441, lat: 42.338639)
-Thing.create(city_id: 13165, lng: -71.076105, lat: 42.335929)
-Thing.create(city_id: 13166, lng: -71.069186, lat: 42.336674)
-Thing.create(city_id: 13167, lng: -71.065716, lat: 42.339894)
-Thing.create(city_id: 13168, lng: -71.074833, lat: 42.336544)
-Thing.create(city_id: 13169, lng: -71.04845, lat: 42.298511)
-Thing.create(city_id: 13170, lng: -71.0642, lat: 42.301683)
-Thing.create(city_id: 13171, lng: -71.06154, lat: 42.298436)
-Thing.create(city_id: 13172, lng: -71.059812, lat: 42.298224)
-Thing.create(city_id: 13173, lng: -71.06382, lat: 42.308101)
-Thing.create(city_id: 13174, lng: -71.05072, lat: 42.2944)
-Thing.create(city_id: 13175, lng: -71.063689, lat: 42.300803)
-Thing.create(city_id: 13176, lng: -71.067152, lat: 42.307462)
-Thing.create(city_id: 13177, lng: -71.049574, lat: 42.293627)
-Thing.create(city_id: 13178, lng: -71.063325, lat: 42.298517)
-Thing.create(city_id: 13179, lng: -71.05865, lat: 42.298389)
-Thing.create(city_id: 13180, lng: -71.062387, lat: 42.302241)
-Thing.create(city_id: 13181, lng: -71.052182, lat: 42.296714)
-Thing.create(city_id: 13182, lng: -71.068398, lat: 42.303923)
-Thing.create(city_id: 13183, lng: -71.063062, lat: 42.305072)
-Thing.create(city_id: 13184, lng: -71.071584, lat: 42.351559)
-Thing.create(city_id: 13185, lng: -71.069485, lat: 42.355972)
-Thing.create(city_id: 13186, lng: -71.074377, lat: 42.350805)
-Thing.create(city_id: 13187, lng: -71.050153, lat: 42.348092)
-Thing.create(city_id: 13188, lng: -71.048903, lat: 42.349924)
-Thing.create(city_id: 13189, lng: -71.070728, lat: 42.351361)
-Thing.create(city_id: 13190, lng: -71.074764, lat: 42.348712)
-Thing.create(city_id: 13191, lng: -71.075445, lat: 42.352483)
-Thing.create(city_id: 13192, lng: -71.086106, lat: 42.349848)
-Thing.create(city_id: 13193, lng: -71.048909, lat: 42.347064)
-Thing.create(city_id: 13194, lng: -71.050721, lat: 42.34736)
-Thing.create(city_id: 13195, lng: -71.085326, lat: 42.352047)
-Thing.create(city_id: 13196, lng: -71.076076, lat: 42.349668)
-Thing.create(city_id: 13197, lng: -71.088467, lat: 42.348485)
-Thing.create(city_id: 13198, lng: -71.070988, lat: 42.350789)
-Thing.create(city_id: 13199, lng: -71.067697, lat: 42.347224)
-Thing.create(city_id: 13200, lng: -71.083775, lat: 42.348594)
-Thing.create(city_id: 13201, lng: -71.049325, lat: 42.351804)
-Thing.create(city_id: 13202, lng: -71.044878, lat: 42.35134)
-Thing.create(city_id: 13203, lng: -71.073327, lat: 42.350195)
-Thing.create(city_id: 13204, lng: -71.06591, lat: 42.349866)
-Thing.create(city_id: 13205, lng: -71.047081, lat: 42.352631)
-Thing.create(city_id: 13206, lng: -71.048467, lat: 42.349539)
-Thing.create(city_id: 13207, lng: -71.043311, lat: 42.34703)
-Thing.create(city_id: 13208, lng: -71.083538, lat: 42.350307)
-Thing.create(city_id: 13209, lng: -71.084445, lat: 42.35137)
-Thing.create(city_id: 13210, lng: -71.047466, lat: 42.350421)
-Thing.create(city_id: 13211, lng: -71.080779, lat: 42.352367)
-Thing.create(city_id: 13212, lng: -71.072815, lat: 42.347309)
-Thing.create(city_id: 13213, lng: -71.087878, lat: 42.336165)
-Thing.create(city_id: 13214, lng: -71.085554, lat: 42.33686)
-Thing.create(city_id: 13215, lng: -71.062539, lat: 42.336742)
-Thing.create(city_id: 13216, lng: -71.074492, lat: 42.33911)
-Thing.create(city_id: 13217, lng: -71.072022, lat: 42.337608)
-Thing.create(city_id: 13218, lng: -71.068215, lat: 42.340572)
-Thing.create(city_id: 13219, lng: -71.072593, lat: 42.335753)
-Thing.create(city_id: 13220, lng: -71.070164, lat: 42.340483)
-Thing.create(city_id: 13221, lng: -71.069603, lat: 42.336147)
-Thing.create(city_id: 13222, lng: -71.067347, lat: 42.339816)
-Thing.create(city_id: 13223, lng: -71.061275, lat: 42.336368)
-Thing.create(city_id: 13224, lng: -71.067164, lat: 42.33895)
-Thing.create(city_id: 13225, lng: -71.062539, lat: 42.337591)
-Thing.create(city_id: 13226, lng: -71.065758, lat: 42.339121)
-Thing.create(city_id: 13227, lng: -71.082931, lat: 42.340449)
-Thing.create(city_id: 13228, lng: -71.077917, lat: 42.335581)
-Thing.create(city_id: 13229, lng: -71.085614, lat: 42.348875)
-Thing.create(city_id: 13230, lng: -71.055854, lat: 42.299516)
-Thing.create(city_id: 13231, lng: -71.087482, lat: 42.348324)
-Thing.create(city_id: 13232, lng: -71.060409, lat: 42.296298)
-Thing.create(city_id: 13233, lng: -71.065938, lat: 42.343796)
-Thing.create(city_id: 13234, lng: -71.052718, lat: 42.343077)
-Thing.create(city_id: 13235, lng: -71.058623, lat: 42.34264)
-Thing.create(city_id: 13236, lng: -71.046633, lat: 42.3425)
-Thing.create(city_id: 13237, lng: -71.050065, lat: 42.308119)
-Thing.create(city_id: 13238, lng: -71.057277, lat: 42.341479)
-Thing.create(city_id: 13239, lng: -71.05501, lat: 42.297197)
-Thing.create(city_id: 13240, lng: -71.071493, lat: 42.340435)
-Thing.create(city_id: 13241, lng: -71.048611, lat: 42.299055)
-Thing.create(city_id: 13242, lng: -71.057247, lat: 42.340428)
-Thing.create(city_id: 13243, lng: -71.064166, lat: 42.299036)
-Thing.create(city_id: 13244, lng: -71.068944, lat: 42.306606)
-Thing.create(city_id: 13245, lng: -71.050063, lat: 42.351496)
-Thing.create(city_id: 13246, lng: -71.060937, lat: 42.344201)
-Thing.create(city_id: 13247, lng: -71.070371, lat: 42.303853)
-Thing.create(city_id: 13248, lng: -71.066707, lat: 42.306422)
-Thing.create(city_id: 13249, lng: -71.057605, lat: 42.296984)
-Thing.create(city_id: 13250, lng: -71.078339, lat: 42.343213)
-Thing.create(city_id: 13251, lng: -71.066978, lat: 42.303423)
-Thing.create(city_id: 13252, lng: -71.060436, lat: 42.307646)
-Thing.create(city_id: 13253, lng: -71.067699, lat: 42.304439)
+User.where(email: 'admin@example.com').first_or_initialize.tap do |user|
+ user.first_name = 'Jane'
+ user.last_name = 'Doe'
+ user.password = 'password'
+ user.admin = true
+ user.save!
+end
+
+r = Random.new
+
+500.times do |i|
+ Thing.where(city_id: i).first_or_initialize.tap do |thing|
+ thing.name = "Some Drain #{i}"
+ thing.lat = r.rand(37.75..37.78)
+ thing.lng = r.rand(-122.43..-122.41)
+ thing.system_use_code = ['MS4', 'STORM', 'COMB', 'UNK'].sample
+ thing.save!
+ end
+end
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 000000000..40aec037f
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,13 @@
+version: '2'
+services:
+ db:
+ image: postgres
+ web:
+ build: .
+ command: bundle exec rails s -p 3000 -b '0.0.0.0'
+ volumes:
+ - .:/myapp
+ ports:
+ - "3000:3000"
+ depends_on:
+ - db
diff --git a/lib/adoption_mover.rb b/lib/adoption_mover.rb
new file mode 100644
index 000000000..f1886dd9a
--- /dev/null
+++ b/lib/adoption_mover.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+# class for rectifying adoptions of invalid data
+
+class AdoptionMover
+ class << self
+ # Move adoptions deleted later than `from` to close by unadopted things
+ # within `maximum_movement_in_feet` away
+ #
+ # Returns a hash of {to_id: from_id}
+ def move_close_deleted_adoptions(from, maximum_movement_in_feet)
+ moved_adoptions = {}
+
+ Thing.transaction do
+ records = ActiveRecord::Base.connection.execute <<-SQL.strip_heredoc
+ WITH
+ deleted_adopted_things AS (
+ SELECT *
+ FROM things
+ WHERE
+ user_id IS NOT NULL
+ -- only recently deleted things
+ AND (deleted_at > #{ActiveRecord::Base.sanitize(from)})
+ )
+ SELECT
+ deleted_adopted_things.id AS deleted_adopted_thing_id,
+ closest_unadopted_thing.id AS closest_unadopted_thing_id
+ FROM
+ deleted_adopted_things
+ LEFT JOIN LATERAL (
+ SELECT *,
+ -- earth_distance returns meters
+ earth_distance(
+ ll_to_earth(deleted_adopted_things.lat, deleted_adopted_things.lng),
+ ll_to_earth(unadopted_things.lat, unadopted_things.lng)
+ ) * 3.28 as distance_in_feet
+ FROM things AS unadopted_things
+ WHERE deleted_at IS NULL AND user_id IS NULL
+ ORDER BY distance_in_feet
+ LIMIT 1
+ ) AS closest_unadopted_thing ON 1=1
+ WHERE distance_in_feet < #{ActiveRecord::Base.sanitize(maximum_movement_in_feet)}
+ ORDER BY distance_in_feet
+ ;
+SQL
+
+ records.each do |record|
+ deleted_adopted_thing = Thing.unscoped.find(record['deleted_adopted_thing_id'])
+ closeby_unadopted_thing = Thing.find(record['closest_unadopted_thing_id'])
+
+ closeby_unadopted_thing.update!(
+ user_id: deleted_adopted_thing.user_id,
+ adopted_name: deleted_adopted_thing.adopted_name,
+ )
+ deleted_adopted_thing.update!(user_id: nil)
+
+ moved_adoptions[deleted_adopted_thing.id] = closeby_unadopted_thing.id
+ end
+ end
+
+ moved_adoptions
+ end
+ end
+end
diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake
new file mode 100644
index 000000000..3f07b828a
--- /dev/null
+++ b/lib/tasks/data.rake
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require 'rake'
+
+namespace :data do
+ task load_things: :environment do
+ require 'thing_importer'
+
+ ThingImporter.load('https://data.sfgov.org/api/views/jtgq-b7c5/rows.csv?accessType=DOWNLOAD')
+ end
+
+ # move adoptions to closeby things
+ # useful for rectifying adoptions of inconsistencies in the dataset (things
+ # that are removed during scheduled import)
+ task move_close_deleted_adoptions: :environment do
+ require 'adoption_mover'
+
+ ENV['ADOPTION_DELETION_FROM'] || raise('$ADOPTION_DELETION_FROM required')
+ ENV['MAXIMUM_MOVEMENT_IN_FEET'] || raise('$MAXIMUM_MOVEMENT_IN_FEET required')
+
+ adoption_deletion_from = Time.zone.parse(ENV['ADOPTION_DELETION_FROM'])
+
+ moved_adoptions = AdoptionMover.move_close_deleted_adoptions(adoption_deletion_from, ENV['MAXIMUM_MOVEMENT_IN_FEET'])
+
+ CSV($stdout) do |csv|
+ csv << %w[from to]
+ moved_adoptions.each do |from, to|
+ csv << [from, to]
+ end
+ end
+ end
+
+ task fetch_adopter_info: :environment do
+ ENV['CITY_IDS'] || raise('$CITY_IDS required')
+
+ ids = ENV['CITY_IDS'].split(' ').map { |id| id.gsub!('N-', '') }
+
+ Thing.unscoped.where(city_id: ids).each do |thing|
+ puts "N-#{thing.city_id} named '#{thing.display_name}' at #{thing.reverse_geocode.formatted_address} adopted by #{thing.user.name}, #{thing.user.email}"
+ end
+ end
+end
diff --git a/lib/thing_importer.rb b/lib/thing_importer.rb
new file mode 100644
index 000000000..cef5c91f6
--- /dev/null
+++ b/lib/thing_importer.rb
@@ -0,0 +1,118 @@
+# frozen_string_literal: true
+
+require 'net/http'
+require 'uri'
+
+# class for importing things from CSV datasource
+# is currently very specific to drains from DataSF
+#
+# Dataset:
+# https://data.sfgov.org/City-Infrastructure/Stormwater-inlets-drains-and-catch-basins/jtgq-b7c5
+class ThingImporter
+ class << self
+ def load(source_url)
+ Rails.logger.info('Downloading Things... ... ...')
+
+ ActiveRecord::Base.transaction do
+ import_temp_things(source_url)
+
+ deleted_things_with_adoptee, deleted_things_no_adoptee = delete_non_existing_things
+ created_things = upsert_things
+
+ ThingMailer.thing_update_report(deleted_things_with_adoptee, deleted_things_no_adoptee, created_things).deliver_now
+ end
+ end
+
+ def integer?(string)
+ return true if string =~ /\A\d+\Z/
+
+ false
+ end
+
+ def normalize_thing(csv_thing)
+ (lat, lng) = csv_thing['Location'].delete('()').split(',').map(&:strip)
+ {
+ city_id: csv_thing['PUC_Maximo_Asset_ID'].gsub!('N-', ''),
+ lat: lat,
+ lng: lng,
+ type: csv_thing['Drain_Type'],
+ system_use_code: csv_thing['System_Use_Code'],
+ }
+ end
+
+ def invalid_thing(thing)
+ false unless ['Storm Water Inlet Drain', 'Catch Basin Drain'].include?(thing[:type])
+ false unless integer?(thing[:city_id])
+ true
+ end
+
+ # load all of the items into a temporary table, temp_thing_import
+ def import_temp_things(source_url)
+ insert_statement_id = SecureRandom.uuid
+
+ conn = ActiveRecord::Base.connection
+ conn.execute(<<-SQL.strip_heredoc)
+ CREATE TEMPORARY TABLE "temp_thing_import" (
+ id serial,
+ name varchar,
+ lat numeric(16,14),
+ lng numeric(17,14),
+ city_id integer,
+ system_use_code varchar
+ )
+ SQL
+ conn.raw_connection.prepare(insert_statement_id, 'INSERT INTO temp_thing_import (name, lat, lng, city_id, system_use_code) VALUES($1, $2, $3, $4, $5)')
+
+ response = Net::HTTP.get_response(URI.parse(source_url))
+ raise 'unable to fetch data source' unless response.is_a? Net::HTTPSuccess
+
+ CSV.parse(response.body, headers: true).
+ map { |t| normalize_thing(t) }.
+ select { |t| invalid_thing(t) }.
+ each do |thing|
+ conn.raw_connection.exec_prepared(
+ insert_statement_id,
+ [thing[:type], thing[:lat], thing[:lng], thing[:city_id], thing[:system_use_code]],
+ )
+ end
+
+ conn.execute('CREATE INDEX "temp_thing_import_city_id" ON temp_thing_import(city_id)')
+ end
+
+ # mark drains as deleted that do not exist in the new set
+ # return the deleted drains partitioned by whether they were adopted
+ def delete_non_existing_things
+ # mark deleted_at as this is what the paranoia gem uses to scope
+ deleted_things = ActiveRecord::Base.connection.execute(<<-SQL.strip_heredoc)
+ UPDATE things
+ SET deleted_at = NOW()
+ WHERE things.city_id NOT IN (SELECT city_id from temp_thing_import) AND deleted_at IS NULL
+ RETURNING things.city_id, things.user_id
+ SQL
+ deleted_things.partition { |thing| thing['user_id'].present? }
+ end
+
+ def upsert_things
+ # postgresql's RETURNING returns both updated and inserted records so we
+ # query for the items to be inserted first
+ created_things = ActiveRecord::Base.connection.execute(<<-SQL.strip_heredoc)
+ SELECT temp_thing_import.city_id
+ FROM things
+ RIGHT JOIN temp_thing_import ON temp_thing_import.city_id = things.city_id
+ WHERE things.id IS NULL
+ SQL
+
+ ActiveRecord::Base.connection.execute(<<-SQL.strip_heredoc)
+ INSERT INTO things(name, lat, lng, city_id, system_use_code)
+ SELECT name, lat, lng, city_id, system_use_code FROM temp_thing_import
+ ON CONFLICT(city_id) DO UPDATE SET
+ lat = EXCLUDED.lat,
+ lng = EXCLUDED.lng,
+ name = EXCLUDED.name,
+ deleted_at = NULL
+ SQL
+
+ created_things
+ end
+ end
+end
diff --git a/public/favicon.ico b/public/favicon.ico
index 6396caeaa..195281b53 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/screenshot.png b/screenshot.png
index a2c2d067a..771324ec2 100644
Binary files a/screenshot.png and b/screenshot.png differ
diff --git a/script/rails b/script/rails
index bd79dce51..e1068b282 100755
--- a/script/rails
+++ b/script/rails
@@ -1,6 +1,8 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
+APP_PATH = File.expand_path('../config/application', __dir__)
+require File.expand_path('../config/boot', __dir__)
require 'rails/commands'
diff --git a/test/controllers/addresses_controller_test.rb b/test/controllers/addresses_controller_test.rb
index efddc2887..b3d24cb44 100644
--- a/test/controllers/addresses_controller_test.rb
+++ b/test/controllers/addresses_controller_test.rb
@@ -1,10 +1,12 @@
+# frozen_string_literal: true
+
require 'test_helper'
class AddressesControllerTest < ActionController::TestCase
test 'should return latitude and longitude for a valid address' do
stub_request(:get, 'https://maps.google.com/maps/api/geocode/json').
with(query: {address: 'City Hall, Boston, MA', sensor: 'false'}).
- to_return(body: File.read(File.expand_path('../../fixtures/city_hall.json', __FILE__)))
+ to_return(body: File.read(File.expand_path('../fixtures/city_hall.json', __dir__)))
get :show, address: 'City Hall', city_state: 'Boston, MA', format: 'json'
assert_not_nil assigns :address
end
@@ -12,10 +14,10 @@ class AddressesControllerTest < ActionController::TestCase
test 'should return an error for an invalid address' do
stub_request(:get, 'https://maps.google.com/maps/api/geocode/json').
with(query: {address: ', ', sensor: 'false'}).
- to_return(body: File.read(File.expand_path('../../fixtures/unknown_address.json', __FILE__)))
+ to_return(body: File.read(File.expand_path('../fixtures/unknown_address.json', __dir__)))
stub_request(:get, 'http://geocoder.us/service/csv/geocode').
with(query: {address: ', '}).
- to_return(body: File.read(File.expand_path('../../fixtures/unknown_address.json', __FILE__)))
+ to_return(body: File.read(File.expand_path('../fixtures/unknown_address.json', __dir__)))
get :show, address: '', city_state: '', format: 'json'
assert_response :missing
end
diff --git a/test/controllers/info_window_controller_test.rb b/test/controllers/info_window_controller_test.rb
index f9b070a95..8967fb25f 100644
--- a/test/controllers/info_window_controller_test.rb
+++ b/test/controllers/info_window_controller_test.rb
@@ -1,13 +1,15 @@
+# frozen_string_literal: true
+
require 'test_helper'
class InfoWindowControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
@thing = things(:thing_1)
@user = users(:erik)
end
- test 'should thank the user if the hydrant is adopted by the user' do
+ test 'should thank the user if the drain is adopted by the user' do
sign_in @user
@thing.user_id = @user.id
@thing.save!
@@ -15,7 +17,7 @@ class InfoWindowControllerTest < ActionController::TestCase
assert_not_nil assigns :thing
assert_response :success
assert_template 'users/thank_you'
- assert_select 'h2', 'Thank you for adopting this hydrant!'
+ assert_select 'h2', 'Thank you for adopting this drain!'
assert_select 'form#abandon_form' do
assert_select '[action=?]', '/things'
assert_select '[method=?]', 'post'
@@ -26,27 +28,28 @@ class InfoWindowControllerTest < ActionController::TestCase
end
assert_select 'input[name="commit"]' do
assert_select '[type=?]', 'submit'
- assert_select '[value=?]', 'Abandon this hydrant'
+ assert_select '[value=?]', 'Abandon this drain'
end
end
- test 'should show the profile if the hydrant is adopted' do
+ test 'should show the profile if the drain is adopted' do
@thing.user_id = @user.id
@thing.save!
get :index, thing_id: @thing.id
assert_not_nil assigns :thing
assert_response :success
assert_template 'users/profile'
- assert_select 'h2', /This hydrant has been adopted\s+by #{@user.name}\s+of #{@user.organization}/
+ assert_select 'h4', /This drain has been adopted/
+ assert_select 'div', /by #{@user.first_name}\s+of #{@user.organization}/
end
- test 'should show adoption form if hydrant is not adopted' do
+ test 'should show adoption form if drain is not adopted' do
sign_in @user
get :index, thing_id: @thing.id
assert_not_nil assigns :thing
assert_response :success
assert_template :adopt
- assert_select 'h2', 'Adopt this Hydrant'
+ assert_select 'h2', 'Adopt this Drain'
assert_select 'form#adoption_form' do
assert_select '[action=?]', '/things'
assert_select '[method=?]', 'post'
@@ -61,11 +64,25 @@ class InfoWindowControllerTest < ActionController::TestCase
end
end
+ test 'should show special link on adoption form if it has one' do
+ sign_in @user
+ Thing.stub :find_by, @thing do
+ @thing.stub :detail_link, 'http://example.com' do
+ get :index, thing_id: @thing.id
+ end
+ end
+ assert_response :success
+ assert_select 'a', /This .* is special! Learn why./ do
+ assert_select '[href=?]', 'http://example.com'
+ end
+ end
+
test 'should show sign-in form if signed out' do
get :index, thing_id: @thing.id
assert_not_nil assigns :thing
assert_response :success
assert_template 'users/sign_in'
- assert_select 'h2', 'Sign in to adopt this Hydrant'
+ assert_select 'h3', 'Sign in to adopt this drain'
+ assert_select 'a.guidelines p', 'Learn more about adopting a drain'
end
end
diff --git a/test/controllers/main_controller_test.rb b/test/controllers/main_controller_test.rb
index 0143cf42b..794737a31 100644
--- a/test/controllers/main_controller_test.rb
+++ b/test/controllers/main_controller_test.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
require 'test_helper'
class MainControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
request.env['devise.mapping'] = Devise.mappings[:user]
@@ -11,8 +13,8 @@ class MainControllerTest < ActionController::TestCase
test 'should return the home page' do
get :index
assert_response :success
- assert_select 'title', 'Adopt-a-Hydrant'
- assert_select 'p#tagline', 'Claim responsibility for shoveling out a fire hydrant after it snows.'
+ assert_select 'title', 'Adopt-a-Drain San Francisco'
+ assert_select 'button#tagline', 'What does it mean to adopt a drain?'
end
test 'should show search form when signed in' do
@@ -25,13 +27,12 @@ class MainControllerTest < ActionController::TestCase
end
assert_select 'label#city_state_label', 'City'
assert_select 'select#city_state' do
- assert_select 'option', 'Boston, Massachusetts'
+ assert_select 'option', 'San Francisco, California'
end
- assert_select 'label#address_label', 'Address, Neighborhood'
assert_select 'input#address', true
assert_select 'input[name="commit"]' do
assert_select '[type=?]', 'submit'
- assert_select '[value=?]', 'Find hydrants'
+ assert_select '[value=?]', 'Find drains'
end
assert_select 'div#map', true
end
diff --git a/test/controllers/passwords_controller_test.rb b/test/controllers/passwords_controller_test.rb
index 76f2de988..fa1a7de60 100644
--- a/test/controllers/passwords_controller_test.rb
+++ b/test/controllers/passwords_controller_test.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
require 'test_helper'
class PasswordsControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
request.env['devise.mapping'] = Devise.mappings[:user]
@user = users(:erik)
@@ -14,7 +16,7 @@ class PasswordsControllerTest < ActionController::TestCase
assert_response :success
email = ActionMailer::Base.deliveries.last
assert_equal [@user.email], email.to
- assert_equal 'Reset password instructions', email.subject
+ assert_equal 'Adopt-a-drain San Francisco reset password instructions', email.subject
end
test 'should not send password reset instructions if email address is not found' do
@@ -22,9 +24,18 @@ class PasswordsControllerTest < ActionController::TestCase
assert_response :error
end
+ test 'should redirect if signed in' do
+ sign_in(@user)
+ get :edit, reset_password_token: 'token'
+ assert_redirected_to root_path
+ assert_equal 'You are already signed in.', flash[:alert]
+ end
+
test 'should render edit view' do
get :edit, reset_password_token: 'token'
assert_response :success
+ assert_template 'main/index'
+ assert_not_nil assigns(:reset_password_token)
end
test 'should reset user password with an valid reset password token' do
@@ -32,8 +43,7 @@ class PasswordsControllerTest < ActionController::TestCase
put :update, user: {reset_password_token: token, password: 'new_password'}
@user.reload
assert @user.valid_password?('new_password')
- assert_response :redirect
- assert_redirected_to controller: 'main', action: 'index'
+ assert_response :success
end
test 'should not reset user password with an invalid reset password token' do
@@ -41,7 +51,7 @@ class PasswordsControllerTest < ActionController::TestCase
put :update, user: {reset_password_token: 'invalid_token', password: 'new_password'}
@user.reload
assert !@user.valid_password?('new_password')
- assert_response :redirect
- assert_redirected_to controller: 'main', action: 'index'
+ assert_response :error
+ assert_equal ['is invalid'], JSON.parse(response.body)['errors']['reset_password_token']
end
end
diff --git a/test/controllers/reminders_controller_test.rb b/test/controllers/reminders_controller_test.rb
index df0d57451..6554d7b94 100644
--- a/test/controllers/reminders_controller_test.rb
+++ b/test/controllers/reminders_controller_test.rb
@@ -1,27 +1,37 @@
+# frozen_string_literal: true
+
require 'test_helper'
class RemindersControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
request.env['devise.mapping'] = Devise.mappings[:user]
@thing = things(:thing_1)
@dan = users(:dan)
@user = users(:erik)
+ @admin = users(:admin)
@thing.user = @dan
@thing.save!
stub_request(:get, 'https://maps.google.com/maps/api/geocode/json').
with(query: {latlng: '42.383339,-71.049226', sensor: 'false'}).
- to_return(body: File.read(File.expand_path('../../fixtures/city_hall.json', __FILE__)))
+ to_return(body: File.read(File.expand_path('../fixtures/city_hall.json', __dir__)))
end
- test 'should send a reminder email' do
- sign_in @user
+ test 'should send a reminder email if admin' do
+ sign_in @admin
num_deliveries = ActionMailer::Base.deliveries.size
post :create, format: :json, reminder: {thing_id: @thing.id, to_user_id: @dan.id}
assert_equal num_deliveries + 1, ActionMailer::Base.deliveries.size
assert_response :success
email = ActionMailer::Base.deliveries.last
assert_equal [@dan.email], email.to
- assert_equal 'Remember to shovel', email.subject
+ assert_equal 'Remember to clear your adopted drain', email.subject
+ end
+
+ test 'should not send a reminder email if not admin' do
+ sign_in @user
+ num_deliveries = ActionMailer::Base.deliveries.size
+ post :create, format: :json, reminder: {thing_id: @thing.id, to_user_id: @dan.id}
+ assert_equal num_deliveries, ActionMailer::Base.deliveries.size
end
end
diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb
index f1458beea..74e719f1d 100644
--- a/test/controllers/sessions_controller_test.rb
+++ b/test/controllers/sessions_controller_test.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
require 'test_helper'
class SessionsControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
request.env['devise.mapping'] = Devise.mappings[:user]
@user = users(:erik)
diff --git a/test/controllers/sidebar_controller_test.rb b/test/controllers/sidebar_controller_test.rb
new file mode 100644
index 000000000..97712bbea
--- /dev/null
+++ b/test/controllers/sidebar_controller_test.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class SidebarControllerTest < ActionController::TestCase
+ include Devise::Test::ControllerHelpers
+ setup do
+ request.env['devise.mapping'] = Devise.mappings[:user]
+ @user = users(:erik)
+ end
+
+ # required by application.js to get the current user
+ test 'search form should include current user id' do
+ sign_in @user
+ get :search
+ assert_select '#current_user_id[value=?]', @user.id.to_s
+ end
+end
diff --git a/test/controllers/sitemaps_controller_test.rb b/test/controllers/sitemaps_controller_test.rb
index 7d6d746b7..60685e322 100644
--- a/test/controllers/sitemaps_controller_test.rb
+++ b/test/controllers/sitemaps_controller_test.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
require 'test_helper'
class SitemapsControllerTest < ActionController::TestCase
diff --git a/test/controllers/things_controller_test.rb b/test/controllers/things_controller_test.rb
index def4bf23e..e43ecf0bb 100644
--- a/test/controllers/things_controller_test.rb
+++ b/test/controllers/things_controller_test.rb
@@ -1,22 +1,89 @@
+# frozen_string_literal: true
+
require 'test_helper'
class ThingsControllerTest < ActionController::TestCase
+ include Devise::Test::ControllerHelpers
setup do
+ stub_request(:get, 'https://maps.google.com/maps/api/geocode/json').
+ with(query: {latlng: '42.383339,-71.049226', sensor: 'false'}).
+ to_return(body: File.read(File.expand_path('../fixtures/city_hall.json', __dir__)))
+
@thing = things(:thing_1)
+ @user = users(:dan)
end
- test 'should list hydrants' do
+ test 'should list drains' do
get :show, format: 'json', lat: 42.358431, lng: -71.059773
assert_not_nil assigns :things
assert_response :success
end
- test 'should update hydrant' do
- assert_not_equal 'Birdsill', @thing.name
- put :update, format: 'json', id: @thing.id, thing: {name: 'Birdsill'}
+ test 'should 404 if there are no drains' do
+ Thing.all.map(&:destroy!)
+ get :show, format: 'json', lat: 43.358431, lng: -71.059773
+ assert_response :missing
+ assert_equal ['Could not find drain.'], JSON.parse(response.body)['errors']['address']
+ end
+
+ test 'should return true if a drain is owned by logged in user' do
+ sign_in @user
+ @thing.user_id = @user.id
+ get :show, format: 'json', lat: 42.358431, lng: -71.059773
+ assert_not_nil assigns :things
+ assert_response :success
+ end
+
+ test 'should update drain display name' do
+ sign_in @user
+ assert_not_equal 'Birdsill', @thing.display_name
+ put :update, format: 'json', id: @thing.id, thing: {user_id: @user.id, adopted_name: 'Birdsill'}
@thing.reload
- assert_equal 'Birdsill', @thing.name
+ assert_equal 'Birdsill', @thing.display_name
assert_not_nil assigns :thing
assert_response :success
end
+
+ test 'should error when updating drain with invalid data' do
+ Thing.stub(:find, @thing) do
+ @thing.stub(:update, false) do
+ put :update, format: 'json', id: @thing.id, thing: {adopted_name: 'hello'}
+ end
+ end
+ assert_response :error
+ end
+
+ test 'should update drain and send an adopted confirmation email' do
+ sign_in @user
+ num_deliveries = ActionMailer::Base.deliveries.size
+ put :update, format: 'json', id: @thing.id, thing: {adopted_name: 'Drain', user_id: @user.id}
+ assert @thing.reload.adopted?
+ assert_equal num_deliveries + 1, ActionMailer::Base.deliveries.size
+ assert_response :success
+
+ email = ActionMailer::Base.deliveries.last
+ assert_equal [@user.email], email.to
+ assert_equal 'Thanks for adopting a drain, Dan!', email.subject
+ end
+
+ test 'should send second confirmation email' do
+ sign_in @user
+ @user.things = [things(:thing_2)]
+ put :update, format: 'json', id: @thing.id, thing: {adopted_name: 'Drain', user_id: @user.id}
+ assert @thing.reload.adopted?
+ assert_response :success
+
+ email = ActionMailer::Base.deliveries.last
+ assert_equal [@user.email], email.to
+ assert_equal 'Thanks for adopting another drain, Dan!', email.subject
+ end
+
+ test 'should update drain but not send an adopted confirmation email upon abandonment' do
+ sign_in @user
+ num_deliveries = ActionMailer::Base.deliveries.size
+ put :update, format: 'json', id: @thing.id, thing: {adopted_name: 'Another Drain', user_id: nil} # a nil user_id is an abandonment
+ assert_not @thing.reload.adopted?
+ assert_equal num_deliveries, ActionMailer::Base.deliveries.size
+ assert_response :success
+ end
end
diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb
index 4ba256e75..fedbc476e 100644
--- a/test/controllers/users_controller_test.rb
+++ b/test/controllers/users_controller_test.rb
@@ -1,7 +1,9 @@
+# frozen_string_literal: true
+
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
- include Devise::TestHelpers
+ include Devise::Test::ControllerHelpers
setup do
request.env['devise.mapping'] = Devise.mappings[:user]
@user = users(:erik)
@@ -15,8 +17,8 @@ class UsersControllerTest < ActionController::TestCase
assert_select '[action=?]', '/users'
assert_select '[method=?]', 'post'
end
- assert_select 'input', count: 15
- assert_select 'label', count: 12
+ assert_select 'input', count: 16
+ assert_select 'label', count: 13
assert_select 'input[name="commit"]' do
assert_select '[type=?]', 'submit'
assert_select '[value=?]', 'Update'
@@ -27,7 +29,7 @@ class UsersControllerTest < ActionController::TestCase
test 'should update user if password is correct' do
sign_in @user
assert_not_equal 'New Name', @user.name
- put :update, user: {name: 'New Name', current_password: 'correct'}
+ put :update, user: {first_name: 'New', last_name: 'Name', current_password: 'correct'}
@user.reload
assert_equal 'New Name', @user.name
assert_response :redirect
@@ -41,12 +43,12 @@ class UsersControllerTest < ActionController::TestCase
end
test 'should create user if information is valid' do
- post :create, user: {email: 'user@example.com', name: 'User', password: 'correct', password_confirmation: 'correct'}
+ post :create, user: {email: 'user@example.com', first_name: 'User', last_name: '123', password: 'correct', password_confirmation: 'correct'}
assert_response :success
end
test 'should return error if information is invalid' do
- post :create, user: {email: 'user@example.com', name: 'User', password: 'correct', password_confirmation: 'incorrect'}
+ post :create, user: {email: 'user@example.com', first_name: 'User', password: 'correct', password_confirmation: 'incorrect'}
assert_response :error
end
end
diff --git a/test/fixtures/things.yml b/test/fixtures/things.yml
index 3d621628d..29ba87eb3 100644
--- a/test/fixtures/things.yml
+++ b/test/fixtures/things.yml
@@ -3,12 +3,15 @@ thing_1:
city_id: 1
lat: 42.383339
lng: -71.049226
+ name: ""
+ system_use_code: 'ABC'
thing_2:
city_id: 2,
lat: 42.381021
lng: -71.075964
+
thing_3:
city_id: 3
lat: 42.380106
@@ -48,3 +51,10 @@ thing_10:
city_id: 10
lat: 42.371378
lng: -71.038005
+
+thing_11:
+ city_id: 11
+ lat: 42.383339
+ lng: -71.049226
+ name: "Catch Basin Drain"
+ system_use_code: 'ABC'
diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml
index de0e4f06b..efdc08585 100644
--- a/test/fixtures/users.yml
+++ b/test/fixtures/users.yml
@@ -1,6 +1,7 @@
---
erik:
- name: Erik Michaels-Ober
+ first_name: Erik
+ last_name: Michaels-Ober
organization: Code for America
email: erik@example.com
voice_number: 1234567890
@@ -8,10 +9,20 @@ erik:
encrypted_password: "$2a$10$KF/JMZ494ZLhWLgHZeBTf.cSL4l0Wjij4gIZP7BzkueAC1p4nW0ma"
dan:
- name: Dan Melton
+ first_name: Dan
+ last_name: Melton
organization: Code for America
email: dan@example.com
voice_number: 1234567890
sms_number: 1234567890
encrypted_password: "$2a$10$KF/JMZ494ZLhWLgHZeBTf.cSL4l0Wjij4gIZP7BzkueAC1p4nW0ma"
+admin:
+ first_name: Admin
+ last_name: User
+ organization: Code for America
+ email: admin@example.com
+ voice_number: 1234567890
+ sms_number: 1234567890
+ encrypted_password: "$2a$10$KF/JMZ494ZLhWLgHZeBTf.cSL4l0Wjij4gIZP7BzkueAC1p4nW0ma"
+ admin: true
diff --git a/test/integration/login_test.rb b/test/integration/login_test.rb
new file mode 100644
index 000000000..158e9383b
--- /dev/null
+++ b/test/integration/login_test.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class LoginTest < ActionDispatch::IntegrationTest
+ setup do
+ @user = users(:erik)
+ end
+
+ test 'login with remembering' do
+ post '/users/sign_in.json', user: {email: @user.email, password: 'correct', remember_me: 1}, format: :json
+ assert_not_empty cookies['remember_user_token']
+ end
+
+ test 'login without remembering' do
+ post '/users/sign_in.json', user: {email: @user.email, password: 'correct', remember_me: 1}, format: :json
+ delete '/users/sign_out.json', format: :json
+ post '/users/sign_in.json', user: {email: @user.email, password: 'correct', remember_me: 0}, format: :json
+ assert_empty cookies['remember_user_token']
+ end
+end
diff --git a/test/lib/adopted_mover_test.rb b/test/lib/adopted_mover_test.rb
new file mode 100644
index 000000000..8ea290f07
--- /dev/null
+++ b/test/lib/adopted_mover_test.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+require 'adoption_mover'
+
+class AdoptionMoverTest < ActiveSupport::TestCase
+ test 'moves deleted adoptions to close by unadopted things' do
+ deleted_adoption_to_be_moved = things(:thing_1).tap do |thing|
+ thing.update!(user_id: users(:erik).id, adopted_name: 'hello', lat: '37.74092857302200', lng: '-122.422757295129000')
+ thing.destroy!
+ end
+ unadopted_thing_to_be_moved_to = things(:thing_10).tap do |thing|
+ thing.update!(user_id: nil, lat: '37.74093794334370', lng: '-122.42275720139800')
+ end
+
+ moved_adoptions = AdoptionMover.move_close_deleted_adoptions(Time.zone.now - 3600, 5)
+
+ assert_equal moved_adoptions[deleted_adoption_to_be_moved.id], unadopted_thing_to_be_moved_to.id
+
+ # assert close deleted adoption moved
+ unadopted_thing_to_be_moved_to.reload
+ assert_equal unadopted_thing_to_be_moved_to.user_id, deleted_adoption_to_be_moved.user_id
+ assert_equal unadopted_thing_to_be_moved_to.adopted_name, deleted_adoption_to_be_moved.adopted_name
+
+ # original adoption removed
+ deleted_adoption_to_be_moved.reload
+ assert_nil deleted_adoption_to_be_moved.user_id
+ end
+
+ test 'does not consider adopted drains when moving deleted adoptions to close by unadopted things' do
+ deleted_adoption_to_be_moved = things(:thing_1).tap do |thing|
+ thing.update!(user_id: users(:erik).id, adopted_name: 'hello', lat: '37.74092857302200', lng: '-122.422757295129000')
+ thing.destroy!
+ end
+ adopted_thing_to_ignore = things(:thing_10).tap do |thing|
+ thing.update!(user_id: users(:dan).id, adopted_name: 'world', lat: '37.74093794334370', lng: '-122.42275720139800')
+ end
+
+ assert_equal AdoptionMover.move_close_deleted_adoptions(Time.zone.parse('1 hour ago'), 5), {}
+
+ # original adoption unchanged
+ deleted_adoption_to_be_moved.reload
+ assert_equal deleted_adoption_to_be_moved.user_id, users(:erik).id
+ assert_equal deleted_adoption_to_be_moved.adopted_name, 'hello'
+
+ # assert close adoption unchanged
+ adopted_thing_to_ignore.reload
+ assert_equal adopted_thing_to_ignore.user_id, users(:dan).id
+ assert_equal adopted_thing_to_ignore.adopted_name, 'world'
+ end
+
+ test 'does not consider unadopted, far away, drains when moving deleted adoptions to close by unadopted things' do
+ deleted_adoption_to_be_moved = things(:thing_1).tap do |thing|
+ thing.update!(user_id: users(:erik).id, adopted_name: 'hello', lat: '37.74092857302200', lng: '-122.422757295129000')
+ thing.destroy!
+ end
+ thing_to_ignore = things(:thing_10).tap do |thing|
+ thing.update!(user_id: nil, lat: '38.74093794334370', lng: '-122.42275720139800')
+ end
+
+ assert_equal AdoptionMover.move_close_deleted_adoptions(Time.zone.parse('1 hour ago'), 5), {}
+
+ # original adoption unchanged
+ deleted_adoption_to_be_moved.reload
+ assert_equal deleted_adoption_to_be_moved.user_id, users(:erik).id
+ assert_equal deleted_adoption_to_be_moved.adopted_name, 'hello'
+
+ # assert far unadopted thing unchanged
+ thing_to_ignore.reload
+ assert_nil thing_to_ignore.user_id
+ end
+end
diff --git a/test/lib/thing_importer_test.rb b/test/lib/thing_importer_test.rb
new file mode 100644
index 000000000..894f1a050
--- /dev/null
+++ b/test/lib/thing_importer_test.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+require 'thing_importer'
+
+class ThingImporterTest < ActiveSupport::TestCase
+ test 'import does not modify data if endpoint fails' do
+ thing1 = things(:thing_1)
+
+ fake_url = 'http://sf-drain-data.org'
+ stub_request(:get, fake_url).to_return(status: [500, 'Internal Server Error'], body: nil)
+ assert_raises RuntimeError do
+ ThingImporter.load(fake_url)
+ end
+ assert_not_nil Thing.find(thing1.id)
+ end
+
+ test 'loading things, deletes existing things not in data set, updates properties on rest' do
+ admin = users(:admin)
+ thing1 = things(:thing_1)
+ thing11 = things(:thing_11)
+ thing10 = things(:thing_10).tap do |thing|
+ thing.update!(name: 'Erik drain', user_id: users(:erik).id)
+ end
+ things(:thing_9).tap do |thing|
+ thing.update!(user_id: users(:erik).id)
+ end
+
+ deleted_thing = things(:thing_3)
+ deleted_thing.destroy!
+
+ fake_url = 'http://sf-drain-data.org'
+ fake_response = [
+ 'PUC_Maximo_Asset_ID,Drain_Type,System_Use_Code,Location',
+ 'N-3,Catch Basin Drain,ABC,"(42.38, -71.07)"',
+ 'N-10,Catch Basin Drain,DEF,"(36.75, -121.40)"',
+ 'N-11,Catch Basin Drain,ABC,"(37.75, -122.40)"',
+ 'N-12,Catch Basin Drain,DEF,"(39.75, -121.40)"',
+ ].join("\n")
+ stub_request(:get, fake_url).to_return(body: fake_response)
+
+ ThingImporter.load(fake_url)
+
+ email = ActionMailer::Base.deliveries.last
+ assert_equal email.to, [admin.email]
+ assert_equal email.subject, 'Adopt-a-Drain San Francisco import (1 adopted drains removed, 1 drains added, 7 unadopted drains removed)'
+ thing11.reload
+ thing10.reload
+
+ # Asserts thing_1 is deleted
+ assert_nil Thing.find_by(id: thing1.id)
+
+ # Asserts thing_3 is reified
+ assert_equal Thing.find_by(city_id: 3).id, deleted_thing.id
+
+ # Asserts creates new thing
+ new_thing = Thing.find_by(city_id: 12)
+ assert_not_nil new_thing
+ assert_equal new_thing.lat, BigDecimal(39.75, 16)
+ assert_equal new_thing.lng, BigDecimal(-121.40, 16)
+
+ # Asserts properties on thing_11 have been updated
+ assert_equal thing11.lat, BigDecimal(37.75, 16)
+ assert_equal thing11.lng, BigDecimal(-122.40, 16)
+
+ # Asserts properties on thing_10 have been updated
+ assert_equal 'Catch Basin Drain', thing10.name
+ assert_equal BigDecimal(36.75, 16), thing10.lat
+ assert_equal BigDecimal(-121.40, 16), thing10.lng
+ end
+end
diff --git a/test/mailers/devise_mailer_test.rb b/test/mailers/devise_mailer_test.rb
new file mode 100644
index 000000000..0655cadbe
--- /dev/null
+++ b/test/mailers/devise_mailer_test.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class DeviseMailerTest < ActionMailer::TestCase
+ test 'reset_password_instructions' do
+ @user = users(:erik)
+
+ email = DeviseMailer.reset_password_instructions(@user, '1234').deliver_now
+
+ assert_not ActionMailer::Base.deliveries.empty?
+ assert_equal ['no-reply@sfwater.org'], email.from
+ assert_equal ['erik@example.com'], email.to
+ assert_equal 'Adopt-a-drain San Francisco reset password instructions', email.subject
+ end
+end
diff --git a/test/mailers/previews/thing_mailer_preview.rb b/test/mailers/previews/thing_mailer_preview.rb
new file mode 100644
index 000000000..0c0ae51e8
--- /dev/null
+++ b/test/mailers/previews/thing_mailer_preview.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+# Preview all emails at http://localhost:3000/rails/mailers/thing_mailer
+class ThingMailerPreview < ActionMailer::Preview
+end
diff --git a/test/mailers/thing_mailer_test.rb b/test/mailers/thing_mailer_test.rb
new file mode 100644
index 000000000..7ef6f4dec
--- /dev/null
+++ b/test/mailers/thing_mailer_test.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class ThingMailerTest < ActionMailer::TestCase
+ test 'first_adopted_confirmation' do
+ @user = users(:erik)
+ @thing = things(:thing_1)
+ @thing.user = @user
+
+ email = ThingMailer.first_adoption_confirmation(@thing).deliver_now
+
+ assert_not ActionMailer::Base.deliveries.empty?
+ assert_equal ['info@sfwater.org'], email.from
+ assert_equal ['erik@example.com'], email.to
+ assert_equal 'Thanks for adopting a drain, Erik!', email.subject
+ end
+
+ test 'second_adoption_confirmation' do
+ @user = users(:erik)
+ @thing = things(:thing_1)
+ @thing.user = @user
+
+ email = ThingMailer.second_adoption_confirmation(@thing).deliver_now
+
+ assert_not ActionMailer::Base.deliveries.empty?
+ assert_equal ['info@sfwater.org'], email.from
+ assert_equal ['erik@example.com'], email.to
+ assert_equal 'Thanks for adopting another drain, Erik!', email.subject
+ end
+
+ test 'third_adoption_confirmation' do
+ @user = users(:erik)
+ @thing = things(:thing_1)
+ @thing.user = @user
+
+ email = ThingMailer.third_adoption_confirmation(@thing).deliver_now
+
+ assert_not ActionMailer::Base.deliveries.empty?
+ assert_equal ['info@sfwater.org'], email.from
+ assert_equal ['erik@example.com'], email.to
+ assert_equal 'We really do love you, Erik!', email.subject
+ end
+
+ test 'thing_update_report' do
+ admin1 = users(:admin)
+ admin2 = users(:admin)
+ admin2.update(email: 'admin2@example.com')
+ email = nil
+ deleted_thing = things(:thing_1)
+
+ assert_emails(1) do
+ email = ThingMailer.thing_update_report([deleted_thing], [], []).deliver_now
+ end
+
+ assert_includes email.to, admin1.email
+ assert_includes email.to, admin2.email
+
+ assert_equal email.subject, 'Adopt-a-Drain San Francisco import (1 adopted drains removed, 0 drains added, 0 unadopted drains removed)'
+ end
+end
diff --git a/test/models/thing_test.rb b/test/models/thing_test.rb
new file mode 100644
index 000000000..1e8f23a59
--- /dev/null
+++ b/test/models/thing_test.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class ThingTest < ActiveSupport::TestCase
+ test 'name profanity filter' do
+ t = things(:thing_1)
+ t.name = 'profane aids'
+ assert_raises ActiveRecord::RecordInvalid do
+ t.save!
+ end
+ end
+
+ test 'detail link' do
+ t = things(:thing_1)
+ assert_nil t.detail_link
+ t.system_use_code = 'MS4'
+ assert_equal 'http://sfwater.org/index.aspx?page=399', t.detail_link
+ end
+
+ test 'adopted scope' do
+ t = things(:thing_1)
+ assert_equal 0, Thing.adopted.count
+ t.user = users(:erik)
+ t.save!
+ assert_equal 1, Thing.adopted.count
+ end
+
+ test 'display_name' do
+ t = things(:thing_1)
+ t.name = 'foobar'
+ assert_equal 'foobar', t.display_name
+ t.user = users(:erik)
+ t.adopted_name = 'baz'
+ assert_equal 'baz', t.display_name
+ end
+end
diff --git a/test/models/user_test.rb b/test/models/user_test.rb
new file mode 100644
index 000000000..0e18079b8
--- /dev/null
+++ b/test/models/user_test.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'test_helper'
+
+class UserTest < ActiveSupport::TestCase
+ test 'removing non digits from phone numbers' do
+ user = users(:erik)
+ user.sms_number = '1234croehu567890'
+ user.voice_number = '109876oecruh4321'
+ user.remove_non_digits_from_phone_numbers
+ assert_equal '1234567890', user.sms_number
+ assert_equal '1098764321', user.voice_number
+ end
+
+ test 'name' do
+ user = users(:erik)
+ assert_equal 'Erik Michaels-Ober', user.name
+ user.last_name = ''
+ assert_equal 'Erik', user.name
+ end
+
+ test 'last name is required for new users' do
+ user = User.new(first_name: 'Erik')
+ user.save
+ assert_equal ["can't be blank"], user.errors[:last_name]
+ end
+
+ # requirement was added later
+ test 'last name not required for existing users' do
+ user = users(:erik)
+ user.last_name = ''
+ user.save!
+ assert_equal [], user.errors[:last_name]
+ end
+end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 6bf1f0f16..8d79d2c8c 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,14 +1,17 @@
+# frozen_string_literal: true
+
ENV['RAILS_ENV'] ||= 'test'
require 'simplecov'
require 'coveralls'
+require 'minitest/mock'
SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
SimpleCov.start('rails') do
- minimum_coverage(97.19)
+ minimum_coverage(97)
end
-require File.expand_path('../../config/environment', __FILE__)
+require File.expand_path('../config/environment', __dir__)
require 'rails/test_help'
require 'webmock/minitest'